| Примечание | Запятая должна быть в кодировке Unicode (\002c), если используется в последовательности замены. | < /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 , если вам не нужны интерактивные возможности.
Читайте также: