Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как в bash в $((n++)) и $((n--)) добавлять не по одной цифре, а через 2,3,n?  (Прочитано 855 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 286
  • If it ain't broke, don't fix it
    • Просмотр профиля
Здравствуйте!

Нашёл на форуме:
n=1 ; for i in * ; do printf "mv $i %03d_$i\n" $((n++)); done|bashэто для добавления номеров к именам файлов.
Как изменить команду, чтобы добавлять номера не через одну цифру, а положим через 2 или 3, ну в общем n? (1,4,7…)
Или нужна совершенно другая команда, основаная на других принципах?
Я не программист, не специалист IT, к сожалению могу воспринять только готовое :(
https://webhamster.ru/site/page/index/articles/projectcode/181 LoLo Switcher. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 4054
  • Capture the truth
    • Просмотр профиля
могу воспринять только готовое
плохо =(

Быстрокод (не тестил особо)

Без лидирующих нулей.
n=1 ; for i in * ; do mv -v "$i" "${n}_$i" ; n=$(( n+2 )); done
001-999
n=1001 ; for i in * ; do mv -v "$i" "${n:1}_$i" ; n=$(( n+2 )); done
n+2 - шаг. Несложно догадаться, в данном примере +2
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 286
  • If it ain't broke, don't fix it
    • Просмотр профиля
ALiEN175, спасибо!
Я пробовал, конечно, но вот так это не работает :) :
n=1 ; for i in * ; do printf "mv $i %03d_$i\n" $((n+2)); done|bashА для того, чтобы „сочинить“ :)
"$i" "${n:1}_$i"там где „do printf“ это мне долго читать нужно…
Спасибо ещё раз, я Вам очень признателен!
https://webhamster.ru/site/page/index/articles/projectcode/181 LoLo Switcher. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 4054
  • Capture the truth
    • Просмотр профиля
n=1 ; for i in * ; do printf "mv $i %03d_$i\n" $((n+2)); done|bash
тут счётчик не работает. Значение n не обновляется.




Пользователь добавил сообщение 14 Август 2019, 00:15:42:
Код: Bash
  1. n=1                      # Устанавливаем начальное значение счётчика
  2. for i in *               # Для переменной i перечисляем все папки/файлы в текущем каталоге (цикл)
  3.  do                      # делаем
  4.     mv -v "$i" "${n}_$i" # переименовываем (AAA -> 1_AAA) (Файл -> Счётчик_Файл)
  5.     n=$(( n+2 ))         # Увеличиваем счётчик на 2
  6.  done                    # Готово, цикл закончен

« Последнее редактирование: 14 Август 2019, 00:15:42 от ALiEN175 »
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6011
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Код: Bash
  1. n=1 ; for i in * ; do mv $i $(printf "%03d_$i" $n) ; ((n+=2)) ; done
Но для переименования проще использовать rename
Код: Bash
  1. rename -n 's/^/sprintf("%03d_", $^R+=2)/e' *
« Последнее редактирование: 14 Август 2019, 12:02:37 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 286
  • If it ain't broke, don't fix it
    • Просмотр профиля
Спасибо ALiEN175, Azure, за развёрнутые ответы!

(Нажмите, чтобы показать/скрыть)
https://webhamster.ru/site/page/index/articles/projectcode/181 LoLo Switcher. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6011
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
символ разрыва строки в имени файла
Про кавычки не слышали?
Код: Bash
  1. n=1 ; for i in * ; do mv "$i" "$(printf "%03d_$i" $n)" ; ((n+=2)) ; done
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 286
  • If it ain't broke, don't fix it
    • Просмотр профиля
Про кавычки не слышали?
Я даже их видел :) ! Я использовал ранее Uniti. Потом его отменили. Я решил что буду пользоваться xubuntu, а там в терминале кавычки „от рождения“ т.е. подставляются автоматически! Очень мне понравилось!
l -1
'alfalfa '$'\n''trefoil '$'\n''sainfoin.txt'
'люцерна '$'\n''клевер '$'\n''эспарцет.txt'
А ваша прекрасная комбинация работает, спасибо!
l -1
'001_alfalfa '$'\n''trefoil '$'\n''sainfoin.txt'
'003_люцерна '$'\n''клевер '$'\n''эспарцет.txt'
Я где-то вдали понимаю, что тут разное применения кавычек, я это читал в основном по теме экранирование.
https://webhamster.ru/site/page/index/articles/projectcode/181 LoLo Switcher. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

 

Страница сгенерирована за 0.249 секунд. Запросов: 24.