을 사용할 때 find
종종 다음과 같은 여러 결과를 찾습니다.
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
종종 특정 결과 만 선택하고 싶습니다 (예 :) edit ./projectB/pom.xml
. find
출력 을 열거 하고 다른 응용 프로그램으로 전달할 파일을 선택 하는 방법이 있습니까? 처럼:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[편집] 언급 된 솔루션 중 일부에서 독특한 버그에 부딪 쳤습니다. 따라서 재현 단계를 설명하고 싶습니다.
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
솔루션 1 지금까지 'nl'(enumirate output)의 조합으로 head & tail은 함수로 결합하고 $ (!!)를 사용하면 작동하는 것 같습니다.
즉 :
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[편집] 해결 방법 2 "select"를 사용하면 꽤 잘 작동하는 것 같습니다. 전의:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
fzf를 확인하면 이런 종류의 동작을 ^ T (기본적으로)에 바인딩합니다
—
Tavian Barnes
Your find command | head -TheNumberYouWant
사용자의 요구 사항을 충족? (당신의 라인 :!! | head -2 | xargs myEditor
)