#perl #cygwin #batch-processing
#perl #cygwin #пакетная обработка
Вопрос:
У меня есть приложение (Templify), которое создает шаблонную структуру каталогов, но, похоже, оно не может переименовать «__NAME__» в то, что я определил как цель.
Это нормально, если я могу найти чистый способ переименовать все файлы и каталоги с моим текстом замены.
Я нашел rename.pl метод, который переименовывает файлы, и я нашел некоторый код, который удаляет подчеркивания в именах файлов и заменяет их пробелами… но когда я изменяю код, чтобы вставить мои условия поиска, кажется, что это никогда не работает.
Итак, в принципе, мне нужно заменить «__NAME__» чем-то вроде «Project-Name».
Я рад изменять строки поиска для каждого последующего повторного использования, но мне бы хотелось выяснить, как создать файл, в который я могу передавать аргументы.
Я на XP и могу использовать cygwin (в cygwin, похоже, нет ‘rename’, что затрудняет поиск решений типа Linux с использованием функции под названием ‘rename’ ….)
Я нашел это, которое легко использовать для файлов в текущем каталоге, но я не знаю достаточно, чтобы указать ему рекурсию в подкаталоги.
Любая помощь была бы отличной.
Спасибо, Скотт
Комментарии:
1. Когда вы говорите «кажется, это никогда не работает», я хотел бы увидеть код, который вы пробовали. Вы получили сообщение об ошибке? Или просто ничего не произошло? Можете ли вы поделиться списком каталогов до и после?
2. Я просто имел в виду, что приложение, которое я использовал, запросило у меня название проекта, и введенное мной значение никогда не использовалось во вновь созданных каталогах. Я предположил, что каталоги и файлы с » ИМЕНЕМ » в них должны были быть заменены на то, что я ввел в качестве названия моего проекта.
Ответ №1:
Из cygwin:
find /cygdrive/c/mytree -type f | perl -ne 'rename $_, $1/Project-Name if m[^(.*)/__NAME__$]'
Или с помощью python:
import os
for root, dirs, files in os.walk("C:\mytree"):
for filename in files:
if filename == "__NAME__":
os.rename(os.path.join(root, filename), os.path.join(root, "Project-Name"))
Комментарии:
1. спасибо, но я получил ошибку в версии cygwin: отсутствует запятая после первого аргумента для переименования функции в строке -e 1, рядом с «Name if». Где я должен поместить эту запятую? Спасибо.
2. Лучше добавить кавычки:
rename $_, "$1/Project-Name"