我可以使用通配符根据扩展名选择某些类型的文件,例如
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
以防止文件名上可能出现的错误匹配。)