用于获取文件扩展名的脚本

Rom*_*nov 3 bash file

我需要在文件夹中获取所有文件扩展名类型.例如,如果目录的ls给出以下内容:

a.t  
b.t.pg  
c.bin  
d.bin  
e.old  
f.txt  
g.txt  
Run Code Online (Sandbox Code Playgroud)

我应该通过运行脚本来实现这一点

.t  
.t.pg  
.bin  
.old  
.txt  
Run Code Online (Sandbox Code Playgroud)

我有一个bash shell.

非常感谢!

Cha*_*ffy 7

请参阅ParsingLS上的BashFAQ条目,了解为何这些答案中有许多是邪恶的.

以下方法避免了这个陷阱(顺便说一句,完全忽略没有扩展名的文件):

shopt -s nullglob
for f in *.*; do
  printf '%s\n' ".${f#*.}"
done | sort -u
Run Code Online (Sandbox Code Playgroud)

其中的优点:

  • 正确性:ls行为不一致,可能导致不适当的结果.请参阅顶部的链接.
  • 效率:最小化调用的子进程数(只有一个,sort -u如果我们想使用Bash 4的关联数组存储结果,也可以删除它)

仍有待改进的事情:

  • 正确性:这将在第一个文件名之前正确地丢弃文件名中的换行符.(其他一些答案不会) - 但是在第一个文件名之后带有换行符的文件.名将被视为单独的条目sort.这可以通过使用空值作为分隔符,或通过前面提到的bash 4关联数组存储方法来解决.