1

Я хотел бы синхронизировать несколько папок на моем локальном Mac с удаленным сервером через SFTP. Поскольку существующие умлауты кажутся проблематичными для моего программного обеспечения для синхронизации (Deltawalker), я ищу способ избавиться от имен файлов любых проблемных символов.

Есть несколько программ (в настоящее время я пробую PowerRenamer, но есть несколько, чтобы заменить символы на основе регулярных выражений, но я не могу понять, какой тип RegExp мне нужно использовать. Заменить отдельные вхождения легко, но мне кажется, что у меня нет списка транслитераций (например, ä /ae, ü /ue, ß /ss, â /a и т.д.).

Есть ли что-нибудь, что я мог бы использовать в качестве RegExp? Программное обеспечение использует платформу RegexKit.

Спасибо, Хельге.

3 ответа3

1

Два способа удаления символов с диакритическими знаками в сценарии оболочки:

chars="äéėèêß○‡€"

echo -n "$chars" | iconv -c -f utf-8 -t us-ascii//TRANSLIT | tr -d "\"\`^'"
#=> aeeeessEUR

echo -n "$chars" | sed 's|ä|ae|g;s|ß|ss|g' | tr -C '\000-\200' '_'
#=> ae____ss___

Пакетное переименование файлов после их рекурсивного поиска:

touch ~/Desktop/test\ {ää,öö}.txt
find ~/Desktop/ -maxdepth 1 -iname "test*" |
while read f; do
    mv "$f" "$(tr -C '\000-\200' '_' <<< "$f")"
done
0

Элегантная утилита / скрипт для массового переименования в командной строке - это утилита perl rename (см. CPAN - http://search.cpan.org/~rmbarker/File-Rename-0.06/rename.PL от Ларри Уолла).

Мое не слишком элегантное использование этого инструмента для переименования всего поддерева текущей директории (все немецкие умлауты в разных (также неработающих кодировках UTF-8) в ASCII):

найти ./ -print0 | xargs -0 -L1 -I {} переименовать -n 's/ ä / ae / g; s / ö / oe / g; s / ü / ue / g; s / Ö / Oe / g; s / Ü / Ue / г; s / A / ае / г, с / SS / SZ / г, с /\x75\ XCC \x88 / ие / г, с /\x61 \ XCC \x88 / к.э. / г, с /\x6f \ XCC \x88 / ае / г;» "{}"

Это распечатывает, что сделано. Удалите -n, чтобы получить реальную вещь.

0

В вашей ситуации уже есть выход: используйте несколько "раундов" переименования для каждого персонажа.

В любом случае, один классический шаблон регулярных выражений - это всего лишь один случай. Вам понадобится больше выразительных конструкций на вашем языке программирования переименования, чтобы выразить то, что вы хотите, чем просто шаблон регулярных выражений и замена.

Например, СЭД (стандартный Unix поток редактор) позволяет поместить несколько команд "заменить" s в одну программу (например: s/a/AA/g;s/b/BB/g они будут применяться последовательно к каждой строке ввода. Пользователь Unix с некоторыми навыками написания сценариев / оболочки может сочетать sed с командами переименования файлов для достижения того, что вы хотите. Готовы ли вы изучить некоторые оболочки Unix?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .