Я заранее прошу прощения, если на этот вопрос был дан ответ, но я провел длительный поиск в надежде на решение.
У меня есть работающее приложение Automator, которое добавляет текущую шестизначную дату (ГГММДД) в конец имени файла:
- Вход: Filename.txt
- Вывод: имя_файла_181212.txt
Текущая команда bash:
today=$(date +%y%m%d)
for f in "$@"
do
basename=${f##*/}
filename=${basename%.*}
path=${f%/*}
ext=${f##*.}
newfilename="$filename"_"$today"
mv "$f" "$path"/"$newfilename"."$ext"
done
Это замечательно, но после регулярного использования я понял, что было бы неплохо не только добавить текущую дату, но и сначала проверить, не добавлена ли дата к имени файла; если это так, удалите его и добавьте текущую дату, в противном случае просто добавьте текущую дату.
Там два сценария:
- Имя файла содержит любую дату (предыдущую / текущую / будущую) в 6-значном формате, описанном ранее, с предшествующим подчеркиванием (Filename_181212.txt).
- Имя файла не содержит добавленного к нему 6-значного формата даты (Filename.txt)
Я понимаю, что решение, на которое я надеюсь, удалит любые шесть цифр и предшествующее ему «_», если оно существует, независимо от того, является ли оно датой или нет.
Возможно ли предварять мою текущую команду bash чем-то вроде:
если какая-либо комбинация чисел существует непосредственно перед расширением файла (".ext") и содержит ровно 6 цифр, а перед символом подчеркивания ("_")
затем удалите подчеркивание плюс 6 цифр и выполните команду bash, указанную выше
если нет, то запустите команду bash выше
Резюме Я пытаюсь облегчить удаление вручную дат, которые могут существовать в имени файла, перед добавлением к ним текущей даты. Некоторые файлы могут иметь даты, а другие - нет.
источник
Ответы:
Это должно сделать, как вы просили:
Обратите внимание , что при использовании в Run Shell Script действия в качестве Automator рабочего процесса , возможно , потребуется добавить полный путь к
sed
в коде при условии, например:/usr/bin/sed
источник