Назад | Перейти на главную страницу

Regex заменить имя файла добавления

Как я могу добавлять символы к имени файла в Linux с помощью регулярного выражения? Я видел эти два сообщения

  1. https://stackoverflow.com/questions/6985873/change-names-of-multiple-files-linux
  2. Как переименовать несколько файлов, заменив слово в имени файла?

но не смог получить ответы, которые работали на меня. Я также не уверен, принадлежит ли это сюда, переполнение стека или другой подсайт.

Я пытался

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

Источники

  1. В ls | egrep фрагмент был получен из Вот

  2. В 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 {} \;