Подпапки Untar с исходным содержимым папки в linux

См. Здесь: https://github.com/core-process/linux-unattended-installation/

Этот проект предоставляет все необходимое для создания автоматической установки минимальной установки Linux, в то время как минимальная означает наиболее легкую установку, включая службу OpenSSH и Python, которую вы можете получить из стандартного установщика дистрибутива Linux. Идея заключается в том, что вы будете выполнять все дальнейшее развертывание своих конфигураций и служб с помощью Ansible или аналогичных инструментов после завершения минимальной настройки.

7
12.10.2016, 17:12
2 ответа

попробуйте

find . -type f -name "*.tar.gz" -execdir tar -xvzf {} \;

в соответствии с команда man find

-execdir;

команда -execdir {} +

Like - exec, но указанная команда запускается из подкаталога, содержащего соответствующий файл, который обычно не является каталогом в , который вы начали поиск.

5
27.01.2020, 20:18

Вот один из способов (предполагается, что вы используете bash):

$ shopt -s globstar   
$ for tar in /Landsat_Data/**/*.tar.gz; do 
   tar xvzf "$tar" --one-top-level="$(dirname "$tar")"/"$(basename "$tar" .tar.gz)"
  done

Опция globstar заставляет ** рекурсивно сопоставлять 0 или более файлов и каталогов, поэтому /Landsat_Data/**/*. tar.gz будет соответствовать всем *tar.gz файлам в любом подкаталоге /Landsat_Data/. Команда dirname печатает имя каталога на входе, а basename - только имя с расширением, которое вы ему задали (здесь tar.gz удалено. Так, например:

$ dirname /Landsat_Data/Site2/LE70930862008092-SC20160107074735.tar.gz
/Landsat_Data/Site2
$ basename /Landsat_Data/Site2/LE70930862008092-SC20160107074735.tar.gz .tar.gz
LE70930862008092-SC20160107074735

О --one-top-level рассказано в man tar:

   --one-top-level[=DIR]
          Extract all files into DIR, or, if used without argument, into a
          subdirectory  named by the base name of the archive (minus stan‐
          dard compression suffixes recognizable by --auto-compress).

Взятые вместе, они сделают то, что вы хотите.


Если ваш tar не имеет этой опции, вы можете сделать это вручную:

$ shopt -s globstar   
$ for tar in /Landsat_Data/**/*.tar.gz; do 
    newdir="$(dirname "$tar")"/"$(basename "$tar" .tar.gz)"
    mkdir "$newdir"
    tar xvzf "$tar" -C "$newdir"
  done 
2
27.01.2020, 20:18

Теги

Похожие вопросы