find コマンドの使用または条件の指定方法

find コマンドの使用または条件の指定方法

これで、サイズが25 MBを超え、日付が過去7日間のファイルを探したいと思います。 orをどのように使用できますか?今私はこう書いています。

find /var/lib/docker/ -type f ( -size +25M -or -mtime +7 ) -name *.log

しかし、うまくいきません。

答え1

実際、OR(テキストはANDを意味)を意味すると仮定すると、*.logパターンを引用する必要があることを除いて、コマンドは正しく表示されます。また、シェル()サブシェルであるとは思わないように、引用またはエスケープする必要があります。

find /var/lib/docker/ -type f \( -size +25M -o -mtime +7 \) -name '*.log'

'(' ... ')'二重引用符を使用するのと同じように機能します。

引用しないと、*.logシェルは実行前に現在のディレクトリのすべてのファイル名に対してパターンを拡張しようとしますfind

上記のコマンドでは、-o非標準コマンドの代わりにを使用することを選択しました-or

効率性に興味がある場合は、テストを次のように並べ替えることができます。

find /var/lib/docker/ -name '*.log' -type f \( -size +25M -o -mtime +7 \)

つまり、名前が一致しない限り、各ファイルのサイズとタイムスタンプを取得するために呼び出しをfind使用する必要はありません。stat*.log

関連情報