Este script usa tree
...
sudo apt-get install tree
Puede cambiar la profundidad de los directorios cambiando -L 1
y puede elegir si desea usar o no ~/
...
ACTUALIZACIÓN 2 :
.. modificó la secuencia de comandos para reemplazar sólo un líder / home / usuario / (no "cualquier")
.. y args añadido ..
ACTUALIZACIÓN Comprobación agregada: .. No agregue el directorio a PATH cuando ya está en PATH. Esta comprobación considera que '~ /' y '/ home / user /' son diferentes.
Re su pregunta 1 ... sí, es verdad; cada directorio específico se debe especializar individualmente en la RUTA.
Vuelve a tu pregunta 2 ... Aquí hay un script que hará lo que quieras ...
Lo he probado, pero tal como está, creará la nueva RUTA para la sesión actual ...
Para que sea permanente, puedes usar export PATH
(pero Soy un poco vago en los detalles de 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