web-dev-qa-db-ja.com

特定の日付に作成されたファイルを検索するための 'find'の使い方は?

特定の日付に作成されたファイルを検索するためにUNIXコマンドfindを使用するにはどうすればよいですか?

240
sverrejoh

Maxが指摘したように、できませんが、変更またはアクセスされたファイルをチェックするのはそれほど難しくありません。今日については遅くて、私は チュートリアル を書きました。その本質は-newerXY! -newerXYを使うことです。

例:2007年6月7日に変更されたすべてのファイルを見つけるには、以下のようにします。

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

2008年9月29日にアクセスされたすべてのファイルを見つけるには:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

または、同じ日に許可を受けたファイルが変更されました。

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

ただし、ファイルのアクセス権を変更しない場合は、通常 'c'が作成日に対応します。

302
Arve

find location -ctime time_period

Time_periodの例:

  • 30日以上前:-ctime +30

  • 30日未満前:-ctime -30

  • 約30日前:-ctime 30

65
Chris

それは2つのステップですが、私はこうするのが好きです。

最初に特定の日時のファイルを作成します。この場合、ファイルは深夜0時の2008-10-01です。

touch -t 0810010000 /tmp/t

これで、上記のファイルよりも新しい、または古いファイルをすべて見つけることができます(ファイルの更新日順)。また、アクセスには- anewer、ファイルの状態は- cnewerに変更できます).

find / -newer /tmp/t
find / -not -newer /tmp/t

タッチで2つのファイルを作成することによって、特定の日付の間のファイルを見ることもできます。

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

これは2つの日付と時刻の間にファイルを見つけるでしょう

find / -newer /tmp/t1 -and -not -newer /tmp/t2
45
Mark Biek

あなたはこれをすることができます:

find ./ -type f -ls |grep '10 Sep'

例:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
33
Jeff MacDonald

できません。 -cスイッチは、アクセス許可が最後に変更された日時を表示し、-aは最新のアクセス時刻をテストし、-mは変更時刻をテストします。ほとんどの種類のLinux(ext3)で使用されているファイルシステムは「作成時間」レコードをサポートしていません。ごめんなさい!

12
Max Cantor

@ Max:作成時間について正しいです。

ただし、-atime-ctime-mtimeのいずれかのパラメーターの経過日数引数を計算する場合は、次の式を使用できます。

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

"2008-09-24"を好きな日付に置き換えてください。ELAPSED_DAYSはその日から今日までの日数に設定されます。 (更新:findの日付の丸めに合わせるために、結果から1を引きます。)

したがって、2008年9月24日に変更されたファイルを見つけるには、コマンドは次のようになります。

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

あなたのバージョンのfindが@Arve:の答えで言及されている-newerXY述語をサポートしていない場合、これはうまくいきます。

8
yukondude

-atime、-ctime、および-mtimeスイッチを使用して検索すると、達成したいものに近づくことができます。

2
ayaz