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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2010-10-22 10:21:41

Alex Keda писал(а):2 paix
вы бредите =)
да, и 90% основных опций у основных команд, типа awk/grep/find/etc - они одинаковы.
епрст... find одинаков на фре и линухе? черта с два. О какой переносимости речь?
попытка сделать переносимый shell код ведет к появлению кучи if else в конфиге.
(посмотри директадминовский инсталятор, например)


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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-10-22 16:39:33

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

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2010-10-22 16:59:25

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

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

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


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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-10-22 18:15:41

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

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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ы писать не нужно. Один и тот же код работает одинаково на всех системах.


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

Всем, Всем читать Ерика Реймонда.
With best wishes, Sergej Kandyla

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2010-10-22 21:00:03

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-10-22 23:03:38

а ответа на поставленный вопрос - я так и не увидел...
линуксоиды... =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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).";
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2010-10-23 0:11:13

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

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-10-23 10:00:59

это же ProFTP =)
ему прощще на перле портянку настругать, чем команду в шелле =))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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);
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
Ahab444
рядовой
Сообщения: 31
Зарегистрирован: 2010-08-20 17:59:53
Откуда: Киев

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

Непрочитанное сообщение Ahab444 » 2010-10-25 17:44:07

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

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

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

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

Непрочитанное сообщение FreeBSP » 2010-10-25 17:54:35

sh
книжек не подскажу - сам sh прост как две копейки
Совместная работа различный програм в рамках скрипта - вот его фишка и то, что делает его чертовски интересным
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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 делается с бешенным гемороем, на питоне пишется джуниором без напряга.
With best wishes, Sergej Kandyla

Нефиг_чем_заняться
проходил мимо

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

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

Ahab444 писал(а): И заодно книжку подскажите плиз
http://www.opengroup.org/onlinepubs/009 ... hap02.html

Аватара пользователя
Ahab444
рядовой
Сообщения: 31
Зарегистрирован: 2010-08-20 17:59:53
Откуда: Киев

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

Непрочитанное сообщение Ahab444 » 2010-10-25 20:48:10

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

Аватара пользователя
Ahab444
рядовой
Сообщения: 31
Зарегистрирован: 2010-08-20 17:59:53
Откуда: Киев

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

Непрочитанное сообщение Ahab444 » 2010-10-25 21:32:26

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

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

#!/bin/sh
echo "Hello"

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

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

Script started, output file is typescript

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2010-10-27 0:12:32

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

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

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

причину же поймёте потом, когданибудь.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Ahab444
рядовой
Сообщения: 31
Зарегистрирован: 2010-08-20 17:59:53
Откуда: Киев

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

Непрочитанное сообщение Ahab444 » 2010-10-27 10:09:22

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

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

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

Непрочитанное сообщение FreeBSP » 2010-10-27 14:51:04

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

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

./script
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!