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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

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

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

zse

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

Оффлайн Azure

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

zse

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

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Azure, что гол пока.
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • 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

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

Оффлайн ALiEN

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

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

« Последнее редактирование: 16 Августа 2018, 01:38:03 от 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

zse

  • Автор темы
  • Гость
     — Я Вас, ALiEN175, приветствую! Срасибо за проявленный интерес!
     — Вопрос вообще вырос из сканирования листов которые имеют данные на лицевой и обратной строне 😈, которые я назвал „сдвоенные😇“. Должно быть всё же отдельное другое слово для таких листов!
     — Как правило там названия файлов максимум могут быть с пробелами.
     — В скрипте rename нужно поискать внутренний счётчик. Должжен наверное быть.
     — Вот есть приблизительно такая команда с гирляндой кавычек:
Код: (bash) [Выделить]
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

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • 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.07 секунд. Запросов: 25.