Jaki byłby najlepszy sposób na wyświetlenie 100 pierwszych plików w katalogu posortowanym według utworzonego znacznika czasu (od najstarszego). Katalog jest dość duży (około 100 000 plików).
Wykonanie potoku z głową zajmuje bardzo dużo czasu.
Edytować:
- System plików to ext3.
- ograniczenie liczby plików w folderze nie jest warte wysiłku, ponieważ będzie to rzadka operacja „czyszczenia”, a pliki są generowane przez oprogramowanie innych firm.
- Wykorzystanie czasu modyfikacji pliku zamiast czasu utworzenia zapewnia akceptowalne rozwiązanie.
find -mtime +<number of days> -delete
wyczyścić wszystkie pliki starsze niż określony wiek. Oznacza to, że żaden rodzaj nie jest konieczny.Odpowiedzi:
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:
Dłuższe rozwiązanie tego samego problemu za pomocą
stat
: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
nals -tr
(najlepsza opcja) lub zmieństat -c $'%Z\t%n'
nastat -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żesztune2fs -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).
Zobacz też:
Jeśli pojawią się błędy dotyczące
"'$\t'
'$\t'
Zapis wymagabash
albozsh
: to nie będzie działać wdash
lubsh
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.źródło
Innym sposobem znalezienia się dzisiaj w pracy może być problem z wydajnością:
To teoretycznie powinno zacząć generować dużo szybciej, ale myślę, że zależy to od tego, skąd bierze się opóźnienie.
ls
Sortowanie plików może zająć dużo czasu.źródło
head
faktycznie kończy pracę, gdy tylko przeczyta wystarczającą ilość danych wejściowych. Spróbuj uruchomić oba ztime
przodu. Whead
każdym razie wersja jest znacznie szybsza w moim systemie.