
Como obter a lista de todos os diretórios pais.
Suponha que eu esteja atualmente em
% pwd
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
Eu quero
0 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
1 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language
2 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/
3 /media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/
4 /media/blueray/WDPurple/_DataBackup/_Work/
5 /media/blueray/WDPurple/_DataBackup/
6 /media/blueray/WDPurple/
7 /media/blueray/
8 /media/
9 /
Na verdade, preciso canalizar essa saída para rofi -dmenu
que eu possa facilmente fazer o cd nos diretórios pai.
A solução atual que estou usando pushd
é
function d () {
select=$( dirs -v | head -10 | rofi -dmenu )
cd -${select:0:1}
}
Responder1
Use um loop, começando $PWD
e eliminando um nível de diretório por vez. Você só precisa ter cuidado ao terminar em /
. Conte também as linhas (ou canalize nl
). Aqui está uma função que funciona tanto no bash quanto no zsh.
function pwd_and_parents {
local d n
d=$PWD
n=0
while [[ $d = *[!/]* ]]; do
printf '%d %s\n' "$n" "$d"
d=${d%/*}
((++n))
done
echo "$n /"
}
Minha versão não coloca barras finais. Adicione-os se quiser.