这不是重复的创建不包含父目录的 tar 存档
如果我这样做tar -czf archive directory
,目录将被添加到存档中。我想添加文件夹的文件directory
而不是目录本身,如何?
请建议不涉及cd
的答案directory
这不是其显示内容的重复:
我有一个名为的目录,somedir
内容为abc
, xyz
:
ls somedir
abc xyz
我想制作包含文件abc
,xyz
而不是somedir
文件夹的存档
更新:如果我使用命令tar -C /home/username/dir1/dir2 -cvf temp.tar yourarchive
(我的问题的答案被称为重复),
我得到这个:
我想要的是tar czf archive.tar.gz -C yourarchive .
,我得到这个(这与我想要的足够接近):
我想要的是这个(直接文件,没有文件夹):
答案1
使用-C
:
tar czf archive -C directory .
这指示tar
使用directory
作为其工作目录,并存档目录 ( .
) 中包含的所有内容。
使用-C
几乎等同于使用cd
;上面是在启动archive
时相对于当前目录进行解释,然后将其工作目录更改为解释之前。tar
tar
directory
.
我不确定tar -C
它的支持有多广泛,但任何 Linux 发行版都应该支持它。
答案2
尝试
tar cvf archive.tar -C somedir $(ls somedir)
在哪里
cvf
将要C重述V埃尔博斯(ly)F伊莱Archive.tar
-C somedir
将指示 tar 使用somedir
$(ls somedir )
列出某个目录中的文件并将$( )
结果作为参数传递
编辑:
正如评论中指出的,使用ls -A
(而不是ls -a)列出点文件。
答案3
你可以这样做人数(1),它是 tar 的 posix 继承者,但它从未真正流行起来。它可以写入 tar 文件,并且可以执行您想要执行的文件名转换:
pax -wzf archive -s '|directory/\?||' directory
这可以分解为:
-w
写入存档(-c
与 tar 相同)-z
压缩存档(与 tar 相同)-f archive
写入文件archive
(与 tar 相同)-s '|directory/\?||'
替换存档中的文件名。将字符串替换directory
为可选的/
空字符串。需要可选的,/
因为目录本身不以 a 结尾/
,但所有其他成员都以 a 结尾/
。这不需要锚定到字符串 (^
) 的开头,因为它仅替换第一个匹配项(例如sed(1)
),并且所有文件都将以directory/\?
为了明确你可以添加:
-x ustar
编写 POSIX tar 文件
但这是默认设置。
您应该能够在 Linux 或 BSD 软件包存储库中找到 pax。似乎有一个 GNU pax,但我不知道它的状态。 Debian 似乎有一个 BSD 版本的 pax。