Как рекурсивно переименовать файлы / папки, чтобы сделать их имена удобными для Windows?

4943
RomanSt

У меня есть куча файлов на коробке Ubuntu, в именах которых есть разные символы, которые Windows не принимает (в основном «:» и «*», но, возможно, другие).

Какой самый простой способ переименовать их и перенести на компьютер с Windows? Можно заменить эти символы на что-то вроде «[двоеточие]» и «[звездочка]».

11
Вы должны избегать таких имен даже под Linux (особенно `*`). cYrus 13 лет назад 1
@cYrus Зависит от того, как вы обрабатываете файлы. Я предполагаю, что это только проблема со сценариями и в оболочках. Я на OS X и единственный запрещенный символ - `:`, что достаточно плохо. Называть документы после их содержимого полезно, и если название статьи заканчивается вопросом, то и имя файла. Daniel Beck 13 лет назад 4
@cYrus и я, в моем программном обеспечении, но некоторые программы были написаны людьми, которые этого не делают. Например, qmail использует: почти в каждом имени файла, который он создает. RomanSt 13 лет назад 0
@Daniel Beck: Конечно, но, к сожалению, иметь файловую систему, которая поддерживает такие имена, недостаточно, так как вы можете использовать программы, которые все портят. Я даже не использую пробелы. cYrus 13 лет назад 0
Большой! Мой не был решением, просто совет. cYrus 13 лет назад 0
Разве длинные имена файлов не могут быть источником проблем? Peltier 8 лет назад 0
Символы, запрещенные в Windows [перечислены здесь] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247 (v = vs.85) .aspx). Abel Cheung 8 лет назад 0
@Peltier Вы бы предпочли, чтобы скрипт переименования запускался в Windows или Ubuntu? Steven 8 лет назад 0
@ Стивен хороший вопрос! Я думаю, что Windows будет немного более полезной, поскольку может случиться так, что кто-то получит файлы в Windows и должен будет исправить их на этой платформе. Peltier 8 лет назад 2

5 ответов на вопрос

4
Steven

Try Recuva.

It is the the only Windows utility I have found which handles non-Windows friendly filenames.

Enable Scan for non-deleted files (for recovery from damaged or reformatted disks) and scan your folder. On restore, enable Restore folder structure. Recuva will effectively "copy" the entire directory to another location while "santitizing" unfriendly filenames.

3
Dennis Williamson

Взгляните на переименование Glindra и детоксикации .

Файловые утилиты Glindra могут быть установлены в Windows или Linux. Примеры очистки имен файлов в Windows:

rena *.* -portable  rena *.* -safe 
  • -безопасные
    карты, ведущие тире (дефисы) к подчеркиванию.
    Свертывает пробелы.
    Отображает проблемные символы, такие как * ?: [] "<> | () {}, чтобы подчеркнуть.
  • -portable
    Выполняет те же операции очистки, что и -safe, и дополнительно:
    сопоставляет все 8-битные символы из верхней половины латинского алфавита 1 с разумными 7-битными резервными символами.
    Сопоставляет символы одинарных кавычек '`´ для подчеркивания.

Источник: Исправление имен файлов Unix / Linux / POSIX: управляющие символы (например, Newline), начальные черты и другие проблемы

На этой странице отображается 404. [Кэшированная копия Google] (http://webcache.googleusercontent.com/search?client=safari&rls=en&q=cache:http://dwheeler.com/essays/fixing-unix-linux-filenames. HTML & т.е. = UTF-8 & ае = UTF-8). Daniel Beck 13 лет назад 0
Это одна удивительная напыщенная речь Дэвида Уилера! Особенно после того, как я только что разбил свою клавиатуру после попытки перейти в каталог, который JungleDisk назвал "~ \ irina". Хотите догадаться, работали ли над ним вкладки? ... RomanSt 13 лет назад 0
Detox предназначен для того, чтобы сделать файлы Windows Unix-дружественными, а не наоборот. endolith 13 лет назад 1
@DennisWilliamson - Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы. Ramhound 8 лет назад 0
@Ramhound: Это не только ответ. Ответ - название двух программ, которые делают то, что хочет ОП. Ссылки ведут туда, где можно получить эти программы, и ссылку, где я нашел информацию. Dennis Williamson 8 лет назад 0
@DennisWilliamson: из предоставленных вами ссылок одна больше не работает, другая решает другую проблему, а третья - напыщенная беседа, обсуждающая эту другую проблему. Peltier 8 лет назад 0
@Ramhound: Но это ответ 2011 года! Joe Taras 8 лет назад 0
@DennisWilliamson - хотя ссылки мертвы. Я говорю о ссылке «источник» в любом случае не ссылки на программу. Ramhound 8 лет назад 0
@JoeTaras - Какая у тебя точка зрения? Это все еще ответ, и, поскольку он содержит только ссылки, это бессмысленно через 4 года из-за мертвых ссылок. ** Именно поэтому ссылки на ответы не одобряются. ** Ramhound 8 лет назад 0
@DennisWilliamson - похоже, что glindra (для Windows) не может переименовывать символы с недопустимыми именами файлов. `G: \ spc> rena.exe -safe -portable * .txt` выводит` [FATAL-ERROR] Ошибка синтаксиса имени файла: aa: a.txt` Steven 8 лет назад 3
Do note the change in syntax when going to Linux, that is `rena '*.*' -portable`, and if you want it recursive use something like `rena '***/*.*' -portable` on Linux. And I do believe the rename should be done on Linux, not on Windows. holroy 8 лет назад 1
1
harrymc

Я полагаю, что, не работая на Linux и ничего не тестируя, можно использовать однострочники, подобные приведенным ниже.

Чтобы изменить один символ:

find . -type f -exec rename 's/:/\[colon\]/g' {} + find . -type f -exec rename 's/\*/\[asterisk\]/g' {} + 

И, наконец, удалить все не алфавитно-цифровые символы:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} + 
Do note that this needs to be extended with all the other illegal characters of windows, i.e.`<>:"/\|?*` holroy 8 лет назад 0
0
Peltier

If your files already are on an NTFS volume, it seems that running chkdisk from Windows "solves" the problem. Unfortunately, it seems like it does so by deleting the offending files.

0
Vitex

Мне удалось с комбинацией первых двух ответов, плюс pyRenamer (GUI). Под Linux я использовал pyRenamer, чтобы свернуть пробелы в именах папок (каталогах) - заменив пробел ничем - так, чтобы другие программы (Glindra переименовывать) работали рекурсивно (можно было поставить подчеркивание). Из файлов я также извлек некоторые приемлемые для окна символы или слова, чтобы сэкономить место, и аналогично свернул пробелы в именах файлов. Затем я запустил rena, чтобы удалить символы, отличные от Windows, сохранил их на флэш-накопитель, а затем использовал Recuva для «восстановления» папки в Windows. Recuva указывает, является ли путь к файлу слишком длинным (и также удаляет не-Windows-символы). Я еще не нашел инструмент, который проверяет путь к именам файлов, чтобы узнать, не превышают ли они максимальный предел Windows 255 (или, скажем, 240, чтобы обеспечить некоторую свободу действий).

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