web-dev-qa-db-ja.com

過去n秒間に変更されたファイルを見つけるLinuxコマンド

Linuxコマンドで、最後のn秒間に変更されたファイルを見つけたいのですが。

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

20
sushant

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

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

すべてを検索するには*.txt過去60秒間に変更されたファイル。

14
anubhava

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

次のエラーが発生します。

_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
_

たとえば、最後に変更された1秒、6秒、11秒などのファイルを過去120秒間作成すると、次のコマンドが見つかります。

_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
_
13
dr jimbob

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

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

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

9
dannysauer

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

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

回答に記載されている-mtime -60sオプションは、2016年であってもfindの多くのバージョンでは機能しません。-newermtの方がはるかに優れています。多くの異なる日付と時刻の形式を解析できます。

mminを使用する別の方法は次のとおりです。

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

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

このオプションは、すべてのfindバージョンで機能しない場合があります。

7
shivams

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

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

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

$ touch test; find . -type f -mmin 0
./test
1
soyayix

ファイルの変更についてディレクトリを監視している場合は、おそらく無限のポーリングループの代わりに inotify-tools を使用する必要があります。

1
glenn jackman