Polecenie find . -name '*2015*' -mmin +1440 -lsprawdopodobnie zrobi to, co chcesz. Szczegóły poniżej.
Twoje pierwsze polecenie miało -name 2015. Nie działało, ponieważ wyszukuje tylko pliki o dokładnie takich nazwach 2015, bez żadnych innych znaków.
Twoje drugie polecenie find . -name *2015* -mtime +1 -exec ls -ltrh {} \;mogło się nie powieść z kilku powodów:
1. Niecytowane *znaki są rozszerzane przez powłokę, a następnie przekazywane do find.
Jeśli w bieżącym katalogu znajdują się pliki (w tym, w którym uruchomiłeś tę find ...komendę), których nazwy zawierają 2015(i nie zaczynają się na a .), powłoka została rozwinięta *2015*do listy nazw plików, a następnie przekazana ta lista jako argumenty find. To nie jest to, czego chcesz - zamiast tego chcesz przekazać *2015*dosłownie jako argument do znalezienia, aby find, a nie powłoka, mogła znaleźć, które pliki pasują do niego.
Aby rozwiązać ten problem, cytat *2015*. Istnieją trzy popularne sposoby:
'*2015*'(tj. find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;)
"*2015*"(tj. find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;)
\*2015\*(tj. find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;)
I sugeruję pisanie go z apostrofami jak '*2015*', ponieważ:
Ale w tym przypadku tak naprawdę nie ma to znaczenia. 'i "oba traktują *to samo, a wyrażenie nie jest wystarczająco skomplikowane do \cytowania, aby utrudnić zrozumienie.
2. -mtime +1wybiera tylko pliki zmodyfikowane dwa lub więcej dni temu.
Jak man findmówi:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
Załóżmy, że plik został zmodyfikowany 47 godzin temu. Aby dowiedzieć się, ile to jest 24-godzinnych okresów, findzaokrągla się w dół : jest to jeden okres 24-godzinny. Ale -mtime +1pasuje tylko do plików, których czasy modyfikacji są ściśle dłuższe niż jeden 24-godzinny okres temu. W związku z tym pliki z wczoraj nie są dopasowane.
Zobacz, dlaczego funkcja find -mtime +1 zwraca tylko pliki starsze niż 2 dni? po więcej informacji, jak sugeruje steeldriver .
Aby znaleźć pliki ostatnio zmodyfikowano każdej chwili więcej niż 24 godziny temu , proponuję zamiast określające go jako 1440 minut temu z -mmin +1440:
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
Niektórzy czytelnicy mogą się zastanawiać, dlaczego nie cytowałem {}. Niektórzy cytują, {}aby przypomnieć ludziom, że nie jest to wyrażenie na rozwijanie nawiasów klamrowych . Pociski w stylu Bourne'a (jak bash ) nie wymagają {}cytowania. Może jakaś powłoka nie w stylu Bourne'a traktuje ją specjalnie; dlatego niektórzy użytkownicy mogą to zacytować. Istnieje jednak błędne przekonanie, że czasami trzeba cytować, {}aby -execpoprawnie traktować nazwy plików ze spacjami. Że; s fałsz: z {}lub '{}', finddostaje takie same argumenty, jak skorupa usuwa cytaty przed przejściem '{}'dofind. Aby przeciwdziałać temu nieporozumieniu, nie cytuję {}, ale jest to kwestia stylu - jeśli wolisz {}dokumentować, w jaki sposób powłoka nie traktuje, {a }specjalnie, to w porządku.
Polecam również albo zmienić lspolecenie, lub (jak muru zasugerował ) zastąpić go find„s -lsdziałania. ls -ltrhprawdopodobnie nie robi tego, co zamierzasz, ponieważ jest uruchamiany osobno dla każdego znalezionego pliku, a zatem flagi -ti -r, które określają sortowanie, są nieistotne.
Chociaż dane wyjściowe zostaną sformatowane nieco inaczej niż przy ls -lużyciu, użycie -lsjest prostsze i łatwiejsze.
find . -name '*2015*' -mmin +1440 -ls
Lub jeśli zdecydujesz, że naprawdę potrzebujesz tylko wymienić nazwy pliku (w tym ich ścieżki, w stosunku do .), możesz po prostu określić brak akcji, co spowoduje -printużycie domyślnej akcji:
find . -name '*2015*' -mmin +1440
findCzęść wygląda dobrze dla mnie, ale ja też miałem problemy z-execparametrem. Nie mogłem też tego uruchomić. (Próbowałem przenieść wszystkie pliki jpg z jednego folderu do jego katalogu nadrzędnego - i ostatecznie zrobiłem to ręcznie ...)