Необходимо выполнить grep для каждого найденного файла.
-l
указывает grep
печатать имя файла только тогда, когда regex
найден.
Если имена файлов не содержат символов /
, попробуйте это:
find a_directory -type f -name \*.py.txt -exec sh -c '
for fname; do
basename="${fname##*/}"
grep -lF "@code prefix.${basename%.*}" "${fname}"
done' sh {} +
см. man bash
для пунктов ниже:
"${fname##*/}"
равно file1.py.txt
, если fname
==a_directory/file1.py.txt
"${basename%.*}"
равно file1.py
, если basename
==file1.py.txt
В качестве обходного пути я могу создать собственную переменную среды в правиле udev:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", \
ATTRS{serial}=="000621000000", SYMLINK+="ttymkw", TAG+="systemd", \
ENV{MY_ID}="000621000000", \
ENV{SYSTEMD_USER_WANTS}+="offnet-uart-log@$env{MY_ID}.service"
(обратная косая черта для удобочитаемости, это должно быть в одной строке.)
Или просто напишите строку сразу после @
.
Однако в этом нет необходимости.
В качестве другого обходного пути, если служба systemd вызывает скрипт в своем операторе ExecStart , тот же udevadm
вызов, показанный в вопросе, может быть включен в этот скрипт для извлечения ID_SERIAL_SHORT
через grep
.