Постройте шаблон из списков слов. Из file1.txt
, содержащего, например, one
, un
, eins
и file2. txt
, содержащий two
, deux
, zwei
, необходимо получить регулярное выражение (в синтаксисе ERE)
(one|un|eins).*(two|deux|zwei)
Если списки слов не содержат специальных символов в regex, то достаточно заменить новые строки на |
(оператор "или"), кроме последней.
words1=$(tr '\n' '|' <file1.txt); words1=${words1%\|}
words2=$(tr '\n' '|' <file2.txt); words2=${words2%\|}
grep -E "($words1).*($words2)"
Если списки слов могут содержать специальные символы, то их нужно заключить в кавычки.
words1=$(<file1.txt tr '\n' '|' | sed 's/[][\\().*?+|]/\\&/g'); words1=${words1%\|}
words2=$(<file2.txt tr '\n' '|' | sed 's/[][\\().*?+|]/\\&/g'); words2=${words2%\|}
grep -E "($words1).*($words2)"
Обратите внимание, что если вам не важен порядок слов и вы можете принять перекрывающиеся совпадения (например, принять twone
как содержащий и one
и two
), то все, что вам нужно, это два вызова grep:
grep -f file1.txt | grep -f file2.txt
Да, используйте exiftool . В Debian/Ubuntu это можно установить с помощью
sudo apt install libimage-exiftool-perl
Что-то вроде этого должно работать (при условии, что ***показывает время):
exiftool "-datetimeoriginal<filename" Screenshot_YYYYMMDD-HHMMSS.png
exiftool самостоятельно определяет формат даты, вы можете посмотреть текущие метаданные EXIF (и некоторые другие, просто вызвав инструмент с именем файла:
exiftool Screenshot_YYYYMMDD-HHMMSS.png
Если у вас есть имя файла, которое не может быть автоматически прочитано exiftool, вы можете использовать параметр -d, чтобы прояснить ситуацию для exiftool. Опять же, для вашего примера:
exiftool "-datetimeoriginal<filename" -d Screenshot_%Y%m%d-%H%M%S Screenshot_YYYYMMDD-HHMMSS.png