Grep

查找以特定字元結尾的文件名,帶或不帶副檔名

  • September 14, 2018

我在一個文件夾中有一堆文件,它們都以不同的版本號結尾,比如 1、2、3 等。其中一些有副檔名,有些沒有。有什麼方法可以使用像 ls、find 或 grep 這樣的命令來列出所有以特定字元結尾的文件,比如“1”,這些文件可能以副檔名結尾,也可能不以副檔名結尾?

例如,在一個目錄中,我有以下文件:ver1.txtver1file.1. 我想做一些會返回的事情ver1.txtver1但不是file.1,如果這有幫助的話。我試過使用類似ls *[1.]*的東西,但這不是我想要的……

find

find . -regex '\.[^.]*1\|.*1\.[^.]*'

這將匹配ver1and ver1.txtfile1.ver1.txt file1.ver2.txt匹配。如果你也想匹配:

find . -regex '\.[^.]*1\|.*1\..*'

您必須在搜尋目錄中執行這些命令,find somepath ...這不起作用,因為正則表達式匹配整個路徑。

由於您不可能給出每個可能存在的文件名和您可以搜尋的每個模式的範例,我將繼續您所擁有的:

find . -type f | awk -F / '{print $2}' | grep -v '\.[1-100]$'

考慮到您已經給出了ver1.txt, ver1, 和file.1作為您正在搜尋的目錄中的文件,上述命令將返回您想要的輸出:

ver1.txt
ver1

解釋每個部分:

find . -type f返回目前目錄中的每個文件

awk -F / '{print $2}'刪除命令./中出現的每個文件開頭的find

grep -v '\.[1-100]$'返回任何不以.#where結尾#的文件1-100v開關找到任何不匹配的行在您.#給出的範例的情況下,有必要使用\轉義.和在字元串周圍使用單引號。表示以該字元串結尾的$文件,儘管在您的情況下,沒有它也可以工作。我只包括它以防文件名中可能有.其他地方的文件。

您必鬚根據要查找的內容更改參數,但這應該可以幫助您入門。

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