如何在没有读取权限的情况下忽略文件和目录来备份目录结构


9

有什么想法如何备份目录结构,其中某些文件和/或目录没有您的读取权限?我只想忽略这些,而不会导致备份(tar?jar?)崩溃。

Answers:


8

Gnu tar有一个选项--ignore-failed-read可以做到这一点。

如果您不使用GNU tar,则可以生成要备份的文件列表,也可以生成要排除的文件列表。GNU find有一个-readable谓词,用于测试您是否对该文件具有读取权限。对于其他版本的find,要find单独使用,您需要使用文件许可权(-perm)和所有权(-usergroup)对此进行近似,这使得难以处理组,ACL等。您可以通过调用进行精确测试内置的外部程序或shell test。这是一个示例,假设您tar可以选择-X读取以换行符分隔的文件名列表以排除(跳过包含换行符的文件名,以避免解析问题):

find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .

第一次与--ignore-failed-read完美配合,非常感谢。系统是Red Hat,所以GNU tar到位了。
user3228053 2014年

2

如果路径中没有换行符,则可以执行以下操作:

find . -type f -readable -print | tar cf test.tar -T -

这可能仅限于GNU findtar并且可能不适用于某些文件系统(NFS,FUSE)。如果有或可能有换行符,请使用-print0代替-printfor find并添加--nullfor tar

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.