web-dev-qa-db-fra.com

Comment puis-je utiliser "mv" pour rassembler tous les fichiers trouvés par "find" dans le même dossier?

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?

2
SarpSTA

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 {} +
8
Oli

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;
  • La boucle 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 .

0