2016-01-09 13 views
7

Я пытаюсь переместить около 700 000.jpg файлов из одной директории в другую на моем сервере Ubuntu. Я попробовал следующее:Как переместить много файлов, не имея слишком длинного списка аргументов?

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

и

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

и

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

и

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

и все они дают мне ту же ошибку:/USR/BIN/xargs: слишком длинный список аргументов

Что мне делать? Пожалуйста, помогите мне. Thanks :)

+0

Связанный: [? Ли "список аргументов слишком длинный" ограничение применяется к раковине встроенных команд] (https://stackoverflow.com/questions/47443380/does-argument-list-too -long-restriction-apply-to-shell-builtins) – codeforester

ответ

13

Если вы используете find, я бы порекомендовал вам использовать атрибут -exec. Таким образом, ваш результат должен быть find . -name "*.jpg" -exec mv {} /home/new/location \;.

Однако я бы рекомендовал, чтобы проверить то, что find команда возвращает вас, заменяющие exec часть с: -exec ls -lrt {} \;

+0

спасибо, что это действительно сработало идеально для меня! : D: D большое спасибо !!! –

+0

@AwahHammad добро пожаловать! –

2

Вы могли бы попробовал:

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 

также, вы должны внимательно прочитать xargs(1); Я сильно подозреваю, что

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

должны работать для вас

наконец, узнать больше о rename(1). Вероятно, этого достаточно для работы.

+0

На малине pi я играл с этой командой, и она начала работать, когда точка с запятой была перемещена до ключевого слова «сделать», поэтому команда выглядела так: «for f in * .jpg; do mv -f $ f/var/www/html/jpgs /; done " –

1

Try:

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

 Смежные вопросы

  • Нет связанных вопросов^_^