帮助使用find和diff命令的bash脚本

我有一个bash脚本,我需要帮助:

#!/bin/bash if [ -f "/suid.old" ] then find / -perm -4000 -o -perm -2000 ls > suid.old else find / -perm 4000 -o -perm -2000 ls > suid.new diff suid.old suid.new > newchanges.list fi 

当我运行它给了我一个错误说:diff:suid.old:没有这样的文件或目录。

我的脚本应该说,如果suid.old不存在,那么使用find命令创build一个,或者使用find命令来执行suid.new所需的任何操作。 find它所做的任何更改并将其redirect到newchanges.list

请帮忙,

if语句中删除文件名中的斜杠。 你有它的方式,它检查根目录中的文件,但后来它在任何当前目录中创build。

另外,你的脚本基本上说“如果suid.old 存在,然后做一个差异”。

你可能想要像这样的东西:

 #!/bin/bash if [ ! -f "suid.old" ] then find / -perm -4000 -o -perm -2000 ls > suid.old fi if [ ! -f "suid.new" ] then find / -perm 4000 -o -perm -2000 ls > suid.new fi diff suid.old suid.new > newchanges.list mv suid.new suid.old 

这说:“如果suid.old不存在,创build它,如果suid.new不存在,创build它,现在它们已经被创build(或已经存在)做diff。

从find的行中删除'ls'。 他们应该像find / -perm -4000 -0 -perm -2000 > suid.old

你有它的方式设置发现认为,ls是path参数。 由于查找结果打印到STDOUT,只是做一个正常的redirect将得到你想要的输出。

我的版本:

 #!/bin/bash if [ ! -f "/suid.old" ]; then # note: ! find / -perm -4000 -o -perm -2000 -ls > /suid.old # note: dash before ls; slash before file else find / -perm 4000 -o -perm -2000 -ls > /suid.new diff /suid.old /suid.new > /newchanges.list mv /suid.new /suid.old # could be handy fi