Listar toda a hierarquia de diretórios pai

Listar toda a hierarquia de diretórios pai

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 -dmenuque 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 $PWDe 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.

informação relacionada