Любые идеи, как сделать резервную копию структуры каталогов, для которых есть некоторые файлы и / или каталоги, для которых у вас нет разрешения на чтение? Я хотел бы просто игнорировать их, без сбоев резервного копирования (tar? Jar?).
Любые идеи, как сделать резервную копию структуры каталогов, для которых есть некоторые файлы и / или каталоги, для которых у вас нет разрешения на чтение? Я хотел бы просто игнорировать их, без сбоев резервного копирования (tar? Jar?).
Ответы:
У GNU tar есть опция, --ignore-failed-read
которая делает именно это.
Если вы не используете GNU tar, вы можете сгенерировать список файлов для резервного копирования или список файлов для исключения. В GNU find есть -readable
предикат, который проверяет, есть ли у вас разрешение на чтение файла. С другими версиями find, чтобы остаться в find
одиночестве, вам нужно будет аппроксимировать это с правами доступа к файлам ( -perm
) и владельцем ( -user
, group
), что затрудняет работу с группами, ACL и т. Д. Точный тест можно получить, вызвав встроенная внешняя программа или оболочка test
. Вот пример, в котором предполагается, что у вас tar
есть возможность -X
прочитать список имен файлов, разделенных символом новой строки, для исключения (имена файлов, содержащие символы новой строки, пропускаются, чтобы избежать проблем с синтаксическим анализом):
find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .
Если у вас нет новых строк в путях, вы можете сделать это:
find . -type f -readable -print | tar cf test.tar -T -
Это может быть ограничено GNU find
и tar
может не работать с некоторыми файловыми системами (NFS, FUSE). Если есть или могут быть новые строки , то используйте -print0
вместо -print
для find
и добавить --null
к tar
.