Je peux trouver tous les fichiers que je veux en utilisant find
mais je veux utiliser mv
pour les déplacer tous dans un certain dossier. Comment puis je faire ça?
Un léger biais, cp
et mv
prennent en charge un argument cible -t
qui vous permet de commencer par la destination de votre choix et de terminer votre commande par une longue liste d'éléments à copier ou à déplacer. Cela se prête parfaitement à des choses comme find -exec ... {} +
, qui construira efficacement une longue commande. Beaucoup plus que find -exec ... {} \;
find . -type f -exec mv -t /new/path {} +
Approche classique - find
+ while
boucle
find /your/top/directory -maxdepth 1 -type f -print0 | while IFS="" read -r -d "" FILENAME; do mv -t /path/to/destination/directory "$FILENAME";done
Explication:
find
vous donne la liste des fichiers (indiqué par -type pour ignorer les répertoires) dans /your/top/directory
, descend au maximum de 1 niveau dans la structure de répertoires et affiche le résultat sous forme de chaîne séparée par un zéro;while
en conjonction avec read
prend chaque partie de cette chaîne séparée par un zéro et la stocke dans la variable FILENAME.mv
jette le fichier actuel dans le répertoire de destination indiqué par l'indicateur -t
.Cette approche est très utile lorsque vous souhaitez éviter d’analyser la sortie de ls
et, en fait, je l’ai apprise ici .