如何使用“stat”檢測新文件,然後將其移動到不同的目錄?
最終我想檢測一個新的備份文件被拖放到一個目錄中,然後將該新文件移動到另一個位置以進行其他操作。
當沒有人登錄伺服器並且我用來啟動操作的腳本將由 crontab 條目觸發時,這需要工作。
我嘗試像這樣使用’inotifywait’:
dir=/home/userid/drop/ target=/home/userid/current/ inotifywait -m "$dir" --format '%w%f' -e create | while read file; do mv "$file" "$target" done
這僅適用於您打開了終端視窗會話。如果您嘗試使用 crontab 條目在無人參與的情況下啟動此 scipt,則將忽略 inotifywait 命令。
所以然後我嘗試使用’entr’並發現了同樣的問題。它僅在您打開終端視窗時才有效。當我使用 entr 創建腳本並使用 crontab 條目在無人值守的情況下觸發它時,它就像 inotifywait 範例一樣被忽略。
所以我知道這可以使用’stat’來完成,我查看了許多範例並試圖根據我的目的找出它們,但我只是不理解它的語法。
我知道 stat 可以檢測目錄中是否存在新文件,但我不知道如何處理該結果以觸發執行 mv(移動)命令將新文件移動到不同位置。
一旦我有一個可以做到這一點的統計語法,我將需要它永久執行。也許它只每 15 秒檢查一次,但我需要它隨時準備移動文件。
如果有人有這樣做的經驗並且可以幫助我將 stat 連結到執行另一個命令的語法,我將不勝感激。我真的相信其他人也想知道如何做到這一點,因為我無法想像每個人都可以為其他 2 個解決方案保持 ssh putty 視窗 24/7 全天候打開。
提前致謝。
BKM
你只需要
incron
.incron
如果您有 Ubuntu/Debian,請先安裝軟體包:sudo apt install incron
或者使用 Red Hat/Fedora 的命令:
sudo yum install incron
在您最喜歡的文本編輯器中打開文件
/etc/incron.allow
- 讓它成為vim
:vim /etc/incron.allow
並使用您的使用者名添加新行(假設它是
bob
)以允許他使用incron
:bob
之後打開
incron
規則編輯器:incrontab -e
並添加以下行:
/home/userid/drop/ IN_CREATE mv /home/userid/drop/$# /home/userid/current/
where
$#
是incron
內置萬用字元,表示 . 檢測到的新刪除的備份文件的名稱incron
。要測試創建的規則,請將文件添加到
/home/userid/drop/
目錄並檢查刪除的文件是否已移動到/home/userid/current/
目錄。另外檢查系統日誌:tail /var/log/syslog