コマンドで大量のファイルを一括処理する際のエラー「argument list too long」

2021年4月19日

ターミナルのコマンドによって多くのファイルを一括処理しようとした場合に現れるエラーについてです。

例えば、dirフォルダ内に含まれる大量のファイル全てをワイルドカードによって指定し、一度に chmod によって権限を変更しようとすると、以下のようなエラーが現れます。

chmod 757 dir/*
-> zsh: argument list too long: chmod

エラーが出て処理が失敗するのは、引数として渡すファイル名の配列の長さが処理できる上限を超えてしまうことが原因です。

したがって、各ファイル名ごとにコマンド(ここではchmod)を実行するようにしてあげると解決します。具体的には find と xargs を組み合わせて以下のようにコマンドを入力します。

sudo find dir/ -type f -print0 | xargs -0 chmod 0757

find によってdirに含まれるファイルを検索し、そのファイルごとに chmod を実行します。

オプション -print0 および -0 は空白を含むファイルを処理するために必要です。

以上、エラー "argument list too long" が発生した際の解決方法でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です