Listet die gesamte übergeordnete Verzeichnishierarchie auf

Listet die gesamte übergeordnete Verzeichnishierarchie auf

So erhalten Sie die Liste aller übergeordneten Verzeichnisse.

Angenommen, ich befinde mich derzeit in

% pwd
/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC/linux/shell-command-language/zsh-scripting

Ich will

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 /

Ich muss diese Ausgabe tatsächlich weiterleiten, rofi -dmenudamit ich problemlos in die übergeordneten Verzeichnisse wechseln kann.

Die aktuelle Lösung, die ich verwende, pushdist

function d () {
  select=$( dirs -v | head -10 | rofi -dmenu ) 
  cd -${select:0:1}
}

Antwort1

Verwenden Sie eine Schleife, die bei beginnt $PWDund jeweils eine Verzeichnisebene entfernt. Sie müssen nur darauf achten, bei zu enden /. Zählen Sie auch die Zeilen (oder leiten Sie durch nl). Hier ist eine Funktion, die sowohl in Bash als auch in Zsh funktioniert.

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 /"
}

Meine Version verwendet keine abschließenden Schrägstriche. Fügen Sie sie bei Bedarf hinzu.

verwandte Informationen