ls
imprime de manera diferente dependiendo de si la salida es a un terminal o a otra cosa.
p.ej:
$ ls .
file1 file2
$ ls . | head
file1
file2
¿Hay alguna forma de ls
imprimir en una línea como si fuera un terminal cuando no lo es? Hay un -C
argumento que dice que hace eso, pero lo dividirá en varias líneas.
$ ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file3 file4 file5 file6 file7 file8 file9
$ ls -C . | head
file1 file11 file13 file15 file17 file19 file3 file5 file7 file9
file10 file12 file14 file16 file18 file2 file4 file6 file8
La razón por la que quiero hacer esto es porque quiero monitorear los archivos en un directorio que estaban cambiando rápidamente. Había construido esta simple línea de comando:
while [[ true ]] ; do ls ; done | uniq
El uniq evita que envíe spam a mi terminal y solo muestre cambios. Sin embargo, estaba imprimiendo todo en diferentes líneas de red, lo que hacía que el uniq fuera inútil y aumentaba la cantidad de ruido. En teoría, se podría usar watch
para esto, pero quería ver un archivo tan pronto como apareció / desapareció.
Esta es la solución final:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq