検索と削除から隠しディレクトリを除外

検索と削除から隠しディレクトリを除外

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つの部分(または)条件に分けることができます。

  1. ツリーパスの一致は/NAS/logs/.snapshot削除(クリーンアップ)され、追加の操作では考慮されません。
  2. 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

(これは、質問に断片的な情報を提供するよりも完全な情報を提供することの重要性を示しています。またはまったく提供しないことです。)

おすすめ記事