find コマンドでクリーンアップの使用が機能しません。

find コマンドでクリーンアップの使用が機能しません。

トリムを次のように使用しようとしています。

find /opt/app/bss/sieb/fs_clone1/userpref -name "*" -type f -mtime -7 -prune

まだサブディレクトリを検索しています。

ベストアンサー1

サブディレクトリを検索していないため、まだ-prunサブディレクトリを検索しています。

-pruneツリーの場合は、find最初に一致する必要があります。

find / -type d ! -path / -prune -print

/boot
/home
/mnt
/opt
/esp
/dev
/proc
/root
/run
/srv
/sys
/tmp
/usr
/var
/etc

-path /それ以外の場合は、最初に見つかったディレクトリが/ルートディレクトリになります。それ-pruneその後、-print編集が行われます。

しかし、見てわかるように、はいマッチd ファイルが-pruneすべてです。だからあなたはマッチ -type fツリーはまったくありません-prune。一般ファイルにはサブディレクトリはありません。

おそらく次のようなものが欲しいでしょう。

find /opt/app/bss/sieb/fs_clone1/userpref \
     -path \*path/to/ignore -prune -o     \
   ! -type d -mtime -7

これはあなたが言ったものとは非常に異なります。まずは-path path/to/ignore動作しません。それは一致する必要がありますみんなパスで始まり、開始ツリーは始まります/が、path/to/ignoreまったくそうではありません。だから私は*globstarを入れましたが、より良い - おそらくより簡潔には次のようになります:

cd /opt/app/bss/sieb/fs_clone1/userpref &&
find . -path ./path/to/ignore -prune -o  \
     ! -type d -mtime 7

...これにより、出力が複雑になります。ただし、どちらのパターンにも一致するすべてのパスは「d」に-pathなります。-pruneいいえ別のステートメントに移動したために印刷され、自動的に印刷されるスクリプト全体の最後の式にすぎません-ofind

しかし最後の部分も違う。-name '*'名前はすべて一致するため、フィルタリングしないことをお勧めします'*'。私はこれが! -type d多くの人が言うときに意味していると思います-type f。前者は、fifo、ソケット、その他の奇妙なファイル形式を含むディレクトリ以外のすべてのファイル形式と一致します。後者は通常のファイルにのみ一致します。おそらくあなたは後者が欲しいでしょう。しかし、私はそれを言及したかっただけです。

とにかく、すべてが決定され、完了すると、*path/to/ignore他のすべてが一致し、切り捨てられ、印刷されません。このファイルはディレクトリタイプではなく、7日前に変更されました。

おすすめ記事