[Sy] 大量ファイルの移動などで「argument list too long」とエラーになってしまう場合の対処
2018/08/29
Linux や macOS で mv コマンドや cp コマンドを使って大量のファイルを処理しようとすると、「 argument list too long 」といったエラーが起きてしまう場合があります。その時は、このコマンドでいけます。
例えば、大量のファイルを移動させようとすると、こんな感じにエラーが起きてしまいます。
(例:xxx ディレクトリにある CSV ファイルをすべて yyy ディレクトリに移動)
$ mv xxx/*.csv yyy/
zsh: argument list too long: mv
コマンドに渡す引数が多すぎるということですね。
これを解決するためには、以下のようなコマンドを使います。
$ find [ディレクトリ] -name [条件] -print0 | xargs -0 -I {} mv {} [移動先]
このコマンドでは、前半の find
で対象のファイルを検索し、ファイル名をリストで得ることができます。それをパイプで後半の xargs
に渡し、ひとつずつ mv
コマンドを使って移動していく、ということをやっています。
最初の例をこのコマンドに置き換えると、こうなります。
$ find xxx/ -name "*.csv" -print0 | xargs -0 -I {} mv {} yyy/