-
BASH > lister des fichiers et des dossiers
AVEC LA COMMANDE ls
ls [options] [fichier...]
Options
-1Présenter un fichier par ligne.-aAffiche tous les fichiers, y compris ceux commençant par un.-bPrésenter les caractères non-affichables des noms de fichiers en utilisant des séquences alphabétiques ou octales commençant par un backslash\comme en C.-c,--time=ctime,--time=statusTrier le contenu des répertoires en fonction des dates de changement des statuts de fichiers, plutôt qu’en fonction de la date de modification. S’il s’agit d’un format long, afficher la date de changement de statut plutôt que la date de modification du fichier.-dAfficher les répertoires avec la même présentation que les fichiers, sans lister leur contenu.-fNe pas trier le contenu des répertoires, l’afficher dans l’ordre où il se présente sur le disque.--full-timeAfficher les dates et heures complètes, sans les abréger.-iAfficher le numéro d’index (i-noeud) de chaque fichier à gauche de son nom.-kSi la taille des fichiers est affichée, la mesurer en kilo-octets. Ceci a priorité sur la variable d’environnement POSIXLY_CORRECT.-lEn plus du nom, afficher le type du fichier, les permissions d’accès, le nombre de liens physiques, le nom du propriétaire et du groupe, la taille en octets, et l’horodatage (de la dernière modification, sauf si une autre date est réclamée).-mAfficher sur chaque ligne autant de fichiers que possible, séparés par des virgules.-nAfficher les UID et GID numériques plutôt que les noms.-oProduire un listing de répertoire sous forme longue mais sans les informations de groupe. Equivalent à --format=long --no-group.-pAjouter un caractère à chaque nom de fichier pour indiquer son type.-q, --hide-control-chars Afficher des points d’interrogation à la place des caractères non-imprimables dans les noms de fichiers.-rInverser le tri du contenu des répertoires.-sAfficher la taille de chaque fichier, mesurée en bloc de 1 Ko, à gauche du nom.-t, --sort=time Trier le contenu des répertoires en fonction de la date et non pas en ordre alphabétique. Les fichiers les plus récents sont présentés en premier.-u, --time=atime, --time=access, --time=use Trier le contenu des répertoires en fonction de la date de dernier accès au fichier plutôt que selon la date de modification. Si le format d’affichage est large, c’est la date de dernier accès qui est affichée.-xPrésenter les fichiers en colonnes, triés horizontalement.-AAffiche tous les fichiers sauf `.‘ et `..‘.-B,Ne pas afficher les fichiers se terminant par `~’, à moins qu’ils ne soient mentionnés sur la ligne de commande.-F,Ajouter un caractère à chaque nom de fichier pour indiquer son type. les fichiers réguliers exécutables sont suivis d’un `*’. Les répertoires sont suivis de `/’, les liens symboliques d’un `@’, les FIFOs d’un `|’. Les fichiers réguliers non-exécutables ne sont suivis d’aucun caractère.-GNe pas afficher les informations de groupe dans le format large.-INe pas afficher les fichiers dont le nom correspond au motif.ls -Itoto.{jpg,gif,png-LAfficher les informations concernant les fichiers pointés par les liens symboliques et non pas celles concernant les liens eux-mêmes.-NAfficher les noms de fichiers sans modification.-RAfficher récursivement le contenu des sous-répertoires.-STrier les répertoires en fonction de la taille de fichier et non pas en ordre alphabétique. Les fichiers les plus gros sont affichés en premier.-TSupposer que les tabulations sont espacées de cols colonnes. La valeur par défaut est 8.-U,--sort=none Ne pas trier le contenu des répertoires. Les présenter dans l’ordre des fichiers sur le disque. Cette option n’est pas groupée avec -f car le ls d’Unix possède une option -f incluant également -a et supprimant -l, -s, et -t. Il semble inutile et horrible de regrouper toutes ces fonctionnalités sans lien entre elles en une seule option.-X,--sort=extension Trier le contenu des répertoires en fonction de l’extension du nom de fichier (les caractères après le dernier `.’). Les fichiers sans extension sont affichés en premier.--full-timeAfficher les temps de manière complète, sans utiliser les heuristiques habituelles d’abréviation. Le format est celui par défaut de date(1). On ne peut pas le modifier, mais on peut au besoin l’extraire avec cut(1) et de passer le résultat à `date -d’.Ceci est surtout utile car l’affichage contient les secondes (les systèmes de fichiers Unix utilisent
un horodatage à la seconde la plus proche, aussi vous disposez ici de toutes les informations exis
tantes). Par exemple cela peut servir à corriger un Makefile qui ne régénère pas correctement les
fichiers.Exclure des fichiers
Ne pas afficher les fichiers
toto.*ls | grep -v "toto\."
NB : il faut échapper le
.par\Fichiers commençant par un underscore ( _ ) en début de liste
ls -df _* [!_]* --color-dpermet de ne pas afficher le contenu des répertoires-fpermet de ne pas trier les fichiers (puisqu’ils le seront après)_*on trie les fichiers commençant par _[!_]*on trie tous les fichiers ne commençant pas par _--colorpour conserver les colorisation des fichiersPersonnalisation du code couleur
dircolors -p > ~/.ls_couleur
éditez le fichier ~/.bashrc et ajoutez la ligne :
export LS_COLORS="/home/user/.ls_couleur"
Vous êtes prêt à modifier le fichier :
~/.ls_couleursignification des termes
NORMAL : il ne s’agit pas d’un type mais de la valeur par défaut
FILE : fichier normal
DIR : répertoire
LINK : lien symbolique
FIFO : tuyaux
SOCK : socket
BLK : fichier périphérique en mode bloque
CHR : fichier périphérique en mode caractères
ORPHAN : lien symbolique orphelin (pointant vers un fichier inexistant)
EXEC : fichier possédant une permission d’exécution
Exemples
la ligne DIR signifie que le dossier est de couleur bleu et gras.
DIR 01;34 # directory
Dès que vous avez modifié vos paramètres, ouvrez le terminal et tapez la commande :
eval `dircolors /home/utilisateur/.ls_couleur`
Bien sûr, pour prendre en compte ces choix à chaque démarrage, cette ligne devra être incluse dans votre fichier.
~/.bashrc
Pour tous les utilisateurs, dossiere /etc/ :dircolors -p > /etc/ls_couleur
ajouter dans le fichier /etc/profile :
export LS_COLORS="/etc/ls_couleur" eval `dircolors /etc/ls_couleur`
et mettre à jour le profile.
source /etc/profile
si aucun message d’erreur ne s’affiche c’est que tout c’est bien déroulé.
EXEMPLES
Commence par a et dont la deuxième lettre est s ou m :
ls a[sm]*
Contient toto et se termine par m :ls *toto*m
Contient foo ou bar :ls *(foo|bar)*
Est constitué de trois lettres exactement :ls ???
Commence et finit par un chiffre :ls [0-9]*[0-9]—
avec ls
ls -R /chemin | awk '/:$/&&f{s=$0;f=0}/:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }' /chemin/fichier1 /chemin/fichier2 /chemin/dossierA /chemin/dossierA/fichier /chemin/dossierB /chemin/dossierB/fichier1 /chemin/dossierB/fichier2 /chemin/dossierB/fichier3 /chemin/dossierC /chemin/dossierC/fichier1
ls --sort=extension
Using no external commands other than ls:
ls -R1 /path |while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
You can’t
sudo lswith a*( * is expanded as the normal user).I just used this and got a beautiful output:
ls -lR /path
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
If you want it with spaces, then this:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
To add Hassou’s solution to your .bashrc, try:
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"
Beware of the newline character at the end of the first line if copying this directly
Here is a partial answer that shows the directory names.
ls -mR * | sed -n 's/://p'
ls -mR *lists the full directory names ending in a ‘:‘, then lists the files in that directory separatelysed -n ‘s/://p’finds lines that end in a colon, strip off the colon and print the lineBy iterating over the list of directories, we should be able to find the directories as well. Still workin on it. It is a challenge to get the wildcards through xargs.
$ ls /home/moi/ foo.txt bar.txt stackoverflow stackoverflow/alpha.txt stackoverflow/bravo.txt stackoverflow/charlie.txt
avec une étoile à la fin, l’affichage sera du genre :
$ ls /home/moi/* /home/moi/. /home/moi/foo.txt /home/moi/bar.txt /home/moi/stackoverflow: alpha.txt bravo.txt charlie.txt
Unfortunately this does not print the full path for directories recursed into, so it may not be the full solution you’re looking for.
avec tree
In order to use the files but not the links, you have to remove > from your output:tree -fi |grep -v \>
If you want to know the nature of each file, (only ASCII files for example) :
tree -fi | grep -v \> | while read first ; do file ${first} done | while read second; do echo ${second} | grep ASCII done
ce qui donnera :
tree -d /proc/self/ /proc/self/ |-- attr |-- cwd -> /proc |-- fd | `-- 3 -> /proc/15589/fd |-- fdinfo |-- net | |-- rpc | | |-- nfsd.export | | `-- nfsd.fh | `-- stat |-- root -> / `-- task `-- 15589 |-- attr |-- fd | `-- 3 -> /proc/15589/task/15589/fd |-- fdinfo `-- root -> / 17 directories
You can add the option
-L NUMwhere NUM is replaced by a number, to specify the max recursivity level.Remove -d to display also files.
n’afficher que les dossiers
ls -d */*/
—