Найти файлы в сценарии оболочки, используя условное выражение на основе подстроки - PullRequest
0 голосов
/ 29 января 2019

Я пишу сценарий оболочки для сопоставления разных файлов на основе общего идентификатора.Этот идентификатор является датой в формате: MMDDYY.Например, файл с именем 010518id.xml был бы создан 5 января 2018 года. Мне нужно, чтобы он находил только те файлы, которые были созданы после 2013 года.

У меня есть эта строка в сценарии оболочки:

nfiles=$(find $SEARCH_DIR -name $fileName'*.xml' -type f)

Я думаю о том, чтобы получить год, позвонив по номеру fileYear = ${fileName:3:2}, затем используя if[ ${#fileYear} -gt 13 ], и вложив в этом выражении тот, который проверяет, превышает ли число nfiles определенную сумму.

Это лучший способ сделать это?Возможно, есть какой-то способ сделать это с помощью одной или двух команд, но это первый сценарий оболочки, который мне пришлось написать.

1 Ответ

0 голосов
/ 29 января 2019

поскольку вы заявили, что:

Мне нужно, чтобы он находил только файлы, которые были созданы после 2013 года.

и 2013 продолжались до 31 декабря, я буду считать, что любыефайл с 1 января 2014 года по сегодняшний день, поэтому:

тестовые файлы:

$ ls -1 *.xml
010313id.xml
010518id.xml
011012id.xml

вывод:

$ find . -regextype egrep -regex .*[0-9]{4}1[4-9]id.*
./010518id.xml

Объяснение:

-regextype egrep: определяет egrep как синтаксис регулярного выражения для понимания

-regex: объявить, что я буду использовать регулярное выражение, то есть:

.*: любой символ ноль или более раз, после которого следуетпо:

[0-9]{4}: любая цифра ровно четыре раза, затем:

1: номер один, затем:

[4-9] любая цифра между4 и 9 (для симуляции 2014 до сегодняшнего дня)

id: сохранить формат имени файла

...