如何在当前目录中找到可执行文件并找出它们的扩展名?

时间:2012-02-21 20:01:41

标签: bash find

我需要从/ bin中找到所有可执行文件。如何使用

find . -executable

以及如何检查文件是否是脚本(例如,sh,pl,bash)?

4 个答案:

答案 0 :(得分:4)

#!/bin/bash                                                                                                                                                    

for file in `find /bin` ; do                                                                                                                                   
    if [ -x $file ] ; then                                                                                                                                     
        file $file                                                                                                                                             
    fi                                                                                                                                                         
done

甚至做得更好

find /bin -type f -perm +111 -print0 | xargs -0 file

答案 1 :(得分:1)

find /bin/ -executable返回/bin/目录中的所有可执行文件。

要过滤扩展,可以使用-name个标记。例如,find /bin/ -executable -name "*.sh"返回sh - 脚本。

<强> UPD

如果file不是二进制文件且没有扩展名,则可以从shabang中找出它的类型。

例如find ~/bin/ -executable | xargs grep --files-with-matches '#!/bin/bash'返回~/bin/目录中的文件,其中包含#!/bin/bash

答案 2 :(得分:1)

查找所有脚本shell

find . -type f -executable | xargs file -i | grep x-shellscript | cut -d":" -f1

查找所有可执行文件

find . -type f -executable | xargs file -i | grep x-exec | cut -d":" -f1

查找所有共享库

find . -type f -executable | xargs file -i | grep x-sharedlib | cut -d":" -f1

答案 3 :(得分:0)

这适用于我和想分享......

find ./ -type f -name "*" -exec sh -c '
    case "$(head -n 1 "$1")" in
      ?ELF*) exit 0;;
      MZ*) exit 0;;
      #!*/ocamlrun*)exit0;;
    esac
exit 1
' sh {} \; -print