我正在尝试运行目录并确保root不是任何文件的所有者。使用awk,我遇到的问题是将字段与字符串进行比较不会产生准确的结果。
ls -d -l /path/to/file/**/* | awk '{ if ( "$3" == "root" ); print "File has wrong permissions: " $9;}'
生成的是一个文件列表,当双重检查时,其所有者和组不是root。
-rw-rw-r-- 1 foobar foobar 78828 Dec 4 11:15 /p/t/f/xyz/abc.jpg
理想情况下,最终结果如下:
ls -d -l /path/to/file/**/* | awk '{ if ("$3" != "deploy" || "$4" != "deploy") [...]
有什么问题?
谢谢。
答案 0 :(得分:1)
语句中的问题是if条件之后的;
。这意味着if-block为空
移除;
或更好地将if-block放在{...}
中,一切都会按预期运行。此外,您不应将字段放入"..."
("$3"
- > $3
)
ls -d -l / | awk '{ if ( $3 == "root" ) print "File has wrong permissions: "$9;}'
或
ls -d -l / | awk '{ if ( $3 == "root" ){print "File has wrong permissions: " $9}}'
答案 1 :(得分:0)
您不想将$3
放在引号中。如果你这样做就变成了一个字符串。另外,在if
条件之后你不想要分号 - 如果你有,那么if
什么都不做。您可能希望进行这两项更改:
ls -d -l /path/to/file/**/* | awk '{ if ( $3 == "root" ) print "File has wrong permissions: " $9;}'