1

Скажем, у меня есть каталог с большим количеством файлов с расширением .bak, и я хочу удалить его из каждого. Какой самый простой способ сделать это? Я имею в виду команду, которая будет делать то, что можно ожидать от mv *.bak * .

2 ответа2

3

С zmv

Zsh имеет zmv , который предлагает очень простой интерфейс для переименования (или копирования) файлов:

autoload zmv
zmv '(*).bak' '$1'

Каждая пара скобок содержит группу, к которой затем можно получить доступ с помощью $1 , $2 и т.д. Вот еще несколько примеров.

Другой способ сделать это с помощью zmv - использовать опцию -W , которая работает для простых задач переименования:

zmv -W '*.bak' '*'

Самый простой способ сделать zmv всегда доступным - это поместить оператор autoload zmv в ваш ~/.zshrc .


С Bash-синтаксисом

Если вы хотите использовать "простой" синтаксис Bash для работы со строками, это можно сделать следующим образом:

for f in *.bak; do mv -- "$f" "${f%.bak}"; done

С помощью инструмента rename

Существует инструмент rename , который доступен в некоторых Linux и в OS X через brew install rename.

rename 's/.bak$//' *

$ Необходим для захвата конца строки, а не частей в середине имен файлов, которые содержат .bak .

0

В дополнение к полученным точным ответам, существует также очень старомодный способ, который должен работать в любой POSIX-совместимой системе - даже без современной оболочки, такой как bash или zsh:

for f in *.bak; do mv $f `echo $f | sed -e 's/\.bak$//'`; done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .