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

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

  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

но это, кажется, не распознает regexed имя файла как regex.

Таким образом для образцов данных мои файлы в настоящее время

1111_2222.png

и я хочу, чтобы они были

1111_2222_t.png

Файлы рассеиваются среди пяти каталогов.Спасибо.

2
задан 23 May 2017 в 15:41
3 ответа
[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} на основе этого ответа

3
ответ дан 3 December 2019 в 09:34

Это работает для меня в моем тесте ..

shopt -s globstar; 
for i in **; do
    test -f ${i} || continue;
    ext=${i##*.};
    echo mv $i ${i%%.${ext}}_t.${ext}; 
done;
shopt -u globstar;

Ожидается, что вы находитесь в правильном базовом каталоге. Обратите внимание, что он не делает никаких предположений относительно того, какое расширение файла или каково «начало» формата имени файла. Будьте осторожны.

2
ответ дан 3 December 2019 в 09:34

Просто (может быть, слишком много), но также работает в этом случае:

find . -regextype posix-extended \
  -regex '.*[[:digit:]]{4}_[[:digit:]]{4}\.png' \
  -type f -exec rename .png _t.png {} \;
0
ответ дан 3 December 2019 в 09:34

Теги

Похожие вопросы