Как рекурсивно сжать все файлы в целевой директории?

Я хотел бы знать, какую команду использовать для рекурсивного извлечения всех файлов в целевом каталоге? Я попытался использовать команду unzip, но она не сработала.

Я пробовал команду из Unzip все файлы ZIP в целевой папке?

2 ответа

Решение

Используя команды ниже. замещать <path_of_your_zips> с путем к вашим файлам ZIP и <out> с вашей целевой папкой:

  • Для файлов GZ

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

    или же

    find <path_of_your_zips> -type f -name "*.gz" -print0 | xargs -0 -I{} tar xf {} -C <out>
    
  • Для ZIP файлов

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

    или же

    find <path_of_your_zips> -type f -name "*.zip" -print0 | xargs -0 -I{} unzip {} -d <out>
    

gunzip имеет -r вариант. От 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 ).

Итак, если вы хотите gunzip все сжатые файлы (gunzip в настоящее время может распаковывать файлы, созданные с помощью gzip, zip, сжатие, сжатие -H или pack) внутри каталога /foo/bar и все его подкаталоги:

gunzip -r /foo/bar

Это будет обрабатывать имена файлов с пробелами тоже.

Другие вопросы по тегам