我正在运行一个PHP脚本,让我得到我想打包的文件的绝对路径。这是我所拥有的语法:
tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls
当我解压缩文件时,它会创建到文件的绝对路径。如何只获取 /path
并显示其中的所有内容?如果你想要删除文件名的前n个组件,需要使用strip-components
。所以在你的情况下,在提取时,执行以下操作:
strip-components
是用来去掉路径中前几个组件的选项。tar xvf tarname.tar --strip-components=2
man页面列出了tar
的许多选项,包括这个。一些早期版本的tar
使用--strip-path
代替此操作。
您错误地使用了-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
开关。对我来说,以下方法最有效:
tar xvf some.tar --transform 's?.*/??g'
--transform
参数是 sed 的替换正则表达式,它将接收每个提取的文件路径。与 --strip-components
不同,它会移除所有路径信息,而不仅仅是固定数量的组件。
--transform
参数是一个替换正则表达式,用于处理每个提取出的文件路径。与 --strip-components
不同,它会移除所有路径信息,而不仅仅是固定数量的组件。
--transform
仅适用于GNU tar。BSD tar的等效选项是-s
,后跟/old/new/[gps]
模式。使用这种方式,正如你所说,它会扁平化目录结构,但在实际应用中可能没��太大用处。 - MeowDIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)
tar -tvf tarname.tar
命令,你会发现这不是一个文件。 - Johnny Baloney