Какой символ заменяет только один символ в имени файла

Обновлено: 21.11.2024

Преобразование «Замена символов» имеет два режима работы. Одновременно может быть активен только один режим.

Режим поиска/замены

Преобразование «Замена символов» будет искать во входном файле последовательности символов, соответствующие заданным последовательностям поиска, и, если совпадение будет найдено, оно будет заменено последовательностью символов замены. Последовательности символов поиска и замены задаются в настройках шага преобразования. Можно настроить более одной последовательности поиска, разделяя последовательности запятой.

Этот режим можно настроить одним из двух способов:

  1. Количество последовательностей поиска равно единице или больше. Последовательность замены только 1.
  2. Несколько последовательностей поиска указываются через запятую (,) и только одна последовательность замены. В этом случае все последовательности поиска имеют одинаковую соответствующую последовательность замены. Преобразование будет искать во входном файле совпадения с указанными последовательностями поиска. Если несколько последовательностей соответствуют одному и тому же тексту для замены, будет заменена только первая найденная последовательность, которая полностью соответствует тексту.
  3. ПримечаниеПустая последовательность замены является допустимой конфигурацией. Если это указано, при обнаружении совпадения для поиска совпадающая последовательность будет эффективно удалена из содержимого файла.
  4. Количество последовательностей поиска и замены одинаково.
  5. В этом случае каждая последовательность символов поиска имеет свою собственную последовательность символов замены. Корреляция между последовательностями поиска и замены основана на их положении в конфигурации (первая последовательность поиска соответствует первой последовательности замены, вторая последовательность поиска — второй последовательности замены и т. д.).
  6. Преобразование будет искать во входном файле совпадения с указанными поисковыми последовательностями. Когда найдено совпадение с последовательностью поиска, оно будет заменено собственной соответствующей последовательностью замены. Если несколько последовательностей соответствуют одному и тому же тексту для замены, будет заменена только первая найденная последовательность, которая полностью соответствует тексту.

Поиск/линейка

Преобразование «Замена символов» удалит все строки файла, начинающиеся с указанной последовательности символов поиска. Последовательность символов поиска задается в настройках шага преобразования. Можно настроить более одной последовательности поиска, разделяя последовательности запятой.

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

Персонажи заменяют конфигурацию

Чтобы добавить шаг преобразования «Замена символов» в шаблон пакета маршрута, выполните следующие действия:

  1. Назначить фильтрацию файлов.
  2. Определить, продолжать ли выполнение маршрута при сбое шага.
  3. Определите рабочий режим. В режиме «Найти/Заменить» заполните поля «Найти» и «Заменить». В режиме полосы «Поиск/Линия» выберите Линии полосы, начинающиеся со строки поиска. и заполните поле "Найти".
  4. Выберите вариант кодировки исходного файла.
  5. Выберите вариант кодировки выходного файла.
  6. Определить действия после преобразования.

В следующих разделах приведены сведения о настройке шага преобразования "Заменить":

Связанные темы:

Входные файлы

Настройки входных файлов состоят из выбора Обрабатывать только результат предыдущего шага и определения фильтра имен.

Обрабатывать только результат предыдущего шага

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

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

Примечание Настройки фильтра имен также будут применяться к заданному набору входных файлов.

Фильтр имени

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

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

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

Выбор текстового файла определяется на основе расширения файла и типа MIME, который соответствует этому расширению. Типы MIME определяются в файле конфигурации mime.types, расположенном в:

Инструмент администратора > Конфигурация сервера > Файлы конфигурации

Кроме того, некоторые типы MIME можно определить как текст, настроив параметр конфигурации сервера AdvancedRouting.TextMimeSubtypes. Например, чтобы настроить обработку типа MIME application/xml как текста, добавьте xml в параметр конфигурации сервера.

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

Шаблоны имен файлов

Сопоставление с образцом имени файла поддерживает синтаксические выражения glob и regexp.

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

    Соответствует файлам, оканчивающимся на .xml .

Если задан синтаксис Регулярное выражение, строковое представление имени файла сопоставляется с регулярными выражениями Perl5.003. Также поддерживаются расширенные регулярные выражения Perl5. Например:

    Соответствует файлам, оканчивающимся на .xml или .txt .

Продолжить выполнение маршрута при сбое шага

Если установлен флажок Продолжать выполнение маршрута при сбое шага, выполнение маршрута продолжается, даже если выполнение шага завершается сбоем.

Режим поиска/замены

В режиме "Найти/Заменить" заполните поля "Найти" и "Заменить".

Укажите последовательность символов поиска. Можно использовать нотацию Unicode (\uXXXX). Можно указать несколько последовательностей символов поиска, разделенных запятой (,).

