如何显示目录中包含的所有文件类型?
是否有任何命令告诉我在特定目录中存在哪些类型的文件?
我可以使用像od -c myfile | less
这样的命令找出文件类型 od -c myfile | less
。
但我不知道如何为目录中的所有文件执行此操作。
尽管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'
sed 's/^ //; s/ +/ /g'
:从行的开头删除空格并将连续的空格转换为单个空格。 -
sort -u
:删除重复的文件类型
我可能会这样做 –
find . -type f -exec file {} \;
这将从当前路径搜索文件(例如,没有目录),然后在每个文件上执行file
命令。
试试这个:
ls | xargs file -b | sort | uniq
这个怎么运作:
ls :列出目录内容
file -b :确定文件类型; 不要将文件名添加到输出行
sort :排序行
uniq :省略重复的行