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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 283
  • 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. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6725
  • 20% Cooler
    • Просмотр профиля
могу воспринять только готовое
плохо =(

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

Без лидирующих нулей.
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
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 283
  • 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. Конфигурирование… Рекомендую!!! Кардинально может решить проблемы переключения раскладки…

Оффлайн ALiEN

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




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

« Последнее редактирование: 14 Августа 2019, 00:15:42 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Azure

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

Оффлайн xub

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

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

Оффлайн Azure

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

Оффлайн xub

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 283
  • 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.062 секунд. Запросов: 25.