Примечание Запятая должна быть в кодировке Unicode (\002c), если используется в последовательности поиска.

Заменить

Укажите последовательность символов замены. Можно использовать нотацию Unicode (\uXXXX). Можно указать несколько последовательностей символов замены, разделенных запятой (,). Количество последовательностей замены должно быть равно количеству последовательностей поиска или быть одной последовательностью.

Примечание Если оставить это поле пустым, это допустимая конфигурация. Пустая последовательность замены рассматривается как пустой символ.
< /tr>

Поиск/линейка

Если найти/линейную полосу, выберите полосу линий, начинающуюся со строки поиска. и заполните поле «Найти».

Кодировка файла

Должна быть настроена кодировка исходного файла. Настройка кодировки выходного файла не является обязательной. Если он не установлен, кодировка выходного файла будет такой же, как кодировка исходного файла.

Кодировка исходного файла

Кодировка файла, который будет преобразован, определяется именем набора символов, поддерживаемого SecureTransport. В поле Кодировка исходного файла: есть функция автозаполнения, в которой перечислены совпадающие наборы символов, поддерживаемые SecureTransport.

Кодировка выходного файла

Кодировка создаваемого файла определяется именем набора символов, поддерживаемого SecureTransport. В поле Кодировка выходного файла: есть функция автозаполнения, в которой перечислены совпадающие наборы символов, поддерживаемые SecureTransport.

Действие после преобразования

Имена выходных файлов будут такими же, как имена входных файлов. Чтобы изменить имена файлов, используйте шаг преобразования «Переименовать». Чтобы настроить шаг преобразования «Переименовать», см. раздел «Переименовать».

Закрыто. Этот вопрос не соответствует правилам переполнения стека. В настоящее время ответы не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Stack Overflow.

Закрыт 3 года назад.

Как удалить определенные символы или заменить определенные символы другими символами при выполнении какого-либо пакетного файла, для имен файлов всех файлов в папке Windows за один раз, есть ли для этого команда DOS?

5 ответов 5

Используйте PowerShell, чтобы сделать что-нибудь умнее для командной строки DOS. Здесь я показал, как выполнить пакетное переименование всех файлов и каталогов в текущем каталоге, содержащих пробелы, заменив их знаком подчеркивания _.

EDIT :
При необходимости можно использовать команду Where-Object для фильтрации недопустимых объектов для последующего командлета ( команда-пусть).Ниже приведены несколько примеров, иллюстрирующих гибкость, которую он может вам предоставить:

Чтобы пропустить любые файлы документов

Для обработки только каталогов (версия до 3.0)

В PowerShell версии 3.0 представлены новые флаги Dir. Там же можно использовать Dir -Directory.

Чтобы пропустить любые файлы, уже содержащие символ подчеркивания (или какой-либо другой символ)

@MERTDOĞAN Rename-Item автоматически игнорирует запрос на переименование, если путь и имя назначения остаются прежними. Например, если пробелы для замены не найдены. Никаких ошибок не выдает. Если вы сообщите нам точные команды PS, которые вы использовали, возможно, мы сможем решить вашу проблему.

Однострочная команда в Windows PowerShell для удаления или переименования определенных символов выглядит так, как показано ниже. (здесь пробел заменяется подчеркиванием)

Эй, я не совсем понимаю, где я должен ввести эту команду и как настроить таргетинг на нужный мне каталог.

Применимо только в ОС Windows. Запустите Windows PowerShell. Перейдите в папку и выполните команду, как указано выше (не забудьте изменить параметры поиска)

Ответы PowerShell хороши, но команда Rename-Item не работает в одном и том же целевом каталоге, если только ВСЕ ваши файлы не содержат нежелательный символ (сбой при обнаружении дубликатов).

Если вы похожи на меня и у вас есть сочетание хороших и плохих имен, попробуйте вместо этого этот скрипт (пробелы будут заменены символом подчеркивания):

Это решение сработало для меня (поскольку принятый ответ вызовет ошибки, я полагаю, из-за нескольких файлов, не содержащих заменяемый символ, как вы упомянули). +1, было бы здорово получить немного больше пояснений о флаге -Recurse и команде Move-Item в этом контексте.

Также лучшее решение для меня. Легко выдает ошибку «используется другим процессом». Закрытие всех моих других окон исправило это. Спасибо, Дастин :)

Этот пакетный файл может помочь, но у него есть некоторые ограничения. Символы имени файла = и % не могут быть заменены (здесь они взяты из памяти), и ^ в именах файлов также может быть проблемой.

