Commande ls : affichage avec un nombre de colonnes donné

bonjour ,
j’ai besoin de sortir la liste de mon dossier Documents sur 3 colonnes dans un fichier texte en passant par une console en plein écran . Je rencontre 2 problèmes distincts :

  • une sortie dans un fichier .txt ne reflète pas ce que je vois dans la console ( cf ci-dessous )

  • je voudrais pouvoir ajuster le nombre de colonnes affichées avec l’option ls -w ou une autre plus adaptée .

Un test donne :

1- pb1 = ls Documents > D.txt = sortie en 4 colonnes dans la console mais en 1 seule colonne dans le fichier D.txt

2- pb2 = ls -w 3 Documents > D.txt = sortie sur 1 colonne dans la console
et 1 colonne dans D.txt . J’interroge le manuel qui m’indique que -w est une largeur :
-w, --width=COLONNES
définir la largeur de l’affichage à COLONNES.

mais de quelle largeur s’agit-il ?

Solutions provisoires :

  • pb1 = pas de sortie > D.txt mais C/C de l’écran de la console et je retrouve bien les 4 colonnes dans le fichier D.txt
  • pb2 = modification de la largeur de la console et j’arrive bien à avoir mes 3 colonnes

mais je pense qu’il doit exister des solutions plus directes , non ?

ps : -w = largeur de l’affichage et donc en supposant que -w est une fraction de la largeur totale (= ?) de la console et en fixant non pas 3 mais 300 ( par essais successifs ) j’arrive bien à 3 colonnes mais la présentation est désastreuse .

Bonjour

La valeur donnée à l’option width de la commande ls permet de spécifier le nombre maximum de caractères qui seront affichables dans une ligne de sortie de cette commande,

… ce qui permet d’imposer cette valeur sans tenir compte de la valeur de la variable d’environnement COLUMNS qui dépendrait de la largeur de la fenêtre de terminal utilisé (et de la taille de la police de caractère utilisée pour l’affichage).


Mais de toutes façons, si le flux de sortie de la commande ls est redirigé vers un fichier,
la commande ls ne tiendra pas compte de la valeur qui aurait été assignée à cette option ni d’ailleurs de la valeur de la variable COLUMNS
puisqu’il n’y aura pas d’affichage dans une fenêtre de terminal.

1 J'aime

Bonjour,

utilise pr:

sputnik@debian:~/test-dir$ ls
file10.txt  file11.txt  file12.txt  file13.txt  file14.txt  file15.txt  file16.txt  file17.txt  file1.txt  file2.txt  file3.txt  file4.txt  file5.txt  file6.txt  file7.txt  file8.txt  file9.txt
sputniks@debian:~/test-dir$ ls | pr -3t
file10.txt              file16.txt              file5.txt
file11.txt              file17.txt              file6.txt
file12.txt              file1.txt               file7.txt
file13.txt              file2.txt               file8.txt
file14.txt              file3.txt               file9.txt
file15.txt              file4.txt
2 J'aime

impeccable et en plus je peux sortir en fichier qui garde bien la bonne disposition en colonnes . Merci bien .

ps : j’avais entre-temps trouvé une solution en 2 étapes avec en dernier la commande column -c 180 D.txt où 180 est une valeur trouvée par essais successifs

j’ai attendu d’avoir le temps de pouvoir tenter de décrypter tout ça .

Pour moi $COLUMNS = 90 avec la largeur habituelle de ma console et passe à 190 en plein écran

En mode normal si je fixe w = 60 le nom d’un dossier ad hoc contenant 90 minuscules s’affiche sur toute une ligne ; idem si w=120 . Donc 1 caractère (=/) 1 minuscule , sans parler des majuscules ! ce qui fait que fixer la valeur de ce (-w) pour obtenir un résultat donné n’a pas l’air très évident .

Mais de toutes façons, si le flux de sortie de la commande ls est redirigé vers un fichier,
la commande ls ne tiendra pas compte de la valeur qui aurait été assignée à cette option

ok , je suppose que voilà la raison de la valeur unique du nombre de colonnes affichées (non modifiable ?) lors d’une sortie fichier .

merci pour ces explications qui ne me sont malheureusement pas encore pleinement accessibles .

le w (width) dont tu parles est une option de la commande pr

Que ce soit en majuscule ou en minuscule, la police de caractère utilisée dans la fenêtre de terminal est une police a chasse fixe <=> chacun des caractères occupe la même largeur.


Par défaut, la commande pr considère qu’il n’y aura pas plus de 72 caractères dans une ligne
ce qui fait que si tu veux faire afficher 3 colonnes, les noms de fichiers qui seront plus longs que 24 caractères seront tronqués <=> on ne verra pas la fin du nom du fichier.

Par exemple, avec les noms des fichiers suivants :

michel@deb114x:~$ ls Ca*
'Caché puis retrouvé.txt'   Cadenas.txt  'Capture d’écran_2022-08-06_06-38-00.png'  'Capture d’écran_2022-08-07_11-38-00.png'  'Capture d’écran_2022-08-07_19-37-25.png'
michel@deb114x:~$ 

Si je laisse le paramètre w à sa valeur par défaut,
les noms des fichiers affichés seront tronqués,
ça va donner :

michel@deb114x:~$ ls Ca* | pr -3t
Caché puis retrouvé.txt	Capture d’écran_2022-08-0 Capture d’écran_2022-08-0
Cadenas.txt		Capture d’écran_2022-08-0
michel@deb114x:~$ 

Il me faudra donc donner une valeur assez grande au paramètre w
si je ne veux que mes noms de fichier affichés ne soient pas tronqués :

michel@deb114x:~$ ls Ca* | pr -3t -w113
Caché puis retrouvé.txt		      Capture d’écran_2022-08-06_06-38-00.png Capture d’écran_2022-08-07_19-37-25.png
Cadenas.txt			      Capture d’écran_2022-08-07_11-38-00.png
michel@deb114x:~$ 

couplé avec la commande pr et la sortie en fichier ce fameux ‹ w › ( je n’avais pas pensé à l’utiliser avec pr ) que je fixe d’une manière purement empirique me permet d’avoir une présentation finale aux petits ognons qui peut être adaptée aux différentes longueurs des noms de fichiers .

sinon j’avais essayé du fait maison mais c’est un peu long comme commande et elle me sort un fichier intermédiaire inutile :
ls Documents > D.text && column - c (w) D.txt > D1.text qui, a priori , me donne un résultat similaire . La commande pr est quand même plus compacte et elle ne donne pas de fichier inutile . Donc je garde .