tar -xvf company_raw_2012-03-16.tgz --directory=/root/test --strip-components=4
我正在使用以下 tar 选项来删除前导目录,并且它可以按预期工作。
--strip-components NUMBER
strip NUMBER of leading components from file names before extraction
只有当我知道将有 4 个子目录时,它才有效。我有 tar 文件,但我不知道里面会有 2、3 还是 4 个文件夹。如何剥离整个路径并提取给定“目录”路径中的文件。
答案1
您有两个选择:先读取 tar 文件(tar tf)并计算输出中的 /,然后提取;或者先提取,然后将所有文件移回上部并删除空目录。
以下是实现第一种方法的一种方法:
tar tf archive.tgz | tail -n1 | perl -ne '@l=split(/\//);print "$#l\n"'
其他方法留给读者练习:)
答案2
您可以像平常一样提取 tar 文件,而无需添加开关--strip-components
。然后,您可以使用以下 find 命令将所有提取的文件移动到某个目标目录:
$ find <your_extracted_dir> -type f -exec mv -t /path/to/dest/dir {} \;
答案3
tar --transform 's#.*/\([^/]*\)$#\1#' -xvf <filename>
这将在文件名上使用正则表达式并从文件名中删除所有路径,以便所有文件都被提取到当前目录。
答案4
--strip-components
在发布解压文件之前,请使用以下命令检查 tarball :
tar -tzf filename.tar.gz | less