Vous pouvez donc utiliser le *
en tant que caractère générique pour tous les fichiers lors de l'utilisation de cp
dans le contexte d'un répertoire. Existe-t-il un moyen de copier tous les fichiers à l'exception du fichier x
?
Dans bash
, vous pouvez utiliser extglob
:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
où !(b*)
exclut tous les fichiers b*
.
Vous pouvez ensuite désactiver extglob
avec
$ shopt -u extglob
Rsync gère cela très bien.
Exemple copiez tout: rsync -aP /folder1/* /folder/2
Exemple tout copier avec exclusion: rsync -aP --exclude=x /folder1/* /folder2/
Le -aP
commutateur:
a: Similaire à cp -a
, récursif, etc. P: affiche la progression, une fonctionnalité intéressante de rsync.
Ce n'est pas une fonctionnalité de cp
, c'est une fonctionnalité de votre Shell (il étend le *
pour signifier tous les fichiers autres que des points), donc la réponse dépend du Shell que vous utilisez. Par exemple, zsh
prend en charge cette syntaxe:
$ cp ^x /path/to/destination
Où ^x
signifie "tous les fichiers sauf x
"
Vous pouvez également combiner des modèles de sélection et de désélection, par ex. pour copier tous les fichiers wav sauf ceux contenant xyz, vous pouvez utiliser:
cp *.wav~*xyz*
Cela pourrait également être fait dans le vieux bourne Shell (portable/compatible) de diverses manières avec des outils standard de manière beaucoup moins élégante que l'utilisation de globalisation ou de commandes avancées avec des options d'exclusion intégrées.
S'il n'y a pas trop de fichiers (et pas avec des noms incluant des espaces et/ou des sauts de ligne), cela pourrait être un moyen:
cp `ls | egrep -v '^excludename$'` destdir/.
Bien sûr, bash
et GNU sont excellents et puissants, mais ils ne sont toujours pas toujours disponibles. Si vous avez l'intention de les mettre dans un script portable, je recommanderais find
comme dans le commentaire de Rush.
Si vous souhaitez tout copier dans un dossier (y compris les sous-dossiers) dans un sous-répertoire particulier:
cp -R $(ls | grep -v '^subdir$') subdir/
Fonctionne avec sh, bash, zsh (au moins).