2019-05-20 [長年日記]
■Linuxでファイル大量移動
とかで検索すると
find FROM_PATH -type f | xargs -I {} mv {} TO_PATH
みたいなのが検索結果の上の方にヒットするけど、
いやいや -I を指定したら -L 1 が自動的に適用されて、ファイルの個数分 mv コマンドが実行されるからめちゃくちゃ効率悪いよね??
という気持ちになる。
mv コマンドが、移動先を先頭にとればいいのだから……と調べてみたら、-t オプションがあった。
- t, --target-directory=DIRECTORY
全ての SOURCE 引数を DIRECTORY に移動する
ということで、
find FROM_PATH -type f | xargs -n 1000 mv -t TO_PATH
とかした方が、ファイル1000個につき mv コマンドが1回になって効率がよい。
私に限って言えばこちらの方が都合がよいことが多い。
ただしファイル名やディレクトリ名に空白が入っていない場合に限る。
一般論として、様々な条件下でも十分に動くコマンドとしては -I{} を使う方法を紹介するのはリーズナブルで、「間違い」とか「そんなもの紹介しちゃだめ」ということでは決してない。