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

时间:2016-01-09 12:36:53

标签: linux ubuntu xargs mv

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

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:参数列表太长了

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

3 个答案:

答案 0 :(得分:18)

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

但是,我建议您检查find命令返回的内容,将exec部分替换为:-exec ls -lrt {} \;

答案 1 :(得分:5)

尝试:

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

答案 2 :(得分: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)。这可能足以胜任这项工作。