Аренда серверов

Архивирование всех папок в директории

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:smile: :( ;-) :roll: :pardon: 8) :x :oops: :shock: :cz2: :-D :ROFL: :Yahoo!: :cry: :Search: :Bravo: :good: :bad: :sorry: :no: :unknown: :evil: :crazy: :"": :fool: :-o :drinks: :st: :bn:
Ещё смайлики…
BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ
Обзор темы
   

Развернуть Обзор темы: Архивирование всех папок в директории

Re: Архивирование всех папок в директории

Сообщение _adre » 2012-04-29 17:31:05

Итог: линукс говно. :bn:

Re: Архивирование всех папок в директории

Сообщение FreeBSP » 2010-10-27 14:51:04

script это програма
тфой файл ты не проавильно вызывал, поэтому он и не откликался.
Код: Выделить всё
./script

Re: Архивирование всех папок в директории

Сообщение Ahab444 » 2010-10-27 10:09:22

Разобрался) Оказывается script - это зарезервированное слово.

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-27 0:12:32

а вы почитайте
http://man.freebsd.org/script/

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

и тогда у вас не будет проблем на ровных местах.

причину же поймёте потом, когданибудь.

Re: Архивирование всех папок в директории

Сообщение Ahab444 » 2010-10-25 21:32:26

Подскажите плиз:

Сделал хелло ворлд скрипт:

#!/bin/sh
echo "Hello"

Установил для него атрибут исполнения: chmod a+x script

Далее запускаю, и получаю такое сообщение:

Script started, output file is typescript

Как сделать, что бы вывод шел на монитор, а не в файл typescript ?
Спасибо

Re: Архивирование всех папок в директории

Сообщение Ahab444 » 2010-10-25 20:48:10

Спасибо всем за советы. Остановился на sh

Re: Архивирование всех папок в директории

Сообщение Нефиг_чем_заняться » 2010-10-25 18:10:49

Ahab444 писал(а): И заодно книжку подскажите плиз

http://www.opengroup.org/onlinepubs/009 ... hap02.html

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-25 18:04:28

начинать нужно с sh/bash (без разницы).

Не зная фундамента какой прок от высокоуровневых языков?
для повседневных задачь простые скрипты используются куда чаще чем специализированные на python\perl\ruby\etc.

http://house.hcn-strela.ru/BSDCert/BSDA ... 07s07.html
http://ftp.linux.kiev.ua/pub/docs/mirro ... index.html


Тем кто уже шелл знает в достаточном обьеме - лучше переключаться на высокоуровневые языки (для сложных задачь).
То что в awk делается с бешенным гемороем, на питоне пишется джуниором без напряга.

Re: Архивирование всех папок в директории

Сообщение FreeBSP » 2010-10-25 17:54:35

sh
книжек не подскажу - сам sh прост как две копейки
Совместная работа различный програм в рамках скрипта - вот его фишка и то, что делает его чертовски интересным

Re: Архивирование всех папок в директории

Сообщение Ahab444 » 2010-10-25 17:44:07

Совсем меня запутали.
Нужен совет - о скриптинге ничего не знаю. Собираюсь работать только в FreeBSD, куда смотреть?

Что выбрать sh, bash, perl ? И заодно книжку подскажите плиз

Re: Архивирование всех папок в директории

Сообщение ProFTP » 2010-10-23 17:39:10

2lissyara

пиши на чем хочешь
данный модуль написанный в 1999 году и его писать не надо :)

ты же просил показать код на счет кроссплатформы?
в данном случае системный вызов syscall который на разных OC разный, где есть statvfs и statfs

Код: Выделить всё
  eval {  # will work for Solaris 2.*, OSF1 v3.2, OSF1 v4.0 and HP-UX 10.*.
    $res = syscall (&main::SYS_statvfs, $dir, $fmt) ;

  || eval { # will work for SunOS 4, Linux 2.0.* and 2.2.*
    $res = syscall (&main::SYS_statfs, $dir, $fmt);

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-23 10:00:59

это же ProFTP =)
ему прощще на перле портянку настругать, чем команду в шелле =))

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-23 0:11:13

