如何检查文件在Bash中是否可执行

时间:2017-03-06 18:56:13

标签: bash ls

我正在尝试构建一个检查文件是否设置了执行访问位的条件。我不能用grep找到。

我尝试检查ls -l命令中的“x”字母,但在许多情况下这是错误的。

for val in `ls $1`
do
  if [[ "`ls -l $1/$val`" -eq *w* ]]
  then
    rm $1/$val
  fi
done

请帮忙或提供一些建议!

2 个答案:

答案 0 :(得分:5)

无需解析ls的输出以查看文件是否可执行。 Shell为此提供了内置的-x检查。使用-x功能,您的循环可以重写为:

for file in "$1"/*; do
  [[ -x "$file" ]] && rm -- "$file"
done

另见:

答案 1 :(得分:1)

if [ -x "$file" ]; then
  # do something
fi

您可以使用man获得更多文件测试选项:

~]# man test
.... 
-x FILE
              FILE exists and execute (or search) permission is granted

以下应该工作:

 ~]# find $1 -type f | while IFS='' read -r -d '' p; 
     do 
        if [ -x "$p" ]; then 
           echo "removing $p";
           rm "$p";
        fi; 
     done

find命令获取.给出的目录中的所有文件(包括$1)。 while读取每个输出,if then使用-x检查单个文件的可执行权限。

修改

经过一些评论后,这是一个更快捷的例子:

find "$1" -type f -executable -exec rm -- {} \;