find
は、X日以内に変更されたファイルを見つけるのに優れていますが、find
を使用して、特定の日付以降に変更されたすべてのファイルを見つけるにはどうすればよいですか?
これを行うためのfind
のマニュアルページには何も見つかりません。他のファイルの時間と比較するため、または作成された時間と現在の違いをチェックするためだけです。これを行う唯一の方法は、目的の時間でファイルを作成し、それと比較することですか?
「-newerファイル」しかない場合は、次の回避策を実行できます。
touch -t 201003160120 some_file
find . -newer some_file
男のタッチ:
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
あなたのタッチにこのオプションがあると仮定します(私はタッチ5.97です)。
いいえ、日付/時刻文字列を使用できます。
man find
:
-newerXYリファレンス
現在のファイルのタイムスタンプを参照と比較します。参照引数は通常、ファイルの名前(およびそのタイムスタンプの1つが比較に使用されます)ですが、絶対時間を表す文字列にすることもできます。 XとYは他の文字のプレースホルダーであり、これらの文字は、比較にどのように参照が使用されるかに属する時間を選択します。a The access time of the file reference B The birth time of the file reference c The inode status change time of reference m The modification time of the file reference t reference is interpreted directly as a time
例:
find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls
質問とは直接関係ありませんが、ここでつまずく人にとっては興味深いかもしれません。
findコマンドは、必要な日付より古いファイルを検索するための-olderパラメーターを直接サポートしていませんが、否定ステートメントを使用できます(受け入れられた回答の例を使用):
touch -t 201003160120 some_file
find . ! -newer some_file
古い提供された日付よりもファイルを返します。
find <dir> -mtime -20
この検索コマンドは、過去20日以内に変更されたファイルを検索します。
次のような追加の制限を追加できます。
find <dir> -mtime -20 -name "*.txt"
以前と同じですが、「。txt」で終わるファイルのみを検索します。
追加するだけ-時間間隔で検索するために2つのnewermt引数を使用することもできます。
find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls
2007年3月のすべてのファイルを検索します。
このようなスクリプトを使用できます
#!/bin/bash
if [ $# -ne 1 ];then
when="today"
else
when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`
seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `
find . -cmin $minutes -print
$ PATHに「newerthan」として保存し、実行可能にします。
次に、次のような特定の日付の後に変更されたファイルを見つけることができます。
newerthan "2010-03-10"
または
newerthan "last year"
または
newerthan "yesterday"
それはあなたが望むことをするはずです。そうでなければこれを達成するための組み込みの方法はないと思います。
find ! -newermt “<DATE>”
このような:
find ! -newermt “jan 01 2015”
これにより、現在のディレクトリに2015年1月1日より古いファイルが作成されます。
日付が比較に適した形式になっている場合、
mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'