Jak uzyskać tylko pliki utworzone po dacie z ls?

97

Czy za pomocą lspolecenia można wyświetlać tylko pliki utworzone po określonej dacie, godzinie ...?

Pytam o to, ponieważ mam katalog z tysiącem plików.

Chcę więc zobaczyć wszystkie pliki, które zostały utworzone od wczoraj.

Używam, ls -ltrale muszę czekać, aby zobaczyć wszystkie pliki ...

Czy istnieje odpowiednik DIRECTORY/SINCE=dateOpenVMS?

Luc M.
źródło
1
lswyświetla listę plików, ale niewiele oferuje wybór plików do wyświetlenia lub formatu wyjściowego. Używaj globowania (symbole wieloznaczne powłoki) lub findgdy chcesz wybierać pliki według nazwy lub metadanych (np. Data).
Gilles
3
Jak poszła randka z ls? Wy dwaj to wyłączyliście?
Garrett Albright,
3
Z zsh:ls -1 -- *(.m-1)
don_crissti

Odpowiedzi:

123

Możesz użyć tego findpolecenia, aby znaleźć wszystkie pliki, które zostały zmodyfikowane po określonej liczbie dni.

Na przykład, aby znaleźć wszystkie pliki w bieżącym katalogu, które zostały zmodyfikowane od wczoraj (24 godziny temu), użyj:

find . -maxdepth 1 -mtime -1

Pamiętaj, że aby znaleźć pliki zmodyfikowane przed 24 godzinami, musisz użyć -mtime +1zamiast -mtime -1.

dogbane
źródło
3
Właśnie to powiedziałbym. Nie ma powodu, aby ograniczać się lstutaj, Luc.
Warren Young,
14
Z GNU find istnieją inne możliwości. -mmin 5wyświetla listę plików zmodyfikowanych w ciągu ostatnich 5 minut. -newermt "2011-02-27 13:42"wyświetla listę plików zmodyfikowanych od określonej daty. Możesz użyć -exec ls --color -ld {} +zamiast, -lsaby uzyskać zwykły kolorowy wyświetlacz (jeśli lubisz kolorowe wyjście ls).
Gilles
3
Uwaga znak minus:find . -mmin -5
user7543
i -maxdepth 1 może być zwiększona do każdej wartości n, aby wyszukać pliki w podkatalogu zbyt poziomie
Anshuman
3
dla mnie działa to tak: znajdź. -type f -newermt '1/15/2012 18:09:00'
woohoo,
14
find . -type f -newermt '1/30/2017 0:00:00'

Spowoduje to znalezienie wszystkich plików zmodyfikowanych po określonej dacie.

zerowalność
źródło
1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"
Trant Batey
źródło
5
Cześć Trant! Podczas gdy twoje rozwiązanie jest kreatywne, próbując uszanować prośbę pytania o użycie ls, parsowanie wyniku ls rzadko jest bezpieczne (np. Co się dzieje z nazwami plików, w tym nowymi wierszami?), I podoba nam się, aby odpowiedzi nie były tylko jednym - wkładki, ale raczej wyjaśnienie, w jaki sposób działają tak szczegółowo, jak to istotne.
wtorek
1
Problemy: (1) W moim systemie datemówi Jun 03, ale lsmówi Jun  3, więc to nie działa. (2) Tydzień temu, data była 27 maja.  ls -l | grep "May 27"Znajdzie pliki zmodyfikowane tego dnia, ale także pliki zmodyfikowane 27 maja każdego innego roku - i pliki z „27 maja” w nazwie. (A jeśli uważasz, że jest to całkowicie fałszywe obawy, spojrzeć w górę „10 grudnia” ). (3), a jeśli udało się dostać datedo powiedzenia Jun 2, grepping za które znaleźć Jun 20poprzez Jun 29, ale nie Jun  2(z dwoma spacjami). … (Ciąg dalszy)
G-Man
1
(Ciąg dalszy)… (4) OP używał ls -ltrdo pobrania ostatnio zmodyfikowanych plików na końcu listy. Jeśli szukasz daty, nie musisz tego robić (z wyjątkiem plików 27 maja 2015 r. Na końcu listy, po plikach 27 maja 2014 r., 27 maja 2013 r. Itd.). (5) W awk print $2, $3jest równoważne print $2" "$3i jest o wiele łatwiejsze do odczytania - szczególnie gdy istnieją trzy inne poziomy cytatów.
G-Man
ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo
0

Mam nadzieję, że to zadziała:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Tutaj:

$6 indicates position of month
$7 indicates day of the month

to powyższe polecenie drukuje wszystkie nazwy plików, które są tworzone od 1 maja do 31 maja

jeśli chcesz wydrukować datę również na konsoli, spróbuj tego

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Jeśli chcesz podać ścieżkę do katalogu, możesz to wypróbować

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'
Rohit Nimmala
źródło
Z wielu powodów analizowanie lsdanych wyjściowych nie jest dobrym pomysłem . I nie wszyscy mówią po angielsku :-)
Luc M