我想列出所有文件在當前目錄中的文件擴展名「.addr_book」不帶擴展名是可見的。擊:清單.addr_book所有文件,無需文件擴展名
我用ls | sed -e 's/\..*$//'
但是這顯示當前目錄下的所有文件。有沒有辦法讓它只顯示.addr_book文件。
謝謝。
我想列出所有文件在當前目錄中的文件擴展名「.addr_book」不帶擴展名是可見的。擊:清單.addr_book所有文件,無需文件擴展名
我用ls | sed -e 's/\..*$//'
但是這顯示當前目錄下的所有文件。有沒有辦法讓它只顯示.addr_book文件。
謝謝。
for file in *.addr_book; do
echo "${file%.addr_book}" # removes the trailing '.addr_book' from $file
done
你可以做一些這樣的:
ls | awk -F"\.addr_book" 'NF>1 {print $1}'
這將劃分使用.addr_book
作爲分隔符的所有文件名。
如果數字字段大於1
則打印第一部分。
嗨Jotne,應該是前面一個反斜槓'.'和(理論上,可能在實踐中沒有)則可能是像'a.addr_book.2nd.title.addr_book'例如文件的問題。 。問候... – Scrutinizer
@Scrutinizer謝謝,修正。 – Jotne
[不解析ls'的'輸出。(http://mywiki.wooledge.org/ParsingLs) – chepner
你可以使用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.
嘗試:
for f in *.addr_book; do
[ -e "$f" ] && printf "%s\n" "${f%.*}"
done
[ -e "$f" ]
在情況下使用不存在* .addr_book文件的現在,否則就不會有錯誤的結果..
This or'shopt -s nullglob'。 –
我會建議我經常用這個非常簡單的方法:
(選項-C1格式化輸出ls命令只有一列,是這個文件名)
LS -C1 * .addr_book | awk -F。 '{打印$ 1}'
希望這有助於!
丹尼爾。
另一種使用'GNU parallel'的方案:'parallel echo {。} ::: * .addr_book' –