mittels diff mehrere Dateien vergleichen

2TAKTER

2TAKTER

Foren As
Hi
also ich habe die Datei "FILE.DEFAULT.RC" welche ich gerne mit den dateien
  • FILE.1.RC
  • FILE.2.RC
  • FILE.3.RC
  • FILE.4.RC
  • usw

vergleichen möchte. Eine statische Eingabe aller Dateien möchte ich umgehen, da die Liste der zu vergleichenden Dateien sich dynamisch erweitern lassen soll. Gibt es eine Option bei diff? Die man-Page hilft mir nicht genau das zu finden was ich suche.
 
wie wäre es denn mit nem shellscript ?

wenn ich das richtig verstanden habe dann sind die datein alle in einem ordner du machst ein ls dann lässt du zählen wieviel da drin sind übergibst den wert deinem shellscript und das läuft dann per schleife durch und vergleicht
diff *.i.rc mit *.i+1.rc

zumindest ist das ein ansatz wie man das lösen kann
 
for-loop:
Code:
for a in *.RC ; do diff FILE.DEFAULT.RC $a; done
 
naja ich habe das problem, dass ich nicht hoch zählen will... d.h. die zahlen müssen nicht unbedingt chronologisch kommen. es kann z.B. vorkommen, dass es zwar eine .5. gibt aber keine .6. sondern erst wieder eine .14. oder so
und es befinden sich dateien in dem ordner, die nicht überprüft werden sollen.

for-loop:
Code:
for a in *.RC ; do diff FILE.DEFAULT.RC $a; done

die Lösung klappt nicht wirklich. Dann sagt er mir am laufenden Band
Code:
diff: FILE.DEFAULT.RC: No such file or directory

momentan sind zwei Dateien im Zielordner (FILE.1.RC und FILE.5.RC) welche mit der DEFAULT verglichen werden sollen.


EDIT:
Code:
diff /home/ich/FILE.DEFAULT.RC /home/ich/bla/FILE.*.RC
wieso klappt das nicht?
Code:
diff: extra operand /home/ich/bla/FILE.5.RC
d.h. doch dass die Dateien gefunden werden oder?
 
Zuletzt bearbeitet:
Code:
diff /home/ich/FILE.DEFAULT.RC /home/ich/bla/FILE.*.RC
wieso klappt das nicht?
Code:
diff: extra operand /home/ich/bla/FILE.5.RC
d.h. doch dass die Dateien gefunden werden oder?

Das heißt, das hier ein Parameter zuviel ist, da diff normalerweise nur zwei Parameter erwartet. Du musst zusätzlich die Optionen "--from-file" oder "--to-file" verwenden, wenn du eine Datei mit mehreren anderen vergleichen willst.

Wirf einfach einen Blick in die diff-Manpage:
diff [OPTION]... FILES
[...]
FILES are ‘FILE1 FILE2’ or ‘DIR1 DIR2’ or ‘DIR FILE...’ or ‘FILE...
DIR’. If --from-file or --to-file is given, there are no restrictions
on FILES.

Gruß,
Philip
 
Vielen Dank :)
Mit --from-file klappt das wunderbar.
Jetzt habe ich nur noch ein Problem: Wie kann ich mir die Datei anzeigen lassen was aus welcher stammt.
">" zeigt zwar an, dass dies die veränderte ist, aber nicht welche :hilfe2:
 
Jetzt habe ich nur noch ein Problem: Wie kann ich mir die Datei anzeigen lassen was aus welcher stammt.
">" zeigt zwar an, dass dies die veränderte ist, aber nicht welche :hilfe2:

Ich habe leider keine diff-Option gefunden die genau das macht was du willst. Soweit ich das sehe hast du zwei Möglichkeiten:
  1. du verwendest ein anderes Ausgabe-Format (z.B. Option -u oder -c) bei dem der Dateiname mit ausgegeben wird (siehe diff-manpage) oder
  2. du schreibst dir wie von foexle und P17 vorgeschlagen ein Shell-Skript, das in einer Schleife die Dateien durchläuft und mit diff vergleicht. Dann kannst du auch die entsprechenden Dateinamen mit ausgeben.

Zur 2. Möglichkeit hier mal eine Vorlage von mir, die als ersten Parameter die Datei erwartet, die mit den nachfolgenden Dateien verglichen werden soll.
Code:
#!/bin/bash

file1=$1
shift
IFS=$'\t'
files=$*

for file in $files ; do
  if [ "$file" == "$file1" ] ; then
    continue
  fi
  echo "<<< $file1"
  echo ">>> $file"
  diff "$file1" "$file"
done
Kopiere das Skript und speichere es z.B. unter dem Namen "mdiff.sh" ab. Du kannst es dann wie folgt ausführen:
Code:
./mdiff.sh FILE.DEFAULT.RC *.RC
Damit dieses Beispiel funktioniert müssen das Skript und die zu vergleichenden Dateien natürlich im aktuellen Verzeichnis liegen.

Gruß,
Philip
 
Zuletzt bearbeitet:

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Bash - Zwei Binärdateien vergleichen (SQL Diff)

Mit VIM Dateien vergleichen und Unterschiede sichtbar machen

Samba 4.1.9 mit Bind 9.9.4

SED: Zu bearbeitende Dateien aus Textfile einlesen

Zurück
Oben