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

Я хочу переименовать следующие файлы: 0, 0.001, 0.002, 0.003 …, 0.035

в 0, 1, 2, 3 …, 35

Как мне это сделать?

2 Solutions collect form web for “Переименование нескольких файлов с помощью сценария оболочки”

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 или . знак до конец. Для ex: 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

Дальнейшее чтение: расширение параметра

С 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 
  • проверить скрипты оболочки
  • Подстановка команд против перенаправления ввода-вывода?
  • .sh-файл, используемый sftp после загрузки и не может быть выполнен
  • После небольшого изменения кода «awk» печатает заголовок и пустые строки (не повторяется заголовок)
  • ln дает разные результаты при многократном запуске
  • Что не так с этим вызовом sed -i?
  • Соединения SSH, работающие в фоновом режиме, не выводятся, если несколько соединений были запущены одной и той же оболочкой
  • Самый быстрый и эффективный способ получить количество записей (строк) в gzip-сжатом файле
  • Как проверить папку внутри конкретной папки в сценарии оболочки?
  • Как назначить переменную из другой переменной в отдельном файле
  • Что означает «$ {x %% *}» в sh?
  • используя stdout дважды (но не tee, как я знаю)
  • Linux и Unix - лучшая ОС в мире.