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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

Оффлайн xub

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Здравствуйте!

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

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 3320
  • 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 M5A78L-M LX3 :: AMD FX-4330 :: 8 GB RAM :: AMD Radeon R7 260X :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA 3150 :: ZSH

Оффлайн xub

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
ALiEN175, спасибо!
Я пробовал, конечно, но вот так это не работает :) :
n=1 ; for i in * ; do printf "mv $i %03d_$i\n" $((n+2)); done|bashА для того, чтобы „сочинить“ :)
"$i" "${n:1}_$i"там где „do printf“ это мне долго читать нужно…
Спасибо ещё раз, я Вам очень признателен!

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 3320
  • 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 M5A78L-M LX3 :: AMD FX-4330 :: 8 GB RAM :: AMD Radeon R7 260X :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA 3150 :: ZSH

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5858
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Код: 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

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Спасибо ALiEN175, Azure, за развёрнутые ответы!

(Нажмите, чтобы показать/скрыть)

Оффлайн Azure

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

Оффлайн xub

  • Автор темы
  • Любитель
  • *
  • Сообщений: 61
    • Просмотр профиля
Про кавычки не слышали?
Я даже их видел :) ! Я использовал ранее 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'
Я где-то вдали понимаю, что тут разное применения кавычек, я это читал в основном по теме экранирование.

 

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