• BASH > lister des fichiers et des dossiers

      AVEC LA COMMANDE ls

      ls [options] [fichier...]

      Options

      -1 Présenter un fichier par ligne.

      -a Affiche tous les fichiers, y com­pris ceux commençant par un .

      -b Présenter les caractères non-affichables des noms de fichiers en utilisant des séquences alphabétiques ou octales commençant par un back­slash \ comme en C.

      -c, --time=ctime, --time=status Trier 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 modifi­cation du fichier.

      -d Afficher les répertoires avec la même présentation que les fichiers, sans lister leur contenu.

      -f Ne pas trier le contenu des répertoires, l’afficher dans l’ordre où il se présente sur le disque.

      --full-time Afficher les dates et heures complètes, sans les abréger.

      -i Afficher le numéro d’index (i-noeud) de chaque fichier à gauche de son nom.

      -k Si la taille des fichiers est affichée, la mesurer en kilo-octets. Ceci a priorité sur la variable d’environnement POSIXLY_CORRECT.

      -l En 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 modifica­tion, sauf si une autre date est réclamée).

      -m Afficher sur chaque ligne autant de fichiers que possible, séparés par des virgules.

      -n Afficher les UID et GID numériques plutôt que les noms.

      -o Produire un listing de répertoire sous forme longue mais sans les informations de groupe. Equiva­lent à --format=long --no-group.

      -p Ajouter 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.

      -r Inverser le tri du contenu des répertoires.

      -s Afficher 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.

      -x Présenter les fichiers en colonnes, triés horizon­talement.

      -A Affiche 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écuta­bles 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.

      -G Ne pas afficher les informations de groupe dans le format large.

      -I Ne pas afficher les fichiers dont le nom correspond au motif. ls -Itoto.{jpg,gif,png

      -L Afficher les informations concernant les fichiers pointés par les liens symboliques et non pas celles concernant les liens eux-mêmes.

      -N Afficher les noms de fichiers sans modification.

      -R Afficher récursivement le contenu des sous-réper­toires.

      -S Trier 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.

      -T Supposer 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-time Afficher les temps de manière complète, sans utiliser les heuristiques habituelles d’abrévia­tion. 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

       

      -d permet de ne pas afficher le contenu des répertoires

      -f permet 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 _

      --color pour conserver les colorisation des fichiers

      Personnalisation 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_couleur

       

      signification 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 ls with 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 separately

      sed -n ‘s/://p’ finds lines that end in a colon, strip off the colon and print the line

       

      By 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 NUM where 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 */*/

       

 

Aucun commentaire

 

Laissez un commentaire