如何查找特定文件类型并对其进行压缩?

如何查找特定文件类型并对其进行压缩?

看来我有问题了。我的当前目录中有一些不同的文件类型,我只想柏油.png文件。我是这样开始的:

find -name "*.png" | tar -cvf backupp.tar

它不起作用,因为我没有指定哪些文件,所以看看其他人是如何做到的,我添加了 xargs:

find -name "*.png" | xargs tar -cvf backupp.tar

这次它确实工作了,并且创建了 backupp.tar 文件,但问题在于。我似乎无法提取它。每当我输入:

tar -xvf backupp.tar

什么也没有发生。我尝试过更改 chmod 和 sudo,但没有任何效果。

那么,我是否完全输入了错误的命令,或者我错过了什么?

答案1

您的两种方法都接近有效,但每种方法都有一个明显的问题。

在第一种方法中,您尝试将文件列表通过管道传输到tar.如果你想tar从标准输入读取文件列表,那么你必须使用-T/--files-from-选项,例如

find -name '*.png' -print0 | tar -cvf backup.tar --null -T - 

参考一下,请参阅官方文档:

笔记:使用-print0--null标志应确保它也可以处理包含空格的文件名。

在第二种方法中,您尝试运行tarvia xargs,但您使用的是“创建”选项(--create/ -c)。如果您在 for 循环中或在 for 循环中使用“create”选项xargs,那么它将在每次迭代后覆盖存档。相反,尝试使用“追加”选项 ( -a/ --append) 或“更新”选项 ( -u/ --update),例如:

find -name "*.png" -exec tar -uvf backupp.tar {} \;

这将在每次迭代后将文件附加到存档中,而不是覆盖它。

无论哪种方式,完成后您都可以使用“列表”选项 ( --list/ -t) 查看存档的内容并验证一切是否按预期工作:

tar tf backupp.tar

答案2

您可以简单地使用通配符

tar -cvf backup.tar *.png

或通过使用find

find -name "*.png" | tar -cvf backup.tar -T -

-T选项从 FILE 中获取文件名,在本例中为 stdin-

相关内容