假设我有这样的目录结构:
+---A
| +---A
| ---B
+---B
| ---A
| ---A
+---C
|
|
[...]
如何(1)爬网所有文件夹和子文件夹,以及(2)检查这些文件夹中的任何文件是否为二进制文件?
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类型信息。