Linuxコマンドで、最後のn
秒間に変更されたファイルを見つけたいのですが。
コマンドラインインターフェイスまたはGUIから実行できるシェルスクリプトまたはその他のツールはありますか?
次のようなfindコマンドを使用します。
find . -name "*.txt" -mtime -60s
すべてを検索するには*.txt
過去60秒間に変更されたファイル。
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
_
Glennが提案したのと同様に、たとえば、インストーラープロセスの実行中に変更されたすべてのものを見つけたい場合は、次のようなことを行う方が簡単かもしれません。
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
その後、時間計算を行う必要はありません。チェックポイントファイルの後に変更されたものを見つけるだけです。
これを行う最も簡単な方法は次のとおりです。
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
バージョンで機能しない場合があります。
-mtime -60s
をサポートしないfindのバージョンがある場合、より良い解決策は
touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan
お使いのバージョンのfind
が秒や実際の値を受け入れない場合は、私のように-mmin
を使用しますが、0を指定すると、すべてのファイルが1分未満で変更されます。
$ touch test; find . -type f -mmin 0
./test
ファイルの変更についてディレクトリを監視している場合は、おそらく無限のポーリングループの代わりに inotify-tools を使用する必要があります。