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
No, no es posible de una manera fácil. ¿Sería posible agregar enlaces suaves a todos los ejecutables a "~ / my_program / bin"?
fuente
Pruébalo de esta manera:
Esto se agregará
~/.local/bin
junto con todos sus subdirectorios en$PATH
.Explicación:
du
mostrará toda la información de subdirectorios en cada líneacut -f2
extraerá la segunda columna, es decir, los nombres de los subdirectoriostr '\n' ':'
cambiará cada salto de enlace en dos puntos. Esto unirá todas las líneas en una sola línea y los subdirectorios están delimitados por dos puntossed 's/:*$//'
eliminará el último colonfuente