3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|||||||||||
1 | |||||||||||
Сбор уникального контента, и передача по ssh27.07.2012, 02:30. Показов 1347. Ответов 15
Метки нет (Все метки)
Здравствуйте.
Это моя первая тема здесь так что не бейте меня. Появилась интересная задача над которой мне пришлось малость попотеть, но до сих пор я её так и не решил. Задача: Есть около 40 директорий, внутри которых тоже есть директории. Разные люди заливают туда информацию. Мне в свою очереть нужно собирать оттуда уникальный контент и ложись его на другой сервер. При этом сохранять структуру каталогов и подкаталогов. И да при минимальной затрате ресурса, ибо там сотня гигов. Я это решил сделать так : 1. Копировать файлы определенного расширения (ибо нам действительно не нужно все) 2. Копировать файлы залитые за последний час (заливается через ftp но это роли не играет) 3. Не заменять файлы на более новые (то есть, если в базе есть файл rassol2.txt и нам кто то залил его, та мы при копировании в базу пропускаем его) 3. Выполнять этот скрипт каждый час. 4. Выполнять процеcс с низким приоритетом nice -n 10 Для сбора информация нашел 2 пути: rsync , find + cp но в каждом из них у меня есть непонятки. (о них ниже) Примеры: Тестирую локально, и у меня кроме сервера игры не было ни одной директории с кучей файлов разных расширений, и я начал тестить на нем. Вариант под кодовым именем rsync
Код
rassol2@linux:~/doc/test/dw/cstrike$ ls -l итого 54992 drwxr-xr-x 6 rassol2 rassol2 4096 2012-07-26 19:22 addons -rw-r--r-- 1 rassol2 rassol2 48456 2012-07-26 19:23 ajawad.wad -rw-r--r-- 1 rassol2 rassol2 2108 2012-07-26 19:23 autobuy.txt -rw-r--r-- 1 rassol2 rassol2 129636 2012-07-26 19:23 cached.wad -rw-r--r-- 1 rassol2 rassol2 7706996 2012-07-26 19:23 chateau.wad drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:23 classes drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 cl_dlls -rw-r--r-- 1 rassol2 rassol2 8597 2012-07-26 19:23 commandmenu.txt -rw-r--r-- 1 rassol2 rassol2 2911764 2012-07-26 19:23 cs_747.wad -rw-r--r-- 1 rassol2 rassol2 517360 2012-07-26 19:23 cs_assault.wad -rw-r--r-- 1 rassol2 rassol2 5832260 2012-07-26 19:23 cs_bdog.wad -rw-r--r-- 1 rassol2 rassol2 1812356 2012-07-26 19:23 cs_cbble.wad -rw-r--r-- 1 rassol2 rassol2 1055884 2012-07-26 19:23 cs_dust.wad -rw-r--r-- 1 rassol2 rassol2 3405860 2012-07-26 19:23 cs_office.wad -rw-r--r-- 1 rassol2 rassol2 161368 2012-07-26 19:23 cstraining.wad -rw-r--r-- 1 rassol2 rassol2 2681364 2012-07-26 19:23 cstrike.wad -rw-r--r-- 1 rassol2 rassol2 4410248 2012-07-26 19:23 de_airstrip.wad -rw-r--r-- 1 rassol2 rassol2 1305468 2012-07-26 19:23 de_aztec.wad -rw-r--r-- 1 rassol2 rassol2 960012 2012-07-26 19:23 decals.wad -rw-r--r-- 1 rassol2 rassol2 5514532 2012-07-26 19:23 de_piranesi.wad -rw-r--r-- 1 rassol2 rassol2 4187008 2012-07-26 19:23 de_storm.wad -rw-r--r-- 1 rassol2 rassol2 620486 2012-07-26 19:23 de_vertigo.wad drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 dlls drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 events drwxr-xr-x 5 rassol2 rassol2 4096 2012-07-26 19:23 gfx drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 iga_static -rw-r--r-- 1 rassol2 rassol2 2469516 2012-07-26 19:23 iga_static.wad -rw-r--r-- 1 rassol2 rassol2 1856328 2012-07-26 19:23 itsitaly.wad drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 manual -rw-r--r-- 1 rassol2 rassol2 36 2012-07-26 19:23 mapcycle.txt drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:23 maps drwxr-xr-x 4 rassol2 rassol2 4096 2012-07-26 19:23 models -rw-r--r-- 1 rassol2 rassol2 351 2012-07-26 19:23 motd.txt -rw-r--r-- 1 rassol2 rassol2 147184 2012-07-26 19:23 n0th1ng.wad drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:23 overviews -rw-r--r-- 1 rassol2 rassol2 34340 2012-07-26 19:23 prodigy.wad -rw-r--r-- 1 rassol2 rassol2 29433 2012-07-26 19:23 readme.txt -rw-r--r-- 1 rassol2 rassol2 1550 2012-07-26 19:23 rebuy.txt drwxr-xr-x 4 rassol2 rassol2 4096 2012-07-26 19:23 resource drwxr-xr-x 2 rassol2 rassol2 4096 2012-07-26 19:22 SAVE drwxr-xr-x 13 rassol2 rassol2 4096 2012-07-26 19:23 sound -rw-r--r-- 1 rassol2 rassol2 1176 2012-07-26 19:23 spectatormenu.txt -rw-r--r-- 1 rassol2 rassol2 755 2012-07-26 19:23 spectcammenu.txt drwxr-xr-x 3 rassol2 rassol2 4096 2012-07-26 19:23 sprites -rw-r--r-- 1 rassol2 rassol2 2 2012-07-26 19:23 steam_appid.txt -rw-r--r-- 1 rassol2 rassol2 25390 2012-07-26 19:23 titles.txt -rw-r--r-- 1 rassol2 rassol2 6783060 2012-07-26 19:23 torntextures.wad -rw-r--r-- 1 rassol2 rassol2 1555168 2012-07-26 19:23 tswad.wad rassol2@linux:~/doc/test/dw/cstrike$ Вариант под кодовым именем find + cp
Код
/home/rassol2/doc/test/dw/home/rassol2/doc/test/cs01d/cstrike/ну и все отсальное /cs02d/cstrike/ну и все отсальное /cs03d/cstrike/ну и все отсальное Ну затем я уже передам данные на другой дед при помоoи scp мне не нужно готовое решение, мне нужен конкретный путь к решению, пожалуйста не пишите мне man find, man rsync , man cp уже много прочитал. Луче тыкните как котенка. Также я пока искал решение задачи мне советовали создавать md5 суммы и сравнивать, но пока что ума не хватает. Рад услышать ваши варианты решения задачи, открыт для нового и познавательного. Зарание извиняюсь что так изложил свою задачу, и надеюсь вы поймете.
0
|
27.07.2012, 02:30 | |
Ответы с готовыми решениями:
15
Влияние уникального контента... Можно ли повысить рейтинг без уникального контента? Передача ssh сессии Сбор и передача данных электросети на удаленный ПК |
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
27.07.2012, 04:08 | 2 |
сначала выведи на экран все файлы, которые будут скопированы
есть программа cmp, которая сравнивает содержимое файлов сначала делаешь скрипт, а потом подключаешь его к планировщику cron 1. найти все файлы по дате изменения 2. выбрать из них нужные по расширению 3. искать выбранные в получателе, удаляя дубликаты 4. создать несуществующие каталоги 5. скопировать файлы
0
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
||||||
27.07.2012, 05:35 [ТС] | 3 | |||||
Я понял что не так выразился. суть вопроса в том как сделать в варианте find + cp копирование все уникальных файлов с директорий cs01d cs02d cs03d cs04d cs05d cs06d ... в директорию csAlld при этом сохранить архитектуру директорий, и их содержимого. Пример: есть директория cs01d в ней есть папка 1 в которой есть файлs rassol, rassol2, rassol3 есть директория cs02d в ней есть папка 2 в которой есть файлs dima, dima2, dima3 есть директория cs03d в ней есть папка 1 в которой есть файлs ubuntu, ubuntu2, ubuntu3 после выполнения скрипта мы должны получить на выходе: Директория csAlld/1 с содержимым rassol, rassol2, rassol3, ubuntu, ubuntu2, ubuntu3 рядом с папкой 1 должна быть вторая папка csolld/2 с содержимым ubuntu, ubuntu2, ubuntu3 если проследить то видно что изначально было 3 разных места с файлами, а на выходе мы получаем один в котором собран уникальный контент. Моего лексического запаса не хватает что бы описать задачу. Но если кто то захочет вникнуть и помочь вы можете выполнить вот это
Нужно добиться тот же результат тока при помощи find + cp 1. Искать все файлы за последний час 2. Выбирать из них нудные по расширению 3. Копировать их, и при копировании указать ключ без замены. 4. копирование в свою очередь создаст каталоги. PS. Как запускать периодичное выполнение я знаю. У меня просто проблема с ключами в find и cp как правило в манах не все рассмотрено. И то что я написал это исходя из того что нарыл.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
27.07.2012, 07:33 | 4 | ||||||||||
Добавлено через 12 минут
1
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|
27.07.2012, 10:45 [ТС] | 5 |
у меня пока что знания на уровни любопытного пользователя и поэтому я несильно понял ваш код. Не могли бы вы дать пару разъяснений что бы я мог его добить?
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
27.07.2012, 12:01 | 6 |
там нужно ещё фильтрануть расширения через grep, расширения должны задаваться в переменной
суть в том, что он сначала получает пути нужных файлов, а потом для каждого из них создаёт путь, куда тот будет копироваться если был /home/rassol2/doc/test/cs01d/file.txt то он станет csAlld/file.txt и копироваться он будет в /home/rassol2/doc/test/dw/csAlld/file.txt (можешь закомментировать копирование через cp, и просто через echo вывести аргументы для cp, чтобы видеть результат) Добавлено через 32 минуты копирование через cp для несуществующих каталогов не будет работать, их надо сначала создать
0
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
||||||||||||||||||||||||||
28.07.2012, 01:38 [ТС] | 7 | |||||||||||||||||||||||||
а нету просто ключа для cp который будет копировать как надо ?
а то ключ --parents не совсем так работает. accept, а ваш вариант вообще не могу понять
И откуда взялся параметр $newpath если мы задавали только
Добавлено через 2 минуты ааа.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
28.07.2012, 06:35 | 8 | |||||
его может вообще не быть в cp, которая входит в POSIX а rsync даже в POSIX не входит sed изначально использовал, потому что думал, что там возможно придётся в середину пути изменение вносить, то есть понадобятся слеши поменял на простое отрезание слева, так как оно к слешам индифирентно f - это не ключ, а обычная переменная там, где присваивание (знак =), он создаётся sed'ом составили часть пути, заменив любую из папок с числами на папку с общим названием
0
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|||||||||||
28.07.2012, 23:44 [ТС] | 9 | ||||||||||
Мне неясно как это работает по этому тестировал.
при запуске :
0
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|
31.07.2012, 02:51 [ТС] | 11 |
емм.. А как понять внутр цикла ?
Я просто не совсем программист делаю это для развлечения..
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
31.07.2012, 02:58 | 12 | |||||
скорее всего, нет файлов, нужно сделать touch
1
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
|||||||||||
31.07.2012, 03:43 [ТС] | 13 | ||||||||||
да вы правы
и директории и все остальное. вот тока мне не удается познать как это вышло. Мы для этого использовали cp, find, mkdir, grep. вот на словах что происходит то ? Мы чекаем определенную директорию на наявность файлов которые подходят по описанию. Время формат затем мы создаем соответствующие директории в нужном нам каталоге, и копируем туда файлы. grep что делает в этом всем ?
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
31.07.2012, 04:18 | 14 |
не формат, а просто все файлы, но не каталоги, каналы, сокеты и так далее
grep из полученного списка строк, где каждая строка - путь к файлу, оставляет только строки, подходящие под регулярное выражение регулярное выражение совпадает со строками, которые заканчиваются на .<расширение><конец строки> <расширение> ::= wad | bsp | res | txt
1
|
3 / 3 / 0
Регистрация: 26.07.2012
Сообщений: 122
|
||||||
31.07.2012, 05:59 [ТС] | 15 | |||||
а вот тут если не тяжело.
получается pathto создается эта переменная. В которой это $dstdir/csAlld/ путь до нового места хранения данных. а вот что это /${pathfrom#*/cs??d/}" ? предположительно както там чекается название файлов и директорий, дописывается до dstdir/csAlld/ и туда уже падают файлы.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
31.07.2012, 09:00 | 16 |
у переменной pathfrom слева # удаляется короткая группа символов по маске */cs??d/
* - любое количество любых символов ? - один любой символ
1
|
31.07.2012, 09:00 | |
31.07.2012, 09:00 | |
Помогаю со студенческими работами здесь
16
Обновление контента, передача информации в js Как сделать, чтобы ssh-клиент использовал файл ~/.ssh/config? Как изменить ssh ключ локального репозитория, что бы был он, а не id.rsa из папки .ssh? После обновления контента <div> через AJAX перестают работать события данного контента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |