Pourquoi utiliser rsync
quand vous pouvez faire :
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Cela suppose que la structure du répertoire cible est la même que celle de la source.
cp -r `ls -A | grep -v "c"` $HOME/
Eh bien, si l'exclusion de certains modèles de noms de fichiers devait être effectuée par chaque utilitaire de fichier unix-ish (comme cp, mv, rm, tar, rsync, scp, ...), une immense duplication des efforts se produirait. Au lieu de cela, de telles choses peuvent être faites dans le cadre du globbing, c'est-à-dire par votre shell.
basser
man 1 bash
, / extglob .
Exemple :
$ 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
Donc, vous venez de mettre un motif à l'intérieur de !()
, et il annule la correspondance. Le modèle peut être arbitrairement complexe, à partir de l'énumération des chemins individuels (comme le montre Vanwaril dans une autre réponse) :!(filename1|path2|etc3)
, aux éléments de type regex avec des étoiles et des classes de caractères. Reportez-vous à la page de manuel pour plus de détails.
zsh
man 1 zshexpn
, / génération du nom de fichier .
Vous pouvez faire setopt KSH_GLOB
et utilisez des modèles de type bash. Ou,
% 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
Donc x~y
correspond au modèle x
, mais exclut le modèle y
. Encore une fois, pour plus de détails, reportez-vous à la page de manuel.
poisson
La carapace de poisson a une réponse beaucoup plus jolie à cela :
ð cp (string match -v '*.excluded.names' -- srcdir/*) destdir
Conseil de pro en prime
Tapez cp *
, appuyez sur Ctrl X * et juste voir ce qui se passe.
rsync
est simple et rapide :
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
Vous pouvez utiliser --exclude
plusieurs fois.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
Notez que le répertoire thefoldertoexclude
après --exclude
l'option est relative au sourcefolder
, c'est-à-dire sourcefolder/thefoldertoexclude
.
Vous pouvez également ajouter -n
pour un essai à blanc pour voir ce qui sera copié avant d'effectuer une opération réelle, et si tout va bien, supprimez -n
depuis la ligne de commande.