如何获取所有父目录的列表。
假设我目前在
% 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 /"
}
我的版本没有添加尾部斜杠。如果需要的话可以添加它们。