2017-02-13 84 views
2

我知道我可以使用查找包含字符x或y的文件?

find . -name *x* 

搜索文件......這將找到包含x字符的所有文件。但是我怎樣才能找到包含[],*?字符的所有文件?

最好避免重複,這樣我就可以將同一個命令傳送到文本文件。

回答

4

可以使用glob格局find命令是這樣的:

find . -name '*[][*?]*' 

上面會發現有任何出現在他們的名字這些字符的文件:

  1. ]
  2. [
  3. *
  4. ?

    • 它引用在-name選項設置爲使得外殼不會試圖展開它的模式是很重要的。
    • 同樣重要的是[之前保持][...]
+1

如果您不想在結果集中列出目錄,請考慮添加'-type f' – dingalapadum

+0

同意,如果OP只想找到文件而不是目錄,則應添加'-type f'。 – anubhava

+1

您不必轉義括號表達式中的任何字符;如果它不是* first *字符(因爲'[]'不是有效的括號表達式,所以'']'只需要被轉義,沒有歧義),其餘部分在括號表達式的一部分時被逐字處理。 '-name'* [] [*?] *''就足夠了。 ('''有時候可能需要引用以避免無意識的角色類,但這不是這種情況。) – chepner

0

你也可以做這種伎倆:

find . * | grep -P "[\[\]*?]" 
+0

你可以簡單地用'find'來代替find。 *'。這將避免兩次打印所有內容 - 一次使用前面的「。/」,一次沒有。也可以考慮添加'-type f'來查找文件名(而不是目錄) – dingalapadum

+1

解析'find'的輸出受到與解析'ls'輸出相同的問題的影響。不要這樣做。 – chepner

+0

這也會將包含在與正則表達式匹配的目錄中的所有文件全部吐出。這與OP中給出的命令的行爲完全不同。 – cmaster

0

find-regex or -iregex選項,它接受正則表達式。你需要的只是建立一個簡單的正則表達式。