GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande 'cp' pour exclure un répertoire spécifique ?

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.


Linux
  1. Comment utiliser la commande Linux Rsync (synchronisation à distance)

  2. Comment utiliser la commande Su sous Linux

  3. [Linux] :Comment exclure un répertoire lors de l'utilisation de la commande shell "tar"

  4. La commande Linux rsync :comment l'utiliser

  5. Comment utiliser la commande Rsync sous Linux ?

Comment utiliser la commande Linux cd pour changer de répertoire

Comment utiliser la commande cd sous Linux

Comment utiliser Rsync

Comment exclure un répertoire lors de la recherche de fichiers sous Linux

Comment utiliser la commande PS

Comment utiliser la commande TOP