我正在运行一个PHP脚本,它为我提供了我想要的文件的绝对路径。这是我的语法:
tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls
当我解开它时,它会创建文件的绝对路径。如何让/path
显示其下的所有内容?
答案 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)