Command-Line
按文件名長度查找文件
我想按文件名的長度查找所有文件。
例如,如果我想查找長度為 1 的文件,例如
a.go
,b.go
。我放:
grep '.\{1\}' file
但這不起作用。我可以使用什麼命令按文件名長度查找文件?
如果您只想查找文件名,可以使用以下命令:
find -exec basename '{}' ';' | egrep '^.{100,}$'
這將執行
find
,使用提取文件或目錄的名稱basename
,然後查找至少 100 個字元的任何文件名或目錄名稱。如果您想找到一個確切長度的文件名,請使用{100}
而不是{100,}
.如果要查找包含路徑的文件名,請執行以下操作:
find | egrep '/[^/]{100,}$'
這將返回文件名,包括執行 find 命令的相對路徑。
首先,
grep
搜尋文件的內容,它不會搜尋文件名。為此你想要find
。它沒有設置文件名長度的選項,但您可以解析它的輸出以獲得您想要的。以下是我在包含以下文件的目錄中執行的一些範例:$ tree . ├── a ├── ab ├── abc ├── abcd └── dir ├── a ├── ab ├── abc └── abcd
在此目錄中搜尋文件會返回:
$ find . -type f | sort ./a ./ab ./abc ./abcd ./dir/a ./dir/ab ./dir/abc ./dir/abcd
因此,要查找長度為 X 的文件,我們需要刪除路徑並僅匹配最後一個字元之後的字元
/
:$ find . -type f | grep -P '/.{3}$'
該
sed
命令只是刪除./
. 該-P
標誌啟動 Perl 兼容正則表達式,{n}
這是 PCRE所需要的,$
意思是“匹配字元串的結尾”。你也可以簡單地這樣做:
find . -type f | grep -P '/...$'
這對於鍵入 15 個點以匹配長度為 15 的文件名的小數字來說不是很有效。
最後,如果您想忽略副檔名並僅匹配文件名,請執行此操作(如@slm 建議的那樣):
find . -type f | grep -P '/.{1}\.'
但是,這也會找到像
a.bo.go
. 如果您的文件名可以包含多個,這會更好.
:find . -type f | grep -P '/.{1}\.[^.]+$'
注意:上面的解決方案假設您有相對健全的文件名,不包含換行符等。在計算可能不是您想要的長度時,它也會計算不忽略文件名中的空格。如果其中任何一個有問題,請告訴我,我會更新我的答案。