3 страницы перлятины ради элементарной однострочной команды в шеле ;)
это уже слишком.... такие вещи можно и нужно делать на шеле.

И не забывай что данный перловый модуль в систему еще нужно поставить.

Re: Архивирование всех папок в директории

Сообщение ProFTP » 2010-10-22 23:52:02

я на shell не программировал давно, за всю Одессу не скажу

но есть такое скрипты которые только на Си можно написать :)
например, события ядра FreeBSD или доступ к видео памяти... (хотя такие библиотеки уже готовые есть на Си в perl,ruby,python,etc)

т.е. тут вопрос субъективный...

Filesys::DiskSpace:
свободное места проверяет на разных ОС
http://cpansearch.perl.org/src/FTASSIN/ ... skSpace.pm

Код: Выделить всё

# known FS type numbers
my %fs_type = (
          0     => "4.2",         # 0x00000000
          256     => "UFS",         # 0x00000100
          2560     => "ADVFS",         # 0x00000A00
          4989     => "EXT_SUPER_MAGIC",      # 0x0000137D
          4991     => "MINIX_SUPER_MAGIC",   # 0x0000137F
          5007     => "MINIX_SUPER_MAGIC2",   # 0x0000138F
          9320     => "MINIX2_SUPER_MAGIC",   # 0x00002468
          9336     => "MINIX2_SUPER_MAGIC2",   # 0x00002478
          19780     => "MSDOS_SUPER_MAGIC",   # 0x00004d44
          20859     => "SMB_SUPER_MAGIC",      # 0x0000517B
          22092     => "NCP_SUPER_MAGIC",      # 0x0000564c
          26985     => "NFS_SUPER_MAGIC",      # 0x00006969
          38496     => "ISOFS_SUPER_MAGIC",   # 0x00009660
          40864     => "PROC_SUPER_MAGIC",   # 0x00009fa0
          44543      => "AFFS_SUPER_MAGIC",        # 0x0000ADFF
          61265     => "EXT2_OLD_SUPER_MAGIC",   # 0x0000EF51
          61267     => "EXT2_SUPER_MAGIC",   # 0x0000EF53
          72020     => "UFS_MAGIC",      # 0x00011954
          19911021     => "_XIAFS_SUPER_MAGIC",   # 0x012FD16D
          19920820     => "XENIX_SUPER_MAGIC",   # 0x012FF7B4
          19920821     => "SYSV4_SUPER_MAGIC",   # 0x012FF7B5
          19920822     => "SYSV2_SUPER_MAGIC",   # 0x012FF7B6
          19920823     => "COH_SUPER_MAGIC",           # 0x012FF7B7
          4187351113 => "HPFS_SUPER_MAGIC",        # 0xF995E849
);

