在linux中,當一個新檔案被新增到一個目錄時,如何執行一個任務

本教程將向您展示如何使用Linux檔案系統事件(notify)在每次檔案出現在目錄中時獲得通知。您可以使用這些觸發器來自動執行系統上的常見任務。...

本教程將向您展示如何使用Linux檔案系統事件(notify)在每次檔案出現在目錄中時獲得通知。您可以使用這些觸發器來自動執行系統上的常見任務。

我們將編寫一個指令碼,監視一個目錄並對新增的新檔案執行操作。一旦檢測到每個檔案,它就會被gzip壓縮並移動到另一個目錄。該指令碼透過一個名為inotiftools的實用程式使用inotify子系統。但是首先,讓我們安裝工具並進行實驗。

安裝inotify工具和gzip

如果您使用的是Ubuntu或其他基於Debian的發行版,請使用apt get將此軟體包安裝到您的系統上。在其他Linux發行版上,請改用Linux發行版的包管理工具。

sudo apt-get install inotify-tools gzip

使用inotify工具進行試驗

讓我們先觀察一個目錄,看看新檔案到達時會發生什麼事件。我們將使用一個名為inotifywatch的工具,它是inotify工具的一部分。建立一個名為“incoming”的新目錄:

mkdir incoming

透過執行以下命令開始監視此目錄:

inotifywatch -v incoming

這將指示inotify監視“incoming”目錄中的所有檔案系統事件。v選項使工具打印出關於它正在做什麼的額外資訊。我們還沒有指定超時選項(-t),命令將繼續收集事件,直到使用CTRL+C退出。此時,我們的終端應該如下所示:

在linux中,當一個新檔案被新增到一個目錄時,如何執行一個任務

開啟一個新的終端視窗(或選項卡)並切換到傳入目錄。使用touch命令建立一個名為“newfile”的新檔案

cd incoming/ touch newfile

現在回到第一個終端視窗,點選CTRL+C停止inotifywatch。

在linux中,當一個新檔案被新增到一個目錄時,如何執行一個任務

控制檯將提供一個事件表,指示“create”、“open”、“attrib”和“close\u write”的一個例項。這四個事件發生在我們使用touch建立新檔案、設定其檔案訪問屬性、開啟它以寫入空終止字元,然後關閉它時。這些只是inotify工具可以在檔案系統上監視的眾多事件中的一小部分。您可以在inotifywatch的主頁上看到完整的列表。

出於我們的目的,我們只對兩個事件感興趣:

  • “create”–在目標目錄中建立檔案時。
  • “moved_to”–當檔案從另一個位置移動到目標目錄時。

讓我們再次嘗試inotifywatch,但這次只指示它監視這兩個事件。在第一個終端視窗中執行此命令:

inotifywatch -v -e create -e moved_to incoming

在第二個終端視窗或選項卡中,讓我們嘗試建立一個新檔案,更改其內容,然後將檔案從另一個位置移動到目標目錄。所有這些命令都是從主目錄執行的。

touch incoming/created echo Testing123 >> incoming/created touch /tmp/created2 mv /tmp/created2 incoming/

返回到第一個終端視窗,按CTRL+C停止inotifywatch。我們將看到以下輸出:

在linux中,當一個新檔案被新增到一個目錄時,如何執行一個任務

只統計了兩個事件:建立一個名為已建立.txt並移動一個名為“created2.txt”的現有檔案。其他一切,如修改“已建立.txt,”被忽略。

監視目錄並執行任務

現在我們知道了接下來要發生什麼事件,我們可以使用另一個名為inotifywait的工具來阻止執行,直到在目標目錄中建立檔案或將其移動到目標目錄為止。我們將使用與inotifywatch相同的引數,並指定在任務中如何格式化檔名。

在開始之前,我們需要一個目錄來儲存已經處理過的檔案。建立一個名為“processed”的目錄:

mkdir processed

接下來,建立一個名為“watch”的新指令碼-傳入.sh”並新增以下內容:

#!/bin/bash TARGET=~/incoming/ PROCESSED=~/processed/ inotifywait -m -e create -e moved_to --format "%f" $TARGET \ | while read FILENAME do echo Detected $FILENAME, moving and zipping mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME" gzip "$PROCESSED/$FILENAME" done

指令碼使用-m選項執行inotifywait命令。這使得命令監視器無限期地改變。每次檢測到新事件時,檔名都會傳遞給read命令並注入到“filename”變數中。執行while迴圈下的塊,其中檔案首先移動到“processed”目錄,然後gzip。原始檔案將替換為壓縮檔案,檔名將以“.gz”結尾。

