Bash
載入到保管箱文件夾時使用 inotifywait 移動文件
我正在嘗試找到一種方法,一旦文件出現在 CentOS 上的保管箱中,就立即將其移動到另一個文件夾。
inotify
我已經在網際網路上搜尋了一些線索,但除了我需要用來呼叫一個腳本來處理文件出現時,我無法得到任何進一步的資訊。我的 BASH 知識非常有限,我懷疑我可以用 PHP 編寫它。
換句話說,如何在文件出現後立即將其移動到另一個文件夾
inotify
?
這是一個簡單的方法:
#!/usr/bin/env bash dir=/home/ortix/Dropbox/new/ target=/home/ortix/movedfiles/ inotifywait -m "$dir" --format '%w%f' -e create | while read file; do mv "$file" "$target" done
有了有關您要移動的文件類型的更多詳細資訊,您可以添加一些檢查、日誌記錄等…
inotifywait
每次指定目錄的內容更改時,該命令都會列印一條消息。您需要選擇正確的事件:不是在文件創建時,而是在 Dropbox 完成下載時。我不知道 Dropbox 是如何運作的。如果它在最終位置寫入文件,則監聽close_write
事件。如果它將文件寫入臨時位置,然後將其移動到位,請偵聽moved_to
事件。將選項傳遞-m -q
給,inotifywait
以便它繼續偵聽事件(預設情況下,它只等待下一個事件)並且只列印相關消息。cd ~/Dropbox/myfolder inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do cp -p "$file" /path/to/other/directory done