sub df ($) {
  my $dir = shift;

  my ($fmt, $res, $type, $flags, $osvers, $w);

  # struct fields for statfs or statvfs....
  my ($bsize, $frsize, $blocks, $bfree, $bavail, $files, $ffree, $favail);

  Carp::croak "Usage: df '\$dir'" unless $dir;
  Carp::croak "Error: $dir is not a directory" unless -d $dir;

  # try with statvfs..
  eval {  # will work for Solaris 2.*, OSF1 v3.2, OSF1 v4.0 and HP-UX 10.*.
    {
      package main;
      require "sys/syscall.ph";
    }
    $fmt = "\0" x 512;
    $res = syscall (&main::SYS_statvfs, $dir, $fmt) ;


  # try with statfs..
  || eval { # will work for SunOS 4, Linux 2.0.* and 2.2.*
    {
      package main;
      require "sys/syscall.ph";
    }
    $fmt = "\0" x 512;
    $res = syscall (&main::SYS_statfs, $dir, $fmt);
    # statfs...


 || eval {
    {
      package main;
      require "sys/syscall.ph";
    }
    # The previous try gives an unknown fs type, it must be a different
    # structure format..
    $fmt = "\0" x 512;
    # Try this : n2i7L119
    $res = syscall (&main::SYS_statfs, $dir, $fmt);
    ($type, $flags, $bsize, $frsize, $blocks,
     $bfree, $bavail, $files, $ffree) = unpack "n2i7", $fmt;
    $res == 0 && defined $fs_type{$type};
  }
  # Neither statfs nor statvfs.. too bad.
  || eval {
    $osvers = $Config{'osvers'};
    $w = 0;
    # These system normaly works but there was a problem...
    # Trying to inform the user...
    if ($^O eq 'solaris' || $^O eq 'dec_osf') {
      # Tested. No problem if syscall.ph is present.
      warn "An error occured. statvfs failed. Did you run h2ph?\n";
      $w = 2;
    }
    if ($^O eq 'linux' || $^O eq 'freebsd') {
      # Tested with linux 2.0.0 and 2.2.2
      # No problem if syscall.ph is present.
      warn "An error occured. statfs failed. Did you run h2ph?\n";
    }
    if ($^O eq 'hpux') {
      if ($osvers == 9) {
    # Tested. You have to change a line in syscall.ph.
    warn "An error occured. statfs failed. Did you run h2ph?\n" .
      "If you are using a hp9000s700, see the Df documentation\n";
      }
      elsif ($osvers == 10) {
    # Tested. No problem if syscall.ph is present.
    warn "An error occured. statvfs failed. Did you run h2ph?\n";
      }
      else {
    # Untested
    warn "An error occured. df failed. Please, submit a bug report.\n";
      }
      $w = 3;
    }
    $w;
  }
  || Carp::croak "Cannot use df on this machine (untested or unsupported).";

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-22 23:03:38

а ответа на поставленный вопрос - я так и не увидел...
линуксоиды... =)

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-22 21:00:03

http://www.e-reading.org.ua/bookreader. ... _Unix.html

shell отлично подходит для простых скриптов, и плохо для сложной логики.
Сложные скрипты на шеле плохо переносимы на другие системы.

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-22 18:56:54

Alex Keda писал(а):примеры будте добры.
того как финд некорректно отработает с каким- то ключом на другой платформе.
=======
этот пункт:
> если вы используете какие-то нестандартные извраты - это ваша проблема.
остаётся на вашей совести (т.е. вам придётся решить - что ключ в приведённом вами примере - пиздец как необходим и постоянно используется вами в повседневной жизни)
желательно, больше одного ключа. три хотя бы. для полноты картины




Код: Выделить всё
useradd ..
pw useradd ..

if [ `uname` = "FreeBSD" ]; then
        yesterday=`date -v-1d +%d%m%y`
else
        yesterday=`date  +%d%m%y  --date='1 days ago'`
fi


# generate random string
OS=`uname`;
if [ "$OS" = "FreeBSD" ]; then
        string="`jot -r 1 5999999999999999 0`|"
        md5="`md5 -s $string | awk '{print $4}' | cut -c 1-16`"
else
        string=`dd if=/dev/urandom count=10 bs=1   2>/dev/null | hexdump  | cut -d \  -f 2-| head -n 1 | tr -d " "`
        md5=$string
fi


#filelist=`find ${destdir}/daily.${year} -name "exim\.*" -a -mtime -7 -print0 -printf " "`   #- works only on linux

filelist=`find ${destdir}/daily.${year} -name "exim\.*" -a -mtime -7 -print0 | xargs -0`   #- works on both linux\freebsd


# Примеры надерганные из  http://www.directadmin.com/setup.sh
if [ $OS = "FreeBSD" ]; then
   DEVS=`/sbin/ifconfig -a | grep -e "^[a-z]" | cut -d: -f1 |grep -v lp0|grep -v lo0|grep -v tun0|grep -v sl0|grep -v ppp0|grep -v faith0`
..

                      if [ $OS = "FreeBSD" ]; then
                                fetch -o $CBPATH/options $SERVER/custombuild/options-1.1
                        else
                                $WGET_PATH -O $CBPATH/options $SERVER/custombuild/options-1.1
                        fi


и ты заявляеш что shell скрипты мультиплатформенны?
для соляры понадобится еще третью тонну ифов писать, чтобы код работал.

Эти ифы - уродство в попытке сделать скрипт переносимым.
В "переносимых" языках ifы писать не нужно. Один и тот же код работает одинаково на всех системах.


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

Всем, Всем читать Ерика Реймонда.

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-22 18:15:41

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

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-22 16:59:25

Alex Keda писал(а):почему все линуксоиды всегда грамотно и кусками цитируют только то что им удобно? =))
Alex Keda писал(а):если вы используете какие-то нестандартные извраты - это ваша проблема.



