请问这段Shell脚本的含义?
今天接触inotify时在网上看到一段脚本,如下:
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f'
-e create,delete,modify,attrib $SRCDIR | while read DATE TIME DIR FILE; do
$FILECHANGE=${DIR}${FILE}
rsync -avze 'ssh' $SRCDIR root@${DESTHOST}:${DESTHOSTDIR} &>/dev/null && \
echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> /var/log/filesync.log
done
其中的 管道后面的 read DATE TIME DIR FILE 是什么意思?而且在下文中又可以通过 变量的形式获得到 ${DATE},另外一个例子差不多,如下:
xxx | while read D E F
请前辈指点下,谢谢!
平澤姊妹最高
9 years, 8 months ago
Answers
简单的来说,inotifywait检测文件变动,输出结果是类似,
25/3/2015 15:20 /home/user example.txt
,
每行执行一次竖线|(也叫管道)后面的read,
read的作用是read后面的变量分别匹配这四个结果,按空格分隔,
然后四个值或者说四个字符串分别存入read后面的四个参数作为变量循环下去。
就是说,下文里面的${DATE}就是2015三月二十五,$TIME就是15:20,$DIR就是。。然后。。就是。。
${DATE}也可以写成$DATE。
至于写成D E F也可以,只不过是个变量名,写成这样比较容易理解,只要个数相同就可以,下文也改了也是可以,例如这里read D E F G,D就是日期,E是时间,F是目录,G是文件名,下文里面rsync用到这里的地方对应的改过来就行了。
cm2104
answered 9 years, 8 months ago