Как я могу переименовать много файлов с помощью регулярных выражений?

20

Я хочу переименовать много файлов в Mac OS X (10.7.2) .. У меня нет пакета perl для renameкоманды.

Мои файлы имеют имена, такие как "T452-102456-0.png", и я хочу удалить часть "-0". Я знаю, что могу выполнить это действие, написав свой собственный скрипт php-cli, но мне хотелось бы узнать более простое и быстрое решение.

Рафаель
источник
Нет ли логического противоречия между «большим количеством PDF-файлов» и «Мои файлы имеют такие имена, как« T452-102456-0.png »»?
Манатворк
Ох ... тип файлов не имеет значения, но это правда ^^. Я редактирую, спасибо за ваш комментарий =)
Raphaël

Ответы:

21

Bash или Ksh вместе с этим mvмогли бы решить:

for f in *.png; do mv -n "$f" "${f/-0}"; done

В случае, если имя файла может иметь «0» после первой черты, а «-0» всегда перед точкой, вы можете включить эту точку и в выражение:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Но , как правило , что переименование просто, если у вас есть renameот Util-Linux пакет, который будет делать это тоже:

rename '-0.' '.' *.png
manatwork
источник
это работает отлично. Большое спасибо =)
Raphaël
3

Простой метод: файлы только в текущем каталоге

С зш:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

С другими снарядами:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Усовершенствованный метод: файлы в текущем каталоге и / или подкаталогах

С зш:

zmv '(**/)(*)-0(.png)' '$1$2$3'

С кш93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

С bash ≥4, как указано выше, но используйте shopt -s globstarвместо setкоманды.

С другими снарядами:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Жиль "ТАК - перестань быть злым"
источник
еще одна веская причина для установки zsh:) .... zmv
danidee
2

В Fish Shell на OSX:

for f in *.png; mv -n $f (basename $f -0.png).png; end

Fish Shell: https://fishshell.com/

jeffmcneill
источник
2
И по какой причине понизить? Это правильный ответ на вопрос.
Jeffmcneill
0

Если у вас есть mmvпакет:

mmv '*-0.png' '#1.png'

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

Тоби Спейт
источник