
如何取得所有父目錄的清單。
假設我目前在
% 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 /"
}
我的版本沒有添加尾部斜線。如果需要的話可以添加它們。