Ceci est mon premier message, donc il ne sera peut-être pas possible d'y accéder, mais merci. N'hésitez pas à commenter s'il y a des points étranges ou des améliorations.
Cet article présente une commande (script) qui affiche le chemin complet (chemin absolu) d'un fichier dans un répertoire en utilisant Bash dans un environnement Linux général (en supposant ici un système Debian).
Je l'ai fait parce que j'avais besoin du chemin complet du fichier lors du téléchargement du fichier dans la console Google Compute Engine (GCE).
Dans lf, les mêmes fichiers que ceux affichés par "ls" sont affichés dans le même ordre avec le chemin complet. lfa affiche les mêmes fichiers que ceux affichés par "ls -a" dans le même ordre avec le chemin complet. Autrement dit, le fichier de points est également affiché. Dans lft, les mêmes fichiers que ceux affichés par "ls -t" sont affichés dans le même ordre avec le chemin complet. Autrement dit, les heures de mise à jour sont affichées dans l'ordre chronologique.
Vous permet de spécifier plusieurs noms de fichier (chemins de fichier) et noms de répertoire (chemins de répertoire) dans les arguments de commande en entrée. Peu importe qu'il s'agisse d'un chemin relatif ou d'un chemin absolu. Si le répertoire n'est pas inclus, il est supposé être dans le répertoire courant. Il ne recherche pas à partir de la variable PATH, etc. Le glob n'est pas contrôlé par le côté commande.
Il traite dans l'ordre du nom du fichier d'entrée et du nom du répertoire, et s'il s'agit d'un répertoire, affiche le chemin complet de tous les fichiers de ce répertoire vers la sortie standard. S'il ne s'agit pas d'un répertoire, imprimez le chemin complet du fichier vers la sortie standard.
Si le chemin spécifié dans l'argument n'existe pas, une erreur est générée.
L'implémentation a été écrite à la fin de ~ / .bashrc. Si vous ne pouvez pas utiliser readlink, utilisez la ligne suivante dans les commentaires. Je ne pense pas que "--color = auto" soit nécessaire, vous pouvez donc le supprimer.
~/.bashrc
function _lsfp ()
{
local dir file;
if [[ -d $1 ]]; then
dir=$(cd "$1";pwd);
ls --color=auto -1 $2 "$1" | while read file; do
echo "$dir/$file";
done;
elif [[ -e $1 ]]; then
readlink -f "$1"
# echo "$(cd $(dirname "$1");pwd)/${1##*/}";
else
echo "'$1' is not found." >&2;
fi
}
function lsfp ()
{
local arg;
[[ $# -eq 0 ]] && _lsfp "$(pwd)" || for arg in "$@";
do
_lsfp "$arg";
done
}
function lsfpa ()
{
local arg;
[[ $# -eq 0 ]] && _lsfp "$(pwd)" -a || for arg in "$@";
do
_lsfp "$arg" -a;
done
}
function lsfpt ()
{
local arg;
[[ $# -eq 0 ]] && _lsfp "$(pwd)" -t || for arg in "$@";
do
_lsfp "$arg" -t;
done
}
alias lf='lsfp'
alias lfa='lsfpa'
alias lft='lsfpt'
$ cd ~/
$ source ./.bashrc
$ lf
$ lfa
$ lft
$ lf ~/
Bash est très pratique. Je vais l'utiliser de différentes manières à partir de maintenant. Merci d'avoir lu jusqu'au bout.
J'ai également ajouté des lfs qui sont raccourcis et affichés par ordre de taille (ordre le plus grand). Le nom de la fonction, etc. a changé.
~/.bashrc
function __lsfp ()
{
local dir file;
if [[ -d $1 ]]; then
[[ $rl ]] && dir=$(readlink -f "$1") || dir=$(cd "$1";pwd);
ls --color=auto -1 $2 "$1" | while read ent; do
echo "$dir/$ent";
done;
elif [[ -e $1 ]]; then
[[ $rl ]] && readlink -f "$1" || echo "$(cd $(dirname "$1");pwd)/${1##*/}";
else
echo "'$1' is not found." >&2;
fi
}
function _lsfp ()
{
local opt arg rl;
which readlink >/dev/null 2>&1 && rl=1
[[ $1 =~ ^-[A-Za-z\-]$ ]] && { opt=$1; shift; }
[[ $# -eq 0 ]] && __lsfp "$(pwd)" $opt || for arg in "$@";
do
__lsfp "$arg" $opt;
done
}
alias lf='_lsfp --'
alias lfa='_lsfp -a'
alias lft='_lsfp -t'
alias lfs='_lsfp -S' #Par taille
Recommended Posts