Risposte:
Mettere ogni file in un file tar separato non ha alcun senso in questo scenario. Puoi usarli gzipper comprimerli direttamente:
gzip *
comporterà file1.out.gz, file2.out.gzecc.
Utilizzeresti tarsolo se avessi bisogno di un archivio compresso come un singolo file.
Se hai bisogno di un archivio tar per ogni file, puoi crearlo in questo modo:
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
Per costruire sulla risposta di @ SvenW (che funzionerà solo sulla directory corrente), se hai un numero ENORME di file o vuoi farlo su una struttura di directory ricorsiva puoi anche usare
find . -type f -exec gzip \{\} \;
e se devi inserire l'output in una directory diversa (in questo esempio ../target) e non vuoi rimuovere gli originali, puoi fare qualcosa del tipo:
find . -type f -print | while read fname ; do
mkdir -p "../target/`dirname \"$fname\"`"
gzip -c "$fname" > "../target/$fname.gz"
done
find . -type f -exec gzip {} \;sarà sufficiente. Il secondo codice fallirà con nomi di file contenenti spazi e simili.
{}come una forza dell'abitudine). Altri hanno già pubblicato quelli come risposte alla tua domanda, tuttavia.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;