Как я могу добавлять символы к имени файла в Linux с помощью регулярного выражения? Я видел эти два сообщения
но не смог получить ответы, которые работали на меня. Я также не уверен, принадлежит ли это сюда, переполнение стека или другой подсайт.
Я пытался
for FILE in \d+_\d+\.png; do echo "$FILE" $(echo "$FILE" | sed 's/\./_t\./'); done
но это, похоже, не распознает имя файла с регулярным выражением как регулярное выражение.
Итак, для образцов данных мои файлы в настоящее время
1111_2222.png
и я хочу, чтобы они были
1111_2222_t.png
Файлы разбросаны по пяти каталогам. Спасибо.
[vagrant@vm-one ~]$ ls
1111_2222.png 1111_4444.png 1111_6666.png
[vagrant@vm-one ~]$ for f in `ls | egrep '[0-9]+_[0-9]+\.png'`; do mv "$f" "${f/.png/_t.png}"; done
[vagrant@vm-one ~]$ ls
1111_2222_t.png 1111_4444_t.png 1111_6666_t.png
Источники
В ls | egrep
фрагмент был получен из Вот
В mv $f ${f/.png/_t.png}
на основе этот ответ
Это работает для меня в моем тесте ..
shopt -s globstar;
for i in **; do
test -f ${i} || continue;
ext=${i##*.};
echo mv $i ${i%%.${ext}}_t.${ext};
done;
shopt -u globstar;
Ожидается, что вы находитесь в правильном базовом каталоге. Обратите внимание, что он не делает никаких предположений относительно расширения файла или «начала» формата имени файла. Быть осторожен.
Просто (может быть, слишком много), но в этом случае тоже работает:
find . -regextype posix-extended \
-regex '.*[[:digit:]]{4}_[[:digit:]]{4}\.png' \
-type f -exec rename .png _t.png {} \;