検索コマンド - パラメータリストが長すぎます。

検索コマンド - パラメータリストが長すぎます。

Oracle Linux 5.10
BASHシェル

[oracle@src01]$ getconf ARG_MAX
131072

[oracle@srv01]$ ls -1 | wc -l
40496

#!/bin/bash
#
# delete files in /imr_report_repo that are older than 15-days
find /imr_report_repo/* -maxdepth 0 -type f -mtime +15 |
while read file
do
    rm -f $file 
done

/usr/bin/find: Argument list too long

正しく読み取ると、許容される最大パラメータは131,072で、このディレクトリには40,496個のファイルしかありません。確認してみませんでしたが、おそらく40,000個のファイル(2週間以上のファイル)を削除しようとしているようです。

ベストアンサー1

私はこれがここに答えられたと思います。

https://arstechnica.com/civis/viewtopic.php?t=1136262

シェルは/imr_report_repo/*のファイル拡張を実行していますが、これは問題を引き起こします。同様の問題がありましたが、findコマンドを変更して解決しました。

find /imr_report_repo/* -maxdepth 0 -type f -mtime +15 

到着

find /imr_report_repo/ -name "*" -maxdepth 0 -type f -mtime +15 

引用符は、シェルがワイルドカード文字を拡張するのを防ぎます。その後、findは正規表現として使用できます。特定の基準に一致する多数のファイルを検索する必要がある場合にも役立ちます。

おすすめ記事