У меня есть несколько файлов в папке с именами в форме: SOMETEXT1 номер SOMETEXT2.mp3 или SOMETEXT номер.mp3. Я хочу переименовать их в номер SOMETEXT SOMETEXT2.mp3 или номер SOMETEXT.mp3. Используя bash и обычные инструменты командной строки GNU, как мне этого добиться?

1 ответ1

1

Использование perl-rename (иногда называется prename):

prename -v 's/^(.+) (\d+)( .+|\.[^.]+)$/\2 \1\3/' *

Используйте -n чтобы просто проверить без переименования.

То же самое с bash:

re='^(.+) ([0-9]+)( .+|\.[^.]+)$'
for file in *; do
    new=$file
    if [[ "$file" =~ $re ]]; then
        new="${BASH_REMATCH[2]} ${BASH_REMATCH[1]}${BASH_REMATCH[3]}"
    fi
    if [[ "$new" != "$file" ]]; then
        mv -v "$file" "$new"
    fi
done

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