Я пытаюсь найти файлы, созданные в июне, июле и августе месяцы. Я использовал этот метод
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
Добавьте год, если вы хотите сопоставить файлы в определенном году, а не календарный год, когда выполняется скрипт.
Если ваша реализация find не имеет -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]
), но не к аббревиатурам месяца, которые вы надеялись найти.