Linux上で、あるディレクトリ以下のファイルから

指定した更新日付の範囲内であるものを検索する方法を教えてください。
できればワンライナだとうれしいです。

「XX日前」とかではなくて、「2008/03/01 00:00:00から2008/03/10 00:00:00まで」
のような指定をしたいというのがポイントです。

findコマンドの-newerコマンドと、touch -t でなんとかしようと試みたのですが、
思いつかなかったので、質問させていただきました。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/26 09:50:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント23pt

lsとegrepを使ってはどうでしょうか。

たとえば 2007/10/10 00:00 - 2007/12/09 23:59 の間の hoge ディレクトリ以下のファイルをリストアップするなら、下記のようになります。

日本語化されたディストリビューションではlsの出力が違うので、正規表現の部分を適宜アレンジしてください。

ls -Rl hoge/ | egrep '(Oct [1-3][0-9])|(Nov [0-3][0-9])|(Dec 0[0-9]) 2007'

id:JULY No.2

回答回数966ベストアンサー獲得回数247

ポイント23pt

touch と find というアイデアでいけると思います。

touch -t 古い方の日時 /tmp/oldstamp

touch -t 新しい方の日時 /tmp/newstamp

find . -newer /tmp/oldstamp -a \! -newer /tmp/newstamp -print

rm /tmp/oldstamp /tmp/newstamp

id:bonlife No.3

回答回数421ベストアンサー獲得回数75

ポイント22pt

Perl使ってもOKでしたら、以下のようなワンライナーはいかがでしょう。

Date::Parseが必要です。

また、すごく長いです…。

その分、演算子にイコールをつけるかどうかで指定日時を含むかどうかを柔軟に設定できます。

perl -MFile::Find -MDate::Parse -MDate::Format -e 'find(sub {$t = (stat($_))[9]; printf(qq([%s] %s\n), time2str("%Y/%m/%d %T", $t), $File::Find::name) if ((-f $_) && $t > str2time($ARGV[0]) && $t < str2time($ARGV[1]));}, ".");' '2008/03/12 00:00:00' '2008/03/12 18:00:00'

Linux環境が手元になかったのでもしかしたらクォートが間違っているかもしれません。

実際にはWindows環境で以下のPerlワインライナーを試しました。

perl -MFile::Find -MDate::Parse -MDate::Format -e "find(sub {$t = (stat($_))[9]; printf(qq([%s] %s\n), time2str('%Y/%m/%d %T', $t), $File::Find::name) if ((-f $_) && $t > str2time($ARGV[0]) && $t < str2time($ARGV[1]));}, '.');" "2008/03/12 00:00:00" "2008/03/12 18:00:00"

出力は以下のようになります。

[2008/03/12 14:20:48] ./a.txt
[2008/03/12 14:18:42] ./b/bb.txt

また、OSコマンドにこだわりたい場合、以下のシェルスクリプトが参考になると思います。

(私が以前同じようなことをした際のメモ代わりのスクリプトです。)

[参考URL]

id:litt No.4

回答回数9ベストアンサー獲得回数1

ポイント22pt

分単位の指定でよければちょっと長いですがこんなのはいかがでしょうか。

ただし未来の指定はできません。

CUR=`date +%s` && find . -mmin -$((($CUR - `date -d '2008/03/01 00:05' +'%s'`)/60)) -and -mmin +$((($CUR - `date -d '2008/03/20 06:38' +%s`)/60))

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません