Помогите реализовать скрипт для linux

Тема в разделе "Linux", создана пользователем MihailM, 7 дек 2015.

  1. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Здравствуйте , помогите реализовать скриптик на bash .

    1. Удаление определенных файлов их каталога каталогов *. указанный тип файлов
    2. Копирование - с этим справился
    3. Упаковка всех файлов из каталога , или указанных каталогов (?).
    4. Создание листинга определенного каталога
    Вот мой пример :
    PHP:
    #!/bin/bash
    cp -r откуда   "куда копировать" 
    rm путь/*.ztmp
    bzip2 -z folder/*
    Хотел реализовать типа этого
    PHP:
    для Windows 
    for /%%A in ('dir ..\maps /A-D /S /B') do bzip2 -"%%A"
    ну не знаю как правильно это сделать .
     
  2. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, find, find и ещё раз find
    1)
    PHP:
    find /full/path/to/dir -type f -iname "*.ztmp" -delete
    3)
    PHP:
    find /full/path/to/dir -type f -iname "*.txt" -exec bzip2 -kq {} \; # ключ -z необязателен
    4)
    PHP:
    find /directory listing.txt
     
  3. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor,
    1) а здесь он по всем папкам будет искать ?
    Кстати а я rm пробывал .
    3) Кстати а там отдельно файлы архивируются , а то это всё для FastDL , хотел приспособить .
    -z для Windows я вроде дорабатывал , вроде этот ключ удаляет исходный файл , а может и без ключа . Давно было уже и не помню .
    4) ясно а определенный тип файлов . А то есть примере здесь , боюсь накосячить :)
    Про find , это понятно , но как её приспособить правильно :)

    А так спасибо буду мудрить тестировать !
     
    Последнее редактирование: 8 дек 2015
  4. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.528
    Симпатии:
    201
    К первому
    /full/path/to/dir - указывай свой путь
     
  5. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Кстати он там везде присутствует :))Ну мне с этим это понятно .. с орфографией написания не знаю как и что . Да и вообще :)
    p.s. Учимся на ходу , по мере необходимости .
     
  6. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, смотри, вот пример скрипта, который юзаю я.
    Да, именно для фастдл
    Он не совсем идеален (есть пару вещей, которые мне не очень нравятся), но вцелом, задачу свою выполняет

    PHP:
    #!/bin/bash
    #script must copy and archives all files

    # параметр $1 - тип игры (css или csgo)
    # параметр $2 - название скрипта запуска сервера, (папка с сервером) например awp, mg, public, etc.
    # параметр $3 - внутренняя папка игры (cstike для css, csgo для csgo)

    # rsync вместо cp
    sourcedir="/home/servers/gameservers/$1/$2/$3"
    destdir="/var/www/fastdl/$1/$3"
            
    if ! [ -${desrdir} ] ; then
                    mkdir 
    --m 755 ${destdir}
            
    fi
    for fold in maps materials models resource sound
    do
            
    mkdir --m 755 ${destdir}/${fold}
            
    cp -Rn ${sourcedir}/${fold}/* ${destdir}/${fold}/
            find ${destdir}/${fold} -exec bzip2 -q {} \;
    #       bzip2 -qk ${sourcedir}/${fold}/ > ${destdir}/${fold} {}\;
    done
    exit 0
     
  7. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor, а как его запускать то ,
    а то меня вот это запутало . Если я правильно понял ты сам уже подставляешь нужные ?
    Впринципе я тоже использую этот скрипт ,но чтобы его доработать , там просто ужас :))
    А по поводу доработки , вот 1 код , чтобы не копировать и не сжимать их папки мода *.ztmp. Зачем они нужны то .
    И кстати интересно , а как добавить несколько типов файлов ? , еще один ключ -iname "*.txt" но с другим типом .Или же как то по другому тогда .
    Но я по другому решил сделать .
    Сначала удаление темп. файлов , потом копирование 3 основных папок . А потом уже архивирование всех файлов в bzip2 с удалением исходников.

    Кстати а 7zip , как архивирует то в bzip2. Нормально потом игре , не конфликтов ?
    А так еще раз Спасибо !!!

    PHP:
    #!/bin/bash
    #
    # {mod}- модификация игры (cs,csgo,tf2 итд...)
    # /var/www/html/fastdl/ - путь до нужной папки где FastDL 
    #


    find /home/{mod}server/serverfiles/{mod}/ -type f -iname "*.ztmp" -delete
    cp 
    -/home/{mod}server/serverfiles/{mod}/maps  /var/www/html/fastdl/
    cp -/home/{mod}server/serverfiles/{mod}/materials /var/www/html/fastdl/
    cp -/home/{mod}server/serverfiles/{mod}/models /var/www/html/fastdl/
    cp -/home/{mod}server/serverfiles/{mod}/sound /var/www/html/fastdl/

    find /var/www/html/fastdl/ -type f -iname "*.ztmp" -delete

    find 
    /var/www/html/fastdl/ -type f -iname "*.*" -exec bzip2 -{} \; 
    Хотелось бы добавить еще и исключения для некоторых типов файлов .
     
    Последнее редактирование: 8 дек 2015
  8. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, и да и нет.
    Я подставляю своё, но при запуске скрипта.
    Т.е.
    ./script.sh css awp cstrike
    Это сделано для универсальности, так как серверов много и плодить сучности неохота)

    Добавлено через 1 минуту
    Можешь как-то перефразировать? А то вообще не понял о чём речь идёт))
     
    Последнее редактирование: 8 дек 2015
  9. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor,ну там я добавил , чтобы на сервере перед копированием в FastDL , я удаляю *.ztmp , зачем они нужны то . И некоторые типы так же хотелось бы добавить .

    А по поводу 7zip , он нормально архивирует в bzip2 . В игре , нет потом конфликтов когда файлы с качались клиенту. Типа не распаковалось что у кого итд...
    По остальному добавил свой пример на основе твоего сообщения .
    Еще раз спасибо , как нибудь попробую твой скрипт .
    ну похоже я его вряд ли осилю , у меня нет столько серверов судя по 2-му параметру :))
     
  10. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    На Лине используется bzip2, а не 7z - это раз
    Второе - клиент заточен под использование этого типа архивов (хотя поддержка *.ztmp тоже есть, но bzip2 сжимает лучше)

    Вот смотри, одна и та же команда выполняется 4-ре раза, меняются только конечные папки.
    Я именно для этого и использовал цикл, ибо оптимизация и читаемость скрипта повышается.
    Так, как сделал ты - не критично, оно будет работать и не возбраняется, но всё-же проигрых в скорости будет. Небольшой, но сам факт :)

    Добавлено через 1 минуту
    Исключение делал уже на основе nginx'а, но вот только конкретно в этих папках нечего исключать - всё клиенту может понадобиться :)
     
    Последнее редактирование: 8 дек 2015
  11. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Ага точно просто где мож давно вроде бы можно с помощью 7z архивировать в bz2 . Хотя может просто ошибся .
    Если бы я знал как это пишется :)

    Ну эти я думаю [*.ztmp] точно вряд ли понадобятся, и еще некоторые к примеру звуки в МР3 сжатие вроде бы там 0 , да и потом если я знаю какие точно вряд ли понадобятся . Вот их бы исключить . Или файл или по маске :))
     
  12. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    Так в моём примере это уже есть :)

    PHP:
    for fold in maps materials models resource sound 
    do
    # fold - это переменная, которой по очереди присваиваются значения, перечисленные после in
    # далее просто берёшь путь к папке cstrike, например /home/gameservers/css_awp/cstrike/
    # и в конец подставляешь то, что у тебя объявлено в fold
    # /home/gameservers/css_awp/cstrike/${fold}
    # далее выполняешь нужные тебе команды
    # конец цикла 
    done
    Попробуй вчитаться и вдумчиво разобрать мой велосипед)
    Это несложно :secret:
     
  13. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor, ну это в принципе да, там вроде легко . Но я говорю я с написанием на bash даже и не знаю что и как .Я даже незнаю , как к этому bash и подступиться. Ну значит можно и твой взять , чуток подшаманив его .
     
  14. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, можно :)
    Меняешь пути на свои, это раз
    И во вторых, отдельной строкой в конце скрипта (но перед exit) добавляешь ещё одну строчку - с поиском и удалением *.ztmp в нужной тебе директории.
     
  15. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor, ну это понятно что пути свои , а добавить еще можно в исключения ?
    примерно так
    PHP:
    find /full/path/to/dir -type f -iname "*.тхт" -iname "*.ztmp" -delete 
    Так прокатит ?
    А потом лучше же удалять из папки с сервером ztmp,то есть в начало скриптика :)
    Ну это я так уже как бы моё мнение .
     
  16. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, стоп, о каких исключениях идёт речь?
    -iname - это маска для поиска по имени файла, т.е. тут ты задаешь что искать, а не что игнорить
     
  17. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor, ну да ,то есть маску для удаления файлов .. , вот еще такой же -iname добавить для маски можно , то есть 2 типа файла искать ?
     
  18. Tallanvor

    Tallanvor Красноглазый

    Сообщения:
    1.080
    Симпатии:
    305
    SteamM, тогда можно писать несколько -iname подряд
    по умолчанию подразумевается, что присутствует ключ -and, если не указано иное
    Вот неплохо рассказано, что и к чему
     
  19. MihailM

    MihailM убежал :)

    Сообщения:
    446
    Симпатии:
    27
    Tallanvor,ок спасибо почитаем ..