2016-01-09 13 views
7

Próbuję przenieść około 700 000 plików .jpg z jednego katalogu do drugiego na moim serwerze Ubuntu. Próbowałem następujące:Jak przenieść wiele plików bez zbyt długiej listy argumentów?

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

i

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

i

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

i

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

i wszystkie one dają mi ten sam błąd:/usr/bin/xargs: lista argumentów zbyt długa

co powinienem zrobić? Proszę pomóż mi. Dzięki :)

+0

pokrewne: [? Czy "lista argumentów za długa" ograniczenie stosuje się do powłoki poleceń wbudowanych] (https://stackoverflow.com/questions/47443380/does-argument-list-too -odblokowanie-do-powłoki-wbudowane) – codeforester

Odpowiedz

13

Jeśli używasz find, polecam Ci użycie atrybutu -exec. Twój wynik powinien zatem wynosić find . -name "*.jpg" -exec mv {} /home/new/location \;.

jednak polecam sprawdzić co find polecenia powraca wy, zastępując exec część z: -exec ls -lrt {} \;

+0

dzięki temu tak naprawdę zadziałało idealnie dla mnie! : D: D wielkie dzięki! –

+0

@AwahHammad nie ma za co! –

2

Mogłeś próbowałem:

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 

też należy uważnie przeczytać xargs(1); I podejrzewam, że

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

powinny pracować dla Ciebie

W końcu, aby dowiedzieć się więcej o rename(1). Prawdopodobnie wystarczy do tej pracy.

+0

Na raspberry pi grałem z tym poleceniem i zaczęło działać, gdy średnik został przeniesiony przed słowem kluczowym "do", więc polecenie wyglądało tak: "dla f in * .jpg; do mv -f $ f/var/www/html/jpgs /; done " –

1

Spróbuj:

find /path/to/old-directory -type f | xargs -i mv "{}" /path/to/new-directory 
Powiązane problemy