
Tengo una carpeta all_folders
que contiene 5 carpetas:
./all_folders
./all_folders/folder1
./all_folders/folder2
./all_folders/folder3
./all_folders/folder4
./all_folders/folder5
¿Puedo comprimir todas estas carpetas usando un solo comando a la vez? Quiero estar en all_folders
el directorio y luego ejecutar el comando para que las carpetas individuales en este directorio se compriman.
El resultado esperado es
Cuando lo hago
ls
en all_folders
, entonces debería tener 10 directorios. 5 sin comprimir y 5 comprimidos.
Respuesta1
cd
en all_folders
, luego corre
for i in folder1 folder2 folder3 folder4 folder5; do tar czf $i.tar.gz $i; done
Respuesta2
No está claro lo que estás tratando de lograr. Me estoy quedando sin el caso de uso en el que aquí solo se deben comprimir los subdirectorios.
Primero, vaya al directorio que contiene la colección de directorios y luego:
find -maxdepth 1 -type d | {
while read dir; do
if [ ! "x${dir#*/}" = "x." ]; then
tar cJf ${dir#*/}.tar.xz ${dir#*/};
fi;
done
}
Esto funciona bien con zsh
. Para probar cosas, coloque un echo
delante de tar
para ver si el comando funciona, etc.
Sin embargo, normalmente no es deseable hacer una colección de archivos como esta. Por lo general, querrás comprimir toda la colección, usar una compresión transparente de la unidad en la que residen estos archivos o usar compresión de transporte ( X-DEFLATE
con HTTP, por ejemplo).
Tenga en cuenta que no terminará con un "directorio comprimido" sino con un "archivo comprimido", estas cosas no son intercambiables, ya que los archivos son archivos en sí mismos, mientras que los directorios son merosinododatagramas.
Respuesta3
tar -zcvf archive.tar.gz directory/
Esto le indicará a tar que c (cree) un archivo a partir de los archivos en el directorio (tar es recursivo de forma predeterminada), lo comprimirá usando el algoritmo z (gzip), almacenará la salida como un (archivo) llamado archive.tar.gz y v (detalladamente) enumera todos los archivos que agrega al archivo.
Para descomprimir y descomprimir el archivo en el directorio actual, usaría
tar -zxvf archive.tar.gz