¿Cómo comprimo todos los archivos de un directorio en su propio alquitrán mientras preserva el nombre de cada archivo?
es decir, file1.out file2.out
->
file1.out.tar.gz file2.out.tar.gz
Poner cada archivo en un archivo tar separado no tiene ningún sentido en este escenario. Puede usar gzip
para comprimirlos directamente:
gzip *
resultará en file1.out.gz
, file2.out.gz
etc.
Solo lo usaría tar
si necesitara un archivo comprimido como un solo archivo.
Si necesita un archivo tar para cada archivo, puede crearlo así:
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 \;
Para construir sobre la respuesta de @ SvenW (que solo funcionará en el directorio actual), si tiene una ENORME cantidad de archivos o desea hacerlo en una estructura de directorio recursiva, también puede usar
y si necesita colocar la salida en un directorio diferente (en este ejemplo
../target
) y no desea eliminar los originales, puede hacer algo como:fuente
find . -type f -exec gzip {} \;
será suficiente. El segundo código fallará con nombres de archivos que contengan espacios y similares.{}
como una costumbre). Sin embargo, otros ya los han publicado como respuestas a su pregunta.find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;
Prueba este:
fuente