ls amb pr -T5: llistar fitxers en columnes | Iespai

ls /tmp | pr -T5 -W$COLUMNS a Linux: llistar fitxers en columnes



La línia ls /tmp | pr -T5 -W$COLUMNS mostra el contingut del directori /tmp repartit en cinc columnes i ajustat a l’amplada del terminal. És un truc clàssic per veure llistes llargues de noms d’un sol cop d’ull. Aquí t’explico què fa cada peça (l’article original interpretava malament l’opció -T5) i quines alternatives més senzilles tens avui.

Les peces, una per una

ls /tmp | pr -T5 -W$COLUMNS
PeçaQuè fa
ls /tmpLlista els noms del directori /tmp. Quan la sortida va a una canonada i no al terminal, ls escriu un nom per línia
Barra verticalCanonada (pipe): envia la sortida de ls a l’entrada de pr
prPrepara text per imprimir: el pagina, hi posa capçaleres i el pot repartir en columnes
-TNo pagina: sense capçaleres, peus ni salts de pàgina
-5Reparteix el text en 5 columnes
-W$COLUMNSAmplada total de la pàgina: la de la finestra del terminal

L’original deia que -T5 vol dir «tabulacions cada 5 espais». No és així: són dues opcions enganxades, -T i -5. Equival a escriure pr -T -5 -W$COLUMNS. Les opcions per a les tabulacions de pr són unes altres (-e i -i).

$COLUMNS és una variable que el shell Bash manté amb l’amplada actual del terminal, en caràcters.

Exemple

Amb un directori com aquest i un terminal de 80 columnes:

$ ls | pr -T5 -W80
copia.tar.gz factura-002.pdf foto3.jpg llegeix-me.md projecte
dades.csv foto1.jpg fotos  notes.txt script.sh
factura-001.pdf foto2.jpg informe.txt pressupost.ods un-nom-de-fitxe

Fixa’t que l’ordre va de dalt a baix i després a la columna següent, com a l’índex d’un llibre. Per ordenar-los d’esquerra a dreta, afegeix -a (across):

$ ls | pr -T -a -5 -W80
copia.tar.gz dades.csv factura-001.pdf factura-002.pdf foto1.jpg
foto2.jpg foto3.jpg fotos  informe.txt llegeix-me.md
notes.txt pressupost.ods projecte script.sh un-nom-de-fitxe

Compte amb…

Els noms llargs es tallen. pr divideix l’amplada entre el nombre de columnes, i el que no hi cap ho talla sense avisar. Als exemples anteriors, un-nom-de-fitxer-molt-llarg-de-veritat.txt ha quedat com a un-nom-de-fitxe. Amb un terminal més estret és encara pitjor:

$ ls | pr -T5 -W60
copia.tar.g factura-002 foto3.jpg   llegeix-me. projecte
dades.csv   foto1.jpg fotos     notes.txt script.sh
factura-001 foto2.jpg informe.txt pressupost. un-nom-de-f

$COLUMNS pot estar buida. Bash només la defineix en sessions interactives. Dins d’un script (o des de cron) està buida, i la comanda falla:

pr: option requires an argument -- 'W'

Per evitar-ho, dona-li un valor per defecte: pr -T5 -W${COLUMNS:-80}, o fes servir $(tput cols).

Alternatives més senzilles

El mateix ls ja fa columnes, i calcula quantes en caben sense tallar cap nom:

$ ls -C /tmp

Quan escrius ls al terminal ja ho fa per defecte; -C serveix per forçar-ho quan la sortida va a una canonada (per exemple, ls -C /tmp | less). Amb -w pots fixar l’amplada (ls -C -w 120) i amb -x ordenar d’esquerra a dreta.

Per posar en columnes la sortida de qualsevol altra comanda, column (a Debian i Ubuntu, del paquet bsdextrautils) també respecta els noms sencers:

$ ls /tmp | column

pr continua sent útil per al que va ser pensat: preparar fitxers de text per imprimir, amb capçaleres, numeració de línies (-n) i pàgines.

Comandes relacionades

Esta web usa cookies.