讓我們授予此指令碼的執行許可權,並從主目錄執行它。

chmod u+x watch-incoming.sh ./watch-incoming.sh

開啟第二個終端視窗,在“incoming”目錄中建立一個新檔案。列出“incoming”和“processed”目錄的內容,以檢視檢測到的事件的結果:

在linux中,當一個新檔案被新增到一個目錄時,如何執行一個任務

我們複製到“incoming”目錄中的原始文字檔案被指令碼檢測到,複製到“processed”中,然後使用gzip壓縮。

我們可以做一些有趣的任務,現在我們可以監視新檔案到達一個目錄。例如,我們可以在影象檔案中新增水印,將原始影片壓縮成mp4格式,甚至可以將看到的每個新檔案上傳到AmazonS3儲存桶中。這個指令碼是一個很好的起點,可以滾動您自己的工作流並自動執行系統上的常見任務。

  • 發表於 2021-04-03 18:12
  • 閱讀 ( 40 )
  • 分類:網際網路

你可能感興趣的文章

如何將命令列輸出儲存到windows、mac和linux上的檔案

... >符號將建立一個新檔案(如果不存在),或覆蓋該檔案(如果已存在)。如果檔案不存在,>>也會建立一個新檔案,但如果檔案已經存在,則會將文字附加到檔案末尾,...

  • 發佈於 2021-03-12 15:56
  • 閲讀 ( 47 )

透過引導分割槽破解樹莓pi的6種方法

... 當Pi啟動時,這個檔案充當一個標誌,指示作業系統啟用SSH。 ...

  • 發佈於 2021-03-18 17:12
  • 閲讀 ( 48 )

如何用cp命令在linux中複製檔案

... cp是一個用於Unix和Linux系統的命令列實用程式,能夠同時複製檔案和資料夾,基本上可以在每個Linux發行版上使用。在Linux中,您將看到在完成檔案管理任務的指南中經常引用...

  • 發佈於 2021-03-28 11:33
  • 閲讀 ( 41 )

如何在linux中建立新檔案

...檔案的用途。讓我們看看這些選項,這樣您就可以知道哪一個對您最有用。 ...

  • 發佈於 2021-03-28 22:06
  • 閲讀 ( 56 )

linux下如何用gocryptfs加密檔案

...整個硬碟驅動器嗎?如果是,我們推薦gocryptfs。你會得到一個目錄,基本上,加密和解密你儲存的所有東西。 gocryptfs提供資料洩露保護 隱私是個大新聞。幾乎每個星期都會有一個組織宣佈違規。公司要麼報告最近的事件,要...

  • 發佈於 2021-04-01 18:42
  • 閲讀 ( 47 )

如何在linux上使用hugo靜態站點生成器

...先構建的,可以很快地提供給訪問者。 但這並不意味著一個靜態網站一定會很無聊。他們可以使用HTML提供的一切,加上層疊樣式表(CSS)和JavaScript。他們也可以很容易地像影象旋轉木馬和網頁滑動背景影象。 Hugo網站生成器使...

  • 發佈於 2021-04-01 20:08
  • 閲讀 ( 49 )

如何在linux上使用cd命令

...你的注意,因為它們又小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知...

  • 發佈於 2021-04-02 08:58
  • 閲讀 ( 67 )

你想知道的關於linux上inodes的一切

...資料。 在LinuxExt4檔案系統中,inode和目錄結構共同提供了一個基礎框架,用於儲存每個檔案和目錄的所有元資料。它們使元資料對任何需要它的人都可用,無論是核心、使用者應用程式還是Linux實用程式,如ls、stat和df。 inode和...

  • 發佈於 2021-04-02 18:04
  • 閲讀 ( 44 )

如何在linux上使用at和batch來排程命令

如果您想安排一個只發生一次的Linux作業,cron就太過了。at系列的命令是你所需要的!如果只想在系統有空閒資源時執行程序,可以使用批處理。 如何安排linux作業 cron守護程序維護它在特定時間執行的作業列表。這些任務和程...

  • 發佈於 2021-04-02 18:33
  • 閲讀 ( 69 )

如何使用ls命令列出linux上的檔案和目錄

...s列出檔案和目錄 ls命令可能是大多數Linux使用者遇到的第一個命令。我們這些整天圍著命令列轉的人日復一日地使用它,甚至沒有想過它。這也許可以解釋為什麼這個命令比大多數使用者意識到的要多。我們用它列出檔案,看看...

  • 發佈於 2021-04-02 21:28
  • 閲讀 ( 46 )
fflzvs7091
fflzvs7091

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