Linux mostra solo la data e la dimensione del nome file


72

Come posso usare lsin Linux per ottenere un elenco solo di data e dimensione dei nomi di file. Non ho bisogno di vedere le altre informazioni come il proprietario o l'autorizzazione. È possibile?


1
lsè fantastico perché ha un ordinamento molto veloce in base al datetime, ma la formattazione è difficile da gestire. Suggerisco di usare un token in --time-style come --time-style='+&%Y%m%d+%H%M%S.%N'dove il token è '&', usando quello come riferimento è possibile analizzare ulteriormente l'output in sedmodo da poter tornare indietro come appena prima che il token abbia le dimensioni! Se qualcuno vuole pubblicarlo come risposta completa, sentiti libero di farlo, sto dormendo troppo adesso :)
Aquarius Power

Risposte:


98

Perché non usare statinvece di ls?

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

1
Questo è bello, ma ha potenzialmente il problema "ambiente troppo grande" / "elenco argomenti troppo lungo".
Mat

4
:-) Solo una prova di concetto. In Real Life [tm] questo sarà unfind . -type f -print0 | xargs -0 stat -c "%y %s %n"
f4m8

5
Per formattare l'output di stat, è possibile aggiungere informazioni sulla larghezza alla stringa di formattazione come la funzione C printf, ad esempio "%y %8s %n", non è documentata, ma sembra funzionare (coreutils 8.17, Fedora 18)
LiuYan 刘 研

Perché con lsI riesco ad emetterlo con un carattere di mille separatori. Come funziona stat?
Al Bundy,

Non vedo come questo risponda alla domanda ?! È una bella soluzione fuori dagli schemi, ma perderesti tutti i benefici ls. E i colori ??
MS Berends

30

Puoi ottenere un sacco di controllo su come elencare i file con l' findutilità. lsnon ti consente di specificare le colonne che desideri.

Per esempio:

$ 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

L'argomento printfdell'azione è dettagliato nella manpage. Puoi scegliere diverse informazioni temporali, quali dimensioni vuoi (dimensioni del file o blocchi del disco utilizzati), ecc. Puoi anche renderle sicure per nomi di file insoliti se è necessaria un'ulteriore elaborazione.


1
L'input sopra per trovare ('% CY% Cm% Cd.% C ...') è lungo. Almeno GNU find ha %C+(output "29-08-2016 + 10: 57: 56.9201257840") e %Cc(output "Lu 29 ago 2016 10:57:56 CEST")
guettli

Vorrei che funzionasse su Mac.
Jerinaw,

adorabile, e se vuoi stampare solo il percorso completo e le dimensioni, dovrebbe funzionare "find / path / to / -printf '% h /% f% s \ n'"
Pierluigi Vernetto,

24

Puoi sempre usare un'altra utility come awkformattare l'output di ls1 :

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


1.Sì, in generale, non dovresti analizzare l'output di ls ma in questo caso la domanda lo richiede specificamente ...


Questo però non stampa le dimensioni del file. E stampa solo la prima parte dei nomi dei file con spazi bianchi. E può fallire se lsè alias (diciamo alias ls='ls -i'). Dovresti davvero fare molta attenzione se vuoi analizzare l'output.
Mat

Avevo le dimensioni del file e poi l'ho modificato (momento vago) - Lo ripristinerò. E sono d'accordo su tutte le avvertenze relative all'analisi ls, ma è quello che voleva l'OP ...
Jasonwryan,

Non sono d'accordo, l'OP vuole i nomi dei file, non la prima parte dei nomi dei file se il nome del file ha spazi bianchi. (L'uso /bin/lseviterebbe il problema dell'alias.)
Mat

Ciò è compreso implicitamente : ciò che viene affermato esplicitamente è che OP vuole una soluzione con lscui entrambi concordiamo non soddisferà il requisito degli spazi bianchi. Il /bin/lssuggerimento è buono.
Jasonwryan,

amo questa soluzione; per quanto riguarda i commenti precedenti sul non stampare le dimensioni, puoi ottenere le dimensioni con ls e puoi usarle -hper renderle leggibili dall'uomo. Specificamente ho usato: ls -lah | awk '{print $5,$6,$7,$8}'da cui si ricava: 4.0K Jan 24 18:17. Certo, la soluzione originale non dice nulla su awk, ma in Linux dovremmo supporre che l'output di un processo sarà sempre l'input per un altro processo, giusto? ;)
abgordon,

5

Puoi anche usare il comando 'date'. È molto facile da usare:

data -r [nome file]


Bello, questo era nuovo per me. Purtroppo non funziona per diversi file tramite globbing: date -r foo*.txt->date: extra operand "foo2.txt"
guettli

4

Se si desidera utilizzare ls, ma conservare le dimensioni appropriate, è possibile utilizzare:

ls -Ss1pq --block-size=1

1

dove spazio è definito come separatore e f6 significa campo 6

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

2
ha fallito perché usa spazi per il rientro e talvolta è -f6- altre volte è -f5-
Aquarius Power

1

È possibile eseguire il pipeline di due comandi

ls -l|cut -d" " -f5

1
ha fallito perché usa spazi per il rientro e talvolta è -f6- altre volte è -f5-
Aquarius Power

-1

ls -s1 restituisce le dimensioni e il nome del file solo su AIX, non sicuro di Linux


2
Puoi spiegare come / perché credi che questo risponda alla domanda?
Scott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.