Я намагаюся шукати файли, створені у червні, липні та серпні місяців. Я використовував цей метод
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
але це не працює.
Я намагаюся шукати файли, створені у червні, липні та серпні місяців. Я використовував цей метод
ls -lrth|awk '/[Jun][Jul][Aug]/ {print}'
але це не працює.
Відповіді:
Ви можете зіставити декілька моделей, таких як:
awk '/Jun/ || /July/ || /Aug/' <(ls -lrh)
Це повертає всі збіги для червня, липня або серпня. printВиписка не потрібна, як це awkдію за замовчуванням.
awk '/Jun|Jul|Aug/'абоawk '/Ju[nl]|Aug/'
Як правило, дуже погана ідея проаналізувати вихід ls . Кращий спосіб зробити те, що ви хочете, - це
stat -c "%n %y" * | grep 2013-0[678]
Крім того, перевірте лише останнє поле для захисту від малоймовірного випадку, коли саме ім'я файлу є датою:
stat -c "%n %y" *| awk '$NF ~ /2013-0[678]/'
Від 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]/'щоб перевірити лише останнє поле виводу в (мабуть?) Навіть те, що ім'я файлу відповідає регексу навіть тоді, коли дата не відповідає.
lsце команда для відображення інформації про файли, доступні для читання людиною. Не використовуйте це в сценаріях .
Команда на пошук файлів у дереві каталогів відповідає певним критеріям find. Якщо у вас є GNU find (тобто невбудований Linux або Cygwin) або FreeBSD find (тобто FreeBSD або OSX), ви можете використовувати -newermtдля зіставлення файлів, востаннє змінених після певної дати.
find . -newermt '1 June' ! -newermt '1 September' -print
Додайте рік, якщо ви хочете відповідати файлам у конкретному році, а не календарному році, коли сценарій працює.
Якщо у вашій реалізації не знайдеться -newermt, вам доведеться це зробити -newer, який порівнює дату findзнайденого файлу з фіксованим файлом. використовувати touchдля створення тимчасових файлів із датою, яку ви хочете використовувати як межу.
dir=$(mktemp -d)
touch -d 201306010000 "$dir/from"
touch -d 201309010000 "$dir/to"
find . -newer "$dir/from" ! -newer "$dir/to" -print
rm -r "$dir"
[...]конструкція відповідає одному символу, який може бути будь-яким із символів між дужками. Отже, ваше вираження відповідаєJJAабоJug(Jвід[Jun],uвід[Jul]іgвід[Aug]), але не абревіатури місяця, на які ви сподівалися відповідати.