Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Каждый файл в отдельный архив zip, linux bash

Статус пользователя tiger30
сообщение 28.3.2015, 4:35
Сообщение #1
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Привет всем.

Ситуация такая, нужна помощь, написания скрипта. Каждый файл в отдельный архив zip, linux.

Предисловие:
У меня стоят 10 серверов, на каждом hltv proxy, демки пищутся с каждого сервера в свою отдельную папку. В данный момент я использую php скрипт архивации.
php скрипт

Код
<?php
   function zipcompressfile($source,$destination,$filename,$level=false)
   {
       $dest=$destination.$filename.'.zip';
       $mode='wb'.$level;
       $error=false;
           echo $source.$filename.' -> '.$dest.'<br>';
       if($fp_out=gzopen($dest,$mode))
       {
           if($fp_in=fopen($source.$filename,'rb'))
           {
               while(!feof($fp_in))
               {
                   gzwrite($fp_out,fread($fp_in,1024*512));
               }
               fclose($fp_in);
           }
           else
           {
               $error=true;
           }
           gzclose($fp_out);
       }
       else $error=true;
       if($error) return false;
       else return $dest;
   }

   $demo_dir = '/home/hltv/cstrike/demos/public/';
   $dl_dir = '/var/www/site/hltv/';

   $handle = opendir($demo_dir);
   if ($handle)
   {
       while (false !== ($fails = readdir($handle)))
       {
           if ( preg_match("/(.*).dem/", $fails, $demo) )
           {
               zipcompressfile($demo_dir, $dl_dir, $fails);
           }
       }
       closedir($handle);
   }
?>


Код
$demo_dir = '/home/hltv/cstrike/demos/public/';
$dl_dir = '/var/www/site/hltv/';

Как мы видим он берет из одной папки архивирует и переносит в другую.
Но этот скрипт глючный, иногда он не может с архивировать, выдает файлы по 25 B. С ними нечего нельзя сделать.

Так вот к чему я виду: Помогите кто нибудь написать такой скрипт на Bash. для линукс.
Чтобы делал тоже самое, тоеть брал файлы из одной папки архивировал их и перенасил в другую.

А по возможности чтобы сразу и 10 папок делал, но также распихивал по другим 10 папкам.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fire
сообщение 28.3.2015, 12:48
Сообщение #2


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

На баше могу, пиши по контактам.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 28.3.2015, 17:35
Сообщение #3
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 28.3.2015, 12:48) *
На баше могу, пиши по контактам.


Извини, но что то я, не совсем понял что ты хочешь сказать.

Если можешь, напиши здесь код пожалуйста.
Если можешь сразу на несколько папок, сделай 2-3 а я попримеру до делаю.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 28.3.2015, 19:47
Сообщение #4
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Fire,

Поможешь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 28.3.2015, 19:49
Сообщение #5


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 28.3.2015, 21:47) *
Fire,

Поможешь?

Исходных данных мало.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 28.3.2015, 20:35
Сообщение #6
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 28.3.2015, 19:49) *
Исходных данных мало.


Fire,

Как понять мало, вроде все описанной что нужно.

Надо сделать скрипт на подобие backup.

Тоесть:
У меня есть папка куда пишется демки, назовем ее:
$demo_dir = '/home/hltv/cstrike/demos/public/';

В ней лежат примерно 5 файлов, они называются:
Public-1503281717-de_inferno.dem
Public-1503281748-de_dust2.dem
Public-1503281819-de_tuscan.dem
И. т. д.

Надо чтобы скрипт архивировал их и перенасил в папку, допустим:
$dl_dir = '/var/www/site/hltv/';

И чтобы названия файлов не менялось, например:
Public-1503281717-de_inferno.zip
Public-1503281748-de_dust2.zip
Public-1503281819-de_tuscan.zip
И. т. д.

Да и чтобы если файлы совпадают то он их перезаписывал.

Вроде все, больше нечего не нужно.

Но если есть возможность сделать чтобы скрипт работал сразу с 10 папками, например:
$demo_dir = '/home/hltv/cstrike/demos/public/';
$demo_dir = '/home/hltv/cstrike/demos/dust2/';
$demo_dir = '/home/hltv/cstrike/demos/dm/';
$demo_dir = '/home/hltv/cstrike/demos/surf/';
И. т. д.

