[英]script for getting extensions of a file
我需要在文件夾中獲取所有文件擴展名類型。 例如,如果目錄的ls給出以下內容:
a.t
b.t.pg
c.bin
d.bin
e.old
f.txt
g.txt
我應該通過運行腳本來獲取
.t
.t.pg
.bin
.old
.txt
我有一個bash外殼。
非常感謝!
請參閱ParsingLS上的BashFAQ條目,以獲取其中許多答案為何有害的描述。
下面的方法避免了這種陷阱(順便說一句,完全忽略了沒有擴展名的文件):
shopt -s nullglob
for f in *.*; do
printf '%s\n' ".${f#*.}"
done | sort -u
優勢之一:
ls
行為不一致,並可能導致不合適的結果。 請參閱頂部的鏈接。 sort -u
,如果我們想使用Bash 4的關聯數組來存儲結果,也可以將其刪除) 仍有待改進的地方:
.
(其他答案不會)-但在第一個文件名后帶有換行符.
將按sort
方式視為單獨的條目。 這可以通過使用空值作為定界符或通過上述bash 4關聯數組存儲方法來解決。 嘗試這個:
ls -1 | sed 's/^[^.]*\(\..*\)$/\1/' | sort -u
ls
列出文件夾中的文件,每行一個文件 sed
magic提取擴展名 sort -u
擴展名sort -u
排序並刪除重復項 sed魔術的讀法是:
s/ / /
:用第一和第二之間的內容替換為第二和第三之間的內容/ ^
:匹配行首 [^.]
:匹配任何非點的字符 *
:盡可能多地匹配 \\(
和\\)
:記住這兩個括號之間的匹配項 \\.
:匹配一個點 .
:匹配任何字符 *
:盡可能多地匹配 $
:匹配行尾 \\1
:這是括號之間匹配的 人們確實使這一問題變得過於復雜-特別是正則表達式:
ls | grep -o "\..*" | uniq
ls
獲取所有文件
grep -o "\\..*"
- -o
只顯示匹配; "\\..*"
與第一個“。”匹配 及其后的一切
uniq
不重復打印,但保持相同順序
您也可以根據需要進行排序,但是排序與示例不匹配
當您運行它時,將發生以下情況:
> ls -1
a.t
a.t.pg
c.bin
d.bin
e.old
f.txt
g.txt
> ls | grep -o "\..*" | uniq
.t
.t.pg
.bin
.old
.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.