需要bash脚本来监视目录并对新文件和修改后的文件执行操作



我想看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

注意:exclude模式应该排除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
[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,以及如何阻止它们?"我可能应该把它们传输到其他地方。

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

与其要求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编辑同一目录中的文件,你会发现正则表达式一团糟!

相关内容

  • 没有找到相关文章

最新更新