find-n-cd를위한 fcd 함수를 사용하여 비슷한 목적으로 유용한 스크립트를 만들었습니다 .
입력하면 fcd foo
3 가지 일이 발생할 수 있습니다.
- 그러한 디렉토리 foo가 없으면 다음과 같이 반환됩니다.
"no such directory " $1
- 하나의 파일이 발견되었습니다. 디렉토리인지 파일인지 테스트하고, 그렇다면 파일을 CD로 보냅니다.
- 여러 파일이 발견되면 선택 번호가 표시됩니다. 선택 항목의 번호 (또는 반환 할 특수 번호) 만 입력하면됩니다.
전체 경로를 입력 할 필요는 없지만 함수를 명시 적으로 호출한다는 점에서 비슷합니다.
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd ()
{
list=$(locate $1 | egrep "/$1$")
count=$(echo $list | wc -w )
case $count in
0)
echo "unknown directory: "$1 && return
# could search for partial matches Doc => Documentation
;;
1)
if [[ -d "$list" ]]; then
echo "$list";
cd "$list";
else
echo "not a directory: $1"
fi
;;
*)
select directory in $list "/exit/"
do
if [[ "$directory" = "/exit/" ]]; then break; fi
if [[ -d "$directory" ]]; then
echo "$directory";
cd "$directory";
break
else
echo "not a directory: "$1
fi
done
;;
esac
}
당신은에있는 source
(기능 source fcd.sh
| . fcd.sh
)하고 있기 때문에, 스크립트로 호출 할 수 없습니다 cd
다른 단지 스크립트의 맥락에서 일어날 것, 그리고 마무리 후 즉시 다시 시작 디렉토리에 될 일이있다.
와 함께 작동하기 때문에 locate
디렉토리를 찾는 것이 매우 빠릅니다 (그러나 항상 최신 것은 아닙니다).
디렉토리 이름의 공백을 정상적으로 처리하지 않습니다. 문제에 대한 우아한 해결책이 있다면 기쁠 것입니다.
shopt -s autocd
, 명령 줄에 입력 했습니다. 이제 디렉토리 이름 입력을 시작하고 자동 완성을 사용한 다음 return 키를 누르고 셸을cd
디렉토리에 넣을 수 있습니다. 너무 멋져요!