Linux 如何排除tar的绝对路径?

Linux 如何排除tar的绝对路径?,linux,bash,tar,Linux,Bash,Tar,我正在运行一个PHP脚本,它可以让我获得我想要的文件的绝对路径。这是我的语法: tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls 当我解压它时,它会创建文件的绝对路径。如何获取要显示的所有内容的/path。因此,在你的情况下,关于提取,请 tar xvf tarname.tar --strip-components=2 有一个列表,列出了tar的许多选项,包括这个选项。一些早期版本的

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

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

当我解压它时,它会创建文件的绝对路径。如何获取要显示的所有内容的
/path
。因此,在你的情况下,关于提取,请

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

有一个列表,列出了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
开关。

如果您不知道路径中有多少组件,可以尝试以下方法:

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

对我来说,以下方法效果最好:

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

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

当我尝试这样做时,会将名为dot的文件添加到存档中。tar-cf tarname.tar当前文件夹-C/some/path中的一些文件。尝试
tar-tvf tarname.tar
,您将看到这不是一个文件。请注意,长名称选项
--transform
仅用于GNU tar。BSD tar的等效选项是遵循
/old/new/[gps]
模式的
-s
,并且使用这种方法,正如您所说的那样,它将使目录层次结构变得平坦,在实践中可能没有用。当您不知道兔子洞有多深(我的意思是,您的目录结构)时,最好的选择。确保所有文件名在所有目录中都是唯一的,否则可能会出现意外结果。