Linux:如何列出有关文件或目录的信息(大小,权限,类型的文件数?)

时间:2012-08-18 14:32:50

标签: linux bash shell unix

假设我留在currenty目录中,我想列出所有文件的总数,以及大小,权限以及按类型划分的文件数。

这里是示例输出:

以下是一个示例:

打印有关“/ home / user / poker”的信息

档案总数:83

pdf文件:5

html文件:9

文本文件:15

未知:5

注意:任何没有扩展名的文件都可以视为未知。

我希望使用一些简单的命令,比如ls,cut,sort,unique,(只是示例)将每个不同的扩展名放在文件中,并使用wc -l来计算行数

或者我需要使用grep,awk还是其他什么?

希望得到每个人的建议。谢谢你!

3 个答案:

答案 0 :(得分:3)

最好的方法是使用file仅输出mimetype并将其传递给awk

file * -ib | awk -F'[;/.]' '{print $(NF-1)}' | sort -n | uniq -c

在我的主目录中,它会产生此输出。

 35 directory
  3 html
  1 jpeg
  1 octet-stream
  1 pdf
 32 plain
  5 png
  1 spreadsheet
  7 symlink
  1 text
  1 x-c++
  3 x-empty
  1 xml
  2 x-ms-asf
  4 x-shellscript
  1 x-shockwave-flash

如果您认为text/x-c++text/plain应该相同,请使用此

 file * -ib | awk -F'[;/.]' '{print $1}' | sort -n | uniq -c

  6 application
  6 image
 45 inode
 40 text
  2 video

根据您的需要更改{print $1}部分以获得适当的输出。

答案 1 :(得分:0)

您需要bash

files=(*)
pdfs=(*.pdf)

echo "${#files[@]}"
echo "${#pdfs[@]}"
echo "$((${#files[@]}-${#pdfs[@]}))"

答案 2 :(得分:0)

find . -type f | xargs -n1 basename | fgrep . | sed 's/.*\.//' | sort | uniq -c | sort -n

它为您提供了一个递归的文件扩展名列表。如果只想要当前目录,请在find命令中添加-maxdepth 1