10

我在 UNIX 中使用 tar 命令来执行特定目录的备份。但是,某些目录包含当前用户没有任何读取权限的文件/子目录。结果, tar 命令返回非 0 退出代码。

我在手册页“--ignore-failed-read”中遇到了以下修饰符,它在遇到无法读取的文件时抑制非 0 退出代码。但是,每当我尝试使用它时,都会收到错误“未知函数修饰符”。

有人可以帮我吗?

我的 tar 命令看起来像这样:

tar --create --ignore-failed-read --file=test.tar my_dir
4

2 回答 2

13

您的命令似乎完全有效,我没有看到任何错别字/错误。可以肯定的是,我只是在运行 32 位 Debian 7.1 (wheezy) 和股票内核 3.2.0.4 的 VM 上进行了尝试。正如我所怀疑的,存档已成功创建(唯一的变化当然是源目录的名称)。我还检查了我的 tar 版本

tar --version

这给了我以下输出:

tar (GNU tar) 1.26

首先,您应该检查此信息。如果你得到相同的(版本号可能不同)输出,那很好。如果不是(或版本似乎更旧),则您可能正在使用 tar,它根本不支持此功能。

此外,您可以检查您的 tar 是否真的支持提到的标志。为此,请在控制台中键入:

tar --help | grep ignore-failed-read

您应该看到如下内容:

--ignore-failed-read   do not exit with nonzero on unreadable files

如果输出保持为空,则意味着此版本的 tar 根本不知道此标志。

看看以上有没有帮助。

于 2013-10-30T09:34:56.433 回答
2

在这种情况下,另一个可能效果更好的选项是--warning=no-file-changed.

tar --warning=no-file-changed -czf backup.tgz dir1 dir2

--warning控制警告信息的显示。您可以添加no-到 message 关键字以抑制它。所以在这种情况下no-file-changed会抑制file-changed警告。

cf https://www.gnu.org/software/tar/manual/html_section/tar_27.html

于 2019-01-24T22:40:22.080 回答