特定の日付に作成されたファイルを検索するためにUNIXコマンドfind
を使用するにはどうすればよいですか?
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'が作成日に対応します。
find location -ctime time_period
Time_periodの例:
30日以上前:-ctime +30
30日未満前:-ctime -30
約30日前:-ctime 30
それは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
あなたはこれをすることができます:
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
できません。 -cスイッチは、アクセス許可が最後に変更された日時を表示し、-aは最新のアクセス時刻をテストし、-mは変更時刻をテストします。ほとんどの種類のLinux(ext3)で使用されているファイルシステムは「作成時間」レコードをサポートしていません。ごめんなさい!
@ 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
述語をサポートしていない場合、これはうまくいきます。
-atime、-ctime、および-mtimeスイッチを使用して検索すると、達成したいものに近づくことができます。