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

Не настолько легко, если Вы хотите принять во внимание wlan и другие альтернативные интерфейсы. Если Вы знаете, для какого интерфейса Вы хотите адрес (например, eth0, первая плата Ethernet), можно использовать это:

ip="$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"

Другими словами, получите меня информация о конфигурации сети, ищите eth0, получите ту строку и следующую (-A 1), получите только последнюю строку, получите вторую часть той строки при разделении с :, затем получите первую часть этого при разделении с пространством.

20
07.11.2011, 15:15
4 ответа

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
21
27.01.2020, 19:44
  • 1
    это работает отлично. Искренне поблагодарите Вас =) –  Raphaël 07.11.2011, 15:13

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

С zsh:

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

С другими оболочками:

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


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

С zsh:

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

С ksh93:

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

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

С другими оболочками:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
3
27.01.2020, 19:44
  • 1
    другая большая причина установить zsh :).... zmv –  danidee 09.08.2016, 17:21

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

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

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

0
27.01.2020, 19:44

В Fish Shell на OSX:

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

Fish Shell: https://fishshell.com/

2
27.01.2020, 19:44

Теги

Похожие вопросы