2014-04-01 47 views

回答

3
for file in *.addr_book; do 
    echo "${file%.addr_book}" # removes the trailing '.addr_book' from $file 
done 
+0

另一種使用'GNU parallel'的方案:'parallel echo {。} ::: * .addr_book' –

-1

你可以做一些這樣的:

ls | awk -F"\.addr_book" 'NF>1 {print $1}' 

這將劃分使用.addr_book作爲分隔符的所有文件名。
如果數字字段大於1則打印第一部分。

+0

嗨Jotne,應該是前面一個反斜槓'.'和(理論上,可能在實踐中沒有)則可能是像'a.addr_book.2nd.title.addr_book'例如文件的問題。 。問候... – Scrutinizer

+0

@Scrutinizer謝謝,修正。 – Jotne

+1

[不解析ls'的'輸出。(http://mywiki.wooledge.org/ParsingLs) – chepner

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. 
2

嘗試:

for f in *.addr_book; do 
    [ -e "$f" ] && printf "%s\n" "${f%.*}" 
done 

[ -e "$f" ]在情況下使用不存在* .addr_book文件的現在,否則就不會有錯誤的結果..

+0

This or'shopt -s nullglob'。 –

-1

我會建議我經常用這個非常簡單的方法:

(選項-C1格式化輸出ls命令只有一列,是這個文件名)

LS -C1 * .addr_book | awk -F。 '{打印$ 1}'

希望這有助於!

丹尼爾。