Existe-t-il un moyen de mv
, cp
ou une opération de fichier telle que je puisse spécifier tous les fichiers que je ne veux pas affecter?
Par exemple, dire que j'ai un dossier avec les fichiers file1
, file2
et file3
, et je veux aller file1
et file2
quelque part. Plutôt que de nommer explicitement les fichiers à déplacer ( mv file1 file2 /path/to/destination
), je veux nommer les fichiers à ne pas déplacer et que tous les autres du dossier soient déplacés ( mv --some-switch file3 /path/to/destination
)
command-line
rename
scp
Glide
la source
la source
mv file1 file2 /path/to/destination
cela ne fera pas ce que vous voulez qu'il fasseRéponses:
Vous pouvez utiliser les modèles de globalisation avancés dans certains shells pour faire correspondre tous les fichiers d'un répertoire, à l'exception de ceux correspondant à un modèle particulier. Par exemple, dans ksh, bash ou zsh, la commande
déplacera tous les fichiers dans
/source
à l'/destination
exception des fichiers correspondants*.bak
. Dans zsh, vous pouvez également écrire/source/^*.bak
si vous exécutez pour la première foissetopt extended_glob
, et plus généralement (nécessitant à nouveausetopt extended_glob
)/source/*~*.bak
(ou/source/a*~*.bak
pour tous les fichiers dont le nom commence par à l'a
exception des.bak
fichiers, etc.).Zsh possède une commande de copie / déplacement / liaison de masse qui peut être utilisée, entre autres, pour déplacer tous les fichiers à l'exception de ceux correspondant à un modèle. Par exemple, la commande suivante déplace tous les fichiers sauf
*.bak
de/source
verstarget
et ajoute.bak
à leur nom dans le processus:Il existe plusieurs commandes appelées
rename
flottantes. Sur Debian et Ubuntu,/usr/bin/rename
est un script perl qui déplace les fichiers vers un nouveau nom généré par une expression perl. Vous pouvez exclure des fichiers de renommer en ne générant pas un nouveau nom si le fichier doit être exclu. Par exemple, la commande suivante (à l'aide de cerename
programme particulier ) déplace tous les fichiers sauf*.bak
de/source
vers/target
:Vous pouvez utiliser la
find
commande pour sélectionner les fichiers que vous souhaitez déplacer. Par exemple, la commande suivante déplace tous les fichiers normaux sauf*.bak
dans/source
ou un sous-répertoire vers/target
(notez que la structure du répertoire est réduite):ou (plus efficace s'il y a beaucoup de fichiers à déplacer)
rsync
est une généralisation decp
etscp
avec comprennent très puissant / règles d' exclusion. Par exemple, la commande suivante copie tous les fichiers sauf*.bak
dans/source
ou un sous-répertoire dans/target
, en respectant la structure du répertoire:pax
est (entre autres) un autrecp
sur les stéroïdes. Ses règles d'exclusion ne sont pas aussi puissantes que celles de rsync, mais il a la possibilité supplémentaire de renommer les fichiers lorsqu'ils sont copiés. Si vous renommez un fichier en chaîne vide, il est exclu de la copie. Par exemple, la commande suivante copie tous les fichiers sauf*.bak
dans/source
ou un sous-répertoire dans/target
et renomme les fichiers.bak
en passant.L'exemple ci-dessus a l'effet secondaire malheureux de créer des répertoires appelés
foo.bak
, qui peuvent être évités en combinantfind
avecpax
:la source
find
commande doit se terminer\;
+
immédiatement après{}
.