監控目錄下的檔案操作與實時同步

2022-02-06 06:36:15 字數 2975 閱讀 9261

若有個需求:要求記錄下某個目錄下的所有操作,包括建立檔案、修改檔案、重新命名、刪除檔案的操作,將以上所有的操作全部記錄到日誌中,或者做其他操作。.net提供了乙個方法叫做「system.io.filesystemwatcher」,方便powershell來呼叫。具體使用方法,我慢慢解釋。

$folder = "c:\test"  #定義要監控哪個目錄

$timeout = 1000  #設定監控的時間間隔

$filesystemwatcher = new-object system.io.filesystemwatcher $folder  #使用filesystemwatcher方法開啟檔案監控

echo "ctrl+c will exit"

while ($true)

}

測試:在c:\test目錄下增刪改查一些檔案

終端返回的結果:

在所執行的終端執行ctrl+c或者關閉終端即可終止監控程式。

該方案與方案一不同的一點是,方案二會在後台執行,但方案一由while迴圈執行。

$watcher = new-object system.io.filesystemwatcher  #啟動監控例項

$watcher.path = "c:\test\"  #監控的路徑

$watcher.includesubdirectories = $true   #是否監控子目錄下的檔案操作

$watcher.enableraisingevents = $true    #預設是true

#重寫changed、created、deleted、renamed方法

$changed = register-objectevent $watcher "changed" -action

$created = register-objectevent $watcher "created" -action

$deleted = register-objectevent $watcher "deleted" -action

$renamed = register-objectevent $watcher "renamed" -action

測試:在被監控的目錄下增刪改查操作

返回的結果:

但是方案二退出與方案一的不一致。

1、退出當前執行的終端,可以退出整個監控程式

2、手動登出事件,登出以上重新的方法,需要在程式執行的終端執行

紅框內的內容是輸入進去的。

有了目錄監控的能力,可以擴充套件一下,實現檔案實時同步。

有兩個目錄,目錄a中凡是有了任何操作,便同步到b目錄中,實現實時同步。具體**如下:

【注意】

**中監聽操作的時間隔是1000ms,若兩相鄰操的時間間隔作小於1000ms時,就會出現不同步的問題

$folder = "\\share-server\t"  #監聽的源目錄

$timeout = 1000  #時間間隔,ms

$filesystemwatcher = new-object system.io.filesystemwatcher $folder

$filesystemwatcher.includesubdirectories = $true  #開啟監聽子目錄的功能

$des = "c:\test"  #同步的目標目錄

$logpath = "c:\test\logs\a.log"  #日誌記錄的位置,需要提前建立好日誌的父目錄

echo "ctrl+c will exit"

cp -force -recurse $folder\* $des  #先將源目錄中的所有檔案拷貝到子目錄中

while ($true)  #開啟監聽

#當刪除時,原始檔的全路徑不存在,需要借助目標檔案的全路徑來判斷是檔案還是目錄

if( test-path $dstpath )

if ( (ls $filepath) -is [io.fileinfo])   #判斷是檔案還是目錄

else

#根據不同的操作型別做出不同的操作

if( $type -eq "changed" )

}if( $type -eq "created" )

else

}if( $type -eq "deleted" )

if( $type -eq "renamed" ) }}

測試:

日誌結果:

【注意】

以上**存在乙個缺陷,當檔案在不同的目錄下移動時,會有異常,只有修改一下**邏輯便可實現。

實時監控目錄下多個新檔案

a3.sources r3 a3.sinks k3 a3.channels c3 describe configure the source a3.sources.r3.type spooldir a3.sources.r3.spooldir opt module flume 1.7.0 uploa...

inotifywait實時監控檔案目錄

inotify 是一種強大的 細粒度的 非同步檔案系統監控機制,它滿足各種各樣的檔案監控需要,可以監控檔案系統的訪問屬性 讀寫屬性 許可權屬性 建立刪除 移動等操作,也可以監控檔案發生的一切變化。inotify tools 是乙個c庫和一組命令列的工作提供linux下inotify的簡單介面。ino...

Flume1 9 0實時監控目錄下多個新檔案

1.案例需求 使用flume監聽整個目錄的檔案,並上傳至hdfs 2.實現步驟 1 建立配置檔案flume dir hdfs.conf 建立乙個檔案 nogc hadoop102 job vim flume dir hdfs.conf新增如下內容 a3.sources r3 a3.sinks k3 ...