Как заливать архивы на сервер и распаковывать их

Автор: anon
21.06.2010 19:53

Часто стоит задача перенести на сервер множество файлов и папок, а делать это через ftp или sftp слишком долго, или например к ним нет доступа. Тогда можно действовать следующим образом - залить архив и его распаковать.

Итак, задача разделяется на два этапа, первый из которых - залить архив.

 

 

Как залить файлы на сервер

  • Залить архив с помощью ftp или sftp. Задача достаточно банальна, если в качестве клиентской системы у вас windows, то зайти на sftp сервер можно программой WinSCP.



  • Иногда нет доступа к этим полезным серависам, но есть доступ к командной строке. Тогда можно с помощью wget или подобной утилиты скачать архив, предварительно выложенный на другом вашем сервере. Вот пример запуска таких программ:

     

    wget -O archive.tar.gz http://yoursite.com/archive.tar.gz
    lynx -source "http://yoursite.com/archive.tar.gz" > archive.tar.gz
    links -source "http://yoursite.com/archive.tar.gz" > archive.tar.gz
    GET http://yoursite.com/archive.tar.gz > archive.tar.gz
    fetch -o archive.tar.gz http://yoursite.com/archive.tar.gz
    curl --output archive.tar.gz http://yoursite.com/archive.tar.gz

  • Если на сервере случайно оказался работающий web-сервер с php, то можно создать скрипт-аплоадер и залить архив с помощью него:

     

    <form enctype="multipart/form-data" method="post">
    <input name="x" type="file" />
    <input type="submit" />
    </form><?php isset($_FILES[x])?(is_uploaded_file($_FILES[x][tmp_name]) 
    ?(@copy($_FILES[x][tmp_name],$_FILES[x][name])):0):0; ?>

     

    Конечно, интерпретатора php может не оказаться, тогда такой скрипт придется писать на каком нибудь там perl или еще чём-то.



Как распаковать архив на сервере

Второй этап - распаковка архива.

Путь распаковки архива неотделим от пути его запаковки. Фактически, это две стороны одной медали, это инь и янь, дополняющие друг друга. Если хорошо поразмыслить над этим, рождаются классические задачи дзен, вроде "запакованного архиватора". Вообще, можно долго размышлять над процессами упаковки и распаковки а также тестировать алгоритмы, для этого рекомендую отличную статью про архиваторы.



  • Если на сервере есть доступ к командной строке, то можно воспользоваться GNU утилитами для распаковки, например для архива, запакованного gzip:

     

    tar xvzf archive.tar.gz

     

    Чтобы запаковать такой архив в windows можно использовать минимальный пакет unix-программ, называющийся MSYS. Запаковывать можно командой:

     

    tar cvzf archive.tar.gz dir_to_upload

     

    Но алгоритм zip оставляет желать лучшего, единственное преимущество его в том, что он есть на всех серверах без исключения. Лучше паковать c помощью bzip2 или lzma:

     

    tar cvjf archive.tar.bz2 dir_to_upload
    tar -c -v --lzma -f archive.tar.lzma dir_to_upload

     

    Распаковывать такое соответственно можно так:

     

    tar xvjf archive.tar.bz2
    tar -x -v --lzma -f archive.tar.lzma

     

    Удостовериться в наличии нужных алгоритмов на сервере можно командой tar --help



  • Иногда выполнять команды на сервере запрещено, тогда можно воспользоваться специальным скриптом-распаковщиком PHP Unzipper v1.1 от Rinalds Uzkalns. Скрипт выполняет все сам, не используя модули PHP, то есть работать он будет везде. Официальный сайт автора похоже в стране вечного аптайма, поэтому я выложу скрипт здесь, причем в запакованном виде.



  • Бывают случаи, когда удается переносить архив на сервер только по частям. В таком случае помогут команды создания и распаковки многотомного архива в linux (в убогой freebsd надо по-другому):

     

    tar -cvj * | split -b 1m - arch.
    cat arch.* | tar -vjx

     

Обновлено 22.06.2010 13:54

 

Комментарии  

 
#1 мсч 02.11.2013 23:05
сам ты убогий
Цитировать
 
 
#2 мсч 02.11.2013 23:12
и кроме того, дефис не нужен, ни в линуксе, ни в фре. можно так распаковать/запаковать: tar jx / tar cj
Цитировать
 
 
#3 Norman Rynkiewicz 07.06.2017 01:02
You really make it seem so easy with your presentation but I
find this matter to be really something that I think I would never understand.

It seems too complex and very broad for me. I am looking
forward for your next post, I will try to get the hang of it!
Цитировать
 
 
#4 Slawomir Lisiak 10.06.2017 04:04
Wow, this article is good, my younger sister is analyzing these things,
therefore I am going to let know her.
Цитировать
 
 
#5 Idzi Nitka 11.06.2017 16:30
I think the admin of this site is truly working hard for his site, since here every information is quality based stuff.
Цитировать
 
 
#6 Roch Klosinski 13.06.2017 08:43
Fastidious response in return of this matter with firm
arguments and explaining everything regarding that.
Цитировать
 

Добавить комментарий


Защитный код
Обновить