У меня есть папка с рядом файлов с именем:
prefix_1234_567.png
prefix_abcd_efg.png
Я хотел бы пакетно удалить одно подчеркивание и средний контент, чтобы результат был следующим:
prefix_567.png
prefix_efg.png
Актуально, но не полностью пояснительно:
_*_
пустым.Ответы:
В вашем конкретном случае вы можете использовать следующую
bash
команду (bash
это оболочка по умолчанию в macOS):Примечание. Если есть вероятность, что имена ваших файлов начинаются с
-
, поместите--
перед ними [1]:mv -- "$f" "${f/_*_/_}"
Примечание:
echo
добавляется передmv
тем, чтобы выполнить пробный прогон. Удалите его, чтобы выполнить фактическое переименование.Вы можете запустить его из командной строки или использовать в сценарии.
"${f/_*_/_}"
представляет собой приложениеbash
расширения параметра : (первая) подстрока, соответствующая шаблону_*_
, заменяется литералом_
, фактически вырезая средний токен из имени._*_
это шаблон (выражение с подстановочными знаками, которое также используется для подстановки), а не регулярное выражение (чтобы узнать о шаблонах, запуститьman bash
и найтиPattern Matching
).Если вы часто сталкиваетесь с переименованием файлов в пакетном режиме, подумайте об установке специального инструмента, такого как
rename
утилита на основе Perl . В macOS вы можете установить его с помощью популярного менеджера пакетов Homebrew следующим образом:Вот эквивалент команды вверху с использованием
rename
:Опять же, эта команда выполняет пробный прогон; удалить,
-n
чтобы выполнить фактическое переименование.bash
решениюs/.../.../
выполняет подстановку текста, но, в отличие отbash
настоящих , используются регулярные выражения .[1] Назначение специального аргумента
--
, который поддерживается большинством утилит, состоит в том, чтобы сигнализировать, что последующие аргументы должны рассматриваться как операнды (значения), даже если они выглядят как опции из-за того, что они начинаются с-
, как отмечает Джейкоб К.источник
.*
->$1
), например RenameFoo bar S01E01 biz baz.ext
toS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
для сухих пробежек. Спасибо за чаевые!brew install rename
Для переименования файлов можно использовать
rename
утилиту:brew install rename
Например, чтобы изменить строку поиска во всех именах файлов в текущем каталоге:
Удалите параметр «n», чтобы применить изменения.
Больше информации:
man rename
источник
OS X
версииGNU bash
( x86_64-apple-darwin ) не включают утилиту переименования.brew install rename
rename -vs GLYCOPHORIN GLYCC *
и теперь он автоматически переименовывает 450+ файлов. И очень быстро.Вы можете использовать sed:
результат:
* чтобы сначала выполнить пробный прогон, замените
mv
в конце наecho
Объяснение:
источник
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(удалите,echo
чтобы фактически переименовать).У меня была партия файлов, которые выглядели так: be90-01.png, и мне нужно было заменить тире на подчеркивание. Я использовал это, что хорошо сработало:
источник
вы можете установить
rename
команду с помощьюbrew
. просто делайbrew install rename
и пользуйся.источник
С помощью
mmv
источник
sudo apt-get install mmv
.brew install mmv
.попробуй это
Вот еще один способ:
источник