Как я могу добавить символы к имени файлов в Linux, с помощью regex? Я видел эти два сообщения
но не смогли заставить ответы работать на меня. Я также не уверен, принадлежит ли это здесь, переполнение стека или в другом подсайте.
Я пробовал
for FILE in \d+_\d+\.png; do echo "$FILE" $(echo "$FILE" | sed 's/\./_t\./'); done
но это, кажется, не распознает regexed имя файла как regex.
Таким образом для образцов данных мои файлы в настоящее время
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 {} \;