Próbuję wyszukać pliki utworzone w czerwcu, lipcu i sierpniu. Użyłem tej metody
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ale to nie działa.
Próbuję wyszukać pliki utworzone w czerwcu, lipcu i sierpniu. Użyłem tej metody
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
ale to nie działa.
Odpowiedzi:
Możesz dopasować do wielu wzorów, takich jak:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Zwraca wszystkie dopasowania dla czerwca, lipca lub sierpnia. Nie potrzebujesz print
instrukcji, ponieważ jest awk
to akcja domyślna.
awk '/Jun|Jul|Aug/'
lubawk '/Ju[nl]|Aug/'
Zasadniczo analizowanie danych wyjściowych ls jest bardzo złym pomysłem . Lepszym sposobem na robienie tego, co chcesz
stat -c "%n %y" * | grep 2013-0[678]
Ewentualnie zaznacz tylko ostatnie pole, aby zabezpieczyć się przed mało prawdopodobnym przypadkiem, gdy sama nazwa pliku jest datą:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Od man stat
:
-c --format=FORMAT
use the specified FORMAT instead of the default; output a new‐
line after each use of FORMAT
%y time of last modification, human-readable
%n file name
| awk '$NF ~ /2013-0[678]/'
tylko sprawdzić pole wyjściowe ostatni, w (prawdopodobnie?) Nawet, że plik jest nazwa pasuje do wyrażenia regularnego, nawet jeśli data nie.
ls
to polecenie wyświetlające informacje o plikach w postaci czytelnej dla człowieka. Nie używaj go w skryptach .
Polecenie znajdowania plików w drzewie katalogów spełniających określone kryteria to find
. Jeśli masz funkcję GNU find (tj. Niewbudowany Linux lub Cygwin) lub FreeBSD (np. FreeBSD lub OSX), możesz użyć -newermt
do dopasowania plików, które zostały ostatnio zmodyfikowane po określonej dacie.
find . -newermt '1 June' ! -newermt '1 September' -print
Dodaj rok, jeśli chcesz dopasować pliki w określonym roku, a nie rok kalendarzowy, w którym skrypt jest uruchamiany.
Jeśli twoja implementacja find nie ma -newermt
, musisz się pogodzić z tym -newer
, co porównuje datę find
znalezienia pliku ze stałym plikiem. służy touch
do tworzenia plików tymczasowych z datą, która ma być używana jako granica.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]
konstrukcja konstruuje pojedynczy znak, którym może być dowolny ze znaków między nawiasami. Więc twoje wyrażenie pasujeJJA
lubJug
(J
od[Jun]
,u
od[Jul]
ig
od[Aug]
), ale nie oznacza skrótów miesiąca, które chciałeś dopasować.