Как переименовать сразу несколько файлов

Учитывая, что у меня есть папка, содержащая более 170 файлов с именами типа 'SM-RVT70UQTNWC02.png' $ '\ r' как я могу быстро изменить это на SM-RVT70UQTNWC02.png ? Я попытался применить решение из этого вопроса , однако мне сложно заставить мое регулярное выражение '* (. *)' \ $ '\\ r' работать с переименуйте , так как я получаю много ошибок, например:

Scalar found where operator expected at (eval 8) line 1, near "*)$\"
        (Missing operator before $\?)
Backslash found where operator expected at (eval 8) line 1, near "$\\"
        (Missing operator before \?)
syntax error at (user-supplied code), near "*)$\"
3
задан 16 December 2020 в 10:26

2 ответа

Предполагая, что вы указали файл с помощью ls , кавычки не являются частью имени файла, они используются, чтобы помочь понять странные имена файлов. Рассматриваемый файл является объединением из SM-RVT70UQTNWC02.png и возврат каретки (байт 0x0D), который в Bash может быть представлен автор: $ '\ r' (см. цитирование ANSI ).

Чтобы удалить завершающий символ возврата каретки из файлов .png в текущий каталог,

rename 's/\r$//' *.png?

Синтаксис означает: s ub заменить возврат каретки \ r в конец строки $ ничем.

A Альтернативой, совместимой с POSIX, будет

for f in *.png"$(printf '\r')"; do mv -- "$f" "${f%?}"; done

Printf - переносимый способ указать возврат каретки, а $ {f%?} удаляет последний символ имени файла.

2
ответ дан 3 January 2021 в 22:46

В этой папке запустите:

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

как однострочный, это становится

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

Это перебирает все файлы, соответствующие *. Png * в текущем каталоге и переименовывает (перемещает) их, отсекая все, начиная с последнего появления .png , а затем снова добавляя .png . Использование %% вместо этого приведет к отключению с первого появления .png . Вы можете опустить -i , если не хотите подтверждать перезапись существующих файлов.

2
ответ дан 3 January 2021 в 22:46

Другие вопросы по тегам:

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