Il backup in modo ricorsivo non significa copiare le directory


0

Ho una riga seguente in uno script per il backup e non sta copiando ricorsivamente tutte le directory, ottiene i file ma li raggruppa tutti insieme. Qualcuno può dirmi cosa c'è che non va?

find . -type f -not -executable -exec cp -ruv {} /run/media/user/32GB/prog/ \; 

Risposte:


3

L' -execargomento da trovare esegue semplicemente quel comando su ogni elemento restituito. Quindi, ad esempio, se hai una directory impostata come:

>$ find .
.
./a.txt
./b.txt
./dir1
./dir1/c.txt 
./dir2
./dir2/d.txt

La -execparte verrà eseguita una volta per ogni riga, sostituendo il testo per {}. Quindi, nel tuo caso, copierebbe ricorsivamente ogni voce nella directory specificata.

cp -ruv a.txt /run/media/user/32GB/prog/
cp -ruv b.txt /run/media/user/32GB/prog/
cp -ruv dir1 /run/media/user/32GB/prog/
cp -ruv dir1/c.txt /run/media/user/32GB/prog/
etc, etc

Per inciso, anche segnare -not -executable. Questo fa la vera differenza. Le directory in Linux sono eseguibili. (Il bit di esecuzione nelle directory gestisce le autorizzazioni per elencare il contenuto della directory, poiché le cartelle non possono essere eseguite.)

>$ ls -l
-rw-rw-r--.   1 user user     1583 Feb 10 13:14 a.txt
-rw-rw-r--.   1 user user     1583 Feb 10 13:14 b.txt
drwxr-xr-x.   2 user user     4096 Nov 22  2013 dir1
drwxr-xr-x.   2 user user     4096 Nov 22  2013 dir2

Così,

>$ find . -not -executable 
a.txt
b.txt
dir1/c.txt
dir2/d.txt

Non restituirà alcuna directory, solo un elenco di file non eseguibili ( -type f). E, come è stato detto, cpcopia ognuno di essi, singolarmente (poiché solo le directory possono essere copiate in modo ricorsivo) in/run/media/user/32GB/prog/

Una potenziale soluzione è copiare prima tutto, quindi fare un find/rm

>$ cp -ruv . /run/media/user/32GB/prog/
>$ find /run/media/user/32GB/prog -executable -type f -exec rm {} \;

O un cattivo rsync(adoro rsync):

>$ find . -type f -not -executable > /tmp/filelist
>$ rsync -r --include-from=/tmp/filelist . /run/media/user/32GB/prog/

rsync copierà ricorsivamente la directory corrente, aggiungendo solo i file specificati - quelli non exec. Ciò impedirà la scrittura / eliminazione aggiuntiva.


Questo non è divertente Quello che sto cercando di fare è copiare ricorsivamente tutti i file non eseguibili. Come faccio a fare questo? Gli eseguibili non hanno estensione.
user341814

Copia, quindi utilizza trova per rimuovere i file eseguibili. L'ho aggiunto nella mia soluzione.
Chris,

L'ho preso in considerazione, ma sembra ... sciocco passare attraverso la copia e la rimozione non necessarie.
user341814

Ho aggiunto un altro modo, usando rsync, che salterà la copia / rimuovi
Chris

rsync è un sogno assoluto per il backup. Usa -a per l'archiviazione - per fare copie esatte.
Chris,
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.