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

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

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

  • TestSRConnectionContext.h
  • TestSRConnectionContext.m

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

  • CLConnectionContext.h
  • CLConnectionContext.m

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

  • Заменить часть строки в имени файла
  • найти файл, скопировать, но с другим именем
  • Как удалить (1) из имен файлов с помощью команды find
  • Добавление суффикса ко многим файлам при сохранении расширений
  • переименовывать файлы, соответствующие определенному значению mtime в каталоге
  • Перемещение одного файла за раз, исходя из определенного числа в файлах
  • Как заставить перезаписать непустые каталоги с помощью `mv`
  • Переименовать определенные файлы с частью имени родительского каталога
  • 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; 
    Interesting Posts

    Почему Crontab дает мне ошибку с моим PHP-скриптом при его запуске с терминала?

    Как удалить часть строки

    Ошибка pvcreate в разделе

    Временное отключение сеанса ssh влияет на запущенную программу?

    Arch: Является ли «SigLevel = Never» единственным удобным способом?

    Можно ли добавить функцию внутри функции?

    Bash Как я могу обернуть текст на определенное количество разделенных пространством входов

    Как сделать журналы iptables для идентификации протоколов по имени, а не по номеру?

    UBI «приостанавливается» перед загрузкой

    Есть ли он-лайн / веб-интерфейс для поиска и списка пакетов apt-get и см. Резюме и рекомендации?

    эхо vs <<<, или бесполезное использование эха в премии Bash?

    sed – как заменить пробел или знак подчеркивания

    Как удалить файл с именем «filen / ame» (с косой чертой) в файловой системе ext4 в debugfs?

    Приглашение командной строки от initrd

    система блокируется, когда хранилище отключается при использовании опций монтирования nfs bg, hard, nointr

    Linux и Unix - лучшая ОС в мире.