Массовое переименование, префикс изменения

Как я могу навалом заменить префикс для многих файлов?

У меня много файлов, таких как

  • TestSRConnectionContext.h
  • TestSRConnectionContext.m

Я хотел бы изменить все их на

  • CLConnectionContext.h
  • CLConnectionContext.m

Как мне это сделать?

7 Solutions collect form web for “Массовое переименование, префикс изменения”

for name in TestSR* do newname=CL"$(echo "$name" | cut -c7-)" mv "$name" "$newname" done 

Это использует подстановку bash для удаления первых 6 символов из входного имени файла с помощью cut , добавляет CL к результату и сохраняет это в $newname . Затем он переименовывает старое имя в новое имя. Это выполняется для каждого файла.

cut -c7- указывает, что из ввода следует возвращать только символы после индекса 7. 7- – диапазон, начинающийся с индекса 7 без конца; то есть до конца строки.

Раньше я использовал cut -b7- , но вместо этого следует использовать -c чтобы обрабатывать кодировки символов, которые могут иметь несколько байтов на символ, например UTF-8.

Я бы сказал, что проще всего просто использовать команду rename которая распространена во многих дистрибутивах Linux. Существуют две распространенные версии этой команды, поэтому проверьте свою страницу руководства, чтобы узнать, какой из них у вас есть:

 ## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...) rename 's/^TestSR/CL/' * ## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...) rename TestSR CL * 

Если вы хотите использовать версию из util-linux-ng в системе Debian, она доступна под именем rename.ul

Расширение параметра Shell достаточно для простых преобразований, подобных этому. Замена команд менее эффективна из-за необходимости запуска дополнительных процессов (для самой подстановки команды и cut / sed ).

 for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done 

Вот один из способов:

 ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done 
  • ls *.{h,m} -> Найти все файлы с расширением .h или .m
  • n=CL -> Добавить префикс CL для имени файла
  • sed -e 's/^Test//' -> Удаляет префикс теста из имени файла
  • mv $a $n -> Выполняет переименование

Вы можете попробовать:

 for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done 

Подробнее см. man bash (раздел «Расширение параметров»).

Если вам нужно что-то большее perlish, вы можете это сделать

 perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' * 

Ну, это было не так сложно, как я.

 $ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done; $ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done; 
  • Как переименовать файлы и преобразовать datestamp из DD-MM-YYYY в YYYY-MM-DD?
  • как mv-файлы с определенным шаблоном в файлы с определенным шаблоном
  • Скопируйте имена файлов и добавьте префикс пути в каталог, рекурсивный
  • Переименование нескольких файлов gzips и удаление более 10 дней
  • переименовать файлы mov / mts с данными exif
  • Как я могу переименовать все файлы в текущем каталоге с определенным расширением на другое расширение?
  • Как выполнять очистку имен файлов, содержащих недопустимые символы
  • Вставьте выбранное имя файла во время копирования в Midnight Commander
  • Почему программа unix mv не нужна опция -R (рекурсивная) для каталогов, но cp действительно нуждается?
  • как копировать и переименовывать файлы с помощью «:» и увеличивать число в имени файла
  • Переименование файлов в каталоге
  • Преобразование нескольких групп PNG-файлов в многослойные ICO-файлы
  • Linux и Unix - лучшая ОС в мире.