web-dev-qa-db-ja.com

特定の日に変更されたすべてのファイルを取得する

特定の日に変更された特定のディレクトリ内のすべてのphpファイルを見つけることは可能ですか?

私は使っています

find /var/www/html/dir/ -mtime -28 | grep '\.php' 

過去28日以内に変更されたファイルを取得するには、次の日付に変更されたファイルのみが必要です:2011-02-08

20
Elitmiar

findの最近のバージョン(例GNU 4.4.0))では、-newermtオプションを使用できます。たとえば、変更されたすべてのファイルを2011-02-08

$ find /var/www/html/dir/ -type f -name "*.php" -newermt 2011-02-08 ! -newermt 2011-02-09

また、phpのファイルを見つけるためにgrepにパイプする必要がないことにも注意してください。これは、findが-nameオプションで行うことができるためです。

これを見てみましょうSOより多くの提案のための回答: 「検索」を使用して特定の日に作成されたファイルを検索する方法?

22
dogbane

厄介なことに、標準のfindを使用する直接的な方法はありません。 GNUシステム(例:非組み込みLinux、Cygwin))上のfindの最近のバージョンと一部の* BSDには -newermtなどのオプションがあり、日付を綴ったファイルの日付

標準のfindでは、ファイルの日付を現在の日付(-mtime)または固定ファイルと比較するだけで済みます。この場合、現在の日付は通常役に立ちません(findコマンドを実行したときから数えますが、ほとんどのアプリケーションではカレンダーの日付が必要です)。これにより、範囲を定義する一時ファイルを作成する手間が省けます。

touch -t 201103070000 start.tmp
touch -t 201103080000 stop.tmp
find . -newer start.tmp \! -newer stop.tmp -print
rm start.tmp stop.tmp

日付を使用できないfindのバージョンでは、すでにほぼ適切なコマンドがあります。

find /var/www/html/dir/ -mtime 27 | grep '\.php'

一般に、findの場合-n以下を意味し、n等しいを意味します+- nは「以上」を意味します。従来のfindにはいくつかの例外がありますが、GNU findやBSD/Mac OS Xなどの他の新しいバージョンでは修正されています(これを覚えておくと、 Solarisまたは他の商用Unixシステムで自分を見つけてください。)

2
geekosaur

zshを使用すると、 function age を使用して、特定の日付に変更されたファイルの名前のみを出力できます。

autoload age 
 print -rl-* .php(.e:age 2011/02/08 :)

または、再帰的に検索する場合:

autoload age 
 setopt extendedglob 
 print -rl-**/*。php(.e:age 2011/02/08 :)
2
don_crissti