web-dev-qa-db-fra.com

Comment déplacer la sortie de la commande find dans un autre répertoire?

Je souhaite que la sortie de cette commande find /home -name *.pdf déplace les fichiers du résultat de la recherche dans un autre répertoire, par exemple. avec une pipe. Comment puis je faire ça?

6
Fasih Faqoth

Vous n'avez besoin d'aucun tuyau, et xargs pour créer les noms de fichiers comme arguments de mv.

Il suffit d'utiliser mv dans l'action -exec de find:

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • Remplacez /destination par le répertoire de destination actuel
  • find gérera tous les noms de fichiers possibles
  • find gérera ARG_MAX en passant autant de noms de fichiers à la fois, de manière à ne pas déclencher ARG_MAX
  • Si vous recherchez uniquement des fichiers (probablement dans ce cas), limitez le vecteur de recherche en ajoutant -type f
  • Citez l'extension globale, '*.pdf', pour que Shell ne les développe pas auparavant car find les gérera

Si pour une raison quelconque, ou à des fins d’apprentissage, vous devez utiliser pipe -xargs:

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  
13
heemayl

Si vous n'avez pas d'espace dans les noms de vos pdf, une autre façon de le faire est d'exécuter cette commande dans votre terminal:

mv $(find /home -type f -name '*.pdf') ./destination

La $() applique le résultat de la commande exécutée (find /home -type f -name '*.pdf') à la commande située en dehors de celle-ci (mv [...] ./destination).

0
anonymous2