2016-01-09 8 views
7

Sto provando a spostare circa 700.000 file .jpg da una directory a un'altra nel mio server Ubuntu. Ho provato quanto segue:Come posso spostare molti file senza avere una lista di argomenti troppo lunga?

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

e

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

e

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

e

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

e tutti mi danno lo stesso errore:/usr/bin/xargs: lista degli argomenti troppo lunga

Cosa devo fare? Per favore aiutatemi. Grazie :)

+0

correlati: [? Fa "lista di argomenti troppo lungo" restrizione si applica a sborsare builtins] (https://stackoverflow.com/questions/47443380/does-argument-list-too -long-restriction-apply-to-shell-builtins) – codeforester

risposta

13

Se si utilizza find, si consiglia di utilizzare l'attributo -exec. Quindi il tuo risultato dovrebbe essere find . -name "*.jpg" -exec mv {} /home/new/location \;.

Tuttavia mi sento di raccomandare di controllare ciò che il comando find si ritorna, sostituendo la parte exec con: -exec ls -lrt {} \;

+0

grazie a questo ha funzionato perfettamente per me! : D: D grazie mille !!! –

+0

@AwahHammad sei il benvenuto! –

2

Si potrebbe avere provato:

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 

anche, si dovrebbe leggere attentamente xargs(1); Ho il forte sospetto che

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

dovrebbe funzionare per voi

Finalmente, saperne di più su rename(1). Probabilmente è abbastanza per il lavoro.

+0

Su raspberry pi Ho giocato con questo comando e ha iniziato a funzionare quando il punto e virgola è stato spostato prima della parola chiave 'do' in modo simile al comando: "per f in * .jpg; do mv -f $ f/var/www/html/jpgs /; done " –

1

Prova:

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