我想看mydirectory/
需要bash腳本來觀看目錄和執行上的新文件的操作和修改的文件
我創建inot.sh
並運行它在後臺# ./inot.sh &
這裏的腳本inot.sh
的第一個版本我試過:
#!/bin/bash
inotifywait -m -e create,modify --exclude '\*.swp?$' . |
while read dir ev file; do
cp "$file" inotfiles/"$file"
done
注意:排除模式應該排除vim交換文件,但似乎還沒有工作。
如果有任何文件被創建(或更改),我希望整個文件複製到一個存儲文件夾。現在我正在關注create,modify
只是爲了看看我能否得到任何東西來正常工作。
在這一點上,FTP上傳似乎正常工作。使用命令行touch
文件複製空文件。但隨後使用vim
進行編輯會導致一系列問題。
我在vim中編輯了一個現有的文件,並沒有改變它。當我輸入的文件,我得到:
cp: cannot stat `.zzzzzoo.txt.swx': No such file or directory
~
~
~
~
~
它看起來像第一行是文件的一部分,但它不是。它會干擾vim查看器。退出後,一切看起來都很正常。
但是有時我會在退出vim時得到相同的cp
錯誤消息。
如果我編輯的文件,並退出與寫入文件,我得到:
在從VIM退出時,我得到:
~
~
~
~
~
~
"zzzzzoo.txt" cp: cannot stat `4913': No such file or directory
"zzzzzoo.txt" 1L, 11C written
[[email protected] mydirectory]# cp: cannot stat `.zzzzzoo.txt.swp': No such file or direc
tory
與波浪線第1部分是從VIM。
"somefile.txt" cp: cannot stat `4913': No such file or directory
"somefile.txt" 7L, 129C written
編輯:添加1個更多的錯誤我忘記提及
當我打開VIM複製的文件,我得到的通知是VIM發現相同文件名的交換文件。
E325: ATTENTION
Found a swap file by the name "inotfiles/.somefile.txt.swp"
等,等
Swap file "inotfiles/.somefile.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
//結束編輯部分
所以我知道,我也許可以通過適當排除VIM交換文件來解決這個問題,但在我看來,更大的問題是「爲什麼cp錯誤需要標準輸出以及如何阻止它們?」我應該把它們管到別的地方。
此外我需要一種方法來防止無限的while循環。有沒有其他的方法來編寫該部分?
錯誤消息將發送到stderr(正如其名稱所示,它是通常用於錯誤消息的文件描述符)。你可以通過運行'command 2>/dev/null'(或者用'command 2> some_file'文件)將錯誤重定向到/ dev/null。 – larsks
@larsks謝謝。但是,爲什麼你刪除了你的答案?還有一件事我也很困惑。我以爲我指定「--format%f」來獲取文件名作爲輸出,但我沒有。然而'cp'命令仍然對'inotifywait'輸出有效。當我添加格式選項時,它實際上停止工作。我得到錯誤'cp:省略目錄[反向] ./''你知道這是爲什麼嗎? –
我刪除了答案,因爲'vim'在一個模式下運行,這意味着僅僅監視'close_write'事件實際上是行不通的。我認爲它越來越涉及。 – larsks