В этой части %newname: =_% в каждой строке нижнего блока он заменяет символ после : на символ после =, так что в его нынешнем виде набор символов будет заменен символом подчеркивания.

Удалите эхо, чтобы активировать команду ren, так как она будет просто печатать команды в окне консоли, пока вы этого не сделаете.

Он будет обрабатывать только текущую папку, если вы не добавите /s в часть команды DIR, и тогда он также будет обрабатывать все папки в текущей папке.

Чтобы удалить определенный символ, удалите символ после знака =. В %newname:z=% подобная запись удалит все символы z (без учета регистра).

Как переименовать все файлы/подкаталоги в текущей папке?

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

следует переименовать в

7 ответов 7

В любой оболочке вы можете зацикливаться на файлах, имя которых содержит пробел. Заменить пробелы символами подчеркивания в bash, ksh и zsh легко с помощью конструкции $.

В Debian, Ubuntu и производных можно использовать переименование Perl (другие дистрибутивы содержат другую программу rename , и эта программа здесь бесполезна).

Обязательное решение zsh:

Обязательное решение POSIX:

@JulianLai s/…/…/g означает замену всех вхождений. В мануале это не очень хорошо описано. Если вы хотите переименовать каталоги, есть способы, пожалуйста, найдите его (думаю, я видел его раньше), и если вы не можете найти его, задайте новый вопрос.

Если вам также нужно переименовать файлы в подкаталогах, а ваша находка поддерживает предикат -execdir, вы можете сделать это

Спасибо @glenn jackman за предложение -depth для поиска и за то, что заставил меня задуматься.

Обратите внимание, что в некоторых системах (включая системы GNU/Linux) функция find может не найти файлы, имя которых содержит пробелы, а также последовательности байтов, которые не образуют допустимые символы (типично для медиафайлов с именами, содержащими символы, отличные от ASCII). закодирован в кодировке, отличной от локали). Установка языкового стандарта на C (как в LC_ALL=C find. ) решит проблему.

Может кто-нибудь уточнить, что следует изменить, чтобы это можно было использовать для замены других символов. Например, я не мог заставить его работать для замены _ точкой (.)

@benba: это не вторая команда bash, вы должны интерпретировать ее как: bash -c script-string $0 $1 $2 и т. д., поэтому во второй раз, когда появляется строка bash, она находится в позиции $0 и, таким образом, дает имя сценария.

Для этого можно использовать переименование (здесь предполагается переименование из util-linux , а не perl):

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

Если вы хотите выполнить рекурсивное сопоставление, вы можете это сделать, но вам, возможно, придется выполнить переименование пару раз, чтобы отловить все элементы в каталогах, которые сами были переименованы:

« rename переименует указанные файлы, заменив первое вхождение from в их имени на to». Так что это будет работать только для файлов с одним пробелом в имени. (Вы можете вызвать переименование в цикле, но здесь это не совсем подходящий инструмент.)

Другим вариантом может быть mmv , если он установлен.

В Debian/Ubuntu, основываясь на ответах Калеба и Жиля, мне помогло рекурсивное переименование файлов:

Примечание. Чтобы просмотреть, какие файлы и как будут переименованы, используйте ключ -n с параметром rename :

Еще одно примечание: установка globstar приводит к тому, что ** соответствует файлам во всех подкаталогах, поэтому, если требуется только текущий каталог, не устанавливайте globstar и не используйте * вместо ** .

Еще одно замечание: команду rename необходимо запускать более одного раза для файлов с несколькими вхождениями поискового запроса.

Это работает, только если каталоги не содержат пробелов. (переименование b/c d в a_b/c_d не сработает, вам нужно сначала переименовать b/c d в b/c_d , а затем b в a_b ).

Ну, скорее, столько раз, сколько существует вложенных уровней каталогов с пробелами. В идеале вы хотите сначала пройти глубину каталога и преобразовать только базовое имя файла, как в принятом решении. Также обратите внимание, что ** в bash исключает файлы точек и пересекает символические ссылки.

Если вы не разбираетесь в регулярных выражениях (а я нет!), и вы можете запускать приложения, разработанные для kde (используете ли вы рабочий стол kde-k или у вас установлены его библиотеки), то krename — отличный выбор. графическая утилита, которая позволяет вам видеть до и после до внесения изменений. Он имеет ряд простых преобразований в качестве опций, а также поддерживает регулярные выражения. Вы даже можете объединить несколько последовательных преобразований в одно переименование, чтобы вам не пришлось разрабатывать одно сложное преобразование, которое выполняет все сразу. Также есть возможность продолжить переименование тех же файлов после применения переименования.

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

