find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Sie können es einfach umschalten, um einzuschließen, was Sie komprimieren möchten ( -name '*.txt -or -name '*.html
usw.), anstatt wie jetzt, mit Ausnahme einiger Dateien (bereits komprimierte, Backup- und temporäre Dateien).
Behandelt auch Leerzeichen im Dateinamen.
Wechsel gzip
auf echo gzip
zum Testen. Oder überspringen Sie den -exec-Teil alle zusammen.
Edit: Oh, ich habe vergessen zu erwähnen, dass dies nicht prüft, ob es <target>.gz
bereits existiert. Dies kann ein Problem sein oder auch nicht.
Edit2: Ok, hier geht es mit etwas, das nach vorhandenen Dateien sucht . Wenn das gewünscht sein mag. Verzeihen Sie die Oneliney-Ness.
while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz"; fi done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))
Mein find
-foo ist vielleicht nicht das, was es sein könnte, es kann sehr gut möglich sein, direkt in find zu überspringen.
*.*
inls
?