假设我有这样的目录结构:
+---A
| +---A
| \---B
+---B
| \---A
| \---A
+---C
|
|
[...]
我如何(1)抓取所有文件夹和子文件夹,以及(2)检查这些文件夹中的文件是否为二进制文件?
答案 0 :(得分:1)
find
通常用于搜索目录树。
file -i
可用于打印文件mime类型信息。
尝试一下:
find . -type f -exec file -i {} + | grep ":[^:]*executable[^:]*$" | sed 's/^\(.*\):[^:]*$/\1/'
-type f
是一个选择常规文件的过滤器:不是符号链接,不是目录等。
exec file -i {} +
对目录树中找到的每个常规文件执行file -i
。
file -i
正在打印mime类型字符串:
file -i /bin/bash
/bin/bash: application/x-executable; charset=binary
grep ":[^:]*executable[^:]*$"
选择包含mime类型字符串的文件,其中包含executable
sed 's/^\(.*\):[^:]*$/\1/'
清除该行以便仅打印文件名,而无需额外的mime类型信息。