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


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

Автор Тема: переименовать файл сдвигом +1  (Прочитано 1777 раз)

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

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
переименовать файл сдвигом +1
« : 10 Апреля 2014, 16:42:35 »
Добрый день


есть лог файл log_name.log который нужно переименовывать log_name.log.1 и тд +1

ежедневно log_name.log* будет архивироватся и не будет известно переименовывался он сегодня или нет

есть ли хотяб пример подобного ???

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #1 : 10 Апреля 2014, 17:16:39 »
Объясните что Вы хотите более подробно (для чего Вы это делаете). Потому как все (ну почти все, наверное) программы архивации имеют опцию --backup (ну или что-то подобное) которое позволяет не стирать старый файл, а переименовывать с добавлением суффикса.
Просто переименовать это же не проблема, главное что Вы объяснили алгоритм такого переименования…
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #2 : 10 Апреля 2014, 17:54:38 »
переименовывать nginx логи через bash скрипт
log_name.log.$index

Пользователь решил продолжить мысль 10 Апреля 2014, 17:59:45:
уже сам написал :)


#!/bin/sh

log_name=name
cnt_fl=`ls | grep "$log_name.[0-9][0-9]*$" | sort -n | wc -l`
cnt_now=`ls | grep "$log_name.[0-9][0-9]*$" | sort -Vr | cut -d . -f 3 | head -n 1`



if [ $cnt_fl -eq 0 ]
then
        mv $log_name.log $log_name.log.1
else
        cnt_add=$(($cnt_now+1))
        mv $log_name.log $log_name.log.$cnt_add
fi
     
« Последнее редактирование: 10 Апреля 2014, 18:47:15 от mouserok »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #3 : 10 Апреля 2014, 20:33:47 »
А почему не использовать logrotate?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #4 : 10 Апреля 2014, 20:44:12 »
Простите конечно, понимаю что Вы гордитесь собой и своим "произведением", но без ясного понимания что и как происходит ничего путного не получится.
Вы простите, но скажу как есть. Кроме общей корявости и загроможденности лишними командами есть и существенный недостаток. Что будет происходить с остальными файлами в каталоге? Откройте /var/log и посмотрите как должно было бы выглядеть. А то что у Васfile="/var/log/logname.log" ; mv $file `ls ${file}* | awk -F. ' END { OFS="." ; print $1,$2,$3+1 } '`
« Последнее редактирование: 10 Апреля 2014, 23:05:38 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #5 : 11 Апреля 2014, 10:31:23 »
Соображение по переименовыванию однотипных файлов.
На мой взляд, лучше добавлять date/time в качестве суффикса.
Единственный недостаток - это более длинные имена файлов.
Есть существенные плюсы - сортировка, наглядность и разрешение конфликтов с именами.
Но решать, что надо делать в любом случае за ТС.
« Последнее редактирование: 11 Апреля 2014, 10:33:39 от alexander.pronin »

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #6 : 13 Апреля 2014, 13:17:50 »
file="/var/log/logname.log" ; mv $file `ls ${file}* | awk -F. ' END { OFS="." ; print $1,$2,$3+1 } '`

где указывается ограничение глубины ротации ???
в тек. примере = 10

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #7 : 13 Апреля 2014, 14:27:03 »
Дело не в глубине, а в порядке составления списка. При посимвольном сравнении после 1 идет 10, потом 11 и т.д. … потом 2, потом 3… Т.е. самым последним в списке у вас была версия с номером 9. Решается проблема добавлением опции -v (сортировка по версиям):file="/var/log/logname.log" ; mv $file `ls -v ${file}* | awk -F. ' END { OFS="." ; print $1,$2,$3+1 } '`
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #8 : 13 Апреля 2014, 14:33:07 »
cat /var/log/logname.log | wc -l
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #9 : 13 Апреля 2014, 14:59:19 »
victor00000,
(Нажмите, чтобы показать/скрыть)
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #10 : 13 Апреля 2014, 15:09:19 »
Azure,
Цитировать
в тек. примере = 10
?
Wars ~.o

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #11 : 13 Апреля 2014, 15:16:20 »
victor00000,
(Нажмите, чтобы показать/скрыть)
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #12 : 17 Апреля 2014, 12:59:59 »
как не крутил директорию qwerty
переименовать в qwerty_1, qwerty_2 и т.д. не удалось

подскажите что необходимо поправить в запросе

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #13 : 17 Апреля 2014, 13:19:52 »
В запросе (как Вы и назначали в условии задачи) номер от названия отделяется знаком «.» (точка). Кроме того, в самом названии присутствует этот разделитель, поэтому если считать части названия полями, разделёнными точкой, то поле с номером — это третье поле, к которому и идет прибавление.
Если разбирать вариант с qwerty_1, то разделитель «_» (нижнее подчёркивание) и поле с номером — второе.file="qwerty" ; mv $file `ls -dv ${file}* | awk -F_ ' END { OFS="_" ; print $1,$2+1 } '`
« Последнее редактирование: 17 Апреля 2014, 13:42:10 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: переименовать файл сдвигом +1
« Ответ #14 : 17 Апреля 2014, 13:24:28 »
так пробовал

постоянно переименовывает директорию qwerty в _1

 

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