Nie używaj rozwiązania wiersza polecenia z innej odpowiedzi : jest to niebezpieczne¹ ORAZ nieefektywne. ² Zamiast tego, jeśli używasz bash
, skorzystaj z następujących funkcji. Aby były trwałe, włóż je do swojego .bashrc
. Pamiętaj, że używam globalnego porządku, ponieważ jest wbudowany i łatwy. Zazwyczaj jednak porządek globalny jest alfabetyczny w większości lokalizacji. Otrzymasz komunikat o błędzie, jeśli nie ma następnego lub poprzedniego katalogu, do którego można przejść. W szczególności, zobaczysz błąd, jeśli spróbujesz next
lub prev
gdy w katalogu głównym /
.
## bash and zsh only!
# functions to cd to the next or previous sibling directory, in glob order
prev () {
# default to current directory if no previous
local prevdir="./"
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No previous directory.' >&2
return 1
fi
for x in ../*/; do
if [[ ${x#../} == ${cwd}/ ]]; then
# found cwd
if [[ $prevdir == ./ ]]; then
echo 'No previous directory.' >&2
return 1
fi
cd "$prevdir"
return
fi
if [[ -d $x ]]; then
prevdir=$x
fi
done
# Should never get here.
echo 'Directory not changed.' >&2
return 1
}
next () {
local foundcwd=
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No next directory.' >&2
return 1
fi
for x in ../*/; do
if [[ -n $foundcwd ]]; then
if [[ -d $x ]]; then
cd "$x"
return
fi
elif [[ ${x#../} == ${cwd}/ ]]; then
foundcwd=1
fi
done
echo 'No next directory.' >&2
return 1
}
¹ Nie obsługuje wszystkich możliwych nazw katalogów. Przetwarzanie ls
danych wyjściowych nigdy nie jest bezpieczne .
² cd
prawdopodobnie nie musi być strasznie wydajne, ale 6 procesów jest nieco nadmiernych.
[[ -n $foundcwd ]]
wtedy twoja odpowiedź działa równie dobrze pod bash i zsh. Bardzo miło i dziękuję za napisanie tego.Poniższa funkcja pozwala na przejście do katalogów rodzeństwa (funkcja bash)
Przykład zastosowania:
źródło
Znalazłem przewrót na Commandlinefu.com . Ponownie umieszczam go tutaj, aby był łatwiejszy do znalezienia, wraz z wyjaśnieniem i
next
poleceniem dodanym, gdy jestem przy nim.Magia jest w bloku `$ (...). Potokuje kilka poleceń w następujący sposób:
źródło
"$foo"
,"$(foo)"
). Ponadto parsowanie danych wyjściowychls
jest niewiarygodne , może się nie powieść w przypadku nazw plików zawierających znaki niedrukowalne.