переименовать файлы и каталоги {searchstr} с помощью {replacestr}

У меня есть приложение (Templify), которое создает шаблонную структуру каталогов, но, похоже, оно не может переименовать «__NAME__» с тем, что я определил как цель.

Это нормально, если я смогу найти чистый способ переименовать все файлы и каталоги с моим текстом замены.

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

Итак, в основном мне нужно заменить «__NAME__» на что-то вроде «Имя проекта».

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

Я на XP и могу использовать cygwin (похоже, cygwin не имеет «переименования», что затрудняет поиск решений типа Linux с использованием функции, называемой «переименование»...)

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

Любая помощь будет здорово.

Спасибо, Скотт


person Scott    schedule 08.12.2010    source источник
comment
Когда вы говорите, что это никогда не работает, я хотел бы увидеть код, который вы пробовали. Вы получили ошибку? Или просто ничего не произошло? Можете ли вы поделиться списком каталогов до и после?   -  person Narveson    schedule 08.12.2010
comment
Я просто имел в виду, что приложение, которое я использовал, запросило у меня имя проекта, а введенное значение никогда не использовалось во вновь созданных каталогах. Я предположил, что каталоги и файлы с NAME в них должны были быть заменены тем, что я ввел в качестве имени моего проекта.   -  person Scott    schedule 08.12.2010


Ответы (1)


Из Cygwin:

find /cygdrive/c/mytree -type f | perl -ne 'rename $_, $1/Project-Name if m[^(.*)/__NAME__$]'

Или с помощью питона:

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"))
person itsadok    schedule 08.12.2010
comment
спасибо, но я получил ошибку в версии cygwin: отсутствует запятая после первого аргумента для переименования функции в строке -e 1, рядом с именем, если. Где мне поставить эту запятую? Спасибо. - person Scott; 08.12.2010
comment
Лучше добавь кавычки: rename $_, "$1/Project-Name" - person reinierpost; 09.12.2010