kleines vergleichsproblem

J

jurgen_xf

Mitglied
Hallo
Ich möchte eine Liste mit Dateinamen mit einem Ordnerinhalt vergleichen und die Dateien, die sich nicht im Ordner befinden in eine logdatei wegschreiben.

Code:
folder=/home/diff
List='ACD ABF EHX'
for i in $List; 
   do   
   diff $folder *${i}*;  
   done

So fast funktioniert es,- ich bekomme im Terminal die ausgabe:
(z.B *ACD*: No such file or directory) aber auch eine Fehlermeldung:
"two filename arguments required"?!?!
Wie kann ich die Dateinamen, die in dem Order fehlen in eine logfile wegschreiben und zwar so dass nur der Name darinsteht, wie er in der $List definiert ist (ohne *)???

Besten Dank für Vorschläge
 
Was soll "diff" hier genau bringen? Versuch doch mal so etwas:
Code:
folder=/home/diff
List='ACD ABF EHX'
for i in $List; do   
   [ -f "$folder/$i" ] || echo $i  
done >log
Gruss, A.
 
Was soll "diff" hier genau bringen? Versuch doch mal so etwas:
Code:
folder=/home/diff
List='ACD ABF EHX'
for i in $List; do   
   [ -f "$folder/$i" ] || echo $i  
done >log
Gruss, A.

hier gibt er letztendlich nur die Liste untereinander aus, die ich vorher schon definiert habe. Ich möchte aber Dateien finden, die in der List stehen aber sich nicht im Verzeichnis befinden, dachte dafür ist diff relativ gut geeignet

Gruss J.
 
Hast du das auch getestet? mit
Code:
[ -f "$folder/$i" ] || echo $i
sollte die Shell überprüfen, ob die aktuelle Datei $i im Verzeichnis $folder existiert, und nur wenn das nicht der Fall ist, den Dateinamen ausgeben.

Diff kannst du verwenden, um den Inhalt zweier Dateien (oder Verzeichnisse) zu vergleichen; ein Vergleich einer Liste (als String) mit einem Verzeichnis funktioniert damit m.E. wohl eher nicht ...

Gruss, A.
 
Hast du das auch getestet? mit
Code:
[ -f "$folder/$i" ] || echo $i
sollte die Shell überprüfen, ob die aktuelle Datei $i im Verzeichnis $folder existiert, und nur wenn das nicht der Fall ist, den Dateinamen ausgeben.

Diff kannst du verwenden, um den Inhalt zweier Dateien (oder Verzeichnisse) zu vergleichen; ein Vergleich einer Liste (als String) mit einem Verzeichnis funktioniert damit m.E. wohl eher nicht ...

Gruss, A.
Vielen Dank für die Hilfe
Ich habe es getestet und die ausgabe ist exakt die definierte $List. Der Dateiname, den ich in der Liste definiert habe is nicht der vollständige Name, kann es daran liegen dass es nicht funktioniert (habe es auch mit *${i}* versucht aber funktioniert auch nicht so wirklich) ???
Bspl.: List='ACD' -> Dateiname im Verzeichnis : 20110620_ACD_INCOMING.txt
 
OK, deine $List enthält also nicht die vollständigen Namen, sondern nur Substrings ... damit funktioniert der o.a. Ansatz natürlich nicht; dann könnte so etwas eher das Gewünschte liefern:
Code:
folder=/home/diff
List='ACD ABF EHX'
for i in $List; do   
   ls $folder/*$i* >/dev/null 2>&1 || echo $i  
done >log
Gruss, A.
 
OK, deine $List enthält also nicht die vollständigen Namen, sondern nur Substrings ... damit funktioniert der o.a. Ansatz natürlich nicht; dann könnte so etwas eher das Gewünschte liefern:
Code:
folder=/home/diff
List='ACD ABF EHX'
for i in $List; do   
   ls $folder/*$i* >/dev/null 2>&1 || echo $i  
done >log
Gruss, A.
Genau das habe ich gesucht. Vielen Dank für die Hilfe!!!

Gruss J.
 

Ähnliche Themen

HandbrakeCLI Shell Skript

./easy-wi_install.sh install Script

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Akonadi startet nicht mehr

dovecot und postfix Konfiguration Problem

Zurück
Oben