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