find-n-cdの関数fcdを使用して、同様の目的で便利なスクリプトを作成したことがあります。
入力するfcd foo
と、次の3つのことが起こります。
- そのようなディレクトリfooが見つからない場合は、
"no such directory " $1
- 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
ディレクトリに挿入することができます。とてもクール !