我正在尝试构建一个检查文件是否设置了执行访问位的条件。我不能用grep找到。
我尝试检查ls -l
命令中的“x”字母,但在许多情况下这是错误的。
for val in `ls $1`
do
if [[ "`ls -l $1/$val`" -eq *w* ]]
then
rm $1/$val
fi
done
请帮忙或提供一些建议!
答案 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 -- {} \;