如何在没有参数列表太长的情况下移动多个文件?
Posted
技术标签:
【中文标题】如何在没有参数列表太长的情况下移动多个文件?【英文标题】:How can I move many files without having Argument list too long? 【发布时间】:2016-04-14 02:37:57 【问题描述】:我正在尝试将大约 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: Argument list too long
我该怎么办?请帮帮我。谢谢:)
【问题讨论】:
相关:Does "argument list too long" restriction apply to shell builtins? 【参考方案1】:试试:
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/; 完成”【参考方案3】:如果您使用find
,我建议您使用-exec
属性。所以你的结果应该是find . -name "*.jpg" -exec mv /home/new/location \;
。
但是我建议检查find
命令返回的内容,将exec
部分替换为:-exec ls -lrt \;
【讨论】:
以上是关于如何在没有参数列表太长的情况下移动多个文件?的主要内容,如果未能解决你的问题,请参考以下文章
XmlReader - 如何在没有 System.OutOfMemoryException 的情况下读取元素中很长的字符串