find
X日前よりも変更されたファイルを見つけるための良いサポートがありますがfind
、特定の日付後に変更されたすべてのファイルを見つけるにはどうすればよいですか?
find
他のファイルの時間と比較したり、作成された時間と現在の時間の違いを確認したりするためだけに、これを行うためのマニュアルページには何も見つかりません。目的の時間でファイルを作成し、それを比較することがこれを行う唯一の方法ですか?
find
X日前よりも変更されたファイルを見つけるための良いサポートがありますがfind
、特定の日付後に変更されたすべてのファイルを見つけるにはどうすればよいですか?
find
他のファイルの時間と比較したり、作成された時間と現在の時間の違いを確認したりするためだけに、これを行うためのマニュアルページには何も見つかりません。目的の時間でファイルを作成し、それを比較することがこれを行う唯一の方法ですか?
回答:
「-newer file」のみがある場合は、この回避策を実行できます。
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 reference
現在のファイルのタイムスタンプと参照を比較します。参照引数は通常、ファイルの名前(およびそのタイムスタンプの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
このようなスクリプトを使用できます
#!/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"
それはあなたが望むことをする必要があります。そうでなければ、これを達成する方法が組み込まれているとは思わない。
bc
整数演算のために、バッシュはそれを行うことができます((seconds = when - now))
、するフォーマット引数date
を加えなければならないdate +%s
し、いくつかのシステム持っていないかもしれませんdate -d
find ! -newermt “<DATE>”
このような:
find ! -newermt “jan 01 2015”
これにより、現在のディレクトリに2015年1月1日より古いファイルが表示されます。