検索コマンドは、ディレクトリツリーを検索するために使用されます。

検索コマンドは、ディレクトリツリーを検索するために使用されます。

findディレクトリツリーの検索にGNUに対応するコマンドまたはオプションはありますか?私はツリーで逆さまに与えられた名前のファイルを探したいと思います。たとえば、私が/usr/local/share/binにあり、というファイルを検索したいとしますfoo。理想的には、コマンドに次の順序でファイルを見つけるようにしたいと思います。

  1. /usr/local/share/bin/foo
  2. /usr/local/share/foo
  3. /usr/ローカル/foo
  4. /usr/foo
  5. /foo

findシェル関数でこのようなものを作成できることを知っていますが、私が活用できるgnuほど豊富なコマンドがあったらと思います。

ベストアンサー1

以下は、findルートから現在のディレクトリまで検索し、引き続き検索しますが、その単一パスのディレクトリ内のみを探します。

find / -exec bash -c '[[ $PWD != "$1"* ]]' bash {} \; -prune -name foo -print

コマンドの最初の部分であるUntilは、-prune現在確認されているパス名がそのパスにあるかどうかを決定します$PWD。現在のディレクトリパスにない場合は、検索パスから削除されます。

比較は非常にbash現在のディレクトリが$PWD現在のパス名の先頭に一致するかどうかをテストするための短いスクリプト。

次のビットは、検査中のファイル名-pruneと一致しようとします。foo

bin例: 現在私がいるディレクトリ構造のどこかで名前付きエントリを探そうとします。

$ pwd
/home/kk/local/build/ast/build/src/cmd/ksh93/sh
$ find / -exec bash -c '[[ $PWD/ != "${1%/}/"* ]]' bash {} \; -prune -name bin -print
/bin
/home/kk/local/bin
/home/kk/local/build/ast/bin

$PWDインラインスクリプトの値を操作することで、$1$1見つかった項目に応じてfind)起動時にディレクトリコンポーネント全体として検出され、$PWDプレフィックス文字列だけでなく(/home/matたとえば、次のものと混同しないように)/home/matthew


bashクイックスタートシェルがある場合とないシステムではsh

find / -exec sh -c 'case $PWD/ in ("${1%/}/"*) exit 1; esac' sh {} \; -prune -name bin -print

おすすめ記事