「検索」を使用して特定の日に作成されたファイルを検索する方法 [閉まっている]


254

UNIXコマンドを使用findして、特定の日に作成されたファイルを検索するにはどうすればよいですか?


8
bashスクリプトの質問は許可されているようです。
アラン

@MichaelScheper:私はそのコメントからどこから始めればよいのかもわかりません。
オービットのライトネスレース2015

1
@Notinlist:答えは次のとおりです:meta.stackexchange.com/questions/10249/…残念ながら、制限時間が切れました。残念ですが、ウェブ検索はまだここにあり、受け入れられた答えは多くの人にとって役に立ちました。
Michael Scheper

@MichaelScheper:unix.stackexchange.comに移行するための投票オプションを見つけた場合は、ぜひ私にそれを指摘してください。閉じるダイアログを表示する担当者がいないため、ヒントがあります。それはありません。何について話しているのかわからないときは、それほど戦闘的でないことを検討してください。ご清聴ありがとうございました。
オービットのライトネスレース

5
@LightnessRacesinOrbit:「combative」と遭遇したことをお詫び申し上げます。コメントを編集することは許可されていませんが、将来の参考のために、あなたの気分を害した質問を賞賛するコメントでしたか?あなたの以前のコメントに疑いの恩恵を与えた後でも、私は少し盲目的に感じています。:私は実際にどのように移行作品検索することで、別の「私も」を追加するよりも建設的なことをしようとしていたmeta.stackexchange.com/a/10250/249555 60日の時間制限の皮おそらくオプション、その?お尻のステアでごめんなさい。誠にありがとうございました。
Michael Scheper

回答:


323

Maxが指摘したように、それはできませんが、変更またはアクセスされたファイルをチェックすることはそれほど難しいことではありません。今日までに、これについてのチュートリアルを書きました。その本質は使用することで-newerXYあり、! -newerXY

例:2007年6月7日に変更されたすべてのファイルを検索するには:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

2008年9月29日にアクセスされたすべてのファイルを検索するには:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

または、同じ日に権限が変更されたファイル:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

ただし、ファイルの権限を変更しない場合、通常は「c」が作成日に対応します。


7
私のバージョンのfind(GNU 4.2.32)は、-newerXY述部をサポートしていないようです。特定の最小バージョンが必要ですか?それとも、特別な構成スイッチを使用してfindをコンパイルする場合ですか?
yukondude 2008年

1
@yukondude:その通りです。ローカルにあるfindのバージョン-GNU 4.4.0-にはありますが、Dreamhostにある4.1.20にはありません。ただし、2つのファイルを作成する方法はどちらでも機能します。
Arve

1
一部のシステム(FreeBSD、OS / X ...)-newerBtでは、ファイルの誕生(作成)時間と一致します。
Stephane Chazelas 14

3
これは、2001年(1998年にパッチとして最初に提供された場所)からFreeBSD-newerxtで利用可能であることに注意してください。 Y == tはサポートされていません)。-newerXY
Stephane Chazelas

使用:find(GNU findutils)4.4.0、この構文はSUSE ext3では機能しません。その日付のファイル/ w mtimeをリストすることになっている場合、何も返しません
niken

68

find location -ctime time_period

time_periodの例:

  • 30日以上前: -ctime +30

  • 30日未満: -ctime -30

  • ちょうど30日前: -ctime 30


7
問題は、期間内ではなく、特定の日付をテストしたいことです。
sverrejoh 2008年

1
それで、それが何日前かを理解し、その数を使用します。
jmanning2k 2008年

15
ctime作成時間とは関係ありません。これはiノードの変更時間です。
ステファンChazelas 14年

47

これは2つのステップですが、私はこの方法で行うのが好きです。

まず、特定の日付/時刻のファイルを作成します。この場合、ファイルは午前0時の2008-10-01です。

touch -t 0810010000 /tmp/t

今、私たちは(ファイル更新日時で行く。また、使用することができます上記のファイルよりも新しいか古いすべてのファイルを見つけることができます-anewerアクセスし、ため-cnewerファイルのステータスが変更されました)。

find / -newer /tmp/t
find / -not -newer /tmp/t

タッチで2つのファイルを作成することにより、特定の日付の間のファイルを確認することもできます

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

これは、2つの日付と時刻の間のファイルを検索します

find / -newer /tmp/t1 -and -not -newer /tmp/t2

3
find不足している古い問題の解決策としての+1-newerXY
フェリペアルバレス

1
IMO、今のところこれは受け入れられる解決策です。新しいカーネルは言うまでもなく、2.6.18-348.18.1.el5カーネルで-newermtを実行できませんでした。
DarkForce、

DarkForceと同じですが、新しいMT機能は非常に不安定なようです
niken

34

あなたはこれを行うことができます:

find ./ -type f -ls |grep '10 Sep'

例:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24

これはほとんどの人が望んでいることですが、十分な賛成票を受け取っていませんでした!!!
sjas 2015

2
これは、1つのディレクトリに数百万のファイルがある場合は機能しない可能性があります。
Dennis Nolte

3
grep検索語がファイル名に含まれている場合、副作用があります。
Snorex

mywiki.wooledge.org/ParsingLs-より良い方法は、おそらく作成日を機械可読形式で印刷するstatことですfind -printf
tripleee

12

できません。-cスイッチは、アクセス許可が最後に変更された日時を示し、-aは最新のアクセス時間をテストし、-mは変更時間をテストします。Linux(ext3)のほとんどのフレーバーで使用されているファイルシステムは、「作成時間」レコードをサポートしていません。ごめんなさい!


7
実際、それはファイルシステムのタイプだけではありません-ファイルシステムがそれを保持していたとしても、そのような情報を取得するためのシステムインターフェースはありません。Unixの欠点の1つは、初期の時代にさかのぼります。そのため、Unixは決して普及しません。
クリスダウニー、

1
Unixが離陸することはありませんか?
lucid_dreamer

8

@Max:作成時間についてです。

あなたはのいずれかの経過日数の引数を計算したい場合は、-atime-ctime-mtimeパラメータには、次の式を使用することができます

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

「2008-09-24」を任意の日付に置き換えます。ELAPSED_DAYSには、その日から今日までの日数が設定されます。(更新:結果から1を引いて、findの日付の丸めに合わせます。)

したがって、2008年9月24日に変更されたファイルを見つけるには、コマンドは次のようになります。

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

これは、使用しているバージョンが@Arve:の回答で言及されてfindいる-newerXY述語をサポートしていない場合に機能します。


2

-atime、-ctime、および-mtimeスイッチを使用してfindを実行すると、目的のものに近づくことができます。


-3
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

1
なぜファイルをコピーするのですか?`ls ...`動作中のコマンドの他に、findツールを使用しません。
山猫

-5

14日以上経過したすべてのファイルを削除するスクリプトで、このスクリプトレットを見つけました。

CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n "." >> $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG

少し追加の「man find」と-ctime / -atimeなどのパラメーターを探すと、ここで役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.