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


20

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

私は使っています

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

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

回答:


22

最近のバージョン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

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

より多くの提案については、このSOの回答をご覧ください:「find」を使用して特定の日に作成されたファイルを検索する方法は?


4

迷惑なことに、standardには直接的な方法はありませんfindfindGNUシステム上の最近のバージョン(たとえば、非組み込みLinux、Cygwin)および一部の* BSDには、ファイルの日付と綴られた日付を比較するなどのオプション-newermtあります

standard 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

2

あなたはほとんど持っていますのバージョンについては、すでに右のコマンドをfindそれはあなたが日付を使用させません。

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

一般的に、のためにfind- N手段よりも少ないN手段は等しく、+ N「以上」を意味します。従来型にfindはいくつかの例外がありますが、GNU findおよびBSD / Mac OS Xなどの他の新しいバージョンはそれらを修正しました。(Solarisまたは他の商用Unixシステムで自分自身を見つけた場合は、このことに留意してください。)


1

この関数zsh使用して、特定の日付に変更されたファイルの名前のみを印刷できます。age

オートロード年齢
print -rl-* .php(.e:age 2011/02/08 :)

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

オートロード年齢
setopt extendedglob
print -rl-** / *。php(.e:age 2011/02/08 :)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.