Risposte:
Mettere ogni file in un file tar separato non ha alcun senso in questo scenario. Puoi usarli gzip
per comprimerli direttamente:
gzip *
comporterà file1.out.gz
, file2.out.gz
ecc.
Utilizzeresti tar
solo 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 {} \;