278

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

4

9 に答える 9

366

Max が指摘したように、できませんが、変更またはアクセスされたファイルをチェックすることはそれほど難しくありません。私はこれについてのチュートリアルを、遅くとも今日まで書きました。その本質は、-newerXYandを使用すること! -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」は通常、作成日に対応します。

于 2008-10-01T15:30:48.250 に答える
76

/home/このコマンドを使用して、必要に応じて期間を追加してファイルとフォルダーを検索します。

find /home/ -ctime time_period

time_period の例:

  • 30 日以上前:-ctime +30

  • 30 日以内:-ctime -30

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

于 2008-10-01T15:03:58.750 に答える
49

それは2つのステップですが、私はこのようにするのが好きです:

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

touch -t 0810010000 /tmp/t

これで、上記のファイルよりも新しいまたは古いすべてのファイルを見つけることができます (ファイルの変更日に従って移動します。また、アクセス済みおよび-cnewerファイルの状態が変更された場合に-anewerを使用することもできます)。

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

touch で 2 つのファイルを作成して、特定の日付の間のファイルを表示することもできます。

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

これにより、2 つの日付と時刻の間のファイルが検索されます

find / -newer /tmp/t1 -and -not -newer /tmp/t2
于 2008-10-01T15:05:07.390 に答える
39

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

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
于 2008-10-01T15:01:26.887 に答える
12

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

于 2008-10-01T15:08:24.607 に答える
8

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

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

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

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

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

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

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

于 2008-10-01T15:23:39.280 に答える
2

-atime、-ctime、および -mtime スイッチを使用して検索すると、達成したいことに近づくことができます。

于 2008-10-01T15:03:30.390 に答える
-4
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
于 2011-10-24T15:53:32.373 に答える
-6

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 などのパラメーターを探すと、ここで役立つと思います。

于 2008-10-01T15:02:40.923 に答える