今日に属さないすべてのログファイルと、名前に2015
を含むファイルのみを一覧表示します。
これらは私が試したコマンドです:
find . -name 2015 -mtime +1 -exec ls -ltrh {} \;
find . -name *2015* -mtime +1 -exec ls -ltrh {} \;
両方からの出力は何もありませんが、それでもファイルはそこにあります。これらのコマンドに何か問題があり、何が得られないのですか。助けていただければ幸いです。
zsh では、 glob qualifiers を使用できます(これは一意のzsh機能であり、bashなどの他のシェルでは使用できません)。
ls -ltr *2015*(m+1)
これは、現在のディレクトリ内のファイルのみをリストします。 ディレクトリを再帰的にトラバースする 、使用
ls -ltr **/*2015*(m+1)
find
を使用すると、-name 2015
は、名前が正確に2015
であるファイルのみを検索します。 -name *2015*
は、現在のディレクトリに2015
を含む名前のファイルがない場合にのみ機能します。これは、find
が呼び出される前にシェルがパターン*2015*
を展開するためです。パターンを引用する必要があります。
find -name '*2015*' -mtime +1 …
find -mtime +1
とzshの*(m+1)
の両方が少なくとも48時間前であり、今日より古いファイルではないことに注意してください。プラス記号は「次を超える」ことを意味し、日数は切り捨てられます。少なくとも24時間前のファイルを検索するには、-mtime +0
または(m+0)
を使用します。
最後に変更されたファイルを検索する場合は、昨日またはそれ以前、 -newermt
述語 でfind
を使用できます。
find -name '*2015*' ! -newermt 'today 0:00' …
このテストをzshで行う便利な方法はありません。
式を引用し、括弧も引用することをお勧めします
find . -name "2015" -mtime +1 -exec ls -ltrh '{}' \;
または
find . -name "*2015*" -mtime +1 -exec ls -ltrh '{}' \;
見つかったファイルをlsに渡す必要はありません。
find . -name "*2015*" -mtime +1