find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Puede cambiarlo fácilmente para incluir lo que desea comprimir ( -name '*.txt -or -name '*.html
etc.) en lugar de como ahora, excluyendo algunos archivos (ya comprimidos, archivos de respaldo y temporales).
Maneja espacios en el nombre de archivo muy bien también.
Cambiar gzip
a echo gzip
para pruebas. O omita la parte -exec por completo.
Editar: Oh, olvidé mencionar que esto no verifica si <target>.gz
ya existe. Esto puede o no ser un problema.
Edit2: Ok, aquí vamos con algo que verifica el archivo existente. Si eso puede ser deseado. Perdón por la 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 '*[~#]' \))
My find
-foo tal vez no sea lo que podría ser, es muy posible que se salte directamente en find.
*.*
enls
?