如何排除tar的绝对路径?

Ang*_*eno 35 linux bash tar

我正在运行一个PHP脚本,它让我获得了我想要的文件的绝对路径.这是我的语法:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls
Run Code Online (Sandbox Code Playgroud)

当我解开它时,它会创建文件的绝对路径.我如何才能获得它/path下面的所有内容?

Joh*_*ney 51

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

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls
Run Code Online (Sandbox Code Playgroud)

或者如果你想打包下的所有东西/www/path:

tar -cf tarname.tar -C /www/path .
Run Code Online (Sandbox Code Playgroud)

您可以-C多次使用开关.

  • 当我尝试这样做时,我将一个名为dot的文件添加到我的存档中.tar -cf tarname.tar some_file_in_current_folder -C/some/path. (4认同)

ire*_*ses 50

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

tar xvf tarname.tar --strip-components=2
Run Code Online (Sandbox Code Playgroud)

手册页有名单tar的许多选项,包括这一个.一些早期版本的tar使用--strip-path此操作来代替.


Rom*_*jev 10

对我来说,以下是最好的:

tar xvf some.tar --transform 's?.*/??g'
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,长名称选项`--transform`仅适用于GNU tar.BSD tar的等效选项是`/ old/new/[gps]`模式之后的`-s`,并且正如你所说的那样,它会使目录层次结构变平,在实践中可能没用. (2认同)