列出所有父目錄層次結構

列出所有父目錄層次結構

如何取得所有父目錄的清單。

假設我目前在

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

我的版本沒有添加尾部斜線。如果需要的話可以添加它們。

相關內容