
Cómo obtener la lista de todos los directorios principales.
Supongamos que actualmente estoy en
% pwd
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting
Quiero
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 /
De hecho, necesito canalizar esta salida para rofi -dmenu
poder acceder fácilmente a los directorios principales.
La solución actual que estoy usando pushd
es
function d () {
select=$( dirs -v | head -10 | rofi -dmenu )
cd -${select:0:1}
}
Respuesta1
Utilice un bucle, comenzando $PWD
y eliminando un nivel de directorio a la vez. Sólo debes tener cuidado de no terminar en /
. También cuente las líneas (o tuberías nl
). Aquí hay una función que funciona tanto en bash como en 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 /"
}
Mi versión no pone barras al final. Agréguelos si lo desea.