私は間違ったstackexchangeサイトで この質問 を尋ねたことがわかりました。
特定のパスから始まるファイルを見つけるには、find <path> ...
を使用できます。 'upwards'を検索したい場合、つまり親ディレクトリにあり、それが親であり、...、同等のツールはありますか?
ユースケースは、たとえばで使用するドットの正しい数(../../x.txtまたは../../../x.txt?)を知っていることです。上流のどこかにいくつかの一般的なmakefile関数を含むmakefile。
次のようなフォルダ構造の使用目的:
/
/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
$
つまり、要するに:
この簡単なスクリプトを使用できます。ディレクトリツリーを上に移動し、指定されたファイルを検索します。
#!/bin/bash
while [[ $PWD != / ]] ; do
find "$PWD"/ -maxdepth 1 "$@"
cd ..
done
使用法:
upfind -name 'x*'
パスを構成するディレクトリノードに分割し、それぞれを慎重に検索するだけです。これは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*"
...これは次の出力を生成します
when [〜#〜] yabba [〜#〜] presents /、/ home/user、/ home/user/zt
../../../YABBA
../YABBA
YABBA