多くの場合、ファイル名とその部分パス(例: "content / docs / file.xml")があります。
ディレクトリ名とファイル名を別々に提供するために名前を部分的に手動でカットすることなく、そのファイルを検索する簡単な方法はありますか?
そのようにfind
働いていれば素晴らしいと思うので、私は走ることができましたがfind content/docs/file.xml
、残念ながらうまくいきません。
多くの場合、ファイル名とその部分パス(例: "content / docs / file.xml")があります。
ディレクトリ名とファイル名を別々に提供するために名前を部分的に手動でカットすることなく、そのファイルを検索する簡単な方法はありますか?
そのようにfind
働いていれば素晴らしいと思うので、私は走ることができましたがfind content/docs/file.xml
、残念ながらうまくいきません。
回答:
*
ワイルドカードを渡して、何にでも一致することを示します。*
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
find . -type f | grep "content/docs/file.xml"
あるいは単に
locate content/docs/file.xml
たとえば、アスタリスク/ワイルドカード(*
)を使用して特定の場所でファイルを検索する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})
find -path *content/docs/file.xml
私のために働いた。