Tu dici che " ls reindirizzati al capo richiede un lungo periodo di tempo terribile completa".
La causa di ciò non è ls
, ma il numero di file nella tua directory. Se hai 100.000 file in una singola directory, qualsiasi modo di risolvere questo problema dovrebbe ottenere informazioni su tutti i 100.000 file prima ancora di pensare a ordinarli o stampare qualsiasi output.
Se impiega troppo tempo, la vera soluzione è dividere i file su più directory.
Se non riesci a distribuire i file su più directory, c'è un modo per restringere il numero di file da considerare ? ad es. se i nomi dei file includono una data, forse puoi includere un carattere jolly in modo che il sistema non debba ordinare 100.000 file. O forse sono numerati in sequenza? (Questo può o non può aiutare, ma vale la pena provare.)
Quante volte stai cercando di farlo? Forse vale la pena salvare / memorizzare nella cache l'output per il riutilizzo .
Ora una domanda.
Sei sicuro di voler dire "tempo di creazione" e non "tempo di cambio" ? La maggior parte degli strumenti può visualizzare solo "tempo di cambio", non "tempo di creazione".
Ottenere "tempo di creazione" è una novità, che richiede un filesystem ext4 e alcuni strumenti che non sono facili da installare.
Se vuoi cambiare il tempo
Change time (in breve ctime) indica l'ora dell'ultima modifica degli attributi del file.
ls -c
ordina per ctime.
Volete l'uscita in ordine crescente, non decrescente, quindi è necessario invertire anche l'uscita con l' -r
opzione.
Quindi potresti farlo in questo modo:
ls -cr | head -n 100
Una soluzione più lunga allo stesso problema usando stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
ma funziona più lentamente rispetto ls -cr
al mio sistema.
Se vuoi il tempo di modifica
Tempo di modifica (mtime in breve) indica l'ora dell'ultima modifica del contenuto del file.
ls -t
ordina per mtime.
Passare ls -cr
a ls -tr
(opzione migliore) o passare stat -c $'%Z\t%n'
a stat -c $'%Y\t%n'
.
Se hai bisogno di tempo di creazione
(crtime in breve)
Questo è più difficile.
Innanzitutto, assicurati che la directory sia su un filesystem formattato usando ext4
. Puoi usare tune2fs -l <device name>
per controllare questo.
Quindi, c'è un nuovo stat
formato chiamato %W
, che può aiutarti qui. Per ottenerlo, devi scaricare una versione di GNU Coreutils rilasciata nell'ottobre 2010 o successivamente, estrarla, compilarla e installarla.
Quindi, a seconda del kernel, questo potrebbe funzionare (non l'ho provato).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
Guarda anche:
Se ricevi errori "'$\t'
La '$\t'
notazione richiede bash
o zsh
: non funzionerà in dash
o sh
su Ubuntu. Se hai davvero bisogno di usare quelle shell, dovrai cambiare qualsiasi \t
in Ctrl+ V, Tabe rimuovere il lead $
da appena prima del preventivo di apertura.
find -mtime +<number of days> -delete
ripulire tutti i file più vecchi di una certa età. Ciò significa che non è necessario alcun tipo.