Script ini menggunakan tree
...
sudo apt-get install tree
Anda dapat mengubah kedalaman direktori dengan mengubah -L 1
dan Anda dapat memilih ~/
...
UPDATE 2 :
.. memodifikasi skrip untuk mengganti hanya yang terdepan / home / user / (bukan "any")
.. dan menambahkan argumen ..
UPDATE Menambahkan cek: .. Jangan menambahkan direktori ke PATH ketika sudah di PATH .. Pemeriksaan ini menganggap '~ /' dan '/ home / user /' berbeda.
Jawab pertanyaan Anda 1 ... ya itu benar; setiap direktori spesifik harus ditentukan secara terpisah di PATH ..
Re pertanyaan Anda 2 ... Berikut ini adalah skrip yang akan melakukan apa yang Anda inginkan ..
Saya sudah mengujinya, tetapi seperti berdiri itu akan membuat PATH baru untuk sesi saat ini ..
Untuk membuatnya permanen Anda dapat menggunakan export PATH
(tetapi Saya agak kurang jelas tentang detail export
)
#
# name: path-add-dirs
# eg: $ path-add-dirs "$HOME/bin" "tilde" 1
# When directories are $HOME based, choose format.
# Add directories in tidle format: ~/...
# ...or as fullly-qualified: /home/user/...
# mode values: "tilde", or anything else for fully-qualified
mode="$2" # valid mode values: "tilde", or anything else
maindir="$1"; dirs= ; echo
# Buld string of subdirectories to a depth/level of 1
while IFS= read -r dir ; do
# Don't add directory if it is already in PATH
if [[ "$mode" == "tilde" ]] ; then
# replace only a *leading* :/home/user/
homecheck=":$dir"
dircheck="${homecheck/:$HOME\//:~/}"
dircheck="${dircheck#:}"
else
dircheck="${dir}"
fi;
pathcheck=":$PATH:"
if [[ "$pathcheck" != "${pathcheck/:$dircheck:/}" ]] ; then
echo "ALREADY IN PATH: $dircheck"
else
dirs="$dirs:$dir"
echo " added: $dircheck"
fi
done < <(tree --noreport -L $3 -fi -d "$maindir")
# Choose one of these two options
if [[ "$mode" == "tilde" ]]
then PATH="$PATH${dirs//:$HOME\//:~/}" # change :$HOME to :~/
else PATH="$PATH$dirs" # this method has fully expanded $HOME
fi
echo
echo "$PATH"
echo