раскажи, в чем изврат использовать стандартный find или tar во фре в шелл скриптапх.

Ты хочеш убежать от факта что шелл скрипты от фряхи в 70% случаев не отрабатывают корректно на линухе и наоборот?
- но ведь себя не обманеш.


Это, батенька, и называется кросплатформенность. Когда один и тот же код запускается(отрабатывает одинаково) под разными nix системами.
И shell данным качеством не обладает.

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-22 16:39:33

почему все линуксоиды всегда грамотно и кусками цитируют только то что им удобно? =))
Alex Keda писал(а):если вы используете какие-то нестандартные извраты - это ваша проблема.

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-22 10:21:41

Alex Keda писал(а):2 paix
вы бредите =)
да, и 90% основных опций у основных команд, типа awk/grep/find/etc - они одинаковы.


епрст... find одинаков на фре и линухе? черта с два. О какой переносимости речь?
попытка сделать переносимый shell код ведет к появлению кучи if else в конфиге.
(посмотри директадминовский инсталятор, например)


И вообще - не вериш мне, почитай уважаемых классиков.
+ позапускай шелл скрипты на разных юниксах.

Re: Архивирование всех папок в директории

Сообщение Alex Keda » 2010-10-21 19:58:05

2 paix
вы бредите =)
посомтрите на стартовые скрипты FreeBSD
почти чистый sh c расчётом что утилит максимум что будет /bin и /sbin
========
что касается хело ворлд - 99% скриптов администратора - это именно хело ворлд.
и на каждой новой системе изобретать новый хело ворлд на новом языке - не, это не для меня.

да, и 90% основных опций у основных команд, типа awk/grep/find/etc - они одинаковы.
если вы используете какие-то нестандартные извраты - это ваша проблема.

Re: Архивирование всех папок в директории

Сообщение paix » 2010-10-21 13:25:21

DanGer писал(а):Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.


Я ничего не путаю и выражаюсь конкретно.
Вам кстати часто приходится писать на sh/csh без использования "отдельных утилит"? таких как find, sort, awk, sed, tar и т.п. ?

именно поэтому shell скрипты имеют очень низкую переносимость, потому что в чистом виде скрипты на sh/csh - это скрипты уровня "hello world".


open your mind! open your eyes!

Re: Архивирование всех папок в директории

Сообщение FreeBSP » 2010-10-21 12:49:01

во фре csh это линк на tcsh, a sh - это оригинальный шелл борна

на лине вроде как sh - это линк на баш, а ash - это классический sh.. или совместивый с ним shell альмквиста.. кстати, ash и sh вроде в обе стороны совместимы?
Код: Выделить всё
[13:50]~/> whereis ash
ash:
[13:50]~/> ls -li /bin | grep sh
49817 -r-xr-xr-x  2 root  wheel  319468  1 май  2009 csh
49842 -r-xr-xr-x  1 root  wheel  115296  1 май  2009 sh
49817 -r-xr-xr-x  2 root  wheel  319468  1 май  2009 tcsh

в первой колонке иноды

Re: Архивирование всех папок в директории

Сообщение DanGer » 2010-10-21 12:45:18

Я, конечно могу ошибаться, но sh всега был и остается sh (опустим тот факт, что во FreeBSD это линк на tcsh). И я не заметил каких-то отличий в работе указанного интерпретатора ни в FreeBSD, ни в AIX и в двух-трех линукс - всегда все работало как надо. Хотя, линуксоиды народ неординарный, может у них и sh какой-то неправильный (не UNIX, все-таки).
Может Вы путаете с синтаксисом отдельных утилит в системах? Ну да, у них нет строгого предписания иметь один набор опций и функций.

Вернуться к началу