2012-11-17 73 views
1

我想看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循環。有沒有其他的方法來編寫該部分?

+1

錯誤消息將發送到stderr(正如其名稱所示,它是通常用於錯誤消息的文件描述符)。你可以通過運行'command 2>/dev/null'(或者用'command 2> some_file'文件)將錯誤重定向到/ dev/null。 – larsks

+0

@larsks謝謝。但是,爲什麼你刪除了你的答案?還有一件事我也很困惑。我以爲我指定「--format%f」來獲取文件名作爲輸出,但我沒有。然而'cp'命令仍然對'inotifywait'輸出有效。當我添加格式選項時,它實際上停止工作。我得到錯誤'cp:省略目錄[反向] ./''你知道這是爲什麼嗎? –

+0

我刪除了答案,因爲'vim'在一個模式下運行,這意味着僅僅監視'close_write'事件實際上是行不通的。我認爲它越來越涉及。 – larsks

回答

1

不要問inotifywait要提防vim的交換文件的,爲什麼不vim到 把它在一個更好的(較少侵入)位置的臨時文件:

例如,如何:

mkdir -p ~/tmp/.vim 

,然後在.vimrc

set backupdir^=~/tmp/.vim/ 
set directory^=~/tmp/.vim/ 

http://vim.wikia.com/wiki/Remove_swap_and_backup_files_from_your_working_directory

想想看:如果你讓你的正則表達式來排除交換文件 - 然後一個emacs用戶加入你想要使用emacs在同一目錄中編輯文件 - 你必須得一塌糊塗你知道它之前的正則表達式!

相關問題