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

use*_*053 9 tar backup permissions files

任何想法如何备份您无权读取的某些文件和/或目录的目录结构?我想忽略那些,没有备份(tar?jar?)崩溃。

Gil*_*il' 9

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

如果您不使用 GNU tar,则可以生成要备份的文件列表或要排除的文件列表。GNU find 有一个-readable谓词来测试您是否对该文件具有读取权限。对于其他版本的 find,为了find单独使用,您需要使用文件权限 ( -perm) 和所有权 ( -user, group)来近似它,这使得处理组、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 - .
Run Code Online (Sandbox Code Playgroud)


Hau*_*ing 2

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

find . -type f -readable -print | tar cf test.tar -T -
Run Code Online (Sandbox Code Playgroud)

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