current directory
            ├──Folder1
                ├── sub_folder1
            ├──Folder2
                ├── sub_folder21
                ├── sub_folder22
                      ├── sub_folder221
            ├──Folder3
                ├── sub_folder31
            ├──Folder4
                ├── sub_folder41
            ├──Folder5
                ├── sub_folder51

Учитывая вышеприведенную иерархию подпапок папок, которая была сжата в один файл tgz, мне нужно извлечь все файлы, присутствующие во всех подпапках папок, в один и только выходной каталог.
Фактически все файлы существуют в самом глубоком пути каждой комбинации подпапок папки. например, в sub_folder1, sub_folder2, sub_folder221 и т. д. Я пробовал со следующим:

find . -name '*.tar.gz' -execdir tar -xzvf '{}' \;

... но это выводит точную иерархию файлов и подпапок, когда мне нужно, чтобы все файлы во всех подпапках были извлечены в одну выходную папку /path/to/one/folder

1 ответ1

1

execdir - совершенно неправильная команда для вашей задачи, она будет изменена на каталог файла.

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

Также есть опция -C для изменения tar в этом каталоге.

find . -name '*.tar.gz' -exec tar xzvfC '{}' /path/to/one/folder \;

или же

find . -name '*.tar.gz' -exec tar -xzvf '{}' -C /path/to/one/folder \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .