find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
-name '*.txt -or -name '*.html
Bazı dosyalar (zaten sıkıştırılmış, yedek ve geçici dosyalar) hariç olmak üzere, şimdi olduğu gibi sıkıştırmak istediğiniz şeyi ( vb.) Dahil etmek için kolayca değiştirebilirsiniz .
Dosya adındaki boşlukları da gayet iyi işler.
Değişim gzip
için echo gzip
test için. Veya -exec bölümünü birlikte atlayın.
Düzenleme: Oh, bu <target>.gz
zaten var olup olmadığını kontrol olmadığını belirtmeyi unuttum . Bu bir sorun olabilir veya olmayabilir.
Edit2: Tamam, burada mevcut dosyayı kontrol eden bir şeyle gidiyoruz. Bu istenebilirse. Bağımlılığı affedin.
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 '*[~#]' \))
Benim find
-foo belki ne olabilir, doğrudan bulmak için atlamak mümkün olabilir.
*.*
içindels
?