Come eseguire il backup della struttura di directory ignorando file e directory senza autorizzazione di lettura


9

Qualche idea su come eseguire il backup di una struttura di directory per la quale esistono alcuni file e / o directory per i quali non si dispone dell'autorizzazione per leggere? Vorrei semplicemente ignorare quelli, senza crash di backup (tar? Jar?).

Risposte:


8

Gnu tar ha un'opzione --ignore-failed-readche fa proprio questo.

Se non si utilizza tar GNU, è possibile generare un elenco di file di cui eseguire il backup o un elenco di file da escludere. GNU find ha un -readablepredicato che verifica se si dispone dell'autorizzazione di lettura sul file. Con altre versioni di find, per stare da findsolo, dovrai approssimarlo con i permessi dei file ( -perm) e la proprietà ( -user, group), il che rende difficile far fronte a gruppi, ACL, ecc. Puoi ottenere un test preciso chiamando il programma esterno o shell incorporato test. Ecco un esempio supponendo che tu tarabbia la possibilità -Xdi leggere un elenco separato da righe di nomi di file da escludere (i nomi di file che contengono newline vengono saltati, per evitare problemi di analisi):

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

Ha funzionato perfettamente la prima volta con --ignore-fail-read, molte grazie. Il sistema era Red Hat, quindi era presente il tar GNU.
user3228053

2

Se non hai newline nei percorsi, puoi farlo:

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

Questo potrebbe essere limitato a GNU finde tarpotrebbe non funzionare con alcuni file system (NFS, FUSE). Se ci sono o possono esserci newline, usa -print0invece di -printfor finde aggiungi --nullper tar.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.