我希望列出当前目录中所有文件的文件扩展名为" .addr_book"没有可见的扩展名。
我使用过ls | sed -e 's/\..*$//'
,但这会显示当前目录中的所有文件。有没有办法让它只显示.addr_book文件。
谢谢。
答案 0 :(得分:4)
您可以使用basename
:
for i in *.addr_book; do
basename "$i" .addr_book
done
来自man basename
:
basename NAME [SUFFIX]
...
Print NAME with any leading directory components removed. If speci‐
fied, also remove a trailing SUFFIX.
答案 1 :(得分:3)
for file in *.addr_book; do
echo "${file%.addr_book}" # removes the trailing '.addr_book' from $file
done
答案 2 :(得分:2)
尝试:
for f in *.addr_book; do
[ -e "$f" ] && printf "%s\n" "${f%.*}"
done
如果没有* .addr_book文件,则使用 [ -e "$f" ]
,否则会出现错误结果。
答案 3 :(得分:-1)
你可以这样做:
ls | awk -F"\.addr_book" 'NF>1 {print $1}'
这将使用.addr_book
作为分隔符来划分所有文件名
如果数字字段较大,则1
打印第一部分。
答案 4 :(得分:-1)
我会建议我经常使用这种非常简单的方法:
(选项-C1仅将ls输出格式化为一列,这是文件名)
ls -C1 * .addr_book | awk -F。 ' {print $ 1}'
希望这有帮助!
丹尼尔。