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ça | Què fa |
|---|---|
ls /tmp | Llista els noms del directori /tmp. Quan la sortida va a una canonada i no al terminal, ls escriu un nom per línia |
| Barra vertical | Canonada (pipe): envia la sortida de ls a l’entrada de pr |
pr | Prepara text per imprimir: el pagina, hi posa capçaleres i el pot repartir en columnes |
-T | No pagina: sense capçaleres, peus ni salts de pàgina |
-5 | Reparteix el text en 5 columnes |
-W$COLUMNS | Amplada 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
- La comanda
ls. ls -lh: llista detallada amb mides llegibles.ls -lSr | more: llistar per mida, pàgina a pàgina.lessimore: veure sortides llargues pàgina a pàgina.- Les variables d’entorn a Linux.
Esta web usa cookies.