上向きの発見はありますか?


7

私は尋ねた この質問 間違ったstackexchangeサイトで。

特定のパスから始まるファイルを見つけるには、次のようにします。 find <path> ...。私が「上向き」、つまり親ディレクトリに見つけたいのであれば、それは親であり、そして...、同等のツールはありますか?

ユースケースでは、たとえば、ドットの正しい数(../../x.txtまたは../../../x.txt?)を知っています。ある上流のどこかにあるいくつかの一般的なメークファイル関数を含むメークファイル。

このようなフォルダ構造の使用目的

/
/abc
/abc/dce/efg/ghi
/abc/dce/efg2


$ cd /abc/dce/efg/ghi
$ touch ../../x.txt
$ upfind . -name X*
../../x.txt
$ upfind . -name Y* || echo "not found"
not found
$ touch /abc/dce/efg2/x.txt
$ upfind . -name Y* || echo "not found"
not found
$ 

要するに、

  • それはこのフォルダを検索する必要があります、それは親です、それは親の親です...
  • しかし、彼らの兄弟にはいない( 'find'のように)
  • 現在のパスに関連して見つかったファイルを報告します。

リンクから、あなたの問題を解決するスクリプトをすでに書いているようです。
Matt

@マット:はい、しかし私は常に1つのより良い答えを見つけることを試みる、そしてこれはそうするためのより良いフォーラムです。
xtofl

ああ。実際には、私は最高のフォーラムはそうだろうと思うでしょうね。
Matt

回答:


1

パスをそれを構成するディレクトリノードに分割し、それぞれを慎重に検索するだけです。それは bash スクリプト。

IFS=/; dn=($1); ct=${#dn[@]}
for((i=0; i<ct; i++)); do
  subd+=/"${dn[i]}"
  dots=$(for((j=ct-i; j>1; j--)); do printf "../"; done)
  find "$subd" -maxdepth 1 -type f -name "$2" -printf "$dots%f\n"
done

走る upfind $HOME/zt" "Y*" 次のような出力を生成する...
いつ ヤバ に存在する / / home / user / home / user / zt

../../../YABBA
../YABBA
YABBA

13

この簡単なスクリプトを使うことができます。ディレクトリツリーを上に向かって進み、指定されたファイルを検索します。

#!/bin/bash
while [[ $PWD != / ]] ; do
    find "$PWD"/ -maxdepth 1 "$@"
    cd ..
done

使用法:

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