特定の拡張子を持つファイルを再帰的に検索する


81

特定の拡張子を持つファイルを見つけようとしています。たとえば、Robertという名前のすべての.pdfファイルと.jpgファイルを検索したい

私はこのコマンドを実行できることを知っています

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

ただし、拡張子以外にファイル自体の名前を指定する必要があります。ファイル名を何度も書かないようにする方法があるかどうかを確認したいだけです。ありがとうございます。


4
このコマンドまたはその下のコマンドをコピーする場合は、iname代わりに使用する必要があります。大文字と小文字区別されませ
アディソン

良い点、アディソン(したがって+1)。ただし、OPは、大文字の「R」が付いた「Robert」という名前のファイルを必要としているようです。私が投稿を解釈すると、これは「robert」を含むファイルが出力されるべきではないことを意味します。「Rのobert`が書かれているものです。ただし、誰かが「ロバート」または「ロバート」のいずれかを見つけたい場合があります。たぶん、OPはこの状況にあります。使用するかどうか、inameまたはname何を見つけたいかによって異なります。私は事件が不可欠な状況にありました。
bballdave025 2018

回答:


101

私の好み:

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

2
うまく機能しますが、わずかな欠点は、find -exec ...
Mark Setchell 2014

特定のパスのすべてのフォルダーにあるすべてのxxx-deployment.ymlファイルを検索したい場合はどうすればよいですか?
Naim Salameh 2017年

これは、長いパスがある場合、jpgまたはpngその一部としてはうまく機能しません。
AutonomousApps

18

find-regex引数の使用:

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

または単に使用する-name

find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)

4
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)

-orepreentsOR条件を、あなたは括弧内望むように、あなたは多くのとして追加することができます。つまり、名前のどこかに「Robert」という単語が含まれ、名前が「pdf」または「jpg」で終わるすべてのファイルを検索するということです。


3

-regexオプションを使用する代わりにfind、質問にラベルが付けられているため、ブレース拡張メカニズムを使用できます。

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

「パスは式の前になければならない」というレポートを見つけてください。問題は何ですか?私は通常それを解決するために引用符を追加しますが、この式では機能しません。ありがとう!
netawater 2015年

上記のコマンドで、evalまたはを忘れたか、より複雑なもののエイリアスであるか、LinuxのバージョンでストックGNUを使用していない可能性があります。.findfind
jxh 2015年

返信ありがとうございます。次のようなスクリプトを使用しました:FILEEXTEIONS = cs、[ch] evalfind。-false "-o -name *"。{$ FILEEXTEIONS}、そしてそれはそのエラーを報告します。
netawater 2015年

私の知る限り、ブレース拡張ブレースの内部では可変拡張は発生しません。
jxh 2015年

1
この手法をAndroidシェルで使用したかったのですが、をfindサポートしていません-false。私はこれを回避するために、相互に排他的な2つの条件を与えて、それらがまとめて偽になるようにしました-inum 1 -inum 2
スターフライ2018年


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 "$@" 

そして

findcc directory grep_options

お気に入り

findcc . -P '/Robert\.(h|cpp)$'

1

bashグロブの使用(find必須でない場合)

ls Robert.{pdf,jpg} 

0

lsを使用して再帰的に:(隠しフォルダーを含める場合は-al)

ftype="jpg"
ls -1R *.${ftype}  2> /dev/null
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.