¿Cómo ordenar la salida de `ls`?

14

¿Es posible ver esta salida ordenada con titlepage_1.pdf antes de titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf
alhelal
fuente
3
El título debería ser más específico, ya que parece un duplicado (que podría ser de todos modos).
Peter Mortensen

Respuestas:

31

Utilice el modificador -v [tipo natural de (versión) números dentro del texto]

ls -v
Vijay
fuente
Si desea una sola columna, use ls -1v
Vijay
13

La salida está ordenada. Según la página del lsmanual:

Ordene las entradas alfabéticamente si no se especifica ninguno de -cftuvSUX ni --sort.

Pero si quieres ir más allá, tienes al menos dos opciones:

Opción 1 - lsordenar interruptores

man lsle informa sobre una cantidad de interruptores que puede usar para ordenar, específicamente, la página de manual de ls dice:

ninguno (-U), tamaño (-S), tiempo (-t), versión (-v), extensión (-X)

En su caso, desea ordenar por "versión" (-v). Sin embargo, tenga cuidado, ya que esto también clasificará todo lo que tenga un blahblah-X.Y.Z-Aarreglo que puede no ser del todo lo que desea. Ver también la explicación de GNU sobre el ordenamiento de versiones .

Opción 2 - Tuberías para ordenar comandos

Podría usar una tubería |para enviar la salida a otro comando, por ejemplo, el comando sort que podría usar para ordenar de varias otras maneras, ya ls -1 | sort -nque es útil si tiene archivos numerados. El -1conmutador asegura que la salida sea de una línea por archivo.

Igualmente, puede manipular la salida para ayudar con la clasificación mediante el uso de cosas como sedo awk.

Hay muchas maneras de responder a este tipo de * pregunta. Puede encontrar útil un tutorial de shell de Linux.

* (¿Ves lo que hice allí? :-P)

tu-Reinstate Monica-dor duh
fuente
6

Como ya se señaló en un comentario, la salida ya está ordenada, pero por caracteres, no por números. Es posible que desee canalizar la salida de lsthrough sortque tiene un interruptor para ordenar por números dentro de las cadenas:

ls | sort --version-sort

Desde la página del manual :

-V, --version-sort
         natural sort of (version) numbers within text

Desventaja: cuando emitimos ls, genera los archivos en una tabla con tantas columnas como caben en la pantalla actual (tal como lo mostró en su publicación). Pero cuando se lsda cuenta de que su salida se redirige a un archivo o una tubería (como en ls | sort), lsimprime los archivos en una sola columna porque asume que la salida se procesará línea por línea (también conocido como archivo por archivo) por algún otro programa (como sort). Por lo tanto, la salida de ls | sort -Vestará en una columna en lugar de en una tabla con varias columnas. Vea la respuesta simple pero perfecta de @vijay sobre cómo evitar eso.

PerlDuck
fuente
1
También podría canalizar la salida acolumn
David Conrad
0

ls -l : enumera los archivos del directorio verticalmente pero no en un orden particular.

ls -l | sort -k 3: -k 3ordenaría la salida del comando anterior por la 3ra columna.

AB01
fuente