如何显示目录中包含的所有文件类型?

如何显示目录中包含的所有文件类型?

是否有任何命令可以告诉我特定目录中存在哪些类型的文件?

我可以使用类似命令来找出文件类型od -c myfile | less

但我不知道如何对目录中的所有文件执行此操作。

答案1

虽然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;:遍历所有内容dirdir这只是一个例子,您应该将其更改为要搜索的实际目录的名称),依次保存每个项目$file
  • file "$file"file对找到的每个项目运行。
  • cut -d: -f 2:仅打印第二个字段(由 定义的字段:
  • sed 's/^ //; s/ +/ /g':从行首删除空格,并将连续的空格转换为单个空格。
  • sort -u:删除重复的文件类型

答案2

我可能会做这样的事 -

find . -type f -exec file {}  \;

这将从当前路径搜索文件(例如无目录),然后file对每个文件执行命令。

答案3

尝试这个:

ls | xargs file -b | sort | uniq

怎么运行的:

ls:列出目录内容

文件-b:确定文件类型;不要将文件名添加到输出行前面

种类:对行进行排序

独特:省略重复的行

答案4

我会用这个:

find . -type f | awk -F. '!a[$NF]++{print $NF}'

相关内容