我知道我可以使用查找包含字符x或y的文件?
find . -name *x*
搜索文件......這將找到包含x
字符的所有文件。但是我怎樣才能找到包含[
,]
,*
或?
字符的所有文件?
最好避免重複,這樣我就可以將同一個命令傳送到文本文件。
我知道我可以使用查找包含字符x或y的文件?
find . -name *x*
搜索文件......這將找到包含x
字符的所有文件。但是我怎樣才能找到包含[
,]
,*
或?
字符的所有文件?
最好避免重複,這樣我就可以將同一個命令傳送到文本文件。
可以使用glob
格局find
命令是這樣的:
find . -name '*[][*?]*'
上面會發現有任何出現在他們的名字這些字符的文件:
]
[
*
?
-name
選項設置爲使得外殼不會試圖展開它的模式是很重要的。[
之前保持]
內[...]
你也可以做這種伎倆:
find . * | grep -P "[\[\]*?]"
你可以簡單地用'find'來代替find。 *'。這將避免兩次打印所有內容 - 一次使用前面的「。/」,一次沒有。也可以考慮添加'-type f'來查找文件名(而不是目錄) – dingalapadum
解析'find'的輸出受到與解析'ls'輸出相同的問題的影響。不要這樣做。 – chepner
這也會將包含在與正則表達式匹配的目錄中的所有文件全部吐出。這與OP中給出的命令的行爲完全不同。 – cmaster
find
有-regex or -iregex
選項,它接受正則表達式。你需要的只是建立一個簡單的正則表達式。
如果您不想在結果集中列出目錄,請考慮添加'-type f' – dingalapadum
同意,如果OP只想找到文件而不是目錄,則應添加'-type f'。 – anubhava
您不必轉義括號表達式中的任何字符;如果它不是* first *字符(因爲'[]'不是有效的括號表達式,所以'']'只需要被轉義,沒有歧義),其餘部分在括號表達式的一部分時被逐字處理。 '-name'* [] [*?] *''就足夠了。 ('''有時候可能需要引用以避免無意識的角色類,但這不是這種情況。) – chepner