Syntax Error.

[Sy] 大量ファイルの移動などで「argument list too long」とエラーになってしまう場合の対処

2018/08/29

LinuxmacOSmv コマンドや 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/