X分前に生成されたファイルを検索する(GNU / BSD検索なし)

X分前に生成されたファイルを検索する(GNU / BSD検索なし)

私はこのfindコマンドを使用して30分以内に生成されたファイルを見つけます。

find . -ctime -30m

ただし、最大30日間文書を提供します。私もこれを試しましたが、これが有効なオプションではないこと-mminを示しています。-mmin

find私のコマンドに問題がありますか?

出力uname -rsはですAIX 2

答え1

AIX にはfind良い GNU 機能がない。

この問題を簡単に解決できます。関心のある境界を示すタイムスタンプを持つ2つの「参照」ファイルを作成します。

touch -amt 201407251200 myref1
touch -amt 201407251230 myref2

今それをする:

find . -type f \( -newer myref1 -a ! -newer myref2 \) -exec ls -ld {} +

ファイルのmtime時刻または変更時刻を示します。追加の変更(書き込み)が行われていない場合、これはファイルの作成タイムスタンプになり、それ以外の場合はファイルが最後に変更された時刻を示します。データ。ディレクトリの場合、mtime新しいオブジェクトが追加されるか、古いオブジェクトが削除されると更新されます。 Classic Unix / Linuxには実際の生成タイムスタンプはありませんが、これは一部のプラットフォームで実装および検索できます。 (もっと見るここ。 MAC OSユーザーは、「ls -lU」を使用してこれを取得できます。

ctime「作る」と混同しないでください。 stat ctime() 構造は、inode 変更 (たとえば、権限、所有権、およびオブジェクト名) の最後のタイムスタンプを表します。

答え2

補う@JRファーガソンの答え

過去30分間に変更された参照ファイルをインポートするには、移植操作を実行できます(1秒精度)。

TZ=ZZZ0 touch -t "$(TZ=ZZZ0:30 date +%Y%m%d%H%M.%S)" /some/ref/file

次に、次のようにします。

find . -newer /some/ref/file

これは50時間間隔でのみ機能します。

TZ=ZZZ-24:59:59 touch -t "$(TZ=ZZZ24:59:59 date +%Y%m%d%H%M.%S)" file

これは、移植可能な方法(POSIXly)で取得できる最も古いファイルです。

答え3

ページで-cmin.fromを使用する必要があります。manfind

   -cmin n
          File’s status was last changed n minutes ago.

   -ctime n
          File’s status was last changed n*24 hours ago.  See the comments for -atime to understand how rounding affects the  interpreta-
          tion of file status change times.

答え4

あなたはそれを使用することができますperl

#! /usr/bin/perl

use strict;
use warnings;
use File::Find ();
use File::stat;

use vars qw(*name);
*name   = *File::Find::name;
my $now = time;

File::Find::find({wanted => \&wanted}, '.');

sub wanted {
    print "$name\n" if stat($_)->mtime > ($now - 30*60)
                    and $name ne ".";
}

OSXまたはFreeBSD(を使用して)を除いて、ファイル作成日を取得することはできませんls -U

ext2/3/4ファイルシステムにある場合は、次のものを使用できます。デバッグファイルファイル生成日を取得します。

関連情報