Также архивировал файлы и переносил по своим папкам, например:
$dl_dir = '/var/www/site/hltv/';
$dl_dir = '/var/www/site/hltv/dust2/';
$dl_dir = '/var/www/site/hltv/dm/';
$dl_dir = '/var/www/site/hltv/surf/';
И. т. д.

Также и файлы каждый в свою папку. Было бы вообще замечательно.

Отредактировал: tiger30, - 28.3.2015, 20:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 29.3.2015, 11:23
Сообщение #7


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

На скорую руку, может допилю потом еще.
Создать zip.sh в директории с демо.
Содержимое:
Код
#!/bin/sh
DIR="/root/hl/lol/"
for i in $( ls *.dem | cut -d . -f1); do zip "$i".zip -m "$i".dem; done
mv *.zip $DIR

DIR="/root/hl/lol/" -- путь куда перемешать архивы с демо.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 29.3.2015, 13:24
Сообщение #8
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 29.3.2015, 12:23) *
На скорую руку, может допилю потом еще.
Создать zip.sh в директории с демо.
Содержимое:
Код
#!/bin/sh
DIR="/root/hl/lol/"
for i in $( ls *.dem | cut -d . -f1); do zip "$i".zip -m "$i".dem; done
mv *.zip $DIR

DIR="/root/hl/lol/" -- путь куда перемешать архивы с демо.


Отлично вечером проверю.
Но есть один нюанс, нельзя чтобы в папке лежал скрипт.
Так как папка очищается от демок, каждый час. И скрипт улетит вместе с демками.

Поэтому, желательно сделать, чтобы были папки источника.
Тоесть:

dir_demo:/home/user/ .dem
dir_zip:/www/site/hltv/ .zip

Надо сделать путь до источника (.dem) и путь для готовых зипов (.zip).

Отредактировал: tiger30, - 29.3.2015, 13:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Archangel236
сообщение 29.3.2015, 13:46
Сообщение #9


Стаж: 16 лет
Город: Белая Церковь

Сообщений: 444
Благодарностей: 184
Полезность: 550

Цитата(tiger30 @ 29.3.2015, 14:24) *
Отлично вечером проверю.
Но есть один нюанс, нельзя чтобы в папке лежал скрипт.
Так как папка очищается от демок, каждый час. И скрипт улетит вместе с демками.

Поэтому, желательно сделать, чтобы были папки источника.
Тоесть:

dir_demo:/home/user/ .dem
dir_zip:/www/site/hltv/ .zip

Надо сделать путь до источника (.dem) и путь для готовых зипов (.zip).

И что ж мешает ??

