我想看mydirectory/
我创建了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
~
~
~
~
~
看起来第一行是文件的一部分,但事实并非如此。它是inotify干扰vim查看器。退出后,一切看起来都很正常。
但有时我从vim退出时会收到相同的cp
错误消息。
如果我编辑文件并退出并写入文件,我会得到:
退出vim后,我得到:
~
~
~
~
~
~
"zzzzzoo.txt" cp: cannot stat `4913': No such file or directory
"zzzzzoo.txt" 1L, 11C written
[root@server mydirectory]# cp: cannot stat `.zzzzzoo.txt.swp': No such file or direc
tory
波浪起伏的第一部分来自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错误会转到stdout以及如何阻止它们?”我应该把它们送到其他地方。
此外,我需要一种方法来防止无限循环。有没有其他方式来写这个部分?
答案 0 :(得分: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
来编辑文件同一个目录 - 在你知道它之前你会有一堆乱七八糟的正则表达式!