![制作具有特定字母的文件和目录的 gzip 压缩 tar 存档](https://linux22.com/image/781242/%E5%88%B6%E4%BD%9C%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E5%AD%97%E6%AF%8D%E7%9A%84%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%E7%9A%84%20gzip%20%E5%8E%8B%E7%BC%A9%20tar%20%E5%AD%98%E6%A1%A3.png)
我只想要包含该字母的目录和文件。我能够从上一个问题。但是 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
显示相对路径