如何在Bash中检查文件是否可执行
我试图建立一个条件,检查文件是否设置了执行访问位。我不能使用grep和find 我尝试在如何在Bash中检查文件是否可执行,bash,ls,Bash,Ls,我试图建立一个条件,检查文件是否设置了执行访问位。我不能使用grep和find 我尝试在ls-l命令中检查“x”字母,但在许多情况下这是错误的 for val in `ls $1` do if [[ "`ls -l $1/$val`" -eq *w* ]] then rm $1/$val fi done 请提供帮助或建议 if [ -x "$file" ]; then # do something fi 使用man,您可以获得更多的文件测试选项: ~]# man te
ls-l
命令中检查“x”字母,但在许多情况下这是错误的
for val in `ls $1`
do
if [[ "`ls -l $1/$val`" -eq *w* ]]
then
rm $1/$val
fi
done
请提供帮助或建议
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
给定目录中的所有文件(包括
)当
读取每个输出时,if-then
使用-x
检查各个文件的可执行权限
编辑
在一些评论之后,这里有一个更快的示例:
find "$1" -type f -executable -exec rm -- {} \;
使用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
给定目录中的所有文件(包括
)当
读取每个输出时,if-then
使用-x
检查各个文件的可执行权限
编辑
在一些评论之后,这里有一个更快的示例:
find "$1" -type f -executable -exec rm -- {} \;
无需解析
ls
的输出来查看文件是否可执行。Shell提供了内置的-x
检查。使用-x
功能,可以将循环重新写入:
for file in "$1"/*; do
[[ -x "$file" ]] && rm -- "$file"
done
另见:
ls
的输出以查看文件是否可执行。Shell提供了内置的-x
检查。使用-x
功能,可以将循环重新写入:
for file in "$1"/*; do
[[ -x "$file" ]] && rm -- "$file"
done
另见:
测试-x文件
或[-x文件]
。请参阅本文:…以及可能重复使用的test-x文件
或[-x文件]
。请参阅本文:…如果$file
为空字符串,则[-x$file]
的可能副本将错误地返回true,因为它将运行[-x]
,测试-x
是否为空字符串(并且,由于它不是空的,因此返回true)。使用引号:[-x“$file”]
这也不能正确/可靠地检索文件名(`ls$1`中val的充满了已知问题:无法正确处理带空格的名称,不可打印字符的行为因平台而异,包含换行符的文件名的行为完全未定义,等等)。在解析ls
的输出时,解析-find
的输出在每一个实例中都会失败,甚至没有必要。您可以使用-perm
主菜单选择可执行文件,然后使用-exec rm--{}\
(或-delete
,如果支持)删除它们。引号!find“$1”-type f-executable-exec-rm--{}+
--如果在$1
周围没有引号,名为/My directory
的目录将作为两个参数传递,/My
和directory
。此外,-exec-rm--{}\
效率低下,每个找到的文件运行rm
一次,而-exec-rm{}+
调用rm
的次数越少越好,每次调用都会在命令行上放置多个文件名。[-x$file]
如果$file
是空字符串,则会错误地返回true,因为它将运行[-x]
,测试-x
是否是空字符串(并且,因为它不是空的,所以返回true)。使用引号:[-x“$file”]
这也不能正确/可靠地检索文件名(`ls$1`
中val的充满了已知问题:无法正确处理带空格的名称,不可打印字符的行为因平台而异,包含换行符的文件名的行为完全未定义,等等)。在解析ls
的输出时,解析-find
的输出在每一个实例中都会失败,甚至没有必要。您可以使用-perm
主菜单选择可执行文件,然后使用-exec rm--{}\
(或-delete
,如果支持)删除它们。引号!find“$1”-type f-executable-exec-rm--{}+
--如果在$1
周围没有引号,名为/My directory
的目录将作为两个参数传递,/My
和directory
。此外,-exec-rm--{}\
效率低下,每个找到的文件运行rm
一次,而-exec-rm{}+
调用rm
的次数越少越好,每次调用都会在命令行中放置多个文件名。“$1”/*
,您的意思是(处理目录名中的空格)。如果我们想处理$1
是以破折号开头的目录名的情况,rm--“$file”
/*
,你的意思是(处理目录名中的空格)。如果我们想处理$1
是以破折号开头的目录名的情况,那么rm--“$file”
。