2014-09-05 113 views
37

我試圖查找具有特定擴展名的文件。 例如,我想找到的命名羅伯特遞歸地查找具有特定擴展名的文件

所有.pdf和.jpg文件,我知道我能做到這一點命令

$ find . -name '*.h' -o -name '*.cpp' 

,但我需要指定文件本身除了擴展名。 我只想看看是否有可能避免再次寫入文件名 謝謝!

回答

48

我的偏好:

find . -name '*.jpg' -o -name '*.png' -print | grep Robert

+1

很好地工作,但稍微缺點是,它排除了你做'find -exec ...' – 2014-09-06 08:20:33

+0

如果我想在特定路徑的所有文件夾中找到所有xxx-deployment.yml文件,該怎麼辦? – 2017-11-09 19:19:27

11

使用find-regex說法:

find . -regex '.*/Robert\.\(h\|cpp\)$' 

或者只是使用-name

find . -name 'Robert.*' -a \(-name '*.cpp' -o -name '*.h' \) 
2
find -name "*Robert*" \(-name "*.pdf" -o -name "*.jpg" \) 

-o repreents一個OR條件,你可以添加你想要在大括號內爲多。因此,這表示查找包含名稱中任何位置的單詞「Robert」的所有文件,其名稱以「pdf」或「jpg」結尾。

1

作爲替代使用上find-regex選項,因爲這個問題被標記爲,可以使用支具膨脹機構:

eval find . -false "-o -name Robert".{jpg,pdf} 
+0

發現報告 「的路徑必須先表達」,有什麼問題呢?我通常會添加引號來解決它,但不適用於此表達式。謝謝! – netawater 2015-11-16 05:28:14

+0

我懷疑你在上面的命令中忘記了'eval'或者''',或者你的'find'是更復雜的別名,或者你的Linux版本沒有使用GNU'find'。 – jxh 2015-11-16 16:51:54

+0

感謝您的回覆,我使用了這樣的腳本:FILEEXTEIONS = cs,[ch] eval find。 -false「-o -name *」。{$ FILEEXTEIONS},並報告錯誤。 – netawater 2015-11-17 01:47:06

1

作爲一個腳本,您可以使用:

find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print 
  • 另存爲findcc
  • 搭配chmod 755 findcc

並使用它作爲

findcc [name] [[search_direcory]] 

例如

findcc     # default name 'Robert' and directory . 
findcc Joe    # default directory '.' 
findcc Joe /somewhere # no defaults 

記下您不能使用

findcc /some/where #eg without the name... 

也可以作爲替代,你可以使用

find "$1" -print | grep "[email protected]" 

findcc directory grep_options 

findcc . -P '/Robert\.(h|cpp)$' 
相關問題