Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash中检查文件是否可执行_Bash_Ls - Fatal编程技术网

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

如何在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

我试图建立一个条件,检查文件是否设置了执行访问位。我不能使用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 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”