Linux

使用 ls 查找以字元結尾的文件,忽略副檔名

  • September 11, 2018

我應該使用 ls 來查找以某個字母結尾的文件,但文件是否具有副檔名並不重要。

例如,我希望它這樣做

> ls test test.txt test.ascii other.txt

> ls [something] test test.txt test.ascii

這樣我就可以找到以“t”結尾的文件,但它不包括副檔名以 t 結尾的文件

編輯:我應該假設文件名中唯一的句點字元將用於副檔名,並且不會有其他字元

某事=

|grep -e ".*t\.[^.]*" -e "^[^.]*t$"

如果您使用的是bashshell,則可以使用該extglob選項進行複雜的過濾。例如:

解決方案:

bash$ shopt -s extglob

bash$ ls
other.txt  test  test.ascii  test.txt

bash$ ls *@(t.*|[^.]?[[:alnum:]]t)
test  test.ascii  test.txt

解釋:

PATTERN1(t.*)匹配任何以“t”結尾且後跟文件副檔名的文件:

bash$ ls *@(t.*)
test.ascii  test.txt

PATTERN2([^.]?[[:alnum:]]t)匹配任何沒有點、後跟零個或多個字母數字字元並以“t”結尾的文件。這匹配沒有文件副檔名的文件:

bash$ ls *@([^.]?[[:alnum:]]t)
test

glob 只@(PATTERN1|PATTERN2)匹配任一模式一次。組合模式僅過濾掉我們正在尋找的內容。

有關 bash 模式的更多資訊,請參閱:http ://wiki.bash-hackers.org/syntax/pattern

引用自:https://unix.stackexchange.com/questions/468147