Eh bien, si l'exclusion de certains modèles de noms de fichiers devait être effectuée par tous les utilitaires de fichiers unixiens (comme cp, mv, rm, tar, rsync, scp, ...), il y aurait une immense duplication des efforts. Au lieu de cela, de telles choses peuvent être faites dans le cadre de globbing c'est-à-dire par votre coquille.
bash
man 1 bash
, / extglob .
Ejemplo:
$ 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 tu mets juste un modèle à l'intérieur !()
et cela annule la correspondance. Le motif peut être arbitrairement complexe, à partir d'une énumération de chemins individuels (comme le montre Vanwaril dans une autre réponse) : !(filename1|path2|etc3)
à des choses 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 de noms de fichiers .
Vous pouvez faire setopt KSH_GLOB
et utiliser des motifs de type bash. Ou bien,
% 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
Alors x~y
correspond au modèle x
mais exclut le modèle y
. Une fois encore, pour plus de détails, reportez-vous à la page de manuel.
poisson nouveau !
El poisson La coquille a un réponse beaucoup plus jolie à ça :
23 votes
rsync ?
8 votes
tar -c | tar -x
?1 votes
@mvds, je suis d'accord avec vous, utiliser tar avec '--exclude' est une bonne idée.
3 votes
Duplicata possible de Copier un dossier de manière récursive, en excluant certains dossiers