Wygląda na to, że dozwolone są pytania dotyczące skryptów bash.
Alan
@MichaelScheper: Nie wiem nawet, od czego zacząć ten komentarz.
Wyścigi lekkości na orbicie
1
@Notinlist: Oto odpowiedź: meta.stackexchange.com/questions/10249/… Niestety okazuje się, że upłynął limit czasu. Szkoda, ponieważ wciąż pojawiają się tutaj wyszukiwania internetowe, a zaakceptowana odpowiedź była pomocna dla wielu osób.
Michael Scheper,
@MichaelScheper: Jeśli możesz znaleźć opcję głosowania na migrację do unix.stackexchange.com, to zdecydowanie wskaż mi to. Ponieważ nie masz przedstawiciela, aby zobaczyć zamknięte okno dialogowe, dam ci podpowiedź: nie ma jednego. Rozważ bycie mniej wojowniczym, gdy nie masz pojęcia, o czym mówisz. Dziękuję za uwagę.
Wyścigi lekkości na orbicie
5
@LightnessRacesinOrbit: Przepraszam za to, że przedstawiłem się jako „wojowniczy”. Nie mogę edytować moich komentarzy, ale czy w przyszłości mogę pochwalić pytanie, które cię obraziło? Muszę powiedzieć, że czuję się trochę ślepy, nawet po tym, jak podałem swój poprzedni komentarz, mając wątpliwości. Właściwie starałem się być bardziej konstruktywny niż dodawanie kolejnego „ja też”, patrząc, jak działa migracja: meta.stackexchange.com/a/10250/249555 Być może limit 60 dni ukrywa tę opcję? Przepraszam za bum steer. Jeszcze raz dziękuję - szczerze - za poświęcony czas i uwagę.
Michael Scheper,
Odpowiedzi:
323
Jak zauważył Max, nie możesz, ale sprawdzanie plików zmodyfikowanych lub dostępnych nie jest wcale takie trudne. Napisałem samouczek na ten temat, jeszcze dzisiaj. Istotą jest użycie -newerXYi ! -newerXY:
Przykład: Aby znaleźć wszystkie pliki zmodyfikowane 7 czerwca 2007:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
Aby znaleźć wszystkie pliki dostępne 29 września 2008 r .:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
Lub pliki, których uprawnienia zostały zmienione tego samego dnia:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Jeśli nie zmienisz uprawnień do pliku, „c” zwykle odpowiada dacie utworzenia.
Moja wersja find (GNU 4.2.32) nie obsługuje predykatów -newerXY. Czy potrzebna jest konkretna minimalna wersja? A może jest to przypadek kompilacji find ze specjalnym przełącznikiem konfiguracji?
yukondude
1
@yukondude: Masz rację. Wersja find, którą mam lokalnie - GNU 4.4.0 - ma ją, podczas gdy 4.1.20, którą mam na Dreamhost, nie. Jednak kludge z tworzeniem dwóch plików powinien działać w każdym z nich.
Arve,
1
W niektórych systemach (FreeBSD, OS / X ...) -newerBtbędzie pasować do czasu urodzenia (utworzenia) pliku .
Stephane Chazelas
3
Zauważ, że -newerxtjest dostępny na FreeBSD od 2001 roku (gdzie po raz pierwszy został udostępniony jako łatka w 1998 roku), kilka innych BSD i GNU znajduje (od 4.3.3 w 2007), w oparciu o HP / UX, który wprowadził -newerXY(ale gdzie Y == t nie jest obsługiwane).
Stephane Chazelas
Używając: find (GNU findutils) 4.4.0, ta składnia nie działa na SUSE ext3, jeśli ma wyświetlać listę plików / m mtime w tym dniu, nic nie zwraca
Problem polega na tym, że chcę przetestować dla określonej daty, a nie w określonym przedziale czasowym.
sverrejoh
1
Dowiedz się, ile to dni temu i użyj tej liczby.
jmanning2k
15
ctimenie ma nic wspólnego z czasem tworzenia , to czas zmiany i-węzła.
Stephane Chazelas
47
To dwa kroki, ale lubię to robić w ten sposób:
Najpierw utwórz plik z określoną datą / godziną. W tym przypadku plik jest o 01.10.2008 o północy
touch -t 0810010000/tmp/t
Teraz możemy znaleźć wszystkie pliki, które są nowsze lub starsze niż powyższy plik (idąc według daty modyfikacji pliku. Możesz również użyć opcji -anewer w celu uzyskania dostępu i zmiany statusu pliku -cnewer ).
find /-newer /tmp/t
find /-not -newer /tmp/t
Możesz także przeglądać pliki między określonymi datami, tworząc dwa pliki za pomocą dotyku
+1 za rozwiązanie dla starszego, findktóremu brakuje-newerXY
Felipe Alvarez
1
IMO, teraz powinno to być przyjęte rozwiązanie. Nie mogłem zmusić -newermt do uruchomienia na jądrze 2.6.18-348.18.1.el5, nie mówiąc już o nowszych jądrach.
DarkForce,
Tak samo tutaj, DarkForce, nowa funkcja wydaje się być bardzo dziwna
Tego chce większość ludzi, ale nie otrzymała wystarczającej liczby głosów pozytywnych !!!
sjas
2
może to nie działać w przypadku posiadania kilku milionów plików w jednym katalogu.
Dennis Nolte
3
Istnieją skutki uboczne, jeśli wyszukiwane hasło grep znajduje się w nazwie pliku.
Snorex
mywiki.wooledge.org/ParsingLs - lepszym podejściem jest prawdopodobnie wydrukowanie daty utworzenia w formie do odczytu maszynowego, być może z, statjeśli nie masz find -printf.
tripleee
12
Nie możesz Przełącznik -c informuje, kiedy uprawnienia zostały ostatnio zmienione, -a testuje najnowszy czas dostępu i -m testuje czas modyfikacji. System plików używany przez większość odmian Linuksa (ext3) nie obsługuje rekordu „czasu tworzenia”. Przepraszam!
W rzeczywistości nie jest to tylko typ systemu plików - nie ma interfejsu systemu do uzyskiwania takich informacji, nawet jeśli system plików je przechowywał. Jeden z braków Uniksa, sięgający do najwcześniejszych dni, dlatego Unix nigdy nie wystartuje.
chrisdowney
1
Unix nigdy nie wystartuje?
lucid_dreamer
8
@Max: ma rację co do czasu utworzenia.
Jednakże, jeśli chcesz obliczyć, jaki upłynął dni argumentu za jeden z -atime, -ctime, -mtimeparametry, można użyć następującego wyrażenia
Zamień „2008-09-24” na dowolną datę, a ELAPSED_DAYS zostanie ustawiona na liczbę dni od tej pory do dzisiaj. (Aktualizacja: odejmij jeden od wyniku, aby wyrównać z findzaokrągleniem daty).
Tak więc, aby znaleźć dowolny plik zmodyfikowany 24 września 2008 r., Polecenie to:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Działa to, jeśli twoja wersja findnie obsługuje -newerXYpredykatów wymienionych w odpowiedzi na @Arve:.
Odpowiedzi:
Jak zauważył Max, nie możesz, ale sprawdzanie plików zmodyfikowanych lub dostępnych nie jest wcale takie trudne. Napisałem samouczek na ten temat, jeszcze dzisiaj. Istotą jest użycie
-newerXY
i! -newerXY
:Przykład: Aby znaleźć wszystkie pliki zmodyfikowane 7 czerwca 2007:
Aby znaleźć wszystkie pliki dostępne 29 września 2008 r .:
Lub pliki, których uprawnienia zostały zmienione tego samego dnia:
Jeśli nie zmienisz uprawnień do pliku, „c” zwykle odpowiada dacie utworzenia.
źródło
-newerBt
będzie pasować do czasu urodzenia (utworzenia) pliku .-newerxt
jest dostępny na FreeBSD od 2001 roku (gdzie po raz pierwszy został udostępniony jako łatka w 1998 roku), kilka innych BSD i GNU znajduje (od 4.3.3 w 2007), w oparciu o HP / UX, który wprowadził-newerXY
(ale gdzie Y == t nie jest obsługiwane).find location -ctime time_period
Przykłady okresu_czasu:
Ponad 30 dni temu:
-ctime +30
Mniej niż 30 dni temu:
-ctime -30
Dokładnie 30 dni temu:
-ctime 30
źródło
ctime
nie ma nic wspólnego z czasem tworzenia , to czas zmiany i-węzła.To dwa kroki, ale lubię to robić w ten sposób:
Najpierw utwórz plik z określoną datą / godziną. W tym przypadku plik jest o 01.10.2008 o północy
Teraz możemy znaleźć wszystkie pliki, które są nowsze lub starsze niż powyższy plik (idąc według daty modyfikacji pliku. Możesz również użyć opcji -anewer w celu uzyskania dostępu i zmiany statusu pliku -cnewer ).
Możesz także przeglądać pliki między określonymi datami, tworząc dwa pliki za pomocą dotyku
To znajdzie pliki między dwiema datami i godzinami
źródło
find
któremu brakuje-newerXY
Możesz to zrobić:
Przykład:
źródło
stat
jeśli nie maszfind -printf
.Nie możesz Przełącznik -c informuje, kiedy uprawnienia zostały ostatnio zmienione, -a testuje najnowszy czas dostępu i -m testuje czas modyfikacji. System plików używany przez większość odmian Linuksa (ext3) nie obsługuje rekordu „czasu tworzenia”. Przepraszam!
źródło
@Max: ma rację co do czasu utworzenia.
Jednakże, jeśli chcesz obliczyć, jaki upłynął dni argumentu za jeden z
-atime
,-ctime
,-mtime
parametry, można użyć następującego wyrażeniaZamień „2008-09-24” na dowolną datę, a ELAPSED_DAYS zostanie ustawiona na liczbę dni od tej pory do dzisiaj. (Aktualizacja: odejmij jeden od wyniku, aby wyrównać z
find
zaokrągleniem daty).Tak więc, aby znaleźć dowolny plik zmodyfikowany 24 września 2008 r., Polecenie to:
Działa to, jeśli twoja wersja
find
nie obsługuje-newerXY
predykatów wymienionych w odpowiedzi na @Arve:.źródło
Za pomocą przełączników -atime, -ctime i -mtime znajdziesz, możesz zbliżyć się do tego, co chcesz osiągnąć.
źródło
źródło
`ls ...`
działa, nie używafind
narzędzia.Znalazłem ten skrypt w skrypcie, który usuwa wszystkie pliki starsze niż 14 dni:
Myślę, że trochę dodatkowego „man find” i szukania parametrów -ctime / -atime itp. Pomoże ci tutaj.
źródło