是否有命令告诉我特定目录中存在哪些文件类型?
我可以使用像这样的命令找出文件类型od -c myfile | less
。
但是我不知道如何对目录中的所有文件执行此操作。
是否有命令告诉我特定目录中存在哪些文件类型?
我可以使用像这样的命令找出文件类型od -c myfile | less
。
但是我不知道如何对目录中的所有文件执行此操作。
Answers:
尽管od -c
确实会显示文件的内容,但这不是获取文件类型的好方法。虽然某些文件将包含具有文件类型的标头,但并非全部都包含。更好的方法是命令file
:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
因此,要获取目录中所有文件类型的列表,可以执行以下操作:
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
ASCII text
directory
GIF image data, version 89a, 22 x 22
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped
for file in dir/*; do ... done;
:遍历所有内容dir
(dir
仅作为示例,您应该将其更改为要搜索的实际目录的名称),然后依次将每个项目保存为$file
file "$file"
:file
对找到的每个项目运行。cut -d: -f 2
:仅打印第二个字段(由定义的字段:
)sed 's/^ //; s/ +/ /g'
:从行首删除空格,并将连续的空格转换为单个空格。sort -u
:删除重复的文件类型dir/
,这只是一个示例名称,您需要将其更改为真实目录的名称:for file in /home/alex/*; do ... done
例如。
sort -u
会将其删除,该行必须是不同的(它们也可能有不同数量的空间,这使得它们不相同)。
我可能会做这样的事情-
find . -type f -exec file {} \;
这将从当前路径搜索文件(例如,没有目录),然后file
在每个文件上执行命令。
尝试这个:
ls | xargs file -b | sort | uniq
怎么运行的:
ls:列出目录内容
文件-b:确定文件类型;不要在输出行前添加文件名
sort:排序行
uniq:省略重复的行
file -b *
代替ls | xargs file -b
,以避免解析ls
。