Как переименовать все файлы со специальными символами и пробелами в каталоге?
Я попробовал renameследующую команду, чтобы заменить все пробелы и специальные символы на _:
Команда работает, но не вносит никаких изменений в имена файлов и также не возвращает никаких ошибок. Как можно это исправить и есть ли другие способы?
Нет действий: показать, какие файлы были бы переименованы.
Так что это нормально, если у вас нет никаких изменений.
Что касается вашей команды, она работает для меня:
test renamed as a___test
Вы можете попробовать вот так:
В поисках красивого скрипта для удаления специальных символов, а также немецких специальных символов, заменив их универсальными, чтобы не удалять полезную информацию. Я обновил последнюю версию скрипта, в которой были некоторые незначительные проблемы, приводящие к:
“filename changed for “” in ” $outfile
mv
в результате чего:
Поскольку renameкоманда не работает для меня по неизвестным причинам, и я не получаю никаких других ответов на свой вопрос, я сам пытался сделать возможным переименование. Возможно, это не лучший подход для переименования файлов, но это сработало для меня, и именно поэтому я хотел бы опубликовать его в качестве ответа, чтобы, если кто-то еще прочтет это, мог получить некоторую помощь в изменении имен файлов, как я это сделал.
Теперь для меня, я знаю, что у всех файлов будет определенный текст в их именах, который является словом «Блок». Ниже приведены имена файлов до их переименования:
Теперь я написал небольшой сценарий оболочки, чтобы сделать это возможным. Ниже приведен код:
# Put the old filenames in a file. # Create a new file with Old names and New names seperated by a #.# Read the file with both old and new names and rename them with the new names.
read oldValue newValue
oldAndNew
rm oldValues newValues oldandNew
Это просто удалить специальные символы из имен файлов
-n возможность проверить раньше.
Системы Windows и Linux позволяют создавать и называть файлы и каталоги в соответствии с вашими требованиями, но некоторые символы нельзя использовать для названия каталогов и файлов. В этой статье мы узнаем о запрещенных символах в именах каталогов Windows и Linux.
Запрещенные символы в именах каталогов Windows и Linux
Некоторые символы являются печатными символами ASCII, а некоторые – непечатными. Вот символы, которые не поддерживаются для имен файлов и каталогов.
Linux/Unix
Здесь перечислены непечатаемые символы, которые нельзя использовать в качестве имен файлов или имен каталогов.
Запрещенные (зарезервированные) имена
Помимо вышеперечисленных символов, существуют также определенные зарезервированные имена файлов, которые нельзя использовать в Windows, как с расширением, так и без него.
Заключение
Также помните, что Windows не различает символы верхнего и нижнего регистра в именах файлов и каталогов, поэтому если вы попытаетесь назвать один файл как a.txt, а другой файл в том же каталоге как A.txt, это не позволит вам этого сделать.
Наконец, следует отметить, что в Windows имена файлов и каталогов не могут заканчиваться пробельными символами.
В этой статье мы узнали о запрещенных символах для имен файлов и каталогов в Windows и Linux.
Что еще я упустил?
Мне нужно полное руководство, которое учитывало бы двухбайтовые символы. Ссылки на внешние ресурсы меня также устраивают.
Сначала мне нужно создать каталог в файловой системе, используя имя, которое может содержать запрещенные символы, поэтому я планирую заменить эти символы символами подчеркивания. Затем мне нужно записать этот каталог и его содержимое в zip-файл (используя Java), поэтому любые дополнительные советы относительно имен zip-каталогов будут приняты с благодарностью.
Давайте будем проще и сначала ответим на вопрос.
Запрещенными для печати символами ASCII являются:
Если ваши данные поступают из источника, который допускает непечатаемые символы, то их необходимо проверить.
Примечание: Хотя в файловых системах Linux/Unix создание файлов с управляющими символами в имени файла является законным, работа с такими файлами может стать проблемой для пользователей.
Следующие имена файлов зарезервированы:
(как сами по себе, так и с произвольными расширениями файлов, например, LPT1.txt).
«Исчерпывающее руководство» по запрещенным символам имен файлов не будет работать в Windows, потому что она резервирует имена файлов, а также символы. Да, символы типа «* ” ?» и другие запрещены, но существует бесконечное количество имен, состоящих только из допустимых символов, которые запрещены. Например, пробелы и точки являются допустимыми символами имени файла, но имена, состоящие только из этих символов, запрещены.
Windows не различает символы верхнего и нижнего регистров, поэтому вы не можете создать папку с именем «A», если папка с именем «a» уже существует. Хуже того, такие, казалось бы, разрешенные имена, как «PRN» или «CON», и многие другие, зарезервированы и не разрешены. Windows также имеет несколько ограничений по длине; имя файла, допустимое в одной папке, может стать недействительным при перемещении в другую папку. Правила именования файлов и папок приведены в документации Microsoft.
В общем случае нельзя использовать пользовательский текст для создания имен каталогов Windows. Если вы хотите разрешить пользователям называть все, что они хотят, вы должны создавать безопасные имена, такие как A, AB, A2 и т. д., хранить созданные пользователем имена и их эквиваленты путей в файле данных приложения и выполнять сопоставление путей в вашем приложении.
Если вам обязательно нужно разрешить пользовательские имена папок, единственный способ определить, являются ли они недействительными, это ловить исключения и считать, что имя недействительно. Даже это чревато опасностью, поскольку исключения, возникающие при отказе в доступе, отключении дисков и отсутствии места на диске, пересекаются с исключениями, которые могут возникать при недействительных именах
В оболочках Unix вы можете заключить в одинарные кавычки почти все символы. За исключением одинарной кавычки, и вы не можете выразить управляющие символы, потому что «» не расширяется. Доступ к самой одинарной кавычке из строки в кавычках возможен, потому что вы можете объединять строки с одинарными и двойными кавычками, например так, «’I”””m”», который может быть использован для доступа к файлу под названием «I’m» (здесь также возможна двойная кавычка).
Таким образом, вам следует избегать всех управляющих символов, потому что их слишком сложно вводить в оболочке. Остальное возможно, особенно файлы, начинающиеся с тире, потому что большинство команд считывают их как опции, если только перед ними не стоят два тире «–«, или вы не указываете их с помощью «./», что также скрывает начальное «-«.
Если вы хотите быть вежливым, не используйте ни один из символов, которые оболочка и типичные команды используют как синтаксические элементы, иногда зависящие от позиции, например, вы можете использовать «-«, но не как первый символ; то же самое с «.», вы можете использовать его как первый символ, только когда вы имеете в виду («скрытый файл»). Когда вы имеете в виду, ваши имена файлов представляют собой управляющие последовательности VT100.
Лучшее предложение, которое я смог придумать, позволить пользователю называть файл так, как ему нравится. Используя обработчик ошибок, когда приложение пытается сохранить файл, перехватывайте любые исключения, предполагая, что виновато имя файла (очевидно, убедившись, что путь сохранения также в порядке), и предлагайте пользователю задать новое имя файла. Для достижения наилучших результатов поместите эту процедуру проверки в цикл, который продолжается до тех пор, пока пользователь не получит правильное имя или не отмени операцию. Это работает лучше всего (по крайней мере, в VBA).
Некоторые операционные системы запрещают отображение определенных символов в именах файлов: (Ресурс из Википедии)
backslash Также используется как разделитель компонентов имени пути в MS-DOS, OS/2 и Windows (нет разницы между косой чертой и обратной косой чертой); разрешено в имени файла Unix
? знак вопроса, используемый в качестве подстановочного знака в Unix, Windows и AmigaOS; отмечает один символ Разрешено в именах файлов Unix
* звездочка используется в качестве подстановочного знака в Unix, MS-DOS, RT-11, VMS и Windows. Отмечает любую последовательность символов (Unix, Windows, более поздние версии MS-DOS) или любую последовательность символов в базовом имени или расширении (таким образом, « . » В ранних версиях MS-DOS означает “все файлы”. Разрешено в именах файлов Unix,
: двоеточие используется для определения точки монтирования / диска в Windows; используется для определения виртуального устройства или физического устройства, например накопителя на AmigaOS, RT-11 и VMS; используется в качестве разделителя пути в классической Mac OS. Удваивается после имени в VMS, указывает имя узла DECnet (эквивалентно имени хоста NetBIOS (сеть Windows), которому предшествует “”.)
“кавычка используется для обозначения начала и конца имен файлов, содержащих пробелы в Windows
<меньше, чем используется для перенаправления ввода, разрешено в именах файлов Unix
, период разрешен, но последнее вхождение будет интерпретировано как разделитель расширений в VMS, MS-DOS и Windows. В других ОС, обычно рассматриваемых как часть имени файла, допускается более одной полной остановки.
Вообще командная строка винды достаточно капризна к не буквенно-цифровым символам. И не только в начале файла, но и в любом месте имени файла или каталога.
Выше перечисленные Сергей В символы нельзя использовать, потому что это спец.символы cmd.exe (используются ею для собственных нужд), но есть еще куча других символов, которые не являются спец.символами, но от которых cmd.exe так же корежит. Поэтому лучшая рекомендация тут – вообще не использовать не буквенно-цифровые символы в названиях файлов.
Так же сходу могу добавить к списку:
! – при использовании в батнике команды setlocal enabledelayedexpansion восклицательный знак становиться спец.символом
% – внутри батника является спец.символом.
^ – является спец.символом
В свое время мне пришлось обходить проблему не стандартных символов в cmd.exe, поэтому знаком с ней не понаслышке.
И еще, проблемы с символами появляются именно в применении к командным файлам cmd.exe, если у вас другая задача, то возможно, эта проблема не будет для вас стоять так остро.
Время на прочтение
Пути файловых систем в Windows страннее, чем можно подумать. В любой производной от Unix системе пути на удивление просты: если нечто начинается с /, то это путь. Но всё совершенно иначе в Windows, которая имеет озадачивающее разнообразие схем составления пути.
Когда я реализовал функцию автозавершения пути в Fileside 1.7, мне нужно было изучить этот вопрос внимательнее, чтобы ничего не упустить. В этой статье я расскажу о своих находках.
Стоит заметить, что статья ограничивается только тем типом путей, который видит пользователь приложений Windows (обусловленный Win32 API). Под этим слоем есть ещё больше любопытного, в основном касающегося тех, кто пишет драйверы оборудования и тому подобное.
Вкратце
В Windows существует три разных вида абсолютного пути и три разных типа относительного пути.
Абсолютные пути
Абсолютные, или полные пути — это завершённые пути, сами по себе уникальным образом идентифицирующие местоположение в файловой системе.
Пути к диску
Пути к диску — это старые добрые пути, которые мы знаем и любим, они состоят из буквы диска и последовательности папок.
D:Doughnut preferencesWith jam in
UNC-пути
$C$административную общую папку:C$
Стоит также заметить, что \Pipeline сам по себе не валидный путь к папке, он идентифицирует только сервер. Чтобы попасть в папку, нужно добавить имя общей папки.
Пути к устройству
Путь к устройству начинается с одного из следующих фрагментов:
Синтаксис доступа к локальной папке выглядит как один из этих вариантов:
Также существует специальный синтаксис для описания UNC-путей как путей к устройству:
Нормализованные и литеральные пути к устройству
Так в чём же разница между \? и \.?
В обычном случае, когда вы передаёте путь операционной системе Windows, она очищает его, прежде чем использовать. Этот процесс называется нормализацией, подробнее о нём мы поговорим ниже.
Путь \? пропускает этот этап очистки, а \. не пропускает. Поэтому можно назвать пути \? литеральными путями к устройству, а \. — нормализованными путями к устройству.
Допустим, по какой-то непонятной причине, у вас есть файл с именем . (например, он мог быть создан на сетевом диске в другой системе). В обычном случае вы бы не смогли получить доступ к нему, потому что нормализация резолвит его в родительскую папку, но благодаря литеральному пути к устройству это можно сделать.
Относительные пути
Относительные пути — это неполные пути, которые для уникальной идентификации местоположения необходимо скомбинировать с другим путём.
Пути, относительные к текущей папке
Эти пути используют в качестве начальной точки текущую папку, например, . Torquay относится к подпапке текущей папки, а . Wales относится к подпапке родителя текущей папки.
Папки, относительные к корню текущего диска
Если начать путь с одной , то путь интерпретируется как относительный к корню текущего диска. Поэтому если вы находитесь в любом месте диска E: и введёте Africa, то окажетесь в E:Africa.
Когда доступ к текущей папке выполняется через UNC-путь, то путь, относительный к текущему диску, интерпретируется относительно к общей корневой папке, допустим \EarthAsia.
Пути, относительные к текущей папке диска
Эти более редко используемые пути указывают диск без обратной косой черты, например E:Kreuzberg, и интерпретируются относительно к текущей папке этого накопителя. На самом деле это имеет смысл только в контексте оболочки командной строки, отслеживающей текущую рабочую папку для каждого диска.
Это единственный тип путей, не поддерживаемый Fileside, потому что в нём нет понятия текущей папки каждого диска. Текущую папку имеют только панели.
Нормализация
Как говорилось ранее, все пути, за исключением литеральных путей к устройству, перед использованием проходят процесс нормализации. Этот процесс состоит из следующих этапов:
Таким образом, в общем случае можно указывать пути Windows при помощи косых черт.
Правила именования в Windows
Теперь рассмотрим отдельные элементы, из которых состоит путь. Существует множество ограничений имён, которые можно использовать для файлов и папок.
Запрещённые символы
В имени нельзя использовать следующие символы:
значением ASCII меньше 32
Хитрое двоеточие
В большинстве случаев : также запрещено.
Однако существует экзотическое исключение в виде изменённых потоков данных NTFS, в которых двоеточие используется в качестве разделителя внутри имени. Малоизвестно, что в некоторых контекстах можно хранить внутри файла скрытый фрагмент данных, добавляя к его имени суффикс, которому предшествует двоеточие.
Опасная точка
Символ . допустим внутри или в начале имени, но запрещён в конце.
Начинающие и завершающие пробелы
Любопытно, что Windows допускает пробелы в начале, но не в конце имён. Так как имя с пробелами в начале и конце часто выглядит похожим на имя без пробелов, обычно это ужасная идея, и при переименовании или создании файлов Fileside автоматически удаляет их.
Запрещённые имена
По историческим причинам нельзя использовать следующие имена:
CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9.
Это включает и имена с расширениями. Например, если вы назовёте файл COM1.txt, то внутри он преобразуется в \. COM1 и интерпретируется самой Windows как устройство. А это не то, что нам нужно.
Чувствительность к регистру
В большинстве случаев Windows не делает различий между символами в верхнем и нижнем регистре в путях.
C:Polish hamlet, c:polish Hamlet, C:Polish Hamlet и C:POliSh hAMlET считаются абсолютно одинаковыми.
Однако с обновления Windows 10 за апрель 2018 года файловые системы NTFS имеют опцию включения чувствительности к регистру на уровне папок.
Ограничения длины
Мы ещё не закончили: ограничения есть и на длину.
Традиционно длина пути в Windows не могла превышать 260 символов. Даже сегодня это справедливо для некоторых приложений, если только их разработчики не предприняли мер для обхода этого ограничения.
Этот обход заключается в преобразовании каждого пути в литеральный путь к устройству перед передачей его Windows. Сделав это, мы сможем обойти ограничение в 260 символов и увеличить его до чуть более щедрого предела в 32767 символов.
Имена файлов и папок не могут быть длиннее 255 символов.
Так много способов сказать одно и то же
Вооружённые этим знанием, мы понимаем, что можем создать почти неограниченное количество различных строк путей, и все они будут ссылаться на одну и ту же папку.
Вот что получаешь, когда приходится обеспечивать полную обратную совместимость в течение нескольких десятилетий!
При работе в операционной системе Windows Vista в аналогичных случаях появляется диалоговое окно Переименование с сообщением «Указано неверное имя устройства».
Запрещенные имена Если вы попытаетесь создать файлы или папки со следующими именами: con, nul, prn, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 (регистр букв — прописные буквы или строчные — значения не имеет), — система в таких случаях вместо введенного вами «запрещенного» имени выведет имя по умолчанию, например, Новая папка, или Текстовый документ, или Документ Microsoft Word. При этом Windows Vista выведет окно Переименование с сообщением «Указано неверное имя устройства».
Дело в том, что по «Соглашению об именованиях» эти символы и имена зарезервированы файловой системой для «внутренних» системных нужд, применять их пользователю запрещено.
Использование этих символов может привести к получению неожиданных результатов. Имя не должно содержать пробелов.
Будет создан каталог с именем com1. Удалить его обычным путем вы не сможете: появится окно Ошибка при удалении файла или папки с сообщением Не удается удалить com1. Нет доступа. Диск может быть переполнен или защищен от записи, либо файл занят другим приложением или Н е удается удалить com1. Не удается найти файл. Проверьте правильность указания пути и имени файла. Для удаления каталога com1 нужно ввести команду rmdir .com1 (Enter).
Системные папки Также Windows не позволит переименовать или переместить системные папки, такие как «Documents and Settings» (в Vista — «Пользователи»), «Windows», «System32», «Program Files». Они необходимы для нормальной работы Windows (если каким-либо образом — не в среде Windows — их переименовать/переместить, то вы не сможете загрузить операционную систему).