(Учитывая, что вы находитесь в каталоге, в котором хотите выполнить эту операцию).

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками linux bash rename или задайте свой вопрос.

Связано

Связанные

Горячие вопросы о сети

Чтобы подписаться на этот RSS-канал, скопируйте и вставьте этот URL-адрес в программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.24.41762

Linux является зарегистрированным товарным знаком Линуса Торвальдса. UNIX является зарегистрированным товарным знаком The Open Group.
Этот сайт никоим образом не связан с Линусом Торвальдсом или The Open Group.

У меня есть несколько файлов с такими именами: screenshot 13:25.jpg
Windows не может открыть эти файлы, вероятно, из-за ":".

Как его заменить?

8 ответов 8

В терминале перейдите в нужный каталог и запустите это.

Это приведет к предварительному просмотру переименования. Он должен заменить : на - .

Если это выглядит правильно, удалите букву n в конце, и тогда он выполнит фактическое переименование.

Примечание. Версии Ubuntu выше 17.04 не поставляются с rename , но он по-прежнему доступен в репозиториях по умолчанию, поэтому используйте sudo apt install rename, чтобы получить его

Спасибо за ваш ответ. Я попробовал, и у меня возникла следующая проблема: шаблон подстановки не завершается на (eval 1) строке 1.

@user236152 Извините, я немного сошел с ума из-за экранирования обратной косой черты (был на автопилоте!). Удалена пара, и теперь это должно быть действительным.

Возможно, простой скрипт Nautilus, который заменяет все такие символы, которые могут вызвать проблемы на других платформах (выполняется на всех выбранных файлах), может быть полезен для "мультиплатформенных" людей.

Зачем его использовать? Он показывает вам, что он делает (облегчает откат, если вы допустили ошибку). Почему в конце? Просто чтобы вы могли легко удалить его (или n ).

@nightcrawler Вы должны иметь возможность связывать полностью отдельные замены: rename 's/\:/-/g; с/%28//г; с/%29//г' .

Вот чистое решение bash:

Формат $ заменит все вхождения шаблона заменой в переменной $var . Дополнительную информацию о возможностях обработки строк в bash см. здесь.

Если вы хотите сделать это для нескольких персонажей, вы можете просто поместить их в класс символов. Так, например, чтобы заменить все ; , : , = , + , % , , с подчеркиванием, вы можете сделать:

В основном идея состоит в том, что [ ] означает любой из перечисленных символов .Таким образом, помещая всех персонажей, которых вы хотите заменить, в класс символов, вы обрабатываете их всех одновременно.

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

С конкретными символами, которые вы просили, все немного сложнее, потому что некоторые из них нужно экранировать (я игнорирую /, поскольку *nix не допускает его в именах файлов, чем Windows, так что выиграл не проблема):

Обратите внимание, что я избежал \ , ' и ", добавив \ перед каждым.

Можно ли это улучшить, заменив несколько отдельных символов (например, все те, которые не принимаются Windows) другими?

Спасибо, это может помочь создать сценарий Nautilus, который делает имена выбранных файлов совместимыми с Windows.

Если вы предпочитаете графический интерфейс, установите pyrenamer:

Он имеет десятки вариантов шаблонов и форматов переименования.

Я предпочитаю графический интерфейс, но в качестве расширения Nautilus, т. е. Nautilus Actions Extra:

Затем, когда вы выбираете файлы для переименования и нажимаете "Переименовать" в контекстном меню, вам предлагается множество вариантов переименования файлов.

В пакете renameutils есть удобная программа qmv, которая обеспечивает интерактивное пакетное переименование. Вы запускаете его в каталоге или списке файлов, и он создает временный текстовый файл, содержащий их имена файлов, и запускает ваш любимый редактор. Когда вы выходите из редактора, все имена файлов, которые вы изменили, переименовываются соответствующим образом. qmv превращает проблему пакетного переименования в проблему редактирования текста.

В этом случае вы можете использовать qmv -f do *:* для редактирования имен всех файлов, содержащих двоеточие, а затем команду :%s/:/_/g в Vim (или соответствующий поисковый запрос). и-заменить в любом редакторе, который вы используете).

Опция -f do задает формат текстового файла, чтобы иметь только имя файла назначения, что упрощает поиск и замену. Формат по умолчанию имеет две копии имени файла в каждой строке, и вы редактируете только вторую. Это позволяет ему поступать правильно, если вы удалили или изменили порядок строк в файле, но это не всегда самый простой способ. Есть и другие форматы.

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

Читайте также:

Примечание Запятая должна быть в кодировке Unicode (\002c), если используется в последовательности замены.