On GitHub, I started to love a nice feature I would like to have in my zsh as well. If I change to a directory that contains nothing but a single sub-directory, change to this sub-directory instead (recursive).
Therefore, when I am in a directory which contains the following sub-directories, I would like to skip all directories until there_is_a_file when I type cd dir_with_empty_subdirs:
dir_with_empty_subdirs(dir)until(dir)once(dir)there_is_a_file(dir)this_is_a_file.txt(file)
You can try out this feature on GitHub in my test repo: simply click on the directory dir_with_empty_subdirs and you really going to end up in the directory there_is_a_file.
In case I need to visit any (almost empty) directory within this cascade, I can do so by going back via "cd .." which does not skip empty directories, thus avoiding an endless loop and non-visitable directories.
Well, I was not able to come up with a solution on my own. Reddit-user seanliao96 did provide a perfectly working solution:
function chpwd() {
files=$(ls -A | wc -l)
if [[ $files = "1" ]]; then
zmodload zsh/parameter
if [[ "cd .." != $history[$HISTCMD] ]]; then
f=$(ls -A)
if [[ -d "$f" ]]; then
cd "$f"
fi
fi
fi
}
Simply paste this code in your zsh or add it to your ~/.zshrc.local and enjoy the higher usability in your shell.