2016-05-15 19 views
1

Ich habe so ein Bash-Skript. Ich möchte gzip alle .ppm Dateien unter einem Verzeichnis in ein anderes Verzeichnis. Aus diesem Grund habe ich so ein Bash-Skript geschrieben:/usr/bin/find: Argumentliste zu lang für Loop-Bash-Skript

cd /export/students/sait/12-may 
for next_file in $(find . -type f ! -name *.ppm) 
do 
/bin/gzip -f -c $next_file > /export/students/sait/12-may-yedek/$next_file.gz 
done 

Wenn ich dieses Skript ausführen, ich eine solche Fehlermeldung erhalten:

/usr/bin/find: Argument list too long 

Wie kann ich dieses Problem beheben?

+0

Wenn Sie aus irgendeinem Grund Schleife benötigen, siehe [Bash: iterate über eine Liste von Dateien mit Leerzeichen] (http://stackoverflow.com/a/7039579/3076724). d. h. Finde ... -print0 | während IFS = read -r -d $ '\ 0' Datei; echo "$ file"; done' – BroSlow

Antwort

6

Zitieren Sie diesen Teil: , um Dateinamen Globbing zu verhindern, und entfernen Sie auch die !, wie Sie Dateien mit .ppm Erweiterung finden möchten, nicht umgekehrt.

find . -type f -name '*.ppm' 


Statt eine Schleife laufen Sie es mit einzelnen find Befehl tun könnte, die Leerraum Sicherheit bieten würde:

find /export/students/sait/12-may -type f -name '*.ppm' -exec sh -c '/bin/gzip -f -c "$0" > "$0".gz' {} \; 
+0

Danke. Aber zu diesem Zeitpunkt erhält es andere Dateien, die nicht die Erweiterung .ppm haben. – yusuf

+0

@yusuf: Sie haben '!' Verwendet, um die Logik umzukehren. – Jahid

+0

Danke. Es funktioniert. – yusuf