내가 다음 디렉터리에 있다고 가정해 보겠습니다.
/A-dir/B-dir/mydir/… some directories …/x-dir
find
에서 검색 mydir
하고 싶지만 현재 작업 디렉터리에서 "위로" 이동할 때 첫 번째 디렉터리 mydir
로 정의되어 있다는 사실을 미리 알지 못합니다 (이 경로는 명시적으로 지정됩니다). /A-dir/B-dir/
이렇게 하면 다른 디렉토리 find
는 검색되지 mydir
않지만 다른 디렉토리는 검색되지 않습니다 B-dir
(그렇지 않으면 다음을 사용할 수 있습니다).
find /A-dir/B-dir/ -name … …
).
답변1
find "${PWD%"${PWD#/A-dir/B-dir/*/}"}" ...
$PWD
(다음의 첫 번째 디렉토리 구성 요소 /A-dir/B-dir
)
또는:
find "${PWD%"${PWD#/*/*/*/}"}" ...
(처음 3개의 디렉토리 구성요소)
또는:
find "${PWD%"${PWD#/*/B-dir/*/}"}" ...
B-dir
( 에 나타나는 가장 왼쪽 구성 요소 다음의 첫 번째 디렉터리 구성 요소입니다 $PWD
.)
를 사용하면 zsh
다음 작업도 수행할 수 있습니다.
find ${(M)PWD#/*/B-dir/*/}
답변2
다음과 같은 것이 당신이 찾고 있는 것일 수 있습니다.
#!/bin/bash
last="${PWD/*\/}"
while test / != "$PWD"
do
cd ..
this="${PWD/*\/}"
if test 'B-dir' = "$this"
then
find "$last" ...
break
fi
last="$this"
done
처음부터 시작하여 /A-dir/B-dir/mydir/... some directories .../x-dir
도달할 때까지 트리 위로 이동한다고 가정합니다 B-dir
. 이 시점에서는 find mydir...
이전 값에 대해 명령을 실행합니다.mydir
B-dir
PWD
스크립트가 실행되는 동안 현재 디렉터리( )가 업데이트됩니다. 디렉토리 경로 문자열을 묵시적으로 사용하는 것보다 디렉토리 경로 문자열을 조작하여 디렉토리 변경을 피하는 것은 어렵지 않지만 $PWD
저는 이 방법을 구현하기로 했습니다.