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
这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 \;