名前と部分パスでファイルを検索するにはどうすればよいですか?


64

多くの場合、ファイル名とその部分パス(例: "content / docs / file.xml")があります。

ディレクトリ名とファイル名を別々に提供するために名前を部分的に手動でカットすることなく、そのファイルを検索する簡単な方法はありますか?

そのようにfind働いていれば素晴らしいと思うので、私は走ることができましたがfind content/docs/file.xml、残念ながらうまくいきません。


1
最初に*ワイルドカードを追加してみてください。find -path *content/docs/file.xml私のために働いた。
ボブ

おかげで、@ Bob、本当に役立った。面白いことに、アスタリスクの後にスラッシュを追加する場合、「find -path * / content / docs / file.xml」は機能しません。とにかくどうもありがとう。

また、@ Bob、回答として作成してください。正しいものとしてマークします。

アスタリスクの後のスラッシュが機能しなかった理由は、おそらくアスタリスクをエスケープする必要があるためです。私の答えの編集を参照してください。
ボブ

回答:


72

*ワイルドカードを渡して、何にでも一致することを示します。*s をエスケープする必要もあります。例:

find . -path \*content/docs/file.xml

または、パターンを引用符で囲みます。例:

find . -path "*content/docs/file.xml"

manページで説明されているように:

$ find。-name * .c -print

find:パスは式の前になければなりません

これは、*。cがシェルによって展開され、findが実際に次のようなコマンドラインを受信するために発生します。

見つける 。-name bigram.c code.c frcode.c Locate.c -print

もちろん、このコマンドは機能しません。このようにするのではなく、パターンを引用符で囲むか、ワイルドカードをエスケープする必要があります。

$ find。-name \ *。c -print


10

findには-wholenameオプションもあります find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword

私は完全なパスを知らず、部分的なだけなので、「-wholename」は機能しません。

フラグは誤解を招きやすいので、例を参照してください。文字列を知っている場合は、文字列をディレクトリに拡張できます。
テクノサウルス

3
find . -type f | grep "content/docs/file.xml"

あるいは単に

locate content/docs/file.xml

Locateは興味深いオプションですが、ディスク全体を検索します。ベース検索ディレクトリを指定するか、少なくともparamを使用して指定する機能が必要です。検索はこのディレクトリから行う必要があります(最初のオプションと同様) 、ルートからではありません。

1
@ user69817-それどころか、locateはディスクを検索せず、通常は1日に1回cronを介して読み込まれるロケートデータベースに問い合わせます。
ティンク

1

たとえば、アスタリスク/ワイルドカード(*)を使用して特定の場所でファイルを検索するdir=“/apps/*/instance01/" 場合: findを使用できます${dir} -name “*.jks”。すべてのファイルを次のような配列に配置します。

arr=(`find ${dir} -name “*.jks"`)

他の拡張子を持つファイルを取得する場合は、次のように「または」を使用します。

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" なぜなら-nameのみ使用「または」ので、単一の文字列を受け付けます。

最後に、すべてを次のように配列に配置します。

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

部分的なパスではなく完全なパスがある場合、次のような配列に配置するのがはるかに簡単です:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.