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

How can I move many files without having Argument list too long?

我正在尝试将大约 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:参数列表太长

我该怎么办?请帮帮我。谢谢:)

如果您使用 find,我建议您使用 -exec 属性。所以你的结果应该是 find . -name "*.jpg" -exec mv {} /home/new/location \;.

不过,我建议您检查 find 命令 returns 是什么,将 exec 部分替换为:-exec ls -lrt {} \;

您可以尝试:

 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)。可能够用了。

尝试:

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