linux-shell脚本获取24小时内被修改的文件
一、错误代码(谨慎运行)
场景描述:本人想要查看在24小时内被修改和操作过的文件,并且将这些文件加上accessed后缀之后存储到指定的文件夹中。
第一次写shell脚本如下,该脚本是找到修改过的文件,然后直接将原文件重命名,在原来的文件上面加上.accessed后缀。然后将修改后的文件转存到指定文件夹。
shell脚本如下所示:
for file in $(find ./ -type f -atime -1) #寻找文件 do mv ${file} ${file}.accessed #加后缀 mv ${file}.accessed /home/shell_study/accessed/ #转存到指定文件夹 done
注意:这个代码不要随便执行,如果你修改了linux系统文件,它也会转存到指定文件夹,会导致linux系统坏掉,对于小白来说不易修复
二、完善后的代码(较安全)
下面附上完善后的代码,这段shell脚本的逻辑是:找到修改后的文件,将其复制到指定文件夹并重命名,
for file in $(find ./ -type f -atime -1) do cp ${file} /home/shell_study/accessed/${file}.accessed done
对于该段脚本,较安全,找到修改过的 文件之后,通过find -name "*文件名*" 查找该文件地址,进行操作,更方便。
注意在shell脚本中不能写成-name,因为Unix文件名通常不包含斜杠(尽管路径名包含斜杠)。这意味着'-name`./test16.sh''在这个系统上可能一直计算为false。
for file in $(find ./ -type f -atime -1) do cp ${file} /home/shell_study/accessed/${file}.accessed find -name "${file}" done ~
执行上面的代码报错
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that '-name `./test16.sh'' will probably evaluate to false all the time on this system. You might find the '-wholename' test more useful, or perhaps '-samefile'. Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ `./test16.sh''.
cp: cannot create regular file `/home/shell_study/accessed/./accessed/test16.sh.accessed.accessed': No such file or directory提示:您可能会发现'-wholename'测试更有用,或者可能是'-samefile'。所以我们将代码find -name "${file}" 修改为find -wholename "${file}",如下所示:
for file in $(find ./ -type f -atime -1) do cp ${file} /home/shell_study/accessed/${file}.accessed find -wholename "${file}" done
执行该脚本显示如下:
[[email protected] shell_study]# sh test16.sh ./test16.sh ./test003.sh [[email protected] shell_study]#
./test16.sh
./test003.sh都是当前文件夹下修改的文件。
上一篇: php数值计算num类简单操作示例