我希望使用grep检查并查看是否已在文件上正确设置权限...
我知道以下情况可能并不理想&不尽可能简洁,但我追求的是个人财产,如所有者名称和权限......
我打算用这样的东西:
cd ~/Desktop
if [ `ls -a | grep My File.txt | wc -l` -eq 1 ];
then
echo "My File.txt Exists"
MYPERMISSIONS=`ls -l My File.txt`
if [ `$MYPERMISSIONS | grep $"\-rwxr\-xr\-x" | wc -l` -eq 1 ];
then
echo "Permissions are correct for My File.txt"
fi
if [ `$MYPERMISSIONS | grep $"\-rwxr\-xr\-x" | wc -l` -eq 0 ];
then
echo "Permissions are NOT correct for My File.txt"
fi
if [ `$MYPERMISSIONS | grep root | wc -l` -eq 1 ];
then
echo "Owner is correct for My File.txt"
fi
if [ `$MYPERMISSIONS | grep root | wc -l` -eq 0 ];
then
echo "Owner is NOT correct for My File.txt"
fi
fi
if [ `ls -a | grep My File.txt | wc -l` -eq 0 ];
then
echo "My File.txt does NOT Exist"
fi
看起来grep不想搜索“ - ”字符......
绕过这个的任何方式?
谢谢!
答案 0 :(得分:5)
问题在于' - '用于表示标志。你可以通过使用grep -e强制将下一个参数解释为模式而不是标志来解决这个问题。
答案 1 :(得分:3)
你的问题不是连字符,而是其他一些语法错误:你需要回显你的数据才能将它变成grep;你不需要用反斜杠来逃避连字符;并且您需要使用克拉^
来锚定正则表达式(这也将避免其他人提到的连字符作为参数问题)。
这是一个开始:
if [ `echo "$MYPERMISSIONS" | grep "^-rwxr-xr-x" | wc -l` -eq 1 ]
答案 2 :(得分:2)
尝试使用以下命令修改grep命令:
if [ ls -a | grep 'My File\.txt' | wc -l -eq 0 ]; then echo "My File.txt does NOT Exist" fi
答案 3 :(得分:2)
我想知道您的问题是否是文件名中的空格?例如,以下内容应该有效 -
ls -l | grep "drwxr-xr-x"
答案 4 :(得分:2)
脚本有很多问题,到目前为止只指出了最明显的事情(你需要回显$ MYPERMISSIONS来管它grep,你不需要多余的转义等等)权限字符串,您需要文件名中的引号或转义空格)。还有一些更微妙的问题,主要是由于dangers of parsing ls's output。例如,假设您的桌面目录中有一个名为“Not My File.txt”的文件 - 初始ls | grep | wc
将匹配该文件,并打印“My File.txt Exists”,即使它没有(如果它和“我的File.txt”都存在的话甚至更奇怪了。其次,假设文件存在并且由“notroot”拥有 - 该脚本将认为它
相反,要测试文件是否存在,请使用test命令的-e
原语。要检查所有权和权限,stat
会为您提供更好的输出。
最后,不是使用冗余的if
命令(如果文件存在......后跟if文件不存在......),请在单个{{1}上使用else
子句命令。在纠正所有这些之后(以及将文件名放在变量中进行一些小的清理),这就是我如何重写脚本:
if