从 tar 中提取文件

从 tar 中提取文件
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

相关内容