Perché usare rsync
quando puoi fare:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Ciò presuppone che la struttura della directory di destinazione sia la stessa della sorgente.
cp -r `ls -A | grep -v "c"` $HOME/
Bene, se l'esclusione di determinati modelli di nomi di file dovesse essere eseguita da ogni utility di file unix-ish (come cp, mv, rm, tar, rsync, scp, ...), si verificherebbe un'immensa duplicazione dello sforzo. Invece, queste cose possono essere fatte come parte del globbing, cioè dalla tua shell.
bash
man 1 bash
, / extglob .
Esempio:
$ shopt -s extglob $ echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png $ echo images/!(*.jpg) images/004.bmp images/2252.png
Quindi hai appena inserito uno schema all'interno di !()
, e nega la corrispondenza. Lo schema può essere arbitrariamente complesso, a partire dall'enumerazione dei singoli percorsi (come mostra Vanwaril in un'altra risposta):!(filename1|path2|etc3)
, a cose simili a espressioni regolari con stelle e classi di caratteri. Fare riferimento alla manpage per i dettagli.
zsh
man 1 zshexpn
, / generazione del nome file .
Puoi fare setopt KSH_GLOB
e usa modelli simili a bash. Oppure,
% setopt EXTENDED_GLOB % echo images/* images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png % echo images/*~*.jpg images/004.bmp images/2252.png
Quindi x~y
corrisponde al modello x
, ma esclude il pattern y
. Ancora una volta, per i dettagli completi fare riferimento a manpage.
pesce
Il guscio di pesce ha una risposta molto più carina a questo:
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Suggerimento bonus bonus
Digita cp *
, premi Ctrl X * e guarda cosa succede.
rsync
è facile e veloce:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Puoi usare --exclude
più volte.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Notare che la directory thefoldertoexclude
dopo --exclude
l'opzione è relativa al sourcefolder
, ovvero sourcefolder/thefoldertoexclude
.
Inoltre puoi aggiungere -n
per un test di prova per vedere cosa verrà copiato prima di eseguire l'operazione reale e, se tutto è a posto, rimuovi -n
dalla riga di comando.