制作具有特定字母的文件和目录的 gzip 压缩 tar 存档

制作具有特定字母的文件和目录的 gzip 压缩 tar 存档

我只想要包含该字母的目录和文件。我能够从上一个问题。但是 tar 不是 gzip。

当尝试使其成为 gzip 时...它不会从硬链接目标中删除前导 '/'?这会毁了它。

这是修改后的代码(不是 gzip)

find /path/to/dir/ -type d -name "*x*" -o -type f -name "*x*" -exec tar rvf x.tar.gz {} \;

Gzip压缩:

find /path/to/dir/ -type d -name "*x*" -o -type f -name "*x*" -exec tar cvzf x.tar.gz {} \;

在此过程中出现了相同数量的文件,但是检查 tar(tf)时只出现了一个以 x 开头的文件......

是否无法使用 gzip 来解决,或者我是否错过了一个更简单的解决方案......

答案1

这里有两个问题。首先:-exec开关后面的命令每次出现时都会执行一次。虽然附加到现有的未压缩 tar 存档很方便,但对于压缩存档则不然。

因此,您有两个选择:

  • 创建未压缩的 tar 存档,然后在第二步中压缩它(非常简单gzip archive.tar
  • 或者您必须构建命令行。这就是 xargs 工具的用途...它从标准输入读取行并将它们附加到您的初始命令行。(例如cd /path/to/dir; find . -type f -name "*x*" | xargs tar -czf /path/archive.tar.gz:)

删除尾随的第二个问题/不是 gzip 问题,而是 tar 问题。基本上,您永远都不希望档案内有绝对路径,因为提取档案的人希望可以选择将文件放在何处 - 这意味着提取人员选择的位置的相对路径。

如果您真的知道自己在做什么,那么可以使用 tar 的开关--absolute-names,它允许绝对路径位于存档内,但我真的不建议这样做......

答案2

要删除前导斜杠,您可以更改命令,如下所示:

cd /
find path/to/dir/ -type ....

这将find显示相​​对路径

相关内容