微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于监视文件更改的Linux bash脚本 – >如何获取更改的文件名

我想通过Mike Mullin编辑这个监视脚本: https : //gist.github.com/mikesmullin/6401258获取更改文件名称。 它似乎只是检查整个文件列表的数据完整性:

update_sha() { sha=`ls -lR --time-full-iso $path | sha1sum` }

一个比较与旧名单:

compare() { update_sha if [[ $sha != $prevIoUs_sha ]] ; then echo -n "change detected," build prevIoUs_sha=$sha else echo -n . fi }

如果我了解它是正确的,它只会检查是否有任何更改发生,而不是确切地更改哪个文件。 还有一种方法可以获取已更改文件的个人名称吗?

我怎样才能让watch命令解释vt100序列?

咕噜手表/ sass工作不正常

观看文件并使用tail -f执行命令并读取?

bash程序中的“watch”和ANSI转义序列输出

注意从命令行新创build的文件

gulp.watch()没有运行相关的任务

Bash – 在当前terminal的另一个terminal上启动一个新的命令实例

linux多次调用watch命令

监视目录,然后运行PHP脚本

我可以建议一个不同的方法吗? 使用工具“inotifywait”。 看到这个链接作为参考: https : //superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

为了找出目录树已经做了哪些改变,你需要保存ls -lr的整个输出,而不仅仅是校验和。 对于多达几百万个文件的目录树,这不应该太成问题,但是对于非常大的树,您可能需要尝试不同的方法

一旦您知道两个目录列表不同,您可以使用diff实用程序来查找差异。 Gnu diff为格式化差异报告提供了一个非常可定制的机制。

刚刚写了这个我认为它可能工作:

for name in $(find . -type f) do sha1sumstr="$(sha1sum $name)" sha1sum_sep=($sha1sumstr) sha1="${sha1sum_sep[0]}" fp="${sha1sum_sep[1]}" printf "nChecking: %s with filepath %sn" $sha1 $fp checkstr="$(grep -h $sha1 ../prev_check)" checkarr=($checkstr) if [ "$checkstr" == "$sha1sumstr" ]; then printf "nnochangen" else printf "Possibly new file:nFrom: %sn To: %sn" "$checkstr" "$sha1sumstr" if [ "${checkarr[1]}" == "$fp" ]; then printf "Filname not changedn" else checkname="$(grep -h $fp ../prev_check)" if [ -n "$checkname" ]; then printf "$checknamen" printf "Name is the samen" else printf "Name Changed: %sn" "$fp" fi fi fi echo "$sha1sumstr" >> ../new_check done mv ../new_check ../prev_check

将更改保存到脚本之后的示例输出

bob@squids:~/Development/fileshare/testdir$ ./check_name_change.sh Checking: a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0 with filepath ./test.txt nochange Checking: c97a03c8d412ad7a4579fa59b33056253e8113a3 with filepath ./testchilddir/test.txt nochange Checking: b8cf155a4ca493f0e8c598e92f212947c13b8842 with filepath ./check_name_change.sh Possibly new file: From: To: b8cf155a4ca493f0e8c598e92f212947c13b8842 ./check_name_change.sh f46261e680c1f28d7537ac332c02e23fa2e7382b ./check_name_change.sh Name is the same

将test.txt的名称更改为changed.txt后的输出示例:

bob@squids:~/Development/fileshare/testdir$ ./check_name_change.sh Checking: c97a03c8d412ad7a4579fa59b33056253e8113a3 with filepath ./testchilddir/test.txt nochange Checking: b8cf155a4ca493f0e8c598e92f212947c13b8842 with filepath ./check_name_change.sh nochange Checking: a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0 with filepath ./changed.txt Possibly new file: From: a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0 ./test.txt To: a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0 ./changed.txt Name Changed: ./changed.txt

如果检查很多文件,这将是一个缓慢的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