3

たとえば、1.txt、2.txt、3.txtという3つのファイルがあり、それらが1時間間隔で作成された場合、それぞれ午後2時と午後3時です。必要なのは、特定のファイルから1時間以内に変更されたすべてのファイルを検索するコマンドです。

私はターミナルのファイルと同じディレクトリにいて、すべてのファイルはsetuid権限です

私は試してきました:

探す 。-type f -perm -4000 -newer 2.txt -mmin -60 -print

これは3.txtを返すはずですが、返されません

2.txtの前または後の1時間に作成されたファイルに何を使用しますか?

4

4 に答える 4

1

これを試して

touch /tmp/temp -t time1

touch /tmp/ntemp -t time2

探す 。-新しい /tmp/temp -a ! -newer /tmp/ntemp -exec ls -l {} \; 2>/dev/ヌル

どこ

time1 = ファイル作成時間 - 1 時間

time2 = ファイル作成時間 + 1 時間

元:

time1 = 201210041500

time2 = 201210041700

于 2012-10-04T22:17:42.057 に答える
1

ここに私の論理があります -

最初に、いくつかの変数でエポック以降のファイルの最終アクセス時刻を秒単位で取得します。

time_in_sec=$(stat -c %X 2.txt)

過去 1 時間の時刻を取得します (つまり、3600 秒前)

one_hr_old_time_in_sec=`expr $time_in_sec - 3600`

find コマンドに適した形式に変換します

newerthan=$(date -d @$one_hr_old_time_in_sec '+%m-%d-%y%n %H:%M:%S')

元のファイルの時刻を find コマンドに適した形式に変換する

olderthan=$(date -d @$time_in_sec '+%m-%d-%y%n%H:%M:%S')

find コマンドを使用して、2 つの期間の間に変更されたファイルのリストを取得する

find . -newermt "$newerthan" ! -newermt "$olderthan" -print

それが機能する場合は、ファイル名をパラメーターとして取り、+3600 も試すことができる小さなシェル スクリプトを作成できます。
正直なところ、私はそれを試していません。それがうまくいくことを願っています!

于 2012-10-04T20:56:28.603 に答える
1

-newermt はエポックからの N 秒間 @N を含む「date」と同じ形式を受け入れるため、前のソリューションは単純化できます。

また、「stat」コマンドについては、-X (最終アクセス時刻) の代わりに -Y (最終変更時刻) を使用する方がよいでしょう。

したがって、変更されたファイルを見つけるコマンド + または - 1 時間の 2.txt は次のとおりです。

N=$(stat -c %Y 2.txt)  
find . -newermt @$((N-3600)) ! -newermt @$((N+3600)) -print
于 2015-11-19T13:38:03.273 に答える
0

あなたの例を考えると、これを午後 4 時以降に実行している場合、 「60 分以内に変更された」ではなく、「過去 60 分間に変更され、最近では」を意味するため3.txt、返されないことは理にかなっています。現在、あなたが望んでいることを行うオプションはないと思います(少なくとも、私が持っているバージョンにはありません)が、またはでスクリプトを作成するのはそれほど難しくありません.-newer 2.txt -mmin -602.txt2.txtfindpythonperl

于 2012-10-04T14:35:30.803 に答える