Linux ls para mostrar solo la fecha y el tamaño del nombre de archivo


72

¿Cómo puedo usar lsen Linux para obtener una lista de nombres de archivos de fecha y tamaño solamente? No necesito ver la otra información, como el propietario o el permiso. es posible?


1
lses genial porque tiene una clasificación muy rápida por fecha y hora, pero el formato es difícil de manejar. Sugiero usar un token en --time-style, como --time-style='+&%Y%m%d+%H%M%S.%N'donde el token es '&', y usarlo como referencia puede analizar aún más la salida sedpara que también pueda retroceder, ¡justo antes de que el token tenga el tamaño! Si alguien quiere publicar eso como una respuesta completa, siéntase libre de hacerlo, estoy demasiado dormido en este momento :)
Aquarius Power

Respuestas:


98

¿Por qué no usar en statlugar de ls?

stat -c "%y %s %n" *

1
Esto es bueno, pero potencialmente tiene el problema de "entorno demasiado grande" / "lista de argumentos demasiado larga".
Mat

44
:-) Solo una prueba de concepto. En la vida real [tm] esto será unfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

55
Para formatear la salida de stat, puede agregar información de ancho a la cadena de formato como la función C printf, por ejemplo "%y %8s %n", no está documentada, pero parece funcionar (coreutils 8.17, Fedora 18)
LiuYan 刘 研

Porque con lspuedo emitirlo con un mil separador de caracteres. ¿Cómo funciona stat?
Al Bundy

¡¿No veo cómo esto responde la pregunta ?! Es una buena solución fuera de la caja, pero perdería todos los beneficios ls. ¿Qué pasa con los colores?
MS Berends

30

Puede obtener mucho control sobre cómo enumera los archivos con la findutilidad. lsrealmente no te permite especificar las columnas que deseas.

Por ejemplo:

$ find . -maxdepth 1 -printf '%CY%Cm%Cd.%CH%CM\t%s\t%f\n'
20111007.0601   4096    .
20111007.0601   2   b
20111001.1322   4096    a

El argumento de la printfacción se detalla en la página de manual. Puede elegir información de tiempo diferente, qué tamaño desea (tamaño de archivo o bloques de disco utilizados), etc. También puede hacer esto seguro para nombres de archivo inusuales si se necesita un procesamiento adicional.


1
La entrada anterior para buscar ('% CY% Cm% Cd.% C ...') es larga. Al menos GNU find tiene %C+(salida "2016-08-29 + 10: 57: 56.9201257840") y %Cc(salida "Mo 29 Aug 2016 10:57:56 CEST")
guettli

Ojalá esto funcionara en Mac.
Jerinaw

encantador, y si desea imprimir solo la ruta y el tamaño completos, esto debería funcionar "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto

24

Siempre puede usar otra utilidad como awkformatear la salida de ls1 :

/bin/ls -ls | awk '{print $7,$8,$9}'


1.Sí, en general, no debe analizar la salida de ls, pero en este caso la pregunta lo requiere específicamente ...


Sin embargo, eso no imprime el tamaño del archivo. Y solo imprime la primera parte de los nombres de archivo con espacios en blanco. Y puede fallar si lstiene un alias (por ejemplo alias ls='ls -i'). Realmente debe tener mucho cuidado si desea analizar la salida de ls.
Mat

Tenía el tamaño del archivo allí y luego lo edité (momento vago): lo restauraré. Y estoy de acuerdo con el análisis de todas las advertencias ls, pero eso es lo que el OP quería ...
jasonwryan

No estoy de acuerdo, el OP quiere los nombres de archivo, no la primera parte de los nombres de archivo si el nombre de archivo tiene espacios en blanco. (El uso /bin/lsevitaría el problema del alias)
Mat

Eso se entiende implícitamente : lo que se declara explícitamente es que OP quiere una solución con la lsque ambos acordamos que no va a satisfacer el requisito de espacio en blanco. La /bin/lssugerencia es buena.
jasonwryan

amo esta solución; con respecto a los comentarios anteriores sobre no imprimir el tamaño, puede obtener el tamaño con ls, y puede usarlo -hpara que sea legible para los humanos. Específicamente utilicé: ls -lah | awk '{print $5,$6,$7,$8}'que produce: 4.0K Jan 24 18:17. Por supuesto, la solución original no dice nada acerca de awk, pero en Linux debemos asumir que la salida de un proceso siempre será la entrada a otro proceso, ¿verdad? ;)
abgordon

5

También puede usar el comando 'fecha'. Es muy fácil de usar:

fecha -r [nombre del archivo]


Bien, esto era nuevo para mí. Desafortunadamente no funciona para varios archivos a través de globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Si desea usar ls, pero preservar el tamaño adecuado, puede usar:

ls -Ss1pq --block-size=1

1

donde el espacio se define como el separador y f6 significa campo 6

ls -lt | cut -d" " -f6-

2
falló porque ls usa espacios para la sangría y a veces es -f6- otras veces es -f5-
Aquarius Power

1

Puedes canalizar dos comandos

ls -l|cut -d" " -f5

1
falló porque ls usa espacios para la sangría y a veces es -f6- otras veces es -f5-
Aquarius Power

-1

ls -s1 devuelve el tamaño y el nombre del archivo solo en AIX, no estoy seguro acerca de Linux


2
¿Puedes explicar cómo / por qué crees que esto responde la pregunta?
Scott
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.