如何在不出现“参数列表太长”的情况下移动多个文件?

14

我正在尝试将大约700,000个.jpg文件从一个目录移动到另一个目录,我的Ubuntu服务器上。我尝试了以下方法:

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

and

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: Argument list too long

请问我该怎么办?帮帮我,谢谢 :)


3个回答

26
如果您使用find命令,我建议您使用-exec属性。因此,您的结果应该是:find . -name "*.jpg" -exec mv {} /home/new/location \;
但我建议您检查find命令返回的内容,并将exec部分替换为:-exec ls -lrt {} \;

6

尝试:

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

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)。它可能已经足够完成工作。


在树莓派上,我尝试了这个命令,并且当分号移动到'do'关键字之前时,它开始工作,因此命令看起来像这样: "for f in *.jpg; do mv -f $f /var/www/html/jpgs/; done" - Wojciech Jakubas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接