Список всех иерархий родительских каталогов

Список всех иерархий родительских каталогов

Как получить список всех родительских каталогов.

Предположим, что я сейчас нахожусь в

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

Я хочу

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 /

На самом деле мне нужно направить этот вывод, rofi -dmenuчтобы я мог легко перейти в родительские каталоги.

Текущее решение, которое я использую, pushdэто

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

решение1

Используйте цикл, начиная с $PWDи удаляя один уровень каталога за раз. Вам просто нужно быть осторожным, чтобы не закончить на /. Также посчитайте строки (или пропустите через nl). Вот функция, которая работает как в bash, так и в 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 /"
}

В моей версии не ставятся конечные слеши. Добавьте их, если хотите.

Связанный контент