Mówisz, że „ ls piped to head zajmuje okropnie dużo czasu”.
Przyczyną tego nie jest ls
, ale liczba plików w twoim katalogu. Jeśli masz 100 000 plików w jednym katalogu, każdy sposób rozwiązania tego problemu musiałby uzyskać informacje o wszystkich 100 000 plikach, zanim będzie mógł nawet pomyśleć o ich posortowaniu lub wydrukowaniu dowolnego wyniku.
Jeśli trwa to zbyt długo, prawdziwym rozwiązaniem jest podzielenie plików na wiele katalogów.
Jeśli nie możesz rozłożyć plików na kilka katalogów, to czy możesz w jakiś sposób zawęzić liczbę plików do rozważenia ? np. jeśli nazwy plików zawierają datę, być może możesz dołączyć symbol wieloznaczny, aby system nie musiał sortować 100 000 plików. A może są kolejno ponumerowane? (To może, ale nie musi pomóc, ale warto spróbować.)
Ile razy próbujesz to zrobić? Może warto zapisać / buforować dane wyjściowe do ponownego użycia .
Teraz pytanie.
Czy na pewno masz na myśli „czas tworzenia”, a nie „czas zmiany” ? Większość narzędzi może wyświetlać tylko „czas zmiany”, a nie „czas utworzenia”.
Uzyskiwanie „czasu tworzenia” jest bardzo nową rzeczą, która wymaga systemu plików ext4 i niektórych narzędzi, które nie są łatwe do zainstalowania.
Jeśli chcesz zmienić czas
Czas zmiany (w skrócie ctime) oznacza czas ostatniej zmiany atrybutów pliku.
ls -c
sortuje według ctime.
Chcesz, aby dane wyjściowe były w porządku rosnącym, a nie malejącym, więc musisz odwrócić dane wyjściowe za pomocą -r
opcji.
Możesz to zrobić w ten sposób:
ls -cr | head -n 100
Dłuższe rozwiązanie tego samego problemu za pomocą 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/^\.\///'
ale działa to wolniej niż ls -cr
w moim systemie.
Jeśli chcesz czas modyfikacji
Czas modyfikacji (w skrócie mtime) oznacza czas ostatniej zmiany zawartości pliku.
ls -t
sortuje według mtime.
Zmień ls -cr
na ls -tr
(najlepsza opcja) lub zmień stat -c $'%Z\t%n'
na stat -c $'%Y\t%n'
.
Jeśli potrzebujesz czasu na stworzenie
(w skrócie crtime)
To jest trudniejsze.
Najpierw upewnij się, że katalog znajduje się w systemie plików sformatowanym przy użyciu ext4
. Możesz tune2fs -l <device name>
to sprawdzić.
Następnie istnieje nowy stat
format o nazwie %W
, który może ci w tym pomóc. Aby go zdobyć, musisz pobrać wersję GNU Coreutils wydaną w październiku 2010 roku lub później, rozpakować, skompilować i zainstalować.
Następnie, w zależności od twojego jądra, może to działać (nie wypróbowałem).
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/^\.\///'
Zobacz też:
Jeśli pojawią się błędy dotyczące "'$\t'
'$\t'
Zapis wymaga bash
albo zsh
: to nie będzie działać w dash
lub sh
na Ubuntu. Jeśli naprawdę potrzebujesz, aby korzystać z tych pocisków, trzeba będzie zmienić dowolny \t
do Ctrl+ V, Tabi usuń wiodący $
od tuż przed otwarciem cytatu.
find -mtime +<number of days> -delete
wyczyścić wszystkie pliki starsze niż określony wiek. Oznacza to, że żaden rodzaj nie jest konieczny.