可执行文件(二进制文件)上的通配符

可执行文件(二进制文件)上的通配符

我可以使用通配符根据扩展名选择某些类型的文件,例如

mv *.cc src/

如何选择没有扩展名的可执行文件?

答案1

这将检查可执行位,并将您所在目录中的所有文件移动到src/

find . -maxdepth 1 -type f -perm +a=x -print0 | xargs -0 -I {} mv {} src/

这不会检查文件名是什么(因此,只要它是“文件”,xxxx 和 xxxx.cc 以及其他任何内容都会被移动(-type f),并且设置了“x”(eXecute)权限(-perm +a=x))。

答案2

据我所知,bash glob 不支持这一点 - 但 zsh 通过其glob 限定符

例如,可执行纯文件的限定符(相当令人困惑)是*例如

ls -l *(*)

将列出可执行二进制文件和脚本。它尚未明确提供二进制文件的限定符,但它允许您定义自己的限定符,如中所述zsh glob 限定符排除二进制文件例如你可以这样做

mv -- *(*e:'file --brief --mime $REPLY | grep -q binary':) exec/

或者定义一个辅助函数

binary() { file --brief --mime $REPLY | grep -q binary }

然后

mv -- *(*+binary) exec/

(我添加了它--brief以防止文件名上可能出现的错误匹配。)

相关内容