すべての親ディレクトリのリストを取得する方法。
私が現在にいるとしましょう。
% 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
ループを使用して1つのディレクトリレベルから始め$PWD
、一度に1つのディレクトリレベルを削除します。エンディングだけに注意してください/
。また、行数を計算します(またはパイプで接続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 /"
}
私のバージョンは末尾のスラッシュを追加しません。必要に応じて追加できます。