Переименуйте все файлы в папке от Camel-регистра до нижнего регистра и поместите подчеркивание для разделения слов

У меня есть набор файлов как FileNameX.cpp и я хотел бы переименовать всех их к их соответствующему file_name_x.cpp.

1
задан 6 August 2019 в 12:01

1 ответ

Эта команда удара делает задание. Из командной строки введите папку и выполните эту строку:

for file in ./* ; do mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L\1/g' -e 's/^.\/_//')" ; done

В форме сценария это похоже на это:

#!/bin/bash
for file in ./* ; do
    mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L\1/g' -e 's/^.\/_//')"
done

В основном sed используется для управления строками. Существует два выражения:

  1. s/\([A-Z]\)/_\L\1/g: поиски прописных букв к заменяют ими нижний регистр, и добавьте подчеркивание

  2. s/^.\/_//: удаляет любое подчеркивание, которое было вставлено из-за первой буквы, являющейся капиталом (т.е. Вы не хотите _file_name_x.cpp.

Рассмотреть использование -v, --verbose на mv для объяснения, что делается.

6
ответ дан 3 December 2019 в 06:31

Другие вопросы по тегам:

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