Linux:findを使用して<date>より古いファイルを見つける


31

findX日前よりも変更されたファイルを見つけるための良いサポートがありますがfind、特定の日付後に変更されたすべてのファイルを見つけるにはどうすればよいですか?

find他のファイルの時間と比較したり、作成された時間と現在の時間の違いを確認したりするためだけに、これを行うためのマニュアルページには何も見つかりません。目的の時間でファイルを作成し、それを比較することがこれを行う唯一の方法ですか?


1
これは、SuperUser.comでよく聞かれます
ジョシュブロウ

6
これを閉じるつもりはありません。システム管理者にとっても興味深いかもしれません。
飛び散る

このコマンドは、バックアップスクリプトの一部であり、毎晩のバックアップでインストール後に変更された/ etcからすべてを取得します。
-DrStalker

9歳で、新しい回答をモデレートするときに気づいたばかりです。この質問のタイトルと本文は同じではありません。タイトルは「<date>より古いファイル」を要求しますが、本文には「特定の日付後に変更されました」と記載されています。「後」を特定の日付よりも新しいものとして解釈し、古いものではありません。
ジョフリー

回答:


19

「-newer file」のみがある場合は、この回避策を実行できます。

touch -t 201003160120 some_file
find . -newer some_file

男のタッチ:

  -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

タッチにこのオプションがあると想定します(タッチは5.97です)。


48

いいえ、日付/時刻文字列を使用できます。

から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

5
GNU findバージョン4.2.27を使用するCentos 5.2を使用していますが、-newermtまたは "-newer file"以外の-newerパラメーターをサポートしていません
DrStalker

1
GNUは4.3.3以降がサポートするのfindutils -newerXYに応じsavannah.gnu.org/bugs/?11668
フィリップ・ダービンを

25

質問とは直接関係ありませんが、ここでつまずく人にとっては興味深いかもしれません。

findコマンドは、必要な日付より古いファイルを検索する-olderパラメーターを直接サポートしていませんが、否定ステートメントを使用できます(受け入れられた回答例を使用)。

touch -t 201003160120 some_file
find . ! -newer some_file

指定された日付より古いファイルを返します。


3
編集者-多分それは受け入れられた答えにマージされるべきですか?
nEJC

このソリューションは、この種の問題を解決するための最もエレガントな方法です:)
ラビノクル

9
find <dir> -mtime -20

このfindコマンドは、過去20日間に変更されたファイルを検索します。

  • mtime->変更(atime = accessed、ctime = created)
  • -20-> 20日未満(20正確に20日、20日以上+20)

次のような制限を追加できます。

find <dir> -mtime -20 -name "*.txt"

前と同じですが、「。txt」で終わるファイルのみを検索します。


5

追加するだけです-2つの新しい引数を使用して、時間間隔で検索することもできます。

find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls

2007年3月のすべてのファイルを検索します。


1

このようなスクリプトを使用できます

#!/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
一時停止を追って通知があるまで。

これはCentos 5.2用です。-dがあります。ただし、整数の数学について知っておくと便利です。
リチャードホロウェイ

1
find ! -newermt “<DATE>”

このような:

find ! -newermt “jan 01 2015” 

これにより、現在のディレクトリに2015年1月1日より古いファイルが表示されます。

https://muzaffarmahmoodblog.wordpress.com/2019/07/11/linux-command-to-remove-files-older-than-2015-in-a-directory/


私はServerFaultであなたを歓迎し、質問のタイトルと本文が異なることを言っていることに気付くまで重複した答えをポーズすることを再検討するようにお願いするコメントを書きました:タイトルは「<date>より古いファイル」を要求し、質問は「変更されました」私の意見では2つの異なるものです。たぶん、あなたの投稿で違いを明確にし、否定の使用を説明することができます。貢献していただきありがとうございます。説明のために質問にコメントを投稿します。貢献してくれてありがとう!
ジョフリー

0

日付が比較に適した形式になっている場合、

mydate=201003160120
find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.