列出所有父目录层次结构

列出所有父目录层次结构

如何获取所有父目录的列表。

假设我目前在

% 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以便我可以轻松地 cd 进入父目录。

我当前使用的解决方案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 /"
}

我的版本没有添加尾部斜杠。如果需要的话可以添加它们。

相关内容