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

11

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

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

RomanSt
источник
1
Вы должны избегать таких имен даже под Linux (особенно *).
cYrus
4
@cYrus Зависит от того, как вы обрабатываете файлы. Я предполагаю, что это только проблема со сценариями и в оболочках. Я на OS X и единственный запрещенный персонаж - :это достаточно плохо. Называть документы после их содержимого полезно, и если название статьи заканчивается вопросом, то и имя файла.
Даниэль Бек
@cYrus и я, в моем программном обеспечении, но некоторые программы были написаны людьми, которые этого не делают. Например, qmail использует: почти в каждом имени файла, который он создает.
RomanSt
@Daniel Beck: Конечно, но, к сожалению, иметь файловую систему, которая поддерживает такие имена, недостаточно, так как вы можете использовать программы, которые все портят. Я даже не использую пробелы.
cYrus
2
@ Стивен хороший вопрос! Я думаю, что Windows будет немного более полезной, поскольку может случиться так, что кто-то получит файлы в Windows и должен будет исправить их на этой платформе.
Пельтье

Ответы:

4

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

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

rena *.* -portable

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

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

Приостановлено до дальнейшего уведомления.
источник
На этой странице отображается 404. Кэшированная копия Google .
Даниэль Бек
Это одна удивительная напыщенная речь Дэвида Уилера! Особенно после того, как я только что разбил свою клавиатуру после попытки перейти в каталог, который JungleDisk назвал "~ \ irina". Хотите догадаться, сработало ли на этом завершение табуляции? ...
RomanSt
1
Detox предназначен для того, чтобы сделать файлы Windows Unix-дружественными, а не наоборот.
эндолит
3
@DennisWilliamson - похоже, что glindra (для Windows) не может переименовывать символы с недопустимыми именами файлов. G:\spc>rena.exe -safe -portable *.txtвыходы[FATAL-ERROR] Filename syntax error: aa:a.txt
Стивен
1
Обратите внимание на изменение синтаксиса при переходе на Linux, то есть rena '*.*' -portable, и если вы хотите, чтобы это было рекурсивно, используйте что-то похожее rena '***/*.*' -portableна Linux. И я верю, что переименование должно быть сделано в Linux, а не в Windows.
Holroy
4

Попробуйте Recuva .

Это единственная утилита Windows, которую я нашел, которая обрабатывает имена файлов, не относящиеся к Windows.

Включите Сканировать на наличие не удаленных файлов (для восстановления с поврежденных или переформатированных дисков) и сканируйте свою папку. При восстановлении включите Восстановить структуру папок . Recuva будет эффективно «копировать» весь каталог в другое место, одновременно «обезвреживая» недружественные имена файлов.

Стивен
источник
1

Я считаю, что, не работая на 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' {} +
harrymc
источник
Обратите внимание, что это должно быть расширено со всеми другими недопустимыми символами окон, то есть<>:"/\|?*
holroy
0

Если ваши файлы уже находятся на томе NTFS, похоже, что запуск chkdisk из Windows «решает» проблему. К сожалению, похоже, что это происходит путем удаления оскорбительных файлов.

Пельтье
источник
0

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

Витекс
источник