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

Moh*_*ani 12 command-line

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

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

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

ter*_*don 19

虽然od -c确实会显示文件的内容,但这并不是获取文件类型的好方法。虽然某些文件将包含带有文件类型的标题,但并非所有文件都会包含。更好的方法是命令file

$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
Run Code Online (Sandbox Code Playgroud)

因此,要获取目录中所有文件类型的列表,您可以执行以下操作:

for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
Run Code Online (Sandbox Code Playgroud)

示例输出:

 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
Run Code Online (Sandbox Code Playgroud)

解释

  • for file in dir/*; do ... done;: 遍历dir(dir只是一个例子,你应该把它改成你想搜索的实际目录的名称),依次保存每个项目为$file
  • file "$file":file在找到的每个项目上运行。
  • cut -d: -f 2: 只打印第二个字段(由 定义的字段:
  • sed 's/^ //; s/ +/ /g' : 从行首删除空格并将连续空格转换为单个空格。
  • sort -u : 删除重复的文件类型

  • @alex 首先,请始终提及您得到的确切错误,说您得到“错误”并不是很有用。在任何情况下,错误可能是因为您没有名为 `dir/` 的目录,这只是一个示例名称,您需要将其更改为真实目录的名称:`for file in /home/alex/* ; 做...完成`例如。 (2认同)