J'ai un tas de fichiers dans un répertoire (avec beaucoup d'autres fichiers) que je veux déplacer.
Heureusement, tous les fichiers que je veux déplacer contiennent un certain identifiant dans leurs noms. Je peux donc ls | grep IDENTIFIER
obtenir la liste exacte des fichiers à déplacer.
Mais comment puis-je exécuter mv file /path/to/dest/folder/
à la fois, et pas un par un (il y a beaucoup de fichiers à déplacer)?
Si vous souhaitez déplacer ABC-IDENTIFIER-XYZ.ext
ou IDENTIFIER-XYZ.xml
, vous pouvez utiliser:
mv *IDENTIFIER* ~/YourPath/
*
est un caractère générique pour zéro ou plus de caractères, cela signifie plus ou moins de caractères, suivi de IDENTIFIER
, suivi de plus ou moins de caractères.
Cela déplacera tous les fichiers que contient le IDENTIFIER
que vous avez spécifié.
Vous pourriez utiliser
mv -t DESTINATION file1 file2 file3
et
mv -t DESTINATION `ls|grep IDENTIFIER`
fonctionne, mais je ne suis pas sûr que mv soit invoqué plusieurs fois ou non, car grep générera une nouvelle ligne pour chaque correspondance.
Vous pouvez utiliser caractères génériques .
Exemple: pour déplacer tous les fichiers ayant l'extension .doc
mv *.doc /path/to/dest/folder/
Cela déplacera tous les fichiers doc du répertoire actuel vers la destination spécifique.
Modifier
Pour répondre au commentaire.
mv *.ext *.xml *.txt /path/to/dest/folder/
Si vous souhaitez déplacer un ensemble de fichiers non pertinents (pas de motif commun dans les noms et les types), vous pouvez procéder comme M. Rajanand l’a dit: commencez par aller dans le répertoire qui contient les fichiers que vous souhaitez déplacer.
mv file1.ext1 file2.ext2 file3.ext3.. /destination/
Si les fichiers sont dispersés dans des répertoires différents, il vous suffit de spécifier le chemin de chaque fichier dans la commande de déplacement.
J'utilise la technique de tuomaz, mais légèrement modifiée:
mv file1 file2 file3 -t DESTINATION
Je trouve cela plus facile à retenir et plus difficile à bousiller car il utilise le même ordre que l'opération Vanilla mv:
mv file1 DESTINATION
Utilisez cette commande:
mv `ls|grep IDENTIFIER` /path/to/dest/folder
Cependant, ls n’est pas recommandé pour ce type d’utilisation. Utilisez la commande find à la place.
Si les fichiers sont dans le même répertoire, vous pouvez utiliser
mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/
(testé dans Ubuntu 16.04)
Si vous avez autant de fichiers à déplacer, vous pouvez en avoir trop pour la commande mv
(ou d’autres commandes telles que rm
). Je suggère d'utiliser xargs
pour déplacer chaque fichier individuellement dans une boucle, comme à la mode. Une façon de se déplacer est de faire:
ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/
Le ls -1
(moins un) garantit qu'il n'y a qu'un seul nom de fichier sur chaque ligne. Si vous avez des alias masqués pour la commande ls
, vous pouvez avoir plusieurs noms de fichiers sur une seule ligne et déplacer par inadvertance un fichier que vous n'aviez pas l'intention de déplacer.
find -type f -name "[range]" -exec mv {} target-directory ';'
cette commande déplacera les noms de fichier avec n'importe quel motif/plage dans le répertoire cible.
par exemple.
find -type f -name "file[1-50000]" -exec mv {} target-directory ';'
il déplacera les fichiers portant des noms tels que file1
, file2
... file50000
vers target-directory
.
Vous pouvez utiliser la sortie de ls pour entrer dans mv commnad
mv $(ls | grep IDENTIFIER) /path/to/dest/dir
La commande entre $()
renvoie une liste des noms de fichiers correspondant à votre recherche, qui peut être fournie en tant que paramètre pour la commande mv.
Le moyen le plus simple est comme ça
mv {file1,file2,file3} DESTINATION
ou répertoire
mv {directory1,directory2,directory3} DESTINATION
ou les deux fichiers et répertoires
mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION
J'espère que cela t'aides
En utilisant cette commande, vous pouvez déplacer plusieurs fichiers.
mv SourceFilenames ~DestinationPath