find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Você pode alternar facilmente para incluir o que deseja compactar ( -name '*.txt -or -name '*.html
etc.) em vez de agora, excluindo alguns arquivos (arquivos já compactados, de backup e temporários).
Também manipula espaços no nome do arquivo.
Mude gzip
para echo gzip
para teste. Ou pule a parte -exec todos juntos.
Edit: Ah, eu esqueci de mencionar que isso não verifica se <target>.gz
já existe. Isso pode ou não ser um problema.
Edit2: Ok, aqui vamos nós com algo que verifica o arquivo existente. Se isso pode ser desejado. Perdoe o on-line-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 '*[~#]' \))
My find
-foo talvez não seja o que poderia ser, pode muito bem ser possível pular diretamente na busca.
*.*
dentrols
?