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
Respuestas:
No conozco un interruptor que pueda hacer eso, pero puedes canalizar tu salida
tr
para hacerlo:fuente
A mí me funciona, es la forma más sencilla que he encontrado. Espero que esto también te ayude.
fuente
Si
ls
tiene esta opción, puede usar un valor alto y puede hacer lo que quiera:fuente
ah, ahora que has actualizado la pregunta ...
hará lo que publicaste, simplemente más simple.
sin embargo, es mejor usar algo que use inotify para hacer esto ... como
si no tiene inotify, entonces algo como esto también funciona bien:
fuente
¿Qué pasa con lo bastante trivial?
? :-) Ni siquiera necesitas bifurcarlo. :-)
fuente
Esto puede ser lo que está buscando, pero es posible que haya entendido mal su pregunta, pero aquí va :)
Algunos comandos que vale la pena considerar:
watch - ejecuta un programa periódicamente, mostrando xargs de pantalla completa de salida - construye y ejecuta líneas de comando desde la entrada estándar (-0 si quieres manejar archivos con espacios, etc.)
Puede hacer algo como lo siguiente para mostrar los últimos 10 archivos / directorios que cambiaron con un intervalo de 2 segundos (predeterminado para ver)
las opciones -lart le dicen a ls que sea detallado y que se clasifique según el tiempo de modificación.
Si realmente solo quieres los archivos, simplemente haría algo como:
o simplemente para mostrarlos:
fuente
Puede usar ticks en el shell para lograr esto como:
fuente
touch ./-en
[a-d]
ese tipo antes. Si lo está ejecutando en un scriptecho -E
, no sería demasiado inconveniente y la nueva línea final puede no importar.Esto funcionó para mí porque no solo necesitaba imprimir el resultado en una línea, sino que también necesitaba especificar cómo debía separarse y puede especificarlo con ORS
fuente