すべての親ディレクトリ階層のリスト

すべての親ディレクトリ階層のリスト

すべての親ディレクトリのリストを取得する方法。

私が現在にいるとしましょう。

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

私のバージョンは末尾のスラッシュを追加しません。必要に応じて追加できます。

関連情報