Код
#!/bin/sh
DIR="/root/test/1/"
DEMO="/root/test/2"
for i in $( ls $DEMO/*.dem | cut -d . -f1); do zip "$i".zip -m "$i".dem; done
mv $DEMO/*.zip $DIR


P.S. Поправил, забыл переменную еще в одном месте указать

Отредактировал: Archangel236, - 29.3.2015, 14:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fire
сообщение 29.3.2015, 15:18
Сообщение #10


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 29.3.2015, 14:24) *
Отлично вечером проверю.
Но есть один нюанс, нельзя чтобы в папке лежал скрипт.
Так как папка очищается от демок, каждый час. И скрипт улетит вместе с демками.

После архивирования скриптом демки и так удаляются, в чистке смысла нет.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 29.3.2015, 19:44
Сообщение #11
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 29.3.2015, 16:18) *
После архивирования скриптом демки и так удаляются, в чистке смысла нет.


А вот это не нужно делать, так как он будет удалять не запишавшуюся демку.
У меня стоит что демки удаляются старше 2 часов.

Сейчас буду тестить отпишусь по окончания теста.

Отредактировал: tiger30, - 29.3.2015, 19:46
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 29.3.2015, 19:51
Сообщение #12


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 29.3.2015, 20:44) *
А вот это не нужно делать, так как он будет удалять не запишавшуюся демку.


Код
#!/bin/sh
DIR="/root/hl/lol/"
for i in $( ls -t *.dem |sed '1,1d'| cut -d . -f1); do zip "$i".zip -m "$i".dem; done
mv *.zip $DIR

Вариант, с которым не будет трогать самую свежую демо, которая еще пишется.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 29.3.2015, 20:07
Сообщение #13
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 29.3.2015, 20:51) *
Код
#!/bin/sh
DIR="/root/hl/lol/"
for i in $( ls -t *.dem |sed '1,1d'| cut -d . -f1); do zip "$i".zip -m "$i".dem; done
mv *.zip $DIR

Вариант, с которым не будет трогать самую свежую демо, которая еще пишется.


Спасибо, я просто удалил -m, и все норм как хотел.

Fire, Archangel236,
Спасибо вам огромное, за помощь, может еще кому пригодится.

Все работает отлично, прям то что хотел. thank_you2.gif smile.gif

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 29.3.2015, 20:12
Сообщение #14


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 29.3.2015, 21:07) *
Спасибо, я просто удалил -m, и все норм как хотел.

Fire, Archangel236,
Спасибо вам огромное, за помощь, может еще кому пригодится.

Все работает отлично, прям то что хотел. thank_you2.gif smile.gif

Лучше все-же используй последнюю версию, ибо гораздо эффективнее будет сразу удалять файл после сжатия, не трогая при этом самый свежий, чем потом чистить отдельно.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 29.3.2015, 20:25
Сообщение #15
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 29.3.2015, 21:12) *
Лучше все-же используй последнюю версию, ибо гораздо эффективнее будет сразу удалять файл после сжатия, не трогая при этом самый свежий, чем потом чистить отдельно.


А у меня скрипт, он сам удаляет, файлы старше 2 часов.

Если делать как ты говоришь, тогда некоторые демки придется ждать по часу.
Так-ка скрипт выполняется каждые 30 мин, если в 30 мин демка не зиписалась её придется ждать еще 30 мин.
А так он дописывает уже имеющуюся.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 29.3.2015, 20:49
Сообщение #16


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 29.3.2015, 21:25) *
А у меня скрипт, он сам удаляет, файлы старше 2 часов.

Если делать как ты говоришь, тогда некоторые демки придется ждать по часу.
Так-ка скрипт выполняется каждые 30 мин, если в 30 мин демка не зиписалась её придется ждать еще 30 мин.
А так он дописывает уже имеющуюся.

Можно поставить чаще выполнение.
В твоем способе есть так-же минусы:
1) Архивируется и перемещается недописанная демка.
2) лишние телодвижения для диска.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 29.3.2015, 20:56
Сообщение #17
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 29.3.2015, 21:49) *
Можно поставить чаще выполнение.
В твоем способе есть так-же минусы:
1) Архивируется и перемещается недописанная демка.
2) лишние телодвижения для диска.


2x 250GB SSD'шки в raid 0 smile.gif
Для них, это не проблема.

А вообще может так и сделаю как ты говоришь, я тут подумал тоже не плохой вариант.

Просто я взял вариант с 2 папками, и дописал на 10 папок, мне лудще 1 скрипт чем 10.

Отредактировал: tiger30, - 29.3.2015, 20:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 30.3.2015, 3:17
Сообщение #18
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Есть, проблемка,

демка в архиве, получается с папками директории.

Тоесть когда разархивируеш ахив получается: \home\servers\hltv\cstrike\demos\bb\BaseBuilder-1503292348-bb_autumn.dem

Как убрать папки?
Чтобы была просто демка.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 30.3.2015, 10:23
Сообщение #19


Иконка группы

Стаж: 17 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(tiger30 @ 30.3.2015, 4:17) *

Использовать мой вариант, а не архангела.
Чуть позже сделаю вариант с путями.

upd:
Код
#!/bin/sh
ZDIR="/root/hl/lol/" #путь куда ложить демо
DDIR="/root/hl/" #путь где демо.
for i in $( ls -t $DDIR/*.dem | sed '1,1d' | cut -d . -f1); do zip -j "$i".zip -m "$i".dem; done
mv $DDIR/*.zip $ZDIR


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя tiger30
сообщение 30.3.2015, 11:43
Сообщение #20
Стаж: 12 лет

Сообщений: 142
Благодарностей: 12
Полезность: 3

Цитата(Fire @ 30.3.2015, 10:23) *
Использовать мой вариант, а не архангела.
Чуть позже сделаю вариант с путями.

upd:
Код
#!/bin/sh
ZDIR="/root/hl/lol/" #путь куда ложить демо
DDIR="/root/hl/" #путь где демо.
for i in $( ls -t $DDIR/*.dem | sed '1,1d' | cut -d . -f1); do zip -j "$i".zip -m "$i".dem; done
mv $DDIR/*.zip $ZDIR


Этот и использую, я твой сам дописал. smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: