2017-06-05 8 views
0

リソースが削除された後に環境ファイルをクリーンアップするスクリプトを作成しようとしています。問題は、スクリプトが入力として与えられるすべてのものは、それを超える識別情報がゼロのリソースの名前(これは変更できません)です。 リソースが置かれているディレクトリのパスはどのようにして見つけることができますか?bash:サブディレクトリ名が与えられた現在のディレクトリからのパスを取得

ディレクトリは、はるかに広範囲ですが、次のように少し設定されています。これらはすべてファイルではなくディレクトリです。検索するディレクトリは40+個までありますが、一般的には2〜3個以下のディレクトリです。

foo 
    aaa 
     aaa_green 
     aaa_blue 
    bbb 
    ccc 
     ccc_green 
bar 
    ddd 
    eee 
     eee_green 
     eee_blue 
    fff 
     fff_green 
     fff_blue 
     fff_pink 

私はaaa_greenまたはちょうどdddのように入力を渡すことがあります。

例として、eee_blueを入力すると、私はそこにcdしてディレクトリを削除できるので、作業ディレクトリからeee_blueのパスを知る必要があります。 IEの場合、私はbar/eee/eee_blue/またはbar/eee/のいずれかを返すことを期待していますが、どちらでもかまいません。

私が現在見ることのできる「最良の」オプションは、複数のgrepを使って各ディレクトリの最下位レベルにcdし、それぞれの内容を取得して一致を探し、それが(最終的に)パス。これは率直で、ひどく非効率的です。

私が考えることのできる唯一の代替方法は、まっすぐな再帰的なgrepでしたが、私はそれをテストし、8分後にはまだ実行が完了していませんでした。

このスクリプトは、MacとLinuxの両方での両方で実行する必要がありますが、必死のピンチで私はLinuxにしか行けませんでした。

+1

それは 'findではありません。 '-exec rm -fr {} +'やそれに類するものを使用して、おそらく名前を表示するでしょうか?-name 'eee_blue'基本的なことは、「findコマンドを使う」ようです。あなたはそれを知らなかったのですか、それを使用しない理由がありますか? –

+0

@JonathanLeffler Bash noobは、ゼロアイデアが存在することを発見しました。それは気の利いた!私は受け入れることができるので、私の答えのように見えるので、自由に答えてください – Alex

答えて

1

この種のタスクを実行する標準のUnixツールは、findコマンドです。 findのGNUバージョンは、POSIX仕様よりも広範なオプションを持っています(多少の違いがあります)。 macOS Sierra(およびMac OS X)のバージョンはGNUバージョンに似ています。 Apple findでOS X 10.9のオンラインマニュアルが見つかりましたが、おそらくもっと良い場所があります。

あなたが実行したい場合がありますように見えます:それぞれの名前にrm -frコマンドを実行する

find . -name 'eee_blue' -exec rm -fr {} + 

を:一致するファイルまたはディレクトリの名前を印刷、または多分ます

find . -name 'eee_blue' 

。必要に応じて、rm -frの代わりに作成したカスタムスクリプトを実行できます。論理が複雑なら、それは私の行いです。

は自動的にrm -frを使用する前に慎重極めてう!

関連する問題