【问题标题】: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

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

【问题讨论】:

标签: linux ubuntu xargs mv


【解决方案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 {} \;

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 2013-07-21
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多