シェルスクリプトでワイルドカード文字を使用して削除(rm)するファイルが多すぎますか?

シェルスクリプトでワイルドカード文字を使用して削除(rm)するファイルが多すぎますか?

ディレクトリから数字で始まるすべてのファイルを削除する必要があるシェルスクリプトがあります。このファイルセットは、毎日削除する必要がある数十万のファイルを含むように成長しました。スクリプトには次の行が含まれています。

rm -f /my/dir/11*
rm -f /my/dir/12*

(( etc ))

rm -f /my/dir/1*
rm -f /my/dir/2*

各行にエラーメッセージが表示されます。

line 1: /usr/bin/rm: Argument list too long

この行を次に変更しようとしました。

ls -d /my/dir/11* | xargs rm

しかし、ls -d私に同じエラーメッセージが表示されました。

何百ものファイル名の置換を含むようにリストを増やすことなく、どのようにこれらのファイルを削除できますか?

答え1

相対パスを取得してに渡すには、rm次のコマンドを使用できます。findユースケースに応じて、次のコマンドを実行します。

find /my/dir -iname '[0-9]*' -type f

これにより、数字で始まるすべてのファイルが返されます。リストを削除するには、find次のコマンドを使用して削除します-delete

find /my/dir -iname '[0-9]*' -type f -delete

頑張ってください!

答え2

シェルに組み込みprintfコマンド(BashやDashなど)がある場合は、パイプできる長い引数のリストを受け入れることができますxargs

printf '%s\0' /path/to/glob* | xargs -0 rm -f

関連情報