Как сделать резервную копию структуры каталога, игнорируя файлы и каталоги без разрешения на чтение

9

Любые идеи, как сделать резервную копию структуры каталогов, для которых есть некоторые файлы и / или каталоги, для которых у вас нет разрешения на чтение? Я хотел бы просто игнорировать их, без сбоев резервного копирования (tar? Jar?).

user3228053
источник

Ответы:

8

У 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 - .
Жиль "ТАК - перестань быть злым"
источник
Отлично сработал в первый раз с --ignore-failed-read, большое спасибо. Система была Red Hat, поэтому GNU tar был на месте.
user3228053
2

Если у вас нет новых строк в путях, вы можете сделать это:

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

Это может быть ограничено GNU findи tarможет не работать с некоторыми файловыми системами (NFS, FUSE). Если есть или могут быть новые строки , то используйте -print0вместо -printдля findи добавить --nullк tar.

Хауке Лагинг
источник