Переименуйте рекурсивное имя хранилища и имена файлов, заменив шаблон другим - PullRequest
0 голосов
/ 17 апреля 2019

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

Мне кажется, я нашел потенциальное решение здесь с помощью следующей команды:

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Однако, похоже, у меня нет правильной команды rename.

Я установил пакет Perl Rename , но у меня до сих пор нет команды rename на основе Perl. Что я могу сделать, чтобы использовать эту команду?

Есть ли альтернативное решение для этого rename решения?

Допустим, у меня есть следующие репозитории и файлы:

BOOK1/
BOOK1/BOOK1_summary.txt
BOOK1/BOOK1_chapter1/BOOK1_chapter1.txt

Я хочу переименовать все вхождения BOOK1 на BOOK-01 в репозитории и именах файлов:

BOOK1-01/
BOOK1-01/BOOK1-01_summary.txt
BOOK1-01/BOOK1-01_chapter1/BOOK1-01_chapter1.txt

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете использовать утилиту rename PERL, которую можно загрузить с по этой ссылке .

find  BOOK1 -depth -exec rename -n 's/^(.*)(BOOK1)(.*)$/$1BOOK1-01$3/' {} \;

Выход в режиме пробного запуска

rename(BOOK1/BOOK1_summary.txt, BOOK1/BOOK1-01_summary.txt)
rename(BOOK1/BOOK1_chapter1/BOOK1_chapter1.txt, BOOK1/BOOK1_chapter1/BOOK1-01_chapter1.txt)
rename(BOOK1/BOOK1_chapter1, BOOK1/BOOK1-01_chapter1)
rename(BOOK1, BOOK1-01)

Удалите опцию -n из rename, как только вы проверите результат всухую ..

Фактический вывод

 ls -R BOOK1-01/ # Used a recursive listing here.
BOOK1-01/:
BOOK1-01_chapter1  BOOK1-01_summary.txt

BOOK1-01/BOOK1-01_chapter1:
BOOK1-01_chapter1.txt

Примечание: Ключом здесь является опция -depth с функцией find.find manpage говорит, что обрабатывает содержимое каждого каталога до самого каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...