Bash:使用.addr_book列出所有文件,不带文件扩展名

时间:2014-04-01 12:27:45

标签: bash shell unix sed ls

我希望列出当前目录中所有文件的文件扩展名为" .addr_book"没有可见的扩展名。

我使用过ls | sed -e 's/\..*$//',但这会显示当前目录中的所有文件。有没有办法让它只显示.addr_book文件。

谢谢。

5 个答案:

答案 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}'

希望这有帮助!

丹尼尔。