Mogę znaleźć liczbę wszystkich plików w folderze, ale mam dość dużą liczbę.
find . -type f | wc -l #find number of files in DIR
ls -lrt #list all files order by date
Jak znaleźć liczbę plików dziennie?
Tak więc wynik powinien wyglądać następująco:
# left number is number of files and right is one day.
109294 2016-06-27
101555 2016-06-26
88123 2016-06-25
... etc.
command-line
find
tasmański
źródło
źródło
109294
i109294
Odpowiedzi:
Możesz to zrobić za pomocą
printf
akcjifind
drukowania tylko czasów modyfikacji w żądanym formacie, a następnie za pomocąsort
iuniq
:-printf '%TY-%Tm-%Td\n'
drukuje czas modyfikacji plików np. w2015-05-23
formaciesort
sortuje dane wyjściowe iuniq -c
wykonuje zliczanie według datyPrzykład:
źródło
find . -type f -printf '%TY-%Tm-%Td\n' 2</dev/null | sort | uniq -c | tail -n +2 | gnuplot -p -e "set xdata time; set timefmt \"%Y-%m-%d\";set xtics rotate; plot '-' using 2:1 with impulses"
Oto rozwiązanie z
find
+awk
Zasadniczo dzieje się tak, że znajdujemy wszystkie zwykłe pliki i drukujemy ich czas modyfikacji zgodnie z
%T
formatem, a następnieawk
przejmujemy i zliczamy każdą linię za pomocą macierzy skojarzonych.END{}
zastosowania rachunkufor
pętla przejść przez wszystkie elementy w dodatkowej tablicy i wydrukować tablicę kluczy + [klawisz] zawartość (która to data + count).Możesz użyć
sort
do uporządkowania wyników, szczególnie wsort -k 1
oparciu o kolumnę 1 (która jest datą), ale jest to opcjonalne. Także-maxdepth 1
będzie sprawdzać pliki tylko w bieżącym folderze . Jeśli chcesz również znaleźć pliki w podkatalogach, usuń-maxdepth 1
część.Próbka wyjściowa
źródło
|sort | uniq -c
wersja, szczególnie przy bardzo dużej liczbie plików i niewielkim zestawie różnych dni. Zwinięcie do liczby w jednym kroku pozwala uniknąć sortowania dużej liczby duplikatów przed zliczeniem.