Ce script utilise tree
...
sudo apt-get install tree
Vous pouvez changer la profondeur des répertoires en changeant -L 1
et vous pouvez choisir d'utiliser ou non ~/
...
MISE À JOUR 2 :
.. a modifié le script pour remplacer uniquement un début / home / utilisateur / (pas "tout")
.. et a ajouté des arguments ..
MISE À JOUR Ajout de vérification: .. N'ajoutez pas de répertoire à PATH quand il est déjà dans PATH .. Cette vérification considère que '~ /' et '/ home / user /' sont différents.
Re votre question 1 ... oui c'est vrai; chaque répertoire spécifique doit être spécifié individuellement dans le CHEMIN.
Re votre question 2 ... Voici un script qui fera ce que vous voulez ..
Je l'ai testé, mais en l'état, il fera le nouveau PATH pour la session en cours ..
Pour le rendre permanent, vous pouvez utiliser export PATH
(mais Je suis un peu sommaire sur les détails 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
Non, ce n'est pas possible de manière simple. Serait-il possible d'ajouter des liens logiciels à tous les exécutables dans "~ / mon_programme / bin"?
la source
Essayez-le de cette façon:
Cela s'ajoutera
~/.local/bin
avec tous ses sous-répertoires dans$PATH
.Explication:
du
affichera toutes les informations des sous-répertoires de chaque lignecut -f2
extraira la deuxième colonne, c'est-à-dire les noms des sous-répertoirestr '\n' ':'
changera chaque rupture de lien en deux points. Cela réunira toutes les lignes en une seule ligne et les sous-répertoires sont délimités par deux pointssed 's/:*$//'
supprimera le dernier colonla source