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


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

это работает отлично. Большое спасибо =)
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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.