您好,我需要一点帮助,请:
我有一个我想做的练习是:
创建一个脚本来监视目录,并为每个文件的创建在 register_file 中添加一个新行,显示日期和时间、文件名以及创建该文件的用户名。
我努力了:
inotifywait -m -e create -o register_file --timefmt '%d-%m-%Y-%H:%M' --format '%T %f' ./
但是我怎样才能找到用户的名字呢?
谢谢。
我的第一直觉是查看 /proc。我研究了 man inotifywait inotifywatch 和 incron 但没有任何帮助。
答案1
免责声明:
绝不是专家inotify
,我认为这是一个真正学习新东西的机会。排除了这一点,这是我的方法:
#!/bin/bash
watchedDir="toWatch"
inotifywait -m "$watchedDir" -e create |
while read -r file; do
name=$(stat --format %U $file 2>/dev/null)
date=$(stat --format %y $file 2>/dev/null)
fileName=${file/* CREATE /}
echo "File: '$fileName' Creator: $name Date: ${date%.*}"
done
执行后:
./watchDir.sh
Setting up watches.
Watches established.
toWatch
当我从另一个终端将文件添加到目录时:
touch toWatch/a_file
...这是我得到的输出:
./watchDir.sh
Setting up watches.
Watches established.
File: 'a_file' Creator: maulinglawns Date: 2016-12-10 12:29:42
并且,添加另一个文件...
touch toWatch/another_file
给...
./watchDir.sh
Setting up watches.
Watches established.
File: 'a_file' Creator: maulinglawns Date: 2016-12-10 12:29:42
File: 'another_file' Creator: maulinglawns Date: 2016-12-10 12:31:15
当然,如果您希望输出重定向到文件,则必须实现该部分。
这是基于@jasonwryan 的帖子这里。但我还没有想出这个--format
选择inotifywait
。它在我的待办事项列表中,因此我选择使用它stat
。
答案2
这是一个 bash 脚本,您可以运行它并为您提供所有者。您可以将其写入 register_file,而不是 echo 所有者
#! /bin/bash
export fCreation=$(tail -1 ./register_file) #get the newest file creation documentation
export fName=${fCreation##* } #get the last word, which is the file name
export details=$(ls -al | grep $fName)
export owner=${details#* } #removes the file's permissions
owner=${owner#* }
owner=${owner#* }
owner=${owner%% *}
echo $owner
事实上,如果你使用stat --format=%U $fName
你会很容易得到主人。
编辑:
来自 man 7 inotify:
“限制和警告 - inotify API 不提供有关触发 inotify 事件的用户或进程的信息。”