如何将文件夹中的文件而不是文件夹本身添加到存档?

如何将文件夹中的文件而不是文件夹本身添加到存档?

这不是重复的创建不包含父目录的 tar 存档

如果我这样做tar -czf archive directory,目录将被添加到存档中。我想添加文件夹的文件directory而不是目录本身,如何?
请建议不涉及cd的答案directory

这不是其显示内容的重复:
我有一个名为的目录,somedir内容为abc, xyz

ls somedir
abc xyz

我想制作包含文件abcxyz而不是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时相对于当前目录进行解释,然后将其工作目录更改为解释之前。tartardirectory.

我不确定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。

相关内容