*アップ*ディレクトリツリーを歩くFind-likeユーティリティ


2

ディレクトリまたはその下のどこかにファイルを見つけたい場合findは、非常に便利なユーティリティです。現在のディレクトリまたはその上にあるものを見つける類似のユーティリティはありますか?

たとえば、ファイルシステムが次のようになっている場合:

/ proj /
   foo /
     pom.xml
     バー/
       pom.xml
       baz /
         pom.xml
   クイズ/
     pom.xml

それからfind /proj/foo/bar -name pom.xml私にくれます

/proj/foo/bar/pom.xml
/proj/foo/bar/baz/pom.xml

出力として。返されるコマンドを探しています

/proj/foo/bar/pom.xml
/proj/foo/pom.xml

(または逆の順序)。現在私がしがちなのは、次のようなことをするシェルスクリプトを書くことです

while [[ $dir != / ]]
do
  check stuff
  cd ..
done

このようなものはありますか?

理想的には、任意のシェルでLinux、Mac、およびCygwinで機能するものが欲しいのですが、サブセットでのみ、またはでのみ機能するものbashも便利です。


ああ...私はその要求を誤解しました。
EBGreen

1
私は、これは面白いと思いと質問のように....多分これはあなたの出発点を与えるのを助けるでしょうかあなたがあなたの必要性のために十分ですが解決策が表示されます:unix.stackexchange.com/questions/6463/...受け入れを答えは、いくつかの追加事項を含むwhileループの例に似ています。
ピンプジュースIT

回答:


0

テストされていませんが、これで実行されるはずですbash(他のシェルについてはわかりません)

#!/bin/bash
oldpwd=`pwd`
ret=1

while true; do
    find `pwd` -mindepth 1 -maxdepth 1 $@

    if [ $? -eq 0 ] ; then
        ret=0
    fi

    if [ `pwd` = '/' ] ; then
        exit $ret
    else
        cd ..
    fi
done

cd $oldpwd

スクリプトとして、find式の正規の構文を受け入れる必要があります。後でジャンプできるように現在のディレクトリを保存してから、ディレクトリツリーをループアップし、ルートディレクトリに到達するまでそのレベルのアイテムのみを検索します。これにより、一致するすべてのアイテムがツリーの上に表示されますfind。最初の一致だけが必要な場合は、ループ内にチェックを簡単に追加して保釈できます。

おそらく少し最適化することもできますが、スピードよりも早く簡単に理解できるようになりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.