過去n秒間に変更されたファイルを検索するLinuxコマンド


19

最後のn数秒で変更されたファイルを見つけるためのLinuxコマンドが欲しい。

コマンドラインインターフェイスまたはGUIから実行できるシェルスクリプトまたは他のツールはありますか?

回答:


14

次のような検索コマンドを使用します。

find . -name "*.txt" -mtime -60s

*.txt直前の60秒間に変更されたすべてのファイルを見つける。


17
Linuxでは、GNU findutils 4.4.2のfindを使用して、次のコマンドでエラーが発生しますfind: missing argument to `-mtime'。ただし、-mminと10進数の引数を使用して、目的の動作を実現できます。s引数として使用するための検索に関するマンページで参照を見つけることができませんでした。
ジンボブ博士13年

4
-60sはに対する有効な引数ではありません-mtime。POSIXやGNU findで有効なオプションである「60年代」でもありません。引数-mtimeは、ファイルが変更された24時間前の数を指定する数値です。
ダニーザウアー14年

13

秒を指定するmtimeを使用したソリューションは、find --version == を使用するLinuxシステムでは機能しませんfind (GNU findutils) 4.4.2

次のエラーが表示されます。

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

ただし、-mmin(最後のm分で変更された)を使用でき、10進数の引数を使用できます。たとえば、次の例では、最後の30秒間に変更されたファイルが検出されます。

find . -mmin 0.5

たとえば、過去120秒間に1秒、6秒、11秒、...の最後に変更されたファイルを作成すると、このコマンドは以下を検出します。

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

したがって、数秒で本当に必要な場合は、次のようなことができます:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

glennが提案したものと同様に、たとえば、インストーラープロセスが実行されていた時間にすべての変更を見つけたい場合、次のようなことをする方が簡単かもしれません。

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

その後、時間の計算を行う必要はありません。チェックポイントファイルの後に変更があっただけです。


6

サポートしていないfindのバージョンがある場合-mtime -60s、より良い解決策は

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

これを行う最も簡単な方法は次のとおりです。

find . -name "*.txt" -newermt '6 seconds ago'

-mtime -60s多くのバージョンでは動作しません答えに言及したオプション、findでも2016年には、-newermt私たちに多くの良いオプションです。多くの異なる日付と時刻の形式を解析できます。

mminこれを使用する代替方法は次のとおりです。

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

このオプションは、すべてのfindバージョンで機能するとは限りません。


2
これが明らかに最適なソリューションです。
rednoah


1

のバージョンがfind、私のように秒や実際の値を受け入れない場合、を使用し-mminますが、0を指定すると、すべてのファイルが1分以内に変更されます。

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