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


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

Автор Тема: Добавить номера к именам файлов в порядке убывания.  (Прочитано 561 раз)

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

zse

  • Автор темы
  • Гость
     — Приветствую всех!
     — В связи с необходимостью перенумеровать страницы после сканирования (многостраничный документ был напечатан с лицевой и изнаночной стороны листов) не нашёл готового  решения и просмотрев форум применил такую команду и решил задачу:
Код: Bash
  1. n=-27 ; for i in * ; do printf "mv -- $i %02d_$i\n" $((n++)); done|bash ;rename  -- 's/\-//' *
     — Цель была получить файлы в таком порядке после удаления листов без данных:
Код: Text
  1. 01_AAA_ScannedDocument-01.jpg
  2. 01_BBB_ScannedDocument-27.jpg
  3. 02_AAA_ScannedDocument-02.jpg
  4. 03_AAA_ScannedDocument-03.jpg
  5.  ≋≋≋≋≋≋≋≋≋≋≋↑↓↓↑↓↑≋≋≋≋≋≋≋≋≋≋
  6. 25_BBB_ScannedDocument-03.jpg
  7. 26_AAA_ScannedDocument-26.jpg
  8. 26_BBB_ScannedDocument-02.jpg
  9. 27_AAA_ScannedDocument-27.jpg
  10.  
     — „AAA“ лицевая сторона „ВВВ“ изнаночная.
     — Можно ли сделать эту команду более правильной и без применения rename? Как вообще правильно присвоить префикс файлам в виде убывающих номеров?
« Последнее редактирование: 14 Август 2018, 13:52:51 от zse »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
n=54; for f in *; do mv -v $f $(($((n--))/2))_$f ; done
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
     — Я Вас приветствую, Azure, благодарю!
     — А так и должно быть? Может ошибка где?
(Нажмите, чтобы показать/скрыть)
     — Это тест вашей команды а внизу моей для демонстрации желаемого результата…

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Azure, что гол пока.
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Вы же сами написали сдвоеные
01_AAA_ScannedDocument-01.jpg
01_BBB_ScannedDocument-27.jpg
Если просто в обратном порядкеn=10; for f in *; do mv -v "$f" "$(printf "%02d_$f" $((n--)))" ; done
« Последнее редактирование: 15 Август 2018, 09:42:40 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
     — Спасибо, Azure, всё работает. Забыл, сдвоенный  это как А4 и и А3 т.е. А3 по отношению к А4 это сдвоенный лист. А я под сдвоенным листом понимал лист напечатанный с лицевой и изнаночной стороны. Полная изоляция от русского языка сказывается :( . Буду разрабатывать новый алгоритм объяснения на русском, уже не первый раз попадал в ситуацию что меня не понимают… 😞

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
[off]
Буду разрабатывать новый алгоритм объяснения
Самый лучший алгоритм: пример исходных данных, пример того что должно получиться + минимальные комментарии.[/off]
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4247
  • Capture the truth
    • Просмотр профиля
for f in *
чуть позанудствую  :P : не сработает, если имя файла начинается с дефиса.
правильнее
for f in ./*
но с другой стороны, будут танцы с именами и директориями  :-\

Пользователь добавил сообщение 16 Август 2018, 00:50:51:
(Нажмите, чтобы показать/скрыть)

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

zse

  • Автор темы
  • Гость
     — Я Вас, ALiEN175, приветствую! Срасибо за проявленный интерес!
     — Вопрос вообще вырос из сканирования листов которые имеют данные на лицевой и обратной строне 😈, которые я назвал „сдвоенные😇“. Должно быть всё же отдельное другое слово для таких листов!
     — Как правило там названия файлов максимум могут быть с пробелами.
     — В скрипте rename нужно поискать внутренний счётчик. Должжен наверное быть.
     — Вот есть приблизительно такая команда с гирляндой кавычек:
Код: Bash
  1. find /home/fjf/1Kop3uHa/TESTS/ -type f -exec bash -c 'mv "$0" "`echo \"$0\"|sed -r "s:(.*)/:\1/$(date +%s%4N)_:"`"' {} \;
если там заменить счётчик $(date +%s%4N)_ которые даёт цифры от „рождества цифровой эры😇“ на обычный счётчик 01…02…03 ну maxdepth поставить какой нужен то будет ставить номер перед любым файлом …

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
rename -n 'my $n=@ARGV."_"; s/^/$n/; shift @ARGV;' *Или даже такrename -n 's/^/@ARGV."_"/e;shift @ARGV;' ** Для окончательного выполнения -n убрать
« Последнее редактирование: 16 Август 2018, 11:29:11 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

zse

  • Автор темы
  • Гость
     — Тестирую варианты, вечером расскажук результаты…
2018 Aug 16; 08:36 AM

Пользователь добавил сообщение 16 Август 2018, 19:18:23:
    — Попробовал я, Azure, вот такие результаты…
(Нажмите, чтобы показать/скрыть)
     — Начал знакомиться:
Цитировать
Command line
— Perl automatically provides an array called @ARGV, that holds all the values from the command line. You don't have to declare the variable, even if you use strict.
— This variable always exists and the values from the command line are automatically placed in this variable.
— If there are no parameters, the array will be empty. If there is one parameter on the command line, that value will be the only element in @ARGV. In the above example the @ARGV will have the following elements: -a, --machine, remote, /etc
     — Пока не очень всё понятно😞…
« Последнее редактирование: 16 Август 2018, 19:18:23 от zse »

 

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