7日以上経過したログを削除する必要がある削除ロジックに取り組んでいます。
今、2種類のログがあります。 1)開発者_で始まり、2)_cで終わります。
私が興味を持っているログは、/NAS/logs
そのパスの他のサブフォルダの後ではなく、それ以降にのみあります。
以下はサンプルログです。
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/developer_score_20191113.log
/NAS/logs/.snapshot/Enterprise_Primary.2019-11-17_1300/trdcvf_03_00_c.log.20191113163858
/NAS/logs/trddffgc004_00_c.log.20191118030038
/NAS/logs/developer_run_score.log.20191118030039
ここではこれらのログにアクセスできないため、隠しフォルダ.snapshotのすべてのログを除外したいと思います。
以下のコマンドを使用してそのファイルを識別しようとしていますが、引き続き.snapshotファイルも提供されます。
-pruneオプションも試しましたが、役に立ちませんでした。
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"
最終注文
find /NAS/logs/ -mindepth 1 -type f \( -iname "*_c.log.*" -or -iname "developer_run_*" \) -not -path "./.snapshot/*"-mtime +7 -delete
誰もがクエリからこのディレクトリを除外するのに役立ちますか?
答え1
指定した2番目のファイル名基準を満たすサンプルファイルはありません。一部のファイル_c
では_c
。含むfind
次のようにコマンドを作成できます。
find /NAS/logs -type d -path '/NAS/logs/.snapshot' -prune -o -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
-o
これは2つの部分(または)条件に分けることができます。
- ツリーパスの一致は
/NAS/logs/.snapshot
削除(クリーンアップ)され、追加の操作では考慮されません。 - 7日以上前に変更され、名前が一致するファイルを一覧表示(印刷)します
developer_*
。*_c*
一致するファイルを削除するには、に置き換えるか、単に追加する必要があります-print
。-delete
-delete
ディレクトリインスタンスをクリーンアップするには、一致条件.snapshot
の最初の部分を次のように変更します。
find /NAS/logs -type d -name '.snapshot' -prune -o ...
これで問題に追加情報を追加したので、複雑になる必要はありません。以下を使用できます。
find /NAS/logs -maxdepth 1 -type f -mtime +7 \( -name 'developer_*' -o -name '*_c*' \) -print
(これは、質問に断片的な情報を提供するよりも完全な情報を提供することの重要性を示しています。またはまったく提供しないことです。)
答え2
-pruneオプションも試しましたが、役に立ちませんでした。
どうしたの?
私のコメントのリンクは、-深さのために-pruneと-deleteを一緒に使用するのに問題があることを示しています。説明の検索とトリミング
私の考えでは、ここでは次のことを行う必要があります。
... -path '*/.snapshot/*' -o ... ... -delete
データ(およびテスト)が多い場合にのみ、「-prune」操作を見逃すことがあります。
find kernel -path '*/sched/*' -o -name '???.c' -exec grep -H 'struct ta' {} +
sys.c、pid.c、cpu.cで行を見つけます。
なしでは、kernel/sched/psi.c-o
に-a
3行だけを提供します。