Учитывая, что у меня есть папка, содержащая более 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 "*)$\"
Предполагая, что вы указали файл с помощью 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%?}
удаляет последний символ имени файла.
В этой папке запустите:
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
, если не хотите подтверждать перезапись существующих файлов.