1

我想看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 查看器。退出后,一切看起来都很正常。

cp但有时我在退出 vim 时会收到相同的错误消息。

如果我编辑文件并退出并写入文件,我会得到:

从 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 错误会进入标准输出以及如何阻止它们?” 我可能应该在其他地方管它们。

我还需要一种方法来防止无限循环。有没有其他方法可以写那个部分?

4

1 回答 1

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来编辑同一目录中的文件——你会在不知不觉中遇到一堆正则表达式!

于 2012-11-28T13:15:09.467 回答