看来我有问题了。我的当前目录中有一些不同的文件类型,我只想柏油这.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
标志应确保它也可以处理包含空格的文件名。
在第二种方法中,您尝试运行tar
via 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-