如何排除tar的绝对路径?

时间:2010-06-30 21:49:51

标签: linux bash tar

我正在运行一个PHP脚本,它为我提供了我想要的文件的绝对路径。这是我的语法:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls

当我解开它时,它会创建文件的绝对路径。如何让/path显示其下的所有内容?

4 个答案:

答案 0 :(得分:51)

您错误地使用了-C开关,该开关用于更改目录。所以你需要做的是:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls

或者如果您想打包/www/path下的所有内容:

tar -cf tarname.tar -C /www/path .

您可以多次使用-C切换。

答案 1 :(得分:50)

如果要删除文件名的前n个前导组件,则需要strip-components。所以在你的情况下,在提取时,做

tar xvf tarname.tar --strip-components=2

man page列出了tar多个选项,包括此选项。某些早期版本的tar使用--strip-path代替此操作。

答案 2 :(得分:10)

对我而言,以下效果最佳:

tar xvf some.tar --transform 's?.*/??g'

--transform参数是sed的替换正则表达式,每个提取的文件路径都被馈送到该正则表达式。与--strip-components不同,它将删除所有路径信息,而不仅仅是固定数量的组件。

答案 3 :(得分:0)

如果您不知道路径中有多少组件,可以试试这个:

DIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)