Bash

載入到保管箱文件夾時使用 inotifywait 移動文件

  • November 25, 2014

我正在嘗試找到一種方法,一旦文件出現在 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

引用自:https://unix.stackexchange.com/questions/86286