Подтвердить что ты не робот

BASH: переименовать несколько файлов. Но только переименуйте часть имени файла

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

Мне нужно только переименовать test-this в цикле for.

test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext 
test-this.volume003+08.ext 
test-this.volume004+16.ext 
test-this.volume005+32.ext 
test-this.volume006+64.ext 
test-this.volume007+78.ext 
4b9b3361

Ответ 1

Если у вас есть все эти файлы в одной папке, а вы в Linux, вы можете использовать:

rename 's/test-this/REPLACESTRING/g' *

Результат будет:

REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...

rename может принимать команду в качестве первого аргумента. Команда здесь состоит из четырех частей:

  • s: флаг для замены строки другой строкой,
  • test-this: строка, которую вы хотите заменить,
  • REPLACESTRING: строка, которую вы хотите заменить строку поиска, и
  • g: флаг, указывающий, что все соответствия строки поиска должны быть заменены, то есть если имя файла test-this-abc-test-this.ext, результат будет REPLACESTRING-abc-REPLACESTRING.ext.

Обратитесь к man sed за подробным описанием флагов.

Ответ 2

Используйте rename, как показано ниже:

rename test-this foo test-this*

Это заменит test-this на foo в именах файлов.

Если у вас нет rename, используйте цикл for, как показано ниже:

for i in test-this*
do
    mv "$i" "${i/test-this/foo}"
done