Переименование нескольких файлов с помощью сценария оболочки

Я решил проблему, используя инструкции Амриша на Ask Ubuntu Stack Exchange, т.е. используя следующий код:

sudo rm /etc/resolv.conf
sudo ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
sudo resolvconf -u

2
17.07.2016, 17:06
2 ответа

решение bash (при условии, что включена опция оболочки extglob - см. руководство по сопоставлению с образцом )

for i in 0.* ; do mv "$i" "${i##0.*(0)}" ; done
  • $ {i ## удалить самое длинное совпадение с начала i переменной
  • 0. соответствует последовательности символов 0.
  • * (0) означает ноль или более вхождений 0

или это решение, предложенное @Costas, для которого не нужна опция extglob

for i in 0.* ; do mv "$i" "${i#${i%%[!0.]*}}" ; done
  • $ {i %% удалить самое длинное совпадение с конца i переменной
  • * любой символ, ноль или более раз
  • [! 0.] символы, кроме 0.
  • Итак, $ {i %% [! 0.] *} эффективно удаляет с первого не 0 или . до конца. Например: 35 удаляется для 0,035 , 1 для 0,001 , str0.00456a для 0str0.00456a и целая строка для str0.00456a
  • остальные символы (например: 0,0 для 0,035 и 0,00 для 0.001 передается в $ {i # , который затем удаляет эти символы из начала переменной, в результате чего 35 для 0,035 и 1 для 0,001

Дополнительная литература: Расширение параметров

3
29.04.2021, 00:12

С помощью rename (prename):

rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

-n выполните пробный запуск, если вас устраивают вносимые изменения, сделайте:

rename 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

Пример:

% rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
0.001 renamed as 1
0.002 renamed as 2
0.003 renamed as 3
0.035 renamed as 35
1
29.04.2021, 00:12

Теги

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