0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linuxで特定のフォルダを監視し、ファイルが作成されたときに特定の処理を実行する(fswatch)

Posted at

inotify-tools,fswatchなどがあるが、総合的に見てfswatchがよさそう。
以下、ChatGPTが作成したの比較表です。

1. 概要の比較

特徴 inotify-tools fswatch
提供元 Linux専用 (inotify システムコール) クロスプラットフォーム対応
監視方法 Linuxカーネルの inotify を利用 OS固有の監視メカニズムを利用
クロスプラットフォーム Linux専用 Linux, macOS, Windows, BSD対応
インストールの容易さ 一般的なLinuxディストリで利用可能 LinuxだけでなくmacOSでも簡単に導入
機能性 シンプルかつイベントごとの監視 フレキシブルな設定が可能

2. 機能の比較

項目 inotify-tools fswatch
監視対象 ファイル、ディレクトリ ファイル、ディレクトリ
対応イベント create, delete, modify などの基本操作 内容変更, 時刻変更, メタデータ変更など幅広い
監視の再帰対応 明示的な設定が必要 (-r オプション) デフォルトで再帰対応
フィルタリングの柔軟性 限定的(特定拡張子や条件にはスクリプト必要) 正規表現やパターンで詳細指定可
ログフォーマットの自由度 固定フォーマット 柔軟なフォーマットを選択可能
リソース効率 非常に軽量 やや高負荷(監視範囲に依存)

3. ユースケースの比較

シナリオ inotify-tools fswatch
小規模プロジェクトの監視 適している 適している
大規模なフォルダの監視 負荷が少なく適している 可能だが負荷が増大する場合あり
OSを跨いだ開発 不適(Linux限定) 適している(クロスプラットフォーム対応)
監視内容のカスタマイズ スクリプトで対応可能だが煩雑 オプションで簡単にカスタマイズ可能
初心者向けの使いやすさ シンプルなCLI わかりやすいがオプションが多い

インストール方法

Debian/Ubuntu系は下記でOK。

sudo apt-get update
sudo apt-get install fswatch

テスト

fswatch /home/XXXXX/YYYYY | while read file; do 
  echo "Change detected: $file"; 
done

実行し、/home/XXXXX/YYYYYでtouch aと実行すると、

Change detected: /home/XXXXX/YYYYY/a
Change detected: /home/XXXXX/YYYYY/a
Change detected: /home/XXXXX/YYYYY/a
Change detected: /home/XXXXX/YYYYY/a

と4回反応している。

fswatch が4回イベントを検知するのは、ファイル操作(touch)に関連する複数のイベントが発生しているためで、fswatch がファイルやディレクトリの変更を監視する際に、異なる種類のイベントを検知してそれぞれを出力するため、とのこと。

-x オプションで各イベントタイプを確認できるので、

fswatch -x /home/XXXXX/YYYYY | while read file; do 
  echo "Change detected: $file"; 
done

に変更してみると

Change detected: /home/XXXXX/YYYYY/a Created
Change detected: /home/XXXXX/YYYYY/a PlatformSpecific
Change detected: /home/XXXXX/YYYYY/a AttributeModified
Change detected: /home/XXXXX/YYYYY/a Updated

と出力された(詳細の意味は割愛)。

ファイルが作られたときのみ反応するためには、先ほどの-xオプションを付けた上でgrepすることにより実現できそう。

fswatch /home/XXXXX/YYYYY -x | grep --line-buffered Created | while read file; do
    echo "File created: $file"
done
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?