web-dev-qa-db-ja.com

ファイル名に「2015」が含まれる1日以上前のファイルを一覧表示する方法は?

今日に属さないすべてのログファイルと、名前に2015を含むファイルのみを一覧表示します。

これらは私が試したコマンドです:

find . -name 2015 -mtime +1 -exec  ls -ltrh  {} \;
find . -name *2015* -mtime +1 -exec  ls -ltrh  {} \;

両方からの出力は何もありませんが、それでもファイルはそこにあります。これらのコマンドに何か問題があり、何が得られないのですか。助けていただければ幸いです。

10
rɑːdʒɑ

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で行う便利な方法はありません。

2
Gilles

式を引用し、括弧も引用することをお勧めします

find . -name "2015" -mtime +1 -exec  ls -ltrh  '{}' \;

または

find . -name "*2015*" -mtime +1 -exec  ls -ltrh  '{}' \;

見つかったファイルをlsに渡す必要はありません。

find . -name "*2015*" -mtime +1
2
Panther