CentOS下如何通过一条命令得知目录及子目录下的文件类型?
输出应如下所示:
.inc, .inp, .odb, .a3db, .......
答案1
获取唯一文件扩展名的列表(这些是不是指示 Unix 上的“文件类型”),你可以这样做
find . -type f -name '*.*' -exec sh -c '
for pathname do
printf "%s\n" "${pathname##*.}"
done' sh {} + | sort -u
这将查找当前目录中或当前目录下名称至少包含一个点的所有常规文件。对于这些路径名,将执行一个简短的脚本,简单地删除直到并包括最后一个点的所有内容并打印剩余的字符串。 sort -u
然后对它们进行排序,同时删除重复项。
这假设文件扩展名不包含换行符。
要将其放入单行上的逗号分隔列表中,请通过管道传输输出tr '\n' ','
(如果执行此操作,行末尾将有一个逗号而不是换行符)。
如果您想在输出中包含点,请将printf
格式字符串从更改%s\n
为.%s\n
。
Unix确实有文件类型,例如常规文件、目录、命名管道、字符和块特殊文件等。但这些类型并不通过文件名来区分。
答案2
和zsh
:
typeset -U ext
ext=(**/?*.*(ND:e))
print -r -- ${(j:, :)ext}
答案3
这将返回所有目录和子目录中的所有文件扩展名的列表。
find
命令查找目录和子目录中的所有文件,然后grep
查找文件名中带有点的文件awk
通过使用.
(点)作为分隔符并打印最后一个字段($NF
)来打印所有文件的扩展名- 最后使用
sort
anduniq
只打印 uniq 扩展名
find <DIRECTORY_NAME> -type f -printf "%f\n" | grep '\.' | awk -F '.' '{print $NF}' | sort | uniq