
Eu tenho uma pasta all_folders
que contém 5 pastas:
./all_folders
./all_folders/folder1
./all_folders/folder2
./all_folders/folder3
./all_folders/folder4
./all_folders/folder5
Posso compactar todas essas pastas usando um único comando de uma só vez? Quero estar no all_folders
diretório e executar o comando para que pastas individuais neste diretório sejam compactadas.
A saída esperada é
quando eu faço
ls
in all_folders
, então eu deveria ter 10 diretórios. 5 não compactados e 5 compactados.
Responder1
cd
em all_folders
, então execute
for i in folder1 folder2 folder3 folder4 folder5; do tar czf $i.tar.gz $i; done
Responder2
Não está claro o que você está tentando realizar. Estou executando o caso de uso em que apenas subdiretórios devem ser compactados aqui.
Primeiro, vá para o diretório que contém a coleção de diretórios e depois:
find -maxdepth 1 -type d | {
while read dir; do
if [ ! "x${dir#*/}" = "x." ]; then
tar cJf ${dir#*/}.tar.xz ${dir#*/};
fi;
done
}
Isso funciona bem com zsh
. Para testar as coisas, coloque um echo
infront de tar
, para ver se o comando dá check-out, etc.
No entanto, fazer uma coleção de arquivos como esta geralmente não é desejável. Normalmente você deseja compactar toda a coleção, usar compactação transparente da unidade em que esses arquivos residem ou usar compactação de transporte ( X-DEFLATE
com HTTP, por exemplo).
Esteja ciente de que você não terminará com um "diretório compactado", mas com um "arquivo compactado". Essas coisas não são intercambiáveis, pois os arquivos são arquivos em si, enquanto os diretórios são merosinodedatagramas.
Responder3
tar -zcvf archive.tar.gz directory/
Isso dirá ao tar para c (criar) um arquivo a partir dos arquivos no diretório (tar é recursivo por padrão), compactá-lo usando o algoritmo z (gzip), armazenar a saída como um (arquivo) chamado archive.tar.gz e v (detalhadamente) listar todos os arquivos adicionados ao arquivo.
Para descompactar e descompactar o arquivo no diretório atual você usaria
tar -zxvf archive.tar.gz