Bir keresinde benzer bir amaç için find-n-cd için fcd işlevi olan kullanışlı bir script hazırladım .
Siz yazın fcd foo
ve 3 şey olabilir:
- Bu tür bir foo bulunamadı, sonra döndürür
"no such directory " $1
- Bir dosya bulundu: Bir dizin (veya sadece bir dosya) olup olmadığını test eder ve eğer öyleyse, orada cds.
- Birden fazla dosya bulunur - daha sonra sadece seçimin numarasını (veya geri dönüş için özel bir sayı) yazdığınız bir seçim sunulur.
Tüm yolu yazmanız gerekmediği için benzerdir, ancak işlevi açıkça çağırdınız.
#!/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
İşleve ( source fcd.sh
| . fcd.sh
) sahip olmalısınız ve onu komut dosyası olarak adlandıramazsınız, çünkü cd
yalnızca komut dosyası bağlamında gerçekleşir ve bitirdikten sonra sizi hemen başlangıçtaki dizinize geri alırsınız.
O ile çalışır bu yana locate
, bu dizinleri (ama her zaman güncel) bulmakta oldukça hızlı.
Dizin isimlerindeki boşlukları incelikle ele almaz. Sorun için zarif bir çözüm varsa ben mutlu olurum.
shopt -s autocd
, komut satırında yazdım . Şimdi sadece dizin adlarını yazmaya başlayabilirim ve otomatik tamamlama işlevini kullanabilirim ve sonra return tuşuna basarak kabuğuncd
dizine girebilirim. Çok havalı !