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?

Dedo meñique
fuente
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" *
f4m8
fuente
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.

Estera
fuente
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 ...

jasonwryan
fuente
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]

Ankit Khare
fuente
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
Profundo
fuente
1

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

ls -lt | cut -d" " -f6-
zzapper
fuente
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
Deepak
fuente
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

cacflyer
fuente
2
¿Puedes explicar cómo / por qué crees que esto responde la pregunta?
Scott