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?
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 {} +
/destination
par le répertoire de destination actuelfind
gérera tous les noms de fichiers possiblesfind
gérera ARG_MAX
en passant autant de noms de fichiers à la fois, de manière à ne pas déclencher ARG_MAX
-type f
'*.pdf'
, pour que Shell ne les développe pas auparavant car find
les géreraSi 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
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
).