web-dev-qa-db-fra.com

Comment déplacer beaucoup de fichiers sans avoir une liste d'arguments trop longue?

J'essaie de déplacer environ 700 000 fichiers .jpg d'un répertoire à un autre sur mon serveur Ubuntu. J'ai essayé ce qui suit:

xargs mv *  -t /var/www/html/

et 

echo (*.jpg|*.png|*.bmp) | xargs mv -t /var/www/html/

et 

echo (*.jpg) | xargs mv -t /var/www/html/

et 

find . -name "*.jpg" -print0 | xargs mv * ../

et ils me donnent tous la même erreur:/usr/bin/xargs: liste d'arguments trop longue

que devrais-je faire? Sil te plait aide moi. Merci :)

10
Awah Hammad

Si vous utilisez find, je vous recommanderais d'utiliser l'attribut -exec. Donc, votre résultat devrait être find . -name "*.jpg" -exec mv {} /home/new/location \;.

Cependant, je vous recommande de vérifier ce que la commande find vous renvoie, en remplaçant la partie exec par: -exec ls -lrt {} \;

16
Jeffrey Descan

Essayer:

find /path/to/old-directory -type f | xargs -i mv "{}" /path/to/new-directory
5
Ashwin

Vous auriez pu essayer:

 for f in *.jpg do;
   mv -tv $f /var/www/html/
 done
 for f in *.png do;
   mv -tv $f /var/www/html/
 done
 for f in *.bmp do;
   mv -tv $f /var/www/html/
 done

de plus, vous devriez lire attentivement xargs (1) ; Je soupçonne fortement que

 find . -name "*.jpg" -print0 | xargs -n 1000 -I '{}' mv '{}'  ../

devrait travailler pour vous

Enfin, apprenez-en plus sur rename (1) . C'est probablement suffisant pour le travail.

2