web-dev-qa-db-ja.com

引数リストを長くしすぎずに多くのファイルを移動するにはどうすればよいですか?

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:引数リストが長すぎます

私は何をすべきか?私を助けてください。ありがとう:)

12
Awah Hammad

findを使用する場合は、-exec属性を使用することをお勧めします。したがって、結果はfind . -name "*.jpg" -exec mv {} /home/new/location \;になります。

ただし、findコマンドを使用して、execの部分を-exec ls -lrt {} \;に置き換えて、何が返されるかを確認することをお勧めします。

20
Jeffrey Descan

試してください:

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

あなたが試したかもしれません:

 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) についてさらに学びます。それはおそらく仕事には十分です。