Como faço para compactar todos os arquivos recursivamente em um diretório de destino?

Respostas:

15

Usando os comandos abaixo. Substitua <path_of_your_zips>pelo caminho dos seus arquivos ZIP e <out>pela sua pasta de destino:

  • Para arquivos GZ

    find <path_of_your_zips> -type f -name "*.gz" -exec tar xf {} -C <out> \;
    

    ou

    find <path_of_your_zips> -type f -name "*.gz" -print0 | xargs -0 -I{} tar xf {} -C <out>
    
  • Para arquivos ZIP

    find <path_of_your_zips> -type f -name "*.zip" -exec unzip {} -d <out> \;
    

    ou

    find <path_of_your_zips> -type f -name "*.zip" -print0 | xargs -0 -I{} unzip {} -d <out>
    
AB
fonte
Isso funciona com arquivos .gz?
User2028856
1
melhorado, agora sim :)
AB
2
Por que não -execgosta find . -type f -name "*.gz" -exec tar xzf {} -C <out> \;?
Elliott Frisch
1
trabalhar apenas para tarball arquivos, não para únicos g-zipado
Covich
1
Os arquivos compactados com gz que não são arquivos tar apresentam este erro:tar: This does not look like a tar archive
Pausado até novo aviso.
64

gunziptem -ropção. De man gunzip:

   -r --recursive
          Travel  the directory structure recursively. If any of the 
file names specified on the command line are directories, gzip 
will descend into the directory and compress all the files it finds
there (or decompress them in  the  case  of gunzip ).

Portanto, se você deseja gunziptodos os arquivos compactados ( gunzipatualmente pode descomprimir arquivos criados por gzip, zip, compactar, compactar -H ou pacote) dentro do diretório /foo/bare de todos os seus subdiretórios:

gunzip -r /foo/bar

Isso também manipula nomes de arquivos com espaços.

heemail
fonte