我需要在文件夹中获取所有文件扩展名类型.例如,如果目录的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.
非常感谢!
请参阅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关联数组存储方法来解决.