--- /srv/reproducible-results/rbuild-debian/r-b-build.7yLbCKoC/b1/storebackup_3.2.1-2_armhf.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.7yLbCKoC/b2/storebackup_3.2.1-2_armhf.changes ├── Files │ @@ -1,2 +1,2 @@ │ │ - f3277098c48ccb78b5e3cc253caec8a2 717700 utils optional storebackup_3.2.1-2_all.deb │ + 04162322602081d2f641b89d55d43cee 718012 utils optional storebackup_3.2.1-2_all.deb ├── storebackup_3.2.1-2_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2020-07-08 12:54:21.000000 debian-binary │ │ --rw-r--r-- 0 0 0 2532 2020-07-08 12:54:21.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 714976 2020-07-08 12:54:21.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 2596 2020-07-08 12:54:21.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 715224 2020-07-08 12:54:21.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── file list │ │ │ │ @@ -1,5 +1,5 @@ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 28 2020-07-08 12:54:21.000000 ./conffiles │ │ │ │ -rw-r--r-- 0 root (0) root (0) 908 2020-07-08 12:54:21.000000 ./control │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3824 2020-07-08 12:54:21.000000 ./md5sums │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4534 2020-07-08 12:54:21.000000 ./md5sums │ │ │ │ -rwxr-xr-x 0 root (0) root (0) 511 2020-07-08 12:54:21.000000 ./postinst │ │ │ ├── ./control │ │ │ │ @@ -1,12 +1,12 @@ │ │ │ │ Package: storebackup │ │ │ │ Version: 3.2.1-2 │ │ │ │ Architecture: all │ │ │ │ Maintainer: Debian QA Group │ │ │ │ -Installed-Size: 1341 │ │ │ │ +Installed-Size: 1749 │ │ │ │ Depends: bzip2, debianutils (>= 1.16.9), perl:any │ │ │ │ Recommends: libio-compress-bzip2-perl │ │ │ │ Section: utils │ │ │ │ Priority: optional │ │ │ │ Homepage: http://www.nongnu.org/storebackup/ │ │ │ │ Description: fancy compressing managing checksumming deduplicating hard-linking cp -ua │ │ │ │ Copies directory hierarchies recursively into another location, │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ │ │ │ ├── line order │ │ │ │ │ @@ -1,7 +1,19 @@ │ │ │ │ │ +usr/bin/llt │ │ │ │ │ +usr/bin/storeBackup │ │ │ │ │ +usr/bin/storeBackupCheckBackup │ │ │ │ │ +usr/bin/storeBackupConvertBackup │ │ │ │ │ +usr/bin/storeBackupDel │ │ │ │ │ +usr/bin/storeBackupMount │ │ │ │ │ +usr/bin/storeBackupRecover │ │ │ │ │ +usr/bin/storeBackupSearch │ │ │ │ │ +usr/bin/storeBackupUpdateBackup │ │ │ │ │ +usr/bin/storeBackupVersions │ │ │ │ │ +usr/bin/storeBackup_du │ │ │ │ │ +usr/bin/storeBackupls │ │ │ │ │ usr/share/doc-base/storebackup.storebackup │ │ │ │ │ usr/share/doc/storebackup/README.1ST │ │ │ │ │ usr/share/doc/storebackup/README.Debian │ │ │ │ │ usr/share/doc/storebackup/README.gz │ │ │ │ │ usr/share/doc/storebackup/ROADMAP │ │ │ │ │ usr/share/doc/storebackup/_ATTENTION_ │ │ │ │ │ usr/share/doc/storebackup/changelog.Debian.gz │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -1,14 +1,26 @@ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/cron.daily/ │ │ │ │ -rwxr-xr-x 0 root (0) root (0) 743 2020-07-08 12:54:21.000000 ./etc/cron.daily/storebackup │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/storebackup.d/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/ │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 7059 2020-07-08 12:54:21.000000 ./usr/bin/llt │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 235546 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 27187 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupCheckBackup │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 10995 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupConvertBackup │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 20761 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupDel │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 14369 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupMount │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 23482 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupRecover │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 17420 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupSearch │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 30169 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupUpdateBackup │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 17592 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupVersions │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 6950 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup_du │ │ │ │ +-rwxr-xr-x 0 root (0) root (0) 11747 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupls │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/doc/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/doc/storebackup/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3697 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/README.1ST │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2561 2012-06-16 10:00:35.000000 ./usr/share/doc/storebackup/README.Debian │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19119 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/README.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1035 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/ROADMAP │ │ │ │ @@ -62,19 +74,7 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 14268 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/prLog.pl │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1544 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/splitLine.pl │ │ │ │ -rwxr-xr-x 0 root (0) root (0) 2269 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/stbuMd5Exec.pl │ │ │ │ -rwxr-xr-x 0 root (0) root (0) 1623 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/stbuMd5cp.pl │ │ │ │ -rw-r--r-- 0 root (0) root (0) 116996 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/storeBackupLib.pl │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3770 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/tail.pl │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1455 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/version.pl │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/llt -> ../share/storebackup/bin/llt │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup -> ../share/storebackup/bin/storeBackup │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupCheckBackup -> ../share/storebackup/bin/storeBackupCheckBackup │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupConvertBackup -> ../share/storebackup/bin/storeBackupConvertBackup │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupDel -> ../share/storebackup/bin/storeBackupDel │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupMount -> ../share/storebackup/bin/storeBackupMount │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupRecover -> ../share/storebackup/bin/storeBackupRecover │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupSearch -> ../share/storebackup/bin/storeBackupSearch │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupUpdateBackup -> ../share/storebackup/bin/storeBackupUpdateBackup │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupVersions -> ../share/storebackup/bin/storeBackupVersions │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup_du -> ../share/storebackup/bin/storeBackup_du │ │ │ │ -lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupls -> ../share/storebackup/bin/storeBackupls │ │ │ ├── ./usr/bin/llt │ │ │ │ @@ -1,3 +1,442 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 6c6c 740a p/bin/llt. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose │ │ │ │ +00000030: 6620 436c 6165 7320 2832 3030 302d 3230 f Claes (2000-20 │ │ │ │ +00000040: 3132 290a 2320 2020 2020 2020 2020 2020 12).# │ │ │ │ +00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we │ │ │ │ +00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th │ │ │ │ +00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ │ +00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ │ +00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ │ +000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ │ +000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ │ +000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ │ +000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ │ +000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ │ +000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ │ +00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ │ +00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ │ +00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ │ +00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ │ +00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ │ +00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ │ +00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ │ +00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ │ +00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ │ +00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ │ +000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ │ +000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ │ +000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ │ +000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ │ +000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ │ +000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ │ +00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ │ +00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ │ +00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ │ +00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ │ +00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ │ +00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ │ +00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ │ +00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ │ +00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ │ +00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ │ +000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ │ +000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ │ +000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ │ +000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..push @ │ │ │ │ +00000300: 5645 5253 494f 4e2c 2027 2449 643a 206c VERSION, '$Id: l │ │ │ │ +00000310: 6c74 2033 3632 2032 3031 322d 3031 2d32 lt 362 2012-01-2 │ │ │ │ +00000320: 3820 3232 3a31 313a 3133 5a20 686a 6320 8 22:11:13Z hjc │ │ │ │ +00000330: 2420 273b 0a0a 0a75 7365 2073 7472 6963 $ ';...use stric │ │ │ │ +00000340: 743b 0a0a 7375 6220 6c69 6250 6174 680a t;..sub libPath. │ │ │ │ +00000350: 7b0a 2020 2020 6d79 2024 6669 6c65 203d {. my $file = │ │ │ │ +00000360: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my │ │ │ │ +00000370: 2464 6972 3b0a 0a20 2020 2023 2046 616c $dir;.. # Fal │ │ │ │ +00000380: 6c73 2044 6174 6569 2073 656c 6273 7420 ls Datei selbst │ │ │ │ +00000390: 6569 6e20 7379 6d6c 696e 6b20 6973 742c ein symlink ist, │ │ │ │ +000003a0: 2073 6f6c 616e 6765 2066 6f6c 6765 6e2c solange folgen, │ │ │ │ +000003b0: 2062 6973 2061 7566 6765 6cf6 7374 0a20 bis aufgel.st. │ │ │ │ +000003c0: 2020 2069 6620 282d 6620 2466 696c 6529 if (-f $file) │ │ │ │ +000003d0: 0a20 2020 207b 0a09 7768 696c 6520 282d . {..while (- │ │ │ │ +000003e0: 6c20 2466 696c 6529 0a09 7b0a 0920 2020 l $file)..{.. │ │ │ │ +000003f0: 206d 7920 246c 696e 6b20 3d20 7265 6164 my $link = read │ │ │ │ +00000400: 6c69 6e6b 2824 6669 6c65 293b 0a0a 0920 link($file);... │ │ │ │ +00000410: 2020 2069 6620 2873 7562 7374 7228 246c if (substr($l │ │ │ │ +00000420: 696e 6b2c 2030 2c20 3129 206e 6520 222f ink, 0, 1) ne "/ │ │ │ │ +00000430: 2229 0a09 2020 2020 7b0a 0909 2466 696c ").. {...$fil │ │ │ │ +00000440: 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 e =~ s/[^\/]+$/$ │ │ │ │ +00000450: 6c69 6e6b 2f3b 0a09 2020 2020 7d0a 0920 link/;.. }.. │ │ │ │ +00000460: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ │ +00000470: 0924 6669 6c65 203d 2024 6c69 6e6b 3b0a .$file = $link;. │ │ │ │ +00000480: 0920 2020 207d 0a09 7d0a 0a09 2824 6469 . }..}...($di │ │ │ │ +00000490: 722c 2024 6669 6c65 2920 3d20 2673 706c r, $file) = &spl │ │ │ │ +000004a0: 6974 4669 6c65 4469 7228 2466 696c 6529 itFileDir($file) │ │ │ │ +000004b0: 3b0a 0924 6669 6c65 203d 2022 2f24 6669 ;..$file = "/$fi │ │ │ │ +000004c0: 6c65 223b 0a20 2020 207d 0a20 2020 2065 le";. }. e │ │ │ │ +000004d0: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print │ │ │ │ +000004e0: 2053 5444 4552 5220 223c 2466 696c 653e STDERR "<$file> │ │ │ │ +000004f0: 2064 6f65 7320 6e6f 7420 6578 6973 7421 does not exist! │ │ │ │ +00000500: 5c6e 223b 0a09 6578 6974 2031 3b0a 2020 \n";..exit 1;. │ │ │ │ +00000510: 2020 7d0a 0a20 2020 2024 6469 7220 2e3d }.. $dir .= │ │ │ │ +00000520: 2022 2f2e 2e2f 6c69 6222 3b20 2020 2020 "/../lib"; │ │ │ │ +00000530: 2020 2020 2020 2320 5066 6164 207a 7520 # Pfad zu │ │ │ │ +00000540: 6465 6e20 4269 626c 696f 7468 656b 656e den Bibliotheken │ │ │ │ +00000550: 0a20 2020 206d 7920 246f 6c64 4469 7220 . my $oldDir │ │ │ │ +00000560: 3d20 602f 6269 6e2f 7077 6460 3b0a 2020 = `/bin/pwd`;. │ │ │ │ +00000570: 2020 6368 6f6d 7020 246f 6c64 4469 723b chomp $oldDir; │ │ │ │ +00000580: 0a20 2020 2069 6620 2863 6864 6972 2024 . if (chdir $ │ │ │ │ +00000590: 6469 7229 0a20 2020 207b 0a09 6d79 2024 dir). {..my $ │ │ │ │ +000005a0: 6162 7344 6972 203d 2060 2f62 696e 2f70 absDir = `/bin/p │ │ │ │ +000005b0: 7764 603b 0a09 6368 6f70 2024 6162 7344 wd`;..chop $absD │ │ │ │ +000005c0: 6972 3b0a 0963 6864 6972 2024 6f6c 6444 ir;..chdir $oldD │ │ │ │ +000005d0: 6972 3b0a 0a09 7265 7475 726e 2028 2673 ir;...return (&s │ │ │ │ +000005e0: 706c 6974 4669 6c65 4469 7228 2224 6162 plitFileDir("$ab │ │ │ │ +000005f0: 7344 6972 2466 696c 6522 2929 3b0a 2020 sDir$file"));. │ │ │ │ +00000600: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +00000610: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ │ +00000620: 2022 3c24 6469 723e 2064 6f65 7320 6e6f "<$dir> does no │ │ │ │ +00000630: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting │ │ │ │ +00000640: 5c6e 223b 0a20 2020 207d 0a7d 0a73 7562 \n";. }.}.sub │ │ │ │ +00000650: 2073 706c 6974 4669 6c65 4469 720a 7b0a splitFileDir.{. │ │ │ │ +00000660: 2020 2020 6d79 2024 6e61 6d65 203d 2073 my $name = s │ │ │ │ +00000670: 6869 6674 3b0a 0a20 2020 2072 6574 7572 hift;.. retur │ │ │ │ +00000680: 6e20 2827 2e27 2c20 246e 616d 6529 2075 n ('.', $name) u │ │ │ │ +00000690: 6e6c 6573 7320 2824 6e61 6d65 203d 7e2f nless ($name =~/ │ │ │ │ +000006a0: 5c2f 2f29 3b20 2020 2023 206e 7572 2065 \//); # nur e │ │ │ │ +000006b0: 696e 6661 6368 6572 2044 6174 6569 6e61 infacher Dateina │ │ │ │ +000006c0: 6d65 0a0a 2020 2020 6d79 2028 2464 6972 me.. my ($dir │ │ │ │ +000006d0: 2c20 2466 696c 6529 203d 2024 6e61 6d65 , $file) = $name │ │ │ │ +000006e0: 203d 7e20 2f5e 282e 2a29 5c2f 282e 2a29 =~ /^(.*)\/(.*) │ │ │ │ +000006f0: 242f 733b 0a20 2020 2024 6469 7220 3d20 $/s;. $dir = │ │ │ │ +00000700: 272f 2720 6966 2028 2464 6972 2065 7120 '/' if ($dir eq │ │ │ │ +00000710: 2727 293b 2020 2020 2020 2020 2020 2020 ''); │ │ │ │ +00000720: 2020 2020 2020 2023 2067 696c 742c 2066 # gilt, f │ │ │ │ +00000730: 616c 6c73 207a 2e42 2e20 2f66 696c 656e alls z.B. /filen │ │ │ │ +00000740: 616d 650a 2020 2020 7265 7475 726e 2028 ame. return ( │ │ │ │ +00000750: 2464 6972 2c20 2466 696c 6529 3b0a 7d0a $dir, $file);.}. │ │ │ │ +00000760: 6d79 2028 2472 6571 2c20 2470 726f 6729 my ($req, $prog) │ │ │ │ +00000770: 203d 2026 6c69 6250 6174 6828 2430 293b = &libPath($0); │ │ │ │ +00000780: 0a70 7573 6820 4049 4e43 2c20 2224 7265 .push @INC, "$re │ │ │ │ +00000790: 7122 3b0a 0a72 6571 7569 7265 2027 6368 q";..require 'ch │ │ │ │ +000007a0: 6563 6b50 6172 616d 322e 706c 273b 0a72 eckParam2.pl';.r │ │ │ │ +000007b0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version. │ │ │ │ +000007c0: 706c 273b 0a0a 3d68 6561 6431 204e 414d pl';..=head1 NAM │ │ │ │ +000007d0: 450a 0a6c 6c74 202d 206c 6973 7420 6372 E..llt - list cr │ │ │ │ +000007e0: 6561 7465 2c20 6163 6365 7373 2061 6e64 eate, access and │ │ │ │ +000007f0: 206d 6f64 6966 6963 6174 696f 6e20 7469 modification ti │ │ │ │ +00000800: 6d65 7320 6f66 2066 696c 6573 0a0a 3d68 mes of files..=h │ │ │ │ +00000810: 6561 6431 2053 594e 4f50 5349 530a 0a09 ead1 SYNOPSIS... │ │ │ │ +00000820: 6c6c 7420 5b2d 725d 205b 2d69 5d20 5b2d llt [-r] [-i] [- │ │ │ │ +00000830: 617c 2d6d 7c2d 635d 205b 6669 6c65 735d a|-m|-c] [files] │ │ │ │ +00000840: 205b 6469 7273 5d0a 6f72 0a20 2020 2020 [dirs].or. │ │ │ │ +00000850: 2020 206c 6c74 202d 6520 7469 6d65 0a0a llt -e time.. │ │ │ │ +00000860: 3d68 6561 6431 204f 5054 494f 4e53 0a0a =head1 OPTIONS.. │ │ │ │ +00000870: 3d6f 7665 7220 380a 0a3d 6974 656d 2042 =over 8..=item B │ │ │ │ +00000880: 3c2d 2d68 656c 703e 2c20 423c 2d68 3e0a <--help>, B<-h>. │ │ │ │ +00000890: 0a20 2020 2073 686f 7720 7468 6973 2068 . show this h │ │ │ │ +000008a0: 656c 700a 0a3d 6974 656d 2042 3c2d 2d72 elp..=item B<--r │ │ │ │ +000008b0: 6576 6572 7365 3e2c 2042 3c2d 723e 0a0a everse>, B<-r>.. │ │ │ │ +000008c0: 2020 2020 736f 7274 2069 6e20 7265 7665 sort in reve │ │ │ │ +000008d0: 7273 6520 6f72 6465 720a 0a3d 6974 656d rse order..=item │ │ │ │ +000008e0: 2042 3c2d 2d69 6e73 656e 7369 7469 7665 B<--insensitive │ │ │ │ +000008f0: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6361 >, B<-i>.. ca │ │ │ │ +00000900: 7365 2069 6e73 656e 7369 7469 7665 6c79 se insensitively │ │ │ │ +00000910: 2028 6e6f 7420 7769 7468 202d 612c 202d (not with -a, - │ │ │ │ +00000920: 6d20 6f72 202d 6329 0a0a 3d69 7465 6d20 m or -c)..=item │ │ │ │ +00000930: 423c 2d2d 6163 6365 7373 3e2c 2042 3c2d B<--access>, B<- │ │ │ │ +00000940: 613e 0a0a 2020 2020 736f 7274 2061 6363 a>.. sort acc │ │ │ │ +00000950: 6f72 6469 6e67 2074 6f20 6163 6365 7373 ording to access │ │ │ │ +00000960: 2074 696d 650a 0a3d 6974 656d 2042 3c2d time..=item B<- │ │ │ │ +00000970: 2d6d 6f64 6966 6963 6174 696f 6e3e 2c20 -modification>, │ │ │ │ +00000980: 423c 2d6d 3e0a 0a20 2020 2073 6f72 7420 B<-m>.. sort │ │ │ │ +00000990: 6163 636f 7264 696e 6720 746f 206d 6f64 according to mod │ │ │ │ +000009a0: 6966 6963 6174 696f 6e20 7469 6d65 0a0a ification time.. │ │ │ │ +000009b0: 3d69 7465 6d20 423c 2d2d 6372 6561 7469 =item B<--creati │ │ │ │ +000009c0: 6f6e 3e2c 2042 3c2d 633e 0a0a 2020 2020 on>, B<-c>.. │ │ │ │ +000009d0: 736f 7274 2061 6363 6f72 6469 6e67 2074 sort according t │ │ │ │ +000009e0: 6f20 6372 6561 7469 6f6e 2074 696d 650a o creation time. │ │ │ │ +000009f0: 0a3d 6974 656d 2042 3c2d 2d75 6e69 7854 .=item B<--unixT │ │ │ │ +00000a00: 696d 653e 2c20 423c 2d75 3e0a 0a20 2020 ime>, B<-u>.. │ │ │ │ +00000a10: 2073 686f 7720 756e 6978 2074 696d 6520 show unix time │ │ │ │ +00000a20: 2875 6e73 6967 6e65 6420 696e 7465 6765 (unsigned intege │ │ │ │ +00000a30: 7229 0a0a 3d69 7465 6d20 423c 2d56 3e0a r)..=item B<-V>. │ │ │ │ +00000a40: 0a20 2020 2070 7269 6e74 2076 6572 7369 . print versi │ │ │ │ +00000a50: 6f6e 2873 290a 0a3d 6974 656d 2042 3c2d on(s)..=item B<- │ │ │ │ +00000a60: 2d65 706f 6368 3e2c 2042 3c2d 653e 0a0a -epoch>, B<-e>.. │ │ │ │ +00000a70: 2020 2020 7061 7261 6d65 7465 7220 6973 parameter is │ │ │ │ +00000a80: 2074 6865 2074 696d 6520 7369 6e63 6520 the time since │ │ │ │ +00000a90: 6570 6f63 680a 2020 2020 6c6c 7420 7072 epoch. llt pr │ │ │ │ +00000aa0: 696e 7420 7468 6520 6461 7465 2069 6e20 int the date in │ │ │ │ +00000ab0: 6120 7265 6164 6162 6c65 2066 6f72 6d61 a readable forma │ │ │ │ +00000ac0: 740a 2020 2020 7468 6973 206f 7074 696f t. this optio │ │ │ │ +00000ad0: 6e20 6361 6e20 6265 2072 6570 6561 7465 n can be repeate │ │ │ │ +00000ae0: 6420 6d75 6c74 6970 6c65 2074 696d 6573 d multiple times │ │ │ │ +00000af0: 0a20 2020 206c 6c74 2077 696c 6c20 7374 . llt will st │ │ │ │ +00000b00: 6f70 2065 7865 6375 7469 6e67 2069 6620 op executing if │ │ │ │ +00000b10: 6e6f 206f 7468 6572 206f 7074 696f 6e73 no other options │ │ │ │ +00000b20: 206f 7220 7061 7261 6d73 2061 7265 2063 or params are c │ │ │ │ +00000b30: 686f 7365 6e0a 0a3d 6261 636b 0a0a 536f hosen..=back..So │ │ │ │ +00000b40: 7274 696e 6720 7769 7468 6f75 7420 5b2d rting without [- │ │ │ │ +00000b50: 617c 2d6d 7c2d 635d 2069 7320 736f 7274 a|-m|-c] is sort │ │ │ │ +00000b60: 696e 6720 6163 636f 7264 696e 6720 746f ing according to │ │ │ │ +00000b70: 2066 696c 6520 6e61 6d65 732e 0a0a 3d68 file names...=h │ │ │ │ +00000b80: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT.. │ │ │ │ +00000b90: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20 │ │ │ │ +00000ba0: 3030 2c32 3030 342c 3230 3038 2c32 3030 00,2004,2008,200 │ │ │ │ +00000bb0: 3920 6279 2048 6569 6e7a 2d4a 6f73 6566 9 by Heinz-Josef │ │ │ │ +00000bc0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ │ │ │ │ +00000bd0: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u │ │ │ │ +00000be0: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen │ │ │ │ +00000bf0: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00000c00: 6e73 6520 7633 206f 7220 616e 7920 6c61 nse v3 or any la │ │ │ │ +00000c10: 7465 7220 7665 7273 696f 6e2e 0a0a 3d63 ter version...=c │ │ │ │ +00000c20: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j │ │ │ │ +00000c30: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^ │ │ │ │ +00000c40: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \s*$/, `pod2text │ │ │ │ +00000c50: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = │ │ │ │ +00000c60: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 "cannot find pod │ │ │ │ +00000c70: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum │ │ │ │ +00000c80: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det │ │ │ │ +00000c90: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\n". unle │ │ │ │ +00000ca0: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin │ │ │ │ +00000cb0: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\@ARGV │ │ │ │ +00000cc0: 2c20 272d 5627 293b 0a0a 6d79 2024 4368 , '-V');..my $Ch │ │ │ │ +00000cd0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che │ │ │ │ +00000ce0: 636b 5061 7261 6d2d 3e6e 6577 280a 0909 ckParam->new(... │ │ │ │ +00000cf0: 2020 2020 272d 616c 6c6f 774c 6973 7473 '-allowLists │ │ │ │ +00000d00: 2720 3d3e 2027 7965 7327 2c0a 0909 2020 ' => 'yes',... │ │ │ │ +00000d10: 2020 272d 6c69 7374 2720 3d3e 205b 0a09 '-list' => [.. │ │ │ │ +00000d20: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +00000d30: 2d6e 616d 6527 203d 3e20 2769 6e73 656e -name' => 'insen │ │ │ │ +00000d40: 7369 7469 7665 272c 0a09 0909 0909 2020 sitive',...... │ │ │ │ +00000d50: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00000d60: 3e20 272d 6927 2c0a 0909 0909 0920 2020 > '-i',...... │ │ │ │ +00000d70: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +00000d80: 272d 696e 7365 6e73 6974 6976 6527 2c0a '-insensitive',. │ │ │ │ +00000d90: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ │ +00000da0: 6966 2720 3d3e 0a09 0920 2020 2027 6e6f if' =>... 'no │ │ │ │ +00000db0: 7420 5b61 6363 6573 735d 2061 6e64 206e t [access] and n │ │ │ │ +00000dc0: 6f74 205b 6d6f 6469 6669 6361 7469 6f6e ot [modification │ │ │ │ +00000dd0: 5d20 616e 6420 6e6f 7420 5b63 7265 6174 ] and not [creat │ │ │ │ +00000de0: 696f 6e5d 270a 0909 0909 0920 2020 2029 ion]'...... ) │ │ │ │ +00000df0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +00000e00: 7728 272d 6e61 6d65 2720 3d3e 2027 6163 w('-name' => 'ac │ │ │ │ +00000e10: 6365 7373 272c 0a09 0909 0909 2020 2020 cess',...... │ │ │ │ +00000e20: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +00000e30: 272d 6127 2c0a 0909 0909 0920 2020 2027 '-a',...... ' │ │ │ │ +00000e40: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +00000e50: 2d61 6363 6573 7327 2c0a 0909 0909 0920 -access',...... │ │ │ │ +00000e60: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' => │ │ │ │ +00000e70: 0a09 0920 2020 2027 6e6f 7420 5b6d 6f64 ... 'not [mod │ │ │ │ +00000e80: 6966 6963 6174 696f 6e5d 2061 6e64 206e ification] and n │ │ │ │ +00000e90: 6f74 205b 6372 6561 7469 6f6e 5d27 0a09 ot [creation]'.. │ │ │ │ +00000ea0: 0909 0909 2020 2020 292c 0a09 0909 094f .... ),.....O │ │ │ │ +00000eb0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00000ec0: 6527 203d 3e20 276d 6f64 6966 6963 6174 e' => 'modificat │ │ │ │ +00000ed0: 696f 6e27 2c0a 0909 0909 0920 2020 2027 ion',...... ' │ │ │ │ +00000ee0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +00000ef0: 2d6d 272c 0a09 0909 0909 2020 2020 272d -m',...... '- │ │ │ │ +00000f00: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ │ +00000f10: 6d6f 6469 6669 6361 7469 6f6e 272c 0a09 modification',.. │ │ │ │ +00000f20: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ │ +00000f30: 6627 203d 3e0a 0909 2020 2020 276e 6f74 f' =>... 'not │ │ │ │ +00000f40: 205b 6163 6365 7373 5d20 616e 6420 6e6f [access] and no │ │ │ │ +00000f50: 7420 5b63 7265 6174 696f 6e5d 270a 0909 t [creation]'... │ │ │ │ +00000f60: 0909 0920 2020 2029 2c0a 0909 0909 4f70 ... ),.....Op │ │ │ │ +00000f70: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +00000f80: 2720 3d3e 2027 6372 6561 7469 6f6e 272c ' => 'creation', │ │ │ │ +00000f90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00000fa0: 7074 696f 6e27 203d 3e20 272d 6327 2c0a ption' => '-c',. │ │ │ │ +00000fb0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ │ +00000fc0: 6961 7327 203d 3e20 272d 2d63 7265 6174 ias' => '--creat │ │ │ │ +00000fd0: 696f 6e27 2c0a 0909 0909 0920 2020 2027 ion',...... ' │ │ │ │ +00000fe0: 2d6f 6e6c 795f 6966 2720 3d3e 0a09 0920 -only_if' =>... │ │ │ │ +00000ff0: 2020 2027 6e6f 7420 5b61 6363 6573 735d 'not [access] │ │ │ │ +00001000: 2061 6e64 206e 6f74 205b 6d6f 6469 6669 and not [modifi │ │ │ │ +00001010: 6361 7469 6f6e 5d27 0a09 0909 0909 2020 cation]'...... │ │ │ │ +00001020: 2020 292c 0a09 0909 094f 7074 696f 6e2d ),.....Option- │ │ │ │ +00001030: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +00001040: 2772 6576 6572 7365 272c 0a09 0909 0909 'reverse',...... │ │ │ │ +00001050: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001060: 203d 3e20 272d 7227 2c0a 0909 0909 0920 => '-r',...... │ │ │ │ +00001070: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +00001080: 3e20 272d 2d72 6576 6572 7365 270a 0909 > '--reverse'... │ │ │ │ +00001090: 0909 0920 2020 2029 2c0a 0909 0909 4f70 ... ),.....Op │ │ │ │ +000010a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +000010b0: 2720 3d3e 2027 756e 6978 5469 6d65 272c ' => 'unixTime', │ │ │ │ +000010c0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +000010d0: 7074 696f 6e27 203d 3e20 272d 7527 2c0a ption' => '-u',. │ │ │ │ +000010e0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ │ +000010f0: 6961 7327 203d 3e20 272d 2d75 6e69 7854 ias' => '--unixT │ │ │ │ +00001100: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio │ │ │ │ +00001110: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001120: 3e20 2765 706f 6368 272c 0a09 0909 0909 > 'epoch',...... │ │ │ │ +00001130: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001140: 203d 3e20 272d 6527 2c0a 0909 0909 0920 => '-e',...... │ │ │ │ +00001150: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +00001160: 3e20 272d 2d65 706f 6368 272c 0a09 0909 > '--epoch',.... │ │ │ │ +00001170: 0909 2020 2020 272d 6d75 6c74 6970 6c65 .. '-multiple │ │ │ │ +00001180: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ │ +00001190: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +000011a0: 616d 6527 203d 3e20 2768 656c 7027 2c0a ame' => 'help',. │ │ │ │ +000011b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +000011c0: 7469 6f6e 2720 3d3e 2027 2d68 272c 0a09 tion' => '-h',.. │ │ │ │ +000011d0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +000011e0: 6173 2720 3d3e 2027 2d2d 6865 6c70 270a as' => '--help'. │ │ │ │ +000011f0: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),..... │ │ │ │ +00001200: 5d0a 0909 2020 2020 293b 0a0a 2443 6865 ]... );..$Che │ │ │ │ +00001210: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a │ │ │ │ +00001220: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \@ARGV,. │ │ │ │ +00001230: 0909 2027 2d68 656c 7027 203d 3e20 2448 .. '-help' => $H │ │ │ │ +00001240: 656c 700a 0909 2029 3b0a 0a69 6620 2824 elp... );..if ($ │ │ │ │ +00001250: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001260: 5769 7468 6f75 7450 6172 2827 6865 6c70 WithoutPar('help │ │ │ │ +00001270: 2729 290a 7b0a 2020 2020 7072 696e 7420 ')).{. print │ │ │ │ +00001280: 2224 4865 6c70 223b 0a20 2020 2065 7869 "$Help";. exi │ │ │ │ +00001290: 7420 303b 0a7d 0a0a 6d79 2024 736f 7274 t 0;.}..my $sort │ │ │ │ +000012a0: 203d 2027 6e61 6d65 273b 2020 2020 2020 = 'name'; │ │ │ │ +000012b0: 2320 4465 6661 756c 743a 2041 6c70 6861 # Default: Alpha │ │ │ │ +000012c0: 6265 7469 7363 6820 736f 7274 6965 7265 betisch sortiere │ │ │ │ +000012d0: 6e0a 2473 6f72 7420 3d20 2761 7469 6d65 n.$sort = 'atime │ │ │ │ +000012e0: 2720 6966 2028 2443 6865 636b 5061 722d ' if ($CheckPar- │ │ │ │ +000012f0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +00001300: 7228 2761 6363 6573 7327 2929 3b0a 2473 r('access'));.$s │ │ │ │ +00001310: 6f72 7420 3d20 276d 7469 6d65 2720 6966 ort = 'mtime' if │ │ │ │ +00001320: 2028 2443 6865 636b 5061 722d 3e67 6574 ($CheckPar->get │ │ │ │ +00001330: 4f70 7457 6974 686f 7574 5061 7228 276d OptWithoutPar('m │ │ │ │ +00001340: 6f64 6966 6963 6174 696f 6e27 2929 3b0a odification'));. │ │ │ │ +00001350: 2473 6f72 7420 3d20 2763 7469 6d65 2720 $sort = 'ctime' │ │ │ │ +00001360: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g │ │ │ │ +00001370: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ │ +00001380: 2763 7265 6174 696f 6e27 2929 3b0a 6d79 'creation'));.my │ │ │ │ +00001390: 2024 7265 7665 7273 6520 3d20 3120 6966 $reverse = 1 if │ │ │ │ +000013a0: 2028 2443 6865 636b 5061 722d 3e67 6574 ($CheckPar->get │ │ │ │ +000013b0: 4f70 7457 6974 686f 7574 5061 7228 2772 OptWithoutPar('r │ │ │ │ +000013c0: 6576 6572 7365 2729 293b 0a6d 7920 2469 everse'));.my $i │ │ │ │ +000013d0: 6e73 656e 7369 7469 7665 203d 2031 2069 nsensitive = 1 i │ │ │ │ +000013e0: 6620 2824 4368 6563 6b50 6172 2d3e 6765 f ($CheckPar->ge │ │ │ │ +000013f0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ │ +00001400: 696e 7365 6e73 6974 6976 6527 2929 3b0a insensitive'));. │ │ │ │ +00001410: 6d79 2024 756e 6978 5469 6d65 203d 2024 my $unixTime = $ │ │ │ │ +00001420: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001430: 5769 7468 6f75 7450 6172 2827 756e 6978 WithoutPar('unix │ │ │ │ +00001440: 5469 6d65 2729 3b0a 6d79 2024 6570 6f63 Time');.my $epoc │ │ │ │ +00001450: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g │ │ │ │ +00001460: 6574 4f70 7457 6974 6850 6172 2827 6570 etOptWithPar('ep │ │ │ │ +00001470: 6f63 6827 293b 0a0a 6d79 2028 4061 6c6c och');..my (@all │ │ │ │ +00001480: 2920 3d20 2824 4368 6563 6b50 6172 2d3e ) = ($CheckPar-> │ │ │ │ +00001490: 6765 744c 6973 7450 6172 2829 293b 0a0a getListPar());.. │ │ │ │ +000014a0: 0a69 6620 2824 6570 6f63 6829 0a7b 0a20 .if ($epoch).{. │ │ │ │ +000014b0: 2020 206d 7920 2824 6570 293b 0a20 2020 my ($ep);. │ │ │ │ +000014c0: 2066 6f72 6561 6368 2024 6570 2028 4024 foreach $ep (@$ │ │ │ │ +000014d0: 6570 6f63 6829 0a20 2020 207b 0a09 7072 epoch). {..pr │ │ │ │ +000014e0: 696e 7420 2224 6570 202d 3e20 222c 2026 int "$ep -> ", & │ │ │ │ +000014f0: 6765 7454 696d 6528 2465 7029 2c20 225c getTime($ep), "\ │ │ │ │ +00001500: 6e22 3b0a 2020 2020 7d0a 2020 2020 6578 n";. }. ex │ │ │ │ +00001510: 6974 2030 2075 6e6c 6573 7320 4061 6c6c it 0 unless @all │ │ │ │ +00001520: 3b0a 7d0a 0a28 4061 6c6c 2920 3d20 2827 ;.}..(@all) = (' │ │ │ │ +00001530: 2e27 2920 756e 6c65 7373 2040 616c 6c3b .') unless @all; │ │ │ │ +00001540: 0a0a 6d79 2028 4066 696c 6573 293b 0a6d ..my (@files);.m │ │ │ │ +00001550: 7920 2466 3b0a 666f 7265 6163 6820 2466 y $f;.foreach $f │ │ │ │ +00001560: 2028 4061 6c6c 290a 7b0a 2020 2020 6966 (@all).{. if │ │ │ │ +00001570: 2028 2d64 2024 6629 2020 2020 2320 7765 (-d $f) # we │ │ │ │ +00001580: 6e6e 2044 6972 6563 746f 7279 0a20 2020 nn Directory. │ │ │ │ +00001590: 207b 0a09 6f70 656e 6469 7228 4449 522c {..opendir(DIR, │ │ │ │ +000015a0: 2024 6629 206f 7220 7072 696e 7420 5354 $f) or print ST │ │ │ │ +000015b0: 4445 5252 2022 6361 6e6e 6f74 206f 7065 DERR "cannot ope │ │ │ │ +000015c0: 6e20 3c24 663e 5c6e 223b 0a09 6d79 2024 n <$f>\n";..my $ │ │ │ │ +000015d0: 6631 3b0a 0966 6f72 6561 6368 2024 6631 f1;..foreach $f1 │ │ │ │ +000015e0: 2028 7265 6164 6469 7228 4449 5229 290a (readdir(DIR)). │ │ │ │ +000015f0: 097b 0a09 2020 2020 7075 7368 2040 6669 .{.. push @fi │ │ │ │ +00001600: 6c65 732c 2022 2466 2f24 6631 223b 0a09 les, "$f/$f1";.. │ │ │ │ +00001610: 7d0a 0963 6c6f 7365 6469 7228 4449 5229 }..closedir(DIR) │ │ │ │ +00001620: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00001630: 2020 2020 2020 2020 2020 2320 4461 7465 # Date │ │ │ │ +00001640: 690a 2020 2020 7b0a 0969 6620 282d 6620 i. {..if (-f │ │ │ │ +00001650: 2466 290a 097b 0a09 2020 2020 7075 7368 $f)..{.. push │ │ │ │ +00001660: 2040 6669 6c65 732c 2024 663b 0a09 7d0a @files, $f;..}. │ │ │ │ +00001670: 0965 6c73 650a 097b 0a09 2020 2020 7072 .else..{.. pr │ │ │ │ +00001680: 696e 7420 2243 616e 6e6f 7420 6f70 656e int "Cannot open │ │ │ │ +00001690: 2066 696c 6520 3c24 663e 5c6e 223b 0a09 file <$f>\n";.. │ │ │ │ +000016a0: 7d0a 2020 2020 7d0a 7d0a 0a23 2045 726d }. }.}..# Erm │ │ │ │ +000016b0: 6974 7465 6c6e 2064 6572 205a 6569 7465 itteln der Zeite │ │ │ │ +000016c0: 6e0a 6d79 2028 4066 293b 0a66 6f72 6561 n.my (@f);.forea │ │ │ │ +000016d0: 6368 2024 6620 2840 6669 6c65 7329 0a7b ch $f (@files).{ │ │ │ │ +000016e0: 0a20 2020 206d 7920 2824 6174 696d 652c . my ($atime, │ │ │ │ +000016f0: 2024 6d74 696d 652c 2024 6374 696d 6529 $mtime, $ctime) │ │ │ │ +00001700: 203d 2028 6c73 7461 7428 2466 2929 5b38 = (lstat($f))[8 │ │ │ │ +00001710: 2c39 2c31 305d 3b0a 2020 2020 6d79 2025 ,9,10];. my % │ │ │ │ +00001720: 6820 3d20 2827 6e61 6d65 2720 3d3e 2024 h = ('name' => $ │ │ │ │ +00001730: 662c 0a09 2020 2020 2027 6174 696d 6527 f,.. 'atime' │ │ │ │ +00001740: 203d 3e20 2461 7469 6d65 2c0a 0920 2020 => $atime,.. │ │ │ │ +00001750: 2020 276d 7469 6d65 2720 3d3e 2024 6d74 'mtime' => $mt │ │ │ │ +00001760: 696d 652c 0a09 2020 2020 2027 6374 696d ime,.. 'ctim │ │ │ │ +00001770: 6527 203d 3e20 2463 7469 6d65 0a09 2020 e' => $ctime.. │ │ │ │ +00001780: 2020 2029 3b0a 2020 2020 7075 7368 2040 );. push @ │ │ │ │ +00001790: 662c 205c 2568 3b0a 7d0a 0a23 2053 6f72 f, \%h;.}..# Sor │ │ │ │ +000017a0: 7469 6572 656e 0a6d 7920 2840 7366 293b tieren.my (@sf); │ │ │ │ +000017b0: 0a69 6620 2824 736f 7274 2065 7120 276e .if ($sort eq 'n │ │ │ │ +000017c0: 616d 6527 290a 7b0a 2020 2020 6966 2028 ame').{. if ( │ │ │ │ +000017d0: 2469 6e73 656e 7369 7469 7665 290a 2020 $insensitive). │ │ │ │ +000017e0: 2020 7b0a 0940 7366 203d 2024 7265 7665 {..@sf = $reve │ │ │ │ +000017f0: 7273 6520 3f20 736f 7274 207b 2075 6328 rse ? sort { uc( │ │ │ │ +00001800: 2462 2d3e 7b24 736f 7274 7d29 2063 6d70 $b->{$sort}) cmp │ │ │ │ +00001810: 2075 6328 2461 2d3e 7b24 736f 7274 7d29 uc($a->{$sort}) │ │ │ │ +00001820: 207d 2040 660a 0920 2020 203a 2073 6f72 } @f.. : sor │ │ │ │ +00001830: 7420 7b20 7563 2824 612d 3e7b 2473 6f72 t { uc($a->{$sor │ │ │ │ +00001840: 747d 2920 636d 7020 7563 2824 622d 3e7b t}) cmp uc($b->{ │ │ │ │ +00001850: 2473 6f72 747d 2920 7d20 4066 3b0a 2020 $sort}) } @f;. │ │ │ │ +00001860: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +00001870: 207b 0a09 4073 6620 3d20 2472 6576 6572 {..@sf = $rever │ │ │ │ +00001880: 7365 203f 2073 6f72 7420 7b20 2462 2d3e se ? sort { $b-> │ │ │ │ +00001890: 7b24 736f 7274 7d20 636d 7020 2461 2d3e {$sort} cmp $a-> │ │ │ │ +000018a0: 7b24 736f 7274 7d20 7d20 4066 0a09 2020 {$sort} } @f.. │ │ │ │ +000018b0: 2020 3a20 736f 7274 207b 2024 612d 3e7b : sort { $a->{ │ │ │ │ +000018c0: 2473 6f72 747d 2063 6d70 2024 622d 3e7b $sort} cmp $b->{ │ │ │ │ +000018d0: 2473 6f72 747d 207d 2040 663b 0a20 2020 $sort} } @f;. │ │ │ │ +000018e0: 207d 0a7d 0a65 6c73 650a 7b0a 2020 2020 }.}.else.{. │ │ │ │ +000018f0: 4073 6620 3d20 2472 6576 6572 7365 203f @sf = $reverse ? │ │ │ │ +00001900: 0a09 736f 7274 207b 2024 622d 3e7b 2473 ..sort { $b->{$s │ │ │ │ +00001910: 6f72 747d 203c 3d3e 2024 612d 3e7b 2473 ort} <=> $a->{$s │ │ │ │ +00001920: 6f72 747d 207d 2040 6620 3a0a 0973 6f72 ort} } @f :..sor │ │ │ │ +00001930: 7420 7b20 2461 2d3e 7b24 736f 7274 7d20 t { $a->{$sort} │ │ │ │ +00001940: 3c3d 3e20 2462 2d3e 7b24 736f 7274 7d20 <=> $b->{$sort} │ │ │ │ +00001950: 7d20 4066 3b0a 7d0a 0a23 2041 7573 6761 } @f;.}..# Ausga │ │ │ │ +00001960: 6265 0a6d 7920 246c 656e 203d 2024 756e be.my $len = $un │ │ │ │ +00001970: 6978 5469 6d65 203f 2031 3120 3a20 3139 ixTime ? 11 : 19 │ │ │ │ +00001980: 3b0a 7072 696e 7466 2022 252d 247b 6c65 ;.printf "%-${le │ │ │ │ +00001990: 6e7d 7320 2025 2d24 7b6c 656e 7d73 2020 n}s %-${len}s │ │ │ │ +000019a0: 252d 247b 6c65 6e7d 7320 205b 5469 6d65 %-${len}s [Time │ │ │ │ +000019b0: 5d5c 6e22 2c20 2261 6363 6573 7322 2c0a ]\n", "access",. │ │ │ │ +000019c0: 2020 2020 226d 6f64 6966 6963 6174 696f "modificatio │ │ │ │ +000019d0: 6e22 2c20 2263 7265 6174 696f 6e22 3b0a n", "creation";. │ │ │ │ +000019e0: 666f 7265 6163 6820 2466 2028 4073 6629 foreach $f (@sf) │ │ │ │ +000019f0: 0a7b 0a20 2020 206d 7920 2474 3b0a 2020 .{. my $t;. │ │ │ │ +00001a00: 2020 666f 7265 6163 6820 2474 2028 2466 foreach $t ($f │ │ │ │ +00001a10: 2d3e 7b27 6174 696d 6527 7d2c 2024 662d ->{'atime'}, $f- │ │ │ │ +00001a20: 3e7b 276d 7469 6d65 277d 2c20 2466 2d3e >{'mtime'}, $f-> │ │ │ │ +00001a30: 7b27 6374 696d 6527 7d29 0a20 2020 207b {'ctime'}). { │ │ │ │ +00001a40: 0a09 6966 2028 2475 6e69 7854 696d 6529 ..if ($unixTime) │ │ │ │ +00001a50: 0a09 7b0a 0920 2020 2070 7269 6e74 2022 ..{.. print " │ │ │ │ +00001a60: 2474 2020 2022 2c0a 097d 0a09 656c 7365 $t ",..}..else │ │ │ │ +00001a70: 0a09 7b0a 0920 2020 2070 7269 6e74 2026 ..{.. print & │ │ │ │ +00001a80: 6765 7454 696d 6528 2474 292c 2022 2020 getTime($t), " │ │ │ │ +00001a90: 223b 0a09 7d0a 2020 2020 7d0a 2020 2020 ";..}. }. │ │ │ │ +00001aa0: 7072 696e 7420 2466 2d3e 7b27 6e61 6d65 print $f->{'name │ │ │ │ +00001ab0: 277d 2c20 225c 6e22 3b0a 7d0a 0a65 7869 '}, "\n";.}..exi │ │ │ │ +00001ac0: 7420 303b 0a0a 0a73 7562 2067 6574 5469 t 0;...sub getTi │ │ │ │ +00001ad0: 6d65 0a7b 0a20 2020 206d 7920 2474 203d me.{. my $t = │ │ │ │ +00001ae0: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my │ │ │ │ +00001af0: 2824 7365 632c 246d 696e 2c24 686f 7572 ($sec,$min,$hour │ │ │ │ +00001b00: 2c24 6d64 6179 2c24 6d6f 6e2c 2479 6561 ,$mday,$mon,$yea │ │ │ │ +00001b10: 7229 203d 206c 6f63 616c 7469 6d65 2824 r) = localtime($ │ │ │ │ +00001b20: 7429 3b0a 2020 2020 7265 7475 726e 2073 t);. return s │ │ │ │ +00001b30: 7072 696e 7466 2822 2534 642e 2530 3264 printf("%4d.%02d │ │ │ │ +00001b40: 2e25 3032 6420 2530 3264 3a25 3032 643a .%02d %02d:%02d: │ │ │ │ +00001b50: 2530 3264 222c 0a09 0920 2020 2479 6561 %02d",... $yea │ │ │ │ +00001b60: 722b 3139 3030 2c20 246d 6f6e 2b31 2c20 r+1900, $mon+1, │ │ │ │ +00001b70: 246d 6461 792c 0a09 0920 2020 2468 6f75 $mday,... $hou │ │ │ │ +00001b80: 722c 2024 6d69 6e2c 2024 7365 6329 3b0a r, $min, $sec);. │ │ │ │ +00001b90: 7d0a 0a }.. │ │ │ ├── ./usr/bin/storeBackup │ │ │ │ @@ -1,4 +1,14722 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 700a p. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 312d 3230 3132 290a 2320 2020 2020 2020 1-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ │ +00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ │ +00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ │ +00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ │ +000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ │ +000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ │ +000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ │ +000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ │ +000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ │ +000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ │ +00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ │ +00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ │ +00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ │ +00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ │ +00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ │ +00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ │ +00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ │ +00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ │ +00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ │ +00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ │ +000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ │ +000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ │ +000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ │ +000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ │ +000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ │ +000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ │ +00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ │ +00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ │ +00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ │ +00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ │ +00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ │ +00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ │ +00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ │ +00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ │ +00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ │ +000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ │ +000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ │ +000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ │ +000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#..requi │ │ │ │ +00000300: 7265 2053 4442 4d5f 4669 6c65 3b0a 7265 re SDBM_File;.re │ │ │ │ +00000310: 7175 6972 6520 5469 653a 3a48 6173 683b quire Tie::Hash; │ │ │ │ +00000320: 0a0a 7573 6520 4663 6e74 6c20 7177 284f ..use Fcntl qw(O │ │ │ │ +00000330: 5f52 4457 5220 4f5f 4352 4541 5429 3b0a _RDWR O_CREAT);. │ │ │ │ +00000340: 7573 6520 504f 5349 583b 0a75 7365 2044 use POSIX;.use D │ │ │ │ +00000350: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md │ │ │ │ +00000360: 355f 6865 7829 3b0a 0a75 7365 2073 7472 5_hex);..use str │ │ │ │ +00000370: 6963 743b 0a75 7365 2077 6172 6e69 6e67 ict;.use warning │ │ │ │ +00000380: 733b 0a0a 6d79 2024 5645 5253 494f 4e20 s;..my $VERSION │ │ │ │ +00000390: 3d20 2724 4964 3a20 7374 6f72 6542 6163 = '$Id: storeBac │ │ │ │ +000003a0: 6b75 702e 706c 2033 3634 2032 3031 322d kup.pl 364 2012- │ │ │ │ +000003b0: 3032 2d31 3220 3134 3a31 343a 3434 5a20 02-12 14:14:44Z │ │ │ │ +000003c0: 686a 6320 2420 273b 0a6f 7572 2040 5645 hjc $ ';.our @VE │ │ │ │ +000003d0: 5253 494f 4e3b 0a70 7573 6820 4056 4552 RSION;.push @VER │ │ │ │ +000003e0: 5349 4f4e 2c20 2456 4552 5349 4f4e 3b0a SION, $VERSION;. │ │ │ │ +000003f0: 6d79 2028 2456 4552 5349 4f4e 704e 616d my ($VERSIONpNam │ │ │ │ +00000400: 652c 2024 5645 5253 494f 4e73 766e 4944 e, $VERSIONsvnID │ │ │ │ +00000410: 2920 3d20 2456 4552 5349 4f4e 203d 7e20 ) = $VERSION =~ │ │ │ │ +00000420: 2f49 643a 5c73 2b28 5c53 2b29 5c73 2b28 /Id:\s+(\S+)\s+( │ │ │ │ +00000430: 5c64 2b29 2f3b 0a24 6d61 696e 3a3a 5354 \d+)/;.$main::ST │ │ │ │ +00000440: 4f52 4542 4143 4b55 5056 4552 5349 4f4e OREBACKUPVERSION │ │ │ │ +00000450: 203d 2075 6e64 6566 3b0a 0a0a 7573 6520 = undef;...use │ │ │ │ +00000460: 4442 5f46 696c 653b 2020 2020 2020 2020 DB_File; │ │ │ │ +00000470: 2020 2023 2042 6572 6b65 6c65 7920 4442 # Berkeley DB │ │ │ │ +00000480: 0a0a 0a73 7562 206c 6962 5061 7468 0a7b ...sub libPath.{ │ │ │ │ +00000490: 0a20 2020 206d 7920 2466 696c 6520 3d20 . my $file = │ │ │ │ +000004a0: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $ │ │ │ │ +000004b0: 6469 723b 0a0a 2020 2020 2320 4661 6c6c dir;.. # Fall │ │ │ │ +000004c0: 7320 4461 7465 6920 7365 6c62 7374 2065 s Datei selbst e │ │ │ │ +000004d0: 696e 2073 796d 6c69 6e6b 2069 7374 2c20 in symlink ist, │ │ │ │ +000004e0: 736f 6c61 6e67 6520 666f 6c67 656e 2c20 solange folgen, │ │ │ │ +000004f0: 6269 7320 6175 6667 656c c3b6 7374 0a20 bis aufgel..st. │ │ │ │ +00000500: 2020 2069 6620 282d 6620 2466 696c 6529 if (-f $file) │ │ │ │ +00000510: 0a20 2020 207b 0a09 7768 696c 6520 282d . {..while (- │ │ │ │ +00000520: 6c20 2466 696c 6529 0a09 7b0a 0920 2020 l $file)..{.. │ │ │ │ +00000530: 206d 7920 246c 696e 6b20 3d20 7265 6164 my $link = read │ │ │ │ +00000540: 6c69 6e6b 2824 6669 6c65 293b 0a0a 0920 link($file);... │ │ │ │ +00000550: 2020 2069 6620 2873 7562 7374 7228 246c if (substr($l │ │ │ │ +00000560: 696e 6b2c 2030 2c20 3129 206e 6520 222f ink, 0, 1) ne "/ │ │ │ │ +00000570: 2229 0a09 2020 2020 7b0a 0909 2466 696c ").. {...$fil │ │ │ │ +00000580: 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 e =~ s/[^\/]+$/$ │ │ │ │ +00000590: 6c69 6e6b 2f3b 0a20 2020 2020 2020 2020 link/;. │ │ │ │ +000005a0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ │ +000005b0: 2020 2020 7b0a 0909 2466 696c 6520 3d20 {...$file = │ │ │ │ +000005c0: 246c 696e 6b3b 0a09 2020 2020 7d0a 097d $link;.. }..} │ │ │ │ +000005d0: 0a0a 0928 2464 6972 2c20 2466 696c 6529 ...($dir, $file) │ │ │ │ +000005e0: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir │ │ │ │ +000005f0: 2824 6669 6c65 293b 0a09 2466 696c 6520 ($file);..$file │ │ │ │ +00000600: 3d20 222f 2466 696c 6522 3b0a 2020 2020 = "/$file";. │ │ │ │ +00000610: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. { │ │ │ │ +00000620: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR " │ │ │ │ +00000630: 3c24 6669 6c65 3e20 646f 6573 206e 6f74 <$file> does not │ │ │ │ +00000640: 2065 7869 7374 215c 6e22 3b0a 0965 7869 exist!\n";..exi │ │ │ │ +00000650: 7420 313b 0a20 2020 207d 0a0a 2020 2020 t 1;. }.. │ │ │ │ +00000660: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= "/../lib │ │ │ │ +00000670: 223b 2020 2020 2020 2020 2020 2023 2050 "; # P │ │ │ │ +00000680: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli │ │ │ │ +00000690: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $ │ │ │ │ +000006a0: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p │ │ │ │ +000006b0: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $ │ │ │ │ +000006c0: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if ( │ │ │ │ +000006d0: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). │ │ │ │ +000006e0: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = │ │ │ │ +000006f0: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho │ │ │ │ +00000700: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi │ │ │ │ +00000710: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret │ │ │ │ +00000720: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD │ │ │ │ +00000730: 6972 2822 2461 6273 4469 7224 6669 6c65 ir("$absDir$file │ │ │ │ +00000740: 2229 293b 0a20 2020 207d 0a20 2020 2065 "));. }. e │ │ │ │ +00000750: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print │ │ │ │ +00000760: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR "<$dir> │ │ │ │ +00000770: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, │ │ │ │ +00000780: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\n";. │ │ │ │ +00000790: 7d0a 7d0a 7375 6220 7370 6c69 7446 696c }.}.sub splitFil │ │ │ │ +000007a0: 6544 6972 0a7b 0a20 2020 206d 7920 246e eDir.{. my $n │ │ │ │ +000007b0: 616d 6520 3d20 7368 6966 743b 0a0a 2020 ame = shift;.. │ │ │ │ +000007c0: 2020 7265 7475 726e 2028 272e 272c 2024 return ('.', $ │ │ │ │ +000007d0: 6e61 6d65 2920 756e 6c65 7373 2028 246e name) unless ($n │ │ │ │ +000007e0: 616d 6520 3d7e 2f5c 2f2f 293b 2020 2020 ame =~/\//); │ │ │ │ +000007f0: 2320 6e75 7220 6569 6e66 6163 6865 7220 # nur einfacher │ │ │ │ +00000800: 4461 7465 696e 616d 650a 0a20 2020 206d Dateiname.. m │ │ │ │ +00000810: 7920 2824 6469 722c 2024 6669 6c65 2920 y ($dir, $file) │ │ │ │ +00000820: 3d20 246e 616d 6520 3d7e 202f 5e28 2e2a = $name =~ /^(.* │ │ │ │ +00000830: 295c 2f28 2e2a 2924 2f73 3b0a 2020 2020 )\/(.*)$/s;. │ │ │ │ +00000840: 2464 6972 203d 2027 2f27 2069 6620 2824 $dir = '/' if ($ │ │ │ │ +00000850: 6469 7220 6571 2027 2729 3b20 2020 2020 dir eq ''); │ │ │ │ +00000860: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +00000870: 6769 6c74 2c20 6661 6c6c 7320 7a2e 422e gilt, falls z.B. │ │ │ │ +00000880: 202f 6669 6c65 6e61 6d65 0a20 2020 2072 /filename. r │ │ │ │ +00000890: 6574 7572 6e20 2824 6469 722c 2024 6669 eturn ($dir, $fi │ │ │ │ +000008a0: 6c65 293b 0a7d 0a6d 7920 2824 7265 712c le);.}.my ($req, │ │ │ │ +000008b0: 2024 7072 6f67 2920 3d20 266c 6962 5061 $prog) = &libPa │ │ │ │ +000008c0: 7468 2824 3029 3b0a 2840 494e 4329 203d th($0);.(@INC) = │ │ │ │ +000008d0: 2028 2472 6571 2c20 4049 4e43 293b 0a0a ($req, @INC);.. │ │ │ │ +000008e0: 7265 7175 6972 6520 2763 6865 636b 5061 require 'checkPa │ │ │ │ +000008f0: 7261 6d32 2e70 6c27 3b0a 7265 7175 6972 ram2.pl';.requir │ │ │ │ +00000900: 6520 2763 6865 636b 4f62 6a50 6172 2e70 e 'checkObjPar.p │ │ │ │ +00000910: 6c27 3b0a 7265 7175 6972 6520 2770 724c l';.require 'prL │ │ │ │ +00000920: 6f67 2e70 6c27 3b0a 7265 7175 6972 6520 og.pl';.require │ │ │ │ +00000930: 2773 706c 6974 4c69 6e65 2e70 6c27 3b0a 'splitLine.pl';. │ │ │ │ +00000940: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir │ │ │ │ +00000950: 2e70 6c27 3b0a 7265 7175 6972 6520 2764 .pl';.require 'd │ │ │ │ +00000960: 6174 6554 6f6f 6c73 2e70 6c27 3b0a 7265 ateTools.pl';.re │ │ │ │ +00000970: 7175 6972 6520 2766 6f72 6b50 726f 632e quire 'forkProc. │ │ │ │ +00000980: 706c 273b 0a72 6571 7569 7265 2027 6875 pl';.require 'hu │ │ │ │ +00000990: 6d61 6e52 6561 642e 706c 273b 0a72 6571 manRead.pl';.req │ │ │ │ +000009a0: 7569 7265 2027 7665 7273 696f 6e2e 706c uire 'version.pl │ │ │ │ +000009b0: 273b 0a72 6571 7569 7265 2027 6576 616c ';.require 'eval │ │ │ │ +000009c0: 546f 6f6c 732e 706c 273b 0a72 6571 7569 Tools.pl';.requi │ │ │ │ +000009d0: 7265 2027 7374 6f72 6542 6163 6b75 704c re 'storeBackupL │ │ │ │ +000009e0: 6962 2e70 6c27 3b0a 0a6e 6f20 7761 726e ib.pl';..no warn │ │ │ │ +000009f0: 696e 6773 2027 6e65 776c 696e 6527 3b20 ings 'newline'; │ │ │ │ +00000a00: 2020 2023 206e 6f20 7761 726e 696e 6720 # no warning │ │ │ │ +00000a10: 666f 7220 7374 6174 206f 6620 6669 6c65 for stat of file │ │ │ │ +00000a20: 7320 7769 7468 206e 6577 6c69 6e65 0a20 s with newline. │ │ │ │ +00000a30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000a40: 2020 2020 2020 2020 2023 2077 6f72 6b73 # works │ │ │ │ +00000a50: 2069 6e20 7065 726c 2035 2e36 2b20 6f6e in perl 5.6+ on │ │ │ │ +00000a60: 6c79 0a0a 232f 7573 722f 696e 636c 7564 ly..#/usr/includ │ │ │ │ +00000a70: 652f 6c69 6e75 782f 6c69 6d69 7473 2e68 e/linux/limits.h │ │ │ │ +00000a80: 3a23 6465 6669 6e65 2041 5247 5f4d 4158 :#define ARG_MAX │ │ │ │ +00000a90: 2020 2020 2020 2031 3331 3037 3220 2020 131072 │ │ │ │ +00000aa0: 2020 2020 202f 2a20 230a 2362 7974 6573 /* #.#bytes │ │ │ │ +00000ab0: 206f 6620 6172 6773 202b 2065 6e76 6972 of args + envir │ │ │ │ +00000ac0: 6f6e 2066 6f72 2065 7865 6328 2920 2a2f on for exec() */ │ │ │ │ +00000ad0: 0a23 0a23 0a23 4175 7320 6465 6d20 536f .#.#.#Aus dem So │ │ │ │ +00000ae0: 7572 6365 2066 c3bc 7220 2278 6172 6773 urce f..r "xargs │ │ │ │ +00000af0: 2220 6765 6874 2068 6572 766f 723a 0a23 " geht hervor:.# │ │ │ │ +00000b00: 0a23 2020 6f72 6967 5f61 7267 5f6d 6178 .# orig_arg_max │ │ │ │ +00000b10: 203d 2041 5247 5f4d 4158 202d 2032 3034 = ARG_MAX - 204 │ │ │ │ +00000b20: 383b 202f 2a20 504f 5349 582e 3220 7265 8; /* POSIX.2 re │ │ │ │ +00000b30: 7175 6972 6573 2073 7562 7472 6163 7469 quires subtracti │ │ │ │ +00000b40: 6e67 2032 3034 382e 202a 2f0a 2320 2061 ng 2048. */.# a │ │ │ │ +00000b50: 7267 5f6d 6178 203d 206f 7269 675f 6172 rg_max = orig_ar │ │ │ │ +00000b60: 675f 6d61 783b 0a0a 246d 6169 6e3a 3a73 g_max;..$main::s │ │ │ │ +00000b70: 7462 754d 6435 4578 6563 203d 2022 2472 tbuMd5Exec = "$r │ │ │ │ +00000b80: 6571 2f73 7462 754d 6435 4578 6563 2e70 eq/stbuMd5Exec.p │ │ │ │ +00000b90: 6c22 3b0a 246d 6169 6e3a 3a73 7462 754d l";.$main::stbuM │ │ │ │ +00000ba0: 6435 6370 203d 2022 2472 6571 2f73 7462 d5cp = "$req/stb │ │ │ │ +00000bb0: 754d 6435 6370 2e70 6c22 3b0a 246d 6169 uMd5cp.pl";.$mai │ │ │ │ +00000bc0: 6e3a 3a65 6e64 4f66 5374 6f72 6542 6163 n::endOfStoreBac │ │ │ │ +00000bd0: 6b75 7020 3d20 303b 0a24 6d61 696e 3a3a kup = 0;.$main:: │ │ │ │ +00000be0: 6578 6563 5061 7261 6d4c 656e 6774 6820 execParamLength │ │ │ │ +00000bf0: 3d20 3420 2a20 3130 3234 3b20 2020 2020 = 4 * 1024; │ │ │ │ +00000c00: 2023 2044 6566 6175 6c74 2057 6572 742c # Default Wert, │ │ │ │ +00000c10: 2073 6568 7220 6e69 6564 7269 6720 616e sehr niedrig an │ │ │ │ +00000c20: 6765 7365 747a 740a 246d 6169 6e3a 3a6d gesetzt.$main::m │ │ │ │ +00000c30: 696e 436f 7079 5769 7468 466f 726b 203d inCopyWithFork = │ │ │ │ +00000c40: 2031 3032 342a 2a32 3b20 2020 2020 2020 1024**2; │ │ │ │ +00000c50: 2320 616c 6c65 7320 7761 7320 3c3d 2069 # alles was <= i │ │ │ │ +00000c60: 7374 2c20 7769 7264 2069 6e20 7065 726c st, wird in perl │ │ │ │ +00000c70: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00000c80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000c90: 2020 2020 2020 2020 2023 206b 6f70 6965 # kopie │ │ │ │ +00000ca0: 7274 2c20 7761 7320 3e20 6973 742c 206d rt, was > ist, m │ │ │ │ +00000cb0: 6974 2066 6f72 6b0a 6d79 2028 2565 7865 it fork.my (%exe │ │ │ │ +00000cc0: 6350 6172 616d 4c65 6e67 7468 2920 3d20 cParamLength) = │ │ │ │ +00000cd0: 2827 4149 5827 203d 3e20 3232 202a 2031 ('AIX' => 22 * 1 │ │ │ │ +00000ce0: 3032 342c 0a09 0909 2027 4c69 6e75 7827 024,.... 'Linux' │ │ │ │ +00000cf0: 203d 3e20 3632 202a 2031 3032 3429 3b0a => 62 * 1024);. │ │ │ │ +00000d00: 246d 6169 6e3a 3a73 6f75 7263 6544 6972 $main::sourceDir │ │ │ │ +00000d10: 203d 2027 273b 2020 2020 2020 2020 2020 = ''; │ │ │ │ +00000d20: 2020 2020 2020 2020 2320 7365 7420 666f # set fo │ │ │ │ +00000d30: 7220 6d61 696e 3a3a 434f 4d52 4553 530a r main::COMRESS. │ │ │ │ +00000d40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000d50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000d60: 2020 2020 2020 2020 2320 7061 7468 2074 # path t │ │ │ │ +00000d70: 6f20 6261 636b 7570 2064 6972 6563 746f o backup directo │ │ │ │ +00000d80: 7279 0a0a 0a6d 7920 2473 746f 7265 4261 ry...my $storeBa │ │ │ │ +00000d90: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup │ │ │ │ +00000da0: 5f70 7267 203d 2027 7374 6f72 6542 6163 _prg = 'storeBac │ │ │ │ +00000db0: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup. │ │ │ │ +00000dc0: 706c 273b 0a6d 7920 246c 6f63 6b46 696c pl';.my $lockFil │ │ │ │ +00000dd0: 6520 3d20 272f 746d 702f 7374 6f72 6542 e = '/tmp/storeB │ │ │ │ +00000de0: 6163 6b75 702e 6c6f 636b 273b 2020 2023 ackup.lock'; # │ │ │ │ +00000df0: 2064 6566 6175 6c74 2076 616c 7565 0a6d default value.m │ │ │ │ +00000e00: 7920 2840 636f 6d70 7265 7373 2920 3d20 y (@compress) = │ │ │ │ +00000e10: 2827 627a 6970 3227 293b 2020 2020 2020 ('bzip2'); │ │ │ │ +00000e20: 2020 2020 2020 2020 2023 2064 6566 6175 # defau │ │ │ │ +00000e30: 6c74 2076 616c 7565 0a6d 7920 2840 756e lt value.my (@un │ │ │ │ +00000e40: 636f 6d70 7265 7373 2920 3d20 2827 627a compress) = ('bz │ │ │ │ +00000e50: 6970 3227 2c20 272d 6427 293b 2020 2020 ip2', '-d'); │ │ │ │ +00000e60: 2020 2023 2064 6566 6175 6c74 2076 616c # default val │ │ │ │ +00000e70: 7565 0a6d 7920 246d 696e 436f 6d70 7265 ue.my $minCompre │ │ │ │ +00000e80: 7373 5369 7a65 203d 2031 3032 343b 2020 ssSize = 1024; │ │ │ │ +00000e90: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v │ │ │ │ +00000ea0: 616c 7565 0a6d 7920 2470 6f73 7466 6978 alue.my $postfix │ │ │ │ +00000eb0: 203d 2027 2e62 7a32 273b 2020 2020 2020 = '.bz2'; │ │ │ │ +00000ec0: 2020 2020 2020 2023 2064 6566 6175 6c74 # default │ │ │ │ +00000ed0: 2076 616c 7565 0a6d 7920 2471 7565 7565 value.my $queue │ │ │ │ +00000ee0: 436f 6d70 7265 7373 203d 2031 3030 303b Compress = 1000; │ │ │ │ +00000ef0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau │ │ │ │ +00000f00: 6c74 2076 616c 7565 0a6d 7920 2471 7565 lt value.my $que │ │ │ │ +00000f10: 7565 436f 7079 203d 2031 3030 303b 2020 ueCopy = 1000; │ │ │ │ +00000f20: 2020 2020 2020 2020 2020 2023 2064 6566 # def │ │ │ │ +00000f30: 6175 6c74 2076 616c 7565 0a6d 7920 2471 ault value.my $q │ │ │ │ +00000f40: 7565 7565 426c 6f63 6b20 3d20 3130 3030 ueueBlock = 1000 │ │ │ │ +00000f50: 3b20 2020 2020 2020 2020 2020 2023 2064 ; # d │ │ │ │ +00000f60: 6566 6175 6c74 2076 616c 7565 0a6d 7920 efault value.my │ │ │ │ +00000f70: 246e 6f42 6c6f 636b 5275 6c65 7320 3d20 $noBlockRules = │ │ │ │ +00000f80: 353b 2020 2020 2020 2020 2020 2020 2023 5; # │ │ │ │ +00000f90: 2064 6566 6175 6c74 2076 616c 7565 2c20 default value, │ │ │ │ +00000fa0: 6d75 7374 2062 6520 3e20 300a 246d 6169 must be > 0.$mai │ │ │ │ +00000fb0: 6e3a 3a6e 6f42 6c6f 636b 4465 7669 6365 n::noBlockDevice │ │ │ │ +00000fc0: 7320 3d20 353b 2020 2020 2020 2020 2320 s = 5; # │ │ │ │ +00000fd0: 6465 6661 756c 7420 7661 6c75 652c 206d default value, m │ │ │ │ +00000fe0: 7573 7420 6265 203e 2030 0a24 6d61 696e ust be > 0.$main │ │ │ │ +00000ff0: 3a3a 6e6f 436f 6d70 7265 7373 5275 6c65 ::noCompressRule │ │ │ │ +00001000: 7320 3d20 353b 2020 2020 2020 2023 2064 s = 5; # d │ │ │ │ +00001010: 6566 6175 6c74 2076 616c 7565 2c20 6d75 efault value, mu │ │ │ │ +00001020: 7374 2062 6520 3e20 300a 6d79 2024 6368 st be > 0.my $ch │ │ │ │ +00001030: 6563 6b42 6c6f 636b 7342 5364 6566 6175 eckBlocksBSdefau │ │ │ │ +00001040: 6c74 203d 2027 314d 273b 2020 2320 6465 lt = '1M'; # de │ │ │ │ +00001050: 6661 756c 7420 7661 6c75 650a 6d79 2024 fault value.my $ │ │ │ │ +00001060: 6368 6563 6b42 6c6f 636b 7342 536d 696e checkBlocksBSmin │ │ │ │ +00001070: 203d 2031 302a 3130 3234 3b20 2020 2320 = 10*1024; # │ │ │ │ +00001080: 6d69 6e69 6d61 6c20 7661 6c75 650a 6d79 minimal value.my │ │ │ │ +00001090: 2024 6e6f 436f 7079 203d 2031 3b20 2020 $noCopy = 1; │ │ │ │ +000010a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000010b0: 2320 6465 6661 756c 7420 7661 6c75 650a # default value. │ │ │ │ +000010c0: 6d79 2024 6368 6d6f 644d 4435 4669 6c65 my $chmodMD5File │ │ │ │ +000010d0: 203d 2027 3036 3030 273b 2020 2020 2020 = '0600'; │ │ │ │ +000010e0: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu │ │ │ │ +000010f0: 650a 6d79 2024 746d 7064 6972 203d 2027 e.my $tmpdir = ' │ │ │ │ +00001100: 2f74 6d70 273b 2020 2020 2020 2020 2020 /tmp'; │ │ │ │ +00001110: 2020 2020 2320 6465 6661 756c 7420 7661 # default va │ │ │ │ +00001120: 6c75 650a 6d79 2040 6578 6365 7074 5375 lue.my @exceptSu │ │ │ │ +00001130: 6666 6978 203d 2028 275c 2e7a 6970 272c ffix = ('\.zip', │ │ │ │ +00001140: 2027 5c2e 627a 3227 2c20 275c 2e67 7a27 '\.bz2', '\.gz' │ │ │ │ +00001150: 2c20 275c 2e74 677a 272c 2027 5c2e 6a70 , '\.tgz', '\.jp │ │ │ │ +00001160: 6727 2c20 275c 2e67 6966 272c 2027 5c2e g', '\.gif', '\. │ │ │ │ +00001170: 7469 6666 272c 0a09 0920 2020 2027 5c2e tiff',... '\. │ │ │ │ +00001180: 7469 6627 2c20 275c 2e6d 7065 6727 2c20 tif', '\.mpeg', │ │ │ │ +00001190: 275c 2e6d 7067 272c 2027 5c2e 6d70 3327 '\.mpg', '\.mp3' │ │ │ │ +000011a0: 2c20 275c 2e6f 6767 272c 2027 5c2e 6770 , '\.ogg', '\.gp │ │ │ │ +000011b0: 6727 2c20 275c 2e70 6e67 2729 3b0a 6d79 g', '\.png');.my │ │ │ │ +000011c0: 2024 6c6f 6749 6e42 6163 6b75 7044 6972 $logInBackupDir │ │ │ │ +000011d0: 4669 6c65 4e61 6d65 203d 2027 2e73 746f FileName = '.sto │ │ │ │ +000011e0: 7265 4261 636b 7570 2e6c 6f67 273b 0a6d reBackup.log';.m │ │ │ │ +000011f0: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile │ │ │ │ +00001200: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums │ │ │ │ +00001210: 273b 0a6d 7920 2462 6c6f 636b 4368 6563 ';.my $blockChec │ │ │ │ +00001220: 6b53 756d 4669 6c65 203d 2027 2e6d 6435 kSumFile = '.md5 │ │ │ │ +00001230: 426c 6f63 6b43 6865 636b 5375 6d73 273b BlockCheckSums'; │ │ │ │ +00001240: 0a24 6d61 696e 3a3a 6368 6563 6b53 756d .$main::checkSum │ │ │ │ +00001250: 4669 6c65 5665 7273 696f 6e20 3d20 2731 FileVersion = '1 │ │ │ │ +00001260: 2e33 273b 0a6d 7920 246b 6565 7041 6c6c .3';.my $keepAll │ │ │ │ +00001270: 203d 2027 3330 6427 3b0a 6d79 2024 6b65 = '30d';.my $ke │ │ │ │ +00001280: 6570 4475 706c 6963 6174 6520 3d20 2737 epDuplicate = '7 │ │ │ │ +00001290: 6427 3b0a 0a6d 7920 2466 6c61 6742 6c6f d';..my $flagBlo │ │ │ │ +000012a0: 636b 4465 7669 6365 203d 2030 3b20 2020 ckDevice = 0; │ │ │ │ +000012b0: 2020 2020 2020 2023 2031 2069 6620 626c # 1 if bl │ │ │ │ +000012c0: 6f63 6b20 6f72 2064 6576 6963 6520 6f70 ock or device op │ │ │ │ +000012d0: 7469 6f6e 7320 6172 6520 7573 6564 0a24 tions are used.$ │ │ │ │ +000012e0: 746d 7064 6972 203d 2024 454e 567b 2754 tmpdir = $ENV{'T │ │ │ │ +000012f0: 4d50 4449 5227 7d20 6966 2064 6566 696e MPDIR'} if defin │ │ │ │ +00001300: 6564 2024 454e 567b 2754 4d50 4449 5227 ed $ENV{'TMPDIR' │ │ │ │ +00001310: 7d3b 0a0a 0a23 2024 5645 5253 494f 4e70 };...# $VERSIONp │ │ │ │ +00001320: 4e61 6d65 2024 6d61 696e 3a3a 5354 4f52 Name $main::STOR │ │ │ │ +00001330: 4542 4143 4b55 5056 4552 5349 4f4e 0a0a EBACKUPVERSION.. │ │ │ │ +00001340: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto │ │ │ │ +00001350: 7265 4261 636b 7570 2e70 6c20 2d20 6661 reBackup.pl - fa │ │ │ │ +00001360: 6e63 7920 636f 6d70 7265 7373 696e 6720 ncy compressing │ │ │ │ +00001370: 6d61 6e61 6769 6e67 2063 6865 636b 7375 managing checksu │ │ │ │ +00001380: 6d6d 696e 6720 6861 7264 2d6c 696e 6b69 mming hard-linki │ │ │ │ +00001390: 6e67 2063 7020 2d75 610a 0a3d 6865 6164 ng cp -ua..=head │ │ │ │ +000013a0: 3120 4445 5343 5249 5054 494f 4e0a 0a54 1 DESCRIPTION..T │ │ │ │ +000013b0: 6869 7320 7072 6f67 7261 6d20 636f 7069 his program copi │ │ │ │ +000013c0: 6573 2074 7265 6573 2074 6f20 616e 6f74 es trees to anot │ │ │ │ +000013d0: 6865 7220 6c6f 6361 7469 6f6e 2e20 4576 her location. Ev │ │ │ │ +000013e0: 6572 7920 6669 6c65 2063 6f70 6965 6420 ery file copied │ │ │ │ +000013f0: 6973 0a70 6f74 656e 7469 616c 6c79 2063 is.potentially c │ │ │ │ +00001400: 6f6d 7072 6573 7365 6420 2873 6565 202d ompressed (see - │ │ │ │ +00001410: 2d65 7863 6570 7453 7566 6669 7829 2e20 -exceptSuffix). │ │ │ │ +00001420: 5468 6520 6261 636b 7570 7320 6166 7465 The backups afte │ │ │ │ +00001430: 720a 7468 6520 6669 7273 7420 6261 636b r.the first back │ │ │ │ +00001440: 7570 2077 696c 6c20 636f 6d70 6172 6520 up will compare │ │ │ │ +00001450: 7468 6520 6669 6c65 7320 7769 7468 2061 the files with a │ │ │ │ +00001460: 6e20 6d64 3520 6368 6563 6b73 756d 0a77 n md5 checksum.w │ │ │ │ +00001470: 6974 6820 7468 6520 6c61 7374 2073 746f ith the last sto │ │ │ │ +00001480: 7265 6420 7665 7273 696f 6e2e 2049 6620 red version. If │ │ │ │ +00001490: 7468 6579 2061 7265 2065 7175 616c 2c20 they are equal, │ │ │ │ +000014a0: 6974 2077 696c 6c20 6f6e 6c79 206d 616b it will only mak │ │ │ │ +000014b0: 6520 616e 0a68 6172 6420 6c69 6e6b 2074 e an.hard link t │ │ │ │ +000014c0: 6f20 6974 2e20 4974 2077 696c 6c20 616c o it. It will al │ │ │ │ +000014d0: 736f 2063 6865 636b 206d 7469 6d65 2c20 so check mtime, │ │ │ │ +000014e0: 6374 696d 6520 616e 6420 7369 7a65 2074 ctime and size t │ │ │ │ +000014f0: 6f20 7265 636f 676e 697a 650a 6964 656e o recognize.iden │ │ │ │ +00001500: 7469 616c 2066 696c 6573 2069 6e20 6f6c tial files in ol │ │ │ │ +00001510: 6465 7220 6261 636b 7570 7320 7665 7279 der backups very │ │ │ │ +00001520: 2066 6173 742e 0a49 7420 6361 6e20 616c fast..It can al │ │ │ │ +00001530: 736f 2062 6163 6b75 7020 6269 6720 696d so backup big im │ │ │ │ +00001540: 6167 6520 6669 6c65 7320 6661 7374 2061 age files fast a │ │ │ │ +00001550: 6e64 2065 6666 6963 6965 6e74 6c79 206f nd efficiently o │ │ │ │ +00001560: 6e20 6120 7065 7220 626c 6f63 6b0a 6261 n a per block.ba │ │ │ │ +00001570: 7369 7320 2864 6174 6120 6465 6475 706c sis (data dedupl │ │ │ │ +00001580: 6963 6174 696f 6e29 2e0a 0a59 6f75 2063 ication)...You c │ │ │ │ +00001590: 616e 206f 7665 7277 7269 7465 206f 7074 an overwrite opt │ │ │ │ +000015a0: 696f 6e73 2069 6e20 7468 6520 636f 6e66 ions in the conf │ │ │ │ +000015b0: 6967 7572 6174 696f 6e20 6669 6c65 206f iguration file o │ │ │ │ +000015c0: 6e20 7468 6520 636f 6d6d 616e 6420 6c69 n the command li │ │ │ │ +000015d0: 6e65 2e0a 0a3d 6865 6164 3120 5359 4e4f ne...=head1 SYNO │ │ │ │ +000015e0: 5053 4953 0a0a 0924 7072 6f67 202d 2d68 PSIS...$prog --h │ │ │ │ +000015f0: 656c 700a 6f72 2020 2020 0a09 2470 726f elp.or ..$pro │ │ │ │ +00001600: 6720 2d67 2063 6f6e 6669 6746 696c 650a g -g configFile. │ │ │ │ +00001610: 6f72 0a09 2470 726f 6720 5b2d 6620 636f or..$prog [-f co │ │ │ │ +00001620: 6e66 6967 4669 6c65 5d20 5b2d 7320 736f nfigFile] [-s so │ │ │ │ +00001630: 7572 6365 4469 725d 0a09 2020 2020 2020 urceDir].. │ │ │ │ +00001640: 5b2d 6220 6261 636b 7570 4469 7265 6374 [-b backupDirect │ │ │ │ +00001650: 6f72 795d 205b 2d53 2073 6572 6965 735d ory] [-S series] │ │ │ │ +00001660: 205b 2d2d 7072 696e 745d 0a09 2020 2020 [--print].. │ │ │ │ +00001670: 2020 5b2d 5420 746d 7064 6972 5d20 5b2d [-T tmpdir] [- │ │ │ │ +00001680: 4c20 6c6f 636b 4669 6c65 5d20 5b2d 2d75 L lockFile] [--u │ │ │ │ +00001690: 6e6c 6f63 6b42 6566 6f72 6544 656c 5d20 nlockBeforeDel] │ │ │ │ +000016a0: 0a09 2020 2020 2020 5b2d 2d65 7863 6570 .. [--excep │ │ │ │ +000016b0: 7444 6972 7320 6469 7231 2c64 6972 322c tDirs dir1,dir2, │ │ │ │ +000016c0: 6469 7233 5d20 5b2d 2d63 6f6e 7445 7863 dir3] [--contExc │ │ │ │ +000016d0: 6570 7444 6972 7345 7272 5d0a 0920 2020 eptDirsErr].. │ │ │ │ +000016e0: 2020 205b 2d2d 696e 636c 7564 6544 6972 [--includeDir │ │ │ │ +000016f0: 7320 6469 7231 2c64 6972 322c 6469 7233 s dir1,dir2,dir3 │ │ │ │ +00001700: 5d0a 0920 2020 2020 205b 2d2d 6578 6365 ].. [--exce │ │ │ │ +00001710: 7074 5275 6c65 2072 756c 655d 205b 2d2d ptRule rule] [-- │ │ │ │ +00001720: 696e 636c 7564 6552 756c 6520 7275 6c65 includeRule rule │ │ │ │ +00001730: 5d0a 0920 2020 2020 205b 2d2d 6578 6365 ].. [--exce │ │ │ │ +00001740: 7074 5479 7065 7320 7479 7065 735d 205b ptTypes types] [ │ │ │ │ +00001750: 2d2d 6370 4973 476e 755d 205b 2d2d 6c69 --cpIsGnu] [--li │ │ │ │ +00001760: 6e6b 5379 6d6c 696e 6b73 5d0a 0920 2020 nkSymlinks].. │ │ │ │ +00001770: 2020 205b 2d2d 7072 6563 6f6d 6d61 6e64 [--precommand │ │ │ │ +00001780: 206a 6f62 5d20 5b2d 2d70 6f73 7463 6f6d job] [--postcom │ │ │ │ +00001790: 6d61 6e64 206a 6f62 5d0a 2020 2020 2020 mand job]. │ │ │ │ +000017a0: 2020 2020 2020 2020 5b2d 2d66 6f6c 6c6f [--follo │ │ │ │ +000017b0: 774c 696e 6b73 2064 6570 7468 5d20 5b2d wLinks depth] [- │ │ │ │ +000017c0: 2d68 6967 684c 6174 656e 6379 5d0a 0920 -highLatency].. │ │ │ │ +000017d0: 2020 2020 205b 2d2d 6967 6e6f 7265 5065 [--ignorePe │ │ │ │ +000017e0: 726d 735d 205b 2d2d 6c61 7465 4c69 6e6b rms] [--lateLink │ │ │ │ +000017f0: 7320 5b2d 2d6c 6174 6543 6f6d 7072 6573 s [--lateCompres │ │ │ │ +00001800: 735d 5d0a 0920 2020 2020 205b 2d2d 6368 s]].. [--ch │ │ │ │ +00001810: 6563 6b42 6c6f 636b 7353 7566 6669 7820 eckBlocksSuffix │ │ │ │ +00001820: 7375 6666 6978 5d20 5b2d 2d63 6865 636b suffix] [--check │ │ │ │ +00001830: 426c 6f63 6b73 4d69 6e53 697a 6520 7369 BlocksMinSize si │ │ │ │ +00001840: 7a65 5d0a 0920 2020 2020 205b 2d2d 6368 ze].. [--ch │ │ │ │ +00001850: 6563 6b42 6c6f 636b 7342 535d 0a20 2020 eckBlocksBS]. │ │ │ │ +00001860: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch │ │ │ │ +00001870: 6563 6b42 6c6f 636b 7352 756c 6530 2072 eckBlocksRule0 r │ │ │ │ +00001880: 756c 6520 5b2d 2d63 6865 636b 426c 6f63 ule [--checkBloc │ │ │ │ +00001890: 6b73 4253 3020 7369 7a65 5d0a 2020 2020 ksBS0 size]. │ │ │ │ +000018a0: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch │ │ │ │ +000018b0: 6563 6b42 6c6f 636b 7343 6f6d 7072 305d eckBlocksCompr0] │ │ │ │ +000018c0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7352 [--checkBlocksR │ │ │ │ +000018d0: 6561 6430 2066 696c 7465 725d 0a20 2020 ead0 filter]. │ │ │ │ +000018e0: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c │ │ │ │ +000018f0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall │ │ │ │ +00001900: 656c 305d 5d0a 2020 2020 2020 2020 2020 el0]]. │ │ │ │ +00001910: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc │ │ │ │ +00001920: 6b73 5275 6c65 3120 7275 6c65 205b 2d2d ksRule1 rule [-- │ │ │ │ +00001930: 6368 6563 6b42 6c6f 636b 7342 5331 2073 checkBlocksBS1 s │ │ │ │ +00001940: 697a 655d 0a20 2020 2020 2020 2020 2020 ize]. │ │ │ │ +00001950: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc │ │ │ │ +00001960: 6b73 436f 6d70 7231 5d20 5b2d 2d63 6865 ksCompr1] [--che │ │ │ │ +00001970: 636b 426c 6f63 6b73 5265 6164 3120 6669 ckBlocksRead1 fi │ │ │ │ +00001980: 6c74 6572 5d0a 2020 2020 2020 2020 2020 lter]. │ │ │ │ +00001990: 2020 2020 205b 2d2d 6368 6563 6b42 6c6f [--checkBlo │ │ │ │ +000019a0: 636b 7350 6172 616c 6c65 6c31 5d5d 0a20 cksParallel1]]. │ │ │ │ +000019b0: 2020 2020 2020 2020 2020 2020 205b 2d2d [-- │ │ │ │ +000019c0: 6368 6563 6b42 6c6f 636b 7352 756c 6532 checkBlocksRule2 │ │ │ │ +000019d0: 2072 756c 6520 5b2d 2d63 6865 636b 426c rule [--checkBl │ │ │ │ +000019e0: 6f63 6b73 4253 3220 7369 7a65 5d0a 2020 ocksBS2 size]. │ │ │ │ +000019f0: 2020 2020 2020 2020 2020 2020 205b 2d2d [-- │ │ │ │ +00001a00: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr │ │ │ │ +00001a10: 325d 205b 2d2d 6368 6563 6b42 6c6f 636b 2] [--checkBlock │ │ │ │ +00001a20: 7352 6561 6432 2066 696c 7465 725d 0a20 sRead2 filter]. │ │ │ │ +00001a30: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ │ +00001a40: 2d63 6865 636b 426c 6f63 6b73 5061 7261 -checkBlocksPara │ │ │ │ +00001a50: 6c6c 656c 325d 5d0a 2020 2020 2020 2020 llel2]]. │ │ │ │ +00001a60: 2020 2020 2020 5b2d 2d63 6865 636b 426c [--checkBl │ │ │ │ +00001a70: 6f63 6b73 5275 6c65 3320 7275 6c65 205b ocksRule3 rule [ │ │ │ │ +00001a80: 2d2d 6368 6563 6b42 6c6f 636b 7342 5333 --checkBlocksBS3 │ │ │ │ +00001a90: 2073 697a 655d 0a20 2020 2020 2020 2020 size]. │ │ │ │ +00001aa0: 2020 2020 2020 5b2d 2d63 6865 636b 426c [--checkBl │ │ │ │ +00001ab0: 6f63 6b73 436f 6d70 7233 5d20 5b2d 2d63 ocksCompr3] [--c │ │ │ │ +00001ac0: 6865 636b 426c 6f63 6b73 5265 6164 3320 heckBlocksRead3 │ │ │ │ +00001ad0: 6669 6c74 6572 5d0a 2020 2020 2020 2020 filter]. │ │ │ │ +00001ae0: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB │ │ │ │ +00001af0: 6c6f 636b 7350 6172 616c 6c65 6c33 5d5d locksParallel3]] │ │ │ │ +00001b00: 0a20 2020 2020 2020 2020 2020 2020 205b . [ │ │ │ │ +00001b10: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul │ │ │ │ +00001b20: 6534 2072 756c 6520 5b2d 2d63 6865 636b e4 rule [--check │ │ │ │ +00001b30: 426c 6f63 6b73 4253 3420 7369 7a65 5d0a BlocksBS4 size]. │ │ │ │ +00001b40: 2020 2020 2020 2020 2020 2020 2020 205b [ │ │ │ │ +00001b50: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom │ │ │ │ +00001b60: 7072 345d 205b 2d2d 6368 6563 6b42 6c6f pr4] [--checkBlo │ │ │ │ +00001b70: 636b 7352 6561 6434 2066 696c 7465 725d cksRead4 filter] │ │ │ │ +00001b80: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00001b90: 5b2d 2d63 6865 636b 426c 6f63 6b73 5061 [--checkBlocksPa │ │ │ │ +00001ba0: 7261 6c6c 656c 345d 5d0a 2020 2020 2020 rallel4]]. │ │ │ │ +00001bb0: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check │ │ │ │ +00001bc0: 4465 7669 6365 7330 206c 6973 7420 5b2d Devices0 list [- │ │ │ │ +00001bd0: 2d63 6865 636b 4465 7669 6365 7344 6972 -checkDevicesDir │ │ │ │ +00001be0: 305d 0a20 2020 2020 2020 2020 2020 2020 0]. │ │ │ │ +00001bf0: 2020 5b2d 2d63 6865 636b 4465 7669 6365 [--checkDevice │ │ │ │ +00001c00: 7342 5330 5d20 5b63 6865 636b 4465 7669 sBS0] [checkDevi │ │ │ │ +00001c10: 6365 7343 6f6d 7072 305d 0a20 2020 2020 cesCompr0]. │ │ │ │ +00001c20: 2020 2020 2020 2020 2020 5b2d 2d63 6865 [--che │ │ │ │ +00001c30: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ │ +00001c40: 6c30 5d5d 0a20 2020 2020 2020 2020 2020 l0]]. │ │ │ │ +00001c50: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic │ │ │ │ +00001c60: 6573 3120 6c69 7374 205b 2d2d 6368 6563 es1 list [--chec │ │ │ │ +00001c70: 6b44 6576 6963 6573 4469 7231 5d0a 2020 kDevicesDir1]. │ │ │ │ +00001c80: 2020 2020 2020 2020 2020 2020 205b 2d2d [-- │ │ │ │ +00001c90: 6368 6563 6b44 6576 6963 6573 4253 315d checkDevicesBS1] │ │ │ │ +00001ca0: 205b 6368 6563 6b44 6576 6963 6573 436f [checkDevicesCo │ │ │ │ +00001cb0: 6d70 7231 5d0a 2020 2020 2020 2020 2020 mpr1]. │ │ │ │ +00001cc0: 2020 2020 205b 2d2d 6368 6563 6b44 6576 [--checkDev │ │ │ │ +00001cd0: 6963 6573 5061 7261 6c6c 656c 315d 5d0a icesParallel1]]. │ │ │ │ +00001ce0: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ │ +00001cf0: 2d63 6865 636b 4465 7669 6365 7332 206c -checkDevices2 l │ │ │ │ +00001d00: 6973 7420 5b2d 2d63 6865 636b 4465 7669 ist [--checkDevi │ │ │ │ +00001d10: 6365 7344 6972 325d 0a20 2020 2020 2020 cesDir2]. │ │ │ │ +00001d20: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check │ │ │ │ +00001d30: 4465 7669 6365 7342 5332 5d20 5b63 6865 DevicesBS2] [che │ │ │ │ +00001d40: 636b 4465 7669 6365 7343 6f6d 7072 325d ckDevicesCompr2] │ │ │ │ +00001d50: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00001d60: 5b2d 2d63 6865 636b 4465 7669 6365 7350 [--checkDevicesP │ │ │ │ +00001d70: 6172 616c 6c65 6c32 5d5d 0a20 2020 2020 arallel2]]. │ │ │ │ +00001d80: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec │ │ │ │ +00001d90: 6b44 6576 6963 6573 3320 6c69 7374 205b kDevices3 list [ │ │ │ │ +00001da0: 2d2d 6368 6563 6b44 6576 6963 6573 4469 --checkDevicesDi │ │ │ │ +00001db0: 7233 5d0a 2020 2020 2020 2020 2020 2020 r3]. │ │ │ │ +00001dc0: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic │ │ │ │ +00001dd0: 6573 4253 335d 205b 6368 6563 6b44 6576 esBS3] [checkDev │ │ │ │ +00001de0: 6963 6573 436f 6d70 7233 5d0a 2020 2020 icesCompr3]. │ │ │ │ +00001df0: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch │ │ │ │ +00001e00: 6563 6b44 6576 6963 6573 5061 7261 6c6c eckDevicesParall │ │ │ │ +00001e10: 656c 335d 5d0a 2020 2020 2020 2020 2020 el3]]. │ │ │ │ +00001e20: 2020 2020 5b2d 2d63 6865 636b 4465 7669 [--checkDevi │ │ │ │ +00001e30: 6365 7334 206c 6973 7420 5b2d 2d63 6865 ces4 list [--che │ │ │ │ +00001e40: 636b 4465 7669 6365 7344 6972 345d 0a20 ckDevicesDir4]. │ │ │ │ +00001e50: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ │ +00001e60: 2d63 6865 636b 4465 7669 6365 7342 5334 -checkDevicesBS4 │ │ │ │ +00001e70: 5d20 5b63 6865 636b 4465 7669 6365 7343 ] [checkDevicesC │ │ │ │ +00001e80: 6f6d 7072 345d 0a20 2020 2020 2020 2020 ompr4]. │ │ │ │ +00001e90: 2020 2020 2020 5b2d 2d63 6865 636b 4465 [--checkDe │ │ │ │ +00001ea0: 7669 6365 7350 6172 616c 6c65 6c31 5d5d vicesParallel1]] │ │ │ │ +00001eb0: 0a09 2020 2020 2020 5b2d 2d73 6176 6552 .. [--saveR │ │ │ │ +00001ec0: 414d 5d20 5b2d 6320 636f 6d70 7265 7373 AM] [-c compress │ │ │ │ +00001ed0: 5d20 5b2d 7520 756e 636f 6d70 7265 7373 ] [-u uncompress │ │ │ │ +00001ee0: 5d20 5b2d 7020 706f 7374 6669 785d 0a09 ] [-p postfix].. │ │ │ │ +00001ef0: 2020 2020 2020 5b2d 2d6e 6f43 6f6d 7072 [--noCompr │ │ │ │ +00001f00: 6573 7320 6e75 6d62 6572 5d20 5b2d 2d71 ess number] [--q │ │ │ │ +00001f10: 7565 7565 436f 6d70 7265 7373 206e 756d ueueCompress num │ │ │ │ +00001f20: 6265 725d 0a09 2020 2020 2020 5b2d 2d6e ber].. [--n │ │ │ │ +00001f30: 6f43 6f70 7920 6e75 6d62 6572 5d20 5b2d oCopy number] [- │ │ │ │ +00001f40: 2d71 7565 7565 436f 7079 206e 756d 6265 -queueCopy numbe │ │ │ │ +00001f50: 725d 0a09 2020 2020 2020 5b2d 2d77 6974 r].. [--wit │ │ │ │ +00001f60: 6855 7365 7247 726f 7570 5374 6174 5d20 hUserGroupStat] │ │ │ │ +00001f70: 5b2d 2d75 7365 7247 726f 7570 5374 6174 [--userGroupStat │ │ │ │ +00001f80: 4669 6c65 2066 696c 656e 616d 655d 0a09 File filename].. │ │ │ │ +00001f90: 2020 2020 2020 5b2d 2d65 7863 6570 7453 [--exceptS │ │ │ │ +00001fa0: 7566 6669 7820 7375 6666 6978 6573 5d09 uffix suffixes]. │ │ │ │ +00001fb0: 5b2d 2d61 6464 4578 6365 7074 5375 6666 [--addExceptSuff │ │ │ │ +00001fc0: 6978 2073 7566 6669 7865 735d 0a09 2020 ix suffixes].. │ │ │ │ +00001fd0: 2020 2020 5b2d 2d6d 696e 436f 6d70 7265 [--minCompre │ │ │ │ +00001fe0: 7373 5369 7a65 2073 697a 655d 205b 2d2d ssSize size] [-- │ │ │ │ +00001ff0: 636f 6d70 7252 756c 655d 0a09 2020 2020 comprRule].. │ │ │ │ +00002000: 2020 5b2d 2d64 6f4e 6f74 436f 6d70 7265 [--doNotCompre │ │ │ │ +00002010: 7373 4d44 3546 696c 655d 205b 2d2d 6368 ssMD5File] [--ch │ │ │ │ +00002020: 6d6f 644d 4435 4669 6c65 5d20 5b2d 765d modMD5File] [-v] │ │ │ │ +00002030: 0a09 2020 2020 2020 5b2d 6420 6c65 7665 .. [-d leve │ │ │ │ +00002040: 6c5d 5b2d 2d70 726f 6772 6573 7352 6570 l][--progressRep │ │ │ │ +00002050: 6f72 7420 6e75 6d62 6572 5d20 5b2d 2d70 ort number] [--p │ │ │ │ +00002060: 7269 6e74 4465 7074 685d 0a09 2020 2020 rintDepth].. │ │ │ │ +00002070: 2020 5b2d 2d69 676e 6f72 6552 6561 6445 [--ignoreReadE │ │ │ │ +00002080: 7272 6f72 5d0a 2020 2020 2020 2020 2020 rror]. │ │ │ │ +00002090: 2020 2020 5b2d 2d73 7570 7072 6573 7357 [--suppressW │ │ │ │ +000020a0: 6172 6e69 6e67 206b 6579 5d20 5b2d 2d6c arning key] [--l │ │ │ │ +000020b0: 696e 6b54 6f52 6563 656e 7420 6e61 6d65 inkToRecent name │ │ │ │ +000020c0: 5d0a 0920 2020 2020 205b 2d2d 646f 4e6f ].. [--doNo │ │ │ │ +000020d0: 7444 656c 6574 655d 205b 2d2d 6465 6c65 tDelete] [--dele │ │ │ │ +000020e0: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir │ │ │ │ +000020f0: 735d 0a09 2020 2020 2020 5b2d 2d72 6573 s].. [--res │ │ │ │ +00002100: 6574 4174 696d 655d 205b 2d2d 6b65 6570 etAtime] [--keep │ │ │ │ +00002110: 416c 6c20 7469 6d65 5065 7269 6f64 5d20 All timePeriod] │ │ │ │ +00002120: 5b2d 2d6b 6565 7057 6565 6b64 6179 2065 [--keepWeekday e │ │ │ │ +00002130: 6e74 7279 5d0a 0920 2020 2020 205b 5b2d ntry].. [[- │ │ │ │ +00002140: 2d6b 6565 7046 6972 7374 4f66 5965 6172 -keepFirstOfYear │ │ │ │ +00002150: 5d20 5b2d 2d6b 6565 704c 6173 744f 6659 ] [--keepLastOfY │ │ │ │ +00002160: 6561 725d 0a09 2020 2020 2020 205b 2d2d ear].. [-- │ │ │ │ +00002170: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ │ +00002180: 5d20 5b2d 2d6b 6565 704c 6173 744f 664d ] [--keepLastOfM │ │ │ │ +00002190: 6f6e 7468 5d0a 0920 2020 2020 2020 5b2d onth].. [- │ │ │ │ +000021a0: 2d66 6972 7374 4461 794f 6657 6565 6b20 -firstDayOfWeek │ │ │ │ +000021b0: 6461 795d 205b 2d2d 6b65 6570 4669 7273 day] [--keepFirs │ │ │ │ +000021c0: 744f 6657 6565 6b5d 0a20 2020 2020 2020 tOfWeek]. │ │ │ │ +000021d0: 2020 2020 2020 2020 5b2d 2d6b 6565 704c [--keepL │ │ │ │ +000021e0: 6173 744f 6657 6565 6b5d 205b 2d2d 6b65 astOfWeek] [--ke │ │ │ │ +000021f0: 6570 4475 706c 6963 6174 655d 205b 2d2d epDuplicate] [-- │ │ │ │ +00002200: 6b65 6570 4d69 6e4e 756d 6265 725d 0a20 keepMinNumber]. │ │ │ │ +00002210: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ │ +00002220: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber]. │ │ │ │ +00002230: 0920 2020 2020 2020 207c 205b 2d2d 6b65 . | [--ke │ │ │ │ +00002240: 6570 5265 6c61 7469 7665 5d20 5d0a 0920 epRelative] ].. │ │ │ │ +00002250: 2020 2020 205b 2d6c 206c 6f67 4669 6c65 [-l logFile │ │ │ │ +00002260: 0a09 2020 2020 2020 205b 2d2d 706c 7573 .. [--plus │ │ │ │ +00002270: 4c6f 6753 7464 6f75 745d 205b 2d2d 7375 LogStdout] [--su │ │ │ │ +00002280: 7070 7265 7373 5469 6d65 5d20 5b2d 6d20 ppressTime] [-m │ │ │ │ +00002290: 6d61 7846 696c 656c 656e 5d0a 0920 2020 maxFilelen].. │ │ │ │ +000022a0: 2020 2020 5b5b 2d6e 206e 6f4f 664f 6c64 [[-n noOfOld │ │ │ │ +000022b0: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save │ │ │ │ +000022c0: 4c6f 6773 5d5d 0a09 2020 2020 2020 205b Logs]].. [ │ │ │ │ +000022d0: 2d2d 636f 6d70 7265 7373 5769 7468 2063 --compressWith c │ │ │ │ +000022e0: 6f6d 7072 6573 7370 726f 675d 5d0a 0920 ompressprog]].. │ │ │ │ +000022f0: 2020 2020 205b 2d2d 6c6f 6749 6e42 6163 [--logInBac │ │ │ │ +00002300: 6b75 7044 6972 205b 2d2d 636f 6d70 7265 kupDir [--compre │ │ │ │ +00002310: 7373 4c6f 6749 6e42 6163 6b75 7044 6972 ssLogInBackupDir │ │ │ │ +00002320: 5d0a 0920 2020 2020 2020 5b2d 2d6c 6f67 ].. [--log │ │ │ │ +00002330: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ │ +00002340: 616d 6520 6c6f 6746 696c 655d 5d0a 0920 ame logFile]].. │ │ │ │ +00002350: 2020 2020 205b 6f74 6865 7242 6163 6b75 [otherBacku │ │ │ │ +00002360: 7053 6572 6965 7320 2e2e 2e5d 0a0a 0a3d pSeries ...]...= │ │ │ │ +00002370: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..= │ │ │ │ +00002380: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B< │ │ │ │ +00002390: 2d2d 6865 6c70 3e0a 0a20 2020 2073 686f --help>.. sho │ │ │ │ +000023a0: 7720 7468 6973 2068 656c 700a 0a3d 6974 w this help..=it │ │ │ │ +000023b0: 656d 2042 3c2d 2d67 656e 6572 6174 653e em B<--generate> │ │ │ │ +000023c0: 2c20 423c 2d67 3e0a 0a20 2020 2067 656e , B<-g>.. gen │ │ │ │ +000023d0: 6572 6174 6520 6120 7465 6d70 6c61 7465 erate a template │ │ │ │ +000023e0: 206f 6620 7468 6520 636f 6e66 6967 7572 of the configur │ │ │ │ +000023f0: 6174 696f 6e20 6669 6c65 0a0a 3d69 7465 ation file..=ite │ │ │ │ +00002400: 6d20 423c 2d2d 7072 696e 743e 0a0a 2020 m B<--print>.. │ │ │ │ +00002410: 2020 7072 696e 7420 636f 6e66 6967 7572 print configur │ │ │ │ +00002420: 6174 696f 6e20 7265 6164 2066 726f 6d20 ation read from │ │ │ │ +00002430: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi │ │ │ │ +00002440: 6c65 0a20 2020 206f 7220 636f 6d6d 616e le. or comman │ │ │ │ +00002450: 6420 6c69 6e65 2061 6e64 2073 746f 700a d line and stop. │ │ │ │ +00002460: 0a3d 6974 656d 2042 3c2d 2d66 696c 653e .=item B<--file> │ │ │ │ +00002470: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con │ │ │ │ +00002480: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file │ │ │ │ +00002490: 2869 6e73 7465 6164 206f 6620 6f72 2061 (instead of or a │ │ │ │ +000024a0: 6464 6974 696f 6e61 6c6c 7920 746f 206f dditionally to o │ │ │ │ +000024b0: 7074 696f 6e73 0a20 2020 206f 6e20 636f ptions. on co │ │ │ │ +000024c0: 6d6d 616e 6420 6c69 6e65 290a 0a3d 6974 mmand line)..=it │ │ │ │ +000024d0: 656d 2042 3c2d 2d73 6f75 7263 6544 6972 em B<--sourceDir │ │ │ │ +000024e0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 736f >, B<-s>.. so │ │ │ │ +000024f0: 7572 6365 2064 6972 6563 746f 7279 2028 urce directory ( │ │ │ │ +00002500: 6d75 7374 2065 7869 7374 290a 0a3d 6974 must exist)..=it │ │ │ │ +00002510: 656d 2042 3c2d 2d62 6163 6b75 7044 6972 em B<--backupDir │ │ │ │ +00002520: 3e2c 2042 3c2d 623e 0a0a 2020 2020 746f >, B<-b>.. to │ │ │ │ +00002530: 7020 6c65 7665 6c20 6469 7265 6374 6f72 p level director │ │ │ │ +00002540: 7920 6f66 2061 6c6c 2062 6163 6b75 7073 y of all backups │ │ │ │ +00002550: 2028 6d75 7374 2065 7869 7374 290a 0a3d (must exist)..= │ │ │ │ +00002560: 6974 656d 2042 3c2d 2d73 6572 6965 733e item B<--series> │ │ │ │ +00002570: 2c20 423c 2d53 3e0a 0a20 2020 2073 6572 , B<-S>.. ser │ │ │ │ +00002580: 6965 7320 6469 7265 6374 6f72 792c 2064 ies directory, d │ │ │ │ +00002590: 6566 6175 6c74 2069 7320 2764 6566 6175 efault is 'defau │ │ │ │ +000025a0: 6c74 270a 2020 2020 7265 6c61 7469 7665 lt'. relative │ │ │ │ +000025b0: 2070 6174 6820 6672 6f6d 2062 6163 6b75 path from backu │ │ │ │ +000025c0: 7044 6972 0a0a 3d69 7465 6d20 423c 2d2d pDir..=item B<-- │ │ │ │ +000025d0: 746d 7064 6972 3e2c 2042 3c2d 543e 0a0a tmpdir>, B<-T>.. │ │ │ │ +000025e0: 2020 2020 6469 7265 6374 6f72 7920 666f directory fo │ │ │ │ +000025f0: 7220 7465 6d70 6f72 6172 7920 6669 6c65 r temporary file │ │ │ │ +00002600: 732c 2064 6566 6175 6c74 2069 7320 3c2f s, default is ..=item B<-- │ │ │ │ +00002620: 6c6f 636b 4669 6c65 3e2c 2042 3c2d 4c3e lockFile>, B<-L> │ │ │ │ +00002630: 0a0a 2020 2020 6c6f 636b 2066 696c 652c .. lock file, │ │ │ │ +00002640: 2069 6620 6578 6973 7473 2c20 6e65 7720 if exists, new │ │ │ │ +00002650: 696e 7374 616e 6365 7320 7769 6c6c 2066 instances will f │ │ │ │ +00002660: 696e 6973 6820 6966 2061 6e20 6f6c 640a inish if an old. │ │ │ │ +00002670: 2020 2020 6973 2061 6c72 6561 6479 2072 is already r │ │ │ │ +00002680: 756e 6e69 6e67 2c20 6465 6661 756c 7420 unning, default │ │ │ │ +00002690: 6973 2024 6c6f 636b 4669 6c65 0a0a 3d69 is $lockFile..=i │ │ │ │ +000026a0: 7465 6d20 423c 2d2d 756e 6c6f 636b 4265 tem B<--unlockBe │ │ │ │ +000026b0: 666f 7265 4465 6c3e 0a0a 2020 2020 7265 foreDel>.. re │ │ │ │ +000026c0: 6d6f 7665 2074 6865 206c 6f63 6b20 6669 move the lock fi │ │ │ │ +000026d0: 6c65 2062 6566 6f72 6520 6465 6c65 7469 le before deleti │ │ │ │ +000026e0: 6e67 206f 6c64 2062 6163 6b75 7073 0a20 ng old backups. │ │ │ │ +000026f0: 2020 2064 6566 6175 6c74 2069 7320 746f default is to │ │ │ │ +00002700: 2064 656c 6574 6520 7468 6520 6c6f 636b delete the lock │ │ │ │ +00002710: 2066 696c 6520 6166 7465 7220 7265 6d6f file after remo │ │ │ │ +00002720: 7669 6e67 206f 6c64 0a20 2020 2062 6163 ving old. bac │ │ │ │ +00002730: 6b75 7073 0a0a 3d69 7465 6d20 423c 2d2d kups..=item B<-- │ │ │ │ +00002740: 6578 6365 7074 4469 7273 3e2c 2042 3c2d exceptDirs>, B<- │ │ │ │ +00002750: 653e 0a0a 2020 2020 6469 7265 6374 6f72 e>.. director │ │ │ │ +00002760: 6965 7320 746f 2065 7863 6570 7420 6672 ies to except fr │ │ │ │ +00002770: 6f6d 2062 6163 6b69 6e67 2075 7020 2872 om backing up (r │ │ │ │ +00002780: 656c 6174 6976 6520 7061 7468 292c 0a20 elative path),. │ │ │ │ +00002790: 2020 2077 696c 6463 6172 6473 2061 7265 wildcards are │ │ │ │ +000027a0: 2070 6f73 7369 626c 6520 616e 6420 7368 possible and sh │ │ │ │ +000027b0: 6f75 6c64 2062 6520 7175 6f74 6564 2074 ould be quoted t │ │ │ │ +000027c0: 6f20 6176 6f69 640a 2020 2020 7265 706c o avoid. repl │ │ │ │ +000027d0: 6163 656d 656e 7473 2062 7920 7468 6520 acements by the │ │ │ │ +000027e0: 7368 656c 6c0a 2020 2020 7573 6520 7468 shell. use th │ │ │ │ +000027f0: 6973 2070 6172 616d 6574 6572 206d 756c is parameter mul │ │ │ │ +00002800: 7469 706c 6520 7469 6d65 7320 666f 7220 tiple times for │ │ │ │ +00002810: 6d75 6c74 6970 6c65 0a20 2020 2064 6972 multiple. dir │ │ │ │ +00002820: 6563 746f 7269 6573 0a0a 3d69 7465 6d20 ectories..=item │ │ │ │ +00002830: 423c 2d2d 636f 6e74 4578 6365 7074 4469 B<--contExceptDi │ │ │ │ +00002840: 7273 4572 723e 0a0a 2020 2020 636f 6e74 rsErr>.. cont │ │ │ │ +00002850: 696e 7565 2069 6620 6f6e 6520 6f72 206d inue if one or m │ │ │ │ +00002860: 6f72 6520 6f66 2074 6865 2065 7863 6570 ore of the excep │ │ │ │ +00002870: 7469 6f6e 616c 2064 6972 6563 746f 7269 tional directori │ │ │ │ +00002880: 6573 0a20 2020 2064 6f20 6e6f 7420 6578 es. do not ex │ │ │ │ +00002890: 6973 7420 2864 6566 6175 6c74 2069 7320 ist (default is │ │ │ │ +000028a0: 746f 2073 746f 7020 7072 6f63 6573 7369 to stop processi │ │ │ │ +000028b0: 6e67 290a 0a3d 6974 656d 2042 3c2d 2d69 ng)..=item B<--i │ │ │ │ +000028c0: 6e63 6c75 6465 4469 7273 3e2c 2042 3c2d ncludeDirs>, B<- │ │ │ │ +000028d0: 693e 0a0a 2020 2020 6469 7265 6374 6f72 i>.. director │ │ │ │ +000028e0: 6965 7320 746f 2069 6e63 6c75 6465 2069 ies to include i │ │ │ │ +000028f0: 6e20 7468 6520 6261 636b 7570 2028 7265 n the backup (re │ │ │ │ +00002900: 6c61 7469 7665 2070 6174 6829 2c0a 2020 lative path),. │ │ │ │ +00002910: 2020 7769 6c64 6361 7264 7320 6172 6520 wildcards are │ │ │ │ +00002920: 706f 7373 6962 6c65 2061 6e64 2068 6176 possible and hav │ │ │ │ +00002930: 6520 746f 2062 6520 7175 6f74 6564 0a20 e to be quoted. │ │ │ │ +00002940: 2020 2075 7365 2074 6869 7320 7061 7261 use this para │ │ │ │ +00002950: 6d65 7465 7220 6d75 6c74 6970 6c65 2074 meter multiple t │ │ │ │ +00002960: 696d 6573 2066 6f72 206d 756c 7469 706c imes for multipl │ │ │ │ +00002970: 6520 6469 7265 6374 6f72 6965 730a 0a3d e directories..= │ │ │ │ +00002980: 6974 656d 2042 3c2d 2d65 7863 6570 7452 item B<--exceptR │ │ │ │ +00002990: 756c 653e 0a0a 2020 2020 4669 6c65 7320 ule>.. Files │ │ │ │ +000029a0: 746f 2065 7863 6c75 6465 2066 726f 6d20 to exclude from │ │ │ │ +000029b0: 6261 636b 696e 6720 7570 2e0a 2020 2020 backing up.. │ │ │ │ +000029c0: 7365 6520 5245 4144 4d45 3a20 2769 6e63 see README: 'inc │ │ │ │ +000029d0: 6c75 6469 6e67 202f 2065 7863 6c75 6469 luding / excludi │ │ │ │ +000029e0: 6e67 2066 696c 6573 2061 6e64 2064 6972 ng files and dir │ │ │ │ +000029f0: 6563 746f 7269 6573 270a 0a3d 6974 656d ectories'..=item │ │ │ │ +00002a00: 2042 3c2d 2d69 6e63 6c75 6465 5275 6c65 B<--includeRule │ │ │ │ +00002a10: 3e0a 0a20 2020 2046 696c 6573 2074 6f20 >.. Files to │ │ │ │ +00002a20: 696e 636c 7564 6520 696e 2074 6865 2062 include in the b │ │ │ │ +00002a30: 6163 6b75 6720 7570 202d 206c 696b 6520 ackug up - like │ │ │ │ +00002a40: 6578 6365 7074 5275 6c65 0a20 2020 2073 exceptRule. s │ │ │ │ +00002a50: 6565 2052 4541 444d 453a 2027 696e 636c ee README: 'incl │ │ │ │ +00002a60: 7564 696e 6720 2f20 6578 636c 7564 696e uding / excludin │ │ │ │ +00002a70: 6720 6669 6c65 7320 616e 6420 6469 7265 g files and dire │ │ │ │ +00002a80: 6374 6f72 6965 7327 0a0a 3d69 7465 6d20 ctories'..=item │ │ │ │ +00002a90: 423c 2d2d 7772 6974 6545 7863 6c75 6465 B<--writeExclude │ │ │ │ +00002aa0: 4c6f 673e 0a0a 2020 2020 7772 6974 6520 Log>.. write │ │ │ │ +00002ab0: 6120 6669 6c65 206e 616d 6520 2e73 746f a file name .sto │ │ │ │ +00002ac0: 7265 4261 636b 7570 2e6e 6f74 5361 7665 reBackup.notSave │ │ │ │ +00002ad0: 642e 627a 3220 7769 7468 2074 6865 206e d.bz2 with the n │ │ │ │ +00002ae0: 616d 6573 0a20 2020 206f 6620 616c 6c20 ames. of all │ │ │ │ +00002af0: 736b 6970 7065 6420 6669 6c65 730a 0a3d skipped files..= │ │ │ │ +00002b00: 6974 656d 2042 3c2d 2d65 7863 6570 7454 item B<--exceptT │ │ │ │ +00002b10: 7970 6573 3e0a 0a20 2020 2064 6f20 6e6f ypes>.. do no │ │ │ │ +00002b20: 7420 7361 7665 2074 6865 2073 7065 6369 t save the speci │ │ │ │ +00002b30: 6669 6564 2074 7970 6520 6f66 2066 696c fied type of fil │ │ │ │ +00002b40: 6573 2c20 616c 6c6f 7765 643a 2053 6263 es, allowed: Sbc │ │ │ │ +00002b50: 6670 6c0a 2020 2020 2020 2020 5320 2d20 fpl. S - │ │ │ │ +00002b60: 6669 6c65 2069 7320 6120 736f 636b 6574 file is a socket │ │ │ │ +00002b70: 0a20 2020 2020 2020 2062 202d 2066 696c . b - fil │ │ │ │ +00002b80: 6520 6973 2061 2062 6c6f 636b 2073 7065 e is a block spe │ │ │ │ +00002b90: 6369 616c 2066 696c 650a 2020 2020 2020 cial file. │ │ │ │ +00002ba0: 2020 6320 2d20 6669 6c65 2069 7320 6120 c - file is a │ │ │ │ +00002bb0: 6368 6172 6163 7465 7220 7370 6563 6961 character specia │ │ │ │ +00002bc0: 6c20 6669 6c65 0a20 2020 2020 2020 2066 l file. f │ │ │ │ +00002bd0: 202d 2066 696c 6520 6973 2061 2070 6c61 - file is a pla │ │ │ │ +00002be0: 696e 2066 696c 650a 2020 2020 2020 2020 in file. │ │ │ │ +00002bf0: 7020 2d20 6669 6c65 2069 7320 6120 6e61 p - file is a na │ │ │ │ +00002c00: 6d65 6420 7069 7065 0a20 2020 2020 2020 med pipe. │ │ │ │ +00002c10: 206c 202d 2066 696c 6520 6973 2061 2073 l - file is a s │ │ │ │ +00002c20: 796d 626f 6c69 6320 6c69 6e6b 0a20 2020 ymbolic link. │ │ │ │ +00002c30: 2020 2020 2053 6263 2063 616e 206f 6e6c Sbc can onl │ │ │ │ +00002c40: 7920 6265 2073 6176 6564 2077 6865 6e20 y be saved when │ │ │ │ +00002c50: 7573 696e 6720 6f70 7469 6f6e 205b 6370 using option [cp │ │ │ │ +00002c60: 4973 476e 755d 0a0a 3d69 7465 6d20 423c IsGnu]..=item B< │ │ │ │ +00002c70: 2d2d 6370 4973 476e 753e 0a0a 2020 2020 --cpIsGnu>.. │ │ │ │ +00002c80: 4163 7469 7661 7465 2074 6869 7320 6f70 Activate this op │ │ │ │ +00002c90: 7469 6f6e 2069 6620 796f 7572 2073 7973 tion if your sys │ │ │ │ +00002ca0: 7465 6d73 2063 7020 6973 2061 2066 756c tems cp is a ful │ │ │ │ +00002cb0: 6c2d 6665 6174 7572 6564 0a20 2020 2047 l-featured. G │ │ │ │ +00002cc0: 4e55 2076 6572 7369 6f6e 2e20 496e 2074 NU version. In t │ │ │ │ +00002cd0: 6869 7320 6361 7365 2079 6f75 2077 696c his case you wil │ │ │ │ +00002ce0: 6c20 6265 2061 626c 6520 746f 2061 6c73 l be able to als │ │ │ │ +00002cf0: 6f20 6261 636b 7570 0a20 2020 2073 6576 o backup. sev │ │ │ │ +00002d00: 6572 616c 2073 7065 6369 616c 2066 696c eral special fil │ │ │ │ +00002d10: 6520 7479 7065 7320 6c69 6b65 2073 6f63 e types like soc │ │ │ │ +00002d20: 6b65 7473 2e0a 0a3d 6974 656d 2042 3c2d kets...=item B<- │ │ │ │ +00002d30: 2d6c 696e 6b53 796d 6c69 6e6b 733e 0a0a -linkSymlinks>.. │ │ │ │ +00002d40: 2020 2020 6861 7264 206c 696e 6b20 6964 hard link id │ │ │ │ +00002d50: 656e 7469 6361 6c20 7379 6d6c 696e 6b73 entical symlinks │ │ │ │ +00002d60: 0a0a 3d69 7465 6d20 423c 2d2d 7072 6563 ..=item B<--prec │ │ │ │ +00002d70: 6f6d 6d61 6e64 3e0a 0a20 2020 2065 7865 ommand>.. exe │ │ │ │ +00002d80: 6320 6a6f 6220 6265 666f 7265 2073 7461 c job before sta │ │ │ │ +00002d90: 7274 696e 6720 7468 6520 6261 636b 7570 rting the backup │ │ │ │ +00002da0: 2c20 6368 6563 6b73 206c 6f63 6b46 696c , checks lockFil │ │ │ │ +00002db0: 6520 282d 4c29 0a20 2020 2062 6566 6f72 e (-L). befor │ │ │ │ +00002dc0: 6520 7374 6172 7469 6e67 2028 652e 672e e starting (e.g. │ │ │ │ +00002dd0: 2063 616e 2062 6520 7573 6564 2066 6f72 can be used for │ │ │ │ +00002de0: 2072 7379 6e63 290a 2020 2020 7374 6f70 rsync). stop │ │ │ │ +00002df0: 7320 6578 6563 7574 696f 6e20 6966 206a s execution if j │ │ │ │ +00002e00: 6f62 2072 6574 7572 6e73 2065 7869 7420 ob returns exit │ │ │ │ +00002e10: 7374 6174 7573 2021 3d20 300a 2020 2020 status != 0. │ │ │ │ +00002e20: 5468 6973 2070 6172 616d 6574 6572 2069 This parameter i │ │ │ │ +00002e30: 7320 7061 7273 6564 206c 696b 6520 6120 s parsed like a │ │ │ │ +00002e40: 6c69 6e65 2069 6e20 7468 6520 636f 6e66 line in the conf │ │ │ │ +00002e50: 6967 7572 6174 696f 6e0a 2020 2020 6669 iguration. fi │ │ │ │ +00002e60: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally │ │ │ │ +00002e70: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted │ │ │ │ +00002e80: 2e0a 0a3d 6974 656d 2042 3c2d 2d70 6f73 ...=item B<--pos │ │ │ │ +00002e90: 7463 6f6d 6d61 6e64 3e0a 0a20 2020 2065 tcommand>.. e │ │ │ │ +00002ea0: 7865 6320 6a6f 6220 6166 7465 7220 6669 xec job after fi │ │ │ │ +00002eb0: 6e69 7368 696e 6720 7468 6520 6261 636b nishing the back │ │ │ │ +00002ec0: 7570 2c20 6275 7420 6265 666f 7265 2065 up, but before e │ │ │ │ +00002ed0: 7261 7369 6e67 206f 660a 2020 2020 6f6c rasing of. ol │ │ │ │ +00002ee0: 6420 6261 636b 7570 7320 2072 6570 6f72 d backups repor │ │ │ │ +00002ef0: 7473 2069 6620 6a6f 6220 7265 7475 726e ts if job return │ │ │ │ +00002f00: 7320 6578 6974 2073 7461 7475 7320 213d s exit status != │ │ │ │ +00002f10: 2030 0a20 2020 2054 6869 7320 7061 7261 0. This para │ │ │ │ +00002f20: 6d65 7465 7220 6973 2070 6172 7365 6420 meter is parsed │ │ │ │ +00002f30: 6c69 6b65 2061 206c 696e 6520 696e 2074 like a line in t │ │ │ │ +00002f40: 6865 2063 6f6e 6669 6775 7261 7469 6f6e he configuration │ │ │ │ +00002f50: 0a20 2020 2066 696c 6520 616e 6420 6e6f . file and no │ │ │ │ +00002f60: 726d 616c 6c79 2068 6173 2074 6f20 6265 rmally has to be │ │ │ │ +00002f70: 2071 756f 7465 642e 0a0a 3d69 7465 6d20 quoted...=item │ │ │ │ +00002f80: 423c 2d2d 666f 6c6c 6f77 4c69 6e6b 733e B<--followLinks> │ │ │ │ +00002f90: 0a0a 2020 2020 666f 6c6c 6f77 2073 796d .. follow sym │ │ │ │ +00002fa0: 626f 6c69 6320 6c69 6e6b 7320 6c69 6b65 bolic links like │ │ │ │ +00002fb0: 2064 6972 6563 746f 7269 6573 2075 7020 directories up │ │ │ │ +00002fc0: 746f 2064 6570 7468 0a20 2020 2064 6566 to depth. def │ │ │ │ +00002fd0: 6175 6c74 203d 2030 202d 3e20 646f 206e ault = 0 -> do n │ │ │ │ +00002fe0: 6f74 2066 6f6c 6c6f 7720 6c69 6e6b 730a ot follow links. │ │ │ │ +00002ff0: 0a3d 6974 656d 2042 3c2d 2d68 6967 684c .=item B<--highL │ │ │ │ +00003000: 6174 656e 6379 3e0a 0a20 2020 2075 7365 atency>.. use │ │ │ │ +00003010: 2074 6869 7320 666f 7220 6120 7665 7279 this for a very │ │ │ │ +00003020: 2068 6967 6820 6c61 7465 6e63 7920 6c69 high latency li │ │ │ │ +00003030: 6e65 2028 6567 2e20 7670 6e20 6f76 6572 ne (eg. vpn over │ │ │ │ +00003040: 0a20 2020 2074 6865 2069 6e74 6572 6e65 . the interne │ │ │ │ +00003050: 7429 2066 6f72 2062 6574 7465 7220 7061 t) for better pa │ │ │ │ +00003060: 7261 6c6c 656c 697a 6174 696f 6e0a 0a3d rallelization..= │ │ │ │ +00003070: 6974 656d 2042 3c2d 2d69 676e 6f72 6550 item B<--ignoreP │ │ │ │ +00003080: 6572 6d73 3e0a 0a20 2020 2049 6620 7468 erms>.. If th │ │ │ │ +00003090: 6973 206f 7074 696f 6e20 6368 6f73 656e is option chosen │ │ │ │ +000030a0: 2c20 6669 6c65 7320 7769 6c6c 206e 6f74 , files will not │ │ │ │ +000030b0: 206e 6563 6573 7361 7269 6c79 2068 6176 necessarily hav │ │ │ │ +000030c0: 650a 2020 2020 7468 6520 7361 6d65 2070 e. the same p │ │ │ │ +000030d0: 6572 6d69 7373 696f 6e73 2061 6e64 206f ermissions and o │ │ │ │ +000030e0: 776e 6572 2061 7320 7468 6520 6f72 6967 wner as the orig │ │ │ │ +000030f0: 696e 616c 732e 2054 6869 730a 2020 2020 inals. This. │ │ │ │ +00003100: 7370 6565 6473 2075 7020 6261 636b 7570 speeds up backup │ │ │ │ +00003110: 7320 6f6e 206e 6574 776f 726b 2064 7269 s on network dri │ │ │ │ +00003120: 7665 7320 6120 6c6f 742e 2052 6563 6f76 ves a lot. Recov │ │ │ │ +00003130: 6572 7920 7769 7468 0a20 2020 2073 746f ery with. sto │ │ │ │ +00003140: 7265 4261 636b 7570 5265 636f 7665 722e reBackupRecover. │ │ │ │ +00003150: 706c 2077 696c 6c20 7265 7374 6f72 6520 pl will restore │ │ │ │ +00003160: 7468 656d 2063 6f72 7265 6374 6c79 2e0a them correctly.. │ │ │ │ +00003170: 0a3d 6974 656d 2042 3c2d 2d6c 6174 654c .=item B<--lateL │ │ │ │ +00003180: 696e 6b73 3e0a 0a20 2020 2064 6f20 2a6e inks>.. do *n │ │ │ │ +00003190: 6f74 2a20 7772 6974 6520 6861 7264 206c ot* write hard l │ │ │ │ +000031a0: 696e 6b73 2074 6f20 6578 6973 7469 6e67 inks to existing │ │ │ │ +000031b0: 2066 696c 6573 2069 6e20 7468 6520 6261 files in the ba │ │ │ │ +000031c0: 636b 7570 0a20 2020 2064 7572 696e 6720 ckup. during │ │ │ │ +000031d0: 7468 6520 6261 636b 7570 0a20 2020 2079 the backup. y │ │ │ │ +000031e0: 6f75 2068 6176 6520 746f 2063 616c 6c20 ou have to call │ │ │ │ +000031f0: 7468 6520 7072 6f67 7261 6d20 7374 6f72 the program stor │ │ │ │ +00003200: 6542 6163 6b75 7057 7269 7465 4c61 7465 eBackupWriteLate │ │ │ │ +00003210: 4c69 6e6b 2e70 6c0a 2020 2020 6c61 7465 Link.pl. late │ │ │ │ +00003220: 7220 6f6e 2079 6f75 7220 7365 7276 6572 r on your server │ │ │ │ +00003230: 2069 6620 796f 7520 7365 7420 7468 6973 if you set this │ │ │ │ +00003240: 2066 6c61 6720 746f 2027 7965 7327 0a20 flag to 'yes'. │ │ │ │ +00003250: 2020 2079 6f75 2068 6176 6520 746f 2072 you have to r │ │ │ │ +00003260: 756e 2073 746f 7265 4261 636b 7570 5570 un storeBackupUp │ │ │ │ +00003270: 6461 7465 4261 636b 7570 2e70 6c20 6c61 dateBackup.pl la │ │ │ │ +00003280: 7465 7220 2d20 7365 650a 2020 2020 6465 ter - see. de │ │ │ │ +00003290: 7363 7269 7074 696f 6e20 666f 7220 7468 scription for th │ │ │ │ +000032a0: 6174 2070 726f 6772 616d 0a0a 3d69 7465 at program..=ite │ │ │ │ +000032b0: 6d20 423c 2d2d 6c61 7465 436f 6d70 7265 m B<--lateCompre │ │ │ │ +000032c0: 7373 3e0a 0a20 2020 206f 6e6c 7920 696e ss>.. only in │ │ │ │ +000032d0: 2063 6f6d 6269 6e61 7469 6f6e 2077 6974 combination wit │ │ │ │ +000032e0: 6820 2d2d 6c61 7465 4c69 6e6b 730a 2020 h --lateLinks. │ │ │ │ +000032f0: 2020 636f 6d70 7265 7373 696f 6e20 6672 compression fr │ │ │ │ +00003300: 6f6d 2066 696c 6573 203e 3d20 6d69 6e43 om files >= minC │ │ │ │ +00003310: 6f6d 7072 6573 7353 697a 6520 7769 6c6c ompressSize will │ │ │ │ +00003320: 2062 6520 646f 6e65 0a20 2020 206c 6174 be done. lat │ │ │ │ +00003330: 6572 2c20 7468 6520 6669 6c65 2069 7320 er, the file is │ │ │ │ +00003340: 2874 656d 706f 7261 7269 6c79 2920 636f (temporarily) co │ │ │ │ +00003350: 7069 6564 2069 6e74 6f20 7468 6520 6261 pied into the ba │ │ │ │ +00003360: 636b 7570 0a0a 3d69 7465 6d20 423c 2d2d ckup..=item B<-- │ │ │ │ +00003370: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi │ │ │ │ +00003380: 783e 0a0a 2020 2020 4669 6c65 7320 7769 x>.. Files wi │ │ │ │ +00003390: 7468 2073 7566 6669 7820 666f 7220 7768 th suffix for wh │ │ │ │ +000033a0: 6963 6820 7374 6f72 6542 6163 6b75 7020 ich storeBackup │ │ │ │ +000033b0: 7769 6c6c 206d 616b 6520 616e 206d 6435 will make an md5 │ │ │ │ +000033c0: 0a20 2020 2063 6865 636b 206f 6e20 626c . check on bl │ │ │ │ +000033d0: 6f63 6b73 206f 6620 7468 6174 2066 696c ocks of that fil │ │ │ │ +000033e0: 652e 2045 7865 6375 7465 6420 6166 7465 e. Executed afte │ │ │ │ +000033f0: 720a 2020 2020 2d2d 6368 6563 6b42 6c6f r. --checkBlo │ │ │ │ +00003400: 636b 7352 756c 6528 6e29 0a20 2020 2054 cksRule(n). T │ │ │ │ +00003410: 6869 7320 6f70 7469 6f6e 2063 616e 2062 his option can b │ │ │ │ +00003420: 6520 7265 7065 6174 6564 206d 756c 7469 e repeated multi │ │ │ │ +00003430: 706c 6520 7469 6d65 730a 0a3d 6974 656d ple times..=item │ │ │ │ +00003440: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks │ │ │ │ +00003450: 4d69 6e53 697a 653e 0a0a 2020 2020 4f6e MinSize>.. On │ │ │ │ +00003460: 6c79 2063 6865 636b 2066 696c 6573 2073 ly check files s │ │ │ │ +00003470: 7065 6369 6669 6564 2069 6e20 2d2d 6368 pecified in --ch │ │ │ │ +00003480: 6563 6b42 6c6f 636b 7353 7566 6669 7820 eckBlocksSuffix │ │ │ │ +00003490: 6966 2074 6865 7265 0a20 2020 2066 696c if there. fil │ │ │ │ +000034a0: 6520 7369 7a65 2069 7320 6174 206c 6561 e size is at lea │ │ │ │ +000034b0: 7374 2074 6869 7320 7661 6c75 652c 2064 st this value, d │ │ │ │ +000034c0: 6566 6175 6c74 2069 7320 3130 304d 0a0a efault is 100M.. │ │ │ │ +000034d0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB │ │ │ │ +000034e0: 6c6f 636b 7342 533e 0a0a 2020 2020 426c locksBS>.. Bl │ │ │ │ +000034f0: 6f63 6b20 7369 7a65 2066 6f72 2066 696c ock size for fil │ │ │ │ +00003500: 6573 2073 7065 6369 6669 6564 2077 6974 es specified wit │ │ │ │ +00003510: 6820 2d2d 6368 6563 6b42 6c6f 636b 7353 h --checkBlocksS │ │ │ │ +00003520: 7566 6669 780a 2020 2020 4465 6661 756c uffix. Defaul │ │ │ │ +00003530: 7420 6973 2024 6368 6563 6b42 6c6f 636b t is $checkBlock │ │ │ │ +00003540: 7342 5364 6566 6175 6c74 2028 3120 6d65 sBSdefault (1 me │ │ │ │ +00003550: 6761 6279 7465 290a 0a3d 6974 656d 2042 gabyte)..=item B │ │ │ │ +00003560: 3c2d 2d63 6865 636b 426c 6f63 6b73 436f <--checkBlocksCo │ │ │ │ +00003570: 6d70 723e 0a0a 2020 2020 6966 2073 6574 mpr>.. if set │ │ │ │ +00003580: 2c20 7468 6520 626c 6f63 6b73 2067 656e , the blocks gen │ │ │ │ +00003590: 6572 6174 6564 2064 7565 2074 6f20 6368 erated due to ch │ │ │ │ +000035a0: 6563 6b42 6c6f 636b 7353 7566 6669 780a eckBlocksSuffix. │ │ │ │ +000035b0: 2020 2020 6172 6520 636f 6d70 7265 7373 are compress │ │ │ │ +000035c0: 6564 0a0a 3d69 7465 6d20 423c 2d2d 6368 ed..=item B<--ch │ │ │ │ +000035d0: 6563 6b42 6c6f 636b 7352 756c 6530 3e0a eckBlocksRule0>. │ │ │ │ +000035e0: 0a20 2020 2046 696c 6573 2066 6f72 2077 . Files for w │ │ │ │ +000035f0: 6869 6368 2073 746f 7265 4261 636b 7570 hich storeBackup │ │ │ │ +00003600: 2077 696c 6c20 6d61 6b65 2061 6e20 6d64 will make an md │ │ │ │ +00003610: 3520 6368 6563 6b0a 2020 2020 6465 7065 5 check. depe │ │ │ │ +00003620: 6e64 696e 6720 6f6e 2062 6c6f 636b 7320 nding on blocks │ │ │ │ +00003630: 6f66 2074 6861 7420 6669 6c65 2e0a 0a3d of that file...= │ │ │ │ +00003640: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl │ │ │ │ +00003650: 6f63 6b73 4253 303e 0a0a 2020 2020 426c ocksBS0>.. Bl │ │ │ │ +00003660: 6f63 6b20 7369 7a65 2066 6f72 206f 7074 ock size for opt │ │ │ │ +00003670: 696f 6e20 6368 6563 6b42 6c6f 636b 7352 ion checkBlocksR │ │ │ │ +00003680: 756c 650a 2020 2020 4465 6661 756c 7420 ule. Default │ │ │ │ +00003690: 6973 2024 6368 6563 6b42 6c6f 636b 7342 is $checkBlocksB │ │ │ │ +000036a0: 5364 6566 6175 6c74 2028 3120 6d65 6761 Sdefault (1 mega │ │ │ │ +000036b0: 6279 7465 290a 0a3d 6974 656d 2042 3c2d byte)..=item B<- │ │ │ │ +000036c0: 2d63 6865 636b 426c 6f63 6b73 436f 6d70 -checkBlocksComp │ │ │ │ +000036d0: 7230 3e0a 0a20 2020 2069 6620 7365 742c r0>.. if set, │ │ │ │ +000036e0: 2074 6865 2062 6c6f 636b 7320 6765 6e65 the blocks gene │ │ │ │ +000036f0: 7261 7465 6420 6475 6520 746f 2074 6869 rated due to thi │ │ │ │ +00003700: 7320 7275 6c65 2061 7265 0a20 2020 2063 s rule are. c │ │ │ │ +00003710: 6f6d 7072 6573 7365 640a 0a3d 6974 656d ompressed..=item │ │ │ │ +00003720: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks │ │ │ │ +00003730: 5265 6164 303e 0a0a 2020 2020 4669 6c74 Read0>.. Filt │ │ │ │ +00003740: 6572 2066 6f72 2072 6561 6469 6e67 2074 er for reading t │ │ │ │ +00003750: 6865 2066 696c 6520 746f 2074 7265 6174 he file to treat │ │ │ │ +00003760: 2061 7320 6120 626c 6f63 6b65 6420 6669 as a blocked fi │ │ │ │ +00003770: 6c65 0a20 2020 2065 672e 2027 677a 6970 le. eg. 'gzip │ │ │ │ +00003780: 202d 6427 2069 6620 7468 6520 6669 6c65 -d' if the file │ │ │ │ +00003790: 2069 7320 636f 6d70 7265 7373 6564 2e20 is compressed. │ │ │ │ +000037a0: 4465 6661 756c 7420 6973 206e 6f0a 2020 Default is no. │ │ │ │ +000037b0: 2020 7265 6164 2066 696c 7465 722e 0a20 read filter.. │ │ │ │ +000037c0: 2020 2054 6869 7320 7061 7261 6d65 7465 This paramete │ │ │ │ +000037d0: 7220 6973 2070 6172 7365 6420 6c69 6b65 r is parsed like │ │ │ │ +000037e0: 2074 6865 206c 696e 6520 696e 2074 6865 the line in the │ │ │ │ +000037f0: 0a20 2020 2063 6f6e 6669 6775 7261 7469 . configurati │ │ │ │ +00003800: 6f6e 2066 696c 6520 616e 6420 6e6f 726d on file and norm │ │ │ │ +00003810: 616c 6c79 2068 6173 2074 6f20 6265 2071 ally has to be q │ │ │ │ +00003820: 756f 7465 642c 0a20 2020 2065 672e 2027 uoted,. eg. ' │ │ │ │ +00003830: 677a 6970 202d 3927 0a0a 3d69 7465 6d20 gzip -9'..=item │ │ │ │ +00003840: 423c 2d2d 6368 6563 6b42 6c6f 636b 7350 B<--checkBlocksP │ │ │ │ +00003850: 6172 616c 6c65 6c30 3e0a 0a20 2020 2052 arallel0>.. R │ │ │ │ +00003860: 6561 6420 6669 6c65 7320 7370 6563 6966 ead files specif │ │ │ │ +00003870: 6965 6420 6865 7265 2069 6e20 7061 7261 ied here in para │ │ │ │ +00003880: 6c6c 656c 2074 6f20 226e 6f72 6d61 6c22 llel to "normal" │ │ │ │ +00003890: 206f 6e65 732e 0a20 2020 2054 6869 7320 ones.. This │ │ │ │ +000038a0: 6f6e 6c79 206d 616b 6573 2073 656e 7365 only makes sense │ │ │ │ +000038b0: 2069 6620 7468 6579 2061 7265 206f 6e20 if they are on │ │ │ │ +000038c0: 6120 6469 6666 6572 656e 7420 6469 736b a different disk │ │ │ │ +000038d0: 2e0a 2020 2020 4465 6661 756c 7420 7661 .. Default va │ │ │ │ +000038e0: 6c75 6520 6973 2027 6e6f 270a 0a3d 6974 lue is 'no'..=it │ │ │ │ +000038f0: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc │ │ │ │ +00003900: 6b73 5275 6c65 313e 0a0a 3d69 7465 6d20 ksRule1>..=item │ │ │ │ +00003910: 423c 2d2d 6368 6563 6b42 6c6f 636b 7342 B<--checkBlocksB │ │ │ │ +00003920: 5331 3e0a 0a3d 6974 656d 2042 3c2d 2d63 S1>..=item B<--c │ │ │ │ +00003930: 6865 636b 426c 6f63 6b73 436f 6d70 7231 heckBlocksCompr1 │ │ │ │ +00003940: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ │ +00003950: 636b 426c 6f63 6b73 5265 6164 313e 0a0a ckBlocksRead1>.. │ │ │ │ +00003960: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB │ │ │ │ +00003970: 6c6f 636b 7350 6172 616c 6c65 6c31 3e0a locksParallel1>. │ │ │ │ +00003980: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check │ │ │ │ +00003990: 426c 6f63 6b73 5275 6c65 323e 0a0a 3d69 BlocksRule2>..=i │ │ │ │ +000039a0: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo │ │ │ │ +000039b0: 636b 7342 5332 3e0a 0a3d 6974 656d 2042 cksBS2>..=item B │ │ │ │ +000039c0: 3c2d 2d63 6865 636b 426c 6f63 6b73 436f <--checkBlocksCo │ │ │ │ +000039d0: 6d70 7232 3e0a 0a3d 6974 656d 2042 3c2d mpr2>..=item B<- │ │ │ │ +000039e0: 2d63 6865 636b 426c 6f63 6b73 5265 6164 -checkBlocksRead │ │ │ │ +000039f0: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch │ │ │ │ +00003a00: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle │ │ │ │ +00003a10: 6c32 3e0a 0a3d 6974 656d 2042 3c2d 2d63 l2>..=item B<--c │ │ │ │ +00003a20: 6865 636b 426c 6f63 6b73 5275 6c65 333e heckBlocksRule3> │ │ │ │ +00003a30: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ │ +00003a40: 6b42 6c6f 636b 7342 5333 3e0a 0a3d 6974 kBlocksBS3>..=it │ │ │ │ +00003a50: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc │ │ │ │ +00003a60: 6b73 436f 6d70 7233 3e0a 0a3d 6974 656d ksCompr3>..=item │ │ │ │ +00003a70: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks │ │ │ │ +00003a80: 5265 6164 333e 0a0a 3d69 7465 6d20 423c Read3>..=item B< │ │ │ │ +00003a90: 2d2d 6368 6563 6b42 6c6f 636b 7350 6172 --checkBlocksPar │ │ │ │ +00003aa0: 616c 6c65 6c33 3e0a 0a3d 6974 656d 2042 allel3>..=item B │ │ │ │ +00003ab0: 3c2d 2d63 6865 636b 426c 6f63 6b73 5275 <--checkBlocksRu │ │ │ │ +00003ac0: 6c65 343e 0a0a 3d69 7465 6d20 423c 2d2d le4>..=item B<-- │ │ │ │ +00003ad0: 6368 6563 6b42 6c6f 636b 7342 5334 3e0a checkBlocksBS4>. │ │ │ │ +00003ae0: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check │ │ │ │ +00003af0: 426c 6f63 6b73 436f 6d70 7234 3e0a 0a3d BlocksCompr4>..= │ │ │ │ +00003b00: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl │ │ │ │ +00003b10: 6f63 6b73 5265 6164 343e 0a0a 3d69 7465 ocksRead4>..=ite │ │ │ │ +00003b20: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock │ │ │ │ +00003b30: 7350 6172 616c 6c65 6c34 3e0a 0a3d 6974 sParallel4>..=it │ │ │ │ +00003b40: 656d 2042 3c2d 2d63 6865 636b 4465 7669 em B<--checkDevi │ │ │ │ +00003b50: 6365 7330 3e0a 0a20 2020 204c 6973 7420 ces0>.. List │ │ │ │ +00003b60: 6f66 2064 6576 6963 6573 2066 6f72 206d of devices for m │ │ │ │ +00003b70: 6435 2063 6b65 636b 2064 6570 656e 6469 d5 ckeck dependi │ │ │ │ +00003b80: 6e67 206f 6e20 626c 6f63 6b73 206f 6620 ng on blocks of │ │ │ │ +00003b90: 7468 6573 650a 2020 2020 6465 7669 6365 these. device │ │ │ │ +00003ba0: 730a 0a3d 6974 656d 2042 3c2d 2d63 6865 s..=item B<--che │ │ │ │ +00003bb0: 636b 4465 7669 6365 7344 6972 303e 0a0a ckDevicesDir0>.. │ │ │ │ +00003bc0: 2020 2020 4469 7265 6374 6f72 7920 7768 Directory wh │ │ │ │ +00003bd0: 6572 6520 746f 2073 746f 7265 2074 6865 ere to store the │ │ │ │ +00003be0: 2062 6163 6b75 7020 6f66 2074 6865 2064 backup of the d │ │ │ │ +00003bf0: 6576 6963 650a 0a3d 6974 656d 2042 3c2d evice..=item B<- │ │ │ │ +00003c00: 2d63 6865 636b 4465 7669 6365 7342 5330 -checkDevicesBS0 │ │ │ │ +00003c10: 3e0a 0a20 2020 2042 6c6f 636b 2073 697a >.. Block siz │ │ │ │ +00003c20: 6520 6f66 206f 7074 696f 6e20 6368 6563 e of option chec │ │ │ │ +00003c30: 6b44 6576 6963 6573 302c 0a20 2020 2064 kDevices0,. d │ │ │ │ +00003c40: 6566 6175 6c74 2069 7320 314d 2028 3120 efault is 1M (1 │ │ │ │ +00003c50: 6d65 6761 6279 7465 290a 0a3d 6974 656d megabyte)..=item │ │ │ │ +00003c60: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice │ │ │ │ +00003c70: 7343 6f6d 7072 303e 0a0a 2020 2020 436f sCompr0>.. Co │ │ │ │ +00003c80: 6d70 7265 7373 2062 6c6f 636b 7320 7265 mpress blocks re │ │ │ │ +00003c90: 7375 6c74 696e 6720 6672 6f6d 206f 7074 sulting from opt │ │ │ │ +00003ca0: 696f 6e20 6368 6563 6b44 6576 6963 6573 ion checkDevices │ │ │ │ +00003cb0: 300a 0a3d 6974 656d 2042 3c2d 2d63 6865 0..=item B<--che │ │ │ │ +00003cc0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ │ +00003cd0: 6c30 3e0a 0a20 2020 2052 6561 6420 6465 l0>.. Read de │ │ │ │ +00003ce0: 7669 6365 7320 7370 6563 6966 6965 6420 vices specified │ │ │ │ +00003cf0: 696e 2070 6172 616c 6c65 6c20 746f 2074 in parallel to t │ │ │ │ +00003d00: 6865 2072 6573 7420 6f66 2074 6865 0a20 he rest of the. │ │ │ │ +00003d10: 2020 2062 6163 6b75 702e 2054 6869 7320 backup. This │ │ │ │ +00003d20: 6f6e 6c79 206d 616b 6573 2073 656e 7365 only makes sense │ │ │ │ +00003d30: 2069 6620 7468 6579 2061 7265 206f 6e20 if they are on │ │ │ │ +00003d40: 6120 6469 6666 6572 656e 740a 2020 2020 a different. │ │ │ │ +00003d50: 6469 736b 2e20 4465 6661 756c 7420 7661 disk. Default va │ │ │ │ +00003d60: 6c75 6520 6973 2027 6e6f 270a 0a3d 6974 lue is 'no'..=it │ │ │ │ +00003d70: 656d 2042 3c2d 2d63 6865 636b 4465 7669 em B<--checkDevi │ │ │ │ +00003d80: 6365 7331 3e0a 0a3d 6974 656d 2042 3c2d ces1>..=item B<- │ │ │ │ +00003d90: 2d63 6865 636b 4465 7669 6365 7344 6972 -checkDevicesDir │ │ │ │ +00003da0: 313e 0a0a 3d69 7465 6d20 423c 2d2d 6368 1>..=item B<--ch │ │ │ │ +00003db0: 6563 6b44 6576 6963 6573 4253 313e 0a0a eckDevicesBS1>.. │ │ │ │ +00003dc0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD │ │ │ │ +00003dd0: 6576 6963 6573 436f 6d70 7231 3e0a 0a3d evicesCompr1>..= │ │ │ │ +00003de0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe │ │ │ │ +00003df0: 7669 6365 7350 6172 616c 6c65 6c31 3e0a vicesParallel1>. │ │ │ │ +00003e00: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check │ │ │ │ +00003e10: 4465 7669 6365 7332 3e0a 0a3d 6974 656d Devices2>..=item │ │ │ │ +00003e20: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice │ │ │ │ +00003e30: 7344 6972 323e 0a0a 3d69 7465 6d20 423c sDir2>..=item B< │ │ │ │ +00003e40: 2d2d 6368 6563 6b44 6576 6963 6573 4253 --checkDevicesBS │ │ │ │ +00003e50: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch │ │ │ │ +00003e60: 6563 6b44 6576 6963 6573 436f 6d70 7232 eckDevicesCompr2 │ │ │ │ +00003e70: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ │ +00003e80: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ │ +00003e90: 6c32 3e0a 0a3d 6974 656d 2042 3c2d 2d63 l2>..=item B<--c │ │ │ │ +00003ea0: 6865 636b 4465 7669 6365 7333 3e0a 0a3d heckDevices3>..= │ │ │ │ +00003eb0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe │ │ │ │ +00003ec0: 7669 6365 7344 6972 333e 0a0a 3d69 7465 vicesDir3>..=ite │ │ │ │ +00003ed0: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic │ │ │ │ +00003ee0: 6573 4253 333e 0a0a 3d69 7465 6d20 423c esBS3>..=item B< │ │ │ │ +00003ef0: 2d2d 6368 6563 6b44 6576 6963 6573 436f --checkDevicesCo │ │ │ │ +00003f00: 6d70 7233 3e0a 0a3d 6974 656d 2042 3c2d mpr3>..=item B<- │ │ │ │ +00003f10: 2d63 6865 636b 4465 7669 6365 7350 6172 -checkDevicesPar │ │ │ │ +00003f20: 616c 6c65 6c33 3e0a 0a3d 6974 656d 2042 allel3>..=item B │ │ │ │ +00003f30: 3c2d 2d63 6865 636b 4465 7669 6365 7334 <--checkDevices4 │ │ │ │ +00003f40: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ │ +00003f50: 636b 4465 7669 6365 7344 6972 343e 0a0a ckDevicesDir4>.. │ │ │ │ +00003f60: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD │ │ │ │ +00003f70: 6576 6963 6573 4253 343e 0a0a 3d69 7465 evicesBS4>..=ite │ │ │ │ +00003f80: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic │ │ │ │ +00003f90: 6573 436f 6d70 7234 3e0a 0a3d 6974 656d esCompr4>..=item │ │ │ │ +00003fa0: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice │ │ │ │ +00003fb0: 7350 6172 616c 6c65 6c34 3e0a 0a3d 6974 sParallel4>..=it │ │ │ │ +00003fc0: 656d 2042 3c2d 2d73 6176 6552 414d 3e0a em B<--saveRAM>. │ │ │ │ +00003fd0: 0a20 2020 2077 7269 7465 2074 656d 706f . write tempo │ │ │ │ +00003fe0: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i │ │ │ │ +00003ff0: 6e20 2d2d 746d 7064 6972 0a20 2020 2075 n --tmpdir. u │ │ │ │ +00004000: 7365 2074 6869 7320 6966 2079 6f75 2064 se this if you d │ │ │ │ +00004010: 6f20 6e6f 7420 6861 7665 2065 6e6f 7567 o not have enoug │ │ │ │ +00004020: 6820 5241 4d0a 0a3d 6974 656d 2042 3c2d h RAM..=item B<- │ │ │ │ +00004030: 2d63 6f6d 7072 6573 733e 2c20 423c 2d63 -compress>, B<-c │ │ │ │ +00004040: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress │ │ │ │ +00004050: 636f 6d6d 616e 6420 2877 6974 6820 6f70 command (with op │ │ │ │ +00004060: 7469 6f6e 7329 2c20 6465 6661 756c 7420 tions), default │ │ │ │ +00004070: 6973 203c 627a 6970 323e 0a20 2020 2054 is . T │ │ │ │ +00004080: 6869 7320 7061 7261 6d65 7465 7220 6973 his parameter is │ │ │ │ +00004090: 2070 6172 7365 6420 6c69 6b65 2074 6865 parsed like the │ │ │ │ +000040a0: 206c 696e 6520 696e 2074 6865 0a20 2020 line in the. │ │ │ │ +000040b0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f │ │ │ │ +000040c0: 696c 6520 616e 6420 6e6f 726d 616c 6c79 ile and normally │ │ │ │ +000040d0: 2068 6173 2074 6f20 6265 2071 756f 7465 has to be quote │ │ │ │ +000040e0: 642c 0a20 2020 2065 672e 2027 677a 6970 d,. eg. 'gzip │ │ │ │ +000040f0: 202d 3927 0a0a 3d69 7465 6d20 423c 2d2d -9'..=item B<-- │ │ │ │ +00004100: 756e 636f 6d70 7265 7373 3e2c 2042 3c2d uncompress>, B<- │ │ │ │ +00004110: 753e 0a0a 2020 2020 756e 636f 6d70 7265 u>.. uncompre │ │ │ │ +00004120: 7373 2063 6f6d 6d61 6e64 2028 7769 7468 ss command (with │ │ │ │ +00004130: 206f 7074 696f 6e73 292c 2064 6566 6175 options), defau │ │ │ │ +00004140: 6c74 2069 7320 203c 627a 6970 3220 2d64 lt is . This param │ │ │ │ +00004160: 6574 6572 2069 7320 7061 7273 6564 206c eter is parsed l │ │ │ │ +00004170: 696b 6520 7468 6520 6c69 6e65 2069 6e20 ike the line in │ │ │ │ +00004180: 7468 650a 2020 2020 636f 6e66 6967 7572 the. configur │ │ │ │ +00004190: 6174 696f 6e20 6669 6c65 2061 6e64 206e ation file and n │ │ │ │ +000041a0: 6f72 6d61 6c6c 7920 6861 7320 746f 2062 ormally has to b │ │ │ │ +000041b0: 6520 7175 6f74 6564 2c20 6567 2e0a 2020 e quoted, eg.. │ │ │ │ +000041c0: 2020 2767 7a69 7020 2d64 270a 0a3d 6974 'gzip -d'..=it │ │ │ │ +000041d0: 656d 2042 3c2d 2d70 6f73 7466 6978 3e2c em B<--postfix>, │ │ │ │ +000041e0: 2042 3c2d 703e 0a0a 2020 2020 706f 7374 B<-p>.. post │ │ │ │ +000041f0: 6669 7820 746f 2061 6464 2061 6674 6572 fix to add after │ │ │ │ +00004200: 2063 6f6d 7072 6573 7369 6f6e 2c20 6465 compression, de │ │ │ │ +00004210: 6661 756c 7420 6973 203c 2e62 7a32 3e0a fault is <.bz2>. │ │ │ │ +00004220: 0a3d 6974 656d 2042 3c2d 2d65 7863 6570 .=item B<--excep │ │ │ │ +00004230: 7453 7566 6669 783e 0a0a 2020 2020 646f tSuffix>.. do │ │ │ │ +00004240: 206e 6f74 2063 6f6d 7072 6573 7320 6669 not compress fi │ │ │ │ +00004250: 6c65 7320 7769 7468 2074 6865 2066 6f6c les with the fol │ │ │ │ +00004260: 6c6f 7769 6e67 0a20 2020 2073 7566 6669 lowing. suffi │ │ │ │ +00004270: 7820 2875 7070 6572 6361 7365 2069 6e63 x (uppercase inc │ │ │ │ +00004280: 6c75 6465 6429 3a0a 2020 2020 2827 5c2e luded):. ('\. │ │ │ │ +00004290: 7a69 7027 2c20 275c 2e62 7a32 272c 2027 zip', '\.bz2', ' │ │ │ │ +000042a0: 5c2e 677a 272c 2027 5c2e 7467 7a27 2c20 \.gz', '\.tgz', │ │ │ │ +000042b0: 275c 2e6a 7067 272c 2027 5c2e 6769 6627 '\.jpg', '\.gif' │ │ │ │ +000042c0: 2c0a 2020 2020 2027 5c2e 7469 6666 272c ,. '\.tiff', │ │ │ │ +000042d0: 2027 5c2e 7469 6627 2c20 275c 2e6d 7065 '\.tif', '\.mpe │ │ │ │ +000042e0: 6727 2c20 275c 2e6d 7067 272c 2027 5c2e g', '\.mpg', '\. │ │ │ │ +000042f0: 6d70 3327 2c20 275c 2e6f 6767 272c 0a20 mp3', '\.ogg',. │ │ │ │ +00004300: 2020 2020 275c 2e67 7067 272c 2027 5c2e '\.gpg', '\. │ │ │ │ +00004310: 706e 6727 290a 2020 2020 5468 6973 206f png'). This o │ │ │ │ +00004320: 7074 696f 6e20 6361 6e20 6265 2072 6570 ption can be rep │ │ │ │ +00004330: 6561 7465 6420 6d75 6c74 6970 6c65 2074 eated multiple t │ │ │ │ +00004340: 696d 6573 0a20 2020 2049 6620 796f 7520 imes. If you │ │ │ │ +00004350: 646f 206e 6f74 2077 616e 7420 616e 7920 do not want any │ │ │ │ +00004360: 636f 6d70 7265 7373 696f 6e2c 2073 6574 compression, set │ │ │ │ +00004370: 2074 6869 7320 6f70 7469 6f6e 0a20 2020 this option. │ │ │ │ +00004380: 2074 6f20 272e 2a27 0a0a 3d69 7465 6d20 to '.*'..=item │ │ │ │ +00004390: 423c 2d2d 6164 6445 7863 6570 7453 7566 B<--addExceptSuf │ │ │ │ +000043a0: 6669 783e 0a0a 2020 2020 6c69 6b65 202d fix>.. like - │ │ │ │ +000043b0: 2d65 7863 6570 7453 7566 6669 782c 2062 -exceptSuffix, b │ │ │ │ +000043c0: 7574 2064 6f20 6e6f 7420 7265 706c 6163 ut do not replac │ │ │ │ +000043d0: 6520 6465 6661 756c 7473 2c20 6164 640a e defaults, add. │ │ │ │ +000043e0: 0a3d 6974 656d 2042 3c2d 2d6d 696e 436f .=item B<--minCo │ │ │ │ +000043f0: 6d70 7265 7373 5369 7a65 3e0a 0a20 2020 mpressSize>.. │ │ │ │ +00004400: 2046 696c 6573 2073 6d61 6c6c 6572 2074 Files smaller t │ │ │ │ +00004410: 6861 6e20 7468 6973 2073 697a 6520 7769 han this size wi │ │ │ │ +00004420: 6c6c 206e 6576 6572 2062 6520 636f 6d70 ll never be comp │ │ │ │ +00004430: 7265 7373 6564 0a20 2020 2062 7574 2063 ressed. but c │ │ │ │ +00004440: 6f70 6965 640a 0a3d 6974 656d 2042 3c2d opied..=item B<- │ │ │ │ +00004450: 2d63 6f6d 7072 5275 6c65 3e0a 0a20 2020 -comprRule>.. │ │ │ │ +00004460: 2061 6c74 6572 6e61 7469 7665 2074 6f20 alternative to │ │ │ │ +00004470: 2d2d 6578 6365 7074 5375 6666 6978 2061 --exceptSuffix a │ │ │ │ +00004480: 6e64 206d 696e 436f 6d70 7265 7373 5369 nd minCompressSi │ │ │ │ +00004490: 7a65 3a0a 2020 2020 6465 6669 6e69 7469 ze:. definiti │ │ │ │ +000044a0: 6f6e 206f 6620 6120 7275 6c65 2077 6869 on of a rule whi │ │ │ │ +000044b0: 6368 2066 696c 6573 2077 696c 6c20 6265 ch files will be │ │ │ │ +000044c0: 2063 6f6d 7072 6573 7365 640a 0a3d 6974 compressed..=it │ │ │ │ +000044d0: 656d 2042 3c2d 2d6e 6f43 6f6d 7072 6573 em B<--noCompres │ │ │ │ +000044e0: 733e 0a0a 2020 2020 6d61 7869 6d61 6c20 s>.. maximal │ │ │ │ +000044f0: 6e75 6d62 6572 206f 6620 7061 7261 6c6c number of parall │ │ │ │ +00004500: 656c 2063 6f6d 7072 6573 7320 6f70 6572 el compress oper │ │ │ │ +00004510: 6174 696f 6e73 2c0a 2020 2020 6465 6661 ations,. defa │ │ │ │ +00004520: 756c 7420 3d20 6368 6f73 656e 2061 7574 ult = chosen aut │ │ │ │ +00004530: 6f6d 6174 6963 616c 6c79 0a0a 3d69 7465 omatically..=ite │ │ │ │ +00004540: 6d20 423c 2d2d 7175 6575 6543 6f6d 7072 m B<--queueCompr │ │ │ │ +00004550: 6573 733e 0a0a 2020 2020 6c65 6e67 7468 ess>.. length │ │ │ │ +00004560: 206f 6620 7175 6575 6520 746f 2073 746f of queue to sto │ │ │ │ +00004570: 7265 2066 696c 6573 2062 6566 6f72 6520 re files before │ │ │ │ +00004580: 636f 6d70 7265 7373 696f 6e2c 0a20 2020 compression,. │ │ │ │ +00004590: 2064 6566 6175 6c74 203d 2031 3030 300a default = 1000. │ │ │ │ +000045a0: 0a3d 6974 656d 2042 3c2d 2d6e 6f43 6f70 .=item B<--noCop │ │ │ │ +000045b0: 793e 0a0a 2020 2020 6d61 7869 6d61 6c20 y>.. maximal │ │ │ │ +000045c0: 6e75 6d62 6572 206f 6620 7061 7261 6c6c number of parall │ │ │ │ +000045d0: 656c 2063 6f70 7920 6f70 6572 6174 696f el copy operatio │ │ │ │ +000045e0: 6e73 2c0a 2020 2020 6465 6661 756c 7420 ns,. default │ │ │ │ +000045f0: 3d20 310a 0a3d 6974 656d 2042 3c2d 2d71 = 1..=item B<--q │ │ │ │ +00004600: 7565 7565 436f 7079 3e0a 0a20 2020 206c ueueCopy>.. l │ │ │ │ +00004610: 656e 6774 6820 6f66 2071 7565 7565 2074 ength of queue t │ │ │ │ +00004620: 6f20 7374 6f72 6520 6669 6c65 7320 6265 o store files be │ │ │ │ +00004630: 666f 7265 2063 6f70 7969 6e67 2c0a 2020 fore copying,. │ │ │ │ +00004640: 2020 6465 6661 756c 7420 3d20 3130 3030 default = 1000 │ │ │ │ +00004650: 0a0a 3d69 7465 6d20 423c 2d2d 7769 7468 ..=item B<--with │ │ │ │ +00004660: 5573 6572 4772 6f75 7053 7461 743e 0a0a UserGroupStat>.. │ │ │ │ +00004670: 2020 2020 7772 6974 6520 7374 6174 6973 write statis │ │ │ │ +00004680: 7469 6373 2061 626f 7574 2075 7365 6420 tics about used │ │ │ │ +00004690: 7370 6163 6520 696e 206c 6f67 2066 696c space in log fil │ │ │ │ +000046a0: 650a 0a3d 6974 656d 2042 3c2d 2d75 7365 e..=item B<--use │ │ │ │ +000046b0: 7247 726f 7570 5374 6174 4669 6c65 3e0a rGroupStatFile>. │ │ │ │ +000046c0: 0a20 2020 2077 7269 7465 2073 7461 7469 . write stati │ │ │ │ +000046d0: 7374 6963 7320 6162 6f75 7420 7573 6564 stics about used │ │ │ │ +000046e0: 2073 7061 6365 2069 6e20 6e61 6d65 2066 space in name f │ │ │ │ +000046f0: 696c 650a 2020 2020 7769 6c6c 2062 6520 ile. will be │ │ │ │ +00004700: 6f76 6572 7269 6464 656e 2065 6163 6820 overridden each │ │ │ │ +00004710: 7469 6d65 0a0a 3d69 7465 6d20 423c 2d2d time..=item B<-- │ │ │ │ +00004720: 646f 4e6f 7443 6f6d 7072 6573 734d 4435 doNotCompressMD5 │ │ │ │ +00004730: 4669 6c65 3e0a 0a20 2020 2064 6f20 6e6f File>.. do no │ │ │ │ +00004740: 7420 636f 6d70 7265 7373 202e 6d64 3543 t compress .md5C │ │ │ │ +00004750: 6865 636b 5375 6d46 696c 650a 0a3d 6974 heckSumFile..=it │ │ │ │ +00004760: 656d 2042 3c2d 2d63 686d 6f64 4d44 3546 em B<--chmodMD5F │ │ │ │ +00004770: 696c 653e 0a0a 2020 2020 7065 726d 6973 ile>.. permis │ │ │ │ +00004780: 7369 6f6e 7320 6f66 202e 6d64 3543 6865 sions of .md5Che │ │ │ │ +00004790: 636b 5375 6d46 696c 6520 616e 6420 636f ckSumFile and co │ │ │ │ +000047a0: 7272 6573 706f 6e64 696e 670a 2020 2020 rresponding. │ │ │ │ +000047b0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink │ │ │ │ +000047c0: 7320 6469 7265 6374 6f72 792c 2064 6566 s directory, def │ │ │ │ +000047d0: 6175 6c74 2069 7320 3036 3030 0a0a 3d69 ault is 0600..=i │ │ │ │ +000047e0: 7465 6d20 423c 2d2d 7665 7262 6f73 653e tem B<--verbose> │ │ │ │ +000047f0: 2c20 423c 2d76 3e0a 0a20 2020 2076 6572 , B<-v>.. ver │ │ │ │ +00004800: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..= │ │ │ │ +00004810: 6974 656d 2042 3c2d 2d64 6562 7567 3e2c item B<--debug>, │ │ │ │ +00004820: 2042 3c2d 643e 0a0a 2020 2020 6765 6e65 B<-d>.. gene │ │ │ │ +00004830: 7261 7465 2064 6562 7567 206d 6573 7361 rate debug messa │ │ │ │ +00004840: 6765 732c 206c 6576 656c 7320 6172 6520 ges, levels are │ │ │ │ +00004850: 3020 286e 6f6e 652c 2064 6566 6175 6c74 0 (none, default │ │ │ │ +00004860: 292c 0a20 2020 2031 2028 736f 6d65 292c ),. 1 (some), │ │ │ │ +00004870: 2032 2028 6d61 6e79 2920 6d65 7373 6167 2 (many) messag │ │ │ │ +00004880: 6573 2c20 6573 7065 6369 616c 6c79 2069 es, especially i │ │ │ │ +00004890: 6e0a 2020 2020 2d2d 6578 6365 7074 5275 n. --exceptRu │ │ │ │ +000048a0: 6c65 2061 6e64 202d 2d69 6e63 6c75 6465 le and --include │ │ │ │ +000048b0: 5275 6c65 0a0a 3d69 7465 6d20 423c 2d2d Rule..=item B<-- │ │ │ │ +000048c0: 7265 7365 7441 7469 6d65 3e0a 0a20 2020 resetAtime>.. │ │ │ │ +000048d0: 2072 6573 6574 2061 6363 6573 7320 7469 reset access ti │ │ │ │ +000048e0: 6d65 2069 6e20 7468 6520 736f 7572 6365 me in the source │ │ │ │ +000048f0: 2064 6972 6563 746f 7279 202d 2062 7574 directory - but │ │ │ │ +00004900: 2074 6869 7320 7769 6c6c 0a20 2020 2063 this will. c │ │ │ │ +00004910: 6861 6e67 6520 6374 696d 6520 2874 696d hange ctime (tim │ │ │ │ +00004920: 6520 6f66 206c 6173 7420 6d6f 6469 6669 e of last modifi │ │ │ │ +00004930: 6361 7469 6f6e 206f 6620 6669 6c65 2073 cation of file s │ │ │ │ +00004940: 7461 7475 730a 2020 2020 696e 666f 726d tatus. inform │ │ │ │ +00004950: 6174 696f 6e29 0a0a 3d69 7465 6d20 423c ation)..=item B< │ │ │ │ +00004960: 2d2d 646f 4e6f 7444 656c 6574 653e 0a0a --doNotDelete>.. │ │ │ │ +00004970: 2020 2020 6368 6563 6b20 6f6e 6c79 2c20 check only, │ │ │ │ +00004980: 646f 206e 6f74 2064 656c 6574 6520 616e do not delete an │ │ │ │ +00004990: 7920 6261 636b 7570 0a0a 3d69 7465 6d20 y backup..=item │ │ │ │ +000049a0: 423c 2d2d 6465 6c65 7465 4e6f 7446 696e B<--deleteNotFin │ │ │ │ +000049b0: 6973 6865 6444 6972 733e 0a0a 2020 2020 ishedDirs>.. │ │ │ │ +000049c0: 6465 6c65 7465 206f 6c64 2062 6163 6b75 delete old backu │ │ │ │ +000049d0: 7073 2077 6869 6368 2068 6176 6520 6e6f ps which have no │ │ │ │ +000049e0: 7420 6265 656e 2066 696e 6973 6865 640a t been finished. │ │ │ │ +000049f0: 2020 2020 7468 6973 2077 696c 6c20 6e6f this will no │ │ │ │ +00004a00: 7420 6861 7070 656e 2069 6620 646f 4e6f t happen if doNo │ │ │ │ +00004a10: 7444 656c 6574 6520 6973 2073 6574 0a0a tDelete is set.. │ │ │ │ +00004a20: 3d69 7465 6d20 423c 2d2d 6b65 6570 416c =item B<--keepAl │ │ │ │ +00004a30: 6c3e 0a0a 2020 2020 6b65 6570 2062 6163 l>.. keep bac │ │ │ │ +00004a40: 6b75 7073 2077 6869 6368 2061 7265 206e kups which are n │ │ │ │ +00004a50: 6f74 206f 6c64 6572 2074 6861 6e20 7468 ot older than th │ │ │ │ +00004a60: 6520 7370 6563 6966 6965 6420 616d 6f75 e specified amou │ │ │ │ +00004a70: 6e74 0a20 2020 206f 6620 7469 6d65 2e20 nt. of time. │ │ │ │ +00004a80: 5468 6973 2069 7320 6c69 6b65 2061 2064 This is like a d │ │ │ │ +00004a90: 6566 6175 6c74 2076 616c 7565 2066 6f72 efault value for │ │ │ │ +00004aa0: 2061 6c6c 2064 6179 7320 696e 0a20 2020 all days in. │ │ │ │ +00004ab0: 202d 2d6b 6565 7057 6565 6b64 6179 2e20 --keepWeekday. │ │ │ │ +00004ac0: 4265 6769 6e73 2064 656c 6574 696e 6720 Begins deleting │ │ │ │ +00004ad0: 6174 2074 6865 2065 6e64 206f 6620 7468 at the end of th │ │ │ │ +00004ae0: 6520 7363 7269 7074 0a20 2020 2074 6865 e script. the │ │ │ │ +00004af0: 2074 696d 6520 7261 6e67 6520 6861 7320 time range has │ │ │ │ +00004b00: 746f 2062 6520 7370 6563 6966 6965 6420 to be specified │ │ │ │ +00004b10: 696e 2066 6f72 6d61 7420 2764 686d 7327 in format 'dhms' │ │ │ │ +00004b20: 2c20 652e 672e 0a20 2020 2020 2031 3064 , e.g.. 10d │ │ │ │ +00004b30: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days │ │ │ │ +00004b40: 2061 6e64 2034 2068 6f75 7273 0a20 2020 and 4 hours. │ │ │ │ +00004b50: 2020 2064 6566 6175 6c74 203d 2032 3064 default = 20d │ │ │ │ +00004b60: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep │ │ │ │ +00004b70: 5765 656b 6461 793e 0a0a 2020 2020 6b65 Weekday>.. ke │ │ │ │ +00004b80: 6570 2062 6163 6b75 7073 2066 6f72 2074 ep backups for t │ │ │ │ +00004b90: 6865 2073 7065 6369 6669 6564 2064 6179 he specified day │ │ │ │ +00004ba0: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif │ │ │ │ +00004bb0: 6965 640a 2020 2020 616d 6f75 6e74 206f ied. amount o │ │ │ │ +00004bc0: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit │ │ │ │ +00004bd0: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v │ │ │ │ +00004be0: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in. │ │ │ │ +00004bf0: 2020 2020 2d2d 6b65 6570 416c 6c2e 2027 --keepAll. ' │ │ │ │ +00004c00: 4d6f 6e2c 5765 643a 3430 6420 5361 743a Mon,Wed:40d Sat: │ │ │ │ +00004c10: 3630 6431 306d 2720 6d65 616e 733a 0a20 60d10m' means:. │ │ │ │ +00004c20: 2020 2020 206b 6565 7020 6261 636b 7570 keep backup │ │ │ │ +00004c30: 7320 6672 6f6d 204d 6f6e 2061 6e64 2057 s from Mon and W │ │ │ │ +00004c40: 6564 2034 3064 6179 7320 2b20 356d 696e ed 40days + 5min │ │ │ │ +00004c50: 730a 2020 2020 2020 6b65 6570 2062 6163 s. keep bac │ │ │ │ +00004c60: 6b75 7073 2066 726f 6d20 5361 7420 3630 kups from Sat 60 │ │ │ │ +00004c70: 6461 7973 202b 2031 306d 696e 730a 2020 days + 10mins. │ │ │ │ +00004c80: 2020 2020 6b65 6570 2062 6163 6b75 7073 keep backups │ │ │ │ +00004c90: 2066 726f 6d20 7468 6520 7265 7374 206f from the rest o │ │ │ │ +00004ca0: 6620 7468 6520 6461 7973 206c 696b 6520 f the days like │ │ │ │ +00004cb0: 7370 6369 6669 6564 2069 6e0a 2020 2020 spcified in. │ │ │ │ +00004cc0: 2020 2d2d 6b65 6570 416c 6c20 2864 6566 --keepAll (def │ │ │ │ +00004cd0: 6175 6c74 2024 6b65 6570 416c 6c29 0a20 ault $keepAll). │ │ │ │ +00004ce0: 2020 2069 6620 796f 7520 616c 736f 2075 if you also u │ │ │ │ +00004cf0: 7365 2074 6865 2027 6172 6368 6976 6520 se the 'archive │ │ │ │ +00004d00: 666c 6167 2720 6974 206d 6561 6e73 2074 flag' it means t │ │ │ │ +00004d10: 6f20 6e6f 740a 2020 2020 6465 6c65 7465 o not. delete │ │ │ │ +00004d20: 2074 6865 2061 6666 6563 7465 6420 6469 the affected di │ │ │ │ +00004d30: 7265 6374 6f72 6965 7320 7669 6120 2d2d rectories via -- │ │ │ │ +00004d40: 6b65 6570 4d61 784e 756d 6265 723a 0a20 keepMaxNumber:. │ │ │ │ +00004d50: 2020 2020 2061 3130 6434 6820 6d65 616e a10d4h mean │ │ │ │ +00004d60: 7320 3130 2064 6179 7320 616e 6420 3420 s 10 days and 4 │ │ │ │ +00004d70: 686f 7572 7320 616e 6420 2761 7263 6869 hours and 'archi │ │ │ │ +00004d80: 7665 2066 6c61 6727 0a20 2020 2065 2e67 ve flag'. e.g │ │ │ │ +00004d90: 2e20 274d 6f6e 2c57 6564 3a61 3430 6435 . 'Mon,Wed:a40d5 │ │ │ │ +00004da0: 6d20 5361 743a 3630 6431 306d 2720 6d65 m Sat:60d10m' me │ │ │ │ +00004db0: 616e 733a 0a20 2020 2020 206b 6565 7020 ans:. keep │ │ │ │ +00004dc0: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon │ │ │ │ +00004dd0: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days │ │ │ │ +00004de0: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi │ │ │ │ +00004df0: 7665 270a 2020 2020 2020 6b65 6570 2062 ve'. keep b │ │ │ │ +00004e00: 6163 6b75 7073 2066 726f 6d20 5361 7420 ackups from Sat │ │ │ │ +00004e10: 3630 6461 7973 202b 2031 306d 696e 730a 60days + 10mins. │ │ │ │ +00004e20: 2020 2020 2020 6b65 6570 2062 6163 6b75 keep backu │ │ │ │ +00004e30: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest │ │ │ │ +00004e40: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik │ │ │ │ +00004e50: 6520 7370 6563 6966 6965 6420 696e 0a20 e specified in. │ │ │ │ +00004e60: 2020 2020 202d 2d6b 6565 7041 6c6c 2028 --keepAll ( │ │ │ │ +00004e70: 6465 6661 756c 7420 3330 6429 0a0a 3d69 default 30d)..=i │ │ │ │ +00004e80: 7465 6d20 423c 2d2d 6b65 6570 4669 7273 tem B<--keepFirs │ │ │ │ +00004e90: 744f 6659 6561 723e 0a0a 2020 2020 646f tOfYear>.. do │ │ │ │ +00004ea0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the │ │ │ │ +00004eb0: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of │ │ │ │ +00004ec0: 6120 7965 6172 0a20 2020 2066 6f72 6d61 a year. forma │ │ │ │ +00004ed0: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ │ +00004ee0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ │ +00004ef0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ │ +00004f00: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast │ │ │ │ +00004f10: 4f66 5965 6172 3e0a 0a20 2020 2064 6f20 OfYear>.. do │ │ │ │ +00004f20: 6e6f 7420 6465 6c65 7465 2074 6865 206c not delete the l │ │ │ │ +00004f30: 6173 7420 6261 636b 7570 206f 6620 6120 ast backup of a │ │ │ │ +00004f40: 7965 6172 0a20 2020 2066 6f72 6d61 7420 year. format │ │ │ │ +00004f50: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi │ │ │ │ +00004f60: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc │ │ │ │ +00004f70: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite │ │ │ │ +00004f80: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO │ │ │ │ +00004f90: 664d 6f6e 7468 3e0a 0a20 2020 2064 6f20 fMonth>.. do │ │ │ │ +00004fa0: 6e6f 7420 6465 6c65 7465 2074 6865 2066 not delete the f │ │ │ │ +00004fb0: 6972 7374 2062 6163 6b75 7020 6f66 2061 irst backup of a │ │ │ │ +00004fc0: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma │ │ │ │ +00004fd0: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ │ +00004fe0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ │ +00004ff0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ │ +00005000: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast │ │ │ │ +00005010: 4f66 4d6f 6e74 683e 0a0a 2020 2020 646f OfMonth>.. do │ │ │ │ +00005020: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the │ │ │ │ +00005030: 6c61 7374 2062 6163 6b75 7020 6f66 2061 last backup of a │ │ │ │ +00005040: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma │ │ │ │ +00005050: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ │ +00005060: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ │ +00005070: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ │ +00005080: 7465 6d20 423c 2d2d 6669 7273 7444 6179 tem B<--firstDay │ │ │ │ +00005090: 4f66 5765 656b 3e0a 0a20 2020 2064 6566 OfWeek>.. def │ │ │ │ +000050a0: 6175 6c74 3a20 2753 756e 272e 2054 6869 ault: 'Sun'. Thi │ │ │ │ +000050b0: 7320 7661 6c75 6520 6973 2075 7365 6420 s value is used │ │ │ │ +000050c0: 666f 7220 6361 6c63 756c 6174 696e 670a for calculating. │ │ │ │ +000050d0: 2020 2020 2d2d 6b65 6570 4669 7273 744f --keepFirstO │ │ │ │ +000050e0: 6657 6565 6b20 616e 6420 2d2d 6b65 6570 fWeek and --keep │ │ │ │ +000050f0: 4c61 7374 4f66 5765 656b 0a0a 3d69 7465 LastOfWeek..=ite │ │ │ │ +00005100: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO │ │ │ │ +00005110: 6657 6565 6b3e 0a0a 2020 2020 646f 206e fWeek>.. do n │ │ │ │ +00005120: 6f74 2064 656c 6574 6520 7468 6520 6669 ot delete the fi │ │ │ │ +00005130: 7273 7420 6261 636b 7570 206f 6620 6120 rst backup of a │ │ │ │ +00005140: 7765 656b 0a20 2020 2066 6f72 6d61 7420 week. format │ │ │ │ +00005150: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi │ │ │ │ +00005160: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc │ │ │ │ +00005170: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite │ │ │ │ +00005180: 6d20 423c 2d2d 6b65 6570 4c61 7374 4f66 m B<--keepLastOf │ │ │ │ +00005190: 5765 656b 3e0a 0a20 2020 2064 6f20 6e6f Week>.. do no │ │ │ │ +000051a0: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las │ │ │ │ +000051b0: 7420 6261 636b 7570 206f 6620 6120 7765 t backup of a we │ │ │ │ +000051c0: 656b 0a20 2020 2066 6f72 6d61 7420 6973 ek. format is │ │ │ │ +000051d0: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with │ │ │ │ +000051e0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi │ │ │ │ +000051f0: 7665 2066 6c61 6727 0a0a 3d69 7465 6d20 ve flag'..=item │ │ │ │ +00005200: 423c 2d2d 6b65 6570 4475 706c 6963 6174 B<--keepDuplicat │ │ │ │ +00005210: 653e 0a0a 2020 2020 6b65 6570 206d 756c e>.. keep mul │ │ │ │ +00005220: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of │ │ │ │ +00005230: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t │ │ │ │ +00005240: 696d 6550 6572 696f 640a 2020 2020 666f imePeriod. fo │ │ │ │ +00005250: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri │ │ │ │ +00005260: 6f64 2c20 2761 7263 6869 7665 2066 6c61 od, 'archive fla │ │ │ │ +00005270: 6727 2069 7320 6e6f 7420 706f 7373 6962 g' is not possib │ │ │ │ +00005280: 6c65 0a20 2020 2064 6566 6175 6c74 203d le. default = │ │ │ │ +00005290: 2037 640a 0a3d 6974 656d 2042 3c2d 2d6b 7d..=item B<--k │ │ │ │ +000052a0: 6565 704d 696e 4e75 6d62 6572 3e0a 0a20 eepMinNumber>.. │ │ │ │ +000052b0: 2020 204b 6565 7020 7468 6174 206d 696d Keep that mim │ │ │ │ +000052c0: 696e 756d 206f 6620 6261 636b 7570 732e inum of backups. │ │ │ │ +000052d0: 204d 756c 7469 706c 6520 6261 636b 7570 Multiple backup │ │ │ │ +000052e0: 7320 6f66 206f 6e65 0a20 2020 2064 6179 s of one. day │ │ │ │ +000052f0: 2061 7265 2063 6f75 6e74 6564 2061 7320 are counted as │ │ │ │ +00005300: 6f6e 6520 6261 636b 7570 2e20 4465 6661 one backup. Defa │ │ │ │ +00005310: 756c 7420 6973 2031 302e 0a0a 3d69 7465 ult is 10...=ite │ │ │ │ +00005320: 6d20 423c 2d2d 6b65 6570 4d61 784e 756d m B<--keepMaxNum │ │ │ │ +00005330: 6265 723e 0a0a 2020 2020 5472 7920 746f ber>.. Try to │ │ │ │ +00005340: 206b 6565 7020 6f6e 6c79 2074 6861 7420 keep only that │ │ │ │ +00005350: 6d61 7869 6d75 6d20 6f66 2062 6163 6b75 maximum of backu │ │ │ │ +00005360: 7073 2e20 4966 2079 6f75 2068 6176 6520 ps. If you have │ │ │ │ +00005370: 6d6f 7265 0a20 2020 2062 6163 6b75 7073 more. backups │ │ │ │ +00005380: 2c20 7468 6520 666f 6c6c 6f77 696e 6720 , the following │ │ │ │ +00005390: 7365 7175 656e 6365 206f 6620 6465 6c65 sequence of dele │ │ │ │ +000053a0: 7469 6e67 2077 696c 6c20 6861 7070 656e ting will happen │ │ │ │ +000053b0: 3a0a 2020 2020 2d20 6465 6c65 7465 2061 :. - delete a │ │ │ │ +000053c0: 6c6c 2064 7570 6c69 6361 7465 7320 6f66 ll duplicates of │ │ │ │ +000053d0: 2061 2064 6179 2c20 6265 6769 6e6e 696e a day, beginnin │ │ │ │ +000053e0: 6720 7769 7468 2074 6865 206f 6c64 0a20 g with the old. │ │ │ │ +000053f0: 2020 2020 206f 6e63 652c 2065 7863 6570 once, excep │ │ │ │ +00005400: 7420 7468 6520 6c61 7374 206f 6620 6576 t the last of ev │ │ │ │ +00005410: 6572 7920 6461 790a 2020 2020 2d20 6966 ery day. - if │ │ │ │ +00005420: 2074 6869 7320 6973 206e 6f74 2065 6e6f this is not eno │ │ │ │ +00005430: 7567 682c 2064 656c 6574 6520 7468 6520 ugh, delete the │ │ │ │ +00005440: 7265 7374 206f 6620 7468 6520 6261 636b rest of the back │ │ │ │ +00005450: 7570 730a 2020 2020 2020 6265 6769 6e6e ups. beginn │ │ │ │ +00005460: 696e 6720 7769 7468 2074 6865 206f 6c64 ing with the old │ │ │ │ +00005470: 6573 742c 2062 7574 202a 6e65 7665 722a est, but *never* │ │ │ │ +00005480: 2061 2062 6163 6b75 7020 7769 7468 0a20 a backup with. │ │ │ │ +00005490: 2020 2020 2074 6865 2027 6172 6368 6976 the 'archiv │ │ │ │ +000054a0: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l │ │ │ │ +000054b0: 6173 7420 6261 636b 7570 0a0a 3d69 7465 ast backup..=ite │ │ │ │ +000054c0: 6d20 423c 2d2d 6b65 6570 5265 6c61 7469 m B<--keepRelati │ │ │ │ +000054d0: 7665 3e2c 2042 3c2d 523e 0a0a 2020 2020 ve>, B<-R>.. │ │ │ │ +000054e0: 416c 7465 726e 6174 6976 6520 6465 6c65 Alternative dele │ │ │ │ +000054f0: 7469 6f6e 2073 6368 656d 652e 2049 6620 tion scheme. If │ │ │ │ +00005500: 796f 7520 7573 6520 7468 6973 206f 7074 you use this opt │ │ │ │ +00005510: 696f 6e2c 2061 6c6c 0a20 2020 206f 7468 ion, all. oth │ │ │ │ +00005520: 6572 206b 6565 7020 6f70 7469 6f6e 7320 er keep options │ │ │ │ +00005530: 6172 6520 6967 6e6f 7265 642e 2050 7265 are ignored. Pre │ │ │ │ +00005540: 7365 7276 6573 2062 6163 6b75 7073 2064 serves backups d │ │ │ │ +00005550: 6570 656e 6469 6e67 0a20 2020 206f 6e20 epending. on │ │ │ │ +00005560: 7468 6569 7220 2a72 656c 6174 6976 652a their *relative* │ │ │ │ +00005570: 2061 6765 2e20 4578 616d 706c 653a 0a20 age. Example:. │ │ │ │ +00005580: 2020 202d 5220 2731 6420 3764 2036 3164 -R '1d 7d 61d │ │ │ │ +00005590: 2039 3262 270a 2020 2020 7769 6c6c 2028 92b'. will ( │ │ │ │ +000055a0: 7472 7920 746f 2920 656e 7375 7265 2074 try to) ensure t │ │ │ │ +000055b0: 6861 7420 7468 6572 6520 6973 2061 6c77 hat there is alw │ │ │ │ +000055c0: 6179 730a 2020 2020 2d20 4f6e 6520 6261 ays. - One ba │ │ │ │ +000055d0: 636b 7570 2062 6574 7765 656e 2031 2064 ckup between 1 d │ │ │ │ +000055e0: 6179 2061 6e64 2037 2064 6179 7320 6f6c ay and 7 days ol │ │ │ │ +000055f0: 640a 2020 2020 2d20 4f6e 6520 6261 636b d. - One back │ │ │ │ +00005600: 7570 2062 6574 7765 656e 2035 2064 6179 up between 5 day │ │ │ │ +00005610: 7320 616e 6420 3220 6d6f 6e74 6873 206f s and 2 months o │ │ │ │ +00005620: 6c64 0a20 2020 202d 204f 6e65 2062 6163 ld. - One bac │ │ │ │ +00005630: 6b75 7020 6265 7477 6565 6e20 7e32 206d kup between ~2 m │ │ │ │ +00005640: 6f6e 7468 7320 616e 6420 7e33 206d 6f6e onths and ~3 mon │ │ │ │ +00005650: 7468 7320 6f6c 640a 2020 2020 4966 2074 ths old. If t │ │ │ │ +00005660: 6865 7265 2069 7320 6e6f 2062 6163 6b75 here is no backu │ │ │ │ +00005670: 7020 666f 7220 6120 7370 6563 6966 6965 p for a specifie │ │ │ │ +00005680: 6420 7469 6d65 7370 616e 0a20 2020 2028 d timespan. ( │ │ │ │ +00005690: 652e 672e 2062 6563 6175 7365 2074 6865 e.g. because the │ │ │ │ +000056a0: 206c 6173 7420 6261 636b 7570 2077 6173 last backup was │ │ │ │ +000056b0: 2064 6f6e 6520 6d6f 7265 2074 6861 6e20 done more than │ │ │ │ +000056c0: 3220 7765 656b 730a 2020 2020 6167 6f29 2 weeks. ago) │ │ │ │ +000056d0: 2074 6865 206e 6578 7420 6f6c 6465 7220 the next older │ │ │ │ +000056e0: 6261 636b 7570 2077 696c 6c20 6265 2075 backup will be u │ │ │ │ +000056f0: 7365 6420 666f 7220 7468 6973 2074 696d sed for this tim │ │ │ │ +00005700: 6573 7061 6e2e 0a0a 3d69 7465 6d20 423c espan...=item B< │ │ │ │ +00005710: 2d2d 7072 6f67 7265 7373 5265 706f 7274 --progressReport │ │ │ │ +00005720: 3e2c 2042 3c2d 503e 0a0a 2020 2020 7072 >, B<-P>.. pr │ │ │ │ +00005730: 696e 7420 7072 6f67 7265 7373 2072 6570 int progress rep │ │ │ │ +00005740: 6f72 7420 6166 7465 7220 6561 6368 2027 ort after each ' │ │ │ │ +00005750: 6e75 6d62 6572 2720 6669 6c65 730a 0a3d number' files..= │ │ │ │ +00005760: 6974 656d 2042 3c2d 2d70 7269 6e74 4465 item B<--printDe │ │ │ │ +00005770: 7074 683e 2c20 423c 2d44 3e0a 0a20 2020 pth>, B<-D>.. │ │ │ │ +00005780: 2070 7269 6e74 2064 6570 7468 206f 6620 print depth of │ │ │ │ +00005790: 6163 7475 616c 2072 6561 6420 6469 7265 actual read dire │ │ │ │ +000057a0: 6374 6f72 7920 6475 7269 6e67 2062 6163 ctory during bac │ │ │ │ +000057b0: 6b75 700a 0a3d 6974 656d 2042 3c2d 2d69 kup..=item B<--i │ │ │ │ +000057c0: 676e 6f72 6552 6561 6445 7272 6f72 3e0a gnoreReadError>. │ │ │ │ +000057d0: 0a20 2020 2069 676e 6f72 6520 7265 6164 . ignore read │ │ │ │ +000057e0: 2065 7272 6f72 7320 696e 2073 6f75 7263 errors in sourc │ │ │ │ +000057f0: 6520 6469 7265 6374 6f72 793b 206e 6f74 e directory; not │ │ │ │ +00005800: 2072 6561 6461 626c 650a 2020 2020 6469 readable. di │ │ │ │ +00005810: 7265 6374 6f72 6965 7320 646f 206e 6f74 rectories do not │ │ │ │ +00005820: 2063 6175 7365 2073 746f 7265 4261 636b cause storeBack │ │ │ │ +00005830: 7570 2e70 6c20 746f 2073 746f 7020 7072 up.pl to stop pr │ │ │ │ +00005840: 6f63 6573 7369 6e67 0a0a 3d69 7465 6d20 ocessing..=item │ │ │ │ +00005850: 423c 2d2d 7375 7070 7265 7373 5761 726e B<--suppressWarn │ │ │ │ +00005860: 696e 673e 0a0a 2020 2020 7375 7070 7265 ing>.. suppre │ │ │ │ +00005870: 7373 2028 756e 7761 6e74 6564 2920 7761 ss (unwanted) wa │ │ │ │ +00005880: 726e 696e 6773 2069 6e20 7468 6520 6c6f rnings in the lo │ │ │ │ +00005890: 6720 6669 6c65 733b 0a20 2020 2074 6f20 g files;. to │ │ │ │ +000058a0: 7375 7070 7265 7373 2077 6172 6e69 6e67 suppress warning │ │ │ │ +000058b0: 732c 2074 6865 2066 6f6c 6c6f 7769 6e67 s, the following │ │ │ │ +000058c0: 206b 6579 7320 6361 6e20 6265 2075 7365 keys can be use │ │ │ │ +000058d0: 643a 0a20 2020 2020 2065 7863 4469 7220 d:. excDir │ │ │ │ +000058e0: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the │ │ │ │ +000058f0: 7761 726e 696e 6720 7468 6174 2065 7863 warning that exc │ │ │ │ +00005900: 6c75 6465 6420 6469 7265 6374 6f72 6965 luded directorie │ │ │ │ +00005910: 730a 2020 2020 2020 2020 2020 2020 2064 s. d │ │ │ │ +00005920: 6f20 6e6f 7420 6578 6973 7429 0a20 2020 o not exist). │ │ │ │ +00005930: 2020 2066 696c 6543 6861 6e67 6520 2873 fileChange (s │ │ │ │ +00005940: 7570 7072 6573 7365 7320 7468 6520 7761 uppresses the wa │ │ │ │ +00005950: 726e 696e 6720 7468 6174 2061 2066 696c rning that a fil │ │ │ │ +00005960: 6520 6861 7320 6368 616e 6765 640a 2020 e has changed. │ │ │ │ +00005970: 2020 2020 2020 2020 2020 2020 2020 2064 d │ │ │ │ +00005980: 7572 696e 6720 7468 6520 6261 636b 7570 uring the backup │ │ │ │ +00005990: 290a 2020 2020 2020 6372 5365 7269 6573 ). crSeries │ │ │ │ +000059a0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ │ +000059b0: 2077 6172 6e69 6e67 2074 6861 7420 7374 warning that st │ │ │ │ +000059c0: 6f72 6542 6163 6b75 7020 6861 6420 746f oreBackup had to │ │ │ │ +000059d0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +000059e0: 6372 6561 7465 2074 6865 2027 6465 6661 create the 'defa │ │ │ │ +000059f0: 756c 7427 2073 6572 6965 7329 0a20 2020 ult' series). │ │ │ │ +00005a00: 2020 2068 6173 6843 6f6c 6c69 7369 6f6e hashCollision │ │ │ │ +00005a10: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ │ +00005a20: 2077 6172 6e69 6e67 2069 6620 6120 706f warning if a po │ │ │ │ +00005a30: 7373 6962 6c65 0a20 2020 2020 2020 2020 ssible. │ │ │ │ +00005a40: 2020 2020 2020 2020 2020 2068 6173 6820 hash │ │ │ │ +00005a50: 636f 6c6c 6973 696f 6e20 6973 2064 6574 collision is det │ │ │ │ +00005a60: 6563 7465 6429 0a20 2020 2020 6669 6c65 ected). file │ │ │ │ +00005a70: 4e61 6d65 5769 7468 4c69 6e65 4665 6564 NameWithLineFeed │ │ │ │ +00005a80: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ │ +00005a90: 2077 6172 6e69 6e67 2069 6620 6120 6669 warning if a fi │ │ │ │ +00005aa0: 6c65 6e61 6d65 0a20 2020 2020 2020 2020 lename. │ │ │ │ +00005ab0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00005ac0: 2063 6f6e 7461 696e 7320 6120 6c69 6e65 contains a line │ │ │ │ +00005ad0: 2066 6565 6429 0a20 2020 2054 6869 7320 feed). This │ │ │ │ +00005ae0: 6f70 7469 6f6e 2063 616e 2062 6520 7265 option can be re │ │ │ │ +00005af0: 7065 6174 6564 206d 756c 7469 706c 6520 peated multiple │ │ │ │ +00005b00: 7469 6d65 7320 6f6e 2074 6865 2063 6f6d times on the com │ │ │ │ +00005b10: 6d61 6e64 206c 696e 652e 0a0a 3d69 7465 mand line...=ite │ │ │ │ +00005b20: 6d20 423c 2d2d 6c69 6e6b 546f 5265 6365 m B<--linkToRece │ │ │ │ +00005b30: 6e74 3e0a 0a20 2020 2061 6674 6572 2061 nt>.. after a │ │ │ │ +00005b40: 2073 7563 6365 7373 6675 6c20 6261 636b successful back │ │ │ │ +00005b50: 7570 2c20 7365 7420 6120 7379 6d62 6f6c up, set a symbol │ │ │ │ +00005b60: 6963 206c 696e 6b20 746f 0a20 2020 2074 ic link to. t │ │ │ │ +00005b70: 6861 7420 6261 636b 7570 2061 6e64 2064 hat backup and d │ │ │ │ +00005b80: 656c 6574 6520 6578 6973 7469 6e67 206f elete existing o │ │ │ │ +00005b90: 6c64 6572 206c 696e 6b73 2077 6974 6820 lder links with │ │ │ │ +00005ba0: 7468 650a 2020 2020 7361 6d65 206e 616d the. same nam │ │ │ │ +00005bb0: 650a 0a3d 6974 656d 2042 3c2d 2d6c 6f67 e..=item B<--log │ │ │ │ +00005bc0: 4669 6c65 3e2c 2042 3c2d 6c3e 0a0a 2020 File>, B<-l>.. │ │ │ │ +00005bd0: 2020 6c6f 6720 6669 6c65 2028 6465 6661 log file (defa │ │ │ │ +00005be0: 756c 7420 6973 2053 5444 4f55 5429 0a0a ult is STDOUT).. │ │ │ │ +00005bf0: 3d69 7465 6d20 423c 2d2d 706c 7573 4c6f =item B<--plusLo │ │ │ │ +00005c00: 6753 7464 6f75 743e 0a0a 2020 2020 6966 gStdout>.. if │ │ │ │ +00005c10: 2079 6f75 2073 7065 6369 6679 2061 206c you specify a l │ │ │ │ +00005c20: 6f67 2066 696c 6520 7769 7468 202d 2d6c og file with --l │ │ │ │ +00005c30: 6f67 4669 6c65 2079 6f75 2063 616e 0a20 ogFile you can. │ │ │ │ +00005c40: 2020 2061 6464 6974 696f 6e61 6c6c 7920 additionally │ │ │ │ +00005c50: 7072 696e 7420 7468 6520 6f75 7470 7574 print the output │ │ │ │ +00005c60: 2074 6f20 5354 444f 5554 2077 6974 6820 to STDOUT with │ │ │ │ +00005c70: 7468 6973 2066 6c61 670a 0a3d 6974 656d this flag..=item │ │ │ │ +00005c80: 2042 3c2d 2d73 7570 7072 6573 7354 696d B<--suppressTim │ │ │ │ +00005c90: 653e 0a0a 2020 2020 7375 7070 7265 7373 e>.. suppress │ │ │ │ +00005ca0: 206f 7574 7075 7420 6f66 2074 696d 6520 output of time │ │ │ │ +00005cb0: 696e 206c 6f67 6669 6c65 0a0a 3d69 7465 in logfile..=ite │ │ │ │ +00005cc0: 6d20 423c 2d2d 6d61 7846 696c 656c 656e m B<--maxFilelen │ │ │ │ +00005cd0: 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 6d61 >, B<-m>.. ma │ │ │ │ +00005ce0: 7869 6d61 6c20 6c65 6e67 7468 206f 6620 ximal length of │ │ │ │ +00005cf0: 6c6f 6720 6669 6c65 2c20 6465 6661 756c log file, defaul │ │ │ │ +00005d00: 7420 3d20 3165 360a 0a3d 6974 656d 2042 t = 1e6..=item B │ │ │ │ +00005d10: 3c2d 2d6e 6f4f 664f 6c64 4669 6c65 733e <--noOfOldFiles> │ │ │ │ +00005d20: 2c20 423c 2d6e 3e0a 0a20 2020 206e 756d , B<-n>.. num │ │ │ │ +00005d30: 6265 7220 6f66 206f 6c64 206c 6f67 2066 ber of old log f │ │ │ │ +00005d40: 696c 6573 2c20 6465 6661 756c 7420 3d20 iles, default = │ │ │ │ +00005d50: 350a 0a3d 6974 656d 2042 3c2d 2d73 6176 5..=item B<--sav │ │ │ │ +00005d60: 654c 6f67 733e 0a0a 2020 2020 7361 7665 eLogs>.. save │ │ │ │ +00005d70: 206c 6f67 2066 696c 6573 2077 6974 6820 log files with │ │ │ │ +00005d80: 6461 7465 2061 6e64 2074 696d 6520 696e date and time in │ │ │ │ +00005d90: 7374 6561 6420 6f66 2064 656c 6574 696e stead of deletin │ │ │ │ +00005da0: 6720 7468 650a 2020 2020 6f6c 6420 2877 g the. old (w │ │ │ │ +00005db0: 6974 6820 5b2d 6e6f 4f6c 6446 696c 6573 ith [-noOldFiles │ │ │ │ +00005dc0: 5d29 0a0a 3d69 7465 6d20 423c 2d2d 636f ])..=item B<--co │ │ │ │ +00005dd0: 6d70 7265 7373 5769 7468 3e0a 0a20 2020 mpressWith>.. │ │ │ │ +00005de0: 2063 6f6d 7072 6573 7320 7361 7665 6420 compress saved │ │ │ │ +00005df0: 6c6f 6720 6669 6c65 7320 2865 2e67 2e20 log files (e.g. │ │ │ │ +00005e00: 7769 7468 2027 677a 6970 202d 3927 290a with 'gzip -9'). │ │ │ │ +00005e10: 2020 2020 6465 6661 756c 7420 6973 2027 default is ' │ │ │ │ +00005e20: 627a 6970 3227 0a20 2020 2054 6869 7320 bzip2'. This │ │ │ │ +00005e30: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par │ │ │ │ +00005e40: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line │ │ │ │ +00005e50: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura │ │ │ │ +00005e60: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an │ │ │ │ +00005e70: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t │ │ │ │ +00005e80: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i │ │ │ │ +00005e90: 7465 6d20 423c 2d2d 6c6f 6749 6e42 6163 tem B<--logInBac │ │ │ │ +00005ea0: 6b75 7044 6972 3e0a 0a20 2020 2077 7269 kupDir>.. wri │ │ │ │ +00005eb0: 7465 206c 6f67 2066 696c 6520 2861 6c73 te log file (als │ │ │ │ +00005ec0: 6f29 2069 6e20 7468 6520 6261 636b 7570 o) in the backup │ │ │ │ +00005ed0: 2064 6972 6563 746f 7279 0a20 2020 2042 directory. B │ │ │ │ +00005ee0: 6520 6177 6172 6520 7468 6174 2074 6869 e aware that thi │ │ │ │ +00005ef0: 7320 6c6f 6720 646f 6573 206e 6f74 2063 s log does not c │ │ │ │ +00005f00: 6f6e 7461 696e 2061 6c6c 2065 7272 6f72 ontain all error │ │ │ │ +00005f10: 0a20 2020 206d 6573 7361 6765 7320 6f66 . messages of │ │ │ │ +00005f20: 2074 6865 206f 6e65 2073 7065 6369 6669 the one specifi │ │ │ │ +00005f30: 6564 2077 6974 6820 2d2d 6c6f 6746 696c ed with --logFil │ │ │ │ +00005f40: 6521 0a0a 3d69 7465 6d20 423c 2d2d 636f e!..=item B<--co │ │ │ │ +00005f50: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku │ │ │ │ +00005f60: 7044 6972 3e0a 0a20 2020 2063 6f6d 7072 pDir>.. compr │ │ │ │ +00005f70: 6573 7320 7468 6520 6c6f 6720 6669 6c65 ess the log file │ │ │ │ +00005f80: 2069 6e20 7468 6520 6261 636b 7570 2064 in the backup d │ │ │ │ +00005f90: 6972 6563 746f 7279 0a0a 3d69 7465 6d20 irectory..=item │ │ │ │ +00005fa0: 423c 2d2d 6c6f 6749 6e42 6163 6b75 7044 B<--logInBackupD │ │ │ │ +00005fb0: 6972 4669 6c65 4e61 6d65 3e0a 0a20 2020 irFileName>.. │ │ │ │ +00005fc0: 2066 696c 656e 616d 6520 746f 2075 7365 filename to use │ │ │ │ +00005fd0: 2066 6f72 2077 7269 7469 6e67 2074 6865 for writing the │ │ │ │ +00005fe0: 2061 626f 7665 206c 6f67 2066 696c 652c above log file, │ │ │ │ +00005ff0: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is │ │ │ │ +00006000: 2e73 746f 7265 4261 636b 7570 2e6c 6f67 .storeBackup.log │ │ │ │ +00006010: 0a0a 3d69 7465 6d20 423c 6f74 6865 7242 ..=item B.. │ │ │ │ +00006030: 2020 4c69 7374 206f 6620 6f74 6865 7220 List of other │ │ │ │ +00006040: 6261 636b 7570 2073 6572 6965 7320 746f backup series to │ │ │ │ +00006050: 2063 6f6e 7369 6465 7220 666f 720a 2020 consider for. │ │ │ │ +00006060: 2020 6861 7264 206c 696e 6b69 6e67 2e20 hard linking. │ │ │ │ +00006070: 5265 6c61 7469 7665 2070 6174 6820 6672 Relative path fr │ │ │ │ +00006080: 6f6d 2062 6163 6b75 7044 6972 210a 2020 om backupDir!. │ │ │ │ +00006090: 2020 466f 726d 6174 2028 6578 616d 706c Format (exampl │ │ │ │ +000060a0: 6573 293a 0a20 2020 2062 6163 6b75 7053 es):. backupS │ │ │ │ +000060b0: 6572 6965 732f 3230 3032 2e30 382e 3239 eries/2002.08.29 │ │ │ │ +000060c0: 5f30 382e 3235 2e32 3820 2d3e 2063 6f6e _08.25.28 -> con │ │ │ │ +000060d0: 7369 6465 7220 7468 6973 2062 6163 6b75 sider this backu │ │ │ │ +000060e0: 700a 2020 2020 6f72 0a20 2020 2030 3a62 p. or. 0:b │ │ │ │ +000060f0: 6163 6b75 7053 6572 6965 7320 2d3e 6c61 ackupSeries ->la │ │ │ │ +00006100: 7374 2028 796f 756e 6765 7374 2920 696e st (youngest) in │ │ │ │ +00006110: 203c 6261 636b 7570 4469 723e 2f62 6163 /bac │ │ │ │ +00006120: 6b75 7053 6572 6965 730a 2020 2020 313a kupSeries. 1: │ │ │ │ +00006130: 6261 636b 7570 5365 7269 6573 202d 3e6f backupSeries ->o │ │ │ │ +00006140: 6e65 2062 6566 6f72 6520 6c61 7374 2069 ne before last i │ │ │ │ +00006150: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba │ │ │ │ +00006160: 636b 7570 5365 7269 6573 0a20 2020 206e ckupSeries. n │ │ │ │ +00006170: 3a62 6163 6b75 7053 6572 6965 7320 2d3e :backupSeries -> │ │ │ │ +00006180: 0a20 2020 2020 206e 2774 6820 6265 666f . n'th befo │ │ │ │ +00006190: 7265 206c 6173 7420 696e 203c 6261 636b re last in /backupSer │ │ │ │ +000061b0: 6965 730a 2020 2020 332d 353a 6261 636b ies. 3-5:back │ │ │ │ +000061c0: 7570 5365 7269 6573 202d 3e0a 2020 2020 upSeries ->. │ │ │ │ +000061d0: 2020 3372 642c 2034 7468 2061 6e64 2035 3rd, 4th and 5 │ │ │ │ +000061e0: 7468 2069 6e20 3c62 6163 6b75 7044 6972 th in /backupSeries. │ │ │ │ +00006200: 2020 2061 6c6c 3a62 6163 6b75 7053 6572 all:backupSer │ │ │ │ +00006210: 6965 7320 2d3e 2061 6c6c 2069 6e20 3c62 ies -> all in /backup │ │ │ │ +00006230: 5365 7269 6573 0a20 2020 2064 6566 6175 Series. defau │ │ │ │ +00006240: 6c74 2069 7320 746f 206c 696e 6b20 746f lt is to link to │ │ │ │ +00006250: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup │ │ │ │ +00006260: 2069 6e20 6576 6572 7920 7365 7269 6573 in every series │ │ │ │ +00006270: 0a0a 3d62 6163 6b0a 0a3d 6865 6164 3120 ..=back..=head1 │ │ │ │ +00006280: 434f 5059 5249 4748 540a 0a43 6f70 7972 COPYRIGHT..Copyr │ │ │ │ +00006290: 6967 6874 2028 6329 2032 3030 302c 3230 ight (c) 2000,20 │ │ │ │ +000062a0: 3034 2c32 3030 382d 3230 3039 2c32 3031 04,2008-2009,201 │ │ │ │ +000062b0: 3220 6279 2048 6569 6e7a 2d4a 6f73 6566 2 by Heinz-Josef │ │ │ │ +000062c0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ │ │ │ │ +000062d0: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u │ │ │ │ +000062e0: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen │ │ │ │ +000062f0: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00006300: 6e73 6520 6f72 2061 6e79 206c 6174 6572 nse or any later │ │ │ │ +00006310: 2076 6572 7369 6f6e 2e0a 0a3d 6375 740a version...=cut. │ │ │ │ +00006320: 0a23 2323 2323 2323 2323 2323 2069 6e73 .########### ins │ │ │ │ +00006330: 6572 7420 6162 6f76 650a 2309 2020 2020 ert above.#. │ │ │ │ +00006340: 2020 5b2d 2d73 6176 6552 414d 5d20 5b2d [--saveRAM] [- │ │ │ │ +00006350: 6320 636f 6d70 7265 7373 5d20 5b2d 7520 c compress] [-u │ │ │ │ +00006360: 756e 636f 6d70 7265 7373 5d20 5b2d 7020 uncompress] [-p │ │ │ │ +00006370: 706f 7374 6669 785d 0a23 0920 2020 2020 postfix].#. │ │ │ │ +00006380: 205b 2d2d 636f 6d70 7265 7373 3020 636f [--compress0 co │ │ │ │ +00006390: 6d70 7265 7373 205b 2d2d 756e 636f 6d70 mpress [--uncomp │ │ │ │ +000063a0: 7265 7373 3020 756e 636f 6d70 7265 7373 ress0 uncompress │ │ │ │ +000063b0: 5d0a 2309 2020 2020 2020 205b 2d2d 706f ].#. [--po │ │ │ │ +000063c0: 7374 6669 7830 2070 6f73 7466 6978 5d20 stfix0 postfix] │ │ │ │ +000063d0: 5b2d 2d63 6f6d 7072 6573 7352 756c 6530 [--compressRule0 │ │ │ │ +000063e0: 5d5d 0a23 0920 2020 2020 205b 2d2d 636f ]].#. [--co │ │ │ │ +000063f0: 6d70 7265 7373 3120 636f 6d70 7265 7373 mpress1 compress │ │ │ │ +00006400: 205b 2d2d 756e 636f 6d70 7265 7373 3120 [--uncompress1 │ │ │ │ +00006410: 756e 636f 6d70 7265 7373 5d0a 2309 2020 uncompress].#. │ │ │ │ +00006420: 2020 2020 205b 2d2d 706f 7374 6669 7831 [--postfix1 │ │ │ │ +00006430: 2070 6f73 7466 6978 5d20 5b2d 2d63 6f6d postfix] [--com │ │ │ │ +00006440: 7072 6573 7352 756c 6531 5d5d 0a23 0920 pressRule1]].#. │ │ │ │ +00006450: 2020 2020 205b 2d2d 636f 6d70 7265 7373 [--compress │ │ │ │ +00006460: 3220 636f 6d70 7265 7373 205b 2d2d 756e 2 compress [--un │ │ │ │ +00006470: 636f 6d70 7265 7373 3220 756e 636f 6d70 compress2 uncomp │ │ │ │ +00006480: 7265 7373 5d0a 2309 2020 2020 2020 205b ress].#. [ │ │ │ │ +00006490: 2d2d 706f 7374 6669 7832 2070 6f73 7466 --postfix2 postf │ │ │ │ +000064a0: 6978 5d20 5b2d 2d63 6f6d 7072 6573 7352 ix] [--compressR │ │ │ │ +000064b0: 756c 6532 5d5d 0a23 0920 2020 2020 205b ule2]].#. [ │ │ │ │ +000064c0: 2d2d 636f 6d70 7265 7373 3320 636f 6d70 --compress3 comp │ │ │ │ +000064d0: 7265 7373 205b 2d2d 756e 636f 6d70 7265 ress [--uncompre │ │ │ │ +000064e0: 7373 3320 756e 636f 6d70 7265 7373 5d0a ss3 uncompress]. │ │ │ │ +000064f0: 2309 2020 2020 2020 205b 2d2d 706f 7374 #. [--post │ │ │ │ +00006500: 6669 7833 2070 6f73 7466 6978 5d20 5b2d fix3 postfix] [- │ │ │ │ +00006510: 2d63 6f6d 7072 6573 7352 756c 6533 5d5d -compressRule3]] │ │ │ │ +00006520: 0a23 0920 2020 2020 205b 2d2d 636f 6d70 .#. [--comp │ │ │ │ +00006530: 7265 7373 3420 636f 6d70 7265 7373 205b ress4 compress [ │ │ │ │ +00006540: 2d2d 756e 636f 6d70 7265 7373 3420 756e --uncompress4 un │ │ │ │ +00006550: 636f 6d70 7265 7373 5d0a 2309 2020 2020 compress].#. │ │ │ │ +00006560: 2020 205b 2d2d 706f 7374 6669 7834 2070 [--postfix4 p │ │ │ │ +00006570: 6f73 7466 6978 5d20 5b2d 2d63 6f6d 7072 ostfix] [--compr │ │ │ │ +00006580: 6573 7352 756c 6534 5d5d 0a23 0920 2020 essRule4]].#. │ │ │ │ +00006590: 2020 205b 2d2d 6e6f 436f 6d70 7265 7373 [--noCompress │ │ │ │ +000065a0: 206e 756d 6265 725d 205b 2d2d 7175 6575 number] [--queu │ │ │ │ +000065b0: 6543 6f6d 7072 6573 7320 6e75 6d62 6572 eCompress number │ │ │ │ +000065c0: 5d0a 0a23 3d69 7465 6d20 423c 2d2d 706f ]..#=item B<--po │ │ │ │ +000065d0: 7374 6669 783e 2c20 423c 2d70 3e0a 230a stfix>, B<-p>.#. │ │ │ │ +000065e0: 2320 2020 2070 6f73 7466 6978 2074 6f20 # postfix to │ │ │ │ +000065f0: 6164 6420 6166 7465 7220 636f 6d70 7265 add after compre │ │ │ │ +00006600: 7373 696f 6e2c 2064 6566 6175 6c74 2069 ssion, default i │ │ │ │ +00006610: 7320 3c2e 627a 323e 0a23 0a23 3d69 7465 s <.bz2>.#.#=ite │ │ │ │ +00006620: 6d20 423c 2d2d 636f 6d70 7265 7373 303e m B<--compress0> │ │ │ │ +00006630: 0a23 0a23 2020 2020 2020 636f 6d70 7265 .#.# compre │ │ │ │ +00006640: 7373 2063 6f6d 6d61 6e64 2028 7769 7468 ss command (with │ │ │ │ +00006650: 206f 7074 696f 6e73 290a 2320 2020 2020 options).# │ │ │ │ +00006660: 2073 6565 202d 2d63 6f6d 7072 6573 7352 see --compressR │ │ │ │ +00006670: 756c 6530 2062 656c 6f77 0a23 0a23 3d69 ule0 below.#.#=i │ │ │ │ +00006680: 7465 6d20 423c 2d2d 756e 636f 6d70 7265 tem B<--uncompre │ │ │ │ +00006690: 7373 303e 0a23 0a23 2020 2020 2020 756e ss0>.#.# un │ │ │ │ +000066a0: 636f 6d70 7265 7373 2063 6f6d 6d61 6e64 compress command │ │ │ │ +000066b0: 2028 7769 7468 206f 7074 696f 6e73 292c (with options), │ │ │ │ +000066c0: 206d 7573 7420 6669 7420 746f 202d 2d63 must fit to --c │ │ │ │ +000066d0: 6f6d 7072 6573 7330 0a23 2020 2020 2020 ompress0.# │ │ │ │ +000066e0: 7365 6520 2d2d 636f 6d70 7265 7373 5275 see --compressRu │ │ │ │ +000066f0: 6c65 3020 6265 6c6f 770a 230a 233d 6974 le0 below.#.#=it │ │ │ │ +00006700: 656d 2042 3c2d 2d70 6f73 7466 6978 303e em B<--postfix0> │ │ │ │ +00006710: 0a23 0a23 2020 2020 2020 706f 7374 6669 .#.# postfi │ │ │ │ +00006720: 7820 666f 7220 636f 6d6d 616e 6420 7175 x for command qu │ │ │ │ +00006730: 6f74 6564 2061 7420 2d2d 636f 6d70 7265 oted at --compre │ │ │ │ +00006740: 7373 300a 2320 2020 2020 2073 6565 202d ss0.# see - │ │ │ │ +00006750: 2d63 6f6d 7072 6573 7352 756c 6530 2062 -compressRule0 b │ │ │ │ +00006760: 656c 6f77 0a23 0a23 3d69 7465 6d20 423c elow.#.#=item B< │ │ │ │ +00006770: 2d2d 636f 6d70 7265 7373 5275 6c65 303e --compressRule0> │ │ │ │ +00006780: 0a23 0a23 2020 2020 2020 5275 6c65 2066 .#.# Rule f │ │ │ │ +00006790: 6f72 2063 616c 6c69 6e67 2061 6e20 6578 or calling an ex │ │ │ │ +000067a0: 7465 726e 616c 2070 726f 6772 616d 206f ternal program o │ │ │ │ +000067b0: 6e20 6561 6368 2066 696c 652e 0a23 2020 n each file..# │ │ │ │ +000067c0: 2020 2020 5468 6973 2063 616e 2062 6520 This can be │ │ │ │ +000067d0: 646f 6e65 2077 6974 6820 6469 6666 6572 done with differ │ │ │ │ +000067e0: 656e 7420 636f 6d70 7265 7373 696f 6e20 ent compression │ │ │ │ +000067f0: 7072 6f67 7261 6d73 206f 720a 2320 2020 programs or.# │ │ │ │ +00006800: 2020 2065 672e 2077 6974 6820 656e 6372 eg. with encr │ │ │ │ +00006810: 7970 7469 6f6e 2070 726f 6772 616d 732e yption programs. │ │ │ │ +00006820: 0a23 2020 2020 2020 5468 6520 7275 6c65 .# The rule │ │ │ │ +00006830: 7320 6172 6520 6f70 6572 6174 6564 2066 s are operated f │ │ │ │ +00006840: 726f 6d20 7275 6c65 2030 2074 6f20 7275 rom rule 0 to ru │ │ │ │ +00006850: 6c65 2034 202d 2069 6620 6e6f 6e65 0a23 le 4 - if none.# │ │ │ │ +00006860: 2020 2020 2020 6f66 2074 6865 7365 2072 of these r │ │ │ │ +00006870: 756c 6573 2066 6974 732c 202d 2d63 6f6d ules fits, --com │ │ │ │ +00006880: 7072 6573 7320 7768 6963 6820 6465 7065 press which depe │ │ │ │ +00006890: 6e64 7320 6f6e 0a23 2020 2020 2020 2d2d nds on.# -- │ │ │ │ +000068a0: 6578 6365 7074 5375 6666 6978 2c20 2d2d exceptSuffix, -- │ │ │ │ +000068b0: 6164 6445 7863 6570 7453 7566 6669 7820 addExceptSuffix │ │ │ │ +000068c0: 6f72 2063 6f6d 7072 5275 6c65 2069 7320 or comprRule is │ │ │ │ +000068d0: 7573 6564 2e0a 230a 233d 6974 656d 2042 used..#.#=item B │ │ │ │ +000068e0: 3c2d 2d63 6f6d 7072 6573 7331 3e0a 230a <--compress1>.#. │ │ │ │ +000068f0: 233d 6974 656d 2042 3c2d 2d75 6e63 6f6d #=item B<--uncom │ │ │ │ +00006900: 7072 6573 7331 3e0a 230a 233d 6974 656d press1>.#.#=item │ │ │ │ +00006910: 2042 3c2d 2d70 6f73 7466 6978 313e 0a23 B<--postfix1>.# │ │ │ │ +00006920: 0a23 3d69 7465 6d20 423c 2d2d 636f 6d70 .#=item B<--comp │ │ │ │ +00006930: 7265 7373 5275 6c65 313e 0a23 0a23 3d69 ressRule1>.#.#=i │ │ │ │ +00006940: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress │ │ │ │ +00006950: 323e 0a23 0a23 3d69 7465 6d20 423c 2d2d 2>.#.#=item B<-- │ │ │ │ +00006960: 756e 636f 6d70 7265 7373 323e 0a23 0a23 uncompress2>.#.# │ │ │ │ +00006970: 3d69 7465 6d20 423c 2d2d 706f 7374 6669 =item B<--postfi │ │ │ │ +00006980: 7832 3e0a 230a 233d 6974 656d 2042 3c2d x2>.#.#=item B<- │ │ │ │ +00006990: 2d63 6f6d 7072 6573 7352 756c 6532 3e0a -compressRule2>. │ │ │ │ +000069a0: 230a 233d 6974 656d 2042 3c2d 2d63 6f6d #.#=item B<--com │ │ │ │ +000069b0: 7072 6573 7333 3e0a 230a 233d 6974 656d press3>.#.#=item │ │ │ │ +000069c0: 2042 3c2d 2d75 6e63 6f6d 7072 6573 7333 B<--uncompress3 │ │ │ │ +000069d0: 3e0a 230a 233d 6974 656d 2042 3c2d 2d70 >.#.#=item B<--p │ │ │ │ +000069e0: 6f73 7466 6978 333e 0a23 0a23 3d69 7465 ostfix3>.#.#=ite │ │ │ │ +000069f0: 6d20 423c 2d2d 636f 6d70 7265 7373 5275 m B<--compressRu │ │ │ │ +00006a00: 6c65 333e 0a23 0a23 3d69 7465 6d20 423c le3>.#.#=item B< │ │ │ │ +00006a10: 2d2d 636f 6d70 7265 7373 343e 0a23 0a23 --compress4>.#.# │ │ │ │ +00006a20: 3d69 7465 6d20 423c 2d2d 756e 636f 6d70 =item B<--uncomp │ │ │ │ +00006a30: 7265 7373 343e 0a23 0a23 3d69 7465 6d20 ress4>.#.#=item │ │ │ │ +00006a40: 423c 2d2d 706f 7374 6669 7834 3e0a 230a B<--postfix4>.#. │ │ │ │ +00006a50: 233d 6974 656d 2042 3c2d 2d63 6f6d 7072 #=item B<--compr │ │ │ │ +00006a60: 6573 7352 756c 6534 3e0a 230a 233d 6974 essRule4>.#.#=it │ │ │ │ +00006a70: 656d 2042 3c2d 2d65 7863 6570 7453 7566 em B<--exceptSuf │ │ │ │ +00006a80: 6669 783e 0a0a 2323 2323 2323 2323 2323 fix>..########## │ │ │ │ +00006a90: 230a 0a6d 7920 2448 656c 7020 3d20 3c3c #..my $Help = << │ │ │ │ +00006aa0: 454f 483b 0a74 7279 2027 2470 726f 6720 EOH;.try '$prog │ │ │ │ +00006ab0: 2d2d 6865 6c70 2720 746f 2067 6574 2061 --help' to get a │ │ │ │ +00006ac0: 2064 6573 6372 6970 7469 6f6e 206f 6620 description of │ │ │ │ +00006ad0: 7468 6520 6f70 7469 6f6e 732e 0a45 4f48 the options..EOH │ │ │ │ +00006ae0: 0a20 2020 203b 0a23 2027 0a0a 6d79 2024 . ;.# '..my $ │ │ │ │ +00006af0: 4675 6c6c 4865 6c70 203d 206a 6f69 6e28 FullHelp = join( │ │ │ │ +00006b00: 2727 2c20 6772 6570 2821 2f5e 5c73 2a24 '', grep(!/^\s*$ │ │ │ │ +00006b10: 2f2c 2060 706f 6432 7465 7874 2024 3060 /, `pod2text $0` │ │ │ │ +00006b20: 2929 3b0a 2446 756c 6c48 656c 7020 3d20 ));.$FullHelp = │ │ │ │ +00006b30: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 "cannot find pod │ │ │ │ +00006b40: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum │ │ │ │ +00006b50: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det │ │ │ │ +00006b60: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\n". unle │ │ │ │ +00006b70: 7373 2024 4865 6c70 3b0a 0a0a 6d79 2024 ss $Help;...my $ │ │ │ │ +00006b80: 626c 6f63 6b52 756c 6573 4865 6c70 203d blockRulesHelp = │ │ │ │ +00006b90: 203c 3c45 4f48 3b0a 2320 4669 6c65 7320 < &::SIZE("3M") │ │ │ │ +00006cb0: 2720 616e 6420 275c 2475 6964 2065 7120 ' and '\$uid eq │ │ │ │ +00006cc0: 2268 6a63 2227 2029 206f 720a 2320 2020 "hjc"' ) or.# │ │ │ │ +00006cd0: 2028 2027 5c24 6d74 696d 6520 3e20 263a ( '\$mtime > &: │ │ │ │ +00006ce0: 3a44 4154 4528 2233 6434 6822 2927 2061 :DATE("3d4h")' a │ │ │ │ +00006cf0: 6e64 206e 6f74 2027 5c24 6669 6c65 203d nd not '\$file = │ │ │ │ +00006d00: 7e20 6d23 2f74 6d70 2f23 2720 2927 0a3b ~ m#/tmp/#' )'.; │ │ │ │ +00006d10: 6368 6563 6b42 6c6f 636b 7352 756c 6530 checkBlocksRule0 │ │ │ │ +00006d20: 3d0a 0a23 2042 6c6f 636b 2073 697a 6520 =..# Block size │ │ │ │ +00006d30: 666f 7220 6f70 7469 6f6e 2063 6865 636b for option check │ │ │ │ +00006d40: 426c 6f63 6b73 5275 6c65 0a23 2064 6566 BlocksRule.# def │ │ │ │ +00006d50: 6175 6c74 2069 7320 2463 6865 636b 426c ault is $checkBl │ │ │ │ +00006d60: 6f63 6b73 4253 6465 6661 756c 7420 2831 ocksBSdefault (1 │ │ │ │ +00006d70: 206d 6567 6162 7974 6529 0a3b 6368 6563 megabyte).;chec │ │ │ │ +00006d80: 6b42 6c6f 636b 7342 5330 3d0a 0a23 2069 kBlocksBS0=..# i │ │ │ │ +00006d90: 6620 7365 7420 746f 2027 7965 7327 2c20 f set to 'yes', │ │ │ │ +00006da0: 626c 6f63 6b73 2067 656e 6572 6174 6564 blocks generated │ │ │ │ +00006db0: 2064 7565 2074 6f20 7468 6973 2072 756c due to this rul │ │ │ │ +00006dc0: 6520 7769 6c6c 2062 6520 636f 6d70 7265 e will be compre │ │ │ │ +00006dd0: 7373 6564 0a23 2070 6f73 7369 626c 6520 ssed.# possible │ │ │ │ +00006de0: 7661 6c75 6573 3a20 2779 6573 2720 6f72 values: 'yes' or │ │ │ │ +00006df0: 2027 6e6f 272c 2064 6566 6175 6c74 2069 'no', default i │ │ │ │ +00006e00: 7320 276e 6f27 0a3b 6368 6563 6b42 6c6f s 'no'.;checkBlo │ │ │ │ +00006e10: 636b 7343 6f6d 7072 303d 0a0a 2320 4669 cksCompr0=..# Fi │ │ │ │ +00006e20: 6c74 6572 2066 6f72 2072 6561 6469 6e67 lter for reading │ │ │ │ +00006e30: 2074 6865 2066 696c 6520 746f 2074 7265 the file to tre │ │ │ │ +00006e40: 6174 2061 7320 6120 626c 6f63 6b65 6420 at as a blocked │ │ │ │ +00006e50: 6669 6c65 0a23 2065 672e 2020 2067 7a69 file.# eg. gzi │ │ │ │ +00006e60: 7020 2d64 2020 2069 6620 7468 6520 6669 p -d if the fi │ │ │ │ +00006e70: 6c65 2069 7320 636f 6d70 7265 7373 6564 le is compressed │ │ │ │ +00006e80: 2e20 4465 6661 756c 7420 6973 206e 6f20 . Default is no │ │ │ │ +00006e90: 7265 6164 2066 696c 7465 722e 0a3b 6368 read filter..;ch │ │ │ │ +00006ea0: 6563 6b42 6c6f 636b 7352 6561 6430 3d0a eckBlocksRead0=. │ │ │ │ +00006eb0: 0a23 2052 6561 6420 6669 6c65 7320 7370 .# Read files sp │ │ │ │ +00006ec0: 6563 6966 6965 6420 6865 7265 2069 6e20 ecified here in │ │ │ │ +00006ed0: 7061 7261 6c6c 656c 2074 6f20 226e 6f72 parallel to "nor │ │ │ │ +00006ee0: 6d61 6c22 206f 6e65 732e 0a23 2054 6869 mal" ones..# Thi │ │ │ │ +00006ef0: 7320 6f6e 6c79 206d 616b 6573 2073 656e s only makes sen │ │ │ │ +00006f00: 7365 2069 6620 7468 6579 2061 7265 206f se if they are o │ │ │ │ +00006f10: 6e20 6120 6469 6666 6572 656e 7420 6469 n a different di │ │ │ │ +00006f20: 736b 2e0a 2320 4465 6661 756c 7420 7661 sk..# Default va │ │ │ │ +00006f30: 6c75 6520 6973 2027 6e6f 270a 3b63 6865 lue is 'no'.;che │ │ │ │ +00006f40: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel │ │ │ │ +00006f50: 303d 0a0a 454f 480a 2020 2020 3b0a 7b0a 0=..EOH. ;.{. │ │ │ │ +00006f60: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f │ │ │ │ +00006f70: 6f72 6561 6368 2024 6920 2831 2e2e 246e oreach $i (1..$n │ │ │ │ +00006f80: 6f42 6c6f 636b 5275 6c65 732d 3129 0a20 oBlockRules-1). │ │ │ │ +00006f90: 2020 207b 0a09 2462 6c6f 636b 5275 6c65 {..$blockRule │ │ │ │ +00006fa0: 7348 656c 7020 2e3d 0a09 2020 2020 7370 sHelp .=.. sp │ │ │ │ +00006fb0: 7269 6e74 6628 223b 6368 6563 6b42 6c6f rintf(";checkBlo │ │ │ │ +00006fc0: 636b 7352 756c 6525 643d 5c6e 3b63 6865 cksRule%d=\n;che │ │ │ │ +00006fd0: 636b 426c 6f63 6b73 4253 2564 3d5c 6e3b ckBlocksBS%d=\n; │ │ │ │ +00006fe0: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr │ │ │ │ +00006ff0: 2564 3d5c 6e22 202e 0a09 0920 2020 2022 %d=\n" .... " │ │ │ │ +00007000: 3b63 6865 636b 426c 6f63 6b73 5265 6164 ;checkBlocksRead │ │ │ │ +00007010: 2564 3d5c 6e3b 6368 6563 6b42 6c6f 636b %d=\n;checkBlock │ │ │ │ +00007020: 7350 6172 616c 6c65 6c25 643d 5c6e 5c6e sParallel%d=\n\n │ │ │ │ +00007030: 222c 0a09 0920 2020 2024 692c 2024 692c ",... $i, $i, │ │ │ │ +00007040: 2024 692c 2024 692c 2024 6929 3b0a 2020 $i, $i, $i);. │ │ │ │ +00007050: 2020 7d0a 2020 2020 6368 6f70 2024 626c }. chop $bl │ │ │ │ +00007060: 6f63 6b52 756c 6573 4865 6c70 3b0a 7d0a ockRulesHelp;.}. │ │ │ │ +00007070: 0a6d 7920 2462 6c6f 636b 4465 7669 6365 .my $blockDevice │ │ │ │ +00007080: 4865 6c70 203d 203c 3c45 4f48 3b0a 2320 Help = < cons │ │ │ │ +00007f80: 6964 6572 2074 6869 7320 6261 636b 7570 ider this backup │ │ │ │ +00007f90: 0a23 206f 720a 2320 303a 6261 636b 7570 .# or.# 0:backup │ │ │ │ +00007fa0: 5365 7269 6573 2020 2020 2d3e 206c 6173 Series -> las │ │ │ │ +00007fb0: 7420 2879 6f75 6e67 6573 7429 2062 6163 t (youngest) bac │ │ │ │ +00007fc0: 6b75 7020 696e 203c 6261 636b 7570 4469 kup in /backupSeries. │ │ │ │ +00007fe0: 2320 313a 6261 636b 7570 5365 7269 6573 # 1:backupSeries │ │ │ │ +00007ff0: 2020 2020 2d3e 2066 6972 7374 2062 6566 -> first bef │ │ │ │ +00008000: 6f72 6520 6c61 7374 2062 6163 6b75 7020 ore last backup │ │ │ │ +00008010: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b │ │ │ │ +00008020: 6163 6b75 7053 6572 6965 730a 2320 6e3a ackupSeries.# n: │ │ │ │ +00008030: 6261 636b 7570 5365 7269 6573 2020 2020 backupSeries │ │ │ │ +00008040: 2d3e 206e 2774 6820 6265 666f 7265 206c -> n'th before l │ │ │ │ +00008050: 6173 7420 6261 636b 7570 2069 6e20 3c62 ast backup in /backup │ │ │ │ +00008070: 5365 7269 6573 0a23 2033 2d35 3a62 6163 Series.# 3-5:bac │ │ │ │ +00008080: 6b75 7053 6572 6965 7320 202d 3e20 3372 kupSeries -> 3r │ │ │ │ +00008090: 642c 2034 7468 2061 6e64 2035 7468 2069 d, 4th and 5th i │ │ │ │ +000080a0: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba │ │ │ │ +000080b0: 636b 7570 5365 7269 6573 0a23 2061 6c6c ckupSeries.# all │ │ │ │ +000080c0: 3a62 6163 6b75 7053 6572 6965 7320 202d :backupSeries - │ │ │ │ +000080d0: 3e20 616c 6c20 696e 203c 6261 636b 7570 > all in /backupSerie │ │ │ │ +000080f0: 730a 2320 5468 6973 206f 7074 696f 6e20 s.# This option │ │ │ │ +00008100: 6973 2075 7365 6675 6c2c 2069 6620 796f is useful, if yo │ │ │ │ +00008110: 7520 7761 6e74 2074 6f20 6578 706c 6963 u want to explic │ │ │ │ +00008120: 6974 6c79 2068 6172 6420 6c69 6e6b 0a23 itly hard link.# │ │ │ │ +00008130: 2074 6f20 6261 636b 7570 2073 6572 6965 to backup serie │ │ │ │ +00008140: 7320 6672 6f6d 2064 6966 6665 7265 6e74 s from different │ │ │ │ +00008150: 2062 6163 6b75 7073 2e20 596f 7520 6361 backups. You ca │ │ │ │ +00008160: 6e20 7370 6563 6966 7920 6567 2e20 7769 n specify eg. wi │ │ │ │ +00008170: 7468 0a23 2030 3a6d 7942 6163 6b75 7020 th.# 0:myBackup │ │ │ │ +00008180: 746f 2074 6865 206c 6173 7420 6261 636b to the last back │ │ │ │ +00008190: 7570 206f 6620 7365 7269 6573 2027 6d79 up of series 'my │ │ │ │ +000081a0: 4261 636b 7570 272e 2049 6620 796f 7520 Backup'. If you │ │ │ │ +000081b0: 7370 6563 6966 790a 2320 6261 636b 7570 specify.# backup │ │ │ │ +000081c0: 2073 6572 6965 7320 7769 7468 206f 7468 series with oth │ │ │ │ +000081d0: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, │ │ │ │ +000081e0: 7468 656e 206f 6e6c 7920 7468 6573 6520 then only these │ │ │ │ +000081f0: 6261 636b 7570 7320 7769 6c6c 2062 650a backups will be. │ │ │ │ +00008200: 2320 7573 6564 2066 6f72 2068 6172 6420 # used for hard │ │ │ │ +00008210: 6c69 6e6b 696e 672e 0a23 2044 6566 6175 linking..# Defau │ │ │ │ +00008220: 6c74 2076 616c 7565 2069 7320 746f 206c lt value is to l │ │ │ │ +00008230: 696e 6b20 746f 2074 6865 206c 6173 7420 ink to the last │ │ │ │ +00008240: 6261 636b 7570 206f 6620 616c 6c20 7365 backup of all se │ │ │ │ +00008250: 7269 6573 2073 746f 7265 6420 696e 0a23 ries stored in.# │ │ │ │ +00008260: 2027 6261 636b 7570 4469 7227 2e0a 3b6f 'backupDir'..;o │ │ │ │ +00008270: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries │ │ │ │ +00008280: 3d0a 0a23 206c 6f63 6b20 6669 6c65 2c20 =..# lock file, │ │ │ │ +00008290: 6966 2065 7869 7374 2c20 6e65 7720 696e if exist, new in │ │ │ │ +000082a0: 7374 616e 6365 7320 7769 6c6c 2066 696e stances will fin │ │ │ │ +000082b0: 6973 6820 6966 0a23 2061 6e20 6f6c 6420 ish if.# an old │ │ │ │ +000082c0: 6973 2061 6c72 6561 6479 2072 756e 6e69 is already runni │ │ │ │ +000082d0: 6e67 2c20 6465 6661 756c 7420 6973 2024 ng, default is $ │ │ │ │ +000082e0: 6c6f 636b 4669 6c65 0a3b 6c6f 636b 4669 lockFile.;lockFi │ │ │ │ +000082f0: 6c65 3d0a 0a23 2072 656d 6f76 6520 7468 le=..# remove th │ │ │ │ +00008300: 6520 6c6f 636b 2066 696c 6573 2062 6566 e lock files bef │ │ │ │ +00008310: 6f72 6520 6465 6c65 7469 6e67 206f 6c64 ore deleting old │ │ │ │ +00008320: 2062 6163 6b75 7073 0a23 2064 6566 6175 backups.# defau │ │ │ │ +00008330: 6c74 2028 276e 6f27 2920 6973 2074 6f20 lt ('no') is to │ │ │ │ +00008340: 6465 6c65 7465 2074 6865 206c 6f63 6b20 delete the lock │ │ │ │ +00008350: 6669 6c65 2061 6674 6572 2064 656c 6574 file after delet │ │ │ │ +00008360: 696e 670a 2320 706f 7373 6962 6c65 2076 ing.# possible v │ │ │ │ +00008370: 616c 7565 7320 6172 6520 2779 6573 2720 alues are 'yes' │ │ │ │ +00008380: 616e 6420 276e 6f27 0a3b 756e 6c6f 636b and 'no'.;unlock │ │ │ │ +00008390: 4265 666f 7265 4465 6c3d 0a0a 2320 636f BeforeDel=..# co │ │ │ │ +000083a0: 6e74 696e 7565 2069 6620 6f6e 6520 6f72 ntinue if one or │ │ │ │ +000083b0: 206d 6f72 6520 6f66 2074 6865 2065 7863 more of the exc │ │ │ │ +000083c0: 6570 7469 6f6e 616c 2064 6972 6563 746f eptional directo │ │ │ │ +000083d0: 7269 6573 0a23 2064 6f20 6e6f 7420 6578 ries.# do not ex │ │ │ │ +000083e0: 6973 7420 286e 6f20 6973 2073 746f 7070 ist (no is stopp │ │ │ │ +000083f0: 696e 6720 7072 6f63 6573 7369 6e67 290a ing processing). │ │ │ │ +00008400: 2320 6465 6661 756c 7420 6973 2027 6e6f # default is 'no │ │ │ │ +00008410: 272c 2063 616e 2062 6520 2779 6573 2720 ', can be 'yes' │ │ │ │ +00008420: 6f72 2027 6e6f 270a 3b63 6f6e 7445 7863 or 'no'.;contExc │ │ │ │ +00008430: 6570 7444 6972 7345 7272 3d0a 0a23 2044 eptDirsErr=..# D │ │ │ │ +00008440: 6972 6563 746f 7269 6573 2074 6f20 6578 irectories to ex │ │ │ │ +00008450: 636c 7564 6520 6672 6f6d 2074 6865 2062 clude from the b │ │ │ │ +00008460: 6163 6b75 7020 2872 656c 6174 6976 6520 ackup (relative │ │ │ │ +00008470: 7061 7468 2069 6e73 6964 6520 6f66 2074 path inside of t │ │ │ │ +00008480: 6865 2062 6163 6b75 7029 2e0a 2320 596f he backup)..# Yo │ │ │ │ +00008490: 7520 6361 6e20 7573 6520 7368 656c 6c20 u can use shell │ │ │ │ +000084a0: 7479 7065 2077 696c 6463 6172 6473 2e0a type wildcards.. │ │ │ │ +000084b0: 2320 5468 6573 6520 6469 7265 6374 6f72 # These director │ │ │ │ +000084c0: 6965 7320 6861 7665 2074 6f20 6265 2073 ies have to be s │ │ │ │ +000084d0: 6570 6172 6174 6564 2062 7920 7370 6163 eparated by spac │ │ │ │ +000084e0: 6520 6f72 206e 6577 6c69 6e65 2e0a 3b65 e or newline..;e │ │ │ │ +000084f0: 7863 6570 7444 6972 733d 0a0a 2320 4469 xceptDirs=..# Di │ │ │ │ +00008500: 7265 6374 6f72 6965 7320 746f 2069 6e63 rectories to inc │ │ │ │ +00008510: 6c75 6465 2069 6e20 7468 6520 6261 636b lude in the back │ │ │ │ +00008520: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat │ │ │ │ +00008530: 6820 696e 7369 6465 206f 6620 7468 6520 h inside of the │ │ │ │ +00008540: 6261 636b 7570 292e 0a23 2059 6f75 2063 backup)..# You c │ │ │ │ +00008550: 616e 2075 7365 2073 6865 6c6c 2074 7970 an use shell typ │ │ │ │ +00008560: 6520 7769 6c64 6361 7264 732e 0a23 2054 e wildcards..# T │ │ │ │ +00008570: 6865 7365 2064 6972 6563 746f 7269 6573 hese directories │ │ │ │ +00008580: 2068 6176 6520 746f 2062 6520 7365 7061 have to be sepa │ │ │ │ +00008590: 7261 7465 6420 6279 2073 7061 6365 206f rated by space o │ │ │ │ +000085a0: 7220 6e65 776c 696e 652e 0a3b 696e 636c r newline..;incl │ │ │ │ +000085b0: 7564 6544 6972 733d 0a0a 2320 7275 6c65 udeDirs=..# rule │ │ │ │ +000085c0: 2066 6f72 2065 7863 6c75 6469 6e67 2066 for excluding f │ │ │ │ +000085d0: 696c 6573 202f 206f 6e6c 7920 666f 7220 iles / only for │ │ │ │ +000085e0: 6578 7065 7269 656e 6365 6420 6164 6d69 experienced admi │ │ │ │ +000085f0: 6e69 7374 7261 746f 7273 0a23 2021 2121 nistrators.# !!! │ │ │ │ +00008600: 2073 6565 2052 4541 444d 4520 6669 6c65 see README file │ │ │ │ +00008610: 2027 696e 636c 7564 696e 6720 2f20 6578 'including / ex │ │ │ │ +00008620: 636c 7564 696e 6720 6669 6c65 7320 616e cluding files an │ │ │ │ +00008630: 6420 6469 7265 6374 6f72 6965 7327 0a23 d directories'.# │ │ │ │ +00008640: 2045 5841 4d50 4c45 3a20 0a23 2073 6561 EXAMPLE: .# sea │ │ │ │ +00008650: 7263 6852 756c 6520 3d20 2820 275c 2473 rchRule = ( '\$s │ │ │ │ +00008660: 697a 6520 3e20 263a 3a53 495a 4528 2233 ize > &::SIZE("3 │ │ │ │ +00008670: 4d22 2927 2061 6e64 2027 5c24 7569 6420 M")' and '\$uid │ │ │ │ +00008680: 6571 2022 686a 6322 2720 2920 6f72 0a23 eq "hjc"' ) or.# │ │ │ │ +00008690: 2020 2020 2820 275c 246d 7469 6d65 203e ( '\$mtime > │ │ │ │ +000086a0: 2026 3a3a 4441 5445 2822 3364 3468 2229 &::DATE("3d4h") │ │ │ │ +000086b0: 2720 616e 6420 6e6f 7420 275c 2466 696c ' and not '\$fil │ │ │ │ +000086c0: 6520 3d7e 206d 232f 746d 702f 2327 2029 e =~ m#/tmp/#' ) │ │ │ │ +000086d0: 270a 3b65 7863 6570 7452 756c 653d 0a0a '.;exceptRule=.. │ │ │ │ +000086e0: 2320 466f 7220 6578 706c 616e 6174 696f # For explanatio │ │ │ │ +000086f0: 6e73 2c20 7365 6520 2765 7863 6570 7452 ns, see 'exceptR │ │ │ │ +00008700: 756c 6527 2e0a 3b69 6e63 6c75 6465 5275 ule'..;includeRu │ │ │ │ +00008710: 6c65 3d0a 0a23 2077 7269 7465 2061 2066 le=..# write a f │ │ │ │ +00008720: 696c 6520 6e61 6d65 202e 7374 6f72 6542 ile name .storeB │ │ │ │ +00008730: 6163 6b75 702e 6e6f 7453 6176 6564 2e62 ackup.notSaved.b │ │ │ │ +00008740: 7a32 2077 6974 6820 7468 650a 2320 6e61 z2 with the.# na │ │ │ │ +00008750: 6d65 7320 6f66 2061 6c6c 2073 6b69 7070 mes of all skipp │ │ │ │ +00008760: 6564 2066 696c 6573 2c20 6465 6661 756c ed files, defaul │ │ │ │ +00008770: 7420 6973 2027 6e6f 272c 2063 616e 2062 t is 'no', can b │ │ │ │ +00008780: 6520 2779 6573 2720 6f72 2027 6e6f 270a e 'yes' or 'no'. │ │ │ │ +00008790: 3b77 7269 7465 4578 636c 7564 654c 6f67 ;writeExcludeLog │ │ │ │ +000087a0: 3d0a 0a23 2064 6f20 6e6f 7420 7361 7665 =..# do not save │ │ │ │ +000087b0: 2074 6865 2073 7065 6369 6669 6564 2074 the specified t │ │ │ │ +000087c0: 7970 6573 206f 6620 6669 6c65 732c 2061 ypes of files, a │ │ │ │ +000087d0: 6c6c 6f77 6564 3a20 5362 6366 706c 0a23 llowed: Sbcfpl.# │ │ │ │ +000087e0: 2053 202d 2066 696c 6520 6973 2061 2073 S - file is a s │ │ │ │ +000087f0: 6f63 6b65 740a 2320 6220 2d20 6669 6c65 ocket.# b - file │ │ │ │ +00008800: 2069 7320 6120 626c 6f63 6b20 7370 6563 is a block spec │ │ │ │ +00008810: 6961 6c20 6669 6c65 0a23 2063 202d 2066 ial file.# c - f │ │ │ │ +00008820: 696c 6520 6973 2061 2063 6861 7261 6374 ile is a charact │ │ │ │ +00008830: 6572 2073 7065 6369 616c 2066 696c 650a er special file. │ │ │ │ +00008840: 2320 6620 2d20 6669 6c65 2069 7320 6120 # f - file is a │ │ │ │ +00008850: 706c 6169 6e20 6669 6c65 0a23 2070 202d plain file.# p - │ │ │ │ +00008860: 2066 696c 6520 6973 2061 206e 616d 6564 file is a named │ │ │ │ +00008870: 2070 6970 650a 2320 6c20 2d20 6669 6c65 pipe.# l - file │ │ │ │ +00008880: 2069 7320 6120 7379 6d62 6f6c 6963 206c is a symbolic l │ │ │ │ +00008890: 696e 6b0a 2320 5370 6263 2063 616e 206f ink.# Spbc can o │ │ │ │ +000088a0: 6e6c 7920 6265 2062 6163 6b65 6420 7570 nly be backed up │ │ │ │ +000088b0: 2069 6620 474e 5520 636f 7079 2069 7320 if GNU copy is │ │ │ │ +000088c0: 6176 6169 6c61 626c 652e 0a3b 6578 6365 available..;exce │ │ │ │ +000088d0: 7074 5479 7065 733d 0a0a 2320 4163 7469 ptTypes=..# Acti │ │ │ │ +000088e0: 7661 7465 2074 6869 7320 6f70 7469 6f6e vate this option │ │ │ │ +000088f0: 2069 6620 796f 7572 2073 7973 7465 6d27 if your system' │ │ │ │ +00008900: 7320 6370 2069 7320 6120 6675 6c6c 2d66 s cp is a full-f │ │ │ │ +00008910: 6561 7475 7265 6420 474e 550a 2320 7665 eatured GNU.# ve │ │ │ │ +00008920: 7273 696f 6e2e 2049 6e20 7468 6973 2063 rsion. In this c │ │ │ │ +00008930: 6173 6520 796f 7520 7769 6c6c 2062 6520 ase you will be │ │ │ │ +00008940: 6162 6c65 2074 6f20 616c 736f 2062 6163 able to also bac │ │ │ │ +00008950: 6b75 7020 7365 7665 7261 6c0a 2320 7370 kup several.# sp │ │ │ │ +00008960: 6563 6961 6c20 6669 6c65 2074 7970 6573 ecial file types │ │ │ │ +00008970: 206c 696b 6520 736f 636b 6574 732e 0a23 like sockets..# │ │ │ │ +00008980: 2050 6f73 7369 626c 6520 7661 6c75 6573 Possible values │ │ │ │ +00008990: 2061 7265 2027 7965 7327 2061 6e64 2027 are 'yes' and ' │ │ │ │ +000089a0: 6e6f 272e 2044 6566 6175 6c74 2069 7320 no'. Default is │ │ │ │ +000089b0: 276e 6f27 0a3b 6370 4973 476e 753d 0a0a 'no'.;cpIsGnu=.. │ │ │ │ +000089c0: 2320 6d61 6b65 2061 2068 6172 6420 6c69 # make a hard li │ │ │ │ +000089d0: 6e6b 2074 6f20 6578 6973 7469 6e67 2c20 nk to existing, │ │ │ │ +000089e0: 6964 656e 7469 6361 6c20 7379 6d6c 696e identical symlin │ │ │ │ +000089f0: 6b73 2069 6e20 6f6c 6420 6261 636b 7570 ks in old backup │ │ │ │ +00008a00: 730a 2320 7573 6520 7468 6973 2c20 6966 s.# use this, if │ │ │ │ +00008a10: 2079 6f75 7220 6f70 6572 6174 696e 6720 your operating │ │ │ │ +00008a20: 7379 7374 656d 2073 7570 706f 7274 7320 system supports │ │ │ │ +00008a30: 7468 6973 2028 6c69 6e75 7820 646f 6573 this (linux does │ │ │ │ +00008a40: 290a 2320 506f 7373 6962 6c65 2076 616c ).# Possible val │ │ │ │ +00008a50: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an │ │ │ │ +00008a60: 6420 276e 6f27 2e20 4465 6661 756c 7420 d 'no'. Default │ │ │ │ +00008a70: 6973 2027 6e6f 270a 3b6c 696e 6b53 796d is 'no'.;linkSym │ │ │ │ +00008a80: 6c69 6e6b 733d 0a0a 2320 6578 6563 206a links=..# exec j │ │ │ │ +00008a90: 6f62 2062 6566 6f72 6520 7374 6172 7469 ob before starti │ │ │ │ +00008aa0: 6e67 2074 6865 2062 6163 6b75 702c 2063 ng the backup, c │ │ │ │ +00008ab0: 6865 636b 7320 6c6f 636b 4669 6c65 2028 hecks lockFile ( │ │ │ │ +00008ac0: 2d4c 2920 6265 666f 7265 0a23 2073 7461 -L) before.# sta │ │ │ │ +00008ad0: 7274 696e 6720 2865 2e67 2e20 6361 6e20 rting (e.g. can │ │ │ │ +00008ae0: 6265 2075 7365 6420 666f 7220 7273 796e be used for rsyn │ │ │ │ +00008af0: 6329 2073 746f 7073 2065 7865 6375 7469 c) stops executi │ │ │ │ +00008b00: 6f6e 2069 6620 6a6f 6220 7265 7475 726e on if job return │ │ │ │ +00008b10: 730a 2320 6578 6974 2073 7461 7475 7320 s.# exit status │ │ │ │ +00008b20: 213d 2030 0a3b 7072 6563 6f6d 6d61 6e64 != 0.;precommand │ │ │ │ +00008b30: 3d0a 0a23 2065 7865 6320 6a6f 6220 6166 =..# exec job af │ │ │ │ +00008b40: 7465 7220 6669 6e69 7368 696e 6720 7468 ter finishing th │ │ │ │ +00008b50: 6520 6261 636b 7570 2c20 6275 7420 6265 e backup, but be │ │ │ │ +00008b60: 666f 7265 2065 7261 7369 6e67 206f 6620 fore erasing of │ │ │ │ +00008b70: 6f6c 640a 2320 6261 636b 7570 7320 7265 old.# backups re │ │ │ │ +00008b80: 706f 7274 7320 6966 206a 6f62 2072 6574 ports if job ret │ │ │ │ +00008b90: 7572 6e73 2065 7869 7420 7374 6174 7573 urns exit status │ │ │ │ +00008ba0: 2021 3d20 300a 3b70 6f73 7463 6f6d 6d61 != 0.;postcomma │ │ │ │ +00008bb0: 6e64 3d0a 0a23 2066 6f6c 6c6f 7720 7379 nd=..# follow sy │ │ │ │ +00008bc0: 6d62 6f6c 6963 206c 696e 6b73 206c 696b mbolic links lik │ │ │ │ +00008bd0: 6520 6469 7265 6374 6f72 6965 7320 7570 e directories up │ │ │ │ +00008be0: 2074 6f20 6465 7074 6820 3020 2d3e 2064 to depth 0 -> d │ │ │ │ +00008bf0: 6f20 6e6f 740a 2320 666f 6c6c 6f77 206c o not.# follow l │ │ │ │ +00008c00: 696e 6b73 0a3b 666f 6c6c 6f77 4c69 6e6b inks.;followLink │ │ │ │ +00008c10: 733d 0a0a 2320 7573 6520 7468 6973 206f s=..# use this o │ │ │ │ +00008c20: 6e6c 7920 6966 2079 6f75 2077 7269 7465 nly if you write │ │ │ │ +00008c30: 2079 6f75 7220 6261 636b 7570 206f 7665 your backup ove │ │ │ │ +00008c40: 7220 6120 6869 6768 206c 6174 656e 6379 r a high latency │ │ │ │ +00008c50: 206c 696e 650a 2320 6c69 6b65 2061 2076 line.# like a v │ │ │ │ +00008c60: 706e 206f 7665 7220 7468 6520 696e 7465 pn over the inte │ │ │ │ +00008c70: 726e 6574 0a23 2073 746f 7265 6261 636b rnet.# storeback │ │ │ │ +00008c80: 7570 2077 696c 6c20 7573 6520 6d6f 7265 up will use more │ │ │ │ +00008c90: 2070 6172 616c 6c65 6c69 7a61 7469 6f6e parallelization │ │ │ │ +00008ca0: 2061 7420 7468 6520 636f 7374 206f 6620 at the cost of │ │ │ │ +00008cb0: 6d6f 7265 0a23 2063 7075 2070 6f77 6572 more.# cpu power │ │ │ │ +00008cc0: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu │ │ │ │ +00008cd0: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and │ │ │ │ +00008ce0: 2027 6e6f 273b 2064 6566 6175 6c74 2069 'no'; default i │ │ │ │ +00008cf0: 7320 276e 6f27 0a3b 6869 6768 4c61 7465 s 'no'.;highLate │ │ │ │ +00008d00: 6e63 793d 0a0a 2320 4966 2074 6869 7320 ncy=..# If this │ │ │ │ +00008d10: 6f70 7469 6f6e 2069 7320 6469 7361 626c option is disabl │ │ │ │ +00008d20: 6564 2c20 7468 656e 2074 6865 2066 696c ed, then the fil │ │ │ │ +00008d30: 6573 2069 6e20 7468 6520 6261 636b 7570 es in the backup │ │ │ │ +00008d40: 2077 696c 6c20 6e6f 740a 2320 6e65 6363 will not.# necc │ │ │ │ +00008d50: 6573 7361 7269 6c79 2068 6176 6520 7468 essarily have th │ │ │ │ +00008d60: 6520 7361 6d65 2070 6572 6d69 7373 696f e same permissio │ │ │ │ +00008d70: 6e73 2061 6e64 206f 776e 6572 2061 7320 ns and owner as │ │ │ │ +00008d80: 7468 6520 6f72 6967 696e 616c 732e 0a23 the originals..# │ │ │ │ +00008d90: 2054 6869 7320 7370 6565 6473 2075 7020 This speeds up │ │ │ │ +00008da0: 6261 636b 7570 7320 6f6e 206e 6574 776f backups on netwo │ │ │ │ +00008db0: 726b 2064 7269 7665 7320 6120 6c6f 742e rk drives a lot. │ │ │ │ +00008dc0: 2043 6f72 7265 6374 2070 6572 6d69 7373 Correct permiss │ │ │ │ +00008dd0: 696f 6e73 0a23 2061 7265 2072 6573 746f ions.# are resto │ │ │ │ +00008de0: 7265 6420 6279 2073 746f 7265 4261 636b red by storeBack │ │ │ │ +00008df0: 7570 5265 636f 7665 722e 706c 206e 6f20 upRecover.pl no │ │ │ │ +00008e00: 6d61 7474 6572 2077 6861 7420 7468 6973 matter what this │ │ │ │ +00008e10: 206f 7074 696f 6e20 6973 0a23 2073 6574 option is.# set │ │ │ │ +00008e20: 2074 6f2e 2044 6566 6175 6c74 2069 7320 to. Default is │ │ │ │ +00008e30: 276e 6f27 0a3b 6967 6e6f 7265 5065 726d 'no'.;ignorePerm │ │ │ │ +00008e40: 733d 0a0a 2320 7375 7070 7265 7373 2028 s=..# suppress ( │ │ │ │ +00008e50: 756e 7761 6e74 6564 2920 7761 726e 696e unwanted) warnin │ │ │ │ +00008e60: 6773 2069 6e20 7468 6520 6c6f 6720 6669 gs in the log fi │ │ │ │ +00008e70: 6c65 733b 0a23 2074 6f20 7375 7070 7265 les;.# to suppre │ │ │ │ +00008e80: 7373 2077 6172 6e69 6e67 732c 2074 6865 ss warnings, the │ │ │ │ +00008e90: 2066 6f6c 6c6f 7769 6e67 206b 6579 7320 following keys │ │ │ │ +00008ea0: 6361 6e20 6265 2075 7365 643a 0a23 2020 can be used:.# │ │ │ │ +00008eb0: 2065 7863 4469 7220 2873 7570 7072 6573 excDir (suppres │ │ │ │ +00008ec0: 7365 7320 7468 6520 7761 726e 696e 6720 ses the warning │ │ │ │ +00008ed0: 7468 6174 2065 7863 6c75 6465 6420 6469 that excluded di │ │ │ │ +00008ee0: 7265 6374 6f72 6965 730a 2320 2020 2020 rectories.# │ │ │ │ +00008ef0: 2020 2020 2064 6f20 6e6f 7420 6578 6973 do not exis │ │ │ │ +00008f00: 7429 0a23 2020 2066 696c 6543 6861 6e67 t).# fileChang │ │ │ │ +00008f10: 6520 2873 7570 7072 6573 7365 7320 7468 e (suppresses th │ │ │ │ +00008f20: 6520 7761 726e 696e 6720 7468 6174 2061 e warning that a │ │ │ │ +00008f30: 2066 696c 6520 6861 7320 6368 616e 6765 file has change │ │ │ │ +00008f40: 6420 6475 7269 6e67 0a23 2020 2020 2020 d during.# │ │ │ │ +00008f50: 2020 2020 2020 2020 7468 6520 6261 636b the back │ │ │ │ +00008f60: 7570 290a 2320 2020 6372 5365 7269 6573 up).# crSeries │ │ │ │ +00008f70: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ │ +00008f80: 2077 6172 6e69 6e67 2074 6861 7420 7374 warning that st │ │ │ │ +00008f90: 6f72 6542 6163 6b75 7020 6861 6420 746f oreBackup had to │ │ │ │ +00008fa0: 2063 7265 6174 6520 7468 650a 2320 2020 create the.# │ │ │ │ +00008fb0: 2020 2020 2020 2020 2027 6465 6661 756c 'defaul │ │ │ │ +00008fc0: 7427 2073 6572 6965 7329 0a23 2020 2068 t' series).# h │ │ │ │ +00008fd0: 6173 6843 6f6c 6c69 7369 6f6e 2028 7375 ashCollision (su │ │ │ │ +00008fe0: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war │ │ │ │ +00008ff0: 6e69 6e67 2069 6620 6120 706f 7373 6962 ning if a possib │ │ │ │ +00009000: 6c65 0a23 2020 2020 2020 2020 2020 2020 le.# │ │ │ │ +00009010: 2020 2020 2068 6173 6820 636f 6c6c 6973 hash collis │ │ │ │ +00009020: 696f 6e20 6973 2064 6574 6563 7465 6429 ion is detected) │ │ │ │ +00009030: 0a23 2020 2066 696c 654e 616d 6557 6974 .# fileNameWit │ │ │ │ +00009040: 684c 696e 6546 6565 6420 2873 7570 7072 hLineFeed (suppr │ │ │ │ +00009050: 6573 7365 7320 7468 6520 7761 726e 696e esses the warnin │ │ │ │ +00009060: 6720 6966 2061 2066 696c 656e 616d 650a g if a filename. │ │ │ │ +00009070: 2320 2020 2020 2020 2020 2020 2020 2020 # │ │ │ │ +00009080: 2020 2020 2020 2020 2063 6f6e 7461 696e contain │ │ │ │ +00009090: 7320 6120 6c69 6e65 2066 6565 6429 0a23 s a line feed).# │ │ │ │ +000090a0: 2020 5468 6973 206f 7074 696f 6e20 6361 This option ca │ │ │ │ +000090b0: 6e20 6265 2072 6570 6561 7465 6420 6d75 n be repeated mu │ │ │ │ +000090c0: 6c74 6970 6c65 2074 696d 6573 206f 6e20 ltiple times on │ │ │ │ +000090d0: 7468 6520 636f 6d6d 616e 6420 6c69 6e65 the command line │ │ │ │ +000090e0: 2e0a 2320 2045 7861 6d70 6c65 2075 7361 ..# Example usa │ │ │ │ +000090f0: 6765 2069 6e20 636f 6e66 2066 696c 653a ge in conf file: │ │ │ │ +00009100: 0a23 2020 7375 7070 7265 7373 5761 726e .# suppressWarn │ │ │ │ +00009110: 696e 6720 3d20 6578 6344 6972 2066 696c ing = excDir fil │ │ │ │ +00009120: 6543 6861 6e67 6520 6372 5365 7269 6573 eChange crSeries │ │ │ │ +00009130: 2068 6173 6843 6f6c 6c69 7369 6f6e 0a23 hashCollision.# │ │ │ │ +00009140: 2020 4279 2064 6566 6175 6c74 206e 6f20 By default no │ │ │ │ +00009150: 7761 726e 696e 6773 2061 7265 2073 7570 warnings are sup │ │ │ │ +00009160: 7072 6573 7365 642e 0a3b 7375 7070 7265 pressed..;suppre │ │ │ │ +00009170: 7373 5761 726e 696e 673d 0a0a 2320 646f ssWarning=..# do │ │ │ │ +00009180: 202a 6e6f 742a 2077 7269 7465 2068 6172 *not* write har │ │ │ │ +00009190: 6420 6c69 6e6b 7320 746f 2065 7869 7374 d links to exist │ │ │ │ +000091a0: 696e 6720 6669 6c65 7320 696e 2074 6865 ing files in the │ │ │ │ +000091b0: 2062 6163 6b75 700a 2320 6475 7269 6e67 backup.# during │ │ │ │ +000091c0: 2074 6865 2062 6163 6b75 7020 2879 6573 the backup (yes │ │ │ │ +000091d0: 7c6e 6f29 0a23 2079 6f75 2068 6176 6520 |no).# you have │ │ │ │ +000091e0: 746f 2063 616c 6c20 7468 6520 7072 6f67 to call the prog │ │ │ │ +000091f0: 7261 6d20 7374 6f72 6542 6163 6b75 7055 ram storeBackupU │ │ │ │ +00009200: 7064 6174 6542 6163 6b75 702e 706c 0a23 pdateBackup.pl.# │ │ │ │ +00009210: 206c 6174 6572 206f 6e20 796f 7572 2073 later on your s │ │ │ │ +00009220: 6572 7665 7220 6966 2079 6f75 2073 6574 erver if you set │ │ │ │ +00009230: 2074 6869 7320 666c 6167 2074 6f20 2779 this flag to 'y │ │ │ │ +00009240: 6573 270a 2320 796f 7520 6861 7665 2074 es'.# you have t │ │ │ │ +00009250: 6f20 7275 6e20 7374 6f72 6542 6163 6b75 o run storeBacku │ │ │ │ +00009260: 7055 7064 6174 6542 6163 6b75 702e 706c pUpdateBackup.pl │ │ │ │ +00009270: 206c 6174 6572 202d 2073 6565 0a23 2064 later - see.# d │ │ │ │ +00009280: 6573 6372 6970 7469 6f6e 2066 6f72 2074 escription for t │ │ │ │ +00009290: 6861 7420 7072 6f67 7261 6d0a 2320 6465 hat program.# de │ │ │ │ +000092a0: 6661 756c 7420 3d20 6e6f 3a20 646f 206e fault = no: do n │ │ │ │ +000092b0: 6f74 2077 7269 7465 2068 6172 6420 6c69 ot write hard li │ │ │ │ +000092c0: 6e6b 730a 3b6c 6174 654c 696e 6b73 3d0a nks.;lateLinks=. │ │ │ │ +000092d0: 0a23 206f 6e6c 7920 696e 2063 6f6d 6269 .# only in combi │ │ │ │ +000092e0: 6e61 7469 6f6e 2077 6974 6820 2d2d 6c61 nation with --la │ │ │ │ +000092f0: 7465 4c69 6e6b 730a 2320 636f 6d70 7265 teLinks.# compre │ │ │ │ +00009300: 7373 696f 6e20 6672 6f6d 2066 696c 6573 ssion from files │ │ │ │ +00009310: 203e 3d20 7369 7a65 2077 696c 6c20 6265 >= size will be │ │ │ │ +00009320: 2064 6f6e 6520 6c61 7465 722c 0a23 2074 done later,.# t │ │ │ │ +00009330: 6865 2066 696c 6520 6973 2028 7465 6d70 he file is (temp │ │ │ │ +00009340: 6f72 6172 696c 7929 2063 6f70 6965 6420 orarily) copied │ │ │ │ +00009350: 696e 746f 2074 6865 2062 6163 6b75 700a into the backup. │ │ │ │ +00009360: 2320 6465 6661 756c 7420 3d20 6e6f 3a20 # default = no: │ │ │ │ +00009370: 6e6f 206c 6174 6520 636f 6d70 7265 7373 no late compress │ │ │ │ +00009380: 696f 6e0a 3b6c 6174 6543 6f6d 7072 6573 ion.;lateCompres │ │ │ │ +00009390: 733d 0a0a 2320 4669 6c65 7320 7769 7468 s=..# Files with │ │ │ │ +000093a0: 2073 7065 6369 6669 6564 2073 7566 6669 specified suffi │ │ │ │ +000093b0: 7820 666f 7220 7768 6963 6820 7374 6f72 x for which stor │ │ │ │ +000093c0: 6542 6163 6b75 7020 7769 6c6c 206d 616b eBackup will mak │ │ │ │ +000093d0: 6520 616e 206d 6435 2063 6865 636b 0a23 e an md5 check.# │ │ │ │ +000093e0: 206f 6e20 626c 6f63 6b73 206f 6620 7468 on blocks of th │ │ │ │ +000093f0: 6174 2066 696c 652e 2045 7865 6375 7465 at file. Execute │ │ │ │ +00009400: 6420 6166 7465 7220 2d2d 6368 6563 6b42 d after --checkB │ │ │ │ +00009410: 6c6f 636b 7352 756c 6528 6e29 0a3b 6368 locksRule(n).;ch │ │ │ │ +00009420: 6563 6b42 6c6f 636b 7353 7566 6669 783d eckBlocksSuffix= │ │ │ │ +00009430: 0a0a 2320 4f6e 6c79 2063 6865 636b 2066 ..# Only check f │ │ │ │ +00009440: 696c 6573 2073 7065 6369 6669 6564 2069 iles specified i │ │ │ │ +00009450: 6e20 2d2d 6368 6563 6b42 6c6f 636b 7353 n --checkBlocksS │ │ │ │ +00009460: 7566 6669 7820 6966 2074 6865 7265 0a23 uffix if there.# │ │ │ │ +00009470: 2066 696c 6520 7369 7a65 2069 7320 6174 file size is at │ │ │ │ +00009480: 206c 6561 7374 2074 6869 7320 7661 6c75 least this valu │ │ │ │ +00009490: 652c 2064 6566 6175 6c74 2069 7320 3130 e, default is 10 │ │ │ │ +000094a0: 304d 0a3b 6368 6563 6b42 6c6f 636b 734d 0M.;checkBlocksM │ │ │ │ +000094b0: 696e 5369 7a65 3d0a 0a23 2042 6c6f 636b inSize=..# Block │ │ │ │ +000094c0: 2073 697a 6520 666f 7220 6669 6c65 7320 size for files │ │ │ │ +000094d0: 7370 6563 6966 6965 6420 7769 7468 202d specified with - │ │ │ │ +000094e0: 2d63 6865 636b 426c 6f63 6b73 5375 6666 -checkBlocksSuff │ │ │ │ +000094f0: 6978 0a23 2064 6566 6175 6c74 2069 7320 ix.# default is │ │ │ │ +00009500: 2463 6865 636b 426c 6f63 6b73 4253 6465 $checkBlocksBSde │ │ │ │ +00009510: 6661 756c 7420 2831 206d 6567 6162 7974 fault (1 megabyt │ │ │ │ +00009520: 6529 0a3b 6368 6563 6b42 6c6f 636b 7342 e).;checkBlocksB │ │ │ │ +00009530: 533d 0a0a 2320 6966 2073 6574 2c20 7468 S=..# if set, th │ │ │ │ +00009540: 6520 626c 6f63 6b73 2067 656e 6572 6174 e blocks generat │ │ │ │ +00009550: 6564 2064 7565 2074 6f20 6368 6563 6b42 ed due to checkB │ │ │ │ +00009560: 6c6f 636b 7353 7566 6669 7820 6172 6520 locksSuffix are │ │ │ │ +00009570: 636f 6d70 7265 7373 6564 0a23 2050 6f73 compressed.# Pos │ │ │ │ +00009580: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are │ │ │ │ +00009590: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'. │ │ │ │ +000095a0: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no' │ │ │ │ +000095b0: 0a3b 6368 6563 6b42 6c6f 636b 7343 6f6d .;checkBlocksCom │ │ │ │ +000095c0: 7072 3d0a 0a23 206c 656e 6774 6820 6f66 pr=..# length of │ │ │ │ +000095d0: 2071 7565 7565 2074 6f20 7374 6f72 6520 queue to store │ │ │ │ +000095e0: 6669 6c65 7320 6265 666f 7265 2062 6c6f files before blo │ │ │ │ +000095f0: 636b 2063 6865 636b 696e 672c 0a23 2064 ck checking,.# d │ │ │ │ +00009600: 6566 6175 6c74 203d 2024 7175 6575 6542 efault = $queueB │ │ │ │ +00009610: 6c6f 636b 0a3b 7175 6575 6542 6c6f 636b lock.;queueBlock │ │ │ │ +00009620: 3d0a 0a24 626c 6f63 6b52 756c 6573 4865 =..$blockRulesHe │ │ │ │ +00009630: 6c70 0a24 626c 6f63 6b44 6576 6963 6548 lp.$blockDeviceH │ │ │ │ +00009640: 656c 700a 2320 7772 6974 6520 7465 6d70 elp.# write temp │ │ │ │ +00009650: 6f72 6172 7920 6462 6d20 6669 6c65 7320 orary dbm files │ │ │ │ +00009660: 696e 202d 2d74 6d70 6469 720a 2320 7573 in --tmpdir.# us │ │ │ │ +00009670: 6520 7468 6973 2069 6620 796f 7520 6861 e this if you ha │ │ │ │ +00009680: 7665 206e 6f74 2065 6e6f 7567 6820 5241 ve not enough RA │ │ │ │ +00009690: 4d2c 2064 6566 6175 6c74 2069 7320 6e6f M, default is no │ │ │ │ +000096a0: 0a3b 7361 7665 5241 4d3d 0a0a 2320 636f .;saveRAM=..# co │ │ │ │ +000096b0: 6d70 7265 7373 2063 6f6d 6d61 6e64 2028 mpress command ( │ │ │ │ +000096c0: 7769 7468 206f 7074 696f 6e73 292c 2064 with options), d │ │ │ │ +000096d0: 6566 6175 6c74 2069 7320 3c40 636f 6d70 efault is <@comp │ │ │ │ +000096e0: 7265 7373 3e0a 3b63 6f6d 7072 6573 733d ress>.;compress= │ │ │ │ +000096f0: 0a0a 2320 756e 636f 6d70 7265 7373 2063 ..# uncompress c │ │ │ │ +00009700: 6f6d 6d61 6e64 2028 7769 7468 206f 7074 ommand (with opt │ │ │ │ +00009710: 696f 6e73 292c 2064 6566 6175 6c74 2069 ions), default i │ │ │ │ +00009720: 7320 3c40 756e 636f 6d70 7265 7373 3e0a s <@uncompress>. │ │ │ │ +00009730: 3b75 6e63 6f6d 7072 6573 733d 0a0a 2320 ;uncompress=..# │ │ │ │ +00009740: 706f 7374 6669 7820 746f 2061 6464 2061 postfix to add a │ │ │ │ +00009750: 6674 6572 2063 6f6d 7072 6573 7369 6f6e fter compression │ │ │ │ +00009760: 2c20 6465 6661 756c 7420 6973 203c 2470 , default is <$p │ │ │ │ +00009770: 6f73 7466 6978 3e0a 3b70 6f73 7466 6978 ostfix>.;postfix │ │ │ │ +00009780: 3d0a 0a23 2064 6f20 6e6f 7420 636f 6d70 =..# do not comp │ │ │ │ +00009790: 7265 7373 2066 696c 6573 2077 6974 6820 ress files with │ │ │ │ +000097a0: 7468 6520 666f 6c6c 6f77 696e 670a 2320 the following.# │ │ │ │ +000097b0: 7375 6666 6978 2028 7570 7065 7263 6173 suffix (uppercas │ │ │ │ +000097c0: 6520 696e 636c 7564 6564 293a 0a23 2028 e included):.# ( │ │ │ │ +000097d0: 6966 2079 6f75 2073 6574 2074 6869 7320 if you set this │ │ │ │ +000097e0: 746f 2027 2e2a 272c 206e 6f20 6669 6c65 to '.*', no file │ │ │ │ +000097f0: 7320 7769 6c6c 2062 6520 636f 6d70 7265 s will be compre │ │ │ │ +00009800: 7373 6564 290a 2320 4465 6661 756c 7420 ssed).# Default │ │ │ │ +00009810: 6973 2040 6578 6365 7074 5375 6666 6978 is @exceptSuffix │ │ │ │ +00009820: 0a3b 6578 6365 7074 5375 6666 6978 3d0a .;exceptSuffix=. │ │ │ │ +00009830: 0a23 206c 696b 6520 2d2d 6578 6365 7074 .# like --except │ │ │ │ +00009840: 5375 6666 6978 2c20 6275 7420 646f 206e Suffix, but do n │ │ │ │ +00009850: 6f74 2072 6570 6c61 6365 2064 6566 6175 ot replace defau │ │ │ │ +00009860: 6c74 732c 2061 6464 0a3b 6164 6445 7863 lts, add.;addExc │ │ │ │ +00009870: 6570 7453 7566 6669 783d 0a0a 2320 4669 eptSuffix=..# Fi │ │ │ │ +00009880: 6c65 7320 736d 616c 6c65 7220 7468 616e les smaller than │ │ │ │ +00009890: 2074 6869 7320 7369 7a65 2077 696c 6c20 this size will │ │ │ │ +000098a0: 6e65 7665 7220 6265 2063 6f6d 7072 6573 never be compres │ │ │ │ +000098b0: 7365 6420 6275 7420 616c 7761 7973 0a23 sed but always.# │ │ │ │ +000098c0: 2063 6f70 6965 642e 2044 6566 6175 6c74 copied. Default │ │ │ │ +000098d0: 2069 7320 246d 696e 436f 6d70 7265 7373 is $minCompress │ │ │ │ +000098e0: 5369 7a65 0a3b 6d69 6e43 6f6d 7072 6573 Size.;minCompres │ │ │ │ +000098f0: 7353 697a 653d 0a0a 2320 616c 7465 726e sSize=..# altern │ │ │ │ +00009900: 6174 6976 6520 746f 2065 7863 6570 7453 ative to exceptS │ │ │ │ +00009910: 7566 6669 7820 616e 6420 6d69 6e43 6f6d uffix and minCom │ │ │ │ +00009920: 7072 6573 7353 697a 653a 0a23 2064 6566 pressSize:.# def │ │ │ │ +00009930: 696e 6974 696f 6e20 6f66 2061 2072 756c inition of a rul │ │ │ │ +00009940: 6520 7768 6963 6820 6669 6c65 7320 7769 e which files wi │ │ │ │ +00009950: 6c6c 2062 6520 636f 6d70 7265 7373 6564 ll be compressed │ │ │ │ +00009960: 0a23 2049 6620 7468 6973 2072 756c 6520 .# If this rule │ │ │ │ +00009970: 6973 2073 6574 2c20 6578 6365 7074 5375 is set, exceptSu │ │ │ │ +00009980: 6666 6978 2c20 6164 6445 7863 6570 7453 ffix, addExceptS │ │ │ │ +00009990: 7566 6669 780a 2320 616e 6420 6d69 6e43 uffix.# and minC │ │ │ │ +000099a0: 6f6d 7072 6573 7353 697a 6520 6172 6520 ompressSize are │ │ │ │ +000099b0: 6967 6e6f 7265 642e 0a23 2044 6566 6175 ignored..# Defau │ │ │ │ +000099c0: 6c74 2072 756c 6520 6765 6e65 7261 7465 lt rule generate │ │ │ │ +000099d0: 6420 6672 6f6d 2074 6865 206f 7074 696f d from the optio │ │ │ │ +000099e0: 6e73 2061 626f 7665 2069 733a 0a23 2063 ns above is:.# c │ │ │ │ +000099f0: 6f6d 7072 5275 6c65 203d 2027 5c24 7369 omprRule = '\$si │ │ │ │ +00009a00: 7a65 203e 2031 3032 3427 2061 6e64 206e ze > 1024' and n │ │ │ │ +00009a10: 6f74 0a23 2020 2027 5c24 6669 6c65 203d ot.# '\$file = │ │ │ │ +00009a20: 7e20 2f5c 2e7a 6970 5c5c 5a7c 5c2e 627a ~ /\.zip\\Z|\.bz │ │ │ │ +00009a30: 325c 5c5a 7c5c 2e67 7a5c 5c5a 7c5c 2e74 2\\Z|\.gz\\Z|\.t │ │ │ │ +00009a40: 677a 5c5c 5a7c 5c2e 6a70 675c 5c5a 7c5c gz\\Z|\.jpg\\Z|\ │ │ │ │ +00009a50: 2e67 6966 5c5c 5a7c 5c2e 7469 6666 5c5c .gif\\Z|\.tiff\\ │ │ │ │ +00009a60: 5a7c 5c2e 7469 665c 5c5a 7c5c 2e6d 7065 Z|\.tif\\Z|\.mpe │ │ │ │ +00009a70: 675c 5c5a 7c5c 2e6d 7067 5c5c 5a7c 5c2e g\\Z|\.mpg\\Z|\. │ │ │ │ +00009a80: 6d70 335c 5c5a 7c5c 2e6f 6767 5c5c 5a7c mp3\\Z|\.ogg\\Z| │ │ │ │ +00009a90: 5c2e 6770 675c 5c5a 7c5c 2e70 6e67 5c5c \.gpg\\Z|\.png\\ │ │ │ │ +00009aa0: 5a2f 6927 0a3b 636f 6d70 7252 756c 653d Z/i'.;comprRule= │ │ │ │ +00009ab0: 0a0a 2320 6d61 7869 6d61 6c20 6e75 6d62 ..# maximal numb │ │ │ │ +00009ac0: 6572 206f 6620 7061 7261 6c6c 656c 2063 er of parallel c │ │ │ │ +00009ad0: 6f6d 7072 6573 7320 6f70 6572 6174 696f ompress operatio │ │ │ │ +00009ae0: 6e73 2c0a 2320 6465 6661 756c 7420 3d20 ns,.# default = │ │ │ │ +00009af0: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic │ │ │ │ +00009b00: 616c 6c79 0a3b 6e6f 436f 6d70 7265 7373 ally.;noCompress │ │ │ │ +00009b10: 3d0a 0a23 206c 656e 6774 6820 6f66 2071 =..# length of q │ │ │ │ +00009b20: 7565 7565 2074 6f20 7374 6f72 6520 6669 ueue to store fi │ │ │ │ +00009b30: 6c65 7320 6265 666f 7265 2063 6f6d 7072 les before compr │ │ │ │ +00009b40: 6573 7369 6f6e 2c0a 2320 6465 6661 756c ession,.# defaul │ │ │ │ +00009b50: 7420 3d20 2471 7565 7565 436f 6d70 7265 t = $queueCompre │ │ │ │ +00009b60: 7373 0a3b 7175 6575 6543 6f6d 7072 6573 ss.;queueCompres │ │ │ │ +00009b70: 733d 0a0a 2320 6d61 7869 6d61 6c20 6e75 s=..# maximal nu │ │ │ │ +00009b80: 6d62 6572 206f 6620 7061 7261 6c6c 656c mber of parallel │ │ │ │ +00009b90: 2063 6f70 7920 6f70 6572 6174 696f 6e73 copy operations │ │ │ │ +00009ba0: 2c0a 2320 6465 6661 756c 7420 3d20 246e ,.# default = $n │ │ │ │ +00009bb0: 6f43 6f70 790a 3b6e 6f43 6f70 793d 0a0a oCopy.;noCopy=.. │ │ │ │ +00009bc0: 2320 6c65 6e67 7468 206f 6620 7175 6575 # length of queu │ │ │ │ +00009bd0: 6520 746f 2073 746f 7265 2066 696c 6573 e to store files │ │ │ │ +00009be0: 2062 6566 6f72 6520 636f 7079 696e 672c before copying, │ │ │ │ +00009bf0: 0a23 2064 6566 6175 6c74 203d 2024 7175 .# default = $qu │ │ │ │ +00009c00: 6575 6543 6f70 790a 3b71 7565 7565 436f eueCopy.;queueCo │ │ │ │ +00009c10: 7079 3d0a 0a23 2077 7269 7465 2073 7461 py=..# write sta │ │ │ │ +00009c20: 7469 7374 6963 7320 6162 6f75 7420 7573 tistics about us │ │ │ │ +00009c30: 6564 2073 7061 6365 2069 6e20 6c6f 6720 ed space in log │ │ │ │ +00009c40: 6669 6c65 0a23 2064 6566 6175 6c74 2069 file.# default i │ │ │ │ +00009c50: 7320 276e 6f27 0a3b 7769 7468 5573 6572 s 'no'.;withUser │ │ │ │ +00009c60: 4772 6f75 7053 7461 743d 0a0a 2320 7772 GroupStat=..# wr │ │ │ │ +00009c70: 6974 6520 7374 6174 6973 7469 6373 2061 ite statistics a │ │ │ │ +00009c80: 626f 7574 2075 7365 6420 7370 6163 6520 bout used space │ │ │ │ +00009c90: 696e 206e 616d 6520 6669 6c65 0a23 0909 in name file.#.. │ │ │ │ +00009ca0: 2020 2020 7769 6c6c 2062 6520 6f76 6572 will be over │ │ │ │ +00009cb0: 7269 6464 656e 2065 6163 6820 7469 6d65 ridden each time │ │ │ │ +00009cc0: 0a23 2069 6620 6e6f 2066 696c 6520 6e61 .# if no file na │ │ │ │ +00009cd0: 6d65 2069 7320 6769 7665 6e2c 206e 6f74 me is given, not │ │ │ │ +00009ce0: 6869 6e67 2077 696c 6c20 6265 2077 7269 hing will be wri │ │ │ │ +00009cf0: 7474 656e 0a23 2066 6f72 6d61 7420 6973 tten.# format is │ │ │ │ +00009d00: 3a0a 2320 6964 656e 7469 6669 6572 2075 :.# identifier u │ │ │ │ +00009d10: 6964 2075 7365 724e 616d 6520 7661 6c75 id userName valu │ │ │ │ +00009d20: 650a 2320 6964 656e 7469 6669 6572 2067 e.# identifier g │ │ │ │ +00009d30: 6964 2067 726f 7570 4e61 6d65 2076 616c id groupName val │ │ │ │ +00009d40: 7565 0a3b 7573 6572 4772 6f75 7053 7461 ue.;userGroupSta │ │ │ │ +00009d50: 7446 696c 653d 0a0a 2320 6465 6661 756c tFile=..# defaul │ │ │ │ +00009d60: 7420 6973 2027 6e6f 272c 2069 6620 796f t is 'no', if yo │ │ │ │ +00009d70: 7520 646f 206e 6f74 2077 616e 7420 746f u do not want to │ │ │ │ +00009d80: 2063 6f6d 7072 6573 732c 2073 6179 2027 compress, say ' │ │ │ │ +00009d90: 7965 7327 0a3b 646f 4e6f 7443 6f6d 7072 yes'.;doNotCompr │ │ │ │ +00009da0: 6573 734d 4435 4669 6c65 3d0a 0a23 2070 essMD5File=..# p │ │ │ │ +00009db0: 6572 6d69 7373 696f 6e73 206f 6620 2e6d ermissions of .m │ │ │ │ +00009dc0: 6435 6368 6563 6b53 756d 4669 6c65 2c20 d5checkSumFile, │ │ │ │ +00009dd0: 6465 6661 756c 7420 6973 2024 6368 6d6f default is $chmo │ │ │ │ +00009de0: 644d 4435 4669 6c65 0a3b 6368 6d6f 644d dMD5File.;chmodM │ │ │ │ +00009df0: 4435 4669 6c65 3d0a 0a23 2076 6572 626f D5File=..# verbo │ │ │ │ +00009e00: 7365 206d 6573 7361 6765 732c 2061 626f se messages, abo │ │ │ │ +00009e10: 7574 2065 7863 6570 7452 756c 6520 616e ut exceptRule an │ │ │ │ +00009e20: 6420 696e 636c 7564 6552 756c 650a 2320 d includeRule.# │ │ │ │ +00009e30: 616e 6420 6164 6465 6420 6669 6c65 732e and added files. │ │ │ │ +00009e40: 2064 6566 6175 6c74 2069 7320 276e 6f27 default is 'no' │ │ │ │ +00009e50: 0a3b 7665 7262 6f73 653d 0a0a 2320 6765 .;verbose=..# ge │ │ │ │ +00009e60: 6e65 7261 7465 2064 6562 7567 206d 6573 nerate debug mes │ │ │ │ +00009e70: 7361 6765 732c 206c 6576 656c 7320 6172 sages, levels ar │ │ │ │ +00009e80: 6520 3020 286e 6f6e 652c 2064 6566 6175 e 0 (none, defau │ │ │ │ +00009e90: 6c74 292c 0a23 2031 2028 736f 6d65 292c lt),.# 1 (some), │ │ │ │ +00009ea0: 2032 2028 6d61 6e79 2920 6d65 7373 6167 2 (many) messag │ │ │ │ +00009eb0: 6573 0a3b 6465 6275 673d 0a0a 2320 7265 es.;debug=..# re │ │ │ │ +00009ec0: 7365 7420 6163 6365 7373 2074 696d 6520 set access time │ │ │ │ +00009ed0: 696e 2074 6865 2073 6f75 7263 6520 6469 in the source di │ │ │ │ +00009ee0: 7265 6374 6f72 7920 2d20 6275 7420 7468 rectory - but th │ │ │ │ +00009ef0: 6973 2077 696c 6c0a 2320 6368 616e 6765 is will.# change │ │ │ │ +00009f00: 2063 7469 6d65 2028 7469 6d65 206f 6620 ctime (time of │ │ │ │ +00009f10: 6c61 7374 206d 6f64 6966 6963 6174 696f last modificatio │ │ │ │ +00009f20: 6e20 6f66 2066 696c 6520 7374 6174 7573 n of file status │ │ │ │ +00009f30: 0a23 2069 6e66 6f72 6d61 7469 6f6e 0a23 .# information.# │ │ │ │ +00009f40: 2064 6566 6175 6c74 2069 7320 276e 6f27 default is 'no' │ │ │ │ +00009f50: 2c20 6966 2079 6f75 2077 616e 7420 7468 , if you want th │ │ │ │ +00009f60: 6973 2c20 7361 7920 2779 6573 270a 3b72 is, say 'yes'.;r │ │ │ │ +00009f70: 6573 6574 4174 696d 653d 0a0a 2320 646f esetAtime=..# do │ │ │ │ +00009f80: 206e 6f74 2064 656c 6574 6520 616e 7920 not delete any │ │ │ │ +00009f90: 6f6c 6420 6261 636b 7570 2028 652e 672e old backup (e.g. │ │ │ │ +00009fa0: 2073 7065 6369 6669 6564 2076 6961 202d specified via - │ │ │ │ +00009fb0: 2d6b 6565 7041 6c6c 206f 720a 2320 2d2d -keepAll or.# -- │ │ │ │ +00009fc0: 6b65 6570 5765 656b 6461 7929 2062 7574 keepWeekday) but │ │ │ │ +00009fd0: 2070 7269 6e74 2061 206d 6573 7361 6765 print a message │ │ │ │ +00009fe0: 2e20 5468 6973 2069 7320 666f 7220 7465 . This is for te │ │ │ │ +00009ff0: 7374 696e 6720 636f 6e66 6967 7572 6174 sting configurat │ │ │ │ +0000a000: 6f6e 730a 2320 6f72 2069 6620 796f 7520 ons.# or if you │ │ │ │ +0000a010: 7761 6e74 2074 6f20 6465 6c65 7465 206f want to delete o │ │ │ │ +0000a020: 6c64 2062 6163 6b75 7073 2077 6974 6820 ld backups with │ │ │ │ +0000a030: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p │ │ │ │ +0000a040: 6c2e 0a23 2056 616c 7565 7320 6172 6520 l..# Values are │ │ │ │ +0000a050: 2779 6573 2720 616e 6420 276e 6f27 2e20 'yes' and 'no'. │ │ │ │ +0000a060: 4465 6661 756c 7420 6973 2027 6e6f 2720 Default is 'no' │ │ │ │ +0000a070: 7768 6963 6820 6d65 616e 7320 746f 2064 which means to d │ │ │ │ +0000a080: 656c 6574 652e 0a3b 646f 4e6f 7444 656c elete..;doNotDel │ │ │ │ +0000a090: 6574 653d 0a0a 2320 6465 6c65 7465 206f ete=..# delete o │ │ │ │ +0000a0a0: 6c64 2062 6163 6b75 7073 2077 6869 6368 ld backups which │ │ │ │ +0000a0b0: 2068 6176 6520 6e6f 7420 6265 656e 2066 have not been f │ │ │ │ +0000a0c0: 696e 6973 6865 640a 2320 7468 6973 2077 inished.# this w │ │ │ │ +0000a0d0: 696c 6c20 6e6f 7420 6861 7070 656e 2069 ill not happen i │ │ │ │ +0000a0e0: 6620 646f 4e6f 7444 656c 6574 6520 6973 f doNotDelete is │ │ │ │ +0000a0f0: 2073 6574 0a23 2056 616c 7565 7320 6172 set.# Values ar │ │ │ │ +0000a100: 6520 2779 6573 2720 616e 6420 276e 6f27 e 'yes' and 'no' │ │ │ │ +0000a110: 2e20 4465 6661 756c 7420 6973 2027 6e6f . Default is 'no │ │ │ │ +0000a120: 2720 7768 6963 6820 6d65 616e 7320 746f ' which means to │ │ │ │ +0000a130: 2064 656c 6574 652e 0a3b 6465 6c65 7465 delete..;delete │ │ │ │ +0000a140: 4e6f 7446 696e 6973 6865 6444 6972 733d NotFinishedDirs= │ │ │ │ +0000a150: 0a0a 2320 6b65 6570 2062 6163 6b75 7073 ..# keep backups │ │ │ │ +0000a160: 2077 6869 6368 2061 7265 206e 6f74 206f which are not o │ │ │ │ +0000a170: 6c64 6572 2074 6861 6e20 7468 6520 7370 lder than the sp │ │ │ │ +0000a180: 6563 6966 6965 6420 616d 6f75 6e74 0a23 ecified amount.# │ │ │ │ +0000a190: 206f 6620 7469 6d65 2e20 5468 6973 2069 of time. This i │ │ │ │ +0000a1a0: 7320 6c69 6b65 2061 2064 6566 6175 6c74 s like a default │ │ │ │ +0000a1b0: 2076 616c 7565 2066 6f72 2061 6c6c 2064 value for all d │ │ │ │ +0000a1c0: 6179 7320 696e 0a23 202d 2d6b 6565 7057 ays in.# --keepW │ │ │ │ +0000a1d0: 6565 6b64 6179 2e20 4265 6769 6e73 2064 eekday. Begins d │ │ │ │ +0000a1e0: 656c 6574 696e 6720 6174 2074 6865 2065 eleting at the e │ │ │ │ +0000a1f0: 6e64 206f 6620 7468 6520 7363 7269 7074 nd of the script │ │ │ │ +0000a200: 0a23 2074 6865 2074 696d 6520 7261 6e67 .# the time rang │ │ │ │ +0000a210: 6520 6861 7320 746f 2062 6520 7370 6563 e has to be spec │ │ │ │ +0000a220: 6966 6965 6420 696e 2066 6f72 6d61 7420 ified in format │ │ │ │ +0000a230: 2764 686d 7327 2c20 652e 672e 0a23 2031 'dhms', e.g..# 1 │ │ │ │ +0000a240: 3064 3468 206d 6561 6e73 2031 3020 6461 0d4h means 10 da │ │ │ │ +0000a250: 7973 2061 6e64 2034 2068 6f75 7273 0a23 ys and 4 hours.# │ │ │ │ +0000a260: 2064 6566 6175 6c74 203d 2024 6b65 6570 default = $keep │ │ │ │ +0000a270: 416c 6c3b 0a23 2041 6e20 6172 6368 6976 All;.# An archiv │ │ │ │ +0000a280: 6520 666c 6167 2069 7320 6e6f 7420 706f e flag is not po │ │ │ │ +0000a290: 7373 6962 6c65 2077 6974 6820 7468 6973 ssible with this │ │ │ │ +0000a2a0: 2070 6172 616d 6574 6572 2028 7365 6520 parameter (see │ │ │ │ +0000a2b0: 6265 6c6f 7729 2e0a 3b6b 6565 7041 6c6c below)..;keepAll │ │ │ │ +0000a2c0: 3d0a 0a23 206b 6565 7020 6261 636b 7570 =..# keep backup │ │ │ │ +0000a2d0: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif │ │ │ │ +0000a2e0: 6965 6420 6461 7973 2066 6f72 2074 6865 ied days for the │ │ │ │ +0000a2f0: 2073 7065 6369 6669 6564 0a23 2061 6d6f specified.# amo │ │ │ │ +0000a300: 756e 7420 6f66 2074 696d 652e 204f 7665 unt of time. Ove │ │ │ │ +0000a310: 7277 7269 7465 7320 7468 6520 6465 6661 rwrites the defa │ │ │ │ +0000a320: 756c 7420 7661 6c75 6573 2063 686f 7365 ult values chose │ │ │ │ +0000a330: 6e20 696e 0a23 202d 2d6b 6565 7041 6c6c n in.# --keepAll │ │ │ │ +0000a340: 2e20 274d 6f6e 2c57 6564 3a34 3064 2053 . 'Mon,Wed:40d S │ │ │ │ +0000a350: 6174 3a36 3064 3130 6d27 206d 6561 6e73 at:60d10m' means │ │ │ │ +0000a360: 3a0a 2320 6b65 6570 2062 6163 6b75 7073 :.# keep backups │ │ │ │ +0000a370: 2066 726f 6d20 4d6f 6e20 616e 6420 5765 from Mon and We │ │ │ │ +0000a380: 6420 3430 6461 7973 202b 2035 6d69 6e73 d 40days + 5mins │ │ │ │ +0000a390: 0a23 206b 6565 7020 6261 636b 7570 7320 .# keep backups │ │ │ │ +0000a3a0: 6672 6f6d 2053 6174 2036 3064 6179 7320 from Sat 60days │ │ │ │ +0000a3b0: 2b20 3130 6d69 6e73 0a23 206b 6565 7020 + 10mins.# keep │ │ │ │ +0000a3c0: 6261 636b 7570 7320 6672 6f6d 2074 6865 backups from the │ │ │ │ +0000a3d0: 2072 6573 7420 6f66 2074 6865 2064 6179 rest of the day │ │ │ │ +0000a3e0: 7320 6c69 6b65 2073 7063 6966 6965 6420 s like spcified │ │ │ │ +0000a3f0: 696e 0a23 202d 2d6b 6565 7041 6c6c 2028 in.# --keepAll ( │ │ │ │ +0000a400: 6465 6661 756c 7420 246b 6565 7041 6c6c default $keepAll │ │ │ │ +0000a410: 290a 2320 796f 7520 6361 6e20 616c 736f ).# you can also │ │ │ │ +0000a420: 2073 6574 2074 6865 2027 6172 6368 6976 set the 'archiv │ │ │ │ +0000a430: 6520 666c 6167 272e 0a23 2027 4d6f 6e2c e flag'..# 'Mon, │ │ │ │ +0000a440: 5765 643a 6134 3064 356d 2053 6174 3a36 Wed:a40d5m Sat:6 │ │ │ │ +0000a450: 3064 3130 6d27 206d 6561 6e73 3a0a 2320 0d10m' means:.# │ │ │ │ +0000a460: 6b65 6570 2062 6163 6b75 7073 2066 726f keep backups fro │ │ │ │ +0000a470: 6d20 4d6f 6e20 616e 6420 5765 6420 3430 m Mon and Wed 40 │ │ │ │ +0000a480: 6461 7973 202b 2035 6d69 6e73 202b 2027 days + 5mins + ' │ │ │ │ +0000a490: 6172 6368 6976 6527 0a23 206b 6565 7020 archive'.# keep │ │ │ │ +0000a4a0: 6261 636b 7570 7320 6672 6f6d 2053 6174 backups from Sat │ │ │ │ +0000a4b0: 2036 3064 6179 7320 2b20 3130 6d69 6e73 60days + 10mins │ │ │ │ +0000a4c0: 0a23 206b 6565 7020 6261 636b 7570 7320 .# keep backups │ │ │ │ +0000a4d0: 6672 6f6d 2074 6865 2072 6573 7420 6f66 from the rest of │ │ │ │ +0000a4e0: 2074 6865 2064 6179 7320 6c69 6b65 2073 the days like s │ │ │ │ +0000a4f0: 7065 6369 6669 6564 2069 6e0a 2320 2d2d pecified in.# -- │ │ │ │ +0000a500: 6b65 6570 416c 6c20 2864 6566 6175 6c74 keepAll (default │ │ │ │ +0000a510: 2024 6b65 6570 416c 6c29 0a23 2049 6620 $keepAll).# If │ │ │ │ +0000a520: 796f 7520 616c 736f 2075 7365 2074 6865 you also use the │ │ │ │ +0000a530: 2027 6172 6368 6976 6520 666c 6167 2720 'archive flag' │ │ │ │ +0000a540: 6974 206d 6561 6e73 2074 6f20 6e6f 740a it means to not. │ │ │ │ +0000a550: 2320 6465 6c65 7465 2074 6865 2061 6666 # delete the aff │ │ │ │ +0000a560: 6563 7465 6420 6469 7265 6374 6f72 6965 ected directorie │ │ │ │ +0000a570: 7320 7669 6120 2d2d 6b65 6570 4d61 784e s via --keepMaxN │ │ │ │ +0000a580: 756d 6265 723a 0a23 2061 3130 6434 6820 umber:.# a10d4h │ │ │ │ +0000a590: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an │ │ │ │ +0000a5a0: 6420 3420 686f 7572 7320 616e 6420 2761 d 4 hours and 'a │ │ │ │ +0000a5b0: 7263 6869 7665 2066 6c61 6727 0a3b 6b65 rchive flag'.;ke │ │ │ │ +0000a5c0: 6570 5765 656b 6461 793d 0a0a 2320 646f epWeekday=..# do │ │ │ │ +0000a5d0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the │ │ │ │ +0000a5e0: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of │ │ │ │ +0000a5f0: 6120 7965 6172 0a23 2066 6f72 6d61 7420 a year.# format │ │ │ │ +0000a600: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi │ │ │ │ +0000a610: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc │ │ │ │ +0000a620: 6869 7665 2066 6c61 6727 0a3b 6b65 6570 hive flag'.;keep │ │ │ │ +0000a630: 4669 7273 744f 6659 6561 723d 0a0a 2320 FirstOfYear=..# │ │ │ │ +0000a640: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th │ │ │ │ +0000a650: 6520 6c61 7374 2062 6163 6b75 7020 6f66 e last backup of │ │ │ │ +0000a660: 2061 2079 6561 720a 2320 666f 726d 6174 a year.# format │ │ │ │ +0000a670: 2069 7320 7469 6d65 5065 7269 6f64 2077 is timePeriod w │ │ │ │ +0000a680: 6974 6820 706f 7373 6962 6c65 2027 6172 ith possible 'ar │ │ │ │ +0000a690: 6368 6976 6520 666c 6167 270a 3b6b 6565 chive flag'.;kee │ │ │ │ +0000a6a0: 704c 6173 744f 6659 6561 723d 0a0a 2320 pLastOfYear=..# │ │ │ │ +0000a6b0: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th │ │ │ │ +0000a6c0: 6520 6669 7273 7420 6261 636b 7570 206f e first backup o │ │ │ │ +0000a6d0: 6620 6120 6d6f 6e74 680a 2320 666f 726d f a month.# form │ │ │ │ +0000a6e0: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod │ │ │ │ +0000a6f0: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible ' │ │ │ │ +0000a700: 6172 6368 6976 6520 666c 6167 270a 3b6b archive flag'.;k │ │ │ │ +0000a710: 6565 7046 6972 7374 4f66 4d6f 6e74 683d eepFirstOfMonth= │ │ │ │ +0000a720: 0a0a 2320 646f 206e 6f74 2064 656c 6574 ..# do not delet │ │ │ │ +0000a730: 6520 7468 6520 6c61 7374 2062 6163 6b75 e the last backu │ │ │ │ +0000a740: 7020 6f66 2061 206d 6f6e 7468 0a23 2066 p of a month.# f │ │ │ │ +0000a750: 6f72 6d61 7420 6973 2074 696d 6550 6572 ormat is timePer │ │ │ │ +0000a760: 696f 6420 7769 7468 2070 6f73 7369 626c iod with possibl │ │ │ │ +0000a770: 6520 2761 7263 6869 7665 2066 6c61 6727 e 'archive flag' │ │ │ │ +0000a780: 0a3b 6b65 6570 4c61 7374 4f66 4d6f 6e74 .;keepLastOfMont │ │ │ │ +0000a790: 683d 0a0a 2320 6465 6661 756c 743a 2027 h=..# default: ' │ │ │ │ +0000a7a0: 5375 6e27 2e20 5468 6973 2076 616c 7565 Sun'. This value │ │ │ │ +0000a7b0: 2069 7320 7573 6564 2066 6f72 2063 616c is used for cal │ │ │ │ +0000a7c0: 6375 6c61 7469 6e67 0a23 202d 2d6b 6565 culating.# --kee │ │ │ │ +0000a7d0: 7046 6972 7374 4f66 5765 656b 2061 6e64 pFirstOfWeek and │ │ │ │ +0000a7e0: 202d 2d6b 6565 704c 6173 744f 6657 6565 --keepLastOfWee │ │ │ │ +0000a7f0: 6b0a 3b66 6972 7374 4461 794f 6657 6565 k.;firstDayOfWee │ │ │ │ +0000a800: 6b3d 0a0a 2320 646f 206e 6f74 2064 656c k=..# do not del │ │ │ │ +0000a810: 6574 6520 7468 6520 6669 7273 7420 6261 ete the first ba │ │ │ │ +0000a820: 636b 7570 206f 6620 6120 7765 656b 0a23 ckup of a week.# │ │ │ │ +0000a830: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP │ │ │ │ +0000a840: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi │ │ │ │ +0000a850: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla │ │ │ │ +0000a860: 6727 0a3b 6b65 6570 4669 7273 744f 6657 g'.;keepFirstOfW │ │ │ │ +0000a870: 6565 6b3d 0a0a 2320 646f 206e 6f74 2064 eek=..# do not d │ │ │ │ +0000a880: 656c 6574 6520 7468 6520 6c61 7374 2062 elete the last b │ │ │ │ +0000a890: 6163 6b75 7020 6f66 2061 2077 6565 6b0a ackup of a week. │ │ │ │ +0000a8a0: 2320 666f 726d 6174 2069 7320 7469 6d65 # format is time │ │ │ │ +0000a8b0: 5065 7269 6f64 2077 6974 6820 706f 7373 Period with poss │ │ │ │ +0000a8c0: 6962 6c65 2027 6172 6368 6976 6520 666c ible 'archive fl │ │ │ │ +0000a8d0: 6167 270a 3b6b 6565 704c 6173 744f 6657 ag'.;keepLastOfW │ │ │ │ +0000a8e0: 6565 6b3d 0a0a 2320 6b65 6570 206d 756c eek=..# keep mul │ │ │ │ +0000a8f0: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of │ │ │ │ +0000a900: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t │ │ │ │ +0000a910: 696d 6550 6572 696f 640a 2320 666f 726d imePeriod.# form │ │ │ │ +0000a920: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod │ │ │ │ +0000a930: 2c20 2761 7263 6869 7665 2066 6c61 6727 , 'archive flag' │ │ │ │ +0000a940: 2069 7320 6e6f 7420 706f 7373 6962 6c65 is not possible │ │ │ │ +0000a950: 0a23 2064 6566 6175 6c74 2069 7320 246b .# default is $k │ │ │ │ +0000a960: 6565 7044 7570 6c69 6361 7465 0a3b 6b65 eepDuplicate.;ke │ │ │ │ +0000a970: 6570 4475 706c 6963 6174 653d 0a0a 2320 epDuplicate=..# │ │ │ │ +0000a980: 4b65 6570 2074 6861 7420 6d69 6d69 6e75 Keep that miminu │ │ │ │ +0000a990: 6d20 6f66 2062 6163 6b75 7073 2e20 4d75 m of backups. Mu │ │ │ │ +0000a9a0: 6c74 6970 6c65 2062 6163 6b75 7073 206f ltiple backups o │ │ │ │ +0000a9b0: 6620 6f6e 650a 2320 6461 7920 6172 6520 f one.# day are │ │ │ │ +0000a9c0: 636f 756e 7465 6420 6173 206f 6e65 2062 counted as one b │ │ │ │ +0000a9d0: 6163 6b75 702e 2044 6566 6175 6c74 2069 ackup. Default i │ │ │ │ +0000a9e0: 7320 3130 2e0a 3b6b 6565 704d 696e 4e75 s 10..;keepMinNu │ │ │ │ +0000a9f0: 6d62 6572 3d0a 0a23 2054 7279 2074 6f20 mber=..# Try to │ │ │ │ +0000aa00: 6b65 6570 206f 6e6c 7920 7468 6174 206d keep only that m │ │ │ │ +0000aa10: 6178 696d 756d 206f 6620 6261 636b 7570 aximum of backup │ │ │ │ +0000aa20: 732e 2049 6620 796f 7520 6861 7665 206d s. If you have m │ │ │ │ +0000aa30: 6f72 650a 2320 6261 636b 7570 732c 2074 ore.# backups, t │ │ │ │ +0000aa40: 6865 2066 6f6c 6c6f 7769 6e67 2073 6571 he following seq │ │ │ │ +0000aa50: 7565 6e63 6520 6f66 2064 656c 6574 696e uence of deletin │ │ │ │ +0000aa60: 6720 7769 6c6c 2068 6170 7065 6e3a 0a23 g will happen:.# │ │ │ │ +0000aa70: 202d 2064 656c 6574 6520 616c 6c20 6475 - delete all du │ │ │ │ +0000aa80: 706c 6963 6174 6573 206f 6620 6120 6461 plicates of a da │ │ │ │ +0000aa90: 792c 2062 6567 696e 6e69 6e67 2077 6974 y, beginning wit │ │ │ │ +0000aaa0: 6820 7468 6520 6f6c 640a 2320 2020 6f6e h the old.# on │ │ │ │ +0000aab0: 6365 2c20 6578 6365 7074 2074 6865 206f ce, except the o │ │ │ │ +0000aac0: 6c64 6573 7420 6f66 2065 7665 7279 2064 ldest of every d │ │ │ │ +0000aad0: 6179 0a23 202d 2069 6620 7468 6973 2069 ay.# - if this i │ │ │ │ +0000aae0: 7320 6e6f 7420 656e 6f75 6768 2c20 6465 s not enough, de │ │ │ │ +0000aaf0: 6c65 7465 2074 6865 2072 6573 7420 6f66 lete the rest of │ │ │ │ +0000ab00: 2074 6865 2062 6163 6b75 7073 0a23 2020 the backups.# │ │ │ │ +0000ab10: 2062 6567 696e 6e69 6e67 2077 6974 6820 beginning with │ │ │ │ +0000ab20: 7468 6520 6f6c 6465 7374 2c20 6275 7420 the oldest, but │ │ │ │ +0000ab30: 2a6e 6576 6572 2a20 6120 6261 636b 7570 *never* a backup │ │ │ │ +0000ab40: 2077 6974 680a 2320 2020 7468 6520 2761 with.# the 'a │ │ │ │ +0000ab50: 7263 6869 7665 2066 6c61 6727 206f 7220 rchive flag' or │ │ │ │ +0000ab60: 7468 6520 6c61 7374 2062 6163 6b75 700a the last backup. │ │ │ │ +0000ab70: 3b6b 6565 704d 6178 4e75 6d62 6572 3d0a ;keepMaxNumber=. │ │ │ │ +0000ab80: 0a23 2041 6c74 6572 6e61 7469 7665 2064 .# Alternative d │ │ │ │ +0000ab90: 656c 6574 696f 6e20 7363 6865 6d65 2e20 eletion scheme. │ │ │ │ +0000aba0: 4966 2079 6f75 2075 7365 2074 6869 7320 If you use this │ │ │ │ +0000abb0: 6f70 7469 6f6e 2c20 616c 6c0a 2320 6f74 option, all.# ot │ │ │ │ +0000abc0: 6865 7220 6b65 6570 206f 7074 696f 6e73 her keep options │ │ │ │ +0000abd0: 2061 7265 2069 676e 6f72 6564 2e20 5072 are ignored. Pr │ │ │ │ +0000abe0: 6573 6572 7665 7320 6261 636b 7570 7320 eserves backups │ │ │ │ +0000abf0: 6465 7065 6e64 696e 670a 2320 6f6e 2074 depending.# on t │ │ │ │ +0000ac00: 6865 6972 202a 7265 6c61 7469 7665 2a20 heir *relative* │ │ │ │ +0000ac10: 6167 652e 2045 7861 6d70 6c65 3a0a 230a age. Example:.#. │ │ │ │ +0000ac20: 2320 2020 6b65 6570 5265 6c61 7469 7665 # keepRelative │ │ │ │ +0000ac30: 203d 2031 6420 3764 2036 3164 2039 3264 = 1d 7d 61d 92d │ │ │ │ +0000ac40: 0a23 0a23 2077 696c 6c20 2874 7279 2074 .#.# will (try t │ │ │ │ +0000ac50: 6f29 2065 6e73 7572 6520 7468 6174 2074 o) ensure that t │ │ │ │ +0000ac60: 6865 7265 2069 7320 616c 7761 7973 0a23 here is always.# │ │ │ │ +0000ac70: 0a23 202d 204f 6e65 2062 6163 6b75 7020 .# - One backup │ │ │ │ +0000ac80: 6265 7477 6565 6e20 3120 6461 7920 616e between 1 day an │ │ │ │ +0000ac90: 6420 3720 6461 7973 206f 6c64 0a23 202d d 7 days old.# - │ │ │ │ +0000aca0: 204f 6e65 2062 6163 6b75 7020 6265 7477 One backup betw │ │ │ │ +0000acb0: 6565 6e20 3520 6461 7973 2061 6e64 2032 een 5 days and 2 │ │ │ │ +0000acc0: 206d 6f6e 7468 7320 6f6c 640a 2320 2d20 months old.# - │ │ │ │ +0000acd0: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe │ │ │ │ +0000ace0: 656e 207e 3220 6d6f 6e74 6873 2061 6e64 en ~2 months and │ │ │ │ +0000acf0: 207e 3320 6d6f 6e74 6873 206f 6c64 0a23 ~3 months old.# │ │ │ │ +0000ad00: 0a23 2049 6620 7468 6572 6520 6973 206e .# If there is n │ │ │ │ +0000ad10: 6f20 6261 636b 7570 2066 6f72 2061 2073 o backup for a s │ │ │ │ +0000ad20: 7065 6369 6669 6564 2074 696d 6573 7061 pecified timespa │ │ │ │ +0000ad30: 6e20 2865 2e67 2e20 6265 6361 7573 6520 n (e.g. because │ │ │ │ +0000ad40: 7468 650a 2320 6c61 7374 2062 6163 6b75 the.# last backu │ │ │ │ +0000ad50: 7020 7761 7320 646f 6e65 206d 6f72 6520 p was done more │ │ │ │ +0000ad60: 7468 616e 2032 2077 6565 6b73 2061 676f than 2 weeks ago │ │ │ │ +0000ad70: 2920 7468 6520 6e65 7874 206f 6c64 6572 ) the next older │ │ │ │ +0000ad80: 2062 6163 6b75 700a 2320 7769 6c6c 2062 backup.# will b │ │ │ │ +0000ad90: 6520 7573 6564 2066 6f72 2074 6869 7320 e used for this │ │ │ │ +0000ada0: 7469 6d65 7370 616e 2e0a 3b6b 6565 7052 timespan..;keepR │ │ │ │ +0000adb0: 656c 6174 6976 6520 3d0a 0a23 2070 7269 elative =..# pri │ │ │ │ +0000adc0: 6e74 2070 726f 6772 6573 7320 7265 706f nt progress repo │ │ │ │ +0000add0: 7274 2061 6674 6572 2065 6163 6820 276e rt after each 'n │ │ │ │ +0000ade0: 756d 6265 7227 2066 696c 6573 0a23 2044 umber' files.# D │ │ │ │ +0000adf0: 6566 6175 6c74 2069 7320 302c 2077 6869 efault is 0, whi │ │ │ │ +0000ae00: 6368 206d 6561 6e73 206e 6f20 7265 706f ch means no repo │ │ │ │ +0000ae10: 7274 732e 0a3b 7072 6f67 7265 7373 5265 rts..;progressRe │ │ │ │ +0000ae20: 706f 7274 3d0a 0a23 2070 7269 6e74 2064 port=..# print d │ │ │ │ +0000ae30: 6570 7468 206f 6620 6163 7475 616c 2072 epth of actual r │ │ │ │ +0000ae40: 6561 6465 6420 6469 7265 6374 6f72 7920 eaded directory │ │ │ │ +0000ae50: 6475 7269 6e67 2062 6163 6b75 700a 2320 during backup.# │ │ │ │ +0000ae60: 6465 6661 756c 7420 6973 2027 6e6f 272c default is 'no', │ │ │ │ +0000ae70: 2076 616c 7565 7320 6172 6520 2779 6573 values are 'yes │ │ │ │ +0000ae80: 2720 616e 6420 276e 6f27 0a3b 7072 696e ' and 'no'.;prin │ │ │ │ +0000ae90: 7444 6570 7468 3d0a 0a23 2069 676e 6f72 tDepth=..# ignor │ │ │ │ +0000aea0: 6520 7265 6164 2065 7272 6f72 7320 696e e read errors in │ │ │ │ +0000aeb0: 2073 6f75 7263 6520 6469 7265 6374 6f72 source director │ │ │ │ +0000aec0: 793b 206e 6f74 2072 6561 6461 626c 650a y; not readable. │ │ │ │ +0000aed0: 2320 6469 7265 6374 6f72 6965 7320 646f # directories do │ │ │ │ +0000aee0: 6573 206e 6f74 2063 6175 7365 2073 746f es not cause sto │ │ │ │ +0000aef0: 7265 4261 636b 7570 2e70 6c20 746f 2073 reBackup.pl to s │ │ │ │ +0000af00: 746f 7020 7072 6f63 6573 7369 6e67 0a23 top processing.# │ │ │ │ +0000af10: 2056 616c 7565 7320 6172 6520 2779 6573 Values are 'yes │ │ │ │ +0000af20: 2720 616e 6420 276e 6f27 2e20 4465 6661 ' and 'no'. Defa │ │ │ │ +0000af30: 756c 7420 6973 2027 6e6f 2720 7768 6963 ult is 'no' whic │ │ │ │ +0000af40: 6820 6d65 616e 7320 6e6f 740a 2320 746f h means not.# to │ │ │ │ +0000af50: 2069 676e 6f72 6520 7468 656d 0a3b 6967 ignore them.;ig │ │ │ │ +0000af60: 6e6f 7265 5265 6164 4572 726f 723d 0a0a noreReadError=.. │ │ │ │ +0000af70: 2320 6166 7465 7220 6120 7375 6363 6573 # after a succes │ │ │ │ +0000af80: 7366 756c 2062 6163 6b75 702c 2073 6574 sful backup, set │ │ │ │ +0000af90: 2061 2073 796d 626f 6c69 6320 6c69 6e6b a symbolic link │ │ │ │ +0000afa0: 2074 6f0a 2320 7468 6174 2062 6163 6b75 to.# that backu │ │ │ │ +0000afb0: 7020 616e 6420 6465 6c65 7465 2065 7869 p and delete exi │ │ │ │ +0000afc0: 7374 696e 6720 6f6c 6465 7220 6c69 6e6b sting older link │ │ │ │ +0000afd0: 7320 7769 7468 2074 6865 0a23 2073 616d s with the.# sam │ │ │ │ +0000afe0: 6520 6e61 6d65 0a3b 6c69 6e6b 546f 5265 e name.;linkToRe │ │ │ │ +0000aff0: 6365 6e74 3d0a 0a23 206e 616d 6520 6f66 cent=..# name of │ │ │ │ +0000b000: 2074 6865 206c 6f67 2066 696c 6520 2864 the log file (d │ │ │ │ +0000b010: 6566 6175 6c74 2069 7320 5354 444f 5554 efault is STDOUT │ │ │ │ +0000b020: 290a 3b6c 6f67 4669 6c65 3d0a 0a23 2069 ).;logFile=..# i │ │ │ │ +0000b030: 6620 796f 7520 7370 6563 6966 7920 6120 f you specify a │ │ │ │ +0000b040: 6c6f 6720 6669 6c65 2077 6974 6820 2d2d log file with -- │ │ │ │ +0000b050: 6c6f 6746 696c 6520 796f 7520 6361 6e0a logFile you can. │ │ │ │ +0000b060: 2320 6164 6469 7469 6f6e 616c 6c79 2070 # additionally p │ │ │ │ +0000b070: 7269 6e74 2074 6865 206f 7574 7075 7420 rint the output │ │ │ │ +0000b080: 746f 2053 5444 4f55 5420 7769 7468 2074 to STDOUT with t │ │ │ │ +0000b090: 6869 7320 666c 6167 0a23 2056 616c 7565 his flag.# Value │ │ │ │ +0000b0a0: 7320 6172 6520 2779 6573 2720 616e 6420 s are 'yes' and │ │ │ │ +0000b0b0: 276e 6f27 2e20 4465 6661 756c 7420 6973 'no'. Default is │ │ │ │ +0000b0c0: 2027 6e6f 272e 0a3b 706c 7573 4c6f 6753 'no'..;plusLogS │ │ │ │ +0000b0d0: 7464 6f75 743d 0a0a 2320 6f75 7470 7574 tdout=..# output │ │ │ │ +0000b0e0: 2069 6e20 6c6f 6766 696c 6520 7769 7468 in logfile with │ │ │ │ +0000b0f0: 2074 696d 653a 2027 7965 7327 206f 7220 time: 'yes' or │ │ │ │ +0000b100: 276e 6f27 0a23 2064 6566 6175 6c74 203d 'no'.# default = │ │ │ │ +0000b110: 206e 6f0a 3b73 7570 7072 6573 7354 696d no.;suppressTim │ │ │ │ +0000b120: 653d 0a0a 2320 6d61 7869 6d61 6c20 6c65 e=..# maximal le │ │ │ │ +0000b130: 6e67 7468 206f 6620 6c6f 6720 6669 6c65 ngth of log file │ │ │ │ +0000b140: 2c20 6465 6661 756c 7420 3d20 3165 360a , default = 1e6. │ │ │ │ +0000b150: 3b6d 6178 4669 6c65 6c65 6e3d 0a0a 2320 ;maxFilelen=..# │ │ │ │ +0000b160: 6e75 6d62 6572 206f 6620 6f6c 6420 6c6f number of old lo │ │ │ │ +0000b170: 6720 6669 6c65 732c 2064 6566 6175 6c74 g files, default │ │ │ │ +0000b180: 203d 2035 0a3b 6e6f 4f66 4f6c 6446 696c = 5.;noOfOldFil │ │ │ │ +0000b190: 6573 3d0a 0a23 2073 6176 6520 6c6f 6720 es=..# save log │ │ │ │ +0000b1a0: 6669 6c65 7320 7769 7468 2064 6174 6520 files with date │ │ │ │ +0000b1b0: 616e 6420 7469 6d65 2069 6e73 7465 6164 and time instead │ │ │ │ +0000b1c0: 206f 6620 6465 6c65 7469 6e67 2074 6865 of deleting the │ │ │ │ +0000b1d0: 0a23 206f 6c64 2028 7769 7468 205b 2d6e .# old (with [-n │ │ │ │ +0000b1e0: 6f4f 6c64 4669 6c65 735d 293a 2027 7965 oOldFiles]): 'ye │ │ │ │ +0000b1f0: 7327 206f 7220 276e 6f27 2c20 6465 6661 s' or 'no', defa │ │ │ │ +0000b200: 756c 7420 3d20 276e 6f27 0a3b 7361 7665 ult = 'no'.;save │ │ │ │ +0000b210: 4c6f 6773 3d0a 0a23 2063 6f6d 7072 6573 Logs=..# compres │ │ │ │ +0000b220: 7320 7361 7665 6420 6c6f 6720 6669 6c65 s saved log file │ │ │ │ +0000b230: 7320 2865 2e67 2e20 7769 7468 2027 677a s (e.g. with 'gz │ │ │ │ +0000b240: 6970 202d 3927 290a 2320 6465 6661 756c ip -9').# defaul │ │ │ │ +0000b250: 7420 6973 2027 627a 6970 3227 0a3b 636f t is 'bzip2'.;co │ │ │ │ +0000b260: 6d70 7265 7373 5769 7468 3d0a 0a23 2077 mpressWith=..# w │ │ │ │ +0000b270: 7269 7465 206c 6f67 2066 696c 6520 2861 rite log file (a │ │ │ │ +0000b280: 6c73 6f29 2069 6e20 7468 6520 6261 636b lso) in the back │ │ │ │ +0000b290: 7570 2064 6972 6563 746f 7279 3a0a 2320 up directory:.# │ │ │ │ +0000b2a0: 2779 6573 2720 6f72 2027 6e6f 272c 2064 'yes' or 'no', d │ │ │ │ +0000b2b0: 6566 6175 6c74 2069 7320 276e 6f27 0a23 efault is 'no'.# │ │ │ │ +0000b2c0: 2042 6520 6177 6172 6520 7468 6174 2074 Be aware that t │ │ │ │ +0000b2d0: 6869 7320 6c6f 6720 646f 6573 206e 6f74 his log does not │ │ │ │ +0000b2e0: 2063 6f6e 7461 696e 2061 6c6c 2065 7272 contain all err │ │ │ │ +0000b2f0: 6f72 0a23 206d 6573 7361 6765 7320 6f66 or.# messages of │ │ │ │ +0000b300: 2074 6865 206f 6e65 2073 7065 6369 6669 the one specifi │ │ │ │ +0000b310: 6564 2077 6974 6820 2d2d 6c6f 6746 696c ed with --logFil │ │ │ │ +0000b320: 6521 0a23 2053 6f6d 6520 6572 726f 7273 e!.# Some errors │ │ │ │ +0000b330: 2061 7265 2070 6f73 7369 626c 6520 6265 are possible be │ │ │ │ +0000b340: 666f 7265 2074 6865 2062 6163 6b75 700a fore the backup. │ │ │ │ +0000b350: 2320 6469 7265 6374 6f72 7920 6973 2063 # directory is c │ │ │ │ +0000b360: 7265 6174 6564 2e0a 3b6c 6f67 496e 4261 reated..;logInBa │ │ │ │ +0000b370: 636b 7570 4469 723d 0a0a 2320 636f 6d70 ckupDir=..# comp │ │ │ │ +0000b380: 7265 7373 2074 6865 206c 6f67 2066 696c ress the log fil │ │ │ │ +0000b390: 6520 696e 2074 6865 2062 6163 6b75 7020 e in the backup │ │ │ │ +0000b3a0: 6469 7265 6374 6f72 793a 0a23 2027 7965 directory:.# 'ye │ │ │ │ +0000b3b0: 7327 206f 7220 276e 6f27 2c20 6465 6661 s' or 'no', defa │ │ │ │ +0000b3c0: 756c 7420 6973 2027 6e6f 270a 3b63 6f6d ult is 'no'.;com │ │ │ │ +0000b3d0: 7072 6573 734c 6f67 496e 4261 636b 7570 pressLogInBackup │ │ │ │ +0000b3e0: 4469 723d 0a0a 2320 6669 6c65 6e61 6d65 Dir=..# filename │ │ │ │ +0000b3f0: 2074 6f20 7573 6520 666f 7220 7772 6974 to use for writ │ │ │ │ +0000b400: 696e 6720 7468 6520 6162 6f76 6520 6c6f ing the above lo │ │ │ │ +0000b410: 6720 6669 6c65 2c0a 2320 6465 6661 756c g file,.# defaul │ │ │ │ +0000b420: 7420 6973 2027 246c 6f67 496e 4261 636b t is '$logInBack │ │ │ │ +0000b430: 7570 4469 7246 696c 654e 616d 6527 0a3b upDirFileName'.; │ │ │ │ +0000b440: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +0000b450: 6c65 4e61 6d65 3d0a 0a45 4f43 0a20 2020 leName=..EOC. │ │ │ │ +0000b460: 203b 0a0a 0a26 7072 696e 7456 6572 7369 ;...&printVersi │ │ │ │ +0000b470: 6f6e 7328 5c40 4152 4756 2c20 272d 5627 ons(\@ARGV, '-V' │ │ │ │ +0000b480: 293b 0a0a 6d79 2028 4062 6c6f 636b 5275 );..my (@blockRu │ │ │ │ +0000b490: 6c65 734f 7074 7329 3b0a 7b0a 2020 2020 lesOpts);.{. │ │ │ │ +0000b4a0: 6d79 2024 693b 0a20 2020 2066 6f72 6561 my $i;. forea │ │ │ │ +0000b4b0: 6368 2024 6920 2830 2e2e 246e 6f42 6c6f ch $i (0..$noBlo │ │ │ │ +0000b4c0: 636b 5275 6c65 732d 3129 0a20 2020 207b ckRules-1). { │ │ │ │ +0000b4d0: 0a09 7075 7368 2040 626c 6f63 6b52 756c ..push @blockRul │ │ │ │ +0000b4e0: 6573 4f70 7473 2c0a 094f 7074 696f 6e2d esOpts,..Option- │ │ │ │ +0000b4f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000b500: 2263 6865 636b 426c 6f63 6b73 5275 6c65 "checkBlocksRule │ │ │ │ +0000b510: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i",... '-cl_ │ │ │ │ +0000b520: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 6368 option' => "--ch │ │ │ │ +0000b530: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i" │ │ │ │ +0000b540: 2c0a 0909 2020 2020 272d 6366 5f6b 6579 ,... '-cf_key │ │ │ │ +0000b550: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ │ +0000b560: 7352 756c 6524 6922 2c0a 0909 2020 2020 sRule$i",... │ │ │ │ +0000b570: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => │ │ │ │ +0000b580: 2779 6573 2729 2c0a 094f 7074 696f 6e2d 'yes'),..Option- │ │ │ │ +0000b590: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000b5a0: 2263 6865 636b 426c 6f63 6b73 4253 2469 "checkBlocksBS$i │ │ │ │ +0000b5b0: 222c 0a09 0920 2020 2027 2d63 6c5f 6f70 ",... '-cl_op │ │ │ │ +0000b5c0: 7469 6f6e 2720 3d3e 2022 2d2d 6368 6563 tion' => "--chec │ │ │ │ +0000b5d0: 6b42 6c6f 636b 7342 5324 6922 2c0a 0909 kBlocksBS$i",... │ │ │ │ +0000b5e0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000b5f0: 2022 6368 6563 6b42 6c6f 636b 7342 5324 "checkBlocksBS$ │ │ │ │ +0000b600: 6922 2c0a 0909 2020 2020 272d 6465 6661 i",... '-defa │ │ │ │ +0000b610: 756c 7427 203d 3e20 2463 6865 636b 426c ult' => $checkBl │ │ │ │ +0000b620: 6f63 6b73 4253 6465 6661 756c 7429 2c0a ocksBSdefault),. │ │ │ │ +0000b630: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +0000b640: 616d 6527 203d 3e20 2263 6865 636b 426c ame' => "checkBl │ │ │ │ +0000b650: 6f63 6b73 436f 6d70 7224 6922 2c0a 0909 ocksCompr$i",... │ │ │ │ +0000b660: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000b670: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => "--checkBloc │ │ │ │ +0000b680: 6b73 436f 6d70 7224 6922 2c0a 0909 2020 ksCompr$i",... │ │ │ │ +0000b690: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => " │ │ │ │ +0000b6a0: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr │ │ │ │ +0000b6b0: 2469 222c 0a09 0920 2020 2027 2d63 665f $i",... '-cf_ │ │ │ │ +0000b6c0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y │ │ │ │ +0000b6d0: 6573 272c 2027 6e6f 275d 292c 0a09 4f70 es', 'no']),..Op │ │ │ │ +0000b6e0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000b6f0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ │ +0000b700: 7352 6561 6424 6922 2c0a 0909 2020 2020 sRead$i",... │ │ │ │ +0000b710: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000b720: 222d 2d63 6865 636b 426c 6f63 6b73 5265 "--checkBlocksRe │ │ │ │ +0000b730: 6164 2469 222c 0a09 0920 2020 2027 2d63 ad$i",... '-c │ │ │ │ +0000b740: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => "check │ │ │ │ +0000b750: 426c 6f63 6b73 5265 6164 2469 222c 0a09 BlocksRead$i",.. │ │ │ │ +0000b760: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ │ +0000b770: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op │ │ │ │ +0000b780: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000b790: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ │ +0000b7a0: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i",... │ │ │ │ +0000b7b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000b7c0: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => "--checkBloc │ │ │ │ +0000b7d0: 6b73 5061 7261 6c6c 656c 2469 222c 0a09 ksParallel$i",.. │ │ │ │ +0000b7e0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000b7f0: 3e20 2263 6865 636b 426c 6f63 6b73 5061 > "checkBlocksPa │ │ │ │ +0000b800: 7261 6c6c 656c 2469 222c 0a09 0920 2020 rallel$i",... │ │ │ │ +0000b810: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ │ +0000b820: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ │ +0000b830: 293b 0a0a 2020 2020 7d0a 7d0a 6d79 2028 );.. }.}.my ( │ │ │ │ +0000b840: 4062 6c6f 636b 4465 7669 6365 734f 7074 @blockDevicesOpt │ │ │ │ +0000b850: 7329 3b0a 7b0a 2020 2020 6d79 2024 693b s);.{. my $i; │ │ │ │ +0000b860: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i │ │ │ │ +0000b870: 2830 2e2e 246d 6169 6e3a 3a6e 6f42 6c6f (0..$main::noBlo │ │ │ │ +0000b880: 636b 4465 7669 6365 732d 3129 0a20 2020 ckDevices-1). │ │ │ │ +0000b890: 207b 0a09 7075 7368 2040 626c 6f63 6b44 {..push @blockD │ │ │ │ +0000b8a0: 6576 6963 6573 4f70 7473 2c0a 094f 7074 evicesOpts,..Opt │ │ │ │ +0000b8b0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000b8c0: 203d 3e20 2263 6865 636b 4465 7669 6365 => "checkDevice │ │ │ │ +0000b8d0: 7324 6922 2c0a 0909 2020 2020 272d 636c s$i",... '-cl │ │ │ │ +0000b8e0: 5f6f 7074 696f 6e27 203d 3e20 222d 2d63 _option' => "--c │ │ │ │ +0000b8f0: 6865 636b 4465 7669 6365 7324 6922 2c0a heckDevices$i",. │ │ │ │ +0000b900: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000b910: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => "checkDevices │ │ │ │ +0000b920: 2469 222c 0a09 0920 2020 2027 2d6d 756c $i",... '-mul │ │ │ │ +0000b930: 7469 706c 6527 203d 3e20 2779 6573 2729 tiple' => 'yes') │ │ │ │ +0000b940: 2c0a 094f 7074 696f 6e2d 3e6e 6577 2827 ,..Option->new(' │ │ │ │ +0000b950: 2d6e 616d 6527 203d 3e20 2263 6865 636b -name' => "check │ │ │ │ +0000b960: 4465 7669 6365 7344 6972 2469 222c 0a09 DevicesDir$i",.. │ │ │ │ +0000b970: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +0000b980: 2720 3d3e 2022 2d2d 6368 6563 6b44 6576 ' => "--checkDev │ │ │ │ +0000b990: 6963 6573 4469 7224 6922 2c0a 0909 2020 icesDir$i",... │ │ │ │ +0000b9a0: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => " │ │ │ │ +0000b9b0: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$ │ │ │ │ +0000b9c0: 6922 2c0a 0909 2020 2020 272d 6d75 6c74 i",... '-mult │ │ │ │ +0000b9d0: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'), │ │ │ │ +0000b9e0: 0a09 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000b9f0: 6e61 6d65 2720 3d3e 2022 6368 6563 6b44 name' => "checkD │ │ │ │ +0000ba00: 6576 6963 6573 4253 2469 222c 0a09 0920 evicesBS$i",... │ │ │ │ +0000ba10: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +0000ba20: 3d3e 2022 2d2d 6368 6563 6b44 6576 6963 => "--checkDevic │ │ │ │ +0000ba30: 6573 4253 2469 222c 0a09 0920 2020 2027 esBS$i",... ' │ │ │ │ +0000ba40: 2d63 665f 6b65 7927 203d 3e20 2263 6865 -cf_key' => "che │ │ │ │ +0000ba50: 636b 4465 7669 6365 7342 5324 6922 2c0a ckDevicesBS$i",. │ │ │ │ +0000ba60: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ │ +0000ba70: 203d 3e20 2463 6865 636b 426c 6f63 6b73 => $checkBlocks │ │ │ │ +0000ba80: 4253 6465 6661 756c 7429 2c0a 094f 7074 BSdefault),..Opt │ │ │ │ +0000ba90: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000baa0: 203d 3e20 2263 6865 636b 4465 7669 6365 => "checkDevice │ │ │ │ +0000bab0: 7343 6f6d 7072 2469 222c 0a09 0920 2020 sCompr$i",... │ │ │ │ +0000bac0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000bad0: 2022 2d2d 6368 6563 6b44 6576 6963 6573 "--checkDevices │ │ │ │ +0000bae0: 436f 6d70 7224 6922 2c0a 0909 2020 2020 Compr$i",... │ │ │ │ +0000baf0: 272d 6366 5f6b 6579 2720 3d3e 2022 6368 '-cf_key' => "ch │ │ │ │ +0000bb00: 6563 6b44 6576 6963 6573 436f 6d70 7224 eckDevicesCompr$ │ │ │ │ +0000bb10: 6922 2c0a 0909 2020 2020 272d 6366 5f6e i",... '-cf_n │ │ │ │ +0000bb20: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye │ │ │ │ +0000bb30: 7327 2c20 276e 6f27 5d29 2c0a 094f 7074 s', 'no']),..Opt │ │ │ │ +0000bb40: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000bb50: 203d 3e20 2263 6865 636b 4465 7669 6365 => "checkDevice │ │ │ │ +0000bb60: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i",... │ │ │ │ +0000bb70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000bb80: 203d 3e20 222d 2d63 6865 636b 4465 7669 => "--checkDevi │ │ │ │ +0000bb90: 6365 7350 6172 616c 6c65 6c24 6922 2c0a cesParallel$i",. │ │ │ │ +0000bba0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000bbb0: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => "checkDevices │ │ │ │ +0000bbc0: 5061 7261 6c6c 656c 2469 222c 0a09 0920 Parallel$i",... │ │ │ │ +0000bbd0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ │ +0000bbe0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ │ +0000bbf0: 275d 293b 0a20 2020 207d 0a7d 0a0a 2323 ']);. }.}..## │ │ │ │ +0000bc00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0000bc10: 2323 2121 2121 2121 2121 2121 2121 2121 ##!!!!!!!!!!!!!! │ │ │ │ +0000bc20: 2121 0a6d 7920 2840 636f 6d70 7265 7373 !!.my (@compress │ │ │ │ +0000bc30: 5275 6c65 7329 3b0a 7b0a 2020 2020 6d79 Rules);.{. my │ │ │ │ +0000bc40: 2024 693b 0a0a 2020 2020 666f 7265 6163 $i;.. foreac │ │ │ │ +0000bc50: 6820 2469 2028 302e 2e24 6d61 696e 3a3a h $i (0..$main:: │ │ │ │ +0000bc60: 6e6f 436f 6d70 7265 7373 5275 6c65 732d noCompressRules- │ │ │ │ +0000bc70: 3129 0a20 2020 207b 0a09 7075 7368 2040 1). {..push @ │ │ │ │ +0000bc80: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,.. │ │ │ │ +0000bc90: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +0000bca0: 6d65 2720 3d3e 2022 636f 6d70 7265 7373 me' => "compress │ │ │ │ +0000bcb0: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i",... '-cl_ │ │ │ │ +0000bcc0: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 636f option' => "--co │ │ │ │ +0000bcd0: 6d70 7265 7373 2469 222c 0a09 0920 2020 mpress$i",... │ │ │ │ +0000bce0: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => "c │ │ │ │ +0000bcf0: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i",... │ │ │ │ +0000bd00: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ │ +0000bd10: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option │ │ │ │ +0000bd20: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000bd30: 2022 756e 636f 6d70 7265 7373 2469 222c "uncompress$i", │ │ │ │ +0000bd40: 0a09 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000bd50: 6f6e 2720 3d3e 2022 2d2d 756e 636f 6d70 on' => "--uncomp │ │ │ │ +0000bd60: 7265 7373 2469 222c 0a09 0920 2020 2027 ress$i",... ' │ │ │ │ +0000bd70: 2d63 665f 6b65 7927 203d 3e20 2275 6e63 -cf_key' => "unc │ │ │ │ +0000bd80: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i",... │ │ │ │ +0000bd90: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ │ +0000bda0: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option │ │ │ │ +0000bdb0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000bdc0: 2022 706f 7374 6669 7824 6922 2c0a 0909 "postfix$i",... │ │ │ │ +0000bdd0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000bde0: 203d 3e20 222d 2d70 6f73 7466 6978 2469 => "--postfix$i │ │ │ │ +0000bdf0: 222c 0a09 0920 2020 2027 2d63 665f 6b65 ",... '-cf_ke │ │ │ │ +0000be00: 7927 203d 3e20 2270 6f73 7466 6978 2469 y' => "postfix$i │ │ │ │ +0000be10: 222c 0a09 0920 2020 2027 2d70 6172 616d ",... '-param │ │ │ │ +0000be20: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op │ │ │ │ +0000be30: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000be40: 2720 3d3e 2022 636f 6d70 7265 7373 5275 ' => "compressRu │ │ │ │ +0000be50: 6c65 2469 222c 0a09 0920 2020 2027 2d63 le$i",... '-c │ │ │ │ +0000be60: 6c5f 6f70 7469 6f6e 2720 3d3e 2022 2d2d l_option' => "-- │ │ │ │ +0000be70: 636f 6d70 7265 7373 5275 6c65 2469 222c compressRule$i", │ │ │ │ +0000be80: 0a09 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000be90: 203d 3e20 2263 6f6d 7072 6573 7352 756c => "compressRul │ │ │ │ +0000bea0: 6524 6922 2c0a 0909 2020 2020 272d 6d75 e$i",... '-mu │ │ │ │ +0000beb0: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes' │ │ │ │ +0000bec0: 293b 0a20 2020 207d 0a7d 0a0a 6d79 2024 );. }.}..my $ │ │ │ │ +0000bed0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C │ │ │ │ +0000bee0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new(' │ │ │ │ +0000bef0: 2d61 6c6c 6f77 4c69 7374 7327 203d 3e20 -allowLists' => │ │ │ │ +0000bf00: 2779 6573 272c 0a20 2020 2020 2020 2020 'yes',. │ │ │ │ +0000bf10: 2020 2020 2020 2020 2020 2027 2d6c 6973 '-lis │ │ │ │ +0000bf20: 744d 6170 7069 6e67 2720 3d3e 2027 6f74 tMapping' => 'ot │ │ │ │ +0000bf30: 6865 7242 6163 6b75 7053 6572 6965 7327 herBackupSeries' │ │ │ │ +0000bf40: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +0000bf50: 2020 2020 2020 272d 636f 6e66 6967 4669 '-configFi │ │ │ │ +0000bf60: 6c65 2720 3d3e 2027 2d66 272c 0a09 0920 le' => '-f',... │ │ │ │ +0000bf70: 2020 2027 2d6c 6973 7427 203d 3e20 5b4f '-list' => [O │ │ │ │ +0000bf80: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000bf90: 6527 203d 3e20 2768 656c 7027 2c0a 0909 e' => 'help',... │ │ │ │ +0000bfa0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000bfb0: 6f6e 2720 3d3e 2027 2d2d 6865 6c70 2729 on' => '--help') │ │ │ │ +0000bfc0: 2c0a 0a20 2020 2020 2020 2020 2020 2020 ,.. │ │ │ │ +0000bfd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000bfe0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ │ +0000bff0: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi │ │ │ │ +0000c000: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ │ +0000c010: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000c020: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... │ │ │ │ +0000c030: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +0000c040: 2d2d 6669 6c65 272c 0a09 0909 0909 2020 --file',...... │ │ │ │ +0000c050: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y │ │ │ │ +0000c060: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ │ +0000c070: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not │ │ │ │ +0000c080: 205b 6765 6e65 7261 7465 5d27 292c 0a20 [generate]'),. │ │ │ │ +0000c090: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000c0a0: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +0000c0b0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000c0c0: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate' │ │ │ │ +0000c0d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000c0e0: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g', │ │ │ │ +0000c0f0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +0000c100: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene │ │ │ │ +0000c110: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... │ │ │ │ +0000c120: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +0000c130: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +0000c140: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ │ +0000c150: 636f 6e66 6967 4669 6c65 5d27 292c 0a20 configFile]'),. │ │ │ │ +0000c160: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000c170: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +0000c180: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000c190: 6527 203d 3e20 2770 7269 6e74 272c 0a09 e' => 'print',.. │ │ │ │ +0000c1a0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +0000c1b0: 696f 6e27 203d 3e20 272d 2d70 7269 6e74 ion' => '--print │ │ │ │ +0000c1c0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +0000c1d0: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back │ │ │ │ +0000c1e0: 7570 4469 725d 2729 2c0a 2020 2020 2020 upDir]'),. │ │ │ │ +0000c1f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000c200: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +0000c210: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000c220: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',... │ │ │ │ +0000c230: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000c240: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',.... │ │ │ │ +0000c250: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +0000c260: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi │ │ │ │ +0000c270: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ │ +0000c280: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu │ │ │ │ +0000c290: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ │ +0000c2a0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +0000c2b0: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ │ +0000c2c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000c2d0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ │ +0000c2e0: 272d 6e61 6d65 2720 3d3e 2027 736f 7572 '-name' => 'sour │ │ │ │ +0000c2f0: 6365 4469 7227 2c0a 0909 0909 0920 2020 ceDir',...... │ │ │ │ +0000c300: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000c310: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... │ │ │ │ +0000c320: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +0000c330: 2d2d 736f 7572 6365 4469 7227 2c0a 0909 --sourceDir',... │ │ │ │ +0000c340: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000c350: 203d 3e20 2773 6f75 7263 6544 6972 272c => 'sourceDir', │ │ │ │ +0000c360: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ │ +0000c370: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ │ +0000c380: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000c390: 6e61 6d65 2720 3d3e 2027 7365 7269 6573 name' => 'series │ │ │ │ +0000c3a0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000c3b0: 5f6f 7074 696f 6e27 203d 3e20 272d 5327 _option' => '-S' │ │ │ │ +0000c3c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000c3d0: 616c 6961 7327 203d 3e20 272d 2d73 6572 alias' => '--ser │ │ │ │ +0000c3e0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... ' │ │ │ │ +0000c3f0: 2d63 665f 6b65 7927 203d 3e20 2773 6572 -cf_key' => 'ser │ │ │ │ +0000c400: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... ' │ │ │ │ +0000c410: 2d64 6566 6175 6c74 2720 3d3e 2027 6465 -default' => 'de │ │ │ │ +0000c420: 6661 756c 7427 292c 0a09 0909 094f 7074 fault'),.....Opt │ │ │ │ +0000c430: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000c440: 203d 3e20 2774 6d70 6469 7227 2c0a 0909 => 'tmpdir',... │ │ │ │ +0000c450: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000c460: 6f6e 2720 3d3e 2027 2d54 272c 0a09 0909 on' => '-T',.... │ │ │ │ +0000c470: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +0000c480: 2720 3d3e 2027 2d2d 746d 7064 6972 272c ' => '--tmpdir', │ │ │ │ +0000c490: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000c4a0: 6579 2720 3d3e 2027 746d 7044 6972 272c ey' => 'tmpDir', │ │ │ │ +0000c4b0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ │ +0000c4c0: 756c 7427 203d 3e20 2474 6d70 6469 7229 ult' => $tmpdir) │ │ │ │ +0000c4d0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +0000c4e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000c4f0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ │ +0000c500: 6e61 6d65 2720 3d3e 2027 6f74 6865 7242 name' => 'otherB │ │ │ │ +0000c510: 6163 6b75 7053 6572 6965 7327 2c0a 0909 ackupSeries',... │ │ │ │ +0000c520: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000c530: 203d 3e20 276f 7468 6572 4261 636b 7570 => 'otherBackup │ │ │ │ +0000c540: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... │ │ │ │ +0000c550: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ │ +0000c560: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ │ +0000c570: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000c580: 203d 3e20 276c 6f63 6b46 696c 6527 2c0a => 'lockFile',. │ │ │ │ +0000c590: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +0000c5a0: 7469 6f6e 2720 3d3e 2027 2d4c 272c 0a09 tion' => '-L',.. │ │ │ │ +0000c5b0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +0000c5c0: 6173 2720 3d3e 2027 2d2d 6c6f 636b 4669 as' => '--lockFi │ │ │ │ +0000c5d0: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '- │ │ │ │ +0000c5e0: 6366 5f6b 6579 2720 3d3e 2027 6c6f 636b cf_key' => 'lock │ │ │ │ +0000c5f0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ │ +0000c600: 272d 6465 6661 756c 7427 203d 3e20 246c '-default' => $l │ │ │ │ +0000c610: 6f63 6b46 696c 6529 2c0a 0909 0909 4f70 ockFile),.....Op │ │ │ │ +0000c620: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000c630: 2720 3d3e 2027 756e 6c6f 636b 4265 666f ' => 'unlockBefo │ │ │ │ +0000c640: 7265 4465 6c27 2c0a 0909 0909 0920 2020 reDel',...... │ │ │ │ +0000c650: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000c660: 2027 2d2d 756e 6c6f 636b 4265 666f 7265 '--unlockBefore │ │ │ │ +0000c670: 4465 6c27 2c0a 0909 0909 0920 2020 2027 Del',...... ' │ │ │ │ +0000c680: 2d63 665f 6b65 7927 203d 3e20 2775 6e6c -cf_key' => 'unl │ │ │ │ +0000c690: 6f63 6b42 6566 6f72 6544 656c 272c 0a09 ockBeforeDel',.. │ │ │ │ +0000c6a0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ │ +0000c6b0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ │ +0000c6c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ │ +0000c6d0: 3e20 275b 6c6f 636b 4669 6c65 5d27 0a09 > '[lockFile]'.. │ │ │ │ +0000c6e0: 0909 0909 2020 2020 292c 0a09 0909 094f .... ),.....O │ │ │ │ +0000c6f0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000c700: 6527 203d 3e20 2765 7863 6570 7444 6972 e' => 'exceptDir │ │ │ │ +0000c710: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ │ +0000c720: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d65 l_option' => '-e │ │ │ │ +0000c730: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000c740: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6578 _alias' => '--ex │ │ │ │ +0000c750: 6365 7074 4469 7273 272c 0a09 0909 0909 ceptDirs',...... │ │ │ │ +0000c760: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000c770: 2027 6578 6365 7074 4469 7273 272c 0a09 'exceptDirs',.. │ │ │ │ +0000c780: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip │ │ │ │ +0000c790: 6c65 2720 3d3e 2027 7965 7327 292c 0a09 le' => 'yes'),.. │ │ │ │ +0000c7a0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000c7b0: 2d6e 616d 6527 203d 3e20 2769 6e63 6c75 -name' => 'inclu │ │ │ │ +0000c7c0: 6465 4469 7273 272c 0a09 0909 0909 2020 deDirs',...... │ │ │ │ +0000c7d0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000c7e0: 3e20 272d 6927 2c0a 0909 0909 0920 2020 > '-i',...... │ │ │ │ +0000c7f0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +0000c800: 272d 2d69 6e63 6c75 6465 4469 7273 272c '--includeDirs', │ │ │ │ +0000c810: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000c820: 6579 2720 3d3e 2027 696e 636c 7564 6544 ey' => 'includeD │ │ │ │ +0000c830: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... ' │ │ │ │ +0000c840: 2d6d 756c 7469 706c 6527 203d 3e20 2779 -multiple' => 'y │ │ │ │ +0000c850: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option │ │ │ │ +0000c860: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000c870: 2027 6578 6365 7074 5275 6c65 272c 0a09 'exceptRule',.. │ │ │ │ +0000c880: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +0000c890: 696f 6e27 203d 3e20 272d 2d65 7863 6570 ion' => '--excep │ │ │ │ +0000c8a0: 7452 756c 6527 2c0a 0909 0909 0920 2020 tRule',...... │ │ │ │ +0000c8b0: 2027 2d63 665f 6b65 7927 203d 3e20 2765 '-cf_key' => 'e │ │ │ │ +0000c8c0: 7863 6570 7452 756c 6527 2c0a 0909 0909 xceptRule',..... │ │ │ │ +0000c8d0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ │ +0000c8e0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ │ +0000c8f0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +0000c900: 616d 6527 203d 3e20 2769 6e63 6c75 6465 ame' => 'include │ │ │ │ +0000c910: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... │ │ │ │ +0000c920: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000c930: 272d 2d69 6e63 6c75 6465 5275 6c65 272c '--includeRule', │ │ │ │ +0000c940: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000c950: 6579 2720 3d3e 2027 696e 636c 7564 6552 ey' => 'includeR │ │ │ │ +0000c960: 756c 6527 2c0a 0909 0909 0920 2020 2027 ule',...... ' │ │ │ │ +0000c970: 2d71 756f 7465 4576 616c 2720 3d3e 2027 -quoteEval' => ' │ │ │ │ +0000c980: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ │ +0000c990: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +0000c9a0: 3e20 2777 7269 7465 4578 636c 7564 654c > 'writeExcludeL │ │ │ │ +0000c9b0: 6f67 272c 0a09 0909 0909 2020 2020 272d og',...... '- │ │ │ │ +0000c9c0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +0000c9d0: 2d77 7269 7465 4578 636c 7564 654c 6f67 -writeExcludeLog │ │ │ │ +0000c9e0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +0000c9f0: 5f6b 6579 2720 3d3e 2027 7772 6974 6545 _key' => 'writeE │ │ │ │ +0000ca00: 7863 6c75 6465 4c6f 6727 2c0a 0909 0909 xcludeLog',..... │ │ │ │ +0000ca10: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ │ +0000ca20: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ │ +0000ca30: 6e6f 275d 292c 0a09 0909 2020 2020 2020 no']),.... │ │ │ │ +0000ca40: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ │ +0000ca50: 6e61 6d65 2720 3d3e 2027 636f 6e74 4578 name' => 'contEx │ │ │ │ +0000ca60: 6365 7074 4469 7273 4572 7227 2c0a 0909 ceptDirsErr',... │ │ │ │ +0000ca70: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000ca80: 6f6e 2720 3d3e 2027 2d2d 636f 6e74 4578 on' => '--contEx │ │ │ │ +0000ca90: 6365 7074 4469 7273 4572 7227 2c0a 0909 ceptDirsErr',... │ │ │ │ +0000caa0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000cab0: 203d 3e20 2763 6f6e 7445 7863 6570 7444 => 'contExceptD │ │ │ │ +0000cac0: 6972 7345 7272 272c 0a09 0909 0909 2020 irsErr',...... │ │ │ │ +0000cad0: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet' │ │ │ │ +0000cae0: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no' │ │ │ │ +0000caf0: 5d29 2c0a 0909 0920 2020 2020 2020 204f ]),.... O │ │ │ │ +0000cb00: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000cb10: 6527 203d 3e20 2765 7863 6570 7454 7970 e' => 'exceptTyp │ │ │ │ +0000cb20: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ │ +0000cb30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +0000cb40: 2d65 7863 6570 7454 7970 6573 272c 0a09 -exceptTypes',.. │ │ │ │ +0000cb50: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +0000cb60: 2720 3d3e 2027 6578 6365 7074 5479 7065 ' => 'exceptType │ │ │ │ +0000cb70: 7327 2c0a 0909 0909 0920 2020 2027 2d70 s',...... '-p │ │ │ │ +0000cb80: 6172 616d 2720 3d3e 2027 7965 7327 2c0a aram' => 'yes',. │ │ │ │ +0000cb90: 0909 0909 0920 2020 2027 2d70 6174 7465 ..... '-patte │ │ │ │ +0000cba0: 726e 2720 3d3e 2027 5c41 5b53 6263 6670 rn' => '\A[Sbcfp │ │ │ │ +0000cbb0: 6c5d 2b5c 5a27 292c 0a09 0909 094f 7074 l]+\Z'),.....Opt │ │ │ │ +0000cbc0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000cbd0: 203d 3e20 2763 7049 7347 6e75 272c 0a09 => 'cpIsGnu',.. │ │ │ │ +0000cbe0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +0000cbf0: 696f 6e27 203d 3e20 272d 2d63 7049 7347 ion' => '--cpIsG │ │ │ │ +0000cc00: 6e75 272c 0a09 0909 0909 2020 2020 272d nu',...... '- │ │ │ │ +0000cc10: 6366 5f6b 6579 2720 3d3e 2027 6370 4973 cf_key' => 'cpIs │ │ │ │ +0000cc20: 476e 7527 2c0a 0909 0909 0920 2020 2027 Gnu',...... ' │ │ │ │ +0000cc30: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ │ +0000cc40: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ │ +0000cc50: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +0000cc60: 2827 2d6e 616d 6527 203d 3e20 276c 696e ('-name' => 'lin │ │ │ │ +0000cc70: 6b53 796d 6c69 6e6b 7327 2c0a 0909 0909 kSymlinks',..... │ │ │ │ +0000cc80: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +0000cc90: 2720 3d3e 2027 2d2d 6c69 6e6b 5379 6d6c ' => '--linkSyml │ │ │ │ +0000cca0: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... │ │ │ │ +0000ccb0: 272d 6366 5f6b 6579 2720 3d3e 2027 6c69 '-cf_key' => 'li │ │ │ │ +0000ccc0: 6e6b 5379 6d6c 696e 6b73 272c 0a09 0909 nkSymlinks',.... │ │ │ │ +0000ccd0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ │ +0000cce0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ │ +0000ccf0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ │ +0000cd00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000cd10: 3d3e 2027 7072 6563 6f6d 6d61 6e64 272c => 'precommand', │ │ │ │ +0000cd20: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +0000cd30: 7074 696f 6e27 203d 3e20 272d 2d70 7265 ption' => '--pre │ │ │ │ +0000cd40: 636f 6d6d 616e 6427 2c0a 0909 0909 0920 command',...... │ │ │ │ +0000cd50: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +0000cd60: 2770 7265 636f 6d6d 616e 6427 2c0a 0909 'precommand',... │ │ │ │ +0000cd70: 0909 0920 2020 2027 2d71 756f 7465 4576 ... '-quoteEv │ │ │ │ +0000cd80: 616c 2720 3d3e 2027 7965 7327 292c 0a09 al' => 'yes'),.. │ │ │ │ +0000cd90: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000cda0: 2d6e 616d 6527 203d 3e20 2770 6f73 7463 -name' => 'postc │ │ │ │ +0000cdb0: 6f6d 6d61 6e64 272c 0a09 0909 0909 2020 ommand',...... │ │ │ │ +0000cdc0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000cdd0: 3e20 272d 2d70 6f73 7463 6f6d 6d61 6e64 > '--postcommand │ │ │ │ +0000cde0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +0000cdf0: 5f6b 6579 2720 3d3e 2027 706f 7374 636f _key' => 'postco │ │ │ │ +0000ce00: 6d6d 616e 6427 2c0a 0909 0909 0920 2020 mmand',...... │ │ │ │ +0000ce10: 2027 2d71 756f 7465 4576 616c 2720 3d3e '-quoteEval' => │ │ │ │ +0000ce20: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ │ +0000ce30: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000ce40: 203d 3e20 2766 6f6c 6c6f 774c 696e 6b73 => 'followLinks │ │ │ │ +0000ce50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000ce60: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f │ │ │ │ +0000ce70: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',.... │ │ │ │ +0000ce80: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000ce90: 3d3e 2027 666f 6c6c 6f77 4c69 6e6b 7327 => 'followLinks' │ │ │ │ +0000cea0: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +0000ceb0: 6175 6c74 2720 3d3e 2030 2c0a 0909 0909 ault' => 0,..... │ │ │ │ +0000cec0: 0920 2020 2027 2d70 6174 7465 726e 2720 . '-pattern' │ │ │ │ +0000ced0: 3d3e 2027 5c41 5c64 2b5c 5a27 292c 0a09 => '\A\d+\Z'),.. │ │ │ │ +0000cee0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000cef0: 2d6e 616d 6527 203d 3e20 2768 6967 684c -name' => 'highL │ │ │ │ +0000cf00: 6174 656e 6379 272c 0a09 0909 0909 2020 atency',...... │ │ │ │ +0000cf10: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000cf20: 3e20 272d 2d68 6967 684c 6174 656e 6379 > '--highLatency │ │ │ │ +0000cf30: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +0000cf40: 5f6b 6579 2720 3d3e 2027 6869 6768 4c61 _key' => 'highLa │ │ │ │ +0000cf50: 7465 6e63 7927 2c0a 0909 0909 0920 2020 tency',...... │ │ │ │ +0000cf60: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ │ +0000cf70: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ │ +0000cf80: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +0000cf90: 6577 2827 2d6e 616d 6527 203d 3e20 2769 ew('-name' => 'i │ │ │ │ +0000cfa0: 676e 6f72 6550 6572 6d73 272c 0a09 0909 gnorePerms',.... │ │ │ │ +0000cfb0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +0000cfc0: 6e27 203d 3e20 272d 2d69 676e 6f72 6550 n' => '--ignoreP │ │ │ │ +0000cfd0: 6572 6d73 272c 0a09 0909 0909 2020 2020 erms',...... │ │ │ │ +0000cfe0: 272d 6366 5f6b 6579 2720 3d3e 2027 6967 '-cf_key' => 'ig │ │ │ │ +0000cff0: 6e6f 7265 5065 726d 7327 2c0a 0909 0909 norePerms',..... │ │ │ │ +0000d000: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ │ +0000d010: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ │ +0000d020: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio │ │ │ │ +0000d030: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +0000d040: 3e20 276c 6174 654c 696e 6b73 272c 0a09 > 'lateLinks',.. │ │ │ │ +0000d050: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +0000d060: 696f 6e27 203d 3e20 272d 2d6c 6174 654c ion' => '--lateL │ │ │ │ +0000d070: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... │ │ │ │ +0000d080: 272d 6366 5f6b 6579 2720 3d3e 2027 6c61 '-cf_key' => 'la │ │ │ │ +0000d090: 7465 4c69 6e6b 7327 2c0a 0909 0909 0920 teLinks',...... │ │ │ │ +0000d0a0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ │ +0000d0b0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ │ +0000d0c0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option- │ │ │ │ +0000d0d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000d0e0: 276c 6174 6543 6f6d 7072 6573 7327 2c0a 'lateCompress',. │ │ │ │ +0000d0f0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +0000d100: 7469 6f6e 2720 3d3e 2027 2d2d 6c61 7465 tion' => '--late │ │ │ │ +0000d110: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',...... │ │ │ │ +0000d120: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ │ +0000d130: 3e20 275b 6c61 7465 4c69 6e6b 735d 272c > '[lateLinks]', │ │ │ │ +0000d140: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000d150: 6579 2720 3d3e 2027 6c61 7465 436f 6d70 ey' => 'lateComp │ │ │ │ +0000d160: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... │ │ │ │ +0000d170: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ │ +0000d180: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ │ +0000d190: 2c0a 0909 0909 4062 6c6f 636b 5275 6c65 ,.....@blockRule │ │ │ │ +0000d1a0: 734f 7074 732c 0a09 0909 0940 626c 6f63 sOpts,.....@bloc │ │ │ │ +0000d1b0: 6b44 6576 6963 6573 4f70 7473 2c0a 0909 kDevicesOpts,... │ │ │ │ +0000d1c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000d1d0: 6e61 6d65 2720 3d3e 2027 6368 6563 6b42 name' => 'checkB │ │ │ │ +0000d1e0: 6c6f 636b 7353 7566 6669 7827 2c0a 0909 locksSuffix',... │ │ │ │ +0000d1f0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000d200: 6f6e 2720 3d3e 2027 2d2d 6368 6563 6b42 on' => '--checkB │ │ │ │ +0000d210: 6c6f 636b 7353 7566 6669 7827 2c0a 0909 locksSuffix',... │ │ │ │ +0000d220: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000d230: 203d 3e20 2763 6865 636b 426c 6f63 6b73 => 'checkBlocks │ │ │ │ +0000d240: 5375 6666 6978 272c 0a09 0909 0909 2020 Suffix',...... │ │ │ │ +0000d250: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ │ +0000d260: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ │ +0000d270: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000d280: 203d 3e20 2763 6865 636b 426c 6f63 6b73 => 'checkBlocks │ │ │ │ +0000d290: 4d69 6e53 697a 6527 2c0a 0909 0909 0920 MinSize',...... │ │ │ │ +0000d2a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +0000d2b0: 3d3e 2027 2d2d 6368 6563 6b42 6c6f 636b => '--checkBlock │ │ │ │ +0000d2c0: 734d 696e 5369 7a65 272c 0a09 0909 0909 sMinSize',...... │ │ │ │ +0000d2d0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000d2e0: 2027 6368 6563 6b42 6c6f 636b 734d 696e 'checkBlocksMin │ │ │ │ +0000d2f0: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... │ │ │ │ +0000d300: 272d 6465 6661 756c 7427 203d 3e20 2731 '-default' => '1 │ │ │ │ +0000d310: 3030 4d27 292c 0a09 0909 094f 7074 696f 00M'),.....Optio │ │ │ │ +0000d320: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +0000d330: 3e20 2763 6865 636b 426c 6f63 6b73 4253 > 'checkBlocksBS │ │ │ │ +0000d340: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000d350: 5f6f 7074 696f 6e27 203d 3e20 272d 2d63 _option' => '--c │ │ │ │ +0000d360: 6865 636b 426c 6f63 6b73 4253 272c 0a09 heckBlocksBS',.. │ │ │ │ +0000d370: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +0000d380: 2720 3d3e 2027 6368 6563 6b42 6c6f 636b ' => 'checkBlock │ │ │ │ +0000d390: 7342 5327 2c0a 0909 0909 0920 2020 2027 sBS',...... ' │ │ │ │ +0000d3a0: 2d64 6566 6175 6c74 2720 3d3e 2024 6368 -default' => $ch │ │ │ │ +0000d3b0: 6563 6b42 6c6f 636b 7342 5364 6566 6175 eckBlocksBSdefau │ │ │ │ +0000d3c0: 6c74 292c 0a09 0909 094f 7074 696f 6e2d lt),.....Option- │ │ │ │ +0000d3d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000d3e0: 2763 6865 636b 426c 6f63 6b73 436f 6d70 'checkBlocksComp │ │ │ │ +0000d3f0: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ │ +0000d400: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ │ +0000d410: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr │ │ │ │ +0000d420: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +0000d430: 5f6b 6579 2720 3d3e 2027 6368 6563 6b42 _key' => 'checkB │ │ │ │ +0000d440: 6c6f 636b 7343 6f6d 7072 272c 0a09 0909 locksCompr',.... │ │ │ │ +0000d450: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ │ +0000d460: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ │ +0000d470: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ │ +0000d480: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000d490: 3d3e 2027 7175 6575 6542 6c6f 636b 272c => 'queueBlock', │ │ │ │ +0000d4a0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +0000d4b0: 7074 696f 6e27 203d 3e20 272d 2d71 7565 ption' => '--que │ │ │ │ +0000d4c0: 7565 426c 6f63 6b27 2c0a 0909 0909 0920 ueBlock',...... │ │ │ │ +0000d4d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +0000d4e0: 2771 7565 7565 426c 6f63 6b27 2c0a 0909 'queueBlock',... │ │ │ │ +0000d4f0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +0000d500: 2720 3d3e 2024 7175 6575 6542 6c6f 636b ' => $queueBlock │ │ │ │ +0000d510: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat │ │ │ │ +0000d520: 7465 726e 2720 3d3e 2027 5c41 5b31 2d39 tern' => '\A[1-9 │ │ │ │ +0000d530: 5d5c 642a 5c5a 2729 2c0a 0909 0909 4f70 ]\d*\Z'),.....Op │ │ │ │ +0000d540: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000d550: 2720 3d3e 2027 7361 7665 5241 4d27 2c0a ' => 'saveRAM',. │ │ │ │ +0000d560: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +0000d570: 7469 6f6e 2720 3d3e 2027 2d2d 7361 7665 tion' => '--save │ │ │ │ +0000d580: 5241 4d27 2c0a 0909 0909 0920 2020 2027 RAM',...... ' │ │ │ │ +0000d590: 2d63 665f 6b65 7927 203d 3e20 2773 6176 -cf_key' => 'sav │ │ │ │ +0000d5a0: 6552 414d 272c 0a09 0909 0909 2020 2020 eRAM',...... │ │ │ │ +0000d5b0: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ │ +0000d5c0: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ │ +0000d5d0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +0000d5e0: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co │ │ │ │ +0000d5f0: 6d70 7265 7373 272c 0a09 0909 0909 2020 mpress',...... │ │ │ │ +0000d600: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000d610: 3e20 272d 6327 2c0a 0909 0909 0920 2020 > '-c',...... │ │ │ │ +0000d620: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +0000d630: 272d 2d63 6f6d 7072 6573 7327 2c0a 0909 '--compress',... │ │ │ │ +0000d640: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000d650: 203d 3e20 2763 6f6d 7072 6573 7327 2c0a => 'compress',. │ │ │ │ +0000d660: 0909 0909 0920 2020 2027 2d71 756f 7465 ..... '-quote │ │ │ │ +0000d670: 4576 616c 2720 3d3e 2027 7965 7327 2c0a Eval' => 'yes',. │ │ │ │ +0000d680: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ │ +0000d690: 6c74 2720 3d3e 205c 4063 6f6d 7072 6573 lt' => \@compres │ │ │ │ +0000d6a0: 7329 2c0a 0909 0909 4f70 7469 6f6e 2d3e s),.....Option-> │ │ │ │ +0000d6b0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +0000d6c0: 756e 636f 6d70 7265 7373 272c 0a09 0909 uncompress',.... │ │ │ │ +0000d6d0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +0000d6e0: 6e27 203d 3e20 272d 7527 2c0a 0909 0909 n' => '-u',..... │ │ │ │ +0000d6f0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +0000d700: 203d 3e20 272d 2d75 6e63 6f6d 7072 6573 => '--uncompres │ │ │ │ +0000d710: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ │ +0000d720: 665f 6b65 7927 203d 3e20 2775 6e63 6f6d f_key' => 'uncom │ │ │ │ +0000d730: 7072 6573 7327 2c0a 0909 0909 0920 2020 press',...... │ │ │ │ +0000d740: 2027 2d71 756f 7465 4576 616c 2720 3d3e '-quoteEval' => │ │ │ │ +0000d750: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... │ │ │ │ +0000d760: 2027 2d64 6566 6175 6c74 2720 3d3e 205c '-default' => \ │ │ │ │ +0000d770: 4075 6e63 6f6d 7072 6573 7329 2c0a 0909 @uncompress),... │ │ │ │ +0000d780: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000d790: 6e61 6d65 2720 3d3e 2027 706f 7374 6669 name' => 'postfi │ │ │ │ +0000d7a0: 7827 2c0a 0909 0909 0920 2020 2027 2d63 x',...... '-c │ │ │ │ +0000d7b0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d70 l_option' => '-p │ │ │ │ +0000d7c0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000d7d0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 706f _alias' => '--po │ │ │ │ +0000d7e0: 7374 6669 7827 2c0a 0909 0909 0920 2020 stfix',...... │ │ │ │ +0000d7f0: 2027 2d63 665f 6b65 7927 203d 3e20 2770 '-cf_key' => 'p │ │ │ │ +0000d800: 6f73 7466 6978 272c 0a09 0909 0909 2020 ostfix',...... │ │ │ │ +0000d810: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => │ │ │ │ +0000d820: 2470 6f73 7466 6978 292c 0a23 0909 0909 $postfix),.#.... │ │ │ │ +0000d830: 4063 6f6d 7072 6573 7352 756c 6573 2c0a @compressRules,. │ │ │ │ +0000d840: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +0000d850: 272d 6e61 6d65 2720 3d3e 2027 6d69 6e43 '-name' => 'minC │ │ │ │ +0000d860: 6f6d 7072 6573 7353 697a 6527 2c0a 0909 ompressSize',... │ │ │ │ +0000d870: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000d880: 6f6e 2720 3d3e 2027 2d2d 6d69 6e43 6f6d on' => '--minCom │ │ │ │ +0000d890: 7072 6573 7353 697a 6527 2c0a 0909 0909 pressSize',..... │ │ │ │ +0000d8a0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000d8b0: 3e20 276d 696e 436f 6d70 7265 7373 5369 > 'minCompressSi │ │ │ │ +0000d8c0: 7a65 272c 0a09 0909 0909 2020 2020 272d ze',...... '- │ │ │ │ +0000d8d0: 6465 6661 756c 7427 203d 3e20 246d 696e default' => $min │ │ │ │ +0000d8e0: 436f 6d70 7265 7373 5369 7a65 2c0a 0909 CompressSize,... │ │ │ │ +0000d8f0: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern │ │ │ │ +0000d900: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 292c ' => '\A\d+\Z'), │ │ │ │ +0000d910: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +0000d920: 2827 2d6e 616d 6527 203d 3e20 2763 6f6d ('-name' => 'com │ │ │ │ +0000d930: 7072 5275 6c65 272c 0a09 0909 0909 2020 prRule',...... │ │ │ │ +0000d940: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000d950: 3e20 272d 2d63 6f6d 7072 5275 6c65 272c > '--comprRule', │ │ │ │ +0000d960: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000d970: 6579 2720 3d3e 2027 636f 6d70 7252 756c ey' => 'comprRul │ │ │ │ +0000d980: 6527 2c0a 0909 0909 0920 2020 2027 2d71 e',...... '-q │ │ │ │ +0000d990: 756f 7465 4576 616c 2720 3d3e 2027 7965 uoteEval' => 'ye │ │ │ │ +0000d9a0: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option- │ │ │ │ +0000d9b0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000d9c0: 276e 6f43 6f6d 7072 6573 7327 2c0a 0909 'noCompress',... │ │ │ │ +0000d9d0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000d9e0: 6f6e 2720 3d3e 2027 2d2d 6e6f 436f 6d70 on' => '--noComp │ │ │ │ +0000d9f0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... │ │ │ │ +0000da00: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no │ │ │ │ +0000da10: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',...... │ │ │ │ +0000da20: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ │ +0000da30: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ │ +0000da40: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\ │ │ │ │ +0000da50: 415b 312d 395d 5c64 2a5c 5a27 292c 0a09 A[1-9]\d*\Z'),.. │ │ │ │ +0000da60: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000da70: 2d6e 616d 6527 203d 3e20 2771 7565 7565 -name' => 'queue │ │ │ │ +0000da80: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',...... │ │ │ │ +0000da90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000daa0: 203d 3e20 272d 2d71 7565 7565 436f 6d70 => '--queueComp │ │ │ │ +0000dab0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... │ │ │ │ +0000dac0: 272d 6366 5f6b 6579 2720 3d3e 2027 7175 '-cf_key' => 'qu │ │ │ │ +0000dad0: 6575 6543 6f6d 7072 6573 7327 2c0a 0909 eueCompress',... │ │ │ │ +0000dae0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +0000daf0: 2720 3d3e 2024 7175 6575 6543 6f6d 7072 ' => $queueCompr │ │ │ │ +0000db00: 6573 732c 0a09 0909 0909 2020 2020 272d ess,...... '- │ │ │ │ +0000db10: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\A[ │ │ │ │ +0000db20: 312d 395d 5c64 2a5c 5a27 292c 0a09 0909 1-9]\d*\Z'),.... │ │ │ │ +0000db30: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +0000db40: 616d 6527 203d 3e20 276e 6f43 6f70 7927 ame' => 'noCopy' │ │ │ │ +0000db50: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000db60: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6e6f option' => '--no │ │ │ │ +0000db70: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... │ │ │ │ +0000db80: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no │ │ │ │ +0000db90: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... │ │ │ │ +0000dba0: 272d 6465 6661 756c 7427 203d 3e20 246e '-default' => $n │ │ │ │ +0000dbb0: 6f43 6f70 792c 0a09 0909 0909 2020 2020 oCopy,...... │ │ │ │ +0000dbc0: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\ │ │ │ │ +0000dbd0: 415b 312d 395d 5c64 2a5c 5a27 292c 0a09 A[1-9]\d*\Z'),.. │ │ │ │ +0000dbe0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000dbf0: 2d6e 616d 6527 203d 3e20 2771 7565 7565 -name' => 'queue │ │ │ │ +0000dc00: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... │ │ │ │ +0000dc10: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000dc20: 272d 2d71 7565 7565 436f 7079 272c 0a09 '--queueCopy',.. │ │ │ │ +0000dc30: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +0000dc40: 2720 3d3e 2027 7175 6575 6543 6f70 7927 ' => 'queueCopy' │ │ │ │ +0000dc50: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +0000dc60: 6175 6c74 2720 3d3e 2024 7175 6575 6543 ault' => $queueC │ │ │ │ +0000dc70: 6f70 792c 0a09 0909 0909 2020 2020 272d opy,...... '- │ │ │ │ +0000dc80: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\A[ │ │ │ │ +0000dc90: 312d 395d 5c64 2a5c 5a27 292c 0a09 0909 1-9]\d*\Z'),.... │ │ │ │ +0000dca0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +0000dcb0: 616d 6527 203d 3e20 2763 6f70 7942 574c ame' => 'copyBWL │ │ │ │ +0000dcc0: 696d 6974 272c 0a09 0909 0909 2020 2020 imit',...... │ │ │ │ +0000dcd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000dce0: 272d 2d63 6f70 7942 574c 696d 6974 272c '--copyBWLimit', │ │ │ │ +0000dcf0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000dd00: 6579 2720 3d3e 2027 636f 7079 4257 4c69 ey' => 'copyBWLi │ │ │ │ +0000dd10: 6d69 7427 2c0a 0909 0909 0920 2020 2027 mit',...... ' │ │ │ │ +0000dd20: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ │ +0000dd30: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat │ │ │ │ +0000dd40: 7465 726e 2720 3d3e 2027 5c41 5c64 2b5c tern' => '\A\d+\ │ │ │ │ +0000dd50: 5a27 292c 0a09 0909 094f 7074 696f 6e2d Z'),.....Option- │ │ │ │ +0000dd60: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000dd70: 2777 6974 6855 7365 7247 726f 7570 5374 'withUserGroupSt │ │ │ │ +0000dd80: 6174 272c 0a09 0909 0909 2020 2020 272d at',...... '- │ │ │ │ +0000dd90: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +0000dda0: 2d77 6974 6855 7365 7247 726f 7570 5374 -withUserGroupSt │ │ │ │ +0000ddb0: 6174 272c 0a09 0909 0909 2020 2020 272d at',...... '- │ │ │ │ +0000ddc0: 6366 5f6b 6579 2720 3d3e 2027 7769 7468 cf_key' => 'with │ │ │ │ +0000ddd0: 5573 6572 4772 6f75 7053 7461 7427 2c0a UserGroupStat',. │ │ │ │ +0000dde0: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no │ │ │ │ +0000ddf0: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes │ │ │ │ +0000de00: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O │ │ │ │ +0000de10: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000de20: 6527 203d 3e20 2775 7365 7247 726f 7570 e' => 'userGroup │ │ │ │ +0000de30: 5374 6174 4669 6c65 272c 0a09 0909 0909 StatFile',...... │ │ │ │ +0000de40: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000de50: 203d 3e20 272d 2d75 7365 7247 726f 7570 => '--userGroup │ │ │ │ +0000de60: 5374 6174 4669 6c65 272c 0a09 0909 0909 StatFile',...... │ │ │ │ +0000de70: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000de80: 2027 7573 6572 4772 6f75 7053 7461 7446 'userGroupStatF │ │ │ │ +0000de90: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ │ +0000dea0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ │ +0000deb0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +0000dec0: 6577 2827 2d6e 616d 6527 203d 3e20 2765 ew('-name' => 'e │ │ │ │ +0000ded0: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',... │ │ │ │ +0000dee0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000def0: 6f6e 2720 3d3e 2027 2d2d 6578 6365 7074 on' => '--except │ │ │ │ +0000df00: 5375 6666 6978 272c 0a09 0909 0909 2020 Suffix',...... │ │ │ │ +0000df10: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +0000df20: 6578 6365 7074 5375 6666 6978 272c 0a09 exceptSuffix',.. │ │ │ │ +0000df30: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip │ │ │ │ +0000df40: 6c65 2720 3d3e 2027 7965 7327 2c0a 0909 le' => 'yes',... │ │ │ │ +0000df50: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +0000df60: 2720 3d3e 205c 4065 7863 6570 7453 7566 ' => \@exceptSuf │ │ │ │ +0000df70: 6669 7829 2c0a 0909 0909 4f70 7469 6f6e fix),.....Option │ │ │ │ +0000df80: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000df90: 2027 636f 6d70 7265 7373 5375 6666 6978 'compressSuffix │ │ │ │ +0000dfa0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000dfb0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d63 _option' => '--c │ │ │ │ +0000dfc0: 6f6d 7072 6573 7353 7566 6669 7827 2c0a ompressSuffix',. │ │ │ │ +0000dfd0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +0000dfe0: 7927 203d 3e20 2763 6f6d 7072 6573 7353 y' => 'compressS │ │ │ │ +0000dff0: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... │ │ │ │ +0000e000: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => │ │ │ │ +0000e010: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ │ +0000e020: 272d 6465 6661 756c 7427 203d 3e20 5b5d '-default' => [] │ │ │ │ +0000e030: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +0000e040: 6577 2827 2d6e 616d 6527 203d 3e20 2761 ew('-name' => 'a │ │ │ │ +0000e050: 6464 4578 6365 7074 5375 6666 6978 272c ddExceptSuffix', │ │ │ │ +0000e060: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +0000e070: 7074 696f 6e27 203d 3e20 272d 2d61 6464 ption' => '--add │ │ │ │ +0000e080: 4578 6365 7074 5375 6666 6978 272c 0a09 ExceptSuffix',.. │ │ │ │ +0000e090: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +0000e0a0: 2720 3d3e 2027 6164 6445 7863 6570 7453 ' => 'addExceptS │ │ │ │ +0000e0b0: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... │ │ │ │ +0000e0c0: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => │ │ │ │ +0000e0d0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ │ +0000e0e0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000e0f0: 3d3e 2027 646f 4e6f 7443 6f6d 7072 6573 => 'doNotCompres │ │ │ │ +0000e100: 734d 4435 4669 6c65 272c 0a09 0909 0909 sMD5File',...... │ │ │ │ +0000e110: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000e120: 203d 3e20 272d 2d64 6f4e 6f74 436f 6d70 => '--doNotComp │ │ │ │ +0000e130: 7265 7373 4d44 3546 696c 6527 2c0a 0909 ressMD5File',... │ │ │ │ +0000e140: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000e150: 203d 3e20 2764 6f4e 6f74 436f 6d70 7265 => 'doNotCompre │ │ │ │ +0000e160: 7373 4d44 3546 696c 6527 2c0a 0909 0909 ssMD5File',..... │ │ │ │ +0000e170: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ │ +0000e180: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ │ +0000e190: 6e6f 275d 292c 0a20 2020 2020 2020 2020 no']),. │ │ │ │ +0000e1a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000e1b0: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n │ │ │ │ +0000e1c0: 6577 2827 2d6e 616d 6527 203d 3e20 2763 ew('-name' => 'c │ │ │ │ +0000e1d0: 686d 6f64 4d44 3546 696c 6527 2c0a 0909 hmodMD5File',... │ │ │ │ +0000e1e0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000e1f0: 6f6e 2720 3d3e 2027 2d2d 6368 6d6f 644d on' => '--chmodM │ │ │ │ +0000e200: 4435 4669 6c65 272c 0a09 0909 0909 2020 D5File',...... │ │ │ │ +0000e210: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +0000e220: 6368 6d6f 644d 4435 4669 6c65 272c 0a09 chmodMD5File',.. │ │ │ │ +0000e230: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ │ +0000e240: 7427 203d 3e20 2463 686d 6f64 4d44 3546 t' => $chmodMD5F │ │ │ │ +0000e250: 696c 652c 0a09 0909 0909 2020 2020 272d ile,...... '- │ │ │ │ +0000e260: 7061 7474 6572 6e27 203d 3e20 275c 4130 pattern' => '\A0 │ │ │ │ +0000e270: 5b30 2d37 5d7b 332c 347d 5c5a 2729 2c0a [0-7]{3,4}\Z'),. │ │ │ │ +0000e280: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +0000e290: 272d 6e61 6d65 2720 3d3e 2027 7665 7262 '-name' => 'verb │ │ │ │ +0000e2a0: 6f73 6527 2c0a 0909 0909 0920 2020 2027 ose',...... ' │ │ │ │ +0000e2b0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +0000e2c0: 2d76 272c 0a09 0909 0909 2020 2020 272d -v',...... '- │ │ │ │ +0000e2d0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ │ +0000e2e0: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... │ │ │ │ +0000e2f0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +0000e300: 2776 6572 626f 7365 272c 0a09 0909 0909 'verbose',...... │ │ │ │ +0000e310: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe │ │ │ │ +0000e320: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n │ │ │ │ +0000e330: 6f27 5d29 2c0a 0909 0909 4f70 7469 6f6e o']),.....Option │ │ │ │ +0000e340: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000e350: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... │ │ │ │ +0000e360: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +0000e370: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... │ │ │ │ +0000e380: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ │ +0000e390: 2027 2d2d 6465 6275 6727 2c0a 0909 0909 '--debug',..... │ │ │ │ +0000e3a0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000e3b0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',...... │ │ │ │ +0000e3c0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' = │ │ │ │ +0000e3d0: 3e20 302c 0a09 0909 0909 2020 2020 272d > 0,...... '- │ │ │ │ +0000e3e0: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\A[ │ │ │ │ +0000e3f0: 302d 345d 5c5a 2729 2c0a 0909 0909 4f70 0-4]\Z'),.....Op │ │ │ │ +0000e400: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000e410: 2720 3d3e 2027 7265 7365 7441 7469 6d65 ' => 'resetAtime │ │ │ │ +0000e420: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000e430: 5f6f 7074 696f 6e27 203d 3e20 272d 2d72 _option' => '--r │ │ │ │ +0000e440: 6573 6574 4174 696d 6527 2c0a 0909 0909 esetAtime',..... │ │ │ │ +0000e450: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000e460: 3e20 2772 6573 6574 4174 696d 6527 2c0a > 'resetAtime',. │ │ │ │ +0000e470: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no │ │ │ │ +0000e480: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes │ │ │ │ +0000e490: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O │ │ │ │ +0000e4a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000e4b0: 6527 203d 3e20 2764 6f4e 6f74 4465 6c65 e' => 'doNotDele │ │ │ │ +0000e4c0: 7465 272c 0a09 0909 0909 2020 2020 272d te',...... '- │ │ │ │ +0000e4d0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +0000e4e0: 2d64 6f4e 6f74 4465 6c65 7465 272c 0a09 -doNotDelete',.. │ │ │ │ +0000e4f0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +0000e500: 2720 3d3e 2027 646f 4e6f 7444 656c 6574 ' => 'doNotDelet │ │ │ │ +0000e510: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +0000e520: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [ │ │ │ │ +0000e530: 2779 6573 272c 2027 6e6f 275d 292c 0a09 'yes', 'no']),.. │ │ │ │ +0000e540: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000e550: 2d6e 616d 6527 203d 3e20 2764 656c 6574 -name' => 'delet │ │ │ │ +0000e560: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs │ │ │ │ +0000e570: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000e580: 5f6f 7074 696f 6e27 203d 3e20 272d 2d64 _option' => '--d │ │ │ │ +0000e590: 656c 6574 654e 6f74 4669 6e69 7368 6564 eleteNotFinished │ │ │ │ +0000e5a0: 4469 7273 272c 0a09 0909 0909 2020 2020 Dirs',...... │ │ │ │ +0000e5b0: 272d 6366 5f6b 6579 2720 3d3e 2027 6465 '-cf_key' => 'de │ │ │ │ +0000e5c0: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD │ │ │ │ +0000e5d0: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... ' │ │ │ │ +0000e5e0: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ │ +0000e5f0: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ │ +0000e600: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +0000e610: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee │ │ │ │ +0000e620: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... │ │ │ │ +0000e630: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000e640: 272d 2d6b 6565 7041 6c6c 272c 0a09 0909 '--keepAll',.... │ │ │ │ +0000e650: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000e660: 3d3e 2027 6b65 6570 416c 6c27 2c0a 0909 => 'keepAll',... │ │ │ │ +0000e670: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +0000e680: 2720 3d3e 2024 6b65 6570 416c 6c29 2c0a ' => $keepAll),. │ │ │ │ +0000e690: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +0000e6a0: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ │ +0000e6b0: 5765 656b 6461 7927 2c0a 0909 0909 0920 Weekday',...... │ │ │ │ +0000e6c0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +0000e6d0: 3d3e 2027 2d2d 6b65 6570 5765 656b 6461 => '--keepWeekda │ │ │ │ +0000e6e0: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c │ │ │ │ +0000e6f0: 665f 6b65 7927 203d 3e20 276b 6565 7057 f_key' => 'keepW │ │ │ │ +0000e700: 6565 6b64 6179 272c 0a09 0909 0909 2020 eekday',...... │ │ │ │ +0000e710: 2020 272d 7175 6f74 6545 7661 6c27 203d '-quoteEval' = │ │ │ │ +0000e720: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ │ +0000e730: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000e740: 2720 3d3e 2027 6b65 6570 4669 7273 744f ' => 'keepFirstO │ │ │ │ +0000e750: 6659 6561 7227 2c0a 0909 0909 0920 2020 fYear',...... │ │ │ │ +0000e760: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000e770: 2027 2d2d 6b65 6570 4669 7273 744f 6659 '--keepFirstOfY │ │ │ │ +0000e780: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... ' │ │ │ │ +0000e790: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee │ │ │ │ +0000e7a0: 7046 6972 7374 4f66 5965 6172 272c 0a09 pFirstOfYear',.. │ │ │ │ +0000e7b0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ │ +0000e7c0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ │ +0000e7d0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +0000e7e0: 6d65 2720 3d3e 2027 6b65 6570 4c61 7374 me' => 'keepLast │ │ │ │ +0000e7f0: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... │ │ │ │ +0000e800: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000e810: 3e20 272d 2d6b 6565 704c 6173 744f 6659 > '--keepLastOfY │ │ │ │ +0000e820: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... ' │ │ │ │ +0000e830: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee │ │ │ │ +0000e840: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',... │ │ │ │ +0000e850: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ │ +0000e860: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O │ │ │ │ +0000e870: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000e880: 6527 203d 3e20 276b 6565 7046 6972 7374 e' => 'keepFirst │ │ │ │ +0000e890: 4f66 4d6f 6e74 6827 2c0a 0909 0909 0920 OfMonth',...... │ │ │ │ +0000e8a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +0000e8b0: 3d3e 2027 2d2d 6b65 6570 4669 7273 744f => '--keepFirstO │ │ │ │ +0000e8c0: 664d 6f6e 7468 272c 0a09 0909 0909 2020 fMonth',...... │ │ │ │ +0000e8d0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +0000e8e0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ │ +0000e8f0: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +0000e900: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ │ +0000e910: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +0000e920: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ │ +0000e930: 4c61 7374 4f66 4d6f 6e74 6827 2c0a 0909 LastOfMonth',... │ │ │ │ +0000e940: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000e950: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4c61 on' => '--keepLa │ │ │ │ +0000e960: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',..... │ │ │ │ +0000e970: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000e980: 3e20 276b 6565 704c 6173 744f 664d 6f6e > 'keepLastOfMon │ │ │ │ +0000e990: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ │ +0000e9a0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ │ +0000e9b0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +0000e9c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000e9d0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ │ +0000e9e0: 6e61 6d65 2720 3d3e 2027 6669 7273 7444 name' => 'firstD │ │ │ │ +0000e9f0: 6179 4f66 5765 656b 272c 0a09 0909 0909 ayOfWeek',...... │ │ │ │ +0000ea00: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000ea10: 203d 3e20 272d 2d66 6972 7374 4461 794f => '--firstDayO │ │ │ │ +0000ea20: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... │ │ │ │ +0000ea30: 2027 2d63 665f 6b65 7927 203d 3e20 2766 '-cf_key' => 'f │ │ │ │ +0000ea40: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',. │ │ │ │ +0000ea50: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ │ +0000ea60: 6c74 2720 3d3e 2027 5375 6e27 292c 0a09 lt' => 'Sun'),.. │ │ │ │ +0000ea70: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +0000ea80: 2d6e 616d 6527 203d 3e20 276b 6565 7046 -name' => 'keepF │ │ │ │ +0000ea90: 6972 7374 4f66 5765 656b 272c 0a09 0909 irstOfWeek',.... │ │ │ │ +0000eaa0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +0000eab0: 6e27 203d 3e20 272d 2d6b 6565 7046 6972 n' => '--keepFir │ │ │ │ +0000eac0: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',...... │ │ │ │ +0000ead0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000eae0: 2027 6b65 6570 4669 7273 744f 6657 6565 'keepFirstOfWee │ │ │ │ +0000eaf0: 6b27 2c0a 0909 0909 0920 2020 2027 2d70 k',...... '-p │ │ │ │ +0000eb00: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'), │ │ │ │ +0000eb10: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +0000eb20: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee │ │ │ │ +0000eb30: 704c 6173 744f 6657 6565 6b27 2c0a 0909 pLastOfWeek',... │ │ │ │ +0000eb40: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +0000eb50: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4c61 on' => '--keepLa │ │ │ │ +0000eb60: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',...... │ │ │ │ +0000eb70: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000eb80: 2027 6b65 6570 4c61 7374 4f66 5765 656b 'keepLastOfWeek │ │ │ │ +0000eb90: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +0000eba0: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ │ +0000ebb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ebc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ebd0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +0000ebe0: 6d65 2720 3d3e 2027 6b65 6570 4475 706c me' => 'keepDupl │ │ │ │ +0000ebf0: 6963 6174 6527 2c0a 0909 0909 0920 2020 icate',...... │ │ │ │ +0000ec00: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000ec10: 2027 2d2d 6b65 6570 4475 706c 6963 6174 '--keepDuplicat │ │ │ │ +0000ec20: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +0000ec30: 665f 6b65 7927 203d 3e20 276b 6565 7044 f_key' => 'keepD │ │ │ │ +0000ec40: 7570 6c69 6361 7465 272c 0a09 0909 0909 uplicate',...... │ │ │ │ +0000ec50: 2020 2020 272d 6465 6661 756c 7427 203d '-default' = │ │ │ │ +0000ec60: 3e20 246b 6565 7044 7570 6c69 6361 7465 > $keepDuplicate │ │ │ │ +0000ec70: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. │ │ │ │ +0000ec80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ec90: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ │ +0000eca0: 2d6e 616d 6527 203d 3e20 276b 6565 704d -name' => 'keepM │ │ │ │ +0000ecb0: 696e 4e75 6d62 6572 272c 0a09 0909 0909 inNumber',...... │ │ │ │ +0000ecc0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000ecd0: 203d 3e20 272d 2d6b 6565 704d 696e 4e75 => '--keepMinNu │ │ │ │ +0000ece0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... │ │ │ │ +0000ecf0: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke │ │ │ │ +0000ed00: 6570 4d69 6e4e 756d 6265 7227 2c0a 0909 epMinNumber',... │ │ │ │ +0000ed10: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +0000ed20: 2720 3d3e 2031 302c 0a09 0909 0909 2020 ' => 10,...... │ │ │ │ +0000ed30: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ │ +0000ed40: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\A\d+\Z'),. │ │ │ │ +0000ed50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ed60: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ │ +0000ed70: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000ed80: 3d3e 2027 6b65 6570 4d61 784e 756d 6265 => 'keepMaxNumbe │ │ │ │ +0000ed90: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ │ +0000eda0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ │ +0000edb0: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',. │ │ │ │ +0000edc0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +0000edd0: 7927 203d 3e20 276b 6565 704d 6178 4e75 y' => 'keepMaxNu │ │ │ │ +0000ede0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... │ │ │ │ +0000edf0: 272d 6465 6661 756c 7427 203d 3e20 302c '-default' => 0, │ │ │ │ +0000ee00: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ │ +0000ee10: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\A\d+\Z │ │ │ │ +0000ee20: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ │ +0000ee30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ee40: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ │ +0000ee50: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ │ +0000ee60: 5265 6c61 7469 7665 272c 0a09 0909 0909 Relative',...... │ │ │ │ +0000ee70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000ee80: 203d 3e20 272d 2d6b 6565 7052 656c 6174 => '--keepRelat │ │ │ │ +0000ee90: 6976 6527 2c0a 0909 0909 0920 2020 2027 ive',...... ' │ │ │ │ +0000eea0: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee │ │ │ │ +0000eeb0: 7052 656c 6174 6976 6527 2c0a 0909 0909 pRelative',..... │ │ │ │ +0000eec0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ │ +0000eed0: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',..... │ │ │ │ +0000eee0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ │ +0000eef0: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. │ │ │ │ +0000ef00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000ef10: 2020 2020 2020 2020 204f 7074 696f 6e2d Option- │ │ │ │ +0000ef20: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000ef30: 2769 676e 6f72 6552 6561 6445 7272 6f72 'ignoreReadError │ │ │ │ +0000ef40: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000ef50: 5f6f 7074 696f 6e27 203d 3e20 272d 2d69 _option' => '--i │ │ │ │ +0000ef60: 676e 6f72 6552 6561 6445 7272 6f72 272c gnoreReadError', │ │ │ │ +0000ef70: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000ef80: 6579 2720 3d3e 2027 6967 6e6f 7265 5265 ey' => 'ignoreRe │ │ │ │ +0000ef90: 6164 4572 726f 7227 2c0a 0909 0909 0920 adError',...... │ │ │ │ +0000efa0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ │ +0000efb0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ │ +0000efc0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option- │ │ │ │ +0000efd0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000efe0: 2773 7570 7072 6573 7357 6172 6e69 6e67 'suppressWarning │ │ │ │ +0000eff0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000f000: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s │ │ │ │ +0000f010: 7570 7072 6573 7357 6172 6e69 6e67 272c uppressWarning', │ │ │ │ +0000f020: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000f030: 6579 2720 3d3e 2027 7375 7070 7265 7373 ey' => 'suppress │ │ │ │ +0000f040: 5761 726e 696e 6727 2c0a 0909 0909 0920 Warning',...... │ │ │ │ +0000f050: 2020 2027 2d6d 756c 7469 706c 6527 203d '-multiple' = │ │ │ │ +0000f060: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... │ │ │ │ +0000f070: 2020 272d 7061 7474 6572 6e27 203d 3e0a '-pattern' =>. │ │ │ │ +0000f080: 2020 275c 4165 7863 4469 725c 5a7c 5c41 '\AexcDir\Z|\A │ │ │ │ +0000f090: 6669 6c65 4368 616e 6765 5c5a 7c5c 4163 fileChange\Z|\Ac │ │ │ │ +0000f0a0: 7253 6572 6965 735c 5a7c 5c41 6861 7368 rSeries\Z|\Ahash │ │ │ │ +0000f0b0: 436f 6c6c 6973 696f 6e5c 5a7c 5c41 6669 Collision\Z|\Afi │ │ │ │ +0000f0c0: 6c65 4e61 6d65 5769 7468 4c69 6e65 4665 leNameWithLineFe │ │ │ │ +0000f0d0: 6564 5c5a 2729 2c0a 0909 0909 4f70 7469 ed\Z'),.....Opti │ │ │ │ +0000f0e0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000f0f0: 3d3e 2027 6c69 6e6b 546f 5265 6365 6e74 => 'linkToRecent │ │ │ │ +0000f100: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000f110: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6c _option' => '--l │ │ │ │ +0000f120: 696e 6b54 6f52 6563 656e 7427 2c0a 0909 inkToRecent',... │ │ │ │ +0000f130: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000f140: 203d 3e20 276c 696e 6b54 6f52 6563 656e => 'linkToRecen │ │ │ │ +0000f150: 7427 2c0a 0909 0909 0920 2020 2027 2d70 t',...... '-p │ │ │ │ +0000f160: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'), │ │ │ │ +0000f170: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +0000f180: 2827 2d6e 616d 6527 203d 3e20 276c 6f67 ('-name' => 'log │ │ │ │ +0000f190: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ │ +0000f1a0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000f1b0: 272d 6c27 2c0a 0909 0909 0920 2020 2027 '-l',...... ' │ │ │ │ +0000f1c0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +0000f1d0: 2d6c 6f67 4669 6c65 272c 0a09 0909 0909 -logFile',...... │ │ │ │ +0000f1e0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000f1f0: 2027 6c6f 6746 696c 6527 2c0a 0909 0909 'logFile',..... │ │ │ │ +0000f200: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ │ +0000f210: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ │ +0000f220: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +0000f230: 203d 3e20 2770 6c75 734c 6f67 5374 646f => 'plusLogStdo │ │ │ │ +0000f240: 7574 272c 0a09 0909 0909 2020 2020 272d ut',...... '- │ │ │ │ +0000f250: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +0000f260: 2d70 6c75 734c 6f67 5374 646f 7574 272c -plusLogStdout', │ │ │ │ +0000f270: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000f280: 6579 2720 3d3e 2027 706c 7573 4c6f 6753 ey' => 'plusLogS │ │ │ │ +0000f290: 7464 6f75 7427 2c0a 0909 0909 0920 2020 tdout',...... │ │ │ │ +0000f2a0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => ' │ │ │ │ +0000f2b0: 5b6c 6f67 4669 6c65 5d27 2c0a 0909 0909 [logFile]',..... │ │ │ │ +0000f2c0: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ │ +0000f2d0: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ │ +0000f2e0: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio │ │ │ │ +0000f2f0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +0000f300: 3e20 2773 7570 7072 6573 7354 696d 6527 > 'suppressTime' │ │ │ │ +0000f310: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000f320: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7375 option' => '--su │ │ │ │ +0000f330: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',.... │ │ │ │ +0000f340: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000f350: 3d3e 2027 7375 7070 7265 7373 5469 6d65 => 'suppressTime │ │ │ │ +0000f360: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +0000f370: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => [' │ │ │ │ +0000f380: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),... │ │ │ │ +0000f390: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000f3a0: 6e61 6d65 2720 3d3e 2027 6d61 7846 696c name' => 'maxFil │ │ │ │ +0000f3b0: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... │ │ │ │ +0000f3c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000f3d0: 272d 6d27 2c0a 0909 0909 0920 2020 2027 '-m',...... ' │ │ │ │ +0000f3e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +0000f3f0: 2d6d 6178 4669 6c65 6c65 6e27 2c0a 0909 -maxFilelen',... │ │ │ │ +0000f400: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000f410: 203d 3e20 276d 6178 4669 6c65 6c65 6e27 => 'maxFilelen' │ │ │ │ +0000f420: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +0000f430: 6175 6c74 2720 3d3e 2031 6536 2c0a 0909 ault' => 1e6,... │ │ │ │ +0000f440: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern │ │ │ │ +0000f450: 2720 3d3e 2027 5c41 5b65 5c64 5d2b 5c5a ' => '\A[e\d]+\Z │ │ │ │ +0000f460: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +0000f470: 6c79 5f69 6627 203d 3e20 225b 6c6f 6746 ly_if' => "[logF │ │ │ │ +0000f480: 696c 655d 2229 2c0a 0909 0909 4f70 7469 ile]"),.....Opti │ │ │ │ +0000f490: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000f4a0: 3d3e 2027 6e6f 4f66 4f6c 6446 696c 6573 => 'noOfOldFiles │ │ │ │ +0000f4b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +0000f4c0: 5f6f 7074 696f 6e27 203d 3e20 272d 6e27 _option' => '-n' │ │ │ │ +0000f4d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000f4e0: 616c 6961 7327 203d 3e20 272d 2d6e 6f4f alias' => '--noO │ │ │ │ +0000f4f0: 664f 6c64 4669 6c65 7327 2c0a 0909 0909 fOldFiles',..... │ │ │ │ +0000f500: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +0000f510: 3e20 276e 6f4f 664f 6c64 4669 6c65 7327 > 'noOfOldFiles' │ │ │ │ +0000f520: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +0000f530: 6175 6c74 2720 3d3e 2027 3527 2c0a 0909 ault' => '5',... │ │ │ │ +0000f540: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern │ │ │ │ +0000f550: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 2c0a ' => '\A\d+\Z',. │ │ │ │ +0000f560: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ │ +0000f570: 6966 2720 3d3e 225b 6c6f 6746 696c 655d if' =>"[logFile] │ │ │ │ +0000f580: 2229 2c0a 2020 2020 2020 2020 2020 2020 "),. │ │ │ │ +0000f590: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000f5a0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ │ +0000f5b0: 272d 6e61 6d65 2720 3d3e 2027 7361 7665 '-name' => 'save │ │ │ │ +0000f5c0: 4c6f 6773 272c 0a09 0909 0909 2020 2020 Logs',...... │ │ │ │ +0000f5d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +0000f5e0: 272d 2d73 6176 654c 6f67 7327 2c0a 0909 '--saveLogs',... │ │ │ │ +0000f5f0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +0000f600: 203d 3e20 2773 6176 654c 6f67 7327 2c0a => 'saveLogs',. │ │ │ │ +0000f610: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ │ +0000f620: 6966 2720 3d3e 2022 5b6c 6f67 4669 6c65 if' => "[logFile │ │ │ │ +0000f630: 5d22 2c0a 0909 0909 0920 2020 2027 2d63 ]",...... '-c │ │ │ │ +0000f640: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [ │ │ │ │ +0000f650: 2779 6573 272c 2027 6e6f 275d 292c 0a20 'yes', 'no']),. │ │ │ │ +0000f660: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000f670: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +0000f680: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000f690: 6527 203d 3e20 2763 6f6d 7072 6573 7357 e' => 'compressW │ │ │ │ +0000f6a0: 6974 6827 2c0a 0909 0909 0920 2020 2027 ith',...... ' │ │ │ │ +0000f6b0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +0000f6c0: 2d2d 636f 6d70 7265 7373 5769 7468 272c --compressWith', │ │ │ │ +0000f6d0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +0000f6e0: 6579 2720 3d3e 2027 636f 6d70 7265 7373 ey' => 'compress │ │ │ │ +0000f6f0: 5769 7468 272c 0a09 0909 0909 2020 2020 With',...... │ │ │ │ +0000f700: 272d 6465 6661 756c 7427 203d 3e20 2762 '-default' => 'b │ │ │ │ +0000f710: 7a69 7032 272c 0a09 0909 0909 2020 2020 zip2',...... │ │ │ │ +0000f720: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => │ │ │ │ +0000f730: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ │ +0000f740: 272d 6f6e 6c79 5f69 6627 203d 3e22 5b6c '-only_if' =>"[l │ │ │ │ +0000f750: 6f67 4669 6c65 5d22 292c 0a09 0909 094f ogFile]"),.....O │ │ │ │ +0000f760: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +0000f770: 6527 203d 3e20 276c 6f67 496e 4261 636b e' => 'logInBack │ │ │ │ +0000f780: 7570 4469 7227 2c0a 0909 0909 0920 2020 upDir',...... │ │ │ │ +0000f790: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +0000f7a0: 2027 2d2d 6c6f 6749 6e42 6163 6b75 7044 '--logInBackupD │ │ │ │ +0000f7b0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '- │ │ │ │ +0000f7c0: 6366 5f6b 6579 2720 3d3e 2027 6c6f 6749 cf_key' => 'logI │ │ │ │ +0000f7d0: 6e42 6163 6b75 7044 6972 272c 0a09 0909 nBackupDir',.... │ │ │ │ +0000f7e0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ │ +0000f7f0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ │ +0000f800: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ │ +0000f810: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +0000f820: 3d3e 2027 636f 6d70 7265 7373 4c6f 6749 => 'compressLogI │ │ │ │ +0000f830: 6e42 6163 6b75 7044 6972 272c 0a09 0909 nBackupDir',.... │ │ │ │ +0000f840: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +0000f850: 6e27 203d 3e0a 0909 0909 0920 2020 2027 n' =>...... ' │ │ │ │ +0000f860: 2d2d 636f 6d70 7265 7373 4c6f 6749 6e42 --compressLogInB │ │ │ │ +0000f870: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',...... │ │ │ │ +0000f880: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +0000f890: 2027 636f 6d70 7265 7373 4c6f 6749 6e42 'compressLogInB │ │ │ │ +0000f8a0: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',...... │ │ │ │ +0000f8b0: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe │ │ │ │ +0000f8c0: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n │ │ │ │ +0000f8d0: 6f27 5d2c 0a09 0909 0909 2020 2020 272d o'],...... '- │ │ │ │ +0000f8e0: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo │ │ │ │ +0000f8f0: 6749 6e42 6163 6b75 7044 6972 5d27 292c gInBackupDir]'), │ │ │ │ +0000f900: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0000f910: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000f920: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n │ │ │ │ +0000f930: 616d 6527 203d 3e20 276c 6f67 496e 4261 ame' => 'logInBa │ │ │ │ +0000f940: 636b 7570 4469 7246 696c 654e 616d 6527 ckupDirFileName' │ │ │ │ +0000f950: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000f960: 6f70 7469 6f6e 2720 3d3e 0a09 0909 0909 option' =>...... │ │ │ │ +0000f970: 2020 2020 272d 2d6c 6f67 496e 4261 636b '--logInBack │ │ │ │ +0000f980: 7570 4469 7246 696c 654e 616d 6527 2c0a upDirFileName',. │ │ │ │ +0000f990: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +0000f9a0: 7927 203d 3e20 276c 6f67 496e 4261 636b y' => 'logInBack │ │ │ │ +0000f9b0: 7570 4469 7246 696c 654e 616d 6527 2c0a upDirFileName',. │ │ │ │ +0000f9c0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ │ +0000f9d0: 6c74 2720 3d3e 0a09 0909 0909 2020 2020 lt' =>...... │ │ │ │ +0000f9e0: 246c 6f67 496e 4261 636b 7570 4469 7246 $logInBackupDirF │ │ │ │ +0000f9f0: 696c 654e 616d 652c 0a09 0909 0909 2020 ileName,...... │ │ │ │ +0000fa00: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => │ │ │ │ +0000fa10: 275b 6c6f 6749 6e42 6163 6b75 7044 6972 '[logInBackupDir │ │ │ │ +0000fa20: 5d27 292c 0a09 0909 094f 7074 696f 6e2d ]'),.....Option- │ │ │ │ +0000fa30: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +0000fa40: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport' │ │ │ │ +0000fa50: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +0000fa60: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr │ │ │ │ +0000fa70: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',.. │ │ │ │ +0000fa80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +0000fa90: 6173 2720 3d3e 2027 2d50 272c 0a09 0909 as' => '-P',.... │ │ │ │ +0000faa0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +0000fab0: 3d3e 2027 7072 6f67 7265 7373 5265 706f => 'progressRepo │ │ │ │ +0000fac0: 7274 272c 0a09 0909 0909 2020 2020 272d rt',...... '- │ │ │ │ +0000fad0: 6465 6661 756c 7427 203d 3e20 302c 0a09 default' => 0,.. │ │ │ │ +0000fae0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ │ +0000faf0: 6e27 203d 3e20 275c 415c 642b 5c5a 2729 n' => '\A\d+\Z') │ │ │ │ +0000fb00: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +0000fb10: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr │ │ │ │ +0000fb20: 696e 7444 6570 7468 272c 0a09 0909 0909 intDepth',...... │ │ │ │ +0000fb30: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000fb40: 203d 3e20 272d 2d70 7269 6e74 4465 7074 => '--printDept │ │ │ │ +0000fb50: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c │ │ │ │ +0000fb60: 6c5f 616c 6961 7327 203d 3e20 272d 4427 l_alias' => '-D' │ │ │ │ +0000fb70: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ │ +0000fb80: 6b65 7927 203d 3e20 2770 7269 6e74 4465 key' => 'printDe │ │ │ │ +0000fb90: 7074 6827 2c0a 0909 0909 0920 2020 2027 pth',...... ' │ │ │ │ +0000fba0: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ │ +0000fbb0: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ │ +0000fbc0: 0a23 2068 6964 6465 6e20 6f70 7469 6f6e .# hidden option │ │ │ │ +0000fbd0: 730a 0909 0909 4f70 7469 6f6e 2d3e 6e65 s.....Option->ne │ │ │ │ +0000fbe0: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr │ │ │ │ +0000fbf0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... │ │ │ │ +0000fc00: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +0000fc10: 3e20 272d 2d70 7269 6e74 416c 6c27 2c0a > '--printAll',. │ │ │ │ +0000fc20: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde │ │ │ │ +0000fc30: 6e27 203d 3e20 2779 6573 2729 2c0a 0909 n' => 'yes'),... │ │ │ │ +0000fc40: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +0000fc50: 6e61 6d65 2720 3d3e 2027 6d69 6e42 6c6f name' => 'minBlo │ │ │ │ +0000fc60: 636b 4c65 6e67 7468 272c 0a09 0909 0909 ckLength',...... │ │ │ │ +0000fc70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +0000fc80: 203d 3e20 272d 2d6d 696e 426c 6f63 6b4c => '--minBlockL │ │ │ │ +0000fc90: 656e 6774 6827 2c0a 0909 0909 0920 2020 ength',...... │ │ │ │ +0000fca0: 2027 2d63 665f 6b65 7927 203d 3e20 276d '-cf_key' => 'm │ │ │ │ +0000fcb0: 696e 426c 6f63 6b4c 656e 6774 6827 2c0a inBlockLength',. │ │ │ │ +0000fcc0: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde │ │ │ │ +0000fcd0: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',.... │ │ │ │ +0000fce0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ │ +0000fcf0: 203d 3e20 2463 6865 636b 426c 6f63 6b73 => $checkBlocks │ │ │ │ +0000fd00: 4253 6d69 6e2c 0a09 0909 0909 2020 2020 BSmin,...... │ │ │ │ +0000fd10: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\ │ │ │ │ +0000fd20: 415c 642b 5c5a 2729 2c0a 0909 0909 4f70 A\d+\Z'),.....Op │ │ │ │ +0000fd30: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +0000fd40: 2720 3d3e 2027 746f 6461 794f 7074 272c ' => 'todayOpt', │ │ │ │ +0000fd50: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +0000fd60: 7074 696f 6e27 203d 3e20 272d 2d74 6f64 ption' => '--tod │ │ │ │ +0000fd70: 6179 272c 0a09 0909 0909 2020 2020 272d ay',...... '- │ │ │ │ +0000fd80: 6366 5f6b 6579 2720 3d3e 2027 746f 6461 cf_key' => 'toda │ │ │ │ +0000fd90: 7927 2c0a 0909 0909 0920 2020 2027 2d68 y',...... '-h │ │ │ │ +0000fda0: 6964 6465 6e27 203d 3e20 2779 6573 272c idden' => 'yes', │ │ │ │ +0000fdb0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ │ +0000fdc0: 6d27 203d 3e20 2779 6573 2729 2c0a 2320 m' => 'yes'),.# │ │ │ │ +0000fdd0: 6967 6e6f 7265 2073 7065 6369 6669 6564 ignore specified │ │ │ │ +0000fde0: 2074 696d 6520 7768 656e 2063 6f6d 7061 time when compa │ │ │ │ +0000fdf0: 6972 696e 6720 6669 6c65 733b 2070 6f73 iring files; pos │ │ │ │ +0000fe00: 7369 626c 650a 2320 7661 6c75 6573 2061 sible.# values a │ │ │ │ +0000fe10: 7265 3a20 2763 7469 6d65 272c 2027 6d74 re: 'ctime', 'mt │ │ │ │ +0000fe20: 696d 6527 206f 7220 276e 6f6e 6527 2c20 ime' or 'none', │ │ │ │ +0000fe30: 6465 6661 756c 7420 6973 2027 6e6f 6e65 default is 'none │ │ │ │ +0000fe40: 270a 2320 5365 7474 696e 6720 7468 6973 '.# Setting this │ │ │ │ +0000fe50: 2070 6172 616d 6574 6572 206f 6e6c 7920 parameter only │ │ │ │ +0000fe60: 6d61 6b65 7320 7365 6e73 6520 696e 206d makes sense in m │ │ │ │ +0000fe70: 6978 6564 0a23 2065 6e76 6972 6f6e 6d65 ixed.# environme │ │ │ │ +0000fe80: 6e74 732c 2077 6865 6e20 6f6e 6520 7469 nts, when one ti │ │ │ │ +0000fe90: 6d65 2068 6173 2073 746f 6368 6173 7469 me has stochasti │ │ │ │ +0000fea0: 6320 7661 6c75 6573 2e0a 2020 2020 2020 c values.. │ │ │ │ +0000feb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0000fec0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +0000fed0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +0000fee0: 2027 6967 6e6f 7265 5469 6d65 272c 0a09 'ignoreTime',.. │ │ │ │ +0000fef0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +0000ff00: 696f 6e27 203d 3e20 272d 2d69 676e 6f72 ion' => '--ignor │ │ │ │ +0000ff10: 6554 696d 6527 2c0a 0909 0909 0920 2020 eTime',...... │ │ │ │ +0000ff20: 2027 2d63 665f 6b65 7927 203d 3e20 2769 '-cf_key' => 'i │ │ │ │ +0000ff30: 676e 6f72 6554 696d 6527 2c0a 0909 0909 gnoreTime',..... │ │ │ │ +0000ff40: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ │ +0000ff50: 3d3e 2027 6e6f 6e65 272c 0a09 0909 0909 => 'none',...... │ │ │ │ +0000ff60: 2020 2020 272d 7061 7474 6572 6e27 203d '-pattern' = │ │ │ │ +0000ff70: 3e0a 0909 0909 0920 2020 2027 5c41 6e6f >...... '\Ano │ │ │ │ +0000ff80: 6e65 5c5a 7c5c 4163 7469 6d65 5c5a 7c5c ne\Z|\Actime\Z|\ │ │ │ │ +0000ff90: 416d 7469 6d65 5c5a 2729 2c0a 0909 0909 Amtime\Z'),..... │ │ │ │ +0000ffa0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +0000ffb0: 6d65 2720 3d3e 2027 7374 6f70 4166 7465 me' => 'stopAfte │ │ │ │ +0000ffc0: 724e 6f52 6561 6445 7272 6f72 7327 2c0a rNoReadErrors',. │ │ │ │ +0000ffd0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +0000ffe0: 7469 6f6e 2720 3d3e 0a09 0909 0909 2020 tion' =>...... │ │ │ │ +0000fff0: 2020 272d 2d73 746f 7041 6674 6572 4e6f '--stopAfterNo │ │ │ │ +00010000: 5265 6164 4572 726f 7273 272c 0a09 0909 ReadErrors',.... │ │ │ │ +00010010: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ │ +00010020: 3d3e 0a09 0909 0909 2020 2020 2773 746f =>...... 'sto │ │ │ │ +00010030: 7041 6674 6572 4e6f 5265 6164 4572 726f pAfterNoReadErro │ │ │ │ +00010040: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '- │ │ │ │ +00010050: 6869 6464 656e 2720 3d3e 2027 7965 7327 hidden' => 'yes' │ │ │ │ +00010060: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +00010070: 6175 6c74 2720 3d3e 2035 3030 290a 0909 ault' => 500)... │ │ │ │ +00010080: 0909 5d0a 0909 2020 2020 293b 0a0a 0a24 ..]... );...$ │ │ │ │ +00010090: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check( │ │ │ │ +000100a0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \@ARG │ │ │ │ +000100b0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. │ │ │ │ +000100c0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $ │ │ │ │ +000100d0: 4865 6c70 0a20 2020 2020 2020 2020 2020 Help. │ │ │ │ +000100e0: 2020 2020 2020 293b 0a0a 2320 4175 7377 );..# Ausw │ │ │ │ +000100f0: 6572 7475 6e67 2064 6572 2050 6172 616d ertung der Param │ │ │ │ +00010100: 6574 6572 0a6d 7920 2468 656c 7020 3d20 eter.my $help = │ │ │ │ +00010110: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00010120: 7457 6974 686f 7574 5061 7228 2768 656c tWithoutPar('hel │ │ │ │ +00010130: 7027 293b 0a0a 6469 6520 2224 4675 6c6c p');..die "$Full │ │ │ │ +00010140: 4865 6c70 2220 6966 2024 6865 6c70 3b0a Help" if $help;. │ │ │ │ +00010150: 0a6d 7920 2463 6f6e 6669 6746 696c 6520 .my $configFile │ │ │ │ +00010160: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00010170: 4f70 7457 6974 6850 6172 2827 636f 6e66 OptWithPar('conf │ │ │ │ +00010180: 6967 4669 6c65 2729 3b0a 6d79 2024 6765 igFile');.my $ge │ │ │ │ +00010190: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile │ │ │ │ +000101a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000101b0: 744f 7074 5769 7468 5061 7228 2767 656e tOptWithPar('gen │ │ │ │ +000101c0: 6572 6174 6527 293b 0a6d 7920 2470 7269 erate');.my $pri │ │ │ │ +000101d0: 6e74 203d 2024 4368 6563 6b50 6172 2d3e nt = $CheckPar-> │ │ │ │ +000101e0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ │ +000101f0: 2827 7072 696e 7427 293b 0a0a 6d79 2024 ('print');..my $ │ │ │ │ +00010200: 6261 636b 7570 4469 7220 3d20 2443 6865 backupDir = $Che │ │ │ │ +00010210: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00010220: 6850 6172 2827 6261 636b 7570 4469 7227 hPar('backupDir' │ │ │ │ +00010230: 293b 0a6d 7920 2473 6f75 7263 6544 6972 );.my $sourceDir │ │ │ │ +00010240: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00010250: 744f 7074 5769 7468 5061 7228 2773 6f75 tOptWithPar('sou │ │ │ │ +00010260: 7263 6544 6972 2729 3b0a 6d79 2024 7365 rceDir');.my $se │ │ │ │ +00010270: 7269 6573 203d 2024 4368 6563 6b50 6172 ries = $CheckPar │ │ │ │ +00010280: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00010290: 2773 6572 6965 7327 293b 0a24 746d 7064 'series');.$tmpd │ │ │ │ +000102a0: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar-> │ │ │ │ +000102b0: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t │ │ │ │ +000102c0: 6d70 6469 7227 293b 0a24 6c6f 636b 4669 mpdir');.$lockFi │ │ │ │ +000102d0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar-> │ │ │ │ +000102e0: 6765 744f 7074 5769 7468 5061 7228 276c getOptWithPar('l │ │ │ │ +000102f0: 6f63 6b46 696c 6527 293b 0a6d 7920 2475 ockFile');.my $u │ │ │ │ +00010300: 6e6c 6f63 6b42 6566 6f72 6544 656c 203d nlockBeforeDel = │ │ │ │ +00010310: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00010320: 7074 5769 7468 5061 7228 2775 6e6c 6f63 ptWithPar('unloc │ │ │ │ +00010330: 6b42 6566 6f72 6544 656c 2729 3b0a 6d79 kBeforeDel');.my │ │ │ │ +00010340: 2024 6578 6365 7074 4469 7273 203d 2024 $exceptDirs = $ │ │ │ │ +00010350: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00010360: 5769 7468 5061 7228 2765 7863 6570 7444 WithPar('exceptD │ │ │ │ +00010370: 6972 7327 293b 0a6d 7920 2469 6e63 6c75 irs');.my $inclu │ │ │ │ +00010380: 6465 4469 7273 203d 2024 4368 6563 6b50 deDirs = $CheckP │ │ │ │ +00010390: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +000103a0: 7228 2769 6e63 6c75 6465 4469 7273 2729 r('includeDirs') │ │ │ │ +000103b0: 3b0a 6d79 2024 6578 6365 7074 5275 6c65 ;.my $exceptRule │ │ │ │ +000103c0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000103d0: 744f 7074 5769 7468 5061 7228 2765 7863 tOptWithPar('exc │ │ │ │ +000103e0: 6570 7452 756c 6527 293b 0a6d 7920 2469 eptRule');.my $i │ │ │ │ +000103f0: 6e63 6c75 6465 5275 6c65 203d 2024 4368 ncludeRule = $Ch │ │ │ │ +00010400: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00010410: 7468 5061 7228 2769 6e63 6c75 6465 5275 thPar('includeRu │ │ │ │ +00010420: 6c65 2729 3b0a 6d79 2024 7772 6974 6545 le');.my $writeE │ │ │ │ +00010430: 7863 6c75 6465 4c6f 6720 3d20 2443 6865 xcludeLog = $Che │ │ │ │ +00010440: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00010450: 686f 7574 5061 7228 2777 7269 7465 4578 houtPar('writeEx │ │ │ │ +00010460: 636c 7564 654c 6f67 2729 3b0a 6d79 2024 cludeLog');.my $ │ │ │ │ +00010470: 636f 6e74 4578 6365 7074 4469 7273 4572 contExceptDirsEr │ │ │ │ +00010480: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g │ │ │ │ +00010490: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ │ +000104a0: 2763 6f6e 7445 7863 6570 7444 6972 7345 'contExceptDirsE │ │ │ │ +000104b0: 7272 2729 3b0a 6d79 2024 6578 6365 7074 rr');.my $except │ │ │ │ +000104c0: 5479 7065 7320 3d20 2443 6865 636b 5061 Types = $CheckPa │ │ │ │ +000104d0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +000104e0: 2827 6578 6365 7074 5479 7065 7327 293b ('exceptTypes'); │ │ │ │ +000104f0: 0a6d 7920 2467 6e75 6370 203d 2024 4368 .my $gnucp = $Ch │ │ │ │ +00010500: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00010510: 7468 6f75 7450 6172 2827 6370 4973 476e thoutPar('cpIsGn │ │ │ │ +00010520: 7527 293b 0a6d 7920 246c 696e 6b53 796d u');.my $linkSym │ │ │ │ +00010530: 6c69 6e6b 7320 3d20 2443 6865 636b 5061 links = $CheckPa │ │ │ │ +00010540: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ │ +00010550: 5061 7228 276c 696e 6b53 796d 6c69 6e6b Par('linkSymlink │ │ │ │ +00010560: 7327 293b 0a6d 7920 2470 7265 636f 6d6d s');.my $precomm │ │ │ │ +00010570: 616e 6420 3d20 2443 6865 636b 5061 722d and = $CheckPar- │ │ │ │ +00010580: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00010590: 7072 6563 6f6d 6d61 6e64 2729 3b0a 6d79 precommand');.my │ │ │ │ +000105a0: 2024 706f 7374 636f 6d6d 616e 6420 3d20 $postcommand = │ │ │ │ +000105b0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000105c0: 7457 6974 6850 6172 2827 706f 7374 636f tWithPar('postco │ │ │ │ +000105d0: 6d6d 616e 6427 293b 0a6d 7920 2466 6f6c mmand');.my $fol │ │ │ │ +000105e0: 6c6f 774c 696e 6b73 203d 2024 4368 6563 lowLinks = $Chec │ │ │ │ +000105f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00010600: 5061 7228 2766 6f6c 6c6f 774c 696e 6b73 Par('followLinks │ │ │ │ +00010610: 2729 3b0a 6d79 2024 6869 6768 4c61 7465 ');.my $highLate │ │ │ │ +00010620: 6e63 7920 3d20 2443 6865 636b 5061 722d ncy = $CheckPar- │ │ │ │ +00010630: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +00010640: 7228 2768 6967 684c 6174 656e 6379 2729 r('highLatency') │ │ │ │ +00010650: 3b0a 246d 6169 6e3a 3a6d 696e 436f 7079 ;.$main::minCopy │ │ │ │ +00010660: 5769 7468 466f 726b 203d 2030 2069 6620 WithFork = 0 if │ │ │ │ +00010670: 2468 6967 684c 6174 656e 6379 3b0a 6d79 $highLatency;.my │ │ │ │ +00010680: 2024 6967 6e6f 7265 5065 726d 7320 3d20 $ignorePerms = │ │ │ │ +00010690: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000106a0: 7457 6974 686f 7574 5061 7228 2769 676e tWithoutPar('ign │ │ │ │ +000106b0: 6f72 6550 6572 6d73 2729 3b0a 6d79 2024 orePerms');.my $ │ │ │ │ +000106c0: 7072 6573 6572 7665 5065 726d 7320 3d20 preservePerms = │ │ │ │ +000106d0: 6e6f 7420 2469 676e 6f72 6550 6572 6d73 not $ignorePerms │ │ │ │ +000106e0: 3b0a 6d79 2024 6c61 7465 4c69 6e6b 7320 ;.my $lateLinks │ │ │ │ +000106f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00010700: 4f70 7457 6974 686f 7574 5061 7228 276c OptWithoutPar('l │ │ │ │ +00010710: 6174 654c 696e 6b73 2729 3b0a 6d79 2024 ateLinks');.my $ │ │ │ │ +00010720: 6c61 7465 436f 6d70 7265 7373 203d 2024 lateCompress = $ │ │ │ │ +00010730: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00010740: 5769 7468 6f75 7450 6172 2827 6c61 7465 WithoutPar('late │ │ │ │ +00010750: 436f 6d70 7265 7373 2729 3b0a 6d79 2024 Compress');.my $ │ │ │ │ +00010760: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi │ │ │ │ +00010770: 7820 3d20 2443 6865 636b 5061 722d 3e67 x = $CheckPar->g │ │ │ │ +00010780: 6574 4f70 7457 6974 6850 6172 2822 6368 etOptWithPar("ch │ │ │ │ +00010790: 6563 6b42 6c6f 636b 7353 7566 6669 7822 eckBlocksSuffix" │ │ │ │ +000107a0: 293b 0a6d 7920 2463 6865 636b 426c 6f63 );.my $checkBloc │ │ │ │ +000107b0: 6b73 5375 6666 6978 4d69 6e53 697a 6520 ksSuffixMinSize │ │ │ │ +000107c0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000107d0: 4f70 7457 6974 6850 6172 2822 6368 6563 OptWithPar("chec │ │ │ │ +000107e0: 6b42 6c6f 636b 734d 696e 5369 7a65 2229 kBlocksMinSize") │ │ │ │ +000107f0: 3b0a 6d79 2024 6368 6563 6b42 6c6f 636b ;.my $checkBlock │ │ │ │ +00010800: 7353 7566 6669 7842 5320 3d20 2443 6865 sSuffixBS = $Che │ │ │ │ +00010810: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00010820: 6850 6172 2822 6368 6563 6b42 6c6f 636b hPar("checkBlock │ │ │ │ +00010830: 7342 5322 293b 0a6d 7920 2463 6865 636b sBS");.my $check │ │ │ │ +00010840: 426c 6f63 6b73 436f 6d70 7220 3d20 2443 BlocksCompr = $C │ │ │ │ +00010850: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00010860: 6974 686f 7574 5061 7228 2263 6865 636b ithoutPar("check │ │ │ │ +00010870: 426c 6f63 6b73 436f 6d70 7222 293b 0a6d BlocksCompr");.m │ │ │ │ +00010880: 7920 2840 6368 6563 6b42 6c6f 636b 7352 y (@checkBlocksR │ │ │ │ +00010890: 756c 652c 2040 6368 6563 6b42 6c6f 636b ule, @checkBlock │ │ │ │ +000108a0: 7342 532c 2040 6368 6563 6b42 6c6f 636b sBS, @checkBlock │ │ │ │ +000108b0: 7343 6f6d 7072 2c20 4063 6865 636b 426c sCompr, @checkBl │ │ │ │ +000108c0: 6f63 6b73 5265 6164 2c0a 2020 2020 4063 ocksRead,. @c │ │ │ │ +000108d0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall │ │ │ │ +000108e0: 656c 293b 0a7b 0a20 2020 206d 7920 2469 el);.{. my $i │ │ │ │ +000108f0: 3b0a 2020 2020 666f 7265 6163 6820 2469 ;. foreach $i │ │ │ │ +00010900: 2028 302e 2e24 6e6f 426c 6f63 6b52 756c (0..$noBlockRul │ │ │ │ +00010910: 6573 2d31 290a 2020 2020 7b0a 0970 7573 es-1). {..pus │ │ │ │ +00010920: 6820 4063 6865 636b 426c 6f63 6b73 5275 h @checkBlocksRu │ │ │ │ +00010930: 6c65 2c20 2443 6865 636b 5061 722d 3e67 le, $CheckPar->g │ │ │ │ +00010940: 6574 4f70 7457 6974 6850 6172 2822 6368 etOptWithPar("ch │ │ │ │ +00010950: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i" │ │ │ │ +00010960: 293b 0a09 7075 7368 2040 6368 6563 6b42 );..push @checkB │ │ │ │ +00010970: 6c6f 636b 7342 532c 2024 4368 6563 6b50 locksBS, $CheckP │ │ │ │ +00010980: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00010990: 7228 2263 6865 636b 426c 6f63 6b73 4253 r("checkBlocksBS │ │ │ │ +000109a0: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i");..push @che │ │ │ │ +000109b0: 636b 426c 6f63 6b73 436f 6d70 722c 0a09 ckBlocksCompr,.. │ │ │ │ +000109c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000109d0: 7457 6974 686f 7574 5061 7228 2263 6865 tWithoutPar("che │ │ │ │ +000109e0: 636b 426c 6f63 6b73 436f 6d70 7224 6922 ckBlocksCompr$i" │ │ │ │ +000109f0: 293b 0a09 7075 7368 2040 6368 6563 6b42 );..push @checkB │ │ │ │ +00010a00: 6c6f 636b 7352 6561 642c 2024 4368 6563 locksRead, $Chec │ │ │ │ +00010a10: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00010a20: 5061 7228 2263 6865 636b 426c 6f63 6b73 Par("checkBlocks │ │ │ │ +00010a30: 5265 6164 2469 2229 3b0a 0970 7573 6820 Read$i");..push │ │ │ │ +00010a40: 4063 6865 636b 426c 6f63 6b73 5061 7261 @checkBlocksPara │ │ │ │ +00010a50: 6c6c 656c 2c0a 0924 4368 6563 6b50 6172 llel,..$CheckPar │ │ │ │ +00010a60: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00010a70: 6172 2822 6368 6563 6b42 6c6f 636b 7350 ar("checkBlocksP │ │ │ │ +00010a80: 6172 616c 6c65 6c24 6922 293b 0a20 2020 arallel$i");. │ │ │ │ +00010a90: 207d 0a7d 0a6d 7920 2840 6368 6563 6b44 }.}.my (@checkD │ │ │ │ +00010aa0: 6576 6963 6573 2c20 4063 6865 636b 4465 evices, @checkDe │ │ │ │ +00010ab0: 7669 6365 7344 6972 2c20 4063 6865 636b vicesDir, @check │ │ │ │ +00010ac0: 4465 7669 6365 7342 532c 2040 6368 6563 DevicesBS, @chec │ │ │ │ +00010ad0: 6b44 6576 6963 6573 436f 6d70 722c 0a20 kDevicesCompr,. │ │ │ │ +00010ae0: 2020 2040 6368 6563 6b44 6576 6963 6573 @checkDevices │ │ │ │ +00010af0: 5061 7261 6c6c 656c 293b 0a7b 0a20 2020 Parallel);.{. │ │ │ │ +00010b00: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore │ │ │ │ +00010b10: 6163 6820 2469 2028 302e 2e24 6d61 696e ach $i (0..$main │ │ │ │ +00010b20: 3a3a 6e6f 426c 6f63 6b44 6576 6963 6573 ::noBlockDevices │ │ │ │ +00010b30: 2d31 290a 2020 2020 7b0a 0970 7573 6820 -1). {..push │ │ │ │ +00010b40: 4063 6865 636b 4465 7669 6365 732c 2024 @checkDevices, $ │ │ │ │ +00010b50: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00010b60: 5769 7468 5061 7228 2263 6865 636b 4465 WithPar("checkDe │ │ │ │ +00010b70: 7669 6365 7324 6922 293b 0a09 7075 7368 vices$i");..push │ │ │ │ +00010b80: 2040 6368 6563 6b44 6576 6963 6573 4469 @checkDevicesDi │ │ │ │ +00010b90: 722c 2024 4368 6563 6b50 6172 2d3e 6765 r, $CheckPar->ge │ │ │ │ +00010ba0: 744f 7074 5769 7468 5061 7228 2263 6865 tOptWithPar("che │ │ │ │ +00010bb0: 636b 4465 7669 6365 7344 6972 2469 2229 ckDevicesDir$i") │ │ │ │ +00010bc0: 3b0a 0970 7573 6820 4063 6865 636b 4465 ;..push @checkDe │ │ │ │ +00010bd0: 7669 6365 7342 532c 2024 4368 6563 6b50 vicesBS, $CheckP │ │ │ │ +00010be0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00010bf0: 7228 2263 6865 636b 4465 7669 6365 7342 r("checkDevicesB │ │ │ │ +00010c00: 5324 6922 293b 0a09 7075 7368 2040 6368 S$i");..push @ch │ │ │ │ +00010c10: 6563 6b44 6576 6963 6573 436f 6d70 722c eckDevicesCompr, │ │ │ │ +00010c20: 0a09 2443 6865 636b 5061 722d 3e67 6574 ..$CheckPar->get │ │ │ │ +00010c30: 4f70 7457 6974 686f 7574 5061 7228 2263 OptWithoutPar("c │ │ │ │ +00010c40: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr │ │ │ │ +00010c50: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i");..push @che │ │ │ │ +00010c60: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ │ +00010c70: 6c2c 0a09 2443 6865 636b 5061 722d 3e67 l,..$CheckPar->g │ │ │ │ +00010c80: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ │ +00010c90: 2263 6865 636b 4465 7669 6365 7350 6172 "checkDevicesPar │ │ │ │ +00010ca0: 616c 6c65 6c24 6922 293b 0a20 2020 207d allel$i");. } │ │ │ │ +00010cb0: 0a7d 0a24 7175 6575 6542 6c6f 636b 203d .}.$queueBlock = │ │ │ │ +00010cc0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00010cd0: 7074 5769 7468 5061 7228 2771 7565 7565 ptWithPar('queue │ │ │ │ +00010ce0: 426c 6f63 6b27 293b 0a6d 7920 2473 6176 Block');.my $sav │ │ │ │ +00010cf0: 6552 414d 203d 2024 4368 6563 6b50 6172 eRAM = $CheckPar │ │ │ │ +00010d00: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00010d10: 6172 2827 7361 7665 5241 4d27 293b 0a6d ar('saveRAM');.m │ │ │ │ +00010d20: 7920 2463 6f6d 7072 6573 7320 3d20 2443 y $compress = $C │ │ │ │ +00010d30: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00010d40: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress │ │ │ │ +00010d50: 2729 3b0a 6d79 2024 756e 636f 6d70 7265 ');.my $uncompre │ │ │ │ +00010d60: 7373 203d 2024 4368 6563 6b50 6172 2d3e ss = $CheckPar-> │ │ │ │ +00010d70: 6765 744f 7074 5769 7468 5061 7228 2775 getOptWithPar('u │ │ │ │ +00010d80: 6e63 6f6d 7072 6573 7327 293b 0a24 706f ncompress');.$po │ │ │ │ +00010d90: 7374 6669 7820 3d20 2443 6865 636b 5061 stfix = $CheckPa │ │ │ │ +00010da0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00010db0: 2827 706f 7374 6669 7827 293b 0a6d 7920 ('postfix');.my │ │ │ │ +00010dc0: 246e 6f43 6f6d 7072 6573 7320 3d20 2443 $noCompress = $C │ │ │ │ +00010dd0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00010de0: 6974 6850 6172 2827 6e6f 436f 6d70 7265 ithPar('noCompre │ │ │ │ +00010df0: 7373 2729 3b0a 2471 7565 7565 436f 6d70 ss');.$queueComp │ │ │ │ +00010e00: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar │ │ │ │ +00010e10: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00010e20: 2771 7565 7565 436f 6d70 7265 7373 2729 'queueCompress') │ │ │ │ +00010e30: 3b0a 246e 6f43 6f70 7920 3d20 2443 6865 ;.$noCopy = $Che │ │ │ │ +00010e40: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00010e50: 6850 6172 2827 6e6f 436f 7079 2729 3b0a hPar('noCopy');. │ │ │ │ +00010e60: 2471 7565 7565 436f 7079 203d 2024 4368 $queueCopy = $Ch │ │ │ │ +00010e70: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00010e80: 7468 5061 7228 2771 7565 7565 436f 7079 thPar('queueCopy │ │ │ │ +00010e90: 2729 3b0a 6d79 2024 636f 7079 4257 4c69 ');.my $copyBWLi │ │ │ │ +00010ea0: 6d69 7420 3d20 2443 6865 636b 5061 722d mit = $CheckPar- │ │ │ │ +00010eb0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00010ec0: 636f 7079 4257 4c69 6d69 7427 293b 0a6d copyBWLimit');.m │ │ │ │ +00010ed0: 7920 2477 6974 6855 7365 7247 726f 7570 y $withUserGroup │ │ │ │ +00010ee0: 5374 6174 203d 2024 4368 6563 6b50 6172 Stat = $CheckPar │ │ │ │ +00010ef0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00010f00: 6172 2827 7769 7468 5573 6572 4772 6f75 ar('withUserGrou │ │ │ │ +00010f10: 7053 7461 7427 293b 0a6d 7920 2475 7365 pStat');.my $use │ │ │ │ +00010f20: 7247 726f 7570 5374 6174 4669 6c65 203d rGroupStatFile = │ │ │ │ +00010f30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00010f40: 7074 5769 7468 5061 7228 2775 7365 7247 ptWithPar('userG │ │ │ │ +00010f50: 726f 7570 5374 6174 4669 6c65 2729 3b0a roupStatFile');. │ │ │ │ +00010f60: 6d79 2024 6578 6365 7074 5375 6666 6978 my $exceptSuffix │ │ │ │ +00010f70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00010f80: 744f 7074 5769 7468 5061 7228 2765 7863 tOptWithPar('exc │ │ │ │ +00010f90: 6570 7453 7566 6669 7827 293b 0a6d 7920 eptSuffix');.my │ │ │ │ +00010fa0: 2463 6f6d 7072 6573 7353 7566 6669 7820 $compressSuffix │ │ │ │ +00010fb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00010fc0: 4f70 7457 6974 6850 6172 2827 636f 6d70 OptWithPar('comp │ │ │ │ +00010fd0: 7265 7373 5375 6666 6978 2729 3b0a 6d79 ressSuffix');.my │ │ │ │ +00010fe0: 2024 6164 6445 7863 6570 7453 7566 6669 $addExceptSuffi │ │ │ │ +00010ff0: 7820 3d20 2443 6865 636b 5061 722d 3e67 x = $CheckPar->g │ │ │ │ +00011000: 6574 4f70 7457 6974 6850 6172 2827 6164 etOptWithPar('ad │ │ │ │ +00011010: 6445 7863 6570 7453 7566 6669 7827 293b dExceptSuffix'); │ │ │ │ +00011020: 0a24 6d69 6e43 6f6d 7072 6573 7353 697a .$minCompressSiz │ │ │ │ +00011030: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ │ +00011040: 6574 4f70 7457 6974 6850 6172 2827 6d69 etOptWithPar('mi │ │ │ │ +00011050: 6e43 6f6d 7072 6573 7353 697a 6527 293b nCompressSize'); │ │ │ │ +00011060: 0a6d 7920 2463 6f6d 7072 5275 6c65 203d .my $comprRule = │ │ │ │ +00011070: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00011080: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr │ │ │ │ +00011090: 5275 6c65 2729 3b0a 6d79 2024 636f 6d70 Rule');.my $comp │ │ │ │ +000110a0: 7265 7373 4d44 3546 696c 6520 3d20 2443 ressMD5File = $C │ │ │ │ +000110b0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +000110c0: 6974 686f 7574 5061 7228 2764 6f4e 6f74 ithoutPar('doNot │ │ │ │ +000110d0: 436f 6d70 7265 7373 4d44 3546 696c 6527 CompressMD5File' │ │ │ │ +000110e0: 290a 2020 2020 3f20 276e 6f27 203a 2027 ). ? 'no' : ' │ │ │ │ +000110f0: 7965 7327 3b0a 2463 686d 6f64 4d44 3546 yes';.$chmodMD5F │ │ │ │ +00011100: 696c 6520 3d20 2443 6865 636b 5061 722d ile = $CheckPar- │ │ │ │ +00011110: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00011120: 6368 6d6f 644d 4435 4669 6c65 2729 3b0a chmodMD5File');. │ │ │ │ +00011130: 6d79 2024 7665 7262 6f73 6520 3d20 2443 my $verbose = $C │ │ │ │ +00011140: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00011150: 6974 686f 7574 5061 7228 2776 6572 626f ithoutPar('verbo │ │ │ │ +00011160: 7365 2729 3b0a 6d79 2024 6465 6275 6720 se');.my $debug │ │ │ │ +00011170: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00011180: 4f70 7457 6974 6850 6172 2827 6465 6275 OptWithPar('debu │ │ │ │ +00011190: 6727 293b 0a6d 7920 2472 6573 6574 4174 g');.my $resetAt │ │ │ │ +000111a0: 696d 6520 3d20 2443 6865 636b 5061 722d ime = $CheckPar- │ │ │ │ +000111b0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +000111c0: 7228 2772 6573 6574 4174 696d 6527 293b r('resetAtime'); │ │ │ │ +000111d0: 0a6d 7920 2464 6f4e 6f74 4465 6c65 7465 .my $doNotDelete │ │ │ │ +000111e0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000111f0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ │ +00011200: 646f 4e6f 7444 656c 6574 6527 293b 0a6d doNotDelete');.m │ │ │ │ +00011210: 7920 2464 656c 6574 654e 6f74 4669 6e69 y $deleteNotFini │ │ │ │ +00011220: 7368 6564 4469 7273 203d 2024 4368 6563 shedDirs = $Chec │ │ │ │ +00011230: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00011240: 6f75 7450 6172 2827 6465 6c65 7465 4e6f outPar('deleteNo │ │ │ │ +00011250: 7446 696e 6973 6865 6444 6972 7327 293b tFinishedDirs'); │ │ │ │ +00011260: 0a24 6b65 6570 416c 6c20 3d20 2443 6865 .$keepAll = $Che │ │ │ │ +00011270: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00011280: 6850 6172 2827 6b65 6570 416c 6c27 293b hPar('keepAll'); │ │ │ │ +00011290: 0a6d 7920 246b 6565 7057 6565 6b64 6179 .my $keepWeekday │ │ │ │ +000112a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000112b0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee │ │ │ │ +000112c0: 7057 6565 6b64 6179 2729 3b0a 246b 6565 pWeekday');.$kee │ │ │ │ +000112d0: 7057 6565 6b64 6179 203d 2022 4024 6b65 pWeekday = "@$ke │ │ │ │ +000112e0: 6570 5765 656b 6461 7922 2069 6620 6465 epWeekday" if de │ │ │ │ +000112f0: 6669 6e65 6420 246b 6565 7057 6565 6b64 fined $keepWeekd │ │ │ │ +00011300: 6179 3b0a 6d79 2024 6b65 6570 4669 7273 ay;.my $keepFirs │ │ │ │ +00011310: 744f 6659 6561 7220 3d20 2443 6865 636b tOfYear = $Check │ │ │ │ +00011320: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00011330: 6172 2827 6b65 6570 4669 7273 744f 6659 ar('keepFirstOfY │ │ │ │ +00011340: 6561 7227 293b 0a6d 7920 246b 6565 704c ear');.my $keepL │ │ │ │ +00011350: 6173 744f 6659 6561 7220 3d20 2443 6865 astOfYear = $Che │ │ │ │ +00011360: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00011370: 6850 6172 2827 6b65 6570 4c61 7374 4f66 hPar('keepLastOf │ │ │ │ +00011380: 5965 6172 2729 3b0a 6d79 2024 6b65 6570 Year');.my $keep │ │ │ │ +00011390: 4669 7273 744f 664d 6f6e 7468 203d 2024 FirstOfMonth = $ │ │ │ │ +000113a0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +000113b0: 5769 7468 5061 7228 276b 6565 7046 6972 WithPar('keepFir │ │ │ │ +000113c0: 7374 4f66 4d6f 6e74 6827 293b 0a6d 7920 stOfMonth');.my │ │ │ │ +000113d0: 246b 6565 704c 6173 744f 664d 6f6e 7468 $keepLastOfMonth │ │ │ │ +000113e0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000113f0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee │ │ │ │ +00011400: 704c 6173 744f 664d 6f6e 7468 2729 3b0a pLastOfMonth');. │ │ │ │ +00011410: 6d79 2024 6669 7273 7444 6179 4f66 5765 my $firstDayOfWe │ │ │ │ +00011420: 656b 203d 2024 4368 6563 6b50 6172 2d3e ek = $CheckPar-> │ │ │ │ +00011430: 6765 744f 7074 5769 7468 5061 7228 2766 getOptWithPar('f │ │ │ │ +00011440: 6972 7374 4461 794f 6657 6565 6b27 293b irstDayOfWeek'); │ │ │ │ +00011450: 0a6d 7920 246b 6565 7046 6972 7374 4f66 .my $keepFirstOf │ │ │ │ +00011460: 5765 656b 203d 2024 4368 6563 6b50 6172 Week = $CheckPar │ │ │ │ +00011470: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00011480: 276b 6565 7046 6972 7374 4f66 5765 656b 'keepFirstOfWeek │ │ │ │ +00011490: 2729 3b0a 6d79 2024 6b65 6570 4c61 7374 ');.my $keepLast │ │ │ │ +000114a0: 4f66 5765 656b 203d 2024 4368 6563 6b50 OfWeek = $CheckP │ │ │ │ +000114b0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +000114c0: 7228 276b 6565 704c 6173 744f 6657 6565 r('keepLastOfWee │ │ │ │ +000114d0: 6b27 293b 0a24 6b65 6570 4475 706c 6963 k');.$keepDuplic │ │ │ │ +000114e0: 6174 6520 3d20 2443 6865 636b 5061 722d ate = $CheckPar- │ │ │ │ +000114f0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00011500: 6b65 6570 4475 706c 6963 6174 6527 293b keepDuplicate'); │ │ │ │ +00011510: 0a6d 7920 246b 6565 704d 696e 4e75 6d62 .my $keepMinNumb │ │ │ │ +00011520: 6572 203d 2024 4368 6563 6b50 6172 2d3e er = $CheckPar-> │ │ │ │ +00011530: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k │ │ │ │ +00011540: 6565 704d 696e 4e75 6d62 6572 2729 3b0a eepMinNumber');. │ │ │ │ +00011550: 6d79 2024 6b65 6570 4d61 784e 756d 6265 my $keepMaxNumbe │ │ │ │ +00011560: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g │ │ │ │ +00011570: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke │ │ │ │ +00011580: 6570 4d61 784e 756d 6265 7227 293b 0a6d epMaxNumber');.m │ │ │ │ +00011590: 7920 246b 6565 7052 656c 6174 6976 6520 y $keepRelative │ │ │ │ +000115a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000115b0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ │ +000115c0: 5265 6c61 7469 7665 2729 3b0a 6d79 2024 Relative');.my $ │ │ │ │ +000115d0: 6967 6e6f 7265 5265 6164 4572 726f 7220 ignoreReadError │ │ │ │ +000115e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000115f0: 4f70 7457 6974 686f 7574 5061 7228 2769 OptWithoutPar('i │ │ │ │ +00011600: 676e 6f72 6552 6561 6445 7272 6f72 2729 gnoreReadError') │ │ │ │ +00011610: 3b0a 6d79 2024 7375 7070 7265 7373 5761 ;.my $suppressWa │ │ │ │ +00011620: 726e 696e 6720 3d20 2443 6865 636b 5061 rning = $CheckPa │ │ │ │ +00011630: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00011640: 2827 7375 7070 7265 7373 5761 726e 696e ('suppressWarnin │ │ │ │ +00011650: 6727 293b 0a6d 7920 246c 696e 6b54 6f52 g');.my $linkToR │ │ │ │ +00011660: 6563 656e 7420 3d20 2443 6865 636b 5061 ecent = $CheckPa │ │ │ │ +00011670: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00011680: 2827 6c69 6e6b 546f 5265 6365 6e74 2729 ('linkToRecent') │ │ │ │ +00011690: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = │ │ │ │ +000116a0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000116b0: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil │ │ │ │ +000116c0: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog │ │ │ │ +000116d0: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP │ │ │ │ +000116e0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +000116f0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd │ │ │ │ +00011700: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT │ │ │ │ +00011710: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check │ │ │ │ +00011720: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ │ +00011730: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT │ │ │ │ +00011740: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime │ │ │ │ +00011750: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? ' │ │ │ │ +00011760: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my │ │ │ │ +00011770: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C │ │ │ │ +00011780: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00011790: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel │ │ │ │ +000117a0: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl │ │ │ │ +000117b0: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP │ │ │ │ +000117c0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +000117d0: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles' │ │ │ │ +000117e0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs │ │ │ │ +000117f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00011800: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s │ │ │ │ +00011810: 6176 654c 6f67 7327 2920 3f20 2779 6573 aveLogs') ? 'yes │ │ │ │ +00011820: 2720 3a20 276e 6f27 3b0a 6d79 2024 636f ' : 'no';.my $co │ │ │ │ +00011830: 6d70 7265 7373 5769 7468 203d 2024 4368 mpressWith = $Ch │ │ │ │ +00011840: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00011850: 7468 5061 7228 2763 6f6d 7072 6573 7357 thPar('compressW │ │ │ │ +00011860: 6974 6827 293b 0a6d 7920 246c 6f67 496e ith');.my $logIn │ │ │ │ +00011870: 4261 636b 7570 4469 7220 3d20 2443 6865 BackupDir = $Che │ │ │ │ +00011880: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00011890: 686f 7574 5061 7228 276c 6f67 496e 4261 houtPar('logInBa │ │ │ │ +000118a0: 636b 7570 4469 7227 293b 0a6d 7920 2463 ckupDir');.my $c │ │ │ │ +000118b0: 6f6d 7072 6573 734c 6f67 496e 4261 636b ompressLogInBack │ │ │ │ +000118c0: 7570 4469 7220 3d0a 2024 4368 6563 6b50 upDir =. $CheckP │ │ │ │ +000118d0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +000118e0: 7450 6172 2827 636f 6d70 7265 7373 4c6f tPar('compressLo │ │ │ │ +000118f0: 6749 6e42 6163 6b75 7044 6972 2729 3b0a gInBackupDir');. │ │ │ │ +00011900: 246c 6f67 496e 4261 636b 7570 4469 7246 $logInBackupDirF │ │ │ │ +00011910: 696c 654e 616d 6520 3d0a 2024 4368 6563 ileName =. $Chec │ │ │ │ +00011920: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00011930: 5061 7228 276c 6f67 496e 4261 636b 7570 Par('logInBackup │ │ │ │ +00011940: 4469 7246 696c 654e 616d 6527 293b 0a6d DirFileName');.m │ │ │ │ +00011950: 7920 2470 726f 6772 6573 7352 6570 6f72 y $progressRepor │ │ │ │ +00011960: 7420 3d20 2443 6865 636b 5061 722d 3e67 t = $CheckPar->g │ │ │ │ +00011970: 6574 4f70 7457 6974 6850 6172 2827 7072 etOptWithPar('pr │ │ │ │ +00011980: 6f67 7265 7373 5265 706f 7274 2729 3b0a ogressReport');. │ │ │ │ +00011990: 6d79 2024 7072 696e 7444 6570 7468 203d my $printDepth = │ │ │ │ +000119a0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +000119b0: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr │ │ │ │ +000119c0: 696e 7444 6570 7468 2729 3b0a 2470 7269 intDepth');.$pri │ │ │ │ +000119d0: 6e74 4465 7074 6820 3d20 2470 7269 6e74 ntDepth = $print │ │ │ │ +000119e0: 4465 7074 6820 3f20 2779 6573 2720 3a20 Depth ? 'yes' : │ │ │ │ +000119f0: 276e 6f27 3b0a 6d79 2028 406f 7468 6572 'no';.my (@other │ │ │ │ +00011a00: 4261 636b 7570 5365 7269 6573 2920 3d20 BackupSeries) = │ │ │ │ +00011a10: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi │ │ │ │ +00011a20: 7374 5061 7228 293b 0a23 2068 6964 6465 stPar();.# hidde │ │ │ │ +00011a30: 6e20 6f70 7469 6f6e 730a 6d79 2024 7072 n options.my $pr │ │ │ │ +00011a40: 696e 7441 6c6c 203d 2024 4368 6563 6b50 intAll = $CheckP │ │ │ │ +00011a50: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +00011a60: 7450 6172 2827 7072 696e 7441 6c6c 2729 tPar('printAll') │ │ │ │ +00011a70: 3b0a 2470 7269 6e74 203d 2031 2069 6620 ;.$print = 1 if │ │ │ │ +00011a80: 2470 7269 6e74 416c 6c3b 0a6d 7920 246d $printAll;.my $m │ │ │ │ +00011a90: 696e 426c 6f63 6b4c 656e 6774 6820 3d20 inBlockLength = │ │ │ │ +00011aa0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00011ab0: 7457 6974 6850 6172 2827 6d69 6e42 6c6f tWithPar('minBlo │ │ │ │ +00011ac0: 636b 4c65 6e67 7468 2729 3b0a 6d79 2024 ckLength');.my $ │ │ │ │ +00011ad0: 746f 6461 794f 7074 203d 2024 4368 6563 todayOpt = $Chec │ │ │ │ +00011ae0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00011af0: 5061 7228 2774 6f64 6179 4f70 7427 293b Par('todayOpt'); │ │ │ │ +00011b00: 2020 2320 666f 726d 6174 206c 696b 650a # format like. │ │ │ │ +00011b10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00011b20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00011b30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00011b40: 2020 2020 2020 2320 6261 636b 7570 2064 # backup d │ │ │ │ +00011b50: 6972 206e 616d 650a 6d79 2024 6967 6e6f ir name.my $igno │ │ │ │ +00011b60: 7265 5469 6d65 203d 2024 4368 6563 6b50 reTime = $CheckP │ │ │ │ +00011b70: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00011b80: 7228 2769 676e 6f72 6554 696d 6527 293b r('ignoreTime'); │ │ │ │ +00011b90: 0a6d 7920 2473 746f 7041 6674 6572 4e6f .my $stopAfterNo │ │ │ │ +00011ba0: 5265 6164 4572 726f 7273 203d 0a20 2020 ReadErrors =. │ │ │ │ +00011bb0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00011bc0: 7074 5769 7468 5061 7228 2773 746f 7041 ptWithPar('stopA │ │ │ │ +00011bd0: 6674 6572 4e6f 5265 6164 4572 726f 7273 fterNoReadErrors │ │ │ │ +00011be0: 2729 3b0a 0a75 6e6c 6573 7320 2824 6e6f ');..unless ($no │ │ │ │ +00011bf0: 436f 6d70 7265 7373 290a 7b0a 2020 2020 Compress).{. │ │ │ │ +00011c00: 6c6f 6361 6c20 2a46 494c 453b 0a20 2020 local *FILE;. │ │ │ │ +00011c10: 2069 6620 286f 7065 6e28 4649 4c45 2c20 if (open(FILE, │ │ │ │ +00011c20: 222f 7072 6f63 2f63 7075 696e 666f 2229 "/proc/cpuinfo") │ │ │ │ +00011c30: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;. │ │ │ │ +00011c40: 0924 6e6f 436f 6d70 7265 7373 203d 2031 .$noCompress = 1 │ │ │ │ +00011c50: 3b0a 0977 6869 6c65 2028 246c 203d 203c ;..while ($l = < │ │ │ │ +00011c60: 4649 4c45 3e29 0a09 7b0a 0920 2020 2024 FILE>)..{.. $ │ │ │ │ +00011c70: 6e6f 436f 6d70 7265 7373 2b2b 2069 6620 noCompress++ if │ │ │ │ +00011c80: 246c 203d 7e20 2f70 726f 6365 7373 6f72 $l =~ /processor │ │ │ │ +00011c90: 2f3b 0a09 7d0a 0963 6c6f 7365 2846 494c /;..}..close(FIL │ │ │ │ +00011ca0: 4529 3b0a 2020 2020 7d0a 2020 2020 246e E);. }. $n │ │ │ │ +00011cb0: 6f43 6f6d 7072 6573 7320 3d20 3220 6966 oCompress = 2 if │ │ │ │ +00011cc0: 2024 6e6f 436f 6d70 7265 7373 203c 2032 $noCompress < 2 │ │ │ │ +00011cd0: 3b0a 7d0a 0a28 4065 7863 6570 7453 7566 ;.}..(@exceptSuf │ │ │ │ +00011ce0: 6669 7829 203d 2028 293b 0a70 7573 6820 fix) = ();.push │ │ │ │ +00011cf0: 4065 7863 6570 7453 7566 6669 782c 2028 @exceptSuffix, ( │ │ │ │ +00011d00: 4024 6578 6365 7074 5375 6666 6978 2920 @$exceptSuffix) │ │ │ │ +00011d10: 6966 2064 6566 696e 6564 2024 6578 6365 if defined $exce │ │ │ │ +00011d20: 7074 5375 6666 6978 3b0a 7075 7368 2040 ptSuffix;.push @ │ │ │ │ +00011d30: 6578 6365 7074 5375 6666 6978 2c20 2840 exceptSuffix, (@ │ │ │ │ +00011d40: 2461 6464 4578 6365 7074 5375 6666 6978 $addExceptSuffix │ │ │ │ +00011d50: 2920 6966 2064 6566 696e 6564 2024 6164 ) if defined $ad │ │ │ │ +00011d60: 6445 7863 6570 7453 7566 6669 783b 0a0a dExceptSuffix;.. │ │ │ │ +00011d70: 0a69 6620 2824 6765 6e65 7261 7465 436f .if ($generateCo │ │ │ │ +00011d80: 6e66 6967 4669 6c65 290a 7b0a 2020 2020 nfigFile).{. │ │ │ │ +00011d90: 6d79 2024 616e 7377 6572 203d 2027 7965 my $answer = 'ye │ │ │ │ +00011da0: 7327 3b0a 2020 2020 6966 2028 2d65 2024 s';. if (-e $ │ │ │ │ +00011db0: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi │ │ │ │ +00011dc0: 6c65 290a 2020 2020 7b0a 0964 6f0a 097b le). {..do..{ │ │ │ │ +00011dd0: 0a09 2020 2020 7072 696e 7420 223c 2467 .. print "<$g │ │ │ │ +00011de0: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil │ │ │ │ +00011df0: 653e 2061 6c72 6561 6479 2065 7869 7374 e> already exist │ │ │ │ +00011e00: 732e 204f 7665 7277 7269 7465 3f5c 6e22 s. Overwrite?\n" │ │ │ │ +00011e10: 2c0a 0920 2020 2022 7965 7320 2f20 6e6f ,.. "yes / no │ │ │ │ +00011e20: 202d 3e20 223b 0a09 2020 2020 2461 6e73 -> ";.. $ans │ │ │ │ +00011e30: 7765 7220 3d20 3c53 5444 494e 3e3b 0a09 wer = ;.. │ │ │ │ +00011e40: 2020 2020 6368 6f6d 7020 2461 6e73 7765 chomp $answe │ │ │ │ +00011e50: 723b 0a09 7d20 7768 696c 6520 2824 616e r;..} while ($an │ │ │ │ +00011e60: 7377 6572 206e 6520 2779 6573 2720 616e swer ne 'yes' an │ │ │ │ +00011e70: 6420 2461 6e73 7765 7220 6e65 2027 6e6f d $answer ne 'no │ │ │ │ +00011e80: 2729 3b0a 2020 2020 7d0a 2020 2020 6578 ');. }. ex │ │ │ │ +00011e90: 6974 2030 2069 6620 2461 6e73 7765 7220 it 0 if $answer │ │ │ │ +00011ea0: 6571 2027 6e6f 273b 0a0a 2020 2020 6c6f eq 'no';.. lo │ │ │ │ +00011eb0: 6361 6c20 2a46 494c 453b 0a20 2020 206f cal *FILE;. o │ │ │ │ +00011ec0: 7065 6e28 4649 4c45 2c20 223e 2024 6765 pen(FILE, "> $ge │ │ │ │ +00011ed0: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile │ │ │ │ +00011ee0: 2229 206f 720a 0964 6965 2022 636f 756c ") or..die "coul │ │ │ │ +00011ef0: 6420 6e6f 7420 7772 6974 6520 746f 203c d not write to < │ │ │ │ +00011f00: 2467 656e 6572 6174 6543 6f6e 6669 6746 $generateConfigF │ │ │ │ +00011f10: 696c 653e 223b 0a20 2020 2070 7269 6e74 ile>";. print │ │ │ │ +00011f20: 2046 494c 4520 2474 656d 706c 6174 6543 FILE $templateC │ │ │ │ +00011f30: 6f6e 6669 6746 696c 653b 0a20 2020 2063 onfigFile;. c │ │ │ │ +00011f40: 6c6f 7365 2846 494c 4529 3b0a 2020 2020 lose(FILE);. │ │ │ │ +00011f50: 6578 6974 2030 3b0a 7d0a 0a69 6620 2824 exit 0;.}..if ($ │ │ │ │ +00011f60: 7072 696e 7429 0a7b 0a20 2020 2024 4368 print).{. $Ch │ │ │ │ +00011f70: 6563 6b50 6172 2d3e 7072 696e 7428 272d eckPar->print('- │ │ │ │ +00011f80: 7368 6f77 4869 6464 656e 2720 3d3e 2024 showHidden' => $ │ │ │ │ +00011f90: 7072 696e 7441 6c6c 293b 0a20 2020 2065 printAll);. e │ │ │ │ +00011fa0: 7869 7420 303b 0a7d 0a0a 2463 686d 6f64 xit 0;.}..$chmod │ │ │ │ +00011fb0: 4d44 3546 696c 6520 3d20 6f63 7420 2463 MD5File = oct $c │ │ │ │ +00011fc0: 686d 6f64 4d44 3546 696c 653b 0a0a 6d79 hmodMD5File;..my │ │ │ │ +00011fd0: 2028 4070 6172 293b 0a69 6620 2824 6c6f (@par);.if ($lo │ │ │ │ +00011fe0: 6746 696c 6529 0a7b 0a20 2020 2070 7573 gFile).{. pus │ │ │ │ +00011ff0: 6820 4070 6172 2c20 2827 2d66 696c 6527 h @par, ('-file' │ │ │ │ +00012000: 203d 3e20 246c 6f67 4669 6c65 293b 0a7d => $logFile);.} │ │ │ │ +00012010: 0a65 6c73 650a 7b0a 2020 2020 7075 7368 .else.{. push │ │ │ │ +00012020: 2040 7061 722c 2028 272d 6669 6c65 6465 @par, ('-filede │ │ │ │ +00012030: 7363 7269 7074 6f72 272c 202a 5354 444f scriptor', *STDO │ │ │ │ +00012040: 5554 293b 0a7d 0a6d 7920 2824 7072 4c6f UT);.}.my ($prLo │ │ │ │ +00012050: 674b 696e 6429 203d 205b 2741 3a42 4547 gKind) = ['A:BEG │ │ │ │ +00012060: 494e 272c 0a09 0920 2020 275a 3a45 4e44 IN',... 'Z:END │ │ │ │ +00012070: 272c 0a09 0920 2020 2749 3a49 4e46 4f27 ',... 'I:INFO' │ │ │ │ +00012080: 2c0a 0909 2020 2027 563a 5645 5253 494f ,... 'V:VERSIO │ │ │ │ +00012090: 4e27 2c0a 0909 2020 2027 573a 5741 524e N',... 'W:WARN │ │ │ │ +000120a0: 494e 4727 2c0a 0909 2020 2027 453a 4552 ING',... 'E:ER │ │ │ │ +000120b0: 524f 5227 2c0a 0909 2020 2027 503a 5052 ROR',... 'P:PR │ │ │ │ +000120c0: 4f47 5245 5353 272c 0a09 0920 2020 2753 OGRESS',... 'S │ │ │ │ +000120d0: 3a53 5441 5449 5354 4943 272c 0a09 0920 :STATISTIC',... │ │ │ │ +000120e0: 2020 2744 3a44 4542 5547 275d 3b0a 6d79 'D:DEBUG'];.my │ │ │ │ +000120f0: 2024 7072 4c6f 6731 203d 2070 7269 6e74 $prLog1 = print │ │ │ │ +00012100: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind' │ │ │ │ +00012110: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,. │ │ │ │ +00012120: 0909 0920 2020 4070 6172 2c0a 0909 0920 ... @par,.... │ │ │ │ +00012130: 2020 272d 7769 7468 5469 6d65 2720 3d3e '-withTime' => │ │ │ │ +00012140: 2024 7769 7468 5469 6d65 2c0a 0909 0920 $withTime,.... │ │ │ │ +00012150: 2020 272d 6d61 7846 696c 656c 656e 2720 '-maxFilelen' │ │ │ │ +00012160: 3d3e 2024 6d61 7846 696c 656c 656e 2c0a => $maxFilelen,. │ │ │ │ +00012170: 0909 0920 2020 272d 6e6f 4f66 4f6c 6446 ... '-noOfOldF │ │ │ │ +00012180: 696c 6573 2720 3d3e 2024 6e6f 4f66 4f6c iles' => $noOfOl │ │ │ │ +00012190: 6446 696c 6573 2c0a 0909 0920 2020 272d dFiles,.... '- │ │ │ │ +000121a0: 7361 7665 4c6f 6773 2720 3d3e 2024 7361 saveLogs' => $sa │ │ │ │ +000121b0: 7665 4c6f 6773 2c0a 0909 0920 2020 272d veLogs,.... '- │ │ │ │ +000121c0: 636f 6d70 7265 7373 5769 7468 2720 3d3e compressWith' => │ │ │ │ +000121d0: 2024 636f 6d70 7265 7373 5769 7468 293b $compressWith); │ │ │ │ +000121e0: 0a24 7072 4c6f 6731 2d3e 7365 7453 746f .$prLog1->setSto │ │ │ │ +000121f0: 7041 744e 6f4d 6573 7361 6765 7328 272d pAtNoMessages('- │ │ │ │ +00012200: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00012210: 0920 2020 2020 272d 7374 6f70 4174 2720 . '-stopAt' │ │ │ │ +00012220: 3d3e 2024 7374 6f70 4166 7465 724e 6f52 => $stopAfterNoR │ │ │ │ +00012230: 6561 6445 7272 6f72 7329 3b0a 0a6d 7920 eadErrors);..my │ │ │ │ +00012240: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo │ │ │ │ +00012250: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new(' │ │ │ │ +00012260: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr │ │ │ │ +00012270: 4c6f 6731 5d29 3b0a 0a28 406d 6169 6e3a Log1]);..(@main: │ │ │ │ +00012280: 3a63 6c65 616e 7570 2920 3d20 2824 7072 :cleanup) = ($pr │ │ │ │ +00012290: 4c6f 672c 2031 293b 0a0a 6d79 2028 2573 Log, 1);..my (%s │ │ │ │ +000122a0: 7570 7072 6573 7357 6172 6e69 6e67 293b uppressWarning); │ │ │ │ +000122b0: 0a7b 0a20 2020 206d 7920 2473 3b0a 2020 .{. my $s;. │ │ │ │ +000122c0: 2020 666f 7265 6163 6820 2473 2028 4024 foreach $s (@$ │ │ │ │ +000122d0: 7375 7070 7265 7373 5761 726e 696e 6729 suppressWarning) │ │ │ │ +000122e0: 0a20 2020 207b 0a09 2473 7570 7072 6573 . {..$suppres │ │ │ │ +000122f0: 7357 6172 6e69 6e67 7b24 737d 203d 2031 sWarning{$s} = 1 │ │ │ │ +00012300: 3b0a 2020 2020 7d0a 7d0a 0a24 7072 4c6f ;. }.}..$prLo │ │ │ │ +00012310: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00012320: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. │ │ │ │ +00012330: 272d 7374 7227 203d 3e20 5b22 6d69 7373 '-str' => ["miss │ │ │ │ +00012340: 696e 6720 7061 7261 6d73 2062 6163 6b75 ing params backu │ │ │ │ +00012350: 7044 6972 2c20 736f 7572 6365 4469 722c pDir, sourceDir, │ │ │ │ +00012360: 2073 6572 6965 735c 6e24 4865 6c70 225d series\n$Help"] │ │ │ │ +00012370: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit' │ │ │ │ +00012380: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles │ │ │ │ +00012390: 7320 6465 6669 6e65 6420 2462 6163 6b75 s defined $backu │ │ │ │ +000123a0: 7044 6972 2061 6e64 2064 6566 696e 6564 pDir and defined │ │ │ │ +000123b0: 2024 736f 7572 6365 4469 7220 616e 6420 $sourceDir and │ │ │ │ +000123c0: 6465 6669 6e65 6420 2473 6572 6965 733b defined $series; │ │ │ │ +000123d0: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ │ +000123e0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +000123f0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00012400: 3e20 5b22 6261 636b 7570 4469 7220 6469 > ["backupDir di │ │ │ │ +00012410: 7265 6374 6f72 7920 3c24 6261 636b 7570 rectory <$backup │ │ │ │ +00012420: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex │ │ │ │ +00012430: 6973 745c 6e24 4865 6c70 225d 2c0a 0920 ist\n$Help"],.. │ │ │ │ +00012440: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +00012450: 3129 0a20 2020 2075 6e6c 6573 7320 2d65 1). unless -e │ │ │ │ +00012460: 2024 6261 636b 7570 4469 723b 0a0a 2470 $backupDir;..$p │ │ │ │ +00012470: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00012480: 6e64 2720 3d3e 2027 4527 2c0a 0920 2020 nd' => 'E',.. │ │ │ │ +00012490: 2020 2027 2d73 7472 2720 3d3e 205b 2262 '-str' => ["b │ │ │ │ +000124a0: 6163 6b75 7044 6972 206d 7573 7420 6265 ackupDir must be │ │ │ │ +000124b0: 2074 6865 2074 6f70 206c 6576 656c 2064 the top level d │ │ │ │ +000124c0: 6972 6563 746f 7279 2066 6f72 2061 6c6c irectory for all │ │ │ │ +000124d0: 2079 6f75 7222 2c0a 0920 2020 2020 2022 your",.. " │ │ │ │ +000124e0: 7374 6f72 6542 6163 6b75 7020 6261 636b storeBackup back │ │ │ │ +000124f0: 7570 7320 6f6e 2074 6861 7420 7061 7274 ups on that part │ │ │ │ +00012500: 6974 696f 6e2e 2059 6f75 2063 616e 6e6f ition. You canno │ │ │ │ +00012510: 7420 7573 6520 272f 2720 666f 7220 7468 t use '/' for th │ │ │ │ +00012520: 6174 225d 2c0a 0920 2020 2020 2027 2d65 at"],.. '-e │ │ │ │ +00012530: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i │ │ │ │ +00012540: 6620 2462 6163 6b75 7044 6972 2065 7120 f $backupDir eq │ │ │ │ +00012550: 272f 273b 0a0a 6d79 2024 7461 7267 6574 '/';..my $target │ │ │ │ +00012560: 4469 7220 3d20 2224 6261 636b 7570 4469 Dir = "$backupDi │ │ │ │ +00012570: 722f 2473 6572 6965 7322 3b0a 756e 6c65 r/$series";.unle │ │ │ │ +00012580: 7373 2028 2d65 2024 7461 7267 6574 4469 ss (-e $targetDi │ │ │ │ +00012590: 7229 0a7b 0a20 2020 2024 7072 4c6f 672d r).{. $prLog- │ │ │ │ +000125a0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +000125b0: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ │ +000125c0: 2720 3d3e 205b 2263 616e 6e6f 7420 6372 ' => ["cannot cr │ │ │ │ +000125d0: 6561 7465 2064 6972 6563 746f 7279 2066 eate directory f │ │ │ │ +000125e0: 6f72 2073 6572 6965 7320 3c24 7461 7267 or series <$targ │ │ │ │ +000125f0: 6574 4469 723e 225d 2c0a 0909 2020 272d etDir>"],... '- │ │ │ │ +00012600: 6578 6974 2720 3d3e 2031 290a 0975 6e6c exit' => 1)..unl │ │ │ │ +00012610: 6573 7320 6d6b 6469 7220 2474 6172 6765 ess mkdir $targe │ │ │ │ +00012620: 7444 6972 2c20 3037 3030 3b0a 2020 2020 tDir, 0700;. │ │ │ │ +00012630: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00012640: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00012650: 2020 272d 7374 7227 203d 3e20 5b22 6372 '-str' => ["cr │ │ │ │ +00012660: 6561 7465 6420 6469 7265 6374 6f72 7920 eated directory │ │ │ │ +00012670: 3c24 7461 7267 6574 4469 723e 225d 290a <$targetDir>"]). │ │ │ │ +00012680: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $ │ │ │ │ +00012690: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{ │ │ │ │ +000126a0: 2763 7253 6572 6965 7327 7d3b 0a7d 0a0a 'crSeries'};.}.. │ │ │ │ +000126b0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000126c0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. │ │ │ │ +000126d0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +000126e0: 2263 616e 6e6f 7420 7772 6974 6520 746f "cannot write to │ │ │ │ +000126f0: 2074 6172 6765 7420 6469 7265 6374 6f72 target director │ │ │ │ +00012700: 7920 3c24 7461 7267 6574 4469 723e 225d y <$targetDir>"] │ │ │ │ +00012710: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit' │ │ │ │ +00012720: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles │ │ │ │ +00012730: 7320 282d 7720 2474 6172 6765 7444 6972 s (-w $targetDir │ │ │ │ +00012740: 293b 0a0a 2474 6172 6765 7444 6972 203d );..$targetDir = │ │ │ │ +00012750: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath │ │ │ │ +00012760: 2824 7461 7267 6574 4469 7229 3b0a 2473 ($targetDir);.$s │ │ │ │ +00012770: 6f75 7263 6544 6972 203d 2026 3a3a 6162 ourceDir = &::ab │ │ │ │ +00012780: 736f 6c75 7465 5061 7468 2824 736f 7572 solutePath($sour │ │ │ │ +00012790: 6365 4469 7229 3b0a 2462 6163 6b75 7044 ceDir);.$backupD │ │ │ │ +000127a0: 6972 203d 2026 3a3a 6162 736f 6c75 7465 ir = &::absolute │ │ │ │ +000127b0: 5061 7468 2824 6261 636b 7570 4469 7229 Path($backupDir) │ │ │ │ +000127c0: 3b0a 0a24 6d61 696e 3a3a 736f 7572 6365 ;..$main::source │ │ │ │ +000127d0: 4469 7220 3d20 2473 6f75 7263 6544 6972 Dir = $sourceDir │ │ │ │ +000127e0: 3b0a 0a24 6d61 696e 3a3a 494f 436f 6d70 ;..$main::IOComp │ │ │ │ +000127f0: 7265 7373 4469 7265 6374 203d 2030 3b0a ressDirect = 0;. │ │ │ │ +00012800: 7b0a 2020 2020 2320 6275 696c 6420 6120 {. # build a │ │ │ │ +00012810: 7275 6c65 2066 726f 6d20 6f70 7469 6f6e rule from option │ │ │ │ +00012820: 2063 6865 636b 426c 6f63 6b73 5375 6666 checkBlocksSuff │ │ │ │ +00012830: 6978 0a20 2020 2069 6620 2864 6566 696e ix. if (defin │ │ │ │ +00012840: 6564 2824 6368 6563 6b42 6c6f 636b 7353 ed($checkBlocksS │ │ │ │ +00012850: 7566 6669 7829 290a 2020 2020 7b0a 096d uffix)). {..m │ │ │ │ +00012860: 7920 2462 7320 3d20 2826 3a3a 7265 7665 y $bs = (&::reve │ │ │ │ +00012870: 7274 4875 6d61 6e52 6561 6461 626c 6528 rtHumanReadable( │ │ │ │ +00012880: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff │ │ │ │ +00012890: 6978 4253 2929 5b30 5d3b 0a09 2470 724c ixBS))[0];..$prL │ │ │ │ +000128a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000128b0: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... │ │ │ │ +000128c0: 2020 272d 7374 7227 203d 3e20 5b22 6368 '-str' => ["ch │ │ │ │ +000128d0: 6563 6b42 6c6f 636b 7342 5320 746f 6f20 eckBlocksBS too │ │ │ │ +000128e0: 736d 616c 6c20 2220 2e20 0a09 0909 0920 small " . ..... │ │ │ │ +000128f0: 2228 2463 6865 636b 426c 6f63 6b73 5375 "($checkBlocksSu │ │ │ │ +00012900: 6666 6978 4253 203c 2024 6368 6563 6b42 ffixBS < $checkB │ │ │ │ +00012910: 6c6f 636b 7342 536d 696e 2922 5d2c 0a09 locksBSmin)"],.. │ │ │ │ +00012920: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ │ +00012930: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs │ │ │ │ +00012940: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB │ │ │ │ +00012950: 536d 696e 3b0a 0970 7573 6820 4063 6865 Smin;..push @che │ │ │ │ +00012960: 636b 426c 6f63 6b73 4253 2c20 2463 6865 ckBlocksBS, $che │ │ │ │ +00012970: 636b 426c 6f63 6b73 5375 6666 6978 4253 ckBlocksSuffixBS │ │ │ │ +00012980: 3b0a 0970 7573 6820 4063 6865 636b 426c ;..push @checkBl │ │ │ │ +00012990: 6f63 6b73 436f 6d70 722c 2024 6368 6563 ocksCompr, $chec │ │ │ │ +000129a0: 6b42 6c6f 636b 7343 6f6d 7072 3b0a 0970 kBlocksCompr;..p │ │ │ │ +000129b0: 7573 6820 4063 6865 636b 426c 6f63 6b73 ush @checkBlocks │ │ │ │ +000129c0: 5275 6c65 2c0a 095b 2724 7369 7a65 203e Rule,..['$size > │ │ │ │ +000129d0: 3d20 263a 3a53 495a 4528 2227 202e 2024 = &::SIZE("' . $ │ │ │ │ +000129e0: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi │ │ │ │ +000129f0: 784d 696e 5369 7a65 202e 2027 2229 2720 xMinSize . '")' │ │ │ │ +00012a00: 2c20 0a09 2027 616e 6427 2c0a 0920 2724 , .. 'and',.. '$ │ │ │ │ +00012a10: 6669 6c65 203d 7e20 2f27 202e 206a 6f69 file =~ /' . joi │ │ │ │ +00012a20: 6e28 275c 5a7c 272c 2040 2463 6865 636b n('\Z|', @$check │ │ │ │ +00012a30: 426c 6f63 6b73 5375 6666 6978 2920 2e20 BlocksSuffix) . │ │ │ │ +00012a40: 275c 5a2f 275d 3b0a 0970 7573 6820 4063 '\Z/'];..push @c │ │ │ │ +00012a50: 6865 636b 426c 6f63 6b73 5265 6164 2c20 heckBlocksRead, │ │ │ │ +00012a60: 756e 6465 663b 0a09 7075 7368 2040 6368 undef;..push @ch │ │ │ │ +00012a70: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle │ │ │ │ +00012a80: 6c2c 2075 6e64 6566 3b0a 2020 2020 7d0a l, undef;. }. │ │ │ │ +00012a90: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. │ │ │ │ +00012aa0: 666f 7265 6163 6820 2469 2028 302e 2e40 foreach $i (0..@ │ │ │ │ +00012ab0: 6368 6563 6b42 6c6f 636b 7352 756c 652d checkBlocksRule- │ │ │ │ +00012ac0: 3129 0a20 2020 207b 0a09 6e65 7874 2075 1). {..next u │ │ │ │ +00012ad0: 6e6c 6573 7320 6465 6669 6e65 6420 2463 nless defined $c │ │ │ │ +00012ae0: 6865 636b 426c 6f63 6b73 5275 6c65 5b24 heckBlocksRule[$ │ │ │ │ +00012af0: 695d 3b0a 0a09 756e 6c65 7373 2028 6465 i];...unless (de │ │ │ │ +00012b00: 6669 6e65 6420 2463 6865 636b 426c 6f63 fined $checkBloc │ │ │ │ +00012b10: 6b73 4253 5b24 695d 290a 097b 0a09 2020 ksBS[$i])..{.. │ │ │ │ +00012b20: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00012b30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00012b40: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ │ +00012b50: 0909 2020 5b22 626c 6f63 6b20 7369 7a65 .. ["block size │ │ │ │ +00012b60: 2066 6f72 206f 7074 696f 6e20 6368 6563 for option chec │ │ │ │ +00012b70: 6b42 6c6f 636b 7352 756c 6524 6920 6973 kBlocksRule$i is │ │ │ │ +00012b80: 206d 6973 7369 6e67 225d 2c0a 0909 0920 missing"],.... │ │ │ │ +00012b90: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);. │ │ │ │ +00012ba0: 097d 0a09 2466 6c61 6742 6c6f 636b 4465 .}..$flagBlockDe │ │ │ │ +00012bb0: 7669 6365 203d 2031 3b0a 096d 7920 2462 vice = 1;..my $b │ │ │ │ +00012bc0: 733b 0a09 2462 7320 3d20 2463 6865 636b s;..$bs = $check │ │ │ │ +00012bd0: 426c 6f63 6b73 4253 5b24 695d 203d 0a09 BlocksBS[$i] =.. │ │ │ │ +00012be0: 2020 2020 2826 3a3a 7265 7665 7274 4875 (&::revertHu │ │ │ │ +00012bf0: 6d61 6e52 6561 6461 626c 6528 2463 6865 manReadable($che │ │ │ │ +00012c00: 636b 426c 6f63 6b73 4253 5b24 695d 2929 ckBlocksBS[$i])) │ │ │ │ +00012c10: 5b30 5d3b 0a0a 0924 7072 4c6f 672d 3e70 [0];...$prLog->p │ │ │ │ +00012c20: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00012c30: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ │ +00012c40: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [ │ │ │ │ +00012c50: 2263 6865 636b 426c 6f63 6b73 4253 2469 "checkBlocksBS$i │ │ │ │ +00012c60: 2074 6f6f 2073 6d61 6c6c 2028 2462 7320 too small ($bs │ │ │ │ +00012c70: 3c20 2463 6865 636b 426c 6f63 6b73 4253 < $checkBlocksBS │ │ │ │ +00012c80: 6d69 6e29 225d 2c0a 0909 2020 2020 2020 min)"],... │ │ │ │ +00012c90: 272d 6578 6974 2720 3d3e 2031 290a 0920 '-exit' => 1).. │ │ │ │ +00012ca0: 2020 2069 6620 2462 7320 3c20 2463 6865 if $bs < $che │ │ │ │ +00012cb0: 636b 426c 6f63 6b73 4253 6d69 6e3b 0a0a ckBlocksBSmin;.. │ │ │ │ +00012cc0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00012cd0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00012ce0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00012cf0: 0a09 0920 2020 2020 205b 2262 6c6f 636b ... ["block │ │ │ │ +00012d00: 2073 697a 6520 666f 7220 6368 6563 6b42 size for checkB │ │ │ │ +00012d10: 6c6f 636b 7352 756c 6524 6920 6973 2022 locksRule$i is " │ │ │ │ +00012d20: 202e 2024 6368 6563 6b42 6c6f 636b 7342 . $checkBlocksB │ │ │ │ +00012d30: 535b 2469 5d20 2e0a 0909 2020 2020 2020 S[$i] .... │ │ │ │ +00012d40: 2022 2c20 6d75 7374 2062 6520 246d 696e ", must be $min │ │ │ │ +00012d50: 426c 6f63 6b4c 656e 6774 6820 6f72 206d BlockLength or m │ │ │ │ +00012d60: 6f72 6522 5d2c 0a09 0920 2020 2020 2027 ore"],... ' │ │ │ │ +00012d70: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. │ │ │ │ +00012d80: 2020 6966 2024 6273 203c 2024 6d69 6e42 if $bs < $minB │ │ │ │ +00012d90: 6c6f 636b 4c65 6e67 7468 3b0a 0a09 2470 lockLength;...$p │ │ │ │ +00012da0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00012db0: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ │ +00012dc0: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>... │ │ │ │ +00012dd0: 2020 2020 2020 5b22 7061 7261 6d65 7465 ["paramete │ │ │ │ +00012de0: 7220 3c24 6273 3e20 666f 7220 6f70 7469 r <$bs> for opti │ │ │ │ +00012df0: 6f6e 2063 6865 636b 426c 6f63 6b73 4253 on checkBlocksBS │ │ │ │ +00012e00: 2569 2068 6173 2077 726f 6e67 2066 6f72 %i has wrong for │ │ │ │ +00012e10: 6d61 7422 5d2c 0a09 0920 2020 2020 2027 mat"],... ' │ │ │ │ +00012e20: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. │ │ │ │ +00012e30: 2020 756e 6c65 7373 2064 6566 696e 6564 unless defined │ │ │ │ +00012e40: 2024 6273 3b0a 2020 2020 7d0a 0a20 2020 $bs;. }.. │ │ │ │ +00012e50: 206d 7920 2840 6368 6b44 6576 6963 6573 my (@chkDevices │ │ │ │ +00012e60: 2c20 4063 686b 4465 7669 6365 7344 6972 , @chkDevicesDir │ │ │ │ +00012e70: 2c20 4063 686b 4465 7669 6365 7342 532c , @chkDevicesBS, │ │ │ │ +00012e80: 2040 6368 6b44 6576 6963 6573 436f 6d70 @chkDevicesComp │ │ │ │ +00012e90: 722c 0a09 4063 686b 4465 7669 6365 7350 r,..@chkDevicesP │ │ │ │ +00012ea0: 6172 616c 6c65 6c29 3b0a 2020 2020 666f arallel);. fo │ │ │ │ +00012eb0: 7265 6163 6820 2469 2028 302e 2e40 6368 reach $i (0..@ch │ │ │ │ +00012ec0: 6563 6b44 6576 6963 6573 2d31 290a 2020 eckDevices-1). │ │ │ │ +00012ed0: 2020 7b0a 096e 6578 7420 756e 6c65 7373 {..next unless │ │ │ │ +00012ee0: 2024 6368 6563 6b44 6576 6963 6573 5b24 $checkDevices[$ │ │ │ │ +00012ef0: 695d 3b0a 0a09 756e 6c65 7373 2028 6465 i];...unless (de │ │ │ │ +00012f00: 6669 6e65 6420 2463 6865 636b 4465 7669 fined $checkDevi │ │ │ │ +00012f10: 6365 7342 535b 2469 5d29 0a09 7b0a 0920 cesBS[$i])..{.. │ │ │ │ +00012f20: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00012f30: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00012f40: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ │ +00012f50: 0909 0920 205b 2262 6c6f 636b 2073 697a ... ["block siz │ │ │ │ +00012f60: 6520 666f 7220 6f70 7469 6f6e 2063 6865 e for option che │ │ │ │ +00012f70: 636b 4465 7669 6365 7324 6920 6973 206d ckDevices$i is m │ │ │ │ +00012f80: 6973 7369 6e67 225d 2c0a 0909 0920 2027 issing"],.... ' │ │ │ │ +00012f90: 2d65 7869 7427 203d 3e20 3129 3b0a 097d -exit' => 1);..} │ │ │ │ +00012fa0: 0a09 2466 6c61 6742 6c6f 636b 4465 7669 ..$flagBlockDevi │ │ │ │ +00012fb0: 6365 203d 2031 3b0a 096d 7920 2462 733b ce = 1;..my $bs; │ │ │ │ +00012fc0: 0a09 2462 7320 3d20 2463 6865 636b 4465 ..$bs = $checkDe │ │ │ │ +00012fd0: 7669 6365 7342 535b 2469 5d20 3d0a 0920 vicesBS[$i] =.. │ │ │ │ +00012fe0: 2020 2028 263a 3a72 6576 6572 7448 756d (&::revertHum │ │ │ │ +00012ff0: 616e 5265 6164 6162 6c65 2824 6368 6563 anReadable($chec │ │ │ │ +00013000: 6b44 6576 6963 6573 4253 5b24 695d 2929 kDevicesBS[$i])) │ │ │ │ +00013010: 5b30 5d3b 0a0a 0924 7072 4c6f 672d 3e70 [0];...$prLog->p │ │ │ │ +00013020: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00013030: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ │ +00013040: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [ │ │ │ │ +00013050: 2263 6865 636b 4465 7669 6365 7342 5324 "checkDevicesBS$ │ │ │ │ +00013060: 6920 746f 6f20 736d 616c 6c20 2824 6273 i too small ($bs │ │ │ │ +00013070: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB │ │ │ │ +00013080: 536d 696e 2922 5d2c 0a09 0920 2020 2020 Smin)"],... │ │ │ │ +00013090: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1).. │ │ │ │ +000130a0: 2020 2020 6966 2024 6273 203c 2024 6368 if $bs < $ch │ │ │ │ +000130b0: 6563 6b42 6c6f 636b 7342 536d 696e 3b0a eckBlocksBSmin;. │ │ │ │ +000130c0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +000130d0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +000130e0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +000130f0: 3e0a 0909 2020 2020 2020 5b22 626c 6f63 >... ["bloc │ │ │ │ +00013100: 6b20 7369 7a65 2066 6f72 2063 6865 636b k size for check │ │ │ │ +00013110: 4465 7669 6365 7324 6920 6973 2022 202e Devices$i is " . │ │ │ │ +00013120: 2024 6368 6563 6b44 6576 6963 6573 4253 $checkDevicesBS │ │ │ │ +00013130: 5b24 695d 202e 0a09 0920 2020 2020 2020 [$i] .... │ │ │ │ +00013140: 222c 206d 7573 7420 6265 2024 6d69 6e42 ", must be $minB │ │ │ │ +00013150: 6c6f 636b 4c65 6e67 7468 206f 7220 6d6f lockLength or mo │ │ │ │ +00013160: 7265 225d 2c0a 0909 2020 2020 2020 272d re"],... '- │ │ │ │ +00013170: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ │ +00013180: 2069 6620 2462 7320 3c20 246d 696e 426c if $bs < $minBl │ │ │ │ +00013190: 6f63 6b4c 656e 6774 683b 0a0a 0924 7072 ockLength;...$pr │ │ │ │ +000131a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000131b0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... │ │ │ │ +000131c0: 2020 2027 2d73 7472 2720 3d3e 0a09 0920 '-str' =>... │ │ │ │ +000131d0: 2020 2020 205b 2270 6172 616d 6574 6572 ["parameter │ │ │ │ +000131e0: 203c 2462 733e 2066 6f72 206f 7074 696f <$bs> for optio │ │ │ │ +000131f0: 6e20 6368 6563 6b44 6576 6963 6573 4253 n checkDevicesBS │ │ │ │ +00013200: 2569 2068 6173 2077 726f 6e67 2066 6f72 %i has wrong for │ │ │ │ +00013210: 6d61 7422 5d2c 0a09 0920 2020 2020 2027 mat"],... ' │ │ │ │ +00013220: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. │ │ │ │ +00013230: 2020 756e 6c65 7373 2064 6566 696e 6564 unless defined │ │ │ │ +00013240: 2024 6273 3b0a 0a09 2470 724c 6f67 2d3e $bs;...$prLog-> │ │ │ │ +00013250: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00013260: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +00013270: 7374 7227 203d 3e0a 0909 2020 2020 2020 str' =>... │ │ │ │ +00013280: 5b22 6f70 7469 6f6e 2063 6865 636b 4465 ["option checkDe │ │ │ │ +00013290: 7669 6365 7344 6972 2469 206e 6f74 2073 vicesDir$i not s │ │ │ │ +000132a0: 6574 225d 2c0a 0909 2020 2020 2020 272d et"],... '- │ │ │ │ +000132b0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ │ +000132c0: 2075 6e6c 6573 7320 6465 6669 6e65 6420 unless defined │ │ │ │ +000132d0: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir │ │ │ │ +000132e0: 5b24 695d 3b0a 0a09 6d79 2024 6465 764c [$i];...my $devL │ │ │ │ +000132f0: 6973 7420 3d20 2463 6865 636b 4465 7669 ist = $checkDevi │ │ │ │ +00013300: 6365 735b 2469 5d3b 0a09 6d79 2024 6465 ces[$i];..my $de │ │ │ │ +00013310: 7644 6972 203d 2024 6368 6563 6b44 6576 vDir = $checkDev │ │ │ │ +00013320: 6963 6573 4469 725b 2469 5d3b 0a09 6d79 icesDir[$i];..my │ │ │ │ +00013330: 2024 6c61 7374 4465 7644 6972 203d 2024 $lastDevDir = $ │ │ │ │ +00013340: 6368 6563 6b44 6576 6963 6573 4469 725b checkDevicesDir[ │ │ │ │ +00013350: 2469 5d5b 305d 3b0a 096d 7920 246a 3b0a $i][0];..my $j;. │ │ │ │ +00013360: 0966 6f72 6561 6368 2024 6a20 2830 2e2e .foreach $j (0.. │ │ │ │ +00013370: 4024 6465 764c 6973 742d 3129 0a09 7b0a @$devList-1)..{. │ │ │ │ +00013380: 0920 2020 206d 7920 2464 6576 203d 2024 . my $dev = $ │ │ │ │ +00013390: 2464 6576 4c69 7374 5b24 6a5d 3b0a 0920 $devList[$j];.. │ │ │ │ +000133a0: 2020 2070 7573 6820 4063 686b 4465 7669 push @chkDevi │ │ │ │ +000133b0: 6365 732c 2024 6465 763b 0a09 2020 2020 ces, $dev;.. │ │ │ │ +000133c0: 246c 6173 7444 6576 4469 7220 3d20 2024 $lastDevDir = $ │ │ │ │ +000133d0: 2464 6576 4469 725b 246a 5d20 6966 2040 $devDir[$j] if @ │ │ │ │ +000133e0: 2464 6576 4469 7220 2d20 3120 3e3d 2024 $devDir - 1 >= $ │ │ │ │ +000133f0: 6a3b 0a09 2020 2020 7075 7368 2040 6368 j;.. push @ch │ │ │ │ +00013400: 6b44 6576 6963 6573 4469 722c 2024 6c61 kDevicesDir, $la │ │ │ │ +00013410: 7374 4465 7644 6972 3b0a 0920 2020 2070 stDevDir;.. p │ │ │ │ +00013420: 7573 6820 4063 686b 4465 7669 6365 7342 ush @chkDevicesB │ │ │ │ +00013430: 532c 2024 6273 3b0a 0920 2020 2070 7573 S, $bs;.. pus │ │ │ │ +00013440: 6820 4063 686b 4465 7669 6365 7343 6f6d h @chkDevicesCom │ │ │ │ +00013450: 7072 2c20 2463 6865 636b 4465 7669 6365 pr, $checkDevice │ │ │ │ +00013460: 7343 6f6d 7072 5b24 695d 3b0a 0920 2020 sCompr[$i];.. │ │ │ │ +00013470: 2070 7573 6820 4063 686b 4465 7669 6365 push @chkDevice │ │ │ │ +00013480: 7350 6172 616c 6c65 6c2c 2024 6368 6563 sParallel, $chec │ │ │ │ +00013490: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel │ │ │ │ +000134a0: 5b24 695d 3b0a 097d 0a20 2020 207d 0a20 [$i];..}. }. │ │ │ │ +000134b0: 2020 2028 4063 6865 636b 4465 7669 6365 (@checkDevice │ │ │ │ +000134c0: 7329 203d 2028 4063 686b 4465 7669 6365 s) = (@chkDevice │ │ │ │ +000134d0: 7329 3b20 2020 2023 2068 6572 6520 7765 s); # here we │ │ │ │ +000134e0: 2068 6176 6520 6f6e 6c79 2075 7365 6420 have only used │ │ │ │ +000134f0: 656e 7472 6965 730a 2020 2020 2840 6368 entries. (@ch │ │ │ │ +00013500: 6563 6b44 6576 6963 6573 4469 7229 203d eckDevicesDir) = │ │ │ │ +00013510: 2028 4063 686b 4465 7669 6365 7344 6972 (@chkDevicesDir │ │ │ │ +00013520: 293b 0a20 2020 2028 4063 6865 636b 4465 );. (@checkDe │ │ │ │ +00013530: 7669 6365 7342 5329 203d 2028 4063 686b vicesBS) = (@chk │ │ │ │ +00013540: 4465 7669 6365 7342 5329 3b0a 2020 2020 DevicesBS);. │ │ │ │ +00013550: 2840 6368 6563 6b44 6576 6963 6573 436f (@checkDevicesCo │ │ │ │ +00013560: 6d70 7229 203d 2028 4063 686b 4465 7669 mpr) = (@chkDevi │ │ │ │ +00013570: 6365 7343 6f6d 7072 293b 0a20 2020 2028 cesCompr);. ( │ │ │ │ +00013580: 4063 6865 636b 4465 7669 6365 7350 6172 @checkDevicesPar │ │ │ │ +00013590: 616c 6c65 6c29 203d 2028 4063 686b 4465 allel) = (@chkDe │ │ │ │ +000135a0: 7669 6365 7350 6172 616c 6c65 6c29 3b0a vicesParallel);. │ │ │ │ +000135b0: 0a20 2020 2069 6620 2828 4063 6865 636b . if ((@check │ │ │ │ +000135c0: 426c 6f63 6b73 5275 6c65 206f 7220 4063 BlocksRule or @c │ │ │ │ +000135d0: 6865 636b 4465 7669 6365 7329 2061 6e64 heckDevices) and │ │ │ │ +000135e0: 0a09 2463 6f6d 7072 6573 735b 305d 2065 ..$compress[0] e │ │ │ │ +000135f0: 7120 2762 7a69 7032 2729 0a20 2020 207b q 'bzip2'). { │ │ │ │ +00013600: 0a09 6576 616c 2022 7573 6520 494f 3a3a ..eval "use IO:: │ │ │ │ +00013610: 436f 6d70 7265 7373 3a3a 427a 6970 3220 Compress::Bzip2 │ │ │ │ +00013620: 7177 2862 7a69 7032 2922 3b0a 0969 6620 qw(bzip2)";..if │ │ │ │ +00013630: 2824 4029 0a09 7b0a 0920 2020 2024 7072 ($@)..{.. $pr │ │ │ │ +00013640: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00013650: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ │ +00013660: 272d 7374 7227 203d 3e20 5b22 706c 6561 '-str' => ["plea │ │ │ │ +00013670: 7365 2069 6e73 7461 6c6c 2049 4f3a 3a43 se install IO::C │ │ │ │ +00013680: 6f6d 7072 6573 733a 3a42 7a69 7032 2066 ompress::Bzip2 f │ │ │ │ +00013690: 726f 6d20 2220 2e0a 0909 0909 2020 2020 rom " ...... │ │ │ │ +000136a0: 2022 4350 414e 2066 6f72 2062 6574 7465 "CPAN for bette │ │ │ │ +000136b0: 7220 7065 7266 6f72 6d61 6e63 6522 5d29 r performance"]) │ │ │ │ +000136c0: 3b0a 097d 0a09 656c 7365 0a09 7b0a 0920 ;..}..else..{.. │ │ │ │ +000136d0: 2020 2024 6d61 696e 3a3a 494f 436f 6d70 $main::IOComp │ │ │ │ +000136e0: 7265 7373 4469 7265 6374 203d 2031 3b0a ressDirect = 1;. │ │ │ │ +000136f0: 097d 0a20 2020 207d 0a7d 0a0a 2470 724c .}. }.}..$prL │ │ │ │ +00013700: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00013710: 2720 3d3e 2027 4127 2c0a 0920 2020 2020 ' => 'A',.. │ │ │ │ +00013720: 2027 2d73 7472 2720 3d3e 205b 2262 6163 '-str' => ["bac │ │ │ │ +00013730: 6b69 6e67 2075 7020 6469 7265 6374 6f72 king up director │ │ │ │ +00013740: 7920 3c24 736f 7572 6365 4469 723e 2074 y <$sourceDir> t │ │ │ │ +00013750: 6f20 3c24 7461 7267 6574 4469 723e 225d o <$targetDir>"] │ │ │ │ +00013760: 293b 0a24 7072 4c6f 672d 3e70 7269 6e74 );.$prLog->print │ │ │ │ +00013770: 2827 2d6b 696e 6427 203d 3e20 2756 272c ('-kind' => 'V', │ │ │ │ +00013780: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00013790: 3e20 5b22 2456 4552 5349 4f4e 704e 616d > ["$VERSIONpNam │ │ │ │ +000137a0: 652c 2024 6d61 696e 3a3a 5354 4f52 4542 e, $main::STOREB │ │ │ │ +000137b0: 4143 4b55 5056 4552 5349 4f4e 2c20 2220 ACKUPVERSION, " │ │ │ │ +000137c0: 2e0a 0909 0920 2262 7569 6c64 2024 5645 ..... "build $VE │ │ │ │ +000137d0: 5253 494f 4e73 766e 4944 225d 293b 0a0a RSIONsvnID"]);.. │ │ │ │ +000137e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000137f0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0920 kind' => 'W',.. │ │ │ │ +00013800: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00013810: 226f 7074 696f 6e20 5c22 636f 7079 4257 "option \"copyBW │ │ │ │ +00013820: 4c69 6d69 745c 2220 6973 2064 6570 7265 Limit\" is depre │ │ │ │ +00013830: 6361 7465 642c 2070 6c65 6173 6520 2220 cated, please " │ │ │ │ +00013840: 2e0a 0909 0920 2272 656d 6f76 6520 6672 ..... "remove fr │ │ │ │ +00013850: 6f6d 2079 6f75 7220 636f 6e66 6967 7572 om your configur │ │ │ │ +00013860: 6174 696f 6e22 5d29 0a20 2020 2069 6620 ation"]). if │ │ │ │ +00013870: 6465 6669 6e65 6420 2463 6f70 7942 574c defined $copyBWL │ │ │ │ +00013880: 696d 6974 3b0a 0a0a 6966 2028 2470 6c75 imit;...if ($plu │ │ │ │ +00013890: 734c 6f67 5374 646f 7574 290a 7b0a 2020 sLogStdout).{. │ │ │ │ +000138a0: 2020 6d79 2024 7020 3d20 7072 696e 744c my $p = printL │ │ │ │ +000138b0: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' │ │ │ │ +000138c0: 3d3e 2024 7072 4c6f 674b 696e 642c 0a09 => $prLogKind,.. │ │ │ │ +000138d0: 0909 2020 272d 6669 6c65 6465 7363 7269 .. '-filedescri │ │ │ │ +000138e0: 7074 6f72 272c 202a 5354 444f 5554 293b ptor', *STDOUT); │ │ │ │ +000138f0: 0a20 2020 2024 7072 4c6f 672d 3e61 6464 . $prLog->add │ │ │ │ +00013900: 2827 2d70 724c 6f67 7327 203d 3e20 5b24 ('-prLogs' => [$ │ │ │ │ +00013910: 705d 293b 0a7d 0a0a 2320 4f53 2d54 7970 p]);.}..# OS-Typ │ │ │ │ +00013920: 2066 6573 7473 7465 6c6c 656e 2c20 756d feststellen, um │ │ │ │ +00013930: 2041 5247 5f4d 4158 207a 7520 7365 747a ARG_MAX zu setz │ │ │ │ +00013940: 656e 0a23 2044 6566 6175 6c74 2077 6972 en.# Default wir │ │ │ │ +00013950: 6420 766f 7273 6963 6874 7368 616c 6265 d vorsichtshalbe │ │ │ │ +00013960: 7220 6175 6620 3420 4b42 2067 6573 6574 r auf 4 KB geset │ │ │ │ +00013970: 7a74 210a 7b0a 2020 2020 6d79 2024 756e zt!.{. my $un │ │ │ │ +00013980: 616d 6520 3d20 666f 726b 5072 6f63 2d3e ame = forkProc-> │ │ │ │ +00013990: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => ' │ │ │ │ +000139a0: 756e 616d 6527 2c0a 0909 0920 2020 2020 uname',.... │ │ │ │ +000139b0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ │ +000139c0: 2022 2474 6d70 6469 722f 756e 616d 652d "$tmpdir/uname- │ │ │ │ +000139d0: 222c 0a09 0909 2020 2020 2020 272d 7072 ",.... '-pr │ │ │ │ +000139e0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ │ +000139f0: 0a20 2020 2024 756e 616d 652d 3e77 6169 . $uname->wai │ │ │ │ +00013a00: 7428 293b 0a20 2020 206d 7920 246f 7574 t();. my $out │ │ │ │ +00013a10: 203d 2024 756e 616d 652d 3e67 6574 5354 = $uname->getST │ │ │ │ +00013a20: 444f 5554 2829 3b0a 2020 2020 6d79 2024 DOUT();. my $ │ │ │ │ +00013a30: 6f73 203d 2027 273b 0a20 2020 2069 6620 os = '';. if │ │ │ │ +00013a40: 2865 7869 7374 7320 2465 7865 6350 6172 (exists $execPar │ │ │ │ +00013a50: 616d 4c65 6e67 7468 7b24 246f 7574 5b30 amLength{$$out[0 │ │ │ │ +00013a60: 5d7d 290a 2020 2020 7b0a 0924 6d61 696e ]}). {..$main │ │ │ │ +00013a70: 3a3a 6578 6563 5061 7261 6d4c 656e 6774 ::execParamLengt │ │ │ │ +00013a80: 6820 3d20 2465 7865 6350 6172 616d 4c65 h = $execParamLe │ │ │ │ +00013a90: 6e67 7468 7b24 246f 7574 5b30 5d7d 3b0a ngth{$$out[0]};. │ │ │ │ +00013aa0: 0924 6f73 203d 2027 2028 2720 2e20 2424 .$os = ' (' . $$ │ │ │ │ +00013ab0: 6f75 745b 305d 202e 2027 2927 3b0a 2020 out[0] . ')';. │ │ │ │ +00013ac0: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog-> │ │ │ │ +00013ad0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00013ae0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str' │ │ │ │ +00013af0: 203d 3e20 5b27 7365 7474 696e 6720 4152 => ['setting AR │ │ │ │ +00013b00: 475f 4d41 5820 746f 2027 202e 2024 6d61 G_MAX to ' . $ma │ │ │ │ +00013b10: 696e 3a3a 6578 6563 5061 7261 6d4c 656e in::execParamLen │ │ │ │ +00013b20: 6774 6820 2e0a 0909 0920 2020 2020 246f gth ..... $o │ │ │ │ +00013b30: 735d 293b 0a20 2020 2024 6f75 7420 3d20 s]);. $out = │ │ │ │ +00013b40: 2475 6e61 6d65 2d3e 6765 7453 5444 4552 $uname->getSTDER │ │ │ │ +00013b50: 5228 293b 0a20 2020 2024 7072 4c6f 672d R();. $prLog- │ │ │ │ +00013b60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00013b70: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ │ +00013b80: 2720 3d3e 205b 2253 5444 4552 5220 6f66 ' => ["STDERR of │ │ │ │ +00013b90: 203c 756e 616d 653e 3a22 2c20 4024 6f75 :", @$ou │ │ │ │ +00013ba0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out > │ │ │ │ +00013bb0: 2030 293b 0a0a 2020 2020 2320 6368 6563 0);.. # chec │ │ │ │ +00013bc0: 6b20 6966 2065 7874 6572 6e61 6c20 7072 k if external pr │ │ │ │ +00013bd0: 6f67 7261 6d73 2065 7869 7374 2069 6e20 ograms exist in │ │ │ │ +00013be0: 7061 7468 0a20 2020 206d 7920 2840 6d69 path. my (@mi │ │ │ │ +00013bf0: 7373 696e 6729 203d 0a09 263a 3a63 6865 ssing) =..&::che │ │ │ │ +00013c00: 636b 5072 6f67 4578 6973 7473 2824 7072 ckProgExists($pr │ │ │ │ +00013c10: 4c6f 672c 2027 6d64 3573 756d 272c 2027 Log, 'md5sum', ' │ │ │ │ +00013c20: 6370 272c 2027 627a 6970 3227 2c20 276d cp', 'bzip2', 'm │ │ │ │ +00013c30: 6b6e 6f64 272c 0a09 0909 2020 2027 6d6f knod',.... 'mo │ │ │ │ +00013c40: 756e 7427 2c20 2463 6f6d 7072 6573 735b unt', $compress[ │ │ │ │ +00013c50: 305d 2c20 2475 6e63 6f6d 7072 6573 735b 0], $uncompress[ │ │ │ │ +00013c60: 305d 293b 0a20 2020 2069 6620 2840 6d69 0]);. if (@mi │ │ │ │ +00013c70: 7373 696e 6729 0a20 2020 207b 0a09 2470 ssing). {..$p │ │ │ │ +00013c80: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00013c90: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ │ +00013ca0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00013cb0: 7468 6520 666f 6c6c 6f77 696e 6720 7072 the following pr │ │ │ │ +00013cc0: 6f67 7261 6d73 2061 7265 206e 6f74 2069 ograms are not i │ │ │ │ +00013cd0: 6e20 5c24 5041 5448 3a22 2c0a 0909 0909 n \$PATH:",..... │ │ │ │ +00013ce0: 2022 5c74 406d 6973 7369 6e67 222c 0a09 "\t@missing",.. │ │ │ │ +00013cf0: 0909 0920 2270 6c65 6173 6520 696e 7374 ... "please inst │ │ │ │ +00013d00: 616c 6c20 6f72 2063 6865 636b 205c 2450 all or check \$P │ │ │ │ +00013d10: 4154 4822 2c0a 0909 0909 2022 5c24 5041 ATH",..... "\$PA │ │ │ │ +00013d20: 5448 2069 7320 2220 2e20 2445 4e56 7b27 TH is " . $ENV{' │ │ │ │ +00013d30: 5041 5448 277d 5d2c 0a09 0920 2020 2020 PATH'}],... │ │ │ │ +00013d40: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);. │ │ │ │ +00013d50: 2020 2020 7d0a 7d0a 0a0a 2470 724c 6f67 }.}...$prLog │ │ │ │ +00013d60: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00013d70: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. ' │ │ │ │ +00013d80: 2d73 7472 2720 3d3e 205b 2270 7265 7365 -str' => ["prese │ │ │ │ +00013d90: 7276 6520 5065 726d 7320 6973 206e 6f74 rve Perms is not │ │ │ │ +00013da0: 2073 6574 225d 290a 2020 2020 6966 2024 set"]). if $ │ │ │ │ +00013db0: 7072 6573 6572 7665 5065 726d 7320 6571 preservePerms eq │ │ │ │ +00013dc0: 2027 6e6f 273b 0a24 7072 4c6f 672d 3e70 'no';.$prLog->p │ │ │ │ +00013dd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00013de0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ │ +00013df0: 7227 203d 3e20 5b22 736f 7572 6365 2064 r' => ["source d │ │ │ │ +00013e00: 6972 6563 746f 7279 203c 2473 6f75 7263 irectory <$sourc │ │ │ │ +00013e10: 6544 6972 3e20 646f 6573 206e 6f74 2065 eDir> does not e │ │ │ │ +00013e20: 7869 7374 225d 2c0a 0920 2020 2020 2027 xist"],.. ' │ │ │ │ +00013e30: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ │ +00013e40: 2075 6e6c 6573 7320 282d 6420 2473 6f75 unless (-d $sou │ │ │ │ +00013e50: 7263 6544 6972 293b 0a24 7072 4c6f 672d rceDir);.$prLog- │ │ │ │ +00013e60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00013e70: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '- │ │ │ │ +00013e80: 7374 7227 203d 3e20 5b22 7461 7267 6574 str' => ["target │ │ │ │ +00013e90: 2064 6972 6563 746f 7279 203c 2474 6172 directory <$tar │ │ │ │ +00013ea0: 6765 7444 6972 3e20 646f 6573 206e 6f74 getDir> does not │ │ │ │ +00013eb0: 2065 7869 7374 225d 2c0a 0920 2020 2020 exist"],.. │ │ │ │ +00013ec0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). │ │ │ │ +00013ed0: 2020 2075 6e6c 6573 7320 282d 6420 2474 unless (-d $t │ │ │ │ +00013ee0: 6172 6765 7444 6972 293b 0a0a 0a23 0a23 argetDir);...#.# │ │ │ │ +00013ef0: 2069 6e69 7469 616c 6973 6520 696e 636c initialise incl │ │ │ │ +00013f00: 7564 652c 2065 7863 6c75 6465 2061 6e64 ude, exclude and │ │ │ │ +00013f10: 2063 6865 636b 426c 6f63 6b73 2072 756c checkBlocks rul │ │ │ │ +00013f20: 6573 0a23 0a6d 7920 2465 7863 5275 6c65 es.#.my $excRule │ │ │ │ +00013f30: 203d 2065 7661 6c49 6e6f 6465 5275 6c65 = evalInodeRule │ │ │ │ +00013f40: 2d3e 6e65 7728 272d 6c69 6e65 2720 3d3e ->new('-line' => │ │ │ │ +00013f50: 2024 6578 6365 7074 5275 6c65 2c0a 0909 $exceptRule,... │ │ │ │ +00013f60: 0909 2027 2d6b 6579 4e61 6d65 2720 3d3e .. '-keyName' => │ │ │ │ +00013f70: 2027 6578 6365 7074 5275 6c65 272c 0a09 'exceptRule',.. │ │ │ │ +00013f80: 0909 0920 272d 6465 6275 6727 203d 3e20 ... '-debug' => │ │ │ │ +00013f90: 2464 6562 7567 2c0a 0909 0909 2027 2d74 $debug,..... '-t │ │ │ │ +00013fa0: 6d70 6469 7227 203d 3e20 2474 6d70 6469 mpdir' => $tmpdi │ │ │ │ +00013fb0: 722c 0a09 0909 0920 272d 7072 4c6f 6727 r,..... '-prLog' │ │ │ │ +00013fc0: 203d 3e20 2470 724c 6f67 293b 0a6d 7920 => $prLog);.my │ │ │ │ +00013fd0: 2469 6e63 5275 6c65 203d 2065 7661 6c49 $incRule = evalI │ │ │ │ +00013fe0: 6e6f 6465 5275 6c65 2d3e 6e65 7728 272d nodeRule->new('- │ │ │ │ +00013ff0: 6c69 6e65 2720 3d3e 2024 696e 636c 7564 line' => $includ │ │ │ │ +00014000: 6552 756c 652c 0a09 0909 0920 272d 6b65 eRule,..... '-ke │ │ │ │ +00014010: 794e 616d 6527 203d 3e20 2769 6e63 6c75 yName' => 'inclu │ │ │ │ +00014020: 6465 5275 6c65 272c 0a09 0909 0920 272d deRule',..... '- │ │ │ │ +00014030: 6465 6275 6727 203d 3e20 2464 6562 7567 debug' => $debug │ │ │ │ +00014040: 2c0a 0909 0909 2027 2d74 6d70 6469 7227 ,..... '-tmpdir' │ │ │ │ +00014050: 203d 3e20 2474 6d70 6469 722c 0a09 0909 => $tmpdir,.... │ │ │ │ +00014060: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p │ │ │ │ +00014070: 724c 6f67 293b 0a0a 6966 2028 2463 6f6d rLog);..if ($com │ │ │ │ +00014080: 7072 5275 6c65 290a 7b0a 2020 2020 2463 prRule).{. $c │ │ │ │ +00014090: 6f6d 7072 5275 6c65 203d 2065 7661 6c49 omprRule = evalI │ │ │ │ +000140a0: 6e6f 6465 5275 6c65 2d3e 6e65 7728 272d nodeRule->new('- │ │ │ │ +000140b0: 6c69 6e65 2720 3d3e 2024 636f 6d70 7252 line' => $comprR │ │ │ │ +000140c0: 756c 652c 0a09 0909 0920 2020 2020 2020 ule,..... │ │ │ │ +000140d0: 272d 6b65 794e 616d 6527 203d 3e20 2763 '-keyName' => 'c │ │ │ │ +000140e0: 6f6d 7072 5275 6c65 272c 0a09 0909 0920 omprRule',..... │ │ │ │ +000140f0: 2020 2020 2020 272d 6465 6275 6727 203d '-debug' = │ │ │ │ +00014100: 3e20 2464 6562 7567 2c0a 0909 0909 2020 > $debug,..... │ │ │ │ +00014110: 2020 2020 2027 2d74 6d70 6469 7227 203d '-tmpdir' = │ │ │ │ +00014120: 3e20 2474 6d70 6469 722c 0a09 0909 0920 > $tmpdir,..... │ │ │ │ +00014130: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ │ +00014140: 3e20 2470 724c 6f67 293b 2020 0a7d 0a65 > $prLog); .}.e │ │ │ │ +00014150: 6c73 650a 7b0a 2020 2020 6d79 2040 7220 lse.{. my @r │ │ │ │ +00014160: 3d20 2829 3b0a 0a20 2020 2070 7573 6820 = ();.. push │ │ │ │ +00014170: 4072 2c20 225c 2473 697a 6520 3e20 246d @r, "\$size > $m │ │ │ │ +00014180: 696e 436f 6d70 7265 7373 5369 7a65 2061 inCompressSize a │ │ │ │ +00014190: 6e64 2220 6966 2024 6d69 6e43 6f6d 7072 nd" if $minCompr │ │ │ │ +000141a0: 6573 7353 697a 6520 3e20 303b 0a0a 2020 essSize > 0;.. │ │ │ │ +000141b0: 2020 6d79 2024 6578 6365 7074 5375 6666 my $exceptSuff │ │ │ │ +000141c0: 6978 5061 7474 6572 6e20 3d0a 096a 6f69 ixPattern =..joi │ │ │ │ +000141d0: 6e28 275c 5a7c 272c 2040 6578 6365 7074 n('\Z|', @except │ │ │ │ +000141e0: 5375 6666 6978 2920 2e20 275c 5a27 3b0a Suffix) . '\Z';. │ │ │ │ +000141f0: 0a20 2020 2070 7573 6820 4072 2c20 226e . push @r, "n │ │ │ │ +00014200: 6f74 205c 2466 696c 6520 3d7e 202f 2465 ot \$file =~ /$e │ │ │ │ +00014210: 7863 6570 7453 7566 6669 7850 6174 7465 xceptSuffixPatte │ │ │ │ +00014220: 726e 2f69 2220 6966 2040 6578 6365 7074 rn/i" if @except │ │ │ │ +00014230: 5375 6666 6978 3b0a 0a20 2020 2069 6620 Suffix;.. if │ │ │ │ +00014240: 2824 636f 6d70 7265 7373 5375 6666 6978 ($compressSuffix │ │ │ │ +00014250: 290a 2020 2020 7b0a 0970 7573 6820 4072 ). {..push @r │ │ │ │ +00014260: 2c20 2761 6e64 272c 2027 2827 3b0a 0a09 , 'and', '(';... │ │ │ │ +00014270: 6d79 2024 636f 6d70 7253 7566 6669 7850 my $comprSuffixP │ │ │ │ +00014280: 6174 7465 726e 203d 0a09 2020 2020 6a6f attern =.. jo │ │ │ │ +00014290: 696e 2827 5c5a 7c27 2c20 4024 636f 6d70 in('\Z|', @$comp │ │ │ │ +000142a0: 7265 7373 5375 6666 6978 2920 2e20 275c ressSuffix) . '\ │ │ │ │ +000142b0: 5a27 3b0a 0970 7573 6820 4072 2c20 225c Z';..push @r, "\ │ │ │ │ +000142c0: 2466 696c 6520 3d7e 202f 2463 6f6d 7072 $file =~ /$compr │ │ │ │ +000142d0: 5375 6666 6978 5061 7474 6572 6e2f 6922 SuffixPattern/i" │ │ │ │ +000142e0: 3b0a 0970 7573 6820 4072 2c20 276f 7227 ;..push @r, 'or' │ │ │ │ +000142f0: 3b0a 0a09 7075 7368 2040 722c 2027 263a ;...push @r, '&: │ │ │ │ +00014300: 3a43 4f4d 5052 4553 5349 4f4e 5f43 4845 :COMPRESSION_CHE │ │ │ │ +00014310: 434b 2824 6669 6c65 2927 3b0a 0a09 7075 CK($file)';...pu │ │ │ │ +00014320: 7368 2040 722c 2027 2927 3b0a 2020 2020 sh @r, ')';. │ │ │ │ +00014330: 7d0a 0a20 2020 2024 636f 6d70 7252 756c }.. $comprRul │ │ │ │ +00014340: 6520 3d20 6576 616c 496e 6f64 6552 756c e = evalInodeRul │ │ │ │ +00014350: 652d 3e6e 6577 2827 2d6c 696e 6527 203d e->new('-line' = │ │ │ │ +00014360: 3e20 5c40 722c 0a09 0909 0920 2020 2020 > \@r,..... │ │ │ │ +00014370: 2020 272d 6b65 794e 616d 6527 203d 3e20 '-keyName' => │ │ │ │ +00014380: 2763 6f6d 7072 5275 6c65 272c 0a09 0909 'comprRule',.... │ │ │ │ +00014390: 0920 2020 2020 2020 272d 6465 6275 6727 . '-debug' │ │ │ │ +000143a0: 203d 3e20 2464 6562 7567 2c0a 0909 0909 => $debug,..... │ │ │ │ +000143b0: 2020 2020 2020 2027 2d74 6d70 6469 7227 '-tmpdir' │ │ │ │ +000143c0: 203d 3e20 2474 6d70 6469 722c 0a09 0909 => $tmpdir,.... │ │ │ │ +000143d0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog' │ │ │ │ +000143e0: 203d 3e20 2470 724c 6f67 293b 0a7d 0a24 => $prLog);.}.$ │ │ │ │ +000143f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00014400: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. │ │ │ │ +00014410: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00014420: 636f 6d70 7252 756c 6520 3d20 2220 2e0a comprRule = " .. │ │ │ │ +00014430: 0909 0920 2463 6f6d 7072 5275 6c65 2d3e ... $comprRule-> │ │ │ │ +00014440: 6765 744c 696e 6553 7472 696e 6728 295d getLineString()] │ │ │ │ +00014450: 290a 2020 2020 6966 2024 636f 6d70 7252 ). if $comprR │ │ │ │ +00014460: 756c 652d 3e68 6173 4c69 6e65 2829 3b0a ule->hasLine();. │ │ │ │ +00014470: 6d79 2024 6368 6252 756c 6520 3d20 6576 my $chbRule = ev │ │ │ │ +00014480: 616c 496e 6f64 6552 756c 654d 756c 7469 alInodeRuleMulti │ │ │ │ +00014490: 706c 652d 3e6e 6577 2827 2d6c 696e 6573 ple->new('-lines │ │ │ │ +000144a0: 2720 3d3e 205c 4063 6865 636b 426c 6f63 ' => \@checkBloc │ │ │ │ +000144b0: 6b73 5275 6c65 2c0a 0909 0909 0920 272d ksRule,...... '- │ │ │ │ +000144c0: 626c 6f63 6b53 697a 6527 203d 3e20 5c40 blockSize' => \@ │ │ │ │ +000144d0: 6368 6563 6b42 6c6f 636b 7342 532c 0a09 checkBlocksBS,.. │ │ │ │ +000144e0: 0909 0909 2027 2d62 6c6f 636b 436f 6d70 .... '-blockComp │ │ │ │ +000144f0: 7265 7373 2720 3d3e 205c 4063 6865 636b ress' => \@check │ │ │ │ +00014500: 426c 6f63 6b73 436f 6d70 722c 0a09 0909 BlocksCompr,.... │ │ │ │ +00014510: 0909 2027 2d62 6c6f 636b 5265 6164 2720 .. '-blockRead' │ │ │ │ +00014520: 3d3e 205c 4063 6865 636b 426c 6f63 6b73 => \@checkBlocks │ │ │ │ +00014530: 5265 6164 2c0a 0909 0909 0920 272d 626c Read,...... '-bl │ │ │ │ +00014540: 6f63 6b50 6172 616c 6c65 6c27 203d 3e0a ockParallel' =>. │ │ │ │ +00014550: 0909 0909 0920 5c40 6368 6563 6b42 6c6f ..... \@checkBlo │ │ │ │ +00014560: 636b 7350 6172 616c 6c65 6c2c 0a09 0909 cksParallel,.... │ │ │ │ +00014570: 0909 2027 2d6b 6579 4e61 6d65 2720 3d3e .. '-keyName' => │ │ │ │ +00014580: 2027 6368 6563 6b42 6c6f 636b 7352 756c 'checkBlocksRul │ │ │ │ +00014590: 6527 2c0a 0909 0909 0920 272d 6465 6275 e',...... '-debu │ │ │ │ +000145a0: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,... │ │ │ │ +000145b0: 0909 0920 272d 746d 7064 6972 2720 3d3e ... '-tmpdir' => │ │ │ │ +000145c0: 2024 746d 7064 6972 2c0a 0909 0909 0920 $tmpdir,...... │ │ │ │ +000145d0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +000145e0: 6f67 293b 0a0a 0a6d 7920 2473 7461 7274 og);...my $start │ │ │ │ +000145f0: 4461 7465 203d 2064 6174 6554 6f6f 6c73 Date = dateTools │ │ │ │ +00014600: 2d3e 6e65 7728 293b 0a0a 230a 2320 6f74 ->new();..#.# ot │ │ │ │ +00014610: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries │ │ │ │ +00014620: 6572 6d69 7474 656c 6e20 756e 6420 696e ermitteln und in │ │ │ │ +00014630: 206b 6f72 7265 6b74 6572 2052 6569 6865 korrekter Reihe │ │ │ │ +00014640: 6e66 6f6c 6765 2073 6f72 7469 6572 656e nfolge sortieren │ │ │ │ +00014650: 0a23 2028 6e65 7565 7374 6520 7a75 6c65 .# (neueste zule │ │ │ │ +00014660: 747a 7429 2e20 4461 7320 6973 7420 7769 tzt). Das ist wi │ │ │ │ +00014670: 6368 7469 672c 2064 616d 6974 2063 7469 chtig, damit cti │ │ │ │ +00014680: 6d65 2065 7463 2e20 6569 6e65 7220 7a75 me etc. einer zu │ │ │ │ +00014690: 0a23 2073 6963 6865 726e 6465 6e20 4461 .# sichernden Da │ │ │ │ +000146a0: 7465 6920 6175 6368 2064 656e 206e 6575 tei auch den neu │ │ │ │ +000146b0: 6573 7465 6e20 6172 6368 6976 6965 7274 esten archiviert │ │ │ │ +000146c0: 656e 2044 6174 656e 2076 6572 676c 6963 en Daten verglic │ │ │ │ +000146d0: 6865 6e0a 2320 7769 7264 2e0a 230a 0a23 hen.# wird..#..# │ │ │ │ +000146e0: 2063 6f6e 7369 6465 7220 6c61 7374 206f consider last o │ │ │ │ +000146f0: 6620 6261 636b 7570 206f 6620 616c 6c20 f backup of all │ │ │ │ +00014700: 7365 7269 6573 2069 6620 6e6f 7420 7370 series if not sp │ │ │ │ +00014710: 6563 6966 6965 640a 6966 2028 406f 7468 ecified.if (@oth │ │ │ │ +00014720: 6572 4261 636b 7570 5365 7269 6573 203d erBackupSeries = │ │ │ │ +00014730: 3d20 3029 0a7b 0a20 2020 206d 7920 2464 = 0).{. my $d │ │ │ │ +00014740: 3b0a 2020 2020 666f 7265 6163 6820 2464 ;. foreach $d │ │ │ │ +00014750: 2028 263a 3a72 6561 6441 6c6c 4261 636b (&::readAllBack │ │ │ │ +00014760: 7570 5365 7269 6573 2824 6261 636b 7570 upSeries($backup │ │ │ │ +00014770: 4469 722c 2024 7072 4c6f 6729 290a 2020 Dir, $prLog)). │ │ │ │ +00014780: 2020 7b0a 0970 7573 6820 406f 7468 6572 {..push @other │ │ │ │ +00014790: 4261 636b 7570 5365 7269 6573 2c20 2230 BackupSeries, "0 │ │ │ │ +000147a0: 3a24 6422 3b0a 2020 2020 7d0a 7d0a 0a6d :$d";. }.}..m │ │ │ │ +000147b0: 7920 2470 7265 7642 6163 6b75 704f 776e y $prevBackupOwn │ │ │ │ +000147c0: 5365 7269 6573 203d 2075 6e64 6566 3b0a Series = undef;. │ │ │ │ +000147d0: 6966 2028 406f 7468 6572 4261 636b 7570 if (@otherBackup │ │ │ │ +000147e0: 5365 7269 6573 203e 2030 290a 7b0a 2020 Series > 0).{. │ │ │ │ +000147f0: 2020 7075 7368 2040 6f74 6865 7242 6163 push @otherBac │ │ │ │ +00014800: 6b75 7053 6572 6965 732c 2022 303a 2474 kupSeries, "0:$t │ │ │ │ +00014810: 6172 6765 7444 6972 223b 0a20 2020 206d argetDir";. m │ │ │ │ +00014820: 7920 2840 6f62 642c 2024 6429 3b0a 0a20 y (@obd, $d);.. │ │ │ │ +00014830: 2020 2023 2056 6572 7a65 6963 686e 6973 # Verzeichnis │ │ │ │ +00014840: 7365 2065 726d 6974 7465 6c6e 0a20 2020 se ermitteln. │ │ │ │ +00014850: 2066 6f72 6561 6368 2024 6420 2840 6f74 foreach $d (@ot │ │ │ │ +00014860: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries) │ │ │ │ +00014870: 0a20 2020 207b 0a09 6966 2028 2464 203d . {..if ($d = │ │ │ │ +00014880: 7e20 2f5c 4128 616c 6c7c 5c64 2b7c 5c64 ~ /\A(all|\d+|\d │ │ │ │ +00014890: 2b2d 5c64 2b29 3a28 2e2a 292f 290a 097b +-\d+):(.*)/)..{ │ │ │ │ +000148a0: 0a09 2020 2020 6d79 2024 6469 7220 3d20 .. my $dir = │ │ │ │ +000148b0: 2432 3b0a 2020 2020 2020 2020 2020 2020 $2;. │ │ │ │ +000148c0: 6d79 2024 7768 6174 203d 2024 313b 0a09 my $what = $1;.. │ │ │ │ +000148d0: 2020 2020 2464 6972 203d 2022 2462 6163 $dir = "$bac │ │ │ │ +000148e0: 6b75 7044 6972 2f24 6469 7222 2075 6e6c kupDir/$dir" unl │ │ │ │ +000148f0: 6573 7320 2464 6972 203d 7e20 2f5c 415c ess $dir =~ /\A\ │ │ │ │ +00014900: 2f2f 3b0a 0920 2020 206d 7920 2461 7362 //;.. my $asb │ │ │ │ +00014910: 6420 3d0a 0909 616c 6c53 746f 7265 4261 d =...allStoreBa │ │ │ │ +00014920: 636b 7570 5365 7269 6573 2d3e 6e65 7728 ckupSeries->new( │ │ │ │ +00014930: 272d 726f 6f74 4469 7227 203d 3e20 2464 '-rootDir' => $d │ │ │ │ +00014940: 6972 2c0a 0909 0909 0927 2d63 6865 636b ir,......'-check │ │ │ │ +00014950: 5375 6d46 696c 6527 203d 3e20 2463 6865 SumFile' => $che │ │ │ │ +00014960: 636b 5375 6d46 696c 652c 0a09 0909 0909 ckSumFile,...... │ │ │ │ +00014970: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +00014980: 6f67 2c0a 0909 0909 0927 2d61 6273 5061 og,......'-absPa │ │ │ │ +00014990: 7468 2720 3d3e 2030 293b 0a20 2020 2020 th' => 0);. │ │ │ │ +000149a0: 2020 2020 2020 206d 7920 2840 6429 203d my (@d) = │ │ │ │ +000149b0: 2073 6f72 7420 7b20 2462 2063 6d70 2024 sort { $b cmp $ │ │ │ │ +000149c0: 6120 7d0a 0920 2020 2024 6173 6264 2d3e a }.. $asbd-> │ │ │ │ +000149d0: 6765 7441 6c6c 4669 6e69 7368 6564 5769 getAllFinishedWi │ │ │ │ +000149e0: 7468 6f75 7441 6374 4261 636b 7570 4469 thoutActBackupDi │ │ │ │ +000149f0: 7228 293b 0a09 2020 2020 2020 2320 6669 r();.. # fi │ │ │ │ +00014a00: 6c74 6572 2077 616e 7465 6420 6469 7273 lter wanted dirs │ │ │ │ +00014a10: 2061 6e64 2067 656e 6572 6174 6520 6162 and generate ab │ │ │ │ +00014a20: 736f 6c75 7465 2070 6174 680a 2020 2020 solute path. │ │ │ │ +00014a30: 2020 2020 2020 2020 6966 2028 2477 6861 if ($wha │ │ │ │ +00014a40: 7420 6571 2022 616c 6c22 290a 0920 2020 t eq "all").. │ │ │ │ +00014a50: 207b 0a20 2020 2020 2020 2020 2020 2020 {. │ │ │ │ +00014a60: 2020 2066 6f72 6561 6368 206d 7920 2478 foreach my $x │ │ │ │ +00014a70: 2028 4064 290a 0909 7b0a 2020 2020 2020 (@d)...{. │ │ │ │ +00014a80: 2020 2020 2020 2020 2020 2020 2020 7075 pu │ │ │ │ +00014a90: 7368 2040 6f62 642c 205b 2464 6972 2c20 sh @obd, [$dir, │ │ │ │ +00014aa0: 2478 5d3b 0a20 2020 2020 2020 2020 2020 $x];. │ │ │ │ +00014ab0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ │ +00014ac0: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ │ +00014ad0: 2065 6c73 650a 0920 2020 207b 0a20 2020 else.. {. │ │ │ │ +00014ae0: 2020 2020 2020 2020 2020 2020 206d 7920 my │ │ │ │ +00014af0: 2824 6672 6f6d 2c20 2474 6f29 3b0a 2020 ($from, $to);. │ │ │ │ +00014b00: 2020 2020 2020 2020 2020 2020 2020 6966 if │ │ │ │ +00014b10: 2028 2477 6861 7420 3d7e 202f 5e28 5c64 ($what =~ /^(\d │ │ │ │ +00014b20: 2b29 242f 290a 0909 7b0a 2020 2020 2020 +)$/)...{. │ │ │ │ +00014b30: 2020 2020 2020 2020 2020 2020 2020 2466 $f │ │ │ │ +00014b40: 726f 6d20 3d20 2474 6f20 3d20 2431 3b0a rom = $to = $1;. │ │ │ │ +00014b50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00014b60: 7d0a 2020 2020 2020 2020 2020 2020 2020 }. │ │ │ │ +00014b70: 2020 656c 7369 6620 2824 7768 6174 203d elsif ($what = │ │ │ │ +00014b80: 7e20 2f5e 285c 642b 292d 285c 642b 2924 ~ /^(\d+)-(\d+)$ │ │ │ │ +00014b90: 2f29 0a09 097b 0a20 2020 2020 2020 2020 /)...{. │ │ │ │ +00014ba0: 2020 2020 2020 2020 2020 2024 6672 6f6d $from │ │ │ │ +00014bb0: 203d 2024 313b 0a20 2020 2020 2020 2020 = $1;. │ │ │ │ +00014bc0: 2020 2020 2020 2020 2020 2024 746f 203d $to = │ │ │ │ +00014bd0: 2024 323b 0a20 2020 2020 2020 2020 2020 $2;. │ │ │ │ +00014be0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ │ +00014bf0: 2020 2020 2020 2066 6f72 6561 6368 206d foreach m │ │ │ │ +00014c00: 7920 2469 2028 2466 726f 6d20 2e2e 2024 y $i ($from .. $ │ │ │ │ +00014c10: 746f 290a 0909 7b0a 2020 2020 2020 2020 to)...{. │ │ │ │ +00014c20: 2020 2020 2020 2020 2020 2020 6966 2028 if ( │ │ │ │ +00014c30: 6578 6973 7473 2024 645b 2469 5d29 0a09 exists $d[$i]).. │ │ │ │ +00014c40: 0920 2020 207b 0a20 2020 2020 2020 2020 . {. │ │ │ │ +00014c50: 2020 2020 2020 2020 2020 2020 2020 2070 p │ │ │ │ +00014c60: 7573 6820 406f 6264 2c20 5b24 6469 722c ush @obd, [$dir, │ │ │ │ +00014c70: 2024 645b 2469 5d5d 3b0a 2020 2020 2020 $d[$i]];. │ │ │ │ +00014c80: 2020 2020 2020 2020 2020 2020 2020 7d0a }. │ │ │ │ +00014c90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00014ca0: 7d0a 2020 2020 2020 2020 2020 2020 7d0a }. }. │ │ │ │ +00014cb0: 2020 2020 2020 2020 7d0a 2020 2020 2020 }. │ │ │ │ +00014cc0: 2020 656c 7365 0a09 7b0a 2020 2020 2020 else..{. │ │ │ │ +00014cd0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ │ +00014ce0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00014cf0: 4527 2c0a 2020 2020 2020 2020 2020 2020 E',. │ │ │ │ +00014d00: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +00014d10: 7374 7227 203d 3e20 5b22 696e 7661 6c69 str' => ["invali │ │ │ │ +00014d20: 6420 7261 6e67 6520 696e 2070 6172 616d d range in param │ │ │ │ +00014d30: 203c 2464 3e2c 2065 7869 7469 6e67 225d <$d>, exiting"] │ │ │ │ +00014d40: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +00014d50: 2020 2020 2020 2020 2020 2020 272d 6578 '-ex │ │ │ │ +00014d60: 6974 2720 3d3e 2031 293b 0a20 2020 2020 it' => 1);. │ │ │ │ +00014d70: 2020 207d 0a20 2020 207d 0a0a 2020 2020 }. }.. │ │ │ │ +00014d80: 2320 736f 7274 206e 6577 6573 7420 6261 # sort newest ba │ │ │ │ +00014d90: 636b 7570 2066 6972 7374 0a20 2020 2028 ckup first. ( │ │ │ │ +00014da0: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri │ │ │ │ +00014db0: 6573 2920 3d20 2829 3b0a 2020 2020 6d79 es) = ();. my │ │ │ │ +00014dc0: 2028 256f 7468 6572 4261 636b 7570 5365 (%otherBackupSe │ │ │ │ +00014dd0: 7269 6573 2920 3d20 2829 3b0a 2020 2020 ries) = ();. │ │ │ │ +00014de0: 666f 7265 6163 6820 2464 2028 736f 7274 foreach $d (sort │ │ │ │ +00014df0: 207b 2024 622d 3e5b 315d 2063 6d70 2024 { $b->[1] cmp $ │ │ │ │ +00014e00: 612d 3e5b 315d 207d 2040 6f62 6429 0a20 a->[1] } @obd). │ │ │ │ +00014e10: 2020 207b 0a09 6d79 2024 6264 203d 2024 {..my $bd = $ │ │ │ │ +00014e20: 642d 3e5b 305d 202e 2022 2f22 202e 2024 d->[0] . "/" . $ │ │ │ │ +00014e30: 642d 3e5b 315d 3b0a 0924 6264 203d 7e20 d->[1];..$bd =~ │ │ │ │ +00014e40: 732f 5c2f 2b2f 5c2f 2f67 3b0a 0969 6620 s/\/+/\//g;..if │ │ │ │ +00014e50: 282d 6420 2462 6420 616e 6420 6e6f 7420 (-d $bd and not │ │ │ │ +00014e60: 6578 6973 7473 2024 6f74 6865 7242 6163 exists $otherBac │ │ │ │ +00014e70: 6b75 7053 6572 6965 737b 2462 647d 290a kupSeries{$bd}). │ │ │ │ +00014e80: 097b 0a09 2020 2020 246f 7468 6572 4261 .{.. $otherBa │ │ │ │ +00014e90: 636b 7570 5365 7269 6573 7b24 6264 7d20 ckupSeries{$bd} │ │ │ │ +00014ea0: 3d20 313b 2020 2023 2064 6f20 6e6f 7420 = 1; # do not │ │ │ │ +00014eb0: 616c 6c6f 7720 646f 7562 6c65 2065 6e74 allow double ent │ │ │ │ +00014ec0: 7269 6573 0a09 2020 2020 7075 7368 2040 ries.. push @ │ │ │ │ +00014ed0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ │ +00014ee0: 732c 2024 6264 3b0a 097d 0a20 2020 207d s, $bd;..}. } │ │ │ │ +00014ef0: 0a0a 2020 2020 2320 6669 6e64 2074 6865 .. # find the │ │ │ │ +00014f00: 2070 7265 7669 6f75 7320 656e 7472 7920 previous entry │ │ │ │ +00014f10: 6672 6f6d 2074 6865 2061 6374 7561 6c20 from the actual │ │ │ │ +00014f20: 6261 636b 7570 2073 6572 6965 730a 2020 backup series. │ │ │ │ +00014f30: 2020 2320 616e 6420 7365 7420 6974 2074 # and set it t │ │ │ │ +00014f40: 6f20 7468 6520 6265 6769 6e6e 696e 672c o the beginning, │ │ │ │ +00014f50: 2073 6f20 6974 2077 696c 6c20 6265 2070 so it will be p │ │ │ │ +00014f60: 7265 6665 7265 6420 666f 7220 6c69 6e6b refered for link │ │ │ │ +00014f70: 696e 670a 2020 2020 2320 7468 6572 6566 ing. # theref │ │ │ │ +00014f80: 6f72 6520 7765 206d 696e 696d 697a 6520 ore we minimize │ │ │ │ +00014f90: 7468 6520 6e75 6d62 6572 206f 6620 6d64 the number of md │ │ │ │ +00014fa0: 3520 7375 6d73 2074 6f20 6361 6c63 756c 5 sums to calcul │ │ │ │ +00014fb0: 6174 650a 2370 7269 6e74 2022 3120 6f74 ate.#print "1 ot │ │ │ │ +00014fc0: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries │ │ │ │ +00014fd0: 3d20 5c6e 5c74 3c22 2c20 6a6f 696e 2822 = \n\t<", join(" │ │ │ │ +00014fe0: 3e5c 6e5c 743c 222c 2040 6f74 6865 7242 >\n\t<", @otherB │ │ │ │ +00014ff0: 6163 6b75 7053 6572 6965 7329 2c20 223e ackupSeries), "> │ │ │ │ +00015000: 5c6e 223b 0a20 2020 2028 406f 6264 2920 \n";. (@obd) │ │ │ │ +00015010: 3d20 2829 3b0a 2020 2020 666f 7265 6163 = ();. foreac │ │ │ │ +00015020: 6820 2464 2028 406f 7468 6572 4261 636b h $d (@otherBack │ │ │ │ +00015030: 7570 5365 7269 6573 290a 2020 2020 7b0a upSeries). {. │ │ │ │ +00015040: 0924 6420 3d7e 206d 235c 4128 2e2a 292f .$d =~ m#\A(.*)/ │ │ │ │ +00015050: 233b 0a09 6966 2028 2431 2020 6571 2024 #;..if ($1 eq $ │ │ │ │ +00015060: 7461 7267 6574 4469 720a 0920 2020 2061 targetDir.. a │ │ │ │ +00015070: 6e64 206e 6f74 2024 7072 6576 4261 636b nd not $prevBack │ │ │ │ +00015080: 7570 4f77 6e53 6572 6965 7329 0a09 7b0a upOwnSeries)..{. │ │ │ │ +00015090: 0920 2020 2024 7072 6576 4261 636b 7570 . $prevBackup │ │ │ │ +000150a0: 4f77 6e53 6572 6965 7320 3d20 2464 3b0a OwnSeries = $d;. │ │ │ │ +000150b0: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. │ │ │ │ +000150c0: 2070 7573 6820 406f 6264 2c20 2464 3b0a push @obd, $d;. │ │ │ │ +000150d0: 097d 0a20 2020 207d 0a20 2020 2028 406f .}. }. (@o │ │ │ │ +000150e0: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries │ │ │ │ +000150f0: 2920 3d20 2824 7072 6576 4261 636b 7570 ) = ($prevBackup │ │ │ │ +00015100: 4f77 6e53 6572 6965 732c 2040 6f62 6429 OwnSeries, @obd) │ │ │ │ +00015110: 2069 6620 2470 7265 7642 6163 6b75 704f if $prevBackupO │ │ │ │ +00015120: 776e 5365 7269 6573 3b0a 7d0a 2370 7269 wnSeries;.}.#pri │ │ │ │ +00015130: 6e74 2022 3220 6f74 6865 7242 6163 6b75 nt "2 otherBacku │ │ │ │ +00015140: 7053 6572 6965 7320 3d20 5c6e 5c74 3c22 pSeries = \n\t<" │ │ │ │ +00015150: 2c20 6a6f 696e 2822 3e5c 6e5c 743c 222c , join(">\n\t<", │ │ │ │ +00015160: 2040 6f74 6865 7242 6163 6b75 7053 6572 @otherBackupSer │ │ │ │ +00015170: 6965 7329 2c20 223e 5c6e 223b 0a0a 0a69 ies), ">\n";...i │ │ │ │ +00015180: 6620 2824 7665 7262 6f73 6520 616e 6420 f ($verbose and │ │ │ │ +00015190: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri │ │ │ │ +000151a0: 6573 290a 7b0a 2020 2020 6d79 2028 406f es).{. my (@o │ │ │ │ +000151b0: 6264 2920 3d20 2829 3b0a 2020 2020 6d79 bd) = ();. my │ │ │ │ +000151c0: 2024 6f3b 0a20 2020 2066 6f72 6561 6368 $o;. foreach │ │ │ │ +000151d0: 2024 6f20 2840 6f74 6865 7242 6163 6b75 $o (@otherBacku │ │ │ │ +000151e0: 7053 6572 6965 7329 0a20 2020 207b 0a09 pSeries). {.. │ │ │ │ +000151f0: 7075 7368 2040 6f62 642c 2022 2020 2024 push @obd, " $ │ │ │ │ +00015200: 6f22 3b0a 2020 2020 7d0a 2020 2020 2470 o";. }. $p │ │ │ │ +00015210: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00015220: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... │ │ │ │ +00015230: 272d 7374 7227 203d 3e20 5b22 6f74 6865 '-str' => ["othe │ │ │ │ +00015240: 7242 6163 6b75 7053 6572 6965 7320 3d22 rBackupSeries =" │ │ │ │ +00015250: 2c20 406f 6264 5d29 3b0a 7d0a 0a23 7072 , @obd]);.}..#pr │ │ │ │ +00015260: 696e 7420 2231 206f 7468 6572 4261 636b int "1 otherBack │ │ │ │ +00015270: 7570 7344 6972 7320 3d20 406f 7468 6572 upsDirs = @other │ │ │ │ +00015280: 4261 636b 7570 5365 7269 6573 5c6e 223b BackupSeries\n"; │ │ │ │ +00015290: 0a0a 6d79 2024 616c 6c4c 696e 6b73 203d ..my $allLinks = │ │ │ │ +000152a0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new( │ │ │ │ +000152b0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac │ │ │ │ +000152c0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... │ │ │ │ +000152d0: 2020 272d 6b69 6e64 2720 3d3e 2027 7265 '-kind' => 're │ │ │ │ +000152e0: 6375 7273 6976 6553 6561 7263 6827 2c0a cursiveSearch',. │ │ │ │ +000152f0: 0909 0920 2020 2020 2027 2d76 6572 626f ... '-verbo │ │ │ │ +00015300: 7365 2720 3d3e 2024 7665 7262 6f73 652c se' => $verbose, │ │ │ │ +00015310: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +00015320: 6727 203d 3e20 2470 724c 6f67 293b 0a23 g' => $prLog);.# │ │ │ │ +00015330: 7072 696e 7420 2232 206f 7468 6572 4261 print "2 otherBa │ │ │ │ +00015340: 636b 7570 7344 6972 7320 3d20 406f 7468 ckupsDirs = @oth │ │ │ │ +00015350: 6572 4261 636b 7570 5365 7269 6573 5c6e erBackupSeries\n │ │ │ │ +00015360: 223b 0a75 6e6c 6573 7320 2824 6c61 7465 ";.unless ($late │ │ │ │ +00015370: 4c69 6e6b 7329 0a7b 0a20 2020 2023 2063 Links).{. # c │ │ │ │ +00015380: 6865 636b 2c20 6966 2064 6972 6563 746f heck, if directo │ │ │ │ +00015390: 7269 6573 2077 6974 6820 6c61 7465 4c69 ries with lateLi │ │ │ │ +000153a0: 6e6b 7320 6172 6520 7265 6665 7265 6e63 nks are referenc │ │ │ │ +000153b0: 6564 2062 7920 6f74 6865 7242 6163 6b75 ed by otherBacku │ │ │ │ +000153c0: 7053 6572 6965 730a 2020 2020 6d79 2024 pSeries. my $ │ │ │ │ +000153d0: 6f62 643b 0a20 2020 2066 6f72 6561 6368 obd;. foreach │ │ │ │ +000153e0: 2024 6f62 6420 2840 6f74 6865 7242 6163 $obd (@otherBac │ │ │ │ +000153f0: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). { │ │ │ │ +00015400: 0a23 7072 696e 7420 2263 6865 636b 696e .#print "checkin │ │ │ │ +00015410: 6720 6f74 6865 7242 6163 6b75 6b70 4469 g otherBackukpDi │ │ │ │ +00015420: 7273 3a5c 6e22 3b0a 0924 7072 4c6f 672d rs:\n";..$prLog- │ │ │ │ +00015430: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00015440: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ │ +00015450: 2d73 7472 2720 3d3e 205b 2264 6972 6563 -str' => ["direc │ │ │ │ +00015460: 746f 7279 203c 246f 6264 3e20 6861 7320 tory <$obd> has │ │ │ │ +00015470: 756e 7265 736f 6c76 6564 2022 202e 0a09 unresolved " ... │ │ │ │ +00015480: 0909 0920 226c 696e 6b73 2028 6279 2070 ... "links (by p │ │ │ │ +00015490: 6172 6d20 2d2d 6c61 7465 4c69 6e6b 7329 arm --lateLinks) │ │ │ │ +000154a0: 222c 0a09 0920 2020 2020 2020 2020 2020 ",... │ │ │ │ +000154b0: 2020 2020 2020 2273 7461 7274 203a 3a24 "start ::$ │ │ │ │ +000154c0: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat │ │ │ │ +000154d0: 6542 6163 6b75 705f 7072 6720 2220 2e0a eBackup_prg " .. │ │ │ │ +000154e0: 0909 0909 2022 746f 2073 6574 206c 696e .... "to set lin │ │ │ │ +000154f0: 6b73 222c 0a09 0920 2020 2020 2020 2020 ks",... │ │ │ │ +00015500: 2020 2020 2020 2020 226f 7220 7374 6172 "or star │ │ │ │ +00015510: 7420 7374 6f72 6542 6163 6b75 702e 706c t storeBackup.pl │ │ │ │ +00015520: 2077 6974 6820 2d2d 6c61 7465 4c69 6e6b with --lateLink │ │ │ │ +00015530: 7320 616e 6420 2220 2e0a 0909 0909 2022 s and " ...... " │ │ │ │ +00015540: 7265 736f 6c76 6520 6c61 7465 7222 5d2c resolve later"], │ │ │ │ +00015550: 0a09 0920 2020 2020 2027 2d65 7869 7427 ... '-exit' │ │ │ │ +00015560: 203d 3e20 3129 0a09 2020 2020 6966 2024 => 1).. if $ │ │ │ │ +00015570: 616c 6c4c 696e 6b73 2d3e 6368 6563 6b44 allLinks->checkD │ │ │ │ +00015580: 6972 2824 6f62 6429 3b0a 2020 2020 7d0a ir($obd);. }. │ │ │ │ +00015590: 7d0a 0a6d 7920 2461 6b74 4461 7465 203d }..my $aktDate = │ │ │ │ +000155a0: 2064 6174 6554 6f6f 6c73 2d3e 6e65 7728 dateTools->new( │ │ │ │ +000155b0: 293b 0a69 6620 2824 746f 6461 794f 7074 );.if ($todayOpt │ │ │ │ +000155c0: 290a 7b0a 2020 2020 6966 2028 2474 6f64 ).{. if ($tod │ │ │ │ +000155d0: 6179 4f70 7420 3d7e 202f 5c41 285c 647b ayOpt =~ /\A(\d{ │ │ │ │ +000155e0: 347d 295c 2e28 5c64 7b32 7d29 5c2e 285c 4})\.(\d{2})\.(\ │ │ │ │ +000155f0: 647b 327d 295f 285c 647b 327d 292e 285c d{2})_(\d{2}).(\ │ │ │ │ +00015600: 647b 327d 292e 285c 647b 327d 295c 5a2f d{2}).(\d{2})\Z/ │ │ │ │ +00015610: 290a 2020 2020 7b0a 0924 616b 7444 6174 ). {..$aktDat │ │ │ │ +00015620: 6520 3d20 6461 7465 546f 6f6c 732d 3e6e e = dateTools->n │ │ │ │ +00015630: 6577 2827 2d79 6561 7227 203d 3e20 2431 ew('-year' => $1 │ │ │ │ +00015640: 2c0a 0909 0909 2020 272d 6d6f 6e74 6827 ,..... '-month' │ │ │ │ +00015650: 203d 3e20 2432 2c0a 0909 0909 2020 272d => $2,..... '- │ │ │ │ +00015660: 6461 7927 203d 3e20 2433 2c0a 0909 0909 day' => $3,..... │ │ │ │ +00015670: 2020 272d 686f 7572 2720 3d3e 2024 342c '-hour' => $4, │ │ │ │ +00015680: 0a09 0909 0920 2027 2d6d 696e 2720 3d3e ..... '-min' => │ │ │ │ +00015690: 2024 352c 0a09 0909 0920 2027 2d73 6563 $5,..... '-sec │ │ │ │ +000156a0: 2720 3d3e 2024 3629 3b0a 0924 7072 4c6f ' => $6);..$prLo │ │ │ │ +000156b0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000156c0: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ │ +000156d0: 2027 2d73 7472 2720 3d3e 0a09 0920 2020 '-str' =>... │ │ │ │ +000156e0: 2020 205b 2224 746f 6461 794f 7074 2028 ["$todayOpt ( │ │ │ │ +000156f0: 6f70 7469 6f6e 2074 6f64 6179 2920 6973 option today) is │ │ │ │ +00015700: 206e 6f74 2061 2076 616c 6964 2064 6174 not a valid dat │ │ │ │ +00015710: 6522 5d2c 0a09 0920 2020 2020 2027 2d65 e"],... '-e │ │ │ │ +00015720: 7869 7427 203d 3e20 3129 0a09 2020 2020 xit' => 1).. │ │ │ │ +00015730: 756e 6c65 7373 2024 616b 7444 6174 652d unless $aktDate- │ │ │ │ +00015740: 3e69 7356 616c 6964 2829 3b0a 0924 7072 >isValid();..$pr │ │ │ │ +00015750: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00015760: 6427 203d 3e20 2757 272c 0a09 0920 2020 d' => 'W',... │ │ │ │ +00015770: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => ["s │ │ │ │ +00015780: 6574 7469 6e67 2074 6f64 6179 2074 6f20 etting today to │ │ │ │ +00015790: 2220 2e0a 0909 0909 2024 616b 7444 6174 " ...... $aktDat │ │ │ │ +000157a0: 652d 3e67 6574 4461 7465 5469 6d65 2829 e->getDateTime() │ │ │ │ +000157b0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el │ │ │ │ +000157c0: 7365 0a20 2020 207b 0a09 2470 724c 6f67 se. {..$prLog │ │ │ │ +000157d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000157e0: 3d3e 2027 4527 2c0a 0909 2020 2020 2020 => 'E',... │ │ │ │ +000157f0: 272d 7374 7227 203d 3e20 5b22 666f 726d '-str' => ["form │ │ │ │ +00015800: 6174 2065 7272 6f72 2061 7420 6f70 7469 at error at opti │ │ │ │ +00015810: 6f6e 2074 6f64 6179 2c20 6d75 7374 2062 on today, must b │ │ │ │ +00015820: 6522 2c0a 0909 0909 2022 2020 5959 5959 e",..... " YYYY │ │ │ │ +00015830: 2e4d 4d2e 4444 5f48 482e 4d4d 2e53 5322 .MM.DD_HH.MM.SS" │ │ │ │ +00015840: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi │ │ │ │ +00015850: 7427 203d 3e20 3129 3b0a 2020 2020 7d0a t' => 1);. }. │ │ │ │ +00015860: 7d0a 0a24 6d61 696e 3a3a 7374 6174 203d }..$main::stat = │ │ │ │ +00015870: 2053 7461 7469 7374 6963 2d3e 6e65 7728 Statistic->new( │ │ │ │ +00015880: 272d 7374 6172 7444 6174 6527 203d 3e0a '-startDate' =>. │ │ │ │ +00015890: 0909 0920 2020 2020 2470 7265 636f 6d6d ... $precomm │ │ │ │ +000158a0: 616e 6420 3f20 2473 7461 7274 4461 7465 and ? $startDate │ │ │ │ +000158b0: 203a 2075 6e64 6566 2c0a 0909 0920 2020 : undef,.... │ │ │ │ +000158c0: 2020 272d 616b 7444 6174 6527 203d 3e20 '-aktDate' => │ │ │ │ +000158d0: 2461 6b74 4461 7465 2c0a 0909 0920 2020 $aktDate,.... │ │ │ │ +000158e0: 2020 272d 7573 6572 4772 6f75 7053 7461 '-userGroupSta │ │ │ │ +000158f0: 7446 696c 6527 203d 3e20 2475 7365 7247 tFile' => $userG │ │ │ │ +00015900: 726f 7570 5374 6174 4669 6c65 2c0a 0909 roupStatFile,... │ │ │ │ +00015910: 0920 2020 2020 272d 6578 6365 7074 5375 . '-exceptSu │ │ │ │ +00015920: 6666 6978 2720 3d3e 2024 6578 6365 7074 ffix' => $except │ │ │ │ +00015930: 5375 6666 6978 2c0a 0909 0920 2020 2020 Suffix,.... │ │ │ │ +00015940: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +00015950: 6f67 2c0a 0909 0920 2020 2020 272d 7072 og,.... '-pr │ │ │ │ +00015960: 6f67 7265 7373 5265 706f 7274 2720 3d3e ogressReport' => │ │ │ │ +00015970: 2024 7072 6f67 7265 7373 5265 706f 7274 $progressReport │ │ │ │ +00015980: 2c0a 0909 0920 2020 2020 272d 7769 7468 ,.... '-with │ │ │ │ +00015990: 5573 6572 4772 6f75 7053 7461 7427 203d UserGroupStat' = │ │ │ │ +000159a0: 3e20 2477 6974 6855 7365 7247 726f 7570 > $withUserGroup │ │ │ │ +000159b0: 5374 6174 2c0a 0909 0920 2020 2020 272d Stat,.... '- │ │ │ │ +000159c0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil │ │ │ │ +000159d0: 6527 203d 3e20 2475 7365 7247 726f 7570 e' => $userGroup │ │ │ │ +000159e0: 5374 6174 4669 6c65 2c0a 0909 0920 2020 StatFile,.... │ │ │ │ +000159f0: 2020 272d 636f 6d70 7265 7373 2720 3d3e '-compress' => │ │ │ │ +00015a00: 2024 636f 6d70 7265 7373 293b 0a0a 0a23 $compress);...# │ │ │ │ +00015a10: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all │ │ │ │ +00015a20: 6578 636c 7564 6544 6972 7320 616e 6420 excludeDirs and │ │ │ │ +00015a30: 696e 636c 7564 6544 6972 7320 6172 6520 includeDirs are │ │ │ │ +00015a40: 7265 6c61 7469 7665 2050 6174 6873 0a23 relative Paths.# │ │ │ │ +00015a50: 0a7b 0a20 2020 206d 7920 2465 7272 6f72 .{. my $error │ │ │ │ +00015a60: 203d 2030 3b0a 2020 2020 6d79 2024 643b = 0;. my $d; │ │ │ │ +00015a70: 0a20 2020 2066 6f72 6561 6368 2024 6420 . foreach $d │ │ │ │ +00015a80: 2840 2465 7863 6570 7444 6972 7329 0a20 (@$exceptDirs). │ │ │ │ +00015a90: 2020 207b 0a09 6966 2028 2464 203d 7e20 {..if ($d =~ │ │ │ │ +00015aa0: 2f5c 415c 2f2f 6f29 0a09 7b0a 0920 2020 /\A\//o)..{.. │ │ │ │ +00015ab0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00015ac0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00015ad0: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ │ +00015ae0: 0920 205b 2265 7863 6570 7444 6972 203c . ["exceptDir < │ │ │ │ +00015af0: 2464 3e20 6973 206e 6f74 2061 2072 656c $d> is not a rel │ │ │ │ +00015b00: 6174 6976 6520 7061 7468 2122 5d29 3b0a ative path!"]);. │ │ │ │ +00015b10: 0920 2020 2024 6572 726f 7220 3d20 313b . $error = 1; │ │ │ │ +00015b20: 0a09 7d0a 2020 2020 7d0a 2020 2020 666f ..}. }. fo │ │ │ │ +00015b30: 7265 6163 6820 2464 2028 4024 696e 636c reach $d (@$incl │ │ │ │ +00015b40: 7564 6544 6972 7329 0a20 2020 207b 0a09 udeDirs). {.. │ │ │ │ +00015b50: 6966 2028 2464 203d 7e20 2f5c 415c 2f2f if ($d =~ /\A\// │ │ │ │ +00015b60: 6f29 0a09 7b0a 0920 2020 2024 7072 4c6f o)..{.. $prLo │ │ │ │ +00015b70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00015b80: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +00015b90: 7374 7227 203d 3e0a 0909 0920 205b 2269 str' =>.... ["i │ │ │ │ +00015ba0: 6e63 6c75 6465 4469 7220 3c24 643e 2069 ncludeDir <$d> i │ │ │ │ +00015bb0: 7320 6e6f 7420 6120 7265 6c61 7469 7665 s not a relative │ │ │ │ +00015bc0: 2070 6174 6821 225d 293b 0a09 2020 2020 path!"]);.. │ │ │ │ +00015bd0: 2465 7272 6f72 203d 2031 3b0a 097d 0a20 $error = 1;..}. │ │ │ │ +00015be0: 2020 207d 0a20 2020 2024 7072 4c6f 672d }. $prLog- │ │ │ │ +00015bf0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00015c00: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ │ +00015c10: 2720 3d3e 205b 2265 7869 7469 6e67 225d ' => ["exiting"] │ │ │ │ +00015c20: 2c0a 0909 2020 272d 6578 6974 2720 3d3e ,... '-exit' => │ │ │ │ +00015c30: 2031 290a 0969 6620 2465 7272 6f72 3b0a 1)..if $error;. │ │ │ │ +00015c40: 7d0a 0a23 0a23 2065 7863 6570 7469 6f6e }..#.# exception │ │ │ │ +00015c50: 2d20 756e 6420 696e 636c 7564 652d 204c - und include- L │ │ │ │ +00015c60: 6973 7465 20c3 bc62 6572 7072 c3bc 6665 iste ..berpr..fe │ │ │ │ +00015c70: 6e20 756e 6420 6576 616c 7569 6572 656e n und evaluieren │ │ │ │ +00015c80: 0a23 202b 2063 6865 636b 426c 6f63 6b73 .# + checkBlocks │ │ │ │ +00015c90: 5275 6c65 200a 230a 6d79 2028 4065 7863 Rule .#.my (@exc │ │ │ │ +00015ca0: 6570 7444 6972 7329 203d 2026 6576 616c eptDirs) = &eval │ │ │ │ +00015cb0: 4578 6365 7074 696f 6e4c 6973 7428 2465 ExceptionList($e │ │ │ │ +00015cc0: 7863 6570 7444 6972 732c 2024 736f 7572 xceptDirs, $sour │ │ │ │ +00015cd0: 6365 4469 722c 0a09 0909 0920 2020 2765 ceDir,..... 'e │ │ │ │ +00015ce0: 7863 6570 7444 6972 272c 2027 6578 636c xceptDir', 'excl │ │ │ │ +00015cf0: 7564 696e 6727 2c20 2470 724c 6f67 293b uding', $prLog); │ │ │ │ +00015d00: 0a6d 7920 2840 696e 636c 7564 6544 6972 .my (@includeDir │ │ │ │ +00015d10: 7329 203d 2026 6576 616c 4578 6365 7074 s) = &evalExcept │ │ │ │ +00015d20: 696f 6e4c 6973 7428 2469 6e63 6c75 6465 ionList($include │ │ │ │ +00015d30: 4469 7273 2c20 2473 6f75 7263 6544 6972 Dirs, $sourceDir │ │ │ │ +00015d40: 2c0a 0909 0909 2020 2020 2769 6e63 6c75 ,..... 'inclu │ │ │ │ +00015d50: 6465 4469 7227 2c20 2769 6e63 6c75 6469 deDir', 'includi │ │ │ │ +00015d60: 6e67 272c 2024 7072 4c6f 6729 3b0a 2470 ng', $prLog);.$p │ │ │ │ +00015d70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00015d80: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. │ │ │ │ +00015d90: 2020 2027 2d73 7472 2720 3d3e 205b 2265 '-str' => ["e │ │ │ │ +00015da0: 7863 6570 7452 756c 6520 3d20 2220 2e20 xceptRule = " . │ │ │ │ +00015db0: 2465 7863 5275 6c65 2d3e 6765 744c 696e $excRule->getLin │ │ │ │ +00015dc0: 6553 7472 696e 6728 295d 290a 2020 2020 eString()]). │ │ │ │ +00015dd0: 6966 2024 6578 6365 7074 5275 6c65 3b0a if $exceptRule;. │ │ │ │ +00015de0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00015df0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. │ │ │ │ +00015e00: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00015e10: 2269 6e63 6c75 6465 5275 6c65 203d 2022 "includeRule = " │ │ │ │ +00015e20: 202e 2024 696e 6352 756c 652d 3e67 6574 . $incRule->get │ │ │ │ +00015e30: 4c69 6e65 5374 7269 6e67 2829 5d29 0a20 LineString()]). │ │ │ │ +00015e40: 2020 2069 6620 2469 6e63 6c75 6465 5275 if $includeRu │ │ │ │ +00015e50: 6c65 3b0a 2470 724c 6f67 2d3e 7072 696e le;.$prLog->prin │ │ │ │ +00015e60: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ │ +00015e70: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ │ +00015e80: 3d3e 205b 2263 6865 636b 426c 6f63 6b73 => ["checkBlocks │ │ │ │ +00015e90: 5275 6c65 203d 203c 220a 0909 0920 2e20 Rule = <".... . │ │ │ │ +00015ea0: 2463 6862 5275 6c65 2d3e 6765 744c 696e $chbRule->getLin │ │ │ │ +00015eb0: 6553 7472 696e 6728 2920 2e20 223e 225d eString() . ">"] │ │ │ │ +00015ec0: 290a 2020 2020 6966 2024 6368 6252 756c ). if $chbRul │ │ │ │ +00015ed0: 652d 3e68 6173 4c69 6e65 2829 3b0a 7b0a e->hasLine();.{. │ │ │ │ +00015ee0: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f │ │ │ │ +00015ef0: 6f72 6561 6368 2024 6920 2830 2e2e 4063 oreach $i (0..@c │ │ │ │ +00015f00: 6865 636b 4465 7669 6365 732d 3129 0a20 heckDevices-1). │ │ │ │ +00015f10: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr │ │ │ │ +00015f20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00015f30: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st │ │ │ │ +00015f40: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [" │ │ │ │ +00015f50: 7361 7669 6e67 2064 6576 6963 6573 203c saving devices < │ │ │ │ +00015f60: 2220 2e20 2463 6865 636b 4465 7669 6365 " . $checkDevice │ │ │ │ +00015f70: 735b 2469 5d20 2e20 223e 202d 3e20 2220 s[$i] . "> -> " │ │ │ │ +00015f80: 2e0a 0909 2020 2020 2020 2024 6368 6563 .... $chec │ │ │ │ +00015f90: 6b44 6576 6963 6573 4469 725b 2469 5d20 kDevicesDir[$i] │ │ │ │ +00015fa0: 2e20 2220 2862 6c6f 636b 2073 697a 6520 . " (block size │ │ │ │ +00015fb0: 3d20 2220 2e0a 0909 2020 2020 2020 2024 = " .... $ │ │ │ │ +00015fc0: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$ │ │ │ │ +00015fd0: 695d 202e 2022 2c20 2220 2e0a 0909 2020 i] . ", " .... │ │ │ │ +00015fe0: 2020 2020 2028 2463 6865 636b 4465 7669 ($checkDevi │ │ │ │ +00015ff0: 6365 7343 6f6d 7072 5b24 695d 203f 2027 cesCompr[$i] ? ' │ │ │ │ +00016000: 2720 3a20 276e 6f20 2729 202e 0a09 0920 ' : 'no ') .... │ │ │ │ +00016010: 2020 2020 2027 636f 6d70 7265 7373 696f 'compressio │ │ │ │ +00016020: 6e29 275d 293b 0a20 2020 207d 0a7d 0a0a n)']);. }.}.. │ │ │ │ +00016030: 0a23 0a23 20c3 bc62 6572 7072 c3bc 6665 .#.# ..berpr..fe │ │ │ │ +00016040: 6e2c 206f 6220 4261 636b 7570 2054 6172 n, ob Backup Tar │ │ │ │ +00016050: 6765 7420 696d 2042 6163 6b75 7020 536f get im Backup So │ │ │ │ +00016060: 7572 6365 2054 7265 6520 6c69 6567 740a urce Tree liegt. │ │ │ │ +00016070: 230a 6d79 2024 7461 7267 6574 496e 536f #.my $targetInSo │ │ │ │ +00016080: 7572 6365 203d 2030 3b0a 6966 2028 263a urce = 0;.if (&: │ │ │ │ +00016090: 3a69 7353 7562 4469 7228 2473 6f75 7263 :isSubDir($sourc │ │ │ │ +000160a0: 6544 6972 2c20 2474 6172 6765 7444 6972 eDir, $targetDir │ │ │ │ +000160b0: 2929 2020 2020 2320 6c69 6567 7420 6472 )) # liegt dr │ │ │ │ +000160c0: 696e 210a 7b0a 2020 2020 2474 6172 6765 in!.{. $targe │ │ │ │ +000160d0: 7449 6e53 6f75 7263 6520 3d20 313b 2020 tInSource = 1; │ │ │ │ +000160e0: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +000160f0: 2041 6e6e 6168 6d65 3a20 6573 2067 6962 Annahme: es gib │ │ │ │ +00016100: 7420 6b65 696e 6520 4175 736e 6168 6d65 t keine Ausnahme │ │ │ │ +00016110: 0a20 2020 2069 6620 2840 6578 6365 7074 . if (@except │ │ │ │ +00016120: 4469 7273 203e 2030 2920 2020 2020 2020 Dirs > 0) │ │ │ │ +00016130: 2020 2020 2020 2020 2020 2320 7465 7374 # test │ │ │ │ +00016140: 656e 2c20 6f62 2076 6965 6c6c 6569 6368 en, ob vielleich │ │ │ │ +00016150: 7420 696d 2076 6f6d 0a20 2020 207b 2020 t im vom. { │ │ │ │ +00016160: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00016170: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00016180: 2020 2320 4261 636b 7570 2061 7573 6765 # Backup ausge │ │ │ │ +00016190: 6e6f 6d6d 656e 656e 2054 7265 650a 096d nommenen Tree..m │ │ │ │ +000161a0: 7920 2465 3b0a 0966 6f72 6561 6368 2024 y $e;..foreach $ │ │ │ │ +000161b0: 6520 2840 6578 6365 7074 4469 7273 290a e (@exceptDirs). │ │ │ │ +000161c0: 097b 0a09 2020 2020 6966 2028 263a 3a69 .{.. if (&::i │ │ │ │ +000161d0: 7353 7562 4469 7228 2465 2c20 2474 6172 sSubDir($e, $tar │ │ │ │ +000161e0: 6765 7444 6972 2929 0a09 2020 2020 7b0a getDir)).. {. │ │ │ │ +000161f0: 0909 2474 6172 6765 7449 6e53 6f75 7263 ..$targetInSourc │ │ │ │ +00016200: 6520 3d20 303b 2020 2020 2023 2064 6f63 e = 0; # doc │ │ │ │ +00016210: 6820 4175 736e 6168 6d65 2067 6566 756e h Ausnahme gefun │ │ │ │ +00016220: 6465 6e0a 0909 2470 724c 6f67 2d3e 7072 den...$prLog->pr │ │ │ │ +00016230: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00016240: 4927 2c0a 0909 0920 2020 2020 2027 2d73 I',.... '-s │ │ │ │ +00016250: 7472 2720 3d3e 0a09 0909 2020 2020 2020 tr' =>.... │ │ │ │ +00016260: 5b22 7461 7267 6574 2064 6972 6563 746f ["target directo │ │ │ │ +00016270: 7279 203c 2474 6172 6765 7444 6972 3e20 ry <$targetDir> │ │ │ │ +00016280: 6973 2069 6e20 2220 2e0a 0909 0920 2020 is in " ..... │ │ │ │ +00016290: 2020 2020 2265 7863 6570 7469 6f6e 203c "exception < │ │ │ │ +000162a0: 2465 3e20 6f66 2073 6f75 7263 6520 6469 $e> of source di │ │ │ │ +000162b0: 7265 6374 6f72 7920 2220 2e0a 0909 0920 rectory " ..... │ │ │ │ +000162c0: 2020 2020 2020 223c 2473 6f75 7263 6544 "<$sourceD │ │ │ │ +000162d0: 6972 3e2c 206f 6b22 5d29 3b0a 0909 6c61 ir>, ok"]);...la │ │ │ │ +000162e0: 7374 3b0a 0920 2020 207d 0a09 7d0a 2020 st;.. }..}. │ │ │ │ +000162f0: 2020 7d0a 2020 2020 6966 2028 2474 6172 }. if ($tar │ │ │ │ +00016300: 6765 7449 6e53 6f75 7263 6520 3d3d 2031 getInSource == 1 │ │ │ │ +00016310: 2061 6e64 0a09 4069 6e63 6c75 6465 4469 and..@includeDi │ │ │ │ +00016320: 7273 203e 2030 2920 2020 2020 2020 2020 rs > 0) │ │ │ │ +00016330: 2020 2023 2063 6865 636b 2c20 6966 206e # check, if n │ │ │ │ +00016340: 6f74 2069 6e20 696e 636c 7564 6520 7061 ot in include pa │ │ │ │ +00016350: 7468 730a 2020 2020 7b0a 096d 7920 2469 ths. {..my $i │ │ │ │ +00016360: 3b0a 096d 7920 2474 6172 6765 7449 6e53 ;..my $targetInS │ │ │ │ +00016370: 6f75 7263 6520 3d20 303b 2020 2020 2020 ource = 0; │ │ │ │ +00016380: 2320 6173 7375 6d70 7469 6f6e 3a20 7461 # assumption: ta │ │ │ │ +00016390: 7267 6574 2069 7320 6e6f 7420 696e 2073 rget is not in s │ │ │ │ +000163a0: 6f75 7263 650a 0966 6f72 6561 6368 2024 ource..foreach $ │ │ │ │ +000163b0: 6920 2840 696e 636c 7564 6544 6972 7329 i (@includeDirs) │ │ │ │ +000163c0: 0a09 7b0a 0920 2020 2069 6620 2826 3a3a ..{.. if (&:: │ │ │ │ +000163d0: 6973 5375 6244 6972 2824 692c 2024 7461 isSubDir($i, $ta │ │ │ │ +000163e0: 7267 6574 4469 7229 290a 0920 2020 207b rgetDir)).. { │ │ │ │ +000163f0: 0a09 0924 7461 7267 6574 496e 536f 7572 ...$targetInSour │ │ │ │ +00016400: 6365 203d 2031 3b0a 0909 6c61 7374 3b0a ce = 1;...last;. │ │ │ │ +00016410: 0920 2020 207d 0a09 7d0a 2020 2020 7d0a . }..}. }. │ │ │ │ +00016420: 7d0a 2470 724c 6f67 2d3e 7072 696e 7428 }.$prLog->print( │ │ │ │ +00016430: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00016440: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00016450: 0a09 2020 2020 2020 5b22 7461 7267 6574 .. ["target │ │ │ │ +00016460: 2064 6972 6563 746f 7279 203c 2474 6172 directory <$tar │ │ │ │ +00016470: 6765 7444 6972 3e20 6361 6e6e 6f74 2062 getDir> cannot b │ │ │ │ +00016480: 6520 7061 7274 206f 6620 7468 6520 2220 e part of the " │ │ │ │ +00016490: 2e0a 0920 2020 2020 2020 2273 6f75 7263 ... "sourc │ │ │ │ +000164a0: 6520 6469 7265 6374 6f72 7920 3c24 736f e directory <$so │ │ │ │ +000164b0: 7572 6365 4469 723e 222c 0a09 2020 2020 urceDir>",.. │ │ │ │ +000164c0: 2020 2022 6465 6669 6e65 2061 6e20 6578 "define an ex │ │ │ │ +000164d0: 6365 7074 696f 6e20 7769 7468 202d 2d65 ception with --e │ │ │ │ +000164e0: 7863 6570 7444 6972 7320 6f72 2063 686f xceptDirs or cho │ │ │ │ +000164f0: 6f73 6520 616e 6f74 6865 7220 2220 2e0a ose another " .. │ │ │ │ +00016500: 0920 2020 2020 2020 2274 6172 6765 7420 . "target │ │ │ │ +00016510: 6469 7265 6374 6f72 7922 5d2c 0a09 2020 directory"],.. │ │ │ │ +00016520: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ │ +00016530: 290a 2020 2020 6966 2028 2474 6172 6765 ). if ($targe │ │ │ │ +00016540: 7449 6e53 6f75 7263 6529 3b0a 0a23 0a23 tInSource);..#.# │ │ │ │ +00016550: 2063 6865 636b 2069 6620 616c 6c20 6578 check if all ex │ │ │ │ +00016560: 6365 7074 4469 7273 2061 7265 2073 7562 ceptDirs are sub │ │ │ │ +00016570: 6469 7265 6374 6f72 6965 7320 6f66 2069 directories of i │ │ │ │ +00016580: 6e63 6c75 6465 4469 7273 206f 720a 2320 ncludeDirs or.# │ │ │ │ +00016590: 6765 6e65 7261 7465 2061 2077 6172 6e69 generate a warni │ │ │ │ +000165a0: 6e67 0a23 0a69 6620 2840 6578 6365 7074 ng.#.if (@except │ │ │ │ +000165b0: 4469 7273 2061 6e64 2040 696e 636c 7564 Dirs and @includ │ │ │ │ +000165c0: 6544 6972 7320 616e 6420 6e6f 7420 6578 eDirs and not ex │ │ │ │ +000165d0: 6973 7473 2024 7375 7070 7265 7373 5761 ists $suppressWa │ │ │ │ +000165e0: 726e 696e 677b 2765 7863 4469 7227 7d29 rning{'excDir'}) │ │ │ │ +000165f0: 0a7b 0a20 2020 206d 7920 2465 3b0a 2020 .{. my $e;. │ │ │ │ +00016600: 2020 666f 7265 6163 6820 2465 2028 4065 foreach $e (@e │ │ │ │ +00016610: 7863 6570 7444 6972 7329 0a20 2020 207b xceptDirs). { │ │ │ │ +00016620: 0a09 6d79 2024 693b 0a09 6d79 2024 6973 ..my $i;..my $is │ │ │ │ +00016630: 496e 203d 2030 3b0a 0966 6f72 6561 6368 In = 0;..foreach │ │ │ │ +00016640: 2024 6920 2840 696e 636c 7564 6544 6972 $i (@includeDir │ │ │ │ +00016650: 7329 0a09 7b0a 0920 2020 2069 6620 2826 s)..{.. if (& │ │ │ │ +00016660: 3a3a 6973 5375 6244 6972 2824 692c 2024 ::isSubDir($i, $ │ │ │ │ +00016670: 6529 290a 0920 2020 207b 0a09 0924 6973 e)).. {...$is │ │ │ │ +00016680: 496e 203d 2031 3b0a 0909 6c61 7374 3b0a In = 1;...last;. │ │ │ │ +00016690: 0920 2020 207d 0a09 7d0a 0924 7072 4c6f . }..}..$prLo │ │ │ │ +000166a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000166b0: 203d 3e20 2757 272c 0a09 0920 2020 2020 => 'W',... │ │ │ │ +000166c0: 2027 2d73 7472 2720 3d3e 205b 2265 7863 '-str' => ["exc │ │ │ │ +000166d0: 6570 7420 6469 7220 3c24 653e 2069 7320 ept dir <$e> is │ │ │ │ +000166e0: 6e6f 7420 7061 7274 206f 6620 7468 6520 not part of the │ │ │ │ +000166f0: 6261 636b 7570 225d 290a 0920 2020 2075 backup"]).. u │ │ │ │ +00016700: 6e6c 6573 7320 2469 7349 6e3b 0a20 2020 nless $isIn;. │ │ │ │ +00016710: 207d 0a7d 0a0a 230a 2320 6c6f 636b 2066 }.}..#.# lock f │ │ │ │ +00016720: 696c 6520 c3bc 6265 7270 72c3 bc66 656e ile ..berpr..fen │ │ │ │ +00016730: 0a23 0a3a 3a63 6865 636b 4c6f 636b 4669 .#.::checkLockFi │ │ │ │ +00016740: 6c65 2824 6c6f 636b 4669 6c65 2c20 2470 le($lockFile, $p │ │ │ │ +00016750: 724c 6f67 293b 0a0a 2320 7072 6570 6172 rLog);..# prepar │ │ │ │ +00016760: 6520 6578 6365 7074 5479 7065 730a 6d79 e exceptTypes.my │ │ │ │ +00016770: 2028 2565 7854 7970 6573 2c20 2465 7429 (%exTypes, $et) │ │ │ │ +00016780: 3b0a 666f 7265 6163 6820 2465 7420 2873 ;.foreach $et (s │ │ │ │ +00016790: 706c 6974 282f 2f2c 2024 6578 6365 7074 plit(//, $except │ │ │ │ +000167a0: 5479 7065 7320 7c7c 2022 2229 290a 7b0a Types || "")).{. │ │ │ │ +000167b0: 2020 2020 2465 7854 7970 6573 7b24 6574 $exTypes{$et │ │ │ │ +000167c0: 7d20 3d20 303b 2020 2020 2020 2020 2023 } = 0; # │ │ │ │ +000167d0: 2074 6869 7320 6973 2061 2066 6c61 6720 this is a flag │ │ │ │ +000167e0: 616e 6420 616e 6420 616c 736f 2061 2063 and and also a c │ │ │ │ +000167f0: 6f75 6e74 6572 0a7d 0a0a 230a 2320 7072 ounter.}..#.# pr │ │ │ │ +00016800: 6563 6f6d 6d61 6e64 2061 7573 66c3 bc68 ecommand ausf..h │ │ │ │ +00016810: 7265 6e0a 230a 6966 2028 6465 6669 6e65 ren.#.if (define │ │ │ │ +00016820: 6420 2470 7265 636f 6d6d 616e 6429 0a7b d $precommand).{ │ │ │ │ +00016830: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00016840: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00016850: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00016860: 205b 2273 7461 7274 696e 6720 7072 6520 ["starting pre │ │ │ │ +00016870: 636f 6d6d 616e 6420 3c40 2470 7265 636f command <@$preco │ │ │ │ +00016880: 6d6d 616e 643e 202e 2e2e 225d 293b 0a20 mmand> ..."]);. │ │ │ │ +00016890: 2020 206d 7920 2824 7072 6543 6f6d 6d2c my ($preComm, │ │ │ │ +000168a0: 2040 7072 6550 6172 616d 2920 3d20 2840 @preParam) = (@ │ │ │ │ +000168b0: 2470 7265 636f 6d6d 616e 6429 3b0a 2020 $precommand);. │ │ │ │ +000168c0: 2020 6d79 2024 7072 6563 6f20 3d20 666f my $preco = fo │ │ │ │ +000168d0: 726b 5072 6f63 2d3e 6e65 7728 272d 6578 rkProc->new('-ex │ │ │ │ +000168e0: 6563 2720 3d3e 2024 7072 6543 6f6d 6d2c ec' => $preComm, │ │ │ │ +000168f0: 0a09 0909 2020 2020 2020 272d 7061 7261 .... '-para │ │ │ │ +00016900: 6d27 203d 3e20 5c40 7072 6550 6172 616d m' => \@preParam │ │ │ │ +00016910: 2c0a 0909 0920 2020 2020 2027 2d77 6f72 ,.... '-wor │ │ │ │ +00016920: 6b69 6e67 4469 7227 203d 3e20 272e 272c kingDir' => '.', │ │ │ │ +00016930: 0a09 0909 2020 2020 2020 272d 6f75 7452 .... '-outR │ │ │ │ +00016940: 616e 646f 6d27 203d 3e20 2224 746d 7064 andom' => "$tmpd │ │ │ │ +00016950: 6972 2f70 7265 636f 6d6d 2d22 2c0a 0909 ir/precomm-",... │ │ │ │ +00016960: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ │ +00016970: 3d3e 2024 7072 4c6f 6729 3b0a 2020 2020 => $prLog);. │ │ │ │ +00016980: 2470 7265 636f 2d3e 7761 6974 2829 3b0a $preco->wait();. │ │ │ │ +00016990: 2020 2020 6d79 2024 6f75 7420 3d20 2470 my $out = $p │ │ │ │ +000169a0: 7265 636f 2d3e 6765 7453 5444 4f55 5428 reco->getSTDOUT( │ │ │ │ +000169b0: 293b 0a20 2020 2024 7072 4c6f 672d 3e70 );. $prLog->p │ │ │ │ +000169c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +000169d0: 2757 272c 0a09 0920 2027 2d73 7472 2720 'W',... '-str' │ │ │ │ +000169e0: 3d3e 205b 2253 5444 4f55 5420 6f66 203c => ["STDOUT of < │ │ │ │ +000169f0: 4024 7072 6563 6f6d 6d61 6e64 3e3a 222c @$precommand>:", │ │ │ │ +00016a00: 2040 246f 7574 5d29 0a09 6966 2028 4024 @$out])..if (@$ │ │ │ │ +00016a10: 6f75 7420 3e20 3029 3b0a 2020 2020 246f out > 0);. $o │ │ │ │ +00016a20: 7574 203d 2024 7072 6563 6f2d 3e67 6574 ut = $preco->get │ │ │ │ +00016a30: 5354 4445 5252 2829 3b0a 2020 2020 2470 STDERR();. $p │ │ │ │ +00016a40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00016a50: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ │ +00016a60: 272d 7374 7227 203d 3e20 5b22 5354 4445 '-str' => ["STDE │ │ │ │ +00016a70: 5252 206f 6620 3c40 2470 7265 636f 6d6d RR of <@$precomm │ │ │ │ +00016a80: 616e 643e 3a22 2c20 4024 6f75 745d 290a and>:", @$out]). │ │ │ │ +00016a90: 0969 6620 2840 246f 7574 203e 2030 293b .if (@$out > 0); │ │ │ │ +00016aa0: 0a0a 2020 2020 6d79 2024 7374 6174 7573 .. my $status │ │ │ │ +00016ab0: 203d 2024 7072 6563 6f2d 3e67 6574 2827 = $preco->get(' │ │ │ │ +00016ac0: 2d77 6861 7427 203d 3e20 2773 7461 7475 -what' => 'statu │ │ │ │ +00016ad0: 7327 293b 0a20 2020 2069 6620 2824 7374 s');. if ($st │ │ │ │ +00016ae0: 6174 7573 203d 3d20 3029 0a20 2020 207b atus == 0). { │ │ │ │ +00016af0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00016b00: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +00016b10: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00016b20: 3e0a 0909 2020 2020 2020 5b22 7072 6520 >... ["pre │ │ │ │ +00016b30: 636f 6d6d 616e 6420 3c40 2470 7265 636f command <@$preco │ │ │ │ +00016b40: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished │ │ │ │ +00016b50: 7769 7468 2073 7461 7475 7320 3022 5d29 with status 0"]) │ │ │ │ +00016b60: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00016b70: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ │ +00016b80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00016b90: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +00016ba0: 7374 7227 203d 3e20 5b22 7072 6520 636f str' => ["pre co │ │ │ │ +00016bb0: 6d6d 616e 6420 3c40 2470 7265 636f 6d6d mmand <@$precomm │ │ │ │ +00016bc0: 616e 643e 2066 696e 6973 6865 6420 7769 and> finished wi │ │ │ │ +00016bd0: 7468 2022 202e 0a09 0909 0920 2273 7461 th " ...... "sta │ │ │ │ +00016be0: 7475 7320 2473 7461 7475 732c 2065 7869 tus $status, exi │ │ │ │ +00016bf0: 7469 6e67 225d 293b 0a09 756e 6c69 6e6b ting"]);..unlink │ │ │ │ +00016c00: 2024 6c6f 636b 4669 6c65 2069 6620 246c $lockFile if $l │ │ │ │ +00016c10: 6f63 6b46 696c 653b 0a09 6578 6974 2031 ockFile;..exit 1 │ │ │ │ +00016c20: 3b0a 2020 2020 7d0a 7d0a 0a0a 230a 2320 ;. }.}...#.# │ │ │ │ +00016c30: 4572 7a65 7567 656e 2064 6572 2062 656e Erzeugen der ben │ │ │ │ +00016c40: c3b6 7469 6774 656e 204f 626a 656b 7465 ..tigten Objekte │ │ │ │ +00016c50: 0a23 0a6d 7920 2461 646d 696e 4469 7273 .#.my $adminDirs │ │ │ │ +00016c60: 203d 2061 646d 696e 4469 7265 6374 6f72 = adminDirector │ │ │ │ +00016c70: 6965 732d 3e6e 6577 2827 2d74 6172 6765 ies->new('-targe │ │ │ │ +00016c80: 7444 6972 2720 3d3e 2024 7461 7267 6574 tDir' => $target │ │ │ │ +00016c90: 4469 722c 0a09 0909 0920 2020 2020 2027 Dir,..... ' │ │ │ │ +00016ca0: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' = │ │ │ │ +00016cb0: 3e20 2463 6865 636b 5375 6d46 696c 652c > $checkSumFile, │ │ │ │ +00016cc0: 0a09 0909 0920 2020 2020 2027 2d74 6d70 ..... '-tmp │ │ │ │ +00016cd0: 6469 7227 203d 3e20 2474 6d70 6469 722c dir' => $tmpdir, │ │ │ │ +00016ce0: 0a09 0909 0920 2020 2020 2027 2d63 686d ..... '-chm │ │ │ │ +00016cf0: 6f64 4d44 3546 696c 6527 203d 3e20 2463 odMD5File' => $c │ │ │ │ +00016d00: 686d 6f64 4d44 3546 696c 652c 0a09 0909 hmodMD5File,.... │ │ │ │ +00016d10: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ │ +00016d20: 3d3e 2024 7072 4c6f 672c 0a09 0909 0920 => $prLog,..... │ │ │ │ +00016d30: 2020 2020 2027 2d61 6b74 4461 7465 2720 '-aktDate' │ │ │ │ +00016d40: 3d3e 2024 616b 7444 6174 652c 0a09 0909 => $aktDate,.... │ │ │ │ +00016d50: 0920 2020 2020 2027 2d64 6562 7567 4d6f . '-debugMo │ │ │ │ +00016d60: 6465 2720 3d3e 2024 6465 6275 6729 3b0a de' => $debug);. │ │ │ │ +00016d70: 0a6d 7920 2469 6e64 6578 4469 7220 3d20 .my $indexDir = │ │ │ │ +00016d80: 696e 6465 7844 6972 2d3e 6e65 7728 293b indexDir->new(); │ │ │ │ +00016d90: 0a0a 6d79 2024 616b 7446 696c 656e 616d ..my $aktFilenam │ │ │ │ +00016da0: 6520 3d0a 2020 2020 616b 7446 696c 656e e =. aktFilen │ │ │ │ +00016db0: 616d 652d 3e6e 6577 2827 2d69 6e66 6f46 ame->new('-infoF │ │ │ │ +00016dc0: 696c 6527 203d 3e20 2461 646d 696e 4469 ile' => $adminDi │ │ │ │ +00016dd0: 7273 2d3e 6765 7441 6b74 496e 666f 4669 rs->getAktInfoFi │ │ │ │ +00016de0: 6c65 2829 2c0a 0909 2020 2020 2027 2d62 le(),... '-b │ │ │ │ +00016df0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile │ │ │ │ +00016e00: 2720 3d3e 0a09 0920 2020 2020 2461 646d ' =>... $adm │ │ │ │ +00016e10: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi │ │ │ │ +00016e20: 7228 2920 2e20 222f 2462 6c6f 636b 4368 r() . "/$blockCh │ │ │ │ +00016e30: 6563 6b53 756d 4669 6c65 222c 0a09 0920 eckSumFile",... │ │ │ │ +00016e40: 2020 2020 272d 636f 6d70 7265 7373 4d44 '-compressMD │ │ │ │ +00016e50: 3546 696c 6527 203d 3e20 2463 6f6d 7072 5File' => $compr │ │ │ │ +00016e60: 6573 734d 4435 4669 6c65 2c0a 0909 2020 essMD5File,... │ │ │ │ +00016e70: 2020 2027 2d73 6f75 7263 6544 6972 2720 '-sourceDir' │ │ │ │ +00016e80: 3d3e 2024 736f 7572 6365 4469 722c 0a09 => $sourceDir,.. │ │ │ │ +00016e90: 0920 2020 2020 272d 666f 6c6c 6f77 4c69 . '-followLi │ │ │ │ +00016ea0: 6e6b 7327 203d 3e20 2466 6f6c 6c6f 774c nks' => $followL │ │ │ │ +00016eb0: 696e 6b73 2c0a 0909 2020 2020 2027 2d63 inks,... '-c │ │ │ │ +00016ec0: 6f6d 7072 6573 7327 203d 3e20 2463 6f6d ompress' => $com │ │ │ │ +00016ed0: 7072 6573 732c 0a09 0920 2020 2020 272d press,... '- │ │ │ │ +00016ee0: 756e 636f 6d70 7265 7373 2720 3d3e 2024 uncompress' => $ │ │ │ │ +00016ef0: 756e 636f 6d70 7265 7373 2c0a 0909 2020 uncompress,... │ │ │ │ +00016f00: 2020 2027 2d70 6f73 7466 6978 2720 3d3e '-postfix' => │ │ │ │ +00016f10: 2024 706f 7374 6669 782c 0a09 0920 2020 $postfix,... │ │ │ │ +00016f20: 2020 272d 636f 6d70 7252 756c 6527 203d '-comprRule' = │ │ │ │ +00016f30: 3e20 2463 6f6d 7072 5275 6c65 2c0a 0909 > $comprRule,... │ │ │ │ +00016f40: 2020 2020 2027 2d65 7863 6570 7452 756c '-exceptRul │ │ │ │ +00016f50: 6527 203d 3e20 2465 7863 5275 6c65 2c0a e' => $excRule,. │ │ │ │ +00016f60: 0909 2020 2020 2027 2d69 6e63 6c75 6465 .. '-include │ │ │ │ +00016f70: 5275 6c65 2720 3d3e 2024 696e 6352 756c Rule' => $incRul │ │ │ │ +00016f80: 652c 0a09 0920 2020 2020 272d 7772 6974 e,... '-writ │ │ │ │ +00016f90: 6545 7863 6c75 6465 4c6f 6727 203d 3e20 eExcludeLog' => │ │ │ │ +00016fa0: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog │ │ │ │ +00016fb0: 2c0a 0909 2020 2020 2027 2d65 7863 6570 ,... '-excep │ │ │ │ +00016fc0: 7454 7970 6573 2720 3d3e 2024 6578 6365 tTypes' => $exce │ │ │ │ +00016fd0: 7074 5479 7065 732c 0a09 0920 2020 2020 ptTypes,... │ │ │ │ +00016fe0: 272d 6368 6563 6b42 6c6f 636b 7352 756c '-checkBlocksRul │ │ │ │ +00016ff0: 6527 203d 3e20 5c40 6368 6563 6b42 6c6f e' => \@checkBlo │ │ │ │ +00017000: 636b 7352 756c 652c 0a09 0920 2020 2020 cksRule,... │ │ │ │ +00017010: 272d 6368 6563 6b42 6c6f 636b 7342 5327 '-checkBlocksBS' │ │ │ │ +00017020: 203d 3e20 5c40 6368 6563 6b42 6c6f 636b => \@checkBlock │ │ │ │ +00017030: 7342 532c 0a09 0920 2020 2020 272d 6368 sBS,... '-ch │ │ │ │ +00017040: 6563 6b42 6c6f 636b 7343 6f6d 7072 2720 eckBlocksCompr' │ │ │ │ +00017050: 3d3e 205c 4063 6865 636b 426c 6f63 6b73 => \@checkBlocks │ │ │ │ +00017060: 436f 6d70 722c 0a09 0920 2020 2020 272d Compr,... '- │ │ │ │ +00017070: 6368 6563 6b42 6c6f 636b 7352 6561 6427 checkBlocksRead' │ │ │ │ +00017080: 203d 3e20 5c40 6368 6563 6b42 6c6f 636b => \@checkBlock │ │ │ │ +00017090: 7352 6561 642c 0a09 0920 2020 2020 272d sRead,... '- │ │ │ │ +000170a0: 6368 6563 6b44 6576 6963 6573 2720 3d3e checkDevices' => │ │ │ │ +000170b0: 205c 4063 6865 636b 4465 7669 6365 732c \@checkDevices, │ │ │ │ +000170c0: 0a09 0920 2020 2020 272d 6368 6563 6b44 ... '-checkD │ │ │ │ +000170d0: 6576 6963 6573 4469 7227 203d 3e20 5c40 evicesDir' => \@ │ │ │ │ +000170e0: 6368 6563 6b44 6576 6963 6573 4469 722c checkDevicesDir, │ │ │ │ +000170f0: 0a09 0920 2020 2020 272d 6368 6563 6b44 ... '-checkD │ │ │ │ +00017100: 6576 6963 6573 4253 2720 3d3e 205c 4063 evicesBS' => \@c │ │ │ │ +00017110: 6865 636b 4465 7669 6365 7342 532c 0a09 heckDevicesBS,.. │ │ │ │ +00017120: 0920 2020 2020 272d 6368 6563 6b44 6576 . '-checkDev │ │ │ │ +00017130: 6963 6573 436f 6d70 7227 203d 3e20 5c40 icesCompr' => \@ │ │ │ │ +00017140: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp │ │ │ │ +00017150: 722c 0a09 0920 2020 2020 272d 6c61 7465 r,... '-late │ │ │ │ +00017160: 4c69 6e6b 7327 203d 3e20 246c 6174 654c Links' => $lateL │ │ │ │ +00017170: 696e 6b73 2c0a 0909 2020 2020 2027 2d6c inks,... '-l │ │ │ │ +00017180: 6f67 496e 4261 636b 7570 4469 7227 203d ogInBackupDir' = │ │ │ │ +00017190: 3e20 246c 6f67 496e 4261 636b 7570 4469 > $logInBackupDi │ │ │ │ +000171a0: 722c 0a09 0920 2020 2020 272d 636f 6d70 r,... '-comp │ │ │ │ +000171b0: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD │ │ │ │ +000171c0: 6972 2720 3d3e 2024 636f 6d70 7265 7373 ir' => $compress │ │ │ │ +000171d0: 4c6f 6749 6e42 6163 6b75 7044 6972 2c0a LogInBackupDir,. │ │ │ │ +000171e0: 0909 2020 2020 2027 2d6c 6f67 496e 4261 .. '-logInBa │ │ │ │ +000171f0: 636b 7570 4469 7246 696c 654e 616d 6527 ckupDirFileName' │ │ │ │ +00017200: 203d 3e20 246c 6f67 496e 4261 636b 7570 => $logInBackup │ │ │ │ +00017210: 4469 7246 696c 654e 616d 652c 0a09 0920 DirFileName,... │ │ │ │ +00017220: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs │ │ │ │ +00017230: 2720 3d3e 205c 4065 7863 6570 7444 6972 ' => \@exceptDir │ │ │ │ +00017240: 732c 0a09 0920 2020 2020 272d 696e 636c s,... '-incl │ │ │ │ +00017250: 7564 6544 6972 7327 203d 3e20 5c40 696e udeDirs' => \@in │ │ │ │ +00017260: 636c 7564 6544 6972 732c 0a09 0920 2020 cludeDirs,... │ │ │ │ +00017270: 2020 272d 616b 7444 6174 6527 203d 3e20 '-aktDate' => │ │ │ │ +00017280: 2461 6b74 4461 7465 2c0a 0909 2020 2020 $aktDate,... │ │ │ │ +00017290: 2027 2d63 686d 6f64 4d44 3546 696c 6527 '-chmodMD5File' │ │ │ │ +000172a0: 203d 3e20 2463 686d 6f64 4d44 3546 696c => $chmodMD5Fil │ │ │ │ +000172b0: 652c 0a09 0920 2020 2020 272d 696e 6465 e,... '-inde │ │ │ │ +000172c0: 7844 6972 2720 3d3e 2024 696e 6465 7844 xDir' => $indexD │ │ │ │ +000172d0: 6972 2c0a 0909 2020 2020 2027 2d70 724c ir,... '-prL │ │ │ │ +000172e0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +000172f0: 0a6d 7920 2473 6574 5265 7365 7444 6972 .my $setResetDir │ │ │ │ +00017300: 5469 6d65 7346 696c 6520 3d20 263a 3a75 TimesFile = &::u │ │ │ │ +00017310: 6e69 7146 696c 654e 616d 6528 2224 746d niqFileName("$tm │ │ │ │ +00017320: 7064 6972 2f73 746f 7265 4261 636b 7570 pdir/storeBackup │ │ │ │ +00017330: 2d64 6972 732e 2424 2229 3b0a 6d79 2024 -dirs.$$");.my $ │ │ │ │ +00017340: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes │ │ │ │ +00017350: 203d 0a20 2020 2073 6574 5265 7365 7444 =. setResetD │ │ │ │ +00017360: 6972 5469 6d65 732d 3e6e 6577 2827 2d74 irTimes->new('-t │ │ │ │ +00017370: 6d70 4469 7227 203d 3e20 2474 6d70 6469 mpDir' => $tmpdi │ │ │ │ +00017380: 722c 0a09 0909 2020 272d 736f 7572 6365 r,.... '-source │ │ │ │ +00017390: 4469 7227 203d 3e20 2473 6f75 7263 6544 Dir' => $sourceD │ │ │ │ +000173a0: 6972 2c0a 0909 0920 2027 2d74 6172 6765 ir,.... '-targe │ │ │ │ +000173b0: 7444 6972 2720 3d3e 2024 6164 6d69 6e44 tDir' => $adminD │ │ │ │ +000173c0: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir() │ │ │ │ +000173d0: 2c0a 0909 0920 2027 2d70 724c 6f67 2720 ,.... '-prLog' │ │ │ │ +000173e0: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... │ │ │ │ +000173f0: 272d 7372 6474 6627 203d 3e20 2473 6574 '-srdtf' => $set │ │ │ │ +00017400: 5265 7365 7444 6972 5469 6d65 7346 696c ResetDirTimesFil │ │ │ │ +00017410: 652c 0a09 0909 2020 272d 646f 4e6f 7468 e,.... '-doNoth │ │ │ │ +00017420: 696e 6727 203d 3e20 246c 6174 654c 696e ing' => $lateLin │ │ │ │ +00017430: 6b73 203f 2031 203a 2030 2c0a 0909 0920 ks ? 1 : 0,.... │ │ │ │ +00017440: 2027 2d72 6573 6574 4174 696d 6527 203d '-resetAtime' = │ │ │ │ +00017450: 3e20 2472 6573 6574 4174 696d 652c 0a09 > $resetAtime,.. │ │ │ │ +00017460: 0909 2020 272d 7072 6573 6572 7665 5065 .. '-preservePe │ │ │ │ +00017470: 726d 7327 203d 3e20 2470 7265 7365 7276 rms' => $preserv │ │ │ │ +00017480: 6550 6572 6d73 293b 0a0a 6d79 2024 7072 ePerms);..my $pr │ │ │ │ +00017490: 4c6f 6732 203d 2075 6e64 6566 3b0a 6966 Log2 = undef;.if │ │ │ │ +000174a0: 2028 246c 6f67 496e 4261 636b 7570 4469 ($logInBackupDi │ │ │ │ +000174b0: 7229 2020 2020 2020 2320 6175 6368 2069 r) # auch i │ │ │ │ +000174c0: 6e20 4261 636b 7570 4469 7273 2068 6572 n BackupDirs her │ │ │ │ +000174d0: 696e 6c6f 6767 656e 0a7b 0a20 2020 2024 inloggen.{. $ │ │ │ │ +000174e0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +000174f0: 6c65 4e61 6d65 203d 0a09 2461 646d 696e leName =..$admin │ │ │ │ +00017500: 4469 7273 2d3e 6765 7441 6b74 4469 7228 Dirs->getAktDir( │ │ │ │ +00017510: 2920 2e20 222f 246c 6f67 496e 4261 636b ) . "/$logInBack │ │ │ │ +00017520: 7570 4469 7246 696c 654e 616d 6522 2c0a upDirFileName",. │ │ │ │ +00017530: 2020 2020 2470 724c 6f67 3220 3d20 7072 $prLog2 = pr │ │ │ │ +00017540: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki │ │ │ │ +00017550: 6e64 2720 3d3e 2024 7072 4c6f 674b 696e nd' => $prLogKin │ │ │ │ +00017560: 642c 0a09 0909 2020 2020 272d 6669 6c65 d,.... '-file │ │ │ │ +00017570: 2720 3d3e 2024 6c6f 6749 6e42 6163 6b75 ' => $logInBacku │ │ │ │ +00017580: 7044 6972 4669 6c65 4e61 6d65 2c0a 0909 pDirFileName,... │ │ │ │ +00017590: 0920 2020 2027 2d77 6974 6854 696d 6527 . '-withTime' │ │ │ │ +000175a0: 203d 3e20 2779 6573 272c 0a09 0909 2020 => 'yes',.... │ │ │ │ +000175b0: 2020 272d 6d61 7846 696c 656c 656e 2720 '-maxFilelen' │ │ │ │ +000175c0: 3d3e 2031 6539 2c0a 0909 0920 2020 2027 => 1e9,.... ' │ │ │ │ +000175d0: 2d6e 6f4f 664f 6c64 4669 6c65 7327 203d -noOfOldFiles' = │ │ │ │ +000175e0: 3e20 3129 3b0a 2020 2020 2470 724c 6f67 > 1);. $prLog │ │ │ │ +000175f0: 2d3e 6164 6428 272d 7072 4c6f 6773 2720 ->add('-prLogs' │ │ │ │ +00017600: 3d3e 205b 2470 724c 6f67 325d 293b 0a7d => [$prLog2]);.} │ │ │ │ +00017610: 0a0a 6d79 2024 6465 6c4f 6c64 203d 0a20 ..my $delOld =. │ │ │ │ +00017620: 2020 2064 656c 6574 654f 6c64 4261 636b deleteOldBack │ │ │ │ +00017630: 7570 4469 7273 2d3e 6e65 7728 272d 7461 upDirs->new('-ta │ │ │ │ +00017640: 7267 6574 4469 7227 203d 3e20 2474 6172 rgetDir' => $tar │ │ │ │ +00017650: 6765 7444 6972 2c0a 0909 0920 2020 2020 getDir,.... │ │ │ │ +00017660: 272d 646f 4e6f 7444 656c 6574 6527 203d '-doNotDelete' = │ │ │ │ +00017670: 3e20 2464 6f4e 6f74 4465 6c65 7465 2c0a > $doNotDelete,. │ │ │ │ +00017680: 0909 0920 2020 2020 272d 6465 6c65 7465 ... '-delete │ │ │ │ +00017690: 4e6f 7446 696e 6973 6865 6444 6972 7327 NotFinishedDirs' │ │ │ │ +000176a0: 203d 3e20 2464 656c 6574 654e 6f74 4669 => $deleteNotFi │ │ │ │ +000176b0: 6e69 7368 6564 4469 7273 2c0a 0909 0920 nishedDirs,.... │ │ │ │ +000176c0: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi │ │ │ │ +000176d0: 6c65 2720 3d3e 2024 6368 6563 6b53 756d le' => $checkSum │ │ │ │ +000176e0: 4669 6c65 2c0a 0909 0920 2020 2020 272d File,.... '- │ │ │ │ +000176f0: 6163 7442 6163 6b75 7044 6972 2720 3d3e actBackupDir' => │ │ │ │ +00017700: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get │ │ │ │ +00017710: 416b 7444 6972 2829 2c0a 0909 0920 2020 AktDir(),.... │ │ │ │ +00017720: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ │ +00017730: 724c 6f67 2c0a 0909 0920 2020 2020 272d rLog,.... '- │ │ │ │ +00017740: 746f 6461 7927 203d 3e20 2461 6b74 4461 today' => $aktDa │ │ │ │ +00017750: 7465 2c0a 0909 0920 2020 2020 272d 6b65 te,.... '-ke │ │ │ │ +00017760: 6570 4669 7273 744f 6659 6561 7227 203d epFirstOfYear' = │ │ │ │ +00017770: 3e20 246b 6565 7046 6972 7374 4f66 5965 > $keepFirstOfYe │ │ │ │ +00017780: 6172 2c0a 0909 0920 2020 2020 272d 6b65 ar,.... '-ke │ │ │ │ +00017790: 6570 4c61 7374 4f66 5965 6172 2720 3d3e epLastOfYear' => │ │ │ │ +000177a0: 2024 6b65 6570 4c61 7374 4f66 5965 6172 $keepLastOfYear │ │ │ │ +000177b0: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ │ +000177c0: 4669 7273 744f 664d 6f6e 7468 2720 3d3e FirstOfMonth' => │ │ │ │ +000177d0: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon │ │ │ │ +000177e0: 7468 2c0a 0909 0920 2020 2020 272d 6b65 th,.... '-ke │ │ │ │ +000177f0: 6570 4c61 7374 4f66 4d6f 6e74 6827 203d epLastOfMonth' = │ │ │ │ +00017800: 3e20 246b 6565 704c 6173 744f 664d 6f6e > $keepLastOfMon │ │ │ │ +00017810: 7468 2c0a 0909 0920 2020 2020 272d 6669 th,.... '-fi │ │ │ │ +00017820: 7273 7444 6179 4f66 5765 656b 2720 3d3e rstDayOfWeek' => │ │ │ │ +00017830: 2024 6669 7273 7444 6179 4f66 5765 656b $firstDayOfWeek │ │ │ │ +00017840: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ │ +00017850: 4669 7273 744f 6657 6565 6b27 203d 3e20 FirstOfWeek' => │ │ │ │ +00017860: 246b 6565 7046 6972 7374 4f66 5765 656b $keepFirstOfWeek │ │ │ │ +00017870: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ │ +00017880: 4c61 7374 4f66 5765 656b 2720 3d3e 2024 LastOfWeek' => $ │ │ │ │ +00017890: 6b65 6570 4c61 7374 4f66 5765 656b 2c0a keepLastOfWeek,. │ │ │ │ +000178a0: 0909 0920 2020 2020 272d 6b65 6570 416c ... '-keepAl │ │ │ │ +000178b0: 6c27 203d 3e20 246b 6565 7041 6c6c 2c0a l' => $keepAll,. │ │ │ │ +000178c0: 0909 0920 2020 2020 272d 6b65 6570 5265 ... '-keepRe │ │ │ │ +000178d0: 6c61 7469 7665 2720 3d3e 2024 6b65 6570 lative' => $keep │ │ │ │ +000178e0: 5265 6c61 7469 7665 2c0a 0909 0920 2020 Relative,.... │ │ │ │ +000178f0: 2020 272d 6b65 6570 5765 656b 6461 7927 '-keepWeekday' │ │ │ │ +00017900: 203d 3e20 246b 6565 7057 6565 6b64 6179 => $keepWeekday │ │ │ │ +00017910: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ │ +00017920: 4475 706c 6963 6174 6527 203d 3e20 246b Duplicate' => $k │ │ │ │ +00017930: 6565 7044 7570 6c69 6361 7465 2c0a 0909 eepDuplicate,... │ │ │ │ +00017940: 0920 2020 2020 272d 6b65 6570 4d69 6e4e . '-keepMinN │ │ │ │ +00017950: 756d 6265 7227 203d 3e20 246b 6565 704d umber' => $keepM │ │ │ │ +00017960: 696e 4e75 6d62 6572 2c0a 0909 0920 2020 inNumber,.... │ │ │ │ +00017970: 2020 272d 6b65 6570 4d61 784e 756d 6265 '-keepMaxNumbe │ │ │ │ +00017980: 7227 203d 3e20 246b 6565 704d 6178 4e75 r' => $keepMaxNu │ │ │ │ +00017990: 6d62 6572 2c0a 0909 0920 2020 2020 272d mber,.... '- │ │ │ │ +000179a0: 7374 6174 4465 6c4f 6c64 4261 636b 7570 statDelOldBackup │ │ │ │ +000179b0: 4469 7273 2720 3d3e 2024 6d61 696e 3a3a Dirs' => $main:: │ │ │ │ +000179c0: 7374 6174 2c0a 0909 0920 2020 2020 272d stat,.... '- │ │ │ │ +000179d0: 6c61 7465 4c69 6e6b 7350 6172 616d 2720 lateLinksParam' │ │ │ │ +000179e0: 3d3e 2024 6c61 7465 4c69 6e6b 732c 0a09 => $lateLinks,.. │ │ │ │ +000179f0: 0909 2020 2020 2027 2d61 6c6c 4c69 6e6b .. '-allLink │ │ │ │ +00017a00: 7327 203d 3e20 2461 6c6c 4c69 6e6b 730a s' => $allLinks. │ │ │ │ +00017a10: 0909 0920 2020 2020 293b 0a24 6465 6c4f ... );.$delO │ │ │ │ +00017a20: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups │ │ │ │ +00017a30: 2829 3b0a 0a6d 7920 246f 6c64 4669 6c65 ();..my $oldFile │ │ │ │ +00017a40: 6e61 6d65 203d 0a20 2020 206f 6c64 4669 name =. oldFi │ │ │ │ +00017a50: 6c65 6e61 6d65 2d3e 6e65 7728 272d 6462 lename->new('-db │ │ │ │ +00017a60: 6d42 6173 654e 616d 6527 203d 3e20 2224 mBaseName' => "$ │ │ │ │ +00017a70: 746d 7064 6972 2f64 626d 222c 0a09 0920 tmpdir/dbm",... │ │ │ │ +00017a80: 2020 2020 272d 696e 6465 7844 6972 2720 '-indexDir' │ │ │ │ +00017a90: 3d3e 2024 696e 6465 7844 6972 2c0a 0909 => $indexDir,... │ │ │ │ +00017aa0: 2020 2020 2027 2d70 726f 6772 6573 7352 '-progressR │ │ │ │ +00017ab0: 6570 6f72 7427 203d 3e20 2470 726f 6772 eport' => $progr │ │ │ │ +00017ac0: 6573 7352 6570 6f72 742c 0a09 0920 2020 essReport,... │ │ │ │ +00017ad0: 2020 272d 616b 7444 6972 2720 3d3e 2024 '-aktDir' => $ │ │ │ │ +00017ae0: 6164 6d69 6e44 6972 732d 3e67 6574 416b adminDirs->getAk │ │ │ │ +00017af0: 7444 6972 2829 2c0a 0909 2020 2020 2027 tDir(),... ' │ │ │ │ +00017b00: 2d6f 7468 6572 4261 636b 7570 5365 7269 -otherBackupSeri │ │ │ │ +00017b10: 6573 2720 3d3e 205c 406f 7468 6572 4261 es' => \@otherBa │ │ │ │ +00017b20: 636b 7570 5365 7269 6573 2c0a 0909 2020 ckupSeries,... │ │ │ │ +00017b30: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +00017b40: 7072 4c6f 672c 0a09 0920 2020 2020 272d prLog,... '- │ │ │ │ +00017b50: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' => │ │ │ │ +00017b60: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,. │ │ │ │ +00017b70: 0909 2020 2020 2027 2d64 6562 7567 4d6f .. '-debugMo │ │ │ │ +00017b80: 6465 2720 3d3e 2024 6465 6275 672c 0a09 de' => $debug,.. │ │ │ │ +00017b90: 0920 2020 2020 272d 7361 7665 5241 4d27 . '-saveRAM' │ │ │ │ +00017ba0: 203d 3e20 2473 6176 6552 414d 2c0a 0909 => $saveRAM,... │ │ │ │ +00017bb0: 2020 2020 2027 2d66 6c61 6742 6c6f 636b '-flagBlock │ │ │ │ +00017bc0: 4465 7669 6365 2720 3d3e 2024 666c 6167 Device' => $flag │ │ │ │ +00017bd0: 426c 6f63 6b44 6576 6963 650a 2020 2020 BlockDevice. │ │ │ │ +00017be0: 293b 0a0a 2461 6b74 4669 6c65 6e61 6d65 );..$aktFilename │ │ │ │ +00017bf0: 2d3e 7365 7444 424d 6d64 3528 246f 6c64 ->setDBMmd5($old │ │ │ │ +00017c00: 4669 6c65 6e61 6d65 2d3e 6765 7444 424d Filename->getDBM │ │ │ │ +00017c10: 6d64 3528 2929 3b0a 0a24 7772 6974 6545 md5());..$writeE │ │ │ │ +00017c20: 7863 6c75 6465 4c6f 6720 3d20 2461 646d xcludeLog = $adm │ │ │ │ +00017c30: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi │ │ │ │ +00017c40: 7228 2920 2e20 222f 2e73 746f 7265 4261 r() . "/.storeBa │ │ │ │ +00017c50: 636b 7570 2e6e 6f74 5361 7665 642e 627a ckup.notSaved.bz │ │ │ │ +00017c60: 3222 0a20 2020 2069 6620 2477 7269 7465 2". if $write │ │ │ │ +00017c70: 4578 636c 7564 654c 6f67 3b0a 0a6d 7920 ExcludeLog;..my │ │ │ │ +00017c80: 2472 6561 6444 6972 416e 6443 6865 636b $readDirAndCheck │ │ │ │ +00017c90: 203d 0a20 2020 2072 6561 6444 6972 4368 =. readDirCh │ │ │ │ +00017ca0: 6563 6b53 697a 6554 696d 652d 3e6e 6577 eckSizeTime->new │ │ │ │ +00017cb0: 2827 2d61 646d 696e 4469 7273 2720 3d3e ('-adminDirs' => │ │ │ │ +00017cc0: 2024 6164 6d69 6e44 6972 732c 0a09 0909 $adminDirs,.... │ │ │ │ +00017cd0: 2020 2020 2020 272d 6f6c 6446 696c 656e '-oldFilen │ │ │ │ +00017ce0: 616d 6527 203d 3e20 246f 6c64 4669 6c65 ame' => $oldFile │ │ │ │ +00017cf0: 6e61 6d65 2c0a 0909 0920 2020 2020 2027 name,.... ' │ │ │ │ +00017d00: 2d61 6b74 4669 6c65 6e61 6d65 2720 3d3e -aktFilename' => │ │ │ │ +00017d10: 2024 616b 7446 696c 656e 616d 652c 0a09 $aktFilename,.. │ │ │ │ +00017d20: 0909 2020 2020 2020 272d 6469 7227 203d .. '-dir' = │ │ │ │ +00017d30: 3e20 2473 6f75 7263 6544 6972 2c0a 0909 > $sourceDir,... │ │ │ │ +00017d40: 0920 2020 2020 2027 2d66 6f6c 6c6f 774c . '-followL │ │ │ │ +00017d50: 696e 6b73 2720 3d3e 2024 666f 6c6c 6f77 inks' => $follow │ │ │ │ +00017d60: 4c69 6e6b 732c 0a20 2020 2020 2020 2020 Links,. │ │ │ │ +00017d70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00017d80: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' │ │ │ │ +00017d90: 3d3e 2024 676e 7563 702c 0a09 0909 2020 => $gnucp,.... │ │ │ │ +00017da0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs │ │ │ │ +00017db0: 2720 3d3e 205b 4065 7863 6570 7444 6972 ' => [@exceptDir │ │ │ │ +00017dc0: 735d 2c0a 0909 0920 2020 2020 2027 2d69 s],.... '-i │ │ │ │ +00017dd0: 6e63 6c75 6465 4469 7273 2720 3d3e 205b ncludeDirs' => [ │ │ │ │ +00017de0: 4069 6e63 6c75 6465 4469 7273 5d2c 0a09 @includeDirs],.. │ │ │ │ +00017df0: 0909 2020 2020 2020 272d 7772 6974 6545 .. '-writeE │ │ │ │ +00017e00: 7863 6c75 6465 4c6f 6727 203d 3e20 2477 xcludeLog' => $w │ │ │ │ +00017e10: 7269 7465 4578 636c 7564 654c 6f67 2c0a riteExcludeLog,. │ │ │ │ +00017e20: 0909 0920 2020 2020 2027 2d61 6b74 4469 ... '-aktDi │ │ │ │ +00017e30: 7227 203d 3e20 2461 646d 696e 4469 7273 r' => $adminDirs │ │ │ │ +00017e40: 2d3e 6765 7441 6b74 4469 7228 292c 0a09 ->getAktDir(),.. │ │ │ │ +00017e50: 0909 2020 2020 2020 272d 706f 7374 6669 .. '-postfi │ │ │ │ +00017e60: 7827 203d 3e20 2470 6f73 7466 6978 2c0a x' => $postfix,. │ │ │ │ +00017e70: 0909 0920 2020 2020 2027 2d65 7863 6570 ... '-excep │ │ │ │ +00017e80: 7452 756c 6527 203d 3e20 2465 7863 5275 tRule' => $excRu │ │ │ │ +00017e90: 6c65 2c0a 0909 0920 2020 2020 2027 2d69 le,.... '-i │ │ │ │ +00017ea0: 6e63 6c75 6465 5275 6c65 2720 3d3e 2024 ncludeRule' => $ │ │ │ │ +00017eb0: 696e 6352 756c 652c 0a09 0909 2020 2020 incRule,.... │ │ │ │ +00017ec0: 2020 272d 6368 6563 6b42 6c6f 636b 7352 '-checkBlocksR │ │ │ │ +00017ed0: 756c 6527 203d 3e20 2463 6862 5275 6c65 ule' => $chbRule │ │ │ │ +00017ee0: 2c0a 0909 0920 2020 2020 2027 2d65 7854 ,.... '-exT │ │ │ │ +00017ef0: 7970 6573 2720 3d3e 205c 2565 7854 7970 ypes' => \%exTyp │ │ │ │ +00017f00: 6573 2c0a 0909 0920 2020 2020 2027 2d72 es,.... '-r │ │ │ │ +00017f10: 6573 6574 4174 696d 6527 203d 3e20 2472 esetAtime' => $r │ │ │ │ +00017f20: 6573 6574 4174 696d 652c 0a09 0909 2020 esetAtime,.... │ │ │ │ +00017f30: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode' │ │ │ │ +00017f40: 203d 3e20 2464 6562 7567 2c0a 0909 0920 => $debug,.... │ │ │ │ +00017f50: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' │ │ │ │ +00017f60: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,.... │ │ │ │ +00017f70: 2020 2020 2020 272d 746d 7064 6972 2720 '-tmpdir' │ │ │ │ +00017f80: 3d3e 2024 746d 7064 6972 2c0a 0909 0920 => $tmpdir,.... │ │ │ │ +00017f90: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ │ +00017fa0: 2024 7072 4c6f 672c 0a09 0909 2020 2020 $prLog,.... │ │ │ │ +00017fb0: 2020 272d 6967 6e6f 7265 5265 6164 4572 '-ignoreReadEr │ │ │ │ +00017fc0: 726f 7227 203d 3e20 2469 676e 6f72 6552 ror' => $ignoreR │ │ │ │ +00017fd0: 6561 6445 7272 6f72 2c0a 0909 0920 2020 eadError,.... │ │ │ │ +00017fe0: 2020 2027 2d69 676e 6f72 6554 696d 6527 '-ignoreTime' │ │ │ │ +00017ff0: 203d 3e20 2469 676e 6f72 6554 696d 652c => $ignoreTime, │ │ │ │ +00018000: 0a09 0909 2020 2020 2020 272d 7072 696e .... '-prin │ │ │ │ +00018010: 7444 6570 7468 2720 3d3e 2024 7072 696e tDepth' => $prin │ │ │ │ +00018020: 7444 6570 7468 293b 0a0a 6d79 2024 7061 tDepth);..my $pa │ │ │ │ +00018030: 7246 6f72 6b43 6f70 7920 3d20 7061 7261 rForkCopy = para │ │ │ │ +00018040: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('- │ │ │ │ +00018050: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => │ │ │ │ +00018060: 246e 6f43 6f70 792c 0a09 0909 0920 2020 $noCopy,..... │ │ │ │ +00018070: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr │ │ │ │ +00018080: 4c6f 6729 3b0a 6d79 2024 7061 7246 6f72 Log);.my $parFor │ │ │ │ +00018090: 6b43 6f6d 7072 203d 2070 6172 616c 6c65 kCompr = paralle │ │ │ │ +000180a0: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max │ │ │ │ +000180b0: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no │ │ │ │ +000180c0: 436f 6d70 7265 7373 2c0a 0909 0909 2020 Compress,..... │ │ │ │ +000180d0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +000180e0: 7072 4c6f 6729 3b0a 6d79 2024 7061 7246 prLog);.my $parF │ │ │ │ +000180f0: 6f72 6b42 6c6f 636b 203d 2070 6172 616c orkBlock = paral │ │ │ │ +00018100: 6c65 6c46 6f72 6b2d 3e6e 6577 2827 2d6d lelFork->new('-m │ │ │ │ +00018110: 6178 5061 7261 6c6c 656c 2720 3d3e 2031 axParallel' => 1 │ │ │ │ +00018120: 2c0a 0909 0909 2020 2020 2027 2d70 724c ,..... '-prL │ │ │ │ +00018130: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +00018140: 0a23 2073 6967 6e61 6c20 6861 6e64 6c69 .# signal handli │ │ │ │ +00018150: 6e67 0a28 406d 6169 6e3a 3a63 6c65 616e ng.(@main::clean │ │ │ │ +00018160: 7570 2920 3d20 2020 2020 2023 204f 626a up) = # Obj │ │ │ │ +00018170: 656b 7465 2076 6572 66c3 bc67 6261 7220 ekte verf..gbar │ │ │ │ +00018180: 6d61 6368 656e 0a20 2020 2028 2470 724c machen. ($prL │ │ │ │ +00018190: 6f67 2c20 302c 2024 6f6c 6446 696c 656e og, 0, $oldFilen │ │ │ │ +000181a0: 616d 652c 2024 616b 7446 696c 656e 616d ame, $aktFilenam │ │ │ │ +000181b0: 652c 2024 7061 7246 6f72 6b43 6f70 792c e, $parForkCopy, │ │ │ │ +000181c0: 2024 7061 7246 6f72 6b43 6f6d 7072 2c20 $parForkCompr, │ │ │ │ +000181d0: 2474 6d70 6469 722c 0a20 2020 2020 2473 $tmpdir,. $s │ │ │ │ +000181e0: 6574 5265 7365 7444 6972 5469 6d65 7346 etResetDirTimesF │ │ │ │ +000181f0: 696c 6529 3b0a 2453 4947 7b49 4e54 7d20 ile);.$SIG{INT} │ │ │ │ +00018200: 3d20 5c26 636c 6561 6e75 703b 0a24 5349 = \&cleanup;.$SI │ │ │ │ +00018210: 477b 5445 524d 7d20 3d20 5c26 636c 6561 G{TERM} = \&clea │ │ │ │ +00018220: 6e75 703b 0a0a 0a6d 7920 2466 6966 6f43 nup;...my $fifoC │ │ │ │ +00018230: 6f70 7920 3d20 6669 666f 5175 6575 652d opy = fifoQueue- │ │ │ │ +00018240: 3e6e 6577 2827 2d6d 6178 4c65 6e67 7468 >new('-maxLength │ │ │ │ +00018250: 2720 3d3e 2024 7175 6575 6543 6f70 792c ' => $queueCopy, │ │ │ │ +00018260: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +00018270: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m │ │ │ │ +00018280: 7920 2466 6966 6f43 6f6d 7072 203d 2066 y $fifoCompr = f │ │ │ │ +00018290: 6966 6f51 7565 7565 2d3e 6e65 7728 272d ifoQueue->new('- │ │ │ │ +000182a0: 6d61 784c 656e 6774 6827 203d 3e20 2471 maxLength' => $q │ │ │ │ +000182b0: 7565 7565 436f 6d70 7265 7373 2c0a 0909 ueueCompress,... │ │ │ │ +000182c0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog' │ │ │ │ +000182d0: 203d 3e20 2470 724c 6f67 293b 0a6d 7920 => $prLog);.my │ │ │ │ +000182e0: 2466 6966 6f42 6c6f 636b 203d 2066 6966 $fifoBlock = fif │ │ │ │ +000182f0: 6f51 7565 7565 2d3e 6e65 7728 272d 6d61 oQueue->new('-ma │ │ │ │ +00018300: 784c 656e 6774 6827 203d 3e20 2471 7565 xLength' => $que │ │ │ │ +00018310: 7565 426c 6f63 6b2c 0a09 0909 2020 2020 ueBlock,.... │ │ │ │ +00018320: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +00018330: 7072 4c6f 6729 3b0a 0a6d 7920 2473 6368 prLog);..my $sch │ │ │ │ +00018340: 6564 756c 6572 203d 0a20 2020 2053 6368 eduler =. Sch │ │ │ │ +00018350: 6564 756c 6572 2d3e 6e65 7728 272d 616b eduler->new('-ak │ │ │ │ +00018360: 7446 696c 656e 616d 6527 203d 3e20 2461 tFilename' => $a │ │ │ │ +00018370: 6b74 4669 6c65 6e61 6d65 2c0a 0909 2020 ktFilename,... │ │ │ │ +00018380: 2027 2d6f 6c64 4669 6c65 6e61 6d65 2720 '-oldFilename' │ │ │ │ +00018390: 3d3e 2024 6f6c 6446 696c 656e 616d 652c => $oldFilename, │ │ │ │ +000183a0: 0a09 0920 2020 272d 666f 6c6c 6f77 4c69 ... '-followLi │ │ │ │ +000183b0: 6e6b 7327 203d 3e20 2466 6f6c 6c6f 774c nks' => $followL │ │ │ │ +000183c0: 696e 6b73 2c0a 0909 2020 2027 2d70 7265 inks,... '-pre │ │ │ │ +000183d0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries │ │ │ │ +000183e0: 2720 3d3e 2024 7072 6576 4261 636b 7570 ' => $prevBackup │ │ │ │ +000183f0: 4f77 6e53 6572 6965 732c 0a09 0920 2020 OwnSeries,... │ │ │ │ +00018400: 272d 7265 6164 4469 7241 6e64 4368 6563 '-readDirAndChec │ │ │ │ +00018410: 6b27 203d 3e20 2472 6561 6444 6972 416e k' => $readDirAn │ │ │ │ +00018420: 6443 6865 636b 2c0a 0909 2020 2027 2d73 dCheck,... '-s │ │ │ │ +00018430: 6574 5265 7365 7444 6972 5469 6d65 7327 etResetDirTimes' │ │ │ │ +00018440: 203d 3e20 2473 6574 5265 7365 7444 6972 => $setResetDir │ │ │ │ +00018450: 5469 6d65 732c 0a09 0920 2020 272d 7061 Times,... '-pa │ │ │ │ +00018460: 7246 6f72 6b43 6f70 7927 203d 3e20 2470 rForkCopy' => $p │ │ │ │ +00018470: 6172 466f 726b 436f 7079 2c0a 0909 2020 arForkCopy,... │ │ │ │ +00018480: 2027 2d66 6966 6f43 6f70 7927 203d 3e20 '-fifoCopy' => │ │ │ │ +00018490: 2466 6966 6f43 6f70 792c 0a09 0920 2020 $fifoCopy,... │ │ │ │ +000184a0: 272d 7061 7246 6f72 6b43 6f6d 7072 2720 '-parForkCompr' │ │ │ │ +000184b0: 3d3e 2024 7061 7246 6f72 6b43 6f6d 7072 => $parForkCompr │ │ │ │ +000184c0: 2c0a 0909 2020 2027 2d6e 6f43 6f6d 7072 ,... '-noCompr │ │ │ │ +000184d0: 6573 7327 203d 3e20 246e 6f43 6f6d 7072 ess' => $noCompr │ │ │ │ +000184e0: 6573 732c 0a09 0920 2020 272d 626c 6f63 ess,... '-bloc │ │ │ │ +000184f0: 6b43 6865 636b 5375 6d46 696c 6527 203d kCheckSumFile' = │ │ │ │ +00018500: 3e20 2462 6c6f 636b 4368 6563 6b53 756d > $blockCheckSum │ │ │ │ +00018510: 4669 6c65 2c0a 0909 2020 2027 2d70 6172 File,... '-par │ │ │ │ +00018520: 466f 726b 426c 6f63 6b27 203d 3e20 2470 ForkBlock' => $p │ │ │ │ +00018530: 6172 466f 726b 426c 6f63 6b2c 0a09 0920 arForkBlock,... │ │ │ │ +00018540: 2020 272d 6669 666f 426c 6f63 6b27 203d '-fifoBlock' = │ │ │ │ +00018550: 3e20 2466 6966 6f42 6c6f 636b 2c0a 0909 > $fifoBlock,... │ │ │ │ +00018560: 2020 2027 2d63 6f6d 7072 6573 7327 203d '-compress' = │ │ │ │ +00018570: 3e20 2463 6f6d 7072 6573 732c 0a09 0920 > $compress,... │ │ │ │ +00018580: 2020 272d 706f 7374 6669 7827 203d 3e20 '-postfix' => │ │ │ │ +00018590: 2470 6f73 7466 6978 2c0a 0909 2020 2027 $postfix,... ' │ │ │ │ +000185a0: 2d66 6966 6f43 6f6d 7072 2720 3d3e 2024 -fifoCompr' => $ │ │ │ │ +000185b0: 6669 666f 436f 6d70 722c 0a09 0920 2020 fifoCompr,... │ │ │ │ +000185c0: 272d 636f 6d70 7252 756c 6527 203d 3e20 '-comprRule' => │ │ │ │ +000185d0: 2463 6f6d 7072 5275 6c65 2c0a 0909 2020 $comprRule,... │ │ │ │ +000185e0: 2027 2d74 6172 6765 7444 6972 2720 3d3e '-targetDir' => │ │ │ │ +000185f0: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get │ │ │ │ +00018600: 416b 7444 6972 2829 2c0a 0909 2020 2027 AktDir(),... ' │ │ │ │ +00018610: 2d61 6b74 496e 666f 4669 6c65 2720 3d3e -aktInfoFile' => │ │ │ │ +00018620: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,. │ │ │ │ +00018630: 0909 2020 2027 2d72 6573 6574 4174 696d .. '-resetAtim │ │ │ │ +00018640: 6527 203d 3e20 2472 6573 6574 4174 696d e' => $resetAtim │ │ │ │ +00018650: 652c 0a09 0920 2020 272d 746d 7064 6972 e,... '-tmpdir │ │ │ │ +00018660: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,... │ │ │ │ +00018670: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +00018680: 7072 4c6f 672c 0a20 2020 2020 2020 2020 prLog,. │ │ │ │ +00018690: 2020 2020 2020 2020 2020 272d 6370 4973 '-cpIs │ │ │ │ +000186a0: 476e 7527 203d 3e20 2467 6e75 6370 2c0a Gnu' => $gnucp,. │ │ │ │ +000186b0: 0909 2020 2027 2d6c 696e 6b53 796d 6c69 .. '-linkSymli │ │ │ │ +000186c0: 6e6b 7327 203d 3e20 246c 696e 6b53 796d nks' => $linkSym │ │ │ │ +000186d0: 6c69 6e6b 732c 0a09 0920 2020 272d 6c61 links,... '-la │ │ │ │ +000186e0: 7465 4c69 6e6b 7327 203d 3e20 246c 6174 teLinks' => $lat │ │ │ │ +000186f0: 654c 696e 6b73 2c0a 0909 2020 2027 2d6c eLinks,... '-l │ │ │ │ +00018700: 6174 6543 6f6d 7072 6573 7327 203d 3e20 ateCompress' => │ │ │ │ +00018710: 246c 6174 6543 6f6d 7072 6573 732c 0a09 $lateCompress,.. │ │ │ │ +00018720: 0920 2020 272d 7375 7070 7265 7373 5761 . '-suppressWa │ │ │ │ +00018730: 726e 696e 6727 203d 3e20 5c25 7375 7070 rning' => \%supp │ │ │ │ +00018740: 7265 7373 5761 726e 696e 672c 0a20 2020 ressWarning,. │ │ │ │ +00018750: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00018760: 272d 7072 6573 6572 7665 5065 726d 7327 '-preservePerms' │ │ │ │ +00018770: 203d 3e20 2470 7265 7365 7276 6550 6572 => $preservePer │ │ │ │ +00018780: 6d73 2c0a 0909 2020 2027 2d64 6562 7567 ms,... '-debug │ │ │ │ +00018790: 4d6f 6465 2720 3d3e 2024 6465 6275 6729 Mode' => $debug) │ │ │ │ +000187a0: 3b0a 0a24 6d61 696e 3a3a 7469 6e79 5761 ;..$main::tinyWa │ │ │ │ +000187b0: 6974 5363 6865 6475 6c65 7220 3d20 7469 itScheduler = ti │ │ │ │ +000187c0: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler- │ │ │ │ +000187d0: 3e6e 6577 2827 2d66 6972 7374 4661 7374 >new('-firstFast │ │ │ │ +000187e0: 2720 3d3e 2031 2c0a 0909 0909 0909 2020 ' => 1,....... │ │ │ │ +000187f0: 272d 6d61 7857 6169 7454 696d 6527 203d '-maxWaitTime' = │ │ │ │ +00018800: 3e20 2e32 2c0a 0909 0909 0909 2020 272d > .2,....... '- │ │ │ │ +00018810: 6e6f 4f66 5761 6974 5374 6570 7327 203d noOfWaitSteps' = │ │ │ │ +00018820: 3e20 3130 302c 0a09 0909 0909 2020 2020 > 100,...... │ │ │ │ +00018830: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ │ +00018840: 3e20 2470 724c 6f67 2c0a 0909 0909 0920 > $prLog,...... │ │ │ │ +00018850: 2020 2020 2020 2020 2027 2d64 6562 7567 '-debug │ │ │ │ +00018860: 2720 3d3e 2024 6465 6275 6729 3b0a 7b0a ' => $debug);.{. │ │ │ │ +00018870: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f │ │ │ │ +00018880: 6f72 6561 6368 2024 6920 2830 2e2e 4063 oreach $i (0..@c │ │ │ │ +00018890: 6865 636b 4465 7669 6365 732d 3129 0a20 heckDevices-1). │ │ │ │ +000188a0: 2020 207b 0a09 2466 6966 6f42 6c6f 636b {..$fifoBlock │ │ │ │ +000188b0: 2d3e 6164 6428 272d 7661 6c75 6527 203d ->add('-value' = │ │ │ │ +000188c0: 3e20 5b27 6465 7669 6365 272c 2024 6368 > ['device', $ch │ │ │ │ +000188d0: 6563 6b44 6576 6963 6573 5b24 695d 2c0a eckDevices[$i],. │ │ │ │ +000188e0: 0909 0909 2020 2020 2024 6368 6563 6b44 .... $checkD │ │ │ │ +000188f0: 6576 6963 6573 4469 725b 2469 5d2c 2024 evicesDir[$i], $ │ │ │ │ +00018900: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$ │ │ │ │ +00018910: 695d 2c0a 0909 0909 2020 2020 2024 6368 i],..... $ch │ │ │ │ +00018920: 6563 6b44 6576 6963 6573 436f 6d70 725b eckDevicesCompr[ │ │ │ │ +00018930: 2469 5d2c 0a09 0909 0920 2020 2020 2463 $i],..... $c │ │ │ │ +00018940: 6865 636b 4465 7669 6365 7350 6172 616c heckDevicesParal │ │ │ │ +00018950: 6c65 6c5b 2469 5d5d 293b 0a20 2020 207d lel[$i]]);. } │ │ │ │ +00018960: 0a7d 0a0a 0a24 7363 6865 6475 6c65 722d .}...$scheduler- │ │ │ │ +00018970: 3e6e 6f72 6d61 6c4f 7065 7261 7469 6f6e >normalOperation │ │ │ │ +00018980: 2829 3b20 2020 2320 6469 6520 6569 6765 (); # die eige │ │ │ │ +00018990: 6e74 6c69 6368 6520 5665 7261 7262 6569 ntliche Verarbei │ │ │ │ +000189a0: 7475 6e67 0a0a 2473 6574 5265 7365 7444 tung..$setResetD │ │ │ │ +000189b0: 6972 5469 6d65 732d 3e77 7269 7465 5469 irTimes->writeTi │ │ │ │ +000189c0: 6d65 7328 293b 2023 2073 6574 2061 7469 mes(); # set ati │ │ │ │ +000189d0: 6d65 2c20 6d74 696d 6520 666f 7220 6469 me, mtime for di │ │ │ │ +000189e0: 7265 6374 6f72 6965 730a 0a24 616b 7446 rectories..$aktF │ │ │ │ +000189f0: 696c 656e 616d 652d 3e63 6c6f 7365 496e ilename->closeIn │ │ │ │ +00018a00: 666f 4669 6c65 2829 3b0a 246f 6c64 4669 foFile();.$oldFi │ │ │ │ +00018a10: 6c65 6e61 6d65 2d3e 7265 6164 4442 4d46 lename->readDBMF │ │ │ │ +00018a20: 696c 6573 5369 7a65 2829 3b0a 246f 6c64 ilesSize();.$old │ │ │ │ +00018a30: 4669 6c65 6e61 6d65 2d3e 6465 6c44 424d Filename->delDBM │ │ │ │ +00018a40: 4669 6c65 7328 293b 2020 2020 2023 2064 Files(); # d │ │ │ │ +00018a50: 626d 2066 696c 6573 206c c3b6 7363 6865 bm files l..sche │ │ │ │ +00018a60: 6e0a 0a23 0a23 206a 6574 7a74 206e 6f63 n..#.# jetzt noc │ │ │ │ +00018a70: 6820 616c 7465 2042 6163 6b75 7073 206c h alte Backups l │ │ │ │ +00018a80: c3b6 7363 6865 6e0a 230a 2464 656c 4f6c ..schen.#.$delOl │ │ │ │ +00018a90: 642d 3e64 656c 6574 6542 6163 6b75 7073 d->deleteBackups │ │ │ │ +00018aa0: 2829 3b0a 0a0a 230a 2320 706f 7374 636f ();...#.# postco │ │ │ │ +00018ab0: 6d6d 616e 6420 6175 7366 c3bc 6872 656e mmand ausf..hren │ │ │ │ +00018ac0: 0a23 0a0a 6966 2028 6465 6669 6e65 6420 .#..if (defined │ │ │ │ +00018ad0: 2470 6f73 7463 6f6d 6d61 6e64 290a 7b0a $postcommand).{. │ │ │ │ +00018ae0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00018af0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ │ +00018b00: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => │ │ │ │ +00018b10: 5b22 7374 6172 7469 6e67 2070 6f73 7420 ["starting post │ │ │ │ +00018b20: 636f 6d6d 616e 6420 3c40 2470 6f73 7463 command <@$postc │ │ │ │ +00018b30: 6f6d 6d61 6e64 3e20 2e2e 2e22 5d29 3b0a ommand> ..."]);. │ │ │ │ +00018b40: 2020 2020 6d79 2028 2470 6f73 7443 6f6d my ($postCom │ │ │ │ +00018b50: 6d2c 2040 706f 7374 5061 7261 6d29 203d m, @postParam) = │ │ │ │ +00018b60: 2028 4024 706f 7374 636f 6d6d 616e 6429 (@$postcommand) │ │ │ │ +00018b70: 3b0a 2020 2020 6d79 2024 706f 7374 636f ;. my $postco │ │ │ │ +00018b80: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new │ │ │ │ +00018b90: 2827 2d65 7865 6327 203d 3e20 2470 6f73 ('-exec' => $pos │ │ │ │ +00018ba0: 7443 6f6d 6d2c 0a09 0909 2020 2020 2020 tComm,.... │ │ │ │ +00018bb0: 272d 7061 7261 6d27 203d 3e20 5c40 706f '-param' => \@po │ │ │ │ +00018bc0: 7374 5061 7261 6d2c 0a09 0909 2020 2020 stParam,.... │ │ │ │ +00018bd0: 2020 272d 776f 726b 696e 6744 6972 2720 '-workingDir' │ │ │ │ +00018be0: 3d3e 2027 2e27 2c0a 0909 0920 2020 2020 => '.',.... │ │ │ │ +00018bf0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ │ +00018c00: 2022 2474 6d70 6469 722f 706f 7374 636f "$tmpdir/postco │ │ │ │ +00018c10: 6d6d 2d22 2c0a 0909 0920 2020 2020 2027 mm-",.... ' │ │ │ │ +00018c20: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ │ +00018c30: 6729 3b0a 2020 2020 2470 6f73 7463 6f2d g);. $postco- │ │ │ │ +00018c40: 3e77 6169 7428 293b 0a20 2020 206d 7920 >wait();. my │ │ │ │ +00018c50: 246f 7574 203d 2024 706f 7374 636f 2d3e $out = $postco-> │ │ │ │ +00018c60: 6765 7453 5444 4f55 5428 293b 0a20 2020 getSTDOUT();. │ │ │ │ +00018c70: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00018c80: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ │ +00018c90: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => ["S │ │ │ │ +00018ca0: 5444 4f55 5420 6f66 203c 4024 706f 7374 TDOUT of <@$post │ │ │ │ +00018cb0: 636f 6d6d 616e 643e 3a22 2c20 4024 6f75 command>:", @$ou │ │ │ │ +00018cc0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out > │ │ │ │ +00018cd0: 2030 293b 0a20 2020 2024 6f75 7420 3d20 0);. $out = │ │ │ │ +00018ce0: 2470 6f73 7463 6f2d 3e67 6574 5354 4445 $postco->getSTDE │ │ │ │ +00018cf0: 5252 2829 3b0a 2020 2020 2470 724c 6f67 RR();. $prLog │ │ │ │ +00018d00: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00018d10: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ │ +00018d20: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => ["STDERR o │ │ │ │ +00018d30: 6620 3c40 2470 6f73 7463 6f6d 6d61 6e64 f <@$postcommand │ │ │ │ +00018d40: 3e3a 222c 2040 246f 7574 5d29 0a09 6966 >:", @$out])..if │ │ │ │ +00018d50: 2028 4024 6f75 7420 3e20 3029 3b0a 0a20 (@$out > 0);.. │ │ │ │ +00018d60: 2020 206d 7920 2473 7461 7475 7320 3d20 my $status = │ │ │ │ +00018d70: 2470 6f73 7463 6f2d 3e67 6574 2827 2d77 $postco->get('-w │ │ │ │ +00018d80: 6861 7427 203d 3e20 2773 7461 7475 7327 hat' => 'status' │ │ │ │ +00018d90: 293b 0a20 2020 2069 6620 2824 7374 6174 );. if ($stat │ │ │ │ +00018da0: 7573 203d 3d20 3029 0a20 2020 207b 0a09 us == 0). {.. │ │ │ │ +00018db0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00018dc0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00018dd0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ │ +00018de0: 0909 2020 2020 2020 5b22 706f 7374 2063 .. ["post c │ │ │ │ +00018df0: 6f6d 6d61 6e64 203c 4024 706f 7374 636f ommand <@$postco │ │ │ │ +00018e00: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished │ │ │ │ +00018e10: 7769 7468 2073 7461 7475 7320 3022 5d29 with status 0"]) │ │ │ │ +00018e20: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00018e30: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ │ +00018e40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00018e50: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +00018e60: 7374 7227 203d 3e20 5b22 706f 7374 2063 str' => ["post c │ │ │ │ +00018e70: 6f6d 6d61 6e64 203c 4024 706f 7374 636f ommand <@$postco │ │ │ │ +00018e80: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished │ │ │ │ +00018e90: 2220 2e0a 0909 0909 2022 7769 7468 2073 " ...... "with s │ │ │ │ +00018ea0: 7461 7475 7320 2473 7461 7475 7322 5d29 tatus $status"]) │ │ │ │ +00018eb0: 3b0a 0975 6e6c 696e 6b20 246c 6f63 6b46 ;..unlink $lockF │ │ │ │ +00018ec0: 696c 6520 6966 2024 6c6f 636b 4669 6c65 ile if $lockFile │ │ │ │ +00018ed0: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. } │ │ │ │ +00018ee0: 0a7d 0a0a 2320 6c6f 636b 2066 696c 6520 .}..# lock file │ │ │ │ +00018ef0: 6cc3 b673 6368 656e 0a69 6620 2824 6c6f l..schen.if ($lo │ │ │ │ +00018f00: 636b 4669 6c65 2061 6e64 2024 756e 6c6f ckFile and $unlo │ │ │ │ +00018f10: 636b 4265 666f 7265 4465 6c29 0a7b 0a20 ckBeforeDel).{. │ │ │ │ +00018f20: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00018f30: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ │ +00018f40: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ │ +00018f50: 2272 656d 6f76 696e 6720 6c6f 636b 2066 "removing lock f │ │ │ │ +00018f60: 696c 6520 3c24 6c6f 636b 4669 6c65 3e22 ile <$lockFile>" │ │ │ │ +00018f70: 5d29 3b0a 2020 2020 756e 6c69 6e6b 2024 ]);. unlink $ │ │ │ │ +00018f80: 6c6f 636b 4669 6c65 3b0a 2020 2020 246c lockFile;. $l │ │ │ │ +00018f90: 6f63 6b46 696c 6520 3d20 756e 6465 663b ockFile = undef; │ │ │ │ +00018fa0: 0a7d 0a0a 0a23 2047 72c3 b6c3 9f65 2076 .}...# Gr....e v │ │ │ │ +00018fb0: 6f6e 202e 6d64 3543 6865 636b 5375 6d2d on .md5CheckSum- │ │ │ │ +00018fc0: 4461 7465 6920 6e6f 6368 2066 c3bc 7220 Datei noch f..r │ │ │ │ +00018fd0: 5374 6174 6973 7469 6b20 6265 72c3 bc63 Statistik ber..c │ │ │ │ +00018fe0: 6b73 6963 6874 6967 656e 0a24 6d61 696e ksichtigen.$main │ │ │ │ +00018ff0: 3a3a 7374 6174 2d3e 7365 7453 697a 654d ::stat->setSizeM │ │ │ │ +00019000: 4435 4368 6563 6b53 756d 2824 6164 6d69 D5CheckSum($admi │ │ │ │ +00019010: 6e44 6972 732d 3e67 6574 416b 7449 6e66 nDirs->getAktInf │ │ │ │ +00019020: 6f46 696c 6528 292c 0a09 0909 0924 636f oFile(),.....$co │ │ │ │ +00019030: 6d70 7265 7373 4d44 3546 696c 6529 3b0a mpressMD5File);. │ │ │ │ +00019040: 246d 6169 6e3a 3a73 7461 742d 3e73 6574 $main::stat->set │ │ │ │ +00019050: 5573 6564 5369 7a65 5175 6575 6573 2824 UsedSizeQueues($ │ │ │ │ +00019060: 6669 666f 436f 7079 2d3e 6765 744d 6178 fifoCopy->getMax │ │ │ │ +00019070: 5573 6564 4c65 6e67 7468 2829 2c0a 0909 UsedLength(),... │ │ │ │ +00019080: 0920 2020 2020 2020 2466 6966 6f43 6f6d . $fifoCom │ │ │ │ +00019090: 7072 2d3e 6765 744d 6178 5573 6564 4c65 pr->getMaxUsedLe │ │ │ │ +000190a0: 6e67 7468 2829 293b 0a24 6d61 696e 3a3a ngth());.$main:: │ │ │ │ +000190b0: 7374 6174 2d3e 7072 696e 7428 272d 6578 stat->print('-ex │ │ │ │ +000190c0: 5479 7065 7327 203d 3e20 5c25 6578 5479 Types' => \%exTy │ │ │ │ +000190d0: 7065 7329 3b0a 0a23 206c 6f63 6b20 6669 pes);..# lock fi │ │ │ │ +000190e0: 6c65 206c c3b6 7363 6865 6e0a 6966 2028 le l..schen.if ( │ │ │ │ +000190f0: 246c 6f63 6b46 696c 6529 0a7b 0a20 2020 $lockFile).{. │ │ │ │ +00019100: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00019110: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ │ +00019120: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => ["r │ │ │ │ +00019130: 656d 6f76 696e 6720 6c6f 636b 2066 696c emoving lock fil │ │ │ │ +00019140: 6520 3c24 6c6f 636b 4669 6c65 3e22 5d29 e <$lockFile>"]) │ │ │ │ +00019150: 3b0a 2020 2020 756e 6c69 6e6b 2024 6c6f ;. unlink $lo │ │ │ │ +00019160: 636b 4669 6c65 3b0a 7d0a 0a69 6620 2824 ckFile;.}..if ($ │ │ │ │ +00019170: 636f 6d70 7265 7373 4c6f 6749 6e42 6163 compressLogInBac │ │ │ │ +00019180: 6b75 7044 6972 2920 2020 2020 2020 2020 kupDir) │ │ │ │ +00019190: 2020 2020 2320 6c6f 6720 6669 6c65 2069 # log file i │ │ │ │ +000191a0: 6d20 4261 636b 7570 4469 7220 6e6f 6368 m BackupDir noch │ │ │ │ +000191b0: 0a7b 2020 2020 2020 2020 2020 2020 2020 .{ │ │ │ │ +000191c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000191d0: 2020 2020 2020 2020 2020 2320 6b6f 6d70 # komp │ │ │ │ +000191e0: 7269 6d69 6572 656e 0a20 2020 2024 7072 rimieren. $pr │ │ │ │ +000191f0: 4c6f 672d 3e73 7562 2827 2d70 724c 6f67 Log->sub('-prLog │ │ │ │ +00019200: 7327 203d 3e20 5b24 7072 4c6f 6732 5d29 s' => [$prLog2]) │ │ │ │ +00019210: 3b0a 2020 2020 6d79 2024 636f 6d70 7265 ;. my $compre │ │ │ │ +00019220: 7373 4c6f 6720 3d20 666f 726b 5072 6f63 ssLog = forkProc │ │ │ │ +00019230: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' => │ │ │ │ +00019240: 2027 627a 6970 3227 2c0a 0909 0909 2020 'bzip2',..... │ │ │ │ +00019250: 2020 272d 7061 7261 6d27 203d 3e20 5b24 '-param' => [$ │ │ │ │ +00019260: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +00019270: 6c65 4e61 6d65 5d2c 0a09 0909 0920 2020 leName],..... │ │ │ │ +00019280: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ │ +00019290: 2022 2474 6d70 6469 722f 636f 6d70 724c "$tmpdir/comprL │ │ │ │ +000192a0: 6f67 2d22 2c0a 0909 0909 2020 2020 272d og-",..... '- │ │ │ │ +000192b0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ │ +000192c0: 293b 0a20 2020 2024 636f 6d70 7265 7373 );. $compress │ │ │ │ +000192d0: 4c6f 672d 3e77 6169 7428 293b 0a7d 0a0a Log->wait();.}.. │ │ │ │ +000192e0: 6d79 2024 656e 6320 3d20 2470 724c 6f67 my $enc = $prLog │ │ │ │ +000192f0: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('- │ │ │ │ +00019300: 6b69 6e64 2720 3d3e 2027 5727 293b 0a6d kind' => 'W');.m │ │ │ │ +00019310: 7920 2453 203d 2024 656e 6320 3e20 3120 y $S = $enc > 1 │ │ │ │ +00019320: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL │ │ │ │ +00019330: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00019340: 2720 3d3e 2027 5727 2c0a 0920 2020 2020 ' => 'W',.. │ │ │ │ +00019350: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => ["-- │ │ │ │ +00019360: 2465 6e63 2057 4152 4e49 4e47 2453 204f $enc WARNING$S O │ │ │ │ +00019370: 4343 5552 5245 4420 4455 5249 4e47 2054 CCURRED DURING T │ │ │ │ +00019380: 4845 2042 4143 4b55 5021 202d 2d22 5d29 HE BACKUP! --"]) │ │ │ │ +00019390: 0a20 2020 2069 6620 2465 6e63 3b0a 0a24 . if $enc;..$ │ │ │ │ +000193a0: 656e 6320 3d20 2470 724c 6f67 2d3e 656e enc = $prLog->en │ │ │ │ +000193b0: 636f 756e 7465 7265 6428 272d 6b69 6e64 countered('-kind │ │ │ │ +000193c0: 2720 3d3e 2027 4527 293b 0a24 5320 3d20 ' => 'E');.$S = │ │ │ │ +000193d0: 2465 6e63 203e 2031 203f 2027 5327 203a $enc > 1 ? 'S' : │ │ │ │ +000193e0: 2027 273b 0a24 7072 4c6f 672d 3e70 7269 '';.$prLog->pri │ │ │ │ +000193f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00019400: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ │ +00019410: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => ["-- $enc ER │ │ │ │ +00019420: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D │ │ │ │ +00019430: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP │ │ │ │ +00019440: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --"]). if $ │ │ │ │ +00019450: 656e 633b 0a0a 2470 724c 6f67 2d3e 7072 enc;..$prLog->pr │ │ │ │ +00019460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00019470: 4927 2c0a 0920 2020 2020 2027 2d73 7472 I',.. '-str │ │ │ │ +00019480: 2720 3d3e 205b 2273 796e 6369 6e67 202e ' => ["syncing . │ │ │ │ +00019490: 2e2e 225d 293b 0a73 7973 7465 6d20 222f .."]);.system "/ │ │ │ │ +000194a0: 6269 6e2f 7379 6e63 223b 0a0a 6966 2028 bin/sync";..if ( │ │ │ │ +000194b0: 2470 724c 6f67 2d3e 656e 636f 756e 7465 $prLog->encounte │ │ │ │ +000194c0: 7265 6428 272d 6b69 6e64 2720 3d3e 2022 red('-kind' => " │ │ │ │ +000194d0: 4522 2929 0a7b 0a20 2020 2024 7072 4c6f E")).{. $prLo │ │ │ │ +000194e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000194f0: 203d 3e20 275a 272c 0a09 0920 2027 2d73 => 'Z',... '-s │ │ │ │ +00019500: 7472 2720 3d3e 205b 2262 6163 6b69 6e67 tr' => ["backing │ │ │ │ +00019510: 2075 7020 6469 7265 6374 6f72 7920 3c24 up directory <$ │ │ │ │ +00019520: 736f 7572 6365 4469 723e 2074 6f20 3c22 sourceDir> to <" │ │ │ │ +00019530: 202e 0a09 0909 2020 2020 2024 6164 6d69 ..... $admi │ │ │ │ +00019540: 6e44 6972 732d 3e67 6574 416b 7444 6972 nDirs->getAktDir │ │ │ │ +00019550: 2829 202e 2022 3e22 5d29 3b0a 2020 2020 () . ">"]);. │ │ │ │ +00019560: 6578 6974 2031 3b0a 7d0a 656c 7365 0a7b exit 1;.}.else.{ │ │ │ │ +00019570: 0a20 2020 2069 6620 2824 6c69 6e6b 546f . if ($linkTo │ │ │ │ +00019580: 5265 6365 6e74 290a 2020 2020 7b0a 0969 Recent). {..i │ │ │ │ +00019590: 6620 282d 6c20 2224 7461 7267 6574 4469 f (-l "$targetDi │ │ │ │ +000195a0: 722f 246c 696e 6b54 6f52 6563 656e 7422 r/$linkToRecent" │ │ │ │ +000195b0: 290a 097b 0a09 2020 2020 756e 6c69 6e6b )..{.. unlink │ │ │ │ +000195c0: 2022 2474 6172 6765 7444 6972 2f24 6c69 "$targetDir/$li │ │ │ │ +000195d0: 6e6b 546f 5265 6365 6e74 223b 0a09 7d0a nkToRecent";..}. │ │ │ │ +000195e0: 0965 6c73 6966 2028 2d65 2022 2474 6172 .elsif (-e "$tar │ │ │ │ +000195f0: 6765 7444 6972 2f24 6c69 6e6b 546f 5265 getDir/$linkToRe │ │ │ │ +00019600: 6365 6e74 2229 0a09 7b0a 0920 2020 2024 cent")..{.. $ │ │ │ │ +00019610: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00019620: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ │ +00019630: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ │ +00019640: 6e6e 6f74 2064 656c 6574 6520 3c24 6c69 nnot delete <$li │ │ │ │ +00019650: 6e6b 546f 5265 6365 6e74 3e20 2220 2e0a nkToRecent> " .. │ │ │ │ +00019660: 0909 0909 2020 2020 2022 286f 7074 696f .... "(optio │ │ │ │ +00019670: 6e20 6c69 6e6b 546f 5265 6365 6e74 293a n linkToRecent): │ │ │ │ +00019680: 2022 202e 0a09 0909 0920 2020 2020 2269 " ...... "i │ │ │ │ +00019690: 7320 6e6f 7420 6120 7379 6d62 6f6c 6963 s not a symbolic │ │ │ │ +000196a0: 206c 696e 6b22 5d29 3b0a 0920 2020 2024 link"]);.. $ │ │ │ │ +000196b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +000196c0: 696e 6427 203d 3e20 275a 272c 0a09 0909 ind' => 'Z',.... │ │ │ │ +000196d0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => ["ba │ │ │ │ +000196e0: 636b 696e 6720 7570 2064 6972 6563 746f cking up directo │ │ │ │ +000196f0: 7279 203c 2473 6f75 7263 6544 6972 3e20 ry <$sourceDir> │ │ │ │ +00019700: 746f 203c 2220 2e0a 0909 0909 2020 2020 to <" ...... │ │ │ │ +00019710: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get │ │ │ │ +00019720: 416b 7444 6972 2829 202e 2022 3e22 5d29 AktDir() . ">"]) │ │ │ │ +00019730: 3b0a 0920 2020 2065 7869 7420 303b 0a09 ;.. exit 0;.. │ │ │ │ +00019740: 7d0a 0a09 6d79 2028 245f 642c 2024 6c69 }...my ($_d, $li │ │ │ │ +00019750: 6e6b 2920 3d20 263a 3a73 706c 6974 4669 nk) = &::splitFi │ │ │ │ +00019760: 6c65 4469 7228 2461 646d 696e 4469 7273 leDir($adminDirs │ │ │ │ +00019770: 2d3e 6765 7441 6b74 4469 7228 2929 3b0a ->getAktDir());. │ │ │ │ +00019780: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00019790: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ │ +000197a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +000197b0: 205b 2263 616e 6e6f 7420 6372 6561 7465 ["cannot create │ │ │ │ +000197c0: 2073 796d 6c69 6e6b 206c 696e 6b54 6f52 symlink linkToR │ │ │ │ +000197d0: 6563 656e 7420 2220 2e0a 0909 0909 2022 ecent " ...... " │ │ │ │ +000197e0: 3c24 6c69 6e6b 546f 5265 6365 6e74 3e22 <$linkToRecent>" │ │ │ │ +000197f0: 5d29 0a09 2020 2020 756e 6c65 7373 2073 ]).. unless s │ │ │ │ +00019800: 796d 6c69 6e6b 2024 6c69 6e6b 2c20 2224 ymlink $link, "$ │ │ │ │ +00019810: 7461 7267 6574 4469 722f 246c 696e 6b54 targetDir/$linkT │ │ │ │ +00019820: 6f52 6563 656e 7422 3b0a 2020 2020 7d0a oRecent";. }. │ │ │ │ +00019830: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00019840: 6e74 2827 2d6b 696e 6427 203d 3e20 275a nt('-kind' => 'Z │ │ │ │ +00019850: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00019860: 205b 2262 6163 6b69 6e67 2075 7020 6469 ["backing up di │ │ │ │ +00019870: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source │ │ │ │ +00019880: 4469 723e 2074 6f20 3c22 202e 0a09 0909 Dir> to <" ..... │ │ │ │ +00019890: 2020 2020 2024 6164 6d69 6e44 6972 732d $adminDirs- │ │ │ │ +000198a0: 3e67 6574 416b 7444 6972 2829 202e 2022 >getAktDir() . " │ │ │ │ +000198b0: 3e22 5d29 3b0a 2020 2020 6578 6974 2030 >"]);. exit 0 │ │ │ │ +000198c0: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +000198d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000198e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000198f0: 2323 2323 2323 2323 0a73 7562 2063 6c65 ########.sub cle │ │ │ │ +00019900: 616e 7570 0a7b 0a20 2020 206d 7920 2473 anup.{. my $s │ │ │ │ +00019910: 6967 6e61 6d65 203d 2073 6869 6674 3b0a igname = shift;. │ │ │ │ +00019920: 2020 2020 6d79 2024 6578 6974 203d 2028 my $exit = ( │ │ │ │ +00019930: 7368 6966 7428 2920 7c7c 2031 293b 0a0a shift() || 1);.. │ │ │ │ +00019940: 2020 2020 6d79 2028 2470 724c 6f67 2c20 my ($prLog, │ │ │ │ +00019950: 246f 6e6c 794c 6174 654c 696e 6b43 6865 $onlyLateLinkChe │ │ │ │ +00019960: 636b 2c20 246f 6c64 4669 6c65 6e61 6d65 ck, $oldFilename │ │ │ │ +00019970: 2c20 2461 6b74 4669 6c65 6e61 6d65 2c20 , $aktFilename, │ │ │ │ +00019980: 2470 6172 466f 726b 436f 7079 2c0a 0924 $parForkCopy,..$ │ │ │ │ +00019990: 7061 7246 6f72 6b43 6f6d 7072 2c20 2474 parForkCompr, $t │ │ │ │ +000199a0: 6d70 6469 722c 2024 7365 7452 6573 6574 mpdir, $setReset │ │ │ │ +000199b0: 4469 7254 696d 6573 4669 6c65 2920 3d20 DirTimesFile) = │ │ │ │ +000199c0: 2840 6d61 696e 3a3a 636c 6561 6e75 7029 (@main::cleanup) │ │ │ │ +000199d0: 3b0a 0a20 2020 2024 6d61 696e 3a3a 656e ;.. $main::en │ │ │ │ +000199e0: 644f 6653 746f 7265 4261 636b 7570 203d dOfStoreBackup = │ │ │ │ +000199f0: 2031 3b0a 0a20 2020 2069 6620 2824 7369 1;.. if ($si │ │ │ │ +00019a00: 676e 616d 6529 0a20 2020 207b 0a20 2020 gname). {. │ │ │ │ +00019a10: 2020 2020 2024 7072 4c6f 672d 3e70 7269 $prLog->pri │ │ │ │ +00019a20: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00019a30: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. │ │ │ │ +00019a40: 2020 2020 2020 2020 2027 2d73 7472 2720 '-str' │ │ │ │ +00019a50: 3d3e 205b 2263 6175 6768 7420 7369 676e => ["caught sign │ │ │ │ +00019a60: 616c 2024 7369 676e 616d 652c 2074 6572 al $signame, ter │ │ │ │ +00019a70: 6d69 6e61 7469 6e67 225d 293b 0a20 2020 minating"]);. │ │ │ │ +00019a80: 207d 0a0a 2020 2020 756e 6c65 7373 2028 }.. unless ( │ │ │ │ +00019a90: 246f 6e6c 794c 6174 654c 696e 6b43 6865 $onlyLateLinkChe │ │ │ │ +00019aa0: 636b 290a 2020 2020 7b0a 0923 2044 6174 ck). {..# Dat │ │ │ │ +00019ab0: 6569 656e 2073 6368 6c69 65c3 9f65 6e2c eien schlie..en, │ │ │ │ +00019ac0: 2061 7566 72c3 a475 6d65 6e0a 0924 616b aufr..umen..$ak │ │ │ │ +00019ad0: 7446 696c 656e 616d 652d 3e64 656c 496e tFilename->delIn │ │ │ │ +00019ae0: 666f 4669 6c65 2829 3b0a 0924 6f6c 6446 foFile();..$oldF │ │ │ │ +00019af0: 696c 656e 616d 652d 3e64 656c 4442 4d46 ilename->delDBMF │ │ │ │ +00019b00: 696c 6573 2829 3b20 2020 2020 2320 6462 iles(); # db │ │ │ │ +00019b10: 6d20 6669 6c65 7320 6cc3 b673 6368 656e m files l..schen │ │ │ │ +00019b20: 0a09 756e 6c69 6e6b 2024 7365 7452 6573 ..unlink $setRes │ │ │ │ +00019b30: 6574 4469 7254 696d 6573 4669 6c65 3b0a etDirTimesFile;. │ │ │ │ +00019b40: 0a09 2320 6c61 7566 656e 6465 2050 726f ..# laufende Pro │ │ │ │ +00019b50: 7a65 7373 6520 6162 7363 6869 65c3 9f65 zesse abschie..e │ │ │ │ +00019b60: 6e0a 0924 7061 7246 6f72 6b43 6f70 792d n..$parForkCopy- │ │ │ │ +00019b70: 3e73 6967 6e61 6c28 272d 7661 6c75 6527 >signal('-value' │ │ │ │ +00019b80: 203d 3e20 3229 3b0a 0924 7061 7246 6f72 => 2);..$parFor │ │ │ │ +00019b90: 6b43 6f6d 7072 2d3e 7369 676e 616c 2827 kCompr->signal(' │ │ │ │ +00019ba0: 2d76 616c 7565 2720 3d3e 2032 293b 0a0a -value' => 2);.. │ │ │ │ +00019bb0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00019bc0: 2d6b 696e 6427 203d 3e20 275a 272c 0a09 -kind' => 'Z',.. │ │ │ │ +00019bd0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00019be0: 205b 2262 6163 6b69 6e67 2075 7020 6469 ["backing up di │ │ │ │ +00019bf0: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source │ │ │ │ +00019c00: 4469 723e 225d 293b 0a20 2020 207d 0a0a Dir>"]);. }.. │ │ │ │ +00019c10: 2020 2020 6578 6974 2024 6578 6974 3b0a exit $exit;. │ │ │ │ +00019c20: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +00019c30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00019c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00019c50: 2323 2323 2323 0a23 0a23 2065 7863 6570 ######.#.# excep │ │ │ │ +00019c60: 7469 6f6e 2d4c 6973 7465 20c3 bc62 6572 tion-Liste ..ber │ │ │ │ +00019c70: 7072 c3bc 6665 6e20 756e 6420 6576 616c pr..fen und eval │ │ │ │ +00019c80: 7569 6572 656e 0a23 0a73 7562 2065 7661 uieren.#.sub eva │ │ │ │ +00019c90: 6c45 7863 6570 7469 6f6e 4c69 7374 0a7b lExceptionList.{ │ │ │ │ +00019ca0: 0a20 2020 206d 7920 2465 7863 6570 7444 . my $exceptD │ │ │ │ +00019cb0: 6972 7320 3d20 7368 6966 743b 2020 2023 irs = shift; # │ │ │ │ +00019cc0: 2050 6f69 6e74 6572 2061 7566 204c 6973 Pointer auf Lis │ │ │ │ +00019cd0: 7465 206d 6974 2041 7573 6e61 686d 652d te mit Ausnahme- │ │ │ │ +00019ce0: 4469 7265 6374 6f72 6965 730a 2020 2020 Directories. │ │ │ │ +00019cf0: 6d79 2024 736f 7572 6365 4469 7220 3d20 my $sourceDir = │ │ │ │ +00019d00: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e │ │ │ │ +00019d10: 7863 6570 7444 6972 203d 2073 6869 6674 xceptDir = shift │ │ │ │ +00019d20: 3b0a 2020 2020 6d79 2024 6578 636c 7564 ;. my $exclud │ │ │ │ +00019d30: 696e 6720 3d20 7368 6966 743b 0a20 2020 ing = shift;. │ │ │ │ +00019d40: 206d 7920 2470 724c 6f67 203d 2073 6869 my $prLog = shi │ │ │ │ +00019d50: 6674 3b0a 0a20 2020 206d 7920 2465 3b0a ft;.. my $e;. │ │ │ │ +00019d60: 2020 2020 6d79 2024 666c 6167 203d 2030 my $flag = 0 │ │ │ │ +00019d70: 3b0a 2020 2020 6d79 2028 4061 6c6c 4578 ;. my (@allEx │ │ │ │ +00019d80: 6365 7074 4469 7273 293b 0a20 2020 206d ceptDirs);. m │ │ │ │ +00019d90: 7920 246b 696e 6420 3d20 2463 6f6e 7445 y $kind = $contE │ │ │ │ +00019da0: 7863 6570 7444 6972 7345 7272 203f 2027 xceptDirsErr ? ' │ │ │ │ +00019db0: 5727 203a 2027 4527 3b0a 0a20 2020 2066 W' : 'E';.. f │ │ │ │ +00019dc0: 6f72 6561 6368 2024 6520 2840 2465 7863 oreach $e (@$exc │ │ │ │ +00019dd0: 6570 7444 6972 7329 0a20 2020 207b 0a09 eptDirs). {.. │ │ │ │ +00019de0: 6d79 2024 5f65 203d 2022 2473 6f75 7263 my $_e = "$sourc │ │ │ │ +00019df0: 6544 6972 2f24 6522 3b0a 0924 5f65 203d eDir/$e";..$_e = │ │ │ │ +00019e00: 7e20 732f 285c 7329 2f5c 5c24 312f 673b ~ s/(\s)/\\$1/g; │ │ │ │ +00019e10: 0a09 6d79 2028 4061 2920 3d20 2824 5f65 ..my (@a) = ($_e │ │ │ │ +00019e20: 293b 0a09 6d79 2028 4065 2920 3d20 3c40 );..my (@e) = <@ │ │ │ │ +00019e30: 613e 3b20 2020 2020 2020 2023 2077 696c a>; # wil │ │ │ │ +00019e40: 6463 6172 6473 2061 7566 6cc3 b673 656e dcards aufl..sen │ │ │ │ +00019e50: 2c20 7265 6368 7473 206d 7573 7320 4172 , rechts muss Ar │ │ │ │ +00019e60: 7261 7920 7374 6568 656e 0a09 756e 6c65 ray stehen..unle │ │ │ │ +00019e70: 7373 2028 4065 2920 2020 2020 2020 2020 ss (@e) │ │ │ │ +00019e80: 2020 2023 2074 6869 7320 6861 7070 656e # this happen │ │ │ │ +00019e90: 7320 6966 2070 6174 6820 646f 6573 206e s if path does n │ │ │ │ +00019ea0: 6f74 2065 7869 7374 0a09 7b0a 0920 2020 ot exist..{.. │ │ │ │ +00019eb0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00019ec0: 2d6b 696e 6427 203d 3e20 246b 696e 642c -kind' => $kind, │ │ │ │ +00019ed0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ │ +00019ee0: 0909 0920 205b 223c 2473 6f75 7263 6544 ... ["<$sourceD │ │ │ │ +00019ef0: 6972 2f24 653e 3a20 7061 7468 206f 7220 ir/$e>: path or │ │ │ │ +00019f00: 7061 7474 6572 6e20 6f66 2024 6578 6365 pattern of $exce │ │ │ │ +00019f10: 7074 4469 7220 2220 2e0a 0909 0920 2020 ptDir " ..... │ │ │ │ +00019f20: 2264 6f65 7320 6e6f 7420 6578 6973 7422 "does not exist" │ │ │ │ +00019f30: 5d29 3b0a 0920 2020 2024 666c 6167 203d ]);.. $flag = │ │ │ │ +00019f40: 2031 3b0a 097d 0a09 2840 6129 203d 2028 1;..}..(@a) = ( │ │ │ │ +00019f50: 293b 2020 2020 2020 2020 2020 2020 2023 ); # │ │ │ │ +00019f60: 2077 6972 6420 6a65 747a 7420 7a75 6d20 wird jetzt zum │ │ │ │ +00019f70: 4175 6673 616d 6d65 6c6e 2076 6572 7765 Aufsammeln verwe │ │ │ │ +00019f80: 6e64 6574 0a09 6d79 2024 6531 3b0a 0966 ndet..my $e1;..f │ │ │ │ +00019f90: 6f72 6561 6368 2024 6531 2028 4065 290a oreach $e1 (@e). │ │ │ │ +00019fa0: 097b 0a09 2020 2020 6e65 7874 2075 6e6c .{.. next unl │ │ │ │ +00019fb0: 6573 7320 2d6c 2024 6531 206f 7220 2d64 ess -l $e1 or -d │ │ │ │ +00019fc0: 2024 6531 3b0a 0a09 2020 2020 6d79 2024 $e1;... my $ │ │ │ │ +00019fd0: 6120 3d20 263a 3a61 6273 6f6c 7574 6550 a = &::absoluteP │ │ │ │ +00019fe0: 6174 6828 2465 3129 3b0a 0920 2020 2069 ath($e1);.. i │ │ │ │ +00019ff0: 6620 2824 6129 0a09 2020 2020 7b0a 0909 f ($a).. {... │ │ │ │ +0001a000: 7075 7368 2040 612c 2024 613b 0a09 2020 push @a, $a;.. │ │ │ │ +0001a010: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. │ │ │ │ +0001a020: 2020 207b 0a09 0924 666c 6167 203d 2031 {...$flag = 1 │ │ │ │ +0001a030: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin │ │ │ │ +0001a040: 7428 272d 6b69 6e64 2720 3d3e 2024 6b69 t('-kind' => $ki │ │ │ │ +0001a050: 6e64 2c0a 0909 0920 2020 2020 2027 2d73 nd,.... '-s │ │ │ │ +0001a060: 7472 2720 3d3e 205b 2224 6578 6365 7074 tr' => ["$except │ │ │ │ +0001a070: 4469 7220 3c24 6531 3e20 646f 6573 206e Dir <$e1> does n │ │ │ │ +0001a080: 6f74 2065 7869 7374 225d 290a 0909 2020 ot exist"])... │ │ │ │ +0001a090: 2020 6966 2024 7072 4c6f 673b 0a20 2020 if $prLog;. │ │ │ │ +0001a0a0: 2020 2020 2020 2020 2020 2020 206e 6578 nex │ │ │ │ +0001a0b0: 743b 0a09 2020 2020 7d0a 097d 0a09 756e t;.. }..}..un │ │ │ │ +0001a0c0: 6c65 7373 2028 4061 290a 097b 0a09 2020 less (@a)..{.. │ │ │ │ +0001a0d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +0001a0e0: 272d 6b69 6e64 2720 3d3e 2024 6b69 6e64 '-kind' => $kind │ │ │ │ +0001a0f0: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ │ +0001a100: 205b 226e 6f20 6469 7265 6374 6f72 7920 ["no directory │ │ │ │ +0001a110: 7265 7375 6c74 696e 6720 6672 6f6d 2022 resulting from " │ │ │ │ +0001a120: 202e 0a09 0909 0920 2020 2020 2270 6174 ...... "pat │ │ │ │ +0001a130: 7465 726e 203c 2465 3e22 5d29 3b0a 0920 tern <$e>"]);.. │ │ │ │ +0001a140: 2020 2024 666c 6167 203d 2031 3b0a 2020 $flag = 1;. │ │ │ │ +0001a150: 2020 2020 2020 2020 2020 6e65 7874 3b0a next;. │ │ │ │ +0001a160: 097d 0a09 7075 7368 2040 616c 6c45 7863 .}..push @allExc │ │ │ │ +0001a170: 6570 7444 6972 732c 2040 613b 0a09 6966 eptDirs, @a;..if │ │ │ │ +0001a180: 2028 4065 203d 3d20 3120 616e 6420 2461 (@e == 1 and $a │ │ │ │ +0001a190: 5b30 5d20 6571 2024 6529 0a09 7b0a 0920 [0] eq $e)..{.. │ │ │ │ +0001a1a0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +0001a1b0: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ │ +0001a1c0: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ │ +0001a1d0: 5b22 2465 7863 6c75 6469 6e67 203c 2461 ["$excluding <$a │ │ │ │ +0001a1e0: 5b30 5d3e 225d 290a 0909 6966 2024 7072 [0]>"])...if $pr │ │ │ │ +0001a1f0: 4c6f 673b 0a09 7d0a 0965 6c73 6966 2028 Log;..}..elsif ( │ │ │ │ +0001a200: 4061 2021 3d20 3029 0a09 7b0a 0920 2020 @a != 0)..{.. │ │ │ │ +0001a210: 206d 7920 2840 702c 2024 7029 3b0a 0920 my (@p, $p);.. │ │ │ │ +0001a220: 2020 2066 6f72 6561 6368 2024 7020 2840 foreach $p (@ │ │ │ │ +0001a230: 6129 0a09 2020 2020 7b0a 0909 7075 7368 a).. {...push │ │ │ │ +0001a240: 2040 702c 2022 2020 2020 2465 7863 6c75 @p, " $exclu │ │ │ │ +0001a250: 6469 6e67 203c 2470 3e22 3b0a 0920 2020 ding <$p>";.. │ │ │ │ +0001a260: 207d 0a09 2020 2020 2470 724c 6f67 2d3e }.. $prLog-> │ │ │ │ +0001a270: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +0001a280: 2027 4927 2c0a 0909 0920 2027 2d73 7472 'I',.... '-str │ │ │ │ +0001a290: 2720 3d3e 205b 2224 6578 636c 7564 696e ' => ["$excludin │ │ │ │ +0001a2a0: 6720 3c24 653e 3a22 2c20 4070 5d29 0a09 g <$e>:", @p]).. │ │ │ │ +0001a2b0: 0969 6620 2470 724c 6f67 3b0a 097d 0a20 .if $prLog;..}. │ │ │ │ +0001a2c0: 2020 207d 0a20 2020 2069 6620 2824 666c }. if ($fl │ │ │ │ +0001a2d0: 6167 2061 6e64 206e 6f74 2024 636f 6e74 ag and not $cont │ │ │ │ +0001a2e0: 4578 6365 7074 4469 7273 4572 7229 0a20 ExceptDirsErr). │ │ │ │ +0001a2f0: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr │ │ │ │ +0001a300: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +0001a310: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ │ +0001a320: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => ["exiting" │ │ │ │ +0001a330: 5d29 0a09 2020 2020 6966 2024 7072 4c6f ]).. if $prLo │ │ │ │ +0001a340: 673b 0a09 6578 6974 2031 3b0a 2020 2020 g;..exit 1;. │ │ │ │ +0001a350: 7d0a 2020 2020 7265 7475 726e 2028 4061 }. return (@a │ │ │ │ +0001a360: 6c6c 4578 6365 7074 4469 7273 293b 0a7d llExceptDirs);.} │ │ │ │ +0001a370: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +0001a380: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001a390: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +0001a3a0: 6361 6c63 426c 6f63 6b4d 4435 5375 6d73 calcBlockMD5Sums │ │ │ │ +0001a3b0: 0a7b 0a20 2020 206d 7920 2473 6f75 7263 .{. my $sourc │ │ │ │ +0001a3c0: 6544 6972 203d 2073 6869 6674 3b0a 2020 eDir = shift;. │ │ │ │ +0001a3d0: 2020 6d79 2024 7461 7267 6574 4469 7220 my $targetDir │ │ │ │ +0001a3e0: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ │ +0001a3f0: 2472 656c 5061 7468 203d 2073 6869 6674 $relPath = shift │ │ │ │ +0001a400: 3b20 2020 2020 2020 2020 2023 2072 656c ; # rel │ │ │ │ +0001a410: 6174 6976 6520 7061 7468 2069 6e20 6261 ative path in ba │ │ │ │ +0001a420: 636b 7570 2069 6e63 6c2e 2066 696c 650a ckup incl. file. │ │ │ │ +0001a430: 2020 2020 6d79 2024 626c 6f63 6b53 697a my $blockSiz │ │ │ │ +0001a440: 6520 3d20 7368 6966 743b 0a20 2020 206d e = shift;. m │ │ │ │ +0001a450: 7920 2463 6f6d 7072 6573 7342 6c6f 636b y $compressBlock │ │ │ │ +0001a460: 203d 2073 6869 6674 3b20 2020 2023 2027 = shift; # ' │ │ │ │ +0001a470: 6327 206f 6465 7220 2775 2720 2863 6f6d c' oder 'u' (com │ │ │ │ +0001a480: 7072 6573 732c 2075 6e63 6f6d 7072 6573 press, uncompres │ │ │ │ +0001a490: 7329 0a20 2020 206d 7920 2462 6c6f 636b s). my $block │ │ │ │ +0001a4a0: 5265 6164 203d 2073 6869 6674 3b20 2020 Read = shift; │ │ │ │ +0001a4b0: 2020 2020 2023 2070 6f69 6e74 6572 2074 # pointer t │ │ │ │ +0001a4c0: 6f20 6c69 7374 0a20 2020 206d 7920 2463 o list. my $c │ │ │ │ +0001a4d0: 6f6d 7072 6573 7343 6f6d 6d61 6e64 203d ompressCommand = │ │ │ │ +0001a4e0: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $ │ │ │ │ +0001a4f0: 636f 6d70 7265 7373 4f70 7469 6f6e 7320 compressOptions │ │ │ │ +0001a500: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ │ +0001a510: 2470 6f73 7466 6978 203d 2073 6869 6674 $postfix = shift │ │ │ │ +0001a520: 3b0a 2020 2020 6d79 2024 6f6c 6446 696c ;. my $oldFil │ │ │ │ +0001a530: 656e 616d 6520 3d20 7368 6966 743b 2020 ename = shift; │ │ │ │ +0001a540: 2020 2020 2320 706f 696e 7465 7220 746f # pointer to │ │ │ │ +0001a550: 206f 626a 6563 740a 2020 2020 6d79 2024 object. my $ │ │ │ │ +0001a560: 6c61 7465 4c69 6e6b 7320 3d20 7368 6966 lateLinks = shif │ │ │ │ +0001a570: 743b 0a20 2020 206d 7920 246c 6174 6543 t;. my $lateC │ │ │ │ +0001a580: 6f6d 7072 6573 7320 3d20 7368 6966 743b ompress = shift; │ │ │ │ +0001a590: 0a20 2020 206d 7920 246e 6f43 6f6d 7072 . my $noCompr │ │ │ │ +0001a5a0: 6573 7320 3d20 7368 6966 743b 0a20 2020 ess = shift;. │ │ │ │ +0001a5b0: 206d 7920 2470 724c 6f67 203d 2073 6869 my $prLog = shi │ │ │ │ +0001a5c0: 6674 3b0a 2020 2020 6d79 2024 746d 7066 ft;. my $tmpf │ │ │ │ +0001a5d0: 696c 6520 3d20 7368 6966 743b 0a20 2020 ile = shift;. │ │ │ │ +0001a5e0: 206d 7920 2462 6c6f 636b 4368 6563 6b53 my $blockCheckS │ │ │ │ +0001a5f0: 756d 4669 6c65 203d 2073 6869 6674 3b0a umFile = shift;. │ │ │ │ +0001a600: 2020 2020 6d79 2024 6374 696d 6520 3d20 my $ctime = │ │ │ │ +0001a610: 7368 6966 743b 0a20 2020 206d 7920 246d shift;. my $m │ │ │ │ +0001a620: 7469 6d65 203d 2073 6869 6674 3b0a 0a23 time = shift;..# │ │ │ │ +0001a630: 7072 696e 7420 2263 616c 634d 4435 426c print "calcMD5Bl │ │ │ │ +0001a640: 6f63 6b53 756d 735c 6e22 3b0a 2370 7269 ockSums\n";.#pri │ │ │ │ +0001a650: 6e74 2022 5c74 736f 7572 6365 4469 7220 nt "\tsourceDir │ │ │ │ +0001a660: 3d20 3c24 736f 7572 6365 4469 723e 5c6e = <$sourceDir>\n │ │ │ │ +0001a670: 223b 0a23 7072 696e 7420 225c 7474 6172 ";.#print "\ttar │ │ │ │ +0001a680: 6765 7444 6972 203d 203c 2474 6172 6765 getDir = <$targe │ │ │ │ +0001a690: 7444 6972 3e5c 6e22 3b0a 2370 7269 6e74 tDir>\n";.#print │ │ │ │ +0001a6a0: 2022 5c74 7265 6c50 6174 6820 3d20 3c24 "\trelPath = <$ │ │ │ │ +0001a6b0: 7265 6c50 6174 683e 5c6e 223b 0a23 7072 relPath>\n";.#pr │ │ │ │ +0001a6c0: 696e 7420 225c 7462 6c6f 636b 5369 7a65 int "\tblockSize │ │ │ │ +0001a6d0: 203d 203c 2462 6c6f 636b 5369 7a65 3e5c = <$blockSize>\ │ │ │ │ +0001a6e0: 6e22 3b0a 2370 7269 6e74 2022 5c74 746d n";.#print "\ttm │ │ │ │ +0001a6f0: 7066 696c 6520 3d20 3c24 746d 7066 696c pfile = <$tmpfil │ │ │ │ +0001a700: 653e 5c6e 223b 0a23 7072 696e 7420 225c e>\n";.#print "\ │ │ │ │ +0001a710: 7463 6f6d 7072 6573 7342 6c6f 636b 203d tcompressBlock = │ │ │ │ +0001a720: 203c 2463 6f6d 7072 6573 7342 6c6f 636b <$compressBlock │ │ │ │ +0001a730: 3e5c 6e22 3b0a 2370 7269 6e74 2022 5c74 >\n";.#print "\t │ │ │ │ +0001a740: 6c61 7465 436f 6d70 7265 7373 203d 203c lateCompress = < │ │ │ │ +0001a750: 246c 6174 6543 6f6d 7072 6573 733e 5c6e $lateCompress>\n │ │ │ │ +0001a760: 223b 0a0a 2020 2020 2430 203d 2022 7065 ";.. $0 = "pe │ │ │ │ +0001a770: 726c 6d64 3562 6c6f 636b 2024 7265 6c50 rlmd5block $relP │ │ │ │ +0001a780: 6174 6822 3b0a 0a20 2020 2023 2065 7870 ath";.. # exp │ │ │ │ +0001a790: 6c61 6e61 7469 6f6e 733a 0a20 2020 2023 lanations:. # │ │ │ │ +0001a7a0: 2320 246c 6174 654c 696e 6b73 0a20 2020 # $lateLinks. │ │ │ │ +0001a7b0: 2023 2320 2069 6620 6465 6669 6e65 642c ## if defined, │ │ │ │ +0001a7c0: 2077 7269 7465 206c 6174 654c 696e 6b73 write lateLinks │ │ │ │ +0001a7d0: 0a20 2020 2023 2320 246c 6174 6543 6f6d . ## $lateCom │ │ │ │ +0001a7e0: 7072 6573 730a 2020 2020 2323 2020 6672 press. ## fr │ │ │ │ +0001a7f0: 6f6d 206f 7074 696f 6e0a 2020 2020 2323 om option. ## │ │ │ │ +0001a800: 2024 6469 7265 6374 0a20 2020 2023 2320 $direct. ## │ │ │ │ +0001a810: 203d 3d20 3020 2d3e 2066 6f72 6b20 666f == 0 -> fork fo │ │ │ │ +0001a820: 7220 636f 6d70 7265 7373 696f 6e20 2f20 r compression / │ │ │ │ +0001a830: 3d3d 2031 202d 3e20 636f 6d70 7265 7373 == 1 -> compress │ │ │ │ +0001a840: 2069 6e20 7065 726c 0a0a 2020 2020 246c in perl.. $l │ │ │ │ +0001a850: 6174 6543 6f6d 7072 6573 7320 3d20 756e ateCompress = un │ │ │ │ +0001a860: 6465 6620 6966 2024 636f 6d70 7265 7373 def if $compress │ │ │ │ +0001a870: 426c 6f63 6b20 6571 2027 7527 3b20 2023 Block eq 'u'; # │ │ │ │ +0001a880: 206d 7573 7420 6e6f 7420 6265 2063 6f6d must not be com │ │ │ │ +0001a890: 7072 6573 7365 640a 0a20 2020 206d 7920 pressed.. my │ │ │ │ +0001a8a0: 2824 6e6f 5761 726e 696e 6773 2c20 246e ($noWarnings, $n │ │ │ │ +0001a8b0: 6f45 7272 6f72 7329 203d 2028 302c 2030 oErrors) = (0, 0 │ │ │ │ +0001a8c0: 293b 0a0a 2020 2020 6d79 2024 6d6b 6469 );.. my $mkdi │ │ │ │ +0001a8d0: 724c 6174 654c 696e 6b73 4669 6c65 5061 rLateLinksFilePa │ │ │ │ +0001a8e0: 7468 203d 2075 6e64 6566 3b0a 2020 2020 th = undef;. │ │ │ │ +0001a8f0: 6c6f 6361 6c20 282a 4649 4c45 2c20 2a4f local (*FILE, *O │ │ │ │ +0001a900: 5554 293b 0a20 2020 206d 7920 2466 696c UT);. my $fil │ │ │ │ +0001a910: 6549 6e20 3d20 756e 6465 663b 2020 2020 eIn = undef; │ │ │ │ +0001a920: 2320 7573 6564 2074 6f20 7265 6164 2076 # used to read v │ │ │ │ +0001a930: 6961 2070 6970 6520 2866 696c 7465 7229 ia pipe (filter) │ │ │ │ +0001a940: 0a20 2020 2069 6620 2840 2462 6c6f 636b . if (@$block │ │ │ │ +0001a950: 5265 6164 2920 2020 2320 2462 6c6f 636b Read) # $block │ │ │ │ +0001a960: 5265 6164 203d 2070 6f69 6e74 6572 2074 Read = pointer t │ │ │ │ +0001a970: 6f20 7072 6f67 7261 6d20 746f 2070 6970 o program to pip │ │ │ │ +0001a980: 6520 696e 2062 6c6f 636b 2074 6f20 7265 e in block to re │ │ │ │ +0001a990: 6164 0a20 2020 207b 0a09 6d79 2028 2470 ad. {..my ($p │ │ │ │ +0001a9a0: 726f 672c 2040 7061 7229 203d 2028 4024 rog, @par) = (@$ │ │ │ │ +0001a9b0: 626c 6f63 6b52 6561 6429 3b0a 096d 7920 blockRead);..my │ │ │ │ +0001a9c0: 2840 7029 3b0a 0969 6620 2824 6374 696d (@p);..if ($ctim │ │ │ │ +0001a9d0: 6520 3d3d 2030 2920 2020 2020 2020 2020 e == 0) │ │ │ │ +0001a9e0: 2020 2020 2020 2320 6465 7669 6365 0a09 # device.. │ │ │ │ +0001a9f0: 7b0a 0920 2020 2028 4070 2920 3d20 2827 {.. (@p) = (' │ │ │ │ +0001aa00: 2d73 7464 6572 7227 203d 3e20 272f 6465 -stderr' => '/de │ │ │ │ +0001aa10: 762f 6e75 6c6c 2729 3b0a 097d 0a09 656c v/null');..}..el │ │ │ │ +0001aa20: 7365 2020 2020 2320 626c 6f63 6b65 6420 se # blocked │ │ │ │ +0001aa30: 6669 6c65 0a09 7b0a 0920 2020 2028 4070 file..{.. (@p │ │ │ │ +0001aa40: 2920 3d20 2827 2d6f 7574 5261 6e64 6f6d ) = ('-outRandom │ │ │ │ +0001aa50: 2720 3d3e 2027 2f74 6d70 2f73 7462 7550 ' => '/tmp/stbuP │ │ │ │ +0001aa60: 6970 6546 726f 6d31 302d 2729 3b0a 097d ipeFrom10-');..} │ │ │ │ +0001aa70: 0a09 2466 696c 6549 6e20 3d20 7069 7065 ..$fileIn = pipe │ │ │ │ +0001aa80: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('- │ │ │ │ +0001aa90: 6578 6563 2720 3d3e 2024 7072 6f67 2c0a exec' => $prog,. │ │ │ │ +0001aaa0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ │ +0001aab0: 203d 3e20 5c40 7061 722c 0a09 0909 0920 => \@par,..... │ │ │ │ +0001aac0: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $ │ │ │ │ +0001aad0: 736f 7572 6365 4469 722c 0a09 0909 0920 sourceDir,..... │ │ │ │ +0001aae0: 2020 2040 702c 0a09 0909 0920 2020 2027 @p,..... ' │ │ │ │ +0001aaf0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ │ +0001ab00: 6729 3b0a 0a20 2020 207d 0a20 2020 2065 g);.. }. e │ │ │ │ +0001ab10: 6c73 650a 2020 2020 7b0a 0975 6e6c 6573 lse. {..unles │ │ │ │ +0001ab20: 7320 2873 7973 6f70 656e 2846 494c 452c s (sysopen(FILE, │ │ │ │ +0001ab30: 2024 736f 7572 6365 4469 722c 204f 5f52 $sourceDir, O_R │ │ │ │ +0001ab40: 444f 4e4c 5929 290a 097b 0a09 2020 2020 DONLY))..{.. │ │ │ │ +0001ab50: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0001ab60: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +0001ab70: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => ["c │ │ │ │ +0001ab80: 616e 6e6f 7420 6f70 656e 203c 2473 6f75 annot open <$sou │ │ │ │ +0001ab90: 7263 6544 6972 3e22 5d2c 0a09 0909 2020 rceDir>"],.... │ │ │ │ +0001aba0: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL │ │ │ │ +0001abb0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 293b E__, __LINE__]); │ │ │ │ +0001abc0: 0a09 2020 2020 2b2b 246e 6f45 7272 6f72 .. ++$noError │ │ │ │ +0001abd0: 733b 0a09 2020 2020 7265 7475 726e 2030 s;.. return 0 │ │ │ │ +0001abe0: 3b0a 097d 0a20 2020 207d 0a0a 2020 2020 ;..}. }.. │ │ │ │ +0001abf0: 6d79 2024 6d64 3541 6c6c 203d 2044 6967 my $md5All = Dig │ │ │ │ +0001ac00: 6573 743a 3a4d 4435 2d3e 6e65 7728 293b est::MD5->new(); │ │ │ │ +0001ac10: 0a20 2020 206d 7920 2462 6c6f 636b 4e6f . my $blockNo │ │ │ │ +0001ac20: 203d 2030 3b0a 2020 2020 6d79 2024 6275 = 0;. my $bu │ │ │ │ +0001ac30: 6666 6572 3b0a 2020 2020 6d79 2028 406e ffer;. my (@n │ │ │ │ +0001ac40: 6577 4d44 356c 696e 6529 203d 2028 293b ewMD5line) = (); │ │ │ │ +0001ac50: 0a20 2020 206d 7920 2824 7374 6174 5369 . my ($statSi │ │ │ │ +0001ac60: 7a65 4f72 6967 2c20 2473 7461 7453 697a zeOrig, $statSiz │ │ │ │ +0001ac70: 654e 6577 2c20 2473 7461 744e 6f46 6f72 eNew, $statNoFor │ │ │ │ +0001ac80: 6b73 4350 2c20 2473 7461 744e 6f46 6f72 ksCP, $statNoFor │ │ │ │ +0001ac90: 6b73 436f 6d70 7265 7373 2c0a 0924 7374 ksCompress,..$st │ │ │ │ +0001aca0: 6174 4e6f 4c61 7465 4c69 6e6b 732c 2024 atNoLateLinks, $ │ │ │ │ +0001acb0: 6e29 203d 2028 302c 2030 2c20 302c 2030 n) = (0, 0, 0, 0 │ │ │ │ +0001acc0: 2c20 302c 2030 293b 0a0a 2020 2020 6d79 , 0, 0);.. my │ │ │ │ +0001acd0: 2024 7061 7261 6c46 6f72 6b20 3d20 7061 $paralFork = pa │ │ │ │ +0001ace0: 7261 6c6c 656c 466f 726b 2d3e 6e65 7728 rallelFork->new( │ │ │ │ +0001acf0: 272d 6d61 7850 6172 616c 6c65 6c27 203d '-maxParallel' = │ │ │ │ +0001ad00: 3e20 246e 6f43 6f6d 7072 6573 732c 0a09 > $noCompress,.. │ │ │ │ +0001ad10: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog │ │ │ │ +0001ad20: 2720 3d3e 2024 7072 4c6f 6729 3b0a 2020 ' => $prLog);. │ │ │ │ +0001ad30: 2020 6d79 2024 7469 6e79 5363 6865 6420 my $tinySched │ │ │ │ +0001ad40: 3d20 7469 6e79 5761 6974 5363 6865 6475 = tinyWaitSchedu │ │ │ │ +0001ad50: 6c65 722d 3e6e 6577 2827 2d70 724c 6f67 ler->new('-prLog │ │ │ │ +0001ad60: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a20 ' => $prLog);.. │ │ │ │ +0001ad70: 2020 206d 7920 2464 6972 6563 7420 3d20 my $direct = │ │ │ │ +0001ad80: 303b 2020 2020 2320 3d3d 2031 202d 3e20 0; # == 1 -> │ │ │ │ +0001ad90: 646f 206e 6f74 2066 6f72 6b20 666f 7220 do not fork for │ │ │ │ +0001ada0: 636f 6d70 7265 7373 696f 6e0a 2020 2020 compression. │ │ │ │ +0001adb0: 2464 6972 6563 7420 3d20 3120 6966 2024 $direct = 1 if $ │ │ │ │ +0001adc0: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq │ │ │ │ +0001add0: 2027 7527 3b0a 2020 2020 2464 6972 6563 'u';. $direc │ │ │ │ +0001ade0: 7420 3d20 3120 6966 2024 6d61 696e 3a3a t = 1 if $main:: │ │ │ │ +0001adf0: 494f 436f 6d70 7265 7373 4469 7265 6374 IOCompressDirect │ │ │ │ +0001ae00: 0a09 616e 6420 2462 6c6f 636b 5369 7a65 ..and $blockSize │ │ │ │ +0001ae10: 203c 2024 6d61 696e 3a3a 6d69 6e43 6f70 < $main::minCop │ │ │ │ +0001ae20: 7957 6974 6846 6f72 6b0a 0961 6e64 2024 yWithFork..and $ │ │ │ │ +0001ae30: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq │ │ │ │ +0001ae40: 2027 6327 3b0a 2370 7269 6e74 2022 6469 'c';.#print "di │ │ │ │ +0001ae50: 7265 6374 203d 203c 2464 6972 6563 743e rect = <$direct> │ │ │ │ +0001ae60: 5c6e 223b 0a0a 2020 2020 6d79 2024 6a6f \n";.. my $jo │ │ │ │ +0001ae70: 6254 6f44 6f20 3d20 313b 0a20 2020 206d bToDo = 1;. m │ │ │ │ +0001ae80: 7920 2470 6172 466f 726b 546f 446f 203d y $parForkToDo = │ │ │ │ +0001ae90: 2030 3b0a 0a20 2020 2075 6e6c 6573 7320 0;.. unless │ │ │ │ +0001aea0: 286f 7065 6e28 4f55 542c 2022 3e22 2c20 (open(OUT, ">", │ │ │ │ +0001aeb0: 2474 6d70 6669 6c65 2929 0a20 2020 207b $tmpfile)). { │ │ │ │ +0001aec0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +0001aed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +0001aee0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +0001aef0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > ["cannot open │ │ │ │ +0001af00: 7465 6d70 6f72 6172 7920 6669 6c65 203c temporary file < │ │ │ │ +0001af10: 2474 6d70 6669 6c65 3e22 5d29 3b0a 092b $tmpfile>"]);..+ │ │ │ │ +0001af20: 2b24 6e6f 4572 726f 7273 3b0a 0972 6574 +$noErrors;..ret │ │ │ │ +0001af30: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; │ │ │ │ +0001af40: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +0001af50: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. │ │ │ │ +0001af60: 2020 7768 696c 6520 2824 6a6f 6254 6f44 while ($jobToD │ │ │ │ +0001af70: 6f20 3e20 3020 6f72 2024 7061 7246 6f72 o > 0 or $parFor │ │ │ │ +0001af80: 6b54 6f44 6f20 3e20 3029 0a20 2020 207b kToDo > 0). { │ │ │ │ +0001af90: 0a23 7072 696e 7420 222d 2d2d 206a 6f62 .#print "--- job │ │ │ │ +0001afa0: 546f 446f 3d24 6a6f 6254 6f44 6f20 2d2d ToDo=$jobToDo -- │ │ │ │ +0001afb0: 2070 6172 466f 726b 546f 446f 3d24 7061 parForkToDo=$pa │ │ │ │ +0001afc0: 7246 6f72 6b54 6f44 6f20 2d2d 2d5c 6e22 rForkToDo ---\n" │ │ │ │ +0001afd0: 3b0a 0923 2323 2323 2323 2323 2323 2323 ;..############# │ │ │ │ +0001afe0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001aff0: 0a09 6d79 2024 6f6c 6420 3d20 2470 6172 ..my $old = $par │ │ │ │ +0001b000: 616c 466f 726b 2d3e 6368 6563 6b4f 6e65 alFork->checkOne │ │ │ │ +0001b010: 2829 3b0a 0969 6620 2824 6f6c 6429 0a09 ();..if ($old).. │ │ │ │ +0001b020: 7b0a 0920 2020 206d 7920 2824 6469 6765 {.. my ($dige │ │ │ │ +0001b030: 7374 2c20 2466 696c 652c 2024 706f 7374 st, $file, $post │ │ │ │ +0001b040: 6669 7829 203d 2040 7b24 6f6c 642d 3e67 fix) = @{$old->g │ │ │ │ +0001b050: 6574 2827 2d77 6861 7427 203d 3e20 2769 et('-what' => 'i │ │ │ │ +0001b060: 6e66 6f27 297d 3b0a 0920 2020 2024 7374 nfo')};.. $st │ │ │ │ +0001b070: 6174 5369 7a65 4e65 7720 2b3d 2028 7374 atSizeNew += (st │ │ │ │ +0001b080: 6174 2822 2474 6172 6765 7444 6972 2f24 at("$targetDir/$ │ │ │ │ +0001b090: 6669 6c65 2470 6f73 7466 6978 2229 295b file$postfix"))[ │ │ │ │ +0001b0a0: 375d 3b0a 2370 7269 6e74 2022 2d31 2d20 7];.#print "-1- │ │ │ │ +0001b0b0: 6d64 3520 2466 696c 6520 2470 6f73 7466 md5 $file $postf │ │ │ │ +0001b0c0: 6978 5c6e 223b 0a09 7d0a 0a09 2323 2323 ix\n";..}...#### │ │ │ │ +0001b0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001b0e0: 2323 2323 2323 2323 230a 2370 7269 6e74 #########.#print │ │ │ │ +0001b0f0: 2022 6a6f 6254 6f44 6f20 3d20 3c24 6a6f "jobToDo = <$jo │ │ │ │ +0001b100: 6254 6f44 6f3e 2c20 6672 6565 456e 7472 bToDo>, freeEntr │ │ │ │ +0001b110: 6965 7320 3d20 3c22 2c20 2470 6172 616c ies = <", $paral │ │ │ │ +0001b120: 466f 726b 2d3e 6765 744e 6f46 7265 6545 Fork->getNoFreeE │ │ │ │ +0001b130: 6e74 7269 6573 2829 2c20 223e 5c6e 223b ntries(), ">\n"; │ │ │ │ +0001b140: 0a09 6966 2028 246a 6f62 546f 446f 203e ..if ($jobToDo > │ │ │ │ +0001b150: 2030 2061 6e64 2024 7061 7261 6c46 6f72 0 and $paralFor │ │ │ │ +0001b160: 6b2d 3e67 6574 4e6f 4672 6565 456e 7472 k->getNoFreeEntr │ │ │ │ +0001b170: 6965 7328 2920 3e20 3029 0a09 7b0a 0920 ies() > 0)..{.. │ │ │ │ +0001b180: 2020 2069 6620 2824 6669 6c65 496e 290a if ($fileIn). │ │ │ │ +0001b190: 0920 2020 207b 0a09 0924 6e20 3d20 2466 . {...$n = $f │ │ │ │ +0001b1a0: 696c 6549 6e2d 3e73 7973 7265 6164 285c ileIn->sysread(\ │ │ │ │ +0001b1b0: 2462 7566 6665 722c 2024 626c 6f63 6b53 $buffer, $blockS │ │ │ │ +0001b1c0: 697a 6529 3b0a 0920 2020 207d 0a09 2020 ize);.. }.. │ │ │ │ +0001b1d0: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {... │ │ │ │ +0001b1e0: 246e 203d 2073 7973 7265 6164 2846 494c $n = sysread(FIL │ │ │ │ +0001b1f0: 452c 2024 6275 6666 6572 2c20 2462 6c6f E, $buffer, $blo │ │ │ │ +0001b200: 636b 5369 7a65 293b 0a09 2020 2020 7d0a ckSize);.. }. │ │ │ │ +0001b210: 0a09 2020 2020 6966 2028 246e 290a 0920 .. if ($n).. │ │ │ │ +0001b220: 2020 207b 0a09 0924 7374 6174 5369 7a65 {...$statSize │ │ │ │ +0001b230: 4f72 6967 202b 3d20 246e 3b0a 0909 2462 Orig += $n;...$b │ │ │ │ +0001b240: 6c6f 636b 4e6f 2b2b 3b0a 0909 6d79 2024 lockNo++;...my $ │ │ │ │ +0001b250: 626c 6f63 6b4e 616d 6520 3d20 7370 7269 blockName = spri │ │ │ │ +0001b260: 6e74 6620 2225 3031 3064 222c 2024 626c ntf "%010d", $bl │ │ │ │ +0001b270: 6f63 6b4e 6f3b 0a09 096d 7920 2462 6c6f ockNo;...my $blo │ │ │ │ +0001b280: 636b 4669 6c65 203d 2022 2472 656c 5061 ckFile = "$relPa │ │ │ │ +0001b290: 7468 2f24 626c 6f63 6b4e 616d 6522 3b0a th/$blockName";. │ │ │ │ +0001b2a0: 0909 6d79 2024 6469 6765 7374 203d 206d ..my $digest = m │ │ │ │ +0001b2b0: 6435 5f68 6578 2824 6275 6666 6572 293b d5_hex($buffer); │ │ │ │ +0001b2c0: 0a09 0924 6d64 3541 6c6c 2d3e 6164 6428 ...$md5All->add( │ │ │ │ +0001b2d0: 2462 7566 6665 7229 3b0a 2370 7269 6e74 $buffer);.#print │ │ │ │ +0001b2e0: 2022 2d32 2d20 2462 6c6f 636b 4e61 6d65 "-2- $blockName │ │ │ │ +0001b2f0: 202d 3e20 6469 6765 7374 203d 2024 6469 -> digest = $di │ │ │ │ +0001b300: 6765 7374 2028 246e 2062 7974 6573 295c gest ($n bytes)\ │ │ │ │ +0001b310: 6e22 3b0a 0909 6d79 2028 2465 7869 7374 n";...my ($exist │ │ │ │ +0001b320: 696e 6746 696c 652c 2024 636f 6d70 722c ingFile, $compr, │ │ │ │ +0001b330: 2024 6e31 293b 0a09 0969 6620 2824 6e31 $n1);...if ($n1 │ │ │ │ +0001b340: 203d 2028 2824 636f 6d70 722c 2024 6578 = (($compr, $ex │ │ │ │ +0001b350: 6973 7469 6e67 4669 6c65 2920 3d0a 0909 istingFile) =... │ │ │ │ +0001b360: 0920 2020 246f 6c64 4669 6c65 6e61 6d65 . $oldFilename │ │ │ │ +0001b370: 2d3e 6765 7442 6c6f 636b 4669 6c65 6e61 ->getBlockFilena │ │ │ │ +0001b380: 6d65 436f 6d70 7228 2464 6967 6573 7429 meCompr($digest) │ │ │ │ +0001b390: 2929 0a09 097b 2020 2020 2020 2020 2020 ))...{ │ │ │ │ +0001b3a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0001b3b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0001b3c0: 2320 626c 6f63 6b20 6578 6973 7473 0a09 # block exists.. │ │ │ │ +0001b3d0: 0920 2020 2024 626c 6f63 6b46 696c 6520 . $blockFile │ │ │ │ +0001b3e0: 2e3d 2024 706f 7374 6669 7820 6966 2024 .= $postfix if $ │ │ │ │ +0001b3f0: 636f 6d70 7220 6571 2027 6327 3b0a 0a09 compr eq 'c';... │ │ │ │ +0001b400: 0920 2020 2070 7573 6820 406e 6577 4d44 . push @newMD │ │ │ │ +0001b410: 356c 696e 652c 2022 2464 6967 6573 7420 5line, "$digest │ │ │ │ +0001b420: 2463 6f6d 7072 2024 626c 6f63 6b46 696c $compr $blockFil │ │ │ │ +0001b430: 6522 3b0a 2370 7269 6e74 2022 2d31 302d e";.#print "-10- │ │ │ │ +0001b440: 2028 2464 6967 6573 7429 206c 696e 6b20 ($digest) link │ │ │ │ +0001b450: 2d3e 2024 6578 6973 7469 6e67 4669 6c65 -> $existingFile │ │ │ │ +0001b460: 202d 3e20 2474 6172 6765 7444 6972 2f24 -> $targetDir/$ │ │ │ │ +0001b470: 626c 6f63 6b46 696c 655c 6e22 3b0a 0909 blockFile\n";... │ │ │ │ +0001b480: 2020 2020 6966 2028 246c 6174 654c 696e if ($lateLin │ │ │ │ +0001b490: 6b73 290a 0909 2020 2020 7b0a 0909 0969 ks)... {....i │ │ │ │ +0001b4a0: 6620 286e 6f74 2024 6d6b 6469 724c 6174 f (not $mkdirLat │ │ │ │ +0001b4b0: 654c 696e 6b73 4669 6c65 5061 7468 290a eLinksFilePath). │ │ │ │ +0001b4c0: 0909 097b 0a09 0909 2020 2020 263a 3a6d ...{.... &::m │ │ │ │ +0001b4d0: 616b 6546 696c 6550 6174 6828 2224 7461 akeFilePath("$ta │ │ │ │ +0001b4e0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi │ │ │ │ +0001b4f0: 6c65 222c 2024 7072 4c6f 6729 3b0a 0909 le", $prLog);... │ │ │ │ +0001b500: 0920 2020 2024 6d6b 6469 724c 6174 654c . $mkdirLateL │ │ │ │ +0001b510: 696e 6b73 4669 6c65 5061 7468 203d 2031 inksFilePath = 1 │ │ │ │ +0001b520: 3b0a 0909 097d 0a09 0909 7072 696e 7420 ;....}....print │ │ │ │ +0001b530: 4f55 5420 226c 696e 6b20 2464 6967 6573 OUT "link $diges │ │ │ │ +0001b540: 745c 6e24 6578 6973 7469 6e67 4669 6c65 t\n$existingFile │ │ │ │ +0001b550: 5c6e 2474 6172 6765 7444 6972 2f24 626c \n$targetDir/$bl │ │ │ │ +0001b560: 6f63 6b46 696c 655c 6e22 3b0a 0909 092b ockFile\n";....+ │ │ │ │ +0001b570: 2b24 7374 6174 4e6f 4c61 7465 4c69 6e6b +$statNoLateLink │ │ │ │ +0001b580: 733b 0a09 0920 2020 207d 0a09 0920 2020 s;... }... │ │ │ │ +0001b590: 2065 6c73 650a 0909 2020 2020 7b0a 0909 else... {... │ │ │ │ +0001b5a0: 0975 6e6c 6573 7320 2826 3a3a 7761 6974 .unless (&::wait │ │ │ │ +0001b5b0: 466f 7246 696c 6528 2465 7869 7374 696e ForFile($existin │ │ │ │ +0001b5c0: 6746 696c 6529 206f 720a 0909 0909 6c69 gFile) or.....li │ │ │ │ +0001b5d0: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile │ │ │ │ +0001b5e0: 2c20 2224 7461 7267 6574 4469 722f 2462 , "$targetDir/$b │ │ │ │ +0001b5f0: 6c6f 636b 4669 6c65 2229 0a09 0909 7b0a lockFile")....{. │ │ │ │ +0001b600: 0909 0920 2020 203a 3a63 6f70 794f 6e65 ... ::copyOne │ │ │ │ +0001b610: 426c 6f63 6b28 2462 7566 6665 722c 2022 Block($buffer, " │ │ │ │ +0001b620: 2474 6172 6765 7444 6972 2f24 7265 6c50 $targetDir/$relP │ │ │ │ +0001b630: 6174 682f 2462 6c6f 636b 4e61 6d65 222c ath/$blockName", │ │ │ │ +0001b640: 0a09 0909 0909 2020 2024 7072 4c6f 6729 ...... $prLog) │ │ │ │ +0001b650: 3b0a 0909 0920 2020 2024 7374 6174 5369 ;.... $statSi │ │ │ │ +0001b660: 7a65 4e65 7720 2b3d 2028 7374 6174 2822 zeNew += (stat(" │ │ │ │ +0001b670: 2474 6172 6765 7444 6972 2f24 7265 6c50 $targetDir/$relP │ │ │ │ +0001b680: 6174 682f 2462 6c6f 636b 4e61 6d65 2229 ath/$blockName") │ │ │ │ +0001b690: 295b 375d 3b0a 0a09 0909 2020 2020 246f )[7];..... $o │ │ │ │ +0001b6a0: 6c64 4669 6c65 6e61 6d65 2d3e 7365 7442 ldFilename->setB │ │ │ │ +0001b6b0: 6c6f 636b 4669 6c65 6e61 6d65 436f 6d70 lockFilenameComp │ │ │ │ +0001b6c0: 7228 2464 6967 6573 742c 0a09 0909 0909 r($digest,...... │ │ │ │ +0001b6d0: 0909 0922 2474 6172 6765 7444 6972 2f24 ..."$targetDir/$ │ │ │ │ +0001b6e0: 626c 6f63 6b46 696c 6522 2c0a 0909 0909 blockFile",..... │ │ │ │ +0001b6f0: 0909 0909 2463 6f6d 7072 6573 7342 6c6f ....$compressBlo │ │ │ │ +0001b700: 636b 293b 0a09 0909 7d0a 0909 2020 2020 ck);....}... │ │ │ │ +0001b710: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else │ │ │ │ +0001b720: 2020 2020 2320 626c 6f63 6b20 6973 206e # block is n │ │ │ │ +0001b730: 6577 0a09 097b 0a23 7072 696e 7420 222d ew...{.#print "- │ │ │ │ +0001b740: 3131 2d20 6e65 7720 626c 6f63 6b5c 6e22 11- new block\n" │ │ │ │ +0001b750: 3b0a 0909 2020 2020 6966 2028 246c 6174 ;... if ($lat │ │ │ │ +0001b760: 654c 696e 6b73 2061 6e64 206e 6f74 2024 eLinks and not $ │ │ │ │ +0001b770: 6d6b 6469 724c 6174 654c 696e 6b73 4669 mkdirLateLinksFi │ │ │ │ +0001b780: 6c65 5061 7468 290a 0909 2020 2020 7b0a lePath)... {. │ │ │ │ +0001b790: 0909 0926 3a3a 6d61 6b65 4669 6c65 5061 ...&::makeFilePa │ │ │ │ +0001b7a0: 7468 2822 2474 6172 6765 7444 6972 2f24 th("$targetDir/$ │ │ │ │ +0001b7b0: 626c 6f63 6b46 696c 6522 2c20 2470 724c blockFile", $prL │ │ │ │ +0001b7c0: 6f67 293b 0a09 0909 246d 6b64 6972 4c61 og);....$mkdirLa │ │ │ │ +0001b7d0: 7465 4c69 6e6b 7346 696c 6550 6174 6820 teLinksFilePath │ │ │ │ +0001b7e0: 3d20 313b 0a09 0920 2020 207d 0a0a 0909 = 1;... }.... │ │ │ │ +0001b7f0: 2020 2020 6d79 2024 7066 203d 2024 636f my $pf = $co │ │ │ │ +0001b800: 6d70 7265 7373 426c 6f63 6b20 6571 2027 mpressBlock eq ' │ │ │ │ +0001b810: 6327 203f 2024 706f 7374 6669 7820 3a20 c' ? $postfix : │ │ │ │ +0001b820: 2727 3b0a 0909 2020 2020 246f 6c64 4669 '';... $oldFi │ │ │ │ +0001b830: 6c65 6e61 6d65 2d3e 7365 7442 6c6f 636b lename->setBlock │ │ │ │ +0001b840: 4669 6c65 6e61 6d65 436f 6d70 7228 2464 FilenameCompr($d │ │ │ │ +0001b850: 6967 6573 742c 0a09 0909 0909 0909 2224 igest,........"$ │ │ │ │ +0001b860: 7461 7267 6574 4469 722f 2462 6c6f 636b targetDir/$block │ │ │ │ +0001b870: 4669 6c65 2470 6622 2c0a 0909 0909 0909 File$pf",....... │ │ │ │ +0001b880: 0924 636f 6d70 7265 7373 426c 6f63 6b29 .$compressBlock) │ │ │ │ +0001b890: 3b0a 0909 2020 2020 6966 2028 246c 6174 ;... if ($lat │ │ │ │ +0001b8a0: 6543 6f6d 7072 6573 7329 0a09 0920 2020 eCompress)... │ │ │ │ +0001b8b0: 207b 0a23 7072 696e 7420 222d 3132 2d20 {.#print "-12- │ │ │ │ +0001b8c0: 6c61 7465 2063 6f6d 7072 6573 735c 6e22 late compress\n" │ │ │ │ +0001b8d0: 3b0a 0909 0969 6620 2824 6469 7265 6374 ;....if ($direct │ │ │ │ +0001b8e0: 290a 0909 097b 0a09 0909 2020 2020 3a3a )....{.... :: │ │ │ │ +0001b8f0: 636f 7079 4f6e 6542 6c6f 636b 2824 6275 copyOneBlock($bu │ │ │ │ +0001b900: 6666 6572 2c20 2224 7461 7267 6574 4469 ffer, "$targetDi │ │ │ │ +0001b910: 722f 2472 656c 5061 7468 2f24 626c 6f63 r/$relPath/$bloc │ │ │ │ +0001b920: 6b4e 616d 6522 2c0a 0909 0909 0920 2020 kName",...... │ │ │ │ +0001b930: 2470 724c 6f67 293b 0a09 0909 2020 2020 $prLog);.... │ │ │ │ +0001b940: 2473 7461 7453 697a 654e 6577 202b 3d20 $statSizeNew += │ │ │ │ +0001b950: 2873 7461 7428 2224 7461 7267 6574 4469 (stat("$targetDi │ │ │ │ +0001b960: 722f 2472 656c 5061 7468 2f24 626c 6f63 r/$relPath/$bloc │ │ │ │ +0001b970: 6b4e 616d 6522 2929 5b37 5d3b 0a09 0909 kName"))[7];.... │ │ │ │ +0001b980: 7d0a 0909 0965 6c73 650a 0909 097b 0a09 }....else....{.. │ │ │ │ +0001b990: 0909 2020 2020 2470 6172 616c 466f 726b .. $paralFork │ │ │ │ +0001b9a0: 2d3e 6164 645f 6e6f 626c 6f63 6b28 272d ->add_noblock('- │ │ │ │ +0001b9b0: 6675 6e63 7469 6f6e 2720 3d3e 205c 2663 function' => \&c │ │ │ │ +0001b9c0: 6f70 794f 6e65 426c 6f63 6b2c 0a09 0909 opyOneBlock,.... │ │ │ │ +0001b9d0: 0909 0920 2020 2027 2d66 756e 6350 6172 ... '-funcPar │ │ │ │ +0001b9e0: 2720 3d3e 205b 2462 7566 6665 722c 0a09 ' => [$buffer,.. │ │ │ │ +0001b9f0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... "$targ │ │ │ │ +0001ba00: 6574 4469 722f 2472 656c 5061 7468 2f24 etDir/$relPath/$ │ │ │ │ +0001ba10: 626c 6f63 6b4e 616d 6522 2c0a 0909 0909 blockName",..... │ │ │ │ +0001ba20: 0909 0909 2020 2024 7072 4c6f 675d 2c0a .... $prLog],. │ │ │ │ +0001ba30: 0909 0909 0909 2020 2020 272d 696e 666f ...... '-info │ │ │ │ +0001ba40: 2720 3d3e 205b 2464 6967 6573 742c 0a09 ' => [$digest,.. │ │ │ │ +0001ba50: 0909 0909 0909 2022 2472 656c 5061 7468 ...... "$relPath │ │ │ │ +0001ba60: 2f24 626c 6f63 6b4e 616d 6522 2c0a 0909 /$blockName",... │ │ │ │ +0001ba70: 0909 0909 0909 2727 5d29 3b0a 0909 0920 ......'']);.... │ │ │ │ +0001ba80: 2020 202b 2b24 7374 6174 4e6f 466f 726b ++$statNoFork │ │ │ │ +0001ba90: 7343 503b 0a09 0909 7d0a 0909 0970 7269 sCP;....}....pri │ │ │ │ +0001baa0: 6e74 204f 5554 2022 636f 6d70 7265 7373 nt OUT "compress │ │ │ │ +0001bab0: 2024 6469 6765 7374 5c6e 2220 2e0a 0909 $digest\n" .... │ │ │ │ +0001bac0: 0920 2020 2022 2474 6172 6765 7444 6972 . "$targetDir │ │ │ │ +0001bad0: 2f24 7265 6c50 6174 682f 2462 6c6f 636b /$relPath/$block │ │ │ │ +0001bae0: 4e61 6d65 5c6e 223b 0a09 0909 7075 7368 Name\n";....push │ │ │ │ +0001baf0: 2040 6e65 774d 4435 6c69 6e65 2c0a 0909 @newMD5line,... │ │ │ │ +0001bb00: 0920 2020 2022 2464 6967 6573 7420 2463 . "$digest $c │ │ │ │ +0001bb10: 6f6d 7072 6573 7342 6c6f 636b 2024 7265 ompressBlock $re │ │ │ │ +0001bb20: 6c50 6174 682f 2462 6c6f 636b 4e61 6d65 lPath/$blockName │ │ │ │ +0001bb30: 2470 6622 3b0a 0909 2020 2020 7d0a 0909 $pf";... }... │ │ │ │ +0001bb40: 2020 2020 656c 7365 0a09 0920 2020 207b else... { │ │ │ │ +0001bb50: 0a09 0909 6966 2028 2463 6f6d 7072 6573 ....if ($compres │ │ │ │ +0001bb60: 7342 6c6f 636b 2065 7120 2763 2729 0a09 sBlock eq 'c').. │ │ │ │ +0001bb70: 0909 7b0a 2370 7269 6e74 2022 2d31 332d ..{.#print "-13- │ │ │ │ +0001bb80: 2063 6f6d 7072 6573 7342 6c6f 636b 203d compressBlock = │ │ │ │ +0001bb90: 2063 2c20 706f 7374 6669 7820 3d20 2470 c, postfix = $p │ │ │ │ +0001bba0: 6f73 7466 6978 5c6e 223b 0a09 0909 2020 ostfix\n";.... │ │ │ │ +0001bbb0: 2020 6966 2028 2464 6972 6563 7429 0a09 if ($direct).. │ │ │ │ +0001bbc0: 0909 2020 2020 7b0a 0909 0909 6d79 2024 .. {.....my $ │ │ │ │ +0001bbd0: 627a 203d 206e 6577 2049 4f3a 3a43 6f6d bz = new IO::Com │ │ │ │ +0001bbe0: 7072 6573 733a 3a42 7a69 7032 280a 0909 press::Bzip2(... │ │ │ │ +0001bbf0: 0909 2020 2020 2224 7461 7267 6574 4469 .. "$targetDi │ │ │ │ +0001bc00: 722f 2462 6c6f 636b 4669 6c65 2470 6f73 r/$blockFile$pos │ │ │ │ +0001bc10: 7466 6978 222c 0a09 0909 0920 2020 2042 tfix",..... B │ │ │ │ +0001bc20: 6c6f 636b 5369 7a65 3130 304b 203d 3e20 lockSize100K => │ │ │ │ +0001bc30: 3929 3b0a 0909 0909 2462 7a2d 3e73 7973 9);.....$bz->sys │ │ │ │ +0001bc40: 7772 6974 6528 2462 7566 6665 7229 3b0a write($buffer);. │ │ │ │ +0001bc50: 0909 0909 2462 7a2d 3e66 6c75 7368 2829 ....$bz->flush() │ │ │ │ +0001bc60: 3b0a 0909 0909 2462 7a2d 3e65 6f66 2829 ;.....$bz->eof() │ │ │ │ +0001bc70: 3b0a 0a09 0909 0924 7374 6174 5369 7a65 ;......$statSize │ │ │ │ +0001bc80: 4e65 7720 2b3d 0a09 0909 0920 2020 2028 New +=..... ( │ │ │ │ +0001bc90: 7374 6174 2822 2474 6172 6765 7444 6972 stat("$targetDir │ │ │ │ +0001bca0: 2f24 626c 6f63 6b46 696c 6524 706f 7374 /$blockFile$post │ │ │ │ +0001bcb0: 6669 7822 2929 5b37 5d3b 0a09 0909 2020 fix"))[7];.... │ │ │ │ +0001bcc0: 2020 7d0a 0909 0920 2020 2065 6c73 650a }.... else. │ │ │ │ +0001bcd0: 0909 0920 2020 207b 0a09 0909 0924 7061 ... {.....$pa │ │ │ │ +0001bce0: 7261 6c46 6f72 6b2d 3e61 6464 5f6e 6f62 ralFork->add_nob │ │ │ │ +0001bcf0: 6c6f 636b 280a 0909 0909 2020 2020 272d lock(..... '- │ │ │ │ +0001bd00: 6675 6e63 7469 6f6e 2720 3d3e 205c 2663 function' => \&c │ │ │ │ +0001bd10: 6f6d 7072 6573 734f 6e65 426c 6f63 6b2c ompressOneBlock, │ │ │ │ +0001bd20: 0a09 0909 0920 2020 2027 2d66 756e 6350 ..... '-funcP │ │ │ │ +0001bd30: 6172 2720 3d3e 0a09 0909 0920 2020 205b ar' =>..... [ │ │ │ │ +0001bd40: 2462 7566 6665 722c 0a09 0909 0920 2020 $buffer,..... │ │ │ │ +0001bd50: 2020 2224 7461 7267 6574 4469 722f 2462 "$targetDir/$b │ │ │ │ +0001bd60: 6c6f 636b 4669 6c65 2470 6f73 7466 6978 lockFile$postfix │ │ │ │ +0001bd70: 222c 0a09 0909 0920 2020 2020 2463 6f6d ",..... $com │ │ │ │ +0001bd80: 7072 6573 7343 6f6d 6d61 6e64 2c0a 0909 pressCommand,... │ │ │ │ +0001bd90: 0909 2020 2020 2024 636f 6d70 7265 7373 .. $compress │ │ │ │ +0001bda0: 4f70 7469 6f6e 732c 0a09 0909 0920 2020 Options,..... │ │ │ │ +0001bdb0: 2020 2470 724c 6f67 5d2c 0a09 0909 0920 $prLog],..... │ │ │ │ +0001bdc0: 2020 2027 2d69 6e66 6f27 203d 3e20 5b24 '-info' => [$ │ │ │ │ +0001bdd0: 6469 6765 7374 2c0a 0909 0909 0909 2224 digest,......."$ │ │ │ │ +0001bde0: 7265 6c50 6174 682f 2462 6c6f 636b 4e61 relPath/$blockNa │ │ │ │ +0001bdf0: 6d65 222c 0a09 0909 0909 0924 706f 7374 me",.......$post │ │ │ │ +0001be00: 6669 785d 293b 0a09 0909 092b 2b24 7374 fix]);.....++$st │ │ │ │ +0001be10: 6174 4e6f 466f 726b 7343 6f6d 7072 6573 atNoForksCompres │ │ │ │ +0001be20: 733b 0a09 0909 2020 2020 7d0a 0909 0920 s;.... }.... │ │ │ │ +0001be30: 2020 2070 7573 6820 406e 6577 4d44 356c push @newMD5l │ │ │ │ +0001be40: 696e 652c 0a09 0909 0922 2464 6967 6573 ine,....."$diges │ │ │ │ +0001be50: 7420 2463 6f6d 7072 6573 7342 6c6f 636b t $compressBlock │ │ │ │ +0001be60: 2024 7265 6c50 6174 682f 2462 6c6f 636b $relPath/$block │ │ │ │ +0001be70: 4e61 6d65 2470 6f73 7466 6978 223b 0a09 Name$postfix";.. │ │ │ │ +0001be80: 0909 7d0a 0909 0965 6c73 650a 0909 097b ..}....else....{ │ │ │ │ +0001be90: 0a23 7072 696e 7420 222d 3134 2d20 636f .#print "-14- co │ │ │ │ +0001bea0: 6d70 7265 7373 426c 6f63 6b20 3d20 755c mpressBlock = u\ │ │ │ │ +0001beb0: 6e22 3b0a 0909 0920 2020 2069 6620 2824 n";.... if ($ │ │ │ │ +0001bec0: 6469 7265 6374 290a 0909 0920 2020 207b direct).... { │ │ │ │ +0001bed0: 0a09 0909 093a 3a63 6f70 794f 6e65 426c .....::copyOneBl │ │ │ │ +0001bee0: 6f63 6b28 2462 7566 6665 722c 2022 2474 ock($buffer, "$t │ │ │ │ +0001bef0: 6172 6765 7444 6972 2f24 626c 6f63 6b46 argetDir/$blockF │ │ │ │ +0001bf00: 696c 6522 2c0a 0909 0909 0920 2020 2020 ile",...... │ │ │ │ +0001bf10: 2020 2470 724c 6f67 293b 0a09 0909 0924 $prLog);.....$ │ │ │ │ +0001bf20: 7374 6174 5369 7a65 4e65 7720 2b3d 2028 statSizeNew += ( │ │ │ │ +0001bf30: 7374 6174 2822 2474 6172 6765 7444 6972 stat("$targetDir │ │ │ │ +0001bf40: 2f24 626c 6f63 6b46 696c 6522 2929 5b37 /$blockFile"))[7 │ │ │ │ +0001bf50: 5d3b 0a09 0909 2020 2020 7d0a 0909 0920 ];.... }.... │ │ │ │ +0001bf60: 2020 2065 6c73 650a 0909 0920 2020 207b else.... { │ │ │ │ +0001bf70: 0a09 0909 0924 7061 7261 6c46 6f72 6b2d .....$paralFork- │ │ │ │ +0001bf80: 3e61 6464 5f6e 6f62 6c6f 636b 2827 2d66 >add_noblock('-f │ │ │ │ +0001bf90: 756e 6374 696f 6e27 203d 3e20 5c26 636f unction' => \&co │ │ │ │ +0001bfa0: 7079 4f6e 6542 6c6f 636b 2c0a 0909 0909 pyOneBlock,..... │ │ │ │ +0001bfb0: 0909 0927 2d66 756e 6350 6172 2720 3d3e ...'-funcPar' => │ │ │ │ +0001bfc0: 0a09 0909 0909 0909 5b24 6275 6666 6572 ........[$buffer │ │ │ │ +0001bfd0: 2c0a 0909 0909 0909 0920 2224 7461 7267 ,........ "$targ │ │ │ │ +0001bfe0: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile │ │ │ │ +0001bff0: 222c 0a09 0909 0909 0909 2024 7072 4c6f ",........ $prLo │ │ │ │ +0001c000: 675d 2c0a 0909 0909 0909 0927 2d69 6e66 g],........'-inf │ │ │ │ +0001c010: 6f27 203d 3e20 5b24 6469 6765 7374 2c0a o' => [$digest,. │ │ │ │ +0001c020: 0909 0909 0909 0920 2020 2020 2020 2224 ....... "$ │ │ │ │ +0001c030: 7265 6c50 6174 682f 2462 6c6f 636b 4e61 relPath/$blockNa │ │ │ │ +0001c040: 6d65 222c 0a09 0909 0909 0909 0920 2020 me",......... │ │ │ │ +0001c050: 2027 275d 293b 0a09 0909 2020 2020 2b2b '']);.... ++ │ │ │ │ +0001c060: 2473 7461 744e 6f46 6f72 6b73 4350 3b0a $statNoForksCP;. │ │ │ │ +0001c070: 0909 0920 2020 207d 0a09 0909 2020 2020 ... }.... │ │ │ │ +0001c080: 7075 7368 2040 6e65 774d 4435 6c69 6e65 push @newMD5line │ │ │ │ +0001c090: 2c0a 0909 0909 2224 6469 6765 7374 2024 ,....."$digest $ │ │ │ │ +0001c0a0: 636f 6d70 7265 7373 426c 6f63 6b20 2472 compressBlock $r │ │ │ │ +0001c0b0: 656c 5061 7468 2f24 626c 6f63 6b4e 616d elPath/$blockNam │ │ │ │ +0001c0c0: 6522 3b0a 0909 097d 0a09 0920 2020 207d e";....}... } │ │ │ │ +0001c0d0: 0a23 7072 696e 7420 222d 3135 2d20 6d64 .#print "-15- md │ │ │ │ +0001c0e0: 3520 2472 656c 5061 7468 2f24 626c 6f63 5 $relPath/$bloc │ │ │ │ +0001c0f0: 6b4e 616d 655c 6e22 3b0a 0909 7d0a 0909 kName\n";...}... │ │ │ │ +0001c100: 2474 696e 7953 6368 6564 2d3e 7265 7365 $tinySched->rese │ │ │ │ +0001c110: 7428 293b 0a09 2020 2020 7d0a 0920 2020 t();.. }.. │ │ │ │ +0001c120: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$ │ │ │ │ +0001c130: 6a6f 6254 6f44 6f20 3d20 303b 0a09 2020 jobToDo = 0;.. │ │ │ │ +0001c140: 2020 7d0a 097d 0a0a 0923 2323 2323 2323 }..}...####### │ │ │ │ +0001c150: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001c160: 2323 2323 2323 0a09 2474 696e 7953 6368 ######..$tinySch │ │ │ │ +0001c170: 6564 2d3e 7761 6974 2829 3b0a 0a09 2470 ed->wait();...$p │ │ │ │ +0001c180: 6172 466f 726b 546f 446f 203d 2024 7061 arForkToDo = $pa │ │ │ │ +0001c190: 7261 6c46 6f72 6b2d 3e67 6574 4e6f 5573 ralFork->getNoUs │ │ │ │ +0001c1a0: 6564 456e 7472 6965 7328 293b 0a20 2020 edEntries();. │ │ │ │ +0001c1b0: 207d 0a0a 2020 2020 6966 2028 2466 696c }.. if ($fil │ │ │ │ +0001c1c0: 6549 6e29 0a20 2020 207b 0a09 6d79 2024 eIn). {..my $ │ │ │ │ +0001c1d0: 6f75 7420 3d20 2466 696c 6549 6e2d 3e67 out = $fileIn->g │ │ │ │ +0001c1e0: 6574 5354 4445 5252 2829 3b0a 0969 6620 etSTDERR();..if │ │ │ │ +0001c1f0: 2840 246f 7574 290a 097b 0a09 2020 2020 (@$out)..{.. │ │ │ │ +0001c200: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0001c210: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +0001c220: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => ["r │ │ │ │ +0001c230: 6561 6469 6e67 2066 726f 6d20 2473 6f75 eading from $sou │ │ │ │ +0001c240: 7263 6544 6972 2067 656e 6572 6174 6564 rceDir generated │ │ │ │ +0001c250: 222c 0a09 0909 0920 2020 2020 4024 6f75 ",..... @$ou │ │ │ │ +0001c260: 745d 293b 0a09 2020 2020 2b2b 246e 6f45 t]);.. ++$noE │ │ │ │ +0001c270: 7272 6f72 733b 0a09 2020 2020 7265 7475 rrors;.. retu │ │ │ │ +0001c280: 726e 2030 3b0a 097d 0a09 2466 696c 6549 rn 0;..}..$fileI │ │ │ │ +0001c290: 6e2d 3e63 6c6f 7365 2829 3b0a 0924 6669 n->close();..$fi │ │ │ │ +0001c2a0: 6c65 496e 203d 2075 6e64 6566 3b0a 2020 leIn = undef;. │ │ │ │ +0001c2b0: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +0001c2c0: 207b 0a09 636c 6f73 6528 4649 4c45 293b {..close(FILE); │ │ │ │ +0001c2d0: 0a20 2020 207d 0a0a 0a20 2020 2069 6620 . }... if │ │ │ │ +0001c2e0: 2824 6374 696d 6520 213d 2030 2920 2020 ($ctime != 0) │ │ │ │ +0001c2f0: 2023 206e 6f74 2061 2064 6576 6963 650a # not a device. │ │ │ │ +0001c300: 2020 2020 7b0a 0975 6e6c 6573 7320 282d {..unless (- │ │ │ │ +0001c310: 6520 2473 6f75 7263 6544 6972 290a 097b e $sourceDir)..{ │ │ │ │ +0001c320: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +0001c330: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +0001c340: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ │ +0001c350: 3d3e 205b 223c 2473 6f75 7263 6544 6972 => ["<$sourceDir │ │ │ │ +0001c360: 3e20 6465 6c65 7465 6420 6475 7269 6e67 > deleted during │ │ │ │ +0001c370: 2062 6163 6b75 7022 5d29 0a09 0975 6e6c backup"])...unl │ │ │ │ +0001c380: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp │ │ │ │ +0001c390: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ │ +0001c3a0: 6543 6861 6e67 6527 7d3b 0a09 2020 2020 eChange'};.. │ │ │ │ +0001c3b0: 2b2b 246e 6f45 7272 6f72 733b 0a09 7d0a ++$noErrors;..}. │ │ │ │ +0001c3c0: 0965 6c73 650a 097b 0a09 2020 2020 6d79 .else..{.. my │ │ │ │ +0001c3d0: 2028 2461 6374 4d74 696d 652c 2024 6163 ($actMtime, $ac │ │ │ │ +0001c3e0: 7443 7469 6d65 2920 3d20 2873 7461 7428 tCtime) = (stat( │ │ │ │ +0001c3f0: 2473 6f75 7263 6544 6972 2929 5b39 2c31 $sourceDir))[9,1 │ │ │ │ +0001c400: 305d 3b0a 0920 2020 2069 6620 2824 6163 0];.. if ($ac │ │ │ │ +0001c410: 744d 7469 6d65 2021 3d20 246d 7469 6d65 tMtime != $mtime │ │ │ │ +0001c420: 206f 7220 2461 6374 4374 696d 6520 213d or $actCtime != │ │ │ │ +0001c430: 2024 6374 696d 6529 0a09 2020 2020 7b0a $ctime).. {. │ │ │ │ +0001c440: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +0001c450: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +0001c460: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +0001c470: 3d3e 205b 223c 2473 6f75 7263 6544 6972 => ["<$sourceDir │ │ │ │ +0001c480: 3e20 6368 616e 6765 6420 6475 7269 6e67 > changed during │ │ │ │ +0001c490: 2062 6163 6b75 7022 5d29 0a09 0920 2020 backup"])... │ │ │ │ +0001c4a0: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $ │ │ │ │ +0001c4b0: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{ │ │ │ │ +0001c4c0: 2766 696c 6543 6861 6e67 6527 7d3b 0a09 'fileChange'};.. │ │ │ │ +0001c4d0: 092b 2b24 6e6f 5761 726e 696e 6773 3b0a .++$noWarnings;. │ │ │ │ +0001c4e0: 0920 2020 207d 0a09 7d0a 2020 2020 7d0a . }..}. }. │ │ │ │ +0001c4f0: 0a20 2020 2069 6620 286e 6f74 2024 6c61 . if (not $la │ │ │ │ +0001c500: 7465 4c69 6e6b 7320 6f72 2024 6d6b 6469 teLinks or $mkdi │ │ │ │ +0001c510: 724c 6174 654c 696e 6b73 4669 6c65 5061 rLateLinksFilePa │ │ │ │ +0001c520: 7468 290a 2020 2020 7b0a 096d 7920 2463 th). {..my $c │ │ │ │ +0001c530: 7366 203d 2022 2474 6172 6765 7444 6972 sf = "$targetDir │ │ │ │ +0001c540: 2f24 7265 6c50 6174 682f 2462 6c6f 636b /$relPath/$block │ │ │ │ +0001c550: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2 │ │ │ │ +0001c560: 223b 0a09 6d79 2024 6373 6657 7269 7465 ";..my $csfWrite │ │ │ │ +0001c570: 203d 2070 6970 6554 6f46 6f72 6b2d 3e6e = pipeToFork->n │ │ │ │ +0001c580: 6577 2827 2d65 7865 6327 203d 3e20 2762 ew('-exec' => 'b │ │ │ │ +0001c590: 7a69 7032 272c 0a09 0909 0920 2020 2020 zip2',..... │ │ │ │ +0001c5a0: 2020 272d 7374 646f 7574 2720 3d3e 2024 '-stdout' => $ │ │ │ │ +0001c5b0: 6373 662c 0a09 0909 0920 2020 2020 2020 csf,..... │ │ │ │ +0001c5c0: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => │ │ │ │ +0001c5d0: 272f 746d 702f 7374 6275 5069 7065 546f '/tmp/stbuPipeTo │ │ │ │ +0001c5e0: 3130 2d27 2c0a 0909 0909 2020 2020 2020 10-',..... │ │ │ │ +0001c5f0: 2027 2d64 656c 5374 646f 7574 2720 3d3e '-delStdout' => │ │ │ │ +0001c600: 2027 6e6f 272c 0a09 0909 0920 2020 2020 'no',..... │ │ │ │ +0001c610: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ │ +0001c620: 724c 6f67 293b 0a09 2b2b 2473 7461 744e rLog);..++$statN │ │ │ │ +0001c630: 6f46 6f72 6b73 436f 6d70 7265 7373 3b0a oForksCompress;. │ │ │ │ +0001c640: 0a09 6d79 2028 246c 696e 6529 3b0a 0966 ..my ($line);..f │ │ │ │ +0001c650: 6f72 6561 6368 2024 6c69 6e65 2028 406e oreach $line (@n │ │ │ │ +0001c660: 6577 4d44 356c 696e 6529 0a09 7b0a 0920 ewMD5line)..{.. │ │ │ │ +0001c670: 2020 2023 2077 7269 7465 2074 6f20 7465 # write to te │ │ │ │ +0001c680: 6d70 6f72 6172 7920 6669 6c65 0a09 2020 mporary file.. │ │ │ │ +0001c690: 2020 7072 696e 7420 4f55 5420 2224 6c69 print OUT "$li │ │ │ │ +0001c6a0: 6e65 5c6e 223b 0a09 2020 2020 2377 7269 ne\n";.. #wri │ │ │ │ +0001c6b0: 7465 2074 6f20 626c 6f63 6b20 6c6f 6361 te to block loca │ │ │ │ +0001c6c0: 6c20 2e6d 6435 4368 6563 6b53 756d 0a09 l .md5CheckSum.. │ │ │ │ +0001c6d0: 2020 2020 2463 7366 5772 6974 652d 3e70 $csfWrite->p │ │ │ │ +0001c6e0: 7269 6e74 2822 246c 696e 655c 6e22 293b rint("$line\n"); │ │ │ │ +0001c6f0: 0a09 7d0a 0a09 2463 7366 5772 6974 652d ..}...$csfWrite- │ │ │ │ +0001c700: 3e77 6169 7428 293b 0a09 6d79 2024 6f75 >wait();..my $ou │ │ │ │ +0001c710: 7420 3d20 2463 7366 5772 6974 652d 3e67 t = $csfWrite->g │ │ │ │ +0001c720: 6574 5354 4445 5252 2829 3b0a 0969 6620 etSTDERR();..if │ │ │ │ +0001c730: 2840 246f 7574 290a 097b 0a09 2020 2020 (@$out)..{.. │ │ │ │ +0001c740: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0001c750: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +0001c760: 0920 2027 2d73 7472 2720 3d3e 205b 2262 . '-str' => ["b │ │ │ │ +0001c770: 7a69 7032 2072 6570 6f72 7473 2065 7272 zip2 reports err │ │ │ │ +0001c780: 6f72 733a 222c 0a09 0909 0920 2020 2020 ors:",..... │ │ │ │ +0001c790: 4024 6f75 745d 293b 0a09 2020 2020 7265 @$out]);.. re │ │ │ │ +0001c7a0: 7475 726e 2030 3b0a 097d 0a09 2463 7366 turn 0;..}..$csf │ │ │ │ +0001c7b0: 5772 6974 652d 3e63 6c6f 7365 2829 3b0a Write->close();. │ │ │ │ +0001c7c0: 2020 2020 7d0a 0a20 2020 2023 2027 6d64 }.. # 'md │ │ │ │ +0001c7d0: 3520 6f66 2077 686f 6c65 2066 696c 6527 5 of whole file' │ │ │ │ +0001c7e0: 2c20 2773 697a 6520 6f66 206f 7269 6727 , 'size of orig' │ │ │ │ +0001c7f0: 2c20 2773 697a 6520 6f66 2062 6c6f 636b , 'size of block │ │ │ │ +0001c800: 7327 0a20 2020 206d 7920 246d 6435 203d s'. my $md5 = │ │ │ │ +0001c810: 2024 6d64 3541 6c6c 2d3e 6865 7864 6967 $md5All->hexdig │ │ │ │ +0001c820: 6573 7428 293b 0a20 2020 2070 7269 6e74 est();. print │ │ │ │ +0001c830: 204f 5554 2022 616c 6c4d 4435 2024 6d64 OUT "allMD5 $md │ │ │ │ +0001c840: 3520 2473 7461 7453 697a 654f 7269 6720 5 $statSizeOrig │ │ │ │ +0001c850: 2473 7461 7453 697a 654e 6577 2022 202e $statSizeNew " . │ │ │ │ +0001c860: 0a09 2224 7374 6174 4e6f 466f 726b 7343 .."$statNoForksC │ │ │ │ +0001c870: 5020 2473 7461 744e 6f46 6f72 6b73 436f P $statNoForksCo │ │ │ │ +0001c880: 6d70 7265 7373 2024 626c 6f63 6b4e 6f20 mpress $blockNo │ │ │ │ +0001c890: 2473 7461 744e 6f4c 6174 654c 696e 6b73 $statNoLateLinks │ │ │ │ +0001c8a0: 2022 202e 0a09 2224 6e6f 5761 726e 696e " ..."$noWarnin │ │ │ │ +0001c8b0: 6773 2024 6e6f 4572 726f 7273 5c6e 223b gs $noErrors\n"; │ │ │ │ +0001c8c0: 0a20 2020 2063 6c6f 7365 284f 5554 293b . close(OUT); │ │ │ │ +0001c8d0: 0a0a 2020 2020 7265 7475 726e 2030 3b0a .. return 0;. │ │ │ │ +0001c8e0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +0001c8f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001c900: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001c910: 2323 2323 2323 0a23 2045 727a 6575 6774 ######.# Erzeugt │ │ │ │ +0001c920: 2075 6e64 2076 6572 7761 6c74 6574 2044 und verwaltet D │ │ │ │ +0001c930: 424d 2044 6174 6569 656e 206d 6974 2049 BM Dateien mit I │ │ │ │ +0001c940: 6e66 6f72 6d61 7469 6f6e 656e 0a23 20c3 nformationen.# . │ │ │ │ +0001c950: bc62 6572 2062 6573 7465 6865 6e64 6520 .ber bestehende │ │ │ │ +0001c960: 4261 636b 7570 2056 6572 7a65 6963 686e Backup Verzeichn │ │ │ │ +0001c970: 6973 7365 0a70 6163 6b61 6765 206f 6c64 isse.package old │ │ │ │ +0001c980: 4669 6c65 6e61 6d65 3b0a 0a73 7562 206e Filename;..sub n │ │ │ │ +0001c990: 6577 0a7b 0a20 2020 206d 7920 2463 6c61 ew.{. my $cla │ │ │ │ +0001c9a0: 7373 203d 2073 6869 6674 3b0a 2020 2020 ss = shift;. │ │ │ │ +0001c9b0: 6d79 2024 7365 6c66 203d 207b 7d3b 0a0a my $self = {};.. │ │ │ │ +0001c9c0: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params) │ │ │ │ +0001c9d0: 203d 2028 272d 6462 6d42 6173 654e 616d = ('-dbmBaseNam │ │ │ │ +0001c9e0: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde │ │ │ │ +0001c9f0: 662c 0a09 0920 2020 2027 2d69 6e64 6578 f,... '-index │ │ │ │ +0001ca00: 4469 7227 2020 2020 2020 2020 2020 3d3e Dir' => │ │ │ │ +0001ca10: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +0001ca20: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' │ │ │ │ +0001ca30: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +0001ca40: 2020 2027 2d61 6b74 4469 7227 2020 2020 '-aktDir' │ │ │ │ +0001ca50: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ │ +0001ca60: 2c0a 0909 2020 2020 272d 6f74 6865 7242 ,... '-otherB │ │ │ │ +0001ca70: 6163 6b75 7053 6572 6965 7327 203d 3e20 ackupSeries' => │ │ │ │ +0001ca80: 5b5d 2c0a 0909 2020 2020 272d 7072 4c6f [],... '-prLo │ │ │ │ +0001ca90: 6727 2020 2020 2020 2020 2020 2020 203d g' = │ │ │ │ +0001caa0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +0001cab0: 2d63 6865 636b 5375 6d46 696c 6527 2020 -checkSumFile' │ │ │ │ +0001cac0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +0001cad0: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode' │ │ │ │ +0001cae0: 2020 2020 2020 2020 203d 3e20 276e 6f27 => 'no' │ │ │ │ +0001caf0: 2c0a 0909 2020 2020 272d 7361 7665 5241 ,... '-saveRA │ │ │ │ +0001cb00: 4d27 2020 2020 2020 2020 2020 203d 3e20 M' => │ │ │ │ +0001cb10: 302c 0a09 0920 2020 2027 2d66 6c61 6742 0,... '-flagB │ │ │ │ +0001cb20: 6c6f 636b 4465 7669 6365 2720 2020 3d3e lockDevice' => │ │ │ │ +0001cb30: 2030 0a09 293b 0a0a 2020 2020 263a 3a63 0..);.. &::c │ │ │ │ +0001cb40: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams │ │ │ │ +0001cb50: 285c 2570 6172 616d 732c 205c 405f 2c20 (\%params, \@_, │ │ │ │ +0001cb60: 276f 6c64 4669 6c65 6e61 6d65 3a3a 6e65 'oldFilename::ne │ │ │ │ +0001cb70: 7727 2c0a 0909 0920 5b27 2d64 626d 4261 w',.... ['-dbmBa │ │ │ │ +0001cb80: 7365 4e61 6d65 272c 2027 2d69 6e64 6578 seName', '-index │ │ │ │ +0001cb90: 4469 7227 2c0a 0909 0920 2027 2d61 6b74 Dir',.... '-akt │ │ │ │ +0001cba0: 4469 7227 2c20 272d 6f74 6865 7242 6163 Dir', '-otherBac │ │ │ │ +0001cbb0: 6b75 7053 6572 6965 7327 2c0a 0909 0920 kupSeries',.... │ │ │ │ +0001cbc0: 2027 2d70 724c 6f67 272c 2027 2d63 6865 '-prLog', '-che │ │ │ │ +0001cbd0: 636b 5375 6d46 696c 6527 5d29 3b0a 2020 ckSumFile']);. │ │ │ │ +0001cbe0: 2020 263a 3a73 6574 5061 7261 6d73 4469 &::setParamsDi │ │ │ │ +0001cbf0: 7265 6374 2824 7365 6c66 2c20 5c25 7061 rect($self, \%pa │ │ │ │ +0001cc00: 7261 6d73 293b 0a0a 2020 2020 6d79 2024 rams);.. my $ │ │ │ │ +0001cc10: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ │ +0001cc20: 7320 3d20 2473 656c 662d 3e7b 276f 7468 s = $self->{'oth │ │ │ │ +0001cc30: 6572 4261 636b 7570 5365 7269 6573 277d erBackupSeries'} │ │ │ │ +0001cc40: 3b0a 2020 2020 6d79 2024 7072 4c6f 6720 ;. my $prLog │ │ │ │ +0001cc50: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog │ │ │ │ +0001cc60: 277d 3b0a 2020 2020 6d79 2024 666c 6167 '};. my $flag │ │ │ │ +0001cc70: 426c 6f63 6b44 6576 6963 6520 3d20 2473 BlockDevice = $s │ │ │ │ +0001cc80: 656c 662d 3e7b 2766 6c61 6742 6c6f 636b elf->{'flagBlock │ │ │ │ +0001cc90: 4465 7669 6365 277d 3b0a 0a20 2020 206d Device'};.. m │ │ │ │ +0001cca0: 7920 2825 4442 4d66 696c 656e 616d 652c y (%DBMfilename, │ │ │ │ +0001ccb0: 2025 4442 4d6d 6435 2c20 2544 424d 626c %DBMmd5, %DBMbl │ │ │ │ +0001ccc0: 6f63 6b29 3b0a 2020 2020 2473 656c 662d ock);. $self- │ │ │ │ +0001ccd0: 3e7b 2744 424d 6669 6c65 6e61 6d65 277d >{'DBMfilename'} │ │ │ │ +0001cce0: 203d 205c 2544 424d 6669 6c65 6e61 6d65 = \%DBMfilename │ │ │ │ +0001ccf0: 3b0a 2020 2020 2473 656c 662d 3e7b 2744 ;. $self->{'D │ │ │ │ +0001cd00: 424d 6d64 3527 7d20 3d20 5c25 4442 4d6d BMmd5'} = \%DBMm │ │ │ │ +0001cd10: 6435 3b0a 2020 2020 2473 656c 662d 3e7b d5;. $self->{ │ │ │ │ +0001cd20: 2744 424d 626c 6f63 6b27 7d20 3d20 5c25 'DBMblock'} = \% │ │ │ │ +0001cd30: 4442 4d62 6c6f 636b 3b0a 0a20 2020 2069 DBMblock;.. i │ │ │ │ +0001cd40: 6620 2824 7365 6c66 2d3e 7b27 7361 7665 f ($self->{'save │ │ │ │ +0001cd50: 5241 4d27 7d29 0a20 2020 207b 0a09 6d79 RAM'}). {..my │ │ │ │ +0001cd60: 2028 2444 424d 6669 6c65 6e61 6d65 2c20 ($DBMfilename, │ │ │ │ +0001cd70: 2444 424d 6d64 3529 3b0a 0924 7365 6c66 $DBMmd5);..$self │ │ │ │ +0001cd80: 2d3e 7b27 4442 4d66 696c 656e 616d 6553 ->{'DBMfilenameS │ │ │ │ +0001cd90: 7472 696e 6727 7d20 3d20 2444 424d 6669 tring'} = $DBMfi │ │ │ │ +0001cda0: 6c65 6e61 6d65 203d 0a09 2020 2020 263a lename =.. &: │ │ │ │ +0001cdb0: 3a75 6e69 7146 696c 654e 616d 6528 2473 :uniqFileName($s │ │ │ │ +0001cdc0: 656c 662d 3e7b 2764 626d 4261 7365 4e61 elf->{'dbmBaseNa │ │ │ │ +0001cdd0: 6d65 277d 202e 2022 2e66 696c 652e 2424 me'} . ".file.$$ │ │ │ │ +0001cde0: 2e22 293b 0a09 2473 656c 662d 3e7b 2744 .");..$self->{'D │ │ │ │ +0001cdf0: 424d 6d64 3553 7472 696e 6727 7d20 3d20 BMmd5String'} = │ │ │ │ +0001ce00: 2444 424d 6d64 3520 3d0a 0920 2020 2026 $DBMmd5 =.. & │ │ │ │ +0001ce10: 3a3a 756e 6971 4669 6c65 4e61 6d65 2824 ::uniqFileName($ │ │ │ │ +0001ce20: 7365 6c66 2d3e 7b27 6462 6d42 6173 654e self->{'dbmBaseN │ │ │ │ +0001ce30: 616d 6527 7d20 2e20 222e 6d64 352e 2424 ame'} . ".md5.$$ │ │ │ │ +0001ce40: 2e22 293b 0a0a 0a09 2320 7465 7374 656e .");....# testen │ │ │ │ +0001ce50: 2061 7566 2061 6c74 6572 2044 6174 6569 auf alter Datei │ │ │ │ +0001ce60: 2075 6e64 2045 727a 6575 6765 6e20 6465 und Erzeugen de │ │ │ │ +0001ce70: 7220 6265 6964 656e 2064 626d 2d46 696c r beiden dbm-Fil │ │ │ │ +0001ce80: 6573 0a09 263a 3a63 6865 636b 4465 6c53 es..&::checkDelS │ │ │ │ +0001ce90: 796d 4c69 6e6b 2824 4442 4d66 696c 656e ymLink($DBMfilen │ │ │ │ +0001cea0: 616d 652c 2024 7072 4c6f 672c 2030 7830 ame, $prLog, 0x0 │ │ │ │ +0001ceb0: 3129 3b0a 0969 6620 282d 6520 2444 424d 1);..if (-e $DBM │ │ │ │ +0001cec0: 6669 6c65 6e61 6d65 290a 097b 0a09 2020 filename)..{.. │ │ │ │ +0001ced0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +0001cee0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +0001cef0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ │ +0001cf00: 2264 656c 6574 696e 6720 3c24 4442 4d66 "deleting <$DBMf │ │ │ │ +0001cf10: 696c 656e 616d 653e 225d 293b 0a09 2020 ilename>"]);.. │ │ │ │ +0001cf20: 2020 756e 6c69 6e6b 2024 4442 4d66 696c unlink $DBMfil │ │ │ │ +0001cf30: 656e 616d 6520 6f72 0a09 0924 7072 4c6f ename or...$prLo │ │ │ │ +0001cf40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +0001cf50: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... │ │ │ │ +0001cf60: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +0001cf70: 2020 2020 205b 2263 616e 6e6f 7420 6465 ["cannot de │ │ │ │ +0001cf80: 6c65 7465 203c 2444 424d 6669 6c65 6e61 lete <$DBMfilena │ │ │ │ +0001cf90: 6d65 3e2c 2065 7869 7469 6e67 225d 2c0a me>, exiting"],. │ │ │ │ +0001cfa0: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit' │ │ │ │ +0001cfb0: 203d 3e20 3129 3b0a 097d 0a09 6462 6d6f => 1);..}..dbmo │ │ │ │ +0001cfc0: 7065 6e28 2544 424d 6669 6c65 6e61 6d65 pen(%DBMfilename │ │ │ │ +0001cfd0: 2c20 2444 424d 6669 6c65 6e61 6d65 2c20 , $DBMfilename, │ │ │ │ +0001cfe0: 3036 3030 293b 0a09 263a 3a63 6865 636b 0600);..&::check │ │ │ │ +0001cff0: 4465 6c53 796d 4c69 6e6b 2824 4442 4d6d DelSymLink($DBMm │ │ │ │ +0001d000: 6435 2c20 2470 724c 6f67 2c20 3078 3031 d5, $prLog, 0x01 │ │ │ │ +0001d010: 293b 0a09 6966 2028 2d65 2024 4442 4d6d );..if (-e $DBMm │ │ │ │ +0001d020: 6435 290a 097b 0a09 2020 2020 2470 724c d5)..{.. $prL │ │ │ │ +0001d030: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +0001d040: 2720 3d3e 2027 5727 2c0a 0909 0920 2027 ' => 'W',.... ' │ │ │ │ +0001d050: 2d73 7472 2720 3d3e 205b 2264 656c 6574 -str' => ["delet │ │ │ │ +0001d060: 696e 6720 3c24 4442 4d66 696c 656e 616d ing <$DBMfilenam │ │ │ │ +0001d070: 653e 225d 293b 0a09 2020 2020 756e 6c69 e>"]);.. unli │ │ │ │ +0001d080: 6e6b 2024 4442 4d6d 6435 206f 720a 0909 nk $DBMmd5 or... │ │ │ │ +0001d090: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0001d0a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +0001d0b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +0001d0c0: 0a09 0909 2020 2020 2020 5b22 6361 6e6e .... ["cann │ │ │ │ +0001d0d0: 6f74 2064 656c 6574 6520 3c24 4442 4d66 ot delete <$DBMf │ │ │ │ +0001d0e0: 696c 656e 616d 653e 2c20 6578 6974 696e ilename>, exitin │ │ │ │ +0001d0f0: 6722 5d2c 0a09 0909 2020 2020 2020 272d g"],.... '- │ │ │ │ +0001d100: 6578 6974 2720 3d3e 2031 293b 0a09 7d0a exit' => 1);..}. │ │ │ │ +0001d110: 0964 626d 6f70 656e 2825 4442 4d6d 6435 .dbmopen(%DBMmd5 │ │ │ │ +0001d120: 2c20 2444 424d 6d64 352c 2030 3630 3029 , $DBMmd5, 0600) │ │ │ │ +0001d130: 3b0a 2020 2020 7d0a 0a20 2020 2023 204c ;. }.. # L │ │ │ │ +0001d140: 6973 7465 206d 6974 2061 6c6c 656e 2044 iste mit allen D │ │ │ │ +0001d150: 6972 6563 746f 7269 6573 2065 7273 7465 irectories erste │ │ │ │ +0001d160: 6c6c 656e 0a20 2020 206d 7920 2840 6261 llen. my (@ba │ │ │ │ +0001d170: 636b 7570 4469 7273 2920 3d20 2824 7365 ckupDirs) = ($se │ │ │ │ +0001d180: 6c66 2d3e 7b27 616b 7444 6972 277d 293b lf->{'aktDir'}); │ │ │ │ +0001d190: 0a20 2020 2070 7573 6820 4062 6163 6b75 . push @backu │ │ │ │ +0001d1a0: 7044 6972 732c 2040 246f 7468 6572 4261 pDirs, @$otherBa │ │ │ │ +0001d1b0: 636b 7570 5365 7269 6573 3b0a 2020 2020 ckupSeries;. │ │ │ │ +0001d1c0: 2473 656c 662d 3e7b 2762 6163 6b75 7044 $self->{'backupD │ │ │ │ +0001d1d0: 6972 7327 7d20 3d20 5c40 6261 636b 7570 irs'} = \@backup │ │ │ │ +0001d1e0: 4469 7273 3b0a 0a20 2020 206d 7920 2840 Dirs;.. my (@ │ │ │ │ +0001d1f0: 6264 2c20 2464 6972 2c20 2569 6e6f 6465 bd, $dir, %inode │ │ │ │ +0001d200: 2c20 2464 6576 4469 7229 3b0a 2020 2020 , $devDir);. │ │ │ │ +0001d210: 6d79 2024 6465 7620 3d20 756e 6465 663b my $dev = undef; │ │ │ │ +0001d220: 0a20 2020 2066 6f72 6561 6368 2024 6469 . foreach $di │ │ │ │ +0001d230: 7220 2840 6261 636b 7570 4469 7273 290a r (@backupDirs). │ │ │ │ +0001d240: 2020 2020 7b0a 096d 7920 2824 5f64 6576 {..my ($_dev │ │ │ │ +0001d250: 2c20 245f 696e 6f64 6529 203d 2028 7374 , $_inode) = (st │ │ │ │ +0001d260: 6174 2824 6469 7229 295b 302c 315d 3b0a at($dir))[0,1];. │ │ │ │ +0001d270: 0969 6620 2824 6465 7629 2020 2020 2020 .if ($dev) │ │ │ │ +0001d280: 2020 2020 2020 2020 2020 2023 20c3 bc62 # ..b │ │ │ │ +0001d290: 6572 7072 c3bc 6665 6e2c 206f 6220 616c erpr..fen, ob al │ │ │ │ +0001d2a0: 6c65 2069 6d20 7365 6c62 656e 2064 6576 le im selben dev │ │ │ │ +0001d2b0: 6963 650a 097b 0a09 2020 2020 6966 2028 ice..{.. if ( │ │ │ │ +0001d2c0: 2464 6576 206e 6520 245f 6465 7629 0a09 $dev ne $_dev).. │ │ │ │ +0001d2d0: 2020 2020 7b0a 0909 726d 6469 7220 2473 {...rmdir $s │ │ │ │ +0001d2e0: 656c 662d 3e7b 2761 6b74 4469 7227 7d3b elf->{'aktDir'}; │ │ │ │ +0001d2f0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ │ +0001d300: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +0001d310: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ │ +0001d320: 203d 3e20 5b22 3c24 6465 7644 6972 3e20 => ["<$devDir> │ │ │ │ +0001d330: 616e 6420 3c24 6469 723e 2061 7265 2022 and <$dir> are " │ │ │ │ +0001d340: 202e 0a09 0909 0909 2022 6e6f 7420 6f6e ....... "not on │ │ │ │ +0001d350: 2074 6865 2073 616d 6520 6465 7669 6365 the same device │ │ │ │ +0001d360: 225d 2c0a 0909 0920 2020 2020 2027 2d65 "],.... '-e │ │ │ │ +0001d370: 7869 7427 203d 3e20 3129 3b0a 0920 2020 xit' => 1);.. │ │ │ │ +0001d380: 207d 0a09 7d0a 0965 6c73 650a 097b 0a09 }..}..else..{.. │ │ │ │ +0001d390: 2020 2020 2464 6576 203d 2024 5f64 6576 $dev = $_dev │ │ │ │ +0001d3a0: 3b20 2020 2020 2020 2023 206d 6572 6b65 ; # merke │ │ │ │ +0001d3b0: 6e0a 0920 2020 2024 6465 7644 6972 203d n.. $devDir = │ │ │ │ +0001d3c0: 2024 6469 723b 0a09 7d0a 0a09 6966 2028 $dir;..}...if ( │ │ │ │ +0001d3d0: 6578 6973 7473 2024 696e 6f64 657b 245f exists $inode{$_ │ │ │ │ +0001d3e0: 696e 6f64 657d 290a 097b 0a09 2020 2020 inode})..{.. │ │ │ │ +0001d3f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0001d400: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +0001d410: 0920 2027 2d73 7472 2720 3d3e 205b 223c . '-str' => ["< │ │ │ │ +0001d420: 2464 6972 3e20 6973 2074 6865 2073 616d $dir> is the sam │ │ │ │ +0001d430: 6520 6469 7265 6374 6f72 7920 6173 203c e directory as < │ │ │ │ +0001d440: 2220 2e0a 0909 0909 2020 2020 2024 696e " ...... $in │ │ │ │ +0001d450: 6f64 657b 245f 696e 6f64 657d 202e 2022 ode{$_inode} . " │ │ │ │ +0001d460: 3e2c 2069 676e 6f72 696e 6722 5d29 3b0a >, ignoring"]);. │ │ │ │ +0001d470: 0920 2020 206e 6578 743b 0a09 7d0a 0965 . next;..}..e │ │ │ │ +0001d480: 6c73 650a 097b 0a09 2020 2020 2469 6e6f lse..{.. $ino │ │ │ │ +0001d490: 6465 7b24 5f69 6e6f 6465 7d20 3d20 2464 de{$_inode} = $d │ │ │ │ +0001d4a0: 6972 3b0a 097d 0a0a 0970 7573 6820 4062 ir;..}...push @b │ │ │ │ +0001d4b0: 642c 2024 6469 723b 0a20 2020 207d 0a20 d, $dir;. }. │ │ │ │ +0001d4c0: 2020 2040 6261 636b 7570 4469 7273 203d @backupDirs = │ │ │ │ +0001d4d0: 2040 6264 3b0a 0a23 7072 696e 7420 2262 @bd;..#print "b │ │ │ │ +0001d4e0: 6163 6b75 7044 6972 7320 3d20 4062 6163 ackupDirs = @bac │ │ │ │ +0001d4f0: 6b75 7044 6972 735c 6e22 3b0a 2020 2020 kupDirs\n";. │ │ │ │ +0001d500: 6d79 2024 693b 0a20 2020 206d 7920 246e my $i;. my $n │ │ │ │ +0001d510: 6f45 6e74 7269 6573 496e 4442 4d20 3d20 oEntriesInDBM = │ │ │ │ +0001d520: 303b 0a20 2020 206d 7920 246e 6f45 6e74 0;. my $noEnt │ │ │ │ +0001d530: 7269 6573 426c 6f63 6b43 6865 636b 203d riesBlockCheck = │ │ │ │ +0001d540: 2030 3b0a 2020 2020 666f 7220 2824 6920 0;. for ($i │ │ │ │ +0001d550: 3d20 3120 3b20 2469 203c 2040 6261 636b = 1 ; $i < @back │ │ │ │ +0001d560: 7570 4469 7273 203b 2024 692b 2b29 0a20 upDirs ; $i++). │ │ │ │ +0001d570: 2020 207b 0a09 6d79 2024 6420 3d20 2462 {..my $d = $b │ │ │ │ +0001d580: 6163 6b75 7044 6972 735b 2469 5d3b 0a0a ackupDirs[$i];.. │ │ │ │ +0001d590: 0969 6620 282d 6620 2224 642f 2463 6865 .if (-f "$d/$che │ │ │ │ +0001d5a0: 636b 5375 6d46 696c 652e 627a 3222 206f ckSumFile.bz2" o │ │ │ │ +0001d5b0: 7220 2d66 2022 2464 2f24 6368 6563 6b53 r -f "$d/$checkS │ │ │ │ +0001d5c0: 756d 4669 6c65 2229 0a09 7b0a 2370 7269 umFile")..{.#pri │ │ │ │ +0001d5d0: 6e74 2022 2469 202d 3e20 2464 5c6e 223b nt "$i -> $d\n"; │ │ │ │ +0001d5e0: 0a09 2020 2020 6d79 2028 2465 312c 2024 .. my ($e1, $ │ │ │ │ +0001d5f0: 6532 2920 3d0a 0909 263a 3a62 7569 6c64 e2) =...&::build │ │ │ │ +0001d600: 4442 4d73 2827 2d64 626d 4b65 7949 7346 DBMs('-dbmKeyIsF │ │ │ │ +0001d610: 696c 656e 616d 6527 203d 3e20 5c25 4442 ilename' => \%DB │ │ │ │ +0001d620: 4d66 696c 656e 616d 652c 0a09 0909 2020 Mfilename,.... │ │ │ │ +0001d630: 2020 2027 2d64 626d 4b65 7949 734d 4435 '-dbmKeyIsMD5 │ │ │ │ +0001d640: 5375 6d27 203d 3e20 5c25 4442 4d6d 6435 Sum' => \%DBMmd5 │ │ │ │ +0001d650: 2c0a 0909 0920 2020 2020 272d 6462 6d42 ,.... '-dbmB │ │ │ │ +0001d660: 6c6f 636b 4368 6563 6b27 203d 3e20 5c25 lockCheck' => \% │ │ │ │ +0001d670: 4442 4d62 6c6f 636b 2c0a 0909 0920 2020 DBMblock,.... │ │ │ │ +0001d680: 2020 272d 666c 6167 426c 6f63 6b44 6576 '-flagBlockDev │ │ │ │ +0001d690: 6963 6527 203d 3e20 2466 6c61 6742 6c6f ice' => $flagBlo │ │ │ │ +0001d6a0: 636b 4465 7669 6365 2c0a 0909 0920 2020 ckDevice,.... │ │ │ │ +0001d6b0: 2020 272d 696e 6465 7844 6972 2720 3d3e '-indexDir' => │ │ │ │ +0001d6c0: 2024 7365 6c66 2d3e 7b27 696e 6465 7844 $self->{'indexD │ │ │ │ +0001d6d0: 6972 277d 2c0a 0909 0920 2020 2020 272d ir'},.... '- │ │ │ │ +0001d6e0: 6261 636b 7570 526f 6f74 2720 3d3e 2024 backupRoot' => $ │ │ │ │ +0001d6f0: 642c 0a09 0909 2020 2020 2027 2d62 6163 d,.... '-bac │ │ │ │ +0001d700: 6b75 7044 6972 496e 6465 7827 203d 3e20 kupDirIndex' => │ │ │ │ +0001d710: 2469 2c0a 0909 0920 2020 2020 272d 6e6f $i,.... '-no │ │ │ │ +0001d720: 4261 636b 7570 4469 7227 203d 3e20 7363 BackupDir' => sc │ │ │ │ +0001d730: 616c 6172 2040 6261 636b 7570 4469 7273 alar @backupDirs │ │ │ │ +0001d740: 2c0a 0909 0920 2020 2020 272d 6368 6563 ,.... '-chec │ │ │ │ +0001d750: 6b53 756d 4669 6c65 2720 3d3e 2024 6368 kSumFile' => $ch │ │ │ │ +0001d760: 6563 6b53 756d 4669 6c65 2c0a 0909 0920 eckSumFile,.... │ │ │ │ +0001d770: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi │ │ │ │ +0001d780: 6c65 5665 7273 696f 6e27 0a09 0909 2020 leVersion'.... │ │ │ │ +0001d790: 2020 203d 3e20 246d 6169 6e3a 3a63 6865 => $main::che │ │ │ │ +0001d7a0: 636b 5375 6d46 696c 6556 6572 7369 6f6e ckSumFileVersion │ │ │ │ +0001d7b0: 2c0a 0909 0920 2020 2020 272d 626c 6f63 ,.... '-bloc │ │ │ │ +0001d7c0: 6b43 6865 636b 5375 6d46 696c 6527 203d kCheckSumFile' = │ │ │ │ +0001d7d0: 3e20 2462 6c6f 636b 4368 6563 6b53 756d > $blockCheckSum │ │ │ │ +0001d7e0: 4669 6c65 2c0a 0909 0920 2020 2020 272d File,.... '- │ │ │ │ +0001d7f0: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' │ │ │ │ +0001d800: 3d3e 2024 7072 6f67 7265 7373 5265 706f => $progressRepo │ │ │ │ +0001d810: 7274 2c0a 0909 0920 2020 2020 272d 7072 rt,.... '-pr │ │ │ │ +0001d820: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,. │ │ │ │ +0001d830: 0909 0920 2020 2020 272d 7361 7665 5241 ... '-saveRA │ │ │ │ +0001d840: 4d27 203d 3e20 2473 6176 6552 414d 2c0a M' => $saveRAM,. │ │ │ │ +0001d850: 0909 0920 2020 2020 272d 6462 6d42 6173 ... '-dbmBas │ │ │ │ +0001d860: 654e 616d 6527 203d 3e20 2224 746d 7064 eName' => "$tmpd │ │ │ │ +0001d870: 6972 2f64 626d 2229 3b0a 0920 2020 2024 ir/dbm");.. $ │ │ │ │ +0001d880: 6e6f 456e 7472 6965 7349 6e44 424d 202b noEntriesInDBM + │ │ │ │ +0001d890: 3d20 2465 313b 0a09 2020 2020 246e 6f45 = $e1;.. $noE │ │ │ │ +0001d8a0: 6e74 7269 6573 426c 6f63 6b43 6865 636b ntriesBlockCheck │ │ │ │ +0001d8b0: 202b 3d20 2465 323b 0a09 7d0a 2020 2020 += $e2;..}. │ │ │ │ +0001d8c0: 7d0a 2020 2020 2470 724c 6f67 2d3e 7072 }. $prLog->pr │ │ │ │ +0001d8d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +0001d8e0: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' = │ │ │ │ +0001d8f0: 3e20 5b22 246e 6f45 6e74 7269 6573 496e > ["$noEntriesIn │ │ │ │ +0001d900: 4442 4d20 656e 7472 6965 7320 696e 2064 DBM entries in d │ │ │ │ +0001d910: 626d 2066 696c 6573 222c 0a09 0909 2020 bm files",.... │ │ │ │ +0001d920: 2020 2022 246e 6f45 6e74 7269 6573 426c "$noEntriesBl │ │ │ │ +0001d930: 6f63 6b43 6865 636b 2065 6e74 7269 6573 ockCheck entries │ │ │ │ +0001d940: 2069 6e20 6462 6d20 626c 6f63 6b20 6669 in dbm block fi │ │ │ │ +0001d950: 6c65 7322 5d29 3b0a 0a20 2020 2062 6c65 les"]);.. ble │ │ │ │ +0001d960: 7373 2024 7365 6c66 2c20 2463 6c61 7373 ss $self, $class │ │ │ │ +0001d970: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +0001d980: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001d990: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +0001d9a0: 7562 2067 6574 496e 6465 7844 6972 0a7b ub getIndexDir.{ │ │ │ │ +0001d9b0: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ │ +0001d9c0: 7368 6966 743b 0a0a 2020 2020 7265 7475 shift;.. retu │ │ │ │ +0001d9d0: 726e 2024 7365 6c66 2d3e 7b27 696e 6465 rn $self->{'inde │ │ │ │ +0001d9e0: 7844 6972 277d 3b0a 7d0a 0a0a 2323 2323 xDir'};.}...#### │ │ │ │ +0001d9f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001da00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001da10: 2323 2323 0a73 7562 2067 6574 4442 4d6d ####.sub getDBMm │ │ │ │ +0001da20: 6435 0a7b 0a20 2020 206d 7920 2473 656c d5.{. my $sel │ │ │ │ +0001da30: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. │ │ │ │ +0001da40: 7265 7475 726e 2024 7365 6c66 2d3e 7b27 return $self->{' │ │ │ │ +0001da50: 4442 4d6d 6435 277d 3b0a 7d0a 0a0a 2323 DBMmd5'};.}...## │ │ │ │ +0001da60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001da70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001da80: 2323 2323 2323 0a73 7562 2067 6574 496e ######.sub getIn │ │ │ │ +0001da90: 6f64 6562 6163 6b75 7043 6f6d 7072 4374 odebackupComprCt │ │ │ │ +0001daa0: 696d 654d 7469 6d65 5369 7a65 4d44 350a imeMtimeSizeMD5. │ │ │ │ +0001dab0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +0001dac0: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my │ │ │ │ +0001dad0: 2466 696c 656e 616d 6520 3d20 7368 6966 $filename = shif │ │ │ │ +0001dae0: 743b 0a0a 2020 2020 6d79 2024 4442 4d66 t;.. my $DBMf │ │ │ │ +0001daf0: 696c 656e 616d 6520 3d20 2473 656c 662d ilename = $self- │ │ │ │ +0001db00: 3e7b 2744 424d 6669 6c65 6e61 6d65 277d >{'DBMfilename'} │ │ │ │ +0001db10: 3b0a 2020 2020 2466 696c 656e 616d 6520 ;. $filename │ │ │ │ +0001db20: 3d20 2473 656c 662d 3e7b 2769 6e64 6578 = $self->{'index │ │ │ │ +0001db30: 4469 7227 7d2d 3e73 6574 496e 6465 7828 Dir'}->setIndex( │ │ │ │ +0001db40: 2466 696c 656e 616d 6529 3b0a 0a20 2020 $filename);.. │ │ │ │ +0001db50: 2069 6620 2865 7869 7374 7320 2424 4442 if (exists $$DB │ │ │ │ +0001db60: 4d66 696c 656e 616d 657b 2466 696c 656e Mfilename{$filen │ │ │ │ +0001db70: 616d 657d 290a 2020 2020 7b0a 0972 6574 ame}). {..ret │ │ │ │ +0001db80: 7572 6e20 756e 7061 636b 2827 6149 4946 urn unpack('aIIF │ │ │ │ +0001db90: 4833 3227 2c20 2424 4442 4d66 696c 656e H32', $$DBMfilen │ │ │ │ +0001dba0: 616d 657b 2466 696c 656e 616d 657d 293b ame{$filename}); │ │ │ │ +0001dbb0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ │ +0001dbc0: 2020 2020 7b0a 0972 6574 7572 6e20 2829 {..return () │ │ │ │ +0001dbd0: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...#### │ │ │ │ +0001dbe0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001dbf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001dc00: 2323 2323 0a23 2072 6574 7572 6e73 2028 ####.# returns ( │ │ │ │ +0001dc10: 2469 6e6f 6465 4261 636b 7570 2024 636f $inodeBackup $co │ │ │ │ +0001dc20: 6d70 7220 2462 6163 6b75 7044 6972 496e mpr $backupDirIn │ │ │ │ +0001dc30: 6465 7820 2462 6163 6b75 7044 6972 2024 dex $backupDir $ │ │ │ │ +0001dc40: 6669 6c65 6e61 6d65 290a 7375 6220 6765 filename).sub ge │ │ │ │ +0001dc50: 7446 696c 656e 616d 650a 7b0a 2020 2020 tFilename.{. │ │ │ │ +0001dc60: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ │ +0001dc70: 3b0a 0a20 2020 206d 7920 246d 6435 7375 ;.. my $md5su │ │ │ │ +0001dc80: 6d20 3d20 7368 6966 743b 0a0a 2020 2020 m = shift;.. │ │ │ │ +0001dc90: 6d79 2024 4442 4d6d 6435 203d 2024 7365 my $DBMmd5 = $se │ │ │ │ +0001dca0: 6c66 2d3e 7b27 4442 4d6d 6435 277d 3b0a lf->{'DBMmd5'};. │ │ │ │ +0001dcb0: 0a23 7072 696e 7420 222d 322d 246d 6435 .#print "-2-$md5 │ │ │ │ +0001dcc0: 7375 6d20 2824 4442 4d6d 6435 295c 6e22 sum ($DBMmd5)\n" │ │ │ │ +0001dcd0: 3b0a 2020 2020 6d79 2024 6d64 3570 6163 ;. my $md5pac │ │ │ │ +0001dce0: 6b20 3d20 7061 636b 2827 4833 3227 2c20 k = pack('H32', │ │ │ │ +0001dcf0: 246d 6435 7375 6d29 3b0a 2020 2020 6966 $md5sum);. if │ │ │ │ +0001dd00: 2028 6578 6973 7473 2024 2444 424d 6d64 (exists $$DBMmd │ │ │ │ +0001dd10: 357b 246d 6435 7061 636b 7d29 0a20 2020 5{$md5pack}). │ │ │ │ +0001dd20: 207b 0a23 7072 696e 7420 225c 7467 6566 {.#print "\tgef │ │ │ │ +0001dd30: 756e 6465 6e5c 6e22 3b0a 096d 7920 2840 unden\n";..my (@ │ │ │ │ +0001dd40: 7229 203d 2075 6e70 6163 6b28 2746 6153 r) = unpack('FaS │ │ │ │ +0001dd50: 612a 272c 2024 2444 424d 6d64 357b 246d a*', $$DBMmd5{$m │ │ │ │ +0001dd60: 6435 7061 636b 7d29 3b0a 096d 7920 2462 d5pack});..my $b │ │ │ │ +0001dd70: 6163 6b75 7044 6972 7320 3d20 2473 656c ackupDirs = $sel │ │ │ │ +0001dd80: 662d 3e7b 2762 6163 6b75 7044 6972 7327 f->{'backupDirs' │ │ │ │ +0001dd90: 7d3b 0a09 6d79 2024 6620 3d20 2473 656c };..my $f = $sel │ │ │ │ +0001dda0: 662d 3e7b 2769 6e64 6578 4469 7227 7d2d f->{'indexDir'}- │ │ │ │ +0001ddb0: 3e72 6570 6c61 6365 496e 6465 7828 2472 >replaceIndex($r │ │ │ │ +0001ddc0: 5b33 5d29 3b0a 0972 6574 7572 6e20 2840 [3]);..return (@ │ │ │ │ +0001ddd0: 725b 302e 2e32 5d2c 2024 2462 6163 6b75 r[0..2], $$backu │ │ │ │ +0001dde0: 7044 6972 735b 2472 5b32 5d5d 2c20 2466 pDirs[$r[2]], $f │ │ │ │ +0001ddf0: 293b 0a20 2020 207d 0a20 2020 2072 6574 );. }. ret │ │ │ │ +0001de00: 7572 6e20 2829 3b0a 7d0a 0a0a 2323 2323 urn ();.}...#### │ │ │ │ +0001de10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001de20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001de30: 2323 2323 0a73 7562 2067 6574 426c 6f63 ####.sub getBloc │ │ │ │ +0001de40: 6b46 696c 656e 616d 6543 6f6d 7072 0a7b kFilenameCompr.{ │ │ │ │ +0001de50: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ │ +0001de60: 7368 6966 743b 0a20 2020 206d 7920 246d shift;. my $m │ │ │ │ +0001de70: 6435 7375 6d20 3d20 7368 6966 743b 0a0a d5sum = shift;.. │ │ │ │ +0001de80: 2020 2020 6d79 2024 4442 4d62 6c6f 636b my $DBMblock │ │ │ │ +0001de90: 203d 2024 7365 6c66 2d3e 7b27 4442 4d62 = $self->{'DBMb │ │ │ │ +0001dea0: 6c6f 636b 277d 3b0a 2020 2020 6966 2028 lock'};. if ( │ │ │ │ +0001deb0: 6578 6973 7473 2024 2444 424d 626c 6f63 exists $$DBMbloc │ │ │ │ +0001dec0: 6b7b 246d 6435 7375 6d7d 290a 2020 2020 k{$md5sum}). │ │ │ │ +0001ded0: 7b0a 096d 7920 2824 636f 6d70 722c 2024 {..my ($compr, $ │ │ │ │ +0001dee0: 6629 203d 2028 7370 6c69 7428 2f5c 732f f) = (split(/\s/ │ │ │ │ +0001def0: 2c20 2424 4442 4d62 6c6f 636b 7b24 6d64 , $$DBMblock{$md │ │ │ │ +0001df00: 3573 756d 7d2c 2032 2929 3b0a 096d 7920 5sum}, 2));..my │ │ │ │ +0001df10: 2466 616c 6c20 3d20 2473 656c 662d 3e7b $fall = $self->{ │ │ │ │ +0001df20: 2769 6e64 6578 4469 7227 7d2d 3e72 6570 'indexDir'}->rep │ │ │ │ +0001df30: 6c61 6365 496e 6465 7828 2466 293b 0a09 laceIndex($f);.. │ │ │ │ +0001df40: 7265 7475 726e 2028 2463 6f6d 7072 2c20 return ($compr, │ │ │ │ +0001df50: 2466 616c 6c29 3b0a 2020 2020 7d0a 2020 $fall);. }. │ │ │ │ +0001df60: 2020 7265 7475 726e 2028 293b 0a7d 0a0a return ();.}.. │ │ │ │ +0001df70: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +0001df80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001df90: 2323 2323 2323 2323 230a 7375 6220 7365 #########.sub se │ │ │ │ +0001dfa0: 7442 6c6f 636b 4669 6c65 6e61 6d65 436f tBlockFilenameCo │ │ │ │ +0001dfb0: 6d70 720a 7b0a 2020 2020 6d79 2024 7365 mpr.{. my $se │ │ │ │ +0001dfc0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. │ │ │ │ +0001dfd0: 206d 7920 246d 6435 7375 6d20 3d20 7368 my $md5sum = sh │ │ │ │ +0001dfe0: 6966 743b 0a20 2020 206d 7920 2466 696c ift;. my $fil │ │ │ │ +0001dff0: 656e 616d 6520 3d20 7368 6966 743b 0a20 ename = shift;. │ │ │ │ +0001e000: 2020 206d 7920 2463 6f6d 7072 203d 2073 my $compr = s │ │ │ │ +0001e010: 6869 6674 3b0a 0a20 2020 206d 7920 2824 hift;.. my ($ │ │ │ │ +0001e020: 6662 6173 652c 2024 666e 616d 652c 2024 fbase, $fname, $ │ │ │ │ +0001e030: 696e 6465 7829 203d 0a09 2469 6e64 6578 index) =..$index │ │ │ │ +0001e040: 4469 722d 3e6e 6577 4669 6c65 2824 6669 Dir->newFile($fi │ │ │ │ +0001e050: 6c65 6e61 6d65 293b 0a0a 2020 2020 6d79 lename);.. my │ │ │ │ +0001e060: 2024 4442 4d62 6c6f 636b 203d 2024 7365 $DBMblock = $se │ │ │ │ +0001e070: 6c66 2d3e 7b27 4442 4d62 6c6f 636b 277d lf->{'DBMblock'} │ │ │ │ +0001e080: 3b0a 0a20 2020 2024 2444 424d 626c 6f63 ;.. $$DBMbloc │ │ │ │ +0001e090: 6b7b 246d 6435 7375 6d7d 203d 2022 2463 k{$md5sum} = "$c │ │ │ │ +0001e0a0: 6f6d 7072 2024 696e 6465 782f 2466 6e61 ompr $index/$fna │ │ │ │ +0001e0b0: 6d65 223b 0a7d 0a0a 0a23 2323 2323 2323 me";.}...####### │ │ │ │ +0001e0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e0e0: 230a 7375 6220 6465 6c65 7465 456e 7472 #.sub deleteEntr │ │ │ │ +0001e0f0: 790a 7b0a 2020 2020 6d79 2024 7365 6c66 y.{. my $self │ │ │ │ +0001e100: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m │ │ │ │ +0001e110: 7920 246d 6435 7375 6d20 3d20 7368 6966 y $md5sum = shif │ │ │ │ +0001e120: 743b 0a20 2020 206d 7920 2466 203d 2073 t;. my $f = s │ │ │ │ +0001e130: 6869 6674 3b0a 0a20 2020 206d 7920 2444 hift;.. my $D │ │ │ │ +0001e140: 424d 6d64 3520 3d20 2473 656c 662d 3e7b BMmd5 = $self->{ │ │ │ │ +0001e150: 2744 424d 6d64 3527 7d3b 0a20 2020 206d 'DBMmd5'};. m │ │ │ │ +0001e160: 7920 246d 6435 7061 636b 203d 2070 6163 y $md5pack = pac │ │ │ │ +0001e170: 6b28 2748 3332 272c 2024 6d64 3573 756d k('H32', $md5sum │ │ │ │ +0001e180: 293b 0a20 2020 2064 656c 6574 6520 2424 );. delete $$ │ │ │ │ +0001e190: 4442 4d6d 6435 7b24 6d64 3570 6163 6b7d DBMmd5{$md5pack} │ │ │ │ +0001e1a0: 3b0a 0a20 2020 206d 7920 2444 424d 6669 ;.. my $DBMfi │ │ │ │ +0001e1b0: 6c65 6e61 6d65 203d 2024 7365 6c66 2d3e lename = $self-> │ │ │ │ +0001e1c0: 7b27 4442 4d66 696c 656e 616d 6527 7d3b {'DBMfilename'}; │ │ │ │ +0001e1d0: 0a20 2020 2024 6620 3d20 2473 656c 662d . $f = $self- │ │ │ │ +0001e1e0: 3e7b 2769 6e64 6578 4469 7227 7d2d 3e73 >{'indexDir'}->s │ │ │ │ +0001e1f0: 6574 496e 6465 7828 2466 293b 0a20 2020 etIndex($f);. │ │ │ │ +0001e200: 2064 656c 6574 6520 2424 4442 4d66 696c delete $$DBMfil │ │ │ │ +0001e210: 656e 616d 657b 2466 7d3b 0a7d 0a0a 0a23 ename{$f};.}...# │ │ │ │ +0001e220: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e230: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e240: 2323 2323 2323 230a 7375 6220 7265 6164 #######.sub read │ │ │ │ +0001e250: 4442 4d46 696c 6573 5369 7a65 0a7b 0a20 DBMFilesSize.{. │ │ │ │ +0001e260: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ │ +0001e270: 6966 743b 0a0a 2020 2020 6966 2028 2473 ift;.. if ($s │ │ │ │ +0001e280: 656c 662d 3e7b 2773 6176 6552 414d 277d elf->{'saveRAM'} │ │ │ │ +0001e290: 290a 2020 2020 7b0a 096d 7920 2473 697a ). {..my $siz │ │ │ │ +0001e2a0: 6520 3d20 303b 0a09 6d79 2024 663b 0a09 e = 0;..my $f;.. │ │ │ │ +0001e2b0: 666f 7265 6163 6820 2466 2028 2473 656c foreach $f ($sel │ │ │ │ +0001e2c0: 662d 3e7b 2744 424d 6669 6c65 6e61 6d65 f->{'DBMfilename │ │ │ │ +0001e2d0: 5374 7269 6e67 277d 2c20 2473 656c 662d String'}, $self- │ │ │ │ +0001e2e0: 3e7b 2744 424d 6d64 3553 7472 696e 6727 >{'DBMmd5String' │ │ │ │ +0001e2f0: 7d29 0a09 7b0a 0920 2020 2024 6d61 696e })..{.. $main │ │ │ │ +0001e300: 3a3a 7374 6174 2d3e 6164 6453 756d 4442 ::stat->addSumDB │ │ │ │ +0001e310: 4d46 696c 6573 2820 2873 7461 7428 2466 MFiles( (stat($f │ │ │ │ +0001e320: 2929 5b37 5d20 293b 0a09 7d0a 2020 2020 ))[7] );..}. │ │ │ │ +0001e330: 7d0a 7d0a 0a0a 2323 2323 2323 2323 2323 }.}...########## │ │ │ │ +0001e340: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e350: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +0001e360: 7562 2064 656c 4442 4d46 696c 6573 0a7b ub delDBMFiles.{ │ │ │ │ +0001e370: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ │ +0001e380: 7368 6966 743b 0a0a 2020 2020 6966 2028 shift;.. if ( │ │ │ │ +0001e390: 2473 656c 662d 3e7b 2773 6176 6552 414d $self->{'saveRAM │ │ │ │ +0001e3a0: 277d 290a 2020 2020 7b0a 0964 626d 636c '}). {..dbmcl │ │ │ │ +0001e3b0: 6f73 6528 257b 2473 656c 662d 3e7b 276d ose(%{$self->{'m │ │ │ │ +0001e3c0: 6435 277d 7d29 3b0a 0964 626d 636c 6f73 d5'}});..dbmclos │ │ │ │ +0001e3d0: 6528 257b 2473 656c 662d 3e7b 2766 696c e(%{$self->{'fil │ │ │ │ +0001e3e0: 656e 616d 6527 7d7d 293b 0a0a 096d 7920 ename'}});...my │ │ │ │ +0001e3f0: 2466 3120 3d20 2473 656c 662d 3e7b 2744 $f1 = $self->{'D │ │ │ │ +0001e400: 424d 6669 6c65 6e61 6d65 5374 7269 6e67 BMfilenameString │ │ │ │ +0001e410: 277d 3b0a 096d 7920 2466 3220 3d20 2473 '};..my $f2 = $s │ │ │ │ +0001e420: 656c 662d 3e7b 2744 424d 6d64 3553 7472 elf->{'DBMmd5Str │ │ │ │ +0001e430: 696e 6727 7d3b 0a0a 0924 7365 6c66 2d3e ing'};...$self-> │ │ │ │ +0001e440: 7b27 7072 4c6f 6727 7d2d 3e70 7269 6e74 {'prLog'}->print │ │ │ │ +0001e450: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ │ +0001e460: 0a09 0909 0927 2d73 7472 2720 3d3e 205b .....'-str' => [ │ │ │ │ +0001e470: 2275 6e6c 696e 6b20 2466 312c 2024 6632 "unlink $f1, $f2 │ │ │ │ +0001e480: 225d 293b 0a0a 0975 6e6c 696e 6b20 3c24 "]);...unlink <$ │ │ │ │ +0001e490: 6631 2a3e 3b0a 0975 6e6c 696e 6b20 3c24 f1*>;..unlink <$ │ │ │ │ +0001e4a0: 6632 2a3e 3b0a 2020 2020 7d0a 7d0a 0a0a f2*>;. }.}... │ │ │ │ +0001e4b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e4c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e4d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001e4e0: 2323 0a23 2073 6368 7265 6962 7420 6e65 ##.# schreibt ne │ │ │ │ +0001e4f0: 7565 204d 6574 612d 496e 666f 726d 6174 ue Meta-Informat │ │ │ │ +0001e500: 696f 6e65 6e20 696e 2064 626d 7320 2b20 ionen in dbms + │ │ │ │ +0001e510: 2e6d 6435 4368 6563 6b53 756d 0a70 6163 .md5CheckSum.pac │ │ │ │ +0001e520: 6b61 6765 2061 6b74 4669 6c65 6e61 6d65 kage aktFilename │ │ │ │ +0001e530: 3b0a 0a73 7562 206e 6577 0a7b 0a20 2020 ;..sub new.{. │ │ │ │ +0001e540: 206d 7920 2463 6c61 7373 203d 2073 6869 my $class = shi │ │ │ │ +0001e550: 6674 3b0a 2020 2020 6d79 2024 7365 6c66 ft;. my $self │ │ │ │ +0001e560: 203d 207b 7d3b 0a0a 2020 2020 6d79 2028 = {};.. my ( │ │ │ │ +0001e570: 2570 6172 616d 7329 203d 2028 272d 696e %params) = ('-in │ │ │ │ +0001e580: 666f 4669 6c65 2720 2020 2020 2020 203d foFile' = │ │ │ │ +0001e590: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +0001e5a0: 2d62 6c6f 636b 4368 6563 6b53 756d 4669 -blockCheckSumFi │ │ │ │ +0001e5b0: 6c65 2720 3d3e 2075 6e64 6566 2c0a 0909 le' => undef,... │ │ │ │ +0001e5c0: 2020 2020 272d 636f 6d70 7265 7373 4d44 '-compressMD │ │ │ │ +0001e5d0: 3546 696c 6527 203d 3e20 756e 6465 662c 5File' => undef, │ │ │ │ +0001e5e0: 0a09 0920 2020 2027 2d73 6f75 7263 6544 ... '-sourceD │ │ │ │ +0001e5f0: 6972 2720 2020 2020 2020 3d3e 2075 6e64 ir' => und │ │ │ │ +0001e600: 6566 2c0a 0909 2020 2020 272d 666f 6c6c ef,... '-foll │ │ │ │ +0001e610: 6f77 4c69 6e6b 7327 2020 2020 203d 3e20 owLinks' => │ │ │ │ +0001e620: 756e 6465 662c 0a09 0920 2020 2027 2d63 undef,... '-c │ │ │ │ +0001e630: 6f6d 7072 6573 7327 2020 2020 2020 2020 ompress' │ │ │ │ +0001e640: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ │ +0001e650: 272d 756e 636f 6d70 7265 7373 2720 2020 '-uncompress' │ │ │ │ +0001e660: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +0001e670: 2020 2027 2d70 6f73 7466 6978 2720 2020 '-postfix' │ │ │ │ +0001e680: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,. │ │ │ │ +0001e690: 0909 2020 2020 272d 6578 6365 7074 4469 .. '-exceptDi │ │ │ │ +0001e6a0: 7273 2720 2020 2020 203d 3e20 5b5d 2c0a rs' => [],. │ │ │ │ +0001e6b0: 0909 2020 2020 272d 696e 636c 7564 6544 .. '-includeD │ │ │ │ +0001e6c0: 6972 7327 2020 2020 203d 3e20 5b5d 2c0a irs' => [],. │ │ │ │ +0001e6d0: 0909 2020 2020 272d 636f 6d70 7252 756c .. '-comprRul │ │ │ │ +0001e6e0: 6527 2020 2020 2020 203d 3e20 5b5d 2c0a e' => [],. │ │ │ │ +0001e6f0: 0909 2020 2020 272d 6578 6365 7074 5275 .. '-exceptRu │ │ │ │ +0001e700: 6c65 2720 2020 2020 203d 3e20 5b5d 2c0a le' => [],. │ │ │ │ +0001e710: 0909 2020 2020 272d 696e 636c 7564 6552 .. '-includeR │ │ │ │ +0001e720: 756c 6527 2020 2020 203d 3e20 5b5d 2c0a ule' => [],. │ │ │ │ +0001e730: 0909 2020 2020 272d 7772 6974 6545 7863 .. '-writeExc │ │ │ │ +0001e740: 6c75 6465 4c6f 6727 203d 3e20 756e 6465 ludeLog' => unde │ │ │ │ +0001e750: 662c 0a09 0920 2020 2027 2d65 7863 6570 f,... '-excep │ │ │ │ +0001e760: 7454 7970 6573 2720 2020 2020 3d3e 2075 tTypes' => u │ │ │ │ +0001e770: 6e64 6566 2c0a 0909 2020 2020 272d 6368 ndef,... '-ch │ │ │ │ +0001e780: 6563 6b42 6c6f 636b 7352 756c 6527 203d eckBlocksRule' = │ │ │ │ +0001e790: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e7a0: 6563 6b42 6c6f 636b 7342 5327 2020 203d eckBlocksBS' = │ │ │ │ +0001e7b0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e7c0: 6563 6b42 6c6f 636b 7343 6f6d 7072 273d eckBlocksCompr'= │ │ │ │ +0001e7d0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e7e0: 6563 6b42 6c6f 636b 7352 6561 6427 203d eckBlocksRead' = │ │ │ │ +0001e7f0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e800: 6563 6b44 6576 6963 6573 2720 2020 203d eckDevices' = │ │ │ │ +0001e810: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e820: 6563 6b44 6576 6963 6573 4469 7227 203d eckDevicesDir' = │ │ │ │ +0001e830: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e840: 6563 6b44 6576 6963 6573 4253 2720 203d eckDevicesBS' = │ │ │ │ +0001e850: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch │ │ │ │ +0001e860: 6563 6b44 6576 6963 6573 436f 6d70 7227 eckDevicesCompr' │ │ │ │ +0001e870: 203d 3e20 5b5d 2c0a 0909 2020 2020 272d => [],... '- │ │ │ │ +0001e880: 6c61 7465 4c69 6e6b 7327 2020 2020 2020 lateLinks' │ │ │ │ +0001e890: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +0001e8a0: 2027 2d6c 6f67 496e 4261 636b 7570 4469 '-logInBackupDi │ │ │ │ +0001e8b0: 7227 2020 3d3e 2075 6e64 6566 2c0a 0909 r' => undef,... │ │ │ │ +0001e8c0: 2020 2020 272d 636f 6d70 7265 7373 4c6f '-compressLo │ │ │ │ +0001e8d0: 6749 6e42 6163 6b75 7044 6972 2720 3d3e gInBackupDir' => │ │ │ │ +0001e8e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +0001e8f0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +0001e900: 6c65 4e61 6d65 2720 3d3e 2075 6e64 6566 leName' => undef │ │ │ │ +0001e910: 2c0a 0909 2020 2020 272d 616b 7444 6174 ,... '-aktDat │ │ │ │ +0001e920: 6527 2020 2020 2020 2020 203d 3e20 756e e' => un │ │ │ │ +0001e930: 6465 662c 0a09 0920 2020 2027 2d70 724c def,... '-prL │ │ │ │ +0001e940: 6f67 2720 2020 2020 2020 2020 2020 3d3e og' => │ │ │ │ +0001e950: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +0001e960: 6368 6d6f 644d 4435 4669 6c65 2720 2020 chmodMD5File' │ │ │ │ +0001e970: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +0001e980: 2027 2d69 6e64 6578 4469 7227 2020 2020 '-indexDir' │ │ │ │ +0001e990: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +0001e9a0: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode' │ │ │ │ +0001e9b0: 2020 2020 2020 203d 3e20 276e 6f27 293b => 'no'); │ │ │ │ +0001e9c0: 0a0a 2020 2020 263a 3a63 6865 636b 4f62 .. &::checkOb │ │ │ │ +0001e9d0: 6a65 6374 5061 7261 6d73 285c 2570 6172 jectParams(\%par │ │ │ │ +0001e9e0: 616d 732c 205c 405f 2c20 2761 6b74 4669 ams, \@_, 'aktFi │ │ │ │ +0001e9f0: 6c65 6e61 6d65 3a3a 6e65 7727 2c0a 0909 lename::new',... │ │ │ │ +0001ea00: 0920 5b27 2d69 6e66 6f46 696c 6527 2c20 . ['-infoFile', │ │ │ │ +0001ea10: 272d 626c 6f63 6b43 6865 636b 5375 6d46 '-blockCheckSumF │ │ │ │ +0001ea20: 696c 6527 2c0a 0909 0920 2027 2d63 6f6d ile',.... '-com │ │ │ │ +0001ea30: 7072 6573 734d 4435 4669 6c65 272c 2027 pressMD5File', ' │ │ │ │ +0001ea40: 2d73 6f75 7263 6544 6972 272c 2027 2d66 -sourceDir', '-f │ │ │ │ +0001ea50: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',.... │ │ │ │ +0001ea60: 2020 272d 636f 6d70 7265 7373 272c 2027 '-compress', ' │ │ │ │ +0001ea70: 2d75 6e63 6f6d 7072 6573 7327 2c20 272d -uncompress', '- │ │ │ │ +0001ea80: 706f 7374 6669 7827 2c0a 0909 0920 2027 postfix',.... ' │ │ │ │ +0001ea90: 2d65 7863 6570 7444 6972 7327 2c20 272d -exceptDirs', '- │ │ │ │ +0001eaa0: 636f 6d70 7252 756c 6527 2c0a 0909 0920 comprRule',.... │ │ │ │ +0001eab0: 2027 2d69 6e63 6c75 6465 4469 7273 272c '-includeDirs', │ │ │ │ +0001eac0: 2027 2d65 7863 6570 7452 756c 6527 2c20 '-exceptRule', │ │ │ │ +0001ead0: 272d 6578 6365 7074 5479 7065 7327 2c0a '-exceptTypes',. │ │ │ │ +0001eae0: 0909 0920 2027 2d69 6e63 6c75 6465 5275 ... '-includeRu │ │ │ │ +0001eaf0: 6c65 272c 2027 2d63 6865 636b 426c 6f63 le', '-checkBloc │ │ │ │ +0001eb00: 6b73 5275 6c65 272c 0a09 0909 2020 272d ksRule',.... '- │ │ │ │ +0001eb10: 6368 6563 6b42 6c6f 636b 7342 5327 2c20 checkBlocksBS', │ │ │ │ +0001eb20: 272d 6368 6563 6b42 6c6f 636b 7343 6f6d '-checkBlocksCom │ │ │ │ +0001eb30: 7072 272c 0a09 0909 2020 272d 6368 6563 pr',.... '-chec │ │ │ │ +0001eb40: 6b42 6c6f 636b 7352 6561 6427 2c0a 0909 kBlocksRead',... │ │ │ │ +0001eb50: 0920 2027 2d63 6865 636b 4465 7669 6365 . '-checkDevice │ │ │ │ +0001eb60: 7342 5327 2c20 272d 6368 6563 6b44 6576 sBS', '-checkDev │ │ │ │ +0001eb70: 6963 6573 272c 0a09 0909 2020 272d 6368 ices',.... '-ch │ │ │ │ +0001eb80: 6563 6b44 6576 6963 6573 4469 7227 2c0a eckDevicesDir',. │ │ │ │ +0001eb90: 0909 0920 2027 2d63 6865 636b 4465 7669 ... '-checkDevi │ │ │ │ +0001eba0: 6365 7343 6f6d 7072 272c 2027 2d61 6b74 cesCompr', '-akt │ │ │ │ +0001ebb0: 4461 7465 272c 0a09 0909 2020 272d 7072 Date',.... '-pr │ │ │ │ +0001ebc0: 4c6f 6727 2c20 272d 6368 6d6f 644d 4435 Log', '-chmodMD5 │ │ │ │ +0001ebd0: 4669 6c65 272c 2027 2d69 6e64 6578 4469 File', '-indexDi │ │ │ │ +0001ebe0: 7227 5d29 3b0a 2020 2020 263a 3a73 6574 r']);. &::set │ │ │ │ +0001ebf0: 5061 7261 6d73 4469 7265 6374 2824 7365 ParamsDirect($se │ │ │ │ +0001ec00: 6c66 2c20 5c25 7061 7261 6d73 293b 0a0a lf, \%params);.. │ │ │ │ +0001ec10: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ │ +0001ec20: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ │ +0001ec30: 3b0a 0a20 2020 206d 7920 2465 7863 6570 ;.. my $excep │ │ │ │ +0001ec40: 7452 756c 6520 3d20 2473 656c 662d 3e7b tRule = $self->{ │ │ │ │ +0001ec50: 2765 7863 6570 7452 756c 6527 7d2d 3e68 'exceptRule'}->h │ │ │ │ +0001ec60: 6173 4c69 6e65 2829 203f 0a09 2227 2220 asLine() ?.."'" │ │ │ │ +0001ec70: 2e20 6a6f 696e 2822 2720 2722 2c20 407b . join("' '", @{ │ │ │ │ +0001ec80: 2473 656c 662d 3e7b 2765 7863 6570 7452 $self->{'exceptR │ │ │ │ +0001ec90: 756c 6527 7d2d 3e67 6574 4c69 6e65 2829 ule'}->getLine() │ │ │ │ +0001eca0: 7d29 202e 2022 2722 203a 2027 273b 0a20 }) . "'" : '';. │ │ │ │ +0001ecb0: 2020 206d 7920 2469 6e63 6c75 6465 5275 my $includeRu │ │ │ │ +0001ecc0: 6c65 203d 2024 7365 6c66 2d3e 7b27 696e le = $self->{'in │ │ │ │ +0001ecd0: 636c 7564 6552 756c 6527 7d2d 3e68 6173 cludeRule'}->has │ │ │ │ +0001ece0: 4c69 6e65 2829 203f 0a09 2227 2220 2e20 Line() ?.."'" . │ │ │ │ +0001ecf0: 6a6f 696e 2822 2720 2722 2c20 407b 2473 join("' '", @{$s │ │ │ │ +0001ed00: 656c 662d 3e7b 2769 6e63 6c75 6465 5275 elf->{'includeRu │ │ │ │ +0001ed10: 6c65 277d 2d3e 6765 744c 696e 6528 297d le'}->getLine()} │ │ │ │ +0001ed20: 2920 2e20 2227 2220 3a20 2727 3b0a 2020 ) . "'" : '';. │ │ │ │ +0001ed30: 2020 6d79 2024 636f 6d70 7252 756c 6520 my $comprRule │ │ │ │ +0001ed40: 3d20 2473 656c 662d 3e7b 2763 6f6d 7072 = $self->{'compr │ │ │ │ +0001ed50: 5275 6c65 277d 2d3e 6861 734c 696e 6528 Rule'}->hasLine( │ │ │ │ +0001ed60: 2920 3f0a 0922 2722 202e 206a 6f69 6e28 ) ?.."'" . join( │ │ │ │ +0001ed70: 2227 2027 222c 2040 7b24 7365 6c66 2d3e "' '", @{$self-> │ │ │ │ +0001ed80: 7b27 636f 6d70 7252 756c 6527 7d2d 3e67 {'comprRule'}->g │ │ │ │ +0001ed90: 6574 4c69 6e65 2829 7d29 202e 2022 2722 etLine()}) . "'" │ │ │ │ +0001eda0: 203a 2027 273b 0a20 2020 206d 7920 2465 : '';. my $e │ │ │ │ +0001edb0: 7863 6570 7444 6972 7320 3d20 407b 2473 xceptDirs = @{$s │ │ │ │ +0001edc0: 656c 662d 3e7b 2765 7863 6570 7444 6972 elf->{'exceptDir │ │ │ │ +0001edd0: 7327 7d7d 203f 0a09 2227 2220 2e20 6a6f s'}} ?.."'" . jo │ │ │ │ +0001ede0: 696e 2822 2720 2722 2c20 407b 2473 656c in("' '", @{$sel │ │ │ │ +0001edf0: 662d 3e7b 2765 7863 6570 7444 6972 7327 f->{'exceptDirs' │ │ │ │ +0001ee00: 7d7d 2920 2e20 2227 2220 3a20 2727 3b0a }}) . "'" : '';. │ │ │ │ +0001ee10: 2020 2020 2465 7863 6570 7444 6972 7320 $exceptDirs │ │ │ │ +0001ee20: 3d7e 2073 2f5c 5c2f 5c5c 3543 2f6f 673b =~ s/\\/\\5C/og; │ │ │ │ +0001ee30: 2020 2020 2320 275c 5c27 2073 746f 7265 # '\\' store │ │ │ │ +0001ee40: 6420 6173 205c 3543 0a20 2020 2024 6578 d as \5C. $ex │ │ │ │ +0001ee50: 6365 7074 4469 7273 203d 7e20 732f 5c6e ceptDirs =~ s/\n │ │ │ │ +0001ee60: 2f5c 5c30 412f 736f 673b 2020 2023 2027 /\\0A/sog; # ' │ │ │ │ +0001ee70: 5c6e 2720 7374 6f72 6564 2061 7320 5c30 \n' stored as \0 │ │ │ │ +0001ee80: 410a 2020 2020 6d79 2024 696e 636c 7564 A. my $includ │ │ │ │ +0001ee90: 6544 6972 7320 3d20 407b 2473 656c 662d eDirs = @{$self- │ │ │ │ +0001eea0: 3e7b 2769 6e63 6c75 6465 4469 7273 277d >{'includeDirs'} │ │ │ │ +0001eeb0: 7d20 3f0a 0922 2722 202e 206a 6f69 6e28 } ?.."'" . join( │ │ │ │ +0001eec0: 2227 2027 222c 2040 7b24 7365 6c66 2d3e "' '", @{$self-> │ │ │ │ +0001eed0: 7b27 696e 636c 7564 6544 6972 7327 7d7d {'includeDirs'}} │ │ │ │ +0001eee0: 2920 2e20 2227 2220 3a20 2727 3b0a 2020 ) . "'" : '';. │ │ │ │ +0001eef0: 2020 2469 6e63 6c75 6465 4469 7273 203d $includeDirs = │ │ │ │ +0001ef00: 7e20 732f 5c5c 2f5c 5c35 432f 6f67 3b20 ~ s/\\/\\5C/og; │ │ │ │ +0001ef10: 2020 2023 2027 5c5c 2720 7374 6f72 6564 # '\\' stored │ │ │ │ +0001ef20: 2061 7320 5c35 430a 2020 2020 2469 6e63 as \5C. $inc │ │ │ │ +0001ef30: 6c75 6465 4469 7273 203d 7e20 732f 5c6e ludeDirs =~ s/\n │ │ │ │ +0001ef40: 2f5c 5c30 412f 736f 673b 2020 2023 2027 /\\0A/sog; # ' │ │ │ │ +0001ef50: 5c6e 2720 7374 6f72 6564 2061 7320 5c30 \n' stored as \0 │ │ │ │ +0001ef60: 410a 2020 2020 6d79 2024 6578 6365 7074 A. my $except │ │ │ │ +0001ef70: 5479 7065 7320 3d20 2473 656c 662d 3e7b Types = $self->{ │ │ │ │ +0001ef80: 2765 7863 6570 7454 7970 6573 277d 203f 'exceptTypes'} ? │ │ │ │ +0001ef90: 2024 7365 6c66 2d3e 7b27 6578 6365 7074 $self->{'except │ │ │ │ +0001efa0: 5479 7065 7327 7d20 3a20 2727 3b0a 2020 Types'} : '';. │ │ │ │ +0001efb0: 2020 6d79 2024 7364 203d 2024 7365 6c66 my $sd = $self │ │ │ │ +0001efc0: 2d3e 7b27 736f 7572 6365 4469 7227 7d3b ->{'sourceDir'}; │ │ │ │ +0001efd0: 0a20 2020 2024 7364 203d 7e20 732f 5c5c . $sd =~ s/\\ │ │ │ │ +0001efe0: 2f5c 5c35 432f 6f67 3b20 2020 2023 2027 /\\5C/og; # ' │ │ │ │ +0001eff0: 5c5c 2720 7374 6f72 6564 2061 7320 5c35 \\' stored as \5 │ │ │ │ +0001f000: 430a 2020 2020 2473 6420 3d7e 2073 2f5c C. $sd =~ s/\ │ │ │ │ +0001f010: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\0A/sog; # │ │ │ │ +0001f020: 275c 6e27 2073 746f 7265 6420 6173 205c '\n' stored as \ │ │ │ │ +0001f030: 3041 0a20 2020 2024 7364 203d 7e20 732f 0A. $sd =~ s/ │ │ │ │ +0001f040: 5c27 2f5c 5c5c 272f 736f 673b 2020 2023 \'/\\\'/sog; # │ │ │ │ +0001f050: 2027 2073 746f 7265 6420 6173 205c 270a ' stored as \'. │ │ │ │ +0001f060: 2020 2020 6d79 2024 6c6f 6749 6e42 6163 my $logInBac │ │ │ │ +0001f070: 6b75 7044 6972 4669 6c65 4e61 6d65 203d kupDirFileName = │ │ │ │ +0001f080: 2024 7365 6c66 2d3e 7b27 6c6f 6749 6e42 $self->{'logInB │ │ │ │ +0001f090: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName │ │ │ │ +0001f0a0: 277d 3b0a 2020 2020 246c 6f67 496e 4261 '};. $logInBa │ │ │ │ +0001f0b0: 636b 7570 4469 7246 696c 654e 616d 6520 ckupDirFileName │ │ │ │ +0001f0c0: 3d7e 2073 2f5c 5c2f 5c5c 3543 2f6f 673b =~ s/\\/\\5C/og; │ │ │ │ +0001f0d0: 2020 2020 2320 275c 5c27 2073 746f 7265 # '\\' store │ │ │ │ +0001f0e0: 6420 6173 205c 3543 0a20 2020 2024 6c6f d as \5C. $lo │ │ │ │ +0001f0f0: 6749 6e42 6163 6b75 7044 6972 4669 6c65 gInBackupDirFile │ │ │ │ +0001f100: 4e61 6d65 203d 7e20 732f 5c6e 2f5c 5c30 Name =~ s/\n/\\0 │ │ │ │ +0001f110: 412f 736f 673b 2020 2023 2027 5c6e 2720 A/sog; # '\n' │ │ │ │ +0001f120: 7374 6f72 6564 2061 7320 5c30 410a 2020 stored as \0A. │ │ │ │ +0001f130: 2020 246c 6f67 496e 4261 636b 7570 4469 $logInBackupDi │ │ │ │ +0001f140: 7246 696c 654e 616d 6520 3d7e 2073 2f5c rFileName =~ s/\ │ │ │ │ +0001f150: 272f 5c5c 5c27 2f73 6f67 3b20 2020 2320 '/\\\'/sog; # │ │ │ │ +0001f160: 2720 7374 6f72 6564 2061 7320 5c27 0a0a ' stored as \'.. │ │ │ │ +0001f170: 2020 2020 6d79 2028 4062 6c6f 636b 7352 my (@blocksR │ │ │ │ +0001f180: 756c 6573 2c20 2469 293b 0a20 2020 206d ules, $i);. m │ │ │ │ +0001f190: 7920 2463 6865 636b 426c 6f63 6b73 5275 y $checkBlocksRu │ │ │ │ +0001f1a0: 6c65 203d 2024 7365 6c66 2d3e 7b27 6368 le = $self->{'ch │ │ │ │ +0001f1b0: 6563 6b42 6c6f 636b 7352 756c 6527 7d3b eckBlocksRule'}; │ │ │ │ +0001f1c0: 0a20 2020 206d 7920 2463 6865 636b 426c . my $checkBl │ │ │ │ +0001f1d0: 6f63 6b73 4253 203d 2024 7365 6c66 2d3e ocksBS = $self-> │ │ │ │ +0001f1e0: 7b27 6368 6563 6b42 6c6f 636b 7342 5327 {'checkBlocksBS' │ │ │ │ +0001f1f0: 7d3b 0a20 2020 2066 6f72 6561 6368 2024 };. foreach $ │ │ │ │ +0001f200: 6920 2830 2e2e 4024 6368 6563 6b42 6c6f i (0..@$checkBlo │ │ │ │ +0001f210: 636b 7352 756c 652d 3129 0a20 2020 207b cksRule-1). { │ │ │ │ +0001f220: 0a09 6d79 2024 6272 203d 2022 6368 6563 ..my $br = "chec │ │ │ │ +0001f230: 6b42 6c6f 636b 7352 756c 6524 693d 223b kBlocksRule$i="; │ │ │ │ +0001f240: 0a09 6d79 2024 6273 203d 2022 6368 6563 ..my $bs = "chec │ │ │ │ +0001f250: 6b42 6c6f 636b 7342 5324 693d 223b 0a09 kBlocksBS$i=";.. │ │ │ │ +0001f260: 6d79 2024 6263 203d 2022 6368 6563 6b42 my $bc = "checkB │ │ │ │ +0001f270: 6c6f 636b 7343 6f6d 7072 2469 3d22 3b0a locksCompr$i=";. │ │ │ │ +0001f280: 096d 7920 2462 7265 6164 203d 2022 6368 .my $bread = "ch │ │ │ │ +0001f290: 6563 6b42 6c6f 636b 7352 6561 6424 693d eckBlocksRead$i= │ │ │ │ +0001f2a0: 223b 0a0a 096d 7920 2840 6362 7229 203d ";...my (@cbr) = │ │ │ │ +0001f2b0: 2040 2463 6865 636b 426c 6f63 6b73 5275 @$checkBlocksRu │ │ │ │ +0001f2c0: 6c65 3b0a 0969 6620 2864 6566 696e 6564 le;..if (defined │ │ │ │ +0001f2d0: 2024 6362 725b 2469 5d29 0a09 7b0a 0920 $cbr[$i])..{.. │ │ │ │ +0001f2e0: 2020 2024 6272 202e 3d20 2227 2220 2e20 $br .= "'" . │ │ │ │ +0001f2f0: 6a6f 696e 2827 2027 2c20 407b 2463 6272 join(' ', @{$cbr │ │ │ │ +0001f300: 5b24 695d 7d29 202e 2022 2722 3b0a 0920 [$i]}) . "'";.. │ │ │ │ +0001f310: 2020 2024 6273 202e 3d20 2424 6368 6563 $bs .= $$chec │ │ │ │ +0001f320: 6b42 6c6f 636b 7342 535b 2469 5d3b 0a09 kBlocksBS[$i];.. │ │ │ │ +0001f330: 2020 2020 2462 6320 2e3d 2024 6368 6563 $bc .= $chec │ │ │ │ +0001f340: 6b42 6c6f 636b 7343 6f6d 7072 5b24 695d kBlocksCompr[$i] │ │ │ │ +0001f350: 203f 2027 7965 7327 203a 2027 6e6f 273b ? 'yes' : 'no'; │ │ │ │ +0001f360: 0a09 2020 2020 2462 7265 6164 202e 3d20 .. $bread .= │ │ │ │ +0001f370: 2463 6865 636b 426c 6f63 6b73 5265 6164 $checkBlocksRead │ │ │ │ +0001f380: 5b24 695d 0a09 093f 2022 2722 202e 206a [$i]...? "'" . j │ │ │ │ +0001f390: 6f69 6e28 2720 272c 2040 7b24 6368 6563 oin(' ', @{$chec │ │ │ │ +0001f3a0: 6b42 6c6f 636b 7352 6561 645b 2469 5d7d kBlocksRead[$i]} │ │ │ │ +0001f3b0: 2920 2e20 2227 2220 3a20 2727 3b0a 097d ) . "'" : '';..} │ │ │ │ +0001f3c0: 0a09 2462 7220 3d7e 2073 2f5c 5c2f 5c5c ..$br =~ s/\\/\\ │ │ │ │ +0001f3d0: 3543 2f6f 673b 2020 2020 2320 275c 5c27 5C/og; # '\\' │ │ │ │ +0001f3e0: 2073 746f 7265 6420 6173 205c 3543 0a09 stored as \5C.. │ │ │ │ +0001f3f0: 2462 7220 3d7e 2073 2f5c 6e2f 5c5c 3041 $br =~ s/\n/\\0A │ │ │ │ +0001f400: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\n' s │ │ │ │ +0001f410: 746f 7265 6420 6173 205c 3041 0a09 7075 tored as \0A..pu │ │ │ │ +0001f420: 7368 2040 626c 6f63 6b73 5275 6c65 732c sh @blocksRules, │ │ │ │ +0001f430: 2024 6272 2c20 2462 732c 2024 6263 2c20 $br, $bs, $bc, │ │ │ │ +0001f440: 2462 7265 6164 3b0a 2020 2020 7d0a 2020 $bread;. }. │ │ │ │ +0001f450: 2020 6d79 2028 4064 6576 6963 6573 293b my (@devices); │ │ │ │ +0001f460: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe │ │ │ │ +0001f470: 7669 6365 7320 3d20 2473 656c 662d 3e7b vices = $self->{ │ │ │ │ +0001f480: 2763 6865 636b 4465 7669 6365 7327 7d3b 'checkDevices'}; │ │ │ │ +0001f490: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe │ │ │ │ +0001f4a0: 7669 6365 7344 6972 203d 2024 7365 6c66 vicesDir = $self │ │ │ │ +0001f4b0: 2d3e 7b27 6368 6563 6b44 6576 6963 6573 ->{'checkDevices │ │ │ │ +0001f4c0: 4469 7227 7d3b 0a20 2020 206d 7920 2463 Dir'};. my $c │ │ │ │ +0001f4d0: 6865 636b 4465 7669 6365 7342 5320 3d20 heckDevicesBS = │ │ │ │ +0001f4e0: 2473 656c 662d 3e7b 2763 6865 636b 4465 $self->{'checkDe │ │ │ │ +0001f4f0: 7669 6365 7342 5327 7d3b 0a20 2020 206d vicesBS'};. m │ │ │ │ +0001f500: 7920 2463 6865 636b 4465 7669 6365 7343 y $checkDevicesC │ │ │ │ +0001f510: 6f6d 7072 203d 2024 7365 6c66 2d3e 7b27 ompr = $self->{' │ │ │ │ +0001f520: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp │ │ │ │ +0001f530: 7227 7d3b 0a20 2020 2066 6f72 6561 6368 r'};. foreach │ │ │ │ +0001f540: 2024 6920 2830 2e2e 4024 6368 6563 6b44 $i (0..@$checkD │ │ │ │ +0001f550: 6576 6963 6573 2d31 290a 2020 2020 7b0a evices-1). {. │ │ │ │ +0001f560: 0970 7573 6820 4064 6576 6963 6573 2c0a .push @devices,. │ │ │ │ +0001f570: 0922 6368 6563 6b44 6576 6963 6573 2469 ."checkDevices$i │ │ │ │ +0001f580: 3d22 202e 2024 6368 6563 6b44 6576 6963 =" . $checkDevic │ │ │ │ +0001f590: 6573 5b24 695d 2c0a 0922 6368 6563 6b44 es[$i],.."checkD │ │ │ │ +0001f5a0: 6576 6963 6573 4469 7224 693d 2220 2e20 evicesDir$i=" . │ │ │ │ +0001f5b0: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir │ │ │ │ +0001f5c0: 5b24 695d 2c0a 0922 6368 6563 6b44 6576 [$i],.."checkDev │ │ │ │ +0001f5d0: 6963 6573 4253 2469 3d22 202e 2024 6368 icesBS$i=" . $ch │ │ │ │ +0001f5e0: 6563 6b44 6576 6963 6573 4253 5b24 695d eckDevicesBS[$i] │ │ │ │ +0001f5f0: 2c0a 0922 6368 6563 6b44 6576 6963 6573 ,.."checkDevices │ │ │ │ +0001f600: 436f 6d70 7224 693d 2220 2e20 2463 6865 Compr$i=" . $che │ │ │ │ +0001f610: 636b 4465 7669 6365 7343 6f6d 7072 5b24 ckDevicesCompr[$ │ │ │ │ +0001f620: 695d 3b0a 2020 2020 7d0a 2020 2020 6d79 i];. }. my │ │ │ │ +0001f630: 2028 4069 6e66 6f4c 696e 6573 2920 3d20 (@infoLines) = │ │ │ │ +0001f640: 2822 7665 7273 696f 6e3d 2220 2e20 246d ("version=" . $m │ │ │ │ +0001f650: 6169 6e3a 3a63 6865 636b 5375 6d46 696c ain::checkSumFil │ │ │ │ +0001f660: 6556 6572 7369 6f6e 2c0a 0909 2020 2020 eVersion,... │ │ │ │ +0001f670: 2020 2022 6461 7465 3d22 202e 0a09 0920 "date=" .... │ │ │ │ +0001f680: 2020 2020 2020 2473 656c 662d 3e7b 2761 $self->{'a │ │ │ │ +0001f690: 6b74 4461 7465 277d 2d3e 6765 7444 6174 ktDate'}->getDat │ │ │ │ +0001f6a0: 6554 696d 6528 272d 666f 726d 6174 2720 eTime('-format' │ │ │ │ +0001f6b0: 3d3e 0a09 0909 0909 0920 2020 2020 2020 =>....... │ │ │ │ +0001f6c0: 2725 592e 254d 2e25 4420 2568 2e25 6d2e '%Y.%M.%D %h.%m. │ │ │ │ +0001f6d0: 2573 2729 2c0a 0909 2020 2020 2020 2022 %s'),... " │ │ │ │ +0001f6e0: 736f 7572 6365 4469 723d 2220 2e20 2227 sourceDir=" . "' │ │ │ │ +0001f6f0: 2220 2e20 2473 6420 2e20 2227 222c 0a09 " . $sd . "'",.. │ │ │ │ +0001f700: 0920 2020 2020 2020 2266 6f6c 6c6f 774c . "followL │ │ │ │ +0001f710: 696e 6b73 3d22 202e 2024 7365 6c66 2d3e inks=" . $self-> │ │ │ │ +0001f720: 7b27 666f 6c6c 6f77 4c69 6e6b 7327 7d2c {'followLinks'}, │ │ │ │ +0001f730: 0a09 0920 2020 2020 2020 2263 6f6d 7072 ... "compr │ │ │ │ +0001f740: 6573 733d 2220 2e0a 0909 2020 2020 2020 ess=" .... │ │ │ │ +0001f750: 2022 2722 202e 206a 6f69 6e28 2227 2027 "'" . join("' ' │ │ │ │ +0001f760: 222c 2040 7b24 7365 6c66 2d3e 7b27 636f ", @{$self->{'co │ │ │ │ +0001f770: 6d70 7265 7373 277d 7d29 202e 2022 2722 mpress'}}) . "'" │ │ │ │ +0001f780: 2c0a 0909 2020 2020 2020 2022 756e 636f ,... "unco │ │ │ │ +0001f790: 6d70 7265 7373 3d22 202e 0a09 0920 2020 mpress=" .... │ │ │ │ +0001f7a0: 2020 2020 2227 2220 2e20 6a6f 696e 2822 "'" . join(" │ │ │ │ +0001f7b0: 2720 2722 2c20 407b 2473 656c 662d 3e7b ' '", @{$self->{ │ │ │ │ +0001f7c0: 2775 6e63 6f6d 7072 6573 7327 7d7d 2920 'uncompress'}}) │ │ │ │ +0001f7d0: 2e20 2227 222c 0a09 0920 2020 2020 2020 . "'",... │ │ │ │ +0001f7e0: 2270 6f73 7466 6978 3d22 202e 2022 2722 "postfix=" . "'" │ │ │ │ +0001f7f0: 202e 2024 7365 6c66 2d3e 7b27 706f 7374 . $self->{'post │ │ │ │ +0001f800: 6669 7827 7d20 2e20 2227 222c 0a09 0920 fix'} . "'",... │ │ │ │ +0001f810: 2020 2020 2020 2263 6f6d 7072 5275 6c65 "comprRule │ │ │ │ +0001f820: 3d22 202e 2024 636f 6d70 7252 756c 652c =" . $comprRule, │ │ │ │ +0001f830: 0a09 0920 2020 2020 2020 2265 7863 6570 ... "excep │ │ │ │ +0001f840: 7444 6972 733d 2220 2e20 2465 7863 6570 tDirs=" . $excep │ │ │ │ +0001f850: 7444 6972 732c 0a09 0920 2020 2020 2020 tDirs,... │ │ │ │ +0001f860: 2269 6e63 6c75 6465 4469 7273 3d22 202e "includeDirs=" . │ │ │ │ +0001f870: 2024 696e 636c 7564 6544 6972 732c 0a09 $includeDirs,.. │ │ │ │ +0001f880: 0920 2020 2020 2020 2265 7863 6570 7452 . "exceptR │ │ │ │ +0001f890: 756c 653d 2220 2e20 2465 7863 6570 7452 ule=" . $exceptR │ │ │ │ +0001f8a0: 756c 652c 0a09 0920 2020 2020 2020 2269 ule,... "i │ │ │ │ +0001f8b0: 6e63 6c75 6465 5275 6c65 3d22 202e 2024 ncludeRule=" . $ │ │ │ │ +0001f8c0: 696e 636c 7564 6552 756c 652c 0a09 0920 includeRule,... │ │ │ │ +0001f8d0: 2020 2020 2020 2277 7269 7465 4578 636c "writeExcl │ │ │ │ +0001f8e0: 7564 654c 6f67 3d22 202e 0a09 0920 2020 udeLog=" .... │ │ │ │ +0001f8f0: 2020 2020 2020 2020 2824 7365 6c66 2d3e ($self-> │ │ │ │ +0001f900: 7b27 7772 6974 6545 7863 6c75 6465 4c6f {'writeExcludeLo │ │ │ │ +0001f910: 6727 7d20 3f20 2779 6573 2720 3a20 276e g'} ? 'yes' : 'n │ │ │ │ +0001f920: 6f27 292c 0a09 0920 2020 2020 2020 2265 o'),... "e │ │ │ │ +0001f930: 7863 6570 7454 7970 6573 3d22 202e 2024 xceptTypes=" . $ │ │ │ │ +0001f940: 6578 6365 7074 5479 7065 732c 0a09 0920 exceptTypes,... │ │ │ │ +0001f950: 2020 2020 2020 4062 6c6f 636b 7352 756c @blocksRul │ │ │ │ +0001f960: 6573 2c0a 0909 2020 2020 2020 2040 6465 es,... @de │ │ │ │ +0001f970: 7669 6365 732c 0a09 0920 2020 2020 2020 vices,... │ │ │ │ +0001f980: 2270 7265 7365 7276 6550 6572 6d73 3d22 "preservePerms=" │ │ │ │ +0001f990: 202e 2028 2470 7265 7365 7276 6550 6572 . ($preservePer │ │ │ │ +0001f9a0: 6d73 203f 2027 7965 7327 203a 2027 6e6f ms ? 'yes' : 'no │ │ │ │ +0001f9b0: 2729 2c0a 0909 2020 2020 2020 2022 6c61 '),... "la │ │ │ │ +0001f9c0: 7465 4c69 6e6b 733d 222e 2028 246c 6174 teLinks=". ($lat │ │ │ │ +0001f9d0: 654c 696e 6b73 203f 2027 7965 7327 203a eLinks ? 'yes' : │ │ │ │ +0001f9e0: 2027 6e6f 2729 2c0a 0909 2020 2020 2020 'no'),... │ │ │ │ +0001f9f0: 2022 6c61 7465 436f 6d70 7265 7373 3d22 "lateCompress=" │ │ │ │ +0001fa00: 202e 2028 246c 6174 6543 6f6d 7072 6573 . ($lateCompres │ │ │ │ +0001fa10: 7320 3f20 2779 6573 2720 3a20 276e 6f27 s ? 'yes' : 'no' │ │ │ │ +0001fa20: 292c 0a09 0920 2020 2020 2020 2263 7049 ),... "cpI │ │ │ │ +0001fa30: 7347 6e75 3d22 2e20 2824 676e 7563 7020 sGnu=". ($gnucp │ │ │ │ +0001fa40: 3f20 2779 6573 2720 3a20 276e 6f27 292c ? 'yes' : 'no'), │ │ │ │ +0001fa50: 0a09 0920 2020 2020 2020 226c 6f67 496e ... "logIn │ │ │ │ +0001fa60: 4261 636b 7570 4469 723d 2220 2e0a 0909 BackupDir=" .... │ │ │ │ +0001fa70: 2020 2020 2020 2020 2020 2028 2473 656c ($sel │ │ │ │ +0001fa80: 662d 3e7b 276c 6f67 496e 4261 636b 7570 f->{'logInBackup │ │ │ │ +0001fa90: 4469 7227 7d20 3f20 2779 6573 2720 3a20 Dir'} ? 'yes' : │ │ │ │ +0001faa0: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... │ │ │ │ +0001fab0: 2263 6f6d 7072 6573 734c 6f67 496e 4261 "compressLogInBa │ │ │ │ +0001fac0: 636b 7570 4469 723d 2220 2e0a 0909 2020 ckupDir=" .... │ │ │ │ +0001fad0: 2020 2020 2020 2020 2028 2473 656c 662d ($self- │ │ │ │ +0001fae0: 3e7b 2763 6f6d 7072 6573 734c 6f67 496e >{'compressLogIn │ │ │ │ +0001faf0: 4261 636b 7570 4469 7227 7d20 3f20 2779 BackupDir'} ? 'y │ │ │ │ +0001fb00: 6573 2720 3a20 276e 6f27 292c 0a09 0920 es' : 'no'),... │ │ │ │ +0001fb10: 2020 2020 2020 226c 6f67 496e 4261 636b "logInBack │ │ │ │ +0001fb20: 7570 4469 7246 696c 654e 616d 653d 2220 upDirFileName=" │ │ │ │ +0001fb30: 2e0a 0909 2020 2020 2020 2020 2020 2022 .... " │ │ │ │ +0001fb40: 2722 202e 2024 6c6f 6749 6e42 6163 6b75 '" . $logInBacku │ │ │ │ +0001fb50: 7044 6972 4669 6c65 4e61 6d65 202e 2022 pDirFileName . " │ │ │ │ +0001fb60: 2722 0a09 0920 2020 2020 2020 293b 0a20 '"... );. │ │ │ │ +0001fb70: 2020 206d 7920 2469 6e66 6f46 696c 6520 my $infoFile │ │ │ │ +0001fb80: 3d20 2473 656c 662d 3e7b 2769 6e66 6f46 = $self->{'infoF │ │ │ │ +0001fb90: 696c 6527 7d3b 0a0a 2020 2020 6d79 2024 ile'};.. my $ │ │ │ │ +0001fba0: 7763 7366 203d 2077 7269 7465 4368 6563 wcsf = writeChec │ │ │ │ +0001fbb0: 6b53 756d 4669 6c65 2d3e 6e65 7728 272d kSumFile->new('- │ │ │ │ +0001fbc0: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' => │ │ │ │ +0001fbd0: 2024 696e 666f 4669 6c65 2c0a 0909 0909 $infoFile,..... │ │ │ │ +0001fbe0: 2020 2020 2020 272d 626c 6f63 6b43 6865 '-blockChe │ │ │ │ +0001fbf0: 636b 5375 6d46 696c 6527 203d 3e0a 0909 ckSumFile' =>... │ │ │ │ +0001fc00: 0909 2020 2020 2020 2473 656c 662d 3e7b .. $self->{ │ │ │ │ +0001fc10: 2762 6c6f 636b 4368 6563 6b53 756d 4669 'blockCheckSumFi │ │ │ │ +0001fc20: 6c65 277d 2c0a 0909 0909 2020 2020 2020 le'},..... │ │ │ │ +0001fc30: 272d 696e 666f 4c69 6e65 7327 203d 3e20 '-infoLines' => │ │ │ │ +0001fc40: 5c40 696e 666f 4c69 6e65 732c 0a09 0909 \@infoLines,.... │ │ │ │ +0001fc50: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ │ +0001fc60: 3d3e 2024 7072 4c6f 672c 0a09 0909 0920 => $prLog,..... │ │ │ │ +0001fc70: 2020 2020 2027 2d63 686d 6f64 4d44 3546 '-chmodMD5F │ │ │ │ +0001fc80: 696c 6527 203d 3e20 2473 656c 662d 3e7b ile' => $self->{ │ │ │ │ +0001fc90: 2763 686d 6f64 4d44 3546 696c 6527 7d2c 'chmodMD5File'}, │ │ │ │ +0001fca0: 0a09 0909 0920 2020 2020 2027 2d63 6f6d ..... '-com │ │ │ │ +0001fcb0: 7072 6573 734d 4435 4669 6c65 2720 3d3e pressMD5File' => │ │ │ │ +0001fcc0: 0a09 0909 0920 2020 2020 2024 7365 6c66 ..... $self │ │ │ │ +0001fcd0: 2d3e 7b27 636f 6d70 7265 7373 4d44 3546 ->{'compressMD5F │ │ │ │ +0001fce0: 696c 6527 7d2c 0a09 0909 0920 2020 2020 ile'},..... │ │ │ │ +0001fcf0: 2027 2d6c 6174 654c 696e 6b73 2720 3d3e '-lateLinks' => │ │ │ │ +0001fd00: 2024 6c61 7465 4c69 6e6b 7329 3b0a 2020 $lateLinks);. │ │ │ │ +0001fd10: 2020 2473 656c 662d 3e7b 2777 7269 7465 $self->{'write │ │ │ │ +0001fd20: 4368 6563 6b53 756d 4669 6c65 277d 203d CheckSumFile'} = │ │ │ │ +0001fd30: 2024 7763 7366 3b0a 0a20 2020 2062 6c65 $wcsf;.. ble │ │ │ │ +0001fd40: 7373 2024 7365 6c66 2c20 2463 6c61 7373 ss $self, $class │ │ │ │ +0001fd50: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +0001fd60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001fd70: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +0001fd80: 7562 2073 6574 4442 4d6d 6435 0a7b 0a20 ub setDBMmd5.{. │ │ │ │ +0001fd90: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ │ +0001fda0: 6966 743b 0a0a 2020 2020 2473 656c 662d ift;.. $self- │ │ │ │ +0001fdb0: 3e7b 2744 424d 6d64 3527 7d20 3d20 7368 >{'DBMmd5'} = sh │ │ │ │ +0001fdc0: 6966 743b 0a7d 0a0a 0a23 2323 2323 2323 ift;.}...####### │ │ │ │ +0001fdd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001fde0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +0001fdf0: 230a 2320 66c3 bc72 206e 6f72 6d61 6c65 #.# f..r normale │ │ │ │ +0001fe00: 2044 6174 6569 656e 0a73 7562 2073 746f Dateien.sub sto │ │ │ │ +0001fe10: 7265 0a7b 0a20 2020 206d 7920 2473 656c re.{. my $sel │ │ │ │ +0001fe20: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. │ │ │ │ +0001fe30: 6d79 2028 2570 6172 616d 7329 203d 2028 my (%params) = ( │ │ │ │ +0001fe40: 272d 6669 6c65 6e61 6d65 2720 2020 203d '-filename' = │ │ │ │ +0001fe50: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +0001fe60: 2d6d 6435 7375 6d27 2020 2020 2020 3d3e -md5sum' => │ │ │ │ +0001fe70: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +0001fe80: 636f 6d70 7227 2020 2020 2020 203d 3e20 compr' => │ │ │ │ +0001fe90: 756e 6465 662c 0a09 0920 2020 2027 2d64 undef,... '-d │ │ │ │ +0001fea0: 6576 2720 2020 2020 2020 2020 3d3e 2075 ev' => u │ │ │ │ +0001feb0: 6e64 6566 2c0a 0909 2020 2020 272d 696e ndef,... '-in │ │ │ │ +0001fec0: 6f64 6527 2020 2020 2020 203d 3e20 756e ode' => un │ │ │ │ +0001fed0: 6465 662c 0a09 0920 2020 2027 2d69 6e6f def,... '-ino │ │ │ │ +0001fee0: 6465 4261 636b 7570 2720 3d3e 2075 6e64 deBackup' => und │ │ │ │ +0001fef0: 6566 2c0a 0909 2020 2020 272d 6374 696d ef,... '-ctim │ │ │ │ +0001ff00: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde │ │ │ │ +0001ff10: 662c 0a09 0920 2020 2027 2d6d 7469 6d65 f,... '-mtime │ │ │ │ +0001ff20: 2720 2020 2020 2020 3d3e 2075 6e64 6566 ' => undef │ │ │ │ +0001ff30: 2c0a 0909 2020 2020 272d 6174 696d 6527 ,... '-atime' │ │ │ │ +0001ff40: 2020 2020 2020 203d 3e20 756e 6465 662c => undef, │ │ │ │ +0001ff50: 0a09 0920 2020 2027 2d73 697a 6527 2020 ... '-size' │ │ │ │ +0001ff60: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,. │ │ │ │ +0001ff70: 0909 2020 2020 272d 7569 6427 2020 2020 .. '-uid' │ │ │ │ +0001ff80: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,.. │ │ │ │ +0001ff90: 0920 2020 2027 2d67 6964 2720 2020 2020 . '-gid' │ │ │ │ +0001ffa0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +0001ffb0: 2020 2020 272d 6d6f 6465 2720 2020 2020 '-mode' │ │ │ │ +0001ffc0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +0001ffd0: 2020 2027 2d73 746f 7265 496e 4442 4d27 '-storeInDBM' │ │ │ │ +0001ffe0: 2020 3d3e 2031 2020 2020 2020 2320 4465 => 1 # De │ │ │ │ +0001fff0: 6661 756c 743a 2073 7065 6963 6865 726e fault: speichern │ │ │ │ +00020000: 2c0a 0909 2020 2020 2020 2020 2020 2020 ,... │ │ │ │ +00020010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00020020: 2023 2020 2020 2020 2020 3020 3d20 6e69 # 0 = ni │ │ │ │ +00020030: 6368 7420 7370 6569 6368 6572 6e0a 0909 cht speichern... │ │ │ │ +00020040: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c │ │ │ │ +00020050: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams │ │ │ │ +00020060: 285c 2570 6172 616d 732c 205c 405f 2c20 (\%params, \@_, │ │ │ │ +00020070: 2761 6b74 4669 6c65 6e61 6d65 3a3a 7374 'aktFilename::st │ │ │ │ +00020080: 6f72 6527 2c0a 0909 0920 5b27 2d66 696c ore',.... ['-fil │ │ │ │ +00020090: 656e 616d 6527 2c20 272d 6d64 3573 756d ename', '-md5sum │ │ │ │ +000200a0: 272c 2027 2d63 6f6d 7072 272c 2027 2d64 ', '-compr', '-d │ │ │ │ +000200b0: 6576 272c 2027 2d69 6e6f 6465 272c 0a09 ev', '-inode',.. │ │ │ │ +000200c0: 0909 2020 272d 696e 6f64 6542 6163 6b75 .. '-inodeBacku │ │ │ │ +000200d0: 7027 2c20 272d 6374 696d 6527 2c20 272d p', '-ctime', '- │ │ │ │ +000200e0: 6d74 696d 6527 2c20 272d 6174 696d 6527 mtime', '-atime' │ │ │ │ +000200f0: 2c0a 0909 0920 2027 2d73 697a 6527 2c20 ,.... '-size', │ │ │ │ +00020100: 272d 7569 6427 2c20 272d 6769 6427 2c20 '-uid', '-gid', │ │ │ │ +00020110: 272d 6d6f 6465 275d 293b 0a20 2020 206d '-mode']);. m │ │ │ │ +00020120: 7920 2466 696c 656e 616d 6520 3d20 2470 y $filename = $p │ │ │ │ +00020130: 6172 616d 737b 272d 6669 6c65 6e61 6d65 arams{'-filename │ │ │ │ +00020140: 277d 3b0a 2020 2020 6d79 2024 6d64 3573 '};. my $md5s │ │ │ │ +00020150: 756d 203d 2024 7061 7261 6d73 7b27 2d6d um = $params{'-m │ │ │ │ +00020160: 6435 7375 6d27 7d3b 0a20 2020 206d 7920 d5sum'};. my │ │ │ │ +00020170: 2463 6f6d 7072 203d 2024 7061 7261 6d73 $compr = $params │ │ │ │ +00020180: 7b27 2d63 6f6d 7072 277d 3b0a 2020 2020 {'-compr'};. │ │ │ │ +00020190: 6d79 2024 6465 7620 3d20 2470 6172 616d my $dev = $param │ │ │ │ +000201a0: 737b 272d 6465 7627 7d3b 0a20 2020 206d s{'-dev'};. m │ │ │ │ +000201b0: 7920 2469 6e6f 6465 203d 2024 7061 7261 y $inode = $para │ │ │ │ +000201c0: 6d73 7b27 2d69 6e6f 6465 277d 3b0a 2020 ms{'-inode'};. │ │ │ │ +000201d0: 2020 6d79 2024 696e 6f64 6542 6163 6b75 my $inodeBacku │ │ │ │ +000201e0: 7020 3d20 2470 6172 616d 737b 272d 696e p = $params{'-in │ │ │ │ +000201f0: 6f64 6542 6163 6b75 7027 7d3b 0a20 2020 odeBackup'};. │ │ │ │ +00020200: 206d 7920 2463 7469 6d65 203d 2024 7061 my $ctime = $pa │ │ │ │ +00020210: 7261 6d73 7b27 2d63 7469 6d65 277d 3b0a rams{'-ctime'};. │ │ │ │ +00020220: 2020 2020 6d79 2024 6d74 696d 6520 3d20 my $mtime = │ │ │ │ +00020230: 2470 6172 616d 737b 272d 6d74 696d 6527 $params{'-mtime' │ │ │ │ +00020240: 7d3b 0a20 2020 206d 7920 2461 7469 6d65 };. my $atime │ │ │ │ +00020250: 203d 2024 7061 7261 6d73 7b27 2d61 7469 = $params{'-ati │ │ │ │ +00020260: 6d65 277d 3b0a 2020 2020 6d79 2024 7369 me'};. my $si │ │ │ │ +00020270: 7a65 203d 2024 7061 7261 6d73 7b27 2d73 ze = $params{'-s │ │ │ │ +00020280: 697a 6527 7d3b 0a20 2020 206d 7920 2475 ize'};. my $u │ │ │ │ +00020290: 6964 203d 2024 7061 7261 6d73 7b27 2d75 id = $params{'-u │ │ │ │ +000202a0: 6964 277d 3b0a 2020 2020 6d79 2024 6769 id'};. my $gi │ │ │ │ +000202b0: 6420 3d20 2470 6172 616d 737b 272d 6769 d = $params{'-gi │ │ │ │ +000202c0: 6427 7d3b 0a20 2020 206d 7920 246d 6f64 d'};. my $mod │ │ │ │ +000202d0: 6520 3d20 2470 6172 616d 737b 272d 6d6f e = $params{'-mo │ │ │ │ +000202e0: 6465 277d 3b0a 0a20 2020 2069 6620 2824 de'};.. if ($ │ │ │ │ +000202f0: 7061 7261 6d73 7b27 2d73 746f 7265 496e params{'-storeIn │ │ │ │ +00020300: 4442 4d27 7d29 0a20 2020 207b 0a09 6d79 DBM'}). {..my │ │ │ │ +00020310: 2024 4442 4d6d 6435 203d 2024 7365 6c66 $DBMmd5 = $self │ │ │ │ +00020320: 2d3e 7b27 4442 4d6d 6435 277d 3b0a 0a09 ->{'DBMmd5'};... │ │ │ │ +00020330: 6d79 2024 6d64 3570 6163 6b20 3d20 7061 my $md5pack = pa │ │ │ │ +00020340: 636b 2827 4833 3227 2c20 246d 6435 7375 ck('H32', $md5su │ │ │ │ +00020350: 6d29 3b0a 096d 7920 2466 203d 2024 7365 m);..my $f = $se │ │ │ │ +00020360: 6c66 2d3e 7b27 696e 6465 7844 6972 277d lf->{'indexDir'} │ │ │ │ +00020370: 2d3e 7365 7449 6e64 6578 2824 6669 6c65 ->setIndex($file │ │ │ │ +00020380: 6e61 6d65 293b 0a09 2424 4442 4d6d 6435 name);..$$DBMmd5 │ │ │ │ +00020390: 7b24 6d64 3570 6163 6b7d 203d 2070 6163 {$md5pack} = pac │ │ │ │ +000203a0: 6b28 2746 6153 612a 272c 2024 696e 6f64 k('FaSa*', $inod │ │ │ │ +000203b0: 6542 6163 6b75 702c 2024 636f 6d70 722c eBackup, $compr, │ │ │ │ +000203c0: 0a09 0909 0920 2030 2c20 2466 290a 0920 ..... 0, $f).. │ │ │ │ +000203d0: 2020 2075 6e6c 6573 7320 6578 6973 7473 unless exists │ │ │ │ +000203e0: 2024 2444 424d 6d64 357b 246d 6435 7061 $$DBMmd5{$md5pa │ │ │ │ +000203f0: 636b 7d3b 0a20 2020 207d 0920 2020 2020 ck};. }. │ │ │ │ +00020400: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00020410: 2020 2020 2020 2023 2024 6261 636b 7570 # $backup │ │ │ │ +00020420: 4469 7249 6e64 6578 2069 7374 2069 6d6d DirIndex ist imm │ │ │ │ +00020430: 6572 2030 0a0a 2020 2020 2473 656c 662d er 0.. $self- │ │ │ │ +00020440: 3e7b 2777 7269 7465 4368 6563 6b53 756d >{'writeCheckSum │ │ │ │ +00020450: 4669 6c65 277d 2d3e 7772 6974 6528 272d File'}->write('- │ │ │ │ +00020460: 6669 6c65 6e61 6d65 2720 3d3e 2024 6669 filename' => $fi │ │ │ │ +00020470: 6c65 6e61 6d65 2c0a 0909 0909 0927 2d6d lename,......'-m │ │ │ │ +00020480: 6435 7375 6d27 203d 3e20 246d 6435 7375 d5sum' => $md5su │ │ │ │ +00020490: 6d2c 0a09 0909 0909 272d 636f 6d70 7227 m,......'-compr' │ │ │ │ +000204a0: 203d 3e20 2463 6f6d 7072 2c0a 0909 0909 => $compr,..... │ │ │ │ +000204b0: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev, │ │ │ │ +000204c0: 0a09 0909 0909 272d 696e 6f64 6527 203d ......'-inode' = │ │ │ │ +000204d0: 3e20 2469 6e6f 6465 2c0a 0909 0909 0927 > $inode,......' │ │ │ │ +000204e0: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' => │ │ │ │ +000204f0: 2024 696e 6f64 6542 6163 6b75 702c 0a09 $inodeBackup,.. │ │ │ │ +00020500: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => │ │ │ │ +00020510: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m │ │ │ │ +00020520: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime, │ │ │ │ +00020530: 0a09 0909 0909 272d 6174 696d 6527 203d ......'-atime' = │ │ │ │ +00020540: 3e20 2461 7469 6d65 2c0a 0909 0909 0927 > $atime,......' │ │ │ │ +00020550: 2d73 697a 6527 203d 3e20 2473 697a 652c -size' => $size, │ │ │ │ +00020560: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => │ │ │ │ +00020570: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid │ │ │ │ +00020580: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,...... │ │ │ │ +00020590: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode │ │ │ │ +000205a0: 0a09 0909 0909 293b 0a7d 0a0a 0a23 2323 ......);.}...### │ │ │ │ +000205b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000205c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000205d0: 2323 2323 230a 7375 6220 7374 6f72 6542 #####.sub storeB │ │ │ │ +000205e0: 6c6f 636b 0a7b 0a20 2020 206d 7920 2473 lock.{. my $s │ │ │ │ +000205f0: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. │ │ │ │ +00020600: 2020 6d79 2028 2570 6172 616d 7329 203d my (%params) = │ │ │ │ +00020610: 2028 272d 6669 6c65 6e61 6d65 2720 3d3e ('-filename' => │ │ │ │ +00020620: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +00020630: 6d64 3573 756d 2720 2020 3d3e 2075 6e64 md5sum' => und │ │ │ │ +00020640: 6566 2c0a 0909 2020 2020 272d 636f 6d70 ef,... '-comp │ │ │ │ +00020650: 7227 2020 2020 3d3e 2075 6e64 6566 0a09 r' => undef.. │ │ │ │ +00020660: 293b 0a0a 2020 2020 263a 3a63 6865 636b );.. &::check │ │ │ │ +00020670: 4f62 6a65 6374 5061 7261 6d73 285c 2570 ObjectParams(\%p │ │ │ │ +00020680: 6172 616d 732c 205c 405f 2c20 2777 7269 arams, \@_, 'wri │ │ │ │ +00020690: 7465 4368 6563 6b53 756d 4669 6c65 3a77 teCheckSumFile:w │ │ │ │ +000206a0: 7269 7465 426c 6f63 6b27 2c0a 0909 0920 riteBlock',.... │ │ │ │ +000206b0: 5b27 2d66 696c 656e 616d 6527 2c20 272d ['-filename', '- │ │ │ │ +000206c0: 6d64 3573 756d 272c 2027 2d63 6f6d 7072 md5sum', '-compr │ │ │ │ +000206d0: 275d 293b 0a0a 2020 2020 6d79 2024 6669 ']);.. my $fi │ │ │ │ +000206e0: 6c65 6e61 6d65 203d 2024 7061 7261 6d73 lename = $params │ │ │ │ +000206f0: 7b27 2d66 696c 656e 616d 6527 7d3b 0a20 {'-filename'};. │ │ │ │ +00020700: 2020 206d 7920 246d 6435 7375 6d20 3d20 my $md5sum = │ │ │ │ +00020710: 2470 6172 616d 737b 272d 6d64 3573 756d $params{'-md5sum │ │ │ │ +00020720: 277d 3b0a 2020 2020 6d79 2024 636f 6d70 '};. my $comp │ │ │ │ +00020730: 7220 3d20 2470 6172 616d 737b 272d 636f r = $params{'-co │ │ │ │ +00020740: 6d70 7227 7d3b 0a20 2020 2024 7365 6c66 mpr'};. $self │ │ │ │ +00020750: 2d3e 7b27 7772 6974 6543 6865 636b 5375 ->{'writeCheckSu │ │ │ │ +00020760: 6d46 696c 6527 7d2d 3e77 7269 7465 426c mFile'}->writeBl │ │ │ │ +00020770: 6f63 6b28 272d 6669 6c65 6e61 6d65 2720 ock('-filename' │ │ │ │ +00020780: 3d3e 2024 6669 6c65 6e61 6d65 2c0a 0909 => $filename,... │ │ │ │ +00020790: 0909 0920 2020 2020 272d 6d64 3573 756d ... '-md5sum │ │ │ │ +000207a0: 2720 3d3e 2024 6d64 3573 756d 2c0a 0909 ' => $md5sum,... │ │ │ │ +000207b0: 0909 0920 2020 2020 272d 636f 6d70 7227 ... '-compr' │ │ │ │ +000207c0: 203d 3e20 2463 6f6d 7072 293b 0a7d 0a0a => $compr);.}.. │ │ │ │ +000207d0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +000207e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000207f0: 2323 2323 2323 2323 230a 7375 6220 7374 #########.sub st │ │ │ │ +00020800: 6f72 6544 6972 0a7b 0a20 2020 206d 7920 oreDir.{. my │ │ │ │ +00020810: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ │ +00020820: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params) │ │ │ │ +00020830: 203d 2028 272d 6469 7227 2020 203d 3e20 = ('-dir' => │ │ │ │ +00020840: 756e 6465 662c 0a09 0920 2020 2027 2d64 undef,... '-d │ │ │ │ +00020850: 6576 2720 2020 3d3e 2075 6e64 6566 2c0a ev' => undef,. │ │ │ │ +00020860: 0909 2020 2020 272d 696e 6f64 6527 203d .. '-inode' = │ │ │ │ +00020870: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00020880: 2d63 7469 6d65 2720 3d3e 2075 6e64 6566 -ctime' => undef │ │ │ │ +00020890: 2c0a 0909 2020 2020 272d 6d74 696d 6527 ,... '-mtime' │ │ │ │ +000208a0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +000208b0: 2027 2d61 7469 6d65 2720 3d3e 2075 6e64 '-atime' => und │ │ │ │ +000208c0: 6566 2c0a 0909 2020 2020 272d 7569 6427 ef,... '-uid' │ │ │ │ +000208d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +000208e0: 2020 2027 2d67 6964 2720 2020 3d3e 2075 '-gid' => u │ │ │ │ +000208f0: 6e64 6566 2c0a 0909 2020 2020 272d 6d6f ndef,... '-mo │ │ │ │ +00020900: 6465 2720 203d 3e20 756e 6465 660a 0909 de' => undef... │ │ │ │ +00020910: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c │ │ │ │ +00020920: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams │ │ │ │ +00020930: 285c 2570 6172 616d 732c 205c 405f 2c20 (\%params, \@_, │ │ │ │ +00020940: 2761 6b74 4669 6c65 6e61 6d65 3a3a 7374 'aktFilename::st │ │ │ │ +00020950: 6f72 6544 6972 272c 0a09 0909 205b 272d oreDir',.... ['- │ │ │ │ +00020960: 6469 7227 2c20 272d 6465 7627 2c20 272d dir', '-dev', '- │ │ │ │ +00020970: 696e 6f64 6527 2c20 272d 6374 696d 6527 inode', '-ctime' │ │ │ │ +00020980: 2c20 272d 6d74 696d 6527 2c0a 0909 0920 , '-mtime',.... │ │ │ │ +00020990: 2027 2d61 7469 6d65 272c 2027 2d75 6964 '-atime', '-uid │ │ │ │ +000209a0: 272c 2027 2d67 6964 272c 2027 2d6d 6f64 ', '-gid', '-mod │ │ │ │ +000209b0: 6527 5d29 3b0a 0a20 2020 206d 7920 2464 e']);.. my $d │ │ │ │ +000209c0: 6972 203d 2024 7061 7261 6d73 7b27 2d64 ir = $params{'-d │ │ │ │ +000209d0: 6972 277d 3b0a 2020 2020 6d79 2024 6465 ir'};. my $de │ │ │ │ +000209e0: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de │ │ │ │ +000209f0: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino │ │ │ │ +00020a00: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i │ │ │ │ +00020a10: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $ │ │ │ │ +00020a20: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{ │ │ │ │ +00020a30: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m │ │ │ │ +00020a40: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para │ │ │ │ +00020a50: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. │ │ │ │ +00020a60: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p │ │ │ │ +00020a70: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'}; │ │ │ │ +00020a80: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $ │ │ │ │ +00020a90: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};. │ │ │ │ +00020aa0: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p │ │ │ │ +00020ab0: 6172 616d 737b 272d 6769 6427 7d3b 0a20 arams{'-gid'};. │ │ │ │ +00020ac0: 2020 206d 7920 246d 6f64 6520 3d20 2470 my $mode = $p │ │ │ │ +00020ad0: 6172 616d 737b 272d 6d6f 6465 277d 3b0a arams{'-mode'};. │ │ │ │ +00020ae0: 0a20 2020 206d 7920 2469 6e6f 6465 4261 . my $inodeBa │ │ │ │ +00020af0: 636b 7570 203d 2030 3b20 2020 2023 2069 ckup = 0; # i │ │ │ │ +00020b00: 7272 656c 6576 616e 740a 0a20 2020 2024 rrelevant.. $ │ │ │ │ +00020b10: 7365 6c66 2d3e 7b27 7772 6974 6543 6865 self->{'writeChe │ │ │ │ +00020b20: 636b 5375 6d46 696c 6527 7d2d 3e77 7269 ckSumFile'}->wri │ │ │ │ +00020b30: 7465 2827 2d66 696c 656e 616d 6527 203d te('-filename' = │ │ │ │ +00020b40: 3e20 2464 6972 2c0a 0909 0909 0927 2d6d > $dir,......'-m │ │ │ │ +00020b50: 6435 7375 6d27 203d 3e20 2764 6972 272c d5sum' => 'dir', │ │ │ │ +00020b60: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' = │ │ │ │ +00020b70: 3e20 302c 0a09 0909 0909 272d 6465 7627 > 0,......'-dev' │ │ │ │ +00020b80: 203d 3e20 2464 6576 2c0a 0909 0909 0927 => $dev,......' │ │ │ │ +00020b90: 2d69 6e6f 6465 2720 3d3e 2024 696e 6f64 -inode' => $inod │ │ │ │ +00020ba0: 652c 0a09 0909 0909 272d 696e 6f64 6542 e,......'-inodeB │ │ │ │ +00020bb0: 6163 6b75 7027 203d 3e20 2469 6e6f 6465 ackup' => $inode │ │ │ │ +00020bc0: 4261 636b 7570 2c0a 0909 0909 0927 2d63 Backup,......'-c │ │ │ │ +00020bd0: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime, │ │ │ │ +00020be0: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' = │ │ │ │ +00020bf0: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......' │ │ │ │ +00020c00: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim │ │ │ │ +00020c10: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' │ │ │ │ +00020c20: 3d3e 2030 2c0a 0909 0909 0927 2d75 6964 => 0,......'-uid │ │ │ │ +00020c30: 2720 3d3e 2024 7569 642c 0a09 0909 0909 ' => $uid,...... │ │ │ │ +00020c40: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,. │ │ │ │ +00020c50: 0909 0909 0927 2d6d 6f64 6527 203d 3e20 .....'-mode' => │ │ │ │ +00020c60: 246d 6f64 650a 0909 0909 0929 3b0a 7d0a $mode......);.}. │ │ │ │ +00020c70: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00020c80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00020c90: 2323 2323 2323 2323 2323 0a73 7562 2073 ##########.sub s │ │ │ │ +00020ca0: 746f 7265 5379 6d6c 696e 6b0a 7b0a 2020 toreSymlink.{. │ │ │ │ +00020cb0: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi │ │ │ │ +00020cc0: 6674 3b0a 0a20 2020 206d 7920 2825 7061 ft;.. my (%pa │ │ │ │ +00020cd0: 7261 6d73 2920 3d20 2827 2d73 796d 6c69 rams) = ('-symli │ │ │ │ +00020ce0: 6e6b 2720 3d3e 2075 6e64 6566 2c0a 0909 nk' => undef,... │ │ │ │ +00020cf0: 2020 2020 272d 6465 7627 2020 203d 3e20 '-dev' => │ │ │ │ +00020d00: 756e 6465 662c 0a09 0920 2020 2027 2d69 undef,... '-i │ │ │ │ +00020d10: 6e6f 6465 2720 3d3e 2075 6e64 6566 2c0a node' => undef,. │ │ │ │ +00020d20: 0909 2020 2020 272d 6374 696d 6527 2020 .. '-ctime' │ │ │ │ +00020d30: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +00020d40: 2027 2d6d 7469 6d65 2720 2020 3d3e 2075 '-mtime' => u │ │ │ │ +00020d50: 6e64 6566 2c0a 0909 2020 2020 272d 6174 ndef,... '-at │ │ │ │ +00020d60: 696d 6527 2020 203d 3e20 756e 6465 662c ime' => undef, │ │ │ │ +00020d70: 0a09 0920 2020 2027 2d75 6964 2720 2020 ... '-uid' │ │ │ │ +00020d80: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ │ +00020d90: 2020 272d 6769 6427 2020 2020 203d 3e20 '-gid' => │ │ │ │ +00020da0: 756e 6465 662c 0a09 0920 2020 2029 3b0a undef,... );. │ │ │ │ +00020db0: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj │ │ │ │ +00020dc0: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\%para │ │ │ │ +00020dd0: 6d73 2c20 5c40 5f2c 2027 616b 7446 696c ms, \@_, 'aktFil │ │ │ │ +00020de0: 656e 616d 653a 3a73 746f 7265 5379 6d6c ename::storeSyml │ │ │ │ +00020df0: 696e 6b27 2c0a 0909 0920 5b27 2d73 796d ink',.... ['-sym │ │ │ │ +00020e00: 6c69 6e6b 272c 2027 2d64 6576 272c 2027 link', '-dev', ' │ │ │ │ +00020e10: 2d69 6e6f 6465 272c 2027 2d63 7469 6d65 -inode', '-ctime │ │ │ │ +00020e20: 272c 2027 2d6d 7469 6d65 272c 0a09 0909 ', '-mtime',.... │ │ │ │ +00020e30: 2020 272d 6174 696d 6527 2c20 272d 7569 '-atime', '-ui │ │ │ │ +00020e40: 6427 2c20 272d 6769 6427 5d29 3b0a 0a20 d', '-gid']);.. │ │ │ │ +00020e50: 2020 206d 7920 2473 796d 6c69 6e6b 203d my $symlink = │ │ │ │ +00020e60: 2024 7061 7261 6d73 7b27 2d73 796d 6c69 $params{'-symli │ │ │ │ +00020e70: 6e6b 277d 3b0a 2020 2020 6d79 2024 6465 nk'};. my $de │ │ │ │ +00020e80: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de │ │ │ │ +00020e90: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino │ │ │ │ +00020ea0: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i │ │ │ │ +00020eb0: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $ │ │ │ │ +00020ec0: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{ │ │ │ │ +00020ed0: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m │ │ │ │ +00020ee0: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para │ │ │ │ +00020ef0: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. │ │ │ │ +00020f00: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p │ │ │ │ +00020f10: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'}; │ │ │ │ +00020f20: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $ │ │ │ │ +00020f30: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};. │ │ │ │ +00020f40: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p │ │ │ │ +00020f50: 6172 616d 737b 272d 6769 6427 7d3b 0a0a arams{'-gid'};.. │ │ │ │ +00020f60: 2020 2020 6d79 2024 696e 6f64 6542 6163 my $inodeBac │ │ │ │ +00020f70: 6b75 7020 3d20 303b 2020 2023 2069 7272 kup = 0; # irr │ │ │ │ +00020f80: 656c 6576 616e 740a 0a20 2020 2024 7365 elevant.. $se │ │ │ │ +00020f90: 6c66 2d3e 7b27 7772 6974 6543 6865 636b lf->{'writeCheck │ │ │ │ +00020fa0: 5375 6d46 696c 6527 7d2d 3e77 7269 7465 SumFile'}->write │ │ │ │ +00020fb0: 2827 2d66 696c 656e 616d 6527 203d 3e20 ('-filename' => │ │ │ │ +00020fc0: 2473 796d 6c69 6e6b 2c0a 0909 0909 0927 $symlink,......' │ │ │ │ +00020fd0: 2d6d 6435 7375 6d27 203d 3e20 2773 796d -md5sum' => 'sym │ │ │ │ +00020fe0: 6c69 6e6b 272c 0a09 0909 0909 272d 636f link',......'-co │ │ │ │ +00020ff0: 6d70 7227 203d 3e20 302c 0a09 0909 0909 mpr' => 0,...... │ │ │ │ +00021000: 272d 6465 7627 203d 3e20 2464 6576 2c0a '-dev' => $dev,. │ │ │ │ +00021010: 0909 0909 0927 2d69 6e6f 6465 2720 3d3e .....'-inode' => │ │ │ │ +00021020: 2024 696e 6f64 652c 0a09 0909 0909 272d $inode,......'- │ │ │ │ +00021030: 696e 6f64 6542 6163 6b75 7027 203d 3e20 inodeBackup' => │ │ │ │ +00021040: 2469 6e6f 6465 4261 636b 7570 2c0a 0909 $inodeBackup,... │ │ │ │ +00021050: 0909 0927 2d63 7469 6d65 2720 3d3e 2024 ...'-ctime' => $ │ │ │ │ +00021060: 6374 696d 652c 0a09 0909 0909 272d 6d74 ctime,......'-mt │ │ │ │ +00021070: 696d 6527 203d 3e20 246d 7469 6d65 2c0a ime' => $mtime,. │ │ │ │ +00021080: 0909 0909 0927 2d61 7469 6d65 2720 3d3e .....'-atime' => │ │ │ │ +00021090: 2024 6174 696d 652c 0a09 0909 0909 272d $atime,......'- │ │ │ │ +000210a0: 7369 7a65 2720 3d3e 2030 2c0a 0909 0909 size' => 0,..... │ │ │ │ +000210b0: 0927 2d75 6964 2720 3d3e 2024 7569 642c .'-uid' => $uid, │ │ │ │ +000210c0: 0a09 0909 0909 272d 6769 6427 203d 3e20 ......'-gid' => │ │ │ │ +000210d0: 2467 6964 2c0a 0909 0909 0927 2d6d 6f64 $gid,......'-mod │ │ │ │ +000210e0: 6527 203d 3e20 300a 0909 0909 0929 3b0a e' => 0......);. │ │ │ │ +000210f0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +00021100: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021110: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ │ +00021120: 2073 746f 7265 4e61 6d65 6450 6970 650a storeNamedPipe. │ │ │ │ +00021130: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +00021140: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my │ │ │ │ +00021150: 2825 7061 7261 6d73 2920 3d20 2827 2d70 (%params) = ('-p │ │ │ │ +00021160: 6970 6527 2020 3d3e 2075 6e64 6566 2c0a ipe' => undef,. │ │ │ │ +00021170: 0909 2020 2020 272d 6465 7627 2020 203d .. '-dev' = │ │ │ │ +00021180: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00021190: 2d69 6e6f 6465 2720 3d3e 2075 6e64 6566 -inode' => undef │ │ │ │ +000211a0: 2c0a 0909 2020 2020 272d 6374 696d 6527 ,... '-ctime' │ │ │ │ +000211b0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +000211c0: 2027 2d6d 7469 6d65 2720 3d3e 2075 6e64 '-mtime' => und │ │ │ │ +000211d0: 6566 2c0a 0909 2020 2020 272d 6174 696d ef,... '-atim │ │ │ │ +000211e0: 6527 203d 3e20 756e 6465 662c 0a09 0920 e' => undef,... │ │ │ │ +000211f0: 2020 2027 2d75 6964 2720 2020 3d3e 2075 '-uid' => u │ │ │ │ +00021200: 6e64 6566 2c0a 0909 2020 2020 272d 6769 ndef,... '-gi │ │ │ │ +00021210: 6427 2020 203d 3e20 756e 6465 662c 0a09 d' => undef,.. │ │ │ │ +00021220: 0920 2020 2027 2d6d 6f64 6527 2020 3d3e . '-mode' => │ │ │ │ +00021230: 2075 6e64 6566 0a09 0920 2020 2029 3b0a undef... );. │ │ │ │ +00021240: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj │ │ │ │ +00021250: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\%para │ │ │ │ +00021260: 6d73 2c20 5c40 5f2c 2027 616b 7446 696c ms, \@_, 'aktFil │ │ │ │ +00021270: 656e 616d 653a 3a73 746f 7265 4e61 6d65 ename::storeName │ │ │ │ +00021280: 6450 6970 6527 2c0a 0909 0920 5b27 2d70 dPipe',.... ['-p │ │ │ │ +00021290: 6970 6527 2c20 272d 6374 696d 6527 2c20 ipe', '-ctime', │ │ │ │ +000212a0: 272d 6d74 696d 6527 2c20 272d 6174 696d '-mtime', '-atim │ │ │ │ +000212b0: 6527 2c0a 0909 0920 2027 2d75 6964 272c e',.... '-uid', │ │ │ │ +000212c0: 2027 2d67 6964 272c 2027 2d6d 6f64 6527 '-gid', '-mode' │ │ │ │ +000212d0: 5d29 3b0a 0a20 2020 206d 7920 2470 6970 ]);.. my $pip │ │ │ │ +000212e0: 6520 3d20 2470 6172 616d 737b 272d 7069 e = $params{'-pi │ │ │ │ +000212f0: 7065 277d 3b0a 2020 2020 6d79 2024 6465 pe'};. my $de │ │ │ │ +00021300: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de │ │ │ │ +00021310: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino │ │ │ │ +00021320: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i │ │ │ │ +00021330: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $ │ │ │ │ +00021340: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{ │ │ │ │ +00021350: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m │ │ │ │ +00021360: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para │ │ │ │ +00021370: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. │ │ │ │ +00021380: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p │ │ │ │ +00021390: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'}; │ │ │ │ +000213a0: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $ │ │ │ │ +000213b0: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};. │ │ │ │ +000213c0: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p │ │ │ │ +000213d0: 6172 616d 737b 272d 6769 6427 7d3b 0a20 arams{'-gid'};. │ │ │ │ +000213e0: 2020 206d 7920 246d 6f64 6520 3d20 2470 my $mode = $p │ │ │ │ +000213f0: 6172 616d 737b 272d 6d6f 6465 277d 3b0a arams{'-mode'};. │ │ │ │ +00021400: 0a20 2020 206d 7920 2469 6e6f 6465 4261 . my $inodeBa │ │ │ │ +00021410: 636b 7570 203d 2030 3b20 2020 2320 6972 ckup = 0; # ir │ │ │ │ +00021420: 7265 6c65 7661 6e74 0a0a 2020 2020 2473 relevant.. $s │ │ │ │ +00021430: 656c 662d 3e7b 2777 7269 7465 4368 6563 elf->{'writeChec │ │ │ │ +00021440: 6b53 756d 4669 6c65 277d 2d3e 7772 6974 kSumFile'}->writ │ │ │ │ +00021450: 6528 272d 6669 6c65 6e61 6d65 2720 3d3e e('-filename' => │ │ │ │ +00021460: 2024 7069 7065 2c0a 0909 0909 0927 2d6d $pipe,......'-m │ │ │ │ +00021470: 6435 7375 6d27 203d 3e20 2770 6970 6527 d5sum' => 'pipe' │ │ │ │ +00021480: 2c0a 0909 0909 0927 2d63 6f6d 7072 2720 ,......'-compr' │ │ │ │ +00021490: 3d3e 2030 2c0a 0909 0909 0927 2d64 6576 => 0,......'-dev │ │ │ │ +000214a0: 2720 3d3e 2024 6465 762c 0a09 0909 0909 ' => $dev,...... │ │ │ │ +000214b0: 272d 696e 6f64 6527 203d 3e20 2469 6e6f '-inode' => $ino │ │ │ │ +000214c0: 6465 2c0a 0909 0909 0927 2d69 6e6f 6465 de,......'-inode │ │ │ │ +000214d0: 4261 636b 7570 2720 3d3e 2024 696e 6f64 Backup' => $inod │ │ │ │ +000214e0: 6542 6163 6b75 702c 0a09 0909 0909 272d eBackup,......'- │ │ │ │ +000214f0: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ │ +00021500: 2c0a 0909 0909 0927 2d6d 7469 6d65 2720 ,......'-mtime' │ │ │ │ +00021510: 3d3e 2024 6d74 696d 652c 0a09 0909 0909 => $mtime,...... │ │ │ │ +00021520: 272d 6174 696d 6527 203d 3e20 2461 7469 '-atime' => $ati │ │ │ │ +00021530: 6d65 2c0a 0909 0909 0927 2d73 697a 6527 me,......'-size' │ │ │ │ +00021540: 203d 3e20 302c 0a09 0909 0909 272d 7569 => 0,......'-ui │ │ │ │ +00021550: 6427 203d 3e20 2475 6964 2c0a 0909 0909 d' => $uid,..... │ │ │ │ +00021560: 0927 2d67 6964 2720 3d3e 2024 6769 642c .'-gid' => $gid, │ │ │ │ +00021570: 0a09 0909 0909 272d 6d6f 6465 2720 3d3e ......'-mode' => │ │ │ │ +00021580: 2024 6d6f 6465 0a09 0909 0909 293b 0a7d $mode......);.} │ │ │ │ +00021590: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +000215a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000215b0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +000215c0: 7374 6f72 6553 7065 6369 616c 0a7b 0a20 storeSpecial.{. │ │ │ │ +000215d0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ │ +000215e0: 6966 743b 0a0a 2020 2020 6d79 2028 2570 ift;.. my (%p │ │ │ │ +000215f0: 6172 616d 7329 203d 2028 272d 6e61 6d65 arams) = ('-name │ │ │ │ +00021600: 2720 203d 3e20 756e 6465 662c 0a20 2020 ' => undef,. │ │ │ │ +00021610: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00021620: 2027 2d74 7970 6527 2020 3d3e 2075 6e64 '-type' => und │ │ │ │ +00021630: 6566 2c0a 0909 2020 2020 272d 6465 7627 ef,... '-dev' │ │ │ │ +00021640: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +00021650: 2020 2027 2d69 6e6f 6465 2720 3d3e 2075 '-inode' => u │ │ │ │ +00021660: 6e64 6566 2c0a 0909 2020 2020 272d 6374 ndef,... '-ct │ │ │ │ +00021670: 696d 6527 203d 3e20 756e 6465 662c 0a09 ime' => undef,.. │ │ │ │ +00021680: 0920 2020 2027 2d6d 7469 6d65 2720 3d3e . '-mtime' => │ │ │ │ +00021690: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ │ +000216a0: 6174 696d 6527 203d 3e20 756e 6465 662c atime' => undef, │ │ │ │ +000216b0: 0a09 0920 2020 2027 2d75 6964 2720 2020 ... '-uid' │ │ │ │ +000216c0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ │ +000216d0: 272d 6769 6427 2020 203d 3e20 756e 6465 '-gid' => unde │ │ │ │ +000216e0: 662c 0a09 0920 2020 2027 2d6d 6f64 6527 f,... '-mode' │ │ │ │ +000216f0: 2020 3d3e 2075 6e64 6566 0a09 0920 2020 => undef... │ │ │ │ +00021700: 2029 3b0a 0a20 2020 2026 3a3a 6368 6563 );.. &::chec │ │ │ │ +00021710: 6b4f 626a 6563 7450 6172 616d 7328 5c25 kObjectParams(\% │ │ │ │ +00021720: 7061 7261 6d73 2c20 5c40 5f2c 2027 616b params, \@_, 'ak │ │ │ │ +00021730: 7446 696c 656e 616d 653a 3a73 746f 7265 tFilename::store │ │ │ │ +00021740: 5370 6563 6961 6c27 2c0a 0909 0920 5b27 Special',.... [' │ │ │ │ +00021750: 2d6e 616d 6527 2c20 272d 6374 696d 6527 -name', '-ctime' │ │ │ │ +00021760: 2c20 272d 6d74 696d 6527 2c20 272d 6174 , '-mtime', '-at │ │ │ │ +00021770: 696d 6527 2c0a 0909 0920 2027 2d75 6964 ime',.... '-uid │ │ │ │ +00021780: 272c 2027 2d67 6964 272c 2027 2d6d 6f64 ', '-gid', '-mod │ │ │ │ +00021790: 6527 2c20 272d 7479 7065 275d 293b 0a0a e', '-type']);.. │ │ │ │ +000217a0: 2020 2020 6d79 2024 6e61 6d65 203d 2024 my $name = $ │ │ │ │ +000217b0: 7061 7261 6d73 7b27 2d6e 616d 6527 7d3b params{'-name'}; │ │ │ │ +000217c0: 0a20 2020 206d 7920 2474 7970 6520 3d20 . my $type = │ │ │ │ +000217d0: 2470 6172 616d 737b 272d 7479 7065 277d $params{'-type'} │ │ │ │ +000217e0: 3b0a 2020 2020 6d79 2024 6465 7620 3d20 ;. my $dev = │ │ │ │ +000217f0: 2470 6172 616d 737b 272d 6465 7627 7d3b $params{'-dev'}; │ │ │ │ +00021800: 0a20 2020 206d 7920 2469 6e6f 6465 203d . my $inode = │ │ │ │ +00021810: 2024 7061 7261 6d73 7b27 2d69 6e6f 6465 $params{'-inode │ │ │ │ +00021820: 277d 3b0a 2020 2020 6d79 2024 6374 696d '};. my $ctim │ │ │ │ +00021830: 6520 3d20 2470 6172 616d 737b 272d 6374 e = $params{'-ct │ │ │ │ +00021840: 696d 6527 7d3b 0a20 2020 206d 7920 246d ime'};. my $m │ │ │ │ +00021850: 7469 6d65 203d 2024 7061 7261 6d73 7b27 time = $params{' │ │ │ │ +00021860: 2d6d 7469 6d65 277d 3b0a 2020 2020 6d79 -mtime'};. my │ │ │ │ +00021870: 2024 6174 696d 6520 3d20 2470 6172 616d $atime = $param │ │ │ │ +00021880: 737b 272d 6174 696d 6527 7d3b 0a20 2020 s{'-atime'};. │ │ │ │ +00021890: 206d 7920 2475 6964 203d 2024 7061 7261 my $uid = $para │ │ │ │ +000218a0: 6d73 7b27 2d75 6964 277d 3b0a 2020 2020 ms{'-uid'};. │ │ │ │ +000218b0: 6d79 2024 6769 6420 3d20 2470 6172 616d my $gid = $param │ │ │ │ +000218c0: 737b 272d 6769 6427 7d3b 0a20 2020 206d s{'-gid'};. m │ │ │ │ +000218d0: 7920 246d 6f64 6520 3d20 2470 6172 616d y $mode = $param │ │ │ │ +000218e0: 737b 272d 6d6f 6465 277d 3b0a 0a20 2020 s{'-mode'};.. │ │ │ │ +000218f0: 206d 7920 2469 6e6f 6465 4261 636b 7570 my $inodeBackup │ │ │ │ +00021900: 203d 2030 3b20 2020 2320 6972 7265 6c65 = 0; # irrele │ │ │ │ +00021910: 7661 6e74 0a0a 2020 2020 2474 7970 6520 vant.. $type │ │ │ │ +00021920: 3d20 2273 6f63 6b65 7422 2069 6620 2474 = "socket" if $t │ │ │ │ +00021930: 7970 6520 6571 2022 5322 3b0a 2020 2020 ype eq "S";. │ │ │ │ +00021940: 2474 7970 6520 3d20 2262 6c6f 636b 6465 $type = "blockde │ │ │ │ +00021950: 7622 2069 6620 2474 7970 6520 6571 2022 v" if $type eq " │ │ │ │ +00021960: 6222 3b0a 2020 2020 2474 7970 6520 3d20 b";. $type = │ │ │ │ +00021970: 2263 6861 7264 6576 2220 6966 2024 7479 "chardev" if $ty │ │ │ │ +00021980: 7065 2065 7120 2263 223b 0a0a 2020 2020 pe eq "c";.. │ │ │ │ +00021990: 2473 656c 662d 3e7b 2777 7269 7465 4368 $self->{'writeCh │ │ │ │ +000219a0: 6563 6b53 756d 4669 6c65 277d 2d3e 7772 eckSumFile'}->wr │ │ │ │ +000219b0: 6974 6528 272d 6669 6c65 6e61 6d65 2720 ite('-filename' │ │ │ │ +000219c0: 3d3e 2024 6e61 6d65 2c0a 0909 0909 0927 => $name,......' │ │ │ │ +000219d0: 2d6d 6435 7375 6d27 203d 3e20 2474 7970 -md5sum' => $typ │ │ │ │ +000219e0: 652c 0a09 0909 0909 272d 636f 6d70 7227 e,......'-compr' │ │ │ │ +000219f0: 203d 3e20 2775 272c 0a09 0909 0909 272d => 'u',......'- │ │ │ │ +00021a00: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,... │ │ │ │ +00021a10: 0909 0927 2d69 6e6f 6465 2720 3d3e 2024 ...'-inode' => $ │ │ │ │ +00021a20: 696e 6f64 652c 0a09 0909 0909 272d 696e inode,......'-in │ │ │ │ +00021a30: 6f64 6542 6163 6b75 7027 203d 3e20 2469 odeBackup' => $i │ │ │ │ +00021a40: 6e6f 6465 4261 636b 7570 2c0a 0909 0909 nodeBackup,..... │ │ │ │ +00021a50: 0927 2d63 7469 6d65 2720 3d3e 2024 6374 .'-ctime' => $ct │ │ │ │ +00021a60: 696d 652c 0a09 0909 0909 272d 6d74 696d ime,......'-mtim │ │ │ │ +00021a70: 6527 203d 3e20 246d 7469 6d65 2c0a 0909 e' => $mtime,... │ │ │ │ +00021a80: 0909 0927 2d61 7469 6d65 2720 3d3e 2024 ...'-atime' => $ │ │ │ │ +00021a90: 6174 696d 652c 0a09 0909 0909 272d 7369 atime,......'-si │ │ │ │ +00021aa0: 7a65 2720 3d3e 2030 2c0a 0909 0909 0927 ze' => 0,......' │ │ │ │ +00021ab0: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,.. │ │ │ │ +00021ac0: 0909 0909 272d 6769 6427 203d 3e20 2467 ....'-gid' => $g │ │ │ │ +00021ad0: 6964 2c0a 0909 0909 0927 2d6d 6f64 6527 id,......'-mode' │ │ │ │ +00021ae0: 203d 3e20 246d 6f64 650a 0909 0909 0929 => $mode......) │ │ │ │ +00021af0: 3b0a 7d0a 0a0a 0a23 2323 2323 2323 2323 ;.}....######### │ │ │ │ +00021b00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021b10: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +00021b20: 2320 666f 7220 7369 676e 616c 2068 616e # for signal han │ │ │ │ +00021b30: 646c 696e 670a 7375 6220 6465 6c49 6e66 dling.sub delInf │ │ │ │ +00021b40: 6f46 696c 650a 7b0a 2020 2020 6d79 2024 oFile.{. my $ │ │ │ │ +00021b50: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. │ │ │ │ +00021b60: 2020 2075 6e6c 696e 6b20 2473 656c 662d unlink $self- │ │ │ │ +00021b70: 3e7b 2769 6e66 6f46 696c 6527 7d3b 0a7d >{'infoFile'};.} │ │ │ │ +00021b80: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +00021b90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021ba0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +00021bb0: 636c 6f73 6549 6e66 6f46 696c 650a 7b0a closeInfoFile.{. │ │ │ │ +00021bc0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ │ +00021bd0: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self │ │ │ │ +00021be0: 2d3e 7b27 7772 6974 6543 6865 636b 5375 ->{'writeCheckSu │ │ │ │ +00021bf0: 6d46 696c 6527 7d2d 3e64 6573 7472 6f79 mFile'}->destroy │ │ │ │ +00021c00: 2829 3b0a 7d0a 0a0a 2323 2323 2323 2323 ();.}...######## │ │ │ │ +00021c10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021c20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021c30: 2323 2323 2323 2323 2323 0a70 6163 6b61 ##########.packa │ │ │ │ +00021c40: 6765 2072 6561 6444 6972 4368 6563 6b53 ge readDirCheckS │ │ │ │ +00021c50: 697a 6554 696d 653b 0a6f 7572 2040 4953 izeTime;.our @IS │ │ │ │ +00021c60: 4120 3d20 7177 2820 7265 6375 7273 6976 A = qw( recursiv │ │ │ │ +00021c70: 6552 6561 6444 6972 2029 3b0a 0a23 2323 eReadDir );..### │ │ │ │ +00021c80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021c90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00021ca0: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{. │ │ │ │ +00021cb0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ │ +00021cc0: 7368 6966 743b 0a0a 2020 2020 6d79 2028 shift;.. my ( │ │ │ │ +00021cd0: 2570 6172 616d 7329 203d 2028 272d 6469 %params) = ('-di │ │ │ │ +00021ce0: 7227 2020 2020 2020 2020 2020 2020 3d3e r' => │ │ │ │ +00021cf0: 2075 6e64 6566 2c20 2320 7a75 2064 7572 undef, # zu dur │ │ │ │ +00021d00: 6368 7375 6368 656e 6465 7320 6469 7265 chsuchendes dire │ │ │ │ +00021d10: 6374 6f72 790a 0909 2020 2020 272d 6164 ctory... '-ad │ │ │ │ +00021d20: 6d69 6e44 6972 7327 2020 2020 2020 3d3e minDirs' => │ │ │ │ +00021d30: 2075 6e64 6566 2c20 2320 4f62 6a65 6b74 undef, # Objekt │ │ │ │ +00021d40: 206d 6974 2049 6e66 6f73 2076 6f6e 0a09 mit Infos von.. │ │ │ │ +00021d50: 0920 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00021d60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00021d70: 2023 2056 6572 7a65 6963 686e 6973 7365 # Verzeichnisse │ │ │ │ +00021d80: 6e0a 0909 2020 2020 272d 6f6c 6446 696c n... '-oldFil │ │ │ │ +00021d90: 656e 616d 6527 2020 2020 3d3e 2075 6e64 ename' => und │ │ │ │ +00021da0: 6566 2c20 2320 4f62 6a65 6b74 206d 6974 ef, # Objekt mit │ │ │ │ +00021db0: 2061 6c74 656e 2044 424d 7320 6574 632e alten DBMs etc. │ │ │ │ +00021dc0: 0a09 0920 2020 2027 2d61 6b74 4669 6c65 ... '-aktFile │ │ │ │ +00021dd0: 6e61 6d65 2720 2020 203d 3e20 756e 6465 name' => unde │ │ │ │ +00021de0: 662c 2023 204f 626a 656b 7420 66c3 bc72 f, # Objekt f..r │ │ │ │ +00021df0: 206e 6575 6520 4d65 7461 2049 6e66 6f73 neue Meta Infos │ │ │ │ +00021e00: 0a09 0920 2020 2027 2d61 6b74 4469 7227 ... '-aktDir' │ │ │ │ +00021e10: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde │ │ │ │ +00021e20: 662c 2023 207a 7520 7369 6368 6572 6e64 f, # zu sichernd │ │ │ │ +00021e30: 6573 2044 6972 6563 746f 7279 0a09 0920 es Directory... │ │ │ │ +00021e40: 2020 2027 2d66 6f6c 6c6f 774c 696e 6b73 '-followLinks │ │ │ │ +00021e50: 2720 2020 203d 3e20 302c 2020 2020 2023 ' => 0, # │ │ │ │ +00021e60: 2054 6965 6665 2c20 6269 7320 7a75 2064 Tiefe, bis zu d │ │ │ │ +00021e70: 6572 2073 796d 6c69 6e6b 730a 0909 2020 er symlinks... │ │ │ │ +00021e80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00021e90: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +00021ea0: 6765 666f 6c67 7420 7765 7264 656e 2073 gefolgt werden s │ │ │ │ +00021eb0: 6f6c 6c0a 0909 2020 2020 272d 6578 6365 oll... '-exce │ │ │ │ +00021ec0: 7074 4469 7273 2720 2020 2020 3d3e 205b ptDirs' => [ │ │ │ │ +00021ed0: 5d2c 2020 2020 2320 4175 736e 6168 6d65 ], # Ausnahme │ │ │ │ +00021ee0: 7665 727a 6569 6368 6e69 7373 650a 0909 verzeichnisse... │ │ │ │ +00021ef0: 2020 2020 272d 696e 636c 7564 6544 6972 '-includeDir │ │ │ │ +00021f00: 7327 2020 2020 3d3e 205b 5d2c 2020 2020 s' => [], │ │ │ │ +00021f10: 2320 6f6e 6c79 2069 6e63 6c75 6465 2074 # only include t │ │ │ │ +00021f20: 6865 7365 2064 6972 730a 0909 2020 2020 hese dirs... │ │ │ │ +00021f30: 272d 706f 7374 6669 7827 2020 2020 2020 '-postfix' │ │ │ │ +00021f40: 2020 3d3e 2075 6e64 6566 2c20 2320 506f => undef, # Po │ │ │ │ +00021f50: 7374 6669 782c 2064 6572 206e 6163 6820 stfix, der nach │ │ │ │ +00021f60: 4b6f 6d70 722e 0a09 0920 2020 2020 2020 Kompr.... │ │ │ │ +00021f70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00021f80: 2020 2020 2020 2020 2023 2061 6e67 6568 # angeh │ │ │ │ +00021f90: c3a4 6e67 7420 7765 7264 656e 2073 6f6c ..ngt werden sol │ │ │ │ +00021fa0: 6c0a 0909 2020 2020 272d 696e 636c 7564 l... '-includ │ │ │ │ +00021fb0: 6552 756c 6527 2020 2020 3d3e 2075 6e64 eRule' => und │ │ │ │ +00021fc0: 6566 2c0a 0909 2020 2020 272d 6578 6365 ef,... '-exce │ │ │ │ +00021fd0: 7074 5275 6c65 2720 2020 2020 3d3e 2075 ptRule' => u │ │ │ │ +00021fe0: 6e64 6566 2c0a 0909 2020 2020 272d 6368 ndef,... '-ch │ │ │ │ +00021ff0: 6563 6b42 6c6f 636b 7352 756c 6527 203d eckBlocksRule' = │ │ │ │ +00022000: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00022010: 2d77 7269 7465 4578 636c 7564 654c 6f67 -writeExcludeLog │ │ │ │ +00022020: 273d 3e20 756e 6465 662c 0a09 0920 2020 '=> undef,... │ │ │ │ +00022030: 2027 2d65 7854 7970 6573 2720 2020 2020 '-exTypes' │ │ │ │ +00022040: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +00022050: 2020 2027 2d72 6573 6574 4174 696d 6527 '-resetAtime' │ │ │ │ +00022060: 2020 2020 203d 3e20 756e 6465 662c 0a20 => undef,. │ │ │ │ +00022070: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00022080: 2020 2027 2d63 7049 7347 6e75 2720 2020 '-cpIsGnu' │ │ │ │ +00022090: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,.. │ │ │ │ +000220a0: 0920 2020 2027 2d64 6562 7567 4d6f 6465 . '-debugMode │ │ │ │ +000220b0: 2720 2020 2020 203d 3e20 756e 6465 662c ' => undef, │ │ │ │ +000220c0: 0a09 0920 2020 2027 2d76 6572 626f 7365 ... '-verbose │ │ │ │ +000220d0: 2720 2020 2020 2020 203d 3e20 756e 6465 ' => unde │ │ │ │ +000220e0: 662c 0a09 0920 2020 2027 2d74 6d70 6469 f,... '-tmpdi │ │ │ │ +000220f0: 7227 2020 2020 2020 2020 203d 3e20 756e r' => un │ │ │ │ +00022100: 6465 662c 0a09 0920 2020 2027 2d70 724c def,... '-prL │ │ │ │ +00022110: 6f67 2720 2020 2020 2020 2020 203d 3e20 og' => │ │ │ │ +00022120: 756e 6465 662c 0a09 0920 2020 2027 2d70 undef,... '-p │ │ │ │ +00022130: 724c 6f67 4572 726f 7227 2020 2020 203d rLogError' = │ │ │ │ +00022140: 3e20 2745 272c 0a09 0920 2020 2027 2d70 > 'E',... '-p │ │ │ │ +00022150: 724c 6f67 5761 726e 2720 2020 2020 203d rLogWarn' = │ │ │ │ +00022160: 3e20 2757 272c 0a09 0920 2020 2027 2d65 > 'W',... '-e │ │ │ │ +00022170: 7869 7449 6645 7272 6f72 2720 2020 203d xitIfError' = │ │ │ │ +00022180: 3e20 312c 2020 2020 2020 2320 4572 726f > 1, # Erro │ │ │ │ +00022190: 7263 6f64 6520 6265 6920 4665 686c 6572 rcode bei Fehler │ │ │ │ +000221a0: 0a09 0920 2020 2027 2d69 676e 6f72 6552 ... '-ignoreR │ │ │ │ +000221b0: 6561 6445 7272 6f72 2720 3d3e 2027 6e6f eadError' => 'no │ │ │ │ +000221c0: 272c 0a09 0920 2020 2027 2d69 676e 6f72 ',... '-ignor │ │ │ │ +000221d0: 6554 696d 6527 2020 2020 203d 3e20 276e eTime' => 'n │ │ │ │ +000221e0: 6f6e 6527 2c0a 0909 2020 2020 272d 7072 one',... '-pr │ │ │ │ +000221f0: 696e 7444 6570 7468 2720 2020 2020 3d3e intDepth' => │ │ │ │ +00022200: 2075 6e64 6566 0a09 0920 2020 2029 3b0a undef... );. │ │ │ │ +00022210: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj │ │ │ │ +00022220: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\%para │ │ │ │ +00022230: 6d73 2c20 5c40 5f2c 2027 7265 6164 4469 ms, \@_, 'readDi │ │ │ │ +00022240: 7243 6865 636b 5369 7a65 5469 6d65 3a3a rCheckSizeTime:: │ │ │ │ +00022250: 6e65 7727 2c0a 0909 0920 5b27 2d64 6972 new',.... ['-dir │ │ │ │ +00022260: 272c 2027 2d6f 6c64 4669 6c65 6e61 6d65 ', '-oldFilename │ │ │ │ +00022270: 272c 2027 2d61 6b74 4469 7227 2c20 272d ', '-aktDir', '- │ │ │ │ +00022280: 6578 5479 7065 7327 2c0a 0909 0920 2027 exTypes',.... ' │ │ │ │ +00022290: 2d70 6f73 7466 6978 272c 2027 2d61 646d -postfix', '-adm │ │ │ │ +000222a0: 696e 4469 7273 272c 2027 2d70 724c 6f67 inDirs', '-prLog │ │ │ │ +000222b0: 272c 0a09 0909 2020 272d 7072 696e 7444 ',.... '-printD │ │ │ │ +000222c0: 6570 7468 275d 293b 0a0a 2020 2020 6966 epth']);.. if │ │ │ │ +000222d0: 2028 6465 6669 6e65 6420 2470 6172 616d (defined $param │ │ │ │ +000222e0: 737b 2d64 6972 7d29 0a20 2020 207b 0a09 s{-dir}). {.. │ │ │ │ +000222f0: 2470 6172 616d 737b 272d 6469 7227 7d20 $params{'-dir'} │ │ │ │ +00022300: 3d7e 2073 2f5c 2f5c 2f2f 5c2f 2f67 3b20 =~ s/\/\//\//g; │ │ │ │ +00022310: 2020 2020 2020 2023 202f 2f20 2d3e 202f # // -> / │ │ │ │ +00022320: 0a09 2470 6172 616d 737b 272d 6469 7227 ..$params{'-dir' │ │ │ │ +00022330: 7d20 3d7e 2073 2f5c 4128 2e2b 295c 2f5c } =~ s/\A(.+)\/\ │ │ │ │ +00022340: 5a2f 2431 2f3b 2020 2023 2072 656d 6f76 Z/$1/; # remov │ │ │ │ +00022350: 6520 7472 6169 6c69 6e67 202f 0a20 2020 e trailing /. │ │ │ │ +00022360: 207d 0a0a 2020 2020 6d79 2024 7365 6c66 }.. my $self │ │ │ │ +00022370: 203d 2072 6563 7572 7369 7665 5265 6164 = recursiveRead │ │ │ │ +00022380: 4469 722d 3e6e 6577 2827 2d64 6972 7327 Dir->new('-dirs' │ │ │ │ +00022390: 203d 3e20 5b24 7061 7261 6d73 7b27 2d64 => [$params{'-d │ │ │ │ +000223a0: 6972 277d 5d2c 0a09 0909 0920 2020 2020 ir'}],..... │ │ │ │ +000223b0: 272d 666f 6c6c 6f77 4c69 6e6b 7327 203d '-followLinks' = │ │ │ │ +000223c0: 3e20 2470 6172 616d 737b 272d 666f 6c6c > $params{'-foll │ │ │ │ +000223d0: 6f77 4c69 6e6b 7327 7d2c 0a09 0909 0920 owLinks'},..... │ │ │ │ +000223e0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs │ │ │ │ +000223f0: 2720 3d3e 2024 7061 7261 6d73 7b27 2d65 ' => $params{'-e │ │ │ │ +00022400: 7863 6570 7444 6972 7327 7d2c 0a09 0909 xceptDirs'},.... │ │ │ │ +00022410: 0920 2020 2020 272d 696e 636c 7564 6544 . '-includeD │ │ │ │ +00022420: 6972 7327 203d 3e20 2470 6172 616d 737b irs' => $params{ │ │ │ │ +00022430: 272d 696e 636c 7564 6544 6972 7327 7d2c '-includeDirs'}, │ │ │ │ +00022440: 0a09 0909 0920 2020 2020 272d 7072 4c6f ..... '-prLo │ │ │ │ +00022450: 6727 203d 3e20 2470 6172 616d 737b 272d g' => $params{'- │ │ │ │ +00022460: 7072 4c6f 6727 7d2c 0a09 0909 0920 2020 prLog'},..... │ │ │ │ +00022470: 2020 272d 7072 4c6f 6745 7272 6f72 2720 '-prLogError' │ │ │ │ +00022480: 3d3e 2024 7061 7261 6d73 7b27 2d70 724c => $params{'-prL │ │ │ │ +00022490: 6f67 4572 726f 7227 7d2c 0a09 0909 0920 ogError'},..... │ │ │ │ +000224a0: 2020 2020 272d 7072 4c6f 6757 6172 6e27 '-prLogWarn' │ │ │ │ +000224b0: 203d 3e20 2470 6172 616d 737b 272d 7072 => $params{'-pr │ │ │ │ +000224c0: 4c6f 6757 6172 6e27 7d2c 0a09 0909 0920 LogWarn'},..... │ │ │ │ +000224d0: 2020 2020 272d 7665 7262 6f73 6527 203d '-verbose' = │ │ │ │ +000224e0: 3e20 2470 6172 616d 737b 272d 7665 7262 > $params{'-verb │ │ │ │ +000224f0: 6f73 6527 7d2c 0a09 0909 0920 2020 2020 ose'},..... │ │ │ │ +00022500: 272d 6578 6974 4966 4572 726f 7227 203d '-exitIfError' = │ │ │ │ +00022510: 3e20 2470 6172 616d 737b 272d 6578 6974 > $params{'-exit │ │ │ │ +00022520: 4966 4572 726f 7227 7d2c 0a09 0909 0920 IfError'},..... │ │ │ │ +00022530: 2020 2020 272d 7072 696e 7444 6570 7468 '-printDepth │ │ │ │ +00022540: 2720 3d3e 2024 7061 7261 6d73 7b27 2d70 ' => $params{'-p │ │ │ │ +00022550: 7269 6e74 4465 7074 6827 7d2c 0a09 0909 rintDepth'},.... │ │ │ │ +00022560: 0920 2020 2020 272d 7072 696e 7444 6570 . '-printDep │ │ │ │ +00022570: 7468 5072 6c6f 674b 696e 6427 203d 3e20 thPrlogKind' => │ │ │ │ +00022580: 2750 270a 0909 0909 2020 2020 2029 3b0a 'P'..... );. │ │ │ │ +00022590: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams │ │ │ │ +000225a0: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \% │ │ │ │ +000225b0: 7061 7261 6d73 293b 0a20 2020 2024 7365 params);. $se │ │ │ │ +000225c0: 6c66 2d3e 7b27 616b 7449 6e66 6f46 696c lf->{'aktInfoFil │ │ │ │ +000225d0: 6527 7d20 3d20 2470 6172 616d 737b 272d e'} = $params{'- │ │ │ │ +000225e0: 6164 6d69 6e44 6972 7327 7d2d 3e67 6574 adminDirs'}->get │ │ │ │ +000225f0: 416b 7449 6e66 6f46 696c 6528 293b 0a0a AktInfoFile();.. │ │ │ │ +00022600: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5 │ │ │ │ +00022610: 466f 726b 277d 203d 2075 6e64 6566 3b20 Fork'} = undef; │ │ │ │ +00022620: 2020 2020 2023 2065 7320 6cc3 a475 6674 # es l..uft │ │ │ │ +00022630: 206b 6569 6e20 7061 7261 6c6c 656c 6573 kein paralleles │ │ │ │ +00022640: 206d 6435 7375 6d0a 0a20 2020 2069 6620 md5sum.. if │ │ │ │ +00022650: 2824 7365 6c66 2d3e 7b27 7772 6974 6545 ($self->{'writeE │ │ │ │ +00022660: 7863 6c75 6465 4c6f 6727 7d29 0a20 2020 xcludeLog'}). │ │ │ │ +00022670: 207b 0a09 6d79 2024 7763 6c20 3d20 2473 {..my $wcl = $s │ │ │ │ +00022680: 656c 662d 3e7b 2777 7269 7465 4578 636c elf->{'writeExcl │ │ │ │ +00022690: 7564 654c 6f67 277d 3b0a 096d 7920 2465 udeLog'};..my $e │ │ │ │ +000226a0: 7863 6c4c 6f67 203d 2070 6970 6554 6f46 xclLog = pipeToF │ │ │ │ +000226b0: 6f72 6b2d 3e6e 6577 2827 2d65 7865 6327 ork->new('-exec' │ │ │ │ +000226c0: 203d 3e20 2762 7a69 7032 272c 0a09 0909 => 'bzip2',.... │ │ │ │ +000226d0: 0920 2020 2020 2027 2d73 7464 6f75 7427 . '-stdout' │ │ │ │ +000226e0: 203d 3e20 2477 636c 2c0a 0909 0909 2020 => $wcl,..... │ │ │ │ +000226f0: 2020 2020 272d 6f75 7452 616e 646f 6d27 '-outRandom' │ │ │ │ +00022700: 203d 3e20 272f 746d 702f 7374 6275 5069 => '/tmp/stbuPi │ │ │ │ +00022710: 7065 546f 3131 2d27 2c0a 0909 0909 2020 peTo11-',..... │ │ │ │ +00022720: 2020 2020 272d 6465 6c53 7464 6f75 7427 '-delStdout' │ │ │ │ +00022730: 203d 3e20 276e 6f27 2c0a 0909 0909 2020 => 'no',..... │ │ │ │ +00022740: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ │ +00022750: 2470 724c 6f67 293b 0a09 2473 656c 662d $prLog);..$self- │ │ │ │ +00022760: 3e7b 2765 7863 6c4c 6f67 277d 203d 2024 >{'exclLog'} = $ │ │ │ │ +00022770: 6578 636c 4c6f 673b 0a20 2020 207d 0a0a exclLog;. }.. │ │ │ │ +00022780: 2020 2020 626c 6573 7320 2473 656c 662c bless $self, │ │ │ │ +00022790: 2024 636c 6173 733b 0a7d 0a0a 0a23 2323 $class;.}...### │ │ │ │ +000227a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000227b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000227c0: 2323 2323 230a 2320 6c69 6566 6572 7420 #####.# liefert │ │ │ │ +000227d0: 4261 7369 7376 6572 7a65 6963 686e 6973 Basisverzeichnis │ │ │ │ +000227e0: 2c20 6461 7a75 2072 656c 6174 6976 656e , dazu relativen │ │ │ │ +000227f0: 2044 6174 6569 6e61 6d65 6e20 756e 6420 Dateinamen und │ │ │ │ +00022800: 4669 6c65 7479 700a 7375 6220 6e65 7874 Filetyp.sub next │ │ │ │ +00022810: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ │ +00022820: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my │ │ │ │ +00022830: 2028 2466 2c20 2474 7970 6573 293b 0a20 ($f, $types);. │ │ │ │ +00022840: 2020 206d 7920 246e 203d 2028 2466 2c20 my $n = ($f, │ │ │ │ +00022850: 2474 7970 6573 2920 3d20 2473 656c 662d $types) = $self- │ │ │ │ +00022860: 3e72 6563 7572 7369 7665 5265 6164 4469 >recursiveReadDi │ │ │ │ +00022870: 723a 3a6e 6578 7428 293b 0a0a 2020 2020 r::next();.. │ │ │ │ +00022880: 6966 2028 2473 656c 662d 3e7b 276d 6435 if ($self->{'md5 │ │ │ │ +00022890: 466f 726b 277d 2061 6e64 2024 6e20 3d3d Fork'} and $n == │ │ │ │ +000228a0: 2030 290a 2020 2020 7b0a 2020 2020 2020 0). {. │ │ │ │ +000228b0: 2020 2320 4966 2074 6865 7265 2077 6572 # If there wer │ │ │ │ +000228c0: 6520 6e6f 2064 6972 2773 206c 6566 7420 e no dir's left │ │ │ │ +000228d0: 746f 2063 6865 636b 2c20 7265 6164 4469 to check, readDi │ │ │ │ +000228e0: 7220 6d61 7920 6e6f 7420 6861 7665 0a20 r may not have. │ │ │ │ +000228f0: 2020 2020 2020 2023 2062 6565 6e20 6361 # been ca │ │ │ │ +00022900: 6c6c 6564 2062 7920 7468 6520 6e65 7874 lled by the next │ │ │ │ +00022910: 2829 2063 616c 6c20 6162 6f76 652e 2057 () call above. W │ │ │ │ +00022920: 6520 6861 7665 2074 6f20 6361 6c6c 2069 e have to call i │ │ │ │ +00022930: 740a 2020 2020 2020 2020 2320 6d61 6e75 t. # manu │ │ │ │ +00022940: 616c 6c79 2074 6f20 6368 6563 6b20 7768 ally to check wh │ │ │ │ +00022950: 6574 6865 7220 7468 6520 6d64 3520 7072 ether the md5 pr │ │ │ │ +00022960: 6f63 6573 7320 6973 2066 696e 6973 6865 ocess is finishe │ │ │ │ +00022970: 6420 2861 6e64 0a20 2020 2020 2020 2023 d (and. # │ │ │ │ +00022980: 2069 6620 736f 2c20 7265 7472 6965 7665 if so, retrieve │ │ │ │ +00022990: 2074 6865 2072 6573 756c 7473 290a 0924 the results)..$ │ │ │ │ +000229a0: 7365 6c66 2d3e 7265 6164 4469 7228 293b self->readDir(); │ │ │ │ +000229b0: 0a09 7265 7475 726e 2028 2920 6966 2028 ..return () if ( │ │ │ │ +000229c0: 407b 2473 656c 662d 3e7b 2766 696c 6573 @{$self->{'files │ │ │ │ +000229d0: 277d 7d20 3d3d 2030 293b 0a20 2020 2020 '}} == 0);. │ │ │ │ +000229e0: 2020 2024 6620 3d20 7368 6966 7420 407b $f = shift @{ │ │ │ │ +000229f0: 2473 656c 662d 3e7b 2766 696c 6573 277d $self->{'files'} │ │ │ │ +00022a00: 7d3b 0a09 2474 7970 6573 203d 2073 6869 };..$types = shi │ │ │ │ +00022a10: 6674 2040 7b24 7365 6c66 2d3e 7b27 7479 ft @{$self->{'ty │ │ │ │ +00022a20: 7065 7327 7d7d 3b0a 2020 2020 7d0a 2020 pes'}};. }. │ │ │ │ +00022a30: 2020 656c 7369 6620 2824 6e20 3d3d 2030 elsif ($n == 0 │ │ │ │ +00022a40: 290a 2020 2020 7b0a 0972 6574 7572 6e20 ). {..return │ │ │ │ +00022a50: 2829 3b0a 2020 2020 7d0a 0a20 2020 206d ();. }.. m │ │ │ │ +00022a60: 7920 246d 6435 203d 2073 6869 6674 2040 y $md5 = shift @ │ │ │ │ +00022a70: 7b24 7365 6c66 2d3e 7b27 6d64 3527 7d7d {$self->{'md5'}} │ │ │ │ +00022a80: 3b0a 2020 2020 2320 2466 207a 6572 6c65 ;. # $f zerle │ │ │ │ +00022a90: 6765 6e20 696e 2076 6f72 6765 6765 6265 gen in vorgegebe │ │ │ │ +00022aa0: 6e65 6e20 5465 696c 2075 6e64 2072 656c nen Teil und rel │ │ │ │ +00022ab0: 6174 6976 656e 0a20 2020 206d 7920 2464 ativen. my $d │ │ │ │ +00022ac0: 6972 203d 2024 7365 6c66 2d3e 7b27 6469 ir = $self->{'di │ │ │ │ +00022ad0: 7227 7d3b 0a20 2020 206d 7920 2466 696c r'};. my $fil │ │ │ │ +00022ae0: 6520 3d20 263a 3a73 7562 7374 7261 6374 e = &::substract │ │ │ │ +00022af0: 5061 7468 2824 662c 2024 6469 7229 3b0a Path($f, $dir);. │ │ │ │ +00022b00: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di │ │ │ │ +00022b10: 722c 2024 6669 6c65 2c20 246d 6435 2c20 r, $file, $md5, │ │ │ │ +00022b20: 2474 7970 6573 293b 0a7d 0a0a 0a23 2323 $types);.}...### │ │ │ │ +00022b30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00022b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00022b50: 2323 2323 230a 2320 7769 7264 2076 6f6e #####.# wird von │ │ │ │ +00022b60: 2025 696e 5072 6f67 7265 7373 2069 6e20 %inProgress in │ │ │ │ +00022b70: 5363 6865 6475 6c65 723a 3a6e 6f72 6d61 Scheduler::norma │ │ │ │ +00022b80: 6c4f 7065 7261 7469 6f6e 2062 656e c3b6 lOperation ben.. │ │ │ │ +00022b90: 7469 6774 0a73 7562 2070 7573 6862 6163 tigt.sub pushbac │ │ │ │ +00022ba0: 6b0a 7b0a 2020 2020 6d79 2024 7365 6c66 k.{. my $self │ │ │ │ +00022bb0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ │ +00022bc0: 2024 6c69 7374 203d 2073 6869 6674 3b20 $list = shift; │ │ │ │ +00022bd0: 2020 2020 2320 4c69 7374 6520 6d69 7420 # Liste mit │ │ │ │ +00022be0: 4c69 7374 656e 2076 6f6e 2028 2464 6972 Listen von ($dir │ │ │ │ +00022bf0: 2c20 2466 696c 652c 2024 6d64 352c 2024 , $file, $md5, $ │ │ │ │ +00022c00: 7479 7065 7329 0a20 2020 206d 7920 2470 types). my $p │ │ │ │ +00022c10: 724c 6f67 203d 2073 6869 6674 3b0a 2020 rLog = shift;. │ │ │ │ +00022c20: 2020 6d79 2024 6465 6275 6720 3d20 7368 my $debug = sh │ │ │ │ +00022c30: 6966 743b 0a0a 2020 2020 6d79 2024 6c3b ift;.. my $l; │ │ │ │ +00022c40: 0a20 2020 2066 6f72 6561 6368 2024 6c20 . foreach $l │ │ │ │ +00022c50: 2840 246c 6973 7429 0a20 2020 207b 0a09 (@$list). {.. │ │ │ │ +00022c60: 6d79 2028 2464 6972 2c20 2466 696c 652c my ($dir, $file, │ │ │ │ +00022c70: 2024 6d64 352c 2024 7479 7065 2920 3d20 $md5, $type) = │ │ │ │ +00022c80: 2840 246c 293b 0a09 2470 724c 6f67 2d3e (@$l);..$prLog-> │ │ │ │ +00022c90: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00022ca0: 2027 4427 2c0a 0909 2020 2020 2020 272d 'D',... '- │ │ │ │ +00022cb0: 7374 7227 203d 3e20 5b22 6368 6563 6b69 str' => ["checki │ │ │ │ +00022cc0: 6e67 206f 6620 6964 656e 7469 6361 6c20 ng of identical │ │ │ │ +00022cd0: 6669 6c65 203c 2466 696c 653e 225d 290a file <$file>"]). │ │ │ │ +00022ce0: 0920 2020 2069 6620 2464 6562 7567 3b0a . if $debug;. │ │ │ │ +00022cf0: 0970 7573 6820 407b 2473 656c 662d 3e7b .push @{$self->{ │ │ │ │ +00022d00: 2766 696c 6573 277d 7d2c 2022 2464 6972 'files'}}, "$dir │ │ │ │ +00022d10: 2f24 6669 6c65 223b 0a09 7075 7368 2040 /$file";..push @ │ │ │ │ +00022d20: 7b24 7365 6c66 2d3e 7b27 6d64 3527 7d7d {$self->{'md5'}} │ │ │ │ +00022d30: 2c20 246d 6435 3b0a 0970 7573 6820 407b , $md5;..push @{ │ │ │ │ +00022d40: 2473 656c 662d 3e7b 2774 7970 6573 277d $self->{'types'} │ │ │ │ +00022d50: 7d2c 2024 7479 7065 3b0a 2020 2020 7d0a }, $type;. }. │ │ │ │ +00022d60: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +00022d70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00022d80: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ │ +00022d90: 2072 6561 6444 6972 0a7b 0a20 2020 206d readDir.{. m │ │ │ │ +00022da0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00022db0: 0a0a 2020 2020 6d79 2024 7072 4c6f 6720 .. my $prLog │ │ │ │ +00022dc0: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog │ │ │ │ +00022dd0: 277d 3b0a 2020 2020 6d79 2024 706f 7374 '};. my $post │ │ │ │ +00022de0: 6669 7820 3d20 2473 656c 662d 3e7b 2770 fix = $self->{'p │ │ │ │ +00022df0: 6f73 7466 6978 277d 3b0a 2020 2020 6d79 ostfix'};. my │ │ │ │ +00022e00: 2024 616b 7446 696c 656e 616d 6520 3d20 $aktFilename = │ │ │ │ +00022e10: 2473 656c 662d 3e7b 2761 6b74 4669 6c65 $self->{'aktFile │ │ │ │ +00022e20: 6e61 6d65 277d 3b0a 2020 2020 6d79 2024 name'};. my $ │ │ │ │ +00022e30: 6465 6275 674d 6f64 6520 3d20 2473 656c debugMode = $sel │ │ │ │ +00022e40: 662d 3e7b 2764 6562 7567 4d6f 6465 277d f->{'debugMode'} │ │ │ │ +00022e50: 3b0a 2020 2020 6d79 2024 7665 7262 6f73 ;. my $verbos │ │ │ │ +00022e60: 6520 3d20 2473 656c 662d 3e7b 2776 6572 e = $self->{'ver │ │ │ │ +00022e70: 626f 7365 277d 3b0a 2020 2020 6d79 2024 bose'};. my $ │ │ │ │ +00022e80: 676e 7563 7020 3d20 2473 656c 662d 3e7b gnucp = $self->{ │ │ │ │ +00022e90: 2763 7049 7347 6e75 277d 3b0a 0a20 2020 'cpIsGnu'};.. │ │ │ │ +00022ea0: 206d 7920 2465 7863 6570 7452 756c 6520 my $exceptRule │ │ │ │ +00022eb0: 3d20 2473 656c 662d 3e7b 2765 7863 6570 = $self->{'excep │ │ │ │ +00022ec0: 7452 756c 6527 7d3b 0a20 2020 206d 7920 tRule'};. my │ │ │ │ +00022ed0: 2469 6e63 6c75 6465 5275 6c65 203d 2024 $includeRule = $ │ │ │ │ +00022ee0: 7365 6c66 2d3e 7b27 696e 636c 7564 6552 self->{'includeR │ │ │ │ +00022ef0: 756c 6527 7d3b 0a20 2020 206d 7920 2463 ule'};. my $c │ │ │ │ +00022f00: 6865 636b 426c 6f63 6b73 5275 6c65 203d heckBlocksRule = │ │ │ │ +00022f10: 2024 7365 6c66 2d3e 7b27 6368 6563 6b42 $self->{'checkB │ │ │ │ +00022f20: 6c6f 636b 7352 756c 6527 7d3b 0a20 2020 locksRule'};. │ │ │ │ +00022f30: 206d 7920 2465 7869 6e63 6c50 6174 7446 my $exinclPattF │ │ │ │ +00022f40: 6c61 6720 3d0a 0924 6578 6365 7074 5275 lag =..$exceptRu │ │ │ │ +00022f50: 6c65 2d3e 6861 734c 696e 6528 2920 2b20 le->hasLine() + │ │ │ │ +00022f60: 2469 6e63 6c75 6465 5275 6c65 2d3e 6861 $includeRule->ha │ │ │ │ +00022f70: 734c 696e 6528 293b 0a20 2020 206d 7920 sLine();. my │ │ │ │ +00022f80: 2465 7854 7970 6573 203d 2024 7365 6c66 $exTypes = $self │ │ │ │ +00022f90: 2d3e 7b27 6578 5479 7065 7327 7d3b 0a20 ->{'exTypes'};. │ │ │ │ +00022fa0: 2020 206d 7920 2477 7269 7465 4578 636c my $writeExcl │ │ │ │ +00022fb0: 7564 654c 6f67 203d 2024 7365 6c66 2d3e udeLog = $self-> │ │ │ │ +00022fc0: 7b27 7772 6974 6545 7863 6c75 6465 4c6f {'writeExcludeLo │ │ │ │ +00022fd0: 6727 7d3b 0a20 2020 206d 7920 2465 7863 g'};. my $exc │ │ │ │ +00022fe0: 6c4c 6f67 203d 2024 7365 6c66 2d3e 7b27 lLog = $self->{' │ │ │ │ +00022ff0: 6578 636c 4c6f 6727 7d20 6966 2024 7772 exclLog'} if $wr │ │ │ │ +00023000: 6974 6545 7863 6c75 6465 4c6f 673b 0a0a iteExcludeLog;.. │ │ │ │ +00023010: 2020 2020 6d79 2028 4066 696c 6573 2920 my (@files) │ │ │ │ +00023020: 3d20 2829 3b0a 2020 2020 6d79 2028 406d = ();. my (@m │ │ │ │ +00023030: 6435 2920 3d20 2829 3b0a 2020 2020 6d79 d5) = ();. my │ │ │ │ +00023040: 2028 4074 7970 6573 2920 3d20 2829 3b0a (@types) = ();. │ │ │ │ +00023050: 0a20 2020 206d 7920 246f 6c64 4669 6c65 . my $oldFile │ │ │ │ +00023060: 6e61 6d65 203d 2024 7365 6c66 2d3e 7b27 name = $self->{' │ │ │ │ +00023070: 6f6c 6446 696c 656e 616d 6527 7d3b 0a20 oldFilename'};. │ │ │ │ +00023080: 2020 206d 7920 2474 6d70 6469 7220 3d20 my $tmpdir = │ │ │ │ +00023090: 2473 656c 662d 3e7b 2774 6d70 6469 7227 $self->{'tmpdir' │ │ │ │ +000230a0: 7d3b 0a20 2020 206d 7920 2469 676e 6f72 };. my $ignor │ │ │ │ +000230b0: 6554 696d 6520 3d20 2473 656c 662d 3e7b eTime = $self->{ │ │ │ │ +000230c0: 2769 676e 6f72 6554 696d 6527 7d3b 0a0a 'ignoreTime'};.. │ │ │ │ +000230d0: 0a20 2020 2023 204d 4435 206c c3a4 7566 . # MD5 l..uf │ │ │ │ +000230e0: 742c 2077 656e 6e20 6dc3 b667 6c69 6368 t, wenn m..glich │ │ │ │ +000230f0: 204d 4435 2053 756d 6d65 6e20 766f 6d20 MD5 Summen vom │ │ │ │ +00023100: 5061 7261 6c6c 656c 7072 6f7a 6573 7320 Parallelprozess │ │ │ │ +00023110: 686f 6c65 6e0a 2020 2020 6966 2028 2473 holen. if ($s │ │ │ │ +00023120: 656c 662d 3e7b 276d 6435 466f 726b 277d elf->{'md5Fork'} │ │ │ │ +00023130: 2061 6e64 0a20 2020 2020 2020 206e 6f74 and. not │ │ │ │ +00023140: 2024 7365 6c66 2d3e 7b27 6d64 3546 6f72 $self->{'md5For │ │ │ │ +00023150: 6b27 7d2d 3e70 726f 6365 7373 5275 6e73 k'}->processRuns │ │ │ │ +00023160: 2829 290a 2020 2020 7b0a 2020 2020 2020 ()). {. │ │ │ │ +00023170: 2020 6d79 2024 7374 6465 7272 203d 2024 my $stderr = $ │ │ │ │ +00023180: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork' │ │ │ │ +00023190: 7d2d 3e67 6574 5354 4445 5252 2829 3b0a }->getSTDERR();. │ │ │ │ +000231a0: 2020 2020 2020 2020 6d79 2824 6c29 3b0a my($l);. │ │ │ │ +000231b0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog-> │ │ │ │ +000231c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +000231d0: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. │ │ │ │ +000231e0: 2020 2020 2020 2020 2020 2020 272d 7374 '-st │ │ │ │ +000231f0: 7227 203d 3e0a 2020 2020 2020 2020 2020 r' =>. │ │ │ │ +00023200: 2020 2020 2020 2020 2020 2020 5b22 666f ["fo │ │ │ │ +00023210: 726b 206f 6620 6d64 3573 756d 2067 656e rk of md5sum gen │ │ │ │ +00023220: 6572 6174 6564 2074 6865 2066 6f6c 6c6f erated the follo │ │ │ │ +00023230: 7769 6e67 2065 7272 6f72 733a 222c 0a20 wing errors:",. │ │ │ │ +00023240: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00023250: 2020 2020 2020 4024 7374 6465 7272 5d29 @$stderr]) │ │ │ │ +00023260: 0a20 2020 2020 2020 2020 2020 2069 6620 . if │ │ │ │ +00023270: 2840 2473 7464 6572 7220 3e20 3029 3b0a (@$stderr > 0);. │ │ │ │ +00023280: 2020 2020 2020 2020 6d79 2024 7374 646f my $stdo │ │ │ │ +00023290: 7574 203d 2024 7365 6c66 2d3e 7b27 6d64 ut = $self->{'md │ │ │ │ +000232a0: 3546 6f72 6b27 7d2d 3e67 6574 5354 444f 5Fork'}->getSTDO │ │ │ │ +000232b0: 5554 2829 3b0a 2020 2020 2020 2020 666f UT();. fo │ │ │ │ +000232c0: 7265 6163 6820 246c 2028 4024 7374 646f reach $l (@$stdo │ │ │ │ +000232d0: 7574 290a 2020 2020 2020 2020 7b0a 2020 ut). {. │ │ │ │ +000232e0: 2020 2020 2020 2020 2020 6966 2028 246c if ($l │ │ │ │ +000232f0: 203d 7e20 2f5c 415c 5c2f 2920 2023 2022 =~ /\A\\/) # " │ │ │ │ +00023300: 5c22 2061 6d20 5a65 696c 656e 616e 6661 \" am Zeilenanfa │ │ │ │ +00023310: 6e67 202d 3e20 6573 2077 6972 6420 6765 ng -> es wird ge │ │ │ │ +00023320: 7175 6f74 6574 0a20 2020 2020 2020 2020 quotet. │ │ │ │ +00023330: 2020 207b 0a20 2020 2020 2020 2020 2020 {. │ │ │ │ +00023340: 2020 2020 2024 6c20 3d7e 2073 2f5c 5c6e $l =~ s/\\n │ │ │ │ +00023350: 2f5c 6e2f 673b 2020 2023 2022 5c6e 2220 /\n/g; # "\n" │ │ │ │ +00023360: 696d 204e 616d 656e 2077 6972 6420 766f im Namen wird vo │ │ │ │ +00023370: 6e20 6d64 3573 756d 207a 750a 2020 2020 n md5sum zu. │ │ │ │ +00023380: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00023390: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000233a0: 2320 225c 5c6e 2220 6765 6d61 6368 742c # "\\n" gemacht, │ │ │ │ +000233b0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +000233c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000233d0: 2020 2020 2023 207a 7572 c3bc 636b 6b6f # zur..ckko │ │ │ │ +000233e0: 6e76 6572 7469 6572 656e 210a 2020 2020 nvertieren!. │ │ │ │ +000233f0: 2020 2020 2020 2020 2020 2020 246c 203d $l = │ │ │ │ +00023400: 7e20 732f 5c5c 5c5c 2f5c 5c2f 6f67 3b20 ~ s/\\\\/\\/og; │ │ │ │ +00023410: 2320 4261 636b 736c 6173 680a 2020 2020 # Backslash. │ │ │ │ +00023420: 2020 2020 2020 2020 2020 2020 246c 203d $l = │ │ │ │ +00023430: 7e20 732f 5c41 5c5c 2f2f 3b20 2020 2020 ~ s/\A\\//; │ │ │ │ +00023440: 2320 225c 5c22 2061 6d20 5a65 696c 656e # "\\" am Zeilen │ │ │ │ +00023450: 616e 6661 6e67 2065 6e74 6665 726e 656e anfang entfernen │ │ │ │ +00023460: 0a0a 2020 2020 2020 2020 2020 2020 7d0a .. }. │ │ │ │ +00023470: 2020 2020 2020 2020 2020 2020 6d79 2028 my ( │ │ │ │ +00023480: 246d 6435 2c20 2466 2920 3d20 246c 203d $md5, $f) = $l = │ │ │ │ +00023490: 7e20 2f5c 4128 5c77 2b29 5c73 2b28 2e2a ~ /\A(\w+)\s+(.* │ │ │ │ +000234a0: 292f 733b 0a20 2020 2020 2020 2020 2020 )/s;. │ │ │ │ +000234b0: 2070 7573 6820 4066 696c 6573 2c20 2466 push @files, $f │ │ │ │ +000234c0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu │ │ │ │ +000234d0: 7368 2040 6d64 352c 2024 6d64 353b 0a20 sh @md5, $md5;. │ │ │ │ +000234e0: 2020 2020 2020 2020 2020 2070 7573 6820 push │ │ │ │ +000234f0: 4074 7970 6573 2c20 2766 273b 0a20 2020 @types, 'f';. │ │ │ │ +00023500: 2020 2020 207d 0a20 2020 2020 2020 2024 }. $ │ │ │ │ +00023510: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork' │ │ │ │ +00023520: 7d20 3d20 756e 6465 663b 2020 2320 6a6f } = undef; # jo │ │ │ │ +00023530: 6220 6973 7420 6665 7274 6967 0a20 2020 b ist fertig. │ │ │ │ +00023540: 207d 0a0a 2020 2020 2320 4e65 7565 6e20 }.. # Neuen │ │ │ │ +00023550: 4d44 3520 4c61 7566 2073 7461 7274 656e MD5 Lauf starten │ │ │ │ +00023560: 2077 656e 6e20 6dc3 b667 6c69 6368 0a20 wenn m..glich. │ │ │ │ +00023570: 2020 2069 6620 286e 6f74 2024 7365 6c66 if (not $self │ │ │ │ +00023580: 2d3e 7b27 6d64 3546 6f72 6b27 7d29 0a20 ->{'md5Fork'}). │ │ │ │ +00023590: 2020 207b 0a20 2020 2020 2020 206d 7928 {. my( │ │ │ │ +000235a0: 4063 616c 634d 4435 2920 3d20 2829 3b0a @calcMD5) = ();. │ │ │ │ +000235b0: 0a09 2320 4469 7265 6374 6f72 7920 6569 ..# Directory ei │ │ │ │ +000235c0: 6e6c 6573 656e 0a20 2020 2020 2020 2024 nlesen. $ │ │ │ │ +000235d0: 7365 6c66 2d3e 7265 6375 7273 6976 6552 self->recursiveR │ │ │ │ +000235e0: 6561 6444 6972 3a3a 7265 6164 4469 7228 eadDir::readDir( │ │ │ │ +000235f0: 293b 0a0a 0923 2045 696e 6765 6c65 7365 );...# Eingelese │ │ │ │ +00023600: 6e65 2044 6174 6569 656e 2069 6e20 2473 ne Dateien in $s │ │ │ │ +00023610: 656c 662d 3e7b 2766 696c 6573 277d 2066 elf->{'files'} f │ │ │ │ +00023620: 696c 7465 726e 0a20 2020 2020 2020 206d iltern. m │ │ │ │ +00023630: 7920 2824 662c 2024 742c 2024 6929 3b0a y ($f, $t, $i);. │ │ │ │ +00023640: 2020 2020 2020 2020 6d79 2024 6469 7220 my $dir │ │ │ │ +00023650: 3d20 2473 656c 662d 3e7b 2764 6972 277d = $self->{'dir'} │ │ │ │ +00023660: 3b20 2020 2020 2320 7a75 2064 7572 6368 ; # zu durch │ │ │ │ +00023670: 7375 6368 656e 6465 7320 4469 7265 6374 suchendes Direct │ │ │ │ +00023680: 6f72 790a 0a20 2020 2020 2020 206d 7920 ory.. my │ │ │ │ +00023690: 2461 6b74 4469 7220 3d20 2473 656c 662d $aktDir = $self- │ │ │ │ +000236a0: 3e7b 2761 6b74 4469 7227 7d3b 2020 2023 >{'aktDir'}; # │ │ │ │ +000236b0: 2061 6b74 7565 6c6c 6573 2042 6163 6b75 aktuelles Backu │ │ │ │ +000236c0: 7076 6572 7a65 6963 686e 6973 0a09 666f pverzeichnis..fo │ │ │ │ +000236d0: 7220 2824 6920 3d20 3020 3b20 2469 203c r ($i = 0 ; $i < │ │ │ │ +000236e0: 2040 7b24 7365 6c66 2d3e 7b27 6669 6c65 @{$self->{'file │ │ │ │ +000236f0: 7327 7d7d 203b 2024 692b 2b29 0a09 7b0a s'}} ; $i++)..{. │ │ │ │ +00023700: 0920 2020 2024 6620 3d20 2473 656c 662d . $f = $self- │ │ │ │ +00023710: 3e7b 2766 696c 6573 277d 5b24 695d 3b0a >{'files'}[$i];. │ │ │ │ +00023720: 0920 2020 2024 7420 3d20 2473 656c 662d . $t = $self- │ │ │ │ +00023730: 3e7b 2774 7970 6573 277d 5b24 695d 3b0a >{'types'}[$i];. │ │ │ │ +00023740: 0a09 2020 2020 6d79 2024 7265 6c46 696c .. my $relFil │ │ │ │ +00023750: 654e 616d 653b 0a09 2020 2020 6966 2028 eName;.. if ( │ │ │ │ +00023760: 2464 6972 2065 7120 272f 2729 0a09 2020 $dir eq '/').. │ │ │ │ +00023770: 2020 7b0a 0909 2472 656c 4669 6c65 4e61 {...$relFileNa │ │ │ │ +00023780: 6d65 203d 2073 7562 7374 7228 2466 2c20 me = substr($f, │ │ │ │ +00023790: 3129 3b0a 0920 2020 207d 0a09 2020 2020 1);.. }.. │ │ │ │ +000237a0: 656c 7365 0a09 2020 2020 7b0a 0909 2472 else.. {...$r │ │ │ │ +000237b0: 656c 4669 6c65 4e61 6d65 203d 2073 7562 elFileName = sub │ │ │ │ +000237c0: 7374 7228 2466 2c20 6c65 6e67 7468 2824 str($f, length($ │ │ │ │ +000237d0: 6469 7229 202b 2031 293b 0a09 2020 2020 dir) + 1);.. │ │ │ │ +000237e0: 7d0a 0920 2020 2024 7265 6c46 696c 654e }.. $relFileN │ │ │ │ +000237f0: 616d 6520 3d7e 2073 235c 412f 2b23 233b ame =~ s#\A/+##; │ │ │ │ +00023800: 2020 2023 2072 656d 6f76 6520 6c65 6164 # remove lead │ │ │ │ +00023810: 696e 6720 2f20 6966 2065 7869 7374 730a ing / if exists. │ │ │ │ +00023820: 0a09 2020 2020 6966 2028 6578 6973 7473 .. if (exists │ │ │ │ +00023830: 2024 2465 7854 7970 6573 7b24 747d 290a $$exTypes{$t}). │ │ │ │ +00023840: 0920 2020 207b 0a09 092b 2b24 2465 7854 . {...++$$exT │ │ │ │ +00023850: 7970 6573 7b24 747d 3b0a 0909 2470 724c ypes{$t};...$prL │ │ │ │ +00023860: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00023870: 2720 3d3e 2027 4427 2c0a 0909 0920 2020 ' => 'D',.... │ │ │ │ +00023880: 2020 2027 2d73 7472 2720 3d3e 205b 2265 '-str' => ["e │ │ │ │ +00023890: 7863 6570 7454 7970 6520 2474 203c 2472 xceptType $t <$r │ │ │ │ +000238a0: 656c 4669 6c65 4e61 6d65 3e22 5d29 0a09 elFileName>"]).. │ │ │ │ +000238b0: 0920 2020 2069 6620 2464 6562 7567 203e . if $debug > │ │ │ │ +000238c0: 2030 3b0a 0909 6e65 7874 3b0a 0920 2020 0;...next;.. │ │ │ │ +000238d0: 207d 0a0a 0920 2020 2069 6620 2824 7420 }... if ($t │ │ │ │ +000238e0: 6571 2027 5327 2061 6e64 0a20 2020 2020 eq 'S' and. │ │ │ │ +000238f0: 2020 2020 2020 2020 2020 206e 6f74 2024 not $ │ │ │ │ +00023900: 676e 7563 7029 0a09 2020 2020 7b0a 0909 gnucp).. {... │ │ │ │ +00023910: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00023920: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00023930: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00023940: 205b 2275 6e73 7570 706f 7274 6564 2066 ["unsupported f │ │ │ │ +00023950: 696c 6520 7479 7065 2027 736f 636b 6574 ile type 'socket │ │ │ │ +00023960: 2722 202e 0a09 0909 0909 2022 203c 2472 '" ....... " <$r │ │ │ │ +00023970: 656c 4669 6c65 4e61 6d65 3e22 5d29 3b0a elFileName>"]);. │ │ │ │ +00023980: 0909 6e65 7874 3b0a 0920 2020 207d 0a09 ..next;.. }.. │ │ │ │ +00023990: 2020 2020 6966 2028 2474 2065 7120 2762 if ($t eq 'b │ │ │ │ +000239a0: 2720 616e 640a 0909 6e6f 7420 2467 6e75 ' and...not $gnu │ │ │ │ +000239b0: 6370 290a 0920 2020 207b 0a09 0924 7072 cp).. {...$pr │ │ │ │ +000239c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000239d0: 6427 203d 3e20 2757 272c 0a09 0909 2020 d' => 'W',.... │ │ │ │ +000239e0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +000239f0: 756e 7375 7070 6f72 7465 6420 6669 6c65 unsupported file │ │ │ │ +00023a00: 2074 7970 6520 2762 6c6f 636b 2022 202e type 'block " . │ │ │ │ +00023a10: 0a09 0909 0909 2022 7370 6563 6961 6c20 ...... "special │ │ │ │ +00023a20: 6669 6c65 203c 2472 656c 4669 6c65 4e61 file <$relFileNa │ │ │ │ +00023a30: 6d65 3e22 5d29 3b0a 0909 6e65 7874 3b0a me>"]);...next;. │ │ │ │ +00023a40: 0920 2020 207d 0a09 2020 2020 6966 2028 . }.. if ( │ │ │ │ +00023a50: 2474 2065 7120 2763 2720 616e 640a 2020 $t eq 'c' and. │ │ │ │ +00023a60: 2020 2020 2020 2020 2020 2020 206e 6f74 not │ │ │ │ +00023a70: 2024 676e 7563 7029 0a09 2020 2020 7b0a $gnucp).. {. │ │ │ │ +00023a80: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00023a90: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +00023aa0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +00023ab0: 3d3e 205b 2275 6e73 7570 706f 7274 6564 => ["unsupported │ │ │ │ +00023ac0: 2066 696c 6520 7479 7065 2027 6368 6172 file type 'char │ │ │ │ +00023ad0: 6163 7465 7220 2722 202e 0a09 0909 0909 acter '" ....... │ │ │ │ +00023ae0: 2022 7370 6563 6961 6c20 6669 6c65 203c "special file < │ │ │ │ +00023af0: 2472 656c 4669 6c65 4e61 6d65 3e22 5d29 $relFileName>"]) │ │ │ │ +00023b00: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. } │ │ │ │ +00023b10: 0a0a 0920 2020 206d 7920 2824 6465 762c ... my ($dev, │ │ │ │ +00023b20: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, │ │ │ │ +00023b30: 2475 6964 2c20 2467 6964 2c20 2461 6374 $uid, $gid, $act │ │ │ │ +00023b40: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime │ │ │ │ +00023b50: 2c0a 0909 2461 6374 4174 696d 652c 2024 ,...$actAtime, $ │ │ │ │ +00023b60: 6163 7453 697a 6529 203d 0a09 0920 2020 actSize) =... │ │ │ │ +00023b70: 2028 7374 6174 2824 6629 295b 302c 2031 (stat($f))[0, 1 │ │ │ │ +00023b80: 2c20 322c 2034 2c20 352c 2031 302c 2039 , 2, 4, 5, 10, 9 │ │ │ │ +00023b90: 2c20 382c 2037 5d3b 0a09 2020 2020 246d , 8, 7];.. $m │ │ │ │ +00023ba0: 6f64 6520 3d20 3020 756e 6c65 7373 2024 ode = 0 unless $ │ │ │ │ +00023bb0: 6d6f 6465 3b0a 0920 2020 2024 6d6f 6465 mode;.. $mode │ │ │ │ +00023bc0: 2026 3d20 3037 3737 373b 0a09 2020 2020 &= 07777;.. │ │ │ │ +00023bd0: 2320 6368 6563 6b20 6578 6365 7074 5275 # check exceptRu │ │ │ │ +00023be0: 6c65 2061 6e64 2069 6e63 6c75 6465 5275 le and includeRu │ │ │ │ +00023bf0: 6c65 0a09 2020 2020 6966 2028 2474 206e le.. if ($t n │ │ │ │ +00023c00: 6520 2764 2720 616e 6420 2465 7869 6e63 e 'd' and $exinc │ │ │ │ +00023c10: 6c50 6174 7446 6c61 6729 0a09 2020 2020 lPattFlag).. │ │ │ │ +00023c20: 7b0a 0909 6966 2028 2465 7863 6570 7452 {...if ($exceptR │ │ │ │ +00023c30: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() = │ │ │ │ +00023c40: 3d20 3120 616e 640a 0909 2020 2020 2465 = 1 and... $e │ │ │ │ +00023c50: 7863 6570 7452 756c 652d 3e63 6865 636b xceptRule->check │ │ │ │ +00023c60: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam │ │ │ │ +00023c70: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo │ │ │ │ +00023c80: 6465 2c0a 0909 0909 0920 2020 2461 6374 de,...... $act │ │ │ │ +00023c90: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime │ │ │ │ +00023ca0: 2c20 2475 6964 2c0a 0909 0909 0920 2020 , $uid,...... │ │ │ │ +00023cb0: 2467 6964 2c20 2474 2920 3d3d 2031 290a $gid, $t) == 1). │ │ │ │ +00023cc0: 0909 7b0a 0909 2020 2020 2465 7863 6c4c ..{... $exclL │ │ │ │ +00023cd0: 6f67 2d3e 7072 696e 7428 2224 7265 6c46 og->print("$relF │ │ │ │ +00023ce0: 696c 654e 616d 655c 6e22 2920 6966 2024 ileName\n") if $ │ │ │ │ +00023cf0: 7772 6974 6545 7863 6c75 6465 4c6f 673b writeExcludeLog; │ │ │ │ +00023d00: 0a09 0920 2020 2024 6d61 696e 3a3a 7374 ... $main::st │ │ │ │ +00023d10: 6174 2d3e 696e 6372 5f6e 6f45 7863 6c75 at->incr_noExclu │ │ │ │ +00023d20: 6465 5275 6c65 2829 3b0a 0909 2020 2020 deRule();... │ │ │ │ +00023d30: 6e65 7874 3b0a 0909 7d0a 0a09 0969 6620 next;...}....if │ │ │ │ +00023d40: 2824 696e 636c 7564 6552 756c 652d 3e68 ($includeRule->h │ │ │ │ +00023d50: 6173 4c69 6e65 2829 203d 3d20 3129 0a09 asLine() == 1).. │ │ │ │ +00023d60: 097b 0a09 0920 2020 2069 6620 2824 696e .{... if ($in │ │ │ │ +00023d70: 636c 7564 6552 756c 652d 3e63 6865 636b cludeRule->check │ │ │ │ +00023d80: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam │ │ │ │ +00023d90: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo │ │ │ │ +00023da0: 6465 2c0a 0909 0909 0920 2020 2024 6163 de,...... $ac │ │ │ │ +00023db0: 7443 7469 6d65 2c20 2461 6374 4d74 696d tCtime, $actMtim │ │ │ │ +00023dc0: 652c 2024 7569 642c 0a09 0909 0909 2020 e, $uid,...... │ │ │ │ +00023dd0: 2020 2467 6964 2c20 2474 2920 3d3d 2031 $gid, $t) == 1 │ │ │ │ +00023de0: 290a 0909 2020 2020 7b0a 0909 0924 6578 )... {....$ex │ │ │ │ +00023df0: 636c 4c6f 672d 3e70 7269 6e74 2822 2472 clLog->print("$r │ │ │ │ +00023e00: 656c 4669 6c65 4e61 6d65 5c6e 2229 2069 elFileName\n") i │ │ │ │ +00023e10: 6620 2477 7269 7465 4578 636c 7564 654c f $writeExcludeL │ │ │ │ +00023e20: 6f67 3b0a 0909 0924 6d61 696e 3a3a 7374 og;....$main::st │ │ │ │ +00023e30: 6174 2d3e 696e 6372 5f6e 6f49 6e63 6c75 at->incr_noInclu │ │ │ │ +00023e40: 6465 5275 6c65 2829 3b0a 0909 2020 2020 deRule();... │ │ │ │ +00023e50: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... │ │ │ │ +00023e60: 2020 207b 0a09 0909 6e65 7874 3b0a 0909 {....next;... │ │ │ │ +00023e70: 2020 2020 7d0a 0909 7d0a 0920 2020 207d }...}.. } │ │ │ │ +00023e80: 0a0a 2020 2020 2020 2020 2020 2020 2320 .. # │ │ │ │ +00023e90: 4e69 6368 7420 706c 6169 6e2d 6669 6c65 Nicht plain-file │ │ │ │ +00023ea0: 2062 656e c3b6 7469 6774 206b 6569 6e20 ben..tigt kein │ │ │ │ +00023eb0: 4d44 350a 0920 2020 2069 6620 2824 7420 MD5.. if ($t │ │ │ │ +00023ec0: 6e65 2027 6627 290a 0920 2020 207b 0a09 ne 'f').. {.. │ │ │ │ +00023ed0: 0970 7573 6820 4066 696c 6573 2c20 2466 .push @files, $f │ │ │ │ +00023ee0: 3b0a 0909 7075 7368 2040 7479 7065 732c ;...push @types, │ │ │ │ +00023ef0: 2024 743b 0a20 2020 2020 2020 2020 2020 $t;. │ │ │ │ +00023f00: 2020 2020 2070 7573 6820 406d 6435 2c20 push @md5, │ │ │ │ +00023f10: 756e 6465 663b 0a09 096e 6578 743b 0a09 undef;...next;.. │ │ │ │ +00023f20: 2020 2020 7d0a 0a0a 0920 2020 2023 0a09 }.... #.. │ │ │ │ +00023f30: 2020 2020 2320 6162 2068 6965 7220 6973 # ab hier is │ │ │ │ +00023f40: 7420 616c 6c65 7320 6e75 7220 6e6f 6368 t alles nur noch │ │ │ │ +00023f50: 2070 6c61 696e 2066 696c 6520 2869 6e20 plain file (in │ │ │ │ +00023f60: 666f 7220 5363 686c 6569 6665 290a 0920 for Schleife).. │ │ │ │ +00023f70: 2020 2023 0a09 2020 2020 6d79 2028 246f #.. my ($o │ │ │ │ +00023f80: 6c64 436f 6d70 722c 2024 6f6c 6443 7469 ldCompr, $oldCti │ │ │ │ +00023f90: 6d65 2c20 246f 6c64 4d74 696d 652c 2024 me, $oldMtime, $ │ │ │ │ +00023fa0: 6f6c 6453 697a 652c 2024 6d64 3573 756d oldSize, $md5sum │ │ │ │ +00023fb0: 293b 0a09 2020 2020 6d79 2024 6e20 3d20 );.. my $n = │ │ │ │ +00023fc0: 2824 6f6c 6443 6f6d 7072 2c20 246f 6c64 ($oldCompr, $old │ │ │ │ +00023fd0: 4374 696d 652c 2024 6f6c 644d 7469 6d65 Ctime, $oldMtime │ │ │ │ +00023fe0: 2c20 246f 6c64 5369 7a65 2c20 246d 6435 , $oldSize, $md5 │ │ │ │ +00023ff0: 7375 6d29 203d 0a09 0924 6f6c 6446 696c sum) =...$oldFil │ │ │ │ +00024000: 656e 616d 652d 3e67 6574 496e 6f64 6562 ename->getInodeb │ │ │ │ +00024010: 6163 6b75 7043 6f6d 7072 4374 696d 654d ackupComprCtimeM │ │ │ │ +00024020: 7469 6d65 5369 7a65 4d44 3528 2472 656c timeSizeMD5($rel │ │ │ │ +00024030: 4669 6c65 4e61 6d65 293b 0a0a 0920 2020 FileName);... │ │ │ │ +00024040: 2023 2063 6865 636b 2063 6865 636b 426c # check checkBl │ │ │ │ +00024050: 6f63 6b73 5275 6c65 0a09 2020 2020 6966 ocksRule.. if │ │ │ │ +00024060: 2028 2474 2065 7120 2766 2720 616e 6420 ($t eq 'f' and │ │ │ │ +00024070: 2463 6865 636b 426c 6f63 6b73 5275 6c65 $checkBlocksRule │ │ │ │ +00024080: 2d3e 6861 734c 696e 6528 2929 2023 2074 ->hasLine()) # t │ │ │ │ +00024090: 6869 7320 6c69 6e65 2072 6573 756c 7473 his line results │ │ │ │ +000240a0: 0a09 2020 2020 7b20 2020 2020 2020 2020 .. { │ │ │ │ +000240b0: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +000240c0: 2069 6e20 6120 7761 726e 696e 6720 6475 in a warning du │ │ │ │ +000240d0: 6520 746f 2061 2062 7567 2069 6e20 7065 e to a bug in pe │ │ │ │ +000240e0: 726c 0a09 096d 7920 2824 7275 6c65 4253 rl...my ($ruleBS │ │ │ │ +000240f0: 2c20 2472 756c 6543 6f6d 7072 6573 732c , $ruleCompress, │ │ │ │ +00024100: 2024 7275 6c65 5061 7261 6c6c 656c 2c20 $ruleParallel, │ │ │ │ +00024110: 2472 756c 6552 6561 6429 203d 0a09 0920 $ruleRead) =... │ │ │ │ +00024120: 2020 2024 6368 6563 6b42 6c6f 636b 7352 $checkBlocksR │ │ │ │ +00024130: 756c 652d 3e63 6865 636b 5275 6c65 2824 ule->checkRule($ │ │ │ │ +00024140: 7265 6c46 696c 654e 616d 652c 2024 6163 relFileName, $ac │ │ │ │ +00024150: 7453 697a 652c 0a09 0909 0909 0924 6d6f tSize,.......$mo │ │ │ │ +00024160: 6465 2c20 2461 6374 4374 696d 652c 0a09 de, $actCtime,.. │ │ │ │ +00024170: 0909 0909 0924 6163 744d 7469 6d65 2c20 .....$actMtime, │ │ │ │ +00024180: 2475 6964 2c0a 0909 0909 0909 2467 6964 $uid,.......$gid │ │ │ │ +00024190: 2c20 2474 293b 0a09 0969 6620 2824 7275 , $t);...if ($ru │ │ │ │ +000241a0: 6c65 4253 203e 2030 290a 0909 7b0a 0909 leBS > 0)...{... │ │ │ │ +000241b0: 2020 2020 2320 6d64 3520 6973 2063 616c # md5 is cal │ │ │ │ +000241c0: 6375 6c61 7465 6420 6c61 7465 720a 0909 culated later... │ │ │ │ +000241d0: 2020 2020 7075 7368 2040 6669 6c65 732c push @files, │ │ │ │ +000241e0: 2024 663b 0a09 0920 2020 2070 7573 6820 $f;... push │ │ │ │ +000241f0: 4074 7970 6573 2c20 2762 6627 3b20 2020 @types, 'bf'; │ │ │ │ +00024200: 2320 626c 6f63 6b20 6669 6c65 0a0a 0909 # block file.... │ │ │ │ +00024210: 2020 2020 6966 2028 246e 203e 2030 2061 if ($n > 0 a │ │ │ │ +00024220: 6e64 0a09 0909 2461 6374 5369 7a65 203d nd....$actSize = │ │ │ │ +00024230: 3d20 246f 6c64 5369 7a65 2061 6e64 0a09 = $oldSize and.. │ │ │ │ +00024240: 0909 2824 6163 744d 7469 6d65 203d 3d20 ..($actMtime == │ │ │ │ +00024250: 246f 6c64 4d74 696d 6529 2061 6e64 0a09 $oldMtime) and.. │ │ │ │ +00024260: 0909 2824 6f6c 6443 6f6d 7072 2065 7120 ..($oldCompr eq │ │ │ │ +00024270: 2762 2729 290a 0909 2020 2020 7b0a 0909 'b'))... {... │ │ │ │ +00024280: 0923 206e 6f74 6869 6e67 2063 6861 6e67 .# nothing chang │ │ │ │ +00024290: 6564 0a09 0909 7075 7368 2040 6d64 352c ed....push @md5, │ │ │ │ +000242a0: 2024 6d64 3573 756d 3b0a 0909 2020 2020 $md5sum;... │ │ │ │ +000242b0: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... │ │ │ │ +000242c0: 2020 207b 0a09 0909 6d79 2024 6320 3d20 {....my $c = │ │ │ │ +000242d0: 2472 756c 6543 6f6d 7072 6573 7320 3f20 $ruleCompress ? │ │ │ │ +000242e0: 2763 2720 3a20 2775 273b 0a09 0909 2020 'c' : 'u';.... │ │ │ │ +000242f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024300: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00024310: 2063 616c 6375 6c61 7465 206e 6577 206d calculate new m │ │ │ │ +00024320: 6435 2073 756d 0a09 0909 7075 7368 2040 d5 sum....push @ │ │ │ │ +00024330: 6d64 352c 205b 2472 756c 6542 532c 2024 md5, [$ruleBS, $ │ │ │ │ +00024340: 632c 2024 7275 6c65 5061 7261 6c6c 656c c, $ruleParallel │ │ │ │ +00024350: 2c20 4024 7275 6c65 5265 6164 5d3b 0a09 , @$ruleRead];.. │ │ │ │ +00024360: 0909 6966 2028 2464 6562 7567 4d6f 6465 ..if ($debugMode │ │ │ │ +00024370: 203e 3d20 3329 0a09 0909 7b0a 0909 0920 >= 3)....{.... │ │ │ │ +00024380: 2020 206d 7920 2840 7265 6173 6f6e 293b my (@reason); │ │ │ │ +00024390: 0a09 0909 2020 2020 7075 7368 2040 7265 .... push @re │ │ │ │ +000243a0: 6173 6f6e 2c20 2773 697a 6527 2069 6620 ason, 'size' if │ │ │ │ +000243b0: 2461 6374 5369 7a65 2021 3d20 246f 6c64 $actSize != $old │ │ │ │ +000243c0: 5369 7a65 3b0a 0909 0920 2020 2070 7573 Size;.... pus │ │ │ │ +000243d0: 6820 4072 6561 736f 6e2c 2027 6d74 696d h @reason, 'mtim │ │ │ │ +000243e0: 6527 2069 6620 2461 6374 4d74 696d 6520 e' if $actMtime │ │ │ │ +000243f0: 213d 2024 6f6c 644d 7469 6d65 3b0a 0909 != $oldMtime;... │ │ │ │ +00024400: 0920 2020 2070 7573 6820 4072 6561 736f . push @reaso │ │ │ │ +00024410: 6e2c 2027 6374 696d 6527 2069 6620 2461 n, 'ctime' if $a │ │ │ │ +00024420: 6374 4374 696d 6520 213d 2024 6f6c 6443 ctCtime != $oldC │ │ │ │ +00024430: 7469 6d65 3b0a 0909 0920 2020 2024 7072 time;.... $pr │ │ │ │ +00024440: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00024450: 6427 203d 3e20 2744 272c 0a09 0909 0909 d' => 'D',...... │ │ │ │ +00024460: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => ["md │ │ │ │ +00024470: 3573 756d 2028 2220 2e0a 0909 0909 0920 5sum (" ....... │ │ │ │ +00024480: 206a 6f69 6e28 272c 2027 2c20 4072 6561 join(', ', @rea │ │ │ │ +00024490: 736f 6e29 202e 2022 2920 2466 225d 293b son) . ") $f"]); │ │ │ │ +000244a0: 0a09 0909 7d0a 0909 2020 2020 7d0a 0909 ....}... }... │ │ │ │ +000244b0: 2020 2020 6e65 7874 3b0a 0909 7d0a 0920 next;...}.. │ │ │ │ +000244c0: 2020 207d 0a09 2020 2020 656c 7369 6620 }.. elsif │ │ │ │ +000244d0: 2824 6f6c 6443 6f6d 7072 2061 6e64 2024 ($oldCompr and $ │ │ │ │ +000244e0: 6f6c 6443 6f6d 7072 2065 7120 2762 2729 oldCompr eq 'b') │ │ │ │ +000244f0: 2020 2020 2320 6620 2d3e 2062 0a09 2020 # f -> b.. │ │ │ │ +00024500: 2020 7b0a 0909 7075 7368 2040 7479 7065 {...push @type │ │ │ │ +00024510: 732c 2027 666e 6577 273b 2020 2023 2066 s, 'fnew'; # f │ │ │ │ +00024520: 6f72 6365 2063 6f70 7920 6f72 2063 6f6d orce copy or com │ │ │ │ +00024530: 7072 6573 732c 2064 6f20 6e6f 740a 0909 press, do not... │ │ │ │ +00024540: 7075 7368 2040 6d64 352c 2024 6d64 3573 push @md5, $md5s │ │ │ │ +00024550: 756d 3b20 2020 2023 206c 696e 6b20 6265 um; # link be │ │ │ │ +00024560: 6361 7573 6520 7072 6576 696f 7573 2062 cause previous b │ │ │ │ +00024570: 6163 6b75 7020 7761 730a 0909 7075 7368 ackup was...push │ │ │ │ +00024580: 2040 6669 6c65 732c 2024 663b 2020 2020 @files, $f; │ │ │ │ +00024590: 2020 2023 2062 6c6f 636b 6564 0a09 0969 # blocked...i │ │ │ │ +000245a0: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >= │ │ │ │ +000245b0: 2033 290a 0909 7b0a 0909 2020 2020 2470 3)...{... $p │ │ │ │ +000245c0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +000245d0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',..... │ │ │ │ +000245e0: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => ["md │ │ │ │ +000245f0: 3573 756d 2028 626c 6f63 6b20 746f 2066 5sum (block to f │ │ │ │ +00024600: 696c 6529 2024 6622 5d29 3b0a 0909 7d0a ile) $f"]);...}. │ │ │ │ +00024610: 0909 6e65 7874 3b0a 0920 2020 207d 0a0a ..next;.. }.. │ │ │ │ +00024620: 0920 2020 2023 2070 6c61 696e 2066 696c . # plain fil │ │ │ │ +00024630: 6573 2c20 6e6f 2062 6c6f 636b 6564 2066 es, no blocked f │ │ │ │ +00024640: 696c 6573 0a09 2020 2020 6966 2028 246e iles.. if ($n │ │ │ │ +00024650: 203d 3d20 3029 2020 2020 2320 6e69 6368 == 0) # nich │ │ │ │ +00024660: 7420 696d 2048 6173 6820 6765 6675 6e64 t im Hash gefund │ │ │ │ +00024670: 656e 2028 6175 7320 4461 7465 6920 2e6d en (aus Datei .m │ │ │ │ +00024680: 6435 4368 6563 6b53 756d 730a 0920 2020 d5CheckSums.. │ │ │ │ +00024690: 207b 2020 2020 2020 2020 2020 2020 2020 { │ │ │ │ +000246a0: 2023 202d 3e20 6ec3 a468 6572 2075 6e74 # -> n..her unt │ │ │ │ +000246b0: 6572 7375 6368 656e 210a 2020 2020 2020 ersuchen!. │ │ │ │ +000246c0: 2020 2020 2020 2020 2020 2470 724c 6f67 $prLog │ │ │ │ +000246d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000246e0: 3d3e 2027 4927 2c0a 2020 2020 2020 2020 => 'I',. │ │ │ │ +000246f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024700: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ │ +00024710: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024720: 2020 2020 2020 2020 2020 2020 2020 5b22 [" │ │ │ │ +00024730: 4368 6563 6b69 6e67 2024 7265 6c46 696c Checking $relFil │ │ │ │ +00024740: 654e 616d 6520 5b6e 6577 5d22 5d29 2069 eName [new]"]) i │ │ │ │ +00024750: 6620 2476 6572 626f 7365 3b0a 0909 7075 f $verbose;...pu │ │ │ │ +00024760: 7368 2040 6361 6c63 4d44 352c 2024 663b sh @calcMD5, $f; │ │ │ │ +00024770: 0a09 0969 6620 2824 6465 6275 674d 6f64 ...if ($debugMod │ │ │ │ +00024780: 6520 3e3d 2033 290a 0909 7b0a 0909 2020 e >= 3)...{... │ │ │ │ +00024790: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +000247a0: 272d 6b69 6e64 2720 3d3e 2027 4427 2c0a '-kind' => 'D',. │ │ │ │ +000247b0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ │ +000247c0: 5b22 6d64 3573 756d 2028 6e65 7720 6669 ["md5sum (new fi │ │ │ │ +000247d0: 6c65 2920 2466 225d 293b 0a09 097d 0a09 le) $f"]);...}.. │ │ │ │ +000247e0: 096e 6578 743b 0a09 2020 2020 7d0a 0a09 .next;.. }... │ │ │ │ +000247f0: 2020 2020 6966 2028 2469 676e 6f72 6554 if ($ignoreT │ │ │ │ +00024800: 696d 6520 6e65 2027 6d74 696d 6527 2061 ime ne 'mtime' a │ │ │ │ +00024810: 6e64 2028 2461 6374 4d74 696d 6520 213d nd ($actMtime != │ │ │ │ +00024820: 2024 6f6c 644d 7469 6d65 2929 0a09 2020 $oldMtime)).. │ │ │ │ +00024830: 2020 7b0a 2020 2020 2020 2020 2020 2020 {. │ │ │ │ +00024840: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00024850: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ │ +00024860: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +00024870: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024880: 272d 7374 7227 203d 3e0a 2020 2020 2020 '-str' =>. │ │ │ │ +00024890: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000248a0: 2020 2020 2020 2020 5b22 4368 6563 6b69 ["Checki │ │ │ │ +000248b0: 6e67 2024 7265 6c46 696c 654e 616d 6520 ng $relFileName │ │ │ │ +000248c0: 5b6d 7469 6d65 3a20 246f 6c64 4d74 696d [mtime: $oldMtim │ │ │ │ +000248d0: 6520 2d3e 2024 6163 744d 7469 6d65 5d22 e -> $actMtime]" │ │ │ │ +000248e0: 5d29 0a09 0920 2020 2069 6620 2476 6572 ])... if $ver │ │ │ │ +000248f0: 626f 7365 3b0a 0909 7075 7368 2040 6361 bose;...push @ca │ │ │ │ +00024900: 6c63 4d44 352c 2024 663b 0a09 0969 6620 lcMD5, $f;...if │ │ │ │ +00024910: 2824 6465 6275 674d 6f64 6520 3e3d 2033 ($debugMode >= 3 │ │ │ │ +00024920: 290a 0909 7b0a 0909 2020 2020 2470 724c )...{... $prL │ │ │ │ +00024930: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00024940: 2720 3d3e 2027 4427 2c0a 0909 0909 2020 ' => 'D',..... │ │ │ │ +00024950: 272d 7374 7227 203d 3e20 5b22 6d64 3573 '-str' => ["md5s │ │ │ │ +00024960: 756d 2028 6d74 696d 6529 2024 6622 5d29 um (mtime) $f"]) │ │ │ │ +00024970: 3b0a 0909 7d0a 0909 6e65 7874 3b0a 0920 ;...}...next;.. │ │ │ │ +00024980: 2020 207d 0a0a 2020 2020 2020 2020 2020 }.. │ │ │ │ +00024990: 2020 656c 7369 6620 2824 6163 7453 697a elsif ($actSiz │ │ │ │ +000249a0: 6520 213d 2024 6f6c 6453 697a 6529 0a09 e != $oldSize).. │ │ │ │ +000249b0: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. │ │ │ │ +000249c0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ │ +000249d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000249e0: 4927 2c0a 2020 2020 2020 2020 2020 2020 I',. │ │ │ │ +000249f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024a00: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. │ │ │ │ +00024a10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024a20: 2020 2020 2020 2020 2020 5b22 7369 7a65 ["size │ │ │ │ +00024a30: 206f 6620 2472 656c 4669 6c65 4e61 6d65 of $relFileName │ │ │ │ +00024a40: 2063 6861 6e67 6564 2066 726f 6d20 246f changed from $o │ │ │ │ +00024a50: 6c64 5369 7a65 2074 6f20 2220 2e0a 0909 ldSize to " .... │ │ │ │ +00024a60: 0920 2020 2020 2020 2224 6163 7453 697a . "$actSiz │ │ │ │ +00024a70: 652c 2062 7574 206d 7469 6d65 2064 6964 e, but mtime did │ │ │ │ +00024a80: 6e27 7420 6368 616e 6765 2e22 5d29 3b0a n't change."]);. │ │ │ │ +00024a90: 0909 7075 7368 2040 6361 6c63 4d44 352c ..push @calcMD5, │ │ │ │ +00024aa0: 2024 663b 0a09 0969 6620 2824 6465 6275 $f;...if ($debu │ │ │ │ +00024ab0: 674d 6f64 6520 3e3d 2033 290a 0909 7b0a gMode >= 3)...{. │ │ │ │ +00024ac0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +00024ad0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00024ae0: 4427 2c0a 0909 0909 2020 272d 7374 7227 D',..... '-str' │ │ │ │ +00024af0: 203d 3e20 5b22 6d64 3573 756d 2028 7369 => ["md5sum (si │ │ │ │ +00024b00: 7a65 2920 2466 225d 293b 0a09 097d 0a09 ze) $f"]);...}.. │ │ │ │ +00024b10: 096e 6578 743b 0a09 2020 2020 7d0a 0a09 .next;.. }... │ │ │ │ +00024b20: 2020 2020 656c 7369 6620 2824 6967 6e6f elsif ($igno │ │ │ │ +00024b30: 7265 5469 6d65 206e 6520 2763 7469 6d65 reTime ne 'ctime │ │ │ │ +00024b40: 2720 616e 6420 2824 6163 7443 7469 6d65 ' and ($actCtime │ │ │ │ +00024b50: 2021 3d20 246f 6c64 4374 696d 6529 290a != $oldCtime)). │ │ │ │ +00024b60: 0920 2020 207b 0a20 2020 2020 2020 2020 . {. │ │ │ │ +00024b70: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p │ │ │ │ +00024b80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00024b90: 2749 272c 0a20 2020 2020 2020 2020 2020 'I',. │ │ │ │ +00024ba0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024bb0: 2020 2027 2d73 7472 2720 3d3e 0a20 2020 '-str' =>. │ │ │ │ +00024bc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00024bd0: 2020 2020 2020 2020 2020 205b 2243 6865 ["Che │ │ │ │ +00024be0: 636b 696e 6720 2472 656c 4669 6c65 4e61 cking $relFileNa │ │ │ │ +00024bf0: 6d65 205b 6374 696d 653a 2024 6f6c 6443 me [ctime: $oldC │ │ │ │ +00024c00: 7469 6d65 202d 3e20 2461 6374 4374 696d time -> $actCtim │ │ │ │ +00024c10: 655d 225d 290a 0909 2020 2020 6966 2024 e]"])... if $ │ │ │ │ +00024c20: 7665 7262 6f73 653b 0a09 0970 7573 6820 verbose;...push │ │ │ │ +00024c30: 4063 616c 634d 4435 2c20 2466 3b0a 0909 @calcMD5, $f;... │ │ │ │ +00024c40: 6966 2028 2464 6562 7567 4d6f 6465 203e if ($debugMode > │ │ │ │ +00024c50: 3d20 3329 0a09 097b 0a09 0920 2020 2024 = 3)...{... $ │ │ │ │ +00024c60: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00024c70: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',.... │ │ │ │ +00024c80: 0920 2027 2d73 7472 2720 3d3e 205b 226d . '-str' => ["m │ │ │ │ +00024c90: 6435 7375 6d20 2863 7469 6d65 2920 2466 d5sum (ctime) $f │ │ │ │ +00024ca0: 225d 293b 0a09 097d 0a09 096e 6578 743b "]);...}...next; │ │ │ │ +00024cb0: 0a09 2020 2020 7d0a 0a0a 0920 2020 2023 .. }.... # │ │ │ │ +00024cc0: 0a09 2020 2020 2320 c3bc 6272 6967 3a20 .. # ..brig: │ │ │ │ +00024cd0: 706c 6169 6e20 6669 6c65 732c 2064 6965 plain files, die │ │ │ │ +00024ce0: 2073 6963 6820 6765 6765 6ec3 bc62 6572 sich gegen..ber │ │ │ │ +00024cf0: 2064 656d 206c 6574 7a74 656e 2042 6163 dem letzten Bac │ │ │ │ +00024d00: 6b75 700a 0920 2020 2023 206e 6963 6874 kup.. # nicht │ │ │ │ +00024d10: 2076 6572 c3a4 6e64 6572 7420 6861 6265 ver..ndert habe │ │ │ │ +00024d20: 6e0a 0920 2020 2023 0a0a 2020 2020 2020 n.. #.. │ │ │ │ +00024d30: 2020 2020 2020 2320 6d69 7420 6d64 3520 # mit md5 │ │ │ │ +00024d40: 5375 6d6d 6520 c3bc 6265 7220 6462 6d28 Summe ..ber dbm( │ │ │ │ +00024d50: 6d64 3529 2067 6568 656e 2c20 6461 6475 md5) gehen, dadu │ │ │ │ +00024d60: 7263 680a 2020 2020 2020 2020 2020 2020 rch. │ │ │ │ +00024d70: 2320 446f 7070 656c 7465 2076 6572 6d65 # Doppelte verme │ │ │ │ +00024d80: 6964 656e 0a20 2020 2020 2020 2020 2020 iden. │ │ │ │ +00024d90: 2070 7573 6820 4066 696c 6573 2c20 2466 push @files, $f │ │ │ │ +00024da0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu │ │ │ │ +00024db0: 7368 2040 6d64 352c 2024 6d64 3573 756d sh @md5, $md5sum │ │ │ │ +00024dc0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu │ │ │ │ +00024dd0: 7368 2040 7479 7065 732c 2027 6627 3b0a sh @types, 'f';. │ │ │ │ +00024de0: 097d 0a0a 0a20 2020 2020 2020 2023 2050 .}... # P │ │ │ │ +00024df0: 6172 616c 6c65 6c70 726f 7a65 7373 2073 arallelprozess s │ │ │ │ +00024e00: 7461 7274 656e 2c0a 2020 2020 2020 2020 tarten,. │ │ │ │ +00024e10: 2320 4d44 3520 5375 6d6d 656e 2066 c3bc # MD5 Summen f.. │ │ │ │ +00024e20: 7220 4063 616c 634d 4435 2062 6572 6563 r @calcMD5 berec │ │ │ │ +00024e30: 686e 656e 0a20 2020 2020 2020 2069 6620 hnen. if │ │ │ │ +00024e40: 2840 6361 6c63 4d44 3520 3e20 3029 0a20 (@calcMD5 > 0). │ │ │ │ +00024e50: 2020 2020 2020 207b 0a20 2020 2020 2020 {. │ │ │ │ +00024e60: 2020 2020 2024 7365 6c66 2d3e 7b27 6d64 $self->{'md │ │ │ │ +00024e70: 3546 6f72 6b27 7d20 3d20 666f 726b 4d44 5Fork'} = forkMD │ │ │ │ +00024e80: 352d 3e6e 6577 2827 2d70 6172 616d 2720 5->new('-param' │ │ │ │ +00024e90: 3d3e 205b 4063 616c 634d 4435 5d2c 0a09 => [@calcMD5],.. │ │ │ │ +00024ea0: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +00024eb0: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,... │ │ │ │ +00024ec0: 0909 0920 2020 2020 2027 2d74 6d70 6469 ... '-tmpdi │ │ │ │ +00024ed0: 7227 203d 3e20 2474 6d70 6469 722c 0a09 r' => $tmpdir,.. │ │ │ │ +00024ee0: 0909 0909 2020 2020 2020 272d 7265 7365 .... '-rese │ │ │ │ +00024ef0: 7441 7469 6d65 2720 3d3e 0a09 0909 0909 tAtime' =>...... │ │ │ │ +00024f00: 2020 2020 2020 2473 656c 662d 3e7b 2772 $self->{'r │ │ │ │ +00024f10: 6573 6574 4174 696d 6527 7d29 3b0a 2020 esetAtime'});. │ │ │ │ +00024f20: 2020 2020 2020 7d0a 2020 2020 7d0a 0a20 }. }.. │ │ │ │ +00024f30: 2020 2023 2046 616c 6c73 206e 6f63 6820 # Falls noch │ │ │ │ +00024f40: 6569 6e20 5061 7261 6c6c 656c 7072 6f7a ein Parallelproz │ │ │ │ +00024f50: 6573 7320 6cc3 a475 6674 2c20 7369 6368 ess l..uft, sich │ │ │ │ +00024f60: 6572 7374 656c 6c65 6e20 6461 7373 2072 erstellen dass r │ │ │ │ +00024f70: 6561 6444 6972 0a20 2020 2023 2065 726e eadDir. # ern │ │ │ │ +00024f80: 6575 7420 6175 6667 6572 7566 656e 2077 eut aufgerufen w │ │ │ │ +00024f90: 6972 6420 6175 6368 2077 656e 6e20 6573 ird auch wenn es │ │ │ │ +00024fa0: 206a 6574 7a74 206e 6963 6874 7320 7a75 jetzt nichts zu │ │ │ │ +00024fb0: 72c3 bc63 6b67 6567 6562 656e 0a20 2020 r..ckgegeben. │ │ │ │ +00024fc0: 2023 2068 6174 2e0a 2020 2020 6966 2028 # hat.. if ( │ │ │ │ +00024fd0: 4066 696c 6573 203d 3d20 3020 616e 6420 @files == 0 and │ │ │ │ +00024fe0: 2473 656c 662d 3e7b 276d 6435 466f 726b $self->{'md5Fork │ │ │ │ +00024ff0: 277d 290a 2020 2020 7b0a 2020 2020 2020 '}). {. │ │ │ │ +00025000: 2020 7075 7368 2040 6669 6c65 732c 2075 push @files, u │ │ │ │ +00025010: 6e64 6566 3b0a 2020 2020 2020 2020 7075 ndef;. pu │ │ │ │ +00025020: 7368 2040 6d64 352c 2075 6e64 6566 3b0a sh @md5, undef;. │ │ │ │ +00025030: 2020 2020 2020 2020 7075 7368 2040 7479 push @ty │ │ │ │ +00025040: 7065 732c 2027 7265 7065 6174 273b 0a20 pes, 'repeat';. │ │ │ │ +00025050: 2020 207d 0a0a 2020 2020 2473 656c 662d }.. $self- │ │ │ │ +00025060: 3e7b 2766 696c 6573 277d 203d 205c 4066 >{'files'} = \@f │ │ │ │ +00025070: 696c 6573 3b0a 2020 2020 2473 656c 662d iles;. $self- │ │ │ │ +00025080: 3e7b 276d 6435 277d 203d 205c 406d 6435 >{'md5'} = \@md5 │ │ │ │ +00025090: 3b0a 2020 2020 2473 656c 662d 3e7b 2774 ;. $self->{'t │ │ │ │ +000250a0: 7970 6573 277d 203d 205c 4074 7970 6573 ypes'} = \@types │ │ │ │ +000250b0: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +000250c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000250d0: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +000250e0: 7562 2044 4553 5452 4f59 0a7b 0a20 2020 ub DESTROY.{. │ │ │ │ +000250f0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ │ +00025100: 743b 0a0a 2020 2020 6d79 2024 7763 6c20 t;.. my $wcl │ │ │ │ +00025110: 3d20 2473 656c 662d 3e7b 2777 7269 7465 = $self->{'write │ │ │ │ +00025120: 4578 636c 7564 654c 6f67 277d 3b0a 0a20 ExcludeLog'};.. │ │ │ │ +00025130: 2020 2069 6620 2824 7763 6c20 616e 6420 if ($wcl and │ │ │ │ +00025140: 246d 6169 6e3a 3a65 6e64 4f66 5374 6f72 $main::endOfStor │ │ │ │ +00025150: 6542 6163 6b75 7029 0a20 2020 207b 0a23 eBackup). {.# │ │ │ │ +00025160: 096c 6f63 616c 202a 4558 434c 5f4c 4f47 .local *EXCL_LOG │ │ │ │ +00025170: 203d 2024 7365 6c66 2d3e 7b27 4558 434c = $self->{'EXCL │ │ │ │ +00025180: 5f4c 4f47 277d 3b0a 2309 636c 6f73 6528 _LOG'};.#.close( │ │ │ │ +00025190: 4558 434c 5f4c 4f47 2920 6f72 0a23 0920 EXCL_LOG) or.#. │ │ │ │ +000251a0: 2020 2024 7365 6c66 2d3e 7b27 7072 4c6f $self->{'prLo │ │ │ │ +000251b0: 6727 7d2d 3e70 7269 6e74 2827 2d6b 696e g'}->print('-kin │ │ │ │ +000251c0: 6427 203d 3e20 2745 272c 0a23 0909 0909 d' => 'E',.#.... │ │ │ │ +000251d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +000251e0: 6361 6e6e 6f74 2063 6c6f 7365 203c 2477 cannot close <$w │ │ │ │ +000251f0: 636c 3e22 5d2c 0a23 0909 0909 2020 2020 cl>"],.#.... │ │ │ │ +00025200: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);.. │ │ │ │ +00025210: 6d79 2024 6578 636c 4c6f 6720 3d20 2473 my $exclLog = $s │ │ │ │ +00025220: 656c 662d 3e7b 2765 7863 6c4c 6f67 277d elf->{'exclLog'} │ │ │ │ +00025230: 3b0a 0924 6578 636c 4c6f 672d 3e77 6169 ;..$exclLog->wai │ │ │ │ +00025240: 7428 293b 0a09 6d79 2024 6f75 7420 3d20 t();..my $out = │ │ │ │ +00025250: 2465 7863 6c4c 6f67 2d3e 6765 7453 5444 $exclLog->getSTD │ │ │ │ +00025260: 4552 5228 293b 0a09 6966 2028 4024 6f75 ERR();..if (@$ou │ │ │ │ +00025270: 7429 0a09 7b0a 0920 2020 2024 7072 4c6f t)..{.. $prLo │ │ │ │ +00025280: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00025290: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +000252a0: 7374 7227 203d 3e20 5b22 627a 6970 3220 str' => ["bzip2 │ │ │ │ +000252b0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:" │ │ │ │ +000252c0: 2c0a 0909 0909 2020 2020 2040 246f 7574 ,..... @$out │ │ │ │ +000252d0: 5d29 3b0a 0920 2020 2065 7869 7420 313b ]);.. exit 1; │ │ │ │ +000252e0: 0a09 7d0a 0924 6578 636c 4c6f 672d 3e63 ..}..$exclLog->c │ │ │ │ +000252f0: 6c6f 7365 2829 3b0a 2020 2020 7d0a 7d0a lose();. }.}. │ │ │ │ +00025300: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00025310: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025320: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025330: 2323 2323 0a23 2073 7465 6c6c 7420 6665 ####.# stellt fe │ │ │ │ +00025340: 7374 2c20 7765 6c63 6865 7320 6461 7320 st, welches das │ │ │ │ +00025350: 6e65 7565 2044 6972 6563 746f 7279 2069 neue Directory i │ │ │ │ +00025360: 7374 2c20 6cc3 b673 6368 7420 616c 7465 st, l..scht alte │ │ │ │ +00025370: 0a70 6163 6b61 6765 2061 646d 696e 4469 .package adminDi │ │ │ │ +00025380: 7265 6374 6f72 6965 733b 0a75 7365 2043 rectories;.use C │ │ │ │ +00025390: 6172 703b 0a0a 7375 6220 6e65 770a 7b0a arp;..sub new.{. │ │ │ │ +000253a0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ │ +000253b0: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s │ │ │ │ +000253c0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m │ │ │ │ +000253d0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = (' │ │ │ │ +000253e0: 2d74 6172 6765 7444 6972 2720 2020 203d -targetDir' = │ │ │ │ +000253f0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00025400: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' = │ │ │ │ +00025410: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00025420: 2d74 6d70 6469 7227 2020 2020 2020 203d -tmpdir' = │ │ │ │ +00025430: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00025440: 2d63 686d 6f64 4d44 3546 696c 6527 203d -chmodMD5File' = │ │ │ │ +00025450: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00025460: 2d70 724c 6f67 2720 2020 2020 2020 203d -prLog' = │ │ │ │ +00025470: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00025480: 2d61 6b74 4461 7465 2720 2020 2020 203d -aktDate' = │ │ │ │ +00025490: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +000254a0: 2d64 6562 7567 4d6f 6465 2720 2020 203d -debugMode' = │ │ │ │ +000254b0: 3e20 300a 0909 2020 2020 293b 0a0a 2020 > 0... );.. │ │ │ │ +000254c0: 2020 263a 3a63 6865 636b 4f62 6a65 6374 &::checkObject │ │ │ │ +000254d0: 5061 7261 6d73 285c 2570 6172 616d 732c Params(\%params, │ │ │ │ +000254e0: 205c 405f 2c20 2761 646d 696e 4469 7265 \@_, 'adminDire │ │ │ │ +000254f0: 6374 6f72 6965 733a 3a6e 6577 272c 0a09 ctories::new',.. │ │ │ │ +00025500: 0909 205b 272d 7461 7267 6574 4469 7227 .. ['-targetDir' │ │ │ │ +00025510: 2c20 272d 6368 6563 6b53 756d 4669 6c65 , '-checkSumFile │ │ │ │ +00025520: 272c 2027 2d63 686d 6f64 4d44 3546 696c ', '-chmodMD5Fil │ │ │ │ +00025530: 6527 2c0a 0909 0920 2027 2d74 6d70 6469 e',.... '-tmpdi │ │ │ │ +00025540: 7227 2c20 272d 7072 4c6f 6727 5d29 3b0a r', '-prLog']);. │ │ │ │ +00025550: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams │ │ │ │ +00025560: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \% │ │ │ │ +00025570: 7061 7261 6d73 293b 0a0a 2320 7765 6974 params);..# weit │ │ │ │ +00025580: 6572 6520 5661 7269 6162 6c65 6e3a 0a23 ere Variablen:.# │ │ │ │ +00025590: 2027 616b 7444 6174 6527 2c20 2762 6173 'aktDate', 'bas │ │ │ │ +000255a0: 6544 6972 272c 2027 616b 7444 6972 272c eDir', 'aktDir', │ │ │ │ +000255b0: 2027 7072 6576 4469 7227 2c20 276f 6c64 'prevDir', 'old │ │ │ │ +000255c0: 4469 7273 270a 0a20 2020 206d 7920 2474 Dirs'.. my $t │ │ │ │ +000255d0: 6172 6765 7444 6972 203d 2024 7365 6c66 argetDir = $self │ │ │ │ +000255e0: 2d3e 7b27 7461 7267 6574 4469 7227 7d3b ->{'targetDir'}; │ │ │ │ +000255f0: 0a20 2020 206d 7920 2463 686d 6f64 4d44 . my $chmodMD │ │ │ │ +00025600: 3546 696c 6520 3d20 2473 656c 662d 3e7b 5File = $self->{ │ │ │ │ +00025610: 2763 686d 6f64 4d44 3546 696c 6527 7d3b 'chmodMD5File'}; │ │ │ │ +00025620: 0a20 2020 206d 7920 2470 724c 6f67 203d . my $prLog = │ │ │ │ +00025630: 2024 7365 6c66 2d3e 7b27 7072 4c6f 6727 $self->{'prLog' │ │ │ │ +00025640: 7d3b 0a0a 2020 2020 6d79 2024 616b 7444 };.. my $aktD │ │ │ │ +00025650: 6174 6520 3d20 2473 656c 662d 3e7b 2761 ate = $self->{'a │ │ │ │ +00025660: 6b74 4461 7465 277d 3b0a 2020 2020 2473 ktDate'};. $s │ │ │ │ +00025670: 656c 662d 3e7b 2762 6173 6544 6972 277d elf->{'baseDir'} │ │ │ │ +00025680: 203d 2024 7461 7267 6574 4469 723b 0a20 = $targetDir;. │ │ │ │ +00025690: 2020 206d 7920 2461 6b74 4469 7220 3d20 my $aktDir = │ │ │ │ +000256a0: 2473 656c 662d 3e7b 2761 6b74 4469 7227 $self->{'aktDir' │ │ │ │ +000256b0: 7d20 3d20 2474 6172 6765 7444 6972 202e } = $targetDir . │ │ │ │ +000256c0: 2027 2f27 202e 0a09 2461 6b74 4461 7465 '/' ...$aktDate │ │ │ │ +000256d0: 2d3e 6765 7444 6174 6554 696d 6528 272d ->getDateTime('- │ │ │ │ +000256e0: 666f 726d 6174 2720 3d3e 2027 2559 2e25 format' => '%Y.% │ │ │ │ +000256f0: 4d2e 2544 5f25 682e 256d 2e25 7327 293b M.%D_%h.%m.%s'); │ │ │ │ +00025700: 0a0a 2020 2020 6d79 2024 6173 6264 203d .. my $asbd = │ │ │ │ +00025710: 2061 6c6c 5374 6f72 6542 6163 6b75 7053 allStoreBackupS │ │ │ │ +00025720: 6572 6965 732d 3e6e 6577 2827 2d72 6f6f eries->new('-roo │ │ │ │ +00025730: 7444 6972 2720 3d3e 2024 7461 7267 6574 tDir' => $target │ │ │ │ +00025740: 4469 722c 0a09 0909 0909 2027 2d63 6865 Dir,...... '-che │ │ │ │ +00025750: 636b 5375 6d46 696c 6527 203d 3e20 2463 ckSumFile' => $c │ │ │ │ +00025760: 6865 636b 5375 6d46 696c 652c 0a09 0909 heckSumFile,.... │ │ │ │ +00025770: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $ │ │ │ │ +00025780: 7072 4c6f 6729 3b0a 2020 2020 2473 656c prLog);. $sel │ │ │ │ +00025790: 662d 3e7b 2770 7265 7644 6972 277d 203d f->{'prevDir'} = │ │ │ │ +000257a0: 2024 6173 6264 2d3e 6765 7446 696e 6973 $asbd->getFinis │ │ │ │ +000257b0: 6865 6450 7265 7628 293b 0a0a 2320 4e65 hedPrev();..# Ne │ │ │ │ +000257c0: 7565 7320 5665 727a 6569 6368 6e69 7320 ues Verzeichnis │ │ │ │ +000257d0: 616e 6c65 6765 6e0a 2020 2020 2470 724c anlegen. $prL │ │ │ │ +000257e0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000257f0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '- │ │ │ │ +00025800: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ │ +00025810: 2063 7265 6174 6520 3c24 616b 7444 6972 create <$aktDir │ │ │ │ +00025820: 3e2c 2065 7869 7469 6e67 225d 2c0a 0909 >, exiting"],... │ │ │ │ +00025830: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ │ +00025840: 0975 6e6c 6573 7320 286d 6b64 6972 2024 .unless (mkdir $ │ │ │ │ +00025850: 616b 7444 6972 293b 0a20 2020 2063 686d aktDir);. chm │ │ │ │ +00025860: 6f64 2030 3735 352c 2024 616b 7444 6972 od 0755, $aktDir │ │ │ │ +00025870: 3b0a 2020 2020 6d79 2024 6368 6d6f 6444 ;. my $chmodD │ │ │ │ +00025880: 6972 203d 2024 6368 6d6f 644d 4435 4669 ir = $chmodMD5Fi │ │ │ │ +00025890: 6c65 3b0a 2020 2020 2463 686d 6f64 4469 le;. $chmodDi │ │ │ │ +000258a0: 7220 7c3d 2030 3130 3020 6966 2024 6368 r |= 0100 if $ch │ │ │ │ +000258b0: 6d6f 6444 6972 2026 2030 3430 303b 0a20 modDir & 0400;. │ │ │ │ +000258c0: 2020 2024 6368 6d6f 6444 6972 207c 3d20 $chmodDir |= │ │ │ │ +000258d0: 3030 3130 2069 6620 2463 686d 6f64 4469 0010 if $chmodDi │ │ │ │ +000258e0: 7220 2620 3030 3430 3b0a 2020 2020 2463 r & 0040;. $c │ │ │ │ +000258f0: 686d 6f64 4469 7220 7c3d 2030 3030 3120 hmodDir |= 0001 │ │ │ │ +00025900: 6966 2024 6368 6d6f 6444 6972 2026 2030 if $chmodDir & 0 │ │ │ │ +00025910: 3030 343b 0a20 2020 206d 6b64 6972 2022 004;. mkdir " │ │ │ │ +00025920: 2461 6b74 4469 722f 2e73 746f 7265 4261 $aktDir/.storeBa │ │ │ │ +00025930: 636b 7570 4c69 6e6b 7322 2c20 2463 686d ckupLinks", $chm │ │ │ │ +00025940: 6f64 4469 723b 0a0a 2020 2020 6d79 2024 odDir;.. my $ │ │ │ │ +00025950: 6465 6275 674d 6f64 6520 3d20 2473 656c debugMode = $sel │ │ │ │ +00025960: 662d 3e7b 2764 6562 7567 4d6f 6465 277d f->{'debugMode'} │ │ │ │ +00025970: 3b0a 2020 2020 6966 2028 2464 6562 7567 ;. if ($debug │ │ │ │ +00025980: 4d6f 6465 203e 2030 290a 2020 2020 7b0a Mode > 0). {. │ │ │ │ +00025990: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +000259a0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ │ +000259b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +000259c0: 205b 226e 6577 2064 6972 6563 746f 7279 ["new directory │ │ │ │ +000259d0: 2069 7320 3c24 616b 7444 6972 3e22 2c0a is <$aktDir>",. │ │ │ │ +000259e0: 0909 0909 2024 7365 6c66 2d3e 7b27 7072 .... $self->{'pr │ │ │ │ +000259f0: 6576 4469 7227 7d20 3f0a 0909 0909 2022 evDir'} ?..... " │ │ │ │ +00025a00: 7072 6576 696f 7573 2064 6972 6563 746f previous directo │ │ │ │ +00025a10: 7279 2069 7320 3c22 202e 0a09 0909 0920 ry is <" ...... │ │ │ │ +00025a20: 2473 656c 662d 3e7b 2770 7265 7644 6972 $self->{'prevDir │ │ │ │ +00025a30: 277d 202e 2022 3e22 203a 0a09 0909 0920 '} . ">" :..... │ │ │ │ +00025a40: 276e 6f20 7072 6576 696f 7573 2064 6972 'no previous dir │ │ │ │ +00025a50: 6563 746f 7279 2c20 6669 7273 7420 7573 ectory, first us │ │ │ │ +00025a60: 6527 5d29 3b0a 2020 2020 7d0a 0a20 2020 e']);. }.. │ │ │ │ +00025a70: 206d 7920 2840 6f6c 6444 6972 7329 203d my (@oldDirs) = │ │ │ │ +00025a80: 2024 6173 6264 2d3e 6765 7441 6c6c 4469 $asbd->getAllDi │ │ │ │ +00025a90: 7273 2829 3b0a 2020 2020 2473 656c 662d rs();. $self- │ │ │ │ +00025aa0: 3e7b 276f 6c64 4469 7273 277d 203d 205c >{'oldDirs'} = \ │ │ │ │ +00025ab0: 406f 6c64 4469 7273 3b0a 0a20 2020 2062 @oldDirs;.. b │ │ │ │ +00025ac0: 6c65 7373 2024 7365 6c66 2c20 2463 6c61 less $self, $cla │ │ │ │ +00025ad0: 7373 3b0a 7d0a 0a0a 2323 2323 2323 2323 ss;.}...######## │ │ │ │ +00025ae0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025af0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025b00: 0a23 2073 696e 6420 736f 7274 6965 7274 .# sind sortiert │ │ │ │ +00025b10: 3a20 c3a4 6c74 6573 7465 7320 7a75 6572 : ..ltestes zuer │ │ │ │ +00025b20: 7374 0a73 7562 2067 6574 4f6c 6444 6972 st.sub getOldDir │ │ │ │ +00025b30: 730a 7b0a 2020 2020 6d79 2024 7365 6c66 s.{. my $self │ │ │ │ +00025b40: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r │ │ │ │ +00025b50: 6574 7572 6e20 2473 656c 662d 3e7b 276f eturn $self->{'o │ │ │ │ +00025b60: 6c64 4469 7273 277d 3b0a 7d0a 0a0a 2323 ldDirs'};.}...## │ │ │ │ +00025b70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025b80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025b90: 2323 2323 2323 0a73 7562 2067 6574 416b ######.sub getAk │ │ │ │ +00025ba0: 7444 6972 0a7b 0a20 2020 206d 7920 2473 tDir.{. my $s │ │ │ │ +00025bb0: 656c 6620 3d20 7368 6966 743b 0a20 2020 elf = shift;. │ │ │ │ +00025bc0: 2072 6574 7572 6e20 2473 656c 662d 3e7b return $self->{ │ │ │ │ +00025bd0: 2761 6b74 4469 7227 7d3b 2020 2020 2020 'aktDir'}; │ │ │ │ +00025be0: 2023 2053 7472 696e 670a 7d0a 0a0a 2323 # String.}...## │ │ │ │ +00025bf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025c00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025c10: 2323 2323 2323 0a73 7562 2067 6574 416b ######.sub getAk │ │ │ │ +00025c20: 7449 6e66 6f46 696c 650a 7b0a 2020 2020 tInfoFile.{. │ │ │ │ +00025c30: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ │ +00025c40: 3b0a 0a20 2020 206d 7920 2461 6b74 4469 ;.. my $aktDi │ │ │ │ +00025c50: 7220 3d20 2473 656c 662d 3e7b 2761 6b74 r = $self->{'akt │ │ │ │ +00025c60: 4469 7227 7d3b 0a20 2020 2069 6620 2824 Dir'};. if ($ │ │ │ │ +00025c70: 616b 7444 6972 290a 2020 2020 7b0a 0972 aktDir). {..r │ │ │ │ +00025c80: 6574 7572 6e20 2461 6b74 4469 7220 2e20 eturn $aktDir . │ │ │ │ +00025c90: 272f 2720 2e20 2473 656c 662d 3e7b 2763 '/' . $self->{'c │ │ │ │ +00025ca0: 6865 636b 5375 6d46 696c 6527 7d3b 0a20 heckSumFile'};. │ │ │ │ +00025cb0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ │ +00025cc0: 2020 7b0a 0972 6574 7572 6e20 756e 6465 {..return unde │ │ │ │ +00025cd0: 663b 0a20 2020 207d 0a7d 0a0a 0a23 2323 f;. }.}...### │ │ │ │ +00025ce0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025cf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025d00: 2323 2323 230a 7375 6220 6765 7450 7265 #####.sub getPre │ │ │ │ +00025d10: 7644 6972 0a7b 0a20 2020 2063 6172 7020 vDir.{. carp │ │ │ │ +00025d20: 2244 6570 7265 6361 7465 6421 2057 6879 "Deprecated! Why │ │ │ │ +00025d30: 2073 686f 756c 6420 7468 6973 2062 6520 should this be │ │ │ │ +00025d40: 6e65 6363 6573 7361 7279 3f22 3b0a 2020 neccessary?";. │ │ │ │ +00025d50: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi │ │ │ │ +00025d60: 6674 3b0a 2020 2020 7265 7475 726e 2024 ft;. return $ │ │ │ │ +00025d70: 7365 6c66 2d3e 7b27 7072 6576 4469 7227 self->{'prevDir' │ │ │ │ +00025d80: 7d3b 2020 2020 2020 2023 2053 7472 696e }; # Strin │ │ │ │ +00025d90: 670a 7d0a 0a0a 2323 2323 2323 2323 2323 g.}...########## │ │ │ │ +00025da0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025db0: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +00025dc0: 7562 2067 6574 4f6c 6449 6e66 6f46 696c ub getOldInfoFil │ │ │ │ +00025dd0: 650a 7b0a 2020 2020 6361 7270 2022 4465 e.{. carp "De │ │ │ │ +00025de0: 7072 6563 6174 6564 2120 5768 7920 7368 precated! Why sh │ │ │ │ +00025df0: 6f75 6c64 2074 6869 7320 6265 206e 6563 ould this be nec │ │ │ │ +00025e00: 6365 7373 6172 793f 223b 0a20 2020 206d cessary?";. m │ │ │ │ +00025e10: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00025e20: 0a0a 2020 2020 6d79 2024 7072 6576 4469 .. my $prevDi │ │ │ │ +00025e30: 7220 3d20 2473 656c 662d 3e7b 2770 7265 r = $self->{'pre │ │ │ │ +00025e40: 7644 6972 277d 3b0a 2020 2020 6966 2028 vDir'};. if ( │ │ │ │ +00025e50: 2470 7265 7644 6972 290a 2020 2020 7b0a $prevDir). {. │ │ │ │ +00025e60: 0972 6574 7572 6e20 2470 7265 7644 6972 .return $prevDir │ │ │ │ +00025e70: 202e 2027 2f27 202e 2024 7365 6c66 2d3e . '/' . $self-> │ │ │ │ +00025e80: 7b27 6368 6563 6b53 756d 4669 6c65 277d {'checkSumFile'} │ │ │ │ +00025e90: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00025ea0: 0a20 2020 207b 0a09 7265 7475 726e 2075 . {..return u │ │ │ │ +00025eb0: 6e64 6566 3b0a 2020 2020 7d0a 7d0a 0a0a ndef;. }.}... │ │ │ │ +00025ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025ee0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00025ef0: 2323 0a23 2053 706c 6974 7465 7420 6469 ##.# Splittet di │ │ │ │ +00025f00: 6520 5061 7261 6d65 7465 726c 6973 7465 e Parameterliste │ │ │ │ +00025f10: 2028 6661 6c6c 7320 7a75 206c 616e 6729 (falls zu lang) │ │ │ │ +00025f20: 2061 7566 0a23 2053 7465 6c6c 7420 6e61 auf.# Stellt na │ │ │ │ +00025f30: 6368 2061 75c3 9f65 6e20 6569 6e20 496e ch au..en ein In │ │ │ │ +00025f40: 7465 7266 6163 6520 616e 616c 6f67 2066 terface analog f │ │ │ │ +00025f50: 6f72 6b50 726f 6320 7a75 7220 5665 7266 orkProc zur Verf │ │ │ │ +00025f60: c3bc 6775 6e67 0a23 2028 6cc3 a475 6674 ..gung.# (l..uft │ │ │ │ +00025f70: 2069 6d20 4869 6e74 6572 6772 756e 6420 im Hintergrund │ │ │ │ +00025f80: 616c 7320 666f 726b 2f65 7865 6329 0a23 als fork/exec).# │ │ │ │ +00025f90: 2041 7262 6569 7465 7420 2a61 6c6c 652a Arbeitet *alle* │ │ │ │ +00025fa0: 2061 622c 2065 7273 7420 6461 6e6e 2077 ab, erst dann w │ │ │ │ +00025fb0: 6972 6420 4572 6765 626e 6973 2067 656c ird Ergebnis gel │ │ │ │ +00025fc0: 6965 6665 7274 0a70 6163 6b61 6765 2066 iefert.package f │ │ │ │ +00025fd0: 6f72 6b4d 4435 3b0a 0a73 7562 206e 6577 orkMD5;..sub new │ │ │ │ +00025fe0: 0a7b 0a20 2020 206d 7920 2463 6c61 7373 .{. my $class │ │ │ │ +00025ff0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ │ +00026000: 2024 7365 6c66 203d 207b 7d3b 0a0a 2020 $self = {};.. │ │ │ │ +00026010: 2020 6d79 2028 2570 6172 616d 7329 203d my (%params) = │ │ │ │ +00026020: 2028 272d 7061 7261 6d27 2020 2020 2020 ('-param' │ │ │ │ +00026030: 3d3e 205b 5d2c 0a09 0920 2020 2027 2d70 => [],... '-p │ │ │ │ +00026040: 724c 6f67 2720 2020 2020 203d 3e20 756e rLog' => un │ │ │ │ +00026050: 6465 662c 0a09 0920 2020 2027 2d74 6d70 def,... '-tmp │ │ │ │ +00026060: 6469 7227 2020 2020 203d 3e20 756e 6465 dir' => unde │ │ │ │ +00026070: 662c 0a09 0920 2020 2027 2d72 6573 6574 f,... '-reset │ │ │ │ +00026080: 4174 696d 6527 203d 3e20 756e 6465 660a Atime' => undef. │ │ │ │ +00026090: 0909 2020 2020 293b 0a0a 2020 2020 263a .. );.. &: │ │ │ │ +000260a0: 3a63 6865 636b 4f62 6a65 6374 5061 7261 :checkObjectPara │ │ │ │ +000260b0: 6d73 285c 2570 6172 616d 732c 205c 405f ms(\%params, \@_ │ │ │ │ +000260c0: 2c20 2766 6f72 6b4d 4435 3a3a 6e65 7727 , 'forkMD5::new' │ │ │ │ +000260d0: 2c0a 0909 0920 5b27 2d70 724c 6f67 272c ,.... ['-prLog', │ │ │ │ +000260e0: 2027 2d74 6d70 6469 7227 5d29 3b0a 2020 '-tmpdir']);. │ │ │ │ +000260f0: 2020 263a 3a73 6574 5061 7261 6d73 4469 &::setParamsDi │ │ │ │ +00026100: 7265 6374 2824 7365 6c66 2c20 5c25 7061 rect($self, \%pa │ │ │ │ +00026110: 7261 6d73 293b 0a0a 0a20 2020 2028 407b rams);... (@{ │ │ │ │ +00026120: 2473 656c 662d 3e7b 2772 6573 756c 7453 $self->{'resultS │ │ │ │ +00026130: 5444 4552 5227 7d7d 2920 3d20 2829 3b0a TDERR'}}) = ();. │ │ │ │ +00026140: 2020 2020 2840 7b24 7365 6c66 2d3e 7b27 (@{$self->{' │ │ │ │ +00026150: 7265 7375 6c74 5354 444f 5554 277d 7d29 resultSTDOUT'}}) │ │ │ │ +00026160: 203d 2028 293b 0a0a 2020 2020 626c 6573 = ();.. bles │ │ │ │ +00026170: 7320 2473 656c 662c 2024 636c 6173 733b s $self, $class; │ │ │ │ +00026180: 0a0a 2020 2020 2320 6361 6368 6520 6174 .. # cache at │ │ │ │ +00026190: 696d 6520 616e 6420 6d74 696d 6520 696e ime and mtime in │ │ │ │ +000261a0: 206f 626a 6563 740a 2020 2020 6d79 2028 object. my ( │ │ │ │ +000261b0: 4061 7469 6d65 2c20 406d 7469 6d65 2c20 @atime, @mtime, │ │ │ │ +000261c0: 2470 293b 0a20 2020 2066 6f72 6561 6368 $p);. foreach │ │ │ │ +000261d0: 2024 7020 2840 7b24 7365 6c66 2d3e 7b27 $p (@{$self->{' │ │ │ │ +000261e0: 7061 7261 6d27 7d7d 290a 2020 2020 7b0a param'}}). {. │ │ │ │ +000261f0: 096d 7920 2824 6174 696d 652c 2024 6d74 .my ($atime, $mt │ │ │ │ +00026200: 696d 6529 203d 2028 7374 6174 2824 7029 ime) = (stat($p) │ │ │ │ +00026210: 295b 382c 2039 5d3b 0a09 7075 7368 2040 )[8, 9];..push @ │ │ │ │ +00026220: 6174 696d 652c 2024 6174 696d 653b 0a09 atime, $atime;.. │ │ │ │ +00026230: 7075 7368 2040 6d74 696d 652c 2024 6d74 push @mtime, $mt │ │ │ │ +00026240: 696d 653b 0a20 2020 207d 0a0a 2020 2020 ime;. }.. │ │ │ │ +00026250: 2320 7374 6f72 6520 696e 666f 726d 6174 # store informat │ │ │ │ +00026260: 696f 6e20 746f 2072 6573 746f 7265 2061 ion to restore a │ │ │ │ +00026270: 7469 6d65 2028 616e 6420 6d74 696d 6529 time (and mtime) │ │ │ │ +00026280: 0a20 2020 2040 7b24 7365 6c66 2d3e 7b27 . @{$self->{' │ │ │ │ +00026290: 616c 6c50 6172 616d 277d 7d20 3d20 407b allParam'}} = @{ │ │ │ │ +000262a0: 2473 656c 662d 3e7b 2770 6172 616d 277d $self->{'param'} │ │ │ │ +000262b0: 7d3b 0a20 2020 2024 7365 6c66 2d3e 7b27 };. $self->{' │ │ │ │ +000262c0: 6174 696d 6527 7d20 3d20 5c40 6174 696d atime'} = \@atim │ │ │ │ +000262d0: 653b 0a20 2020 2024 7365 6c66 2d3e 7b27 e;. $self->{' │ │ │ │ +000262e0: 6d74 696d 6527 7d20 3d20 5c40 6d74 696d mtime'} = \@mtim │ │ │ │ +000262f0: 653b 0a0a 2020 2020 2473 656c 662d 3e5f e;.. $self->_ │ │ │ │ +00026300: 7374 6172 744a 6f62 2829 3b0a 0a20 2020 startJob();.. │ │ │ │ +00026310: 2072 6574 7572 6e20 2473 656c 663b 0a7d return $self;.} │ │ │ │ +00026320: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +00026330: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026340: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +00026350: 5f73 7461 7274 4a6f 620a 7b0a 2020 2020 _startJob.{. │ │ │ │ +00026360: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ │ +00026370: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ │ +00026380: 666f 726b 277d 203d 2075 6e64 6566 3b0a fork'} = undef;. │ │ │ │ +00026390: 0a20 2020 206d 7920 2470 724c 6f67 203d . my $prLog = │ │ │ │ +000263a0: 2024 7365 6c66 2d3e 7b27 7072 4c6f 6727 $self->{'prLog' │ │ │ │ +000263b0: 7d3b 0a0a 2020 2020 646f 0a20 2020 207b };.. do. { │ │ │ │ +000263c0: 0a09 6d79 2024 6c20 3d20 303b 2020 2020 ..my $l = 0; │ │ │ │ +000263d0: 2020 2320 616b 6b75 6d75 6c69 6572 7465 # akkumulierte │ │ │ │ +000263e0: 204c c3a4 6e67 6520 6465 7220 5061 7261 L..nge der Para │ │ │ │ +000263f0: 6d74 6572 2069 6e20 4279 7465 0a09 6d79 mter in Byte..my │ │ │ │ +00026400: 2024 693b 0a09 6d79 2024 7061 7261 6d20 $i;..my $param │ │ │ │ +00026410: 3d20 2473 656c 662d 3e7b 2770 6172 616d = $self->{'param │ │ │ │ +00026420: 277d 3b20 2020 2023 2050 6f69 6e74 6572 '}; # Pointer │ │ │ │ +00026430: 2061 7566 2050 6172 616d 6574 6572 2056 auf Parameter V │ │ │ │ +00026440: 656b 746f 720a 0a09 666f 7220 2824 6920 ektor...for ($i │ │ │ │ +00026450: 3d20 3020 3b20 2469 203c 2040 2470 6172 = 0 ; $i < @$par │ │ │ │ +00026460: 616d 203b 2024 692b 2b29 0a09 7b0a 0920 am ; $i++)..{.. │ │ │ │ +00026470: 2020 206d 7920 246c 3120 3d20 3120 2b20 my $l1 = 1 + │ │ │ │ +00026480: 6c65 6e67 7468 2024 2470 6172 616d 5b24 length $$param[$ │ │ │ │ +00026490: 695d 3b20 2020 2023 2031 2042 7974 6520 i]; # 1 Byte │ │ │ │ +000264a0: 66c3 bc72 2027 5c30 2720 696e 2043 0a09 f..r '\0' in C.. │ │ │ │ +000264b0: 2020 2020 6966 2028 246c 202b 2024 6c31 if ($l + $l1 │ │ │ │ +000264c0: 203e 2024 6d61 696e 3a3a 6578 6563 5061 > $main::execPa │ │ │ │ +000264d0: 7261 6d4c 656e 6774 6829 0a09 2020 2020 ramLength).. │ │ │ │ +000264e0: 7b0a 0909 6c61 7374 3b0a 0920 2020 207d {...last;.. } │ │ │ │ +000264f0: 0a09 2020 2020 246c 202b 3d20 246c 313b .. $l += $l1; │ │ │ │ +00026500: 0a09 7d0a 0a09 6966 2028 2469 203d 3d20 ..}...if ($i == │ │ │ │ +00026510: 3029 2020 2020 2020 2320 6465 7220 6572 0) # der er │ │ │ │ +00026520: 7374 6520 7061 c39f 7420 c3bc 6265 7268 ste pa..t ..berh │ │ │ │ +00026530: 6175 7074 206e 6963 6874 2072 6569 6e0a aupt nicht rein. │ │ │ │ +00026540: 097b 2020 2020 2020 2020 2020 2020 2020 .{ │ │ │ │ +00026550: 2020 2023 2028 6973 7420 616c 6c65 696e # (ist allein │ │ │ │ +00026560: 6520 7363 686f 6e20 7a75 206c 616e 6729 e schon zu lang) │ │ │ │ +00026570: 0a09 2020 2020 6d79 2024 616b 7450 6172 .. my $aktPar │ │ │ │ +00026580: 203d 2073 6869 6674 2040 7b24 7365 6c66 = shift @{$self │ │ │ │ +00026590: 2d3e 7b27 7061 7261 6d27 7d7d 3b20 2020 ->{'param'}}; │ │ │ │ +000265a0: 2320 6572 7465 6e20 2277 6567 7765 7266 # erten "wegwerf │ │ │ │ +000265b0: 656e 220a 0920 2020 2024 7072 4c6f 672d en".. $prLog- │ │ │ │ +000265c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +000265d0: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ │ +000265e0: 7227 203d 3e20 5b22 7061 7261 6d65 7465 r' => ["paramete │ │ │ │ +000265f0: 7220 746f 206c 6f6e 673a 2063 616e 6e6f r to long: canno │ │ │ │ +00026600: 7420 6578 6563 2022 202e 0a09 0909 0920 t exec " ...... │ │ │ │ +00026610: 2020 2020 226d 6435 7375 6d20 2461 6b74 "md5sum $akt │ │ │ │ +00026620: 5061 7222 5d29 3b0a 0920 2020 2072 6574 Par"]);.. ret │ │ │ │ +00026630: 7572 6e20 6966 2040 7b24 7365 6c66 2d3e urn if @{$self-> │ │ │ │ +00026640: 7b27 7061 7261 6d27 7d7d 203d 3d20 303b {'param'}} == 0; │ │ │ │ +00026650: 0a09 7d0a 0965 6c73 6520 2020 2020 2020 ..}..else │ │ │ │ +00026660: 2020 2320 6f6b 2c20 6469 6520 6dc3 b667 # ok, die m..g │ │ │ │ +00026670: 6c69 6368 656e 2061 7573 2064 656d 2067 lichen aus dem g │ │ │ │ +00026680: 726f c39f 656e 2056 656b 746f 7220 7261 ro..en Vektor ra │ │ │ │ +00026690: 7573 686f 6c65 6e0a 097b 0a09 2020 2020 usholen..{.. │ │ │ │ +000266a0: 6d79 2028 4061 6b74 5061 7229 203d 2073 my (@aktPar) = s │ │ │ │ +000266b0: 706c 6963 6528 407b 2473 656c 662d 3e7b plice(@{$self->{ │ │ │ │ +000266c0: 2770 6172 616d 277d 7d2c 2030 2c20 2469 'param'}}, 0, $i │ │ │ │ +000266d0: 293b 0a09 2020 2020 246d 6169 6e3a 3a73 );.. $main::s │ │ │ │ +000266e0: 7461 742d 3e69 6e63 725f 6e6f 466f 726b tat->incr_noFork │ │ │ │ +000266f0: 734d 4435 2829 3b0a 0920 2020 2024 6d61 sMD5();.. $ma │ │ │ │ +00026700: 696e 3a3a 7374 6174 2d3e 6164 645f 6e6f in::stat->add_no │ │ │ │ +00026710: 4d44 3565 6446 696c 6573 2873 6361 6c61 MD5edFiles(scala │ │ │ │ +00026720: 7220 4061 6b74 5061 7229 3b0a 0920 2020 r @aktPar);.. │ │ │ │ +00026730: 2024 7365 6c66 2d3e 7b27 666f 726b 277d $self->{'fork'} │ │ │ │ +00026740: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new │ │ │ │ +00026750: 2827 2d65 7865 6327 203d 3e20 276d 6435 ('-exec' => 'md5 │ │ │ │ +00026760: 7375 6d27 2c0a 0909 0909 0920 2020 2027 sum',...... ' │ │ │ │ +00026770: 2d70 6172 616d 2720 3d3e 205b 4061 6b74 -param' => [@akt │ │ │ │ +00026780: 5061 725d 2c0a 0909 0909 0920 2020 2027 Par],...... ' │ │ │ │ +00026790: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ │ +000267a0: 672c 0a09 0909 0909 2020 2020 272d 776f g,...... '-wo │ │ │ │ +000267b0: 726b 696e 6744 6972 2720 3d3e 2027 2e27 rkingDir' => '.' │ │ │ │ +000267c0: 2c0a 0909 0909 0920 2020 2027 2d6f 7574 ,...... '-out │ │ │ │ +000267d0: 5261 6e64 6f6d 2720 3d3e 0a09 0909 0909 Random' =>...... │ │ │ │ +000267e0: 2020 2020 2473 656c 662d 3e7b 2774 6d70 $self->{'tmp │ │ │ │ +000267f0: 6469 7227 7d20 2e20 272f 666f 726b 2d6d dir'} . '/fork-m │ │ │ │ +00026800: 6435 2d27 293b 0a09 2020 2020 2320 416e d5-');.. # An │ │ │ │ +00026810: 7a61 686c 2042 7974 6573 2062 6572 6563 zahl Bytes berec │ │ │ │ +00026820: 686e 656e 0a09 2020 2020 6d79 2024 7375 hnen.. my $su │ │ │ │ +00026830: 6d20 3d20 303b 0a09 2020 2020 6d79 2024 m = 0;.. my $ │ │ │ │ +00026840: 703b 0a09 2020 2020 666f 7265 6163 6820 p;.. foreach │ │ │ │ +00026850: 2470 2028 4061 6b74 5061 7229 0a09 2020 $p (@aktPar).. │ │ │ │ +00026860: 2020 7b0a 0909 2473 756d 202b 3d20 2873 {...$sum += (s │ │ │ │ +00026870: 7461 7428 2470 2929 5b37 5d3b 0a09 2020 tat($p))[7];.. │ │ │ │ +00026880: 2020 7d0a 0920 2020 2024 6d61 696e 3a3a }.. $main:: │ │ │ │ +00026890: 7374 6174 2d3e 6164 6453 756d 4d44 3553 stat->addSumMD5S │ │ │ │ +000268a0: 756d 2824 7375 6d29 0a09 0969 6620 2824 um($sum)...if ($ │ │ │ │ +000268b0: 7375 6d29 3b0a 0920 2020 2072 6574 7572 sum);.. retur │ │ │ │ +000268c0: 6e3b 0a09 7d0a 0a20 2020 207d 2077 6869 n;..}.. } whi │ │ │ │ +000268d0: 6c65 2028 2473 656c 662d 3e7b 2766 6f72 le ($self->{'for │ │ │ │ +000268e0: 6b27 7d20 3d3d 2075 6e64 6566 293b 0a7d k'} == undef);.} │ │ │ │ +000268f0: 0a0a 0a0a 2323 2323 2323 2323 2323 2323 ....############ │ │ │ │ +00026900: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026910: 2323 2323 2323 2323 2323 2323 0a23 2072 ############.# r │ │ │ │ +00026920: 6574 7572 6e73 2031 2069 6620 7072 6f63 eturns 1 if proc │ │ │ │ +00026930: 6573 7320 7374 696c 6c20 7275 6e6e 696e ess still runnin │ │ │ │ +00026940: 670a 2320 7265 7475 726e 7320 3020 6966 g.# returns 0 if │ │ │ │ +00026950: 2070 726f 6365 7373 2069 7320 6e6f 7420 process is not │ │ │ │ +00026960: 7275 6e6e 696e 670a 7375 6220 7072 6f63 running.sub proc │ │ │ │ +00026970: 6573 7352 756e 730a 7b0a 2020 2020 6d79 essRuns.{. my │ │ │ │ +00026980: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +00026990: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self-> │ │ │ │ +000269a0: 7b27 666f 726b 277d 2920 2020 2023 2050 {'fork'}) # P │ │ │ │ +000269b0: 726f 7a65 7373 206e 6f63 6820 6e69 6368 rozess noch nich │ │ │ │ +000269c0: 7420 6175 7367 6577 6572 7465 740a 2020 t ausgewertet. │ │ │ │ +000269d0: 2020 7b0a 0969 6620 2824 7365 6c66 2d3e {..if ($self-> │ │ │ │ +000269e0: 7b27 666f 726b 277d 2d3e 7072 6f63 6573 {'fork'}->proces │ │ │ │ +000269f0: 7352 756e 7328 2929 2020 2320 4a6f 6220 sRuns()) # Job │ │ │ │ +00026a00: 6cc3 a475 6674 206e 6f63 680a 097b 0a09 l..uft noch..{.. │ │ │ │ +00026a10: 2020 2020 7265 7475 726e 2031 3b0a 097d return 1;..} │ │ │ │ +00026a20: 0a09 656c 7365 2020 2020 2020 2020 2020 ..else │ │ │ │ +00026a30: 2020 2020 2020 2020 2020 2320 4a6f 6220 # Job │ │ │ │ +00026a40: 6973 7420 6665 7274 6967 0a09 7b0a 0920 ist fertig..{.. │ │ │ │ +00026a50: 2020 2070 7573 6820 407b 2473 656c 662d push @{$self- │ │ │ │ +00026a60: 3e7b 2772 6573 756c 7453 5444 4552 5227 >{'resultSTDERR' │ │ │ │ +00026a70: 7d7d 2c20 407b 2473 656c 662d 3e7b 2766 }}, @{$self->{'f │ │ │ │ +00026a80: 6f72 6b27 7d2d 3e67 6574 5354 4445 5252 ork'}->getSTDERR │ │ │ │ +00026a90: 2829 7d3b 0a09 2020 2020 7075 7368 2040 ()};.. push @ │ │ │ │ +00026aa0: 7b24 7365 6c66 2d3e 7b27 7265 7375 6c74 {$self->{'result │ │ │ │ +00026ab0: 5354 444f 5554 277d 7d2c 2040 7b24 7365 STDOUT'}}, @{$se │ │ │ │ +00026ac0: 6c66 2d3e 7b27 666f 726b 277d 2d3e 6765 lf->{'fork'}->ge │ │ │ │ +00026ad0: 7453 5444 4f55 5428 297d 3b0a 0a09 2020 tSTDOUT()};... │ │ │ │ +00026ae0: 2020 6966 2028 407b 2473 656c 662d 3e7b if (@{$self->{ │ │ │ │ +00026af0: 2770 6172 616d 277d 7d20 3e20 3029 2020 'param'}} > 0) │ │ │ │ +00026b00: 2020 2023 206e 6f63 6820 7761 7320 c3bc # noch was .. │ │ │ │ +00026b10: 6272 6967 0a09 2020 2020 7b0a 0909 2473 brig.. {...$s │ │ │ │ +00026b20: 656c 662d 3e5f 7374 6172 744a 6f62 2829 elf->_startJob() │ │ │ │ +00026b30: 3b0a 0909 7265 7475 726e 2031 3b0a 0920 ;...return 1;.. │ │ │ │ +00026b40: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ │ +00026b50: 2020 2020 7b0a 0909 7265 7475 726e 2030 {...return 0 │ │ │ │ +00026b60: 3b20 2020 2020 2020 2020 2020 2020 2020 ; │ │ │ │ +00026b70: 2020 2020 2320 6665 7274 6967 210a 0920 # fertig!.. │ │ │ │ +00026b80: 2020 207d 0a09 7d0a 2020 2020 7d0a 2020 }..}. }. │ │ │ │ +00026b90: 2020 656c 7365 0a20 2020 207b 0a09 7265 else. {..re │ │ │ │ +00026ba0: 7475 726e 2030 3b0a 2020 2020 7d0a 7d0a turn 0;. }.}. │ │ │ │ +00026bb0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00026bc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026bd0: 2323 2323 2323 2323 2323 0a73 7562 2067 ##########.sub g │ │ │ │ +00026be0: 6574 5354 4445 5252 0a7b 0a20 2020 206d etSTDERR.{. m │ │ │ │ +00026bf0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00026c00: 0a0a 2020 2020 7265 7475 726e 2024 7365 .. return $se │ │ │ │ +00026c10: 6c66 2d3e 7b27 7265 7375 6c74 5354 4445 lf->{'resultSTDE │ │ │ │ +00026c20: 5252 277d 3b0a 7d0a 0a0a 2323 2323 2323 RR'};.}...###### │ │ │ │ +00026c30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026c50: 2323 0a73 7562 2067 6574 5354 444f 5554 ##.sub getSTDOUT │ │ │ │ +00026c60: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ │ +00026c70: 3d20 7368 6966 743b 0a0a 2020 2020 7265 = shift;.. re │ │ │ │ +00026c80: 7475 726e 2024 7365 6c66 2d3e 7b27 7265 turn $self->{'re │ │ │ │ +00026c90: 7375 6c74 5354 444f 5554 277d 3b0a 7d0a sultSTDOUT'};.}. │ │ │ │ +00026ca0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00026cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026cc0: 2323 2323 2323 2323 2323 0a73 7562 2044 ##########.sub D │ │ │ │ +00026cd0: 4553 5452 4f59 0a7b 0a20 2020 206d 7920 ESTROY.{. my │ │ │ │ +00026ce0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ │ +00026cf0: 2020 2020 6d79 2024 6174 696d 6520 3d20 my $atime = │ │ │ │ +00026d00: 2473 656c 662d 3e7b 2761 7469 6d65 277d $self->{'atime'} │ │ │ │ +00026d10: 3b0a 2020 2020 6d79 2024 6d74 696d 6520 ;. my $mtime │ │ │ │ +00026d20: 3d20 2473 656c 662d 3e7b 276d 7469 6d65 = $self->{'mtime │ │ │ │ +00026d30: 277d 3b0a 2020 2020 6d79 2024 7061 7261 '};. my $para │ │ │ │ +00026d40: 6d20 3d20 2473 656c 662d 3e7b 2761 6c6c m = $self->{'all │ │ │ │ +00026d50: 5061 7261 6d27 7d3b 0a20 2020 206d 7920 Param'};. my │ │ │ │ +00026d60: 2469 3b0a 2020 2020 666f 7220 2824 6920 $i;. for ($i │ │ │ │ +00026d70: 3d20 3020 3b20 2469 203c 2040 2470 6172 = 0 ; $i < @$par │ │ │ │ +00026d80: 616d 203b 2024 692b 2b29 0a20 2020 207b am ; $i++). { │ │ │ │ +00026d90: 0a09 7574 696d 6520 2424 6174 696d 655b ..utime $$atime[ │ │ │ │ +00026da0: 2469 5d2c 2024 246d 7469 6d65 5b24 695d $i], $$mtime[$i] │ │ │ │ +00026db0: 2c20 2424 7061 7261 6d5b 2469 5d0a 0920 , $$param[$i].. │ │ │ │ +00026dc0: 2020 2069 6620 2473 656c 662d 3e7b 2772 if $self->{'r │ │ │ │ +00026dd0: 6573 6574 4174 696d 6527 7d3b 0a20 2020 esetAtime'};. │ │ │ │ +00026de0: 207d 0a7d 0a0a 2323 2323 2323 2323 2323 }.}..########## │ │ │ │ +00026df0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026e00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00026e10: 2323 2323 2323 2323 0a70 6163 6b61 6765 ########.package │ │ │ │ +00026e20: 2053 6368 6564 756c 6572 3b0a 0a75 7365 Scheduler;..use │ │ │ │ +00026e30: 2049 4f3a 3a46 696c 653b 0a75 7365 2073 IO::File;.use s │ │ │ │ +00026e40: 7472 6963 743b 0a75 7365 2077 6172 6e69 trict;.use warni │ │ │ │ +00026e50: 6e67 733b 0a0a 7375 6220 6e65 770a 7b0a ngs;..sub new.{. │ │ │ │ +00026e60: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ │ +00026e70: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $ │ │ │ │ +00026e80: 7365 6c66 203d 207b 7d3b 0a0a 2020 2020 self = {};.. │ │ │ │ +00026e90: 6d79 2028 2570 6172 616d 7329 203d 2028 my (%params) = ( │ │ │ │ +00026ea0: 272d 616b 7446 696c 656e 616d 6527 2020 '-aktFilename' │ │ │ │ +00026eb0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +00026ec0: 2020 2020 272d 6f6c 6446 696c 656e 616d '-oldFilenam │ │ │ │ +00026ed0: 6527 2020 2020 2020 3d3e 2075 6e64 6566 e' => undef │ │ │ │ +00026ee0: 2c0a 0909 2020 2020 272d 666f 6c6c 6f77 ,... '-follow │ │ │ │ +00026ef0: 4c69 6e6b 7327 2020 2020 2020 3d3e 2075 Links' => u │ │ │ │ +00026f00: 6e64 6566 2c0a 0909 2020 2020 272d 7072 ndef,... '-pr │ │ │ │ +00026f10: 6576 4261 636b 7570 4f77 6e53 6572 6965 evBackupOwnSerie │ │ │ │ +00026f20: 7327 203d 3e20 756e 6465 662c 0a09 0920 s' => undef,... │ │ │ │ +00026f30: 2020 2027 2d72 6561 6444 6972 416e 6443 '-readDirAndC │ │ │ │ +00026f40: 6865 636b 2720 203d 3e20 756e 6465 662c heck' => undef, │ │ │ │ +00026f50: 0a09 0920 2020 2027 2d73 6574 5265 7365 ... '-setRese │ │ │ │ +00026f60: 7444 6972 5469 6d65 7327 203d 3e20 756e tDirTimes' => un │ │ │ │ +00026f70: 6465 662c 0a09 0920 2020 2027 2d70 6172 def,... '-par │ │ │ │ +00026f80: 466f 726b 436f 7079 2720 2020 2020 203d ForkCopy' = │ │ │ │ +00026f90: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00026fa0: 2d66 6966 6f43 6f70 7927 2020 2020 2020 -fifoCopy' │ │ │ │ +00026fb0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +00026fc0: 2020 2027 2d70 6172 466f 726b 436f 6d70 '-parForkComp │ │ │ │ +00026fd0: 7227 2020 2020 203d 3e20 756e 6465 662c r' => undef, │ │ │ │ +00026fe0: 0a09 0920 2020 2027 2d6e 6f43 6f6d 7072 ... '-noCompr │ │ │ │ +00026ff0: 6573 7327 2020 2020 2020 203d 3e20 756e ess' => un │ │ │ │ +00027000: 6465 662c 0a09 0920 2020 2027 2d66 6966 def,... '-fif │ │ │ │ +00027010: 6f43 6f6d 7072 2720 2020 2020 2020 203d oCompr' = │ │ │ │ +00027020: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +00027030: 2d62 6c6f 636b 4368 6563 6b53 756d 4669 -blockCheckSumFi │ │ │ │ +00027040: 6c65 273d 3e20 756e 6465 662c 0a09 0920 le'=> undef,... │ │ │ │ +00027050: 2020 2027 2d70 6172 466f 726b 426c 6f63 '-parForkBloc │ │ │ │ +00027060: 6b27 2020 2020 203d 3e20 756e 6465 662c k' => undef, │ │ │ │ +00027070: 0a09 0920 2020 2027 2d66 6966 6f42 6c6f ... '-fifoBlo │ │ │ │ +00027080: 636b 2720 2020 2020 2020 203d 3e20 756e ck' => un │ │ │ │ +00027090: 6465 662c 0a09 0920 2020 2027 2d63 6f6d def,... '-com │ │ │ │ +000270a0: 7072 6573 7327 2020 2020 2020 2020 203d press' = │ │ │ │ +000270b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ │ +000270c0: 2d6c 6174 654c 696e 6b73 2720 2020 2020 -lateLinks' │ │ │ │ +000270d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +000270e0: 2020 2027 2d6c 6174 6543 6f6d 7072 6573 '-lateCompres │ │ │ │ +000270f0: 7327 2020 2020 203d 3e20 756e 6465 662c s' => undef, │ │ │ │ +00027100: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00027110: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' │ │ │ │ +00027120: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde │ │ │ │ +00027130: 662c 0a09 0920 2020 2027 2d6c 696e 6b53 f,... '-linkS │ │ │ │ +00027140: 796d 6c69 6e6b 7327 2020 2020 203d 3e20 ymlinks' => │ │ │ │ +00027150: 756e 6465 662c 0a09 0920 2020 2027 2d73 undef,... '-s │ │ │ │ +00027160: 7570 7072 6573 7357 6172 6e69 6e67 2720 uppressWarning' │ │ │ │ +00027170: 203d 3e20 756e 6465 662c 0a20 2020 2020 => undef,. │ │ │ │ +00027180: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +00027190: 2d70 7265 7365 7276 6550 6572 6d73 2720 -preservePerms' │ │ │ │ +000271a0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +000271b0: 2020 2027 2d63 6f6d 7072 5275 6c65 2720 '-comprRule' │ │ │ │ +000271c0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +000271d0: 2020 2020 272d 706f 7374 6669 7827 2020 '-postfix' │ │ │ │ +000271e0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ │ +000271f0: 2c0a 0909 2020 2020 272d 7461 7267 6574 ,... '-target │ │ │ │ +00027200: 4469 7227 2020 2020 2020 2020 3d3e 2075 Dir' => u │ │ │ │ +00027210: 6e64 6566 2c0a 0909 2020 2020 272d 616b ndef,... '-ak │ │ │ │ +00027220: 7449 6e66 6f46 696c 6527 2020 2020 2020 tInfoFile' │ │ │ │ +00027230: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ │ +00027240: 272d 7265 7365 7441 7469 6d65 2720 2020 '-resetAtime' │ │ │ │ +00027250: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ │ +00027260: 2020 2020 272d 746d 7064 6972 2720 2020 '-tmpdir' │ │ │ │ +00027270: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ │ +00027280: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog' │ │ │ │ +00027290: 2020 2020 2020 2020 2020 2020 3d3e 2075 => u │ │ │ │ +000272a0: 6e64 6566 2c0a 0909 2020 2020 272d 6465 ndef,... '-de │ │ │ │ +000272b0: 6275 674d 6f64 6527 2020 2020 2020 2020 bugMode' │ │ │ │ +000272c0: 3d3e 2030 0a09 0920 2020 2029 3b0a 0a20 => 0... );.. │ │ │ │ +000272d0: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec │ │ │ │ +000272e0: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\%params │ │ │ │ +000272f0: 2c20 5c40 5f2c 2027 5363 6865 6475 6c65 , \@_, 'Schedule │ │ │ │ +00027300: 723a 3a6e 6577 272c 0a09 0909 205b 272d r::new',.... ['- │ │ │ │ +00027310: 616b 7446 696c 656e 616d 6527 2c20 272d aktFilename', '- │ │ │ │ +00027320: 6f6c 6446 696c 656e 616d 6527 2c20 272d oldFilename', '- │ │ │ │ +00027330: 666f 6c6c 6f77 4c69 6e6b 7327 2c0a 0909 followLinks',... │ │ │ │ +00027340: 0920 2027 2d70 7265 7642 6163 6b75 704f . '-prevBackupO │ │ │ │ +00027350: 776e 5365 7269 6573 272c 2027 2d72 6561 wnSeries', '-rea │ │ │ │ +00027360: 6444 6972 416e 6443 6865 636b 272c 0a09 dDirAndCheck',.. │ │ │ │ +00027370: 0909 2020 272d 7365 7452 6573 6574 4469 .. '-setResetDi │ │ │ │ +00027380: 7254 696d 6573 272c 2027 2d70 6172 466f rTimes', '-parFo │ │ │ │ +00027390: 726b 436f 7079 272c 2027 2d66 6966 6f43 rkCopy', '-fifoC │ │ │ │ +000273a0: 6f70 7927 2c0a 0909 0920 2027 2d70 6172 opy',.... '-par │ │ │ │ +000273b0: 466f 726b 436f 6d70 7227 2c20 272d 6669 ForkCompr', '-fi │ │ │ │ +000273c0: 666f 436f 6d70 7227 2c20 272d 7375 7070 foCompr', '-supp │ │ │ │ +000273d0: 7265 7373 5761 726e 696e 6727 2c0a 0909 ressWarning',... │ │ │ │ +000273e0: 0920 2027 2d63 6f6d 7072 5275 6c65 272c . '-comprRule', │ │ │ │ +000273f0: 2027 2d63 6f6d 7072 6573 7327 2c20 272d '-compress', '- │ │ │ │ +00027400: 706f 7374 6669 7827 2c0a 0909 0920 2027 postfix',.... ' │ │ │ │ +00027410: 2d63 6f6d 7072 6573 7327 2c20 272d 706f -compress', '-po │ │ │ │ +00027420: 7374 6669 7827 2c0a 0909 0920 2027 2d74 stfix',.... '-t │ │ │ │ +00027430: 6172 6765 7444 6972 272c 2027 2d61 6b74 argetDir', '-akt │ │ │ │ +00027440: 496e 666f 4669 6c65 272c 2027 2d72 6573 InfoFile', '-res │ │ │ │ +00027450: 6574 4174 696d 6527 2c0a 0909 0920 2027 etAtime',.... ' │ │ │ │ +00027460: 2d70 724c 6f67 272c 2027 2d6c 6174 654c -prLog', '-lateL │ │ │ │ +00027470: 696e 6b73 272c 2027 2d6c 6174 6543 6f6d inks', '-lateCom │ │ │ │ +00027480: 7072 6573 7327 5d29 3b0a 2020 2020 263a press']);. &: │ │ │ │ +00027490: 3a73 6574 5061 7261 6d73 4469 7265 6374 :setParamsDirect │ │ │ │ +000274a0: 2824 7365 6c66 2c20 5c25 7061 7261 6d73 ($self, \%params │ │ │ │ +000274b0: 293b 0a0a 2020 2020 6d79 2028 2463 6f6d );.. my ($com │ │ │ │ +000274c0: 7072 6573 7343 6f6d 6d61 6e64 2c20 406f pressCommand, @o │ │ │ │ +000274d0: 7074 696f 6e73 2920 3d20 407b 2470 6172 ptions) = @{$par │ │ │ │ +000274e0: 616d 737b 272d 636f 6d70 7265 7373 277d ams{'-compress'} │ │ │ │ +000274f0: 7d3b 0a20 2020 2024 7365 6c66 2d3e 7b27 };. $self->{' │ │ │ │ +00027500: 636f 6d70 7265 7373 436f 6d6d 616e 6427 compressCommand' │ │ │ │ +00027510: 7d20 3d20 2463 6f6d 7072 6573 7343 6f6d } = $compressCom │ │ │ │ +00027520: 6d61 6e64 3b0a 2020 2020 2473 656c 662d mand;. $self- │ │ │ │ +00027530: 3e7b 2763 6f6d 7072 6573 734f 7074 696f >{'compressOptio │ │ │ │ +00027540: 6e73 277d 203d 205c 406f 7074 696f 6e73 ns'} = \@options │ │ │ │ +00027550: 3b0a 0a20 2020 2062 6c65 7373 2024 7365 ;.. bless $se │ │ │ │ +00027560: 6c66 2c20 2463 6c61 7373 3b0a 7d0a 0a0a lf, $class;.}... │ │ │ │ +00027570: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00027580: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00027590: 2323 2323 2323 2323 0a23 2049 6465 653a ########.# Idee: │ │ │ │ +000275a0: 0a23 2020 2020 c39c 6265 7277 6163 6875 .# ..berwachu │ │ │ │ +000275b0: 6e67 2064 6572 2066 6f72 6b73 2069 6e20 ng der forks in │ │ │ │ +000275c0: 7061 7246 6f72 6b43 6f70 7920 756e 6420 parForkCopy und │ │ │ │ +000275d0: 7061 7246 6f72 6b43 6f6d 7072 0a23 2020 parForkCompr.# │ │ │ │ +000275e0: 2020 5765 6e6e 2064 6965 7365 206d 6974 Wenn diese mit │ │ │ │ +000275f0: 206e 6575 656e 2044 6174 656e 2067 6566 neuen Daten gef │ │ │ │ +00027600: c3bc 7474 6572 7420 7775 7264 656e 2c20 ..ttert wurden, │ │ │ │ +00027610: 4175 6666 c3bc 6c6c 656e 0a23 2020 2020 Auff..llen.# │ │ │ │ +00027620: 766f 6e20 6669 666f 436f 7079 2075 6e64 von fifoCopy und │ │ │ │ +00027630: 2066 6966 6f43 6f6d 7072 20c3 bc62 6572 fifoCompr ..ber │ │ │ │ +00027640: 2072 6561 6444 6972 416e 6443 6865 636b readDirAndCheck │ │ │ │ +00027650: 0a73 7562 206e 6f72 6d61 6c4f 7065 7261 .sub normalOpera │ │ │ │ +00027660: 7469 6f6e 0a7b 0a20 2020 206d 7920 2473 tion.{. my $s │ │ │ │ +00027670: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. │ │ │ │ +00027680: 2020 6d79 2024 616b 7446 696c 656e 616d my $aktFilenam │ │ │ │ +00027690: 6520 3d20 2473 656c 662d 3e7b 2761 6b74 e = $self->{'akt │ │ │ │ +000276a0: 4669 6c65 6e61 6d65 277d 3b0a 2020 2020 Filename'};. │ │ │ │ +000276b0: 6d79 2024 6f6c 6446 696c 656e 616d 6520 my $oldFilename │ │ │ │ +000276c0: 3d20 2473 656c 662d 3e7b 276f 6c64 4669 = $self->{'oldFi │ │ │ │ +000276d0: 6c65 6e61 6d65 277d 3b0a 2020 2020 6d79 lename'};. my │ │ │ │ +000276e0: 2024 666f 6c6c 6f77 4c69 6e6b 7320 3d20 $followLinks = │ │ │ │ +000276f0: 2473 656c 662d 3e7b 2766 6f6c 6c6f 774c $self->{'followL │ │ │ │ +00027700: 696e 6b73 277d 3b0a 2020 2020 6d79 2024 inks'};. my $ │ │ │ │ +00027710: 7072 6576 4261 636b 7570 4f77 6e53 6572 prevBackupOwnSer │ │ │ │ +00027720: 6965 7320 3d20 2473 656c 662d 3e7b 2770 ies = $self->{'p │ │ │ │ +00027730: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri │ │ │ │ +00027740: 6573 277d 3b0a 2020 2020 6d79 2024 7265 es'};. my $re │ │ │ │ +00027750: 6164 4469 7241 6e64 4368 6563 6b20 3d20 adDirAndCheck = │ │ │ │ +00027760: 2473 656c 662d 3e7b 2772 6561 6444 6972 $self->{'readDir │ │ │ │ +00027770: 416e 6443 6865 636b 277d 3b0a 2020 2020 AndCheck'};. │ │ │ │ +00027780: 6d79 2024 7365 7452 6573 6574 4469 7254 my $setResetDirT │ │ │ │ +00027790: 696d 6573 203d 2024 7365 6c66 2d3e 7b27 imes = $self->{' │ │ │ │ +000277a0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes │ │ │ │ +000277b0: 277d 3b0a 2020 2020 6d79 2024 7061 7246 '};. my $parF │ │ │ │ +000277c0: 6f72 6b43 6f70 7920 3d20 2473 656c 662d orkCopy = $self- │ │ │ │ +000277d0: 3e7b 2770 6172 466f 726b 436f 7079 277d >{'parForkCopy'} │ │ │ │ +000277e0: 3b0a 2020 2020 6d79 2024 6669 666f 436f ;. my $fifoCo │ │ │ │ +000277f0: 7079 203d 2024 7365 6c66 2d3e 7b27 6669 py = $self->{'fi │ │ │ │ +00027800: 666f 436f 7079 277d 3b0a 2020 2020 6d79 foCopy'};. my │ │ │ │ +00027810: 2024 7061 7246 6f72 6b43 6f6d 7072 203d $parForkCompr = │ │ │ │ +00027820: 2024 7365 6c66 2d3e 7b27 7061 7246 6f72 $self->{'parFor │ │ │ │ +00027830: 6b43 6f6d 7072 277d 3b0a 2020 2020 6d79 kCompr'};. my │ │ │ │ +00027840: 2024 6669 666f 436f 6d70 7220 3d20 2473 $fifoCompr = $s │ │ │ │ +00027850: 656c 662d 3e7b 2766 6966 6f43 6f6d 7072 elf->{'fifoCompr │ │ │ │ +00027860: 277d 3b0a 2020 2020 6d79 2024 626c 6f63 '};. my $bloc │ │ │ │ +00027870: 6b43 6865 636b 5375 6d46 696c 6520 3d20 kCheckSumFile = │ │ │ │ +00027880: 2473 656c 662d 3e7b 2762 6c6f 636b 4368 $self->{'blockCh │ │ │ │ +00027890: 6563 6b53 756d 4669 6c65 277d 3b0a 2020 eckSumFile'};. │ │ │ │ +000278a0: 2020 6d79 2024 7061 7246 6f72 6b42 6c6f my $parForkBlo │ │ │ │ +000278b0: 636b 203d 2024 7365 6c66 2d3e 7b27 7061 ck = $self->{'pa │ │ │ │ +000278c0: 7246 6f72 6b42 6c6f 636b 277d 3b0a 2020 rForkBlock'};. │ │ │ │ +000278d0: 2020 6d79 2024 6669 666f 426c 6f63 6b20 my $fifoBlock │ │ │ │ +000278e0: 3d20 2473 656c 662d 3e7b 2766 6966 6f42 = $self->{'fifoB │ │ │ │ +000278f0: 6c6f 636b 277d 3b0a 2020 2020 6d79 2024 lock'};. my $ │ │ │ │ +00027900: 636f 6d70 7265 7373 203d 206a 6f69 6e28 compress = join( │ │ │ │ +00027910: 2720 272c 2040 7b24 7365 6c66 2d3e 7b27 ' ', @{$self->{' │ │ │ │ +00027920: 636f 6d70 7265 7373 277d 7d29 3b0a 2020 compress'}});. │ │ │ │ +00027930: 2020 6d79 2024 636f 6d70 7265 7373 436f my $compressCo │ │ │ │ +00027940: 6d6d 616e 6420 3d20 2473 656c 662d 3e7b mmand = $self->{ │ │ │ │ +00027950: 2763 6f6d 7072 6573 7343 6f6d 6d61 6e64 'compressCommand │ │ │ │ +00027960: 277d 3b0a 2020 2020 6d79 2024 636f 6d70 '};. my $comp │ │ │ │ +00027970: 7265 7373 4f70 7469 6f6e 7320 3d20 2473 ressOptions = $s │ │ │ │ +00027980: 656c 662d 3e7b 2763 6f6d 7072 6573 734f elf->{'compressO │ │ │ │ +00027990: 7074 696f 6e73 277d 3b0a 2020 2020 6d79 ptions'};. my │ │ │ │ +000279a0: 2024 706f 7374 6669 7820 3d20 2473 656c $postfix = $sel │ │ │ │ +000279b0: 662d 3e7b 2770 6f73 7466 6978 277d 3b0a f->{'postfix'};. │ │ │ │ +000279c0: 2020 2020 6d79 2024 636f 6d70 7252 756c my $comprRul │ │ │ │ +000279d0: 6520 3d20 2473 656c 662d 3e7b 2763 6f6d e = $self->{'com │ │ │ │ +000279e0: 7072 5275 6c65 277d 3b0a 2020 2020 6d79 prRule'};. my │ │ │ │ +000279f0: 2024 7461 7267 6574 4469 7220 3d20 2473 $targetDir = $s │ │ │ │ +00027a00: 656c 662d 3e7b 2774 6172 6765 7444 6972 elf->{'targetDir │ │ │ │ +00027a10: 277d 3b0a 2020 2020 6d79 2024 616b 7449 '};. my $aktI │ │ │ │ +00027a20: 6e66 6f46 696c 6520 3d20 2473 656c 662d nfoFile = $self- │ │ │ │ +00027a30: 3e7b 2761 6b74 496e 666f 4669 6c65 277d >{'aktInfoFile'} │ │ │ │ +00027a40: 3b0a 2020 2020 6d79 2024 7265 7365 7441 ;. my $resetA │ │ │ │ +00027a50: 7469 6d65 203d 2024 7365 6c66 2d3e 7b27 time = $self->{' │ │ │ │ +00027a60: 7265 7365 7441 7469 6d65 277d 3b0a 2020 resetAtime'};. │ │ │ │ +00027a70: 2020 6d79 2024 746d 7064 6972 203d 2024 my $tmpdir = $ │ │ │ │ +00027a80: 7365 6c66 2d3e 7b27 746d 7064 6972 277d self->{'tmpdir'} │ │ │ │ +00027a90: 3b0a 2020 2020 6d79 2024 7072 4c6f 6720 ;. my $prLog │ │ │ │ +00027aa0: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog │ │ │ │ +00027ab0: 277d 3b0a 2020 2020 6d79 2024 6465 6275 '};. my $debu │ │ │ │ +00027ac0: 674d 6f64 6520 3d20 2473 656c 662d 3e7b gMode = $self->{ │ │ │ │ +00027ad0: 2764 6562 7567 4d6f 6465 277d 3b0a 2020 'debugMode'};. │ │ │ │ +00027ae0: 2020 6d79 2024 676e 7563 7020 3d20 2473 my $gnucp = $s │ │ │ │ +00027af0: 656c 662d 3e7b 2763 7049 7347 6e75 277d elf->{'cpIsGnu'} │ │ │ │ +00027b00: 3b0a 2020 2020 6d79 2024 6c69 6e6b 5379 ;. my $linkSy │ │ │ │ +00027b10: 6d6c 696e 6b73 203d 2024 7365 6c66 2d3e mlinks = $self-> │ │ │ │ +00027b20: 7b27 6c69 6e6b 5379 6d6c 696e 6b73 277d {'linkSymlinks'} │ │ │ │ +00027b30: 3b0a 2020 2020 6d79 2024 6c61 7465 436f ;. my $lateCo │ │ │ │ +00027b40: 6d70 7265 7373 203d 2024 7365 6c66 2d3e mpress = $self-> │ │ │ │ +00027b50: 7b27 6c61 7465 436f 6d70 7265 7373 277d {'lateCompress'} │ │ │ │ +00027b60: 3b0a 2020 2020 6d79 2024 6c61 7465 4c69 ;. my $lateLi │ │ │ │ +00027b70: 6e6b 7320 3d20 2473 656c 662d 3e7b 276c nks = $self->{'l │ │ │ │ +00027b80: 6174 654c 696e 6b73 277d 3b0a 2020 2020 ateLinks'};. │ │ │ │ +00027b90: 6d79 2024 7375 7070 7265 7373 5761 726e my $suppressWarn │ │ │ │ +00027ba0: 696e 6720 3d20 2473 656c 662d 3e7b 2773 ing = $self->{'s │ │ │ │ +00027bb0: 7570 7072 6573 7357 6172 6e69 6e67 277d uppressWarning'} │ │ │ │ +00027bc0: 3b0a 0a20 2020 2023 2053 6963 6865 7265 ;.. # Sichere │ │ │ │ +00027bd0: 2050 6572 6d69 7373 696f 6e73 2073 6574 Permissions set │ │ │ │ +00027be0: 7a65 6e0a 2020 2020 756d 6173 6b28 3030 zen. umask(00 │ │ │ │ +00027bf0: 3737 293b 0a0a 2020 2020 6d79 2028 2561 77);.. my (%a │ │ │ │ +00027c00: 6c6c 4261 636b 7570 4469 7273 2920 3d20 llBackupDirs) = │ │ │ │ +00027c10: 2829 3b0a 200a 2020 2020 6d79 2024 6c61 ();. . my $la │ │ │ │ +00027c20: 7465 4c69 6e6b 4669 6c65 203d 2022 2474 teLinkFile = "$t │ │ │ │ +00027c30: 6172 6765 7444 6972 2f2e 7374 6f72 6542 argetDir/.storeB │ │ │ │ +00027c40: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF │ │ │ │ +00027c50: 696c 652e 627a 3222 3b0a 2020 2020 6d79 ile.bz2";. my │ │ │ │ +00027c60: 2024 7772 4c61 7465 4c69 6e6b 3b0a 0a20 $wrLateLink;.. │ │ │ │ +00027c70: 2020 2069 6620 2824 6c61 7465 4c69 6e6b if ($lateLink │ │ │ │ +00027c80: 7329 0a20 2020 207b 0a09 6d79 2024 7320 s). {..my $s │ │ │ │ +00027c90: 3d20 246c 6174 6543 6f6d 7072 6573 7320 = $lateCompress │ │ │ │ +00027ca0: 3f0a 0920 2020 2022 6c61 7465 4c69 6e6b ?.. "lateLink │ │ │ │ +00027cb0: 7320 616e 6420 6c61 7465 436f 6d70 7265 s and lateCompre │ │ │ │ +00027cc0: 7373 2061 7265 2220 3a20 226c 6174 654c ss are" : "lateL │ │ │ │ +00027cd0: 696e 6b73 2069 7322 3b0a 0924 7072 4c6f inks is";..$prLo │ │ │ │ +00027ce0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00027cf0: 203d 3e20 2749 272c 0a09 0920 2020 2020 => 'I',... │ │ │ │ +00027d00: 2027 2d73 7472 2720 3d3e 205b 2224 7320 '-str' => ["$s │ │ │ │ +00027d10: 7377 6974 6368 6564 206f 6e22 5d29 3b0a switched on"]);. │ │ │ │ +00027d20: 0a09 2477 724c 6174 654c 696e 6b20 3d20 ..$wrLateLink = │ │ │ │ +00027d30: 7069 7065 546f 466f 726b 2d3e 6e65 7728 pipeToFork->new( │ │ │ │ +00027d40: 272d 6578 6563 2720 3d3e 2027 627a 6970 '-exec' => 'bzip │ │ │ │ +00027d50: 3227 2c0a 0909 0909 2020 2020 2020 272d 2',..... '- │ │ │ │ +00027d60: 7374 646f 7574 2720 3d3e 2024 6c61 7465 stdout' => $late │ │ │ │ +00027d70: 4c69 6e6b 4669 6c65 2c0a 0909 0909 2020 LinkFile,..... │ │ │ │ +00027d80: 2020 2020 272d 6f75 7452 616e 646f 6d27 '-outRandom' │ │ │ │ +00027d90: 203d 3e20 272f 746d 702f 7374 6275 5069 => '/tmp/stbuPi │ │ │ │ +00027da0: 7065 546f 3132 2d27 2c0a 0909 0909 2020 peTo12-',..... │ │ │ │ +00027db0: 2020 2020 272d 6465 6c53 7464 6f75 7427 '-delStdout' │ │ │ │ +00027dc0: 203d 3e20 276e 6f27 2c0a 0909 0909 2020 => 'no',..... │ │ │ │ +00027dd0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ │ +00027de0: 2470 724c 6f67 293b 0a0a 0924 7772 4c61 $prLog);...$wrLa │ │ │ │ +00027df0: 7465 4c69 6e6b 2d3e 7072 696e 7428 2223 teLink->print("# │ │ │ │ +00027e00: 206c 696e 6b20 6d64 3573 756d 5c6e 235c link md5sum\n#\ │ │ │ │ +00027e10: 7465 7869 7374 696e 6746 696c 655c 6e23 texistingFile\n# │ │ │ │ +00027e20: 5c74 6e65 774c 696e 6b5c 6e22 2c0a 0909 \tnewLink\n",... │ │ │ │ +00027e30: 2020 2022 2320 636f 6d70 7265 7373 206d "# compress m │ │ │ │ +00027e40: 6435 7375 6d5c 6e23 5c74 6669 6c65 546f d5sum\n#\tfileTo │ │ │ │ +00027e50: 436f 6d70 7265 7373 5c6e 2320 6469 7220 Compress\n# dir │ │ │ │ +00027e60: 6469 724e 616d 655c 6e22 2c0a 0909 2020 dirName\n",... │ │ │ │ +00027e70: 2022 2320 7379 6d6c 696e 6b20 6669 6c65 "# symlink file │ │ │ │ +00027e80: 5c6e 235c 7474 6172 6765 745c 6e22 2c0a \n#\ttarget\n",. │ │ │ │ +00027e90: 0909 2020 2022 2320 6c69 6e6b 5379 6d6c .. "# linkSyml │ │ │ │ +00027ea0: 696e 6b20 6c69 6e6b 5c6e 235c 7465 7869 ink link\n#\texi │ │ │ │ +00027eb0: 7374 696e 6746 696c 655c 6e23 5c74 6e65 stingFile\n#\tne │ │ │ │ +00027ec0: 774c 696e 6b5c 6e22 293b 0a20 2020 207d wLink\n");. } │ │ │ │ +00027ed0: 0a0a 2020 2020 6d79 2024 7072 6573 6572 .. my $preser │ │ │ │ +00027ee0: 7665 5065 726d 7320 3d20 2473 656c 662d vePerms = $self- │ │ │ │ +00027ef0: 3e7b 2770 7265 7365 7276 6550 6572 6d73 >{'preservePerms │ │ │ │ +00027f00: 277d 3b0a 0a20 2020 206d 7920 2466 696c '};.. my $fil │ │ │ │ +00027f10: 6573 4c65 6674 203d 2031 3b0a 2020 2020 esLeft = 1;. │ │ │ │ +00027f20: 6d79 2028 2569 6e50 726f 6772 6573 7329 my (%inProgress) │ │ │ │ +00027f30: 203d 2028 293b 2023 2024 696e 5072 6f67 = (); # $inProg │ │ │ │ +00027f40: 7265 7373 7b24 6d64 357d 203d 205b 5b24 ress{$md5} = [[$ │ │ │ │ +00027f50: 6469 722c 2024 6669 6c65 2c20 246d 6435 dir, $file, $md5 │ │ │ │ +00027f60: 2c20 2474 7970 6573 5d2c 0a20 2020 2020 , $types],. │ │ │ │ +00027f70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00027f80: 2020 2020 2020 2320 2020 2020 2020 2020 # │ │ │ │ +00027f90: 2020 2020 2020 2020 2020 2020 205b 2464 [$d │ │ │ │ +00027fa0: 6972 2c20 2466 696c 652c 2024 6d64 352c ir, $file, $md5, │ │ │ │ +00027fb0: 2024 7479 7065 735d 2c0a 2020 2020 2020 $types],. │ │ │ │ +00027fc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00027fd0: 2020 2020 2023 2020 2020 2020 2020 2020 # │ │ │ │ +00027fe0: 2020 2020 2020 2020 2020 2020 5b24 6469 [$di │ │ │ │ +00027ff0: 722c 2024 6669 6c65 2c20 246d 6435 2c20 r, $file, $md5, │ │ │ │ +00028000: 2474 7970 6573 5d5d 0a20 2020 2020 2020 $types]]. │ │ │ │ +00028010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00028020: 2020 2020 2320 5075 6666 6572 2066 c3bc # Puffer f.. │ │ │ │ +00028030: 7220 4461 7465 6965 6e2c 2064 6965 2067 r Dateien, die g │ │ │ │ +00028040: 6572 6164 6520 6b6f 6d70 7269 6d69 6572 erade komprimier │ │ │ │ +00028050: 7420 6f64 6572 0a20 2020 2020 2020 2020 t oder. │ │ │ │ +00028060: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00028070: 2020 2320 6b6f 7069 6572 7420 7765 7264 # kopiert werd │ │ │ │ +00028080: 656e 2e20 2469 6e50 726f 6772 6573 737b en. $inProgress{ │ │ │ │ +00028090: 246d 6435 7d20 3d20 5b5d 2062 6564 6575 $md5} = [] bedeu │ │ │ │ +000280a0: 7465 742c 0a20 2020 2020 2020 2020 2020 tet,. │ │ │ │ +000280b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000280c0: 2320 6461 c39f 2065 696e 6520 4461 7465 # da.. eine Date │ │ │ │ +000280d0: 6920 6d69 7420 6465 7220 6d64 352d 5375 i mit der md5-Su │ │ │ │ +000280e0: 6d6d 6520 696e 2042 6561 7262 6569 7475 mme in Bearbeitu │ │ │ │ +000280f0: 6e67 0a20 2020 2020 2020 2020 2020 2020 ng. │ │ │ │ +00028100: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +00028110: 6973 742c 2061 6265 7220 6b65 696e 6520 ist, aber keine │ │ │ │ +00028120: 676c 6569 6368 6172 7469 6765 6e20 696e gleichartigen in │ │ │ │ +00028130: 2064 6572 2053 6368 6c61 6e67 6520 7369 der Schlange si │ │ │ │ +00028140: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. │ │ │ │ +00028150: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +00028160: 2d3e 2056 6172 6961 626c 6520 6973 7420 -> Variable ist │ │ │ │ +00028170: 4d65 726b 6572 202b 2050 7566 6665 7220 Merker + Puffer │ │ │ │ +00028180: 7a75 676c 6569 6368 0a0a 2020 2020 6d79 zugleich.. my │ │ │ │ +00028190: 2024 676e 7543 6f70 7920 3d20 2763 7027 $gnuCopy = 'cp' │ │ │ │ +000281a0: 3b0a 2020 2020 6d79 2028 4067 6e75 436f ;. my (@gnuCo │ │ │ │ +000281b0: 7079 5061 7229 203d 2028 272d 6127 293b pyPar) = ('-a'); │ │ │ │ +000281c0: 0a0a 2020 2020 6d79 2024 626c 6f63 6b50 .. my $blockP │ │ │ │ +000281d0: 6172 616c 6c65 6c20 3d20 303b 2020 2320 arallel = 0; # │ │ │ │ +000281e0: 626c 6f63 6b2a 2066 696c 6573 2061 7265 block* files are │ │ │ │ +000281f0: 206e 6f74 2072 6561 6420 696e 2070 6172 not read in par │ │ │ │ +00028200: 616c 6c65 6c20 746f 206f 7468 6572 730a allel to others. │ │ │ │ +00028210: 0a20 2020 2023 206d 6169 6e20 6c6f 6f70 . # main loop │ │ │ │ +00028220: 0a20 2020 2077 6869 6c65 2028 2466 696c . while ($fil │ │ │ │ +00028230: 6573 4c65 6674 206f 720a 2020 2020 2020 esLeft or. │ │ │ │ +00028240: 2020 2020 2024 6669 666f 436f 7079 2d3e $fifoCopy-> │ │ │ │ +00028250: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries │ │ │ │ +00028260: 2829 203e 2030 206f 720a 2020 2020 2020 () > 0 or. │ │ │ │ +00028270: 2020 2020 2024 6669 666f 436f 6d70 722d $fifoCompr- │ │ │ │ +00028280: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie │ │ │ │ +00028290: 7328 2920 3e20 3020 6f72 0a09 2020 2024 s() > 0 or.. $ │ │ │ │ +000282a0: 6669 666f 426c 6f63 6b2d 3e67 6574 4e6f fifoBlock->getNo │ │ │ │ +000282b0: 5573 6564 456e 7472 6965 7328 2920 3e20 UsedEntries() > │ │ │ │ +000282c0: 3020 6f72 0a20 2020 2020 2020 2020 2020 0 or. │ │ │ │ +000282d0: 2470 6172 466f 726b 436f 7079 2d3e 6765 $parForkCopy->ge │ │ │ │ +000282e0: 744e 6f55 7365 6445 6e74 7269 6573 2829 tNoUsedEntries() │ │ │ │ +000282f0: 203e 2030 206f 720a 2020 2020 2020 2020 > 0 or. │ │ │ │ +00028300: 2020 2024 7061 7246 6f72 6b43 6f6d 7072 $parForkCompr │ │ │ │ +00028310: 2d3e 6765 744e 6f55 7365 6445 6e74 7269 ->getNoUsedEntri │ │ │ │ +00028320: 6573 2829 203e 2030 206f 720a 0920 2020 es() > 0 or.. │ │ │ │ +00028330: 2470 6172 466f 726b 426c 6f63 6b2d 3e67 $parForkBlock->g │ │ │ │ +00028340: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries( │ │ │ │ +00028350: 2920 3e20 3029 0a20 2020 207b 0a62 6567 ) > 0). {.beg │ │ │ │ +00028360: 696e 4d61 696e 4c6f 6f70 4e6f 726d 616c inMainLoopNormal │ │ │ │ +00028370: 4f70 6572 6174 696f 6e3a 3b0a 0a09 2320 Operation:;...# │ │ │ │ +00028380: 5761 7274 6573 6368 6c61 6e67 656e 2066 Warteschlangen f │ │ │ │ +00028390: c3bc 6c6c 656e 2073 6f6c 616e 6765 2050 ..llen solange P │ │ │ │ +000283a0: 6c61 747a 2069 7374 2075 6e64 2062 6973 latz ist und bis │ │ │ │ +000283b0: 2065 696e 2046 6f72 6b0a 2020 2020 2020 ein Fork. │ │ │ │ +000283c0: 2020 2320 6265 656e 6465 7420 6973 7420 # beendet ist │ │ │ │ +000283d0: 6f64 6572 2065 696e 206e 6575 6572 2067 oder ein neuer g │ │ │ │ +000283e0: 6573 7461 7274 6574 2077 6572 6465 6e20 estartet werden │ │ │ │ +000283f0: 6b61 6e6e 2e0a 0977 6869 6c65 2028 2466 kann...while ($f │ │ │ │ +00028400: 696c 6573 4c65 6674 2061 6e64 0a20 2020 ilesLeft and. │ │ │ │ +00028410: 2020 2020 2020 2020 2020 2020 2466 6966 $fif │ │ │ │ +00028420: 6f43 6f70 792d 3e67 6574 4e6f 4672 6565 oCopy->getNoFree │ │ │ │ +00028430: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an │ │ │ │ +00028440: 640a 2020 2020 2020 2020 2020 2020 2020 d. │ │ │ │ +00028450: 2024 6669 666f 436f 6d70 722d 3e67 6574 $fifoCompr->get │ │ │ │ +00028460: 4e6f 4672 6565 456e 7472 6965 7328 2920 NoFreeEntries() │ │ │ │ +00028470: 3e20 3020 616e 640a 0920 2020 2020 2020 > 0 and.. │ │ │ │ +00028480: 2466 6966 6f42 6c6f 636b 2d3e 6765 744e $fifoBlock->getN │ │ │ │ +00028490: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() > │ │ │ │ +000284a0: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. │ │ │ │ +000284b0: 2020 2020 2020 6e6f 7420 2470 6172 466f not $parFo │ │ │ │ +000284c0: 726b 436f 7079 2d3e 6a6f 6246 696e 6973 rkCopy->jobFinis │ │ │ │ +000284d0: 6865 6428 2920 616e 640a 2020 2020 2020 hed() and. │ │ │ │ +000284e0: 2020 2020 2020 2020 206e 6f74 2024 7061 not $pa │ │ │ │ +000284f0: 7246 6f72 6b43 6f6d 7072 2d3e 6a6f 6246 rForkCompr->jobF │ │ │ │ +00028500: 696e 6973 6865 6428 2920 616e 640a 0920 inished() and.. │ │ │ │ +00028510: 2020 2020 2020 6e6f 7420 2470 6172 466f not $parFo │ │ │ │ +00028520: 726b 426c 6f63 6b2d 3e6a 6f62 4669 6e69 rkBlock->jobFini │ │ │ │ +00028530: 7368 6564 2829 2061 6e64 0a20 2020 2020 shed() and. │ │ │ │ +00028540: 2020 2020 2020 2020 2020 6e6f 7420 2824 not ($ │ │ │ │ +00028550: 7061 7246 6f72 6b43 6f6d 7072 2d3e 6765 parForkCompr->ge │ │ │ │ +00028560: 744e 6f46 7265 6545 6e74 7269 6573 2829 tNoFreeEntries() │ │ │ │ +00028570: 203e 2030 2061 6e64 0a20 2020 2020 2020 > 0 and. │ │ │ │ +00028580: 2020 2020 2020 2020 2020 2020 2024 6669 $fi │ │ │ │ +00028590: 666f 436f 6d70 722d 3e67 6574 4e6f 5573 foCompr->getNoUs │ │ │ │ +000285a0: 6564 456e 7472 6965 7328 2920 3e20 3029 edEntries() > 0) │ │ │ │ +000285b0: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ │ +000285c0: 2020 2020 6e6f 7420 2824 7061 7246 6f72 not ($parFor │ │ │ │ +000285d0: 6b43 6f70 792d 3e67 6574 4e6f 4672 6565 kCopy->getNoFree │ │ │ │ +000285e0: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an │ │ │ │ +000285f0: 640a 2020 2020 2020 2020 2020 2020 2020 d. │ │ │ │ +00028600: 2020 2020 2020 2466 6966 6f43 6f70 792d $fifoCopy- │ │ │ │ +00028610: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie │ │ │ │ +00028620: 7328 2920 3e20 3029 2061 6e64 0a09 2020 s() > 0) and.. │ │ │ │ +00028630: 2020 2020 206e 6f74 2028 2470 6172 466f not ($parFo │ │ │ │ +00028640: 726b 426c 6f63 6b2d 3e67 6574 4e6f 4672 rkBlock->getNoFr │ │ │ │ +00028650: 6565 456e 7472 6965 7328 2920 3e20 3020 eeEntries() > 0 │ │ │ │ +00028660: 616e 640a 0909 2020 2020 2466 6966 6f42 and... $fifoB │ │ │ │ +00028670: 6c6f 636b 2d3e 6765 744e 6f55 7365 6445 lock->getNoUsedE │ │ │ │ +00028680: 6e74 7269 6573 2829 203e 2030 2929 0a20 ntries() > 0)). │ │ │ │ +00028690: 2020 2020 2020 207b 0a09 2020 2020 6d79 {.. my │ │ │ │ +000286a0: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $ │ │ │ │ +000286b0: 6d64 352c 2024 7479 7065 293b 0a09 2020 md5, $type);.. │ │ │ │ +000286c0: 2020 6d79 2024 6e20 3d20 2824 6469 722c my $n = ($dir, │ │ │ │ +000286d0: 2024 6669 6c65 2c20 246d 6435 2c20 2474 $file, $md5, $t │ │ │ │ +000286e0: 7970 6529 203d 0a09 0924 7265 6164 4469 ype) =...$readDi │ │ │ │ +000286f0: 7241 6e64 4368 6563 6b2d 3e6e 6578 7428 rAndCheck->next( │ │ │ │ +00028700: 293b 0a0a 0920 2020 2069 6620 2824 6e20 );... if ($n │ │ │ │ +00028710: 3d3d 2030 2920 2020 2020 2020 2020 2320 == 0) # │ │ │ │ +00028720: 6e69 7820 6d65 6872 207a 7520 686f 6c65 nix mehr zu hole │ │ │ │ +00028730: 6e21 0a09 2020 2020 7b0a 0909 2466 696c n!.. {...$fil │ │ │ │ +00028740: 6573 4c65 6674 203d 2030 3b0a 0909 6c61 esLeft = 0;...la │ │ │ │ +00028750: 7374 3b0a 0920 2020 207d 0a0a 0920 2020 st;.. }... │ │ │ │ +00028760: 206c 6173 7420 6966 2028 2474 7970 6520 last if ($type │ │ │ │ +00028770: 6571 2027 7265 7065 6174 2729 3b20 2320 eq 'repeat'); # │ │ │ │ +00028780: 4d44 3553 756d 206c c3a4 7566 7420 6e6f MD5Sum l..uft no │ │ │ │ +00028790: 6368 0a0a 2370 7269 6e74 2022 2d30 2d20 ch..#print "-0- │ │ │ │ +000287a0: 2464 6972 2f24 6669 6c65 202d 2074 7970 $dir/$file - typ │ │ │ │ +000287b0: 6520 2474 7970 655c 6e22 3b0a 0920 2020 e $type\n";.. │ │ │ │ +000287c0: 2069 6620 2824 6669 6c65 203d 7e20 2f5c if ($file =~ /\ │ │ │ │ +000287d0: 6e2f 2061 6e64 0a09 096e 6f74 2065 7869 n/ and...not exi │ │ │ │ +000287e0: 7374 7320 2473 7570 7072 6573 7357 6172 sts $suppressWar │ │ │ │ +000287f0: 6e69 6e67 7b27 6669 6c65 4e61 6d65 5769 ning{'fileNameWi │ │ │ │ +00028800: 7468 4c69 6e65 4665 6564 277d 290a 0920 thLineFeed'}).. │ │ │ │ +00028810: 2020 207b 0a09 096d 7920 2466 203d 2024 {...my $f = $ │ │ │ │ +00028820: 6669 6c65 3b0a 0909 2466 203d 7e20 732f file;...$f =~ s/ │ │ │ │ +00028830: 5c6e 2f5c 5c6e 2f67 3b0a 0909 2470 724c \n/\\n/g;...$prL │ │ │ │ +00028840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00028850: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... │ │ │ │ +00028860: 2020 2027 2d73 7472 2720 3d3e 205b 223c '-str' => ["< │ │ │ │ +00028870: 2464 6972 2f24 663e 2068 6173 205c 5c6e $dir/$f> has \\n │ │ │ │ +00028880: 2069 6e20 7468 6520 6669 6c65 206e 616d in the file nam │ │ │ │ +00028890: 6522 5d29 0a09 2020 2020 7d0a 0a20 2020 e"]).. }.. │ │ │ │ +000288a0: 2020 2020 2020 2020 2023 204f 6b2c 2077 # Ok, w │ │ │ │ +000288b0: 6972 2068 6162 656e 2077 6173 207a 7520 ir haben was zu │ │ │ │ +000288c0: 6265 6172 6265 6974 656e 0a20 2020 2020 bearbeiten. │ │ │ │ +000288d0: 2020 2020 2020 2024 6d61 696e 3a3a 7469 $main::ti │ │ │ │ +000288e0: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler- │ │ │ │ +000288f0: 3e72 6573 6574 2829 3b0a 0a09 2020 2020 >reset();... │ │ │ │ +00028900: 2320 5265 6368 7465 2065 7463 2e20 6465 # Rechte etc. de │ │ │ │ +00028910: 7220 4f72 6967 696e 616c 6461 7465 6920 r Originaldatei │ │ │ │ +00028920: 6c65 7365 6e0a 0920 2020 206d 7920 2824 lesen.. my ($ │ │ │ │ +00028930: 6465 762c 2024 696e 6f64 652c 2024 6d6f dev, $inode, $mo │ │ │ │ +00028940: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, │ │ │ │ +00028950: 2473 697a 652c 2024 6174 696d 652c 0a09 $size, $atime,.. │ │ │ │ +00028960: 0924 6d74 696d 652c 2024 6374 696d 6529 .$mtime, $ctime) │ │ │ │ +00028970: 3b0a 0920 2020 206d 7920 245f 6465 7074 ;.. my $_dept │ │ │ │ +00028980: 6820 3d20 2d31 3b0a 0a09 2020 2020 6966 h = -1;... if │ │ │ │ +00028990: 2028 6e6f 7420 2d6c 2022 2464 6972 2f24 (not -l "$dir/$ │ │ │ │ +000289a0: 6669 6c65 2220 616e 6420 6e6f 7420 2d65 file" and not -e │ │ │ │ +000289b0: 2022 2464 6972 2f24 6669 6c65 2229 0a09 "$dir/$file").. │ │ │ │ +000289c0: 2020 2020 7b0a 0909 2470 724c 6f67 2d3e {...$prLog-> │ │ │ │ +000289d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +000289e0: 2027 5727 2c0a 0909 0920 2020 2020 2027 'W',.... ' │ │ │ │ +000289f0: 2d73 7472 2720 3d3e 205b 223c 2464 6972 -str' => ["<$dir │ │ │ │ +00028a00: 2f24 6669 6c65 3e20 7265 6d6f 7665 6420 /$file> removed │ │ │ │ +00028a10: 6475 7269 6e67 2062 6163 6b75 7022 5d29 during backup"]) │ │ │ │ +00028a20: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. } │ │ │ │ +00028a30: 0a0a 0920 2020 2028 2464 6576 2c20 2469 ... ($dev, $i │ │ │ │ +00028a40: 6e6f 6465 2c20 246d 6f64 652c 2024 7569 node, $mode, $ui │ │ │ │ +00028a50: 642c 2024 6769 642c 2024 7369 7a65 2c20 d, $gid, $size, │ │ │ │ +00028a60: 2461 7469 6d65 2c0a 0920 2020 2020 246d $atime,.. $m │ │ │ │ +00028a70: 7469 6d65 2c20 2463 7469 6d65 2920 3d0a time, $ctime) =. │ │ │ │ +00028a80: 0909 2028 7374 6174 2822 2464 6972 2f24 .. (stat("$dir/$ │ │ │ │ +00028a90: 6669 6c65 2229 295b 302c 312c 322c 342c file"))[0,1,2,4, │ │ │ │ +00028aa0: 352c 372c 382c 392c 3130 5d3b 0a0a 0920 5,7,8,9,10];... │ │ │ │ +00028ab0: 2020 2069 6620 2824 7479 7065 2065 7120 if ($type eq │ │ │ │ +00028ac0: 2764 2729 0a09 2020 2020 7b0a 0909 6d79 'd').. {...my │ │ │ │ +00028ad0: 2028 4064 756d 6d79 293b 0a09 0924 5f64 (@dummy);...$_d │ │ │ │ +00028ae0: 6570 7468 203d 2028 4064 756d 6d79 2920 epth = (@dummy) │ │ │ │ +00028af0: 3d20 2466 696c 6520 3d7e 206d 232f 2367 = $file =~ m#/#g │ │ │ │ +00028b00: 3b0a 0909 6966 2028 245f 6465 7074 6820 ;...if ($_depth │ │ │ │ +00028b10: 2b20 3120 3c3d 2024 666f 6c6c 6f77 4c69 + 1 <= $followLi │ │ │ │ +00028b20: 6e6b 7320 616e 640a 0909 2020 2020 2d6c nks and... -l │ │ │ │ +00028b30: 2022 2464 6972 2f24 6669 6c65 2229 0a09 "$dir/$file").. │ │ │ │ +00028b40: 097b 0a09 0920 2020 2024 5f64 6570 7468 .{... $_depth │ │ │ │ +00028b50: 203d 2031 3b0a 0909 7d0a 0909 656c 7365 = 1;...}...else │ │ │ │ +00028b60: 0a09 097b 0a09 0920 2020 2024 5f64 6570 ...{... $_dep │ │ │ │ +00028b70: 7468 203d 202d 313b 0a09 097d 0a09 2020 th = -1;...}.. │ │ │ │ +00028b80: 2020 7d0a 0920 2020 2069 6620 2824 5f64 }.. if ($_d │ │ │ │ +00028b90: 6570 7468 203d 3d20 2d31 290a 0920 2020 epth == -1).. │ │ │ │ +00028ba0: 207b 0a09 0928 2464 6576 2c20 2469 6e6f {...($dev, $ino │ │ │ │ +00028bb0: 6465 2c20 246d 6f64 652c 2024 7569 642c de, $mode, $uid, │ │ │ │ +00028bc0: 2024 6769 642c 2024 7369 7a65 2c20 2461 $gid, $size, $a │ │ │ │ +00028bd0: 7469 6d65 2c0a 0909 2024 6d74 696d 652c time,... $mtime, │ │ │ │ +00028be0: 2024 6374 696d 6529 203d 0a09 0920 2020 $ctime) =... │ │ │ │ +00028bf0: 2020 286c 7374 6174 2822 2464 6972 2f24 (lstat("$dir/$ │ │ │ │ +00028c00: 6669 6c65 2229 295b 302c 312c 322c 342c file"))[0,1,2,4, │ │ │ │ +00028c10: 352c 372c 382c 392c 3130 5d3b 0a09 2020 5,7,8,9,10];.. │ │ │ │ +00028c20: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ │ +00028c30: 6966 2028 6e6f 7420 6465 6669 6e65 6420 if (not defined │ │ │ │ +00028c40: 2464 6576 290a 0920 2020 207b 0a09 0924 $dev).. {...$ │ │ │ │ +00028c50: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00028c60: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ │ +00028c70: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00028c80: 5b22 6361 6e6e 6f74 2073 7461 7420 3c24 ["cannot stat <$ │ │ │ │ +00028c90: 6669 6c65 3e3a 2024 2122 5d29 3b0a 2020 file>: $!"]);. │ │ │ │ +00028ca0: 2020 2020 2020 2020 2020 2020 2020 6e65 ne │ │ │ │ +00028cb0: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. │ │ │ │ +00028cc0: 7d0a 2020 2020 2020 2020 2020 2020 246d }. $m │ │ │ │ +00028cd0: 6f64 6520 263d 2030 3737 3737 3b0a 0a09 ode &= 07777;... │ │ │ │ +00028ce0: 2020 2020 6966 2028 2466 696c 6520 6571 if ($file eq │ │ │ │ +00028cf0: 2024 616b 7449 6e66 6f46 696c 6520 6f72 $aktInfoFile or │ │ │ │ +00028d00: 2024 6669 6c65 2065 7120 2224 616b 7449 $file eq "$aktI │ │ │ │ +00028d10: 6e66 6f46 696c 652e 627a 3222 290a 0920 nfoFile.bz2").. │ │ │ │ +00028d20: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ │ +00028d30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00028d40: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ │ +00028d50: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ │ +00028d60: 2068 616e 646c 6520 3c24 6669 6c65 3e2c handle <$file>, │ │ │ │ +00028d70: 2022 202e 0a09 0909 0909 2022 636f 6c6c " ....... "coll │ │ │ │ +00028d80: 6973 696f 6e20 7769 7468 2069 6e66 6f20 ision with info │ │ │ │ +00028d90: 6669 6c65 225d 293b 0a09 096e 6578 743b file"]);...next; │ │ │ │ +00028da0: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if │ │ │ │ +00028db0: 2028 2474 7970 6520 6571 2027 6427 2920 ($type eq 'd') │ │ │ │ +00028dc0: 2020 2020 2020 2020 2020 2023 2064 6972 # dir │ │ │ │ +00028dd0: 6563 746f 7279 2061 6e6c 6567 656e 0a09 ectory anlegen.. │ │ │ │ +00028de0: 2020 2020 7b0a 0909 6966 2028 246c 6174 {...if ($lat │ │ │ │ +00028df0: 654c 696e 6b73 290a 0909 7b0a 0909 2020 eLinks)...{... │ │ │ │ +00028e00: 2020 6d79 2024 6c61 7465 4469 7220 3d20 my $lateDir = │ │ │ │ +00028e10: 2466 696c 653b 0a09 0920 2020 2024 6c61 $file;... $la │ │ │ │ +00028e20: 7465 4469 7220 3d7e 2073 2f5c 6e2f 5c30 teDir =~ s/\n/\0 │ │ │ │ +00028e30: 2f6f 673b 0a09 0920 2020 2024 7772 4c61 /og;... $wrLa │ │ │ │ +00028e40: 7465 4c69 6e6b 2d3e 7072 696e 7428 2264 teLink->print("d │ │ │ │ +00028e50: 6972 2024 6c61 7465 4469 725c 6e22 293b ir $lateDir\n"); │ │ │ │ +00028e60: 0a09 097d 0a09 0965 6c73 650a 0909 7b0a ...}...else...{. │ │ │ │ +00028e70: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +00028e80: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00028e90: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str' │ │ │ │ +00028ea0: 203d 3e0a 0909 0909 2020 5b22 6361 6e6e =>..... ["cann │ │ │ │ +00028eb0: 6f74 2063 7265 6174 6520 6469 7265 6374 ot create direct │ │ │ │ +00028ec0: 6f72 7920 3c24 7461 7267 6574 4469 722f ory <$targetDir/ │ │ │ │ +00028ed0: 2466 696c 653e 225d 2c0a 0909 0909 2020 $file>"],..... │ │ │ │ +00028ee0: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)... │ │ │ │ +00028ef0: 0975 6e6c 6573 7320 6d6b 6469 7220 2224 .unless mkdir "$ │ │ │ │ +00028f00: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ │ +00028f10: 2c20 3037 3030 3b0a 0a09 0920 2020 2069 , 0700;.... i │ │ │ │ +00028f20: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm │ │ │ │ +00028f30: 7329 0a09 0920 2020 207b 0a09 0909 6368 s)... {....ch │ │ │ │ +00028f40: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ │ +00028f50: 2224 7461 7267 6574 4469 722f 2466 696c "$targetDir/$fil │ │ │ │ +00028f60: 6522 3b0a 0909 0924 7365 7452 6573 6574 e";....$setReset │ │ │ │ +00028f70: 4469 7254 696d 6573 2d3e 6164 6444 6972 DirTimes->addDir │ │ │ │ +00028f80: 2824 6669 6c65 2c20 2461 7469 6d65 2c20 ($file, $atime, │ │ │ │ +00028f90: 246d 7469 6d65 2c20 246d 6f64 6529 3b0a $mtime, $mode);. │ │ │ │ +00028fa0: 0909 2020 2020 7d0a 0909 2020 2020 2470 .. }... $p │ │ │ │ +00028fb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00028fc0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',..... │ │ │ │ +00028fd0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ │ +00028fe0: 2020 5b22 6372 6561 7465 6420 6469 7265 ["created dire │ │ │ │ +00028ff0: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi │ │ │ │ +00029000: 722f 2466 696c 6522 5d29 0a09 0909 6966 r/$file"])....if │ │ │ │ +00029010: 2028 2464 6562 7567 4d6f 6465 203e 2030 ($debugMode > 0 │ │ │ │ +00029020: 293b 0a09 097d 0a0a 0909 246d 6169 6e3a );...}....$main: │ │ │ │ +00029030: 3a73 7461 742d 3e69 6e63 725f 6e6f 4469 :stat->incr_noDi │ │ │ │ +00029040: 7273 2824 7569 642c 2024 6769 6429 3b0a rs($uid, $gid);. │ │ │ │ +00029050: 0a09 0924 616b 7446 696c 656e 616d 652d ...$aktFilename- │ │ │ │ +00029060: 3e73 746f 7265 4469 7228 272d 6469 7227 >storeDir('-dir' │ │ │ │ +00029070: 203d 3e20 2466 696c 652c 0a09 0909 0920 => $file,..... │ │ │ │ +00029080: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => │ │ │ │ +00029090: 2464 6576 2c0a 0909 0909 2020 2020 2020 $dev,..... │ │ │ │ +000290a0: 2027 2d69 6e6f 6465 2720 3d3e 2024 696e '-inode' => $in │ │ │ │ +000290b0: 6f64 652c 0a09 0909 0920 2020 2020 2020 ode,..... │ │ │ │ +000290c0: 272d 6374 696d 6527 203d 3e20 2463 7469 '-ctime' => $cti │ │ │ │ +000290d0: 6d65 2c0a 0909 0909 2020 2020 2020 2027 me,..... ' │ │ │ │ +000290e0: 2d6d 7469 6d65 2720 3d3e 2024 6d74 696d -mtime' => $mtim │ │ │ │ +000290f0: 652c 0a09 0909 0920 2020 2020 2020 272d e,..... '- │ │ │ │ +00029100: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime │ │ │ │ +00029110: 2c0a 0909 0909 2020 2020 2020 2027 2d75 ,..... '-u │ │ │ │ +00029120: 6964 2720 3d3e 2024 7569 642c 0a09 0909 id' => $uid,.... │ │ │ │ +00029130: 0920 2020 2020 2020 272d 6769 6427 203d . '-gid' = │ │ │ │ +00029140: 3e20 2467 6964 2c0a 0909 0909 2020 2020 > $gid,..... │ │ │ │ +00029150: 2020 2027 2d6d 6f64 6527 203d 3e20 246d '-mode' => $m │ │ │ │ +00029160: 6f64 6529 3b0a 0909 6e65 7874 3b0a 0920 ode);...next;.. │ │ │ │ +00029170: 2020 207d 0a0a 0920 2020 2069 6620 2824 }... if ($ │ │ │ │ +00029180: 7479 7065 2065 7120 276c 2729 2020 2020 type eq 'l') │ │ │ │ +00029190: 2020 2020 2020 2020 2320 7379 6d62 6f6c # symbol │ │ │ │ +000291a0: 6963 206c 696e 6b0a 0920 2020 207b 0a09 ic link.. {.. │ │ │ │ +000291b0: 096d 7920 246c 203d 2072 6561 646c 696e .my $l = readlin │ │ │ │ +000291c0: 6b20 2224 6469 722f 2466 696c 6522 3b0a k "$dir/$file";. │ │ │ │ +000291d0: 0a09 0969 6620 2824 6c69 6e6b 5379 6d6c ...if ($linkSyml │ │ │ │ +000291e0: 696e 6b73 290a 0909 7b0a 0909 2020 2020 inks)...{... │ │ │ │ +000291f0: 6966 2028 2470 7265 7642 6163 6b75 704f if ($prevBackupO │ │ │ │ +00029200: 776e 5365 7269 6573 2061 6e64 0a09 0909 wnSeries and.... │ │ │ │ +00029210: 2d6c 2022 2470 7265 7642 6163 6b75 704f -l "$prevBackupO │ │ │ │ +00029220: 776e 5365 7269 6573 2f24 6669 6c65 2229 wnSeries/$file") │ │ │ │ +00029230: 0a09 0920 2020 207b 0a09 0909 6d79 2024 ... {....my $ │ │ │ │ +00029240: 6c5f 7072 6576 203d 2072 6561 646c 696e l_prev = readlin │ │ │ │ +00029250: 6b20 2224 7072 6576 4261 636b 7570 4f77 k "$prevBackupOw │ │ │ │ +00029260: 6e53 6572 6965 732f 2466 696c 6522 3b0a nSeries/$file";. │ │ │ │ +00029270: 0a09 0909 6966 2028 246c 2065 7120 246c ....if ($l eq $l │ │ │ │ +00029280: 5f70 7265 7629 0a09 0909 7b0a 0909 0920 _prev)....{.... │ │ │ │ +00029290: 2020 2069 6620 2824 6c61 7465 4c69 6e6b if ($lateLink │ │ │ │ +000292a0: 7329 0a09 0909 2020 2020 7b0a 0909 0909 s).... {..... │ │ │ │ +000292b0: 6d79 2024 5f6f 6c64 203d 2022 2470 7265 my $_old = "$pre │ │ │ │ +000292c0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries │ │ │ │ +000292d0: 2f24 6669 6c65 223b 0a09 0909 0924 5f6f /$file";.....$_o │ │ │ │ +000292e0: 6c64 203d 203a 3a72 656c 5061 7468 2824 ld = ::relPath($ │ │ │ │ +000292f0: 7461 7267 6574 4469 722c 2024 5f6f 6c64 targetDir, $_old │ │ │ │ +00029300: 293b 0a09 0909 0924 5f6f 6c64 203d 7e20 );.....$_old =~ │ │ │ │ +00029310: 732f 5c6e 2f5c 302f 6f67 3b0a 0909 0909 s/\n/\0/og;..... │ │ │ │ +00029320: 6d79 2024 5f6e 6577 203d 2024 6669 6c65 my $_new = $file │ │ │ │ +00029330: 3b0a 0909 0909 245f 6e65 7720 3d7e 2073 ;.....$_new =~ s │ │ │ │ +00029340: 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 0924 /\n/\0/og;.....$ │ │ │ │ +00029350: 7772 4c61 7465 4c69 6e6b 2d3e 7072 696e wrLateLink->prin │ │ │ │ +00029360: 7428 0a09 0909 0920 2020 2022 6c69 6e6b t(..... "link │ │ │ │ +00029370: 5379 6d6c 696e 6b20 246c 5c6e 245f 6f6c Symlink $l\n$_ol │ │ │ │ +00029380: 645c 6e24 5f6e 6577 5c6e 2229 3b0a 0909 d\n$_new\n");... │ │ │ │ +00029390: 0909 2673 746f 7265 5379 6d4c 696e 6b49 ..&storeSymLinkI │ │ │ │ +000293a0: 6e66 6f73 2824 7569 642c 2024 6769 642c nfos($uid, $gid, │ │ │ │ +000293b0: 2024 7461 7267 6574 4469 722c 0a09 0909 $targetDir,.... │ │ │ │ +000293c0: 0909 0920 2020 2466 696c 652c 2024 6465 ... $file, $de │ │ │ │ +000293d0: 762c 2024 696e 6f64 652c 0a09 0909 0909 v, $inode,...... │ │ │ │ +000293e0: 0920 2020 2463 7469 6d65 2c20 246d 7469 . $ctime, $mti │ │ │ │ +000293f0: 6d65 2c20 2461 7469 6d65 2c0a 0909 0909 me, $atime,..... │ │ │ │ +00029400: 0909 2020 2024 616b 7446 696c 656e 616d .. $aktFilenam │ │ │ │ +00029410: 652c 2024 6465 6275 674d 6f64 652c 0a09 e, $debugMode,.. │ │ │ │ +00029420: 0909 0909 0920 2020 2470 724c 6f67 293b ..... $prLog); │ │ │ │ +00029430: 0a09 0909 096e 6578 743b 0a09 0909 2020 .....next;.... │ │ │ │ +00029440: 2020 7d0a 0909 0920 2020 2024 7072 4c6f }.... $prLo │ │ │ │ +00029450: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00029460: 203d 3e20 2744 272c 0a09 0909 0909 2020 => 'D',...... │ │ │ │ +00029470: 272d 7374 7227 203d 3e0a 0909 0909 0920 '-str' =>...... │ │ │ │ +00029480: 205b 226c 696e 6b20 2470 7265 7642 6163 ["link $prevBac │ │ │ │ +00029490: 6b75 704f 776e 5365 7269 6573 2f24 6669 kupOwnSeries/$fi │ │ │ │ +000294a0: 6c65 2220 2e0a 0909 0909 0920 2022 2474 le" ....... "$t │ │ │ │ +000294b0: 6172 6765 7444 6972 2f24 6669 6c65 225d argetDir/$file"] │ │ │ │ +000294c0: 290a 0909 0909 6966 2024 6465 6275 674d ).....if $debugM │ │ │ │ +000294d0: 6f64 6520 3e3d 2032 3b0a 0909 0920 2020 ode >= 2;.... │ │ │ │ +000294e0: 2069 6620 286c 696e 6b20 2224 7072 6576 if (link "$prev │ │ │ │ +000294f0: 4261 636b 7570 4f77 6e53 6572 6965 732f BackupOwnSeries/ │ │ │ │ +00029500: 2466 696c 6522 2c0a 0909 0909 2224 7461 $file",....."$ta │ │ │ │ +00029510: 7267 6574 4469 722f 2466 696c 6522 290a rgetDir/$file"). │ │ │ │ +00029520: 0909 0920 2020 207b 0a09 0909 0926 6368 ... {.....&ch │ │ │ │ +00029530: 616e 6765 5379 6d6c 696e 6b50 6572 6d73 angeSymlinkPerms │ │ │ │ +00029540: 2824 7569 642c 2024 6769 642c 2024 7461 ($uid, $gid, $ta │ │ │ │ +00029550: 7267 6574 4469 722c 0a09 0909 0909 0920 rgetDir,....... │ │ │ │ +00029560: 2020 2024 6669 6c65 2c20 2474 6d70 6469 $file, $tmpdi │ │ │ │ +00029570: 722c 2024 7072 4c6f 6729 0a09 0909 0920 r, $prLog)..... │ │ │ │ +00029580: 2020 2069 6620 2824 7072 6573 6572 7665 if ($preserve │ │ │ │ +00029590: 5065 726d 7329 3b0a 0909 0909 2673 746f Perms);.....&sto │ │ │ │ +000295a0: 7265 5379 6d4c 696e 6b49 6e66 6f73 2824 reSymLinkInfos($ │ │ │ │ +000295b0: 7569 642c 2024 6769 642c 2024 7461 7267 uid, $gid, $targ │ │ │ │ +000295c0: 6574 4469 722c 0a09 0909 0909 0920 2020 etDir,....... │ │ │ │ +000295d0: 2466 696c 652c 2024 6465 762c 2024 696e $file, $dev, $in │ │ │ │ +000295e0: 6f64 652c 0a09 0909 0909 0920 2020 2463 ode,....... $c │ │ │ │ +000295f0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a │ │ │ │ +00029600: 7469 6d65 2c0a 0909 0909 0909 2020 2024 time,....... $ │ │ │ │ +00029610: 616b 7446 696c 656e 616d 652c 2024 6465 aktFilename, $de │ │ │ │ +00029620: 6275 674d 6f64 652c 0a09 0909 0909 0920 bugMode,....... │ │ │ │ +00029630: 2020 2470 724c 6f67 293b 0a09 0909 096e $prLog);.....n │ │ │ │ +00029640: 6578 743b 0a0a 0909 0920 2020 207d 0a09 ext;..... }.. │ │ │ │ +00029650: 0909 7d0a 0909 2020 2020 7d0a 0909 7d0a ..}... }...}. │ │ │ │ +00029660: 0909 6966 2028 246c 6174 654c 696e 6b73 ..if ($lateLinks │ │ │ │ +00029670: 290a 0909 7b0a 0909 2020 2020 6d79 2024 )...{... my $ │ │ │ │ +00029680: 5f66 696c 6520 3d20 2224 6669 6c65 223b _file = "$file"; │ │ │ │ +00029690: 0a09 0920 2020 2024 5f66 696c 6520 3d7e ... $_file =~ │ │ │ │ +000296a0: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0920 s/\n/\0/og;... │ │ │ │ +000296b0: 2020 206d 7920 245f 6c20 3d20 246c 3b0a my $_l = $l;. │ │ │ │ +000296c0: 0909 2020 2020 246c 203d 7e20 732f 5c6e .. $l =~ s/\n │ │ │ │ +000296d0: 2f5c 302f 6f67 3b0a 0909 2020 2020 2477 /\0/og;... $w │ │ │ │ +000296e0: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print │ │ │ │ +000296f0: 2822 7379 6d6c 696e 6b20 245f 6669 6c65 ("symlink $_file │ │ │ │ +00029700: 5c6e 246c 5c6e 2229 3b0a 0909 7d0a 0909 \n$l\n");...}... │ │ │ │ +00029710: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $ │ │ │ │ +00029720: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00029730: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +00029740: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => ["c │ │ │ │ +00029750: 616e 6e6f 7420 6372 6561 7465 2073 796d annot create sym │ │ │ │ +00029760: 6c69 6e6b 2066 726f 6d20 2220 2e0a 0909 link from " .... │ │ │ │ +00029770: 0909 0920 2020 2020 223c 2474 6172 6765 ... "<$targe │ │ │ │ +00029780: 7444 6972 2f24 6669 6c65 3e20 2d3e 2024 tDir/$file> -> $ │ │ │ │ +00029790: 6c22 5d2c 0a09 0909 0920 2027 2d65 7869 l"],..... '-exi │ │ │ │ +000297a0: 7427 203d 3e20 3129 0a09 0909 756e 6c65 t' => 1)....unle │ │ │ │ +000297b0: 7373 2073 796d 6c69 6e6b 2024 6c2c 2022 ss symlink $l, " │ │ │ │ +000297c0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +000297d0: 223b 0a0a 0909 2020 2020 6966 2028 2470 ";.... if ($p │ │ │ │ +000297e0: 7265 7365 7276 6550 6572 6d73 290a 0909 reservePerms)... │ │ │ │ +000297f0: 2020 2020 7b0a 0909 0926 6368 616e 6765 {....&change │ │ │ │ +00029800: 5379 6d6c 696e 6b50 6572 6d73 2824 7569 SymlinkPerms($ui │ │ │ │ +00029810: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target │ │ │ │ +00029820: 4469 722c 0a09 0909 2020 2020 2466 696c Dir,.... $fil │ │ │ │ +00029830: 652c 2024 746d 7064 6972 2c20 2470 724c e, $tmpdir, $prL │ │ │ │ +00029840: 6f67 293b 0a09 0920 2020 207d 0a09 097d og);... }...} │ │ │ │ +00029850: 0a0a 0909 2673 746f 7265 5379 6d4c 696e ....&storeSymLin │ │ │ │ +00029860: 6b49 6e66 6f73 2824 7569 642c 2024 6769 kInfos($uid, $gi │ │ │ │ +00029870: 642c 2024 7461 7267 6574 4469 722c 2024 d, $targetDir, $ │ │ │ │ +00029880: 6669 6c65 2c20 2464 6576 2c0a 0909 0909 file, $dev,..... │ │ │ │ +00029890: 2020 2024 696e 6f64 652c 2024 6374 696d $inode, $ctim │ │ │ │ +000298a0: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim │ │ │ │ +000298b0: 652c 0a09 0909 0920 2020 2461 6b74 4669 e,..... $aktFi │ │ │ │ +000298c0: 6c65 6e61 6d65 2c20 2464 6562 7567 4d6f lename, $debugMo │ │ │ │ +000298d0: 6465 2c20 2470 724c 6f67 293b 0a09 096e de, $prLog);...n │ │ │ │ +000298e0: 6578 743b 0a09 2020 2020 7d0a 0a09 2020 ext;.. }... │ │ │ │ +000298f0: 2020 6966 2028 2474 7970 6520 6571 2027 if ($type eq ' │ │ │ │ +00029900: 7027 290a 0920 2020 207b 0a09 096d 7920 p').. {...my │ │ │ │ +00029910: 2824 6374 696d 652c 2024 6d74 696d 652c ($ctime, $mtime, │ │ │ │ +00029920: 2024 6174 696d 6529 203d 0a09 0920 2020 $atime) =... │ │ │ │ +00029930: 2028 7374 6174 2822 2464 6972 2f24 6669 (stat("$dir/$fi │ │ │ │ +00029940: 6c65 2229 295b 3130 2c20 392c 2038 5d3b le"))[10, 9, 8]; │ │ │ │ +00029950: 0a0a 0909 263a 3a6d 616b 6546 696c 6550 ....&::makeFileP │ │ │ │ +00029960: 6174 6828 2224 7461 7267 6574 4469 722f ath("$targetDir/ │ │ │ │ +00029970: 2466 696c 6522 2c20 2470 724c 6f67 2920 $file", $prLog) │ │ │ │ +00029980: 6966 2024 6c61 7465 4c69 6e6b 733b 0a0a if $lateLinks;.. │ │ │ │ +00029990: 0909 6d79 2024 6d6b 6e6f 6420 3d20 666f ..my $mknod = fo │ │ │ │ +000299a0: 726b 5072 6f63 2d3e 6e65 7728 272d 6578 rkProc->new('-ex │ │ │ │ +000299b0: 6563 2720 3d3e 2027 6d6b 6e6f 6427 2c0a ec' => 'mknod',. │ │ │ │ +000299c0: 0909 0909 0920 2027 2d70 6172 616d 2720 ..... '-param' │ │ │ │ +000299d0: 3d3e 205b 2224 7461 7267 6574 4469 722f => ["$targetDir/ │ │ │ │ +000299e0: 2466 696c 6522 2c20 2770 275d 2c0a 0909 $file", 'p'],... │ │ │ │ +000299f0: 0909 0920 2027 2d6f 7574 5261 6e64 6f6d ... '-outRandom │ │ │ │ +00029a00: 2720 3d3e 2022 2474 6d70 6469 722f 6d6b ' => "$tmpdir/mk │ │ │ │ +00029a10: 6e6f 642d 222c 0a09 0909 0909 2020 272d nod-",...... '- │ │ │ │ +00029a20: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ │ +00029a30: 293b 0a09 0924 6d6b 6e6f 642d 3e77 6169 );...$mknod->wai │ │ │ │ +00029a40: 7428 293b 0a09 096d 7920 246f 7574 203d t();...my $out = │ │ │ │ +00029a50: 2024 6d6b 6e6f 642d 3e67 6574 5354 444f $mknod->getSTDO │ │ │ │ +00029a60: 5554 2829 3b0a 0909 2470 724c 6f67 2d3e UT();...$prLog-> │ │ │ │ +00029a70: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00029a80: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... ' │ │ │ │ +00029a90: 2d73 7472 2720 3d3e 0a09 0909 2020 2020 -str' =>.... │ │ │ │ +00029aa0: 2020 5b22 5354 444f 5554 206f 6620 3c6d ["STDOUT of :", @$ou │ │ │ │ +00029ad0: 745d 290a 0909 2020 2020 6966 2028 4024 t])... if (@$ │ │ │ │ +00029ae0: 6f75 7420 3e20 3029 3b0a 0909 246f 7574 out > 0);...$out │ │ │ │ +00029af0: 203d 2024 6d6b 6e6f 642d 3e67 6574 5354 = $mknod->getST │ │ │ │ +00029b00: 4445 5252 2829 3b0a 0909 2470 724c 6f67 DERR();...$prLog │ │ │ │ +00029b10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00029b20: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ │ +00029b30: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... │ │ │ │ +00029b40: 2020 2020 5b22 5354 4445 5252 206f 6620 ["STDERR of │ │ │ │ +00029b50: 3c6d 6b6e 6f64 2024 7461 7267 6574 4469 :", @$o │ │ │ │ +00029b70: 7574 5d29 0a09 0920 2020 2069 6620 2840 ut])... if (@ │ │ │ │ +00029b80: 246f 7574 203e 2030 293b 0a0a 0909 6966 $out > 0);....if │ │ │ │ +00029b90: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms │ │ │ │ +00029ba0: 290a 0909 7b0a 0909 2020 2020 6368 6f77 )...{... chow │ │ │ │ +00029bb0: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, "$ │ │ │ │ +00029bc0: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ │ +00029bd0: 3b0a 0909 2020 2020 6368 6d6f 6420 246d ;... chmod $m │ │ │ │ +00029be0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, "$targetDir │ │ │ │ +00029bf0: 2f24 6669 6c65 223b 0a09 0920 2020 2075 /$file";... u │ │ │ │ +00029c00: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt │ │ │ │ +00029c10: 696d 652c 2022 2464 6972 2f24 6669 6c65 ime, "$dir/$file │ │ │ │ +00029c20: 2220 6966 2024 7265 7365 7441 7469 6d65 " if $resetAtime │ │ │ │ +00029c30: 3b3b 0a09 0920 2020 2075 7469 6d65 2024 ;;... utime $ │ │ │ │ +00029c40: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, " │ │ │ │ +00029c50: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +00029c60: 223b 0a09 097d 0a09 0924 6d61 696e 3a3a ";...}...$main:: │ │ │ │ +00029c70: 7374 6174 2d3e 696e 6372 5f6e 6f4e 616d stat->incr_noNam │ │ │ │ +00029c80: 6564 5069 7065 7328 2475 6964 2c20 2467 edPipes($uid, $g │ │ │ │ +00029c90: 6964 293b 0a09 0924 7072 4c6f 672d 3e70 id);...$prLog->p │ │ │ │ +00029ca0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00029cb0: 2744 272c 0a09 0909 2020 2020 2020 272d 'D',.... '- │ │ │ │ +00029cc0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ │ +00029cd0: 205b 2263 7265 6174 6564 206e 616d 6564 ["created named │ │ │ │ +00029ce0: 2070 6970 6520 3c24 7461 7267 6574 4469 pipe <$targetDi │ │ │ │ +00029cf0: 722f 2466 696c 6522 5d29 0a09 0920 2020 r/$file"])... │ │ │ │ +00029d00: 2069 6620 2824 6465 6275 674d 6f64 6520 if ($debugMode │ │ │ │ +00029d10: 3e3d 2032 293b 0a09 0924 616b 7446 696c >= 2);...$aktFil │ │ │ │ +00029d20: 656e 616d 652d 3e73 746f 7265 4e61 6d65 ename->storeName │ │ │ │ +00029d30: 6450 6970 6528 272d 7069 7065 2720 3d3e dPipe('-pipe' => │ │ │ │ +00029d40: 2024 6669 6c65 2c0a 0909 0909 0920 2020 $file,...... │ │ │ │ +00029d50: 2020 272d 6465 7627 203d 3e20 2464 6576 '-dev' => $dev │ │ │ │ +00029d60: 2c0a 0909 0909 0920 2020 2020 272d 696e ,...... '-in │ │ │ │ +00029d70: 6f64 6527 203d 3e20 2469 6e6f 6465 2c0a ode' => $inode,. │ │ │ │ +00029d80: 0909 0909 0920 2020 2020 272d 6374 696d ..... '-ctim │ │ │ │ +00029d90: 6527 203d 3e20 2463 7469 6d65 2c0a 0909 e' => $ctime,... │ │ │ │ +00029da0: 0909 0920 2020 2020 272d 6d74 696d 6527 ... '-mtime' │ │ │ │ +00029db0: 203d 3e20 246d 7469 6d65 2c0a 0909 0909 => $mtime,..... │ │ │ │ +00029dc0: 0920 2020 2020 272d 6174 696d 6527 203d . '-atime' = │ │ │ │ +00029dd0: 3e20 2461 7469 6d65 2c0a 0909 0909 0920 > $atime,...... │ │ │ │ +00029de0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u │ │ │ │ +00029df0: 6964 2c0a 0909 0909 0920 2020 2020 272d id,...... '- │ │ │ │ +00029e00: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,... │ │ │ │ +00029e10: 0909 0920 2020 2020 272d 6d6f 6465 2720 ... '-mode' │ │ │ │ +00029e20: 3d3e 2024 6d6f 6465 293b 0a09 096e 6578 => $mode);...nex │ │ │ │ +00029e30: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... │ │ │ │ +00029e40: 6966 2028 2474 7970 6520 6571 2027 5327 if ($type eq 'S' │ │ │ │ +00029e50: 206f 720a 2020 2020 2020 2020 2020 2020 or. │ │ │ │ +00029e60: 2020 2020 2474 7970 6520 6571 2027 6227 $type eq 'b' │ │ │ │ +00029e70: 206f 720a 2020 2020 2020 2020 2020 2020 or. │ │ │ │ +00029e80: 2020 2020 2474 7970 6520 6571 2027 6327 $type eq 'c' │ │ │ │ +00029e90: 290a 0920 2020 207b 0a20 2020 2020 2020 ).. {. │ │ │ │ +00029ea0: 2020 2020 2020 2020 2024 676e 7563 7020 $gnucp │ │ │ │ +00029eb0: 6f72 0a09 0920 2020 2024 7072 4c6f 672d or... $prLog- │ │ │ │ +00029ec0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00029ed0: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s │ │ │ │ +00029ee0: 7472 2720 3d3e 0a09 0909 0920 205b 226e tr' =>..... ["n │ │ │ │ +00029ef0: 6f20 676e 7563 703a 2069 6e74 6572 6e61 o gnucp: interna │ │ │ │ +00029f00: 6c20 6572 726f 723a 2022 202e 0a09 0909 l error: " ..... │ │ │ │ +00029f10: 0920 2020 2263 616e 6e6f 7420 7361 7665 . "cannot save │ │ │ │ +00029f20: 2066 696c 6520 7479 6573 2053 6263 7022 file tyes Sbcp" │ │ │ │ +00029f30: 5d2c 0a09 0909 0920 2027 2d65 7869 7427 ],..... '-exit' │ │ │ │ +00029f40: 203d 3e20 3129 3b0a 0a09 0926 3a3a 6d61 => 1);....&::ma │ │ │ │ +00029f50: 6b65 4669 6c65 5061 7468 2822 2474 6172 keFilePath("$tar │ │ │ │ +00029f60: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file", $ │ │ │ │ +00029f70: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL │ │ │ │ +00029f80: 696e 6b73 3b0a 0a09 096d 7920 2463 7020 inks;....my $cp │ │ │ │ +00029f90: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new( │ │ │ │ +00029fa0: 272d 6578 6563 2720 3d3e 2024 676e 7543 '-exec' => $gnuC │ │ │ │ +00029fb0: 6f70 792c 0a20 2020 2020 2020 2020 2020 opy,. │ │ │ │ +00029fc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00029fd0: 2020 2020 2020 2020 2020 2020 272d 7061 '-pa │ │ │ │ +00029fe0: 7261 6d27 203d 3e20 5b40 676e 7543 6f70 ram' => [@gnuCop │ │ │ │ +00029ff0: 7950 6172 2c20 2224 6469 722f 2466 696c yPar, "$dir/$fil │ │ │ │ +0002a000: 6522 2c0a 0909 0909 0920 2020 2020 2020 e",...... │ │ │ │ +0002a010: 2020 2020 2022 2474 6172 6765 7444 6972 "$targetDir │ │ │ │ +0002a020: 2f24 6669 6c65 225d 2c0a 2020 2020 2020 /$file"],. │ │ │ │ +0002a030: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a050: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ │ +0002a060: 2022 2474 6d70 6469 722f 676e 7563 702d "$tmpdir/gnucp- │ │ │ │ +0002a070: 222c 0a20 2020 2020 2020 2020 2020 2020 ",. │ │ │ │ +0002a080: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a090: 2020 2020 2020 2020 2020 272d 7072 4c6f '-prLo │ │ │ │ +0002a0a0: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ │ +0002a0b0: 0924 6370 2d3e 7761 6974 2829 3b0a 0909 .$cp->wait();... │ │ │ │ +0002a0c0: 6d79 2024 6f75 7420 3d20 2463 702d 3e67 my $out = $cp->g │ │ │ │ +0002a0d0: 6574 5354 444f 5554 2829 3b0a 0909 2470 etSTDOUT();...$p │ │ │ │ +0002a0e0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +0002a0f0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +0002a100: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>.. │ │ │ │ +0002a110: 0909 2020 2020 2020 5b22 5354 444f 5554 .. ["STDOUT │ │ │ │ +0002a120: 206f 6620 3c24 676e 7543 6f70 7920 4067 of <$gnuCopy @g │ │ │ │ +0002a130: 6e75 436f 7079 5061 7220 3c24 6469 722f nuCopyPar <$dir/ │ │ │ │ +0002a140: 2466 696c 653e 2022 202e 0a09 0909 2020 $file> " ..... │ │ │ │ +0002a150: 2020 2020 2022 3c24 7461 7267 6574 4469 "<$targetDi │ │ │ │ +0002a160: 722f 2466 696c 653e 3a22 2c20 4024 6f75 r/$file>:", @$ou │ │ │ │ +0002a170: 745d 290a 0909 2020 2020 6966 2028 4024 t])... if (@$ │ │ │ │ +0002a180: 6f75 7420 3e20 3029 3b0a 0909 246f 7574 out > 0);...$out │ │ │ │ +0002a190: 203d 2024 6370 2d3e 6765 7453 5444 4552 = $cp->getSTDER │ │ │ │ +0002a1a0: 5228 293b 0a09 0924 7072 4c6f 672d 3e70 R();...$prLog->p │ │ │ │ +0002a1b0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +0002a1c0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ │ +0002a1d0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ │ +0002a1e0: 205b 2253 5444 4552 5220 6f66 203c 2467 ["STDERR of <$g │ │ │ │ +0002a1f0: 6e75 436f 7079 2040 676e 7543 6f70 7950 nuCopy @gnuCopyP │ │ │ │ +0002a200: 6172 203c 2464 6972 2f24 6669 6c65 3e22 ar <$dir/$file>" │ │ │ │ +0002a210: 202e 0a09 0909 2020 2020 2020 2022 3c24 ..... "<$ │ │ │ │ +0002a220: 7461 7267 6574 4469 722f 2464 6972 3e3a targetDir/$dir>: │ │ │ │ +0002a230: 222c 2040 246f 7574 5d29 0a09 0920 2020 ", @$out])... │ │ │ │ +0002a240: 2069 6620 2840 246f 7574 203e 2030 293b if (@$out > 0); │ │ │ │ +0002a250: 0a0a 2020 2020 2020 2020 2020 2020 2020 .. │ │ │ │ +0002a260: 2020 6966 2028 2470 7265 7365 7276 6550 if ($preserveP │ │ │ │ +0002a270: 6572 6d73 290a 0909 7b0a 2020 2020 2020 erms)...{. │ │ │ │ +0002a280: 2020 2020 2020 2020 2020 2020 2020 6368 ch │ │ │ │ +0002a290: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ │ +0002a2a0: 2224 7461 7267 6574 4469 722f 2466 696c "$targetDir/$fil │ │ │ │ +0002a2b0: 6522 3b0a 2020 2020 2020 2020 2020 2020 e";. │ │ │ │ +0002a2c0: 2020 2020 2020 2020 6368 6d6f 6420 246d chmod $m │ │ │ │ +0002a2d0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, "$targetDir │ │ │ │ +0002a2e0: 2f24 6669 6c65 223b 0a20 2020 2020 2020 /$file";. │ │ │ │ +0002a2f0: 2020 2020 2020 2020 2020 2020 2075 7469 uti │ │ │ │ +0002a300: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim │ │ │ │ +0002a310: 652c 2022 2464 6972 2f24 6669 6c65 2220 e, "$dir/$file" │ │ │ │ +0002a320: 6966 2024 7265 7365 7441 7469 6d65 3b3b if $resetAtime;; │ │ │ │ +0002a330: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002a340: 2020 2020 2075 7469 6d65 2024 6174 696d utime $atim │ │ │ │ +0002a350: 652c 2024 6d74 696d 652c 2022 2474 6172 e, $mtime, "$tar │ │ │ │ +0002a360: 6765 7444 6972 2f24 6669 6c65 223b 0a20 getDir/$file";. │ │ │ │ +0002a370: 2020 2020 2020 2020 2020 2020 2020 207d } │ │ │ │ +0002a380: 0a0a 0909 246d 6169 6e3a 3a73 7461 742d ....$main::stat- │ │ │ │ +0002a390: 3e69 6e63 725f 6e6f 536f 636b 6574 7328 >incr_noSockets( │ │ │ │ +0002a3a0: 2475 6964 2c20 2467 6964 2920 6966 2024 $uid, $gid) if $ │ │ │ │ +0002a3b0: 7479 7065 2065 7120 2253 223b 0a09 0924 type eq "S";...$ │ │ │ │ +0002a3c0: 6d61 696e 3a3a 7374 6174 2d3e 696e 6372 main::stat->incr │ │ │ │ +0002a3d0: 5f6e 6f42 6c6f 636b 4465 7628 2475 6964 _noBlockDev($uid │ │ │ │ +0002a3e0: 2c20 2467 6964 2920 6966 2024 7479 7065 , $gid) if $type │ │ │ │ +0002a3f0: 2065 7120 2262 223b 0a09 0924 6d61 696e eq "b";...$main │ │ │ │ +0002a400: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f43 ::stat->incr_noC │ │ │ │ +0002a410: 6861 7244 6576 2824 7569 642c 2024 6769 harDev($uid, $gi │ │ │ │ +0002a420: 6429 2069 6620 2474 7970 6520 6571 2022 d) if $type eq " │ │ │ │ +0002a430: 6322 3b0a 0a09 0924 7072 4c6f 672d 3e70 c";....$prLog->p │ │ │ │ +0002a440: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +0002a450: 2744 272c 0a09 0909 2020 2020 2020 272d 'D',.... '- │ │ │ │ +0002a460: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ │ +0002a470: 205b 2263 7265 6174 6564 2073 7065 6369 ["created speci │ │ │ │ +0002a480: 616c 2066 696c 6520 2824 7479 7065 2920 al file ($type) │ │ │ │ +0002a490: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil │ │ │ │ +0002a4a0: 6522 5d29 0a09 0920 2020 2069 6620 2824 e"])... if ($ │ │ │ │ +0002a4b0: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2); │ │ │ │ +0002a4c0: 0a0a 0909 2461 6b74 4669 6c65 6e61 6d65 ....$aktFilename │ │ │ │ +0002a4d0: 2d3e 7374 6f72 6553 7065 6369 616c 2827 ->storeSpecial(' │ │ │ │ +0002a4e0: 2d6e 616d 6527 203d 3e20 2466 696c 652c -name' => $file, │ │ │ │ +0002a4f0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002a500: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a510: 2020 2020 2020 2020 2020 2020 272d 7479 '-ty │ │ │ │ +0002a520: 7065 2720 3d3e 2024 7479 7065 2c0a 2020 pe' => $type,. │ │ │ │ +0002a530: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a540: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a550: 2020 2020 2020 2020 2027 2d64 6576 2720 '-dev' │ │ │ │ +0002a560: 3d3e 2024 6465 762c 0a20 2020 2020 2020 => $dev,. │ │ │ │ +0002a570: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a580: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a590: 2020 2020 272d 696e 6f64 6527 203d 3e20 '-inode' => │ │ │ │ +0002a5a0: 2469 6e6f 6465 2c0a 2020 2020 2020 2020 $inode,. │ │ │ │ +0002a5b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a5c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a5d0: 2020 2027 2d63 7469 6d65 2720 3d3e 2024 '-ctime' => $ │ │ │ │ +0002a5e0: 6374 696d 652c 0a20 2020 2020 2020 2020 ctime,. │ │ │ │ +0002a5f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a600: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a610: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m │ │ │ │ +0002a620: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. │ │ │ │ +0002a630: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a640: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a650: 2027 2d61 7469 6d65 2720 3d3e 2024 6174 '-atime' => $at │ │ │ │ +0002a660: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. │ │ │ │ +0002a670: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a680: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a690: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,. │ │ │ │ +0002a6a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a6b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a6c0: 2020 2020 2020 2020 2020 2027 2d67 6964 '-gid │ │ │ │ +0002a6d0: 2720 3d3e 2024 6769 642c 0a20 2020 2020 ' => $gid,. │ │ │ │ +0002a6e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a6f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002a700: 2020 2020 2020 272d 6d6f 6465 2720 3d3e '-mode' => │ │ │ │ +0002a710: 2024 6d6f 6465 293b 0a09 096e 6578 743b $mode);...next; │ │ │ │ +0002a720: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if │ │ │ │ +0002a730: 2028 2474 7970 6520 6571 2027 6266 2729 ($type eq 'bf') │ │ │ │ +0002a740: 2020 2020 2320 626c 6f63 6b20 6669 6c65 # block file │ │ │ │ +0002a750: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print " │ │ │ │ +0002a760: 2d30 2e31 2d20 626c 6f63 6b46 696c 653a -0.1- blockFile: │ │ │ │ +0002a770: 203c 2474 6172 6765 7444 6972 3e3c 2466 <$targetDir><$f │ │ │ │ +0002a780: 696c 653e 203c 246d 6435 3e5c 6e22 3b0a ile> <$md5>\n";. │ │ │ │ +0002a790: 0909 246d 6169 6e3a 3a73 7461 742d 3e69 ..$main::stat->i │ │ │ │ +0002a7a0: 6e63 725f 6e6f 426c 6f63 6b65 6446 696c ncr_noBlockedFil │ │ │ │ +0002a7b0: 6573 2829 3b0a 0909 6966 2028 7265 6628 es();...if (ref( │ │ │ │ +0002a7c0: 246d 6435 2920 6571 2027 4152 5241 5927 $md5) eq 'ARRAY' │ │ │ │ +0002a7d0: 290a 0909 7b0a 0909 2020 2020 6d79 2028 )...{... my ( │ │ │ │ +0002a7e0: 2472 756c 6542 532c 2024 7275 6c65 436f $ruleBS, $ruleCo │ │ │ │ +0002a7f0: 6d70 7265 7373 2c20 2470 6172 616c 6c65 mpress, $paralle │ │ │ │ +0002a800: 6c2c 2040 7275 6c65 5265 6164 290a 0909 l, @ruleRead)... │ │ │ │ +0002a810: 093d 2040 246d 6435 3b0a 0909 2020 2020 .= @$md5;... │ │ │ │ +0002a820: 2462 6c6f 636b 5061 7261 6c6c 656c 203d $blockParallel = │ │ │ │ +0002a830: 2024 7061 7261 6c6c 656c 3b0a 0909 2020 $parallel;... │ │ │ │ +0002a840: 2020 2466 6966 6f42 6c6f 636b 2d3e 6164 $fifoBlock->ad │ │ │ │ +0002a850: 6428 272d 7661 6c75 6527 203d 3e0a 0909 d('-value' =>... │ │ │ │ +0002a860: 0909 2020 2020 5b27 6669 6c65 272c 2024 .. ['file', $ │ │ │ │ +0002a870: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid │ │ │ │ +0002a880: 2c20 2467 6964 2c0a 0909 0909 2020 2020 , $gid,..... │ │ │ │ +0002a890: 2024 6d6f 6465 2c20 2464 6576 2c20 2469 $mode, $dev, $i │ │ │ │ +0002a8a0: 6e6f 6465 2c20 2463 7469 6d65 2c20 246d node, $ctime, $m │ │ │ │ +0002a8b0: 7469 6d65 2c0a 0909 0909 2020 2020 2024 time,..... $ │ │ │ │ +0002a8c0: 6174 696d 652c 2024 7369 7a65 2c20 2472 atime, $size, $r │ │ │ │ +0002a8d0: 756c 6542 532c 2024 7275 6c65 436f 6d70 uleBS, $ruleComp │ │ │ │ +0002a8e0: 7265 7373 2c0a 0909 0909 2020 2020 5c40 ress,..... \@ │ │ │ │ +0002a8f0: 7275 6c65 5265 6164 5d29 3b0a 0909 7d0a ruleRead]);...}. │ │ │ │ +0002a900: 0909 656c 7365 2020 2320 6e6f 7468 696e ..else # nothin │ │ │ │ +0002a910: 6720 6861 7320 6368 616e 6765 640a 0909 g has changed... │ │ │ │ +0002a920: 7b0a 0909 2020 2020 263a 3a6d 616b 6546 {... &::makeF │ │ │ │ +0002a930: 696c 6550 6174 6828 2224 7461 7267 6574 ilePath("$target │ │ │ │ +0002a940: 4469 722f 2466 696c 6522 2c20 2470 724c Dir/$file", $prL │ │ │ │ +0002a950: 6f67 2920 6966 2024 6c61 7465 4c69 6e6b og) if $lateLink │ │ │ │ +0002a960: 733b 0a0a 0909 2020 2020 6d6b 6469 7220 s;.... mkdir │ │ │ │ +0002a970: 2224 7461 7267 6574 4469 722f 2466 696c "$targetDir/$fil │ │ │ │ +0002a980: 6522 2c20 3037 3030 206f 720a 0909 0924 e", 0700 or....$ │ │ │ │ +0002a990: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +0002a9a0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +0002a9b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +0002a9c0: 0a09 0909 0920 2020 2020 205b 2263 616e ..... ["can │ │ │ │ +0002a9d0: 6e6f 7420 6d6b 6469 7220 3c24 7461 7267 not mkdir <$targ │ │ │ │ +0002a9e0: 6574 4469 722f 2466 696c 653e 225d 2c0a etDir/$file>"],. │ │ │ │ +0002a9f0: 0909 0909 2020 2020 2020 272d 6578 6974 .... '-exit │ │ │ │ +0002aa00: 2720 3d3e 2031 293b 0a09 0920 2020 2024 ' => 1);... $ │ │ │ │ +0002aa10: 6d61 696e 3a3a 7374 6174 2d3e 696e 6372 main::stat->incr │ │ │ │ +0002aa20: 5f6e 6f44 6972 7328 2475 6964 2c20 2467 _noDirs($uid, $g │ │ │ │ +0002aa30: 6964 293b 0a0a 0909 2020 2020 6d79 2028 id);.... my ( │ │ │ │ +0002aa40: 2478 2c20 2462 6163 6b75 7044 6972 293b $x, $backupDir); │ │ │ │ +0002aa50: 0a09 0920 2020 2028 2478 2c20 2478 2c20 ... ($x, $x, │ │ │ │ +0002aa60: 2478 2c20 2462 6163 6b75 7044 6972 2c20 $x, $backupDir, │ │ │ │ +0002aa70: 2478 2920 3d0a 0909 0924 6f6c 6446 696c $x) =....$oldFil │ │ │ │ +0002aa80: 656e 616d 652d 3e67 6574 4669 6c65 6e61 ename->getFilena │ │ │ │ +0002aa90: 6d65 2824 6d64 3529 3b0a 0a09 0920 2020 me($md5);.... │ │ │ │ +0002aaa0: 2069 6620 2824 6c61 7465 4c69 6e6b 7329 if ($lateLinks) │ │ │ │ +0002aab0: 0a09 0920 2020 207b 0a09 0909 6d79 2024 ... {....my $ │ │ │ │ +0002aac0: 6672 6f6d 203d 2022 2462 6163 6b75 7044 from = "$backupD │ │ │ │ +0002aad0: 6972 2f24 6669 6c65 223b 0a09 0909 6d79 ir/$file";....my │ │ │ │ +0002aae0: 2024 746f 203d 2022 2474 6172 6765 7444 $to = "$targetD │ │ │ │ +0002aaf0: 6972 2f24 6669 6c65 223b 0a09 0909 2470 ir/$file";....$p │ │ │ │ +0002ab00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +0002ab10: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ │ +0002ab20: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ │ +0002ab30: 0909 0909 2020 2020 2020 5b22 6361 6e6e .... ["cann │ │ │ │ +0002ab40: 6f74 206c 696e 6b20 3c24 6672 6f6d 2f24 ot link <$from/$ │ │ │ │ +0002ab50: 626c 6f63 6b43 6865 636b 5375 6d46 696c blockCheckSumFil │ │ │ │ +0002ab60: 652e 627a 323e 222e 0a09 0909 0920 2020 e.bz2>"...... │ │ │ │ +0002ab70: 2020 2022 203c 2474 6f2f 2462 6c6f 636b " <$to/$block │ │ │ │ +0002ab80: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2 │ │ │ │ +0002ab90: 3e22 5d2c 0a09 0909 0920 2020 2020 2027 >"],..... ' │ │ │ │ +0002aba0: 2d65 7869 7427 203d 3e20 3129 0a09 0909 -exit' => 1).... │ │ │ │ +0002abb0: 2020 2020 756e 6c65 7373 2028 6c69 6e6b unless (link │ │ │ │ +0002abc0: 2022 2466 726f 6d2f 2462 6c6f 636b 4368 "$from/$blockCh │ │ │ │ +0002abd0: 6563 6b53 756d 4669 6c65 2e62 7a32 222c eckSumFile.bz2", │ │ │ │ +0002abe0: 0a09 0909 0920 2020 2022 2474 6f2f 2462 ..... "$to/$b │ │ │ │ +0002abf0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile │ │ │ │ +0002ac00: 2e62 7a32 2229 3b0a 0a09 0909 2466 726f .bz2");.....$fro │ │ │ │ +0002ac10: 6d20 3d20 3a3a 7265 6c50 6174 6828 2474 m = ::relPath($t │ │ │ │ +0002ac20: 6172 6765 7444 6972 2c20 2466 726f 6d29 argetDir, $from) │ │ │ │ +0002ac30: 3b0a 0909 0924 6672 6f6d 203d 7e20 732f ;....$from =~ s/ │ │ │ │ +0002ac40: 5c6e 2f5c 302f 6f67 3b0a 0909 0924 746f \n/\0/og;....$to │ │ │ │ +0002ac50: 203d 203a 3a72 656c 5061 7468 2824 7461 = ::relPath($ta │ │ │ │ +0002ac60: 7267 6574 4469 722c 2024 746f 293b 0a09 rgetDir, $to);.. │ │ │ │ +0002ac70: 0909 2474 6f20 3d7e 2073 2f5c 6e2f 5c30 ..$to =~ s/\n/\0 │ │ │ │ +0002ac80: 2f6f 673b 0a09 0909 2477 724c 6174 654c /og;....$wrLateL │ │ │ │ +0002ac90: 696e 6b2d 3e70 7269 6e74 2822 6c69 6e6b ink->print("link │ │ │ │ +0002aca0: 626c 6f63 6b5c 6e24 6672 6f6d 5c6e 2474 block\n$from\n$t │ │ │ │ +0002acb0: 6f5c 6e22 293b 0a09 0909 246d 6169 6e3a o\n");....$main: │ │ │ │ +0002acc0: 3a73 7461 742d 3e69 6e63 725f 6e6f 4c61 :stat->incr_noLa │ │ │ │ +0002acd0: 7465 4c69 6e6b 7328 2475 6964 2c20 2467 teLinks($uid, $g │ │ │ │ +0002ace0: 6964 293b 0a09 0920 2020 207d 0a09 0920 id);... }... │ │ │ │ +0002acf0: 2020 2065 6c73 650a 0909 2020 2020 7b0a else... {. │ │ │ │ +0002ad00: 2370 7269 6e74 2022 2d30 2e32 2068 6172 #print "-0.2 har │ │ │ │ +0002ad10: 6420 6c69 6e6b 2024 6261 636b 7570 4469 d link $backupDi │ │ │ │ +0002ad20: 722f 2466 696c 6520 2474 6172 6765 7444 r/$file $targetD │ │ │ │ +0002ad30: 6972 2f24 6669 6c65 5c6e 223b 0a09 0909 ir/$file\n";.... │ │ │ │ +0002ad40: 263a 3a68 6172 644c 696e 6b44 6972 2822 &::hardLinkDir(" │ │ │ │ +0002ad50: 2462 6163 6b75 7044 6972 2f24 6669 6c65 $backupDir/$file │ │ │ │ +0002ad60: 222c 0a09 0909 0920 2020 2020 2020 2224 ",..... "$ │ │ │ │ +0002ad70: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ │ +0002ad80: 2c20 272e 2a27 2c20 2470 724c 6f67 293b , '.*', $prLog); │ │ │ │ +0002ad90: 0a09 0909 6d79 2024 626c 6f63 6b4d 4435 ....my $blockMD5 │ │ │ │ +0002ada0: 4669 6c65 203d 2022 2474 6172 6765 7444 File = "$targetD │ │ │ │ +0002adb0: 6972 2f24 6669 6c65 2f24 626c 6f63 6b43 ir/$file/$blockC │ │ │ │ +0002adc0: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2" │ │ │ │ +0002add0: 3b0a 0909 096d 7920 2462 6c6f 636b 203d ;....my $block = │ │ │ │ +0002ade0: 2070 6970 6546 726f 6d46 6f72 6b2d 3e6e pipeFromFork->n │ │ │ │ +0002adf0: 6577 2827 2d65 7865 6327 203d 3e20 2762 ew('-exec' => 'b │ │ │ │ +0002ae00: 7a69 7032 272c 0a09 0909 0909 0920 2020 zip2',....... │ │ │ │ +0002ae10: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [ │ │ │ │ +0002ae20: 272d 6427 5d2c 0a09 0909 0909 0920 2020 '-d'],....... │ │ │ │ +0002ae30: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $ │ │ │ │ +0002ae40: 626c 6f63 6b4d 4435 4669 6c65 2c0a 0909 blockMD5File,... │ │ │ │ +0002ae50: 0909 0909 2020 2020 2020 272d 6f75 7452 .... '-outR │ │ │ │ +0002ae60: 616e 646f 6d27 203d 3e0a 0909 0909 0909 andom' =>....... │ │ │ │ +0002ae70: 2020 2020 2020 272f 746d 702f 7374 6275 '/tmp/stbu │ │ │ │ +0002ae80: 5069 7065 4672 6f6d 3131 2d27 2c0a 0909 PipeFrom11-',... │ │ │ │ +0002ae90: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +0002aea0: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ │ +0002aeb0: 0909 6d79 2024 6c3b 0a09 0909 7768 696c ..my $l;....whil │ │ │ │ +0002aec0: 6520 2824 6c20 3d20 2462 6c6f 636b 2d3e e ($l = $block-> │ │ │ │ +0002aed0: 7265 6164 2829 290a 0909 097b 0a09 0909 read())....{.... │ │ │ │ +0002aee0: 2020 2020 6368 6f70 2024 6c3b 0a09 0909 chop $l;.... │ │ │ │ +0002aef0: 2020 2020 6d79 2028 2462 6c6f 636b 4d44 my ($blockMD │ │ │ │ +0002af00: 352c 2024 636f 6d70 722c 2024 626c 6f63 5, $compr, $bloc │ │ │ │ +0002af10: 6b46 696c 656e 616d 6529 0a09 0909 093d kFilename).....= │ │ │ │ +0002af20: 2073 706c 6974 282f 5c73 2f2c 2024 6c2c split(/\s/, $l, │ │ │ │ +0002af30: 2033 293b 0a09 0909 2020 2020 2461 6b74 3);.... $akt │ │ │ │ +0002af40: 4669 6c65 6e61 6d65 2d3e 7374 6f72 6542 Filename->storeB │ │ │ │ +0002af50: 6c6f 636b 2827 2d66 696c 656e 616d 6527 lock('-filename' │ │ │ │ +0002af60: 203d 3e20 2462 6c6f 636b 4669 6c65 6e61 => $blockFilena │ │ │ │ +0002af70: 6d65 2c0a 0909 0909 0909 2020 2020 2027 me,....... ' │ │ │ │ +0002af80: 2d6d 6435 7375 6d27 203d 3e20 2462 6c6f -md5sum' => $blo │ │ │ │ +0002af90: 636b 4d44 352c 0a09 0909 0909 0920 2020 ckMD5,....... │ │ │ │ +0002afa0: 2020 272d 636f 6d70 7227 203d 3e20 2463 '-compr' => $c │ │ │ │ +0002afb0: 6f6d 7072 293b 0a23 7072 696e 7420 2262 ompr);.#print "b │ │ │ │ +0002afc0: 6c6f 636b 4d44 3520 3d20 2462 6c6f 636b lockMD5 = $block │ │ │ │ +0002afd0: 4d44 352c 2063 6f6d 7072 203d 2024 636f MD5, compr = $co │ │ │ │ +0002afe0: 6d70 722c 2062 6c6f 636b 4669 6c65 6e61 mpr, blockFilena │ │ │ │ +0002aff0: 6d65 203d 2024 626c 6f63 6b46 696c 656e me = $blockFilen │ │ │ │ +0002b000: 616d 655c 6e22 3b0a 0909 097d 0a09 0909 ame\n";....}.... │ │ │ │ +0002b010: 6d79 2024 6f75 7420 3d20 2462 6c6f 636b my $out = $block │ │ │ │ +0002b020: 2d3e 6765 7453 5444 4552 5228 293b 0a09 ->getSTDERR();.. │ │ │ │ +0002b030: 0909 6966 2028 4024 6f75 7429 0a09 0909 ..if (@$out).... │ │ │ │ +0002b040: 7b0a 0909 0920 2020 2024 7072 4c6f 672d {.... $prLog- │ │ │ │ +0002b050: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +0002b060: 3e20 2745 272c 0a09 0909 0909 2020 272d > 'E',...... '- │ │ │ │ +0002b070: 7374 7227 203d 3e0a 0909 0909 0920 205b str' =>...... [ │ │ │ │ +0002b080: 2272 6561 6469 6e67 2066 726f 6d20 2462 "reading from $b │ │ │ │ +0002b090: 6c6f 636b 4d44 3546 696c 6520 6765 6e65 lockMD5File gene │ │ │ │ +0002b0a0: 7261 7465 6422 2c0a 0909 0909 0920 2020 rated",...... │ │ │ │ +0002b0b0: 4024 6f75 745d 293b 0a09 0909 2020 2020 @$out]);.... │ │ │ │ +0002b0c0: 7265 7475 726e 2030 3b0a 0909 097d 0a09 return 0;....}.. │ │ │ │ +0002b0d0: 0909 2462 6c6f 636b 2d3e 636c 6f73 6528 ..$block->close( │ │ │ │ +0002b0e0: 293b 0a0a 0909 0969 6620 2824 7072 6573 );.....if ($pres │ │ │ │ +0002b0f0: 6572 7665 5065 726d 7329 0a09 0909 7b0a ervePerms)....{. │ │ │ │ +0002b100: 0909 0920 2020 2063 686f 776e 2024 7569 ... chown $ui │ │ │ │ +0002b110: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, "$targe │ │ │ │ +0002b120: 7444 6972 2f24 6669 6c65 223b 0a09 0909 tDir/$file";.... │ │ │ │ +0002b130: 2020 2020 6d79 2024 6d20 3d20 246d 6f64 my $m = $mod │ │ │ │ +0002b140: 653b 0a09 0909 2020 2020 246d 2026 3d20 e;.... $m &= │ │ │ │ +0002b150: 3037 3737 3b20 2020 2023 2073 7472 6970 0777; # strip │ │ │ │ +0002b160: 2073 7065 6369 616c 2070 6572 6d69 7373 special permiss │ │ │ │ +0002b170: 696f 6e73 0a09 0909 2020 2020 246d 207c ions.... $m | │ │ │ │ +0002b180: 3d20 3031 3131 3b20 2020 2023 2061 6464 = 0111; # add │ │ │ │ +0002b190: 2064 6972 6563 746f 7279 2070 6572 6d69 directory permi │ │ │ │ +0002b1a0: 7373 696f 6e73 0a09 0909 2020 2020 6368 ssions.... ch │ │ │ │ +0002b1b0: 6d6f 6420 246d 2c20 2224 7461 7267 6574 mod $m, "$target │ │ │ │ +0002b1c0: 4469 722f 2466 696c 6522 3b0a 0909 0920 Dir/$file";.... │ │ │ │ +0002b1d0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime, │ │ │ │ +0002b1e0: 2024 6d74 696d 652c 2022 4469 722f 2466 $mtime, "Dir/$f │ │ │ │ +0002b1f0: 696c 6522 2069 6620 2472 6573 6574 4174 ile" if $resetAt │ │ │ │ +0002b200: 696d 653b 3b0a 0909 0920 2020 2075 7469 ime;;.... uti │ │ │ │ +0002b210: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim │ │ │ │ +0002b220: 652c 2022 2474 6172 6765 7444 6972 2f24 e, "$targetDir/$ │ │ │ │ +0002b230: 6669 6c65 223b 0a09 0909 7d0a 0909 2020 file";....}... │ │ │ │ +0002b240: 2020 7d0a 0a09 0920 2020 2024 616b 7446 }.... $aktF │ │ │ │ +0002b250: 696c 656e 616d 652d 3e73 746f 7265 2827 ilename->store(' │ │ │ │ +0002b260: 2d66 696c 656e 616d 6527 203d 3e20 2466 -filename' => $f │ │ │ │ +0002b270: 696c 652c 2320 7370 6569 6368 6572 7420 ile,# speichert │ │ │ │ +0002b280: 696e 2064 626d 0a09 0909 0909 272d 6d64 in dbm......'-md │ │ │ │ +0002b290: 3573 756d 2720 3d3e 2024 6d64 352c 2020 5sum' => $md5, │ │ │ │ +0002b2a0: 2023 202e 6d64 3573 756d 2d44 6174 6569 # .md5sum-Datei │ │ │ │ +0002b2b0: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' = │ │ │ │ +0002b2c0: 3e20 2762 272c 0a09 0909 0909 272d 6465 > 'b',......'-de │ │ │ │ +0002b2d0: 7627 203d 3e20 2464 6576 2c0a 0909 0909 v' => $dev,..... │ │ │ │ +0002b2e0: 0927 2d69 6e6f 6465 2720 3d3e 2024 696e .'-inode' => $in │ │ │ │ +0002b2f0: 6f64 652c 0a09 0909 0909 272d 696e 6f64 ode,......'-inod │ │ │ │ +0002b300: 6542 6163 6b75 7027 203d 3e20 302c 0a09 eBackup' => 0,.. │ │ │ │ +0002b310: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => │ │ │ │ +0002b320: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m │ │ │ │ +0002b330: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime, │ │ │ │ +0002b340: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' = │ │ │ │ +0002b350: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......' │ │ │ │ +0002b360: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim │ │ │ │ +0002b370: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' │ │ │ │ +0002b380: 3d3e 2024 7369 7a65 2c0a 0909 0909 0927 => $size,......' │ │ │ │ +0002b390: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,.. │ │ │ │ +0002b3a0: 0909 0909 272d 6769 6427 203d 3e20 2467 ....'-gid' => $g │ │ │ │ +0002b3b0: 6964 2c0a 0909 0909 0927 2d6d 6f64 6527 id,......'-mode' │ │ │ │ +0002b3c0: 203d 3e20 246d 6f64 6529 3b0a 0909 7d0a => $mode);...}. │ │ │ │ +0002b3d0: 0909 6e65 7874 3b0a 0a09 2020 2020 7d0a ..next;... }. │ │ │ │ +0002b3e0: 0a09 2020 2020 230a 0920 2020 2023 2028 .. #.. # ( │ │ │ │ +0002b3f0: 2474 7970 6520 6571 2027 6627 2920 2d3e $type eq 'f') -> │ │ │ │ +0002b400: 206e 6f72 6d61 6c20 6669 6c65 0a09 2020 normal file.. │ │ │ │ +0002b410: 2020 230a 0920 2020 2024 6d61 696e 3a3a #.. $main:: │ │ │ │ +0002b420: 7374 6174 2d3e 6164 6453 756d 4f72 6967 stat->addSumOrig │ │ │ │ +0002b430: 4669 6c65 7328 2473 697a 652c 2024 7569 Files($size, $ui │ │ │ │ +0002b440: 642c 2024 6769 6429 3b0a 0a09 2020 2020 d, $gid);... │ │ │ │ +0002b450: 6d79 2028 2463 6f6d 7072 4f6c 642c 2024 my ($comprOld, $ │ │ │ │ +0002b460: 6c69 6e6b 4669 6c65 2c20 246e 6577 4669 linkFile, $newFi │ │ │ │ +0002b470: 6c65 2c20 246f 6c64 4669 6c65 293b 0a09 le, $oldFile);.. │ │ │ │ +0002b480: 2020 2020 6d79 2028 2469 6e6f 6465 4261 my ($inodeBa │ │ │ │ +0002b490: 636b 7570 2c20 2462 6163 6b75 7044 6972 ckup, $backupDir │ │ │ │ +0002b4a0: 496e 6465 782c 2024 6261 636b 7570 4469 Index, $backupDi │ │ │ │ +0002b4b0: 7229 3b0a 0920 2020 206d 7920 2469 6e74 r);.. my $int │ │ │ │ +0002b4c0: 6572 6e61 6c4f 6c64 3b0a 0920 2020 2069 ernalOld;.. i │ │ │ │ +0002b4d0: 6620 2824 7479 7065 2065 7120 2766 6e65 f ($type eq 'fne │ │ │ │ +0002b4e0: 7727 2920 2020 2020 2320 7072 6576 696f w') # previo │ │ │ │ +0002b4f0: 7573 2062 6163 6b75 7020 7769 7468 2074 us backup with t │ │ │ │ +0002b500: 6869 730a 0920 2020 207b 2020 2020 2020 his.. { │ │ │ │ +0002b510: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002b520: 2020 2320 6669 6c65 2077 6173 2062 6c6f # file was blo │ │ │ │ +0002b530: 636b 6564 2c20 736f 2066 6f72 6365 0a09 cked, so force.. │ │ │ │ +0002b540: 0924 6c69 6e6b 4669 6c65 203d 2075 6e64 .$linkFile = und │ │ │ │ +0002b550: 6566 3b20 2020 2320 636f 6d70 7265 7373 ef; # compress │ │ │ │ +0002b560: 206f 7220 636f 7079 0a09 2020 2020 7d0a or copy.. }. │ │ │ │ +0002b570: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. { │ │ │ │ +0002b580: 0a09 0923 206a 6574 7a74 2069 6e20 4442 ...# jetzt in DB │ │ │ │ +0002b590: 4d2d 4669 6c65 7320 6e61 6368 7365 6865 M-Files nachsehe │ │ │ │ +0002b5a0: 6e20 756e 6420 6c69 6e6b 656e 0a09 0969 n und linken...i │ │ │ │ +0002b5b0: 6620 2828 2824 696e 6f64 6542 6163 6b75 f ((($inodeBacku │ │ │ │ +0002b5c0: 702c 2024 636f 6d70 724f 6c64 2c20 2462 p, $comprOld, $b │ │ │ │ +0002b5d0: 6163 6b75 7044 6972 496e 6465 782c 0a09 ackupDirIndex,.. │ │ │ │ +0002b5e0: 0920 2020 2020 2024 6261 636b 7570 4469 . $backupDi │ │ │ │ +0002b5f0: 722c 2024 6c69 6e6b 4669 6c65 2920 3d0a r, $linkFile) =. │ │ │ │ +0002b600: 0909 2020 2020 2024 6f6c 6446 696c 656e .. $oldFilen │ │ │ │ +0002b610: 616d 652d 3e67 6574 4669 6c65 6e61 6d65 ame->getFilename │ │ │ │ +0002b620: 2824 6d64 3529 2920 3d3d 2035 290a 0909 ($md5)) == 5)... │ │ │ │ +0002b630: 7b0a 0909 2020 2020 246e 6577 4669 6c65 {... $newFile │ │ │ │ +0002b640: 203d 2022 2474 6172 6765 7444 6972 2f24 = "$targetDir/$ │ │ │ │ +0002b650: 6669 6c65 223b 0a09 0920 2020 2024 6f6c file";... $ol │ │ │ │ +0002b660: 6446 696c 6520 3d20 2224 6261 636b 7570 dFile = "$backup │ │ │ │ +0002b670: 4469 722f 246c 696e 6b46 696c 6522 3b0a Dir/$linkFile";. │ │ │ │ +0002b680: 0909 2020 2020 2469 6e74 6572 6e61 6c4f .. $internalO │ │ │ │ +0002b690: 6c64 203d 2028 2462 6163 6b75 7044 6972 ld = ($backupDir │ │ │ │ +0002b6a0: 496e 6465 7820 3d3d 2030 2920 3f0a 0909 Index == 0) ?... │ │ │ │ +0002b6b0: 0927 696e 7465 726e 616c 2720 3a20 276f .'internal' : 'o │ │ │ │ +0002b6c0: 6c64 273b 0a23 7072 696e 7420 222d 312d ld';.#print "-1- │ │ │ │ +0002b6d0: 2024 6e65 7746 696c 6520 246f 6c64 4669 $newFile $oldFi │ │ │ │ +0002b6e0: 6c65 5c6e 223b 0a09 0920 2020 206d 7920 le\n";... my │ │ │ │ +0002b6f0: 2824 782c 2024 6f6c 6453 697a 6529 3b0a ($x, $oldSize);. │ │ │ │ +0002b700: 0909 2020 2020 6966 2028 2462 6163 6b75 .. if ($backu │ │ │ │ +0002b710: 7044 6972 496e 6465 7820 3d3d 2030 2920 pDirIndex == 0) │ │ │ │ +0002b720: 2023 2066 6972 7374 206f 6363 7572 7265 # first occurre │ │ │ │ +0002b730: 6e63 650a 0909 2020 2020 7b20 2020 2020 nce... { │ │ │ │ +0002b740: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002b750: 2020 2020 2023 2069 6e20 736f 7572 6365 # in source │ │ │ │ +0002b760: 4469 720a 0909 0969 6620 282d 6520 2224 Dir....if (-e "$ │ │ │ │ +0002b770: 736f 7572 6365 4469 722f 246c 696e 6b46 sourceDir/$linkF │ │ │ │ +0002b780: 696c 6522 290a 0909 097b 0a09 0909 2020 ile")....{.... │ │ │ │ +0002b790: 2020 246f 6c64 5369 7a65 203d 2028 7374 $oldSize = (st │ │ │ │ +0002b7a0: 6174 2822 2473 6f75 7263 6544 6972 2f24 at("$sourceDir/$ │ │ │ │ +0002b7b0: 6c69 6e6b 4669 6c65 2229 295b 375d 3b0a linkFile"))[7];. │ │ │ │ +0002b7c0: 0909 097d 0a09 0909 656c 7365 0a09 0909 ...}....else.... │ │ │ │ +0002b7d0: 7b0a 0909 0920 2020 2024 6f6c 6453 697a {.... $oldSiz │ │ │ │ +0002b7e0: 6520 3d20 2d31 3b0a 0909 097d 0a09 0920 e = -1;....}... │ │ │ │ +0002b7f0: 2020 207d 0a09 0920 2020 2065 6c73 650a }... else. │ │ │ │ +0002b800: 0909 2020 2020 7b0a 0909 0928 2478 2c20 .. {....($x, │ │ │ │ +0002b810: 2478 2c20 2478 2c20 246f 6c64 5369 7a65 $x, $x, $oldSize │ │ │ │ +0002b820: 2c20 2478 2920 3d0a 0909 0920 2020 2024 , $x) =.... $ │ │ │ │ +0002b830: 6f6c 6446 696c 656e 616d 652d 3e67 6574 oldFilename->get │ │ │ │ +0002b840: 496e 6f64 6562 6163 6b75 7043 6f6d 7072 InodebackupCompr │ │ │ │ +0002b850: 4374 696d 654d 7469 6d65 5369 7a65 4d44 CtimeMtimeSizeMD │ │ │ │ +0002b860: 3528 246c 696e 6b46 696c 6529 3b0a 0909 5($linkFile);... │ │ │ │ +0002b870: 2020 2020 7d0a 0909 2020 2020 6966 2028 }... if ( │ │ │ │ +0002b880: 246f 6c64 5369 7a65 2021 3d20 2473 697a $oldSize != $siz │ │ │ │ +0002b890: 6520 616e 6420 246f 6c64 5369 7a65 203e e and $oldSize > │ │ │ │ +0002b8a0: 202d 3129 0a09 0920 2020 207b 0a09 0909 -1)... {.... │ │ │ │ +0002b8b0: 6d79 2024 636f 6d6d 656e 7420 3d20 2463 my $comment = $c │ │ │ │ +0002b8c0: 6f6d 7072 4f6c 6420 6571 2027 7527 3f20 omprOld eq 'u'? │ │ │ │ +0002b8d0: 2727 203a 0a09 0909 2020 2020 2720 2877 '' :.... ' (w │ │ │ │ +0002b8e0: 6974 6820 756e 636f 6d70 7265 7373 6564 ith uncompressed │ │ │ │ +0002b8f0: 2066 696c 6573 2066 726f 6d20 6261 636b files from back │ │ │ │ +0002b900: 7570 2927 3b0a 0909 0924 7072 4c6f 672d up)';....$prLog- │ │ │ │ +0002b910: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +0002b920: 3e20 2757 272c 0a09 0909 0920 2020 2020 > 'W',..... │ │ │ │ +0002b930: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ │ +0002b940: 2020 2020 205b 2270 6f73 7369 626c 6520 ["possible │ │ │ │ +0002b950: 6861 7368 2063 6f6c 6c69 7369 6f6e 2062 hash collision b │ │ │ │ +0002b960: 6574 7765 656e 222c 0a09 0909 0920 2020 etween",..... │ │ │ │ +0002b970: 2020 2022 3c24 6f6c 6446 696c 653e 2028 "<$oldFile> ( │ │ │ │ +0002b980: 7369 7a65 203d 2024 6f6c 6453 697a 6529 size = $oldSize) │ │ │ │ +0002b990: 2061 6e64 222c 0a09 0909 0920 2020 2020 and",..... │ │ │ │ +0002b9a0: 2022 3c24 6e65 7746 696c 653e 2028 7369 "<$newFile> (si │ │ │ │ +0002b9b0: 7a65 203d 2024 7369 7a65 2922 2c0a 0909 ze = $size)",... │ │ │ │ +0002b9c0: 0909 2020 2020 2020 2022 6e6f 7420 6c69 .. "not li │ │ │ │ +0002b9d0: 6e6b 6564 2c20 6368 6563 6b20 6d64 3520 nked, check md5 │ │ │ │ +0002b9e0: 7375 6d73 2463 6f6d 6d65 6e74 225d 290a sums$comment"]). │ │ │ │ +0002b9f0: 0909 0920 2020 2075 6e6c 6573 7320 6578 ... unless ex │ │ │ │ +0002ba00: 6973 7473 2024 7375 7070 7265 7373 5761 ists $suppressWa │ │ │ │ +0002ba10: 726e 696e 677b 2768 6173 6843 6f6c 6c69 rning{'hashColli │ │ │ │ +0002ba20: 7369 6f6e 277d 3b0a 0909 0924 6c69 6e6b sion'};....$link │ │ │ │ +0002ba30: 4669 6c65 203d 2075 6e64 6566 3b20 2020 File = undef; │ │ │ │ +0002ba40: 2320 646f 206e 6f74 206c 696e 6b0a 0909 # do not link... │ │ │ │ +0002ba50: 2020 2020 7d0a 0909 7d0a 0909 656c 7365 }...}...else │ │ │ │ +0002ba60: 2020 2020 2020 2020 2020 2020 2023 2044 # D │ │ │ │ +0002ba70: 6174 6569 2069 7374 206e 6f63 6820 6e69 atei ist noch ni │ │ │ │ +0002ba80: 6368 7420 6265 6b61 6e6e 740a 0909 7b0a cht bekannt...{. │ │ │ │ +0002ba90: 0909 2020 2020 246c 696e 6b46 696c 6520 .. $linkFile │ │ │ │ +0002baa0: 3d20 756e 6465 663b 0a09 097d 0a09 2020 = undef;...}.. │ │ │ │ +0002bab0: 2020 7d0a 0a23 7072 696e 7420 222d 2d2d }..#print "--- │ │ │ │ +0002bac0: 2d2d 2d2d 2d2d 2d2d 2d2d 2024 6469 722f ---------- $dir/ │ │ │ │ +0002bad0: 2466 696c 6524 706f 7374 6669 785c 6e22 $file$postfix\n" │ │ │ │ +0002bae0: 3b0a 2020 2020 2020 2020 2020 2020 6966 ;. if │ │ │ │ +0002baf0: 2028 246c 696e 6b46 696c 6520 616e 640a ($linkFile and. │ │ │ │ +0002bb00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002bb10: 2463 6f6d 7072 4f6c 6420 6571 2027 6327 $comprOld eq 'c' │ │ │ │ +0002bb20: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ │ +0002bb30: 2020 2020 202d 6520 2224 6469 722f 2466 -e "$dir/$f │ │ │ │ +0002bb40: 696c 6524 706f 7374 6669 7822 290a 0920 ile$postfix").. │ │ │ │ +0002bb50: 2020 207b 0a20 2020 2020 2020 2020 2020 {. │ │ │ │ +0002bb60: 2020 2020 2024 6c69 6e6b 4669 6c65 203d $linkFile = │ │ │ │ +0002bb70: 2075 6e64 6566 3b0a 2370 7269 6e74 2022 undef;.#print " │ │ │ │ +0002bb80: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d20 666f ------------- fo │ │ │ │ +0002bb90: 756e 6420 7468 6174 2066 696c 655c 6e22 und that file\n" │ │ │ │ +0002bba0: 3b0a 2020 2020 2020 2020 2020 2020 7d0a ;. }. │ │ │ │ +0002bbb0: 0a23 7072 696e 7420 222d 322d 5c6e 223b .#print "-2-\n"; │ │ │ │ +0002bbc0: 0a09 2020 2020 6966 2028 246c 696e 6b46 .. if ($linkF │ │ │ │ +0002bbd0: 696c 6529 0a09 2020 2020 7b0a 2370 7269 ile).. {.#pri │ │ │ │ +0002bbe0: 6e74 2022 2d33 2d5c 6e22 3b0a 2020 2020 nt "-3-\n";. │ │ │ │ +0002bbf0: 2020 2020 2020 2020 2020 2020 2320 416c # Al │ │ │ │ +0002bc00: 7465 2044 6174 6569 206b 6f6d 7072 696d te Datei komprim │ │ │ │ +0002bc10: 6965 7274 0a09 0969 6620 2824 636f 6d70 iert...if ($comp │ │ │ │ +0002bc20: 724f 6c64 2065 7120 2763 2729 0a09 097b rOld eq 'c')...{ │ │ │ │ +0002bc30: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002bc40: 2020 2020 2024 6e65 7746 696c 6520 2e3d $newFile .= │ │ │ │ +0002bc50: 2024 706f 7374 6669 783b 0a20 2020 2020 $postfix;. │ │ │ │ +0002bc60: 2020 2020 2020 2020 2020 2020 2020 2024 $ │ │ │ │ +0002bc70: 6f6c 6446 696c 6520 2e3d 2024 706f 7374 oldFile .= $post │ │ │ │ +0002bc80: 6669 783b 0a09 097d 0a0a 0a20 2020 2020 fix;...}... │ │ │ │ +0002bc90: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo │ │ │ │ +0002bca0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +0002bcb0: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. │ │ │ │ +0002bcc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002bcd0: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' => │ │ │ │ +0002bce0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002bcf0: 2020 2020 2020 2020 2020 2020 2020 205b [ │ │ │ │ +0002bd00: 226c 696e 6b20 246f 6c64 4669 6c65 2024 "link $oldFile $ │ │ │ │ +0002bd10: 6e65 7746 696c 6522 5d29 0a20 2020 2020 newFile"]). │ │ │ │ +0002bd20: 2020 2020 2020 2020 2020 2020 2020 2069 i │ │ │ │ +0002bd30: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >= │ │ │ │ +0002bd40: 2032 293b 0a0a 2020 2020 2020 2020 2020 2);.. │ │ │ │ +0002bd50: 2020 2020 2020 2320 4368 6563 6b20 6578 # Check ex │ │ │ │ +0002bd60: 6973 7465 6e63 652c 206c 6174 654c 696e istence, lateLin │ │ │ │ +0002bd70: 6b73 206e 6f74 2073 6574 2061 6e64 206f ks not set and o │ │ │ │ +0002bd80: 6c64 4669 6c65 2064 6f65 7320 6e6f 7420 ldFile does not │ │ │ │ +0002bd90: 6578 6973 740a 2020 2020 2020 2020 2020 exist. │ │ │ │ +0002bda0: 2020 2020 2020 756e 6c65 7373 2028 246c unless ($l │ │ │ │ +0002bdb0: 6174 654c 696e 6b73 206f 7220 246f 6c64 ateLinks or $old │ │ │ │ +0002bdc0: 4669 6c65 290a 0909 7b0a 0909 2020 2020 File)...{... │ │ │ │ +0002bdd0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0002bde0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +0002bdf0: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ │ +0002be00: 0909 2020 5b22 2877 6974 6820 6f6c 6429 .. ["(with old) │ │ │ │ +0002be10: 2063 616e 6e6f 7420 6c69 6e6b 2028 7669 cannot link (vi │ │ │ │ +0002be20: 6120 6d64 3529 2022 202e 0a09 0909 0920 a md5) " ...... │ │ │ │ +0002be30: 2020 223c 246f 6c64 4669 6c65 3e20 3c24 "<$oldFile> <$ │ │ │ │ +0002be40: 6e65 7746 696c 653e 225d 290a 0909 0969 newFile>"])....i │ │ │ │ +0002be50: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >= │ │ │ │ +0002be60: 2031 293b 0a09 0920 2020 2024 6c69 6e6b 1);... $link │ │ │ │ +0002be70: 4669 6c65 203d 2075 6e64 6566 3b0a 0909 File = undef;... │ │ │ │ +0002be80: 2020 2020 246f 6c64 4669 6c65 6e61 6d65 $oldFilename │ │ │ │ +0002be90: 2d3e 6465 6c65 7465 456e 7472 7928 246d ->deleteEntry($m │ │ │ │ +0002bea0: 6435 2c20 2020 2023 2069 6e20 5a75 6b75 d5, # in Zuku │ │ │ │ +0002beb0: 6e66 7420 6e69 6368 7420 6d65 6872 0a09 nft nicht mehr.. │ │ │ │ +0002bec0: 0909 0909 2020 2020 2020 2466 696c 6529 .... $file) │ │ │ │ +0002bed0: 3b20 2023 206d 6974 2064 6965 7365 7220 ; # mit dieser │ │ │ │ +0002bee0: 4461 7465 6920 6c69 6e6b 656e 0a20 2020 Datei linken. │ │ │ │ +0002bef0: 2020 2020 2020 2020 2020 2020 207d 0a0a }.. │ │ │ │ +0002bf00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002bf10: 2320 496e 2044 6174 6569 2073 6368 7265 # In Datei schre │ │ │ │ +0002bf20: 6962 656e 0a20 2020 2020 2020 2020 2020 iben. │ │ │ │ +0002bf30: 2020 2020 2069 6620 2824 6c61 7465 4c69 if ($lateLi │ │ │ │ +0002bf40: 6e6b 7329 0a09 097b 0a09 0920 2020 202b nks)...{... + │ │ │ │ +0002bf50: 2b24 616c 6c42 6163 6b75 7044 6972 737b +$allBackupDirs{ │ │ │ │ +0002bf60: 2462 6163 6b75 7044 6972 7d0a 0909 2020 $backupDir}... │ │ │ │ +0002bf70: 2020 2020 2020 6966 2024 6261 636b 7570 if $backup │ │ │ │ +0002bf80: 4469 7220 6e65 2024 7461 7267 6574 4469 Dir ne $targetDi │ │ │ │ +0002bf90: 723b 0a09 0920 2020 206d 7920 2465 7869 r;... my $exi │ │ │ │ +0002bfa0: 7374 696e 6746 696c 6520 3d20 3a3a 7265 stingFile = ::re │ │ │ │ +0002bfb0: 6c50 6174 6828 2474 6172 6765 7444 6972 lPath($targetDir │ │ │ │ +0002bfc0: 2c20 246f 6c64 4669 6c65 293b 0a09 0920 , $oldFile);... │ │ │ │ +0002bfd0: 2020 206d 7920 246e 6577 4c69 6e6b 203d my $newLink = │ │ │ │ +0002bfe0: 203a 3a72 656c 5061 7468 2824 7461 7267 ::relPath($targ │ │ │ │ +0002bff0: 6574 4469 722c 2024 6e65 7746 696c 6529 etDir, $newFile) │ │ │ │ +0002c000: 3b0a 0a09 0920 2020 2024 6578 6973 7469 ;.... $existi │ │ │ │ +0002c010: 6e67 4669 6c65 203d 7e20 732f 5c6e 2f5c ngFile =~ s/\n/\ │ │ │ │ +0002c020: 302f 6f67 3b0a 0909 2020 2020 246e 6577 0/og;... $new │ │ │ │ +0002c030: 4c69 6e6b 203d 7e20 732f 5c6e 2f5c 302f Link =~ s/\n/\0/ │ │ │ │ +0002c040: 6f67 3b0a 0909 2020 2020 2477 724c 6174 og;... $wrLat │ │ │ │ +0002c050: 654c 696e 6b2d 3e70 7269 6e74 2822 6c69 eLink->print("li │ │ │ │ +0002c060: 6e6b 2024 6d64 355c 6e24 6578 6973 7469 nk $md5\n$existi │ │ │ │ +0002c070: 6e67 4669 6c65 5c6e 246e 6577 4c69 6e6b ngFile\n$newLink │ │ │ │ +0002c080: 5c6e 2229 3b0a 0a09 0920 2020 2024 6d61 \n");.... $ma │ │ │ │ +0002c090: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ │ +0002c0a0: 6f4c 6174 654c 696e 6b73 2824 7569 642c oLateLinks($uid, │ │ │ │ +0002c0b0: 2024 6769 6429 3b0a 0a20 2020 2020 2020 $gid);.. │ │ │ │ +0002c0c0: 2020 2020 2020 2020 2020 2020 2023 2053 # S │ │ │ │ +0002c0d0: 6368 7265 6962 656e 2064 6572 2049 6e66 chreiben der Inf │ │ │ │ +0002c0e0: 6f72 6d61 7469 6f6e 656e 0a20 2020 2020 ormationen. │ │ │ │ +0002c0f0: 2020 2020 2020 2020 2020 2020 2020 2024 $ │ │ │ │ +0002c100: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto │ │ │ │ +0002c110: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' = │ │ │ │ +0002c120: 3e20 2466 696c 652c 0a20 2020 2020 2020 > $file,. │ │ │ │ +0002c130: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c140: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c150: 2027 2d6d 6435 7375 6d27 203d 3e20 246d '-md5sum' => $m │ │ │ │ +0002c160: 6435 2c0a 0909 0909 0927 2d63 6f6d 7072 d5,......'-compr │ │ │ │ +0002c170: 2720 3d3e 2024 636f 6d70 724f 6c64 2c0a ' => $comprOld,. │ │ │ │ +0002c180: 0909 0909 0927 2d64 6576 2720 3d3e 2024 .....'-dev' => $ │ │ │ │ +0002c190: 6465 762c 0a09 0909 0909 272d 696e 6f64 dev,......'-inod │ │ │ │ +0002c1a0: 6527 203d 3e20 2469 6e6f 6465 2c0a 0909 e' => $inode,... │ │ │ │ +0002c1b0: 0909 0927 2d69 6e6f 6465 4261 636b 7570 ...'-inodeBackup │ │ │ │ +0002c1c0: 2720 3d3e 2024 696e 6f64 6542 6163 6b75 ' => $inodeBacku │ │ │ │ +0002c1d0: 702c 0a09 0909 0909 272d 6374 696d 6527 p,......'-ctime' │ │ │ │ +0002c1e0: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,..... │ │ │ │ +0002c1f0: 0927 2d6d 7469 6d65 2720 3d3e 2024 6d74 .'-mtime' => $mt │ │ │ │ +0002c200: 696d 652c 0a09 0909 0909 272d 6174 696d ime,......'-atim │ │ │ │ +0002c210: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,... │ │ │ │ +0002c220: 0909 0927 2d73 697a 6527 203d 3e20 2473 ...'-size' => $s │ │ │ │ +0002c230: 697a 652c 0a09 0909 0909 272d 7569 6427 ize,......'-uid' │ │ │ │ +0002c240: 203d 3e20 2475 6964 2c0a 0909 0909 0927 => $uid,......' │ │ │ │ +0002c250: 2d67 6964 2720 3d3e 2024 6769 642c 0a09 -gid' => $gid,.. │ │ │ │ +0002c260: 0909 0909 272d 6d6f 6465 2720 3d3e 2024 ....'-mode' => $ │ │ │ │ +0002c270: 6d6f 6465 2c0a 0909 0909 0927 2d73 746f mode,......'-sto │ │ │ │ +0002c280: 7265 496e 4442 4d27 203d 3e20 3020 2023 reInDBM' => 0 # │ │ │ │ +0002c290: 2069 6e20 6462 6d20 7369 6e6e 6c6f 730a in dbm sinnlos. │ │ │ │ +0002c2a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c2b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c2c0: 2020 2020 2020 2029 3b0a 2020 2020 2020 );. │ │ │ │ +0002c2d0: 2020 2020 2020 2020 2020 7d0a 0909 656c }...el │ │ │ │ +0002c2e0: 7365 2020 2320 4f64 6572 2064 6972 656b se # Oder direk │ │ │ │ +0002c2f0: 7420 6c69 6e6b 656e 0a09 097b 0a09 0920 t linken...{... │ │ │ │ +0002c300: 2020 2069 6620 286c 696e 6b20 246f 6c64 if (link $old │ │ │ │ +0002c310: 4669 6c65 2c20 246e 6577 4669 6c65 290a File, $newFile). │ │ │ │ +0002c320: 0909 2020 2020 7b0a 0909 0969 6620 2824 .. {....if ($ │ │ │ │ +0002c330: 7072 6573 6572 7665 5065 726d 7329 0a09 preservePerms).. │ │ │ │ +0002c340: 0909 7b0a 0909 0920 2020 2063 686f 776e ..{.... chown │ │ │ │ +0002c350: 2024 7569 642c 2024 6769 642c 2024 6e65 $uid, $gid, $ne │ │ │ │ +0002c360: 7746 696c 653b 0a09 0909 2020 2020 6368 wFile;.... ch │ │ │ │ +0002c370: 6d6f 6420 246d 6f64 652c 2024 6e65 7746 mod $mode, $newF │ │ │ │ +0002c380: 696c 653b 0a09 0909 7d0a 0a09 0909 2320 ile;....}.....# │ │ │ │ +0002c390: 5363 6872 6569 6265 6e20 6465 7220 496e Schreiben der In │ │ │ │ +0002c3a0: 666f 726d 6174 696f 6e65 6e0a 0909 0924 formationen....$ │ │ │ │ +0002c3b0: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto │ │ │ │ +0002c3c0: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' = │ │ │ │ +0002c3d0: 3e20 2466 696c 652c 0a09 0909 0909 2020 > $file,...... │ │ │ │ +0002c3e0: 2020 272d 6d64 3573 756d 2720 3d3e 2024 '-md5sum' => $ │ │ │ │ +0002c3f0: 6d64 352c 0a09 0909 0909 2020 2020 272d md5,...... '- │ │ │ │ +0002c400: 636f 6d70 7227 203d 3e20 2463 6f6d 7072 compr' => $compr │ │ │ │ +0002c410: 4f6c 642c 0a09 0909 0909 2020 2020 272d Old,...... '- │ │ │ │ +0002c420: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,... │ │ │ │ +0002c430: 0909 0920 2020 2027 2d69 6e6f 6465 2720 ... '-inode' │ │ │ │ +0002c440: 3d3e 2024 696e 6f64 652c 0a09 0909 0909 => $inode,...... │ │ │ │ +0002c450: 2020 2020 272d 696e 6f64 6542 6163 6b75 '-inodeBacku │ │ │ │ +0002c460: 7027 203d 3e20 2469 6e6f 6465 4261 636b p' => $inodeBack │ │ │ │ +0002c470: 7570 2c0a 0909 0909 0920 2020 2027 2d63 up,...... '-c │ │ │ │ +0002c480: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime, │ │ │ │ +0002c490: 0a09 0909 0909 2020 2020 272d 6d74 696d ...... '-mtim │ │ │ │ +0002c4a0: 6527 203d 3e20 246d 7469 6d65 2c0a 0909 e' => $mtime,... │ │ │ │ +0002c4b0: 0909 0920 2020 2027 2d61 7469 6d65 2720 ... '-atime' │ │ │ │ +0002c4c0: 3d3e 2024 6174 696d 652c 0a09 0909 0909 => $atime,...... │ │ │ │ +0002c4d0: 2020 2020 272d 7369 7a65 2720 3d3e 2024 '-size' => $ │ │ │ │ +0002c4e0: 7369 7a65 2c0a 0909 0909 0920 2020 2027 size,...... ' │ │ │ │ +0002c4f0: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,.. │ │ │ │ +0002c500: 0909 0909 2020 2020 272d 6769 6427 203d .... '-gid' = │ │ │ │ +0002c510: 3e20 2467 6964 2c0a 0909 0909 0920 2020 > $gid,...... │ │ │ │ +0002c520: 2027 2d6d 6f64 6527 203d 3e20 246d 6f64 '-mode' => $mod │ │ │ │ +0002c530: 652c 0a09 0909 0909 2020 2020 272d 7374 e,...... '-st │ │ │ │ +0002c540: 6f72 6549 6e44 424d 2720 3d3e 2030 2020 oreInDBM' => 0 │ │ │ │ +0002c550: 2320 696e 2064 626d 2073 696e 6e6c 6f73 # in dbm sinnlos │ │ │ │ +0002c560: 0a09 0909 2020 2020 293b 0a09 0909 6966 .... );....if │ │ │ │ +0002c570: 2028 2463 6f6d 7072 4f6c 6420 6571 2027 ($comprOld eq ' │ │ │ │ +0002c580: 7527 290a 0909 097b 0a09 0909 2020 2020 u')....{.... │ │ │ │ +0002c590: 246d 6169 6e3a 3a73 7461 742d 3e61 6464 $main::stat->add │ │ │ │ +0002c5a0: 5375 6d55 6e63 6861 6e67 6564 436f 7079 SumUnchangedCopy │ │ │ │ +0002c5b0: 2824 7369 7a65 293b 0a09 0909 7d0a 0909 ($size);....}... │ │ │ │ +0002c5c0: 0965 6c73 6520 2020 2320 2463 6f6d 7072 .else # $compr │ │ │ │ +0002c5d0: 4f6c 6420 6571 2027 6327 0a09 0909 7b0a Old eq 'c'....{. │ │ │ │ +0002c5e0: 0909 0920 2020 2024 6d61 696e 3a3a 7374 ... $main::st │ │ │ │ +0002c5f0: 6174 2d3e 6164 6453 756d 556e 6368 616e at->addSumUnchan │ │ │ │ +0002c600: 6765 6443 6f6d 7072 2824 7369 7a65 293b gedCompr($size); │ │ │ │ +0002c610: 0a09 0909 7d0a 0909 2020 2020 7d0a 0909 ....}... }... │ │ │ │ +0002c620: 2020 2020 656c 7365 0a09 0920 2020 207b else... { │ │ │ │ +0002c630: 0a09 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin │ │ │ │ +0002c640: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ │ +0002c650: 2c0a 0909 0909 2020 2020 2020 272d 7374 ,..... '-st │ │ │ │ +0002c660: 7227 203d 3e0a 0909 0909 2020 2020 2020 r' =>..... │ │ │ │ +0002c670: 5b22 2877 6974 6820 6f6c 6429 2063 616e ["(with old) can │ │ │ │ +0002c680: 6e6f 7420 6c69 6e6b 2028 7669 6120 6d64 not link (via md │ │ │ │ +0002c690: 3529 2022 202e 0a09 0909 0920 2020 2020 5) " ...... │ │ │ │ +0002c6a0: 2020 223c 246f 6c64 4669 6c65 3e20 3c24 "<$oldFile> <$ │ │ │ │ +0002c6b0: 6e65 7746 696c 653e 225d 290a 0909 0920 newFile>"]).... │ │ │ │ +0002c6c0: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod │ │ │ │ +0002c6d0: 6520 3e3d 2031 293b 0a09 0909 246c 696e e >= 1);....$lin │ │ │ │ +0002c6e0: 6b46 696c 6520 3d20 756e 6465 663b 2020 kFile = undef; │ │ │ │ +0002c6f0: 2020 2020 2020 2023 203d 3e20 6b6f 7069 # => kopi │ │ │ │ +0002c700: 6572 656e 206f 6465 7220 6b6f 6d70 7269 eren oder kompri │ │ │ │ +0002c710: 6d69 6572 656e 0a09 0909 246f 6c64 4669 mieren....$oldFi │ │ │ │ +0002c720: 6c65 6e61 6d65 2d3e 6465 6c65 7465 456e lename->deleteEn │ │ │ │ +0002c730: 7472 7928 246d 6435 2c20 2020 2023 2069 try($md5, # i │ │ │ │ +0002c740: 6e20 5a75 6b75 6e66 7420 6e69 6368 7420 n Zukunft nicht │ │ │ │ +0002c750: 6d65 6872 0a09 0909 0909 0920 2024 6669 mehr....... $fi │ │ │ │ +0002c760: 6c65 293b 2020 2320 6d69 7420 6469 6573 le); # mit dies │ │ │ │ +0002c770: 6572 2044 6174 6569 206c 696e 6b65 6e0a er Datei linken. │ │ │ │ +0002c780: 0909 2020 2020 7d0a 0909 7d0a 0a20 2020 .. }...}.. │ │ │ │ +0002c790: 2020 2020 2020 2020 2020 2020 2023 2053 # S │ │ │ │ +0002c7a0: 7461 7473 206e 7572 2077 656e 6e20 7769 tats nur wenn wi │ │ │ │ +0002c7b0: 726b 6c69 6368 2067 656c 696e 6b74 0a20 rklich gelinkt. │ │ │ │ +0002c7c0: 2020 2020 2020 2020 2020 2020 2020 2069 i │ │ │ │ +0002c7d0: 6620 2864 6566 696e 6564 2024 6c69 6e6b f (defined $link │ │ │ │ +0002c7e0: 4669 6c65 290a 0909 7b0a 2020 2020 2020 File)...{. │ │ │ │ +0002c7f0: 2020 2020 2020 2020 2020 2020 2020 6966 if │ │ │ │ +0002c800: 2028 2463 6f6d 7072 4f6c 6420 6571 2027 ($comprOld eq ' │ │ │ │ +0002c810: 7527 290a 0909 2020 2020 7b0a 2020 2020 u')... {. │ │ │ │ +0002c820: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c830: 2020 2020 6966 2028 2469 6e74 6572 6e61 if ($interna │ │ │ │ +0002c840: 6c4f 6c64 2065 7120 2769 6e74 6572 6e61 lOld eq 'interna │ │ │ │ +0002c850: 6c27 290a 0909 097b 0a20 2020 2020 2020 l')....{. │ │ │ │ +0002c860: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c870: 2020 2020 2024 6d61 696e 3a3a 7374 6174 $main::stat │ │ │ │ +0002c880: 2d3e 6164 6453 756d 4c69 6e6b 6564 496e ->addSumLinkedIn │ │ │ │ +0002c890: 7465 726e 616c 436f 7079 2824 7369 7a65 ternalCopy($size │ │ │ │ +0002c8a0: 293b 0a20 2020 2020 2020 2020 2020 2020 );. │ │ │ │ +0002c8b0: 2020 2020 2020 2020 2020 207d 0a20 2020 }. │ │ │ │ +0002c8c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c8d0: 2020 2020 2065 6c73 650a 0909 097b 0a20 else....{. │ │ │ │ +0002c8e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c8f0: 2020 2020 2020 2020 2020 2024 6d61 696e $main │ │ │ │ +0002c900: 3a3a 7374 6174 2d3e 6164 6453 756d 4c69 ::stat->addSumLi │ │ │ │ +0002c910: 6e6b 6564 4f6c 6443 6f70 7928 2473 697a nkedOldCopy($siz │ │ │ │ +0002c920: 6529 3b0a 2020 2020 2020 2020 2020 2020 e);. │ │ │ │ +0002c930: 2020 2020 2020 2020 2020 2020 7d0a 2020 }. │ │ │ │ +0002c940: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002c950: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ │ +0002c960: 2020 2020 2020 2020 656c 7365 0a09 0920 else... │ │ │ │ +0002c970: 2020 207b 0a20 2020 2020 2020 2020 2020 {. │ │ │ │ +0002c980: 2020 2020 2020 2020 2020 2020 2069 6620 if │ │ │ │ +0002c990: 2824 696e 7465 726e 616c 4f6c 6420 6571 ($internalOld eq │ │ │ │ +0002c9a0: 2027 696e 7465 726e 616c 2729 0a09 0909 'internal').... │ │ │ │ +0002c9b0: 7b0a 2020 2020 2020 2020 2020 2020 2020 {. │ │ │ │ +0002c9c0: 2020 2020 2020 2020 2020 2020 2020 246d $m │ │ │ │ +0002c9d0: 6169 6e3a 3a73 7461 742d 3e61 6464 5375 ain::stat->addSu │ │ │ │ +0002c9e0: 6d4c 696e 6b65 6449 6e74 6572 6e61 6c43 mLinkedInternalC │ │ │ │ +0002c9f0: 6f6d 7072 2824 7369 7a65 293b 0a20 2020 ompr($size);. │ │ │ │ +0002ca00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002ca10: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ │ +0002ca20: 2020 2020 2020 2020 2020 2020 2020 2065 e │ │ │ │ +0002ca30: 6c73 650a 0909 097b 0a20 2020 2020 2020 lse....{. │ │ │ │ +0002ca40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002ca50: 2020 2020 2024 6d61 696e 3a3a 7374 6174 $main::stat │ │ │ │ +0002ca60: 2d3e 6164 6453 756d 4c69 6e6b 6564 4f6c ->addSumLinkedOl │ │ │ │ +0002ca70: 6443 6f6d 7072 2824 7369 7a65 293b 0a20 dCompr($size);. │ │ │ │ +0002ca80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002ca90: 2020 2020 2020 207d 0a20 2020 2020 2020 }. │ │ │ │ +0002caa0: 2020 2020 2020 2020 2020 2020 207d 0a20 }. │ │ │ │ +0002cab0: 2020 2020 2020 2020 2020 2020 2020 207d } │ │ │ │ +0002cac0: 0a09 2020 2020 7d0a 0a20 2020 2020 2020 .. }.. │ │ │ │ +0002cad0: 2020 2020 2023 2065 7869 7374 6965 7274 # existiert │ │ │ │ +0002cae0: 206e 6f63 6820 6e69 6368 742c 2063 6f70 noch nicht, cop │ │ │ │ +0002caf0: 7920 6f64 6572 2063 6f6d 7072 6573 730a y oder compress. │ │ │ │ +0002cb00: 2370 7269 6e74 2022 2d20 3420 2d5c 6e22 #print "- 4 -\n" │ │ │ │ +0002cb10: 3b0a 0920 2020 2069 6620 286e 6f74 2064 ;.. if (not d │ │ │ │ +0002cb20: 6566 696e 6564 2024 6c69 6e6b 4669 6c65 efined $linkFile │ │ │ │ +0002cb30: 290a 0920 2020 207b 0a09 0926 3a3a 6d61 ).. {...&::ma │ │ │ │ +0002cb40: 6b65 4669 6c65 5061 7468 2822 2474 6172 keFilePath("$tar │ │ │ │ +0002cb50: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file", $ │ │ │ │ +0002cb60: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL │ │ │ │ +0002cb70: 696e 6b73 3b0a 0a23 7072 696e 7420 222d inks;..#print "- │ │ │ │ +0002cb80: 2035 202d 5c6e 223b 0a09 0969 6620 2865 5 -\n";...if (e │ │ │ │ +0002cb90: 7869 7374 7320 2469 6e50 726f 6772 6573 xists $inProgres │ │ │ │ +0002cba0: 737b 246d 6435 7d29 2023 2041 7566 204b s{$md5}) # Auf K │ │ │ │ +0002cbb0: 6f6d 7072 6573 7369 6f6e 2f4b 6f70 6965 ompression/Kopie │ │ │ │ +0002cbc0: 2077 6172 7465 6e0a 0909 7b0a 2370 7269 warten...{.#pri │ │ │ │ +0002cbd0: 6e74 2022 2d20 3620 2d5c 6e22 3b0a 0909 nt "- 6 -\n";... │ │ │ │ +0002cbe0: 2020 2020 7075 7368 2040 7b24 696e 5072 push @{$inPr │ │ │ │ +0002cbf0: 6f67 7265 7373 7b24 6d64 357d 7d2c 205b ogress{$md5}}, [ │ │ │ │ +0002cc00: 2464 6972 2c20 2466 696c 652c 2024 6d64 $dir, $file, $md │ │ │ │ +0002cc10: 352c 2027 6627 5d3b 0a09 0920 2020 2024 5, 'f'];... $ │ │ │ │ +0002cc20: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +0002cc30: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',.... │ │ │ │ +0002cc40: 0920 2027 2d73 7472 2720 3d3e 205b 2266 . '-str' => ["f │ │ │ │ +0002cc50: 6f75 6e64 2069 6465 6e74 6963 616c 2066 ound identical f │ │ │ │ +0002cc60: 696c 6520 3c24 6669 6c65 3e22 5d29 0a09 ile <$file>"]).. │ │ │ │ +0002cc70: 0909 6966 2024 6465 6275 674d 6f64 6520 ..if $debugMode │ │ │ │ +0002cc80: 3e3d 2033 3b0a 0909 2020 2020 6e65 7874 >= 3;... next │ │ │ │ +0002cc90: 3b0a 0909 7d0a 0a20 2020 2020 2020 2020 ;...}.. │ │ │ │ +0002cca0: 2020 2020 2020 2024 696e 5072 6f67 7265 $inProgre │ │ │ │ +0002ccb0: 7373 7b24 6d64 357d 203d 205b 5d3b 2020 ss{$md5} = []; │ │ │ │ +0002ccc0: 2023 206d 6572 6b65 6e2c 2077 6972 6420 # merken, wird │ │ │ │ +0002ccd0: 6b6f 7069 6572 742f 6b6f 6d70 7269 6d69 kopiert/komprimi │ │ │ │ +0002cce0: 6572 740a 0a23 7072 696e 7420 222d 2037 ert..#print "- 7 │ │ │ │ +0002ccf0: 202d 5c6e 223b 0a09 096e 6f20 7761 726e -\n";...no warn │ │ │ │ +0002cd00: 696e 6773 2027 6e65 776c 696e 6527 3b0a ings 'newline';. │ │ │ │ +0002cd10: 0909 6966 2028 2824 636f 6d70 7252 756c ..if (($comprRul │ │ │ │ +0002cd20: 652d 3e68 6173 4c69 6e65 2829 203d 3d20 e->hasLine() == │ │ │ │ +0002cd30: 3120 616e 640a 0909 2020 2020 2024 636f 1 and... $co │ │ │ │ +0002cd40: 6d70 7252 756c 652d 3e63 6865 636b 5275 mprRule->checkRu │ │ │ │ +0002cd50: 6c65 2824 6669 6c65 2c20 2473 697a 652c le($file, $size, │ │ │ │ +0002cd60: 2024 6d6f 6465 2c20 2463 7469 6d65 2c20 $mode, $ctime, │ │ │ │ +0002cd70: 246d 7469 6d65 2c0a 0909 0909 0920 2020 $mtime,...... │ │ │ │ +0002cd80: 2020 2024 7569 642c 2024 6769 642c 2024 $uid, $gid, $ │ │ │ │ +0002cd90: 7479 7065 2920 3d3d 2031 290a 0909 2020 type) == 1)... │ │ │ │ +0002cda0: 2020 6f72 202d 6520 2224 6469 722f 2466 or -e "$dir/$f │ │ │ │ +0002cdb0: 696c 6524 706f 7374 6669 7822 2920 2320 ile$postfix") # │ │ │ │ +0002cdc0: 4461 7465 6920 6861 7420 6e69 6368 7420 Datei hat nicht │ │ │ │ +0002cdd0: 2e62 7a32 2c20 6573 0a09 097b 2020 2020 .bz2, es...{ │ │ │ │ +0002cde0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002cdf0: 2020 2020 2020 2020 2020 2023 2065 7869 # exi │ │ │ │ +0002ce00: 7374 6965 7274 2061 6265 7220 4461 7465 stiert aber Date │ │ │ │ +0002ce10: 6920 6d69 7420 2e62 7a32 0a09 0920 2020 i mit .bz2... │ │ │ │ +0002ce20: 2069 6620 282d 6520 2224 6469 722f 2466 if (-e "$dir/$f │ │ │ │ +0002ce30: 696c 6524 706f 7374 6669 7822 290a 0909 ile$postfix")... │ │ │ │ +0002ce40: 2020 2020 7b0a 2370 7269 6e74 2022 2d20 {.#print "- │ │ │ │ +0002ce50: 3820 2d5c 6e22 3b0a 0909 0924 6669 666f 8 -\n";....$fifo │ │ │ │ +0002ce60: 436f 7079 2d3e 6164 6428 272d 7661 6c75 Copy->add('-valu │ │ │ │ +0002ce70: 6527 203d 3e0a 0909 0909 2020 2020 2020 e' =>..... │ │ │ │ +0002ce80: 205b 2464 6972 2c20 2466 696c 652c 2024 [$dir, $file, $ │ │ │ │ +0002ce90: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode │ │ │ │ +0002cea0: 2c0a 0909 0909 0924 6d64 352c 2027 636f ,......$md5, 'co │ │ │ │ +0002ceb0: 7079 275d 293b 0a09 0920 2020 207d 0a09 py']);... }.. │ │ │ │ +0002cec0: 0920 2020 2065 6c73 6966 2028 246c 6174 . elsif ($lat │ │ │ │ +0002ced0: 6543 6f6d 7072 6573 7329 0a09 0920 2020 eCompress)... │ │ │ │ +0002cee0: 207b 0a23 7072 696e 7420 222d 2039 202d {.#print "- 9 - │ │ │ │ +0002cef0: 5c6e 223b 0a09 0909 2466 6966 6f43 6f70 \n";....$fifoCop │ │ │ │ +0002cf00: 792d 3e61 6464 2827 2d76 616c 7565 2720 y->add('-value' │ │ │ │ +0002cf10: 3d3e 0a09 0909 0920 2020 2020 2020 5b24 =>..... [$ │ │ │ │ +0002cf20: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid │ │ │ │ +0002cf30: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,.. │ │ │ │ +0002cf40: 0909 0909 246d 6435 2c20 2763 6f6d 7072 ....$md5, 'compr │ │ │ │ +0002cf50: 275d 293b 0a09 0920 2020 207d 0a09 0920 ']);... }... │ │ │ │ +0002cf60: 2020 2065 6c73 6520 2020 2320 636f 6d70 else # comp │ │ │ │ +0002cf70: 7265 7373 2066 696c 650a 0909 2020 2020 ress file... │ │ │ │ +0002cf80: 7b0a 2370 7269 6e74 2022 2d20 3130 202d {.#print "- 10 - │ │ │ │ +0002cf90: 5c6e 223b 0a09 0909 2466 6966 6f43 6f6d \n";....$fifoCom │ │ │ │ +0002cfa0: 7072 2d3e 6164 6428 272d 7661 6c75 6527 pr->add('-value' │ │ │ │ +0002cfb0: 203d 3e0a 0909 0909 095b 2464 6972 2c20 =>......[$dir, │ │ │ │ +0002cfc0: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi │ │ │ │ +0002cfd0: 642c 2024 6d6f 6465 2c0a 0909 0909 0920 d, $mode,...... │ │ │ │ +0002cfe0: 246d 6435 2c20 2763 6f6d 7072 275d 293b $md5, 'compr']); │ │ │ │ +0002cff0: 0a09 0920 2020 207d 0a09 097d 0a09 0965 ... }...}...e │ │ │ │ +0002d000: 6c73 6520 2020 2020 2020 2320 636f 7079 lse # copy │ │ │ │ +0002d010: 2066 696c 650a 0909 7b0a 2370 7269 6e74 file...{.#print │ │ │ │ +0002d020: 2022 2d20 3131 202d 5c6e 223b 0a09 0920 "- 11 -\n";... │ │ │ │ +0002d030: 2020 2024 6669 666f 436f 7079 2d3e 6164 $fifoCopy->ad │ │ │ │ +0002d040: 6428 272d 7661 6c75 6527 203d 3e0a 0909 d('-value' =>... │ │ │ │ +0002d050: 0909 2020 205b 2464 6972 2c20 2466 696c .. [$dir, $fil │ │ │ │ +0002d060: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $ │ │ │ │ +0002d070: 6d6f 6465 2c0a 0909 0909 2020 2020 246d mode,..... $m │ │ │ │ +0002d080: 6435 2c20 2763 6f70 7927 5d29 3b0a 2020 d5, 'copy']);. │ │ │ │ +0002d090: 2020 2020 2020 2020 2020 2020 2020 7d0a }. │ │ │ │ +0002d0a0: 0920 2020 207d 0a09 7d20 2320 456e 6465 . }..} # Ende │ │ │ │ +0002d0b0: 2053 6368 6c65 6966 6520 5761 7274 6573 Schleife Wartes │ │ │ │ +0002d0c0: 6368 6c61 6765 6e20 66c3 bc6c 6c65 6e0a chlagen f..llen. │ │ │ │ +0002d0d0: 0a20 2020 2020 2020 2023 2041 6c74 6520 . # Alte │ │ │ │ +0002d0e0: 4b6f 7069 6572 2d4a 6f62 7320 6162 686f Kopier-Jobs abho │ │ │ │ +0002d0f0: 6c65 6e0a 2020 2020 2020 2020 666f 7265 len. fore │ │ │ │ +0002d100: 6163 6820 6d79 2024 6920 2824 7061 7246 ach my $i ($parF │ │ │ │ +0002d110: 6f72 6b43 6f70 792d 3e63 6865 636b 416c orkCopy->checkAl │ │ │ │ +0002d120: 6c28 2929 0a20 2020 2020 2020 207b 0a20 l()). {. │ │ │ │ +0002d130: 2020 2020 2020 2020 2020 2023 2057 6520 # We │ │ │ │ +0002d140: 6469 6420 736f 6d65 7468 696e 670a 2020 did something. │ │ │ │ +0002d150: 2020 2020 2020 2020 2020 246d 6169 6e3a $main: │ │ │ │ +0002d160: 3a74 696e 7957 6169 7453 6368 6564 756c :tinyWaitSchedul │ │ │ │ +0002d170: 6572 2d3e 7265 7365 7428 293b 0a0a 2020 er->reset();.. │ │ │ │ +0002d180: 2020 2020 2020 2020 2020 6d79 2024 7374 my $st │ │ │ │ +0002d190: 6465 7272 203d 2024 692d 3e67 6574 5354 derr = $i->getST │ │ │ │ +0002d1a0: 4445 5252 2829 3b0a 2020 2020 2020 2020 DERR();. │ │ │ │ +0002d1b0: 2020 2020 6d79 2028 2464 6576 2c20 2469 my ($dev, $i │ │ │ │ +0002d1c0: 6e6f 6465 2c20 2464 6972 2c20 2466 696c node, $dir, $fil │ │ │ │ +0002d1d0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $ │ │ │ │ +0002d1e0: 6d6f 6465 2c20 246d 6435 2c0a 2020 2020 mode, $md5,. │ │ │ │ +0002d1f0: 2020 2020 2020 2020 2020 2020 2463 7469 $cti │ │ │ │ +0002d200: 6d65 2c20 246d 7469 6d65 2c20 2461 7469 me, $mtime, $ati │ │ │ │ +0002d210: 6d65 2c20 2473 697a 652c 2024 636f 6d70 me, $size, $comp │ │ │ │ +0002d220: 722c 2024 746d 704d 4435 4669 6c65 2920 r, $tmpMD5File) │ │ │ │ +0002d230: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. │ │ │ │ +0002d240: 2020 2020 2020 407b 2469 2d3e 6765 7428 @{$i->get( │ │ │ │ +0002d250: 272d 7768 6174 2720 3d3e 2027 696e 666f '-what' => 'info │ │ │ │ +0002d260: 2729 7d3b 0a0a 0920 2020 2069 6620 2826 ')};... if (& │ │ │ │ +0002d270: 3a3a 7761 6974 466f 7246 696c 6528 2224 ::waitForFile("$ │ │ │ │ +0002d280: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ │ +0002d290: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL │ │ │ │ +0002d2a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +0002d2b0: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ │ +0002d2c0: 2020 2027 2d73 7472 2720 3d3e 205b 223c '-str' => ["< │ │ │ │ +0002d2d0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +0002d2e0: 3e20 7761 7320 6e6f 7420 6372 6561 7465 > was not create │ │ │ │ +0002d2f0: 6422 5d29 3b0a 0909 6e65 7874 3b0a 0920 d"]);...next;.. │ │ │ │ +0002d300: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ │ +0002d310: 2069 6620 2824 7072 6573 6572 7665 5065 if ($preservePe │ │ │ │ +0002d320: 726d 7320 616e 6420 6e6f 7420 246c 6174 rms and not $lat │ │ │ │ +0002d330: 654c 696e 6b73 290a 0920 2020 207b 0a20 eLinks).. {. │ │ │ │ +0002d340: 2020 2020 2020 2020 2020 2020 2020 2063 c │ │ │ │ +0002d350: 686f 776e 2024 7569 642c 2024 6769 642c hown $uid, $gid, │ │ │ │ +0002d360: 2022 2474 6172 6765 7444 6972 2f24 6669 "$targetDir/$fi │ │ │ │ +0002d370: 6c65 223b 0a20 2020 2020 2020 2020 2020 le";. │ │ │ │ +0002d380: 2020 2020 2063 686d 6f64 2024 6d6f 6465 chmod $mode │ │ │ │ +0002d390: 2c20 2224 7461 7267 6574 4469 722f 2466 , "$targetDir/$f │ │ │ │ +0002d3a0: 696c 6522 3b0a 2020 2020 2020 2020 2020 ile";. │ │ │ │ +0002d3b0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati │ │ │ │ +0002d3c0: 6d65 2c20 246d 7469 6d65 2c20 2224 6469 me, $mtime, "$di │ │ │ │ +0002d3d0: 722f 2466 696c 6522 2069 6620 2472 6573 r/$file" if $res │ │ │ │ +0002d3e0: 6574 4174 696d 653b 0a20 2020 2020 2020 etAtime;. │ │ │ │ +0002d3f0: 2020 2020 2020 2020 2075 7469 6d65 2024 utime $ │ │ │ │ +0002d400: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, " │ │ │ │ +0002d410: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +0002d420: 223b 0a20 2020 2020 2020 2020 2020 207d ";. } │ │ │ │ +0002d430: 0a0a 2020 2020 2020 2020 2020 2020 6d79 .. my │ │ │ │ +0002d440: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = │ │ │ │ +0002d450: 2873 7461 7428 2224 7461 7267 6574 4469 (stat("$targetDi │ │ │ │ +0002d460: 722f 2466 696c 6522 2929 5b31 5d3b 0a09 r/$file"))[1];.. │ │ │ │ +0002d470: 2020 2020 2469 6e6f 6465 4261 636b 7570 $inodeBackup │ │ │ │ +0002d480: 203d 2030 2075 6e6c 6573 7320 2469 6e6f = 0 unless $ino │ │ │ │ +0002d490: 6465 4261 636b 7570 3b20 2020 2320 6966 deBackup; # if │ │ │ │ +0002d4a0: 2074 696d 696e 6720 6973 7375 652c 0a09 timing issue,.. │ │ │ │ +0002d4b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002d4c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002d4d0: 2020 2020 2020 2020 2020 2020 2320 7661 # va │ │ │ │ +0002d4e0: 6c75 6520 6973 206e 6f74 2075 7365 6420 lue is not used │ │ │ │ +0002d4f0: 6174 2061 6c6c 0a0a 2020 2020 2020 2020 at all.. │ │ │ │ +0002d500: 2020 2020 6966 2028 4024 7374 6465 7272 if (@$stderr │ │ │ │ +0002d510: 203e 2030 290a 2020 2020 2020 2020 2020 > 0). │ │ │ │ +0002d520: 2020 7b0a 0909 756e 6c65 7373 2028 2d65 {...unless (-e │ │ │ │ +0002d530: 2022 2464 6972 2f24 6669 6c65 2229 2023 "$dir/$file") # │ │ │ │ +0002d540: 2066 696c 6520 7761 7320 6465 6c65 7465 file was delete │ │ │ │ +0002d550: 6420 6475 7269 6e67 2063 6f70 7969 6e67 d during copying │ │ │ │ +0002d560: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo │ │ │ │ +0002d570: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +0002d580: 203d 3e20 2757 272c 0a09 0909 0920 2027 => 'W',..... ' │ │ │ │ +0002d590: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ │ +0002d5a0: 2266 696c 6520 3c24 6469 722f 2466 696c "file <$dir/$fil │ │ │ │ +0002d5b0: 653e 2064 656c 6574 6564 2064 7572 696e e> deleted durin │ │ │ │ +0002d5c0: 6720 6261 636b 7570 225d 293b 0a09 097d g backup"]);...} │ │ │ │ +0002d5d0: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... │ │ │ │ +0002d5e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +0002d5f0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +0002d600: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ │ +0002d610: 0909 0909 2020 5b22 636f 7079 696e 6720 .... ["copying │ │ │ │ +0002d620: 3c24 6469 722f 2466 696c 653e 202d 3e20 <$dir/$file> -> │ │ │ │ +0002d630: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil │ │ │ │ +0002d640: 653e 2220 2e0a 0909 0909 2020 2022 2067 e>" ...... " g │ │ │ │ +0002d650: 656e 6572 6174 6564 2074 6865 2066 6f6c enerated the fol │ │ │ │ +0002d660: 6c6f 7769 6e67 2065 7272 6f72 206d 6573 lowing error mes │ │ │ │ +0002d670: 7361 6765 733a 222c 0a09 0909 0920 2020 sages:",..... │ │ │ │ +0002d680: 4024 7374 6465 7272 5d29 3b0a 0909 7d0a @$stderr]);...}. │ │ │ │ +0002d690: 0909 756e 6c69 6e6b 2022 2474 6172 6765 ..unlink "$targe │ │ │ │ +0002d6a0: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file";. │ │ │ │ +0002d6b0: 2020 2020 2020 2020 2020 2020 206e 6578 nex │ │ │ │ +0002d6c0: 743b 0a20 2020 2020 2020 2020 2020 207d t;. } │ │ │ │ +0002d6d0: 0a0a 0920 2020 206c 6f63 616c 202a 544d ... local *TM │ │ │ │ +0002d6e0: 504d 4435 3b0a 0920 2020 2075 6e6c 6573 PMD5;.. unles │ │ │ │ +0002d6f0: 7320 2826 3a3a 7761 6974 466f 7246 696c s (&::waitForFil │ │ │ │ +0002d700: 6528 2474 6d70 4d44 3546 696c 6529 206f e($tmpMD5File) o │ │ │ │ +0002d710: 720a 0909 2020 2020 6f70 656e 2854 4d50 r... open(TMP │ │ │ │ +0002d720: 4d44 352c 2024 746d 704d 4435 4669 6c65 MD5, $tmpMD5File │ │ │ │ +0002d730: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL │ │ │ │ +0002d740: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +0002d750: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ │ +0002d760: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +0002d770: 616e 6e6f 7420 7265 6164 2072 6563 616c annot read recal │ │ │ │ +0002d780: 6365 6420 6d64 3573 756d 2022 202e 0a09 ced md5sum " ... │ │ │ │ +0002d790: 0909 0909 2022 6f66 203c 2474 6172 6765 .... "of <$targe │ │ │ │ +0002d7a0: 7444 6972 2f24 6669 6c65 3e22 202e 0a09 tDir/$file>" ... │ │ │ │ +0002d7b0: 0909 0909 2022 3b20 6669 6c65 2069 7320 .... "; file is │ │ │ │ +0002d7c0: 6e6f 7420 6261 636b 6564 2075 7022 5d29 not backed up"]) │ │ │ │ +0002d7d0: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. } │ │ │ │ +0002d7e0: 0a09 2020 2020 6d79 2024 6c61 7374 4d44 .. my $lastMD │ │ │ │ +0002d7f0: 3520 3d20 3c54 4d50 4d44 353e 3b0a 0920 5 = ;.. │ │ │ │ +0002d800: 2020 2063 686f 6d70 2024 6c61 7374 4d44 chomp $lastMD │ │ │ │ +0002d810: 353b 0a09 2020 2020 6d79 2024 6c61 7374 5;.. my $last │ │ │ │ +0002d820: 5369 7a65 203d 203c 544d 504d 4435 3e3b Size = ; │ │ │ │ +0002d830: 0a09 2020 2020 6368 6f6d 7020 246c 6173 .. chomp $las │ │ │ │ +0002d840: 7453 697a 653b 0a09 2020 2020 636c 6f73 tSize;.. clos │ │ │ │ +0002d850: 6528 544d 504d 4435 293b 0a09 2020 2020 e(TMPMD5);.. │ │ │ │ +0002d860: 756e 6c69 6e6b 2024 746d 704d 4435 4669 unlink $tmpMD5Fi │ │ │ │ +0002d870: 6c65 3b0a 0a09 2020 2020 246d 6169 6e3a le;... $main: │ │ │ │ +0002d880: 3a73 7461 742d 3e61 6464 5f6e 6f4d 4435 :stat->add_noMD5 │ │ │ │ +0002d890: 6564 4669 6c65 7328 3129 3b0a 0920 2020 edFiles(1);.. │ │ │ │ +0002d8a0: 2075 6e6c 6573 7320 2824 6c61 7374 4d44 unless ($lastMD │ │ │ │ +0002d8b0: 3529 0a09 2020 2020 7b0a 0909 2470 724c 5).. {...$prL │ │ │ │ +0002d8c0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +0002d8d0: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... │ │ │ │ +0002d8e0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>.... │ │ │ │ +0002d8f0: 2020 2020 2020 5b22 6669 6c65 203c 2464 ["file <$d │ │ │ │ +0002d900: 6972 2f24 6669 6c65 3e20 6465 6c65 7465 ir/$file> delete │ │ │ │ +0002d910: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup" │ │ │ │ +0002d920: 5d29 0a09 0920 2020 2075 6e6c 6573 7320 ])... unless │ │ │ │ +0002d930: 6578 6973 7473 2024 7375 7070 7265 7373 exists $suppress │ │ │ │ +0002d940: 5761 726e 696e 677b 2766 696c 6543 6861 Warning{'fileCha │ │ │ │ +0002d950: 6e67 6527 7d3b 0a09 096e 6578 743b 0a09 nge'};...next;.. │ │ │ │ +0002d960: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($ │ │ │ │ +0002d970: 6c61 7374 4d44 3520 6e65 2024 6d64 3520 lastMD5 ne $md5 │ │ │ │ +0002d980: 6f72 2024 6c61 7374 5369 7a65 2021 3d20 or $lastSize != │ │ │ │ +0002d990: 2473 697a 6529 0a09 2020 2020 7b0a 0909 $size).. {... │ │ │ │ +0002d9a0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +0002d9b0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +0002d9c0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +0002d9d0: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... ["file │ │ │ │ +0002d9e0: 203c 2464 6972 2f24 6669 6c65 3e20 6368 <$dir/$file> ch │ │ │ │ +0002d9f0: 616e 6765 6420 6475 7269 6e67 2062 6163 anged during bac │ │ │ │ +0002da00: 6b75 7022 5d29 0a09 0920 2020 2075 6e6c kup"])... unl │ │ │ │ +0002da10: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp │ │ │ │ +0002da20: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ │ +0002da30: 6543 6861 6e67 6527 7d3b 0a09 0924 6d64 eChange'};...$md │ │ │ │ +0002da40: 3520 3d20 246c 6173 744d 4435 3b0a 0909 5 = $lastMD5;... │ │ │ │ +0002da50: 2473 697a 6520 3d20 246c 6173 7453 697a $size = $lastSiz │ │ │ │ +0002da60: 653b 0a09 2020 2020 7d0a 0a20 2020 2020 e;.. }.. │ │ │ │ +0002da70: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p │ │ │ │ +0002da80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +0002da90: 2744 272c 0a20 2020 2020 2020 2020 2020 'D',. │ │ │ │ +0002daa0: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +0002dab0: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. │ │ │ │ +0002dac0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dad0: 2020 205b 2266 696e 6973 6865 6420 636f ["finished co │ │ │ │ +0002dae0: 7079 203c 2464 6972 2f24 6669 6c65 3e20 py <$dir/$file> │ │ │ │ +0002daf0: 2220 2e0a 2020 2020 2020 2020 2020 2020 " .. │ │ │ │ +0002db00: 2020 2020 2020 2020 2020 2020 2020 2022 " │ │ │ │ +0002db10: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil │ │ │ │ +0002db20: 653e 225d 290a 2020 2020 2020 2020 2020 e>"]). │ │ │ │ +0002db30: 2020 2020 2020 6966 2028 2464 6562 7567 if ($debug │ │ │ │ +0002db40: 4d6f 6465 203e 3d20 3229 3b0a 0a20 2020 Mode >= 2);.. │ │ │ │ +0002db50: 2020 2020 2020 2020 2024 6d61 696e 3a3a $main:: │ │ │ │ +0002db60: 7374 6174 2d3e 696e 6372 5f6e 6f46 6f72 stat->incr_noFor │ │ │ │ +0002db70: 6b73 4350 2829 3b0a 2020 2020 2020 2020 ksCP();. │ │ │ │ +0002db80: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat- │ │ │ │ +0002db90: 3e61 6464 5375 6d4e 6577 436f 7079 2824 >addSumNewCopy($ │ │ │ │ +0002dba0: 7369 7a65 293b 0a0a 2020 2020 2020 2020 size);.. │ │ │ │ +0002dbb0: 2020 2020 2461 6b74 4669 6c65 6e61 6d65 $aktFilename │ │ │ │ +0002dbc0: 2d3e 7374 6f72 6528 272d 6669 6c65 6e61 ->store('-filena │ │ │ │ +0002dbd0: 6d65 2720 3d3e 2024 6669 6c65 2c20 2023 me' => $file, # │ │ │ │ +0002dbe0: 2073 7065 6963 6865 7274 2069 6e20 6462 speichert in db │ │ │ │ +0002dbf0: 6d0a 2020 2020 2020 2020 2020 2020 2020 m. │ │ │ │ +0002dc00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dc10: 2020 272d 6d64 3573 756d 2720 3d3e 2024 '-md5sum' => $ │ │ │ │ +0002dc20: 6d64 352c 2020 2020 2023 202e 6d64 3573 md5, # .md5s │ │ │ │ +0002dc30: 756d 2d44 6174 6569 0a20 2020 2020 2020 um-Datei. │ │ │ │ +0002dc40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dc50: 2020 2020 2020 2020 2027 2d63 6f6d 7072 '-compr │ │ │ │ +0002dc60: 2720 3d3e 2024 636f 6d70 722c 0a20 2020 ' => $compr,. │ │ │ │ +0002dc70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dc80: 2020 2020 2020 2020 2020 2020 2027 2d64 '-d │ │ │ │ +0002dc90: 6576 2720 3d3e 2024 6465 762c 0a20 2020 ev' => $dev,. │ │ │ │ +0002dca0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dcb0: 2020 2020 2020 2020 2020 2020 2027 2d69 '-i │ │ │ │ +0002dcc0: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode, │ │ │ │ +0002dcd0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002dce0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dcf0: 2027 2d69 6e6f 6465 4261 636b 7570 2720 '-inodeBackup' │ │ │ │ +0002dd00: 3d3e 2024 696e 6f64 6542 6163 6b75 702c => $inodeBackup, │ │ │ │ +0002dd10: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002dd20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dd30: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct │ │ │ │ +0002dd40: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. │ │ │ │ +0002dd50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dd60: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' => │ │ │ │ +0002dd70: 2024 6d74 696d 652c 0a20 2020 2020 2020 $mtime,. │ │ │ │ +0002dd80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002dd90: 2020 2020 2020 2020 2027 2d61 7469 6d65 '-atime │ │ │ │ +0002dda0: 2720 3d3e 2024 6174 696d 652c 0a20 2020 ' => $atime,. │ │ │ │ +0002ddb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002ddc0: 2020 2020 2020 2020 2020 2020 2027 2d73 '-s │ │ │ │ +0002ddd0: 697a 6527 203d 3e20 2473 697a 652c 0a20 ize' => $size,. │ │ │ │ +0002dde0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002ddf0: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +0002de00: 2d75 6964 2720 3d3e 2024 7569 642c 0a20 -uid' => $uid,. │ │ │ │ +0002de10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002de20: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +0002de30: 2d67 6964 2720 3d3e 2024 6769 642c 0a20 -gid' => $gid,. │ │ │ │ +0002de40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002de50: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +0002de60: 2d6d 6f64 6527 203d 3e20 246d 6f64 6529 -mode' => $mode) │ │ │ │ +0002de70: 3b0a 0a0a 2020 2020 2020 2020 2020 2020 ;... │ │ │ │ +0002de80: 6966 2028 6578 6973 7473 2024 696e 5072 if (exists $inPr │ │ │ │ +0002de90: 6f67 7265 7373 7b24 6d64 357d 2061 6e64 ogress{$md5} and │ │ │ │ +0002dea0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002deb0: 2040 7b24 696e 5072 6f67 7265 7373 7b24 @{$inProgress{$ │ │ │ │ +0002dec0: 6d64 357d 7d20 3e20 3029 2020 2320 6765 md5}} > 0) # ge │ │ │ │ +0002ded0: 7075 6666 6572 7465 2046 696c 6573 206d pufferte Files m │ │ │ │ +0002dee0: 6974 0a20 2020 2020 2020 2020 2020 207b it. { │ │ │ │ +0002def0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002df00: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +0002df10: 676c 6569 6368 6572 206d 6435 2053 756d gleicher md5 Sum │ │ │ │ +0002df20: 6d65 2062 6561 7262 6569 7465 6e0a 2020 me bearbeiten. │ │ │ │ +0002df30: 2020 2020 2020 2020 2020 2020 2020 2466 $f │ │ │ │ +0002df40: 696c 6573 4c65 6674 203d 2031 3b0a 2020 ilesLeft = 1;. │ │ │ │ +0002df50: 2020 2020 2020 2020 2020 2020 2020 2472 $r │ │ │ │ +0002df60: 6561 6444 6972 416e 6443 6865 636b 2d3e eadDirAndCheck-> │ │ │ │ +0002df70: 7075 7368 6261 636b 2824 696e 5072 6f67 pushback($inProg │ │ │ │ +0002df80: 7265 7373 7b24 6d64 357d 2c20 2470 724c ress{$md5}, $prL │ │ │ │ +0002df90: 6f67 2c0a 0909 2020 2020 2464 6562 7567 og,... $debug │ │ │ │ +0002dfa0: 4d6f 6465 203e 3d20 3320 3f20 3120 3a20 Mode >= 3 ? 1 : │ │ │ │ +0002dfb0: 3029 3b0a 2020 2020 2020 2020 2020 2020 0);. │ │ │ │ +0002dfc0: 7d0a 2020 2020 2020 2020 2020 2020 6465 }. de │ │ │ │ +0002dfd0: 6c65 7465 2024 696e 5072 6f67 7265 7373 lete $inProgress │ │ │ │ +0002dfe0: 7b24 6d64 357d 3b0a 2020 2020 2020 2020 {$md5};. │ │ │ │ +0002dff0: 7d0a 0a09 2320 6e65 7565 2042 6c6f 636b }...# neue Block │ │ │ │ +0002e000: 2d6d 6435 204a 6f62 7320 6569 6e68 c3a4 -md5 Jobs einh.. │ │ │ │ +0002e010: 6765 6e0a 0977 6869 6c65 2028 2470 6172 gen..while ($par │ │ │ │ +0002e020: 466f 726b 426c 6f63 6b2d 3e67 6574 4e6f ForkBlock->getNo │ │ │ │ +0002e030: 4672 6565 456e 7472 6965 7328 2920 3e20 FreeEntries() > │ │ │ │ +0002e040: 3020 616e 640a 0920 2020 2020 2020 2466 0 and.. $f │ │ │ │ +0002e050: 6966 6f42 6c6f 636b 2d3e 6765 744e 6f55 ifoBlock->getNoU │ │ │ │ +0002e060: 7365 6445 6e74 7269 6573 2829 203e 2030 sedEntries() > 0 │ │ │ │ +0002e070: 290a 097b 0a20 2020 2020 2020 2020 2020 )..{. │ │ │ │ +0002e080: 2023 2057 6520 6469 6420 736f 6d65 7468 # We did someth │ │ │ │ +0002e090: 696e 670a 2020 2020 2020 2020 2020 2020 ing. │ │ │ │ +0002e0a0: 246d 6169 6e3a 3a74 696e 7957 6169 7453 $main::tinyWaitS │ │ │ │ +0002e0b0: 6368 6564 756c 6572 2d3e 7265 7365 7428 cheduler->reset( │ │ │ │ +0002e0c0: 293b 0a0a 0920 2020 206d 7920 2824 6465 );... my ($de │ │ │ │ +0002e0d0: 7666 696c 652c 2040 7061 7261 6d29 203d vfile, @param) = │ │ │ │ +0002e0e0: 2040 7b24 6669 666f 426c 6f63 6b2d 3e67 @{$fifoBlock->g │ │ │ │ +0002e0f0: 6574 2829 7d3b 0a0a 0920 2020 2023 2061 et()};... # a │ │ │ │ +0002e100: 6c6c 6520 6d64 3520 5375 6d6d 656e 2062 lle md5 Summen b │ │ │ │ +0002e110: 6572 6563 686e 656e 2c0a 2370 7269 6e74 erechnen,.#print │ │ │ │ +0002e120: 2022 2d31 312d 2063 6865 636b 426c 6f63 "-11- checkBloc │ │ │ │ +0002e130: 6b2c 2066 6966 6f42 6c6f 636b 2d3e 6765 k, fifoBlock->ge │ │ │ │ +0002e140: 743a 2024 6465 7666 696c 655c 6e22 3b0a t: $devfile\n";. │ │ │ │ +0002e150: 0920 2020 206d 7920 2474 6d70 4e61 6d65 . my $tmpName │ │ │ │ +0002e160: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa │ │ │ │ +0002e170: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me("$tmpdir/stor │ │ │ │ +0002e180: 6542 6163 6b75 702d 626c 6f63 6b2e 2229 eBackup-block.") │ │ │ │ +0002e190: 3b0a 2370 7269 6e74 2022 2d31 322d 5c6e ;.#print "-12-\n │ │ │ │ +0002e1a0: 223b 0a09 2020 2020 6966 2028 2464 6576 ";.. if ($dev │ │ │ │ +0002e1b0: 6669 6c65 2065 7120 2766 696c 6527 290a file eq 'file'). │ │ │ │ +0002e1c0: 0920 2020 207b 0a09 096d 7920 2824 6469 . {...my ($di │ │ │ │ +0002e1d0: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, │ │ │ │ +0002e1e0: 2467 6964 2c20 246d 6f64 652c 2024 6465 $gid, $mode, $de │ │ │ │ +0002e1f0: 762c 0a09 0920 2020 2024 696e 6f64 652c v,... $inode, │ │ │ │ +0002e200: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ │ +0002e210: 2024 6174 696d 652c 2024 7369 7a65 2c20 $atime, $size, │ │ │ │ +0002e220: 2463 6865 636b 426c 6f63 6b73 4253 2c0a $checkBlocksBS,. │ │ │ │ +0002e230: 0909 2020 2020 2463 6f6d 7072 6573 7342 .. $compressB │ │ │ │ +0002e240: 6c6f 636b 2c20 2462 6c6f 636b 5265 6164 lock, $blockRead │ │ │ │ +0002e250: 2920 3d20 2840 7061 7261 6d29 3b0a 0a09 ) = (@param);... │ │ │ │ +0002e260: 0975 6e6c 6573 7320 2824 6c61 7465 4c69 .unless ($lateLi │ │ │ │ +0002e270: 6e6b 7329 0a09 097b 0a09 0920 2020 206d nks)...{... m │ │ │ │ +0002e280: 6b64 6972 2022 2474 6172 6765 7444 6972 kdir "$targetDir │ │ │ │ +0002e290: 2f24 6669 6c65 2220 6f72 0a09 0909 2470 /$file" or....$p │ │ │ │ +0002e2a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +0002e2b0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ │ +0002e2c0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +0002e2d0: 5b22 6361 6e6e 6f74 206d 6b64 6972 203c ["cannot mkdir < │ │ │ │ +0002e2e0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +0002e2f0: 3e22 5d2c 0a09 0909 0920 2020 2020 2027 >"],..... ' │ │ │ │ +0002e300: 2d65 7869 7427 203d 3e20 3129 3b0a 0909 -exit' => 1);... │ │ │ │ +0002e310: 7d0a 0a09 0924 7061 7246 6f72 6b42 6c6f }....$parForkBlo │ │ │ │ +0002e320: 636b 2d3e 6164 645f 6e6f 626c 6f63 6b28 ck->add_noblock( │ │ │ │ +0002e330: 272d 6675 6e63 7469 6f6e 2720 3d3e 205c '-function' => \ │ │ │ │ +0002e340: 263a 3a63 616c 6342 6c6f 636b 4d44 3553 &::calcBlockMD5S │ │ │ │ +0002e350: 756d 732c 0a09 0909 0909 2020 2027 2d66 ums,...... '-f │ │ │ │ +0002e360: 756e 6350 6172 2720 3d3e 205b 2224 6469 uncPar' => ["$di │ │ │ │ +0002e370: 722f 2466 696c 6522 2c20 2474 6172 6765 r/$file", $targe │ │ │ │ +0002e380: 7444 6972 2c0a 0909 0909 0909 0920 2024 tDir,........ $ │ │ │ │ +0002e390: 6669 6c65 2c20 2463 6865 636b 426c 6f63 file, $checkBloc │ │ │ │ +0002e3a0: 6b73 4253 2c0a 0909 0909 0909 0920 2024 ksBS,........ $ │ │ │ │ +0002e3b0: 636f 6d70 7265 7373 426c 6f63 6b2c 0a09 compressBlock,.. │ │ │ │ +0002e3c0: 0909 0909 0909 2020 2462 6c6f 636b 5265 ...... $blockRe │ │ │ │ +0002e3d0: 6164 2c0a 0909 0909 0909 0920 2024 636f ad,........ $co │ │ │ │ +0002e3e0: 6d70 7265 7373 436f 6d6d 616e 642c 0a09 mpressCommand,.. │ │ │ │ +0002e3f0: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres │ │ │ │ +0002e400: 734f 7074 696f 6e73 2c0a 0909 0909 0909 sOptions,....... │ │ │ │ +0002e410: 0920 2024 706f 7374 6669 782c 0a09 0909 . $postfix,.... │ │ │ │ +0002e420: 0909 0909 2020 246f 6c64 4669 6c65 6e61 .... $oldFilena │ │ │ │ +0002e430: 6d65 2c20 246c 6174 654c 696e 6b73 2c0a me, $lateLinks,. │ │ │ │ +0002e440: 0909 0909 0909 0920 2024 6c61 7465 436f ....... $lateCo │ │ │ │ +0002e450: 6d70 7265 7373 2c0a 0909 0909 0909 0920 mpress,........ │ │ │ │ +0002e460: 2024 6e6f 436f 6d70 7265 7373 2c20 2470 $noCompress, $p │ │ │ │ +0002e470: 724c 6f67 2c0a 0909 0909 0909 0920 2024 rLog,........ $ │ │ │ │ +0002e480: 746d 704e 616d 652c 0a09 0909 0909 0909 tmpName,........ │ │ │ │ +0002e490: 2020 2462 6c6f 636b 4368 6563 6b53 756d $blockCheckSum │ │ │ │ +0002e4a0: 4669 6c65 2c0a 0909 0909 0909 0920 2024 File,........ $ │ │ │ │ +0002e4b0: 6374 696d 652c 2024 6d74 696d 655d 2c0a ctime, $mtime],. │ │ │ │ +0002e4c0: 0909 0909 0920 2020 272d 696e 666f 2720 ..... '-info' │ │ │ │ +0002e4d0: 3d3e 205b 2464 6576 2c20 2469 6e6f 6465 => [$dev, $inode │ │ │ │ +0002e4e0: 2c20 2464 6972 2c0a 0909 0909 0909 2020 , $dir,....... │ │ │ │ +0002e4f0: 2020 2020 2024 6669 6c65 2c20 2475 6964 $file, $uid │ │ │ │ +0002e500: 2c20 2467 6964 2c0a 0909 0909 0909 2020 , $gid,....... │ │ │ │ +0002e510: 2020 2020 2024 6d6f 6465 2c0a 0909 0909 $mode,..... │ │ │ │ +0002e520: 0909 2020 2020 2020 2024 6374 696d 652c .. $ctime, │ │ │ │ +0002e530: 2024 6d74 696d 652c 0a09 0909 0909 0920 $mtime,....... │ │ │ │ +0002e540: 2020 2020 2020 2461 7469 6d65 2c20 2473 $atime, $s │ │ │ │ +0002e550: 697a 652c 0a09 0909 0909 0920 2020 2020 ize,....... │ │ │ │ +0002e560: 2020 2463 6f6d 7072 6573 7342 6c6f 636b $compressBlock │ │ │ │ +0002e570: 2c0a 0909 0909 0909 2020 2020 2020 2024 ,....... $ │ │ │ │ +0002e580: 746d 704e 616d 655d 293b 0a09 0924 7072 tmpName]);...$pr │ │ │ │ +0002e590: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +0002e5a0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ │ +0002e5b0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +0002e5c0: 7361 7669 6e67 2062 6c6f 636b 6564 2066 saving blocked f │ │ │ │ +0002e5d0: 696c 6520 3c24 6669 6c65 3e20 2822 202e ile <$file> (" . │ │ │ │ +0002e5e0: 0a09 0909 2020 2020 2020 2826 3a3a 6875 .... (&::hu │ │ │ │ +0002e5f0: 6d61 6e52 6561 6461 626c 6528 2473 697a manReadable($siz │ │ │ │ +0002e600: 6529 295b 305d 202e 2027 2927 5d29 3b0a e))[0] . ')']);. │ │ │ │ +0002e610: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi │ │ │ │ +0002e620: 6620 2824 6465 7666 696c 6520 6571 2027 f ($devfile eq ' │ │ │ │ +0002e630: 6465 7669 6365 2729 0a09 2020 2020 7b0a device').. {. │ │ │ │ +0002e640: 0909 6d79 2028 2464 6576 6963 652c 2024 ..my ($device, $ │ │ │ │ +0002e650: 7265 6c44 6972 2c20 2462 6c6f 636b 5369 relDir, $blockSi │ │ │ │ +0002e660: 7a65 2c20 2463 6f6d 7072 6573 7342 6c6f ze, $compressBlo │ │ │ │ +0002e670: 636b 2c20 2470 6172 616c 6c65 6c29 0a09 ck, $parallel).. │ │ │ │ +0002e680: 0920 2020 203d 2028 4070 6172 616d 293b . = (@param); │ │ │ │ +0002e690: 0a09 0924 626c 6f63 6b50 6172 616c 6c65 ...$blockParalle │ │ │ │ +0002e6a0: 6c20 3d20 2470 6172 616c 6c65 6c3b 0a09 l = $parallel;.. │ │ │ │ +0002e6b0: 096d 7920 2472 656c 4469 7232 203d 2024 .my $relDir2 = $ │ │ │ │ +0002e6c0: 6465 7669 6365 3b0a 0909 2472 656c 4469 device;...$relDi │ │ │ │ +0002e6d0: 7232 203d 7e20 732f 5c2f 2f5f 2f67 3b0a r2 =~ s/\//_/g;. │ │ │ │ +0002e6e0: 0909 2472 656c 4469 7232 203d 7e20 732f ..$relDir2 =~ s/ │ │ │ │ +0002e6f0: 5c41 5f2a 282e 2a29 5f2a 5c5a 2f24 312f \A_*(.*)_*\Z/$1/ │ │ │ │ +0002e700: 3b0a 0a09 0926 3a3a 6d61 6b65 4469 7250 ;....&::makeDirP │ │ │ │ +0002e710: 6174 6828 2224 7461 7267 6574 4469 722f ath("$targetDir/ │ │ │ │ +0002e720: 2472 656c 4469 722f 2472 656c 4469 7232 $relDir/$relDir2 │ │ │ │ +0002e730: 222c 2024 7072 4c6f 6729 3b0a 0a09 0924 ", $prLog);....$ │ │ │ │ +0002e740: 7061 7246 6f72 6b42 6c6f 636b 2d3e 6164 parForkBlock->ad │ │ │ │ +0002e750: 645f 6e6f 626c 6f63 6b28 272d 6675 6e63 d_noblock('-func │ │ │ │ +0002e760: 7469 6f6e 2720 3d3e 205c 263a 3a63 616c tion' => \&::cal │ │ │ │ +0002e770: 6342 6c6f 636b 4d44 3553 756d 732c 0a09 cBlockMD5Sums,.. │ │ │ │ +0002e780: 0909 0909 2020 2027 2d66 756e 6350 6172 .... '-funcPar │ │ │ │ +0002e790: 2720 3d3e 205b 2464 6576 6963 652c 2024 ' => [$device, $ │ │ │ │ +0002e7a0: 7461 7267 6574 4469 722c 0a09 0909 0909 targetDir,...... │ │ │ │ +0002e7b0: 0909 2020 2224 7265 6c44 6972 2f24 7265 .. "$relDir/$re │ │ │ │ +0002e7c0: 6c44 6972 3222 2c0a 0909 0909 0909 0920 lDir2",........ │ │ │ │ +0002e7d0: 2024 626c 6f63 6b53 697a 652c 0a09 0909 $blockSize,.... │ │ │ │ +0002e7e0: 0909 2020 2463 6f6d 7072 6573 7342 6c6f .. $compressBlo │ │ │ │ +0002e7f0: 636b 203f 2027 6327 203a 2027 7527 2c0a ck ? 'c' : 'u',. │ │ │ │ +0002e800: 0909 0909 0920 205b 2764 6427 2c20 2262 ..... ['dd', "b │ │ │ │ +0002e810: 733d 2462 6c6f 636b 5369 7a65 225d 2c0a s=$blockSize"],. │ │ │ │ +0002e820: 0909 0909 0909 0920 2024 636f 6d70 7265 ....... $compre │ │ │ │ +0002e830: 7373 436f 6d6d 616e 642c 0a09 0909 0909 ssCommand,...... │ │ │ │ +0002e840: 0909 2020 2463 6f6d 7072 6573 734f 7074 .. $compressOpt │ │ │ │ +0002e850: 696f 6e73 2c0a 0909 0909 0909 0920 2024 ions,........ $ │ │ │ │ +0002e860: 706f 7374 6669 782c 0a09 0909 0909 0909 postfix,........ │ │ │ │ +0002e870: 2020 246f 6c64 4669 6c65 6e61 6d65 2c20 $oldFilename, │ │ │ │ +0002e880: 246c 6174 654c 696e 6b73 2c0a 0909 0909 $lateLinks,..... │ │ │ │ +0002e890: 0909 0920 2024 6c61 7465 436f 6d70 7265 ... $lateCompre │ │ │ │ +0002e8a0: 7373 2c0a 0909 0909 0909 0920 2024 6e6f ss,........ $no │ │ │ │ +0002e8b0: 436f 6d70 7265 7373 2c20 2470 724c 6f67 Compress, $prLog │ │ │ │ +0002e8c0: 2c0a 0909 0909 0909 0920 2024 746d 704e ,........ $tmpN │ │ │ │ +0002e8d0: 616d 652c 0a09 0909 0909 0909 2020 2462 ame,........ $b │ │ │ │ +0002e8e0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile │ │ │ │ +0002e8f0: 2c0a 0909 0909 0909 0920 2030 2c20 305d ,........ 0, 0] │ │ │ │ +0002e900: 2c0a 0909 0909 0920 2020 272d 696e 666f ,...... '-info │ │ │ │ +0002e910: 2720 3d3e 205b 2744 4556 4943 4527 2c20 ' => ['DEVICE', │ │ │ │ +0002e920: 302c 2024 6465 7669 6365 2c0a 0909 0909 0, $device,..... │ │ │ │ +0002e930: 0909 2020 2020 2020 2024 7265 6c44 6972 .. $relDir │ │ │ │ +0002e940: 2c20 302c 2030 2c0a 0909 0909 0909 2020 , 0, 0,....... │ │ │ │ +0002e950: 2020 2020 2030 3630 302c 0a09 0909 0909 0600,...... │ │ │ │ +0002e960: 0920 2020 2020 2020 302c 2030 2c0a 0909 . 0, 0,... │ │ │ │ +0002e970: 0909 0909 2020 2020 2020 2030 2c20 302c .... 0, 0, │ │ │ │ +0002e980: 0a09 0909 0909 0920 2020 2020 2020 2463 ....... $c │ │ │ │ +0002e990: 6f6d 7072 6573 7342 6c6f 636b 203f 2027 ompressBlock ? ' │ │ │ │ +0002e9a0: 6327 203a 2027 7527 2c0a 0909 0909 0909 c' : 'u',....... │ │ │ │ +0002e9b0: 2020 2020 2020 2024 746d 704e 616d 655d $tmpName] │ │ │ │ +0002e9c0: 293b 0a09 0924 7072 4c6f 672d 3e70 7269 );...$prLog->pri │ │ │ │ +0002e9d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +0002e9e0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +0002e9f0: 7227 203d 3e20 5b22 7361 7669 6e67 2064 r' => ["saving d │ │ │ │ +0002ea00: 6576 6963 6520 3c24 6465 7669 6365 3e22 evice <$device>" │ │ │ │ +0002ea10: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. │ │ │ │ +0002ea20: 656c 7365 0a09 2020 2020 7b0a 0909 2470 else.. {...$p │ │ │ │ +0002ea30: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +0002ea40: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +0002ea50: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +0002ea60: 2261 7373 6572 7469 6f6e 203c 2464 6576 "assertion <$dev │ │ │ │ +0002ea70: 6669 6c65 3e20 4070 6172 616d 225d 2c0a file> @param"],. │ │ │ │ +0002ea80: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit' │ │ │ │ +0002ea90: 203d 3e20 3129 3b0a 0920 2020 207d 0a23 => 1);.. }.# │ │ │ │ +0002eaa0: 7072 696e 7420 222d 3133 2d5c 6e22 3b0a print "-13-\n";. │ │ │ │ +0002eab0: 097d 0a23 7072 696e 7420 222d 3134 2d5c .}.#print "-14-\ │ │ │ │ +0002eac0: 6e22 3b0a 0a20 2020 2020 2020 2023 206e n";.. # n │ │ │ │ +0002ead0: 6575 6520 4b6f 7069 6572 2d4a 6f62 7320 eue Kopier-Jobs │ │ │ │ +0002eae0: 6569 6e68 c3a4 6e67 656e 0a20 2020 2020 einh..ngen. │ │ │ │ +0002eaf0: 2020 2077 6869 6c65 2028 2470 6172 466f while ($parFo │ │ │ │ +0002eb00: 726b 436f 7079 2d3e 6765 744e 6f46 7265 rkCopy->getNoFre │ │ │ │ +0002eb10: 6545 6e74 7269 6573 2829 203e 2030 2061 eEntries() > 0 a │ │ │ │ +0002eb20: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. │ │ │ │ +0002eb30: 2020 2466 6966 6f43 6f70 792d 3e67 6574 $fifoCopy->get │ │ │ │ +0002eb40: 4e6f 5573 6564 456e 7472 6965 7328 2920 NoUsedEntries() │ │ │ │ +0002eb50: 3e20 3029 0a20 2020 2020 2020 207b 0a20 > 0). {. │ │ │ │ +0002eb60: 2020 2020 2020 2020 2020 2023 2057 6520 # We │ │ │ │ +0002eb70: 6469 6420 736f 6d65 7468 696e 670a 2020 did something. │ │ │ │ +0002eb80: 2020 2020 2020 2020 2020 246d 6169 6e3a $main: │ │ │ │ +0002eb90: 3a74 696e 7957 6169 7453 6368 6564 756c :tinyWaitSchedul │ │ │ │ +0002eba0: 6572 2d3e 7265 7365 7428 293b 0a0a 2020 er->reset();.. │ │ │ │ +0002ebb0: 2020 2020 2020 2020 2020 6d79 2028 2464 my ($d │ │ │ │ +0002ebc0: 6972 2c20 2466 696c 652c 2024 7569 642c ir, $file, $uid, │ │ │ │ +0002ebd0: 2024 6769 642c 2024 6d6f 6465 2c20 246d $gid, $mode, $m │ │ │ │ +0002ebe0: 6435 2c20 2463 6f70 7943 6f6d 7072 2920 d5, $copyCompr) │ │ │ │ +0002ebf0: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. │ │ │ │ +0002ec00: 2020 407b 2466 6966 6f43 6f70 792d 3e67 @{$fifoCopy->g │ │ │ │ +0002ec10: 6574 2829 7d3b 2020 2020 2320 636f 7079 et()}; # copy │ │ │ │ +0002ec20: 436f 6d70 7220 6973 2066 6f72 206c 6174 Compr is for lat │ │ │ │ +0002ec30: 6543 6f6d 7072 6573 7369 6f6e 0a09 2020 eCompression.. │ │ │ │ +0002ec40: 2020 756e 6c65 7373 2028 2d65 2022 2464 unless (-e "$d │ │ │ │ +0002ec50: 6972 2f24 6669 6c65 2229 2020 2020 2320 ir/$file") # │ │ │ │ +0002ec60: 6669 6c65 2077 6173 2064 656c 6574 6564 file was deleted │ │ │ │ +0002ec70: 2064 7572 696e 6720 7761 6974 2069 6e20 during wait in │ │ │ │ +0002ec80: 7175 6575 650a 0920 2020 207b 0a09 0924 queue.. {...$ │ │ │ │ +0002ec90: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +0002eca0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ │ +0002ecb0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ │ +0002ecc0: 0909 0920 2020 2020 205b 2266 696c 6520 ... ["file │ │ │ │ +0002ecd0: 3c24 6469 722f 2466 696c 653e 2064 656c <$dir/$file> del │ │ │ │ +0002ece0: 6574 6564 2064 7572 696e 6720 6261 636b eted during back │ │ │ │ +0002ecf0: 7570 225d 293b 0a09 096e 6578 743b 0a09 up"]);...next;.. │ │ │ │ +0002ed00: 2020 2020 7d0a 2370 7269 6e74 2022 2d31 }.#print "-1 │ │ │ │ +0002ed10: 352d 2466 696c 655c 6e22 3b0a 2020 2020 5-$file\n";. │ │ │ │ +0002ed20: 2020 2020 2020 2020 6d79 2028 2464 6576 my ($dev │ │ │ │ +0002ed30: 2c20 2469 6e6f 6465 2c20 2463 7469 6d65 , $inode, $ctime │ │ │ │ +0002ed40: 2c20 246d 7469 6d65 2c20 2461 7469 6d65 , $mtime, $atime │ │ │ │ +0002ed50: 2c20 2473 697a 6529 203d 0a20 2020 2020 , $size) =. │ │ │ │ +0002ed60: 2020 2020 2020 2020 2020 2028 6c73 7461 (lsta │ │ │ │ +0002ed70: 7428 2224 6469 722f 2466 696c 6522 2929 t("$dir/$file")) │ │ │ │ +0002ed80: 5b30 2c20 312c 2031 302c 2039 2c20 382c [0, 1, 10, 9, 8, │ │ │ │ +0002ed90: 2037 5d3b 0a20 2020 2020 2020 2020 2020 7];. │ │ │ │ +0002eda0: 2024 6d6f 6465 2026 3d20 3037 3737 373b $mode &= 07777; │ │ │ │ +0002edb0: 0a0a 0920 2020 206d 7920 2463 6f6d 7072 ... my $compr │ │ │ │ +0002edc0: 203d 2027 7527 3b0a 2370 7269 6e74 2022 = 'u';.#print " │ │ │ │ +0002edd0: 636f 7079 436f 6d70 7220 3d20 3c24 636f copyCompr = <$co │ │ │ │ +0002ede0: 7079 436f 6d70 723e 5c6e 223b 0a09 2020 pyCompr>\n";.. │ │ │ │ +0002edf0: 2020 6966 2028 2463 6f70 7943 6f6d 7072 if ($copyCompr │ │ │ │ +0002ee00: 2065 7120 2763 6f6d 7072 2729 0a09 2020 eq 'compr').. │ │ │ │ +0002ee10: 2020 7b0a 2370 7269 6e74 2022 2d31 362d {.#print "-16- │ │ │ │ +0002ee20: 5c6e 223b 0a09 0924 636f 6d70 7220 3d20 \n";...$compr = │ │ │ │ +0002ee30: 2763 273b 0a09 0923 2027 636f 6d70 7265 'c';...# 'compre │ │ │ │ +0002ee40: 7373 2720 7265 6665 7273 2074 6f20 656e ss' refers to en │ │ │ │ +0002ee50: 7472 7920 696e 202e 6d64 3543 6865 636b try in .md5Check │ │ │ │ +0002ee60: 5375 6d73 2e69 6e66 6f0a 0909 6d79 2024 Sums.info...my $ │ │ │ │ +0002ee70: 6578 6973 7469 6e67 4669 6c65 203d 2024 existingFile = $ │ │ │ │ +0002ee80: 6669 6c65 3b0a 0909 2465 7869 7374 696e file;...$existin │ │ │ │ +0002ee90: 6746 696c 6520 3d7e 2073 2f5c 6e2f 5c30 gFile =~ s/\n/\0 │ │ │ │ +0002eea0: 2f6f 673b 0a09 0924 7772 4c61 7465 4c69 /og;...$wrLateLi │ │ │ │ +0002eeb0: 6e6b 2d3e 7072 696e 7428 2263 6f6d 7072 nk->print("compr │ │ │ │ +0002eec0: 6573 7320 246d 6435 5c6e 2465 7869 7374 ess $md5\n$exist │ │ │ │ +0002eed0: 696e 6746 696c 655c 6e22 293b 0a09 2020 ingFile\n");.. │ │ │ │ +0002eee0: 2020 7d0a 0a20 2020 2020 2020 2020 2020 }.. │ │ │ │ +0002eef0: 2069 6620 2824 7369 7a65 203c 3d20 246d if ($size <= $m │ │ │ │ +0002ef00: 6169 6e3a 3a6d 696e 436f 7079 5769 7468 ain::minCopyWith │ │ │ │ +0002ef10: 466f 726b 2920 2320 6469 7265 6b74 206b Fork) # direkt k │ │ │ │ +0002ef20: 6f70 6965 7265 6e20 286f 686e 6520 666f opieren (ohne fo │ │ │ │ +0002ef30: 726b 290a 2020 2020 2020 2020 2020 2020 rk). │ │ │ │ +0002ef40: 7b0a 2370 7269 6e74 2022 2d31 372d 5c6e {.#print "-17-\n │ │ │ │ +0002ef50: 223b 0a20 2020 2020 2020 2020 2020 2020 ";. │ │ │ │ +0002ef60: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +0002ef70: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D', │ │ │ │ +0002ef80: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002ef90: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +0002efa0: 2d73 7472 2720 3d3e 205b 2263 6f70 7920 -str' => ["copy │ │ │ │ +0002efb0: 2464 6972 2f24 6669 6c65 2024 7461 7267 $dir/$file $targ │ │ │ │ +0002efc0: 6574 4469 722f 2466 696c 6522 5d29 0a20 etDir/$file"]). │ │ │ │ +0002efd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002efe0: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod │ │ │ │ +0002eff0: 6520 3e3d 2032 293b 0a0a 2020 2020 2020 e >= 2);.. │ │ │ │ +0002f000: 2020 2020 2020 2020 2020 756e 6c65 7373 unless │ │ │ │ +0002f010: 2028 3a3a 636f 7079 4669 6c65 2822 2464 (::copyFile("$d │ │ │ │ +0002f020: 6972 2f24 6669 6c65 222c 2022 2474 6172 ir/$file", "$tar │ │ │ │ +0002f030: 6765 7444 6972 2f24 6669 6c65 2229 290a getDir/$file")). │ │ │ │ +0002f040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f050: 7b0a 2020 2020 2020 2020 2020 2020 2020 {. │ │ │ │ +0002f060: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ │ +0002f070: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +0002f080: 4527 2c0a 2020 2020 2020 2020 2020 2020 E',. │ │ │ │ +0002f090: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f0a0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +0002f0b0: 5b22 636f 756c 6420 6e6f 7420 636f 7079 ["could not copy │ │ │ │ +0002f0c0: 2024 6469 722f 2466 696c 6520 2220 2e0a $dir/$file " .. │ │ │ │ +0002f0d0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... "$targ │ │ │ │ +0002f0e0: 6574 4469 722f 2466 696c 6522 5d29 3b0a etDir/$file"]);. │ │ │ │ +0002f0f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f100: 2020 2020 6e65 7874 3b0a 2020 2020 2020 next;. │ │ │ │ +0002f110: 2020 2020 2020 2020 2020 7d0a 0a09 096d }....m │ │ │ │ +0002f120: 7920 246c 6173 744d 4435 203d 2026 3a3a y $lastMD5 = &:: │ │ │ │ +0002f130: 6361 6c63 4d44 3528 2224 6469 722f 2466 calcMD5("$dir/$f │ │ │ │ +0002f140: 696c 6522 293b 0a09 0969 6620 2824 6465 ile");...if ($de │ │ │ │ +0002f150: 6275 674d 6f64 6520 3e3d 2033 290a 0909 bugMode >= 3)... │ │ │ │ +0002f160: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog-> │ │ │ │ +0002f170: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +0002f180: 2027 4427 2c0a 0909 0909 2020 272d 7374 'D',..... '-st │ │ │ │ +0002f190: 7227 203d 3e20 5b22 6d64 3573 756d 2028 r' => ["md5sum ( │ │ │ │ +0002f1a0: 7265 6361 6c63 2920 2464 6972 2f24 6669 recalc) $dir/$fi │ │ │ │ +0002f1b0: 6c65 225d 293b 0a09 097d 0a09 0924 6d61 le"]);...}...$ma │ │ │ │ +0002f1c0: 696e 3a3a 7374 6174 2d3e 6164 645f 6e6f in::stat->add_no │ │ │ │ +0002f1d0: 4d44 3565 6446 696c 6573 2831 293b 0a09 MD5edFiles(1);.. │ │ │ │ +0002f1e0: 0975 6e6c 6573 7320 2824 6c61 7374 4d44 .unless ($lastMD │ │ │ │ +0002f1f0: 3529 0a09 097b 0a09 0920 2020 2024 7072 5)...{... $pr │ │ │ │ +0002f200: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +0002f210: 6427 203d 3e20 2757 272c 0a09 0909 0920 d' => 'W',..... │ │ │ │ +0002f220: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ │ +0002f230: 205b 2266 696c 6520 3c24 6469 722f 2466 ["file <$dir/$f │ │ │ │ +0002f240: 696c 653e 2064 656c 6574 6564 2064 7572 ile> deleted dur │ │ │ │ +0002f250: 696e 6720 6261 636b 7570 225d 290a 0909 ing backup"])... │ │ │ │ +0002f260: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $ │ │ │ │ +0002f270: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{ │ │ │ │ +0002f280: 2766 696c 6543 6861 6e67 6527 7d3b 0a0a 'fileChange'};.. │ │ │ │ +0002f290: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}. │ │ │ │ +0002f2a0: 0909 6966 2028 246c 6173 744d 4435 206e ..if ($lastMD5 n │ │ │ │ +0002f2b0: 6520 246d 6435 290a 0909 7b0a 0909 2020 e $md5)...{... │ │ │ │ +0002f2c0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +0002f2d0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +0002f2e0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ │ +0002f2f0: 0909 0909 2020 5b22 6669 6c65 203c 2464 .... ["file <$d │ │ │ │ +0002f300: 6972 2f24 6669 6c65 3e20 6368 616e 6765 ir/$file> change │ │ │ │ +0002f310: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup" │ │ │ │ +0002f320: 5d29 0a09 0909 756e 6c65 7373 2065 7869 ])....unless exi │ │ │ │ +0002f330: 7374 7320 2473 7570 7072 6573 7357 6172 sts $suppressWar │ │ │ │ +0002f340: 6e69 6e67 7b27 6669 6c65 4368 616e 6765 ning{'fileChange │ │ │ │ +0002f350: 277d 3b0a 0a09 0920 2020 2024 6d64 3520 '};.... $md5 │ │ │ │ +0002f360: 3d20 2767 2720 7820 3332 3b0a 0909 7d0a = 'g' x 32;...}. │ │ │ │ +0002f370: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002f380: 2069 6620 2824 7072 6573 6572 7665 5065 if ($preservePe │ │ │ │ +0002f390: 726d 7320 616e 6420 6e6f 7420 246c 6174 rms and not $lat │ │ │ │ +0002f3a0: 654c 696e 6b73 290a 0909 7b0a 2020 2020 eLinks)...{. │ │ │ │ +0002f3b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f3c0: 6368 6f77 6e20 2475 6964 2c20 2467 6964 chown $uid, $gid │ │ │ │ +0002f3d0: 2c20 2224 7461 7267 6574 4469 722f 2466 , "$targetDir/$f │ │ │ │ +0002f3e0: 696c 6522 3b0a 2020 2020 2020 2020 2020 ile";. │ │ │ │ +0002f3f0: 2020 2020 2020 2020 2020 6368 6d6f 6420 chmod │ │ │ │ +0002f400: 246d 6f64 652c 2022 2474 6172 6765 7444 $mode, "$targetD │ │ │ │ +0002f410: 6972 2f24 6669 6c65 223b 0a20 2020 2020 ir/$file";. │ │ │ │ +0002f420: 2020 2020 2020 2020 2020 2020 2020 2075 u │ │ │ │ +0002f430: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt │ │ │ │ +0002f440: 696d 652c 2022 2464 6972 2f24 6669 6c65 ime, "$dir/$file │ │ │ │ +0002f450: 2220 6966 2024 7265 7365 7441 7469 6d65 " if $resetAtime │ │ │ │ +0002f460: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ │ +0002f470: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati │ │ │ │ +0002f480: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, "$ta │ │ │ │ +0002f490: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file";. │ │ │ │ +0002f4a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f4b0: 7d0a 0a20 2020 2020 2020 2020 2020 2020 }.. │ │ │ │ +0002f4c0: 2020 206d 7920 2469 6e6f 6465 4261 636b my $inodeBack │ │ │ │ +0002f4d0: 7570 203d 2028 7374 6174 2822 2474 6172 up = (stat("$tar │ │ │ │ +0002f4e0: 6765 7444 6972 2f24 6669 6c65 2229 295b getDir/$file"))[ │ │ │ │ +0002f4f0: 315d 3b0a 0909 2469 6e6f 6465 4261 636b 1];...$inodeBack │ │ │ │ +0002f500: 7570 203d 2030 2075 6e6c 6573 7320 2469 up = 0 unless $i │ │ │ │ +0002f510: 6e6f 6465 4261 636b 7570 3b20 2020 2320 nodeBackup; # │ │ │ │ +0002f520: 6966 2074 696d 696e 6720 6973 7375 652c if timing issue, │ │ │ │ +0002f530: 0a09 2020 2020 2020 2020 2020 2020 2020 .. │ │ │ │ +0002f540: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f550: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ │ +0002f560: 7661 6c75 6520 6973 206e 6f74 2075 7365 value is not use │ │ │ │ +0002f570: 6420 6174 2061 6c6c 0a20 2020 2020 2020 d at all. │ │ │ │ +0002f580: 2020 2020 2020 2020 2024 616b 7446 696c $aktFil │ │ │ │ +0002f590: 656e 616d 652d 3e73 746f 7265 2827 2d66 ename->store('-f │ │ │ │ +0002f5a0: 696c 656e 616d 6527 203d 3e20 2466 696c ilename' => $fil │ │ │ │ +0002f5b0: 652c 2020 2320 7370 6569 6368 6572 7420 e, # speichert │ │ │ │ +0002f5c0: 696e 2064 626d 0a20 2020 2020 2020 2020 in dbm. │ │ │ │ +0002f5d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f5e0: 2020 2020 2020 2020 2020 2027 2d6d 6435 '-md5 │ │ │ │ +0002f5f0: 7375 6d27 203d 3e20 246d 6435 2c20 2020 sum' => $md5, │ │ │ │ +0002f600: 2020 2320 2e6d 6435 7375 6d2d 4461 7465 # .md5sum-Date │ │ │ │ +0002f610: 690a 2020 2020 2020 2020 2020 2020 2020 i. │ │ │ │ +0002f620: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f630: 2020 2020 2020 272d 636f 6d70 7227 203d '-compr' = │ │ │ │ +0002f640: 3e20 2463 6f6d 7072 2c0a 2020 2020 2020 > $compr,. │ │ │ │ +0002f650: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f660: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +0002f670: 6465 7627 203d 3e20 2464 6576 2c0a 2020 dev' => $dev,. │ │ │ │ +0002f680: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f690: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f6a0: 2020 272d 696e 6f64 6527 203d 3e20 2469 '-inode' => $i │ │ │ │ +0002f6b0: 6e6f 6465 2c0a 2020 2020 2020 2020 2020 node,. │ │ │ │ +0002f6c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f6d0: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod │ │ │ │ +0002f6e0: 6542 6163 6b75 7027 203d 3e20 2469 6e6f eBackup' => $ino │ │ │ │ +0002f6f0: 6465 4261 636b 7570 2c0a 2020 2020 2020 deBackup,. │ │ │ │ +0002f700: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f710: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +0002f720: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ │ +0002f730: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +0002f740: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f750: 2020 2020 2020 272d 6d74 696d 6527 203d '-mtime' = │ │ │ │ +0002f760: 3e20 246d 7469 6d65 2c0a 2020 2020 2020 > $mtime,. │ │ │ │ +0002f770: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f780: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +0002f790: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime │ │ │ │ +0002f7a0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +0002f7b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f7c0: 2020 2020 2020 272d 7369 7a65 2720 3d3e '-size' => │ │ │ │ +0002f7d0: 2024 7369 7a65 2c0a 2020 2020 2020 2020 $size,. │ │ │ │ +0002f7e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f7f0: 2020 2020 2020 2020 2020 2020 272d 7569 '-ui │ │ │ │ +0002f800: 6427 203d 3e20 2475 6964 2c0a 2020 2020 d' => $uid,. │ │ │ │ +0002f810: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f820: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f830: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,. │ │ │ │ +0002f840: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f850: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f860: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $ │ │ │ │ +0002f870: 6d6f 6465 293b 0a0a 2020 2020 2020 2020 mode);.. │ │ │ │ +0002f880: 2020 2020 2020 2020 246d 6169 6e3a 3a73 $main::s │ │ │ │ +0002f890: 7461 742d 3e61 6464 5375 6d4e 6577 436f tat->addSumNewCo │ │ │ │ +0002f8a0: 7079 2824 7369 7a65 293b 0a0a 2020 2020 py($size);.. │ │ │ │ +0002f8b0: 2020 2020 2020 2020 2020 2020 6966 2028 if ( │ │ │ │ +0002f8c0: 6578 6973 7473 2024 696e 5072 6f67 7265 exists $inProgre │ │ │ │ +0002f8d0: 7373 7b24 6d64 357d 2061 6e64 0a20 2020 ss{$md5} and. │ │ │ │ +0002f8e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f8f0: 2040 7b24 696e 5072 6f67 7265 7373 7b24 @{$inProgress{$ │ │ │ │ +0002f900: 6d64 357d 7d20 3e20 3029 2020 2320 6765 md5}} > 0) # ge │ │ │ │ +0002f910: 7075 6666 6572 7465 2046 696c 6573 206d pufferte Files m │ │ │ │ +0002f920: 6974 0a20 2020 2020 2020 2020 2020 2020 it. │ │ │ │ +0002f930: 2020 207b 2020 2020 2020 2020 2020 2020 { │ │ │ │ +0002f940: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002f950: 2020 2320 676c 6569 6368 6572 206d 6435 # gleicher md5 │ │ │ │ +0002f960: 2053 756d 6d65 2062 6561 7262 6569 7465 Summe bearbeite │ │ │ │ +0002f970: 6e0a 2020 2020 2020 2020 2020 2020 2020 n. │ │ │ │ +0002f980: 2020 2020 2020 2466 696c 6573 4c65 6674 $filesLeft │ │ │ │ +0002f990: 203d 2031 3b0a 2020 2020 2020 2020 2020 = 1;. │ │ │ │ +0002f9a0: 2020 2020 2020 2020 2020 2472 6561 6444 $readD │ │ │ │ +0002f9b0: 6972 416e 6443 6865 636b 2d3e 7075 7368 irAndCheck->push │ │ │ │ +0002f9c0: 6261 636b 2824 696e 5072 6f67 7265 7373 back($inProgress │ │ │ │ +0002f9d0: 7b24 6d64 357d 2c20 2470 724c 6f67 2c0a {$md5}, $prLog,. │ │ │ │ +0002f9e0: 0909 0924 6465 6275 674d 6f64 6520 3e3d ...$debugMode >= │ │ │ │ +0002f9f0: 2033 203f 2031 203a 2030 293b 0a20 2020 3 ? 1 : 0);. │ │ │ │ +0002fa00: 2020 2020 2020 2020 2020 2020 207d 0a20 }. │ │ │ │ +0002fa10: 2020 2020 2020 2020 2020 2020 2020 2064 d │ │ │ │ +0002fa20: 656c 6574 6520 2469 6e50 726f 6772 6573 elete $inProgres │ │ │ │ +0002fa30: 737b 246d 6435 7d3b 0a20 2020 2020 2020 s{$md5};. │ │ │ │ +0002fa40: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ │ +0002fa50: 2020 2065 6c73 6520 2020 2020 2020 2020 else │ │ │ │ +0002fa60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fa70: 2320 6d69 7420 666f 726b 2f63 702c 7273 # mit fork/cp,rs │ │ │ │ +0002fa80: 796e 6320 6b6f 7069 6572 656e 0a20 2020 ync kopieren. │ │ │ │ +0002fa90: 2020 2020 2020 2020 207b 0a20 2020 2020 {. │ │ │ │ +0002faa0: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo │ │ │ │ +0002fab0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +0002fac0: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. │ │ │ │ +0002fad0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fae0: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' => │ │ │ │ +0002faf0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +0002fb00: 2020 2020 2020 2020 2020 2020 2020 205b [ │ │ │ │ +0002fb10: 2263 6f70 7920 2464 6972 2f24 6669 6c65 "copy $dir/$file │ │ │ │ +0002fb20: 2024 7461 7267 6574 4469 722f 2466 696c $targetDir/$fil │ │ │ │ +0002fb30: 6522 5d29 0a20 2020 2020 2020 2020 2020 e"]). │ │ │ │ +0002fb40: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de │ │ │ │ +0002fb50: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);.. │ │ │ │ +0002fb60: 0909 6d79 2024 746d 704d 4435 4669 6c65 ..my $tmpMD5File │ │ │ │ +0002fb70: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa │ │ │ │ +0002fb80: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me("$tmpdir/stor │ │ │ │ +0002fb90: 6542 6163 6b75 702d 6d64 352e 2229 3b0a eBackup-md5.");. │ │ │ │ +0002fba0: 0909 2470 6172 466f 726b 436f 7079 2d3e ..$parForkCopy-> │ │ │ │ +0002fbb0: 6164 645f 6e6f 626c 6f63 6b28 272d 6578 add_noblock('-ex │ │ │ │ +0002fbc0: 6563 2720 3d3e 2024 6d61 696e 3a3a 7374 ec' => $main::st │ │ │ │ +0002fbd0: 6275 4d64 3563 702c 0a09 0909 0909 2020 buMd5cp,...... │ │ │ │ +0002fbe0: 272d 7061 7261 6d27 203d 3e0a 0909 0909 '-param' =>..... │ │ │ │ +0002fbf0: 0920 205b 2224 6469 722f 2466 696c 6522 . ["$dir/$file" │ │ │ │ +0002fc00: 2c0a 0909 0909 0920 2022 2474 6172 6765 ,...... "$targe │ │ │ │ +0002fc10: 7444 6972 2f24 6669 6c65 222c 2024 746d tDir/$file", $tm │ │ │ │ +0002fc20: 704d 4435 4669 6c65 5d2c 0a20 2020 2020 pMD5File],. │ │ │ │ +0002fc30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fc40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fc50: 2020 2020 2027 2d77 6f72 6b69 6e67 4469 '-workingDi │ │ │ │ +0002fc60: 7227 203d 3e20 272e 272c 0a20 2020 2020 r' => '.',. │ │ │ │ +0002fc70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fc80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fc90: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom │ │ │ │ +0002fca0: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => "$tmpdir/st │ │ │ │ +0002fcb0: 6465 7272 222c 0a20 2020 2020 2020 2020 derr",. │ │ │ │ +0002fcc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fcd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fce0: 2027 2d69 6e66 6f27 203d 3e0a 2020 2020 '-info' =>. │ │ │ │ +0002fcf0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fd00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fd10: 2020 2020 2020 5b24 6465 762c 2024 696e [$dev, $in │ │ │ │ +0002fd20: 6f64 652c 2024 6469 722c 2024 6669 6c65 ode, $dir, $file │ │ │ │ +0002fd30: 2c20 2475 6964 2c0a 2020 2020 2020 2020 , $uid,. │ │ │ │ +0002fd40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fd50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fd60: 2020 2024 6769 642c 2024 6d6f 6465 2c20 $gid, $mode, │ │ │ │ +0002fd70: 246d 6435 2c20 2463 7469 6d65 2c20 246d $md5, $ctime, $m │ │ │ │ +0002fd80: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. │ │ │ │ +0002fd90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fda0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +0002fdb0: 2024 6174 696d 652c 2024 7369 7a65 2c20 $atime, $size, │ │ │ │ +0002fdc0: 2463 6f6d 7072 2c20 2474 6d70 4d44 3546 $compr, $tmpMD5F │ │ │ │ +0002fdd0: 696c 655d 290a 0909 2020 2020 6f72 2064 ile])... or d │ │ │ │ +0002fde0: 6965 2022 4d75 7374 206e 6f74 2068 6170 ie "Must not hap │ │ │ │ +0002fdf0: 7065 6e20 2863 6f70 7929 223b 0a20 2020 pen (copy)";. │ │ │ │ +0002fe00: 2020 2020 2020 2020 207d 0a20 2020 2020 }. │ │ │ │ +0002fe10: 2020 207d 0a0a 0a20 2020 2020 2020 2023 }... # │ │ │ │ +0002fe20: 204b 6f6d 7072 696d 6965 7220 4a6f 6273 Komprimier Jobs │ │ │ │ +0002fe30: 2061 6268 6f6c 656e 0a20 2020 2020 2020 abholen. │ │ │ │ +0002fe40: 2066 6f72 6561 6368 206d 7920 2469 2028 foreach my $i ( │ │ │ │ +0002fe50: 2470 6172 466f 726b 436f 6d70 722d 3e63 $parForkCompr->c │ │ │ │ +0002fe60: 6865 636b 416c 6c28 2929 0a20 2020 2020 heckAll()). │ │ │ │ +0002fe70: 2020 207b 0a20 2020 2020 2020 2020 2020 {. │ │ │ │ +0002fe80: 2023 2057 6520 6469 6420 736f 6d65 7468 # We did someth │ │ │ │ +0002fe90: 696e 670a 2020 2020 2020 2020 2020 2020 ing. │ │ │ │ +0002fea0: 246d 6169 6e3a 3a74 696e 7957 6169 7453 $main::tinyWaitS │ │ │ │ +0002feb0: 6368 6564 756c 6572 2d3e 7265 7365 7428 cheduler->reset( │ │ │ │ +0002fec0: 293b 0a0a 2020 2020 2020 2020 2020 2020 );.. │ │ │ │ +0002fed0: 6d79 2024 7374 6465 7272 203d 2024 692d my $stderr = $i- │ │ │ │ +0002fee0: 3e67 6574 5354 4445 5252 2829 3b0a 2020 >getSTDERR();. │ │ │ │ +0002fef0: 2020 2020 2020 2020 2020 6d79 2028 2464 my ($d │ │ │ │ +0002ff00: 6576 2c20 2469 6e6f 6465 2c20 2464 6972 ev, $inode, $dir │ │ │ │ +0002ff10: 2c20 2466 696c 652c 2024 7569 642c 2024 , $file, $uid, $ │ │ │ │ +0002ff20: 6769 642c 2024 6d6f 6465 2c20 246d 6435 gid, $mode, $md5 │ │ │ │ +0002ff30: 2c0a 0909 2463 7469 6d65 2c20 246d 7469 ,...$ctime, $mti │ │ │ │ +0002ff40: 6d65 2c20 2461 7469 6d65 2c20 2473 697a me, $atime, $siz │ │ │ │ +0002ff50: 652c 2024 746d 704d 4435 4669 6c65 2920 e, $tmpMD5File) │ │ │ │ +0002ff60: 3d0a 0909 2020 2020 407b 2469 2d3e 6765 =... @{$i->ge │ │ │ │ +0002ff70: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in │ │ │ │ +0002ff80: 666f 2729 7d3b 0a0a 0920 2020 2069 6620 fo')};... if │ │ │ │ +0002ff90: 2826 3a3a 7761 6974 466f 7246 696c 6528 (&::waitForFile( │ │ │ │ +0002ffa0: 2224 7461 7267 6574 4469 722f 2466 696c "$targetDir/$fil │ │ │ │ +0002ffb0: 6524 706f 7374 6669 7822 2929 0a09 2020 e$postfix")).. │ │ │ │ +0002ffc0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +0002ffd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +0002ffe0: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ │ +0002fff0: 7472 2720 3d3e 205b 223c 2474 6172 6765 tr' => ["<$targe │ │ │ │ +00030000: 7444 6972 2f24 6669 6c65 2470 6f73 7466 tDir/$file$postf │ │ │ │ +00030010: 6978 3e20 2220 2e0a 0909 0909 0920 2277 ix> " ....... "w │ │ │ │ +00030020: 6173 206e 6f74 2063 7265 6174 6564 225d as not created"] │ │ │ │ +00030030: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. │ │ │ │ +00030040: 7d0a 0a20 2020 2020 2020 2020 2020 2069 }.. i │ │ │ │ +00030050: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm │ │ │ │ +00030060: 7320 616e 6420 6e6f 7420 246c 6174 654c s and not $lateL │ │ │ │ +00030070: 696e 6b73 290a 0920 2020 207b 0a20 2020 inks).. {. │ │ │ │ +00030080: 2020 2020 2020 2020 2020 2020 2063 686f cho │ │ │ │ +00030090: 776e 2024 7569 642c 2024 6769 642c 2022 wn $uid, $gid, " │ │ │ │ +000300a0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ │ +000300b0: 2470 6f73 7466 6978 223b 0a20 2020 2020 $postfix";. │ │ │ │ +000300c0: 2020 2020 2020 2020 2020 2063 686d 6f64 chmod │ │ │ │ +000300d0: 2024 6d6f 6465 2c20 2224 7461 7267 6574 $mode, "$target │ │ │ │ +000300e0: 4469 722f 2466 696c 6524 706f 7374 6669 Dir/$file$postfi │ │ │ │ +000300f0: 7822 3b0a 2020 2020 2020 2020 2020 2020 x";. │ │ │ │ +00030100: 2020 2020 7574 696d 6520 2461 7469 6d65 utime $atime │ │ │ │ +00030110: 2c20 246d 7469 6d65 2c20 2224 6469 722f , $mtime, "$dir/ │ │ │ │ +00030120: 2466 696c 6522 2069 6620 2472 6573 6574 $file" if $reset │ │ │ │ +00030130: 4174 696d 653b 0a20 2020 2020 2020 2020 Atime;. │ │ │ │ +00030140: 2020 2020 2020 2075 7469 6d65 2024 6174 utime $at │ │ │ │ +00030150: 696d 652c 2024 6d74 696d 652c 2022 2474 ime, $mtime, "$t │ │ │ │ +00030160: 6172 6765 7444 6972 2f24 6669 6c65 2470 argetDir/$file$p │ │ │ │ +00030170: 6f73 7466 6978 223b 0a20 2020 2020 2020 ostfix";. │ │ │ │ +00030180: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ │ +00030190: 2020 206d 7920 2469 6e6f 6465 4261 636b my $inodeBack │ │ │ │ +000301a0: 7570 203d 2028 7374 6174 2822 2474 6172 up = (stat("$tar │ │ │ │ +000301b0: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos │ │ │ │ +000301c0: 7466 6978 2229 295b 315d 3b0a 0920 2020 tfix"))[1];.. │ │ │ │ +000301d0: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = │ │ │ │ +000301e0: 3020 756e 6c65 7373 2024 696e 6f64 6542 0 unless $inodeB │ │ │ │ +000301f0: 6163 6b75 703b 2020 2023 2069 6620 7469 ackup; # if ti │ │ │ │ +00030200: 6d69 6e67 2069 7373 7565 2c0a 0920 2020 ming issue,.. │ │ │ │ +00030210: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030220: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030230: 2020 2020 2020 2020 2023 2076 616c 7565 # value │ │ │ │ +00030240: 2069 7320 6e6f 7420 7573 6564 2061 7420 is not used at │ │ │ │ +00030250: 616c 6c0a 0a20 2020 2020 2020 2020 2020 all.. │ │ │ │ +00030260: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > │ │ │ │ +00030270: 3029 0a20 2020 2020 2020 2020 2020 207b 0). { │ │ │ │ +00030280: 0a09 0975 6e6c 6573 7320 282d 6520 2224 ...unless (-e "$ │ │ │ │ +00030290: 6469 722f 2466 696c 6522 2920 2320 6669 dir/$file") # fi │ │ │ │ +000302a0: 6c65 2077 6173 2064 656c 6574 6564 2064 le was deleted d │ │ │ │ +000302b0: 7572 696e 6720 636f 6d70 7265 7373 696f uring compressio │ │ │ │ +000302c0: 6e0a 0909 7b0a 0909 2020 2020 2470 724c n...{... $prL │ │ │ │ +000302d0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000302e0: 2720 3d3e 2027 5727 2c0a 0909 0909 2020 ' => 'W',..... │ │ │ │ +000302f0: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... │ │ │ │ +00030300: 5b22 6669 6c65 203c 2464 6972 2f24 6669 ["file <$dir/$fi │ │ │ │ +00030310: 6c65 3e20 6465 6c65 7465 6420 6475 7269 le> deleted duri │ │ │ │ +00030320: 6e67 2062 6163 6b75 7022 5d29 3b0a 0909 ng backup"]);... │ │ │ │ +00030330: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... │ │ │ │ +00030340: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00030350: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00030360: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ │ +00030370: 0a09 0909 0920 205b 2263 6f6d 7072 6573 ..... ["compres │ │ │ │ +00030380: 7369 6e67 203c 2464 6972 2f24 6669 6c65 sing <$dir/$file │ │ │ │ +00030390: 3e20 2d3e 2022 202e 0a09 0909 0920 2020 > -> " ...... │ │ │ │ +000303a0: 223c 2474 6172 6765 7444 6972 2f24 6669 "<$targetDir/$fi │ │ │ │ +000303b0: 6c65 2470 6f73 7466 6978 3e22 202e 0a09 le$postfix>" ... │ │ │ │ +000303c0: 0909 0920 2020 2220 6765 6e65 7261 7465 ... " generate │ │ │ │ +000303d0: 6420 7468 6520 666f 6c6c 6f77 696e 6720 d the following │ │ │ │ +000303e0: 6572 726f 7220 6d65 7373 6167 6573 3a22 error messages:" │ │ │ │ +000303f0: 2c0a 0909 0909 2020 2040 2473 7464 6572 ,..... @$stder │ │ │ │ +00030400: 725d 293b 0a09 097d 0a09 0975 6e6c 696e r]);...}...unlin │ │ │ │ +00030410: 6b20 2224 7461 7267 6574 4469 722f 2466 k "$targetDir/$f │ │ │ │ +00030420: 696c 6524 706f 7374 6669 7822 3b0a 2020 ile$postfix";. │ │ │ │ +00030430: 2020 2020 2020 2020 2020 2020 2020 6e65 ne │ │ │ │ +00030440: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. │ │ │ │ +00030450: 7d0a 0a09 2020 2020 6c6f 6361 6c20 2a54 }... local *T │ │ │ │ +00030460: 4d50 4d44 353b 0a09 2020 2020 756e 6c65 MPMD5;.. unle │ │ │ │ +00030470: 7373 2028 263a 3a77 6169 7446 6f72 4669 ss (&::waitForFi │ │ │ │ +00030480: 6c65 2824 746d 704d 4435 4669 6c65 2920 le($tmpMD5File) │ │ │ │ +00030490: 6f72 0a09 0920 2020 206f 7065 6e28 544d or... open(TM │ │ │ │ +000304a0: 504d 4435 2c20 2474 6d70 4d44 3546 696c PMD5, $tmpMD5Fil │ │ │ │ +000304b0: 6529 290a 0920 2020 207b 0a09 0924 7072 e)).. {...$pr │ │ │ │ +000304c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000304d0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ │ +000304e0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +000304f0: 6361 6e6e 6f74 2072 6561 6420 7265 6361 cannot read reca │ │ │ │ +00030500: 6c63 6564 206d 6435 7375 6d20 2220 2e0a lced md5sum " .. │ │ │ │ +00030510: 0909 0909 0920 226f 6620 3c24 7461 7267 ..... "of <$targ │ │ │ │ +00030520: 6574 4469 722f 2466 696c 653e 2220 2e0a etDir/$file>" .. │ │ │ │ +00030530: 0909 0920 2020 2020 2022 3b20 6669 6c65 ... "; file │ │ │ │ +00030540: 2069 7320 6e6f 7420 6261 636b 6564 2075 is not backed u │ │ │ │ +00030550: 7022 5d29 3b0a 0909 6e65 7874 3b0a 0920 p"]);...next;.. │ │ │ │ +00030560: 2020 207d 0a09 2020 2020 6d79 2024 6c61 }.. my $la │ │ │ │ +00030570: 7374 4d44 3520 3d20 3c54 4d50 4d44 353e stMD5 = │ │ │ │ +00030580: 3b0a 0920 2020 2063 686f 6d70 2024 6c61 ;.. chomp $la │ │ │ │ +00030590: 7374 4d44 353b 0a09 2020 2020 6d79 2024 stMD5;.. my $ │ │ │ │ +000305a0: 6c61 7374 5369 7a65 203d 203c 544d 504d lastSize = ;.. chomp │ │ │ │ +000305c0: 246c 6173 7453 697a 653b 0a09 2020 2020 $lastSize;.. │ │ │ │ +000305d0: 636c 6f73 6528 544d 504d 4435 293b 0a09 close(TMPMD5);.. │ │ │ │ +000305e0: 2020 2020 756e 6c69 6e6b 2024 746d 704d unlink $tmpM │ │ │ │ +000305f0: 4435 4669 6c65 3b0a 0a09 2020 2020 246d D5File;... $m │ │ │ │ +00030600: 6169 6e3a 3a73 7461 742d 3e61 6464 5f6e ain::stat->add_n │ │ │ │ +00030610: 6f4d 4435 6564 4669 6c65 7328 3129 3b0a oMD5edFiles(1);. │ │ │ │ +00030620: 0920 2020 2075 6e6c 6573 7320 2824 6c61 . unless ($la │ │ │ │ +00030630: 7374 4d44 3529 0a09 2020 2020 7b0a 0909 stMD5).. {... │ │ │ │ +00030640: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00030650: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00030660: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00030670: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... ["file │ │ │ │ +00030680: 203c 2464 6972 2f24 6669 6c65 3e20 6465 <$dir/$file> de │ │ │ │ +00030690: 6c65 7465 6420 6475 7269 6e67 2062 6163 leted during bac │ │ │ │ +000306a0: 6b75 7022 5d29 0a09 0920 2020 2075 6e6c kup"])... unl │ │ │ │ +000306b0: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp │ │ │ │ +000306c0: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ │ +000306d0: 6543 6861 6e67 6527 7d3b 0a0a 0909 6e65 eChange'};....ne │ │ │ │ +000306e0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. │ │ │ │ +000306f0: 6966 2028 246c 6173 744d 4435 206e 6520 if ($lastMD5 ne │ │ │ │ +00030700: 246d 6435 206f 7220 246c 6173 7453 697a $md5 or $lastSiz │ │ │ │ +00030710: 6520 213d 2024 7369 7a65 290a 0920 2020 e != $size).. │ │ │ │ +00030720: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ │ +00030730: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W │ │ │ │ +00030740: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +00030750: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ │ +00030760: 2266 696c 6520 3c24 6469 722f 2466 696c "file <$dir/$fil │ │ │ │ +00030770: 653e 2063 6861 6e67 6564 2064 7572 696e e> changed durin │ │ │ │ +00030780: 6720 6261 636b 7570 225d 290a 0909 2020 g backup"])... │ │ │ │ +00030790: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists │ │ │ │ +000307a0: 2473 7570 7072 6573 7357 6172 6e69 6e67 $suppressWarning │ │ │ │ +000307b0: 7b27 6669 6c65 4368 616e 6765 277d 3b0a {'fileChange'};. │ │ │ │ +000307c0: 0909 246d 6435 203d 2024 6c61 7374 4d44 ..$md5 = $lastMD │ │ │ │ +000307d0: 353b 0a09 0924 7369 7a65 203d 2024 6c61 5;...$size = $la │ │ │ │ +000307e0: 7374 5369 7a65 3b0a 0920 2020 207d 0a0a stSize;.. }.. │ │ │ │ +000307f0: 2020 2020 2020 2020 2020 2020 2470 724c $prL │ │ │ │ +00030800: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00030810: 2720 3d3e 2027 4427 2c0a 2020 2020 2020 ' => 'D',. │ │ │ │ +00030820: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030830: 2020 2020 272d 7374 7227 203d 3e0a 2020 '-str' =>. │ │ │ │ +00030840: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030850: 2020 2020 2020 2020 5b22 6669 6e69 7368 ["finish │ │ │ │ +00030860: 6564 2024 636f 6d70 7265 7373 203c 2464 ed $compress <$d │ │ │ │ +00030870: 6972 2f24 6669 6c65 3e20 2220 2e0a 2020 ir/$file> " .. │ │ │ │ +00030880: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030890: 2020 2020 2020 2020 2022 3c24 7461 7267 "<$targ │ │ │ │ +000308a0: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post │ │ │ │ +000308b0: 6669 783e 225d 290a 2020 2020 2020 2020 fix>"]). │ │ │ │ +000308c0: 2020 2020 2020 2020 6966 2028 2464 6562 if ($deb │ │ │ │ +000308d0: 7567 4d6f 6465 203e 3d20 3229 3b0a 0a20 ugMode >= 2);.. │ │ │ │ +000308e0: 2020 2020 2020 2020 2020 2024 6d61 696e $main │ │ │ │ +000308f0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF │ │ │ │ +00030900: 6f72 6b73 436f 6d70 7265 7373 2829 3b0a orksCompress();. │ │ │ │ +00030910: 0920 2020 206d 7920 2463 6f6d 7072 5369 . my $comprSi │ │ │ │ +00030920: 7a65 203d 2028 7374 6174 2822 2474 6172 ze = (stat("$tar │ │ │ │ +00030930: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos │ │ │ │ +00030940: 7466 6978 2229 295b 375d 3b0a 2020 2020 tfix"))[7];. │ │ │ │ +00030950: 2020 2020 2020 2020 246d 6169 6e3a 3a73 $main::s │ │ │ │ +00030960: 7461 742d 3e61 6464 5375 6d4e 6577 436f tat->addSumNewCo │ │ │ │ +00030970: 6d70 7228 2463 6f6d 7072 5369 7a65 2c20 mpr($comprSize, │ │ │ │ +00030980: 2473 697a 6529 3b0a 0a23 7072 696e 7420 $size);..#print │ │ │ │ +00030990: 222d 2032 3220 2d20 6669 6c65 203d 203c "- 22 - file = < │ │ │ │ +000309a0: 2466 696c 653e 5c6e 223b 0a20 2020 2020 $file>\n";. │ │ │ │ +000309b0: 2020 2020 2020 2024 616b 7446 696c 656e $aktFilen │ │ │ │ +000309c0: 616d 652d 3e73 746f 7265 2827 2d66 696c ame->store('-fil │ │ │ │ +000309d0: 656e 616d 6527 203d 3e20 2466 696c 652c ename' => $file, │ │ │ │ +000309e0: 2020 2320 7370 6569 6368 6572 7420 696e # speichert in │ │ │ │ +000309f0: 2064 626d 0a20 2020 2020 2020 2020 2020 dbm. │ │ │ │ +00030a00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030a10: 2020 2020 2027 2d6d 6435 7375 6d27 203d '-md5sum' = │ │ │ │ +00030a20: 3e20 246d 6435 2c20 2020 2020 2320 2e6d > $md5, # .m │ │ │ │ +00030a30: 6435 7375 6d2d 4461 7465 690a 2020 2020 d5sum-Datei. │ │ │ │ +00030a40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030a50: 2020 2020 2020 2020 2020 2020 272d 636f '-co │ │ │ │ +00030a60: 6d70 7227 203d 3e20 2763 272c 0a20 2020 mpr' => 'c',. │ │ │ │ +00030a70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030a80: 2020 2020 2020 2020 2020 2020 2027 2d64 '-d │ │ │ │ +00030a90: 6576 2720 3d3e 2024 6465 762c 0a20 2020 ev' => $dev,. │ │ │ │ +00030aa0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030ab0: 2020 2020 2020 2020 2020 2020 2027 2d69 '-i │ │ │ │ +00030ac0: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode, │ │ │ │ +00030ad0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00030ae0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030af0: 2027 2d69 6e6f 6465 4261 636b 7570 2720 '-inodeBackup' │ │ │ │ +00030b00: 3d3e 2024 696e 6f64 6542 6163 6b75 702c => $inodeBackup, │ │ │ │ +00030b10: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00030b20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030b30: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct │ │ │ │ +00030b40: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. │ │ │ │ +00030b50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030b60: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' => │ │ │ │ +00030b70: 2024 6d74 696d 652c 0a20 2020 2020 2020 $mtime,. │ │ │ │ +00030b80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030b90: 2020 2020 2020 2020 2027 2d6d 7469 6d65 '-mtime │ │ │ │ +00030ba0: 2720 3d3e 2024 6d74 696d 652c 0a20 2020 ' => $mtime,. │ │ │ │ +00030bb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030bc0: 2020 2020 2020 2020 2020 2020 2027 2d61 '-a │ │ │ │ +00030bd0: 7469 6d65 2720 3d3e 2024 6174 696d 652c time' => $atime, │ │ │ │ +00030be0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00030bf0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030c00: 2027 2d73 697a 6527 203d 3e20 2473 697a '-size' => $siz │ │ │ │ +00030c10: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. │ │ │ │ +00030c20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030c30: 2020 2027 2d75 6964 2720 3d3e 2024 7569 '-uid' => $ui │ │ │ │ +00030c40: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. │ │ │ │ +00030c50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030c60: 2020 2027 2d67 6964 2720 3d3e 2024 6769 '-gid' => $gi │ │ │ │ +00030c70: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. │ │ │ │ +00030c80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030c90: 2020 2027 2d6d 6f64 6527 203d 3e20 246d '-mode' => $m │ │ │ │ +00030ca0: 6f64 6529 3b0a 0a20 2020 2020 2020 2020 ode);.. │ │ │ │ +00030cb0: 2020 2069 6620 2865 7869 7374 7320 2469 if (exists $i │ │ │ │ +00030cc0: 6e50 726f 6772 6573 737b 246d 6435 7d20 nProgress{$md5} │ │ │ │ +00030cd0: 616e 640a 2020 2020 2020 2020 2020 2020 and. │ │ │ │ +00030ce0: 2020 2020 407b 2469 6e50 726f 6772 6573 @{$inProgres │ │ │ │ +00030cf0: 737b 246d 6435 7d7d 203e 2030 2920 2023 s{$md5}} > 0) # │ │ │ │ +00030d00: 2067 6570 7566 6665 7274 6520 4669 6c65 gepufferte File │ │ │ │ +00030d10: 7320 6d69 740a 2020 2020 2020 2020 2020 s mit. │ │ │ │ +00030d20: 2020 7b20 2020 2020 2020 2020 2020 2020 { │ │ │ │ +00030d30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00030d40: 2023 2067 6c65 6963 6865 7220 6d64 3520 # gleicher md5 │ │ │ │ +00030d50: 5375 6d6d 6520 6265 6172 6265 6974 656e Summe bearbeiten │ │ │ │ +00030d60: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00030d70: 2024 6669 6c65 734c 6566 7420 3d20 313b $filesLeft = 1; │ │ │ │ +00030d80: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00030d90: 2024 7265 6164 4469 7241 6e64 4368 6563 $readDirAndChec │ │ │ │ +00030da0: 6b2d 3e70 7573 6862 6163 6b28 2469 6e50 k->pushback($inP │ │ │ │ +00030db0: 726f 6772 6573 737b 246d 6435 7d2c 2024 rogress{$md5}, $ │ │ │ │ +00030dc0: 7072 4c6f 672c 0a09 0920 2020 2024 6465 prLog,... $de │ │ │ │ +00030dd0: 6275 674d 6f64 6520 3e3d 2033 203f 2031 bugMode >= 3 ? 1 │ │ │ │ +00030de0: 203a 2030 293b 0a20 2020 2020 2020 2020 : 0);. │ │ │ │ +00030df0: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ │ +00030e00: 2064 656c 6574 6520 2469 6e50 726f 6772 delete $inProgr │ │ │ │ +00030e10: 6573 737b 246d 6435 7d3b 0a20 2020 2020 ess{$md5};. │ │ │ │ +00030e20: 2020 207d 0a0a 2020 2020 2020 2020 2320 }.. # │ │ │ │ +00030e30: 426c 6f63 6b2d 6d64 3520 4a6f 6273 2061 Block-md5 Jobs a │ │ │ │ +00030e40: 6268 6f6c 656e 0a09 7768 696c 6520 2831 bholen..while (1 │ │ │ │ +00030e50: 290a 2020 2020 2020 2020 7b0a 0920 2020 ). {.. │ │ │ │ +00030e60: 206d 7920 2469 3b0a 0920 2020 2069 6620 my $i;.. if │ │ │ │ +00030e70: 2824 626c 6f63 6b50 6172 616c 6c65 6c29 ($blockParallel) │ │ │ │ +00030e80: 0a09 2020 2020 7b0a 0909 2469 203d 2024 .. {...$i = $ │ │ │ │ +00030e90: 7061 7246 6f72 6b42 6c6f 636b 2d3e 6368 parForkBlock->ch │ │ │ │ +00030ea0: 6563 6b4f 6e65 2829 3b0a 0920 2020 207d eckOne();.. } │ │ │ │ +00030eb0: 0a09 2020 2020 656c 7365 0a09 2020 2020 .. else.. │ │ │ │ +00030ec0: 7b0a 0909 2469 203d 2024 7061 7246 6f72 {...$i = $parFor │ │ │ │ +00030ed0: 6b42 6c6f 636b 2d3e 7761 6974 466f 7241 kBlock->waitForA │ │ │ │ +00030ee0: 6c6c 4a6f 6273 2829 3b0a 0920 2020 207d llJobs();.. } │ │ │ │ +00030ef0: 0a09 2020 2020 6c61 7374 2075 6e6c 6573 .. last unles │ │ │ │ +00030f00: 7320 2469 3b0a 0a20 2020 2020 2020 2020 s $i;.. │ │ │ │ +00030f10: 2020 2023 2057 6520 6469 6420 736f 6d65 # We did some │ │ │ │ +00030f20: 7468 696e 670a 0920 2020 2024 6d61 696e thing.. $main │ │ │ │ +00030f30: 3a3a 7469 6e79 5761 6974 5363 6865 6475 ::tinyWaitSchedu │ │ │ │ +00030f40: 6c65 722d 3e72 6573 6574 2829 3b0a 0a09 ler->reset();... │ │ │ │ +00030f50: 2020 2020 6d79 2028 2464 6576 2c20 2469 my ($dev, $i │ │ │ │ +00030f60: 6e6f 6465 2c20 2464 6972 2c20 2466 696c node, $dir, $fil │ │ │ │ +00030f70: 652c 2024 7569 642c 2024 6769 642c 0a09 e, $uid, $gid,.. │ │ │ │ +00030f80: 0924 6d6f 6465 2c20 2463 7469 6d65 2c20 .$mode, $ctime, │ │ │ │ +00030f90: 246d 7469 6d65 2c20 2461 7469 6d65 2c20 $mtime, $atime, │ │ │ │ +00030fa0: 2473 697a 652c 2024 636f 6d70 7265 7373 $size, $compress │ │ │ │ +00030fb0: 426c 6f63 6b2c 0a09 0924 746d 704e 616d Block,...$tmpNam │ │ │ │ +00030fc0: 6529 203d 0a09 0920 2020 2040 7b24 692d e) =... @{$i- │ │ │ │ +00030fd0: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => │ │ │ │ +00030fe0: 2769 6e66 6f27 297d 3b0a 0a09 2020 2020 'info')};... │ │ │ │ +00030ff0: 756e 6c65 7373 2028 2d72 2024 746d 704e unless (-r $tmpN │ │ │ │ +00031000: 616d 6529 0a09 2020 2020 7b0a 0909 2320 ame).. {...# │ │ │ │ +00031010: 6d65 7373 6167 6520 6973 2069 6d70 6f72 message is impor │ │ │ │ +00031020: 7461 6e74 2074 6f20 696e 6372 656d 656e tant to incremen │ │ │ │ +00031030: 7420 4552 524f 5220 636f 756e 7465 7220 t ERROR counter │ │ │ │ +00031040: 696e 2070 724c 6f67 0a09 0923 2045 7272 in prLog...# Err │ │ │ │ +00031050: 6f72 206d 6573 7361 6765 2069 6e20 6361 or message in ca │ │ │ │ +00031060: 6c63 426c 6f63 6b4d 4435 5375 6d73 2069 lcBlockMD5Sums i │ │ │ │ +00031070: 7320 6361 6c6c 6564 2069 6e20 666f 726b s called in fork │ │ │ │ +00031080: 210a 0909 2470 724c 6f67 2d3e 7072 696e !...$prLog->prin │ │ │ │ +00031090: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +000310a0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ │ +000310b0: 2720 3d3e 205b 2273 6b69 7070 696e 6720 ' => ["skipping │ │ │ │ +000310c0: 626c 6f63 6b65 6420 6669 6c65 225d 293b blocked file"]); │ │ │ │ +000310d0: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }. │ │ │ │ +000310e0: 0920 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +000310f0: 2020 2020 2020 2020 2020 2020 2020 200a . │ │ │ │ +00031100: 0920 2020 206c 6f63 616c 202a 424c 4f43 . local *BLOC │ │ │ │ +00031110: 4b3b 0a09 2020 2020 756e 6c65 7373 2028 K;.. unless ( │ │ │ │ +00031120: 263a 3a77 6169 7446 6f72 4669 6c65 2824 &::waitForFile($ │ │ │ │ +00031130: 746d 704e 616d 6529 206f 720a 0909 2020 tmpName) or... │ │ │ │ +00031140: 2020 6f70 656e 2842 4c4f 434b 2c20 223c open(BLOCK, "< │ │ │ │ +00031150: 2024 746d 704e 616d 6522 2929 0a09 2020 $tmpName")).. │ │ │ │ +00031160: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +00031170: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00031180: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ │ +00031190: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ │ +000311a0: 6f70 656e 203c 2474 6d70 4e61 6d65 3e22 open <$tmpName>" │ │ │ │ +000311b0: 5d2c 0a09 0909 2020 2020 2020 272d 6164 ],.... '-ad │ │ │ │ +000311c0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__, │ │ │ │ +000311d0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... │ │ │ │ +000311e0: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +000311f0: 3129 3b0a 0920 2020 207d 0a09 2020 2020 1);.. }.. │ │ │ │ +00031200: 6d79 2028 2473 7461 7453 6f75 7263 6553 my ($statSourceS │ │ │ │ +00031210: 697a 652c 2024 7374 6174 5374 6275 5369 ize, $statStbuSi │ │ │ │ +00031220: 7a65 2c20 2473 7461 744e 6f46 6f72 6b73 ze, $statNoForks │ │ │ │ +00031230: 4350 2c20 2473 7461 744e 6f46 6f72 6b73 CP, $statNoForks │ │ │ │ +00031240: 436f 6d70 7265 7373 2c0a 0909 2473 7461 Compress,...$sta │ │ │ │ +00031250: 744e 6f42 6c6f 636b 732c 2024 7374 6174 tNoBlocks, $stat │ │ │ │ +00031260: 4e6f 4c61 7465 4c69 6e6b 732c 2024 616c NoLateLinks, $al │ │ │ │ +00031270: 6c4d 4435 2c20 2462 6c6f 636b 4d44 352c lMD5, $blockMD5, │ │ │ │ +00031280: 0a09 0924 626c 6f63 6b46 696c 656e 616d ...$blockFilenam │ │ │ │ +00031290: 652c 2024 6c2c 2024 6e6f 5761 726e 696e e, $l, $noWarnin │ │ │ │ +000312a0: 6773 2c20 246e 6f45 7272 6f72 7329 3b0a gs, $noErrors);. │ │ │ │ +000312b0: 0a09 2020 2020 7768 696c 6520 2824 6c20 .. while ($l │ │ │ │ +000312c0: 3d20 3c42 4c4f 434b 3e29 0a09 2020 2020 = ).. │ │ │ │ +000312d0: 7b0a 0909 6368 6f70 2024 6c3b 0a09 096d {...chop $l;...m │ │ │ │ +000312e0: 7920 2466 6972 7374 3b0a 0909 2824 6669 y $first;...($fi │ │ │ │ +000312f0: 7273 742c 2024 6c29 203d 2073 706c 6974 rst, $l) = split │ │ │ │ +00031300: 282f 5c73 2f2c 2024 6c2c 2032 293b 0a09 (/\s/, $l, 2);.. │ │ │ │ +00031310: 0969 6620 2824 6669 7273 7420 6571 2027 .if ($first eq ' │ │ │ │ +00031320: 616c 6c4d 4435 2729 0a09 097b 0a09 0920 allMD5')...{... │ │ │ │ +00031330: 2020 2028 2461 6c6c 4d44 352c 2024 7374 ($allMD5, $st │ │ │ │ +00031340: 6174 536f 7572 6365 5369 7a65 2c20 2473 atSourceSize, $s │ │ │ │ +00031350: 7461 7453 7462 7553 697a 652c 2024 7374 tatStbuSize, $st │ │ │ │ +00031360: 6174 4e6f 466f 726b 7343 502c 0a09 0920 atNoForksCP,... │ │ │ │ +00031370: 2020 2020 2473 7461 744e 6f46 6f72 6b73 $statNoForks │ │ │ │ +00031380: 436f 6d70 7265 7373 2c20 2473 7461 744e Compress, $statN │ │ │ │ +00031390: 6f42 6c6f 636b 732c 2024 7374 6174 4e6f oBlocks, $statNo │ │ │ │ +000313a0: 4c61 7465 4c69 6e6b 732c 0a09 0920 2020 LateLinks,... │ │ │ │ +000313b0: 2020 246e 6f57 6172 6e69 6e67 732c 2024 $noWarnings, $ │ │ │ │ +000313c0: 6e6f 4572 726f 7273 2920 3d0a 0909 0920 noErrors) =.... │ │ │ │ +000313d0: 7370 6c69 7428 2f5c 732f 2c20 246c 293b split(/\s/, $l); │ │ │ │ +000313e0: 0a23 7072 696e 7420 2273 6574 7469 6e67 .#print "setting │ │ │ │ +000313f0: 2061 6c6c 4d44 355c 6e22 3b0a 0909 7d0a allMD5\n";...}. │ │ │ │ +00031400: 0909 656c 7369 6620 2824 6669 7273 7420 ..elsif ($first │ │ │ │ +00031410: 6571 2027 6c69 6e6b 2729 0a09 097b 0a09 eq 'link')...{.. │ │ │ │ +00031420: 0920 2020 2024 7772 4c61 7465 4c69 6e6b . $wrLateLink │ │ │ │ +00031430: 2d3e 7072 696e 7428 2224 6669 7273 7420 ->print("$first │ │ │ │ +00031440: 246c 5c6e 2229 3b20 2020 2020 2320 276c $l\n"); # 'l │ │ │ │ +00031450: 696e 6b20 6d64 3527 0a09 0920 2020 206d ink md5'... m │ │ │ │ +00031460: 7920 2465 7869 7374 696e 6746 696c 6520 y $existingFile │ │ │ │ +00031470: 3d20 3c42 4c4f 434b 3e3b 0a09 0920 2020 = ;... │ │ │ │ +00031480: 2063 686f 7020 2465 7869 7374 696e 6746 chop $existingF │ │ │ │ +00031490: 696c 653b 0a09 0920 2020 2024 7072 4c6f ile;... $prLo │ │ │ │ +000314a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000314b0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ │ +000314c0: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ │ +000314d0: 2266 696c 6520 3c24 746d 704e 616d 653e "file <$tmpName> │ │ │ │ +000314e0: 2065 6e64 7320 756e 6578 7065 6374 6564 ends unexpected │ │ │ │ +000314f0: 2061 7420 6c69 6e65 2024 2e22 5d2c 0a09 at line $."],.. │ │ │ │ +00031500: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ │ +00031510: 3129 0a09 0909 756e 6c65 7373 2024 6578 1)....unless $ex │ │ │ │ +00031520: 6973 7469 6e67 4669 6c65 3b0a 0909 2020 istingFile;... │ │ │ │ +00031530: 2020 2465 7869 7374 696e 6746 696c 6520 $existingFile │ │ │ │ +00031540: 3d20 3a3a 7265 6c50 6174 6828 2474 6172 = ::relPath($tar │ │ │ │ +00031550: 6765 7444 6972 2c20 2465 7869 7374 696e getDir, $existin │ │ │ │ +00031560: 6746 696c 6529 3b0a 0909 2020 2020 2465 gFile);... $e │ │ │ │ +00031570: 7869 7374 696e 6746 696c 6520 3d7e 2073 xistingFile =~ s │ │ │ │ +00031580: 2f5c 6e2f 5c30 2f6f 673b 0a09 0920 2020 /\n/\0/og;... │ │ │ │ +00031590: 2024 7772 4c61 7465 4c69 6e6b 2d3e 7072 $wrLateLink->pr │ │ │ │ +000315a0: 696e 7428 2224 6578 6973 7469 6e67 4669 int("$existingFi │ │ │ │ +000315b0: 6c65 5c6e 2229 3b0a 0909 2020 2020 6d79 le\n");... my │ │ │ │ +000315c0: 2024 6e65 774c 696e 6b20 3d20 3c42 4c4f $newLink = ;... chop │ │ │ │ +000315e0: 246e 6577 4c69 6e6b 3b0a 0909 2020 2020 $newLink;... │ │ │ │ +000315f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00031600: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00031610: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ │ +00031620: 0909 2020 5b22 6669 6c65 203c 2474 6d70 .. ["file <$tmp │ │ │ │ +00031630: 4e61 6d65 3e20 656e 6473 2075 6e65 7870 Name> ends unexp │ │ │ │ +00031640: 6563 7465 6420 6174 206c 696e 6520 242e ected at line $. │ │ │ │ +00031650: 225d 2c0a 0909 0909 2020 272d 6578 6974 "],..... '-exit │ │ │ │ +00031660: 2720 3d3e 2031 290a 0909 0975 6e6c 6573 ' => 1)....unles │ │ │ │ +00031670: 7320 246e 6577 4c69 6e6b 3b0a 0909 2020 s $newLink;... │ │ │ │ +00031680: 2020 246e 6577 4c69 6e6b 203d 203a 3a72 $newLink = ::r │ │ │ │ +00031690: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi │ │ │ │ +000316a0: 722c 2024 6e65 774c 696e 6b29 3b0a 0909 r, $newLink);... │ │ │ │ +000316b0: 2020 2020 246e 6577 4c69 6e6b 203d 7e20 $newLink =~ │ │ │ │ +000316c0: 732f 5c6e 2f5c 302f 6f67 3b0a 0909 2020 s/\n/\0/og;... │ │ │ │ +000316d0: 2020 2477 724c 6174 654c 696e 6b2d 3e70 $wrLateLink->p │ │ │ │ +000316e0: 7269 6e74 2822 246e 6577 4c69 6e6b 5c6e rint("$newLink\n │ │ │ │ +000316f0: 2229 3b0a 2370 7269 6e74 2022 626c 6f63 ");.#print "bloc │ │ │ │ +00031700: 6b6c 6174 656c 696e 6b73 3a20 2466 6972 klatelinks: $fir │ │ │ │ +00031710: 7374 2024 6c2c 2024 6578 6973 7469 6e67 st $l, $existing │ │ │ │ +00031720: 4669 6c65 202d 3e20 246e 6577 4c69 6e6b File -> $newLink │ │ │ │ +00031730: 5c6e 223b 0a09 097d 0a09 0965 6c73 6966 \n";...}...elsif │ │ │ │ +00031740: 2028 2466 6972 7374 2065 7120 2763 6f6d ($first eq 'com │ │ │ │ +00031750: 7072 6573 7327 290a 0909 7b0a 0909 2020 press')...{... │ │ │ │ +00031760: 2020 2477 724c 6174 654c 696e 6b2d 3e70 $wrLateLink->p │ │ │ │ +00031770: 7269 6e74 2822 2466 6972 7374 2024 6c5c rint("$first $l\ │ │ │ │ +00031780: 6e22 293b 2020 2023 2027 636f 6d70 7265 n"); # 'compre │ │ │ │ +00031790: 7373 206d 6435 270a 0909 2020 2020 6d79 ss md5'... my │ │ │ │ +000317a0: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile = │ │ │ │ +000317b0: 203c 424c 4f43 4b3e 3b0a 0909 2020 2020 ;... │ │ │ │ +000317c0: 6368 6f70 2024 6578 6973 7469 6e67 4669 chop $existingFi │ │ │ │ +000317d0: 6c65 3b0a 0909 2020 2020 2470 724c 6f67 le;... $prLog │ │ │ │ +000317e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000317f0: 3d3e 2027 4527 2c0a 0909 0909 2020 272d => 'E',..... '- │ │ │ │ +00031800: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ │ +00031810: 6669 6c65 203c 2474 6d70 4e61 6d65 3e20 file <$tmpName> │ │ │ │ +00031820: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected │ │ │ │ +00031830: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $."],... │ │ │ │ +00031840: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ │ +00031850: 290a 0909 0975 6e6c 6573 7320 2465 7869 )....unless $exi │ │ │ │ +00031860: 7374 696e 6746 696c 653b 0a09 0920 2020 stingFile;... │ │ │ │ +00031870: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile = │ │ │ │ +00031880: 203a 3a72 656c 5061 7468 2824 7461 7267 ::relPath($targ │ │ │ │ +00031890: 6574 4469 722c 2024 6578 6973 7469 6e67 etDir, $existing │ │ │ │ +000318a0: 4669 6c65 293b 0a09 0920 2020 2024 6578 File);... $ex │ │ │ │ +000318b0: 6973 7469 6e67 4669 6c65 203d 7e20 732f istingFile =~ s/ │ │ │ │ +000318c0: 5c6e 2f5c 302f 6f67 3b0a 0909 2020 2020 \n/\0/og;... │ │ │ │ +000318d0: 2477 724c 6174 654c 696e 6b2d 3e70 7269 $wrLateLink->pri │ │ │ │ +000318e0: 6e74 2822 2465 7869 7374 696e 6746 696c nt("$existingFil │ │ │ │ +000318f0: 655c 6e22 293b 0a09 097d 0a09 0965 6c73 e\n");...}...els │ │ │ │ +00031900: 650a 0909 7b0a 0909 2020 2020 6d79 2024 e...{... my $ │ │ │ │ +00031910: 636f 6d70 723b 0a09 0920 2020 2028 2462 compr;... ($b │ │ │ │ +00031920: 6c6f 636b 4d44 352c 2024 636f 6d70 722c lockMD5, $compr, │ │ │ │ +00031930: 2024 626c 6f63 6b46 696c 656e 616d 6529 $blockFilename) │ │ │ │ +00031940: 203d 0a09 0909 2824 6669 7273 742c 2073 =....($first, s │ │ │ │ +00031950: 706c 6974 282f 5c73 2f2c 2024 6c2c 2032 plit(/\s/, $l, 2 │ │ │ │ +00031960: 2929 3b0a 0909 2020 2020 246f 6c64 4669 ));... $oldFi │ │ │ │ +00031970: 6c65 6e61 6d65 2d3e 7365 7442 6c6f 636b lename->setBlock │ │ │ │ +00031980: 4669 6c65 6e61 6d65 436f 6d70 7228 2462 FilenameCompr($b │ │ │ │ +00031990: 6c6f 636b 4d44 352c 0a09 0909 0909 0920 lockMD5,....... │ │ │ │ +000319a0: 2020 2224 7461 7267 6574 4469 722f 2462 "$targetDir/$b │ │ │ │ +000319b0: 6c6f 636b 4669 6c65 6e61 6d65 222c 0a09 lockFilename",.. │ │ │ │ +000319c0: 0909 0909 0909 2463 6f6d 7072 293b 0a09 ......$compr);.. │ │ │ │ +000319d0: 0920 2020 2024 616b 7446 696c 656e 616d . $aktFilenam │ │ │ │ +000319e0: 652d 3e73 746f 7265 426c 6f63 6b28 272d e->storeBlock('- │ │ │ │ +000319f0: 6669 6c65 6e61 6d65 2720 3d3e 2462 6c6f filename' =>$blo │ │ │ │ +00031a00: 636b 4669 6c65 6e61 6d65 2c0a 0909 0909 ckFilename,..... │ │ │ │ +00031a10: 0920 2020 2020 272d 6d64 3573 756d 2720 . '-md5sum' │ │ │ │ +00031a20: 3d3e 2024 626c 6f63 6b4d 4435 2c0a 0909 => $blockMD5,... │ │ │ │ +00031a30: 0909 0920 2020 2020 272d 636f 6d70 7227 ... '-compr' │ │ │ │ +00031a40: 203d 3e20 2463 6f6d 7072 293b 0a23 7072 => $compr);.#pr │ │ │ │ +00031a50: 696e 7420 2262 6c6f 636b 4d44 3520 3d20 int "blockMD5 = │ │ │ │ +00031a60: 2462 6c6f 636b 4d44 352c 2062 6c6f 636b $blockMD5, block │ │ │ │ +00031a70: 4669 6c65 6e61 6d65 203d 2024 626c 6f63 Filename = $bloc │ │ │ │ +00031a80: 6b46 696c 656e 616d 655c 6e22 3b0a 0909 kFilename\n";... │ │ │ │ +00031a90: 7d0a 0920 2020 207d 0a23 7072 696e 7420 }.. }.#print │ │ │ │ +00031aa0: 2261 6c6c 4d44 3520 3d20 2461 6c6c 4d44 "allMD5 = $allMD │ │ │ │ +00031ab0: 352c 2073 7461 7453 6f75 7263 6553 697a 5, statSourceSiz │ │ │ │ +00031ac0: 6520 3d20 2473 7461 7453 6f75 7263 6553 e = $statSourceS │ │ │ │ +00031ad0: 697a 652c 2073 7461 7453 7462 7553 697a ize, statStbuSiz │ │ │ │ +00031ae0: 6520 3d20 2473 7461 7453 7462 7553 697a e = $statStbuSiz │ │ │ │ +00031af0: 655c 6e22 202e 0a23 2020 2020 2273 7461 e\n" ..# "sta │ │ │ │ +00031b00: 744e 6f46 6f72 6b73 4350 203d 2024 7374 tNoForksCP = $st │ │ │ │ +00031b10: 6174 4e6f 466f 726b 7343 502c 2073 7461 atNoForksCP, sta │ │ │ │ +00031b20: 744e 6f46 6f72 6b73 436f 6d70 7265 7373 tNoForksCompress │ │ │ │ +00031b30: 203d 2024 7374 6174 4e6f 466f 726b 7343 = $statNoForksC │ │ │ │ +00031b40: 6f6d 7072 6573 735c 6e22 202e 0a23 2020 ompress\n" ..# │ │ │ │ +00031b50: 2020 2273 7461 744e 6f42 6c6f 636b 7320 "statNoBlocks │ │ │ │ +00031b60: 3d20 2473 7461 744e 6f42 6c6f 636b 732c = $statNoBlocks, │ │ │ │ +00031b70: 2073 7461 744e 6f4c 6174 654c 696e 6b73 statNoLateLinks │ │ │ │ +00031b80: 203d 2024 7374 6174 4e6f 4c61 7465 4c69 = $statNoLateLi │ │ │ │ +00031b90: 6e6b 735c 6e22 202e 0a23 2020 2020 226e nks\n" ..# "n │ │ │ │ +00031ba0: 6f57 6172 6e69 6e67 7320 3d20 246e 6f57 oWarnings = $noW │ │ │ │ +00031bb0: 6172 6e69 6e67 732c 206e 6f45 7272 6f72 arnings, noError │ │ │ │ +00031bc0: 7320 3d20 246e 6f45 7272 6f72 735c 6e22 s = $noErrors\n" │ │ │ │ +00031bd0: 3b0a 0920 2020 2063 6c6f 7365 2842 4c4f ;.. close(BLO │ │ │ │ +00031be0: 434b 293b 0a09 2020 2020 756e 6c69 6e6b CK);.. unlink │ │ │ │ +00031bf0: 2024 746d 704e 616d 653b 0a0a 0920 2020 $tmpName;... │ │ │ │ +00031c00: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad │ │ │ │ +00031c10: 6453 756d 4f72 6967 4669 6c65 7328 2473 dSumOrigFiles($s │ │ │ │ +00031c20: 7461 7453 6f75 7263 6553 697a 652c 2024 tatSourceSize, $ │ │ │ │ +00031c30: 7569 642c 2024 6769 6429 3b0a 0920 2020 uid, $gid);.. │ │ │ │ +00031c40: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad │ │ │ │ +00031c50: 6453 756d 4d44 3553 756d 2824 7374 6174 dSumMD5Sum($stat │ │ │ │ +00031c60: 536f 7572 6365 5369 7a65 293b 0a09 2020 SourceSize);.. │ │ │ │ +00031c70: 2020 246d 6169 6e3a 3a73 7461 742d 3e69 $main::stat->i │ │ │ │ +00031c80: 6e63 725f 6e6f 4c61 7465 4c69 6e6b 7328 ncr_noLateLinks( │ │ │ │ +00031c90: 2475 6964 2c20 2467 6964 2c20 2473 7461 $uid, $gid, $sta │ │ │ │ +00031ca0: 744e 6f4c 6174 654c 696e 6b73 293b 0a09 tNoLateLinks);.. │ │ │ │ +00031cb0: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat- │ │ │ │ +00031cc0: 3e69 6e63 725f 6e6f 466f 726b 7343 5028 >incr_noForksCP( │ │ │ │ +00031cd0: 2473 7461 744e 6f46 6f72 6b73 4350 293b $statNoForksCP); │ │ │ │ +00031ce0: 0a09 2020 2020 246d 6169 6e3a 3a73 7461 .. $main::sta │ │ │ │ +00031cf0: 742d 3e69 6e63 725f 6e6f 466f 726b 7343 t->incr_noForksC │ │ │ │ +00031d00: 6f6d 7072 6573 7328 2473 7461 744e 6f46 ompress($statNoF │ │ │ │ +00031d10: 6f72 6b73 436f 6d70 7265 7373 293b 0a09 orksCompress);.. │ │ │ │ +00031d20: 2020 2020 2470 724c 6f67 2d3e 6164 6445 $prLog->addE │ │ │ │ +00031d30: 6e63 6f75 6e74 6572 2827 2d6b 696e 6427 ncounter('-kind' │ │ │ │ +00031d40: 203d 3e20 2745 272c 0a09 0909 0920 272d => 'E',..... '- │ │ │ │ +00031d50: 6164 6427 203d 3e20 246e 6f45 7272 6f72 add' => $noError │ │ │ │ +00031d60: 7329 3b0a 0920 2020 2024 7072 4c6f 672d s);.. $prLog- │ │ │ │ +00031d70: 3e61 6464 456e 636f 756e 7465 7228 272d >addEncounter('- │ │ │ │ +00031d80: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00031d90: 0909 2027 2d61 6464 2720 3d3e 2024 6e6f .. '-add' => $no │ │ │ │ +00031da0: 5761 726e 696e 6773 293b 0a0a 0920 2020 Warnings);... │ │ │ │ +00031db0: 2069 6620 2824 636f 6d70 7265 7373 426c if ($compressBl │ │ │ │ +00031dc0: 6f63 6b20 6571 2027 7527 206f 7220 246c ock eq 'u' or $l │ │ │ │ +00031dd0: 6174 6543 6f6d 7072 6573 7329 0a09 2020 ateCompress).. │ │ │ │ +00031de0: 2020 7b0a 0909 246d 6169 6e3a 3a73 7461 {...$main::sta │ │ │ │ +00031df0: 742d 3e61 6464 5375 6d4e 6577 436f 7079 t->addSumNewCopy │ │ │ │ +00031e00: 2824 7374 6174 5374 6275 5369 7a65 293b ($statStbuSize); │ │ │ │ +00031e10: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00031e20: 650a 0920 2020 207b 0a09 0924 6d61 696e e.. {...$main │ │ │ │ +00031e30: 3a3a 7374 6174 2d3e 6164 6453 756d 4e65 ::stat->addSumNe │ │ │ │ +00031e40: 7743 6f6d 7072 2824 7374 6174 5374 6275 wCompr($statStbu │ │ │ │ +00031e50: 5369 7a65 2c20 2473 7461 7453 6f75 7263 Size, $statSourc │ │ │ │ +00031e60: 6553 697a 6529 3b0a 0920 2020 207d 0a09 eSize);.. }.. │ │ │ │ +00031e70: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat- │ │ │ │ +00031e80: 3e61 6464 5f6e 6f4d 4435 6564 4669 6c65 >add_noMD5edFile │ │ │ │ +00031e90: 7328 2473 7461 744e 6f42 6c6f 636b 7320 s($statNoBlocks │ │ │ │ +00031ea0: 2b20 3129 3b0a 0920 2020 2024 6d61 696e + 1);.. $main │ │ │ │ +00031eb0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF │ │ │ │ +00031ec0: 6f72 6b73 4d44 3528 293b 0a0a 0920 2020 orksMD5();... │ │ │ │ +00031ed0: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s │ │ │ │ +00031ee0: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename' │ │ │ │ +00031ef0: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp │ │ │ │ +00031f00: 6569 6368 6572 7420 696e 2064 626d 0a09 eichert in dbm.. │ │ │ │ +00031f10: 0909 0927 2d6d 6435 7375 6d27 203d 3e20 ...'-md5sum' => │ │ │ │ +00031f20: 2461 6c6c 4d44 352c 2020 2320 2e6d 6435 $allMD5, # .md5 │ │ │ │ +00031f30: 7375 6d2d 4461 7465 690a 0909 0909 272d sum-Datei.....'- │ │ │ │ +00031f40: 636f 6d70 7227 203d 3e20 2762 272c 0a09 compr' => 'b',.. │ │ │ │ +00031f50: 0909 0927 2d64 6576 2720 3d3e 2024 6465 ...'-dev' => $de │ │ │ │ +00031f60: 762c 0a09 0909 0927 2d69 6e6f 6465 2720 v,.....'-inode' │ │ │ │ +00031f70: 3d3e 2024 696e 6f64 652c 0a09 0909 0927 => $inode,.....' │ │ │ │ +00031f80: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' => │ │ │ │ +00031f90: 2030 2c0a 0909 0909 272d 6374 696d 6527 0,.....'-ctime' │ │ │ │ +00031fa0: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,..... │ │ │ │ +00031fb0: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti │ │ │ │ +00031fc0: 6d65 2c0a 0909 0909 272d 6d74 696d 6527 me,.....'-mtime' │ │ │ │ +00031fd0: 203d 3e20 246d 7469 6d65 2c0a 0909 0909 => $mtime,..... │ │ │ │ +00031fe0: 272d 6174 696d 6527 203d 3e20 2461 7469 '-atime' => $ati │ │ │ │ +00031ff0: 6d65 2c0a 0909 0909 272d 7369 7a65 2720 me,.....'-size' │ │ │ │ +00032000: 3d3e 2024 7369 7a65 2c0a 0909 0909 272d => $size,.....'- │ │ │ │ +00032010: 7569 6427 203d 3e20 2475 6964 2c0a 0909 uid' => $uid,... │ │ │ │ +00032020: 0909 272d 6769 6427 203d 3e20 2467 6964 ..'-gid' => $gid │ │ │ │ +00032030: 2c0a 0909 0909 272d 6d6f 6465 2720 3d3e ,.....'-mode' => │ │ │ │ +00032040: 2024 6d6f 6465 293b 0a09 7d0a 2020 2020 $mode);..}. │ │ │ │ +00032050: 0a20 2020 2020 2020 2023 206e 6575 6520 . # neue │ │ │ │ +00032060: 4b6f 6d70 7269 6d69 6572 2d4a 6f62 7320 Komprimier-Jobs │ │ │ │ +00032070: 6569 6e68 c3a4 6e67 656e 0a20 2020 2020 einh..ngen. │ │ │ │ +00032080: 2020 2077 6869 6c65 2028 2470 6172 466f while ($parFo │ │ │ │ +00032090: 726b 436f 6d70 722d 3e67 6574 4e6f 4672 rkCompr->getNoFr │ │ │ │ +000320a0: 6565 456e 7472 6965 7328 2920 3e20 3020 eeEntries() > 0 │ │ │ │ +000320b0: 616e 640a 2020 2020 2020 2020 2020 2020 and. │ │ │ │ +000320c0: 2020 2024 6669 666f 436f 6d70 722d 3e67 $fifoCompr->g │ │ │ │ +000320d0: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries( │ │ │ │ +000320e0: 2920 3e20 3029 0a20 2020 2020 2020 207b ) > 0). { │ │ │ │ +000320f0: 0a20 2020 2020 2020 2020 2020 2023 2057 . # W │ │ │ │ +00032100: 6520 6469 6420 736f 6d65 7468 696e 670a e did something. │ │ │ │ +00032110: 2020 2020 2020 2020 2020 2020 246d 6169 $mai │ │ │ │ +00032120: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched │ │ │ │ +00032130: 756c 6572 2d3e 7265 7365 7428 293b 0a0a uler->reset();.. │ │ │ │ +00032140: 2020 2020 2020 2020 2020 2020 6d79 2028 my ( │ │ │ │ +00032150: 2464 6972 2c20 2466 696c 652c 2024 7569 $dir, $file, $ui │ │ │ │ +00032160: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, │ │ │ │ +00032170: 246d 6435 2920 3d0a 2020 2020 2020 2020 $md5) =. │ │ │ │ +00032180: 2020 2020 2020 2020 407b 2466 6966 6f43 @{$fifoC │ │ │ │ +00032190: 6f6d 7072 2d3e 6765 7428 297d 3b0a 0920 ompr->get()};.. │ │ │ │ +000321a0: 2020 2075 6e6c 6573 7320 282d 6520 2224 unless (-e "$ │ │ │ │ +000321b0: 6469 722f 2466 696c 6522 2920 2020 2023 dir/$file") # │ │ │ │ +000321c0: 2066 696c 6520 7761 7320 6465 6c65 7465 file was delete │ │ │ │ +000321d0: 6420 6475 7269 6e67 2077 6169 7420 696e d during wait in │ │ │ │ +000321e0: 2071 7565 7565 0a09 2020 2020 7b0a 0909 queue.. {... │ │ │ │ +000321f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00032200: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00032210: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00032220: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... ["file │ │ │ │ +00032230: 203c 2464 6972 2f24 6669 6c65 3e20 6465 <$dir/$file> de │ │ │ │ +00032240: 6c65 7465 6420 6475 7269 6e67 2062 6163 leted during bac │ │ │ │ +00032250: 6b75 7022 5d29 3b0a 0909 6e65 7874 3b0a kup"]);...next;. │ │ │ │ +00032260: 0920 2020 207d 0a20 2020 2020 2020 2020 . }. │ │ │ │ +00032270: 2020 206d 7920 2824 6465 762c 2024 696e my ($dev, $in │ │ │ │ +00032280: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt │ │ │ │ +00032290: 696d 652c 2024 6174 696d 652c 2024 7369 ime, $atime, $si │ │ │ │ +000322a0: 7a65 2920 3d0a 2020 2020 2020 2020 2020 ze) =. │ │ │ │ +000322b0: 2020 2020 2020 2873 7461 7428 2224 6469 (stat("$di │ │ │ │ +000322c0: 722f 2466 696c 6522 2929 5b30 2c20 312c r/$file"))[0, 1, │ │ │ │ +000322d0: 2031 302c 2039 2c20 382c 2037 5d3b 0a20 10, 9, 8, 7];. │ │ │ │ +000322e0: 2020 2020 2020 2020 2020 2024 6d6f 6465 $mode │ │ │ │ +000322f0: 2026 3d20 3037 3737 373b 0a0a 2020 2020 &= 07777;.. │ │ │ │ +00032300: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog-> │ │ │ │ +00032310: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00032320: 2027 4427 2c0a 2020 2020 2020 2020 2020 'D',. │ │ │ │ +00032330: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032340: 272d 7374 7227 203d 3e20 5b22 2463 6f6d '-str' => ["$com │ │ │ │ +00032350: 7072 6573 7320 3c20 2464 6972 2f24 6669 press < $dir/$fi │ │ │ │ +00032360: 6c65 203e 2022 202e 0a20 2020 2020 2020 le > " .. │ │ │ │ +00032370: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032380: 2020 2020 2020 2020 2020 2020 2020 2224 "$ │ │ │ │ +00032390: 7461 7267 6574 4469 722f 2466 696c 6524 targetDir/$file$ │ │ │ │ +000323a0: 706f 7374 6669 7822 5d29 0a20 2020 2020 postfix"]). │ │ │ │ +000323b0: 2020 2020 2020 2020 2020 2069 6620 2824 if ($ │ │ │ │ +000323c0: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2); │ │ │ │ +000323d0: 0a0a 0920 2020 206d 7920 2474 6d70 4d44 ... my $tmpMD │ │ │ │ +000323e0: 3546 696c 6520 3d20 263a 3a75 6e69 7146 5File = &::uniqF │ │ │ │ +000323f0: 696c 654e 616d 6528 2224 746d 7064 6972 ileName("$tmpdir │ │ │ │ +00032400: 2f73 746f 7265 4261 636b 7570 2d6d 6435 /storeBackup-md5 │ │ │ │ +00032410: 2e22 293b 0a09 2020 2020 2470 6172 466f .");.. $parFo │ │ │ │ +00032420: 726b 436f 6d70 722d 3e61 6464 5f6e 6f62 rkCompr->add_nob │ │ │ │ +00032430: 6c6f 636b 2827 2d65 7865 6327 203d 3e20 lock('-exec' => │ │ │ │ +00032440: 246d 6169 6e3a 3a73 7462 754d 6435 4578 $main::stbuMd5Ex │ │ │ │ +00032450: 6563 2c0a 2020 2020 2020 2020 2020 2020 ec,. │ │ │ │ +00032460: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032470: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [ │ │ │ │ +00032480: 2463 6f6d 7072 6573 7343 6f6d 6d61 6e64 $compressCommand │ │ │ │ +00032490: 2c20 2224 6469 722f 2466 696c 6522 2c0a , "$dir/$file",. │ │ │ │ +000324a0: 0909 0920 2020 2020 2020 2224 7461 7267 ... "$targ │ │ │ │ +000324b0: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post │ │ │ │ +000324c0: 6669 7822 2c0a 0909 0920 2020 2020 2020 fix",.... │ │ │ │ +000324d0: 2474 6d70 4d44 3546 696c 652c 0a09 0909 $tmpMD5File,.... │ │ │ │ +000324e0: 2020 2020 2020 2040 2463 6f6d 7072 6573 @$compres │ │ │ │ +000324f0: 734f 7074 696f 6e73 5d2c 0a20 2020 2020 sOptions],. │ │ │ │ +00032500: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032510: 2020 2020 2020 2020 2020 272d 776f 726b '-work │ │ │ │ +00032520: 696e 6744 6972 2720 3d3e 2027 2e27 2c0a ingDir' => '.',. │ │ │ │ +00032530: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032540: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ │ +00032550: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2022 -outRandom' => " │ │ │ │ +00032560: 2474 6d70 6469 722f 7374 6465 7272 222c $tmpdir/stderr", │ │ │ │ +00032570: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00032580: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032590: 272d 696e 666f 2720 3d3e 0a20 2020 2020 '-info' =>. │ │ │ │ +000325a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000325b0: 2020 2020 2020 2020 2020 5b24 6465 762c [$dev, │ │ │ │ +000325c0: 2024 696e 6f64 652c 2024 6469 722c 2024 $inode, $dir, $ │ │ │ │ +000325d0: 6669 6c65 2c20 2475 6964 2c20 2467 6964 file, $uid, $gid │ │ │ │ +000325e0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +000325f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032600: 2020 246d 6f64 652c 2024 6d64 352c 2024 $mode, $md5, $ │ │ │ │ +00032610: 6374 696d 652c 2024 6d74 696d 652c 0a20 ctime, $mtime,. │ │ │ │ +00032620: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00032630: 2020 2020 2020 2020 2020 2020 2020 2024 $ │ │ │ │ +00032640: 6174 696d 652c 2024 7369 7a65 2c20 2474 atime, $size, $t │ │ │ │ +00032650: 6d70 4d44 3546 696c 655d 290a 0909 6f72 mpMD5File])...or │ │ │ │ +00032660: 2064 6965 2022 6d75 7374 206e 6f74 2068 die "must not h │ │ │ │ +00032670: 6170 7065 6e20 2863 6f6d 7072 2922 3b0a appen (compr)";. │ │ │ │ +00032680: 0a0a 2020 2020 2020 2020 7d0a 0a20 2020 .. }.. │ │ │ │ +00032690: 2020 2020 2023 2057 6169 7420 696e 2063 # Wait in c │ │ │ │ +000326a0: 6173 6520 7765 2064 6964 206e 6f74 6869 ase we did nothi │ │ │ │ +000326b0: 6e67 2069 6e20 7468 6973 206c 6f6f 7020 ng in this loop │ │ │ │ +000326c0: 7275 6e0a 2020 2020 2020 2020 246d 6169 run. $mai │ │ │ │ +000326d0: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched │ │ │ │ +000326e0: 756c 6572 2d3e 7761 6974 2829 3b0a 2020 uler->wait();. │ │ │ │ +000326f0: 2020 7d0a 0a20 2020 2069 6620 2825 696e }.. if (%in │ │ │ │ +00032700: 5072 6f67 7265 7373 290a 2020 2020 7b0a Progress). {. │ │ │ │ +00032710: 096d 7920 246d 6435 3b0a 0924 7072 4c6f .my $md5;..$prLo │ │ │ │ +00032720: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00032730: 203d 3e20 2744 272c 0a09 0920 2020 2020 => 'D',... │ │ │ │ +00032740: 2027 2d73 7472 2720 3d3e 205b 2272 6570 '-str' => ["rep │ │ │ │ +00032750: 6561 7420 6368 6563 6b69 6e67 206f 6620 eat checking of │ │ │ │ +00032760: 6964 656e 7469 6361 6c20 6669 6c65 7322 identical files" │ │ │ │ +00032770: 5d29 0a09 2020 2020 6966 2024 6465 6275 ]).. if $debu │ │ │ │ +00032780: 674d 6f64 6520 3e3d 2033 3b0a 0966 6f72 gMode >= 3;..for │ │ │ │ +00032790: 6561 6368 2024 6d64 3520 286b 6579 7320 each $md5 (keys │ │ │ │ +000327a0: 2569 6e50 726f 6772 6573 7329 0a09 7b0a %inProgress)..{. │ │ │ │ +000327b0: 0920 2020 2024 7265 6164 4469 7241 6e64 . $readDirAnd │ │ │ │ +000327c0: 4368 6563 6b2d 3e70 7573 6862 6163 6b28 Check->pushback( │ │ │ │ +000327d0: 2469 6e50 726f 6772 6573 737b 246d 6435 $inProgress{$md5 │ │ │ │ +000327e0: 7d2c 2024 7072 4c6f 672c 0a09 0924 6465 }, $prLog,...$de │ │ │ │ +000327f0: 6275 674d 6f64 6520 3e3d 2033 203f 2031 bugMode >= 3 ? 1 │ │ │ │ +00032800: 203a 2030 293b 0a09 7d0a 0928 2569 6e50 : 0);..}..(%inP │ │ │ │ +00032810: 726f 6772 6573 7329 203d 2028 293b 0a09 rogress) = ();.. │ │ │ │ +00032820: 6e6f 2077 6172 6e69 6e67 7320 2764 6570 no warnings 'dep │ │ │ │ +00032830: 7265 6361 7465 6427 3b0a 0967 6f74 6f20 recated';..goto │ │ │ │ +00032840: 6265 6769 6e4d 6169 6e4c 6f6f 704e 6f72 beginMainLoopNor │ │ │ │ +00032850: 6d61 6c4f 7065 7261 7469 6f6e 3b0a 2020 malOperation;. │ │ │ │ +00032860: 2020 7d0a 2020 2020 246d 6169 6e3a 3a73 }. $main::s │ │ │ │ +00032870: 7461 742d 3e70 7269 6e74 5072 6f67 7265 tat->printProgre │ │ │ │ +00032880: 7373 5265 706f 7274 2829 3b0a 0a20 2020 ssReport();.. │ │ │ │ +00032890: 2069 6620 2824 6c61 7465 4c69 6e6b 7329 if ($lateLinks) │ │ │ │ +000328a0: 0a20 2020 207b 0a09 2477 724c 6174 654c . {..$wrLateL │ │ │ │ +000328b0: 696e 6b2d 3e77 6169 7428 293b 0a09 6d79 ink->wait();..my │ │ │ │ +000328c0: 2024 6f75 7420 3d20 2477 724c 6174 654c $out = $wrLateL │ │ │ │ +000328d0: 696e 6b2d 3e67 6574 5354 4445 5252 2829 ink->getSTDERR() │ │ │ │ +000328e0: 3b0a 0969 6620 2840 246f 7574 290a 097b ;..if (@$out)..{ │ │ │ │ +000328f0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +00032900: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00032910: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ │ +00032920: 3d3e 205b 2277 7269 7469 6e67 206c 6174 => ["writing lat │ │ │ │ +00032930: 654c 696e 6b73 2066 696c 6520 7265 706f eLinks file repo │ │ │ │ +00032940: 7274 7320 6572 726f 7273 3a22 2c0a 0909 rts errors:",... │ │ │ │ +00032950: 0909 2020 2020 2040 246f 7574 5d29 3b0a .. @$out]);. │ │ │ │ +00032960: 0920 2020 2065 7869 7420 313b 0a09 7d0a . exit 1;..}. │ │ │ │ +00032970: 0924 7772 4c61 7465 4c69 6e6b 2d3e 636c .$wrLateLink->cl │ │ │ │ +00032980: 6f73 6528 293b 0a0a 0969 6620 2873 6361 ose();...if (sca │ │ │ │ +00032990: 6c61 7228 2561 6c6c 4261 636b 7570 4469 lar(%allBackupDi │ │ │ │ +000329a0: 7273 2929 0a09 7b0a 0920 2020 2023 2067 rs))..{.. # g │ │ │ │ +000329b0: 656e 6572 6174 6520 696e 666f 726d 6174 enerate informat │ │ │ │ +000329c0: 696f 6e20 7468 6174 2072 6566 6572 656e ion that referen │ │ │ │ +000329d0: 6365 7320 6861 7665 2074 6f20 6265 2072 ces have to be r │ │ │ │ +000329e0: 6573 6f6c 7665 640a 0920 2020 206d 7920 esolved.. my │ │ │ │ +000329f0: 2474 6f20 3d20 2224 7461 7267 6574 4469 $to = "$targetDi │ │ │ │ +00032a00: 722f 2e73 746f 7265 4261 636b 7570 4c69 r/.storeBackupLi │ │ │ │ +00032a10: 6e6b 732f 6c69 6e6b 546f 223b 0a09 2020 nks/linkTo";.. │ │ │ │ +00032a20: 2020 6c6f 6361 6c20 2a54 4f3b 0a09 2020 local *TO;.. │ │ │ │ +00032a30: 2020 6f70 656e 2854 4f2c 2022 3e22 2c20 open(TO, ">", │ │ │ │ +00032a40: 2474 6f29 206f 720a 0909 2470 724c 6f67 $to) or...$prLog │ │ │ │ +00032a50: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00032a60: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ │ +00032a70: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ │ +00032a80: 6e6f 7420 6f70 656e 203c 2474 6f3e 225d not open <$to>"] │ │ │ │ +00032a90: 2c0a 0909 0920 2020 2020 2027 2d61 6464 ,.... '-add │ │ │ │ +00032aa0: 2720 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 ' => [__FILE__, │ │ │ │ +00032ab0: 5f5f 4c49 4e45 5f5f 5d2c 0a09 0909 2020 __LINE__],.... │ │ │ │ +00032ac0: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ │ +00032ad0: 293b 0a0a 0920 2020 206d 7920 2461 6264 );... my $abd │ │ │ │ +00032ae0: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $ │ │ │ │ +00032af0: 6162 6420 2825 616c 6c42 6163 6b75 7044 abd (%allBackupD │ │ │ │ +00032b00: 6972 7329 0a09 2020 2020 7b0a 0909 6d79 irs).. {...my │ │ │ │ +00032b10: 2024 7265 6c70 6174 6820 3d20 3a3a 7265 $relpath = ::re │ │ │ │ +00032b20: 6c50 6174 6828 2474 6172 6765 7444 6972 lPath($targetDir │ │ │ │ +00032b30: 2c20 2461 6264 293b 0a09 096e 6578 7420 , $abd);...next │ │ │ │ +00032b40: 6966 2024 7265 6c70 6174 6820 6571 2027 if $relpath eq ' │ │ │ │ +00032b50: 2e27 3b0a 0909 7072 696e 7420 544f 2022 .';...print TO " │ │ │ │ +00032b60: 2472 656c 7061 7468 5c6e 2220 6f72 0a09 $relpath\n" or.. │ │ │ │ +00032b70: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00032b80: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00032b90: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' │ │ │ │ +00032ba0: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => ["cannot writ │ │ │ │ +00032bb0: 6520 746f 203c 2474 6f3e 225d 2c0a 0909 e to <$to>"],... │ │ │ │ +00032bc0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ │ +00032bd0: 293b 0a0a 0909 6e65 7874 2069 6620 2470 );....next if $p │ │ │ │ +00032be0: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere │ │ │ │ +00032bf0: 6428 272d 6b69 6e64 2720 3d3e 2027 4527 d('-kind' => 'E' │ │ │ │ +00032c00: 293b 0a0a 0909 6d79 2024 6920 3d20 303b );....my $i = 0; │ │ │ │ +00032c10: 0a09 096c 6f63 616c 202a 4652 4f4d 3b0a ...local *FROM;. │ │ │ │ +00032c20: 0909 6d79 2024 6672 6f6d 203d 2022 2461 ..my $from = "$a │ │ │ │ +00032c30: 6264 2f2e 7374 6f72 6542 6163 6b75 704c bd/.storeBackupL │ │ │ │ +00032c40: 696e 6b73 2f6c 696e 6b46 726f 6d22 3b0a inks/linkFrom";. │ │ │ │ +00032c50: 0909 2469 2b2b 2077 6869 6c65 202d 6520 ..$i++ while -e │ │ │ │ +00032c60: 2224 6672 6f6d 2469 223b 0a09 096f 7065 "$from$i";...ope │ │ │ │ +00032c70: 6e28 4652 4f4d 2c20 223e 222c 2022 2466 n(FROM, ">", "$f │ │ │ │ +00032c80: 726f 6d24 6922 2920 6f72 0a09 0920 2020 rom$i") or... │ │ │ │ +00032c90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00032ca0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00032cb0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ │ +00032cc0: 2263 616e 6e6f 7420 7772 6974 6520 746f "cannot write to │ │ │ │ +00032cd0: 203c 2466 726f 6d24 693e 225d 2c0a 0909 <$from$i>"],... │ │ │ │ +00032ce0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ │ +00032cf0: 293b 0a09 0924 7265 6c70 6174 6820 3d20 );...$relpath = │ │ │ │ +00032d00: 3a3a 7265 6c50 6174 6828 2461 6264 2c20 ::relPath($abd, │ │ │ │ +00032d10: 2474 6172 6765 7444 6972 293b 0a09 096e $targetDir);...n │ │ │ │ +00032d20: 6578 7420 6966 2024 7265 6c70 6174 6820 ext if $relpath │ │ │ │ +00032d30: 6571 2027 2e27 3b0a 0909 7072 696e 7420 eq '.';...print │ │ │ │ +00032d40: 4652 4f4d 2022 2472 656c 7061 7468 5c6e FROM "$relpath\n │ │ │ │ +00032d50: 2220 6f72 0a09 0920 2020 2024 7072 4c6f " or... $prLo │ │ │ │ +00032d60: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00032d70: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ │ +00032d80: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => ["canno │ │ │ │ +00032d90: 7420 7772 6974 6520 746f 203c 2466 726f t write to <$fro │ │ │ │ +00032da0: 6d24 693e 225d 2c0a 0909 0909 2020 272d m$i>"],..... '- │ │ │ │ +00032db0: 6578 6974 2720 3d3e 2031 293b 0a09 0963 exit' => 1);...c │ │ │ │ +00032dc0: 6c6f 7365 2846 524f 4d29 206f 720a 0909 lose(FROM) or... │ │ │ │ +00032dd0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00032de0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00032df0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' = │ │ │ │ +00032e00: 3e20 5b22 6361 6e6e 6f74 2063 6c6f 7365 > ["cannot close │ │ │ │ +00032e10: 203c 2466 726f 6d24 693e 225d 2c0a 0909 <$from$i>"],... │ │ │ │ +00032e20: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ │ +00032e30: 293b 0a09 2020 2020 7d0a 0920 2020 2063 );.. }.. c │ │ │ │ +00032e40: 6c6f 7365 2854 4f29 206f 720a 0909 2470 lose(TO) or...$p │ │ │ │ +00032e50: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00032e60: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +00032e70: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00032e80: 2263 616e 6e6f 7420 636c 6f73 6520 3c24 "cannot close <$ │ │ │ │ +00032e90: 746f 3e22 5d2c 0a09 0909 2020 2020 2020 to>"],.... │ │ │ │ +00032ea0: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);.. │ │ │ │ +00032eb0: 7d0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 }. }.}...#### │ │ │ │ +00032ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00032ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00032ee0: 2323 2323 0a23 2068 656c 7065 7220 7375 ####.# helper su │ │ │ │ +00032ef0: 6272 6f75 7469 6e65 7320 696e 2070 6163 broutines in pac │ │ │ │ +00032f00: 6b61 6765 2073 6368 6564 756c 6572 0a73 kage scheduler.s │ │ │ │ +00032f10: 7562 2063 6861 6e67 6553 796d 6c69 6e6b ub changeSymlink │ │ │ │ +00032f20: 5065 726d 730a 7b0a 2020 2020 6d79 2028 Perms.{. my ( │ │ │ │ +00032f30: 2475 6964 2c20 2467 6964 2c20 2474 6172 $uid, $gid, $tar │ │ │ │ +00032f40: 6765 7444 6972 2c20 2466 696c 652c 2024 getDir, $file, $ │ │ │ │ +00032f50: 746d 7064 6972 2c20 2470 724c 6f67 2920 tmpdir, $prLog) │ │ │ │ +00032f60: 3d20 2840 5f29 3b0a 2020 2020 2320 536f = (@_);. # So │ │ │ │ +00032f70: 6d65 204f 5320 2865 672e 204c 696e 7578 me OS (eg. Linux │ │ │ │ +00032f80: 2920 646f 206e 6f74 2063 6861 6e67 6520 ) do not change │ │ │ │ +00032f90: 7468 6520 7379 6d6c 696e 6b20 6974 7365 the symlink itse │ │ │ │ +00032fa0: 6c66 0a20 2020 2023 2077 6865 6e20 6361 lf. # when ca │ │ │ │ +00032fb0: 6c6c 696e 6720 7468 6520 7379 7374 656d lling the system │ │ │ │ +00032fc0: 2063 616c 6c20 6368 6d6f 642e 2054 6865 call chmod. The │ │ │ │ +00032fd0: 7920 6368 616e 6765 2074 6865 206f 776e y change the own │ │ │ │ +00032fe0: 6572 7368 6970 0a20 2020 2023 206f 6620 ership. # of │ │ │ │ +00032ff0: 7468 6520 6669 6c65 2072 6566 6572 7265 the file referre │ │ │ │ +00033000: 6420 746f 2062 7920 7468 6520 7379 6d70 d to by the symp │ │ │ │ +00033010: 6f6c 6963 206c 696e 6b2e 0a20 2020 2023 olic link.. # │ │ │ │ +00033020: 2054 6865 7265 666f 7265 2c20 6c63 686f Therefore, lcho │ │ │ │ +00033030: 776e 2068 6173 2074 6f20 6265 2075 7365 wn has to be use │ │ │ │ +00033040: 640a 2020 2020 6d79 2024 6368 6f77 6e20 d. my $chown │ │ │ │ +00033050: 3d0a 0966 6f72 6b50 726f 632d 3e6e 6577 =..forkProc->new │ │ │ │ +00033060: 2827 2d65 7865 6327 203d 3e20 2763 686f ('-exec' => 'cho │ │ │ │ +00033070: 776e 272c 0a09 0920 2020 2020 2027 2d70 wn',... '-p │ │ │ │ +00033080: 6172 616d 2720 3d3e 205b 272d 6827 2c20 aram' => ['-h', │ │ │ │ +00033090: 2224 7569 643a 2467 6964 222c 0a09 0909 "$uid:$gid",.... │ │ │ │ +000330a0: 0920 2020 2224 7461 7267 6574 4469 722f . "$targetDir/ │ │ │ │ +000330b0: 2466 696c 6522 5d2c 0a09 0920 2020 2020 $file"],... │ │ │ │ +000330c0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ │ +000330d0: 2022 2474 6d70 6469 722f 6368 6f77 6e2d "$tmpdir/chown- │ │ │ │ +000330e0: 222c 0a09 0920 2020 2020 2027 2d70 724c ",... '-prL │ │ │ │ +000330f0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +00033100: 2020 2020 2463 686f 776e 2d3e 7761 6974 $chown->wait │ │ │ │ +00033110: 2829 3b0a 0a23 0909 0975 7469 6d65 2024 ();..#...utime $ │ │ │ │ +00033120: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, " │ │ │ │ +00033130: 2464 6972 2f24 6669 6c65 2220 6966 2024 $dir/$file" if $ │ │ │ │ +00033140: 7265 7365 7441 7469 6d65 3b0a 2309 0909 resetAtime;.#... │ │ │ │ +00033150: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m │ │ │ │ +00033160: 7469 6d65 2c20 2224 7461 7267 6574 4469 time, "$targetDi │ │ │ │ +00033170: 722f 2466 696c 6522 3b0a 2309 0909 5e5e r/$file";.#...^^ │ │ │ │ +00033180: 2075 7469 6d65 2063 6861 6e67 6573 206f utime changes o │ │ │ │ +00033190: 7269 6769 6e61 6c20 6669 6c65 210a 7d0a riginal file!.}. │ │ │ │ +000331a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +000331b0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +000331c0: 7375 6220 7374 6f72 6553 796d 4c69 6e6b sub storeSymLink │ │ │ │ +000331d0: 496e 666f 730a 7b0a 2020 2020 6d79 2028 Infos.{. my ( │ │ │ │ +000331e0: 2475 6964 2c20 2467 6964 2c20 2474 6172 $uid, $gid, $tar │ │ │ │ +000331f0: 6765 7444 6972 2c20 2466 696c 652c 2024 getDir, $file, $ │ │ │ │ +00033200: 6465 762c 2024 696e 6f64 652c 2024 6374 dev, $inode, $ct │ │ │ │ +00033210: 696d 652c 2024 6d74 696d 652c 0a09 2461 ime, $mtime,..$a │ │ │ │ +00033220: 7469 6d65 2c20 2461 6b74 4669 6c65 6e61 time, $aktFilena │ │ │ │ +00033230: 6d65 2c20 2464 6562 7567 4d6f 6465 2c20 me, $debugMode, │ │ │ │ +00033240: 2470 724c 6f67 2920 3d20 2840 5f29 3b0a $prLog) = (@_);. │ │ │ │ +00033250: 0a20 2020 2024 6d61 696e 3a3a 7374 6174 . $main::stat │ │ │ │ +00033260: 2d3e 696e 6372 5f6e 6f53 796d 4c69 6e6b ->incr_noSymLink │ │ │ │ +00033270: 7328 2475 6964 2c20 2467 6964 293b 0a20 s($uid, $gid);. │ │ │ │ +00033280: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00033290: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D', │ │ │ │ +000332a0: 0a09 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ │ +000332b0: 0920 205b 2263 7265 6174 6564 2073 796d . ["created sym │ │ │ │ +000332c0: 626f 6c69 6320 6c69 6e6b 203c 2474 6172 bolic link <$tar │ │ │ │ +000332d0: 6765 7444 6972 2f24 6669 6c65 225d 290a getDir/$file"]). │ │ │ │ +000332e0: 0969 6620 2824 6465 6275 674d 6f64 6520 .if ($debugMode │ │ │ │ +000332f0: 3e3d 2032 293b 0a0a 2020 2020 2461 6b74 >= 2);.. $akt │ │ │ │ +00033300: 4669 6c65 6e61 6d65 2d3e 7374 6f72 6553 Filename->storeS │ │ │ │ +00033310: 796d 6c69 6e6b 2827 2d73 796d 6c69 6e6b ymlink('-symlink │ │ │ │ +00033320: 2720 3d3e 2024 6669 6c65 2c0a 0909 0920 ' => $file,.... │ │ │ │ +00033330: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => │ │ │ │ +00033340: 2464 6576 2c0a 0909 0920 2020 2020 2020 $dev,.... │ │ │ │ +00033350: 272d 696e 6f64 6527 203d 3e20 2469 6e6f '-inode' => $ino │ │ │ │ +00033360: 6465 2c0a 0909 0920 2020 2020 2020 272d de,.... '- │ │ │ │ +00033370: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ │ +00033380: 2c0a 0909 0920 2020 2020 2020 272d 6d74 ,.... '-mt │ │ │ │ +00033390: 696d 6527 203d 3e20 246d 7469 6d65 2c0a ime' => $mtime,. │ │ │ │ +000333a0: 0909 0920 2020 2020 2020 272d 6174 696d ... '-atim │ │ │ │ +000333b0: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,... │ │ │ │ +000333c0: 0920 2020 2020 2020 272d 7569 6427 203d . '-uid' = │ │ │ │ +000333d0: 3e20 2475 6964 2c0a 0909 0920 2020 2020 > $uid,.... │ │ │ │ +000333e0: 2020 272d 6769 6427 203d 3e20 2467 6964 '-gid' => $gid │ │ │ │ +000333f0: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...######### │ │ │ │ +00033400: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00033410: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00033420: 2323 2323 2323 2323 230a 7061 636b 6167 #########.packag │ │ │ │ +00033430: 6520 5374 6174 6973 7469 633b 0a6f 7572 e Statistic;.our │ │ │ │ +00033440: 2040 4953 4120 3d20 7177 2820 7374 6174 @ISA = qw( stat │ │ │ │ +00033450: 6973 7469 6344 656c 6574 654f 6c64 4261 isticDeleteOldBa │ │ │ │ +00033460: 636b 7570 4469 7273 2029 3b0a 0a23 2323 ckupDirs );..### │ │ │ │ +00033470: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00033480: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00033490: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{. │ │ │ │ +000334a0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ │ +000334b0: 7368 6966 743b 0a0a 2020 2020 6d79 2028 shift;.. my ( │ │ │ │ +000334c0: 2570 6172 616d 7329 203d 2028 272d 7374 %params) = ('-st │ │ │ │ +000334d0: 6172 7444 6174 6527 2020 2020 2020 2020 artDate' │ │ │ │ +000334e0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ │ +000334f0: 2027 2d61 6b74 4461 7465 2720 2020 2020 '-aktDate' │ │ │ │ +00033500: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,. │ │ │ │ +00033510: 0909 2020 2020 272d 7573 6572 4772 6f75 .. '-userGrou │ │ │ │ +00033520: 7053 7461 7446 696c 6527 203d 3e20 756e pStatFile' => un │ │ │ │ +00033530: 6465 662c 2020 2020 2023 2046 6c61 670a def, # Flag. │ │ │ │ +00033540: 0909 2020 2020 272d 6578 6365 7074 5375 .. '-exceptSu │ │ │ │ +00033550: 6666 6978 2720 2020 2020 203d 3e20 756e ffix' => un │ │ │ │ +00033560: 6465 662c 2020 2020 2023 2046 696c 656e def, # Filen │ │ │ │ +00033570: 616d 6520 2869 6620 7365 7429 0a09 0920 ame (if set)... │ │ │ │ +00033580: 2020 2027 2d70 724c 6f67 2720 2020 2020 '-prLog' │ │ │ │ +00033590: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ │ +000335a0: 2c0a 0909 2020 2020 272d 7072 6f67 7265 ,... '-progre │ │ │ │ +000335b0: 7373 5265 706f 7274 2720 2020 203d 3e20 ssReport' => │ │ │ │ +000335c0: 756e 6465 662c 0a09 0920 2020 2027 2d77 undef,... '-w │ │ │ │ +000335d0: 6974 6855 7365 7247 726f 7570 5374 6174 ithUserGroupStat │ │ │ │ +000335e0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... │ │ │ │ +000335f0: 2020 272d 7573 6572 4772 6f75 7053 7461 '-userGroupSta │ │ │ │ +00033600: 7446 696c 6527 203d 3e20 756e 6465 662c tFile' => undef, │ │ │ │ +00033610: 0a09 0920 2020 2027 2d63 6f6d 7072 6573 ... '-compres │ │ │ │ +00033620: 7327 2020 2020 2020 2020 2020 3d3e 2075 s' => u │ │ │ │ +00033630: 6e64 6566 0a09 0920 2020 2029 3b0a 0a20 ndef... );.. │ │ │ │ +00033640: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec │ │ │ │ +00033650: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\%params │ │ │ │ +00033660: 2c20 5c40 5f2c 2027 5374 6174 6973 7469 , \@_, 'Statisti │ │ │ │ +00033670: 633a 3a6e 6577 272c 0a09 0909 205b 272d c::new',.... ['- │ │ │ │ +00033680: 7072 4c6f 6727 2c20 272d 7072 6f67 7265 prLog', '-progre │ │ │ │ +00033690: 7373 5265 706f 7274 272c 0a09 0909 2020 ssReport',.... │ │ │ │ +000336a0: 272d 7769 7468 5573 6572 4772 6f75 7053 '-withUserGroupS │ │ │ │ +000336b0: 7461 7427 2c20 272d 7573 6572 4772 6f75 tat', '-userGrou │ │ │ │ +000336c0: 7053 7461 7446 696c 6527 2c0a 0909 0920 pStatFile',.... │ │ │ │ +000336d0: 2027 2d63 6f6d 7072 6573 7327 5d29 3b0a '-compress']);. │ │ │ │ +000336e0: 2020 2020 6d79 2024 7365 6c66 203d 0a09 my $self =.. │ │ │ │ +000336f0: 7374 6174 6973 7469 6344 656c 6574 654f statisticDeleteO │ │ │ │ +00033700: 6c64 4261 636b 7570 4469 7273 2d3e 6e65 ldBackupDirs->ne │ │ │ │ +00033710: 7728 272d 7072 4c6f 6727 203d 3e20 2470 w('-prLog' => $p │ │ │ │ +00033720: 6172 616d 737b 272d 7072 4c6f 6727 7d2c arams{'-prLog'}, │ │ │ │ +00033730: 0a09 0909 0909 2020 272d 6b69 6e64 2720 ...... '-kind' │ │ │ │ +00033740: 3d3e 2027 5327 293b 0a0a 2020 2020 263a => 'S');.. &: │ │ │ │ +00033750: 3a73 6574 5061 7261 6d73 4469 7265 6374 :setParamsDirect │ │ │ │ +00033760: 2824 7365 6c66 2c20 5c25 7061 7261 6d73 ($self, \%params │ │ │ │ +00033770: 293b 0a0a 2020 2020 2473 656c 662d 3e7b );.. $self->{ │ │ │ │ +00033780: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'} │ │ │ │ +00033790: 203d 2028 2473 656c 662d 3e7b 2777 6974 = ($self->{'wit │ │ │ │ +000337a0: 6855 7365 7247 726f 7570 5374 6174 277d hUserGroupStat'} │ │ │ │ +000337b0: 206f 720a 0909 0909 2473 656c 662d 3e7b or.....$self->{ │ │ │ │ +000337c0: 2775 7365 7247 726f 7570 5374 6174 4669 'userGroupStatFi │ │ │ │ +000337d0: 6c65 277d 2920 3f20 3120 3a20 756e 6465 le'}) ? 1 : unde │ │ │ │ +000337e0: 663b 0a0a 2020 2020 6966 2028 2473 656c f;.. if ($sel │ │ │ │ +000337f0: 662d 3e7b 2775 7365 7247 726f 7570 466c f->{'userGroupFl │ │ │ │ +00033800: 6167 277d 290a 2020 2020 7b0a 096d 7920 ag'}). {..my │ │ │ │ +00033810: 2825 7569 6453 7461 7449 6e6f 6465 7329 (%uidStatInodes) │ │ │ │ +00033820: 203d 2028 293b 0a09 6d79 2028 2575 6964 = ();..my (%uid │ │ │ │ +00033830: 5374 6174 5369 7a65 2920 3d20 2829 3b0a StatSize) = ();. │ │ │ │ +00033840: 096d 7920 2825 6769 6453 7461 7449 6e6f .my (%gidStatIno │ │ │ │ +00033850: 6465 7329 203d 2028 293b 0a09 6d79 2028 des) = ();..my ( │ │ │ │ +00033860: 2567 6964 5374 6174 5369 7a65 2920 3d20 %gidStatSize) = │ │ │ │ +00033870: 2829 3b0a 0924 7365 6c66 2d3e 7b27 7569 ();..$self->{'ui │ │ │ │ +00033880: 6453 7461 7449 6e6f 6465 7327 7d20 3d20 dStatInodes'} = │ │ │ │ +00033890: 5c25 7569 6453 7461 7449 6e6f 6465 733b \%uidStatInodes; │ │ │ │ +000338a0: 0a09 2473 656c 662d 3e7b 2775 6964 5374 ..$self->{'uidSt │ │ │ │ +000338b0: 6174 5369 7a65 277d 203d 205c 2575 6964 atSize'} = \%uid │ │ │ │ +000338c0: 5374 6174 5369 7a65 3b0a 0924 7365 6c66 StatSize;..$self │ │ │ │ +000338d0: 2d3e 7b27 6769 6453 7461 7449 6e6f 6465 ->{'gidStatInode │ │ │ │ +000338e0: 7327 7d20 3d20 5c25 6769 6453 7461 7449 s'} = \%gidStatI │ │ │ │ +000338f0: 6e6f 6465 733b 0a09 2473 656c 662d 3e7b nodes;..$self->{ │ │ │ │ +00033900: 2767 6964 5374 6174 5369 7a65 277d 203d 'gidStatSize'} = │ │ │ │ +00033910: 205c 2567 6964 5374 6174 5369 7a65 3b0a \%gidStatSize;. │ │ │ │ +00033920: 2020 2020 7d0a 0a20 2020 206d 7920 2825 }.. my (% │ │ │ │ +00033930: 7569 6453 6f75 7263 6529 203d 2028 293b uidSource) = (); │ │ │ │ +00033940: 2020 2020 2020 2023 2048 6173 6820 6d69 # Hash mi │ │ │ │ +00033950: 7420 6b65 7920 3d20 7569 642c 2076 616c t key = uid, val │ │ │ │ +00033960: 7565 203d 2073 697a 650a 2020 2020 6d79 ue = size. my │ │ │ │ +00033970: 2028 2567 6964 536f 7572 6365 2920 3d20 (%gidSource) = │ │ │ │ +00033980: 2829 3b20 2020 2020 2020 2320 4861 7368 (); # Hash │ │ │ │ +00033990: 206d 6974 206b 6579 203d 2067 6964 2c20 mit key = gid, │ │ │ │ +000339a0: 7661 6c75 6520 3d20 7369 7a65 0a20 2020 value = size. │ │ │ │ +000339b0: 206d 7920 2825 7569 6442 6163 6b75 7029 my (%uidBackup) │ │ │ │ +000339c0: 203d 2028 293b 2020 2020 2020 2023 2048 = (); # H │ │ │ │ +000339d0: 6173 6820 6d69 7420 6b65 7920 3d20 7569 ash mit key = ui │ │ │ │ +000339e0: 642c 2076 616c 7565 203d 2073 697a 650a d, value = size. │ │ │ │ +000339f0: 2020 2020 6d79 2028 2567 6964 4261 636b my (%gidBack │ │ │ │ +00033a00: 7570 2920 3d20 2829 3b20 2020 2020 2020 up) = (); │ │ │ │ +00033a10: 2320 4861 7368 206d 6974 206b 6579 203d # Hash mit key = │ │ │ │ +00033a20: 2067 6964 2c20 7661 6c75 6520 3d20 7369 gid, value = si │ │ │ │ +00033a30: 7a65 0a20 2020 2024 7365 6c66 2d3e 7b27 ze. $self->{' │ │ │ │ +00033a40: 7569 6453 6f75 7263 6527 7d20 3d20 5c25 uidSource'} = \% │ │ │ │ +00033a50: 7569 6453 6f75 7263 653b 0a20 2020 2024 uidSource;. $ │ │ │ │ +00033a60: 7365 6c66 2d3e 7b27 6769 6453 6f75 7263 self->{'gidSourc │ │ │ │ +00033a70: 6527 7d20 3d20 5c25 6769 6453 6f75 7263 e'} = \%gidSourc │ │ │ │ +00033a80: 653b 0a20 2020 2024 7365 6c66 2d3e 7b27 e;. $self->{' │ │ │ │ +00033a90: 7569 6442 6163 6b75 7027 7d20 3d20 5c25 uidBackup'} = \% │ │ │ │ +00033aa0: 7569 6442 6163 6b75 703b 0a20 2020 2024 uidBackup;. $ │ │ │ │ +00033ab0: 7365 6c66 2d3e 7b27 6769 6442 6163 6b75 self->{'gidBacku │ │ │ │ +00033ac0: 7027 7d20 3d20 5c25 6769 6442 6163 6b75 p'} = \%gidBacku │ │ │ │ +00033ad0: 703b 0a0a 2020 2020 2473 656c 662d 3e7b p;.. $self->{ │ │ │ │ +00033ae0: 276e 6f44 6972 7327 7d20 3d20 303b 2020 'noDirs'} = 0; │ │ │ │ +00033af0: 2020 2020 2320 6e75 6d62 6572 206f 6620 # number of │ │ │ │ +00033b00: 6469 7265 6374 6f72 6965 7320 696e 2062 directories in b │ │ │ │ +00033b10: 6163 6b75 700a 2020 2020 2473 656c 662d ackup. $self- │ │ │ │ +00033b20: 3e7b 276e 6f46 696c 6573 277d 203d 2030 >{'noFiles'} = 0 │ │ │ │ +00033b30: 3b20 2020 2020 2320 6f76 6572 616c 6c20 ; # overall │ │ │ │ +00033b40: 6e75 6d62 6572 206f 6620 6669 6c65 7320 number of files │ │ │ │ +00033b50: 696e 2062 6163 6b75 700a 2020 2020 2473 in backup. $s │ │ │ │ +00033b60: 656c 662d 3e7b 276e 6f53 796d 4c69 6e6b elf->{'noSymLink │ │ │ │ +00033b70: 7327 7d20 3d20 303b 2020 2320 6e75 6d62 s'} = 0; # numb │ │ │ │ +00033b80: 6572 206f 6620 7379 6d62 6f6c 6963 206c er of symbolic l │ │ │ │ +00033b90: 696e 6b73 2069 6e20 6261 636b 7570 0a20 inks in backup. │ │ │ │ +00033ba0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 4c61 $self->{'noLa │ │ │ │ +00033bb0: 7465 4c69 6e6b 7327 7d20 3d20 303b 2023 teLinks'} = 0; # │ │ │ │ +00033bc0: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files │ │ │ │ +00033bd0: 2077 6974 6820 6c61 7465 4c69 6e6b 7320 with lateLinks │ │ │ │ +00033be0: 696e 0a20 2020 2020 2020 2020 2020 2020 in. │ │ │ │ +00033bf0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033c00: 2020 2023 2062 6163 6b75 702c 2065 6163 # backup, eac │ │ │ │ +00033c10: 6820 626c 6f63 6b65 6420 6669 6c65 2066 h blocked file f │ │ │ │ +00033c20: 7261 676d 656e 740a 2020 2020 2020 2020 ragment. │ │ │ │ +00033c30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033c40: 2020 2020 2020 2020 2320 696e 6372 6561 # increa │ │ │ │ +00033c50: 7365 7320 7468 6973 206e 756d 6265 720a ses this number. │ │ │ │ +00033c60: 2020 2020 2473 656c 662d 3e7b 276e 6f4e $self->{'noN │ │ │ │ +00033c70: 616d 6564 5069 7065 7327 7d20 3d20 303b amedPipes'} = 0; │ │ │ │ +00033c80: 2320 6e75 6d62 6572 206f 6620 6e61 6d65 # number of name │ │ │ │ +00033c90: 6420 7069 7065 7320 696e 2062 6163 6b75 d pipes in backu │ │ │ │ +00033ca0: 700a 2020 2020 2473 656c 662d 3e7b 276e p. $self->{'n │ │ │ │ +00033cb0: 6f53 6f63 6b65 7473 277d 203d 2030 3b20 oSockets'} = 0; │ │ │ │ +00033cc0: 2020 2320 6e75 6d62 6572 206f 6620 736f # number of so │ │ │ │ +00033cd0: 636b 6574 7320 696e 2062 6163 6b75 700a ckets in backup. │ │ │ │ +00033ce0: 2020 2020 2473 656c 662d 3e7b 276e 6f43 $self->{'noC │ │ │ │ +00033cf0: 6861 7244 6576 277d 203d 2030 3b20 2020 harDev'} = 0; │ │ │ │ +00033d00: 2320 6e75 6d62 6572 206f 6620 6368 6172 # number of char │ │ │ │ +00033d10: 6163 7465 7220 6465 7669 6365 7320 696e acter devices in │ │ │ │ +00033d20: 2062 6163 6b75 700a 2020 2020 2473 656c backup. $sel │ │ │ │ +00033d30: 662d 3e7b 276e 6f42 6c6f 636b 4465 7627 f->{'noBlockDev' │ │ │ │ +00033d40: 7d20 3d20 303b 2020 2320 6e75 6d62 6572 } = 0; # number │ │ │ │ +00033d50: 206f 6620 626c 6f63 6b20 6465 7669 6365 of block device │ │ │ │ +00033d60: 7320 696e 2062 6163 6b75 700a 2020 2020 s in backup. │ │ │ │ +00033d70: 2473 656c 662d 3e7b 276e 6f4d 4435 6564 $self->{'noMD5ed │ │ │ │ +00033d80: 4669 6c65 7327 7d20 3d20 303b 2320 6e75 Files'} = 0;# nu │ │ │ │ +00033d90: 6d62 6572 206f 6620 6669 6c65 7320 7768 mber of files wh │ │ │ │ +00033da0: 6572 6520 616e 206d 6435 2073 756d 2077 ere an md5 sum w │ │ │ │ +00033db0: 6173 0a20 2020 2020 2020 2020 2020 2020 as. │ │ │ │ +00033dc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033dd0: 2020 2023 2063 616c 6375 6c61 7465 642c # calculated, │ │ │ │ +00033de0: 2065 6163 6820 626c 6f63 6b65 6420 6669 each blocked fi │ │ │ │ +00033df0: 6c65 2066 7261 676d 656e 740a 2020 2020 le fragment. │ │ │ │ +00033e00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033e10: 2020 2020 2020 2020 2020 2020 2320 696e # in │ │ │ │ +00033e20: 6372 6561 7365 7320 7468 6973 206e 756d creases this num │ │ │ │ +00033e30: 6265 720a 2020 2020 2473 656c 662d 3e7b ber. $self->{ │ │ │ │ +00033e40: 276e 6f49 6e74 6572 6e61 6c4c 696e 6b65 'noInternalLinke │ │ │ │ +00033e50: 6446 696c 6573 277d 203d 2030 3b23 206e dFiles'} = 0;# n │ │ │ │ +00033e60: 756d 6265 7220 6f66 2066 696c 6573 2077 umber of files w │ │ │ │ +00033e70: 6869 6368 2077 6572 6520 6c69 6e6b 6564 hich were linked │ │ │ │ +00033e80: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00033e90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033ea0: 2023 2069 6e73 6964 6520 7468 6520 6a75 # inside the ju │ │ │ │ +00033eb0: 7374 2072 756e 6e69 6e67 2062 6163 6b75 st running backu │ │ │ │ +00033ec0: 700a 2020 2020 2473 656c 662d 3e7b 276e p. $self->{'n │ │ │ │ +00033ed0: 6f4f 6c64 4c69 6e6b 6564 4669 6c65 7327 oOldLinkedFiles' │ │ │ │ +00033ee0: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o │ │ │ │ +00033ef0: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we │ │ │ │ +00033f00: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. │ │ │ │ +00033f10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033f20: 2020 2020 2020 2020 2020 2320 746f 206f # to o │ │ │ │ +00033f30: 7468 6572 2062 6163 6b75 7073 0a20 2020 ther backups. │ │ │ │ +00033f40: 2024 7365 6c66 2d3e 7b27 756e 6368 616e $self->{'unchan │ │ │ │ +00033f50: 6765 6446 696c 6573 277d 203d 2030 3b23 gedFiles'} = 0;# │ │ │ │ +00033f60: 2073 697a 6520 6f66 2066 696c 6573 2c20 size of files, │ │ │ │ +00033f70: 7768 6572 6520 7369 7a65 2061 6e64 0a20 where size and. │ │ │ │ +00033f80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033f90: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00033fa0: 2074 696d 6573 7461 6d70 2077 6572 6520 timestamp were │ │ │ │ +00033fb0: 6e6f 7420 6368 616e 6765 6420 7369 6e63 not changed sinc │ │ │ │ +00033fc0: 6520 7468 650a 2020 2020 2020 2020 2020 e the. │ │ │ │ +00033fd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00033fe0: 2020 2020 2020 2320 6c61 7374 2062 6163 # last bac │ │ │ │ +00033ff0: 6b75 702c 2074 6865 7920 7765 7265 2064 kup, they were d │ │ │ │ +00034000: 6972 6563 746c 7920 6c69 6e6b 6564 0a20 irectly linked. │ │ │ │ +00034010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034020: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00034030: 2061 6e64 2074 6865 206d 6435 2073 756d and the md5 sum │ │ │ │ +00034040: 2077 6173 206e 6f74 2063 616c 6375 6c61 was not calcula │ │ │ │ +00034050: 7465 6420 6167 6169 6e0a 2020 2020 2473 ted again. $s │ │ │ │ +00034060: 656c 662d 3e7b 276e 6f43 6f70 6965 6446 elf->{'noCopiedF │ │ │ │ +00034070: 696c 6573 277d 203d 2030 3b23 206e 756d iles'} = 0;# num │ │ │ │ +00034080: 6265 7220 6f66 2066 696c 6573 2077 6869 ber of files whi │ │ │ │ +00034090: 6368 2077 6572 6520 636f 7069 6564 0a20 ch were copied. │ │ │ │ +000340a0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 436f $self->{'noCo │ │ │ │ +000340b0: 6d70 7265 7373 6564 4669 6c65 7327 7d20 mpressedFiles'} │ │ │ │ +000340c0: 3d20 303b 2320 6e75 6d62 6572 206f 6620 = 0;# number of │ │ │ │ +000340d0: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were │ │ │ │ +000340e0: 2063 6f6d 7072 6573 7365 640a 2020 2020 compressed. │ │ │ │ +000340f0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks │ │ │ │ +00034100: 4d44 3527 7d20 3d20 303b 2020 2320 6e75 MD5'} = 0; # nu │ │ │ │ +00034110: 6d62 6572 206f 6620 666f 726b 7320 746f mber of forks to │ │ │ │ +00034120: 2063 616c 636c 7561 7465 6420 616e 206d calcluated an m │ │ │ │ +00034130: 6435 0a20 2020 2024 7365 6c66 2d3e 7b27 d5. $self->{' │ │ │ │ +00034140: 6e6f 466f 726b 7343 5027 7d20 3d20 303b noForksCP'} = 0; │ │ │ │ +00034150: 2020 2023 206e 756d 6265 7220 6f66 2066 # number of f │ │ │ │ +00034160: 6f72 6b73 2074 6f20 636f 7079 2061 2066 orks to copy a f │ │ │ │ +00034170: 696c 650a 2020 2020 2473 656c 662d 3e7b ile. $self->{ │ │ │ │ +00034180: 276e 6f46 6f72 6b73 436f 6d70 7265 7373 'noForksCompress │ │ │ │ +00034190: 277d 203d 2030 3b23 206e 756d 6265 7220 '} = 0;# number │ │ │ │ +000341a0: 6f66 2066 6f72 6b73 2074 6f20 636f 6d70 of forks to comp │ │ │ │ +000341b0: 7265 7373 2061 2066 696c 650a 2020 2020 ress a file. │ │ │ │ +000341c0: 2473 656c 662d 3e7b 276e 6f45 7863 6c75 $self->{'noExclu │ │ │ │ +000341d0: 6465 5275 6c65 277d 203d 2030 3b23 206e deRule'} = 0;# n │ │ │ │ +000341e0: 756d 6265 7220 6f66 2066 696c 6573 2065 umber of files e │ │ │ │ +000341f0: 7863 6c75 6465 6420 6265 6361 7573 6520 xcluded because │ │ │ │ +00034200: 6f66 0a20 2020 2020 2020 2020 2020 2020 of. │ │ │ │ +00034210: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034220: 2020 2023 2065 7863 6c75 6465 2072 756c # exclude rul │ │ │ │ +00034230: 650a 2020 2020 2473 656c 662d 3e7b 276e e. $self->{'n │ │ │ │ +00034240: 6f49 6e63 6c75 6465 5275 6c65 277d 203d oIncludeRule'} = │ │ │ │ +00034250: 2030 3b23 206e 756d 6265 7220 6f66 2066 0;# number of f │ │ │ │ +00034260: 696c 6573 2069 6e63 6c75 6465 6420 6265 iles included be │ │ │ │ +00034270: 6361 7573 6520 6f66 0a20 2020 2020 2020 cause of. │ │ │ │ +00034280: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034290: 2020 2020 2020 2020 2023 2069 6e63 6c75 # inclu │ │ │ │ +000342a0: 6465 2072 756c 650a 2020 2020 2473 656c de rule. $sel │ │ │ │ +000342b0: 662d 3e7b 276e 6f42 6c6f 636b 6564 4669 f->{'noBlockedFi │ │ │ │ +000342c0: 6c65 7327 7d20 3d20 303b 2320 6e75 6d62 les'} = 0;# numb │ │ │ │ +000342d0: 6572 206f 6620 6669 6c65 7320 7472 6561 er of files trea │ │ │ │ +000342e0: 7465 6420 6173 2062 6c6f 636b 6564 0a20 ted as blocked. │ │ │ │ +000342f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034300: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00034310: 2066 696c 6573 2028 6265 6361 7573 6520 files (because │ │ │ │ +00034320: 6f66 2062 6c6f 636b 6564 2072 756c 6573 of blocked rules │ │ │ │ +00034330: 290a 2020 2020 2473 656c 662d 3e7b 276e ). $self->{'n │ │ │ │ +00034340: 6f43 6f6d 7072 4368 6563 6b43 6f6d 7072 oComprCheckCompr │ │ │ │ +00034350: 277d 203d 2030 3b23 206e 756d 6265 7220 '} = 0;# number │ │ │ │ +00034360: 6f66 2066 696c 6573 2063 6f6d 7072 6573 of files compres │ │ │ │ +00034370: 7365 6420 6265 6361 7573 650a 2020 2020 sed because. │ │ │ │ +00034380: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034390: 2020 2020 2020 2020 2020 2020 2320 6f66 # of │ │ │ │ +000343a0: 2043 4f4d 5052 4553 5349 4f4e 5f43 4845 COMPRESSION_CHE │ │ │ │ +000343b0: 434b 2072 756c 650a 2020 2020 2473 656c CK rule. $sel │ │ │ │ +000343c0: 662d 3e7b 276e 6f43 6f6d 7072 4368 6563 f->{'noComprChec │ │ │ │ +000343d0: 6b43 7027 7d20 3d20 303b 2320 6e75 6d62 kCp'} = 0;# numb │ │ │ │ +000343e0: 6572 206f 6620 6669 6c65 7320 636f 7069 er of files copi │ │ │ │ +000343f0: 6564 2062 6563 6175 7365 0a20 2020 2020 ed because. │ │ │ │ +00034400: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034410: 2020 2020 2020 2020 2020 2023 206f 6620 # of │ │ │ │ +00034420: 434f 4d50 5245 5353 494f 4e5f 4348 4543 COMPRESSION_CHEC │ │ │ │ +00034430: 4b20 7275 6c65 0a0a 2020 2020 2320 6469 K rule.. # di │ │ │ │ +00034440: 736b 2073 7061 6365 2072 656c 6174 6564 sk space related │ │ │ │ +00034450: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +00034460: 6d4f 7269 6746 696c 6573 277d 203d 2030 mOrigFiles'} = 0 │ │ │ │ +00034470: 3b23 2073 697a 6520 6f66 2066 696c 6573 ;# size of files │ │ │ │ +00034480: 2069 6e20 736f 7572 6365 2064 6972 0a20 in source dir. │ │ │ │ +00034490: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4d $self->{'sumM │ │ │ │ +000344a0: 4435 5375 6d27 7d20 3d20 303b 2020 2023 D5Sum'} = 0; # │ │ │ │ +000344b0: 206e 756d 6265 7220 6f66 2062 7974 6573 number of bytes │ │ │ │ +000344c0: 2066 6f72 2077 6869 6368 2061 6e20 6d64 for which an md │ │ │ │ +000344d0: 3520 7375 6d0a 2020 2020 2020 2020 2020 5 sum. │ │ │ │ +000344e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000344f0: 2020 2020 2020 2320 7761 7320 6361 6c63 # was calc │ │ │ │ +00034500: 756c 6174 6564 0a20 2020 2024 7365 6c66 ulated. $self │ │ │ │ +00034510: 2d3e 7b27 7375 6d4c 696e 6b65 6449 6e74 ->{'sumLinkedInt │ │ │ │ +00034520: 6572 6e61 6c43 6f70 7927 7d20 3d20 303b ernalCopy'} = 0; │ │ │ │ +00034530: 2320 7369 7a65 206f 6620 6669 6c65 7320 # size of files │ │ │ │ +00034540: 7768 6963 6820 7765 7265 206c 696e 6b65 which were linke │ │ │ │ +00034550: 640a 2020 2020 2020 2020 2020 2020 2020 d. │ │ │ │ +00034560: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034570: 2020 2320 696e 7369 6465 2074 6865 206a # inside the j │ │ │ │ +00034580: 7573 7420 7275 6e6e 696e 6720 6261 636b ust running back │ │ │ │ +00034590: 7570 0a20 2020 2024 7365 6c66 2d3e 7b27 up. $self->{' │ │ │ │ +000345a0: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna │ │ │ │ +000345b0: 6c43 6f6d 7072 277d 203d 2030 3b23 2073 lCompr'} = 0;# s │ │ │ │ +000345c0: 697a 6520 6f66 2066 696c 6573 2077 6869 ize of files whi │ │ │ │ +000345d0: 6368 2077 6572 6520 6c69 6e6b 6564 0a20 ch were linked. │ │ │ │ +000345e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000345f0: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00034600: 2074 6f20 6f74 6865 7220 6261 636b 7570 to other backup │ │ │ │ +00034610: 730a 2020 2020 2473 656c 662d 3e7b 2773 s. $self->{'s │ │ │ │ +00034620: 756d 4c69 6e6b 6564 4f6c 6443 6f70 7927 umLinkedOldCopy' │ │ │ │ +00034630: 7d20 3d20 303b 2320 7369 7a65 206f 6620 } = 0;# size of │ │ │ │ +00034640: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were │ │ │ │ +00034650: 206c 696e 6b65 6420 746f 0a20 2020 2020 linked to. │ │ │ │ +00034660: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034670: 2020 2020 2020 2020 2020 2023 206f 7468 # oth │ │ │ │ +00034680: 6572 2028 6f6c 6429 2062 6163 6b75 7073 er (old) backups │ │ │ │ +00034690: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +000346a0: 6d4c 696e 6b65 644f 6c64 436f 6d70 7227 mLinkedOldCompr' │ │ │ │ +000346b0: 7d20 3d20 303b 2320 7369 7a65 206f 6620 } = 0;# size of │ │ │ │ +000346c0: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were │ │ │ │ +000346d0: 206c 696e 6b65 6420 746f 0a20 2020 2020 linked to. │ │ │ │ +000346e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000346f0: 2020 2020 2020 2020 2020 2023 206f 7468 # oth │ │ │ │ +00034700: 6572 2028 6f6c 6429 2062 6163 6b75 7073 er (old) backups │ │ │ │ +00034710: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +00034720: 6d55 6e63 6861 6e67 6564 436f 7079 277d mUnchangedCopy'} │ │ │ │ +00034730: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f │ │ │ │ +00034740: 696c 6573 2c20 7768 6572 6520 7369 7a65 iles, where size │ │ │ │ +00034750: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ │ +00034760: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034770: 2020 2020 2023 2074 696d 6573 7461 6d70 # timestamp │ │ │ │ +00034780: 2077 6572 6520 6e6f 7420 6368 616e 6765 were not change │ │ │ │ +00034790: 6420 7369 6e63 6520 7468 650a 2020 2020 d since the. │ │ │ │ +000347a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000347b0: 2020 2020 2020 2020 2020 2020 2320 6c61 # la │ │ │ │ +000347c0: 7374 2062 6163 6b75 702c 2074 6865 7920 st backup, they │ │ │ │ +000347d0: 7765 7265 2064 6972 6563 746c 7920 6c69 were directly li │ │ │ │ +000347e0: 6e6b 6564 0a20 2020 2020 2020 2020 2020 nked. │ │ │ │ +000347f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034800: 2020 2020 2023 2061 6e64 2074 6865 206d # and the m │ │ │ │ +00034810: 6435 2073 756d 2077 6173 206e 6f74 2063 d5 sum was not c │ │ │ │ +00034820: 616c 6375 6c61 7465 6420 6167 6169 6e0a alculated again. │ │ │ │ +00034830: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum │ │ │ │ +00034840: 556e 6368 616e 6765 6443 6f6d 7072 277d UnchangedCompr'} │ │ │ │ +00034850: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f │ │ │ │ +00034860: 696c 6573 2c20 7768 6572 6520 7369 7a65 iles, where size │ │ │ │ +00034870: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ │ +00034880: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034890: 2020 2020 2023 2074 696d 6573 7461 6d70 # timestamp │ │ │ │ +000348a0: 2077 6572 6520 6e6f 7420 6368 616e 6765 were not change │ │ │ │ +000348b0: 6420 7369 6e63 6520 7468 650a 2020 2020 d since the. │ │ │ │ +000348c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000348d0: 2020 2020 2020 2020 2020 2020 2320 6c61 # la │ │ │ │ +000348e0: 7374 2062 6163 6b75 702c 2074 6865 7920 st backup, they │ │ │ │ +000348f0: 7765 7265 2064 6972 6563 746c 7920 6c69 were directly li │ │ │ │ +00034900: 6e6b 6564 0a20 2020 2020 2020 2020 2020 nked. │ │ │ │ +00034910: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034920: 2020 2020 2023 2061 6e64 2074 6865 206d # and the m │ │ │ │ +00034930: 6435 2073 756d 2077 6173 206e 6f74 2063 d5 sum was not c │ │ │ │ +00034940: 616c 6375 6c61 7465 6420 6167 6169 6e0a alculated again. │ │ │ │ +00034950: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum │ │ │ │ +00034960: 4e65 7743 6f70 7927 7d20 3d20 303b 2020 NewCopy'} = 0; │ │ │ │ +00034970: 2320 7375 6d20 6f66 206e 6577 6c79 2063 # sum of newly c │ │ │ │ +00034980: 6f70 7969 6564 2066 696c 6573 2069 6e74 opyied files int │ │ │ │ +00034990: 6f20 7468 650a 2020 2020 2020 2020 2020 o the. │ │ │ │ +000349a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000349b0: 2020 2020 2020 2320 6261 636b 7570 0a20 # backup. │ │ │ │ +000349c0: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4e $self->{'sumN │ │ │ │ +000349d0: 6577 436f 6d70 7227 7d20 3d20 303b 2023 ewCompr'} = 0; # │ │ │ │ +000349e0: 2073 756d 206f 6620 6e65 776c 7920 636f sum of newly co │ │ │ │ +000349f0: 6d70 7265 7373 6564 2066 696c 6573 2069 mpressed files i │ │ │ │ +00034a00: 6e74 6f0a 2020 2020 2020 2020 2020 2020 nto. │ │ │ │ +00034a10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034a20: 2020 2020 2320 7468 6520 6261 636b 7570 # the backup │ │ │ │ +00034a30: 2028 636f 6d70 7265 7373 6564 2073 697a (compressed siz │ │ │ │ +00034a40: 6529 0a20 2020 2024 7365 6c66 2d3e 7b27 e). $self->{' │ │ │ │ +00034a50: 7375 6d4e 6577 436f 6d70 724f 7269 6753 sumNewComprOrigS │ │ │ │ +00034a60: 697a 6527 7d20 3d20 303b 2320 7375 6d20 ize'} = 0;# sum │ │ │ │ +00034a70: 6f66 206e 6577 7920 636f 6d70 7265 7373 of newy compress │ │ │ │ +00034a80: 6564 2066 696c 6573 0a20 2020 2020 2020 ed files. │ │ │ │ +00034a90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00034aa0: 2020 2020 2020 2020 2023 2069 6e74 6f20 # into │ │ │ │ +00034ab0: 7468 6520 6261 636b 7570 2028 756e 636f the backup (unco │ │ │ │ +00034ac0: 6d70 7265 7373 6564 2073 697a 6529 0a0a mpressed size).. │ │ │ │ +00034ad0: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5 │ │ │ │ +00034ae0: 4368 6563 6b53 756d 277d 203d 2030 3b0a CheckSum'} = 0;. │ │ │ │ +00034af0: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum │ │ │ │ +00034b00: 4442 4d46 696c 6573 277d 203d 2030 3b0a DBMFiles'} = 0;. │ │ │ │ +00034b10: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self │ │ │ │ +00034b20: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...## │ │ │ │ +00034b30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034b50: 2323 2323 2323 0a73 7562 2069 6e63 725f ######.sub incr_ │ │ │ │ +00034b60: 6e6f 4465 6c65 7465 644f 6c64 4469 7273 noDeletedOldDirs │ │ │ │ +00034b70: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ │ +00034b80: 3d20 7368 6966 743b 0a0a 2020 2020 2473 = shift;.. $s │ │ │ │ +00034b90: 656c 662d 3e73 7461 7469 7374 6963 4465 elf->statisticDe │ │ │ │ +00034ba0: 6c65 7465 4f6c 6442 6163 6b75 7044 6972 leteOldBackupDir │ │ │ │ +00034bb0: 733a 3a69 6e63 725f 6e6f 4465 6c65 7465 s::incr_noDelete │ │ │ │ +00034bc0: 644f 6c64 4469 7273 2829 3b0a 7d0a 0a0a dOldDirs();.}... │ │ │ │ +00034bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034be0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034bf0: 2323 2323 2323 2323 0a73 7562 2069 6e63 ########.sub inc │ │ │ │ +00034c00: 725f 6e6f 4469 7273 0a7b 0a20 2020 206d r_noDirs.{. m │ │ │ │ +00034c10: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00034c20: 0a20 2020 206d 7920 2824 7569 642c 2024 . my ($uid, $ │ │ │ │ +00034c30: 6769 6429 203d 2040 5f3b 0a0a 2020 2020 gid) = @_;.. │ │ │ │ +00034c40: 2b2b 2473 656c 662d 3e7b 276e 6f44 6972 ++$self->{'noDir │ │ │ │ +00034c50: 7327 7d3b 0a0a 2020 2020 6966 2028 2473 s'};.. if ($s │ │ │ │ +00034c60: 656c 662d 3e7b 2775 7365 7247 726f 7570 elf->{'userGroup │ │ │ │ +00034c70: 466c 6167 277d 290a 2020 2020 7b0a 092b Flag'}). {..+ │ │ │ │ +00034c80: 2b24 7365 6c66 2d3e 7b27 7569 6453 7461 +$self->{'uidSta │ │ │ │ +00034c90: 7449 6e6f 6465 7327 7d2d 3e7b 2475 6964 tInodes'}->{$uid │ │ │ │ +00034ca0: 7d3b 0a09 2b2b 2473 656c 662d 3e7b 2767 };..++$self->{'g │ │ │ │ +00034cb0: 6964 5374 6174 496e 6f64 6573 277d 2d3e idStatInodes'}-> │ │ │ │ +00034cc0: 7b24 6769 647d 3b0a 2020 2020 7d0a 7d0a {$gid};. }.}. │ │ │ │ +00034cd0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00034ce0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034cf0: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a │ │ │ │ +00034d00: 6464 5f6e 6f4d 4435 6564 4669 6c65 730a dd_noMD5edFiles. │ │ │ │ +00034d10: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +00034d20: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se │ │ │ │ +00034d30: 6c66 2d3e 7b27 6e6f 4d44 3565 6446 696c lf->{'noMD5edFil │ │ │ │ +00034d40: 6573 277d 202b 3d20 7368 6966 743b 0a7d es'} += shift;.} │ │ │ │ +00034d50: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +00034d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034d70: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +00034d80: 696e 6372 5f6e 6f53 796d 4c69 6e6b 730a incr_noSymLinks. │ │ │ │ +00034d90: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +00034da0: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my ( │ │ │ │ +00034db0: 2475 6964 2c20 2467 6964 2920 3d20 405f $uid, $gid) = @_ │ │ │ │ +00034dc0: 3b0a 0a20 2020 202b 2b24 7365 6c66 2d3e ;.. ++$self-> │ │ │ │ +00034dd0: 7b27 6e6f 5379 6d4c 696e 6b73 277d 3b0a {'noSymLinks'};. │ │ │ │ +00034de0: 2020 2020 2473 656c 662d 3e61 6464 5375 $self->addSu │ │ │ │ +00034df0: 6d4f 7269 6746 696c 6573 2830 2c20 2475 mOrigFiles(0, $u │ │ │ │ +00034e00: 6964 2c20 2467 6964 293b 0a7d 0a0a 2323 id, $gid);.}..## │ │ │ │ +00034e10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034e20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034e30: 2323 2323 2323 0a73 7562 2069 6e63 725f ######.sub incr_ │ │ │ │ +00034e40: 6e6f 4c61 7465 4c69 6e6b 730a 7b0a 2020 noLateLinks.{. │ │ │ │ +00034e50: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi │ │ │ │ +00034e60: 6674 3b0a 2020 2020 6d79 2028 2475 6964 ft;. my ($uid │ │ │ │ +00034e70: 2c20 2467 6964 2c20 246e 2920 3d20 405f , $gid, $n) = @_ │ │ │ │ +00034e80: 3b0a 2020 2020 246e 203d 2031 2075 6e6c ;. $n = 1 unl │ │ │ │ +00034e90: 6573 7320 6465 6669 6e65 6420 246e 3b0a ess defined $n;. │ │ │ │ +00034ea0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no │ │ │ │ +00034eb0: 4c61 7465 4c69 6e6b 7327 7d20 2b3d 2024 LateLinks'} += $ │ │ │ │ +00034ec0: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...######### │ │ │ │ +00034ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034ee0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +00034ef0: 7375 6220 696e 6372 5f6e 6f4e 616d 6564 sub incr_noNamed │ │ │ │ +00034f00: 5069 7065 730a 7b0a 2020 2020 6d79 2024 Pipes.{. my $ │ │ │ │ +00034f10: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ │ +00034f20: 2020 6d79 2028 2475 6964 2c20 2467 6964 my ($uid, $gid │ │ │ │ +00034f30: 2920 3d20 405f 3b0a 0a20 2020 202b 2b24 ) = @_;.. ++$ │ │ │ │ +00034f40: 7365 6c66 2d3e 7b27 6e6f 4e61 6d65 6450 self->{'noNamedP │ │ │ │ +00034f50: 6970 6573 277d 3b0a 2020 2020 2473 656c ipes'};. $sel │ │ │ │ +00034f60: 662d 3e61 6464 5375 6d4f 7269 6746 696c f->addSumOrigFil │ │ │ │ +00034f70: 6573 2830 2c20 2475 6964 2c20 2467 6964 es(0, $uid, $gid │ │ │ │ +00034f80: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...######### │ │ │ │ +00034f90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00034fa0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +00034fb0: 7375 6220 696e 6372 5f6e 6f53 6f63 6b65 sub incr_noSocke │ │ │ │ +00034fc0: 7473 0a7b 0a20 2020 206d 7920 2473 656c ts.{. my $sel │ │ │ │ +00034fd0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m │ │ │ │ +00034fe0: 7920 2824 7569 642c 2024 6769 6429 203d y ($uid, $gid) = │ │ │ │ +00034ff0: 2040 5f3b 0a0a 2020 2020 2b2b 2473 656c @_;.. ++$sel │ │ │ │ +00035000: 662d 3e7b 276e 6f53 6f63 6b65 7473 277d f->{'noSockets'} │ │ │ │ +00035010: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add │ │ │ │ +00035020: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, │ │ │ │ +00035030: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}.. │ │ │ │ +00035040: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +00035050: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035060: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in │ │ │ │ +00035070: 6372 5f6e 6f43 6861 7244 6576 0a7b 0a20 cr_noCharDev.{. │ │ │ │ +00035080: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ │ +00035090: 6966 743b 0a20 2020 206d 7920 2824 7569 ift;. my ($ui │ │ │ │ +000350a0: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;.. │ │ │ │ +000350b0: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n │ │ │ │ +000350c0: 6f43 6861 7244 6576 277d 3b0a 2020 2020 oCharDev'};. │ │ │ │ +000350d0: 2473 656c 662d 3e61 6464 5375 6d4f 7269 $self->addSumOri │ │ │ │ +000350e0: 6746 696c 6573 2830 2c20 2475 6964 2c20 gFiles(0, $uid, │ │ │ │ +000350f0: 2467 6964 293b 0a7d 0a0a 0a23 2323 2323 $gid);.}...##### │ │ │ │ +00035100: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035110: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035120: 2323 230a 7375 6220 696e 6372 5f6e 6f42 ###.sub incr_noB │ │ │ │ +00035130: 6c6f 636b 4465 760a 7b0a 2020 2020 6d79 lockDev.{. my │ │ │ │ +00035140: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +00035150: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g │ │ │ │ +00035160: 6964 2920 3d20 405f 3b0a 0a20 2020 202b id) = @_;.. + │ │ │ │ +00035170: 2b24 7365 6c66 2d3e 7b27 6e6f 426c 6f63 +$self->{'noBloc │ │ │ │ +00035180: 6b44 6576 277d 3b0a 2020 2020 2473 656c kDev'};. $sel │ │ │ │ +00035190: 662d 3e61 6464 5375 6d4f 7269 6746 696c f->addSumOrigFil │ │ │ │ +000351a0: 6573 2830 2c20 2475 6964 2c20 2467 6964 es(0, $uid, $gid │ │ │ │ +000351b0: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...######### │ │ │ │ +000351c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000351d0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +000351e0: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks │ │ │ │ +000351f0: 4d44 350a 7b0a 2020 2020 6d79 2024 7365 MD5.{. my $se │ │ │ │ +00035200: 6c66 203d 2073 6869 6674 3b0a 2020 2020 lf = shift;. │ │ │ │ +00035210: 2b2b 2473 656c 662d 3e7b 276e 6f46 6f72 ++$self->{'noFor │ │ │ │ +00035220: 6b73 4d44 3527 7d3b 0a7d 0a0a 0a23 2323 ksMD5'};.}...### │ │ │ │ +00035230: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035240: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035250: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n │ │ │ │ +00035260: 6f46 6f72 6b73 4350 0a7b 0a20 2020 206d oForksCP.{. m │ │ │ │ +00035270: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00035280: 0a20 2020 206d 7920 246e 203d 2073 6869 . my $n = shi │ │ │ │ +00035290: 6674 3b0a 2020 2020 246e 203d 2031 2075 ft;. $n = 1 u │ │ │ │ +000352a0: 6e6c 6573 7320 6465 6669 6e65 6420 246e nless defined $n │ │ │ │ +000352b0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ │ +000352c0: 6e6f 466f 726b 7343 5027 7d20 2b3d 2024 noForksCP'} += $ │ │ │ │ +000352d0: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...######### │ │ │ │ +000352e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000352f0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +00035300: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks │ │ │ │ +00035310: 436f 6d70 7265 7373 0a7b 0a20 2020 206d Compress.{. m │ │ │ │ +00035320: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00035330: 0a20 2020 206d 7920 246e 203d 2073 6869 . my $n = shi │ │ │ │ +00035340: 6674 3b0a 2020 2020 246e 203d 2031 2075 ft;. $n = 1 u │ │ │ │ +00035350: 6e6c 6573 7320 6465 6669 6e65 6420 246e nless defined $n │ │ │ │ +00035360: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ │ +00035370: 6e6f 466f 726b 7343 6f6d 7072 6573 7327 noForksCompress' │ │ │ │ +00035380: 7d20 2b3d 2024 6e3b 0a7d 0a0a 0a23 2323 } += $n;.}...### │ │ │ │ +00035390: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000353a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000353b0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n │ │ │ │ +000353c0: 6f45 7863 6c75 6465 5275 6c65 0a7b 0a20 oExcludeRule.{. │ │ │ │ +000353d0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ │ +000353e0: 6966 743b 0a20 2020 202b 2b24 7365 6c66 ift;. ++$self │ │ │ │ +000353f0: 2d3e 7b27 6e6f 4578 636c 7564 6552 756c ->{'noExcludeRul │ │ │ │ +00035400: 6527 7d3b 0a7d 0a0a 0a23 2323 2323 2323 e'};.}...####### │ │ │ │ +00035410: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035420: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035430: 230a 7375 6220 696e 6372 5f6e 6f49 6e63 #.sub incr_noInc │ │ │ │ +00035440: 6c75 6465 5275 6c65 0a7b 0a20 2020 206d ludeRule.{. m │ │ │ │ +00035450: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00035460: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{' │ │ │ │ +00035470: 6e6f 496e 636c 7564 6552 756c 6527 7d3b noIncludeRule'}; │ │ │ │ +00035480: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ │ +00035490: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000354a0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ │ +000354b0: 6220 696e 6372 5f6e 6f42 6c6f 636b 6564 b incr_noBlocked │ │ │ │ +000354c0: 4669 6c65 730a 7b0a 2020 2020 6d79 2024 Files.{. my $ │ │ │ │ +000354d0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ │ +000354e0: 2020 2b2b 2473 656c 662d 3e7b 276e 6f42 ++$self->{'noB │ │ │ │ +000354f0: 6c6f 636b 6564 4669 6c65 7327 7d3b 0a7d lockedFiles'};.} │ │ │ │ +00035500: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ │ +00035510: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035520: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ │ +00035530: 696e 6372 5f6e 6f43 6f6d 7072 4368 6563 incr_noComprChec │ │ │ │ +00035540: 6b43 6f6d 7072 0a7b 0a20 2020 206d 7920 kCompr.{. my │ │ │ │ +00035550: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. │ │ │ │ +00035560: 2020 202b 2b24 7365 6c66 2d3e 7b27 6e6f ++$self->{'no │ │ │ │ +00035570: 436f 6d70 7243 6865 636b 436f 6d70 7227 ComprCheckCompr' │ │ │ │ +00035580: 7d3b 0a7d 0a0a 0a23 2323 2323 2323 2323 };.}...######### │ │ │ │ +00035590: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000355a0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +000355b0: 7375 6220 696e 6372 5f6e 6f43 6f6d 7072 sub incr_noCompr │ │ │ │ +000355c0: 4368 6563 6b43 700a 7b0a 2020 2020 6d79 CheckCp.{. my │ │ │ │ +000355d0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +000355e0: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n │ │ │ │ +000355f0: 6f43 6f6d 7072 4368 6563 6b43 7027 7d3b oComprCheckCp'}; │ │ │ │ +00035600: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ │ +00035610: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035620: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ │ +00035630: 6220 6164 6446 7265 6564 5370 6163 650a b addFreedSpace. │ │ │ │ +00035640: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +00035650: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se │ │ │ │ +00035660: 6c66 2d3e 7374 6174 6973 7469 6344 656c lf->statisticDel │ │ │ │ +00035670: 6574 654f 6c64 4261 636b 7570 4469 7273 eteOldBackupDirs │ │ │ │ +00035680: 3a3a 6164 6446 7265 6564 5370 6163 6528 ::addFreedSpace( │ │ │ │ +00035690: 405f 293b 0a7d 0a0a 0a23 2323 2323 2323 @_);.}...####### │ │ │ │ +000356a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000356b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000356c0: 230a 7375 6220 6164 6453 756d 4f72 6967 #.sub addSumOrig │ │ │ │ +000356d0: 4669 6c65 7320 2020 2020 2020 2320 696e Files # in │ │ │ │ +000356e0: 2062 7974 650a 7b0a 2020 2020 6d79 2024 byte.{. my $ │ │ │ │ +000356f0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ │ +00035700: 2020 6d79 2028 2473 697a 652c 2024 7569 my ($size, $ui │ │ │ │ +00035710: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;.. │ │ │ │ +00035720: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum │ │ │ │ +00035730: 4f72 6967 4669 6c65 7327 7d20 2b3d 2024 OrigFiles'} += $ │ │ │ │ +00035740: 7369 7a65 3b0a 0a20 2020 202b 2b24 7365 size;.. ++$se │ │ │ │ +00035750: 6c66 2d3e 7b27 6e6f 4669 6c65 7327 7d3b lf->{'noFiles'}; │ │ │ │ +00035760: 0a20 2020 2024 7365 6c66 2d3e 7072 696e . $self->prin │ │ │ │ +00035770: 7450 726f 6772 6573 7352 6570 6f72 7428 tProgressReport( │ │ │ │ +00035780: 290a 0969 6620 2824 7365 6c66 2d3e 7b27 )..if ($self->{' │ │ │ │ +00035790: 7072 6f67 7265 7373 5265 706f 7274 277d progressReport'} │ │ │ │ +000357a0: 2061 6e64 0a09 2020 2020 2473 656c 662d and.. $self- │ │ │ │ +000357b0: 3e7b 276e 6f46 696c 6573 277d 2025 2024 >{'noFiles'} % $ │ │ │ │ +000357c0: 7365 6c66 2d3e 7b27 7072 6f67 7265 7373 self->{'progress │ │ │ │ +000357d0: 5265 706f 7274 277d 203d 3d20 3029 3b0a Report'} == 0);. │ │ │ │ +000357e0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self-> │ │ │ │ +000357f0: 7b27 7573 6572 4772 6f75 7046 6c61 6727 {'userGroupFlag' │ │ │ │ +00035800: 7d29 0a20 2020 207b 0a0a 092b 2b24 7365 }). {...++$se │ │ │ │ +00035810: 6c66 2d3e 7b27 7569 6453 7461 7449 6e6f lf->{'uidStatIno │ │ │ │ +00035820: 6465 7327 7d2d 3e7b 2475 6964 7d3b 0a09 des'}->{$uid};.. │ │ │ │ +00035830: 2b2b 2473 656c 662d 3e7b 2767 6964 5374 ++$self->{'gidSt │ │ │ │ +00035840: 6174 496e 6f64 6573 277d 2d3e 7b24 6769 atInodes'}->{$gi │ │ │ │ +00035850: 647d 3b0a 0924 7365 6c66 2d3e 7b27 7569 d};..$self->{'ui │ │ │ │ +00035860: 6453 7461 7453 697a 6527 7d2d 3e7b 2475 dStatSize'}->{$u │ │ │ │ +00035870: 6964 7d20 2b3d 2024 7369 7a65 3b0a 0924 id} += $size;..$ │ │ │ │ +00035880: 7365 6c66 2d3e 7b27 6769 6453 7461 7453 self->{'gidStatS │ │ │ │ +00035890: 697a 6527 7d2d 3e7b 2467 6964 7d20 2b3d ize'}->{$gid} += │ │ │ │ +000358a0: 2024 7369 7a65 3b0a 2020 2020 7d0a 7d0a $size;. }.}. │ │ │ │ +000358b0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +000358c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000358d0: 2323 2323 2323 2323 2323 0a73 7562 2070 ##########.sub p │ │ │ │ +000358e0: 7269 6e74 5072 6f67 7265 7373 5265 706f rintProgressRepo │ │ │ │ +000358f0: 7274 0a7b 0a20 2020 206d 7920 2473 656c rt.{. my $sel │ │ │ │ +00035900: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. │ │ │ │ +00035910: 6966 2028 2473 656c 662d 3e7b 2770 726f if ($self->{'pro │ │ │ │ +00035920: 6772 6573 7352 6570 6f72 7427 7d20 3e20 gressReport'} > │ │ │ │ +00035930: 3029 0a20 2020 207b 0a09 6d79 2024 7320 0). {..my $s │ │ │ │ +00035940: 3d20 2473 656c 662d 3e7b 2773 756d 4e65 = $self->{'sumNe │ │ │ │ +00035950: 7743 6f6d 7072 277d 202b 2024 7365 6c66 wCompr'} + $self │ │ │ │ +00035960: 2d3e 7b27 7375 6d4e 6577 436f 7079 277d ->{'sumNewCopy'} │ │ │ │ +00035970: 3b0a 0924 7365 6c66 2d3e 7b27 7072 4c6f ;..$self->{'prLo │ │ │ │ +00035980: 6727 7d2d 3e70 7269 6e74 2827 2d6b 696e g'}->print('-kin │ │ │ │ +00035990: 6427 203d 3e20 2750 272c 0a09 0909 0927 d' => 'P',.....' │ │ │ │ +000359a0: 2d73 7472 2720 3d3e 0a09 0909 095b 2473 -str' =>.....[$s │ │ │ │ +000359b0: 656c 662d 3e7b 276e 6f46 696c 6573 277d elf->{'noFiles'} │ │ │ │ +000359c0: 202e 2027 2066 696c 6573 2070 726f 6365 . ' files proce │ │ │ │ +000359d0: 7373 6564 2028 2720 2e0a 0909 0909 2028 ssed (' ...... ( │ │ │ │ +000359e0: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable │ │ │ │ +000359f0: 2824 7365 6c66 2d3e 7b27 7375 6d4f 7269 ($self->{'sumOri │ │ │ │ +00035a00: 6746 696c 6573 277d 2929 5b30 5d20 2e0a gFiles'}))[0] .. │ │ │ │ +00035a10: 0909 0909 2027 2c20 2720 2e0a 0909 0909 .... ', ' ...... │ │ │ │ +00035a20: 2028 263a 3a68 756d 616e 5265 6164 6162 (&::humanReadab │ │ │ │ +00035a30: 6c65 2824 7329 295b 305d 202e 2027 2920 le($s))[0] . ') │ │ │ │ +00035a40: 2827 202e 0a09 0909 0920 2473 656c 662d (' ...... $self- │ │ │ │ +00035a50: 3e7b 2773 756d 4f72 6967 4669 6c65 7327 >{'sumOrigFiles' │ │ │ │ +00035a60: 7d20 2e20 272c 2027 202e 2024 7320 2e20 } . ', ' . $s . │ │ │ │ +00035a70: 2729 275d 293b 0a20 2020 207d 0a7d 0a0a ')']);. }.}.. │ │ │ │ +00035a80: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +00035a90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035aa0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad │ │ │ │ +00035ab0: 6453 756d 4d44 3553 756d 2020 2020 2020 dSumMD5Sum │ │ │ │ +00035ac0: 2023 2069 6e20 6279 7465 0a7b 0a20 2020 # in byte.{. │ │ │ │ +00035ad0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ │ +00035ae0: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{ │ │ │ │ +00035af0: 2773 756d 4d44 3553 756d 277d 202b 3d20 'sumMD5Sum'} += │ │ │ │ +00035b00: 7368 6966 743b 0a7d 0a0a 0a23 2323 2323 shift;.}...##### │ │ │ │ +00035b10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035b20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035b30: 2323 230a 7375 6220 6164 6453 756d 4c69 ###.sub addSumLi │ │ │ │ +00035b40: 6e6b 6564 496e 7465 726e 616c 436f 7079 nkedInternalCopy │ │ │ │ +00035b50: 2020 2023 2062 7974 650a 7b0a 2020 2020 # byte.{. │ │ │ │ +00035b60: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ │ +00035b70: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ │ +00035b80: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna │ │ │ │ +00035b90: 6c43 6f70 7927 7d20 2b3d 2073 6869 6674 lCopy'} += shift │ │ │ │ +00035ba0: 3b0a 2020 2020 2b2b 2473 656c 662d 3e7b ;. ++$self->{ │ │ │ │ +00035bb0: 276e 6f49 6e74 6572 6e61 6c4c 696e 6b65 'noInternalLinke │ │ │ │ +00035bc0: 6446 696c 6573 277d 3b0a 7d0a 0a0a 2323 dFiles'};.}...## │ │ │ │ +00035bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035be0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035bf0: 2323 2323 2323 0a73 7562 2061 6464 5375 ######.sub addSu │ │ │ │ +00035c00: 6d4c 696e 6b65 6449 6e74 6572 6e61 6c43 mLinkedInternalC │ │ │ │ +00035c10: 6f6d 7072 2020 2023 2062 7974 650a 7b0a ompr # byte.{. │ │ │ │ +00035c20: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ │ +00035c30: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self │ │ │ │ +00035c40: 2d3e 7b27 7375 6d4c 696e 6b65 6449 6e74 ->{'sumLinkedInt │ │ │ │ +00035c50: 6572 6e61 6c43 6f6d 7072 277d 202b 3d20 ernalCompr'} += │ │ │ │ +00035c60: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se │ │ │ │ +00035c70: 6c66 2d3e 7b27 6e6f 496e 7465 726e 616c lf->{'noInternal │ │ │ │ +00035c80: 4c69 6e6b 6564 4669 6c65 7327 7d3b 0a7d LinkedFiles'};.} │ │ │ │ +00035c90: 0a0a 0a0a 2323 2323 2323 2323 2323 2323 ....############ │ │ │ │ +00035ca0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035cb0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ │ +00035cc0: 2061 6464 5375 6d4c 696e 6b65 644f 6c64 addSumLinkedOld │ │ │ │ +00035cd0: 436f 7079 2020 2023 2062 7974 650a 7b0a Copy # byte.{. │ │ │ │ +00035ce0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ │ +00035cf0: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self │ │ │ │ +00035d00: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld │ │ │ │ +00035d10: 436f 7079 277d 202b 3d20 7368 6966 743b Copy'} += shift; │ │ │ │ +00035d20: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{' │ │ │ │ +00035d30: 6e6f 4f6c 644c 696e 6b65 6446 696c 6573 noOldLinkedFiles │ │ │ │ +00035d40: 277d 3b0a 7d0a 0a0a 2323 2323 2323 2323 '};.}...######## │ │ │ │ +00035d50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035d70: 0a73 7562 2061 6464 5375 6d4c 696e 6b65 .sub addSumLinke │ │ │ │ +00035d80: 644f 6c64 436f 6d70 7220 2020 2320 6279 dOldCompr # by │ │ │ │ +00035d90: 7465 0a7b 0a20 2020 206d 7920 2473 656c te.{. my $sel │ │ │ │ +00035da0: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. │ │ │ │ +00035db0: 2473 656c 662d 3e7b 2773 756d 4c69 6e6b $self->{'sumLink │ │ │ │ +00035dc0: 6564 4f6c 6443 6f6d 7072 277d 202b 3d20 edOldCompr'} += │ │ │ │ +00035dd0: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se │ │ │ │ +00035de0: 6c66 2d3e 7b27 6e6f 4f6c 644c 696e 6b65 lf->{'noOldLinke │ │ │ │ +00035df0: 6446 696c 6573 277d 3b0a 7d0a 0a0a 2323 dFiles'};.}...## │ │ │ │ +00035e00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035e10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035e20: 2323 2323 2323 0a73 7562 2061 6464 5375 ######.sub addSu │ │ │ │ +00035e30: 6d55 6e63 6861 6e67 6564 436f 7079 2020 mUnchangedCopy │ │ │ │ +00035e40: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my │ │ │ │ +00035e50: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +00035e60: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +00035e70: 6d55 6e63 6861 6e67 6564 436f 7079 277d mUnchangedCopy'} │ │ │ │ +00035e80: 202b 3d20 7368 6966 743b 0a20 2020 202b += shift;. + │ │ │ │ +00035e90: 2b24 7365 6c66 2d3e 7b27 756e 6368 616e +$self->{'unchan │ │ │ │ +00035ea0: 6765 6446 696c 6573 277d 3b0a 7d0a 0a0a gedFiles'};.}... │ │ │ │ +00035eb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035ed0: 2323 2323 2323 2323 0a73 7562 2061 6464 ########.sub add │ │ │ │ +00035ee0: 5375 6d55 6e63 6861 6e67 6564 436f 6d70 SumUnchangedComp │ │ │ │ +00035ef0: 7220 2020 2320 6279 7465 0a7b 0a20 2020 r # byte.{. │ │ │ │ +00035f00: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ │ +00035f10: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{ │ │ │ │ +00035f20: 2773 756d 556e 6368 616e 6765 6443 6f6d 'sumUnchangedCom │ │ │ │ +00035f30: 7072 277d 202b 3d20 7368 6966 743b 0a20 pr'} += shift;. │ │ │ │ +00035f40: 2020 202b 2b24 7365 6c66 2d3e 7b27 756e ++$self->{'un │ │ │ │ +00035f50: 6368 616e 6765 6446 696c 6573 277d 3b0a changedFiles'};. │ │ │ │ +00035f60: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +00035f70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00035f80: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ │ +00035f90: 2061 6464 5375 6d4e 6577 436f 7079 2020 addSumNewCopy │ │ │ │ +00035fa0: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my │ │ │ │ +00035fb0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +00035fc0: 2020 2020 6d79 2024 6120 3d20 7368 6966 my $a = shif │ │ │ │ +00035fd0: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{ │ │ │ │ +00035fe0: 2773 756d 4e65 7743 6f70 7927 7d20 2b3d 'sumNewCopy'} += │ │ │ │ +00035ff0: 2024 6120 3f20 2461 203a 2030 3b0a 2020 $a ? $a : 0;. │ │ │ │ +00036000: 2020 2b2b 2473 656c 662d 3e7b 276e 6f43 ++$self->{'noC │ │ │ │ +00036010: 6f70 6965 6446 696c 6573 277d 3b0a 7d0a opiedFiles'};.}. │ │ │ │ +00036020: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00036030: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00036040: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a │ │ │ │ +00036050: 6464 5375 6d4e 6577 436f 6d70 7220 2020 ddSumNewCompr │ │ │ │ +00036060: 2320 6279 7465 0a7b 0a20 2020 206d 7920 # byte.{. my │ │ │ │ +00036070: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. │ │ │ │ +00036080: 2020 206d 7920 2461 3120 3d20 7368 6966 my $a1 = shif │ │ │ │ +00036090: 743b 0a20 2020 206d 7920 2461 3220 3d20 t;. my $a2 = │ │ │ │ +000360a0: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel │ │ │ │ +000360b0: 662d 3e7b 2773 756d 4e65 7743 6f6d 7072 f->{'sumNewCompr │ │ │ │ +000360c0: 277d 202b 3d20 2461 3120 3f20 2461 3120 '} += $a1 ? $a1 │ │ │ │ +000360d0: 3a20 303b 0a20 2020 2024 7365 6c66 2d3e : 0;. $self-> │ │ │ │ +000360e0: 7b27 7375 6d4e 6577 436f 6d70 724f 7269 {'sumNewComprOri │ │ │ │ +000360f0: 6753 697a 6527 7d20 2b3d 2024 6132 203f gSize'} += $a2 ? │ │ │ │ +00036100: 2024 6132 203a 2030 3b0a 2020 2020 2b2b $a2 : 0;. ++ │ │ │ │ +00036110: 2473 656c 662d 3e7b 276e 6f43 6f6d 7072 $self->{'noCompr │ │ │ │ +00036120: 6573 7365 6446 696c 6573 277d 3b0a 7d0a essedFiles'};.}. │ │ │ │ +00036130: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ │ +00036140: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00036150: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a │ │ │ │ +00036160: 6464 5375 6d44 424d 4669 6c65 7320 2020 ddSumDBMFiles │ │ │ │ +00036170: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my │ │ │ │ +00036180: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ │ +00036190: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +000361a0: 6d44 424d 4669 6c65 7327 7d20 2b3d 2073 mDBMFiles'} += s │ │ │ │ +000361b0: 6869 6674 3b0a 7d0a 0a0a 2323 2323 2323 hift;.}...###### │ │ │ │ +000361c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000361d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000361e0: 2323 0a73 7562 2073 6574 5369 7a65 4d44 ##.sub setSizeMD │ │ │ │ +000361f0: 3543 6865 636b 5375 6d0a 7b0a 2020 2020 5CheckSum.{. │ │ │ │ +00036200: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ │ +00036210: 3b0a 2020 2020 6d79 2024 6d64 3543 6865 ;. my $md5Che │ │ │ │ +00036220: 636b 5375 6d20 3d20 7368 6966 743b 0a20 ckSum = shift;. │ │ │ │ +00036230: 2020 206d 7920 2463 6f6d 7072 6573 734d my $compressM │ │ │ │ +00036240: 4435 4669 6c65 203d 2073 6869 6674 3b0a D5File = shift;. │ │ │ │ +00036250: 0a20 2020 2069 6620 2824 636f 6d70 7265 . if ($compre │ │ │ │ +00036260: 7373 4d44 3546 696c 6520 6571 2027 7965 ssMD5File eq 'ye │ │ │ │ +00036270: 7327 290a 2020 2020 7b0a 0924 7365 6c66 s'). {..$self │ │ │ │ +00036280: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum' │ │ │ │ +00036290: 7d20 3d20 2873 7461 7428 2224 6d64 3543 } = (stat("$md5C │ │ │ │ +000362a0: 6865 636b 5375 6d2e 627a 3222 2929 5b37 heckSum.bz2"))[7 │ │ │ │ +000362b0: 5d3b 0a20 2020 207d 0a20 2020 2065 6c73 ];. }. els │ │ │ │ +000362c0: 650a 2020 2020 7b0a 0924 7365 6c66 2d3e e. {..$self-> │ │ │ │ +000362d0: 7b27 6d64 3543 6865 636b 5375 6d27 7d20 {'md5CheckSum'} │ │ │ │ +000362e0: 3d20 2873 7461 7428 246d 6435 4368 6563 = (stat($md5Chec │ │ │ │ +000362f0: 6b53 756d 2929 5b37 5d3b 0a20 2020 207d kSum))[7];. } │ │ │ │ +00036300: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ │ +00036310: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00036320: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ │ +00036330: 6220 7365 7455 7365 6453 697a 6551 7565 b setUsedSizeQue │ │ │ │ +00036340: 7565 730a 7b0a 2020 2020 6d79 2024 7365 ues.{. my $se │ │ │ │ +00036350: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. │ │ │ │ +00036360: 2024 7365 6c66 2d3e 7b27 6d61 7855 7365 $self->{'maxUse │ │ │ │ +00036370: 6443 6f70 7951 7565 7565 277d 203d 2073 dCopyQueue'} = s │ │ │ │ +00036380: 6869 6674 3b0a 2020 2020 2473 656c 662d hift;. $self- │ │ │ │ +00036390: 3e7b 276d 6178 5573 6564 436f 6d70 7251 >{'maxUsedComprQ │ │ │ │ +000363a0: 7565 7565 277d 203d 2073 6869 6674 3b0a ueue'} = shift;. │ │ │ │ +000363b0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +000363c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000363d0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ │ +000363e0: 2070 7269 6e74 0a7b 0a20 2020 206d 7920 print.{. my │ │ │ │ +000363f0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ │ +00036400: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params) │ │ │ │ +00036410: 203d 2028 272d 6578 5479 7065 7327 203d = ('-exTypes' = │ │ │ │ +00036420: 3e20 5b5d 0a09 0920 2020 2029 3b0a 0a20 > []... );.. │ │ │ │ +00036430: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec │ │ │ │ +00036440: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\%params │ │ │ │ +00036450: 2c20 5c40 5f2c 2027 5374 6174 6973 7469 , \@_, 'Statisti │ │ │ │ +00036460: 633a 3a70 7269 6e74 272c 205b 272d 6578 c::print', ['-ex │ │ │ │ +00036470: 5479 7065 7327 5d29 3b0a 0a20 2020 206d Types']);.. m │ │ │ │ +00036480: 7920 2465 7854 7970 6573 203d 2024 7061 y $exTypes = $pa │ │ │ │ +00036490: 7261 6d73 7b27 2d65 7854 7970 6573 277d rams{'-exTypes'} │ │ │ │ +000364a0: 3b0a 2020 2020 6d79 2028 4065 7854 7970 ;. my (@exTyp │ │ │ │ +000364b0: 6573 2c20 2465 7429 3b0a 2020 2020 6d79 es, $et);. my │ │ │ │ +000364c0: 2025 6578 5479 7065 734c 696e 6573 203d %exTypesLines = │ │ │ │ +000364d0: 2028 2753 2720 3d3e 2027 736f 636b 6574 ('S' => 'socket │ │ │ │ +000364e0: 272c 0a09 0909 2762 2720 3d3e 2027 626c ',....'b' => 'bl │ │ │ │ +000364f0: 6f63 6b20 7370 6563 6961 6c27 2c0a 0909 ock special',... │ │ │ │ +00036500: 0927 6327 203d 3e20 2763 6861 7220 7370 .'c' => 'char sp │ │ │ │ +00036510: 6563 6961 6c27 2c0a 0909 0927 6627 203d ecial',....'f' = │ │ │ │ +00036520: 3e20 2770 6c61 696e 2066 696c 6527 2c0a > 'plain file',. │ │ │ │ +00036530: 0909 0927 7027 203d 3e20 276e 616d 6564 ...'p' => 'named │ │ │ │ +00036540: 2070 6970 6527 2c0a 0909 0927 6c27 203d pipe',....'l' = │ │ │ │ +00036550: 3e20 2773 796d 626f 6c69 6320 6c69 6e6b > 'symbolic link │ │ │ │ +00036560: 2729 3b0a 2020 2020 666f 7265 6163 6820 ');. foreach │ │ │ │ +00036570: 2465 7420 286b 6579 7320 2524 6578 5479 $et (keys %$exTy │ │ │ │ +00036580: 7065 7329 0a20 2020 207b 0a09 7075 7368 pes). {..push │ │ │ │ +00036590: 2040 6578 5479 7065 732c 2073 7072 696e @exTypes, sprin │ │ │ │ +000365a0: 7466 2822 2533 3373 222c 2022 6578 636c tf("%33s", "excl │ │ │ │ +000365b0: 7564 6564 2022 202e 0a09 0909 2020 2020 uded " ..... │ │ │ │ +000365c0: 2020 2024 6578 5479 7065 734c 696e 6573 $exTypesLines │ │ │ │ +000365d0: 7b24 6574 7d20 2e0a 0909 0920 2020 2020 {$et} ..... │ │ │ │ +000365e0: 2020 2273 2028 2465 7429 203d 2022 2920 "s ($et) = ") │ │ │ │ +000365f0: 2e20 2424 6578 5479 7065 737b 2465 747d . $$exTypes{$et} │ │ │ │ +00036600: 3b0a 2020 2020 7d0a 0a20 2020 206d 7920 ;. }.. my │ │ │ │ +00036610: 2840 6c29 3b0a 2020 2020 6d79 2028 2475 (@l);. my ($u │ │ │ │ +00036620: 7365 722c 2473 7973 7465 6d2c 2463 7573 ser,$system,$cus │ │ │ │ +00036630: 6572 2c24 6373 7973 7465 6d29 203d 2074 er,$csystem) = t │ │ │ │ +00036640: 696d 6573 3b0a 2020 2020 6d79 2028 2474 imes;. my ($t │ │ │ │ +00036650: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = "------- │ │ │ │ +00036660: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+---- │ │ │ │ +00036670: 2d2d 2d2d 2d2d 223b 0a20 2020 2070 7573 ------";. pus │ │ │ │ +00036680: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf("% │ │ │ │ +00036690: 2d37 737c 2531 3073 7c25 3130 7322 2c20 -7s|%10s|%10s", │ │ │ │ +000366a0: 2220 5b73 6563 5d22 2c20 2275 7365 7222 " [sec]", "user" │ │ │ │ +000366b0: 2c20 2273 7973 7465 6d22 293b 0a20 2020 , "system");. │ │ │ │ +000366c0: 2070 7573 6820 406c 2c20 2224 7472 656e push @l, "$tren │ │ │ │ +000366d0: 6e22 3b0a 2020 2020 7075 7368 2040 6c2c n";. push @l, │ │ │ │ +000366e0: 2073 7072 696e 7466 2822 252d 3773 7c25 sprintf("%-7s|% │ │ │ │ +000366f0: 3130 2e32 667c 2531 302e 3266 222c 2022 10.2f|%10.2f", " │ │ │ │ +00036700: 7072 6f63 6573 7322 2c20 2475 7365 722c process", $user, │ │ │ │ +00036710: 2024 7379 7374 656d 293b 0a20 2020 2070 $system);. p │ │ │ │ +00036720: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf( │ │ │ │ +00036730: 2225 2d37 737c 2531 302e 3266 7c25 3130 "%-7s|%10.2f|%10 │ │ │ │ +00036740: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f", "childs", │ │ │ │ +00036750: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem │ │ │ │ +00036760: 293b 0a20 2020 2070 7573 6820 406c 2c20 );. push @l, │ │ │ │ +00036770: 2224 7472 656e 6e22 3b0a 2020 2020 6d79 "$trenn";. my │ │ │ │ +00036780: 2028 2475 2c20 2473 2920 3d20 2824 6375 ($u, $s) = ($cu │ │ │ │ +00036790: 7365 7220 2b20 2475 7365 722c 2024 6373 ser + $user, $cs │ │ │ │ +000367a0: 7973 7465 6d20 2b20 2473 7973 7465 6d29 ystem + $system) │ │ │ │ +000367b0: 3b0a 2020 2020 2475 203d 202e 3120 6966 ;. $u = .1 if │ │ │ │ +000367c0: 2024 7520 2b20 2473 203d 3d20 303b 2020 $u + $s == 0; │ │ │ │ +000367d0: 2020 2020 2023 2061 766f 6964 2064 6976 # avoid div │ │ │ │ +000367e0: 6973 696f 6e20 6279 207a 6572 6f0a 2020 ision by zero. │ │ │ │ +000367f0: 2020 6d79 2024 7573 5f73 7472 203d 2026 my $us_str = & │ │ │ │ +00036800: 6461 7465 546f 6f6c 733a 3a76 616c 546f dateTools::valTo │ │ │ │ +00036810: 5374 7228 272d 7365 6327 203d 3e20 696e Str('-sec' => in │ │ │ │ +00036820: 7428 2475 202b 2024 7320 2b20 2e35 2929 t($u + $s + .5)) │ │ │ │ +00036830: 3b0a 2020 2020 7075 7368 2040 6c2c 2073 ;. push @l, s │ │ │ │ +00036840: 7072 696e 7466 2822 252d 3773 7c25 3130 printf("%-7s|%10 │ │ │ │ +00036850: 2e32 667c 2531 302e 3266 203d 3e20 252e .2f|%10.2f => %. │ │ │ │ +00036860: 3266 2028 2475 735f 7374 7229 222c 2022 2f ($us_str)", " │ │ │ │ +00036870: 7375 6d22 2c0a 0909 2020 2020 2024 752c sum",... $u, │ │ │ │ +00036880: 2024 732c 2024 7520 2b20 2473 293b 0a0a $s, $u + $s);.. │ │ │ │ +00036890: 2020 2020 6d79 2024 7374 6172 7444 6174 my $startDat │ │ │ │ +000368a0: 6520 3d20 2473 656c 662d 3e7b 2773 7461 e = $self->{'sta │ │ │ │ +000368b0: 7274 4461 7465 277d 3b0a 2020 2020 6d79 rtDate'};. my │ │ │ │ +000368c0: 2028 4073 7461 7274 4461 7465 2920 3d20 (@startDate) = │ │ │ │ +000368d0: 2829 3b0a 2020 2020 6966 2028 2473 7461 ();. if ($sta │ │ │ │ +000368e0: 7274 4461 7465 290a 2020 2020 7b0a 0970 rtDate). {..p │ │ │ │ +000368f0: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, │ │ │ │ +00036900: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec │ │ │ │ +00036910: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration │ │ │ │ +00036920: 3d20 2720 2e0a 0920 2020 2024 7374 6172 = ' ... $star │ │ │ │ +00036930: 7444 6174 652d 3e64 656c 7461 496e 5374 tDate->deltaInSt │ │ │ │ +00036940: 7228 272d 7365 636f 6e64 4461 7465 2720 r('-secondDate' │ │ │ │ +00036950: 3d3e 2024 7365 6c66 2d3e 7b27 616b 7444 => $self->{'aktD │ │ │ │ +00036960: 6174 6527 7d29 3b0a 2020 2020 7d0a 0a20 ate'});. }.. │ │ │ │ +00036970: 2020 206d 7920 2464 456e 6420 3d20 6461 my $dEnd = da │ │ │ │ +00036980: 7465 546f 6f6c 732d 3e6e 6577 2829 3b0a teTools->new();. │ │ │ │ +00036990: 2020 2020 6d79 2024 6261 636b 7570 4475 my $backupDu │ │ │ │ +000369a0: 7261 7469 6f6e 203d 0a09 2473 656c 662d ration =..$self- │ │ │ │ +000369b0: 3e7b 2761 6b74 4461 7465 277d 2d3e 6465 >{'aktDate'}->de │ │ │ │ +000369c0: 6c74 6149 6e53 6563 7328 272d 7365 636f ltaInSecs('-seco │ │ │ │ +000369d0: 6e64 4461 7465 2720 3d3e 2024 6445 6e64 ndDate' => $dEnd │ │ │ │ +000369e0: 293b 0a20 2020 2024 6261 636b 7570 4475 );. $backupDu │ │ │ │ +000369f0: 7261 7469 6f6e 203d 2031 2069 6620 2824 ration = 1 if ($ │ │ │ │ +00036a00: 6261 636b 7570 4475 7261 7469 6f6e 203d backupDuration = │ │ │ │ +00036a10: 3d20 3029 3b20 2020 2320 4d69 6e69 6d61 = 0); # Minima │ │ │ │ +00036a20: 6c65 7220 5765 7274 0a0a 2020 2020 6d79 ler Wert.. my │ │ │ │ +00036a30: 2024 7375 6d54 6172 6765 7441 6c6c 203d $sumTargetAll = │ │ │ │ +00036a40: 0a09 2473 656c 662d 3e7b 2773 756d 4c69 ..$self->{'sumLi │ │ │ │ +00036a50: 6e6b 6564 496e 7465 726e 616c 436f 7079 nkedInternalCopy │ │ │ │ +00036a60: 277d 202b 0a09 2473 656c 662d 3e7b 2773 '} +..$self->{'s │ │ │ │ +00036a70: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal │ │ │ │ +00036a80: 436f 6d70 7227 7d20 2b0a 0924 7365 6c66 Compr'} +..$self │ │ │ │ +00036a90: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld │ │ │ │ +00036aa0: 436f 7079 277d 202b 0a09 2473 656c 662d Copy'} +..$self- │ │ │ │ +00036ab0: 3e7b 2773 756d 4c69 6e6b 6564 4f6c 6443 >{'sumLinkedOldC │ │ │ │ +00036ac0: 6f6d 7072 277d 202b 0a09 2473 656c 662d ompr'} +..$self- │ │ │ │ +00036ad0: 3e7b 2773 756d 4e65 7743 6f70 7927 7d20 >{'sumNewCopy'} │ │ │ │ +00036ae0: 2b0a 0924 7365 6c66 2d3e 7b27 7375 6d4e +..$self->{'sumN │ │ │ │ +00036af0: 6577 436f 6d70 7227 7d3b 0a0a 2020 2020 ewCompr'};.. │ │ │ │ +00036b00: 6d79 2024 7375 6d54 6172 6765 744e 6577 my $sumTargetNew │ │ │ │ +00036b10: 203d 2024 7365 6c66 2d3e 7b27 7375 6d4e = $self->{'sumN │ │ │ │ +00036b20: 6577 436f 7079 277d 202b 2024 7365 6c66 ewCopy'} + $self │ │ │ │ +00036b30: 2d3e 7b27 7375 6d4e 6577 436f 6d70 7227 ->{'sumNewCompr' │ │ │ │ +00036b40: 7d3b 0a0a 2020 2020 6d79 2024 6e65 7755 };.. my $newU │ │ │ │ +00036b50: 7365 6453 7061 6365 203d 2024 7375 6d54 sedSpace = $sumT │ │ │ │ +00036b60: 6172 6765 744e 6577 202b 2024 7365 6c66 argetNew + $self │ │ │ │ +00036b70: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum' │ │ │ │ +00036b80: 7d20 2d0a 0924 7365 6c66 2d3e 7b27 6279 } -..$self->{'by │ │ │ │ +00036b90: 7465 7327 7d3b 0a20 2020 206d 7920 246e tes'};. my $n │ │ │ │ +00036ba0: 6577 5573 6564 5370 6163 6548 756d 616e ewUsedSpaceHuman │ │ │ │ +00036bb0: 3b0a 2020 2020 6966 2028 246e 6577 5573 ;. if ($newUs │ │ │ │ +00036bc0: 6564 5370 6163 6520 3e3d 2030 290a 2020 edSpace >= 0). │ │ │ │ +00036bd0: 2020 7b0a 0928 246e 6577 5573 6564 5370 {..($newUsedSp │ │ │ │ +00036be0: 6163 6548 756d 616e 2920 3d20 263a 3a68 aceHuman) = &::h │ │ │ │ +00036bf0: 756d 616e 5265 6164 6162 6c65 2824 6e65 umanReadable($ne │ │ │ │ +00036c00: 7755 7365 6453 7061 6365 293b 0a20 2020 wUsedSpace);. │ │ │ │ +00036c10: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ │ +00036c20: 7b0a 0928 246e 6577 5573 6564 5370 6163 {..($newUsedSpac │ │ │ │ +00036c30: 6548 756d 616e 2920 3d20 263a 3a68 756d eHuman) = &::hum │ │ │ │ +00036c40: 616e 5265 6164 6162 6c65 282d 2024 6e65 anReadable(- $ne │ │ │ │ +00036c50: 7755 7365 6453 7061 6365 293b 0a09 246e wUsedSpace);..$n │ │ │ │ +00036c60: 6577 5573 6564 5370 6163 6548 756d 616e ewUsedSpaceHuman │ │ │ │ +00036c70: 203d 2022 2d24 6e65 7755 7365 6453 7061 = "-$newUsedSpa │ │ │ │ +00036c80: 6365 4875 6d61 6e22 3b0a 2020 2020 7d0a ceHuman";. }. │ │ │ │ +00036c90: 0a20 2020 206d 7920 2840 7567 5f6c 6f67 . my (@ug_log │ │ │ │ +00036ca0: 2920 3d20 2829 3b0a 2020 2020 6d79 2028 ) = ();. my ( │ │ │ │ +00036cb0: 4075 675f 6669 6c65 2920 3d20 2829 3b0a @ug_file) = ();. │ │ │ │ +00036cc0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{ │ │ │ │ +00036cd0: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'} │ │ │ │ +00036ce0: 290a 2020 2020 7b0a 096d 7920 246b 3b0a ). {..my $k;. │ │ │ │ +00036cf0: 096d 7920 2475 6964 5374 6174 496e 6f64 .my $uidStatInod │ │ │ │ +00036d00: 6573 203d 2024 7365 6c66 2d3e 7b27 7569 es = $self->{'ui │ │ │ │ +00036d10: 6453 7461 7449 6e6f 6465 7327 7d3b 0a09 dStatInodes'};.. │ │ │ │ +00036d20: 666f 7265 6163 6820 246b 2028 736f 7274 foreach $k (sort │ │ │ │ +00036d30: 207b 2461 203c 3d3e 2024 627d 206b 6579 {$a <=> $b} key │ │ │ │ +00036d40: 7320 2524 7569 6453 7461 7449 6e6f 6465 s %$uidStatInode │ │ │ │ +00036d50: 7329 0a09 7b0a 0920 2020 206d 7920 246e s)..{.. my $n │ │ │ │ +00036d60: 616d 6520 3d20 6765 7470 7775 6964 2824 ame = getpwuid($ │ │ │ │ +00036d70: 6b29 3b0a 0920 2020 2024 6e61 6d65 203d k);.. $name = │ │ │ │ +00036d80: 2027 2d27 2075 6e6c 6573 7320 246e 616d '-' unless $nam │ │ │ │ +00036d90: 653b 0a09 2020 2020 7075 7368 2040 7567 e;.. push @ug │ │ │ │ +00036da0: 5f6c 6f67 2c20 7370 7269 6e74 6628 2255 _log, sprintf("U │ │ │ │ +00036db0: 5345 5220 494e 4f44 4520 2025 3664 202d SER INODE %6d - │ │ │ │ +00036dc0: 2025 3973 203d 2025 6c75 222c 0a09 0909 %9s = %lu",.... │ │ │ │ +00036dd0: 0920 2020 246b 2c20 246e 616d 652c 2024 . $k, $name, $ │ │ │ │ +00036de0: 2475 6964 5374 6174 496e 6f64 6573 7b24 $uidStatInodes{$ │ │ │ │ +00036df0: 6b7d 293b 0a09 2020 2020 7075 7368 2040 k});.. push @ │ │ │ │ +00036e00: 7567 5f66 696c 652c 2022 5553 4552 5f49 ug_file, "USER_I │ │ │ │ +00036e10: 4e4f 4445 2024 6b20 246e 616d 6520 2220 NODE $k $name " │ │ │ │ +00036e20: 2e20 2424 7569 6453 7461 7449 6e6f 6465 . $$uidStatInode │ │ │ │ +00036e30: 737b 246b 7d3b 0a09 7d0a 096d 7920 2475 s{$k};..}..my $u │ │ │ │ +00036e40: 6964 5374 6174 5369 7a65 203d 2024 7365 idStatSize = $se │ │ │ │ +00036e50: 6c66 2d3e 7b27 7569 6453 7461 7453 697a lf->{'uidStatSiz │ │ │ │ +00036e60: 6527 7d3b 0a09 666f 7265 6163 6820 246b e'};..foreach $k │ │ │ │ +00036e70: 2028 736f 7274 207b 2461 203c 3d3e 2024 (sort {$a <=> $ │ │ │ │ +00036e80: 627d 206b 6579 7320 2524 7569 6453 7461 b} keys %$uidSta │ │ │ │ +00036e90: 7453 697a 6529 0a09 7b0a 0920 2020 206d tSize)..{.. m │ │ │ │ +00036ea0: 7920 246e 616d 6520 3d20 6765 7470 7775 y $name = getpwu │ │ │ │ +00036eb0: 6964 2824 6b29 3b0a 0920 2020 2024 6e61 id($k);.. $na │ │ │ │ +00036ec0: 6d65 203d 2027 2d27 2075 6e6c 6573 7320 me = '-' unless │ │ │ │ +00036ed0: 246e 616d 653b 0a09 2020 2020 7075 7368 $name;.. push │ │ │ │ +00036ee0: 2040 7567 5f6c 6f67 2c20 7370 7269 6e74 @ug_log, sprint │ │ │ │ +00036ef0: 6628 2255 5345 5220 5349 5a45 2020 2025 f("USER SIZE % │ │ │ │ +00036f00: 3664 202d 2025 3973 203d 2025 7320 2825 6d - %9s = %s (% │ │ │ │ +00036f10: 6c75 2922 2c0a 0909 0909 2020 246b 2c20 lu)",..... $k, │ │ │ │ +00036f20: 246e 616d 652c 0a09 0909 0920 2028 263a $name,..... (&: │ │ │ │ +00036f30: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($ │ │ │ │ +00036f40: 2475 6964 5374 6174 5369 7a65 7b24 6b7d $uidStatSize{$k} │ │ │ │ +00036f50: 2929 5b30 5d2c 0a09 0909 0920 2024 2475 ))[0],..... $$u │ │ │ │ +00036f60: 6964 5374 6174 5369 7a65 7b24 6b7d 293b idStatSize{$k}); │ │ │ │ +00036f70: 0a09 2020 2020 7075 7368 2040 7567 5f66 .. push @ug_f │ │ │ │ +00036f80: 696c 652c 2022 5553 4552 5f53 495a 4520 ile, "USER_SIZE │ │ │ │ +00036f90: 246b 2024 6e61 6d65 2022 202e 2024 2475 $k $name " . $$u │ │ │ │ +00036fa0: 6964 5374 6174 5369 7a65 7b24 6b7d 3b0a idStatSize{$k};. │ │ │ │ +00036fb0: 097d 0a0a 096d 7920 2467 6964 5374 6174 .}...my $gidStat │ │ │ │ +00036fc0: 496e 6f64 6573 203d 2024 7365 6c66 2d3e Inodes = $self-> │ │ │ │ +00036fd0: 7b27 6769 6453 7461 7449 6e6f 6465 7327 {'gidStatInodes' │ │ │ │ +00036fe0: 7d3b 0a09 666f 7265 6163 6820 246b 2028 };..foreach $k ( │ │ │ │ +00036ff0: 736f 7274 207b 2461 203c 3d3e 2024 627d sort {$a <=> $b} │ │ │ │ +00037000: 206b 6579 7320 2524 6769 6453 7461 7449 keys %$gidStatI │ │ │ │ +00037010: 6e6f 6465 7329 0a09 7b0a 0920 2020 206d nodes)..{.. m │ │ │ │ +00037020: 7920 2467 726f 7570 203d 2067 6574 6772 y $group = getgr │ │ │ │ +00037030: 6769 6428 246b 293b 0a09 2020 2020 2467 gid($k);.. $g │ │ │ │ +00037040: 726f 7570 203d 2027 2d27 2075 6e6c 6573 roup = '-' unles │ │ │ │ +00037050: 7320 2467 726f 7570 3b0a 0920 2020 2070 s $group;.. p │ │ │ │ +00037060: 7573 6820 4075 675f 6c6f 672c 2073 7072 ush @ug_log, spr │ │ │ │ +00037070: 696e 7466 2822 4752 4f55 5020 494e 4f44 intf("GROUP INOD │ │ │ │ +00037080: 4520 2536 6420 2d20 2539 7320 3d20 256c E %6d - %9s = %l │ │ │ │ +00037090: 7522 2c0a 0909 0909 2020 2024 6b2c 2024 u",..... $k, $ │ │ │ │ +000370a0: 6772 6f75 702c 2024 2467 6964 5374 6174 group, $$gidStat │ │ │ │ +000370b0: 496e 6f64 6573 7b24 6b7d 293b 0a09 2020 Inodes{$k});.. │ │ │ │ +000370c0: 2020 7075 7368 2040 7567 5f66 696c 652c push @ug_file, │ │ │ │ +000370d0: 2022 4752 4f55 505f 494e 4f44 4520 246b "GROUP_INODE $k │ │ │ │ +000370e0: 2024 6772 6f75 7020 2220 2e20 2424 6769 $group " . $$gi │ │ │ │ +000370f0: 6453 7461 7449 6e6f 6465 737b 246b 7d3b dStatInodes{$k}; │ │ │ │ +00037100: 0a09 7d0a 096d 7920 2467 6964 5374 6174 ..}..my $gidStat │ │ │ │ +00037110: 5369 7a65 203d 2024 7365 6c66 2d3e 7b27 Size = $self->{' │ │ │ │ +00037120: 6769 6453 7461 7453 697a 6527 7d3b 0a09 gidStatSize'};.. │ │ │ │ +00037130: 666f 7265 6163 6820 246b 2028 736f 7274 foreach $k (sort │ │ │ │ +00037140: 207b 2461 203c 3d3e 2024 627d 206b 6579 {$a <=> $b} key │ │ │ │ +00037150: 7320 2524 6769 6453 7461 7453 697a 6529 s %$gidStatSize) │ │ │ │ +00037160: 0a09 7b0a 0920 2020 206d 7920 2467 726f ..{.. my $gro │ │ │ │ +00037170: 7570 203d 2067 6574 6772 6769 6428 246b up = getgrgid($k │ │ │ │ +00037180: 293b 0a09 2020 2020 2467 726f 7570 203d );.. $group = │ │ │ │ +00037190: 2027 2d27 2075 6e6c 6573 7320 2467 726f '-' unless $gro │ │ │ │ +000371a0: 7570 3b0a 0920 2020 2070 7573 6820 4075 up;.. push @u │ │ │ │ +000371b0: 675f 6c6f 672c 2073 7072 696e 7466 2822 g_log, sprintf(" │ │ │ │ +000371c0: 4752 4f55 5020 5349 5a45 2020 2536 6420 GROUP SIZE %6d │ │ │ │ +000371d0: 2d20 2539 7320 3d20 2573 2028 256c 7529 - %9s = %s (%lu) │ │ │ │ +000371e0: 222c 0a09 0909 0920 2024 6b2c 2024 6772 ",..... $k, $gr │ │ │ │ +000371f0: 6f75 702c 0a09 0909 0920 2028 263a 3a68 oup,..... (&::h │ │ │ │ +00037200: 756d 616e 5265 6164 6162 6c65 2824 2467 umanReadable($$g │ │ │ │ +00037210: 6964 5374 6174 5369 7a65 7b24 6b7d 2929 idStatSize{$k})) │ │ │ │ +00037220: 5b30 5d2c 0a09 0909 0920 2024 2467 6964 [0],..... $$gid │ │ │ │ +00037230: 5374 6174 5369 7a65 7b24 6b7d 293b 0a09 StatSize{$k});.. │ │ │ │ +00037240: 2020 2020 7075 7368 2040 7567 5f66 696c push @ug_fil │ │ │ │ +00037250: 652c 2022 4752 4f55 505f 5349 5a45 2024 e, "GROUP_SIZE $ │ │ │ │ +00037260: 6b20 2467 726f 7570 2022 202e 2024 2467 k $group " . $$g │ │ │ │ +00037270: 6964 5374 6174 5369 7a65 7b24 6b7d 3b0a idStatSize{$k};. │ │ │ │ +00037280: 097d 0a0a 2309 7072 696e 7420 2223 2323 .}..#.print "### │ │ │ │ +00037290: 2323 2323 2323 2323 2323 2323 2323 5c6e ##############\n │ │ │ │ +000372a0: 223b 0a23 0970 7269 6e74 206a 6f69 6e28 ";.#.print join( │ │ │ │ +000372b0: 225c 6e22 2c20 4075 675f 6c6f 6729 2c20 "\n", @ug_log), │ │ │ │ +000372c0: 225c 6e22 3b0a 2309 7072 696e 7420 2223 "\n";.#.print "# │ │ │ │ +000372d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000372e0: 5c6e 223b 0a23 0970 7269 6e74 206a 6f69 \n";.#.print joi │ │ │ │ +000372f0: 6e28 225c 6e22 2c20 4075 675f 6669 6c65 n("\n", @ug_file │ │ │ │ +00037300: 292c 2022 5c6e 223b 0a0a 096d 7920 2466 ), "\n";...my $f │ │ │ │ +00037310: 696c 6520 3d20 2473 656c 662d 3e7b 2775 ile = $self->{'u │ │ │ │ +00037320: 7365 7247 726f 7570 5374 6174 4669 6c65 serGroupStatFile │ │ │ │ +00037330: 277d 3b0a 0969 6620 2824 6669 6c65 290a '};..if ($file). │ │ │ │ +00037340: 097b 0a09 2020 2020 6c6f 6361 6c20 2a46 .{.. local *F │ │ │ │ +00037350: 494c 453b 0a09 2020 2020 263a 3a63 6865 ILE;.. &::che │ │ │ │ +00037360: 636b 4465 6c53 796d 4c69 6e6b 2824 6669 ckDelSymLink($fi │ │ │ │ +00037370: 6c65 2c20 2470 724c 6f67 2c20 3078 3031 le, $prLog, 0x01 │ │ │ │ +00037380: 293b 0a09 2020 2020 756e 6c65 7373 2028 );.. unless ( │ │ │ │ +00037390: 6f70 656e 2846 494c 452c 2022 3e20 2466 open(FILE, "> $f │ │ │ │ +000373a0: 696c 6522 2929 0a09 2020 2020 7b0a 0909 ile")).. {... │ │ │ │ +000373b0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000373c0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +000373d0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +000373e0: 205b 2263 616e 6e6f 7420 7772 6974 6520 ["cannot write │ │ │ │ +000373f0: 7374 6174 6973 7469 6320 746f 203c 2466 statistic to <$f │ │ │ │ +00037400: 696c 653e 225d 293b 0a09 0967 6f74 6f20 ile>"]);...goto │ │ │ │ +00037410: 656e 6455 6964 4769 643b 0a09 2020 2020 endUidGid;.. │ │ │ │ +00037420: 7d0a 0920 2020 2070 7269 6e74 2046 494c }.. print FIL │ │ │ │ +00037430: 4520 6a6f 696e 2822 5c6e 222c 2040 7567 E join("\n", @ug │ │ │ │ +00037440: 5f66 696c 6529 2c20 225c 6e22 3b0a 0920 _file), "\n";.. │ │ │ │ +00037450: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);. │ │ │ │ +00037460: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00037470: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00037480: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ │ +00037490: 3e20 5b22 7072 696e 7465 6420 7573 6572 > ["printed user │ │ │ │ +000374a0: 4772 6f75 7053 7461 7446 696c 6520 3c24 GroupStatFile <$ │ │ │ │ +000374b0: 6669 6c65 3e22 5d29 3b0a 097d 0a20 2020 file>"]);..}. │ │ │ │ +000374c0: 2020 2065 6e64 5569 6447 6964 3a3b 0a20 endUidGid:;. │ │ │ │ +000374d0: 2020 207d 0a0a 2020 2020 6d79 2028 4063 }.. my (@c │ │ │ │ +000374e0: 6f6d 7072 4368 6563 6b29 203d 2028 293b omprCheck) = (); │ │ │ │ +000374f0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self-> │ │ │ │ +00037500: 7b27 6e6f 436f 6d70 7243 6865 636b 436f {'noComprCheckCo │ │ │ │ +00037510: 6d70 7227 7d20 2b20 2473 656c 662d 3e7b mpr'} + $self->{ │ │ │ │ +00037520: 276e 6f43 6f6d 7072 4368 6563 6b43 7027 'noComprCheckCp' │ │ │ │ +00037530: 7d20 3e20 3029 0a20 2020 207b 0a09 7075 } > 0). {..pu │ │ │ │ +00037540: 7368 2040 636f 6d70 7243 6865 636b 2c0a sh @comprCheck,. │ │ │ │ +00037550: 0927 636f 6d70 7220 6475 6520 746f 2043 .'compr due to C │ │ │ │ +00037560: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK │ │ │ │ +00037570: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{' │ │ │ │ +00037580: 6e6f 436f 6d70 7243 6865 636b 436f 6d70 noComprCheckComp │ │ │ │ +00037590: 7227 7d2c 0a09 2720 2020 6370 2064 7565 r'},..' cp due │ │ │ │ +000375a0: 2074 6f20 434f 4d50 5245 5353 494f 4e5f to COMPRESSION_ │ │ │ │ +000375b0: 4348 4543 4b20 3d20 2720 2e20 2473 656c CHECK = ' . $sel │ │ │ │ +000375c0: 662d 3e7b 276e 6f43 6f6d 7072 4368 6563 f->{'noComprChec │ │ │ │ +000375d0: 6b43 7027 7d3b 0a20 2020 207d 0a0a 2020 kCp'};. }.. │ │ │ │ +000375e0: 2020 2473 656c 662d 3e7b 2770 724c 6f67 $self->{'prLog │ │ │ │ +000375f0: 277d 2d3e 0a09 7072 696e 7428 272d 6b69 '}->..print('-ki │ │ │ │ +00037600: 6e64 2720 3d3e 2027 5327 2c0a 0920 2020 nd' => 'S',.. │ │ │ │ +00037610: 2020 2027 2d73 7472 2720 3d3e 0a09 2020 '-str' =>.. │ │ │ │ +00037620: 2020 2020 5b40 6c2c 0a09 2020 2020 2020 [@l,.. │ │ │ │ +00037630: 2040 7567 5f6c 6f67 2c0a 0920 2020 2020 @ug_log,.. │ │ │ │ +00037640: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00037650: 2020 2020 2020 6469 7265 6374 6f72 6965 directorie │ │ │ │ +00037660: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{ │ │ │ │ +00037670: 276e 6f44 6972 7327 7d2c 0a09 2020 2020 'noDirs'},.. │ │ │ │ +00037680: 2020 2027 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00037690: 2020 2020 2020 2020 2020 2020 2066 696c fil │ │ │ │ +000376a0: 6573 203d 2027 202e 2024 7365 6c66 2d3e es = ' . $self-> │ │ │ │ +000376b0: 7b27 6e6f 4669 6c65 7327 7d2c 0a09 2020 {'noFiles'},.. │ │ │ │ +000376c0: 2020 2020 2027 2020 2020 2020 2020 2020 ' │ │ │ │ +000376d0: 2020 2020 2020 7379 6d62 6f6c 6963 206c symbolic l │ │ │ │ +000376e0: 696e 6b73 203d 2027 202e 2024 7365 6c66 inks = ' . $self │ │ │ │ +000376f0: 2d3e 7b27 6e6f 5379 6d4c 696e 6b73 277d ->{'noSymLinks'} │ │ │ │ +00037700: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ │ +00037710: 2020 2020 2020 2020 2020 2020 2020 206c l │ │ │ │ +00037720: 6174 6520 6c69 6e6b 7320 3d20 2720 2e20 ate links = ' . │ │ │ │ +00037730: 2473 656c 662d 3e7b 276e 6f4c 6174 654c $self->{'noLateL │ │ │ │ +00037740: 696e 6b73 277d 2c0a 0920 2020 2020 2020 inks'},.. │ │ │ │ +00037750: 2720 2020 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00037760: 2020 2020 6e61 6d65 6420 7069 7065 7320 named pipes │ │ │ │ +00037770: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ │ +00037780: 6f4e 616d 6564 5069 7065 7327 7d2c 0a09 oNamedPipes'},.. │ │ │ │ +00037790: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ │ +000377a0: 2020 2020 2020 2020 2020 2020 2020 2073 s │ │ │ │ +000377b0: 6f63 6b65 7473 203d 2027 202e 2024 7365 ockets = ' . $se │ │ │ │ +000377c0: 6c66 2d3e 7b27 6e6f 536f 636b 6574 7327 lf->{'noSockets' │ │ │ │ +000377d0: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' │ │ │ │ +000377e0: 2020 2020 2020 2020 2020 2020 2062 6c6f blo │ │ │ │ +000377f0: 636b 2064 6576 6963 6573 203d 2027 202e ck devices = ' . │ │ │ │ +00037800: 2024 7365 6c66 2d3e 7b27 6e6f 426c 6f63 $self->{'noBloc │ │ │ │ +00037810: 6b44 6576 277d 2c0a 0920 2020 2020 2020 kDev'},.. │ │ │ │ +00037820: 2720 2020 2020 2020 2020 2020 2020 6368 ' ch │ │ │ │ +00037830: 6172 6163 7465 7220 6465 7669 6365 7320 aracter devices │ │ │ │ +00037840: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ │ +00037850: 6f43 6861 7244 6576 277d 2c0a 0920 2020 oCharDev'},.. │ │ │ │ +00037860: 2020 2020 2720 2020 2020 6e65 7720 696e ' new in │ │ │ │ +00037870: 7465 726e 616c 206c 696e 6b65 6420 6669 ternal linked fi │ │ │ │ +00037880: 6c65 7320 3d20 2720 2e0a 0920 2020 2020 les = ' ... │ │ │ │ +00037890: 2020 2020 2020 2473 656c 662d 3e7b 276e $self->{'n │ │ │ │ +000378a0: 6f49 6e74 6572 6e61 6c4c 696e 6b65 6446 oInternalLinkedF │ │ │ │ +000378b0: 696c 6573 277d 2c0a 0920 2020 2020 2020 iles'},.. │ │ │ │ +000378c0: 2720 2020 2020 2020 2020 2020 2020 206f ' o │ │ │ │ +000378d0: 6c64 206c 696e 6b65 6420 6669 6c65 7320 ld linked files │ │ │ │ +000378e0: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ │ +000378f0: 6f4f 6c64 4c69 6e6b 6564 4669 6c65 7327 oOldLinkedFiles' │ │ │ │ +00037900: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' │ │ │ │ +00037910: 2020 2020 2020 2020 2020 2075 6e63 6861 uncha │ │ │ │ +00037920: 6e67 6564 2066 696c 6573 203d 2027 202e nged files = ' . │ │ │ │ +00037930: 2024 7365 6c66 2d3e 7b27 756e 6368 616e $self->{'unchan │ │ │ │ +00037940: 6765 6446 696c 6573 277d 2c0a 0920 2020 gedFiles'},.. │ │ │ │ +00037950: 2020 2020 2720 2020 2020 2020 2020 2020 ' │ │ │ │ +00037960: 2020 2020 2020 2063 6f70 6965 6420 6669 copied fi │ │ │ │ +00037970: 6c65 7320 3d20 2720 2e20 2473 656c 662d les = ' . $self- │ │ │ │ +00037980: 3e7b 276e 6f43 6f70 6965 6446 696c 6573 >{'noCopiedFiles │ │ │ │ +00037990: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' │ │ │ │ +000379a0: 2020 2020 2020 2020 2020 2063 6f6d 7072 compr │ │ │ │ +000379b0: 6573 7365 6420 6669 6c65 7320 3d20 2720 essed files = ' │ │ │ │ +000379c0: 2e20 2473 656c 662d 3e7b 276e 6f43 6f6d . $self->{'noCom │ │ │ │ +000379d0: 7072 6573 7365 6446 696c 6573 277d 2c0a pressedFiles'},. │ │ │ │ +000379e0: 0920 2020 2020 2020 2720 2020 2020 2020 . ' │ │ │ │ +000379f0: 2020 2020 2020 2020 2020 626c 6f63 6b65 blocke │ │ │ │ +00037a00: 6420 6669 6c65 7320 3d20 2720 2e20 2473 d files = ' . $s │ │ │ │ +00037a10: 656c 662d 3e7b 276e 6f42 6c6f 636b 6564 elf->{'noBlocked │ │ │ │ +00037a20: 4669 6c65 7327 7d2c 0a09 2020 2020 2020 Files'},.. │ │ │ │ +00037a30: 2027 2020 2065 7863 6c75 6465 6420 6669 ' excluded fi │ │ │ │ +00037a40: 6c65 7320 6265 6361 7573 6520 7275 6c65 les because rule │ │ │ │ +00037a50: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{' │ │ │ │ +00037a60: 6e6f 4578 636c 7564 6552 756c 6527 7d2c noExcludeRule'}, │ │ │ │ +00037a70: 0a09 2020 2020 2020 2027 2020 2069 6e63 .. ' inc │ │ │ │ +00037a80: 6c75 6465 6420 6669 6c65 7320 6265 6361 luded files beca │ │ │ │ +00037a90: 7573 6520 7275 6c65 203d 2027 202e 2024 use rule = ' . $ │ │ │ │ +00037aa0: 7365 6c66 2d3e 7b27 6e6f 496e 636c 7564 self->{'noInclud │ │ │ │ +00037ab0: 6552 756c 6527 7d2c 0a09 2020 2020 2020 eRule'},.. │ │ │ │ +00037ac0: 2040 636f 6d70 7243 6865 636b 2c0a 0920 @comprCheck,.. │ │ │ │ +00037ad0: 2020 2020 2020 4065 7854 7970 6573 2c0a @exTypes,. │ │ │ │ +00037ae0: 0920 2020 2020 2020 2720 2020 2020 2020 . ' │ │ │ │ +00037af0: 206d 6178 2073 697a 6520 6f66 2063 6f70 max size of cop │ │ │ │ +00037b00: 7920 7175 6575 6520 3d20 2720 2e20 2473 y queue = ' . $s │ │ │ │ +00037b10: 656c 662d 3e7b 276d 6178 5573 6564 436f elf->{'maxUsedCo │ │ │ │ +00037b20: 7079 5175 6575 6527 7d2c 0a09 2020 2020 pyQueue'},.. │ │ │ │ +00037b30: 2020 2027 206d 6178 2073 697a 6520 6f66 ' max size of │ │ │ │ +00037b40: 2063 6f6d 7072 6573 7369 6f6e 2071 7565 compression que │ │ │ │ +00037b50: 7565 203d 2027 202e 2024 7365 6c66 2d3e ue = ' . $self-> │ │ │ │ +00037b60: 7b27 6d61 7855 7365 6443 6f6d 7072 5175 {'maxUsedComprQu │ │ │ │ +00037b70: 6575 6527 7d2c 0a0a 0920 2020 2020 2020 eue'},... │ │ │ │ +00037b80: 2720 2020 2020 2020 2020 2020 6361 6c63 ' calc │ │ │ │ +00037b90: 756c 6174 6564 206d 6435 2073 756d 7320 ulated md5 sums │ │ │ │ +00037ba0: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ │ +00037bb0: 6f4d 4435 6564 4669 6c65 7327 7d2c 0a09 oMD5edFiles'},.. │ │ │ │ +00037bc0: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ │ +00037bd0: 2020 2020 2020 2020 2020 2066 6f72 6b73 forks │ │ │ │ +00037be0: 2074 6f74 616c 203d 2027 202e 2028 2473 total = ' . ($s │ │ │ │ +00037bf0: 656c 662d 3e7b 276e 6f46 6f72 6b73 4d44 elf->{'noForksMD │ │ │ │ +00037c00: 3527 7d20 2b0a 0909 0909 0909 2020 2024 5'} +....... $ │ │ │ │ +00037c10: 7365 6c66 2d3e 7b27 6e6f 466f 726b 7343 self->{'noForksC │ │ │ │ +00037c20: 5027 7d20 2b0a 0909 0909 0909 2020 2024 P'} +....... $ │ │ │ │ +00037c30: 7365 6c66 2d3e 7b27 6e6f 466f 726b 7343 self->{'noForksC │ │ │ │ +00037c40: 6f6d 7072 6573 7327 7d20 2b0a 0909 0909 ompress'} +..... │ │ │ │ +00037c50: 0909 2020 2024 7365 6c66 2d3e 7b27 6e6f .. $self->{'no │ │ │ │ +00037c60: 4e61 6d65 6450 6970 6573 277d 292c 0a09 NamedPipes'}),.. │ │ │ │ +00037c70: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ │ +00037c80: 2020 2020 2020 2020 2020 2020 2066 6f72 for │ │ │ │ +00037c90: 6b73 206d 6435 203d 2027 202e 2024 7365 ks md5 = ' . $se │ │ │ │ +00037ca0: 6c66 2d3e 7b27 6e6f 466f 726b 734d 4435 lf->{'noForksMD5 │ │ │ │ +00037cb0: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' │ │ │ │ +00037cc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00037cd0: 2066 6f72 6b73 2063 6f70 7920 3d20 2720 forks copy = ' │ │ │ │ +00037ce0: 2e20 2473 656c 662d 3e7b 276e 6f46 6f72 . $self->{'noFor │ │ │ │ +00037cf0: 6b73 4350 277d 2c0a 0920 2020 2020 2020 ksCP'},.. │ │ │ │ +00037d00: 7370 7269 6e74 6628 2225 3333 7322 2c20 sprintf("%33s", │ │ │ │ +00037d10: 2266 6f72 6b73 2022 202e 206a 6f69 6e28 "forks " . join( │ │ │ │ +00037d20: 2720 272c 2040 7b24 7365 6c66 2d3e 7b27 ' ', @{$self->{' │ │ │ │ +00037d30: 636f 6d70 7265 7373 277d 7d29 0a09 0920 compress'}})... │ │ │ │ +00037d40: 2020 2020 2020 2e20 2220 3d20 2229 202e . " = ") . │ │ │ │ +00037d50: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ │ +00037d60: 7343 6f6d 7072 6573 7327 7d2c 0a0a 0920 sCompress'},... │ │ │ │ +00037d70: 2020 2020 2020 2720 2020 2020 2020 2020 ' │ │ │ │ +00037d80: 2020 2020 2020 2020 7375 6d20 6f66 2073 sum of s │ │ │ │ +00037d90: 6f75 7263 6520 3d20 2720 2e0a 0920 2020 ource = ' ... │ │ │ │ +00037da0: 2020 2020 2020 2020 2826 3a3a 6875 6d61 (&::huma │ │ │ │ +00037db0: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self- │ │ │ │ +00037dc0: 3e7b 2773 756d 4f72 6967 4669 6c65 7327 >{'sumOrigFiles' │ │ │ │ +00037dd0: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... │ │ │ │ +00037de0: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel │ │ │ │ +00037df0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile │ │ │ │ +00037e00: 7327 7d20 2e20 2729 272c 0a09 2020 2020 s'} . ')',.. │ │ │ │ +00037e10: 2020 2027 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00037e20: 2073 756d 206f 6620 7461 7267 6574 2061 sum of target a │ │ │ │ +00037e30: 6c6c 203d 2027 202e 0a09 2020 2020 2020 ll = ' ... │ │ │ │ +00037e40: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe │ │ │ │ +00037e50: 6164 6162 6c65 2824 7375 6d54 6172 6765 adable($sumTarge │ │ │ │ +00037e60: 7441 6c6c 2929 5b30 5d20 2e20 2220 2824 tAll))[0] . " ($ │ │ │ │ +00037e70: 7375 6d54 6172 6765 7441 6c6c 2922 2c0a sumTargetAll)",. │ │ │ │ +00037e80: 0920 2020 2020 2020 2720 2020 2020 2020 . ' │ │ │ │ +00037e90: 2020 2020 2020 7375 6d20 6f66 2074 6172 sum of tar │ │ │ │ +00037ea0: 6765 7420 616c 6c20 3d20 2720 2e20 7370 get all = ' . sp │ │ │ │ +00037eb0: 7269 6e74 6628 2225 2e32 6625 2522 2c0a rintf("%.2f%%",. │ │ │ │ +00037ec0: 0909 2020 2026 7065 7263 656e 7428 2473 .. &percent($s │ │ │ │ +00037ed0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi │ │ │ │ +00037ee0: 6c65 7327 7d2c 2024 7375 6d54 6172 6765 les'}, $sumTarge │ │ │ │ +00037ef0: 7441 6c6c 2929 2c0a 0920 2020 2020 2020 tAll)),.. │ │ │ │ +00037f00: 2720 2020 2020 2020 2020 2020 2020 7375 ' su │ │ │ │ +00037f10: 6d20 6f66 2074 6172 6765 7420 6e65 7720 m of target new │ │ │ │ +00037f20: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... │ │ │ │ +00037f30: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada │ │ │ │ +00037f40: 626c 6528 2473 756d 5461 7267 6574 4e65 ble($sumTargetNe │ │ │ │ +00037f50: 7729 295b 305d 202e 2022 2028 2473 756d w))[0] . " ($sum │ │ │ │ +00037f60: 5461 7267 6574 4e65 7729 222c 0a09 2020 TargetNew)",.. │ │ │ │ +00037f70: 2020 2020 2027 2020 2020 2020 2020 2020 ' │ │ │ │ +00037f80: 2020 2073 756d 206f 6620 7461 7267 6574 sum of target │ │ │ │ +00037f90: 206e 6577 203d 2027 202e 2020 7370 7269 new = ' . spri │ │ │ │ +00037fa0: 6e74 6628 2225 2e32 6625 2522 2c0a 0909 ntf("%.2f%%",... │ │ │ │ +00037fb0: 2020 2026 7065 7263 656e 7428 2473 656c &percent($sel │ │ │ │ +00037fc0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile │ │ │ │ +00037fd0: 7327 7d2c 2024 7375 6d54 6172 6765 744e s'}, $sumTargetN │ │ │ │ +00037fe0: 6577 2929 2c0a 0920 2020 2020 2020 2720 ew)),.. ' │ │ │ │ +00037ff0: 2020 2020 2020 2020 2020 2073 756d 206f sum o │ │ │ │ +00038000: 6620 6d64 3565 6420 6669 6c65 7320 3d20 f md5ed files = │ │ │ │ +00038010: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... │ │ │ │ +00038020: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl │ │ │ │ +00038030: 6528 2473 656c 662d 3e7b 2773 756d 4d44 e($self->{'sumMD │ │ │ │ +00038040: 3553 756d 277d 2929 5b30 5d20 2e0a 0920 5Sum'}))[0] ... │ │ │ │ +00038050: 2020 2020 2020 2020 2020 2720 2827 202e ' (' . │ │ │ │ +00038060: 2024 7365 6c66 2d3e 7b27 7375 6d4d 4435 $self->{'sumMD5 │ │ │ │ +00038070: 5375 6d27 7d20 2e20 2729 272c 0a09 2020 Sum'} . ')',.. │ │ │ │ +00038080: 2020 2020 2027 2020 2020 2020 2020 2020 ' │ │ │ │ +00038090: 2020 7375 6d20 6f66 206d 6435 6564 2066 sum of md5ed f │ │ │ │ +000380a0: 696c 6573 203d 2027 202e 2073 7072 696e iles = ' . sprin │ │ │ │ +000380b0: 7466 2822 252e 3266 2525 222c 0a09 0920 tf("%.2f%%",... │ │ │ │ +000380c0: 2020 2670 6572 6365 6e74 2824 7365 6c66 &percent($self │ │ │ │ +000380d0: 2d3e 7b27 7375 6d4f 7269 6746 696c 6573 ->{'sumOrigFiles │ │ │ │ +000380e0: 277d 2c0a 0909 0920 2020 2024 7365 6c66 '},.... $self │ │ │ │ +000380f0: 2d3e 7b27 7375 6d4d 4435 5375 6d27 7d29 ->{'sumMD5Sum'}) │ │ │ │ +00038100: 292c 0a09 2020 2020 2020 2027 2020 2020 ),.. ' │ │ │ │ +00038110: 7375 6d20 696e 7465 726e 616c 206c 696e sum internal lin │ │ │ │ +00038120: 6b65 6420 2863 6f70 7929 203d 2027 202e ked (copy) = ' . │ │ │ │ +00038130: 0a09 2020 2020 2020 2020 2020 2028 263a .. (&: │ │ │ │ +00038140: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($ │ │ │ │ +00038150: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke │ │ │ │ +00038160: 6449 6e74 6572 6e61 6c43 6f70 7927 7d29 dInternalCopy'}) │ │ │ │ +00038170: 295b 305d 202e 0a09 2020 2020 2020 2020 )[0] ... │ │ │ │ +00038180: 2020 2027 2028 2720 2e20 2473 656c 662d ' (' . $self- │ │ │ │ +00038190: 3e7b 2773 756d 4c69 6e6b 6564 496e 7465 >{'sumLinkedInte │ │ │ │ +000381a0: 726e 616c 436f 7079 277d 202e 2027 2927 rnalCopy'} . ')' │ │ │ │ +000381b0: 2c0a 0920 2020 2020 2020 2720 2020 7375 ,.. ' su │ │ │ │ +000381c0: 6d20 696e 7465 726e 616c 206c 696e 6b65 m internal linke │ │ │ │ +000381d0: 6420 2863 6f6d 7072 2920 3d20 2720 2e0a d (compr) = ' .. │ │ │ │ +000381e0: 0920 2020 2020 2020 2020 2020 2826 3a3a . (&:: │ │ │ │ +000381f0: 6875 6d61 6e52 6561 6461 626c 6528 2473 humanReadable($s │ │ │ │ +00038200: 656c 662d 3e7b 2773 756d 4c69 6e6b 6564 elf->{'sumLinked │ │ │ │ +00038210: 496e 7465 726e 616c 436f 6d70 7227 7d29 InternalCompr'}) │ │ │ │ +00038220: 295b 305d 202e 0a09 2020 2020 2020 2020 )[0] ... │ │ │ │ +00038230: 2020 2027 2028 2720 2e20 2473 656c 662d ' (' . $self- │ │ │ │ +00038240: 3e7b 2773 756d 4c69 6e6b 6564 496e 7465 >{'sumLinkedInte │ │ │ │ +00038250: 726e 616c 436f 6d70 7227 7d20 2e20 2729 rnalCompr'} . ') │ │ │ │ +00038260: 272c 0a09 2020 2020 2020 2027 2020 2020 ',.. ' │ │ │ │ +00038270: 2020 2020 2073 756d 206f 6c64 206c 696e sum old lin │ │ │ │ +00038280: 6b65 6420 2863 6f70 7929 203d 2027 202e ked (copy) = ' . │ │ │ │ +00038290: 0a09 2020 2020 2020 2020 2020 2028 263a .. (&: │ │ │ │ +000382a0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($ │ │ │ │ +000382b0: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke │ │ │ │ +000382c0: 644f 6c64 436f 7079 277d 2929 5b30 5d20 dOldCopy'}))[0] │ │ │ │ +000382d0: 2e0a 0920 2020 2020 2020 2020 2020 2720 ... ' │ │ │ │ +000382e0: 2827 202e 2024 7365 6c66 2d3e 7b27 7375 (' . $self->{'su │ │ │ │ +000382f0: 6d4c 696e 6b65 644f 6c64 436f 7079 277d mLinkedOldCopy'} │ │ │ │ +00038300: 202e 2027 2927 2c0a 0920 2020 2020 2020 . ')',.. │ │ │ │ +00038310: 2720 2020 2020 2020 2073 756d 206f 6c64 ' sum old │ │ │ │ +00038320: 206c 696e 6b65 6420 2863 6f6d 7072 2920 linked (compr) │ │ │ │ +00038330: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... │ │ │ │ +00038340: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada │ │ │ │ +00038350: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum │ │ │ │ +00038360: 4c69 6e6b 6564 4f6c 6443 6f6d 7072 277d LinkedOldCompr'} │ │ │ │ +00038370: 2929 5b30 5d20 2e0a 0920 2020 2020 2020 ))[0] ... │ │ │ │ +00038380: 2020 2020 2720 2827 202e 2024 7365 6c66 ' (' . $self │ │ │ │ +00038390: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld │ │ │ │ +000383a0: 436f 6d70 7227 7d20 2e20 2729 272c 0a09 Compr'} . ')',.. │ │ │ │ +000383b0: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ │ +000383c0: 2020 7375 6d20 756e 6368 616e 6765 6420 sum unchanged │ │ │ │ +000383d0: 2863 6f70 7929 203d 2027 202e 0a09 2020 (copy) = ' ... │ │ │ │ +000383e0: 2020 2020 2020 2020 2028 263a 3a68 756d (&::hum │ │ │ │ +000383f0: 616e 5265 6164 6162 6c65 2824 7365 6c66 anReadable($self │ │ │ │ +00038400: 2d3e 7b27 7375 6d55 6e63 6861 6e67 6564 ->{'sumUnchanged │ │ │ │ +00038410: 436f 7079 277d 2929 5b30 5d20 2e0a 0920 Copy'}))[0] ... │ │ │ │ +00038420: 2020 2020 2020 2020 2020 2720 2827 202e ' (' . │ │ │ │ +00038430: 2024 7365 6c66 2d3e 7b27 7375 6d55 6e63 $self->{'sumUnc │ │ │ │ +00038440: 6861 6e67 6564 436f 7079 277d 202e 2027 hangedCopy'} . ' │ │ │ │ +00038450: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' │ │ │ │ +00038460: 2020 2020 2020 7375 6d20 756e 6368 616e sum unchan │ │ │ │ +00038470: 6765 6420 2863 6f6d 7072 2920 3d20 2720 ged (compr) = ' │ │ │ │ +00038480: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (& │ │ │ │ +00038490: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable( │ │ │ │ +000384a0: 2473 656c 662d 3e7b 2773 756d 556e 6368 $self->{'sumUnch │ │ │ │ +000384b0: 616e 6765 6443 6f6d 7072 277d 2929 5b30 angedCompr'}))[0 │ │ │ │ +000384c0: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... │ │ │ │ +000384d0: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{' │ │ │ │ +000384e0: 7375 6d55 6e63 6861 6e67 6564 436f 6d70 sumUnchangedComp │ │ │ │ +000384f0: 7227 7d20 2e20 2729 272c 0a09 2020 2020 r'} . ')',.. │ │ │ │ +00038500: 2020 2027 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00038510: 2020 2020 7375 6d20 6e65 7720 2863 6f70 sum new (cop │ │ │ │ +00038520: 7929 203d 2027 202e 0a09 2020 2020 2020 y) = ' ... │ │ │ │ +00038530: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe │ │ │ │ +00038540: 6164 6162 6c65 2824 7365 6c66 2d3e 7b27 adable($self->{' │ │ │ │ +00038550: 7375 6d4e 6577 436f 7079 277d 2929 5b30 sumNewCopy'}))[0 │ │ │ │ +00038560: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... │ │ │ │ +00038570: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{' │ │ │ │ +00038580: 7375 6d4e 6577 436f 7079 277d 202e 2027 sumNewCopy'} . ' │ │ │ │ +00038590: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' │ │ │ │ +000385a0: 2020 2020 2020 2020 2020 2020 7375 6d20 sum │ │ │ │ +000385b0: 6e65 7720 2863 6f6d 7072 2920 3d20 2720 new (compr) = ' │ │ │ │ +000385c0: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (& │ │ │ │ +000385d0: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable( │ │ │ │ +000385e0: 2473 656c 662d 3e7b 2773 756d 4e65 7743 $self->{'sumNewC │ │ │ │ +000385f0: 6f6d 7072 277d 2929 5b30 5d20 2e0a 0920 ompr'}))[0] ... │ │ │ │ +00038600: 2020 2020 2020 2020 2020 2720 2827 202e ' (' . │ │ │ │ +00038610: 2024 7365 6c66 2d3e 7b27 7375 6d4e 6577 $self->{'sumNew │ │ │ │ +00038620: 436f 6d70 7227 7d20 2e20 2729 272c 0a09 Compr'} . ')',.. │ │ │ │ +00038630: 2020 2020 2020 2027 2020 2020 7375 6d20 ' sum │ │ │ │ +00038640: 6e65 7720 2863 6f6d 7072 292c 206f 7269 new (compr), ori │ │ │ │ +00038650: 6720 7369 7a65 203d 2027 202e 0a09 2020 g size = ' ... │ │ │ │ +00038660: 2020 2020 2020 2020 2028 263a 3a68 756d (&::hum │ │ │ │ +00038670: 616e 5265 6164 6162 6c65 2824 7365 6c66 anReadable($self │ │ │ │ +00038680: 2d3e 7b27 7375 6d4e 6577 436f 6d70 724f ->{'sumNewComprO │ │ │ │ +00038690: 7269 6753 697a 6527 7d29 295b 305d 202e rigSize'}))[0] . │ │ │ │ +000386a0: 0a09 2020 2020 2020 2020 2020 2027 2028 .. ' ( │ │ │ │ +000386b0: 2720 2e20 2473 656c 662d 3e7b 2773 756d ' . $self->{'sum │ │ │ │ +000386c0: 4e65 7743 6f6d 7072 4f72 6967 5369 7a65 NewComprOrigSize │ │ │ │ +000386d0: 277d 202e 2027 2927 2c0a 0920 2020 2020 '} . ')',.. │ │ │ │ +000386e0: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +000386f0: 2020 2073 756d 206e 6577 202f 206f 7269 sum new / ori │ │ │ │ +00038700: 6720 3d20 2720 2e20 7370 7269 6e74 6628 g = ' . sprintf( │ │ │ │ +00038710: 2225 2e32 6625 2522 2c0a 0920 2020 2020 "%.2f%%",.. │ │ │ │ +00038720: 2020 2020 2020 2670 6572 6365 6e74 2824 &percent($ │ │ │ │ +00038730: 7365 6c66 2d3e 7b27 7375 6d4e 6577 436f self->{'sumNewCo │ │ │ │ +00038740: 6d70 724f 7269 6753 697a 6527 7d0a 0909 mprOrigSize'}... │ │ │ │ +00038750: 0920 2020 202b 2024 7365 6c66 2d3e 7b27 . + $self->{' │ │ │ │ +00038760: 7375 6d4e 6577 436f 7079 277d 2c0a 0909 sumNewCopy'},... │ │ │ │ +00038770: 0920 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su │ │ │ │ +00038780: 6d4e 6577 436f 6d70 7227 7d0a 0909 0920 mNewCompr'}.... │ │ │ │ +00038790: 2020 202b 2024 7365 6c66 2d3e 7b27 7375 + $self->{'su │ │ │ │ +000387a0: 6d4e 6577 436f 7079 277d 2929 2c0a 0920 mNewCopy'})),.. │ │ │ │ +000387b0: 2020 2020 2020 2720 2020 2020 2073 697a ' siz │ │ │ │ +000387c0: 6520 6f66 206d 6435 4368 6563 6b53 756d e of md5CheckSum │ │ │ │ +000387d0: 2066 696c 6520 3d20 2720 2e0a 0920 2020 file = ' ... │ │ │ │ +000387e0: 2020 2020 2020 2020 2826 3a3a 6875 6d61 (&::huma │ │ │ │ +000387f0: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self- │ │ │ │ +00038800: 3e7b 276d 6435 4368 6563 6b53 756d 277d >{'md5CheckSum'} │ │ │ │ +00038810: 2929 5b30 5d20 2e0a 0920 2020 2020 2020 ))[0] ... │ │ │ │ +00038820: 2020 2020 2720 2827 202e 2024 7365 6c66 ' (' . $self │ │ │ │ +00038830: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum' │ │ │ │ +00038840: 7d20 2e20 2729 272c 0a09 2020 2020 2020 } . ')',.. │ │ │ │ +00038850: 2027 2020 2020 7369 7a65 206f 6620 7465 ' size of te │ │ │ │ +00038860: 6d70 6f72 6172 7920 6462 2066 696c 6573 mporary db files │ │ │ │ +00038870: 203d 2027 202e 0a09 2020 2020 2020 2020 = ' ... │ │ │ │ +00038880: 2020 2028 263a 3a68 756d 616e 5265 6164 (&::humanRead │ │ │ │ +00038890: 6162 6c65 2824 7365 6c66 2d3e 7b27 7375 able($self->{'su │ │ │ │ +000388a0: 6d44 424d 4669 6c65 7327 7d29 295b 305d mDBMFiles'}))[0] │ │ │ │ +000388b0: 202e 0a09 2020 2020 2020 2020 2020 2027 ... ' │ │ │ │ +000388c0: 2028 2720 2e20 2473 656c 662d 3e7b 2773 (' . $self->{'s │ │ │ │ +000388d0: 756d 4442 4d46 696c 6573 277d 202e 2027 umDBMFiles'} . ' │ │ │ │ +000388e0: 2927 2c0a 0920 2020 2020 2020 4073 7461 )',.. @sta │ │ │ │ +000388f0: 7274 4461 7465 2c0a 0920 2020 2020 2020 rtDate,.. │ │ │ │ +00038900: 2720 2020 2020 2020 2020 2020 6465 6c65 ' dele │ │ │ │ +00038910: 7465 6420 6f6c 6420 6261 636b 7570 7320 ted old backups │ │ │ │ +00038920: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ │ +00038930: 6f44 656c 6574 6564 4f6c 6444 6972 7327 oDeletedOldDirs' │ │ │ │ +00038940: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' │ │ │ │ +00038950: 2020 2020 2020 2064 656c 6574 6564 2064 deleted d │ │ │ │ +00038960: 6972 6563 746f 7269 6573 203d 2027 202e irectories = ' . │ │ │ │ +00038970: 2024 7365 6c66 2d3e 7b27 6469 7273 277d $self->{'dirs'} │ │ │ │ +00038980: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ │ +00038990: 2020 2020 2020 2020 2020 2020 6465 6c65 dele │ │ │ │ +000389a0: 7465 6420 6669 6c65 7320 3d20 2720 2e20 ted files = ' . │ │ │ │ +000389b0: 2473 656c 662d 3e7b 2766 696c 6573 277d $self->{'files'} │ │ │ │ +000389c0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ │ +000389d0: 2020 2020 2028 6f6e 6c79 2920 7265 6d6f (only) remo │ │ │ │ +000389e0: 7665 6420 6c69 6e6b 7320 3d20 2720 2e20 ved links = ' . │ │ │ │ +000389f0: 2473 656c 662d 3e7b 276c 696e 6b73 277d $self->{'links'} │ │ │ │ +00038a00: 2c0a 0920 2020 2020 2020 2766 7265 6564 ,.. 'freed │ │ │ │ +00038a10: 2073 7061 6365 2069 6e20 6f6c 6420 6469 space in old di │ │ │ │ +00038a20: 7265 6374 6f72 6965 7320 3d20 2720 2e0a rectories = ' .. │ │ │ │ +00038a30: 0920 2020 2020 2020 2826 3a3a 6875 6d61 . (&::huma │ │ │ │ +00038a40: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self- │ │ │ │ +00038a50: 3e7b 2762 7974 6573 277d 2929 5b30 5d20 >{'bytes'}))[0] │ │ │ │ +00038a60: 2e20 2720 2827 202e 0a09 2020 2020 2020 . ' (' ... │ │ │ │ +00038a70: 2024 7365 6c66 2d3e 7b27 6279 7465 7327 $self->{'bytes' │ │ │ │ +00038a80: 7d20 2e20 2729 272c 0a09 2020 2020 2020 } . ')',.. │ │ │ │ +00038a90: 2022 2020 2020 2020 6164 642e 2075 7365 " add. use │ │ │ │ +00038aa0: 6420 7370 6163 6520 696e 2066 696c 6573 d space in files │ │ │ │ +00038ab0: 203d 2024 6e65 7755 7365 6453 7061 6365 = $newUsedSpace │ │ │ │ +00038ac0: 4875 6d61 6e20 2824 6e65 7755 7365 6453 Human ($newUsedS │ │ │ │ +00038ad0: 7061 6365 2922 2c0a 0920 2020 2020 2020 pace)",.. │ │ │ │ +00038ae0: 2720 2020 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00038af0: 6261 636b 7570 2064 7572 6174 696f 6e20 backup duration │ │ │ │ +00038b00: 3d20 2720 2e0a 0920 2020 2020 2020 6461 = ' ... da │ │ │ │ +00038b10: 7465 546f 6f6c 733a 3a76 616c 546f 5374 teTools::valToSt │ │ │ │ +00038b20: 7228 272d 7365 6327 203d 3e20 2462 6163 r('-sec' => $bac │ │ │ │ +00038b30: 6b75 7044 7572 6174 696f 6e29 2c0a 0920 kupDuration),.. │ │ │ │ +00038b40: 2020 2020 2020 276f 7665 7220 616c 6c20 'over all │ │ │ │ +00038b50: 6669 6c65 732f 7365 6320 2872 6561 6c20 files/sec (real │ │ │ │ +00038b60: 7469 6d65 2920 3d20 2720 2e0a 0920 2020 time) = ' ... │ │ │ │ +00038b70: 2020 2020 2020 2020 7370 7269 6e74 6628 sprintf( │ │ │ │ +00038b80: 2225 2e32 6622 2c20 2473 656c 662d 3e7b "%.2f", $self->{ │ │ │ │ +00038b90: 276e 6f46 696c 6573 277d 202f 2024 6261 'noFiles'} / $ba │ │ │ │ +00038ba0: 636b 7570 4475 7261 7469 6f6e 292c 0a09 ckupDuration),.. │ │ │ │ +00038bb0: 2020 2020 2020 2027 206f 7665 7220 616c ' over al │ │ │ │ +00038bc0: 6c20 6669 6c65 732f 7365 6320 2843 5055 l files/sec (CPU │ │ │ │ +00038bd0: 2074 696d 6529 203d 2027 202e 0a09 2020 time) = ' ... │ │ │ │ +00038be0: 2020 2020 2020 2020 2073 7072 696e 7466 sprintf │ │ │ │ +00038bf0: 2822 252e 3266 222c 2024 7365 6c66 2d3e ("%.2f", $self-> │ │ │ │ +00038c00: 7b27 6e6f 4669 6c65 7327 7d20 2f20 2824 {'noFiles'} / ($ │ │ │ │ +00038c10: 7520 2b20 2473 2929 2c0a 0920 2020 2020 u + $s)),.. │ │ │ │ +00038c20: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ │ +00038c30: 2020 2020 2020 2020 4350 5520 7573 6167 CPU usag │ │ │ │ +00038c40: 6520 3d20 2720 2e0a 0920 2020 2020 2020 e = ' ... │ │ │ │ +00038c50: 2020 2020 7370 7269 6e74 6628 2225 2e32 sprintf("%.2 │ │ │ │ +00038c60: 6625 2522 2c20 2824 7520 2b20 2473 2920 f%%", ($u + $s) │ │ │ │ +00038c70: 2f20 2462 6163 6b75 7044 7572 6174 696f / $backupDuratio │ │ │ │ +00038c80: 6e20 2a20 3130 3029 0a09 2020 2020 2020 n * 100).. │ │ │ │ +00038c90: 205d 293b 0a0a 7d0a 0a0a 2323 2323 2323 ]);..}...###### │ │ │ │ +00038ca0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038cc0: 2323 0a73 7562 2070 6572 6365 6e74 0a7b ##.sub percent.{ │ │ │ │ +00038cd0: 0a20 2020 206d 7920 2824 6261 7365 2c20 . my ($base, │ │ │ │ +00038ce0: 2472 656c 2920 3d20 405f 3b0a 0a20 2020 $rel) = @_;.. │ │ │ │ +00038cf0: 2069 6620 2824 6261 7365 203d 3d20 3029 if ($base == 0) │ │ │ │ +00038d00: 0a20 2020 207b 0a09 7265 7475 726e 2030 . {..return 0 │ │ │ │ +00038d10: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00038d20: 0a20 2020 207b 0a09 7265 7475 726e 2031 . {..return 1 │ │ │ │ +00038d30: 3030 202d 2028 2462 6173 6520 2d20 2472 00 - ($base - $r │ │ │ │ +00038d40: 656c 2920 2a20 3130 3020 2f20 2462 6173 el) * 100 / $bas │ │ │ │ +00038d50: 653b 0a20 2020 207d 0a7d 0a0a 0a0a 2323 e;. }.}....## │ │ │ │ +00038d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038d70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038d80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038d90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038da0: 2323 2323 0a23 2073 746f 7265 7320 4461 ####.# stores Da │ │ │ │ +00038db0: 7465 7320 616e 6420 5469 6d65 7320 6f66 tes and Times of │ │ │ │ +00038dc0: 2061 6c6c 2064 6972 6563 746f 7269 6573 all directories │ │ │ │ +00038dd0: 2069 6e20 6120 6669 6c65 0a23 2061 6674 in a file.# aft │ │ │ │ +00038de0: 6572 2062 6163 6b75 7020 7468 6973 2066 er backup this f │ │ │ │ +00038df0: 696c 6520 6973 2072 6561 6420 616e 6420 ile is read and │ │ │ │ +00038e00: 6469 7265 6374 6f72 7920 6174 696d 6520 directory atime │ │ │ │ +00038e10: 616e 6420 6d74 696d 6520 6172 6520 7365 and mtime are se │ │ │ │ +00038e20: 740a 7061 636b 6167 6520 7365 7452 6573 t.package setRes │ │ │ │ +00038e30: 6574 4469 7254 696d 6573 3b0a 0a23 2323 etDirTimes;..### │ │ │ │ +00038e40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038e50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00038e60: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{. │ │ │ │ +00038e70: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ │ +00038e80: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s │ │ │ │ +00038e90: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m │ │ │ │ +00038ea0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = (' │ │ │ │ +00038eb0: 2d74 6d70 4469 7227 2020 2020 3d3e 2075 -tmpDir' => u │ │ │ │ +00038ec0: 6e64 6566 2c0a 0909 2020 2020 272d 736f ndef,... '-so │ │ │ │ +00038ed0: 7572 6365 4469 7227 203d 3e20 756e 6465 urceDir' => unde │ │ │ │ +00038ee0: 662c 0a09 0920 2020 2027 2d74 6172 6765 f,... '-targe │ │ │ │ +00038ef0: 7444 6972 2720 3d3e 2075 6e64 6566 2c0a tDir' => undef,. │ │ │ │ +00038f00: 0909 2020 2020 272d 7072 4c6f 6727 2020 .. '-prLog' │ │ │ │ +00038f10: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ │ +00038f20: 2020 2027 2d73 7264 7466 2720 2020 2020 '-srdtf' │ │ │ │ +00038f30: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ │ +00038f40: 272d 646f 4e6f 7468 696e 6727 203d 3e20 '-doNothing' => │ │ │ │ +00038f50: 302c 0a09 0920 2020 2027 2d72 6573 6574 0,... '-reset │ │ │ │ +00038f60: 4174 696d 6527 203d 3e20 302c 0a09 0920 Atime' => 0,... │ │ │ │ +00038f70: 2020 2027 2d70 7265 7365 7276 6550 6572 '-preservePer │ │ │ │ +00038f80: 6d73 2720 3d3e 2075 6e64 6566 0a09 0920 ms' => undef... │ │ │ │ +00038f90: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch │ │ │ │ +00038fa0: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams( │ │ │ │ +00038fb0: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \%params, \@_, ' │ │ │ │ +00038fc0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes │ │ │ │ +00038fd0: 3a3a 6e65 7727 2c0a 0909 0920 5b27 2d74 ::new',.... ['-t │ │ │ │ +00038fe0: 6d70 4469 7227 2c20 272d 736f 7572 6365 mpDir', '-source │ │ │ │ +00038ff0: 4469 7227 2c20 272d 7461 7267 6574 4469 Dir', '-targetDi │ │ │ │ +00039000: 7227 2c20 272d 7072 4c6f 6727 2c0a 0909 r', '-prLog',... │ │ │ │ +00039010: 0920 2027 2d73 7264 7466 275d 293b 0a0a . '-srdtf']);.. │ │ │ │ +00039020: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams │ │ │ │ +00039030: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \% │ │ │ │ +00039040: 7061 7261 6d73 293b 0a0a 2020 2020 756e params);.. un │ │ │ │ +00039050: 6c65 7373 2028 2473 656c 662d 3e7b 2764 less ($self->{'d │ │ │ │ +00039060: 6f4e 6f74 6869 6e67 277d 290a 2020 2020 oNothing'}). │ │ │ │ +00039070: 7b0a 096d 7920 2474 6d70 6669 6c65 203d {..my $tmpfile = │ │ │ │ +00039080: 2026 3a3a 756e 6971 4669 6c65 4e61 6d65 &::uniqFileName │ │ │ │ +00039090: 2822 2474 6d70 6469 722f 7374 6f72 6542 ("$tmpdir/storeB │ │ │ │ +000390a0: 6163 6b75 702d 6469 7273 2e22 293b 0a09 ackup-dirs.");.. │ │ │ │ +000390b0: 2473 656c 662d 3e7b 2774 6d70 6669 6c65 $self->{'tmpfile │ │ │ │ +000390c0: 277d 203d 2024 746d 7066 696c 653b 0a09 '} = $tmpfile;.. │ │ │ │ +000390d0: 6c6f 6361 6c20 2a46 494c 453b 0a09 263a local *FILE;..&: │ │ │ │ +000390e0: 3a63 6865 636b 4465 6c53 796d 4c69 6e6b :checkDelSymLink │ │ │ │ +000390f0: 2824 746d 7066 696c 652c 2024 7072 4c6f ($tmpfile, $prLo │ │ │ │ +00039100: 672c 2030 7830 3129 3b0a 096f 7065 6e28 g, 0x01);..open( │ │ │ │ +00039110: 4649 4c45 2c20 223e 2024 746d 7066 696c FILE, "> $tmpfil │ │ │ │ +00039120: 6522 2920 6f72 0a09 2020 2020 2470 724c e") or.. $prL │ │ │ │ +00039130: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00039140: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ │ +00039150: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => ["canno │ │ │ │ +00039160: 7420 6f70 656e 203c 2474 6d70 6669 6c65 t open <$tmpfile │ │ │ │ +00039170: 3e2c 2065 7869 7469 6e67 225d 2c0a 0909 >, exiting"],... │ │ │ │ +00039180: 0920 2027 2d61 6464 2720 3d3e 205b 5f5f . '-add' => [__ │ │ │ │ +00039190: 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 5f5f FILE__, __LINE__ │ │ │ │ +000391a0: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' │ │ │ │ +000391b0: 3d3e 2031 293b 0a09 6368 6d6f 6420 3036 => 1);..chmod 06 │ │ │ │ +000391c0: 3030 2c20 2474 6d70 6669 6c65 3b0a 0924 00, $tmpfile;..$ │ │ │ │ +000391d0: 7365 6c66 2d3e 7b27 4649 4c45 277d 203d self->{'FILE'} = │ │ │ │ +000391e0: 202a 4649 4c45 3b0a 2020 2020 7d0a 0a20 *FILE;. }.. │ │ │ │ +000391f0: 2020 2062 6c65 7373 2024 7365 6c66 2c20 bless $self, │ │ │ │ +00039200: 2463 6c61 7373 3b0a 7d0a 0a0a 2323 2323 $class;.}...#### │ │ │ │ +00039210: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00039220: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00039230: 2323 2323 0a73 7562 2061 6464 4469 720a ####.sub addDir. │ │ │ │ +00039240: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ │ +00039250: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my ( │ │ │ │ +00039260: 2472 656c 4669 6c65 2c20 2461 7469 6d65 $relFile, $atime │ │ │ │ +00039270: 2c20 246d 7469 6d65 2c20 246d 6f64 6529 , $mtime, $mode) │ │ │ │ +00039280: 203d 2040 5f3b 0a0a 2020 2020 7265 7475 = @_;.. retu │ │ │ │ +00039290: 726e 2069 6620 2473 656c 662d 3e7b 2764 rn if $self->{'d │ │ │ │ +000392a0: 6f4e 6f74 6869 6e67 277d 3b0a 0a20 2020 oNothing'};.. │ │ │ │ +000392b0: 206c 6f63 616c 202a 4649 4c45 203d 2024 local *FILE = $ │ │ │ │ +000392c0: 7365 6c66 2d3e 7b27 4649 4c45 277d 3b0a self->{'FILE'};. │ │ │ │ +000392d0: 2020 2020 2472 656c 4669 6c65 203d 7e20 $relFile =~ │ │ │ │ +000392e0: 732f 5c6e 2f5c 302f 6f67 3b0a 2020 2020 s/\n/\0/og;. │ │ │ │ +000392f0: 7072 696e 7420 4649 4c45 2022 2461 7469 print FILE "$ati │ │ │ │ +00039300: 6d65 2024 6d74 696d 6520 246d 6f64 6520 me $mtime $mode │ │ │ │ +00039310: 2472 656c 4669 6c65 5c6e 223b 0a7d 0a0a $relFile\n";.}.. │ │ │ │ +00039320: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ │ +00039330: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00039340: 2323 2323 2323 2323 230a 7375 6220 7772 #########.sub wr │ │ │ │ +00039350: 6974 6554 696d 6573 0a7b 0a20 2020 206d iteTimes.{. m │ │ │ │ +00039360: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ │ +00039370: 0a0a 2020 2020 7265 7475 726e 2069 6620 .. return if │ │ │ │ +00039380: 2473 656c 662d 3e7b 2764 6f4e 6f74 6869 $self->{'doNothi │ │ │ │ +00039390: 6e67 277d 3b0a 0a20 2020 206d 7920 2473 ng'};.. my $s │ │ │ │ +000393a0: 6f75 7263 6544 6972 203d 2024 7365 6c66 ourceDir = $self │ │ │ │ +000393b0: 2d3e 7b27 736f 7572 6365 4469 7227 7d3b ->{'sourceDir'}; │ │ │ │ +000393c0: 0a20 2020 206d 7920 2474 6172 6765 7444 . my $targetD │ │ │ │ +000393d0: 6972 203d 2024 7365 6c66 2d3e 7b27 7461 ir = $self->{'ta │ │ │ │ +000393e0: 7267 6574 4469 7227 7d3b 0a20 2020 206c rgetDir'};. l │ │ │ │ +000393f0: 6f63 616c 202a 4649 4c45 203d 2024 7365 ocal *FILE = $se │ │ │ │ +00039400: 6c66 2d3e 7b27 4649 4c45 277d 3b0a 2020 lf->{'FILE'};. │ │ │ │ +00039410: 2020 6d79 2024 7072 4c6f 6720 3d20 2473 my $prLog = $s │ │ │ │ +00039420: 656c 662d 3e7b 2770 724c 6f67 277d 3b0a elf->{'prLog'};. │ │ │ │ +00039430: 2020 2020 6d79 2024 746d 7066 696c 6520 my $tmpfile │ │ │ │ +00039440: 3d20 2473 656c 662d 3e7b 2774 6d70 6669 = $self->{'tmpfi │ │ │ │ +00039450: 6c65 277d 3b0a 0a20 2020 2063 6c6f 7365 le'};.. close │ │ │ │ +00039460: 2846 494c 4529 206f 720a 0924 7072 4c6f (FILE) or..$prLo │ │ │ │ +00039470: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00039480: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ │ +00039490: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ │ +000394a0: 6e6f 7420 636c 6f73 6520 3c24 746d 7066 not close <$tmpf │ │ │ │ +000394b0: 696c 653e 225d 293b 0a0a 2020 2020 6966 ile>"]);.. if │ │ │ │ +000394c0: 2028 2473 656c 662d 3e7b 2770 7265 7365 ($self->{'prese │ │ │ │ +000394d0: 7276 6550 6572 6d73 277d 290a 2020 2020 rvePerms'}). │ │ │ │ +000394e0: 7b0a 0975 6e6c 6573 7320 286f 7065 6e28 {..unless (open( │ │ │ │ +000394f0: 4649 4c45 2c20 223c 2024 746d 7066 696c FILE, "< $tmpfil │ │ │ │ +00039500: 6522 2929 0a09 7b0a 0920 2020 2024 7072 e"))..{.. $pr │ │ │ │ +00039510: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00039520: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ │ +00039530: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => ["cann │ │ │ │ +00039540: 6f74 2072 6561 6420 3c24 746d 7066 696c ot read <$tmpfil │ │ │ │ +00039550: 653e 2c20 6361 6e6e 6f74 2073 6574 2061 e>, cannot set a │ │ │ │ +00039560: 7469 6d65 2022 202e 0a09 0909 0920 2020 time " ...... │ │ │ │ +00039570: 2020 2261 6e64 206d 7469 6d65 2066 6f72 "and mtime for │ │ │ │ +00039580: 2064 6972 6563 746f 7269 6573 225d 293b directories"]); │ │ │ │ +00039590: 0a09 2020 2020 7265 7475 726e 3b0a 097d .. return;..} │ │ │ │ +000395a0: 0a0a 0975 6e6c 6573 7320 2865 6f66 2046 ...unless (eof F │ │ │ │ +000395b0: 494c 4529 0a09 7b0a 0920 2020 2024 7072 ILE)..{.. $pr │ │ │ │ +000395c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000395d0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ │ +000395e0: 272d 7374 7227 203d 3e20 5b22 7365 7474 '-str' => ["sett │ │ │ │ +000395f0: 696e 6720 6174 696d 652c 206d 7469 6d65 ing atime, mtime │ │ │ │ +00039600: 206f 6620 6469 7265 6374 6f72 6965 7320 of directories │ │ │ │ +00039610: 2e2e 2e22 5d29 3b0a 097d 0a0a 096d 7920 ..."]);..}...my │ │ │ │ +00039620: 246c 696e 653b 0a09 7768 696c 6520 2824 $line;..while ($ │ │ │ │ +00039630: 6c69 6e65 203d 203c 4649 4c45 3e29 0a09 line = ).. │ │ │ │ +00039640: 7b0a 0920 2020 2063 686f 7020 246c 696e {.. chop $lin │ │ │ │ +00039650: 653b 0a09 2020 2020 6d79 2028 2461 7469 e;.. my ($ati │ │ │ │ +00039660: 6d65 2c20 246d 7469 6d65 2c20 246d 6f64 me, $mtime, $mod │ │ │ │ +00039670: 652c 2024 7265 6c46 696c 6529 203d 2073 e, $relFile) = s │ │ │ │ +00039680: 706c 6974 282f 5c73 2f2c 2024 6c69 6e65 plit(/\s/, $line │ │ │ │ +00039690: 2c20 3429 3b0a 0920 2020 2024 7265 6c46 , 4);.. $relF │ │ │ │ +000396a0: 696c 6520 3d7e 2073 2f5c 302f 5c6e 2f6f ile =~ s/\0/\n/o │ │ │ │ +000396b0: 673b 0a09 2020 2020 6368 6d6f 6420 246d g;.. chmod $m │ │ │ │ +000396c0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, "$targetDir │ │ │ │ +000396d0: 2f24 7265 6c46 696c 6522 3b0a 0920 2020 /$relFile";.. │ │ │ │ +000396e0: 2075 7469 6d65 2024 6174 696d 652c 2024 utime $atime, $ │ │ │ │ +000396f0: 6d74 696d 652c 2022 2473 6f75 7263 6544 mtime, "$sourceD │ │ │ │ +00039700: 6972 2f24 7265 6c46 696c 6522 2069 6620 ir/$relFile" if │ │ │ │ +00039710: 2473 656c 662d 3e7b 2772 6573 6574 4174 $self->{'resetAt │ │ │ │ +00039720: 696d 6527 7d3b 0a09 2020 2020 7574 696d ime'};.. utim │ │ │ │ +00039730: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ │ +00039740: 2c20 2224 7461 7267 6574 4469 722f 2472 , "$targetDir/$r │ │ │ │ +00039750: 656c 4669 6c65 223b 0a09 7d0a 0a09 636c elFile";..}...cl │ │ │ │ +00039760: 6f73 6528 4649 4c45 293b 0a20 2020 207d ose(FILE);. } │ │ │ │ +00039770: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ │ +00039780: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00039790: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ │ +000397a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +000397b0: 205b 2264 6972 6563 746f 7279 2070 6572 ["directory per │ │ │ │ +000397c0: 6d69 7373 696f 6e73 206e 6f74 2073 6574 missions not set │ │ │ │ +000397d0: 2062 6563 6175 7365 2022 202e 0a09 0909 because " ..... │ │ │ │ +000397e0: 0920 2270 7265 7365 7276 6550 6572 6d73 . "preservePerms │ │ │ │ +000397f0: 206e 6f74 2073 6574 225d 293b 0a20 2020 not set"]);. │ │ │ │ +00039800: 207d 0a20 2020 2075 6e6c 696e 6b20 2474 }. unlink $t │ │ │ │ +00039810: 6d70 6669 6c65 3b0a 7d0a mpfile;.}. │ │ │ ├── ./usr/bin/storeBackupCheckBackup │ │ │ │ @@ -1,4 +1,1700 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7043 6865 636b 4261 636b 7570 0a pCheckBackup. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ │ +00000040: 3229 0a23 2020 2020 2020 2020 2020 2020 2).# │ │ │ │ +00000050: 2020 2020 2068 6a63 6c61 6573 4077 6562 hjclaes@web │ │ │ │ +00000060: 2e64 650a 2320 2020 0a23 2020 2054 6869 .de.# .# Thi │ │ │ │ +00000070: 7320 7072 6f67 7261 6d20 6973 2066 7265 s program is fre │ │ │ │ +00000080: 6520 736f 6674 7761 7265 3a20 796f 7520 e software: you │ │ │ │ +00000090: 6361 6e20 7265 6469 7374 7269 6275 7465 can redistribute │ │ │ │ +000000a0: 2069 7420 616e 642f 6f72 206d 6f64 6966 it and/or modif │ │ │ │ +000000b0: 790a 2320 2020 6974 2075 6e64 6572 2074 y.# it under t │ │ │ │ +000000c0: 6865 2074 6572 6d73 206f 6620 7468 6520 he terms of the │ │ │ │ +000000d0: 474e 5520 4765 6e65 7261 6c20 5075 626c GNU General Publ │ │ │ │ +000000e0: 6963 204c 6963 656e 7365 2061 7320 7075 ic License as pu │ │ │ │ +000000f0: 626c 6973 6865 6420 6279 0a23 2020 2074 blished by.# t │ │ │ │ +00000100: 6865 2046 7265 6520 536f 6674 7761 7265 he Free Software │ │ │ │ +00000110: 2046 6f75 6e64 6174 696f 6e2c 2065 6974 Foundation, eit │ │ │ │ +00000120: 6865 7220 7665 7273 696f 6e20 3320 6f66 her version 3 of │ │ │ │ +00000130: 2074 6865 204c 6963 656e 7365 2c20 6f72 the License, or │ │ │ │ +00000140: 0a23 2020 2028 6174 2079 6f75 7220 6f70 .# (at your op │ │ │ │ +00000150: 7469 6f6e 2920 616e 7920 6c61 7465 7220 tion) any later │ │ │ │ +00000160: 7665 7273 696f 6e2e 0a0a 2320 2020 5468 version...# Th │ │ │ │ +00000170: 6973 2070 726f 6772 616d 2069 7320 6469 is program is di │ │ │ │ +00000180: 7374 7269 6275 7465 6420 696e 2074 6865 stributed in the │ │ │ │ +00000190: 2068 6f70 6520 7468 6174 2069 7420 7769 hope that it wi │ │ │ │ +000001a0: 6c6c 2062 6520 7573 6566 756c 2c0a 2320 ll be useful,.# │ │ │ │ +000001b0: 2020 6275 7420 5749 5448 4f55 5420 414e but WITHOUT AN │ │ │ │ +000001c0: 5920 5741 5252 414e 5459 3b20 7769 7468 Y WARRANTY; with │ │ │ │ +000001d0: 6f75 7420 6576 656e 2074 6865 2069 6d70 out even the imp │ │ │ │ +000001e0: 6c69 6564 2077 6172 7261 6e74 7920 6f66 lied warranty of │ │ │ │ +000001f0: 0a23 2020 204d 4552 4348 414e 5441 4249 .# MERCHANTABI │ │ │ │ +00000200: 4c49 5459 206f 7220 4649 544e 4553 5320 LITY or FITNESS │ │ │ │ +00000210: 464f 5220 4120 5041 5254 4943 554c 4152 FOR A PARTICULAR │ │ │ │ +00000220: 2050 5552 504f 5345 2e20 2053 6565 2074 PURPOSE. See t │ │ │ │ +00000230: 6865 0a23 2020 2047 4e55 2047 656e 6572 he.# GNU Gener │ │ │ │ +00000240: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens │ │ │ │ +00000250: 6520 666f 7220 6d6f 7265 2064 6574 6169 e for more detai │ │ │ │ +00000260: 6c73 2e0a 230a 2320 2020 596f 7520 7368 ls..#.# You sh │ │ │ │ +00000270: 6f75 6c64 2068 6176 6520 7265 6365 6976 ould have receiv │ │ │ │ +00000280: 6564 2061 2063 6f70 7920 6f66 2074 6865 ed a copy of the │ │ │ │ +00000290: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ │ +000002a0: 6c69 6320 4c69 6365 6e73 650a 2320 2020 lic License.# │ │ │ │ +000002b0: 616c 6f6e 6720 7769 7468 2074 6869 7320 along with this │ │ │ │ +000002c0: 7072 6f67 7261 6d2e 2020 4966 206e 6f74 program. If not │ │ │ │ +000002d0: 2c20 7365 6520 3c68 7474 703a 2f2f 7777 , see ..#...my $VE │ │ │ │ +00000300: 5253 494f 4e20 3d20 2724 4964 2420 273b RSION = '$Id$ '; │ │ │ │ +00000310: 0a70 7573 6820 4056 4552 5349 4f4e 2c20 .push @VERSION, │ │ │ │ +00000320: 2456 4552 5349 4f4e 3b0a 6d79 2028 2456 $VERSION;.my ($V │ │ │ │ +00000330: 4552 5349 4f4e 704e 616d 652c 2024 5645 ERSIONpName, $VE │ │ │ │ +00000340: 5253 494f 4e73 766e 4944 2920 3d20 2456 RSIONsvnID) = $V │ │ │ │ +00000350: 4552 5349 4f4e 203d 7e20 2f49 643a 5c73 ERSION =~ /Id:\s │ │ │ │ +00000360: 2b28 5c53 2b29 5c73 2b28 5c64 2b29 2f3b +(\S+)\s+(\d+)/; │ │ │ │ +00000370: 0a24 6d61 696e 3a3a 5354 4f52 4542 4143 .$main::STOREBAC │ │ │ │ +00000380: 4b55 5056 4552 5349 4f4e 203d 2075 6e64 KUPVERSION = und │ │ │ │ +00000390: 6566 3b0a 0a0a 7573 6520 7374 7269 6374 ef;...use strict │ │ │ │ +000003a0: 3b0a 7573 6520 7761 726e 696e 6773 3b0a ;.use warnings;. │ │ │ │ +000003b0: 0a0a 7573 6520 4469 6765 7374 3a3a 4d44 ..use Digest::MD │ │ │ │ +000003c0: 3520 7177 286d 6435 5f68 6578 293b 0a75 5 qw(md5_hex);.u │ │ │ │ +000003d0: 7365 2046 636e 746c 2071 7728 4f5f 5244 se Fcntl qw(O_RD │ │ │ │ +000003e0: 5752 204f 5f43 5245 4154 293b 0a75 7365 WR O_CREAT);.use │ │ │ │ +000003f0: 2046 696c 653a 3a43 6f70 793b 0a75 7365 File::Copy;.use │ │ │ │ +00000400: 2050 4f53 4958 3b0a 0a0a 7375 6220 6c69 POSIX;...sub li │ │ │ │ +00000410: 6250 6174 680a 7b0a 2020 2020 6d79 2024 bPath.{. my $ │ │ │ │ +00000420: 6669 6c65 203d 2073 6869 6674 3b0a 0a20 file = shift;.. │ │ │ │ +00000430: 2020 206d 7920 2464 6972 3b0a 0a20 2020 my $dir;.. │ │ │ │ +00000440: 2023 2046 616c 6c73 2044 6174 6569 2073 # Falls Datei s │ │ │ │ +00000450: 656c 6273 7420 6569 6e20 7379 6d6c 696e elbst ein symlin │ │ │ │ +00000460: 6b20 6973 742c 2073 6f6c 616e 6765 2066 k ist, solange f │ │ │ │ +00000470: 6f6c 6765 6e2c 2062 6973 2061 7566 6765 olgen, bis aufge │ │ │ │ +00000480: 6cf6 7374 0a20 2020 2069 6620 282d 6620 l.st. if (-f │ │ │ │ +00000490: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh │ │ │ │ +000004a0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file).. │ │ │ │ +000004b0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link │ │ │ │ +000004c0: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file │ │ │ │ +000004d0: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub │ │ │ │ +000004e0: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1) │ │ │ │ +000004f0: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne "/").. {. │ │ │ │ +00000500: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\ │ │ │ │ +00000510: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 /]+$/$link/;.. │ │ │ │ +00000520: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. │ │ │ │ +00000530: 2020 207b 0a09 0924 6669 6c65 203d 2024 {...$file = $ │ │ │ │ +00000540: 6c69 6e6b 3b0a 0920 2020 207d 0a09 7d0a link;.. }..}. │ │ │ │ +00000550: 0a09 2824 6469 722c 2024 6669 6c65 2920 ..($dir, $file) │ │ │ │ +00000560: 3d20 2673 706c 6974 4669 6c65 4469 7228 = &splitFileDir( │ │ │ │ +00000570: 2466 696c 6529 3b0a 0924 6669 6c65 203d $file);..$file = │ │ │ │ +00000580: 2022 2f24 6669 6c65 223b 0a20 2020 207d "/$file";. } │ │ │ │ +00000590: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ │ +000005a0: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR "< │ │ │ │ +000005b0: 2466 696c 653e 2064 6f65 7320 6e6f 7420 $file> does not │ │ │ │ +000005c0: 6578 6973 7421 5c6e 223b 0a09 6578 6974 exist!\n";..exit │ │ │ │ +000005d0: 2031 3b0a 2020 2020 7d0a 0a20 2020 2024 1;. }.. $ │ │ │ │ +000005e0: 6469 7220 2e3d 2022 2f2e 2e2f 6c69 6222 dir .= "/../lib" │ │ │ │ +000005f0: 3b20 2020 2020 2020 2020 2020 2320 5066 ; # Pf │ │ │ │ +00000600: 6164 207a 7520 6465 6e20 4269 626c 696f ad zu den Biblio │ │ │ │ +00000610: 7468 656b 656e 0a20 2020 206d 7920 246f theken. my $o │ │ │ │ +00000620: 6c64 4469 7220 3d20 602f 6269 6e2f 7077 ldDir = `/bin/pw │ │ │ │ +00000630: 6460 3b0a 2020 2020 6368 6f6d 7020 246f d`;. chomp $o │ │ │ │ +00000640: 6c64 4469 723b 0a20 2020 2069 6620 2863 ldDir;. if (c │ │ │ │ +00000650: 6864 6972 2024 6469 7229 0a20 2020 207b hdir $dir). { │ │ │ │ +00000660: 0a09 6d79 2024 6162 7344 6972 203d 2060 ..my $absDir = ` │ │ │ │ +00000670: 2f62 696e 2f70 7764 603b 0a09 6368 6f70 /bin/pwd`;..chop │ │ │ │ +00000680: 2024 6162 7344 6972 3b0a 0963 6864 6972 $absDir;..chdir │ │ │ │ +00000690: 2024 6f6c 6444 6972 3b0a 0a09 7265 7475 $oldDir;...retu │ │ │ │ +000006a0: 726e 2028 2673 706c 6974 4669 6c65 4469 rn (&splitFileDi │ │ │ │ +000006b0: 7228 2224 6162 7344 6972 2466 696c 6522 r("$absDir$file" │ │ │ │ +000006c0: 2929 3b0a 2020 2020 7d0a 2020 2020 656c ));. }. el │ │ │ │ +000006d0: 7365 0a20 2020 207b 0a09 7072 696e 7420 se. {..print │ │ │ │ +000006e0: 5354 4445 5252 2022 3c24 6469 723e 2064 STDERR "<$dir> d │ │ │ │ +000006f0: 6f65 7320 6e6f 7420 6578 6973 742c 2065 oes not exist, e │ │ │ │ +00000700: 7869 7469 6e67 5c6e 223b 0a20 2020 207d xiting\n";. } │ │ │ │ +00000710: 0a7d 0a73 7562 2073 706c 6974 4669 6c65 .}.sub splitFile │ │ │ │ +00000720: 4469 720a 7b0a 2020 2020 6d79 2024 6e61 Dir.{. my $na │ │ │ │ +00000730: 6d65 203d 2073 6869 6674 3b0a 0a20 2020 me = shift;.. │ │ │ │ +00000740: 2072 6574 7572 6e20 2827 2e27 2c20 246e return ('.', $n │ │ │ │ +00000750: 616d 6529 2075 6e6c 6573 7320 2824 6e61 ame) unless ($na │ │ │ │ +00000760: 6d65 203d 7e2f 5c2f 2f29 3b20 2020 2023 me =~/\//); # │ │ │ │ +00000770: 206e 7572 2065 696e 6661 6368 6572 2044 nur einfacher D │ │ │ │ +00000780: 6174 6569 6e61 6d65 0a0a 2020 2020 6d79 ateiname.. my │ │ │ │ +00000790: 2028 2464 6972 2c20 2466 696c 6529 203d ($dir, $file) = │ │ │ │ +000007a0: 2024 6e61 6d65 203d 7e20 2f5e 282e 2a29 $name =~ /^(.*) │ │ │ │ +000007b0: 5c2f 282e 2a29 242f 733b 0a20 2020 2024 \/(.*)$/s;. $ │ │ │ │ +000007c0: 6469 7220 3d20 272f 2720 6966 2028 2464 dir = '/' if ($d │ │ │ │ +000007d0: 6972 2065 7120 2727 293b 2020 2020 2020 ir eq ''); │ │ │ │ +000007e0: 2020 2020 2020 2020 2020 2020 2023 2067 # g │ │ │ │ +000007f0: 696c 742c 2066 616c 6c73 207a 2e42 2e20 ilt, falls z.B. │ │ │ │ +00000800: 2f66 696c 656e 616d 650a 2020 2020 7265 /filename. re │ │ │ │ +00000810: 7475 726e 2028 2464 6972 2c20 2466 696c turn ($dir, $fil │ │ │ │ +00000820: 6529 3b0a 7d0a 6d79 2028 2472 6571 2c20 e);.}.my ($req, │ │ │ │ +00000830: 2470 726f 6729 203d 2026 6c69 6250 6174 $prog) = &libPat │ │ │ │ +00000840: 6828 2430 293b 0a70 7573 6820 4049 4e43 h($0);.push @INC │ │ │ │ +00000850: 2c20 2224 7265 7122 3b0a 0a72 6571 7569 , "$req";..requi │ │ │ │ +00000860: 7265 2027 6368 6563 6b50 6172 616d 322e re 'checkParam2. │ │ │ │ +00000870: 706c 273b 0a72 6571 7569 7265 2027 6368 pl';.require 'ch │ │ │ │ +00000880: 6563 6b4f 626a 5061 722e 706c 273b 0a72 eckObjPar.pl';.r │ │ │ │ +00000890: 6571 7569 7265 2027 7072 4c6f 672e 706c equire 'prLog.pl │ │ │ │ +000008a0: 273b 0a72 6571 7569 7265 2027 7665 7273 ';.require 'vers │ │ │ │ +000008b0: 696f 6e2e 706c 273b 0a72 6571 7569 7265 ion.pl';.require │ │ │ │ +000008c0: 2027 6669 6c65 4469 722e 706c 273b 0a72 'fileDir.pl';.r │ │ │ │ +000008d0: 6571 7569 7265 2027 666f 726b 5072 6f63 equire 'forkProc │ │ │ │ +000008e0: 2e70 6c27 3b0a 7265 7175 6972 6520 2768 .pl';.require 'h │ │ │ │ +000008f0: 756d 616e 5265 6164 2e70 6c27 3b0a 7265 umanRead.pl';.re │ │ │ │ +00000900: 7175 6972 6520 2764 6174 6554 6f6f 6c73 quire 'dateTools │ │ │ │ +00000910: 2e70 6c27 3b0a 7265 7175 6972 6520 2765 .pl';.require 'e │ │ │ │ +00000920: 7661 6c54 6f6f 6c73 2e70 6c27 3b0a 7265 valTools.pl';.re │ │ │ │ +00000930: 7175 6972 6520 2773 746f 7265 4261 636b quire 'storeBack │ │ │ │ +00000940: 7570 4c69 622e 706c 273b 0a0a 6d79 2024 upLib.pl';..my $ │ │ │ │ +00000950: 6368 6563 6b53 756d 4669 6c65 203d 2027 checkSumFile = ' │ │ │ │ +00000960: 2e6d 6435 4368 6563 6b53 756d 7327 3b0a .md5CheckSums';. │ │ │ │ +00000970: 0a3d 6865 6164 3120 4e41 4d45 0a0a 7374 .=head1 NAME..st │ │ │ │ +00000980: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa │ │ │ │ +00000990: 636b 7570 2e70 6c20 2d20 6368 6563 6b73 ckup.pl - checks │ │ │ │ +000009a0: 2069 6620 6120 6669 6c65 2069 6e20 7468 if a file in th │ │ │ │ +000009b0: 6520 6261 636b 7570 2069 7320 6d69 7373 e backup is miss │ │ │ │ +000009c0: 696e 6720 6f72 2063 6f72 7275 7074 6564 ing or corrupted │ │ │ │ +000009d0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI │ │ │ │ +000009e0: 530a 0a09 7374 6f72 6542 6163 6b75 7043 S...storeBackupC │ │ │ │ +000009f0: 6865 636b 4261 636b 7570 2e70 6c20 2d63 heckBackup.pl -c │ │ │ │ +00000a00: 2062 6163 6b75 7044 6972 205b 2d76 206c backupDir [-v l │ │ │ │ +00000a10: 6576 656c 5d20 5b2d 7020 6e75 6d62 6572 evel] [-p number │ │ │ │ +00000a20: 5d20 5b2d 695d 0a0a 3d68 6561 6431 2044 ] [-i]..=head1 D │ │ │ │ +00000a30: 4553 4352 4950 5449 4f4e 0a0a 5468 6973 ESCRIPTION..This │ │ │ │ +00000a40: 2070 726f 6772 616d 2063 616c 6375 6c61 program calcula │ │ │ │ +00000a50: 7465 7320 6d64 3520 7375 6d73 2066 726f tes md5 sums fro │ │ │ │ +00000a60: 6d20 7468 6520 6669 6c65 7320 696e 2074 m the files in t │ │ │ │ +00000a70: 6865 2062 6163 6b75 7020 616e 6420 636f he backup and co │ │ │ │ +00000a80: 6d70 6172 6573 0a74 6865 6d20 7769 7468 mpares.them with │ │ │ │ +00000a90: 206d 6435 2073 756d 7320 7374 6f72 6564 md5 sums stored │ │ │ │ +00000aa0: 2062 7920 7374 6f72 6542 6163 6b75 702e by storeBackup. │ │ │ │ +00000ab0: 706c 2e0a 4974 2073 6f20 7769 6c6c 2072 pl..It so will r │ │ │ │ +00000ac0: 6563 6f67 6e69 7a65 2c20 6966 2061 2066 ecognize, if a f │ │ │ │ +00000ad0: 696c 6520 696e 2074 6865 2062 6163 6b75 ile in the backu │ │ │ │ +00000ae0: 7020 6973 206d 6973 7369 6e67 206f 7220 p is missing or │ │ │ │ +00000af0: 6375 7272 7570 7465 642e 0a49 7420 6f6e currupted..It on │ │ │ │ +00000b00: 6c79 2063 6865 636b 7320 706c 6169 6e20 ly checks plain │ │ │ │ +00000b10: 6669 6c65 732c 206e 6f74 2073 7065 6369 files, not speci │ │ │ │ +00000b20: 616c 2066 696c 6573 206f 7220 7379 6d62 al files or symb │ │ │ │ +00000b30: 6f6c 6963 206c 696e 6b73 2e0a 0a3d 6865 olic links...=he │ │ │ │ +00000b40: 6164 3120 4f50 5449 4f4e 530a 0a3d 6f76 ad1 OPTIONS..=ov │ │ │ │ +00000b50: 6572 2038 0a0a 3d69 7465 6d20 423c 2d2d er 8..=item B<-- │ │ │ │ +00000b60: 7072 696e 743e 0a0a 2020 2020 7072 696e print>.. prin │ │ │ │ +00000b70: 7420 636f 6e66 6967 7572 6174 696f 6e20 t configuration │ │ │ │ +00000b80: 7061 7261 6d65 7465 7273 2061 6e64 2073 parameters and s │ │ │ │ +00000b90: 746f 700a 0a3d 6974 656d 2042 3c2d 2d63 top..=item B<--c │ │ │ │ +00000ba0: 6865 636b 4469 723e 2c20 423c 2d63 3e0a heckDir>, B<-c>. │ │ │ │ +00000bb0: 0a20 2020 2062 6163 6b75 7020 6f72 2074 . backup or t │ │ │ │ +00000bc0: 6f70 206f 6620 6261 636b 7570 7320 746f op of backups to │ │ │ │ +00000bd0: 2063 6865 636b 0a0a 3d69 7465 6d20 423c check..=item B< │ │ │ │ +00000be0: 2d2d 6261 636b 7570 526f 6f74 3e2c 2042 --backupRoot>, B │ │ │ │ +00000bf0: 3c2d 623e 0a0a 2020 2020 726f 6f74 206f <-b>.. root o │ │ │ │ +00000c00: 6620 7374 6f72 6542 6163 6b75 7020 7472 f storeBackup tr │ │ │ │ +00000c10: 6565 2c20 6e6f 726d 616c 6c79 206e 6f74 ee, normally not │ │ │ │ +00000c20: 206e 6565 6465 640a 0a3d 6974 656d 2042 needed..=item B │ │ │ │ +00000c30: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<- │ │ │ │ +00000c40: 763e 0a0a 2020 2020 6765 6e65 7261 7465 v>.. generate │ │ │ │ +00000c50: 2073 7461 7469 7374 6963 730a 0a3d 6974 statistics..=it │ │ │ │ +00000c60: 656d 2042 3c2d 2d70 6172 4a6f 6273 3e2c em B<--parJobs>, │ │ │ │ +00000c70: 2042 3c2d 703e 0a0a 2020 2020 6e75 6d62 B<-p>.. numb │ │ │ │ +00000c80: 6572 206f 6620 7061 7261 6c6c 656c 206a er of parallel j │ │ │ │ +00000c90: 6f62 732c 2064 6566 6175 6c74 203d 2063 obs, default = c │ │ │ │ +00000ca0: 686f 7365 6e20 6175 746f 6d61 7469 6361 hosen automatica │ │ │ │ +00000cb0: 6c6c 790a 0a3d 6974 656d 2042 3c2d 693e lly..=item B<-i> │ │ │ │ +00000cc0: 2c20 3c2d 2d69 6e63 6c75 6465 5265 6e61 , <--includeRena │ │ │ │ +00000cd0: 6d65 6442 6163 6b75 7073 3e0a 0a20 2020 medBackups>.. │ │ │ │ +00000ce0: 2069 6e63 6c75 6465 2072 656e 616d 6564 include renamed │ │ │ │ +00000cf0: 2062 6163 6b75 7073 2069 6e74 6f20 7468 backups into th │ │ │ │ +00000d00: 6520 6368 6563 6b0a 2020 2020 7265 6e61 e check. rena │ │ │ │ +00000d10: 6d65 6420 6261 636b 7570 7320 6d75 7374 med backups must │ │ │ │ +00000d20: 2066 6f6c 6c6f 7720 7468 6520 636f 6e76 follow the conv │ │ │ │ +00000d30: 656e 7469 6f6e 203c 6261 636b 7570 4469 ention -.. │ │ │ │ +00000d50: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO │ │ │ │ +00000d60: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig │ │ │ │ +00000d70: 6874 2028 6329 2032 3030 382d 3230 3132 ht (c) 2008-2012 │ │ │ │ +00000d80: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef │ │ │ │ +00000d90: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM │ │ │ │ +00000da0: 4529 0a50 7562 6c69 7368 6564 2075 6e64 E).Published und │ │ │ │ +00000db0: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener │ │ │ │ +00000dc0: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens │ │ │ │ +00000dd0: 6520 7633 206f 7220 616e 7920 6c61 7465 e v3 or any late │ │ │ │ +00000de0: 7220 7665 7273 696f 6e0a 0a3d 6375 740a r version..=cut. │ │ │ │ +00000df0: 0a6d 7920 2448 656c 7020 3d20 6a6f 696e .my $Help = join │ │ │ │ +00000e00: 2827 272c 2067 7265 7028 212f 5e5c 732a ('', grep(!/^\s* │ │ │ │ +00000e10: 242f 2c20 6070 6f64 3274 6578 7420 2430 $/, `pod2text $0 │ │ │ │ +00000e20: 6029 293b 0a24 4865 6c70 203d 2022 6361 `));.$Help = "ca │ │ │ │ +00000e30: 6e6e 6f74 2066 696e 6420 706f 6432 7465 nnot find pod2te │ │ │ │ +00000e40: 7874 2c20 7365 6520 646f 6375 6d65 6e74 xt, see document │ │ │ │ +00000e50: 6174 696f 6e20 666f 7220 6465 7461 696c ation for detail │ │ │ │ +00000e60: 735c 6e22 0a20 2020 2075 6e6c 6573 7320 s\n". unless │ │ │ │ +00000e70: 2448 656c 703b 0a0a 2670 7269 6e74 5665 $Help;..&printVe │ │ │ │ +00000e80: 7273 696f 6e73 285c 4041 5247 562c 2027 rsions(\@ARGV, ' │ │ │ │ +00000e90: 2d56 2729 3b0a 0a6d 7920 2443 6865 636b -V');..my $Check │ │ │ │ +00000ea0: 5061 7220 3d0a 2020 2020 4368 6563 6b50 Par =. CheckP │ │ │ │ +00000eb0: 6172 616d 2d3e 6e65 7728 272d 616c 6c6f aram->new('-allo │ │ │ │ +00000ec0: 774c 6973 7473 2720 3d3e 2027 6e6f 272c wLists' => 'no', │ │ │ │ +00000ed0: 0a09 0920 2020 2027 2d6c 6973 7427 203d ... '-list' = │ │ │ │ +00000ee0: 3e20 5b4f 7074 696f 6e2d 3e6e 6577 2827 > [Option->new(' │ │ │ │ +00000ef0: 2d6e 616d 6527 203d 3e20 2763 6865 636b -name' => 'check │ │ │ │ +00000f00: 4261 636b 7570 272c 0a09 0909 0909 2020 Backup',...... │ │ │ │ +00000f10: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00000f20: 3e20 272d 6327 2c0a 0909 0909 0920 2020 > '-c',...... │ │ │ │ +00000f30: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +00000f40: 272d 2d63 6865 636b 4261 636b 7570 272c '--checkBackup', │ │ │ │ +00000f50: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ │ +00000f60: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ │ +00000f70: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +00000f80: 6e61 6d65 2720 3d3e 2027 7665 7262 6f73 name' => 'verbos │ │ │ │ +00000f90: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +00000fa0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d76 l_option' => '-v │ │ │ │ +00000fb0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00000fc0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7665 _alias' => '--ve │ │ │ │ +00000fd0: 7262 6f73 6527 292c 0a09 0909 094f 7074 rbose'),.....Opt │ │ │ │ +00000fe0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00000ff0: 203d 3e20 2770 6172 4a6f 6273 272c 0a09 => 'parJobs',.. │ │ │ │ +00001000: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +00001010: 696f 6e27 203d 3e20 272d 7027 2c0a 0909 ion' => '-p',... │ │ │ │ +00001020: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ │ +00001030: 7327 203d 3e20 272d 2d70 6172 4a6f 6273 s' => '--parJobs │ │ │ │ +00001040: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +00001050: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',.. │ │ │ │ +00001060: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ │ +00001070: 6e27 203d 3e20 275c 415b 312d 395d 5c64 n' => '\A[1-9]\d │ │ │ │ +00001080: 2a5c 5a27 292c 0a09 0909 094f 7074 696f *\Z'),.....Optio │ │ │ │ +00001090: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +000010a0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',...... │ │ │ │ +000010b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +000010c0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),. │ │ │ │ +000010d0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +000010e0: 272d 6e61 6d65 2720 3d3e 2027 696e 636c '-name' => 'incl │ │ │ │ +000010f0: 7564 6552 656e 616d 6564 4261 636b 7570 udeRenamedBackup │ │ │ │ +00001100: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ │ +00001110: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d69 l_option' => '-i │ │ │ │ +00001120: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001130: 5f61 6c69 6173 2720 3d3e 0a09 0909 0909 _alias' =>...... │ │ │ │ +00001140: 2020 2020 272d 2d69 6e63 6c75 6465 5265 '--includeRe │ │ │ │ +00001150: 6e61 6d65 6442 6163 6b75 7073 2729 0a09 namedBackups').. │ │ │ │ +00001160: 0920 2020 205d 0a20 2020 2029 3b0a 0a0a . ]. );... │ │ │ │ +00001170: 2443 6865 636b 5061 722d 3e63 6865 636b $CheckPar->check │ │ │ │ +00001180: 2827 2d61 7267 7627 203d 3e20 5c40 4152 ('-argv' => \@AR │ │ │ │ +00001190: 4756 2c0a 2020 2020 2020 2020 2020 2020 GV,. │ │ │ │ +000011a0: 2020 2020 2027 2d68 656c 7027 203d 3e20 '-help' => │ │ │ │ +000011b0: 2448 656c 700a 2020 2020 2020 2020 2020 $Help. │ │ │ │ +000011c0: 2020 2020 2020 2029 3b0a 0a23 2041 7573 );..# Aus │ │ │ │ +000011d0: 7765 7274 756e 6720 6465 7220 5061 7261 wertung der Para │ │ │ │ +000011e0: 6d65 7465 720a 6d79 2024 7072 696e 7420 meter.my $print │ │ │ │ +000011f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00001200: 4f70 7457 6974 686f 7574 5061 7228 2770 OptWithoutPar('p │ │ │ │ +00001210: 7269 6e74 2729 3b0a 6d79 2024 6261 636b rint');.my $back │ │ │ │ +00001220: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa │ │ │ │ +00001230: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00001240: 2827 6368 6563 6b42 6163 6b75 7027 293b ('checkBackup'); │ │ │ │ +00001250: 0a6d 7920 2470 6172 4a6f 6273 203d 2024 .my $parJobs = $ │ │ │ │ +00001260: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001270: 5769 7468 5061 7228 2770 6172 4a6f 6273 WithPar('parJobs │ │ │ │ +00001280: 2729 3b0a 6d79 2024 7665 7262 6f73 6520 ');.my $verbose │ │ │ │ +00001290: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000012a0: 4f70 7457 6974 686f 7574 5061 7228 2776 OptWithoutPar('v │ │ │ │ +000012b0: 6572 626f 7365 2729 3b0a 6d79 2024 696e erbose');.my $in │ │ │ │ +000012c0: 636c 7564 6552 656e 616d 6564 4261 636b cludeRenamedBack │ │ │ │ +000012d0: 7570 7320 3d0a 2020 2020 2443 6865 636b ups =. $Check │ │ │ │ +000012e0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ │ +000012f0: 7574 5061 7228 2769 6e63 6c75 6465 5265 utPar('includeRe │ │ │ │ +00001300: 6e61 6d65 6442 6163 6b75 7073 2729 3b0a namedBackups');. │ │ │ │ +00001310: 0a0a 756e 6c65 7373 2028 2470 6172 4a6f ..unless ($parJo │ │ │ │ +00001320: 6273 290a 7b0a 2020 2020 6c6f 6361 6c20 bs).{. local │ │ │ │ +00001330: 2a46 494c 453b 0a20 2020 2069 6620 286f *FILE;. if (o │ │ │ │ +00001340: 7065 6e28 4649 4c45 2c20 222f 7072 6f63 pen(FILE, "/proc │ │ │ │ +00001350: 2f63 7075 696e 666f 2229 290a 2020 2020 /cpuinfo")). │ │ │ │ +00001360: 7b0a 096d 7920 246c 3b0a 0924 7061 724a {..my $l;..$parJ │ │ │ │ +00001370: 6f62 7320 3d20 313b 0a09 7768 696c 6520 obs = 1;..while │ │ │ │ +00001380: 2824 6c20 3d20 3c46 494c 453e 290a 097b ($l = )..{ │ │ │ │ +00001390: 0a09 2020 2020 2470 6172 4a6f 6273 2b2b .. $parJobs++ │ │ │ │ +000013a0: 2069 6620 246c 203d 7e20 2f70 726f 6365 if $l =~ /proce │ │ │ │ +000013b0: 7373 6f72 2f3b 0a09 7d0a 0963 6c6f 7365 ssor/;..}..close │ │ │ │ +000013c0: 2846 494c 4529 3b0a 0924 7061 724a 6f62 (FILE);..$parJob │ │ │ │ +000013d0: 7320 2a3d 2033 3b0a 2020 2020 7d0a 2020 s *= 3;. }. │ │ │ │ +000013e0: 2020 2470 6172 4a6f 6273 203d 2033 2069 $parJobs = 3 i │ │ │ │ +000013f0: 6620 2470 6172 4a6f 6273 203c 2033 3b0a f $parJobs < 3;. │ │ │ │ +00001400: 7d0a 0a0a 0a69 6620 2824 7072 696e 7429 }....if ($print) │ │ │ │ +00001410: 0a7b 0a20 2020 2024 4368 6563 6b50 6172 .{. $CheckPar │ │ │ │ +00001420: 2d3e 7072 696e 7428 293b 0a20 2020 2065 ->print();. e │ │ │ │ +00001430: 7869 7420 303b 0a7d 0a0a 6d79 2024 7072 xit 0;.}..my $pr │ │ │ │ +00001440: 4c20 3d20 7072 696e 744c 6f67 2d3e 6e65 L = printLog->ne │ │ │ │ +00001450: 7728 272d 6b69 6e64 2720 3d3e 205b 2749 w('-kind' => ['I │ │ │ │ +00001460: 3a49 4e46 4f27 2c20 2757 3a57 4152 4e49 :INFO', 'W:WARNI │ │ │ │ +00001470: 4e47 272c 2027 453a 4552 524f 5227 2c0a NG', 'E:ERROR',. │ │ │ │ +00001480: 0909 0909 2020 2020 2753 3a53 5441 5449 .... 'S:STATI │ │ │ │ +00001490: 5354 4943 272c 2027 443a 4445 4255 4727 STIC', 'D:DEBUG' │ │ │ │ +000014a0: 2c20 2756 3a56 4552 5349 4f4e 275d 293b , 'V:VERSION']); │ │ │ │ +000014b0: 0a6d 7920 2470 724c 6f67 203d 2070 7269 .my $prLog = pri │ │ │ │ +000014c0: 6e74 4c6f 674d 756c 7469 706c 652d 3e6e ntLogMultiple->n │ │ │ │ +000014d0: 6577 2827 2d70 724c 6f67 7327 203d 3e20 ew('-prLogs' => │ │ │ │ +000014e0: 5b24 7072 4c5d 293b 0a0a 0a24 6261 636b [$prL]);...$back │ │ │ │ +000014f0: 7570 4469 7220 3d7e 2073 2f5c 2f2b 5c5a upDir =~ s/\/+\Z │ │ │ │ +00001500: 2f2f 3b20 2020 2020 2023 2072 656d 6f76 //; # remov │ │ │ │ +00001510: 6520 2f20 6174 2074 6865 2065 6e64 0a24 e / at the end.$ │ │ │ │ +00001520: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00001530: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ │ +00001540: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00001550: 6d69 7373 696e 6720 7061 7261 6d65 7465 missing paramete │ │ │ │ +00001560: 7220 6261 636b 7570 4469 725c 6e24 4865 r backupDir\n$He │ │ │ │ +00001570: 6c70 225d 2c0a 0920 2020 2020 2027 2d65 lp"],.. '-e │ │ │ │ +00001580: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u │ │ │ │ +00001590: 6e6c 6573 7320 6465 6669 6e65 6420 2462 nless defined $b │ │ │ │ +000015a0: 6163 6b75 7044 6972 3b0a 2470 724c 6f67 ackupDir;.$prLog │ │ │ │ +000015b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000015c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. ' │ │ │ │ +000015d0: 2d73 7472 2720 3d3e 205b 2262 6163 6b75 -str' => ["backu │ │ │ │ +000015e0: 7044 6972 2064 6972 6563 746f 7279 203c pDir directory < │ │ │ │ +000015f0: 2462 6163 6b75 7044 6972 3e20 646f 6573 $backupDir> does │ │ │ │ +00001600: 206e 6f74 2065 7869 7374 2022 202e 0a09 not exist " ... │ │ │ │ +00001610: 2020 2020 2020 226f 7220 6973 206e 6f74 "or is not │ │ │ │ +00001620: 2061 6363 6573 6962 6c65 225d 2c0a 0920 accesible"],.. │ │ │ │ +00001630: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +00001640: 3129 0a20 2020 2075 6e6c 6573 7320 2d72 1). unless -r │ │ │ │ +00001650: 2024 6261 636b 7570 4469 723b 0a0a 6966 $backupDir;..if │ │ │ │ +00001660: 2028 2d6c 2024 6261 636b 7570 4469 7229 (-l $backupDir) │ │ │ │ +00001670: 0a7b 0a20 2020 206d 7920 246e 6577 4c69 .{. my $newLi │ │ │ │ +00001680: 6e6b 203d 203a 3a61 6273 6f6c 7574 6550 nk = ::absoluteP │ │ │ │ +00001690: 6174 6828 2462 6163 6b75 7044 6972 293b ath($backupDir); │ │ │ │ +000016a0: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +000016b0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +000016c0: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +000016d0: 0a09 0920 205b 2272 6570 6c61 6369 6e67 ... ["replacing │ │ │ │ +000016e0: 2073 796d 6c69 6e6b 203c 2462 6163 6b75 symlink <$backu │ │ │ │ +000016f0: 7044 6972 3e20 7769 7468 203c 246e 6577 pDir> with <$new │ │ │ │ +00001700: 4c69 6e6b 3e22 5d29 3b0a 2020 2020 2462 Link>"]);. $b │ │ │ │ +00001710: 6163 6b75 7044 6972 203d 2024 6e65 774c ackupDir = $newL │ │ │ │ +00001720: 696e 6b3b 0a7d 0a0a 0a6d 7920 2461 6c6c ink;.}...my $all │ │ │ │ +00001730: 4c69 6e6b 7320 3d20 6c61 7465 4c69 6e6b Links = lateLink │ │ │ │ +00001740: 732d 3e6e 6577 2827 2d64 6972 7327 203d s->new('-dirs' = │ │ │ │ +00001750: 3e20 5b24 6261 636b 7570 4469 725d 2c0a > [$backupDir],. │ │ │ │ +00001760: 0909 0920 2020 2020 2027 2d6b 696e 6427 ... '-kind' │ │ │ │ +00001770: 203d 3e20 2772 6563 7572 7369 7665 5365 => 'recursiveSe │ │ │ │ +00001780: 6172 6368 272c 0a09 0909 2020 2020 2020 arch',.... │ │ │ │ +00001790: 272d 7665 7262 6f73 6527 203d 3e20 302c '-verbose' => 0, │ │ │ │ +000017a0: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +000017b0: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,... │ │ │ │ +000017c0: 0920 2020 2020 2027 2d69 6e63 6c75 6465 . '-include │ │ │ │ +000017d0: 5265 6e61 6d65 6442 6163 6b75 7044 6972 RenamedBackupDir │ │ │ │ +000017e0: 7327 203d 3e0a 0909 0920 2020 2020 2024 s' =>.... $ │ │ │ │ +000017f0: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa │ │ │ │ +00001800: 636b 7570 7329 3b0a 0a6d 7920 2461 6c6c ckups);..my $all │ │ │ │ +00001810: 5374 6275 4469 7273 203d 2024 616c 6c4c StbuDirs = $allL │ │ │ │ +00001820: 696e 6b73 2d3e 6765 7441 6c6c 5374 6f72 inks->getAllStor │ │ │ │ +00001830: 6542 6163 6b75 7044 6972 7328 293b 0a0a eBackupDirs();.. │ │ │ │ +00001840: 0a23 2066 696c 7465 7220 7468 6520 7265 .# filter the re │ │ │ │ +00001850: 6c65 7661 6e74 2062 6163 6b75 7073 0a6d levant backups.m │ │ │ │ +00001860: 7920 2840 6469 7273 546f 4368 6563 6b29 y (@dirsToCheck) │ │ │ │ +00001870: 203d 2073 6f72 7420 7b20 2461 2063 6d70 = sort { $a cmp │ │ │ │ +00001880: 2024 6220 7d20 4024 616c 6c53 7462 7544 $b } @$allStbuD │ │ │ │ +00001890: 6972 733b 0a0a 0a24 7072 4c6f 672d 3e70 irs;...$prLog->p │ │ │ │ +000018a0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +000018b0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ │ +000018c0: 7227 203d 3e20 5b22 6e6f 7468 696e 6720 r' => ["nothing │ │ │ │ +000018d0: 746f 2073 6561 7263 682c 206e 6f20 6261 to search, no ba │ │ │ │ +000018e0: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories │ │ │ │ +000018f0: 2073 7065 6369 6669 6564 225d 2c0a 0920 specified"],.. │ │ │ │ +00001900: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +00001910: 3129 0a20 2020 2075 6e6c 6573 7320 4064 1). unless @d │ │ │ │ +00001920: 6972 7354 6f43 6865 636b 3b0a 0a7b 0a20 irsToCheck;..{. │ │ │ │ +00001930: 2020 206d 7920 2840 6f75 742c 2040 642c my (@out, @d, │ │ │ │ +00001940: 2024 6429 3b0a 2020 2020 2840 6429 203d $d);. (@d) = │ │ │ │ +00001950: 2028 4064 6972 7354 6f43 6865 636b 293b (@dirsToCheck); │ │ │ │ +00001960: 0a20 2020 2028 4064 6972 7354 6f43 6865 . (@dirsToChe │ │ │ │ +00001970: 636b 2920 3d20 2829 3b0a 2020 2020 666f ck) = ();. fo │ │ │ │ +00001980: 7265 6163 6820 2464 2028 4064 290a 2020 reach $d (@d). │ │ │ │ +00001990: 2020 7b0a 0975 6e6c 6573 7320 282d 7220 {..unless (-r │ │ │ │ +000019a0: 2224 642f 2463 6865 636b 5375 6d46 696c "$d/$checkSumFil │ │ │ │ +000019b0: 6522 206f 720a 0909 2d72 2022 2464 2f24 e" or...-r "$d/$ │ │ │ │ +000019c0: 6368 6563 6b53 756d 4669 6c65 2e62 7a32 checkSumFile.bz2 │ │ │ │ +000019d0: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f ")..{.. $prLo │ │ │ │ +000019e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000019f0: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +00001a00: 7374 7227 203d 3e20 5b22 6e6f 2072 6561 str' => ["no rea │ │ │ │ +00001a10: 6461 626c 6520 3c24 6368 6563 6b53 756d dable <$checkSum │ │ │ │ +00001a20: 4669 6c65 3e20 696e 2022 202e 0a09 0909 File> in " ..... │ │ │ │ +00001a30: 0920 2020 2020 223c 2464 3e20 2e2e 2e20 . "<$d> ... │ │ │ │ +00001a40: 736b 6970 7069 6e67 225d 293b 0a09 2020 skipping"]);.. │ │ │ │ +00001a50: 2020 6e65 7874 3b0a 097d 0a09 6966 2028 next;..}..if ( │ │ │ │ +00001a60: 2d65 2022 2464 2f24 6368 6563 6b53 756d -e "$d/$checkSum │ │ │ │ +00001a70: 4669 6c65 2e6e 6f74 4669 6e69 7368 6564 File.notFinished │ │ │ │ +00001a80: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f ")..{.. $prLo │ │ │ │ +00001a90: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00001aa0: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +00001ab0: 7374 7227 203d 3e20 5b22 6261 636b 7570 str' => ["backup │ │ │ │ +00001ac0: 203c 2464 3e20 6e6f 7420 6669 6e69 7368 <$d> not finish │ │ │ │ +00001ad0: 6564 2220 2e0a 0909 0909 2020 2020 2022 ed" ...... " │ │ │ │ +00001ae0: 202e 2e2e 2073 6b69 7070 696e 6722 5d29 ... skipping"]) │ │ │ │ +00001af0: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}. │ │ │ │ +00001b00: 0969 6620 282d 6520 2224 642f 2e73 746f .if (-e "$d/.sto │ │ │ │ +00001b10: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li │ │ │ │ +00001b20: 6e6b 4669 6c65 2e62 7a32 2229 0a09 7b0a nkFile.bz2")..{. │ │ │ │ +00001b30: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00001b40: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00001b50: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ │ +00001b60: 3e0a 0909 0920 205b 2262 6163 6b75 7020 >.... ["backup │ │ │ │ +00001b70: 3c24 643e 206e 6565 6473 2072 756e 206f <$d> needs run o │ │ │ │ +00001b80: 6620 2220 2e0a 0909 0920 2020 227e 2f73 f " ..... "~/s │ │ │ │ +00001b90: 766e 2f73 7462 752f 6269 6e2f 7374 6f72 vn/stbu/bin/stor │ │ │ │ +00001ba0: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac │ │ │ │ +00001bb0: 6b75 702e 706c 2220 2e0a 0909 0920 2020 kup.pl" ..... │ │ │ │ +00001bc0: 2220 2e2e 2e20 736b 6970 7069 6e67 225d " ... skipping"] │ │ │ │ +00001bd0: 293b 0a09 2020 2020 6e65 7874 3b0a 097d );.. next;..} │ │ │ │ +00001be0: 0a0a 0970 7573 6820 406f 7574 2c20 2220 ...push @out, " │ │ │ │ +00001bf0: 2024 6422 3b0a 0970 7573 6820 4064 6972 $d";..push @dir │ │ │ │ +00001c00: 7354 6f43 6865 636b 2c20 2464 3b0a 2020 sToCheck, $d;. │ │ │ │ +00001c10: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog-> │ │ │ │ +00001c20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00001c30: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str' │ │ │ │ +00001c40: 203d 3e20 5b22 6261 636b 7570 2064 6972 => ["backup dir │ │ │ │ +00001c50: 6563 746f 7269 6573 2074 6f20 6368 6563 ectories to chec │ │ │ │ +00001c60: 6b22 2c20 406f 7574 5d29 3b0a 7d0a 0a6d k", @out]);.}..m │ │ │ │ +00001c70: 7920 2470 6172 466f 726b 203d 2070 6172 y $parFork = par │ │ │ │ +00001c80: 616c 6c65 6c46 6f72 6b2d 3e6e 6577 2827 allelFork->new(' │ │ │ │ +00001c90: 2d6d 6178 5061 7261 6c6c 656c 2720 3d3e -maxParallel' => │ │ │ │ +00001ca0: 2024 7061 724a 6f62 732c 0a09 0909 0927 $parJobs,.....' │ │ │ │ +00001cb0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ │ +00001cc0: 6729 3b0a 6d79 2024 7469 6e79 5363 6865 g);.my $tinySche │ │ │ │ +00001cd0: 6420 3d20 7469 6e79 5761 6974 5363 6865 d = tinyWaitSche │ │ │ │ +00001ce0: 6475 6c65 722d 3e6e 6577 2827 2d70 724c duler->new('-prL │ │ │ │ +00001cf0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +00001d00: 0a6d 7920 2472 6373 6620 3d20 756e 6465 .my $rcsf = unde │ │ │ │ +00001d10: 663b 0a6d 7920 2824 6d65 7461 2c20 2470 f;.my ($meta, $p │ │ │ │ +00001d20: 6f73 7466 6978 2c20 2475 6e63 6f6d 7072 ostfix, $uncompr │ │ │ │ +00001d30: 2c20 4075 6e63 6f6d 7072 5061 7229 3b0a , @uncomprPar);. │ │ │ │ +00001d40: 6d79 2024 6469 7254 6f43 6865 636b 203d my $dirToCheck = │ │ │ │ +00001d50: 2075 6e64 6566 3b0a 6d79 2024 6a6f 6254 undef;.my $jobT │ │ │ │ +00001d60: 6f44 6f20 3d20 313b 0a6d 7920 2470 6172 oDo = 1;.my $par │ │ │ │ +00001d70: 466f 726b 546f 446f 203d 2030 3b0a 2320 ForkToDo = 0;.# │ │ │ │ +00001d80: 7374 6174 6973 7469 6361 6c20 6461 7461 statistical data │ │ │ │ +00001d90: 2070 6572 2062 6163 6b75 703a 0a6d 7920 per backup:.my │ │ │ │ +00001da0: 2463 6865 636b 6564 4669 6c65 7320 3d20 $checkedFiles = │ │ │ │ +00001db0: 303b 0a6d 7920 2463 6865 636b 6564 4669 0;.my $checkedFi │ │ │ │ +00001dc0: 6c65 7353 697a 6520 3d20 303b 2023 2075 lesSize = 0; # u │ │ │ │ +00001dd0: 7365 7320 7369 7a65 206f 6620 6461 7461 ses size of data │ │ │ │ +00001de0: 2069 6e20 6261 636b 7570 2028 6567 2e20 in backup (eg. │ │ │ │ +00001df0: 636f 6d70 7265 7373 6564 290a 6d79 2024 compressed).my $ │ │ │ │ +00001e00: 6c69 6e6b 6564 4669 6c65 7320 3d20 303b linkedFiles = 0; │ │ │ │ +00001e10: 0a6d 7920 246c 696e 6b65 6446 696c 6573 .my $linkedFiles │ │ │ │ +00001e20: 5369 7a65 203d 2030 3b20 2023 2075 7365 Size = 0; # use │ │ │ │ +00001e30: 7320 7369 7a65 206f 6620 6461 7461 2069 s size of data i │ │ │ │ +00001e40: 6e20 6261 636b 7570 2028 6567 2e20 636f n backup (eg. co │ │ │ │ +00001e50: 6d70 7265 7373 6564 290a 2320 7375 6d73 mpressed).# sums │ │ │ │ +00001e60: 206f 6620 7374 6174 6973 7469 6361 6c20 of statistical │ │ │ │ +00001e70: 6461 7461 3a0a 6d79 2024 6368 6563 6b65 data:.my $checke │ │ │ │ +00001e80: 6446 696c 6573 416c 6c20 3d20 303b 0a6d dFilesAll = 0;.m │ │ │ │ +00001e90: 7920 2463 6865 636b 6564 4669 6c65 7353 y $checkedFilesS │ │ │ │ +00001ea0: 697a 6541 6c6c 203d 2030 3b0a 6d79 2024 izeAll = 0;.my $ │ │ │ │ +00001eb0: 6c69 6e6b 6564 4669 6c65 7341 6c6c 203d linkedFilesAll = │ │ │ │ +00001ec0: 2030 3b0a 6d79 2024 6c69 6e6b 6564 4669 0;.my $linkedFi │ │ │ │ +00001ed0: 6c65 7353 697a 6541 6c6c 203d 2030 3b0a lesSizeAll = 0;. │ │ │ │ +00001ee0: 0a23 2025 7573 6564 496e 6f64 6573 0a23 .# %usedInodes.# │ │ │ │ +00001ef0: 2320 6966 2069 6e6f 6465 2077 6173 2063 # if inode was c │ │ │ │ +00001f00: 6865 636b 6564 2c20 7468 6520 696e 6f64 hecked, the inod │ │ │ │ +00001f10: 6520 6973 2075 7365 6420 6173 206b 6579 e is used as key │ │ │ │ +00001f20: 2c20 7661 6c75 6520 7365 7420 746f 2031 , value set to 1 │ │ │ │ +00001f30: 0a23 2320 6966 206d 6435 7375 6d20 6368 .## if md5sum ch │ │ │ │ +00001f40: 6563 6b20 6f66 2066 696c 6520 6861 7320 eck of file has │ │ │ │ +00001f50: 6469 6666 6572 656e 7420 7661 6c75 6520 different value │ │ │ │ +00001f60: 7468 6174 2073 746f 7265 6420 696e 202e that stored in . │ │ │ │ +00001f70: 6d64 3543 6865 636b 5375 6d73 2c0a 2323 md5CheckSums,.## │ │ │ │ +00001f80: 2069 6e6f 6465 2069 7320 6d61 726b 6564 inode is marked │ │ │ │ +00001f90: 2061 7320 2763 6f72 7275 7074 2720 616e as 'corrupt' an │ │ │ │ +00001fa0: 6420 6465 6c65 7465 6420 6672 6f6d 2074 d deleted from t │ │ │ │ +00001fb0: 6861 7420 7461 626c 6520 2873 6f20 616c hat table (so al │ │ │ │ +00001fc0: 6c20 6166 6665 6374 6564 0a23 2320 6669 l affected.## fi │ │ │ │ +00001fd0: 6c65 7320 6172 6520 7265 706f 7274 6564 les are reported │ │ │ │ +00001fe0: 290a 2320 2566 696c 6573 4672 6f6d 4d44 ).# %filesFromMD │ │ │ │ +00001ff0: 3543 6865 636b 5375 6d46 696c 650a 2323 5CheckSumFile.## │ │ │ │ +00002000: 206b 6579 203d 2072 656c 6174 6976 2066 key = relativ f │ │ │ │ +00002010: 696c 656e 616d 650a 2323 2076 616c 7565 ilename.## value │ │ │ │ +00002020: 2070 7265 2d73 6574 2074 6f20 312c 2074 pre-set to 1, t │ │ │ │ +00002030: 6865 6e20 6368 616e 6765 6420 746f 2032 hen changed to 2 │ │ │ │ +00002040: 2069 6620 6669 6c65 2069 7320 6e6f 7420 if file is not │ │ │ │ +00002050: 6120 626c 6f63 6b65 6420 6669 6c65 0a23 a blocked file.# │ │ │ │ +00002060: 2320 7375 6220 6368 6563 6b41 6c6c 4669 # sub checkAllFi │ │ │ │ +00002070: 6c65 7320 6368 6563 6b73 2c20 6966 2061 les checks, if a │ │ │ │ +00002080: 6c6c 2066 696c 6573 2069 6e20 7468 6520 ll files in the │ │ │ │ +00002090: 6261 636b 7570 2061 7265 2069 6e20 7468 backup are in th │ │ │ │ +000020a0: 6973 2068 6173 680a 2320 2575 7365 6442 is hash.# %usedB │ │ │ │ +000020b0: 6c6f 636b 496e 6f64 6573 0a23 2320 7374 lockInodes.## st │ │ │ │ +000020c0: 6f72 6573 2069 6e6f 6465 7320 616c 7265 ores inodes alre │ │ │ │ +000020d0: 6164 7920 7573 6564 2069 6e20 626c 6f63 ady used in bloc │ │ │ │ +000020e0: 6b73 0a6d 7920 2825 7573 6564 496e 6f64 ks.my (%usedInod │ │ │ │ +000020f0: 6573 2c20 2566 696c 6573 4672 6f6d 4d44 es, %filesFromMD │ │ │ │ +00002100: 3543 6865 636b 5375 6d46 696c 652c 2024 5CheckSumFile, $ │ │ │ │ +00002110: 7072 6576 4469 7254 6f43 6865 636b 2c0a prevDirToCheck,. │ │ │ │ +00002120: 2020 2020 2575 7365 6442 6c6f 636b 496e %usedBlockIn │ │ │ │ +00002130: 6f64 6573 293b 0a0a 7768 696c 6520 2864 odes);..while (d │ │ │ │ +00002140: 6566 696e 6564 2824 7263 7366 2920 6f72 efined($rcsf) or │ │ │ │ +00002150: 2024 6a6f 6254 6f44 6f20 3e20 3020 6f72 $jobToDo > 0 or │ │ │ │ +00002160: 2024 7061 7246 6f72 6b54 6f44 6f20 3e20 $parForkToDo > │ │ │ │ +00002170: 3029 0a7b 0a23 7072 696e 7420 222d 2d6f 0).{.#print "--o │ │ │ │ +00002180: 2d2d 302d 2d6a 6f62 546f 446f 3d24 6a6f --0--jobToDo=$jo │ │ │ │ +00002190: 6254 6f44 6f2d 7061 7246 6f72 6b54 6f44 bToDo-parForkToD │ │ │ │ +000021a0: 6f3d 2470 6172 466f 726b 546f 446f 2d5c o=$parForkToDo-\ │ │ │ │ +000021b0: 6e22 3b0a 2020 2020 2323 2323 2323 2323 n";. ######## │ │ │ │ +000021c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000021d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000021e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000021f0: 2323 2323 0a20 2020 206d 7920 246f 6c64 ####. my $old │ │ │ │ +00002200: 203d 2024 7061 7246 6f72 6b2d 3e63 6865 = $parFork->che │ │ │ │ +00002210: 636b 4f6e 6528 293b 0a20 2020 2069 6620 ckOne();. if │ │ │ │ +00002220: 2824 6f6c 6429 0a20 2020 207b 0a09 6d79 ($old). {..my │ │ │ │ +00002230: 2028 2474 6d70 4e2c 2024 666e 2920 3d20 ($tmpN, $fn) = │ │ │ │ +00002240: 407b 246f 6c64 2d3e 6765 7428 272d 7768 @{$old->get('-wh │ │ │ │ +00002250: 6174 2720 3d3e 2027 696e 666f 2729 7d3b at' => 'info')}; │ │ │ │ +00002260: 0a23 7072 696e 7420 222d 2d6f 2d2d 312d .#print "--o--1- │ │ │ │ +00002270: 2466 6e2d 5c6e 223b 0a09 6c6f 6361 6c20 $fn-\n";..local │ │ │ │ +00002280: 2a49 4e3b 0a09 756e 6c65 7373 2028 263a *IN;..unless (&: │ │ │ │ +00002290: 3a77 6169 7446 6f72 4669 6c65 2824 746d :waitForFile($tm │ │ │ │ +000022a0: 704e 2920 6f72 0a09 096f 7065 6e28 494e pN) or...open(IN │ │ │ │ +000022b0: 2c20 223c 2024 746d 704e 2229 290a 097b , "< $tmpN"))..{ │ │ │ │ +000022c0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +000022d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000022e0: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ │ +000022f0: 3d3e 205b 2263 616e 6e6f 7420 6f70 656e => ["cannot open │ │ │ │ +00002300: 2074 656d 706f 7261 7279 2069 6e66 6f72 temporary infor │ │ │ │ +00002310: 6d61 7469 6f6e 2066 696c 6520 2220 2e0a mation file " .. │ │ │ │ +00002320: 0909 0909 2020 2020 2022 3c24 746d 704e .... "<$tmpN │ │ │ │ +00002330: 3e20 6f66 203c 2466 6e3e 225d 293b 0a09 > of <$fn>"]);.. │ │ │ │ +00002340: 2020 2020 6e65 7874 3b0a 097d 0a23 7072 next;..}.#pr │ │ │ │ +00002350: 696e 7420 222d 2d6f 2d2d 322d 5c6e 223b int "--o--2-\n"; │ │ │ │ +00002360: 0a09 6d79 2024 6c3b 0a09 7768 696c 6520 ..my $l;..while │ │ │ │ +00002370: 2824 6c20 3d20 3c49 4e3e 290a 097b 0a09 ($l = )..{.. │ │ │ │ +00002380: 2020 2020 6368 6f70 2024 6c3b 0a23 7072 chop $l;.#pr │ │ │ │ +00002390: 696e 7420 222d 2d6f 2d2d 332d 2d24 6c5c int "--o--3--$l\ │ │ │ │ +000023a0: 6e22 3b0a 0920 2020 206d 7920 2824 7768 n";.. my ($wh │ │ │ │ +000023b0: 6174 2c20 406c 2920 3d20 7370 6c69 7428 at, @l) = split( │ │ │ │ +000023c0: 2f5c 732f 2c20 246c 2c20 3229 3b0a 0920 /\s/, $l, 2);.. │ │ │ │ +000023d0: 2020 2069 6620 2824 7768 6174 2065 7120 if ($what eq │ │ │ │ +000023e0: 2763 6f72 7275 7074 2729 0a09 2020 2020 'corrupt').. │ │ │ │ +000023f0: 7b0a 0909 6465 6c65 7465 2024 7573 6564 {...delete $used │ │ │ │ +00002400: 496e 6f64 6573 7b24 6c5b 305d 7d3b 0a09 Inodes{$l[0]};.. │ │ │ │ +00002410: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00002420: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00002430: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00002440: 3e0a 0909 0920 2020 2020 205b 226d 6435 >.... ["md5 │ │ │ │ +00002450: 2073 756d 206d 6973 6d61 7463 6820 666f sum mismatch fo │ │ │ │ +00002460: 7220 3c24 666e 3e22 5d29 3b0a 0920 2020 r <$fn>"]);.. │ │ │ │ +00002470: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($ │ │ │ │ +00002480: 7768 6174 2065 7120 2765 7272 6f72 7327 what eq 'errors' │ │ │ │ +00002490: 290a 0920 2020 207b 0a09 0924 7072 4c6f ).. {...$prLo │ │ │ │ +000024a0: 672d 3e61 6464 456e 636f 756e 7465 7228 g->addEncounter( │ │ │ │ +000024b0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +000024c0: 0909 0909 2020 2020 2027 2d61 6464 2720 .... '-add' │ │ │ │ +000024d0: 3d3e 2024 6c5b 305d 293b 0a09 2020 2020 => $l[0]);.. │ │ │ │ +000024e0: 7d0a 0920 2020 2065 6c73 6966 2028 2477 }.. elsif ($w │ │ │ │ +000024f0: 6861 7420 6571 2027 6368 6563 6b65 6446 hat eq 'checkedF │ │ │ │ +00002500: 696c 6573 2729 0a09 2020 2020 7b0a 0909 iles').. {... │ │ │ │ +00002510: 2463 6865 636b 6564 4669 6c65 7320 2b3d $checkedFiles += │ │ │ │ +00002520: 2024 6c5b 305d 3b0a 0920 2020 207d 0a09 $l[0];.. }.. │ │ │ │ +00002530: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what │ │ │ │ +00002540: 2065 7120 2763 6865 636b 6564 4669 6c65 eq 'checkedFile │ │ │ │ +00002550: 7353 697a 6527 290a 0920 2020 207b 0a09 sSize').. {.. │ │ │ │ +00002560: 0924 6368 6563 6b65 6446 696c 6573 5369 .$checkedFilesSi │ │ │ │ +00002570: 7a65 202b 3d20 246c 5b30 5d3b 0a09 2020 ze += $l[0];.. │ │ │ │ +00002580: 2020 7d0a 0920 2020 2065 6c73 6966 2028 }.. elsif ( │ │ │ │ +00002590: 2477 6861 7420 6571 2027 6c69 6e6b 6564 $what eq 'linked │ │ │ │ +000025a0: 4669 6c65 7327 290a 0920 2020 207b 0a09 Files').. {.. │ │ │ │ +000025b0: 0924 6c69 6e6b 6564 4669 6c65 7320 2b3d .$linkedFiles += │ │ │ │ +000025c0: 2024 6c5b 305d 3b0a 0920 2020 207d 0a09 $l[0];.. }.. │ │ │ │ +000025d0: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what │ │ │ │ +000025e0: 2065 7120 276c 696e 6b65 6446 696c 6573 eq 'linkedFiles │ │ │ │ +000025f0: 5369 7a65 2729 0a09 2020 2020 7b0a 0909 Size').. {... │ │ │ │ +00002600: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize │ │ │ │ +00002610: 202b 3d20 246c 5b30 5d3b 0a09 2020 2020 += $l[0];.. │ │ │ │ +00002620: 7d0a 0920 2020 2065 6c73 6966 2028 2477 }.. elsif ($w │ │ │ │ +00002630: 6861 7420 6571 2027 6361 6c63 6564 496e hat eq 'calcedIn │ │ │ │ +00002640: 6f64 6573 2729 0a09 2020 2020 7b0a 0909 odes').. {... │ │ │ │ +00002650: 7768 696c 6520 2824 6c20 3d20 3c49 4e3e while ($l = │ │ │ │ +00002660: 290a 0909 7b0a 0909 2020 2020 6368 6f70 )...{... chop │ │ │ │ +00002670: 2024 6c3b 0a09 0920 2020 2024 7573 6564 $l;... $used │ │ │ │ +00002680: 426c 6f63 6b49 6e6f 6465 737b 246c 7d20 BlockInodes{$l} │ │ │ │ +00002690: 3d20 313b 0a09 097d 0a09 096c 6173 743b = 1;...}...last; │ │ │ │ +000026a0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +000026b0: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo │ │ │ │ +000026c0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000026d0: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... │ │ │ │ +000026e0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +000026f0: 2020 2020 205b 2275 6e6b 6e6f 776e 2063 ["unknown c │ │ │ │ +00002700: 6f6d 6d61 6e64 203c 2477 6861 743e 2069 ommand <$what> i │ │ │ │ +00002710: 6e20 696e 666f 726d 6174 696f 6e20 6669 n information fi │ │ │ │ +00002720: 6c65 2022 202e 0a09 0909 2020 2020 2020 le " ..... │ │ │ │ +00002730: 2022 3c24 746d 704e 3e20 6f66 2024 666e "<$tmpN> of $fn │ │ │ │ +00002740: 225d 293b 0a09 2020 2020 7d0a 097d 0a0a "]);.. }..}.. │ │ │ │ +00002750: 0963 6c6f 7365 2849 4e29 3b0a 0975 6e6c .close(IN);..unl │ │ │ │ +00002760: 696e 6b20 2474 6d70 4e3b 0a20 2020 207d ink $tmpN;. } │ │ │ │ +00002770: 0a23 7072 696e 7420 222d 2d6f 2d2d 342d .#print "--o--4- │ │ │ │ +00002780: 5c6e 223b 0a0a 2020 2020 2323 2323 2323 \n";.. ###### │ │ │ │ +00002790: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027c0: 2323 2323 2323 0a20 2020 2024 6a6f 6254 ######. $jobT │ │ │ │ +000027d0: 6f44 6f20 3d20 4064 6972 7354 6f43 6865 oDo = @dirsToChe │ │ │ │ +000027e0: 636b 3b0a 2020 2020 6966 2028 2824 7263 ck;. if (($rc │ │ │ │ +000027f0: 7366 206f 7220 246a 6f62 546f 446f 203e sf or $jobToDo > │ │ │ │ +00002800: 2030 2920 616e 6420 2470 6172 466f 726b 0) and $parFork │ │ │ │ +00002810: 2d3e 6765 744e 6f46 7265 6545 6e74 7269 ->getNoFreeEntri │ │ │ │ +00002820: 6573 2829 203e 2030 290a 2020 2020 7b0a es() > 0). {. │ │ │ │ +00002830: 2370 7269 6e74 2022 2d2d 2d2d 302d 2d2d #print "----0--- │ │ │ │ +00002840: 2d6f 7065 6e20 2464 6972 546f 4368 6563 -open $dirToChec │ │ │ │ +00002850: 6b2f 2463 6865 636b 5375 6d46 696c 655c k/$checkSumFile\ │ │ │ │ +00002860: 6e22 3b0a 2370 7269 6e74 2022 2d2d 2d6a n";.#print "---j │ │ │ │ +00002870: 6f62 546f 446f 203d 2024 6a6f 6254 6f44 obToDo = $jobToD │ │ │ │ +00002880: 6f2c 2066 7265 6545 6e74 7269 6573 3d22 o, freeEntries=" │ │ │ │ +00002890: 2c20 2470 6172 466f 726b 2d3e 6765 744e , $parFork->getN │ │ │ │ +000028a0: 6f46 7265 6545 6e74 7269 6573 2829 2c20 oFreeEntries(), │ │ │ │ +000028b0: 222c 2075 7365 6445 6e74 7269 6573 3d22 ", usedEntries=" │ │ │ │ +000028c0: 2c20 2470 6172 466f 726b 2d3e 6765 744e , $parFork->getN │ │ │ │ +000028d0: 6f55 7365 6445 6e74 7269 6573 2829 2c20 oUsedEntries(), │ │ │ │ +000028e0: 225c 6e22 3b0a 0a09 756e 6c65 7373 2028 "\n";...unless ( │ │ │ │ +000028f0: 2472 6373 6629 0a09 7b0a 2370 7269 6e74 $rcsf)..{.#print │ │ │ │ +00002900: 2022 2d2d 2d30 2e30 352d 2d2d 5c6e 223b "---0.05---\n"; │ │ │ │ +00002910: 0a09 2020 2020 2320 5761 6974 2075 6e74 .. # Wait unt │ │ │ │ +00002920: 696c 2061 6c6c 2066 696c 6573 206f 6620 il all files of │ │ │ │ +00002930: 7468 6520 7072 6576 696f 7573 2061 6374 the previous act │ │ │ │ +00002940: 7561 6c20 6261 636b 7570 0a09 2020 2020 ual backup.. │ │ │ │ +00002950: 2320 6172 6520 6361 6c63 756c 6174 6564 # are calculated │ │ │ │ +00002960: 2e20 446f 2074 6869 7320 736f 200a 0920 . Do this so .. │ │ │ │ +00002970: 2020 2069 6620 2824 7061 7246 6f72 6b2d if ($parFork- │ │ │ │ +00002980: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie │ │ │ │ +00002990: 7328 2920 213d 2030 290a 0920 2020 207b s() != 0).. { │ │ │ │ +000029a0: 0a09 0924 7469 6e79 5363 6865 642d 3e77 ...$tinySched->w │ │ │ │ +000029b0: 6169 7428 293b 0a09 096e 6578 743b 0a09 ait();...next;.. │ │ │ │ +000029c0: 2020 2020 7d0a 0920 2020 2023 206f 6b2c }.. # ok, │ │ │ │ +000029d0: 2061 6c6c 2066 696c 6573 206f 6620 6f6c all files of ol │ │ │ │ +000029e0: 6420 6261 636b 7570 2061 7265 2066 696e d backup are fin │ │ │ │ +000029f0: 6973 6865 642c 0a09 2020 2020 2320 6e6f ished,.. # no │ │ │ │ +00002a00: 7720 6265 6769 6e20 7769 7468 2074 6865 w begin with the │ │ │ │ +00002a10: 206e 6578 7420 6f6e 650a 0920 2020 2069 next one.. i │ │ │ │ +00002a20: 6620 2824 7665 7262 6f73 6529 0a09 2020 f ($verbose).. │ │ │ │ +00002a30: 2020 7b0a 0909 2670 7269 6e74 5374 6174 {...&printStat │ │ │ │ +00002a40: 2824 7072 4c6f 672c 2027 272c 2024 6368 ($prLog, '', $ch │ │ │ │ +00002a50: 6563 6b65 6446 696c 6573 2c20 2463 6865 eckedFiles, $che │ │ │ │ +00002a60: 636b 6564 4669 6c65 7353 697a 652c 0a09 ckedFilesSize,.. │ │ │ │ +00002a70: 0909 2020 2024 6c69 6e6b 6564 4669 6c65 .. $linkedFile │ │ │ │ +00002a80: 732c 2024 6c69 6e6b 6564 4669 6c65 7353 s, $linkedFilesS │ │ │ │ +00002a90: 697a 6529 0a09 0920 2020 2069 6620 2463 ize)... if $c │ │ │ │ +00002aa0: 6865 636b 6564 4669 6c65 7353 697a 6520 heckedFilesSize │ │ │ │ +00002ab0: 2b20 246c 696e 6b65 6446 696c 6573 5369 + $linkedFilesSi │ │ │ │ +00002ac0: 7a65 203e 2030 3b0a 0909 2020 2020 2020 ze > 0;... │ │ │ │ +00002ad0: 2020 2320 6176 6f69 6420 6669 7273 7420 # avoid first │ │ │ │ +00002ae0: 7072 696e 746f 7574 2062 6566 6f72 6520 printout before │ │ │ │ +00002af0: 616e 7920 6368 6563 6b73 0a09 2020 2020 any checks.. │ │ │ │ +00002b00: 7d0a 0920 2020 2024 6368 6563 6b65 6446 }.. $checkedF │ │ │ │ +00002b10: 696c 6573 416c 6c20 2b3d 2024 6368 6563 ilesAll += $chec │ │ │ │ +00002b20: 6b65 6446 696c 6573 3b0a 0920 2020 2024 kedFiles;.. $ │ │ │ │ +00002b30: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize │ │ │ │ +00002b40: 416c 6c20 2b3d 2024 6368 6563 6b65 6446 All += $checkedF │ │ │ │ +00002b50: 696c 6573 5369 7a65 3b0a 0920 2020 2024 ilesSize;.. $ │ │ │ │ +00002b60: 6c69 6e6b 6564 4669 6c65 7341 6c6c 202b linkedFilesAll + │ │ │ │ +00002b70: 3d20 246c 696e 6b65 6446 696c 6573 3b0a = $linkedFiles;. │ │ │ │ +00002b80: 0920 2020 2024 6c69 6e6b 6564 4669 6c65 . $linkedFile │ │ │ │ +00002b90: 7353 697a 6541 6c6c 202b 3d20 246c 696e sSizeAll += $lin │ │ │ │ +00002ba0: 6b65 6446 696c 6573 5369 7a65 3b0a 0a09 kedFilesSize;... │ │ │ │ +00002bb0: 2020 2020 2463 6865 636b 6564 4669 6c65 $checkedFile │ │ │ │ +00002bc0: 7320 3d20 303b 0a09 2020 2020 2463 6865 s = 0;.. $che │ │ │ │ +00002bd0: 636b 6564 4669 6c65 7353 697a 6520 3d20 ckedFilesSize = │ │ │ │ +00002be0: 303b 0a09 2020 2020 246c 696e 6b65 6446 0;.. $linkedF │ │ │ │ +00002bf0: 696c 6573 203d 2030 3b0a 0920 2020 2024 iles = 0;.. $ │ │ │ │ +00002c00: 6c69 6e6b 6564 4669 6c65 7353 697a 6520 linkedFilesSize │ │ │ │ +00002c10: 3d20 303b 0a0a 2370 7269 6e74 2022 2d2d = 0;..#print "-- │ │ │ │ +00002c20: 2d30 2e31 2d2d 2d5c 6e22 3b0a 0920 2020 -0.1---\n";.. │ │ │ │ +00002c30: 2024 7072 6576 4469 7254 6f43 6865 636b $prevDirToCheck │ │ │ │ +00002c40: 203d 2024 6469 7254 6f43 6865 636b 3b0a = $dirToCheck;. │ │ │ │ +00002c50: 0920 2020 2024 6469 7254 6f43 6865 636b . $dirToCheck │ │ │ │ +00002c60: 203d 2073 6869 6674 2040 6469 7273 546f = shift @dirsTo │ │ │ │ +00002c70: 4368 6563 6b3b 0a09 2020 2020 6c61 7374 Check;.. last │ │ │ │ +00002c80: 2075 6e6c 6573 7320 2464 6972 546f 4368 unless $dirToCh │ │ │ │ +00002c90: 6563 6b3b 0a0a 2370 7269 6e74 2022 2d2d eck;..#print "-- │ │ │ │ +00002ca0: 2d30 2e32 2d2d 2d5c 6e22 3b0a 0a09 2020 -0.2---\n";... │ │ │ │ +00002cb0: 2020 2663 6865 636b 416c 6c46 696c 6573 &checkAllFiles │ │ │ │ +00002cc0: 2824 7072 6576 4469 7254 6f43 6865 636b ($prevDirToCheck │ │ │ │ +00002cd0: 2c20 5c25 6669 6c65 7346 726f 6d4d 4435 , \%filesFromMD5 │ │ │ │ +00002ce0: 4368 6563 6b53 756d 4669 6c65 2c0a 0909 CheckSumFile,... │ │ │ │ +00002cf0: 0920 2020 2470 724c 6f67 290a 0909 6966 . $prLog)...if │ │ │ │ +00002d00: 2025 6669 6c65 7346 726f 6d4d 4435 4368 %filesFromMD5Ch │ │ │ │ +00002d10: 6563 6b53 756d 4669 6c65 3b0a 0920 2020 eckSumFile;.. │ │ │ │ +00002d20: 2025 6669 6c65 7346 726f 6d4d 4435 4368 %filesFromMD5Ch │ │ │ │ +00002d30: 6563 6b53 756d 4669 6c65 203d 2028 293b eckSumFile = (); │ │ │ │ +00002d40: 0a0a 0920 2020 2024 7263 7366 203d 2072 ... $rcsf = r │ │ │ │ +00002d50: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile- │ │ │ │ +00002d60: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF │ │ │ │ +00002d70: 696c 6527 203d 3e0a 0909 0909 0920 2022 ile' =>...... " │ │ │ │ +00002d80: 2464 6972 546f 4368 6563 6b2f 2463 6865 $dirToCheck/$che │ │ │ │ +00002d90: 636b 5375 6d46 696c 6522 2c0a 0909 0909 ckSumFile",..... │ │ │ │ +00002da0: 0920 2027 2d70 724c 6f67 2720 3d3e 2024 . '-prLog' => $ │ │ │ │ +00002db0: 7072 4c6f 6729 3b0a 0920 2020 2024 706f prLog);.. $po │ │ │ │ +00002dc0: 7374 6669 7820 3d20 2472 6373 662d 3e67 stfix = $rcsf->g │ │ │ │ +00002dd0: 6574 496e 666f 5769 7468 5061 7228 2770 etInfoWithPar('p │ │ │ │ +00002de0: 6f73 7466 6978 2729 3b0a 0920 2020 206d ostfix');.. m │ │ │ │ +00002df0: 7920 2477 7269 7465 4578 636c 7564 654c y $writeExcludeL │ │ │ │ +00002e00: 6f67 203d 2024 7263 7366 2d3e 6765 7449 og = $rcsf->getI │ │ │ │ +00002e10: 6e66 6f57 6974 6850 6172 2827 7772 6974 nfoWithPar('writ │ │ │ │ +00002e20: 6545 7863 6c75 6465 4c6f 6727 293b 0a09 eExcludeLog');.. │ │ │ │ +00002e30: 2020 2020 6d79 2024 6c6f 6749 6e42 6163 my $logInBac │ │ │ │ +00002e40: 6b75 7044 6972 203d 2024 7263 7366 2d3e kupDir = $rcsf-> │ │ │ │ +00002e50: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar(' │ │ │ │ +00002e60: 6c6f 6749 6e42 6163 6b75 7044 6972 2729 logInBackupDir') │ │ │ │ +00002e70: 3b0a 0920 2020 206d 7920 2463 6f6d 7072 ;.. my $compr │ │ │ │ +00002e80: 6573 734c 6f67 496e 4261 636b 7570 4469 essLogInBackupDi │ │ │ │ +00002e90: 7220 3d0a 0909 2472 6373 662d 3e67 6574 r =...$rcsf->get │ │ │ │ +00002ea0: 496e 666f 5769 7468 5061 7228 2763 6f6d InfoWithPar('com │ │ │ │ +00002eb0: 7072 6573 734c 6f67 496e 4261 636b 7570 pressLogInBackup │ │ │ │ +00002ec0: 4469 7227 293b 0a09 2020 2020 6d79 2024 Dir');.. my $ │ │ │ │ +00002ed0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +00002ee0: 6c65 4e61 6d65 203d 0a09 0924 7263 7366 leName =...$rcsf │ │ │ │ +00002ef0: 2d3e 6765 7449 6e66 6f57 6974 6850 6172 ->getInfoWithPar │ │ │ │ +00002f00: 2827 6c6f 6749 6e42 6163 6b75 7044 6972 ('logInBackupDir │ │ │ │ +00002f10: 4669 6c65 4e61 6d65 2729 3b0a 0920 2020 FileName');.. │ │ │ │ +00002f20: 2024 6c6f 6749 6e42 6163 6b75 7044 6972 $logInBackupDir │ │ │ │ +00002f30: 4669 6c65 4e61 6d65 202e 3d20 272e 627a FileName .= '.bz │ │ │ │ +00002f40: 3227 0a09 0969 6620 2463 6f6d 7072 6573 2'...if $compres │ │ │ │ +00002f50: 734c 6f67 496e 4261 636b 7570 4469 7220 sLogInBackupDir │ │ │ │ +00002f60: 6571 2027 7965 7327 3b0a 0920 2020 2020 eq 'yes';.. │ │ │ │ +00002f70: 2824 756e 636f 6d70 722c 2040 756e 636f ($uncompr, @unco │ │ │ │ +00002f80: 6d70 7250 6172 2920 3d20 407b 2472 6373 mprPar) = @{$rcs │ │ │ │ +00002f90: 662d 3e67 6574 496e 666f 5769 7468 5061 f->getInfoWithPa │ │ │ │ +00002fa0: 7228 2775 6e63 6f6d 7072 6573 7327 297d r('uncompress')} │ │ │ │ +00002fb0: 3b0a 0a09 2020 2020 2466 696c 6573 4672 ;... $filesFr │ │ │ │ +00002fc0: 6f6d 4d44 3543 6865 636b 5375 6d46 696c omMD5CheckSumFil │ │ │ │ +00002fd0: 657b 272e 6d64 3542 6c6f 636b 4368 6563 e{'.md5BlockChec │ │ │ │ +00002fe0: 6b53 756d 732e 627a 3227 7d20 3d20 313b kSums.bz2'} = 1; │ │ │ │ +00002ff0: 0a09 2020 2020 2466 696c 6573 4672 6f6d .. $filesFrom │ │ │ │ +00003000: 4d44 3543 6865 636b 5375 6d46 696c 657b MD5CheckSumFile{ │ │ │ │ +00003010: 272e 6d64 3543 6865 636b 5375 6d73 2e62 '.md5CheckSums.b │ │ │ │ +00003020: 7a32 277d 203d 2031 3b0a 0920 2020 2024 z2'} = 1;.. $ │ │ │ │ +00003030: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec │ │ │ │ +00003040: 6b53 756d 4669 6c65 7b27 2e6d 6435 4368 kSumFile{'.md5Ch │ │ │ │ +00003050: 6563 6b53 756d 7327 7d20 3d20 313b 0a09 eckSums'} = 1;.. │ │ │ │ +00003060: 2020 2020 2466 696c 6573 4672 6f6d 4d44 $filesFromMD │ │ │ │ +00003070: 3543 6865 636b 5375 6d46 696c 657b 272e 5CheckSumFile{'. │ │ │ │ +00003080: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf │ │ │ │ +00003090: 6f27 7d20 3d20 313b 0a09 2020 2020 2466 o'} = 1;.. $f │ │ │ │ +000030a0: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check │ │ │ │ +000030b0: 5375 6d46 696c 657b 272e 7374 6f72 6542 SumFile{'.storeB │ │ │ │ +000030c0: 6163 6b75 704c 696e 6b73 277d 203d 2031 ackupLinks'} = 1 │ │ │ │ +000030d0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro │ │ │ │ +000030e0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile │ │ │ │ +000030f0: 7b27 2e73 746f 7265 4261 636b 7570 2e6e {'.storeBackup.n │ │ │ │ +00003100: 6f74 5361 7665 642e 627a 3227 7d20 3d20 otSaved.bz2'} = │ │ │ │ +00003110: 310a 0909 6966 2024 7772 6974 6545 7863 1...if $writeExc │ │ │ │ +00003120: 6c75 6465 4c6f 6720 6571 2027 7965 7327 ludeLog eq 'yes' │ │ │ │ +00003130: 3b0a 0920 2020 2069 6620 2824 6c6f 6749 ;.. if ($logI │ │ │ │ +00003140: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y │ │ │ │ +00003150: 6573 2729 0a09 2020 2020 7b0a 0909 6966 es').. {...if │ │ │ │ +00003160: 2028 246c 6f67 496e 4261 636b 7570 4469 ($logInBackupDi │ │ │ │ +00003170: 7246 696c 654e 616d 6529 0a09 097b 0a09 rFileName)...{.. │ │ │ │ +00003180: 0920 2020 2024 6669 6c65 7346 726f 6d4d . $filesFromM │ │ │ │ +00003190: 4435 4368 6563 6b53 756d 4669 6c65 7b24 D5CheckSumFile{$ │ │ │ │ +000031a0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ │ +000031b0: 6c65 4e61 6d65 7d20 3d20 313b 0a09 097d leName} = 1;...} │ │ │ │ +000031c0: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... │ │ │ │ +000031d0: 2020 2466 696c 6573 4672 6f6d 4d44 3543 $filesFromMD5C │ │ │ │ +000031e0: 6865 636b 5375 6d46 696c 657b 272e 7374 heckSumFile{'.st │ │ │ │ +000031f0: 6f72 6542 6163 6b75 702e 6c6f 6727 7d20 oreBackup.log'} │ │ │ │ +00003200: 3d20 313b 0a09 0920 2020 2024 6669 6c65 = 1;... $file │ │ │ │ +00003210: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum │ │ │ │ +00003220: 4669 6c65 7b27 2e73 746f 7265 4261 636b File{'.storeBack │ │ │ │ +00003230: 7570 2e6e 6f74 5361 7665 642e 627a 3227 up.notSaved.bz2' │ │ │ │ +00003240: 7d20 3d20 313b 0a0a 0909 2020 2020 2466 } = 1;.... $f │ │ │ │ +00003250: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check │ │ │ │ +00003260: 5375 6d46 696c 657b 272e 7374 6f72 6542 SumFile{'.storeB │ │ │ │ +00003270: 6163 6b75 702e 6c6f 672e 627a 3227 7d20 ackup.log.bz2'} │ │ │ │ +00003280: 3d20 310a 0909 0969 6620 2463 6f6d 7072 = 1....if $compr │ │ │ │ +00003290: 6573 734c 6f67 496e 4261 636b 7570 4469 essLogInBackupDi │ │ │ │ +000032a0: 7220 6571 2027 7965 7327 3b0a 0909 7d0a r eq 'yes';...}. │ │ │ │ +000032b0: 0920 2020 207d 0a0a 0920 2020 2024 7072 . }... $pr │ │ │ │ +000032c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000032d0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ │ +000032e0: 272d 7374 7227 203d 3e20 5b22 2d2d 2063 '-str' => ["-- c │ │ │ │ +000032f0: 6865 636b 696e 6720 3c24 6469 7254 6f43 hecking <$dirToC │ │ │ │ +00003300: 6865 636b 3e20 2e2e 2e22 5d29 3b0a 2309 heck> ..."]);.#. │ │ │ │ +00003310: 0969 6620 2476 6572 626f 7365 3b0a 097d .if $verbose;..} │ │ │ │ +00003320: 0a09 6d79 2028 246d 6435 7375 6d2c 2024 ..my ($md5sum, $ │ │ │ │ +00003330: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode │ │ │ │ +00003340: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, │ │ │ │ +00003350: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, │ │ │ │ +00003360: 2461 7469 6d65 2c0a 0920 2020 2024 7369 $atime,.. $si │ │ │ │ +00003370: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, │ │ │ │ +00003380: 246d 6f64 652c 2024 6629 3b0a 0969 6620 $mode, $f);..if │ │ │ │ +00003390: 2828 2824 6d64 3573 756d 2c20 2463 6f6d ((($md5sum, $com │ │ │ │ +000033a0: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $ │ │ │ │ +000033b0: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct │ │ │ │ +000033c0: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at │ │ │ │ +000033d0: 696d 652c 0a09 0920 2473 697a 652c 2024 ime,... $size, $ │ │ │ │ +000033e0: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode │ │ │ │ +000033f0: 2c20 2466 2920 3d20 2472 6373 662d 3e6e , $f) = $rcsf->n │ │ │ │ +00003400: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0). │ │ │ │ +00003410: 097b 0a09 2020 2020 2466 202e 3d20 2470 .{.. $f .= $p │ │ │ │ +00003420: 6f73 7466 6978 2069 6620 2463 6f6d 7072 ostfix if $compr │ │ │ │ +00003430: 2065 7120 2763 273b 0a09 2020 2020 2466 eq 'c';.. $f │ │ │ │ +00003440: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check │ │ │ │ +00003450: 5375 6d46 696c 657b 2466 7d20 3d20 313b SumFile{$f} = 1; │ │ │ │ +00003460: 0a23 7072 696e 7420 226e 6577 2066 696c .#print "new fil │ │ │ │ +00003470: 6520 3c24 663e 5c6e 223b 0a23 7072 696e e <$f>\n";.#prin │ │ │ │ +00003480: 7420 2220 2020 2024 6469 7254 6f43 6865 t " $dirToChe │ │ │ │ +00003490: 636b 2f24 6368 6563 6b53 756d 4669 6c65 ck/$checkSumFile │ │ │ │ +000034a0: 5c6e 223b 0a09 2020 2020 6d79 2024 6669 \n";.. my $fi │ │ │ │ +000034b0: 6c65 6e61 6d65 203d 2022 2464 6972 546f lename = "$dirTo │ │ │ │ +000034c0: 4368 6563 6b2f 2466 223b 0a09 2020 2020 Check/$f";.. │ │ │ │ +000034d0: 6966 2028 6c65 6e67 7468 2824 6d64 3573 if (length($md5s │ │ │ │ +000034e0: 756d 2920 3d3d 2033 3229 0a09 2020 2020 um) == 32).. │ │ │ │ +000034f0: 7b0a 2370 7269 6e74 2022 2d31 2d24 636f {.#print "-1-$co │ │ │ │ +00003500: 6d70 722d 5c6e 223b 0a09 0969 6620 2824 mpr-\n";...if ($ │ │ │ │ +00003510: 636f 6d70 7220 6e65 2027 6227 290a 0909 compr ne 'b')... │ │ │ │ +00003520: 7b0a 0909 2020 2020 2466 696c 6573 4672 {... $filesFr │ │ │ │ +00003530: 6f6d 4d44 3543 6865 636b 5375 6d46 696c omMD5CheckSumFil │ │ │ │ +00003540: 657b 2466 7d20 3d20 323b 2023 206e 6f74 e{$f} = 2; # not │ │ │ │ +00003550: 2061 2062 6c6f 636b 6564 2066 696c 650a a blocked file. │ │ │ │ +00003560: 0909 2020 2020 6d79 2028 2469 6e6f 6465 .. my ($inode │ │ │ │ +00003570: 2c20 2473 697a 6542 6163 6b75 7029 203d , $sizeBackup) = │ │ │ │ +00003580: 2028 7374 6174 2824 6669 6c65 6e61 6d65 (stat($filename │ │ │ │ +00003590: 2929 5b31 2c37 5d3b 0a23 7072 696e 7420 ))[1,7];.#print │ │ │ │ +000035a0: 222d 322d 2069 6e6f 6465 203d 2024 696e "-2- inode = $in │ │ │ │ +000035b0: 6f64 652c 2024 665c 6e22 3b0a 0909 2020 ode, $f\n";... │ │ │ │ +000035c0: 2020 6966 2028 2469 6e6f 6465 290a 0909 if ($inode)... │ │ │ │ +000035d0: 2020 2020 7b0a 2370 7269 6e74 2022 2d32 {.#print "-2 │ │ │ │ +000035e0: 2e35 2d20 696e 6f64 6573 203d 2022 2c20 .5- inodes = ", │ │ │ │ +000035f0: 6a6f 696e 2827 2027 2c20 6b65 7973 2025 join(' ', keys % │ │ │ │ +00003600: 7573 6564 496e 6f64 6573 292c 2022 5c6e usedInodes), "\n │ │ │ │ +00003610: 223b 0a09 0909 6966 2028 6578 6973 7473 ";....if (exists │ │ │ │ +00003620: 2024 7573 6564 496e 6f64 6573 7b24 696e $usedInodes{$in │ │ │ │ +00003630: 6f64 657d 290a 0909 097b 0a23 7072 696e ode})....{.#prin │ │ │ │ +00003640: 7420 222d 332d 5c6e 223b 0a09 0909 2020 t "-3-\n";.... │ │ │ │ +00003650: 2020 2b2b 246c 696e 6b65 6446 696c 6573 ++$linkedFiles │ │ │ │ +00003660: 3b0a 0909 0920 2020 2024 6c69 6e6b 6564 ;.... $linked │ │ │ │ +00003670: 4669 6c65 7353 697a 6520 2b3d 2024 7369 FilesSize += $si │ │ │ │ +00003680: 7a65 4261 636b 7570 3b0a 0909 0920 2020 zeBackup;.... │ │ │ │ +00003690: 206e 6578 743b 0a09 0909 7d0a 0909 0924 next;....}....$ │ │ │ │ +000036a0: 7573 6564 496e 6f64 6573 7b24 696e 6f64 usedInodes{$inod │ │ │ │ +000036b0: 657d 203d 2031 3b0a 0909 2020 2020 7d0a e} = 1;... }. │ │ │ │ +000036c0: 0909 7d0a 2370 7269 6e74 2022 2d33 2e35 ..}.#print "-3.5 │ │ │ │ +000036d0: 2d66 696c 6573 4672 6f6d 4d44 3543 6865 -filesFromMD5Che │ │ │ │ +000036e0: 636b 5375 6d46 696c 655c 7b24 665c 7d3d ckSumFile\{$f\}= │ │ │ │ +000036f0: 222c 2024 6669 6c65 7346 726f 6d4d 4435 ", $filesFromMD5 │ │ │ │ +00003700: 4368 6563 6b53 756d 4669 6c65 7b24 667d CheckSumFile{$f} │ │ │ │ +00003710: 2c20 222d 5c6e 223b 0a09 0975 6e6c 6573 , "-\n";...unles │ │ │ │ +00003720: 7320 282d 6520 2466 696c 656e 616d 6529 s (-e $filename) │ │ │ │ +00003730: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo │ │ │ │ +00003740: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00003750: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ │ +00003760: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => ["file │ │ │ │ +00003770: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m │ │ │ │ +00003780: 6973 7369 6e67 225d 293b 0a23 7072 696e issing"]);.#prin │ │ │ │ +00003790: 7420 222d 342d 5c6e 223b 0a09 0920 2020 t "-4-\n";... │ │ │ │ +000037a0: 206e 6578 743b 0a09 097d 0a09 0969 6620 next;...}...if │ │ │ │ +000037b0: 2869 6e64 6578 2827 7563 6227 2c20 2463 (index('ucb', $c │ │ │ │ +000037c0: 6f6d 7072 2920 3c20 3029 0a09 097b 0a09 ompr) < 0)...{.. │ │ │ │ +000037d0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +000037e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +000037f0: 272c 0a09 0909 0920 2027 2d70 7269 6e74 ',..... '-print │ │ │ │ +00003800: 2720 3d3e 0a09 0909 0920 205b 2275 6e6b ' =>..... ["unk │ │ │ │ +00003810: 6e6f 776e 2076 616c 7565 2063 6f6d 7072 nown value compr │ │ │ │ +00003820: 203d 3c24 636f 6d70 723e 2061 7420 3c22 =<$compr> at <" │ │ │ │ +00003830: 202e 0a09 0909 0920 2020 2224 6469 7254 ...... "$dirT │ │ │ │ +00003840: 6f43 6865 636b 2f24 6368 6563 6b53 756d oCheck/$checkSum │ │ │ │ +00003850: 4669 6c65 3e2c 2066 696c 656e 616d 6520 File>, filename │ │ │ │ +00003860: 3d20 3c24 663e 225d 293b 0a23 7072 696e = <$f>"]);.#prin │ │ │ │ +00003870: 7420 222d 352d 5c6e 223b 0a09 0920 2020 t "-5-\n";... │ │ │ │ +00003880: 206e 6578 743b 0a09 097d 0a0a 2370 7269 next;...}..#pri │ │ │ │ +00003890: 6e74 2022 2d36 2d5c 6e22 3b0a 0909 6d79 nt "-6-\n";...my │ │ │ │ +000038a0: 2024 746d 704e 616d 6520 3d20 263a 3a75 $tmpName = &::u │ │ │ │ +000038b0: 6e69 7146 696c 654e 616d 6528 222f 746d niqFileName("/tm │ │ │ │ +000038c0: 702f 7374 6f72 6542 6163 6b75 702d 626c p/storeBackup-bl │ │ │ │ +000038d0: 6f63 6b2e 2229 3b0a 0909 2470 6172 466f ock.");...$parFo │ │ │ │ +000038e0: 726b 2d3e 6164 645f 6e6f 626c 6f63 6b28 rk->add_noblock( │ │ │ │ +000038f0: 272d 6675 6e63 7469 6f6e 2720 3d3e 205c '-function' => \ │ │ │ │ +00003900: 2663 6865 636b 4d44 352c 0a09 0909 0920 &checkMD5,..... │ │ │ │ +00003910: 2020 2020 2027 2d66 756e 6350 6172 2720 '-funcPar' │ │ │ │ +00003920: 3d3e 0a09 0909 0920 2020 2020 205b 2464 =>..... [$d │ │ │ │ +00003930: 6972 546f 4368 6563 6b2c 2024 6669 6c65 irToCheck, $file │ │ │ │ +00003940: 6e61 6d65 2c20 246d 6435 7375 6d2c 2024 name, $md5sum, $ │ │ │ │ +00003950: 636f 6d70 722c 0a09 0909 0920 2020 2020 compr,..... │ │ │ │ +00003960: 2020 2470 6f73 7466 6978 2c20 2475 6e63 $postfix, $unc │ │ │ │ +00003970: 6f6d 7072 2c20 5c40 756e 636f 6d70 7250 ompr, \@uncomprP │ │ │ │ +00003980: 6172 2c0a 0909 0909 2020 2020 2020 205c ar,..... \ │ │ │ │ +00003990: 2575 7365 6442 6c6f 636b 496e 6f64 6573 %usedBlockInodes │ │ │ │ +000039a0: 2c0a 0909 0909 2020 2020 2020 2031 302a ,..... 10* │ │ │ │ +000039b0: 3130 3234 2a2a 322c 2024 746d 704e 616d 1024**2, $tmpNam │ │ │ │ +000039c0: 652c 2024 7072 4c6f 675d 2c0a 0909 0909 e, $prLog],..... │ │ │ │ +000039d0: 2020 2020 2020 272d 696e 666f 2720 3d3e '-info' => │ │ │ │ +000039e0: 205b 2474 6d70 4e61 6d65 2c20 2466 696c [$tmpName, $fil │ │ │ │ +000039f0: 656e 616d 655d 293b 0a09 2020 2020 7d0a ename]);.. }. │ │ │ │ +00003a00: 0920 2020 2065 6c73 6966 2028 246d 6435 . elsif ($md5 │ │ │ │ +00003a10: 7375 6d20 6571 2027 6469 7227 290a 0920 sum eq 'dir').. │ │ │ │ +00003a20: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ │ +00003a30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00003a40: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ │ +00003a50: 7374 7227 203d 3e20 5b22 6469 7265 6374 str' => ["direct │ │ │ │ +00003a60: 6f72 7920 3c24 6669 6c65 6e61 6d65 3e20 ory <$filename> │ │ │ │ +00003a70: 6973 206d 6973 7369 6e67 225d 290a 0909 is missing"])... │ │ │ │ +00003a80: 2020 2020 756e 6c65 7373 202d 6520 2466 unless -e $f │ │ │ │ +00003a90: 696c 656e 616d 653b 0a09 0924 7072 4c6f ilename;...$prLo │ │ │ │ +00003aa0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00003ab0: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... │ │ │ │ +00003ac0: 2020 272d 7374 7227 203d 3e20 5b22 3c24 '-str' => ["<$ │ │ │ │ +00003ad0: 6669 6c65 6e61 6d65 3e20 6973 206e 6f74 filename> is not │ │ │ │ +00003ae0: 2061 2064 6972 6563 746f 7279 2122 5d29 a directory!"]) │ │ │ │ +00003af0: 0a09 0920 2020 2075 6e6c 6573 7320 2d64 ... unless -d │ │ │ │ +00003b00: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. │ │ │ │ +00003b10: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($ │ │ │ │ +00003b20: 6d64 3573 756d 2065 7120 2773 796d 6c69 md5sum eq 'symli │ │ │ │ +00003b30: 6e6b 2729 0a09 2020 2020 7b0a 0909 2470 nk').. {...$p │ │ │ │ +00003b40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00003b50: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +00003b60: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>.. │ │ │ │ +00003b70: 0909 2020 2020 2020 5b22 3c24 6669 6c65 .. ["<$file │ │ │ │ +00003b80: 6e61 6d65 3e20 6973 206d 6973 7369 6e67 name> is missing │ │ │ │ +00003b90: 206f 7220 6e6f 7420 6120 7379 6d6c 6e6b or not a symlnk │ │ │ │ +00003ba0: 2122 5d29 0a09 0920 2020 2075 6e6c 6573 !"])... unles │ │ │ │ +00003bb0: 7320 2d6c 2024 6669 6c65 6e61 6d65 3b0a s -l $filename;. │ │ │ │ +00003bc0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi │ │ │ │ +00003bd0: 6620 2824 6d64 3573 756d 2065 7120 2770 f ($md5sum eq 'p │ │ │ │ +00003be0: 6970 6527 290a 0920 2020 207b 0a09 0924 ipe').. {...$ │ │ │ │ +00003bf0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00003c00: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +00003c10: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00003c20: 5b22 6e61 6d65 6420 7069 7065 203c 2466 ["named pipe <$f │ │ │ │ +00003c30: 696c 656e 616d 6520 6973 206d 6973 7369 ilename is missi │ │ │ │ +00003c40: 6e67 3e22 5d29 0a09 0920 2020 2075 6e6c ng>"])... unl │ │ │ │ +00003c50: 6573 7320 2d65 2024 6669 6c65 6e61 6d65 ess -e $filename │ │ │ │ +00003c60: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin │ │ │ │ +00003c70: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00003c80: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ │ +00003c90: 2720 3d3e 205b 223c 2466 696c 656e 616d ' => ["<$filenam │ │ │ │ +00003ca0: 653e 2069 7320 6e6f 7420 6120 6e61 6d65 e> is not a name │ │ │ │ +00003cb0: 6420 7069 7065 2122 5d29 0a09 0920 2020 d pipe!"])... │ │ │ │ +00003cc0: 2075 6e6c 6573 7320 2d70 2024 6669 6c65 unless -p $file │ │ │ │ +00003cd0: 6e61 6d65 3b0a 0920 2020 207d 0a09 2020 name;.. }.. │ │ │ │ +00003ce0: 2020 656c 7369 6620 2824 6d64 3573 756d elsif ($md5sum │ │ │ │ +00003cf0: 2065 7120 2770 6970 6527 290a 0920 2020 eq 'pipe').. │ │ │ │ +00003d00: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ │ +00003d10: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00003d20: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +00003d30: 7227 203d 3e20 5b22 6e61 6d65 6420 7069 r' => ["named pi │ │ │ │ +00003d40: 7065 203c 2466 696c 656e 616d 6520 6973 pe <$filename is │ │ │ │ +00003d50: 206d 6973 7369 6e67 3e22 5d29 0a09 0920 missing>"])... │ │ │ │ +00003d60: 2020 2075 6e6c 6573 7320 2d65 2024 6669 unless -e $fi │ │ │ │ +00003d70: 6c65 6e61 6d65 3b0a 0909 2470 724c 6f67 lename;...$prLog │ │ │ │ +00003d80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00003d90: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ │ +00003da0: 2027 2d73 7472 2720 3d3e 205b 223c 2466 '-str' => ["<$f │ │ │ │ +00003db0: 696c 656e 616d 653e 2069 7320 6e6f 7420 ilename> is not │ │ │ │ +00003dc0: 6120 6e61 6d65 6420 7069 7065 2122 5d29 a named pipe!"]) │ │ │ │ +00003dd0: 0a09 0920 2020 2075 6e6c 6573 7320 2d70 ... unless -p │ │ │ │ +00003de0: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. │ │ │ │ +00003df0: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($ │ │ │ │ +00003e00: 6d64 3573 756d 2065 7120 2773 6f63 6b65 md5sum eq 'socke │ │ │ │ +00003e10: 7427 290a 0920 2020 207b 0a09 0924 7072 t').. {...$pr │ │ │ │ +00003e20: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00003e30: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ │ +00003e40: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00003e50: 736f 636b 6574 203c 2466 696c 656e 616d socket <$filenam │ │ │ │ +00003e60: 653e 2069 7320 6d69 7373 696e 6722 5d29 e> is missing"]) │ │ │ │ +00003e70: 0a09 0920 2020 2075 6e6c 6573 7320 2d65 ... unless -e │ │ │ │ +00003e80: 2024 6669 6c65 6e61 6d65 3b0a 0909 2470 $filename;...$p │ │ │ │ +00003e90: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00003ea0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +00003eb0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00003ec0: 223c 2466 696c 656e 616d 653e 2069 7320 "<$filename> is │ │ │ │ +00003ed0: 6e6f 7420 6120 736f 636b 6574 2122 5d29 not a socket!"]) │ │ │ │ +00003ee0: 0a09 0920 2020 2075 6e6c 6573 7320 2d53 ... unless -S │ │ │ │ +00003ef0: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. │ │ │ │ +00003f00: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($ │ │ │ │ +00003f10: 6d64 3573 756d 2065 7120 2762 6c6f 636b md5sum eq 'block │ │ │ │ +00003f20: 6465 7627 290a 0920 2020 207b 0a09 0924 dev').. {...$ │ │ │ │ +00003f30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00003f40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +00003f50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00003f60: 5b22 626c 6f63 6b20 6465 7669 6365 203c ["block device < │ │ │ │ +00003f70: 2466 696c 656e 616d 653e 2069 7320 6d69 $filename> is mi │ │ │ │ +00003f80: 7373 696e 6722 5d29 0a09 0920 2020 2075 ssing"])... u │ │ │ │ +00003f90: 6e6c 6573 7320 2d65 2024 6669 6c65 6e61 nless -e $filena │ │ │ │ +00003fa0: 6d65 3b0a 0909 2470 724c 6f67 2d3e 7072 me;...$prLog->pr │ │ │ │ +00003fb0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00003fc0: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ │ +00003fd0: 7472 2720 3d3e 205b 223c 2466 696c 656e tr' => ["<$filen │ │ │ │ +00003fe0: 616d 653e 2069 7320 6e6f 7420 6120 626c ame> is not a bl │ │ │ │ +00003ff0: 6f63 6b20 6465 7669 6365 2122 5d29 0a09 ock device!"]).. │ │ │ │ +00004000: 0920 2020 2075 6e6c 6573 7320 2d62 2024 . unless -b $ │ │ │ │ +00004010: 6669 6c65 6e61 6d65 3b0a 0920 2020 207d filename;.. } │ │ │ │ +00004020: 0a09 2020 2020 656c 7369 6620 2824 6d64 .. elsif ($md │ │ │ │ +00004030: 3573 756d 2065 7120 2763 6861 7264 6576 5sum eq 'chardev │ │ │ │ +00004040: 2729 0a09 2020 2020 7b0a 0909 2470 724c ').. {...$prL │ │ │ │ +00004050: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00004060: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ │ +00004070: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +00004080: 6861 7220 6465 7669 6365 203c 2466 696c har device <$fil │ │ │ │ +00004090: 656e 616d 653e 2069 7320 6d69 7373 696e ename> is missin │ │ │ │ +000040a0: 6722 5d29 0a09 0920 2020 2075 6e6c 6573 g"])... unles │ │ │ │ +000040b0: 7320 2d65 2024 6669 6c65 6e61 6d65 3b0a s -e $filename;. │ │ │ │ +000040c0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +000040d0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +000040e0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +000040f0: 3d3e 205b 223c 2466 696c 656e 616d 653e => ["<$filename> │ │ │ │ +00004100: 2069 7320 6e6f 7420 6120 6368 6172 2064 is not a char d │ │ │ │ +00004110: 6576 6963 6521 225d 290a 0909 2020 2020 evice!"])... │ │ │ │ +00004120: 756e 6c65 7373 202d 6320 2466 696c 656e unless -c $filen │ │ │ │ +00004130: 616d 653b 0a09 2020 2020 7d0a 0a23 7072 ame;.. }..#pr │ │ │ │ +00004140: 696e 7420 222d 3130 2d24 665c 6e22 3b0a int "-10-$f\n";. │ │ │ │ +00004150: 0920 2020 2024 7469 6e79 5363 6865 642d . $tinySched- │ │ │ │ +00004160: 3e72 6573 6574 2829 3b0a 097d 0a09 656c >reset();..}..el │ │ │ │ +00004170: 7365 0a09 7b0a 2370 7269 6e74 2022 2d31 se..{.#print "-1 │ │ │ │ +00004180: 312d 2072 6373 6620 3d20 756e 6465 665c 1- rcsf = undef\ │ │ │ │ +00004190: 6e22 3b0a 0920 2020 2024 7263 7366 203d n";.. $rcsf = │ │ │ │ +000041a0: 2075 6e64 6566 3b0a 097d 0a23 7072 696e undef;..}.#prin │ │ │ │ +000041b0: 7420 222d 3130 2d5c 6e22 3b0a 2020 2020 t "-10-\n";. │ │ │ │ +000041c0: 7d0a 0a20 2020 2023 2323 2323 2323 2323 }.. ######### │ │ │ │ +000041d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000041e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000041f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00004200: 2323 230a 2020 2020 2474 696e 7953 6368 ###. $tinySch │ │ │ │ +00004210: 6564 2d3e 7761 6974 2829 3b0a 0a20 2020 ed->wait();.. │ │ │ │ +00004220: 2024 7061 7246 6f72 6b54 6f44 6f20 3d20 $parForkToDo = │ │ │ │ +00004230: 2470 6172 466f 726b 2d3e 6765 744e 6f55 $parFork->getNoU │ │ │ │ +00004240: 7365 6445 6e74 7269 6573 2829 3b0a 2370 sedEntries();.#p │ │ │ │ +00004250: 7269 6e74 2022 3220 7061 7246 6f72 6b54 rint "2 parForkT │ │ │ │ +00004260: 6f44 6f20 3d20 2470 6172 466f 726b 546f oDo = $parForkTo │ │ │ │ +00004270: 446f 5c6e 223b 0a7d 2020 2020 2023 2065 Do\n";.} # e │ │ │ │ +00004280: 6e64 206f 6620 676c 6f62 616c 2077 6869 nd of global whi │ │ │ │ +00004290: 6c65 206c 6f6f 7020 6f76 6572 2061 6c6c le loop over all │ │ │ │ +000042a0: 206a 6f62 730a 0a23 7072 696e 7420 222d jobs..#print "- │ │ │ │ +000042b0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d45 4e44 -------------END │ │ │ │ +000042c0: 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 3b0a 2309 ---------\n";.#. │ │ │ │ +000042d0: 2020 2020 6d79 2024 666d 3b0a 2309 2020 my $fm;.#. │ │ │ │ +000042e0: 2020 666f 7265 6163 6820 2466 6d20 286b foreach $fm (k │ │ │ │ +000042f0: 6579 7320 2566 696c 6573 4672 6f6d 4d44 eys %filesFromMD │ │ │ │ +00004300: 3543 6865 636b 5375 6d46 696c 6529 0a23 5CheckSumFile).# │ │ │ │ +00004310: 0920 2020 207b 0a23 7072 696e 7420 2223 . {.#print "# │ │ │ │ +00004320: 2323 2464 6972 546f 4368 6563 6b23 2324 ##$dirToCheck##$ │ │ │ │ +00004330: 666d 2323 2322 2c0a 2309 0924 6669 6c65 fm###",.#..$file │ │ │ │ +00004340: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum │ │ │ │ +00004350: 4669 6c65 7b24 666d 7d2c 2022 2323 235c File{$fm}, "###\ │ │ │ │ +00004360: 6e22 3b0a 2309 2020 2020 7d0a 0a23 2663 n";.#. }..#&c │ │ │ │ +00004370: 6865 636b 416c 6c46 696c 6573 2824 6469 heckAllFiles($di │ │ │ │ +00004380: 7254 6f43 6865 636b 2c20 5c25 6669 6c65 rToCheck, \%file │ │ │ │ +00004390: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum │ │ │ │ +000043a0: 4669 6c65 2c0a 2309 2020 2020 2020 2024 File,.#. $ │ │ │ │ +000043b0: 7072 4c6f 6729 0a23 2020 2020 6966 2025 prLog).# if % │ │ │ │ +000043c0: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec │ │ │ │ +000043d0: 6b53 756d 4669 6c65 3b0a 0a69 6620 2824 kSumFile;..if ($ │ │ │ │ +000043e0: 7665 7262 6f73 6529 0a7b 0a20 2020 2026 verbose).{. & │ │ │ │ +000043f0: 7072 696e 7453 7461 7428 2470 724c 6f67 printStat($prLog │ │ │ │ +00004400: 2c20 2727 2c20 2463 6865 636b 6564 4669 , '', $checkedFi │ │ │ │ +00004410: 6c65 732c 2024 6368 6563 6b65 6446 696c les, $checkedFil │ │ │ │ +00004420: 6573 5369 7a65 2c0a 0920 2020 2020 2020 esSize,.. │ │ │ │ +00004430: 246c 696e 6b65 6446 696c 6573 2c20 246c $linkedFiles, $l │ │ │ │ +00004440: 696e 6b65 6446 696c 6573 5369 7a65 293b inkedFilesSize); │ │ │ │ +00004450: 0a0a 2020 2020 2463 6865 636b 6564 4669 .. $checkedFi │ │ │ │ +00004460: 6c65 7341 6c6c 202b 3d20 2463 6865 636b lesAll += $check │ │ │ │ +00004470: 6564 4669 6c65 733b 0a20 2020 2024 6368 edFiles;. $ch │ │ │ │ +00004480: 6563 6b65 6446 696c 6573 5369 7a65 416c eckedFilesSizeAl │ │ │ │ +00004490: 6c20 2b3d 2024 6368 6563 6b65 6446 696c l += $checkedFil │ │ │ │ +000044a0: 6573 5369 7a65 3b0a 2020 2020 246c 696e esSize;. $lin │ │ │ │ +000044b0: 6b65 6446 696c 6573 416c 6c20 2b3d 2024 kedFilesAll += $ │ │ │ │ +000044c0: 6c69 6e6b 6564 4669 6c65 733b 0a20 2020 linkedFiles;. │ │ │ │ +000044d0: 2024 6c69 6e6b 6564 4669 6c65 7353 697a $linkedFilesSiz │ │ │ │ +000044e0: 6541 6c6c 202b 3d20 246c 696e 6b65 6446 eAll += $linkedF │ │ │ │ +000044f0: 696c 6573 5369 7a65 3b0a 2020 2020 2670 ilesSize;. &p │ │ │ │ +00004500: 7269 6e74 5374 6174 2824 7072 4c6f 672c rintStat($prLog, │ │ │ │ +00004510: 2027 6f76 6572 616c 6c27 2c20 2463 6865 'overall', $che │ │ │ │ +00004520: 636b 6564 4669 6c65 7341 6c6c 2c20 2463 ckedFilesAll, $c │ │ │ │ +00004530: 6865 636b 6564 4669 6c65 7353 697a 6541 heckedFilesSizeA │ │ │ │ +00004540: 6c6c 2c0a 0920 2020 2020 2020 246c 696e ll,.. $lin │ │ │ │ +00004550: 6b65 6446 696c 6573 416c 6c2c 2024 6c69 kedFilesAll, $li │ │ │ │ +00004560: 6e6b 6564 4669 6c65 7353 697a 6541 6c6c nkedFilesSizeAll │ │ │ │ +00004570: 293b 0a7d 0a0a 6d79 2024 656e 6320 3d20 );.}..my $enc = │ │ │ │ +00004580: 2470 724c 6f67 2d3e 656e 636f 756e 7465 $prLog->encounte │ │ │ │ +00004590: 7265 6428 272d 6b69 6e64 2720 3d3e 2027 red('-kind' => ' │ │ │ │ +000045a0: 5727 293b 0a6d 7920 2453 203d 2024 656e W');.my $S = $en │ │ │ │ +000045b0: 6320 3e20 3120 3f20 2753 2720 3a20 2727 c > 1 ? 'S' : '' │ │ │ │ +000045c0: 3b0a 6966 2028 2465 6e63 290a 7b0a 2020 ;.if ($enc).{. │ │ │ │ +000045d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +000045e0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +000045f0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00004600: 2d2d 2024 656e 6320 5741 524e 494e 4724 -- $enc WARNING$ │ │ │ │ +00004610: 5320 4f43 4355 5252 4544 2044 5552 494e S OCCURRED DURIN │ │ │ │ +00004620: 4720 5448 4520 4348 4543 4b21 202d 2d22 G THE CHECK! --" │ │ │ │ +00004630: 5d29 0a7d 0a65 6c73 650a 7b0a 2020 2020 ]).}.else.{. │ │ │ │ +00004640: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00004650: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00004660: 2020 272d 7374 7227 203d 3e20 5b22 2d2d '-str' => ["-- │ │ │ │ +00004670: 206e 6f20 5741 524e 494e 4753 204f 4343 no WARNINGS OCC │ │ │ │ +00004680: 5552 5245 4420 4455 5249 4e47 2054 4845 URRED DURING THE │ │ │ │ +00004690: 2043 4845 434b 2120 2d2d 225d 293b 0a7d CHECK! --"]);.} │ │ │ │ +000046a0: 0a0a 2465 6e63 203d 2024 7072 4c6f 672d ..$enc = $prLog- │ │ │ │ +000046b0: 3e65 6e63 6f75 6e74 6572 6564 2827 2d6b >encountered('-k │ │ │ │ +000046c0: 696e 6427 203d 3e20 2745 2729 3b0a 2453 ind' => 'E');.$S │ │ │ │ +000046d0: 203d 2024 656e 6320 3e20 3120 3f20 2753 = $enc > 1 ? 'S │ │ │ │ +000046e0: 2720 3a20 2727 3b0a 6966 2028 2465 6e63 ' : '';.if ($enc │ │ │ │ +000046f0: 290a 7b0a 2020 2020 2470 724c 6f67 2d3e ).{. $prLog-> │ │ │ │ +00004700: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00004710: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str' │ │ │ │ +00004720: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => ["-- $enc ER │ │ │ │ +00004730: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D │ │ │ │ +00004740: 5552 494e 4720 5448 4520 4348 4543 4b21 URING THE CHECK! │ │ │ │ +00004750: 202d 2d22 5d29 3b0a 7d0a 656c 7365 0a7b --"]);.}.else.{ │ │ │ │ +00004760: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00004770: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00004780: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00004790: 205b 222d 2d20 6e6f 2045 5252 4f52 5320 ["-- no ERRORS │ │ │ │ +000047a0: 4f43 4355 5252 4544 2044 5552 494e 4720 OCCURRED DURING │ │ │ │ +000047b0: 5448 4520 4348 4543 4b21 202d 2d22 5d29 THE CHECK! --"]) │ │ │ │ +000047c0: 3b0a 7d0a 0a0a 6966 2028 2470 724c 6f67 ;.}...if ($prLog │ │ │ │ +000047d0: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('- │ │ │ │ +000047e0: 6b69 6e64 2720 3d3e 2022 4522 2929 0a7b kind' => "E")).{ │ │ │ │ +000047f0: 0a20 2020 2065 7869 7420 313b 0a7d 0a65 . exit 1;.}.e │ │ │ │ +00004800: 6c73 650a 7b0a 2020 2020 6578 6974 2030 lse.{. exit 0 │ │ │ │ +00004810: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +00004820: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00004830: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00004840: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00004850: 2323 0a23 2063 6865 636b 7320 6361 6c63 ##.# checks calc │ │ │ │ +00004860: 756c 6174 6564 206d 6435 2073 756d 2061 ulated md5 sum a │ │ │ │ +00004870: 6761 696e 7374 2073 746f 7265 6420 6f6e gainst stored on │ │ │ │ +00004880: 6528 7329 0a23 2074 6869 7320 6675 6e63 e(s).# this func │ │ │ │ +00004890: 7469 6f6e 2069 7320 6361 6c6c 6564 2066 tion is called f │ │ │ │ +000048a0: 6f72 2061 6c6c 2066 696c 6573 2028 626c or all files (bl │ │ │ │ +000048b0: 6f63 6b65 6420 616e 6420 6e6f 6e2d 626c ocked and non-bl │ │ │ │ +000048c0: 6f63 6b65 640a 7375 6220 6368 6563 6b4d ocked.sub checkM │ │ │ │ +000048d0: 4435 0a7b 0a20 2020 206d 7920 2824 6469 D5.{. my ($di │ │ │ │ +000048e0: 7254 6f43 6865 636b 2c20 2466 2c20 246d rToCheck, $f, $m │ │ │ │ +000048f0: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $ │ │ │ │ +00004900: 706f 7374 6669 782c 2024 756e 636f 6d70 postfix, $uncomp │ │ │ │ +00004910: 722c 2024 756e 636f 6d70 7250 6172 2c0a r, $uncomprPar,. │ │ │ │ +00004920: 0924 7573 6564 426c 6f63 6b49 6e6f 6465 .$usedBlockInode │ │ │ │ +00004930: 732c 2024 626c 6f63 6b53 697a 652c 2024 s, $blockSize, $ │ │ │ │ +00004940: 746d 704e 616d 652c 2024 7072 4c6f 6729 tmpName, $prLog) │ │ │ │ +00004950: 203d 2040 5f3b 0a0a 2020 2020 6d79 2028 = @_;.. my ( │ │ │ │ +00004960: 2569 6e6f 6465 326d 6435 293b 2020 2023 %inode2md5); # │ │ │ │ +00004970: 2073 746f 7265 2063 616c 6375 6c61 7465 store calculate │ │ │ │ +00004980: 6420 6d64 3520 7375 6d20 6f66 206e 6577 d md5 sum of new │ │ │ │ +00004990: 2069 6e6f 6465 730a 0a20 2020 2023 2073 inodes.. # s │ │ │ │ +000049a0: 7461 7469 7374 6963 616c 2064 6174 6120 tatistical data │ │ │ │ +000049b0: 7065 7220 6368 6563 6b4d 4435 0a20 2020 per checkMD5. │ │ │ │ +000049c0: 206d 7920 2463 6865 636b 6564 4669 6c65 my $checkedFile │ │ │ │ +000049d0: 7320 3d20 303b 0a20 2020 206d 7920 2463 s = 0;. my $c │ │ │ │ +000049e0: 6865 636b 6564 4669 6c65 7353 697a 6520 heckedFilesSize │ │ │ │ +000049f0: 3d20 303b 0a20 2020 206d 7920 246c 696e = 0;. my $lin │ │ │ │ +00004a00: 6b65 6446 696c 6573 203d 2030 3b0a 2020 kedFiles = 0;. │ │ │ │ +00004a10: 2020 6d79 2024 6c69 6e6b 6564 4669 6c65 my $linkedFile │ │ │ │ +00004a20: 7353 697a 6520 3d20 303b 0a0a 2020 2020 sSize = 0;.. │ │ │ │ +00004a30: 6c6f 6361 6c20 2a4f 5554 3b0a 2020 2020 local *OUT;. │ │ │ │ +00004a40: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, "> $tm │ │ │ │ +00004a50: 704e 616d 6522 2920 6f72 0a09 2470 724c pName") or..$prL │ │ │ │ +00004a60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00004a70: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... │ │ │ │ +00004a80: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ │ +00004a90: 6e6e 6f74 206f 7065 6e20 3c24 746d 704e nnot open <$tmpN │ │ │ │ +00004aa0: 616d 653e 225d 2c0a 0909 2020 2020 2020 ame>"],... │ │ │ │ +00004ab0: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL │ │ │ │ +00004ac0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 2c0a E__, __LINE__],. │ │ │ │ +00004ad0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ │ +00004ae0: 3d3e 2031 293b 0a0a 2370 7269 6e74 2022 => 1);..#print " │ │ │ │ +00004af0: 6368 6563 6b4d 4435 202d 2d2d 2d2d 2d2d checkMD5 ------- │ │ │ │ +00004b00: 2d2d 2d2d 2d2d 2466 2d2d 2d2d 2d2d 2d2d ------$f-------- │ │ │ │ +00004b10: 2d2d 2c20 246d 6435 7375 6d2c 2022 2c20 --, $md5sum, ", │ │ │ │ +00004b20: 6c65 6e67 7468 2824 6d64 3573 756d 292c length($md5sum), │ │ │ │ +00004b30: 2022 2c20 636f 6d70 723d 2463 6f6d 7072 ", compr=$compr │ │ │ │ +00004b40: 5c6e 223b 0a20 2020 206d 7920 246e 7245 \n";. my $nrE │ │ │ │ +00004b50: 7272 6f72 7320 3d20 303b 0a20 2020 2069 rrors = 0;. i │ │ │ │ +00004b60: 6620 286c 656e 6774 6828 246d 6435 7375 f (length($md5su │ │ │ │ +00004b70: 6d29 203d 3d20 3332 290a 2020 2020 7b0a m) == 32). {. │ │ │ │ +00004b80: 0969 6620 2824 636f 6d70 7220 6571 2027 .if ($compr eq ' │ │ │ │ +00004b90: 7527 206f 7220 2463 6f6d 7072 2065 7120 u' or $compr eq │ │ │ │ +00004ba0: 2763 2729 0a09 7b0a 0920 2020 206d 7920 'c')..{.. my │ │ │ │ +00004bb0: 246d 6435 416c 6c20 3d20 4469 6765 7374 $md5All = Digest │ │ │ │ +00004bc0: 3a3a 4d44 352d 3e6e 6577 2829 3b0a 0920 ::MD5->new();.. │ │ │ │ +00004bd0: 2020 206c 6f63 616c 202a 4649 4c45 3b0a local *FILE;. │ │ │ │ +00004be0: 0920 2020 206d 7920 2466 696c 6549 6e20 . my $fileIn │ │ │ │ +00004bf0: 3d20 756e 6465 663b 0a09 2020 2020 756e = undef;.. un │ │ │ │ +00004c00: 6c65 7373 2028 2d65 2024 6629 0a09 2020 less (-e $f).. │ │ │ │ +00004c10: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +00004c20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00004c30: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ │ +00004c40: 7472 2720 3d3e 205b 2266 696c 6520 3c24 tr' => ["file <$ │ │ │ │ +00004c50: 663e 2069 7320 6d69 7373 696e 6722 5d29 f> is missing"]) │ │ │ │ +00004c60: 3b0a 0909 2b2b 246e 7245 7272 6f72 733b ;...++$nrErrors; │ │ │ │ +00004c70: 0a09 0970 7269 6e74 204f 5554 2022 6572 ...print OUT "er │ │ │ │ +00004c80: 726f 7273 2024 6e72 4572 726f 7273 5c6e rors $nrErrors\n │ │ │ │ +00004c90: 223b 0a09 0972 6574 7572 6e20 313b 0a09 ";...return 1;.. │ │ │ │ +00004ca0: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($ │ │ │ │ +00004cb0: 636f 6d70 7220 6571 2027 7527 290a 0920 compr eq 'u').. │ │ │ │ +00004cc0: 2020 207b 0a09 0975 6e6c 6573 7320 2873 {...unless (s │ │ │ │ +00004cd0: 7973 6f70 656e 2846 494c 452c 2024 662c ysopen(FILE, $f, │ │ │ │ +00004ce0: 204f 5f52 444f 4e4c 5929 290a 0909 7b0a O_RDONLY))...{. │ │ │ │ +00004cf0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +00004d00: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00004d10: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str' │ │ │ │ +00004d20: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => ["cannot ope │ │ │ │ +00004d30: 6e20 3c24 663e 225d 2c0a 0909 0909 2020 n <$f>"],..... │ │ │ │ +00004d40: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL │ │ │ │ +00004d50: 455f 5f2c 205f 5f4c 494e 455f 5f5d 293b E__, __LINE__]); │ │ │ │ +00004d60: 0a09 0920 2020 202b 2b24 6e72 4572 726f ... ++$nrErro │ │ │ │ +00004d70: 7273 3b0a 0909 2020 2020 7072 696e 7420 rs;... print │ │ │ │ +00004d80: 4f55 5420 2265 7272 6f72 7320 246e 7245 OUT "errors $nrE │ │ │ │ +00004d90: 7272 6f72 735c 6e22 3b0a 0909 2020 2020 rrors\n";... │ │ │ │ +00004da0: 7265 7475 726e 2031 3b0a 0909 7d0a 0920 return 1;...}.. │ │ │ │ +00004db0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ │ +00004dc0: 2020 2020 7b0a 0909 2466 696c 6549 6e20 {...$fileIn │ │ │ │ +00004dd0: 3d0a 0909 2020 2020 7069 7065 4672 6f6d =... pipeFrom │ │ │ │ +00004de0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec │ │ │ │ +00004df0: 2720 3d3e 2024 756e 636f 6d70 722c 0a09 ' => $uncompr,.. │ │ │ │ +00004e00: 0909 0920 2020 2020 2027 2d70 6172 616d ... '-param │ │ │ │ +00004e10: 2720 3d3e 205c 4075 6e63 6f6d 7072 5061 ' => \@uncomprPa │ │ │ │ +00004e20: 722c 0a09 0909 0920 2020 2020 2027 2d73 r,..... '-s │ │ │ │ +00004e30: 7464 696e 2720 3d3e 2024 662c 0a09 0909 tdin' => $f,.... │ │ │ │ +00004e40: 0920 2020 2020 2027 2d6f 7574 5261 6e64 . '-outRand │ │ │ │ +00004e50: 6f6d 2720 3d3e 2027 2f74 6d70 2f73 7462 om' => '/tmp/stb │ │ │ │ +00004e60: 7550 6970 6546 726f 6d31 302d 272c 0a09 uPipeFrom10-',.. │ │ │ │ +00004e70: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog │ │ │ │ +00004e80: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0920 ' => $prLog);.. │ │ │ │ +00004e90: 2020 207d 0a0a 0920 2020 206d 7920 2824 }... my ($ │ │ │ │ +00004ea0: 696e 6f64 652c 2024 7369 7a65 2920 3d20 inode, $size) = │ │ │ │ +00004eb0: 2873 7461 7428 2466 2929 5b31 2c37 5d3b (stat($f))[1,7]; │ │ │ │ +00004ec0: 0a09 2020 2020 2b2b 2463 6865 636b 6564 .. ++$checked │ │ │ │ +00004ed0: 4669 6c65 733b 0a09 2020 2020 2463 6865 Files;.. $che │ │ │ │ +00004ee0: 636b 6564 4669 6c65 7353 697a 6520 2b3d ckedFilesSize += │ │ │ │ +00004ef0: 2024 7369 7a65 3b0a 0920 2020 206d 7920 $size;.. my │ │ │ │ +00004f00: 2462 7566 6665 723b 0a09 2020 2020 7768 $buffer;.. wh │ │ │ │ +00004f10: 696c 6520 2824 6669 6c65 496e 203f 2024 ile ($fileIn ? $ │ │ │ │ +00004f20: 6669 6c65 496e 2d3e 7379 7372 6561 6428 fileIn->sysread( │ │ │ │ +00004f30: 5c24 6275 6666 6572 2c20 2462 6c6f 636b \$buffer, $block │ │ │ │ +00004f40: 5369 7a65 2920 3a0a 0909 2020 2073 7973 Size) :... sys │ │ │ │ +00004f50: 7265 6164 2846 494c 452c 2024 6275 6666 read(FILE, $buff │ │ │ │ +00004f60: 6572 2c20 2462 6c6f 636b 5369 7a65 2929 er, $blockSize)) │ │ │ │ +00004f70: 0a09 2020 2020 7b0a 0909 246d 6435 416c .. {...$md5Al │ │ │ │ +00004f80: 6c2d 3e61 6464 2824 6275 6666 6572 293b l->add($buffer); │ │ │ │ +00004f90: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if │ │ │ │ +00004fa0: 2028 246d 6435 7375 6d20 6e65 2024 6d64 ($md5sum ne $md │ │ │ │ +00004fb0: 3541 6c6c 2d3e 6865 7864 6967 6573 7428 5All->hexdigest( │ │ │ │ +00004fc0: 2929 0a09 2020 2020 7b0a 0909 7072 696e )).. {...prin │ │ │ │ +00004fd0: 7420 4f55 5420 2263 6f72 7275 7074 2024 t OUT "corrupt $ │ │ │ │ +00004fe0: 696e 6f64 6520 2466 5c6e 223b 0a09 2020 inode $f\n";.. │ │ │ │ +00004ff0: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. │ │ │ │ +00005000: 2020 207b 0a09 0923 2072 6561 6479 0a09 {...# ready.. │ │ │ │ +00005010: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($ │ │ │ │ +00005020: 6669 6c65 496e 290a 0920 2020 207b 0a09 fileIn).. {.. │ │ │ │ +00005030: 0924 6669 6c65 496e 2d3e 636c 6f73 6528 .$fileIn->close( │ │ │ │ +00005040: 293b 0a09 0924 6669 6c65 496e 203d 2075 );...$fileIn = u │ │ │ │ +00005050: 6e64 6566 3b0a 0920 2020 207d 0a09 2020 ndef;.. }.. │ │ │ │ +00005060: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {... │ │ │ │ +00005070: 636c 6f73 6528 4649 4c45 293b 0a09 2020 close(FILE);.. │ │ │ │ +00005080: 2020 7d0a 097d 2020 2020 2020 2020 2020 }..} │ │ │ │ +00005090: 2020 2020 2020 2020 2020 2020 2023 2069 # i │ │ │ │ +000050a0: 6620 2824 636f 6d70 7220 6571 2027 7527 f ($compr eq 'u' │ │ │ │ +000050b0: 206f 7220 2463 6f6d 7072 2065 7120 2763 or $compr eq 'c │ │ │ │ +000050c0: 2729 0a09 656c 7369 6620 2824 636f 6d70 ')..elsif ($comp │ │ │ │ +000050d0: 7220 6571 2027 6227 290a 097b 0a23 7072 r eq 'b')..{.#pr │ │ │ │ +000050e0: 696e 7420 2273 7461 7274 2063 6865 636b int "start check │ │ │ │ +000050f0: 696e 6720 626c 6f63 6b65 6420 6669 6c65 ing blocked file │ │ │ │ +00005100: 2024 665c 6e22 3b0a 0920 2020 2023 2072 $f\n";.. # r │ │ │ │ +00005110: 6561 6420 616c 6c20 6669 6c65 7320 696e ead all files in │ │ │ │ +00005120: 2064 6972 6563 746f 7279 0a09 2020 2020 directory.. │ │ │ │ +00005130: 6c6f 6361 6c20 2a44 4952 3b0a 0920 2020 local *DIR;.. │ │ │ │ +00005140: 2075 6e6c 6573 7320 286f 7065 6e64 6972 unless (opendir │ │ │ │ +00005150: 2844 4952 2c20 2466 2929 0a09 2020 2020 (DIR, $f)).. │ │ │ │ +00005160: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin │ │ │ │ +00005170: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00005180: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ │ +00005190: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => ["cannot op │ │ │ │ +000051a0: 656e 203c 2466 3e22 5d2c 0a09 0909 2020 en <$f>"],.... │ │ │ │ +000051b0: 2020 2020 272d 6164 6427 203d 3e20 5b5f '-add' => [_ │ │ │ │ +000051c0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_ │ │ │ │ +000051d0: 5f5d 293b 0a09 092b 2b24 6e72 4572 726f _]);...++$nrErro │ │ │ │ +000051e0: 7273 3b0a 0909 7072 696e 7420 4f55 5420 rs;...print OUT │ │ │ │ +000051f0: 2265 7272 6f72 7320 246e 7245 7272 6f72 "errors $nrError │ │ │ │ +00005200: 735c 6e22 3b0a 0909 7265 7475 726e 2031 s\n";...return 1 │ │ │ │ +00005210: 3b0a 0920 2020 207d 0a09 2020 2020 6d79 ;.. }.. my │ │ │ │ +00005220: 2028 2465 6e74 7279 2c20 4065 6e74 7269 ($entry, @entri │ │ │ │ +00005230: 6573 293b 0a09 2020 2020 7768 696c 6520 es);.. while │ │ │ │ +00005240: 2824 656e 7472 7920 3d20 7265 6164 6469 ($entry = readdi │ │ │ │ +00005250: 7220 4449 5229 2020 2320 6f6e 6520 656e r DIR) # one en │ │ │ │ +00005260: 7472 7920 7065 7220 696e 6f64 650a 0920 try per inode.. │ │ │ │ +00005270: 2020 207b 0a09 096e 6578 7420 756e 6c65 {...next unle │ │ │ │ +00005280: 7373 2024 656e 7472 7920 3d7e 202f 5c41 ss $entry =~ /\A │ │ │ │ +00005290: 5c64 2f3b 0a09 090a 0909 7075 7368 2040 \d/;......push @ │ │ │ │ +000052a0: 656e 7472 6965 732c 2024 656e 7472 793b entries, $entry; │ │ │ │ +000052b0: 0a09 2020 2020 7d0a 0920 2020 2063 6c6f .. }.. clo │ │ │ │ +000052c0: 7365 2844 4952 293b 0a09 2020 2020 6d79 se(DIR);.. my │ │ │ │ +000052d0: 2024 6669 6c65 496e 203d 0a09 0970 6970 $fileIn =...pip │ │ │ │ +000052e0: 6546 726f 6d46 6f72 6b2d 3e6e 6577 2827 eFromFork->new(' │ │ │ │ +000052f0: 2d65 7865 6327 203d 3e20 2762 7a69 7032 -exec' => 'bzip2 │ │ │ │ +00005300: 272c 0a09 0909 0920 2027 2d70 6172 616d ',..... '-param │ │ │ │ +00005310: 2720 3d3e 205b 272d 6427 5d2c 0a09 0909 ' => ['-d'],.... │ │ │ │ +00005320: 0920 2027 2d73 7464 696e 2720 3d3e 2022 . '-stdin' => " │ │ │ │ +00005330: 2466 2f2e 6d64 3542 6c6f 636b 4368 6563 $f/.md5BlockChec │ │ │ │ +00005340: 6b53 756d 732e 627a 3222 2c0a 0909 0909 kSums.bz2",..... │ │ │ │ +00005350: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' = │ │ │ │ +00005360: 3e20 272f 746d 702f 7374 6275 5069 7065 > '/tmp/stbuPipe │ │ │ │ +00005370: 4672 6f6d 3131 2d27 2c0a 0909 0909 2020 From11-',..... │ │ │ │ +00005380: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +00005390: 6f67 293b 0a0a 0920 2020 206d 7920 246c og);... my $l │ │ │ │ +000053a0: 3b0a 0920 2020 2077 6869 6c65 2028 246c ;.. while ($l │ │ │ │ +000053b0: 203d 2024 6669 6c65 496e 2d3e 7265 6164 = $fileIn->read │ │ │ │ +000053c0: 2829 290a 0920 2020 207b 0a09 0963 686f ()).. {...cho │ │ │ │ +000053d0: 6d70 2024 6c3b 0a09 096d 7920 2824 6c5f mp $l;...my ($l_ │ │ │ │ +000053e0: 6d64 352c 2024 6c5f 636f 6d70 722c 2024 md5, $l_compr, $ │ │ │ │ +000053f0: 6c5f 662c 2024 6e29 3b0a 0909 246e 203d l_f, $n);...$n = │ │ │ │ +00005400: 2028 246c 5f6d 6435 2c20 246c 5f63 6f6d ($l_md5, $l_com │ │ │ │ +00005410: 7072 2c20 246c 5f66 2920 3d20 7370 6c69 pr, $l_f) = spli │ │ │ │ +00005420: 7428 2f5c 732f 2c20 246c 2c20 3329 3b0a t(/\s/, $l, 3);. │ │ │ │ +00005430: 0909 6966 2028 246e 2021 3d20 3329 0a09 ..if ($n != 3).. │ │ │ │ +00005440: 097b 0a09 0920 2020 202b 2b24 6e72 4572 .{... ++$nrEr │ │ │ │ +00005450: 726f 7273 3b0a 0909 2020 2020 7072 696e rors;... prin │ │ │ │ +00005460: 7420 4f55 5420 2265 7272 6f72 7320 246e t OUT "errors $n │ │ │ │ +00005470: 7245 7272 6f72 735c 6e22 3b0a 0909 2020 rErrors\n";... │ │ │ │ +00005480: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00005490: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +000054a0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ │ +000054b0: 0909 0909 2020 5b22 7374 7261 6e67 6520 .... ["strange │ │ │ │ +000054c0: 6c69 6e65 2069 6e20 3c24 662f 2e6d 6435 line in <$f/.md5 │ │ │ │ +000054d0: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b │ │ │ │ +000054e0: 7a32 3e20 2220 2e0a 0909 0909 2020 2022 z2> " ...... " │ │ │ │ +000054f0: 696e 206c 696e 6520 2220 2e20 2466 696c in line " . $fil │ │ │ │ +00005500: 6549 6e2d 3e67 6574 2827 2d77 6861 7427 eIn->get('-what' │ │ │ │ +00005510: 203d 3e20 276c 696e 654e 7227 2920 2e0a => 'lineNr') .. │ │ │ │ +00005520: 0909 0909 2020 2022 3a22 2c20 225c 743c .... ":", "\t< │ │ │ │ +00005530: 246c 3e22 5d2c 0a09 0909 0920 2027 2d65 $l>"],..... '-e │ │ │ │ +00005540: 7869 7427 203d 3e20 3129 0a09 097d 0a09 xit' => 1)...}.. │ │ │ │ +00005550: 0969 6620 282d 6520 2224 6469 7254 6f43 .if (-e "$dirToC │ │ │ │ +00005560: 6865 636b 2f24 6c5f 6622 290a 0909 7b0a heck/$l_f")...{. │ │ │ │ +00005570: 0909 2020 2020 6d79 2024 696e 6f64 6520 .. my $inode │ │ │ │ +00005580: 3d20 2873 7461 7428 2224 6469 7254 6f43 = (stat("$dirToC │ │ │ │ +00005590: 6865 636b 2f24 6c5f 6622 2929 5b31 5d3b heck/$l_f"))[1]; │ │ │ │ +000055a0: 0a09 0920 2020 2024 696e 6f64 6532 6d64 ... $inode2md │ │ │ │ +000055b0: 357b 2469 6e6f 6465 7d20 3d20 246c 5f6d 5{$inode} = $l_m │ │ │ │ +000055c0: 6435 3b0a 2370 7269 6e74 2022 246c 5f66 d5;.#print "$l_f │ │ │ │ +000055d0: 3a20 2469 6e6f 6465 202d 3e20 246c 5f6d : $inode -> $l_m │ │ │ │ +000055e0: 6435 5c6e 223b 0a09 097d 0a09 0965 6c73 d5\n";...}...els │ │ │ │ +000055f0: 650a 0909 7b0a 0909 2020 2020 2470 724c e...{... $prL │ │ │ │ +00005600: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00005610: 2720 3d3e 2027 4527 2c0a 0909 0909 2020 ' => 'E',..... │ │ │ │ +00005620: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => ["file │ │ │ │ +00005630: 203c 246c 5f66 3e20 6973 206d 6973 7369 <$l_f> is missi │ │ │ │ +00005640: 6e67 225d 293b 0a09 097d 0a09 2020 2020 ng"]);...}.. │ │ │ │ +00005650: 7d0a 0920 2020 2024 6669 6c65 496e 2d3e }.. $fileIn-> │ │ │ │ +00005660: 636c 6f73 6528 293b 0a09 2020 2020 2466 close();.. $f │ │ │ │ +00005670: 696c 6549 6e20 3d20 756e 6465 663b 0a0a ileIn = undef;.. │ │ │ │ +00005680: 0920 2020 206d 7920 246d 6435 416c 6c20 . my $md5All │ │ │ │ +00005690: 3d20 4469 6765 7374 3a3a 4d44 352d 3e6e = Digest::MD5->n │ │ │ │ +000056a0: 6577 2829 3b0a 0920 2020 2066 6f72 6561 ew();.. forea │ │ │ │ +000056b0: 6368 2024 656e 7472 7920 2873 6f72 7420 ch $entry (sort │ │ │ │ +000056c0: 4065 6e74 7269 6573 2920 2023 206c 6f6f @entries) # loo │ │ │ │ +000056d0: 7020 6f76 6572 2061 6c6c 2066 696c 6573 p over all files │ │ │ │ +000056e0: 2069 6e20 6261 636b 7570 0a09 2020 2020 in backup.. │ │ │ │ +000056f0: 7b0a 0909 6d79 2028 2469 6e6f 6465 2c20 {...my ($inode, │ │ │ │ +00005700: 2473 697a 6529 203d 2028 7374 6174 2822 $size) = (stat(" │ │ │ │ +00005710: 2466 2f24 656e 7472 7922 2929 5b31 2c37 $f/$entry"))[1,7 │ │ │ │ +00005720: 5d3b 0a0a 0909 6d79 2024 6361 6c63 4d44 ];....my $calcMD │ │ │ │ +00005730: 3520 3d20 303b 0a09 0969 6620 2865 7869 5 = 0;...if (exi │ │ │ │ +00005740: 7374 7320 2424 7573 6564 426c 6f63 6b49 sts $$usedBlockI │ │ │ │ +00005750: 6e6f 6465 737b 2469 6e6f 6465 7d29 0a09 nodes{$inode}).. │ │ │ │ +00005760: 097b 0a23 7072 696e 7420 2269 6e6f 6465 .{.#print "inode │ │ │ │ +00005770: 2061 6c72 6561 6479 2063 616c 6375 6c61 already calcula │ │ │ │ +00005780: 7465 643a 2024 696e 6f64 655c 6e22 3b0a ted: $inode\n";. │ │ │ │ +00005790: 0909 2020 2020 2b2b 246c 696e 6b65 6446 .. ++$linkedF │ │ │ │ +000057a0: 696c 6573 3b0a 0909 2020 2020 246c 696e iles;... $lin │ │ │ │ +000057b0: 6b65 6446 696c 6573 5369 7a65 202b 3d20 kedFilesSize += │ │ │ │ +000057c0: 2473 697a 653b 0a09 097d 0a09 0965 6c73 $size;...}...els │ │ │ │ +000057d0: 650a 0909 7b0a 0909 2020 2020 2b2b 2463 e...{... ++$c │ │ │ │ +000057e0: 6865 636b 6564 4669 6c65 733b 0a09 0920 heckedFiles;... │ │ │ │ +000057f0: 2020 2024 6368 6563 6b65 6446 696c 6573 $checkedFiles │ │ │ │ +00005800: 5369 7a65 202b 3d20 2473 697a 653b 0a09 Size += $size;.. │ │ │ │ +00005810: 0920 2020 2024 6361 6c63 4d44 3520 3d20 . $calcMD5 = │ │ │ │ +00005820: 313b 0a09 097d 0a09 0924 2475 7365 6442 1;...}...$$usedB │ │ │ │ +00005830: 6c6f 636b 496e 6f64 6573 7b24 696e 6f64 lockInodes{$inod │ │ │ │ +00005840: 657d 203d 2024 696e 6f64 653b 0a0a 0909 e} = $inode;.... │ │ │ │ +00005850: 6c6f 6361 6c20 2a46 524f 4d3b 0a09 096d local *FROM;...m │ │ │ │ +00005860: 7920 2466 696c 6549 6e20 3d20 756e 6465 y $fileIn = unde │ │ │ │ +00005870: 663b 0a09 0969 6620 2824 656e 7472 7920 f;...if ($entry │ │ │ │ +00005880: 3d7e 202f 2470 6f73 7466 6978 5c5a 2f29 =~ /$postfix\Z/) │ │ │ │ +00005890: 2020 2020 2320 636f 6d70 7265 7373 6564 # compressed │ │ │ │ +000058a0: 2062 6c6f 636b 0a09 097b 0a09 0920 2020 block...{... │ │ │ │ +000058b0: 2024 6669 6c65 496e 203d 0a09 0909 7069 $fileIn =....pi │ │ │ │ +000058c0: 7065 4672 6f6d 466f 726b 2d3e 6e65 7728 peFromFork->new( │ │ │ │ +000058d0: 272d 6578 6563 2720 3d3e 2024 756e 636f '-exec' => $unco │ │ │ │ +000058e0: 6d70 722c 0a09 0909 0909 2020 272d 7061 mpr,...... '-pa │ │ │ │ +000058f0: 7261 6d27 203d 3e20 5c40 756e 636f 6d70 ram' => \@uncomp │ │ │ │ +00005900: 7250 6172 2c0a 0909 0909 0920 2027 2d73 rPar,...... '-s │ │ │ │ +00005910: 7464 696e 2720 3d3e 2022 2466 2f24 656e tdin' => "$f/$en │ │ │ │ +00005920: 7472 7922 2c0a 0909 0909 0920 2027 2d6f try",...... '-o │ │ │ │ +00005930: 7574 5261 6e64 6f6d 2720 3d3e 2027 2f74 utRandom' => '/t │ │ │ │ +00005940: 6d70 2f73 7462 7550 6970 6546 726f 6d31 mp/stbuPipeFrom1 │ │ │ │ +00005950: 322d 272c 0a09 0909 0909 2020 272d 7072 2-',...... '-pr │ │ │ │ +00005960: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ │ +00005970: 0a09 097d 0a09 0965 6c73 6520 2020 2020 ...}...else │ │ │ │ +00005980: 2020 2020 2020 2320 626c 6f63 6b20 6e6f # block no │ │ │ │ +00005990: 7420 636f 6d70 7265 7373 6564 0a09 097b t compressed...{ │ │ │ │ +000059a0: 0a09 0920 2020 2075 6e6c 6573 7320 2873 ... unless (s │ │ │ │ +000059b0: 7973 6f70 656e 2846 524f 4d2c 2022 2466 ysopen(FROM, "$f │ │ │ │ +000059c0: 2f24 656e 7472 7922 2c20 4f5f 5244 4f4e /$entry", O_RDON │ │ │ │ +000059d0: 4c59 2929 0a09 0920 2020 207b 0a09 0909 LY))... {.... │ │ │ │ +000059e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000059f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00005a00: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00005a10: 3e20 5b22 6361 6e6e 6f74 2072 6561 6420 > ["cannot read │ │ │ │ +00005a20: 3c24 662f 2465 6e74 7279 3e22 5d29 3b0a <$f/$entry>"]);. │ │ │ │ +00005a30: 0909 092b 2b24 6e72 4572 726f 7273 3b0a ...++$nrErrors;. │ │ │ │ +00005a40: 0909 0970 7269 6e74 204f 5554 2022 6572 ...print OUT "er │ │ │ │ +00005a50: 726f 7273 2024 6e72 4572 726f 7273 5c6e rors $nrErrors\n │ │ │ │ +00005a60: 223b 0a09 0909 7265 7475 726e 2031 3b0a ";....return 1;. │ │ │ │ +00005a70: 0909 2020 2020 7d0a 0909 7d0a 0909 6d79 .. }...}...my │ │ │ │ +00005a80: 2024 6275 6666 6572 3b0a 0909 6d79 2024 $buffer;...my $ │ │ │ │ +00005a90: 6d64 3542 6c6f 636b 203d 2044 6967 6573 md5Block = Diges │ │ │ │ +00005aa0: 743a 3a4d 4435 2d3e 6e65 7728 2920 6966 t::MD5->new() if │ │ │ │ +00005ab0: 2024 6361 6c63 4d44 353b 0a09 0977 6869 $calcMD5;...whi │ │ │ │ +00005ac0: 6c65 2028 2466 696c 6549 6e20 3f20 2473 le ($fileIn ? $s │ │ │ │ +00005ad0: 697a 6520 3d20 2466 696c 6549 6e2d 3e73 ize = $fileIn->s │ │ │ │ +00005ae0: 7973 7265 6164 285c 2462 7566 6665 722c ysread(\$buffer, │ │ │ │ +00005af0: 2024 626c 6f63 6b53 697a 6529 203a 0a09 $blockSize) :.. │ │ │ │ +00005b00: 0920 2020 2020 2020 7379 7372 6561 6428 . sysread( │ │ │ │ +00005b10: 4652 4f4d 2c20 2462 7566 6665 722c 2024 FROM, $buffer, $ │ │ │ │ +00005b20: 626c 6f63 6b53 697a 6529 290a 0909 7b0a blockSize))...{. │ │ │ │ +00005b30: 0909 2020 2020 246d 6435 416c 6c2d 3e61 .. $md5All->a │ │ │ │ +00005b40: 6464 2824 6275 6666 6572 293b 0a09 0920 dd($buffer);... │ │ │ │ +00005b50: 2020 2024 6d64 3542 6c6f 636b 2d3e 6164 $md5Block->ad │ │ │ │ +00005b60: 6428 2462 7566 6665 7229 2069 6620 2463 d($buffer) if $c │ │ │ │ +00005b70: 616c 634d 4435 3b0a 0909 7d0a 0909 6966 alcMD5;...}...if │ │ │ │ +00005b80: 2028 2466 696c 6549 6e29 0a09 097b 0a09 ($fileIn)...{.. │ │ │ │ +00005b90: 0920 2020 2024 6669 6c65 496e 2d3e 636c . $fileIn->cl │ │ │ │ +00005ba0: 6f73 6528 293b 0a09 0920 2020 2024 6669 ose();... $fi │ │ │ │ +00005bb0: 6c65 496e 203d 2075 6e64 6566 3b0a 0909 leIn = undef;... │ │ │ │ +00005bc0: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... │ │ │ │ +00005bd0: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);. │ │ │ │ +00005be0: 0909 7d0a 0a09 096d 7920 2464 6967 6573 ..}....my $diges │ │ │ │ +00005bf0: 7420 3d20 246d 6435 426c 6f63 6b2d 3e68 t = $md5Block->h │ │ │ │ +00005c00: 6578 6469 6765 7374 2829 2069 6620 2463 exdigest() if $c │ │ │ │ +00005c10: 616c 634d 4435 3b0a 2370 7269 6e74 2022 alcMD5;.#print " │ │ │ │ +00005c20: 2466 2f24 656e 7472 793a 5c6e 223b 0a23 $f/$entry:\n";.# │ │ │ │ +00005c30: 7072 696e 7420 225c 7424 6469 6765 7374 print "\t$digest │ │ │ │ +00005c40: 203d 2064 6967 6573 745c 6e22 3b0a 2370 = digest\n";.#p │ │ │ │ +00005c50: 7269 6e74 2022 5c74 222c 2024 696e 6f64 rint "\t", $inod │ │ │ │ +00005c60: 6532 6d64 357b 2469 6e6f 6465 7d2c 2022 e2md5{$inode}, " │ │ │ │ +00005c70: 203d 2069 6e6f 6465 2028 2469 6e6f 6465 = inode ($inode │ │ │ │ +00005c80: 295c 2069 6620 2463 616c 634d 4435 3b6e )\ if $calcMD5;n │ │ │ │ +00005c90: 223b 0a09 0969 6620 286e 6f74 2065 7869 ";...if (not exi │ │ │ │ +00005ca0: 7374 7320 2469 6e6f 6465 326d 6435 7b24 sts $inode2md5{$ │ │ │ │ +00005cb0: 696e 6f64 657d 290a 0909 7b0a 0909 2020 inode})...{... │ │ │ │ +00005cc0: 2020 2b2b 246e 7245 7272 6f72 733b 0a09 ++$nrErrors;.. │ │ │ │ +00005cd0: 0920 2020 2070 7269 6e74 204f 5554 2022 . print OUT " │ │ │ │ +00005ce0: 6572 726f 7273 2024 6e72 4572 726f 7273 errors $nrErrors │ │ │ │ +00005cf0: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \n";... $prLo │ │ │ │ +00005d00: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00005d10: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ │ +00005d20: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ │ +00005d30: 223c 2466 2f24 656e 7472 793e 2069 7320 "<$f/$entry> is │ │ │ │ +00005d40: 6d69 7373 696e 6720 696e 2022 202e 0a09 missing in " ... │ │ │ │ +00005d50: 0909 0920 2020 223c 2466 2f2e 6d64 3542 ... "<$f/.md5B │ │ │ │ +00005d60: 6c6f 636b 4368 6563 6b53 756d 732e 627a lockCheckSums.bz │ │ │ │ +00005d70: 323e 225d 293b 0a09 097d 0a09 0965 6c73 2>"]);...}...els │ │ │ │ +00005d80: 6966 2028 2463 616c 634d 4435 2061 6e64 if ($calcMD5 and │ │ │ │ +00005d90: 2024 6469 6765 7374 206e 6520 2469 6e6f $digest ne $ino │ │ │ │ +00005da0: 6465 326d 6435 7b24 696e 6f64 657d 290a de2md5{$inode}). │ │ │ │ +00005db0: 0909 7b0a 0909 2020 2020 2b2b 246e 7245 ..{... ++$nrE │ │ │ │ +00005dc0: 7272 6f72 733b 0a09 0920 2020 2070 7269 rrors;... pri │ │ │ │ +00005dd0: 6e74 204f 5554 2022 6572 726f 7273 2024 nt OUT "errors $ │ │ │ │ +00005de0: 6e72 4572 726f 7273 5c6e 223b 0a09 0920 nrErrors\n";... │ │ │ │ +00005df0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00005e00: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00005e10: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ │ +00005e20: 0a09 0909 0920 205b 2263 616c 6375 6c61 ..... ["calcula │ │ │ │ +00005e30: 7465 6420 6d64 3520 7375 6d20 6f66 203c ted md5 sum of < │ │ │ │ +00005e40: 2466 2f24 656e 7472 793e 2069 7320 2220 $f/$entry> is " │ │ │ │ +00005e50: 2e0a 0909 0909 2020 2022 6469 6666 6572 ...... "differ │ │ │ │ +00005e60: 656e 7420 6672 6f6d 2074 6865 206f 6e65 ent from the one │ │ │ │ +00005e70: 2069 6e20 2220 2e0a 0909 0909 2020 2022 in " ...... " │ │ │ │ +00005e80: 3c24 662f 2e6d 6435 426c 6f63 6b43 6865 <$f/.md5BlockChe │ │ │ │ +00005e90: 636b 5375 6d73 2e62 7a32 3e22 5d29 3b0a ckSums.bz2>"]);. │ │ │ │ +00005ea0: 0909 7d0a 0920 2020 207d 0a0a 0920 2020 ..}.. }... │ │ │ │ +00005eb0: 2069 6620 2824 6d64 3573 756d 206e 6520 if ($md5sum ne │ │ │ │ +00005ec0: 246d 6435 416c 6c2d 3e68 6578 6469 6765 $md5All->hexdige │ │ │ │ +00005ed0: 7374 2829 290a 0920 2020 207b 0a09 096d st()).. {...m │ │ │ │ +00005ee0: 7920 2469 6e6f 6465 203d 2028 7374 6174 y $inode = (stat │ │ │ │ +00005ef0: 2824 6629 295b 315d 3b0a 0909 7072 696e ($f))[1];...prin │ │ │ │ +00005f00: 7420 4f55 5420 2263 6f72 7275 7074 2024 t OUT "corrupt $ │ │ │ │ +00005f10: 696e 6f64 6522 3b0a 0920 2020 207d 0a09 inode";.. }.. │ │ │ │ +00005f20: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {. │ │ │ │ +00005f30: 2370 7269 6e74 2022 656e 6420 6368 6563 #print "end chec │ │ │ │ +00005f40: 6b69 6e67 2062 6c6f 636b 6564 2066 696c king blocked fil │ │ │ │ +00005f50: 6520 2466 5c6e 223b 0a09 0923 2072 6561 e $f\n";...# rea │ │ │ │ +00005f60: 6479 0a09 2020 2020 7d0a 2370 7269 6e74 dy.. }.#print │ │ │ │ +00005f70: 2022 6368 6563 6b65 6420 3c24 663e 5c6e "checked <$f>\n │ │ │ │ +00005f80: 223b 0a09 7d0a 2020 2020 7d0a 0a20 2020 ";..}. }.. │ │ │ │ +00005f90: 2070 7269 6e74 204f 5554 2022 6572 726f print OUT "erro │ │ │ │ +00005fa0: 7273 2024 6e72 4572 726f 7273 5c6e 223b rs $nrErrors\n"; │ │ │ │ +00005fb0: 0a20 2020 2070 7269 6e74 204f 5554 2022 . print OUT " │ │ │ │ +00005fc0: 6368 6563 6b65 6446 696c 6573 2024 6368 checkedFiles $ch │ │ │ │ +00005fd0: 6563 6b65 6446 696c 6573 5c6e 223b 0a20 eckedFiles\n";. │ │ │ │ +00005fe0: 2020 2070 7269 6e74 204f 5554 2022 6368 print OUT "ch │ │ │ │ +00005ff0: 6563 6b65 6446 696c 6573 5369 7a65 2024 eckedFilesSize $ │ │ │ │ +00006000: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize │ │ │ │ +00006010: 5c6e 223b 0a20 2020 2070 7269 6e74 204f \n";. print O │ │ │ │ +00006020: 5554 2022 6c69 6e6b 6564 4669 6c65 7320 UT "linkedFiles │ │ │ │ +00006030: 246c 696e 6b65 6446 696c 6573 5c6e 223b $linkedFiles\n"; │ │ │ │ +00006040: 0a20 2020 2070 7269 6e74 204f 5554 2022 . print OUT " │ │ │ │ +00006050: 6c69 6e6b 6564 4669 6c65 7353 697a 6520 linkedFilesSize │ │ │ │ +00006060: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize │ │ │ │ +00006070: 5c6e 223b 0a0a 2020 2020 7072 696e 7420 \n";.. print │ │ │ │ +00006080: 4f55 5420 2263 616c 6365 6449 6e6f 6465 OUT "calcedInode │ │ │ │ +00006090: 735c 6e22 3b0a 2020 2020 6d79 2024 693b s\n";. my $i; │ │ │ │ +000060a0: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i │ │ │ │ +000060b0: 286b 6579 7320 2569 6e6f 6465 326d 6435 (keys %inode2md5 │ │ │ │ +000060c0: 290a 2020 2020 7b0a 0970 7269 6e74 204f ). {..print O │ │ │ │ +000060d0: 5554 2022 2469 5c6e 223b 0a20 2020 207d UT "$i\n";. } │ │ │ │ +000060e0: 0a0a 2020 2020 636c 6f73 6528 4f55 5429 .. close(OUT) │ │ │ │ +000060f0: 3b0a 2020 2020 7265 7475 726e 2030 3b0a ;. return 0;. │ │ │ │ +00006100: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ │ +00006110: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006120: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006130: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006140: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all │ │ │ │ +00006150: 6669 6c65 7320 696e 2024 6469 7220 6172 files in $dir ar │ │ │ │ +00006160: 6520 696e 2074 6865 2068 6173 680a 2320 e in the hash.# │ │ │ │ +00006170: 616e 6420 6966 2066 696c 6573 2069 6e20 and if files in │ │ │ │ +00006180: 2464 6972 2061 7265 206d 6973 7369 6e67 $dir are missing │ │ │ │ +00006190: 2069 6e20 7468 6520 6861 7368 0a73 7562 in the hash.sub │ │ │ │ +000061a0: 2063 6865 636b 416c 6c46 696c 6573 0a7b checkAllFiles.{ │ │ │ │ +000061b0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $ │ │ │ │ +000061c0: 7265 6c46 696c 6573 2c20 2470 724c 6f67 relFiles, $prLog │ │ │ │ +000061d0: 2920 3d20 405f 3b0a 0a23 7072 696e 7420 ) = @_;..#print │ │ │ │ +000061e0: 222d 312d 206b 6579 7320 7265 6c46 696c "-1- keys relFil │ │ │ │ +000061f0: 6573 3d5c 6e5c 7422 2c20 6a6f 696e 2822 es=\n\t", join(" │ │ │ │ +00006200: 5c6e 5c74 222c 2073 6f72 7420 6b65 7973 \n\t", sort keys │ │ │ │ +00006210: 2025 2472 656c 4669 6c65 7329 2c20 225c %$relFiles), "\ │ │ │ │ +00006220: 6e22 3b0a 2020 2020 265f 6368 6563 6b41 n";. &_checkA │ │ │ │ +00006230: 6c6c 4669 6c65 7328 6c65 6e67 7468 2824 llFiles(length($ │ │ │ │ +00006240: 6469 7229 2b31 2c20 2464 6972 2c20 2472 dir)+1, $dir, $r │ │ │ │ +00006250: 656c 4669 6c65 732c 2024 7072 4c6f 6729 elFiles, $prLog) │ │ │ │ +00006260: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...########## │ │ │ │ +00006270: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006280: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006290: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000062a0: 2323 0a73 7562 205f 6368 6563 6b41 6c6c ##.sub _checkAll │ │ │ │ +000062b0: 4669 6c65 730a 7b0a 2020 2020 6d79 2028 Files.{. my ( │ │ │ │ +000062c0: 246c 656e 6774 682c 2024 6469 722c 2024 $length, $dir, $ │ │ │ │ +000062d0: 7265 6c46 696c 6573 2c20 2470 724c 6f67 relFiles, $prLog │ │ │ │ +000062e0: 2920 3d20 405f 3b0a 0a23 7072 696e 7420 ) = @_;..#print │ │ │ │ +000062f0: 222d 322d 205f 6368 6563 6b41 6c6c 4669 "-2- _checkAllFi │ │ │ │ +00006300: 6c65 733a 2024 6c65 6e67 7468 2c20 2464 les: $length, $d │ │ │ │ +00006310: 6972 5c6e 223b 0a0a 2020 2020 6d79 2024 ir\n";.. my $ │ │ │ │ +00006320: 7265 6c20 3d20 756e 6465 663b 0a20 2020 rel = undef;. │ │ │ │ +00006330: 2069 6620 286c 656e 6774 6828 2464 6972 if (length($dir │ │ │ │ +00006340: 2920 3e20 246c 656e 6774 6829 0a20 2020 ) > $length). │ │ │ │ +00006350: 207b 0a09 2472 656c 203d 2073 7562 7374 {..$rel = subst │ │ │ │ +00006360: 7228 2464 6972 2c20 246c 656e 6774 6829 r($dir, $length) │ │ │ │ +00006370: 3b0a 2370 7269 6e74 2022 5c74 2d33 2d20 ;.#print "\t-3- │ │ │ │ +00006380: 7365 7431 2072 656c 203c 2472 656c 3e5c set1 rel <$rel>\ │ │ │ │ +00006390: 6e22 3b0a 2020 2020 7d0a 2020 2020 6966 n";. }. if │ │ │ │ +000063a0: 2028 2472 656c 290a 2020 2020 7b0a 2370 ($rel). {.#p │ │ │ │ +000063b0: 7269 6e74 2022 5c74 2d34 2d20 6368 6563 rint "\t-4- chec │ │ │ │ +000063c0: 6b31 2d3e 203c 2472 656c 3e5c 6e22 3b0a k1-> <$rel>\n";. │ │ │ │ +000063d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +000063e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +000063f0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00006400: 205b 223c 2472 656c 3e20 6973 206e 6f74 ["<$rel> is not │ │ │ │ +00006410: 206c 6973 7465 6420 696e 202e 6d64 3543 listed in .md5C │ │ │ │ +00006420: 6865 636b 5375 6d20 2831 2922 5d29 0a09 heckSum (1)"]).. │ │ │ │ +00006430: 2020 2020 756e 6c65 7373 2065 7869 7374 unless exist │ │ │ │ +00006440: 7320 2424 7265 6c46 696c 6573 7b24 7265 s $$relFiles{$re │ │ │ │ +00006450: 6c7d 3b0a 2020 2020 7d0a 0a20 2020 206c l};. }.. l │ │ │ │ +00006460: 6f63 616c 202a 4449 523b 0a20 2020 2075 ocal *DIR;. u │ │ │ │ +00006470: 6e6c 6573 7320 286f 7065 6e64 6972 2844 nless (opendir(D │ │ │ │ +00006480: 4952 2c20 2464 6972 2929 0a20 2020 207b IR, $dir)). { │ │ │ │ +00006490: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +000064a0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +000064b0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +000064c0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e64 > ["cannot opend │ │ │ │ +000064d0: 6972 203c 2464 6972 3e22 5d29 3b0a 0972 ir <$dir>"]);..r │ │ │ │ +000064e0: 6574 7572 6e3b 0a20 2020 207d 0a20 2020 eturn;. }. │ │ │ │ +000064f0: 206d 7920 2465 3b0a 2020 2020 7768 696c my $e;. whil │ │ │ │ +00006500: 6520 2824 6520 3d20 7265 6164 6469 7220 e ($e = readdir │ │ │ │ +00006510: 4449 5229 0a20 2020 207b 0a09 6e65 7874 DIR). {..next │ │ │ │ +00006520: 2069 6620 2824 6520 6571 2027 2e27 206f if ($e eq '.' o │ │ │ │ +00006530: 7220 2465 2065 7120 272e 2e27 293b 0a09 r $e eq '..');.. │ │ │ │ +00006540: 6d79 2024 6465 203d 2022 2464 6972 2f24 my $de = "$dir/$ │ │ │ │ +00006550: 6522 3b0a 2370 7269 6e74 2022 5c74 2d35 e";.#print "\t-5 │ │ │ │ +00006560: 2d20 6465 203c 2464 653e 5c6e 223b 0a0a - de <$de>\n";.. │ │ │ │ +00006570: 2320 646f 6e27 7420 6361 7265 2061 626f # don't care abo │ │ │ │ +00006580: 7574 2062 6c6f 636b 6564 2066 696c 6573 ut blocked files │ │ │ │ +00006590: 2c20 7468 6579 2061 7265 2061 6c72 6561 , they are alrea │ │ │ │ +000065a0: 6479 2063 6865 636b 0a23 2069 6e20 7375 dy check.# in su │ │ │ │ +000065b0: 6220 6368 6563 6b4d 4435 0a0a 0924 7265 b checkMD5...$re │ │ │ │ +000065c0: 6c20 3d20 7375 6273 7472 2824 6465 2c20 l = substr($de, │ │ │ │ +000065d0: 246c 656e 6774 6829 3b0a 2370 7269 6e74 $length);.#print │ │ │ │ +000065e0: 2022 5c74 2d31 302d 2073 6574 3220 7265 "\t-10- set2 re │ │ │ │ +000065f0: 6c20 3c24 7265 6c3e 5c6e 223b 0a09 2470 l <$rel>\n";..$p │ │ │ │ +00006600: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00006610: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ │ +00006620: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00006630: 3c24 7265 6c3e 2069 7320 6e6f 7420 6c69 <$rel> is not li │ │ │ │ +00006640: 7374 6564 2069 6e20 2e6d 6435 4368 6563 sted in .md5Chec │ │ │ │ +00006650: 6b53 756d 2028 3229 225d 290a 0920 2020 kSum (2)"]).. │ │ │ │ +00006660: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $ │ │ │ │ +00006670: 2472 656c 4669 6c65 737b 2472 656c 7d3b $relFiles{$rel}; │ │ │ │ +00006680: 0a20 2020 207d 0a20 2020 2063 6c6f 7365 . }. close │ │ │ │ +00006690: 6469 7228 4449 5229 206f 720a 0924 7072 dir(DIR) or..$pr │ │ │ │ +000066a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000066b0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... │ │ │ │ +000066c0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +000066d0: 616e 6e6f 7420 636c 6f73 6564 6972 203c annot closedir < │ │ │ │ +000066e0: 2464 6972 3e22 5d29 3b0a 7d0a 0a0a 2323 $dir>"]);.}...## │ │ │ │ +000066f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006700: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006710: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00006720: 0a23 2070 6163 6b61 6765 2070 7269 6e74 .# package print │ │ │ │ +00006730: 4c6f 674d 756c 7469 706c 6520 6e65 6564 LogMultiple need │ │ │ │ +00006740: 7320 7468 6973 2066 756e 6374 696f 6e0a s this function. │ │ │ │ +00006750: 7375 6220 636c 6561 6e75 700a 7b0a 2020 sub cleanup.{. │ │ │ │ +00006760: 2020 6d79 2024 7369 676e 616d 6520 3d20 my $signame = │ │ │ │ +00006770: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e │ │ │ │ +00006780: 7869 7420 3d20 2873 6869 6674 2829 207c xit = (shift() | │ │ │ │ +00006790: 7c20 3129 3b0a 0a20 2020 2065 7869 7420 | 1);.. exit │ │ │ │ +000067a0: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...##### │ │ │ │ +000067b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000067c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000067d0: 2323 2323 2323 2323 2323 2323 230a 2320 #############.# │ │ │ │ +000067e0: 7072 696e 7420 7374 6174 6973 7469 6361 print statistica │ │ │ │ +000067f0: 6c20 6461 7461 0a73 7562 2070 7269 6e74 l data.sub print │ │ │ │ +00006800: 5374 6174 0a7b 0a20 2020 206d 7920 2824 Stat.{. my ($ │ │ │ │ +00006810: 7072 4c6f 672c 2024 7465 7874 2c20 2463 prLog, $text, $c │ │ │ │ +00006820: 6865 636b 6564 4669 6c65 732c 2024 6368 heckedFiles, $ch │ │ │ │ +00006830: 6563 6b65 6446 696c 6573 5369 7a65 2c0a eckedFilesSize,. │ │ │ │ +00006840: 0924 6c69 6e6b 6564 4669 6c65 732c 2024 .$linkedFiles, $ │ │ │ │ +00006850: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize) │ │ │ │ +00006860: 203d 2028 405f 293b 0a0a 2020 2020 6d79 = (@_);.. my │ │ │ │ +00006870: 2024 6368 6563 6b50 203d 2030 3b0a 0a20 $checkP = 0;.. │ │ │ │ +00006880: 2020 2024 6368 6563 6b50 203d 2069 6e74 $checkP = int │ │ │ │ +00006890: 2824 6368 6563 6b65 6446 696c 6573 5369 ($checkedFilesSi │ │ │ │ +000068a0: 7a65 202a 2031 3030 3030 202f 0a09 0920 ze * 10000 /... │ │ │ │ +000068b0: 2028 2463 6865 636b 6564 4669 6c65 7353 ($checkedFilesS │ │ │ │ +000068c0: 697a 6520 2b20 246c 696e 6b65 6446 696c ize + $linkedFil │ │ │ │ +000068d0: 6573 5369 7a65 2920 2b2e 3529 202f 2031 esSize) +.5) / 1 │ │ │ │ +000068e0: 3030 0a09 0920 2069 6620 2824 6368 6563 00... if ($chec │ │ │ │ +000068f0: 6b65 6446 696c 6573 5369 7a65 202b 2024 kedFilesSize + $ │ │ │ │ +00006900: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize) │ │ │ │ +00006910: 203e 2030 3b0a 0a20 2020 2024 7072 4c6f > 0;.. $prLo │ │ │ │ +00006920: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00006930: 203d 3e20 2753 272c 0a09 0920 2027 2d73 => 'S',... '-s │ │ │ │ +00006940: 7472 2720 3d3e 205b 2224 7465 7874 2063 tr' => ["$text c │ │ │ │ +00006950: 6865 636b 6564 2024 6368 6563 6b65 6446 hecked $checkedF │ │ │ │ +00006960: 696c 6573 2066 696c 6573 2028 2220 2e0a iles files (" .. │ │ │ │ +00006970: 0909 0920 2020 2020 2826 3a3a 6875 6d61 ... (&::huma │ │ │ │ +00006980: 6e52 6561 6461 626c 6528 2463 6865 636b nReadable($check │ │ │ │ +00006990: 6564 4669 6c65 7353 697a 6529 295b 305d edFilesSize))[0] │ │ │ │ +000069a0: 202e 0a09 0909 2020 2020 2022 2920 2822 ..... ") (" │ │ │ │ +000069b0: 202e 2024 6368 6563 6b50 202e 2022 2529 . $checkP . "%) │ │ │ │ +000069c0: 222c 0a09 0909 2020 2020 2022 2474 6578 ",.... "$tex │ │ │ │ +000069d0: 7420 6c69 6e6b 6564 2066 696c 6573 2077 t linked files w │ │ │ │ +000069e0: 6572 6520 246c 696e 6b65 6446 696c 6573 ere $linkedFiles │ │ │ │ +000069f0: 2028 2220 2e20 0a09 0909 2020 2020 2028 (" . .... ( │ │ │ │ +00006a00: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable │ │ │ │ +00006a10: 2824 6c69 6e6b 6564 4669 6c65 7353 697a ($linkedFilesSiz │ │ │ │ +00006a20: 6529 295b 305d 202e 2022 2922 5d29 3b0a e))[0] . ")"]);. │ │ │ │ +00006a30: 7d0a 0a }.. │ │ │ ├── ./usr/bin/storeBackupConvertBackup │ │ │ │ @@ -1,4 +1,688 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7043 6f6e 7665 7274 4261 636b 7570 0a pConvertBackup. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 322c 3230 3034 2c32 3031 3229 0a23 2020 2,2004,2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 2020 2020 2068 h │ │ │ │ +00000060: 6a63 6c61 6573 4077 6562 2e64 650a 2320 jclaes@web.de.# │ │ │ │ +00000070: 2020 0a23 2020 2054 6869 7320 7072 6f67 .# This prog │ │ │ │ +00000080: 7261 6d20 6973 2066 7265 6520 736f 6674 ram is free soft │ │ │ │ +00000090: 7761 7265 3a20 796f 7520 6361 6e20 7265 ware: you can re │ │ │ │ +000000a0: 6469 7374 7269 6275 7465 2069 7420 616e distribute it an │ │ │ │ +000000b0: 642f 6f72 206d 6f64 6966 790a 2320 2020 d/or modify.# │ │ │ │ +000000c0: 6974 2075 6e64 6572 2074 6865 2074 6572 it under the ter │ │ │ │ +000000d0: 6d73 206f 6620 7468 6520 474e 5520 4765 ms of the GNU Ge │ │ │ │ +000000e0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ │ +000000f0: 656e 7365 2061 7320 7075 626c 6973 6865 ense as publishe │ │ │ │ +00000100: 6420 6279 0a23 2020 2074 6865 2046 7265 d by.# the Fre │ │ │ │ +00000110: 6520 536f 6674 7761 7265 2046 6f75 6e64 e Software Found │ │ │ │ +00000120: 6174 696f 6e2c 2065 6974 6865 7220 7665 ation, either ve │ │ │ │ +00000130: 7273 696f 6e20 3320 6f66 2074 6865 204c rsion 3 of the L │ │ │ │ +00000140: 6963 656e 7365 2c20 6f72 0a23 2020 2028 icense, or.# ( │ │ │ │ +00000150: 6174 2079 6f75 7220 6f70 7469 6f6e 2920 at your option) │ │ │ │ +00000160: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio │ │ │ │ +00000170: 6e2e 0a0a 2320 2020 5468 6973 2070 726f n...# This pro │ │ │ │ +00000180: 6772 616d 2069 7320 6469 7374 7269 6275 gram is distribu │ │ │ │ +00000190: 7465 6420 696e 2074 6865 2068 6f70 6520 ted in the hope │ │ │ │ +000001a0: 7468 6174 2069 7420 7769 6c6c 2062 6520 that it will be │ │ │ │ +000001b0: 7573 6566 756c 2c0a 2320 2020 6275 7420 useful,.# but │ │ │ │ +000001c0: 5749 5448 4f55 5420 414e 5920 5741 5252 WITHOUT ANY WARR │ │ │ │ +000001d0: 414e 5459 3b20 7769 7468 6f75 7420 6576 ANTY; without ev │ │ │ │ +000001e0: 656e 2074 6865 2069 6d70 6c69 6564 2077 en the implied w │ │ │ │ +000001f0: 6172 7261 6e74 7920 6f66 0a23 2020 204d arranty of.# M │ │ │ │ +00000200: 4552 4348 414e 5441 4249 4c49 5459 206f ERCHANTABILITY o │ │ │ │ +00000210: 7220 4649 544e 4553 5320 464f 5220 4120 r FITNESS FOR A │ │ │ │ +00000220: 5041 5254 4943 554c 4152 2050 5552 504f PARTICULAR PURPO │ │ │ │ +00000230: 5345 2e20 2053 6565 2074 6865 0a23 2020 SE. See the.# │ │ │ │ +00000240: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ │ +00000250: 6c69 6320 4c69 6365 6e73 6520 666f 7220 lic License for │ │ │ │ +00000260: 6d6f 7265 2064 6574 6169 6c73 2e0a 230a more details..#. │ │ │ │ +00000270: 2320 2020 596f 7520 7368 6f75 6c64 2068 # You should h │ │ │ │ +00000280: 6176 6520 7265 6365 6976 6564 2061 2063 ave received a c │ │ │ │ +00000290: 6f70 7920 6f66 2074 6865 2047 4e55 2047 opy of the GNU G │ │ │ │ +000002a0: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li │ │ │ │ +000002b0: 6365 6e73 650a 2320 2020 616c 6f6e 6720 cense.# along │ │ │ │ +000002c0: 7769 7468 2074 6869 7320 7072 6f67 7261 with this progra │ │ │ │ +000002d0: 6d2e 2020 4966 206e 6f74 2c20 7365 6520 m. If not, see │ │ │ │ +000002e0: 3c68 7474 703a 2f2f 7777 772e 676e 752e .. │ │ │ │ +00000300: 230a 0a6d 7920 2456 4552 5349 4f4e 203d #..my $VERSION = │ │ │ │ +00000310: 2027 2449 643a 2073 746f 7265 4261 636b '$Id: storeBack │ │ │ │ +00000320: 7570 436f 6e76 6572 7442 6163 6b75 702e upConvertBackup. │ │ │ │ +00000330: 706c 2033 3632 2032 3031 322d 3031 2d32 pl 362 2012-01-2 │ │ │ │ +00000340: 3820 3232 3a31 313a 3133 5a20 686a 6320 8 22:11:13Z hjc │ │ │ │ +00000350: 2420 273b 0a70 7573 6820 4056 4552 5349 $ ';.push @VERSI │ │ │ │ +00000360: 4f4e 2c20 2456 4552 5349 4f4e 3b0a 0a0a ON, $VERSION;... │ │ │ │ +00000370: 7573 6520 494f 3a3a 4861 6e64 6c65 3b0a use IO::Handle;. │ │ │ │ +00000380: 7573 6520 7374 7269 6374 3b0a 0a73 7562 use strict;..sub │ │ │ │ +00000390: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m │ │ │ │ +000003a0: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift; │ │ │ │ +000003b0: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;.. │ │ │ │ +000003c0: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date │ │ │ │ +000003d0: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym │ │ │ │ +000003e0: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang │ │ │ │ +000003f0: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au │ │ │ │ +00000400: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if ( │ │ │ │ +00000410: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {. │ │ │ │ +00000420: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file │ │ │ │ +00000430: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li │ │ │ │ +00000440: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f │ │ │ │ +00000450: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if ( │ │ │ │ +00000460: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0, │ │ │ │ +00000470: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne "/").. │ │ │ │ +00000480: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/ │ │ │ │ +00000490: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\/]+$/$link/;. │ │ │ │ +000004a0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ │ +000004b0: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file │ │ │ │ +000004c0: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }. │ │ │ │ +000004d0: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil │ │ │ │ +000004e0: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD │ │ │ │ +000004f0: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil │ │ │ │ +00000500: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = "/$file";. │ │ │ │ +00000510: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +00000520: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ │ +00000530: 2022 3c24 6669 6c65 3e20 646f 6573 206e "<$file> does n │ │ │ │ +00000540: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\n";..e │ │ │ │ +00000550: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. │ │ │ │ +00000560: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= "/../l │ │ │ │ +00000570: 6962 223b 2020 2020 2020 2020 2020 2023 ib"; # │ │ │ │ +00000580: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib │ │ │ │ +00000590: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my │ │ │ │ +000005a0: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin │ │ │ │ +000005b0: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp │ │ │ │ +000005c0: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if │ │ │ │ +000005d0: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). │ │ │ │ +000005e0: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir │ │ │ │ +000005f0: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c │ │ │ │ +00000600: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch │ │ │ │ +00000610: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r │ │ │ │ +00000620: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil │ │ │ │ +00000630: 6544 6972 2822 2461 6273 4469 7224 6669 eDir("$absDir$fi │ │ │ │ +00000640: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le"));. }. │ │ │ │ +00000650: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri │ │ │ │ +00000660: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR "<$dir │ │ │ │ +00000670: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist │ │ │ │ +00000680: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\n";. │ │ │ │ +00000690: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF │ │ │ │ +000006a0: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my │ │ │ │ +000006b0: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;.. │ │ │ │ +000006c0: 2020 2020 7265 7475 726e 2028 272e 272c return ('.', │ │ │ │ +000006d0: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless ( │ │ │ │ +000006e0: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\//); │ │ │ │ +000006f0: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache │ │ │ │ +00000700: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. │ │ │ │ +00000710: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file │ │ │ │ +00000720: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^( │ │ │ │ +00000730: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\/(.*)$/s;. │ │ │ │ +00000740: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if │ │ │ │ +00000750: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); │ │ │ │ +00000760: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000770: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z. │ │ │ │ +00000780: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. │ │ │ │ +00000790: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $ │ │ │ │ +000007a0: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re │ │ │ │ +000007b0: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib │ │ │ │ +000007c0: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @ │ │ │ │ +000007d0: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, "$req";..re │ │ │ │ +000007e0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p │ │ │ │ +000007f0: 6c27 3b0a 0a6d 7920 246d 6435 4368 6563 l';..my $md5Chec │ │ │ │ +00000800: 6b53 756d 7320 3d20 272e 6d64 3543 6865 kSums = '.md5Che │ │ │ │ +00000810: 636b 5375 6d73 273b 0a0a 3d68 6561 6431 ckSums';..=head1 │ │ │ │ +00000820: 204e 414d 450a 0a73 746f 7265 4261 636b NAME..storeBack │ │ │ │ +00000830: 7570 436f 6e76 6572 7442 6163 6b75 702e upConvertBackup. │ │ │ │ +00000840: 706c 202d 2063 6f6e 7665 7274 7320 6f6c pl - converts ol │ │ │ │ +00000850: 6420 6261 636b 7570 7320 6372 6561 7465 d backups create │ │ │ │ +00000860: 6420 7769 7468 2073 746f 7265 4261 636b d with storeBack │ │ │ │ +00000870: 7570 2e70 6c20 746f 2074 6865 206e 6577 up.pl to the new │ │ │ │ +00000880: 6573 7420 7665 7273 696f 6e2c 0a0a 3d68 est version,..=h │ │ │ │ +00000890: 6561 6431 2053 594e 4f50 5349 530a 0a73 ead1 SYNOPSIS..s │ │ │ │ +000008a0: 746f 7265 4261 636b 7570 436f 6e76 6572 toreBackupConver │ │ │ │ +000008b0: 7442 6163 6b75 702e 706c 2073 746f 7265 tBackup.pl store │ │ │ │ +000008c0: 4261 636b 7570 2d64 6972 0a0a 3d68 6561 Backup-dir..=hea │ │ │ │ +000008d0: 6431 2044 4553 4352 4950 5449 4f4e 0a0a d1 DESCRIPTION.. │ │ │ │ +000008e0: 5468 6973 2070 726f 6772 616d 2063 6f6e This program con │ │ │ │ +000008f0: 7665 7274 7320 6f6c 6420 6261 636b 7570 verts old backup │ │ │ │ +00000900: 7320 6372 6561 7465 6420 7769 7468 2073 s created with s │ │ │ │ +00000910: 746f 7265 4261 636b 7570 2e70 6c20 746f toreBackup.pl to │ │ │ │ +00000920: 2074 6865 206e 6577 6573 7420 7665 7273 the newest vers │ │ │ │ +00000930: 696f 6e2c 0a63 7572 7265 6e74 6c79 2076 ion,.currently v │ │ │ │ +00000940: 6572 7369 6f6e 2031 2e33 2e0a 796f 7520 ersion 1.3..you │ │ │ │ +00000950: 6361 6e20 7365 6520 7468 6520 7665 7273 can see the vers │ │ │ │ +00000960: 696f 6e20 6279 2074 7970 696e 673a 0a0a ion by typing:.. │ │ │ │ +00000970: 6865 6164 202d 3120 3c20 2e2e 2e3c 7374 head -1 < .../da │ │ │ │ +00000990: 7465 5f74 696d 652f 2e6d 6435 4368 6563 te_time/.md5Chec │ │ │ │ +000009a0: 6b53 756d 732e 696e 666f 0a0a 6f72 2069 kSums.info..or i │ │ │ │ +000009b0: 6620 7468 6174 2066 696c 6520 646f 6573 f that file does │ │ │ │ +000009c0: 206e 6f74 2065 7869 7374 3a0a 0a62 7a69 not exist:..bzi │ │ │ │ +000009d0: 7032 202d 6420 3c20 2e2e 2e3c 7374 6f72 p2 -d < .../date │ │ │ │ +000009f0: 5f74 696d 652f 2e6d 6435 4368 6563 6b53 _time/.md5CheckS │ │ │ │ +00000a00: 756d 732e 627a 3220 7c20 6865 6164 202d ums.bz2 | head - │ │ │ │ +00000a10: 310a 0a28 6966 2079 6f75 2064 6f20 6e6f 1..(if you do no │ │ │ │ +00000a20: 7420 7365 6520 2723 2323 7665 7273 696f t see '###versio │ │ │ │ +00000a30: 6e3d 2e2e 2e27 2c20 6974 2069 7320 7665 n=...', it is ve │ │ │ │ +00000a40: 7273 696f 6e20 312e 300a 0a3d 6865 6164 rsion 1.0..=head │ │ │ │ +00000a50: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop │ │ │ │ +00000a60: 7972 6967 6874 2028 6329 2032 3030 322d yright (c) 2002- │ │ │ │ +00000a70: 3230 3038 2062 7920 4865 696e 7a2d 4a6f 2008 by Heinz-Jo │ │ │ │ +00000a80: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R │ │ │ │ +00000a90: 4541 444d 4529 0a50 7562 6c69 7368 6564 EADME).Published │ │ │ │ +00000aa0: 2075 6e64 6572 2074 6865 2047 4e55 2047 under the GNU G │ │ │ │ +00000ab0: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li │ │ │ │ +00000ac0: 6365 6e73 6520 7633 206f 7220 616e 7920 cense v3 or any │ │ │ │ +00000ad0: 6c61 7465 7220 7665 7273 696f 6e0a 0a3d later version..= │ │ │ │ +00000ae0: 6375 740a 0a6d 7920 2448 656c 7020 3d20 cut..my $Help = │ │ │ │ +00000af0: 6a6f 696e 2827 272c 2067 7265 7028 212f join('', grep(!/ │ │ │ │ +00000b00: 5e5c 732a 242f 2c20 6070 6f64 3274 6578 ^\s*$/, `pod2tex │ │ │ │ +00000b10: 7420 2430 6029 293b 0a24 4865 6c70 203d t $0`));.$Help = │ │ │ │ +00000b20: 2022 6361 6e6e 6f74 2066 696e 6420 706f "cannot find po │ │ │ │ +00000b30: 6432 7465 7874 2c20 7365 6520 646f 6375 d2text, see docu │ │ │ │ +00000b40: 6d65 6e74 6174 696f 6e20 666f 7220 6465 mentation for de │ │ │ │ +00000b50: 7461 696c 735c 6e22 0a20 2020 2075 6e6c tails\n". unl │ │ │ │ +00000b60: 6573 7320 2448 656c 703b 0a0a 2670 7269 ess $Help;..&pri │ │ │ │ +00000b70: 6e74 5665 7273 696f 6e73 285c 4041 5247 ntVersions(\@ARG │ │ │ │ +00000b80: 562c 2027 2d56 2729 3b0a 0a64 6965 2024 V, '-V');..die $ │ │ │ │ +00000b90: 4865 6c70 2069 6620 2840 4152 4756 2021 Help if (@ARGV ! │ │ │ │ +00000ba0: 3d20 3129 3b0a 0a6d 7920 2464 6972 203d = 1);..my $dir = │ │ │ │ +00000bb0: 2073 6869 6674 2040 4152 4756 3b0a 6469 shift @ARGV;.di │ │ │ │ +00000bc0: 6520 2264 6972 6563 746f 7279 203c 2464 e "directory <$d │ │ │ │ +00000bd0: 6972 3e20 646f 6573 206e 6f74 2065 7869 ir> does not exi │ │ │ │ +00000be0: 7374 2220 756e 6c65 7373 2028 2d64 2024 st" unless (-d $ │ │ │ │ +00000bf0: 6469 7229 3b0a 0a6f 7065 6e64 6972 2844 dir);..opendir(D │ │ │ │ +00000c00: 4952 2c20 2464 6972 2920 6f72 0a20 2020 IR, $dir) or. │ │ │ │ +00000c10: 2064 6965 2022 6361 6e6e 6f74 206f 7065 die "cannot ope │ │ │ │ +00000c20: 6e20 3c24 6469 723e 223b 0a6d 7920 2824 n <$dir>";.my ($ │ │ │ │ +00000c30: 656e 7472 792c 2040 656e 7472 6965 7329 entry, @entries) │ │ │ │ +00000c40: 3b0a 7768 696c 6520 2824 656e 7472 7920 ;.while ($entry │ │ │ │ +00000c50: 3d20 7265 6164 6469 7220 4449 5229 0a7b = readdir DIR).{ │ │ │ │ +00000c60: 0a20 2020 206d 7920 2465 203d 2022 2464 . my $e = "$d │ │ │ │ +00000c70: 6972 2f24 656e 7472 7922 3b0a 2020 2020 ir/$entry";. │ │ │ │ +00000c80: 6e65 7874 2069 6620 282d 6c20 2465 2061 next if (-l $e a │ │ │ │ +00000c90: 6e64 206e 6f74 202d 6420 2465 293b 0a20 nd not -d $e);. │ │ │ │ +00000ca0: 2020 2070 7573 6820 4065 6e74 7269 6573 push @entries │ │ │ │ +00000cb0: 2c20 2465 6e74 7279 3b0a 7d0a 636c 6f73 , $entry;.}.clos │ │ │ │ +00000cc0: 6564 6972 2844 4952 293b 0a0a 6d79 2024 edir(DIR);..my $ │ │ │ │ +00000cd0: 666c 6167 203d 2030 3b0a 6d79 2024 6920 flag = 0;.my $i │ │ │ │ +00000ce0: 3d20 313b 0a66 6f72 6561 6368 2024 656e = 1;.foreach $en │ │ │ │ +00000cf0: 7472 7920 2873 6f72 7420 4065 6e74 7269 try (sort @entri │ │ │ │ +00000d00: 6573 290a 7b0a 2020 2020 6e65 7874 2075 es).{. next u │ │ │ │ +00000d10: 6e6c 6573 7320 2465 6e74 7279 203d 7e0a nless $entry =~. │ │ │ │ +00000d20: 092f 5c41 285c 647b 347d 295c 2e28 5c64 ./\A(\d{4})\.(\d │ │ │ │ +00000d30: 7b32 7d29 5c2e 285c 647b 327d 295f 285c {2})\.(\d{2})_(\ │ │ │ │ +00000d40: 647b 327d 295c 2e28 5c64 7b32 7d29 5c2e d{2})\.(\d{2})\. │ │ │ │ +00000d50: 285c 647b 327d 295c 5a2f 6f3b 0a0a 2020 (\d{2})\Z/o;.. │ │ │ │ +00000d60: 2020 2466 6c61 6720 3d20 313b 2020 2023 $flag = 1; # │ │ │ │ +00000d70: 2069 7267 656e 6465 696e 2064 6972 6563 irgendein direc │ │ │ │ +00000d80: 746f 7279 2067 6566 756e 6465 6e0a 0a20 tory gefunden.. │ │ │ │ +00000d90: 2020 206d 7920 2465 203d 2022 2464 6972 my $e = "$dir │ │ │ │ +00000da0: 2f24 656e 7472 7922 3b0a 2020 2020 6d79 /$entry";. my │ │ │ │ +00000db0: 2024 636f 6d70 7265 7373 203d 2030 3b0a $compress = 0;. │ │ │ │ +00000dc0: 0a61 6761 696e 466f 724e 6578 7456 6572 .againForNextVer │ │ │ │ +00000dd0: 7369 6f6e 3a0a 2020 2020 6966 2028 2d66 sion:. if (-f │ │ │ │ +00000de0: 2022 2465 2f24 6d64 3543 6865 636b 5375 "$e/$md5CheckSu │ │ │ │ +00000df0: 6d73 2e69 6e66 6f22 2920 2320 6162 2056 ms.info") # ab V │ │ │ │ +00000e00: 6572 7369 6f6e 2031 2e32 0a20 2020 207b ersion 1.2. { │ │ │ │ +00000e10: 0a09 6966 2028 2d66 2022 2465 2f24 6d64 ..if (-f "$e/$md │ │ │ │ +00000e20: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2") │ │ │ │ +00000e30: 2020 2320 6b6f 6d70 7269 6d69 6572 7465 # komprimierte │ │ │ │ +00000e40: 2056 6572 7369 6f6e 206c 6965 6774 2076 Version liegt v │ │ │ │ +00000e50: 6f72 2c20 6e65 686d 656e 0a09 7b0a 0920 or, nehmen..{.. │ │ │ │ +00000e60: 2020 2024 636f 6d70 7265 7373 203d 2031 $compress = 1 │ │ │ │ +00000e70: 3b0a 097d 0a09 656c 7369 6620 282d 6620 ;..}..elsif (-f │ │ │ │ +00000e80: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ │ +00000e90: 7322 290a 097b 0a09 2020 2020 2463 6f6d s")..{.. $com │ │ │ │ +00000ea0: 7072 6573 7320 3d20 303b 0a09 7d0a 0965 press = 0;..}..e │ │ │ │ +00000eb0: 6c73 650a 097b 0a09 2020 2020 7072 696e lse..{.. prin │ │ │ │ +00000ec0: 7420 2263 616e 6e6f 7420 6f70 656e 203c t "cannot open < │ │ │ │ +00000ed0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00000ee0: 5c5b 2e62 7a32 5c5d 3e5c 6e22 3b0a 0920 \[.bz2\]>\n";.. │ │ │ │ +00000ef0: 2020 206e 6578 743b 0a09 7d0a 0a09 6f70 next;..}...op │ │ │ │ +00000f00: 656e 2849 4e46 4f2c 2022 2465 2f24 6d64 en(INFO, "$e/$md │ │ │ │ +00000f10: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info" │ │ │ │ +00000f20: 2920 6f72 0a09 2020 2020 6469 6520 2263 ) or.. die "c │ │ │ │ +00000f30: 616e 6e6f 7420 6f70 656e 203c 2465 2f24 annot open <$e/$ │ │ │ │ +00000f40: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf │ │ │ │ +00000f50: 6f22 3b0a 096d 7920 2476 3b0a 096d 7920 o";..my $v;..my │ │ │ │ +00000f60: 246c 203d 203c 494e 464f 3e3b 0a09 6368 $l = ;..ch │ │ │ │ +00000f70: 6f70 2024 6c3b 0a09 6966 2028 246c 203d op $l;..if ($l = │ │ │ │ +00000f80: 7e20 2f5e 7665 7273 696f 6e3d 285c 532b ~ /^version=(\S+ │ │ │ │ +00000f90: 292f 290a 097b 0a09 2020 2020 2476 203d )/)..{.. $v = │ │ │ │ +00000fa0: 2024 313b 0a09 7d0a 0965 6c73 650a 097b $1;..}..else..{ │ │ │ │ +00000fb0: 0a09 2020 2020 7072 696e 7420 2263 616e .. print "can │ │ │ │ +00000fc0: 6e6f 7420 6669 6e64 2076 6572 7369 6f6e not find version │ │ │ │ +00000fd0: 2069 6e66 6f72 6d61 7469 6f6e 2069 6e20 information in │ │ │ │ +00000fe0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00000ff0: 2e69 6e66 6f5c 6e22 3b0a 0920 2020 206e .info\n";.. n │ │ │ │ +00001000: 6578 743b 0a09 7d0a 0969 6620 2824 7620 ext;..}..if ($v │ │ │ │ +00001010: 6571 2027 312e 3327 290a 097b 0a09 2020 eq '1.3')..{.. │ │ │ │ +00001020: 2020 7072 696e 7420 2224 656e 7472 793a print "$entry: │ │ │ │ +00001030: 2076 6572 7369 6f6e 203c 2476 3e20 3d3e version <$v> => │ │ │ │ +00001040: 206f 6b2e 5c6e 223b 0a09 7d0a 0965 6c73 ok.\n";..}..els │ │ │ │ +00001050: 6966 2028 2476 2065 7120 2731 2e32 2729 if ($v eq '1.2') │ │ │ │ +00001060: 0a09 7b0a 0920 2020 2070 7269 6e74 2022 ..{.. print " │ │ │ │ +00001070: 2465 6e74 7279 3a20 7665 7273 696f 6e20 $entry: version │ │ │ │ +00001080: 3c24 763e 2063 6f6e 7665 7274 696e 6720 <$v> converting │ │ │ │ +00001090: 746f 2031 2e33 202e 2e2e 223b 0a09 2020 to 1.3 ...";.. │ │ │ │ +000010a0: 2020 5354 444f 5554 2d3e 6175 746f 666c STDOUT->autofl │ │ │ │ +000010b0: 7573 6828 3129 3b0a 0920 2020 206d 7920 ush(1);.. my │ │ │ │ +000010c0: 2824 7569 642c 2024 6769 642c 2024 6d6f ($uid, $gid, $mo │ │ │ │ +000010d0: 6465 293b 0a09 2020 2020 6966 2028 2463 de);.. if ($c │ │ │ │ +000010e0: 6f6d 7072 6573 7320 3d3d 2031 290a 0920 ompress == 1).. │ │ │ │ +000010f0: 2020 207b 0a09 0928 2475 6964 2c20 2467 {...($uid, $g │ │ │ │ +00001100: 6964 2c20 246d 6f64 6529 203d 2028 7374 id, $mode) = (st │ │ │ │ +00001110: 6174 2822 2465 2f24 6d64 3543 6865 636b at("$e/$md5Check │ │ │ │ +00001120: 5375 6d73 2e62 7a32 2229 295b 342c 2035 Sums.bz2"))[4, 5 │ │ │ │ +00001130: 2c20 325d 3b0a 0909 756e 6c69 6e6b 2022 , 2];...unlink " │ │ │ │ +00001140: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00001150: 2e6e 6577 2e62 7a32 222c 2022 2465 2f24 .new.bz2", "$e/$ │ │ │ │ +00001160: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf │ │ │ │ +00001170: 6f22 3b0a 0909 6f70 656e 2846 494c 452c o";...open(FILE, │ │ │ │ +00001180: 2022 627a 6970 3220 2d64 203c 205c 2724 "bzip2 -d < \'$ │ │ │ │ +00001190: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ │ +000011a0: 627a 325c 2720 7c22 2920 6f72 0a09 0920 bz2\' |") or... │ │ │ │ +000011b0: 2020 2064 6965 2022 6361 6e6e 6f74 206f die "cannot o │ │ │ │ +000011c0: 7065 6e20 2465 2f24 6d64 3543 6865 636b pen $e/$md5Check │ │ │ │ +000011d0: 5375 6d73 2e62 7a32 223b 0a09 096f 7065 Sums.bz2";...ope │ │ │ │ +000011e0: 6e28 4e45 572c 2022 7c20 627a 6970 3220 n(NEW, "| bzip2 │ │ │ │ +000011f0: 3e20 5c27 2465 2f24 6d64 3543 6865 636b > \'$e/$md5Check │ │ │ │ +00001200: 5375 6d73 2e6e 6577 2e62 7a32 5c27 2229 Sums.new.bz2\'") │ │ │ │ +00001210: 206f 720a 0909 2020 2020 6469 6520 2263 or... die "c │ │ │ │ +00001220: 616e 6e6f 7420 627a 6970 3220 3e20 2465 annot bzip2 > $e │ │ │ │ +00001230: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n │ │ │ │ +00001240: 6577 2e62 7a32 223b 0a09 2020 2020 7d0a ew.bz2";.. }. │ │ │ │ +00001250: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. { │ │ │ │ +00001260: 0a09 0928 2475 6964 2c20 2467 6964 2c20 ...($uid, $gid, │ │ │ │ +00001270: 246d 6f64 6529 203d 2028 7374 6174 2822 $mode) = (stat(" │ │ │ │ +00001280: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00001290: 2229 295b 342c 2035 2c20 325d 3b0a 0909 "))[4, 5, 2];... │ │ │ │ +000012a0: 756e 6c69 6e6b 2022 2465 2f24 6d64 3543 unlink "$e/$md5C │ │ │ │ +000012b0: 6865 636b 5375 6d73 2e6e 6577 222c 2022 heckSums.new", " │ │ │ │ +000012c0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +000012d0: 2e69 6e66 6f22 3b0a 0909 6f70 656e 2846 .info";...open(F │ │ │ │ +000012e0: 494c 452c 2022 3c20 2465 2f24 6d64 3543 ILE, "< $e/$md5C │ │ │ │ +000012f0: 6865 636b 5375 6d73 2229 206f 720a 0909 heckSums") or... │ │ │ │ +00001300: 2020 2020 6469 6520 2263 616e 6e6f 7420 die "cannot │ │ │ │ +00001310: 6f70 656e 2024 652f 246d 6435 4368 6563 open $e/$md5Chec │ │ │ │ +00001320: 6b53 756d 7322 3b0a 0909 6f70 656e 284e kSums";...open(N │ │ │ │ +00001330: 4557 2c20 223e 2024 652f 246d 6435 4368 EW, "> $e/$md5Ch │ │ │ │ +00001340: 6563 6b53 756d 732e 6e65 7722 2920 6f72 eckSums.new") or │ │ │ │ +00001350: 0a09 0920 2020 2064 6965 2022 6361 6e6e ... die "cann │ │ │ │ +00001360: 6f74 2077 7269 7465 2024 652f 246d 6435 ot write $e/$md5 │ │ │ │ +00001370: 4368 6563 6b53 756d 732e 6e65 7722 3b0a CheckSums.new";. │ │ │ │ +00001380: 0920 2020 207d 0a09 2020 2020 246d 6f64 . }.. $mod │ │ │ │ +00001390: 6520 263d 2030 3737 3737 3b0a 0920 2020 e &= 07777;.. │ │ │ │ +000013a0: 2024 6c20 3d20 3c46 494c 453e 3b20 2020 $l = ; │ │ │ │ +000013b0: 2020 2320 6572 7374 6520 5a65 696c 6520 # erste Zeile │ │ │ │ +000013c0: fc62 6572 6c65 7365 6e0a 0920 2020 2070 .berlesen.. p │ │ │ │ +000013d0: 7269 6e74 204e 4557 2022 2320 636f 6e74 rint NEW "# cont │ │ │ │ +000013e0: 656e 7473 2f6d 6435 2063 6f6d 7072 2064 ents/md5 compr d │ │ │ │ +000013f0: 6576 2d69 6e6f 6465 2069 6e6f 6465 4261 ev-inode inodeBa │ │ │ │ +00001400: 636b 7570 2063 7469 6d65 206d 7469 6d65 ckup ctime mtime │ │ │ │ +00001410: 2061 7469 6d65 2073 697a 6520 7569 6420 atime size uid │ │ │ │ +00001420: 6769 6420 6d6f 6465 2066 696c 656e 616d gid mode filenam │ │ │ │ +00001430: 655c 6e22 3b0a 0a09 2020 2020 6f70 656e e\n";... open │ │ │ │ +00001440: 2849 4e46 4f5f 4e45 572c 2022 3e20 2465 (INFO_NEW, "> $e │ │ │ │ +00001450: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i │ │ │ │ +00001460: 6e66 6f2e 6e65 7722 2920 6f72 0a09 0964 nfo.new") or...d │ │ │ │ +00001470: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie "cannot write │ │ │ │ +00001480: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum │ │ │ │ +00001490: 732e 696e 666f 2e6e 6577 223b 0a0a 0920 s.info.new";... │ │ │ │ +000014a0: 2020 2077 6869 6c65 2028 246c 203d 203c while ($l = < │ │ │ │ +000014b0: 4649 4c45 3e29 0a09 2020 2020 7b0a 0909 FILE>).. {... │ │ │ │ +000014c0: 6368 6f70 2024 6c3b 0a09 096d 7920 2824 chop $l;...my ($ │ │ │ │ +000014d0: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ │ +000014e0: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ │ +000014f0: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ │ +00001500: 2024 6d74 696d 652c 2024 7369 7a65 2c0a $mtime, $size,. │ │ │ │ +00001510: 0909 2020 2020 2475 6964 2c20 2467 6964 .. $uid, $gid │ │ │ │ +00001520: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena │ │ │ │ +00001530: 6d65 293b 0a09 096d 7920 2464 203d 2027 me);...my $d = ' │ │ │ │ +00001540: 5b5c 642d 5d27 3b20 2020 2020 2023 205c [\d-]'; # \ │ │ │ │ +00001550: 6420 756e 6420 4d69 6e75 737a 6569 6368 d und Minuszeich │ │ │ │ +00001560: 656e 0a09 096d 7920 246e 203d 2028 246d en...my $n = ($m │ │ │ │ +00001570: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $ │ │ │ │ +00001580: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode │ │ │ │ +00001590: 4261 636b 7570 2c20 2463 7469 6d65 2c0a Backup, $ctime,. │ │ │ │ +000015a0: 0909 0920 246d 7469 6d65 2c20 2473 697a ... $mtime, $siz │ │ │ │ +000015b0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $ │ │ │ │ +000015c0: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename) │ │ │ │ +000015d0: 203d 0a09 0909 2020 2020 2024 6c20 3d7e =.... $l =~ │ │ │ │ +000015e0: 202f 5e28 5c77 2b29 5c73 2b28 5c77 2b29 /^(\w+)\s+(\w+) │ │ │ │ +000015f0: 5c73 2b28 5c53 2b29 5c73 2b28 2464 2b29 \s+(\S+)\s+($d+) │ │ │ │ +00001600: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \s+($d+)\s+($d+) │ │ │ │ +00001610: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \s+($d+)\s+($d+) │ │ │ │ +00001620: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \s+($d+)\s+($d+) │ │ │ │ +00001630: 5c73 2b28 2e2a 292f 6f3b 0a09 0969 6620 \s+(.*)/o;...if │ │ │ │ +00001640: 2824 6e20 213d 2031 3129 0a09 097b 0a09 ($n != 11)...{.. │ │ │ │ +00001650: 0920 2020 2070 7269 6e74 2022 6361 6e6e . print "cann │ │ │ │ +00001660: 6f74 2072 6561 6420 6c69 6e65 3a20 3c24 ot read line: <$ │ │ │ │ +00001670: 6c3e 5c6e 223b 0a09 097d 0a0a 0909 6d79 l>\n";...}....my │ │ │ │ +00001680: 2024 6174 696d 6520 3d20 246d 7469 6d65 $atime = $mtime │ │ │ │ +00001690: 3b0a 0909 7072 696e 7420 4e45 5720 2224 ;...print NEW "$ │ │ │ │ +000016a0: 6d64 3573 756d 2024 636f 6d70 7220 2464 md5sum $compr $d │ │ │ │ +000016b0: 6576 496e 6f64 6520 2469 6e6f 6465 4261 evInode $inodeBa │ │ │ │ +000016c0: 636b 7570 2024 6374 696d 6520 2220 2e0a ckup $ctime " .. │ │ │ │ +000016d0: 0909 2020 2020 2224 6d74 696d 6520 2461 .. "$mtime $a │ │ │ │ +000016e0: 7469 6d65 2024 7369 7a65 2024 7569 6420 time $size $uid │ │ │ │ +000016f0: 2467 6964 2024 6d6f 6465 2024 6669 6c65 $gid $mode $file │ │ │ │ +00001700: 6e61 6d65 5c6e 223b 0a09 2020 2020 7d0a name\n";.. }. │ │ │ │ +00001710: 0920 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE) │ │ │ │ +00001720: 3b0a 0920 2020 2063 6c6f 7365 284e 4557 ;.. close(NEW │ │ │ │ +00001730: 293b 0a09 2020 2020 7072 696e 7420 494e );.. print IN │ │ │ │ +00001740: 464f 5f4e 4557 2022 7665 7273 696f 6e3d FO_NEW "version= │ │ │ │ +00001750: 312e 335c 6e22 3b0a 0920 2020 206d 7920 1.3\n";.. my │ │ │ │ +00001760: 2840 6c29 203d 203c 494e 464f 3e3b 0a09 (@l) = ;.. │ │ │ │ +00001770: 2020 2020 7072 696e 7420 494e 464f 5f4e print INFO_N │ │ │ │ +00001780: 4557 2022 406c 223b 0a09 2020 2020 636c EW "@l";.. cl │ │ │ │ +00001790: 6f73 6528 494e 464f 5f4e 4557 293b 0a09 ose(INFO_NEW);.. │ │ │ │ +000017a0: 2020 2020 7072 696e 7420 225c 6e22 3b0a print "\n";. │ │ │ │ +000017b0: 0920 2020 2069 6620 2824 636f 6d70 7265 . if ($compre │ │ │ │ +000017c0: 7373 203d 3d20 3129 0a09 2020 2020 7b0a ss == 1).. {. │ │ │ │ +000017d0: 0909 756e 6c69 6e6b 2022 2465 2f24 6d64 ..unlink "$e/$md │ │ │ │ +000017e0: 3543 6865 636b 5375 6d73 2e62 7a32 223b 5CheckSums.bz2"; │ │ │ │ +000017f0: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename "$e/$m │ │ │ │ +00001800: 6435 4368 6563 6b53 756d 732e 6e65 772e d5CheckSums.new. │ │ │ │ +00001810: 627a 3222 2c20 2224 652f 246d 6435 4368 bz2", "$e/$md5Ch │ │ │ │ +00001820: 6563 6b53 756d 732e 627a 3222 3b0a 0909 eckSums.bz2";... │ │ │ │ +00001830: 6368 6f77 6e20 2475 6964 2c20 2467 6964 chown $uid, $gid │ │ │ │ +00001840: 2c20 2224 652f 246d 6435 4368 6563 6b53 , "$e/$md5CheckS │ │ │ │ +00001850: 756d 732e 627a 3222 3b0a 0909 6368 6d6f ums.bz2";...chmo │ │ │ │ +00001860: 6420 246d 6f64 652c 2022 2465 2f24 6d64 d $mode, "$e/$md │ │ │ │ +00001870: 3543 6865 636b 5375 6d73 2e62 7a32 223b 5CheckSums.bz2"; │ │ │ │ +00001880: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00001890: 650a 0920 2020 207b 0a09 0975 6e6c 696e e.. {...unlin │ │ │ │ +000018a0: 6b20 2224 652f 246d 6435 4368 6563 6b53 k "$e/$md5CheckS │ │ │ │ +000018b0: 756d 7322 3b0a 0909 7265 6e61 6d65 2022 ums";...rename " │ │ │ │ +000018c0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +000018d0: 2e6e 6577 222c 2022 2465 2f24 6d64 3543 .new", "$e/$md5C │ │ │ │ +000018e0: 6865 636b 5375 6d73 223b 0a09 0963 686f heckSums";...cho │ │ │ │ +000018f0: 776e 2024 7569 642c 2024 6769 642c 2022 wn $uid, $gid, " │ │ │ │ +00001900: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00001910: 223b 0a09 0963 686d 6f64 2024 6d6f 6465 ";...chmod $mode │ │ │ │ +00001920: 2c20 2224 652f 246d 6435 4368 6563 6b53 , "$e/$md5CheckS │ │ │ │ +00001930: 756d 7322 3b0a 0920 2020 207d 0a09 2020 ums";.. }.. │ │ │ │ +00001940: 2020 6d6b 6469 7220 2224 652f 2e73 746f mkdir "$e/.sto │ │ │ │ +00001950: 7265 4261 636b 7570 4c69 6e6b 7322 2c20 reBackupLinks", │ │ │ │ +00001960: 3037 3737 3b0a 0920 2020 2075 6e6c 696e 0777;.. unlin │ │ │ │ +00001970: 6b20 2224 652f 246d 6435 4368 6563 6b53 k "$e/$md5CheckS │ │ │ │ +00001980: 756d 732e 696e 666f 223b 0a09 2020 2020 ums.info";.. │ │ │ │ +00001990: 7265 6e61 6d65 2022 2465 2f24 6d64 3543 rename "$e/$md5C │ │ │ │ +000019a0: 6865 636b 5375 6d73 2e69 6e66 6f2e 6e65 heckSums.info.ne │ │ │ │ +000019b0: 7722 2c20 2224 652f 246d 6435 4368 6563 w", "$e/$md5Chec │ │ │ │ +000019c0: 6b53 756d 732e 696e 666f 223b 0a09 7d0a kSums.info";..}. │ │ │ │ +000019d0: 0965 6c73 650a 097b 0a09 2020 2020 7072 .else..{.. pr │ │ │ │ +000019e0: 696e 7420 2224 656e 7472 793a 2075 6e73 int "$entry: uns │ │ │ │ +000019f0: 7570 706f 7274 6564 2076 6572 7369 6f6e upported version │ │ │ │ +00001a00: 203c 2476 3e5c 6e22 3b0a 097d 0a09 636c <$v>\n";..}..cl │ │ │ │ +00001a10: 6f73 6528 494e 464f 293b 0a20 2020 207d ose(INFO);. } │ │ │ │ +00001a20: 0a20 2020 2065 6c73 6520 2020 2020 2020 . else │ │ │ │ +00001a30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001a40: 2020 2020 2023 2056 6572 7369 6f6e 2031 # Version 1 │ │ │ │ +00001a50: 2e30 2075 6e64 2031 2e31 0a20 2020 207b .0 und 1.1. { │ │ │ │ +00001a60: 0a09 6966 2028 2d66 2022 2465 2f24 6d64 ..if (-f "$e/$md │ │ │ │ +00001a70: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2") │ │ │ │ +00001a80: 2020 2320 6b6f 6d70 7269 6d69 6572 7465 # komprimierte │ │ │ │ +00001a90: 2056 6572 7369 6f6e 206c 6965 6774 2076 Version liegt v │ │ │ │ +00001aa0: 6f72 2c20 6e65 686d 656e 0a09 7b0a 0920 or, nehmen..{.. │ │ │ │ +00001ab0: 2020 206f 7065 6e28 4649 4c45 2c20 2262 open(FILE, "b │ │ │ │ +00001ac0: 7a69 7032 202d 6420 3c20 5c27 2465 2f24 zip2 -d < \'$e/$ │ │ │ │ +00001ad0: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2 │ │ │ │ +00001ae0: 5c27 207c 2229 3b0a 0920 2020 2024 636f \' |");.. $co │ │ │ │ +00001af0: 6d70 7265 7373 203d 2031 3b0a 097d 0a09 mpress = 1;..}.. │ │ │ │ +00001b00: 656c 7369 6620 282d 6620 2465 2f24 6d64 elsif (-f $e/$md │ │ │ │ +00001b10: 3543 6865 636b 5375 6d73 290a 097b 0a09 5CheckSums)..{.. │ │ │ │ +00001b20: 2020 2020 6f70 656e 2846 494c 452c 2022 open(FILE, " │ │ │ │ +00001b30: 3c20 2465 2f24 6d64 3543 6865 636b 5375 < $e/$md5CheckSu │ │ │ │ +00001b40: 6d73 2229 3b0a 097d 0a09 656c 7365 0a09 ms");..}..else.. │ │ │ │ +00001b50: 7b0a 0920 2020 2070 7269 6e74 2022 6361 {.. print "ca │ │ │ │ +00001b60: 6e6e 6f74 206f 7065 6e20 3c24 652f 246d nnot open <$e/$m │ │ │ │ +00001b70: 6435 4368 6563 6b53 756d 735c 5b2e 627a d5CheckSums\[.bz │ │ │ │ +00001b80: 325c 5d3e 5c6e 223b 0a09 2020 2020 6e65 2\]>\n";.. ne │ │ │ │ +00001b90: 7874 3b0a 097d 0a09 6d79 2024 763b 0a09 xt;..}..my $v;.. │ │ │ │ +00001ba0: 6d79 2024 6c20 3d20 3c46 494c 453e 3b0a my $l = ;. │ │ │ │ +00001bb0: 0963 686f 7020 246c 3b0a 0969 6620 2824 .chop $l;..if ($ │ │ │ │ +00001bc0: 6c20 3d7e 202f 5e23 2323 7665 7273 696f l =~ /^###versio │ │ │ │ +00001bd0: 6e3d 282e 2a29 2f29 0a09 7b0a 0920 2020 n=(.*)/)..{.. │ │ │ │ +00001be0: 2024 7620 3d20 2431 3b0a 097d 0a09 656c $v = $1;..}..el │ │ │ │ +00001bf0: 7365 0a09 7b0a 0920 2020 2024 7620 3d20 se..{.. $v = │ │ │ │ +00001c00: 2731 2e30 273b 0a09 7d0a 0a09 6966 2028 '1.0';..}...if ( │ │ │ │ +00001c10: 2476 2065 7120 2731 2e30 2729 0a09 7b0a $v eq '1.0')..{. │ │ │ │ +00001c20: 0920 2020 2070 7269 6e74 2022 2465 6e74 . print "$ent │ │ │ │ +00001c30: 7279 3a20 7665 7273 696f 6e20 3c24 763e ry: version <$v> │ │ │ │ +00001c40: 2063 6f6e 7665 7274 696e 6720 746f 2031 converting to 1 │ │ │ │ +00001c50: 2e31 202e 2e2e 223b 0a09 2020 2020 5354 .1 ...";.. ST │ │ │ │ +00001c60: 444f 5554 2d3e 6175 746f 666c 7573 6828 DOUT->autoflush( │ │ │ │ +00001c70: 3129 3b0a 0920 2020 2069 6620 2824 636f 1);.. if ($co │ │ │ │ +00001c80: 6d70 7265 7373 203d 3d20 3129 0a09 2020 mpress == 1).. │ │ │ │ +00001c90: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink "$e │ │ │ │ +00001ca0: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n │ │ │ │ +00001cb0: 6577 2e62 7a32 223b 0a09 096f 7065 6e28 ew.bz2";...open( │ │ │ │ +00001cc0: 4e45 572c 2022 7c20 627a 6970 3220 3e20 NEW, "| bzip2 > │ │ │ │ +00001cd0: 5c27 2465 2f24 6d64 3543 6865 636b 5375 \'$e/$md5CheckSu │ │ │ │ +00001ce0: 6d73 2e6e 6577 2e62 7a32 5c27 2229 206f ms.new.bz2\'") o │ │ │ │ +00001cf0: 720a 0909 2020 2020 6469 6520 2263 616e r... die "can │ │ │ │ +00001d00: 6e6f 7420 627a 6970 3220 3e20 2465 2f24 not bzip2 > $e/$ │ │ │ │ +00001d10: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new │ │ │ │ +00001d20: 2e62 7a32 223b 0a09 2020 2020 7d0a 0920 .bz2";.. }.. │ │ │ │ +00001d30: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ │ +00001d40: 0975 6e6c 696e 6b20 2224 652f 246d 6435 .unlink "$e/$md5 │ │ │ │ +00001d50: 4368 6563 6b53 756d 732e 6e65 7722 3b0a CheckSums.new";. │ │ │ │ +00001d60: 0909 6f70 656e 284e 4557 2c20 223e 2024 ..open(NEW, "> $ │ │ │ │ +00001d70: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ │ +00001d80: 6e65 7722 2920 6f72 0a09 0920 2020 2064 new") or... d │ │ │ │ +00001d90: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie "cannot write │ │ │ │ +00001da0: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum │ │ │ │ +00001db0: 732e 6e65 7722 3b0a 0920 2020 207d 0a09 s.new";.. }.. │ │ │ │ +00001dc0: 2020 2020 7072 696e 7420 4e45 5720 2223 print NEW "# │ │ │ │ +00001dd0: 2323 7665 7273 696f 6e3d 312e 315c 6e22 ##version=1.1\n" │ │ │ │ +00001de0: 3b0a 0920 2020 2070 7269 6e74 204e 4557 ;.. print NEW │ │ │ │ +00001df0: 2022 2323 2365 7863 6570 7444 6972 7353 "###exceptDirsS │ │ │ │ +00001e00: 6570 3d2c 5c6e 223b 0a09 2020 2020 7072 ep=,\n";.. pr │ │ │ │ +00001e10: 696e 7420 4e45 5720 2223 2323 6578 6365 int NEW "###exce │ │ │ │ +00001e20: 7074 4469 7273 3d5c 6e22 3b0a 0a09 2020 ptDirs=\n";... │ │ │ │ +00001e30: 2020 6d79 2024 6920 3d20 303b 2020 2020 my $i = 0; │ │ │ │ +00001e40: 2320 5ae4 686c 6572 2c20 6465 7220 696e # Z.hler, der in │ │ │ │ +00001e50: 6f64 6573 2073 696d 756c 6965 7274 0a09 odes simuliert.. │ │ │ │ +00001e60: 2020 2020 7768 696c 6520 2824 6c20 3d20 while ($l = │ │ │ │ +00001e70: 3c46 494c 453e 290a 0920 2020 207b 0a09 ).. {.. │ │ │ │ +00001e80: 0969 6620 2824 6c20 3d7e 202f 5e23 2323 .if ($l =~ /^### │ │ │ │ +00001e90: 2f29 0a09 097b 0a09 0920 2020 2070 7269 /)...{... pri │ │ │ │ +00001ea0: 6e74 204e 4557 2024 6c3b 0a09 0920 2020 nt NEW $l;... │ │ │ │ +00001eb0: 206e 6578 743b 0a09 097d 0a0a 0909 2469 next;...}....$i │ │ │ │ +00001ec0: 2b2b 3b0a 0909 6368 6f70 2024 6c3b 0a09 ++;...chop $l;.. │ │ │ │ +00001ed0: 096d 7920 2824 6d64 3573 756d 2c20 2463 .my ($md5sum, $c │ │ │ │ +00001ee0: 6f6d 7072 2c20 2463 7469 6d65 2c20 246d ompr, $ctime, $m │ │ │ │ +00001ef0: 7469 6d65 2c20 2473 697a 652c 2024 7569 time, $size, $ui │ │ │ │ +00001f00: 642c 2024 6769 642c 0a09 0920 2020 2024 d, $gid,... $ │ │ │ │ +00001f10: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename) │ │ │ │ +00001f20: 3b0a 0909 6d79 2024 6420 3d20 275b 5c64 ;...my $d = '[\d │ │ │ │ +00001f30: 2d5d 273b 2020 2020 2020 2320 5c64 2075 -]'; # \d u │ │ │ │ +00001f40: 6e64 204d 696e 7573 7a65 6963 6865 6e0a nd Minuszeichen. │ │ │ │ +00001f50: 0909 6d79 2024 6e20 3d20 2824 6d64 3573 ..my $n = ($md5s │ │ │ │ +00001f60: 756d 2c20 2463 6f6d 7072 2c20 2463 7469 um, $compr, $cti │ │ │ │ +00001f70: 6d65 2c20 246d 7469 6d65 2c20 2473 697a me, $mtime, $siz │ │ │ │ +00001f80: 652c 2024 7569 642c 0a09 0909 2024 6769 e, $uid,.... $gi │ │ │ │ +00001f90: 642c 2024 6d6f 6465 2c20 2466 696c 656e d, $mode, $filen │ │ │ │ +00001fa0: 616d 6529 203d 0a09 0924 6c20 3d7e 202f ame) =...$l =~ / │ │ │ │ +00001fb0: 5e28 5c77 2b29 5c73 2b28 5c77 2b29 5c73 ^(\w+)\s+(\w+)\s │ │ │ │ +00001fc0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ │ +00001fd0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ │ +00001fe0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ │ +00001ff0: 2b28 2e2a 292f 6f3b 0a09 0970 7269 6e74 +(.*)/o;...print │ │ │ │ +00002000: 204e 4557 0a09 0920 2020 2022 246d 6435 NEW... "$md5 │ │ │ │ +00002010: 7375 6d20 2463 6f6d 7072 2031 2d24 6920 sum $compr 1-$i │ │ │ │ +00002020: 2463 7469 6d65 2024 6d74 696d 6520 2473 $ctime $mtime $s │ │ │ │ +00002030: 697a 6520 2475 6964 2024 6769 6420 246d ize $uid $gid $m │ │ │ │ +00002040: 6f64 6520 2466 696c 656e 616d 655c 6e22 ode $filename\n" │ │ │ │ +00002050: 3b0a 0920 2020 207d 0a09 2020 2020 636c ;.. }.. cl │ │ │ │ +00002060: 6f73 6528 4e45 5729 3b0a 0920 2020 2069 ose(NEW);.. i │ │ │ │ +00002070: 6620 2824 636f 6d70 7265 7373 203d 3d20 f ($compress == │ │ │ │ +00002080: 3129 0a09 2020 2020 7b0a 0909 756e 6c69 1).. {...unli │ │ │ │ +00002090: 6e6b 2022 2465 2f24 6d64 3543 6865 636b nk "$e/$md5Check │ │ │ │ +000020a0: 5375 6d73 2e62 7a32 223b 0a09 0972 656e Sums.bz2";...ren │ │ │ │ +000020b0: 616d 6520 2224 652f 246d 6435 4368 6563 ame "$e/$md5Chec │ │ │ │ +000020c0: 6b53 756d 732e 6e65 772e 627a 3222 2c20 kSums.new.bz2", │ │ │ │ +000020d0: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ │ +000020e0: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2";...chmod │ │ │ │ +000020f0: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, "$e/$md5Ch │ │ │ │ +00002100: 6563 6b53 756d 732e 627a 3222 3b0a 0920 eckSums.bz2";.. │ │ │ │ +00002110: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ │ +00002120: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink " │ │ │ │ +00002130: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +00002140: 223b 0a09 0972 656e 616d 6520 2224 652f ";...rename "$e/ │ │ │ │ +00002150: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne │ │ │ │ +00002160: 7722 2c20 2224 652f 246d 6435 4368 6563 w", "$e/$md5Chec │ │ │ │ +00002170: 6b53 756d 7322 3b0a 0909 6368 6d6f 6420 kSums";...chmod │ │ │ │ +00002180: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, "$e/$md5Ch │ │ │ │ +00002190: 6563 6b53 756d 7322 3b0a 0920 2020 207d eckSums";.. } │ │ │ │ +000021a0: 0a09 2020 2020 7072 696e 7420 2220 6f6b .. print " ok │ │ │ │ +000021b0: 5c6e 223b 0a0a 0920 2020 2067 6f74 6f20 \n";... goto │ │ │ │ +000021c0: 6167 6169 6e46 6f72 4e65 7874 5665 7273 againForNextVers │ │ │ │ +000021d0: 696f 6e3b 0a09 7d0a 0965 6c73 6966 2028 ion;..}..elsif ( │ │ │ │ +000021e0: 2476 2065 7120 2731 2e31 2729 0a09 7b0a $v eq '1.1')..{. │ │ │ │ +000021f0: 0920 2020 2070 7269 6e74 2022 2465 6e74 . print "$ent │ │ │ │ +00002200: 7279 3a20 7665 7273 696f 6e20 3c24 763e ry: version <$v> │ │ │ │ +00002210: 2063 6f6e 7665 7274 696e 6720 746f 2031 converting to 1 │ │ │ │ +00002220: 2e32 202e 2e2e 223b 0a09 2020 2020 5354 .2 ...";.. ST │ │ │ │ +00002230: 444f 5554 2d3e 6175 746f 666c 7573 6828 DOUT->autoflush( │ │ │ │ +00002240: 3129 3b0a 0920 2020 2069 6620 2824 636f 1);.. if ($co │ │ │ │ +00002250: 6d70 7265 7373 203d 3d20 3129 0a09 2020 mpress == 1).. │ │ │ │ +00002260: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink "$e │ │ │ │ +00002270: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n │ │ │ │ +00002280: 6577 2e62 7a32 222c 2022 2465 2f24 6d64 ew.bz2", "$e/$md │ │ │ │ +00002290: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info" │ │ │ │ +000022a0: 3b0a 0909 6f70 656e 284e 4557 2c20 227c ;...open(NEW, "| │ │ │ │ +000022b0: 2062 7a69 7032 203e 205c 2724 652f 246d bzip2 > \'$e/$m │ │ │ │ +000022c0: 6435 4368 6563 6b53 756d 732e 6e65 772e d5CheckSums.new. │ │ │ │ +000022d0: 627a 325c 2722 2920 6f72 0a09 0920 2020 bz2\'") or... │ │ │ │ +000022e0: 2064 6965 2022 6361 6e6e 6f74 2062 7a69 die "cannot bzi │ │ │ │ +000022f0: 7032 203e 2024 652f 246d 6435 4368 6563 p2 > $e/$md5Chec │ │ │ │ +00002300: 6b53 756d 732e 6e65 772e 627a 3222 3b0a kSums.new.bz2";. │ │ │ │ +00002310: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ │ +00002320: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink │ │ │ │ +00002330: 2022 2465 2f24 6d64 3543 6865 636b 5375 "$e/$md5CheckSu │ │ │ │ +00002340: 6d73 2e6e 6577 222c 2022 2465 2f24 6d64 ms.new", "$e/$md │ │ │ │ +00002350: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info" │ │ │ │ +00002360: 3b0a 0909 6f70 656e 284e 4557 2c20 223e ;...open(NEW, "> │ │ │ │ +00002370: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum │ │ │ │ +00002380: 732e 6e65 7722 2920 6f72 0a09 0920 2020 s.new") or... │ │ │ │ +00002390: 2064 6965 2022 6361 6e6e 6f74 2077 7269 die "cannot wri │ │ │ │ +000023a0: 7465 2024 652f 246d 6435 4368 6563 6b53 te $e/$md5CheckS │ │ │ │ +000023b0: 756d 732e 6e65 7722 3b0a 0920 2020 207d ums.new";.. } │ │ │ │ +000023c0: 0a09 2020 2020 6f70 656e 2849 4e46 4f2c .. open(INFO, │ │ │ │ +000023d0: 2022 3e20 2465 2f24 6d64 3543 6865 636b "> $e/$md5Check │ │ │ │ +000023e0: 5375 6d73 2e69 6e66 6f22 2920 6f72 0a09 Sums.info") or.. │ │ │ │ +000023f0: 0964 6965 2022 6361 6e6e 6f74 2077 7269 .die "cannot wri │ │ │ │ +00002400: 7465 2024 652f 246d 6435 4368 6563 6b53 te $e/$md5CheckS │ │ │ │ +00002410: 756d 732e 696e 666f 223b 0a0a 0920 2020 ums.info";... │ │ │ │ +00002420: 2070 7269 6e74 2049 4e46 4f20 2276 6572 print INFO "ver │ │ │ │ +00002430: 7369 6f6e 3d31 2e32 5c6e 223b 0a0a 0920 sion=1.2\n";... │ │ │ │ +00002440: 2020 206d 7920 2470 6f73 7466 6978 3b0a my $postfix;. │ │ │ │ +00002450: 0920 2020 2077 6869 6c65 2028 246c 203d . while ($l = │ │ │ │ +00002460: 203c 4649 4c45 3e29 0a09 2020 2020 7b0a ).. {. │ │ │ │ +00002470: 0909 6966 2028 246c 203d 7e20 2f5e 2323 ..if ($l =~ /^## │ │ │ │ +00002480: 2320 2f29 2020 2023 2053 7061 6c74 656e # /) # Spalten │ │ │ │ +00002490: 7665 727a 6569 6368 6e69 730a 0909 7b0a verzeichnis...{. │ │ │ │ +000024a0: 0909 2020 2020 7072 696e 7420 4e45 5720 .. print NEW │ │ │ │ +000024b0: 2223 2063 6f6e 7465 6e74 732f 6d64 3520 "# contents/md5 │ │ │ │ +000024c0: 636f 6d70 7220 6465 762d 696e 6f64 6520 compr dev-inode │ │ │ │ +000024d0: 696e 6f64 6542 6163 6b75 7020 2220 2e0a inodeBackup " .. │ │ │ │ +000024e0: 0909 0922 6374 696d 6520 6d74 696d 6520 ..."ctime mtime │ │ │ │ +000024f0: 7369 7a65 2075 6964 2067 6964 206d 6f64 size uid gid mod │ │ │ │ +00002500: 6520 6669 6c65 6e61 6d65 5c6e 223b 0a09 e filename\n";.. │ │ │ │ +00002510: 0920 2020 206e 6578 743b 0a09 097d 0a09 . next;...}.. │ │ │ │ +00002520: 0965 6c73 6966 2028 246c 203d 7e20 2f5e .elsif ($l =~ /^ │ │ │ │ +00002530: 2323 2328 2e2a 3f29 3d28 2e2a 292f 290a ###(.*?)=(.*)/). │ │ │ │ +00002540: 0909 7b0a 0909 2020 2020 7072 696e 7420 ..{... print │ │ │ │ +00002550: 494e 464f 2022 2431 3d24 325c 6e22 3b0a INFO "$1=$2\n";. │ │ │ │ +00002560: 0909 2020 2020 2470 6f73 7466 6978 203d .. $postfix = │ │ │ │ +00002570: 2024 3220 6966 2028 2431 2065 7120 2770 $2 if ($1 eq 'p │ │ │ │ +00002580: 6f73 7466 6978 2729 3b0a 0909 2020 2020 ostfix');... │ │ │ │ +00002590: 6e65 7874 3b0a 0909 7d0a 0a09 0963 686f next;...}....cho │ │ │ │ +000025a0: 7020 246c 3b0a 0909 6d79 2028 246d 6435 p $l;...my ($md5 │ │ │ │ +000025b0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de │ │ │ │ +000025c0: 7649 6e6f 6465 2c20 2463 7469 6d65 2c20 vInode, $ctime, │ │ │ │ +000025d0: 246d 7469 6d65 2c20 2473 697a 652c 2024 $mtime, $size, $ │ │ │ │ +000025e0: 7569 642c 2024 6769 642c 0a09 0920 2020 uid, $gid,... │ │ │ │ +000025f0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam │ │ │ │ +00002600: 6529 3b0a 0909 6d79 2024 6420 3d20 275b e);...my $d = '[ │ │ │ │ +00002610: 5c64 2d5d 273b 2020 2020 2020 2320 5c64 \d-]'; # \d │ │ │ │ +00002620: 2075 6e64 204d 696e 7573 7a65 6963 6865 und Minuszeiche │ │ │ │ +00002630: 6e0a 0909 6d79 2024 6e20 3d20 2824 6d64 n...my $n = ($md │ │ │ │ +00002640: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d │ │ │ │ +00002650: 6576 496e 6f64 652c 2024 6374 696d 652c evInode, $ctime, │ │ │ │ +00002660: 2024 6d74 696d 652c 2024 7369 7a65 2c20 $mtime, $size, │ │ │ │ +00002670: 2475 6964 2c0a 0909 0920 2467 6964 2c20 $uid,.... $gid, │ │ │ │ +00002680: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename │ │ │ │ +00002690: 2920 3d0a 0909 246c 203d 7e20 2f5e 285c ) =...$l =~ /^(\ │ │ │ │ +000026a0: 772b 295c 732b 285c 772b 295c 732b 285c w+)\s+(\w+)\s+(\ │ │ │ │ +000026b0: 532b 295c 732b 2824 642b 295c 732b 2824 S+)\s+($d+)\s+($ │ │ │ │ +000026c0: 642b 295c 732b 2824 642b 295c 732b 2824 d+)\s+($d+)\s+($ │ │ │ │ +000026d0: 642b 295c 732b 2824 642b 295c 732b 2824 d+)\s+($d+)\s+($ │ │ │ │ +000026e0: 642b 295c 732b 282e 2a29 2f6f 3b0a 0909 d+)\s+(.*)/o;... │ │ │ │ +000026f0: 2320 496e 6f64 6520 696d 2042 6163 6b75 # Inode im Backu │ │ │ │ +00002700: 7020 6572 6d69 7474 656c 6e0a 0909 6d79 p ermitteln...my │ │ │ │ +00002710: 2024 696e 6f64 6542 6163 6b75 703b 0a09 $inodeBackup;.. │ │ │ │ +00002720: 096d 7920 2466 203d 2022 2465 2f24 6669 .my $f = "$e/$fi │ │ │ │ +00002730: 6c65 6e61 6d65 223b 0a09 0924 6620 3d7e lename";...$f =~ │ │ │ │ +00002740: 2073 2f5c 5c30 412f 5c6e 2f6f 673b 2020 s/\\0A/\n/og; │ │ │ │ +00002750: 2020 2320 275c 6e27 2077 6965 6465 7268 # '\n' wiederh │ │ │ │ +00002760: 6572 7374 656c 6c65 6e0a 0909 2466 203d erstellen...$f = │ │ │ │ +00002770: 7e20 732f 5c5c 3543 2f5c 5c2f 6f67 3b20 ~ s/\\5C/\\/og; │ │ │ │ +00002780: 2020 2023 2027 5c5c 2720 7769 6564 6572 # '\\' wieder │ │ │ │ +00002790: 6865 7273 7465 6c6c 656e 0a0a 0909 2466 herstellen....$f │ │ │ │ +000027a0: 202e 3d20 2470 6f73 7466 6978 2069 6620 .= $postfix if │ │ │ │ +000027b0: 2824 636f 6d70 7220 6571 2027 6327 293b ($compr eq 'c'); │ │ │ │ +000027c0: 0a09 0969 6620 2824 6d64 3573 756d 2065 ...if ($md5sum e │ │ │ │ +000027d0: 7120 2773 796d 6c69 6e6b 2729 0a09 097b q 'symlink')...{ │ │ │ │ +000027e0: 0a09 0920 2020 2024 696e 6f64 6542 6163 ... $inodeBac │ │ │ │ +000027f0: 6b75 7020 3d20 286c 7374 6174 2824 6629 kup = (lstat($f) │ │ │ │ +00002800: 295b 315d 3b0a 0909 7d0a 0909 656c 7365 )[1];...}...else │ │ │ │ +00002810: 0a09 097b 0a09 0920 2020 2024 696e 6f64 ...{... $inod │ │ │ │ +00002820: 6542 6163 6b75 7020 3d20 2873 7461 7428 eBackup = (stat( │ │ │ │ +00002830: 2466 2929 5b31 5d3b 0a09 097d 0a0a 0909 $f))[1];...}.... │ │ │ │ +00002840: 7072 696e 7420 4e45 570a 0909 2020 2020 print NEW... │ │ │ │ +00002850: 2224 6d64 3573 756d 2024 636f 6d70 7220 "$md5sum $compr │ │ │ │ +00002860: 2464 6576 496e 6f64 6520 2469 6e6f 6465 $devInode $inode │ │ │ │ +00002870: 4261 636b 7570 2024 6374 696d 6520 246d Backup $ctime $m │ │ │ │ +00002880: 7469 6d65 2022 202e 0a09 0920 2020 2020 time " .... │ │ │ │ +00002890: 2020 2224 7369 7a65 2024 7569 6420 2467 "$size $uid $g │ │ │ │ +000028a0: 6964 2024 6d6f 6465 2024 6669 6c65 6e61 id $mode $filena │ │ │ │ +000028b0: 6d65 5c6e 223b 0a09 2020 2020 7d0a 0920 me\n";.. }.. │ │ │ │ +000028c0: 2020 2063 6c6f 7365 284e 4557 293b 0a09 close(NEW);.. │ │ │ │ +000028d0: 2020 2020 636c 6f73 6528 494e 464f 293b close(INFO); │ │ │ │ +000028e0: 0a09 2020 2020 6368 6d6f 6420 3036 3030 .. chmod 0600 │ │ │ │ +000028f0: 2c20 2224 6524 6d64 3543 6865 636b 5375 , "$e$md5CheckSu │ │ │ │ +00002900: 6d73 2e69 6e66 6f22 3b0a 0920 2020 2069 ms.info";.. i │ │ │ │ +00002910: 6620 2824 636f 6d70 7265 7373 203d 3d20 f ($compress == │ │ │ │ +00002920: 3129 0a09 2020 2020 7b0a 0909 756e 6c69 1).. {...unli │ │ │ │ +00002930: 6e6b 2022 2465 2f24 6d64 3543 6865 636b nk "$e/$md5Check │ │ │ │ +00002940: 5375 6d73 2e62 7a32 223b 0a09 0972 656e Sums.bz2";...ren │ │ │ │ +00002950: 616d 6520 2224 652f 246d 6435 4368 6563 ame "$e/$md5Chec │ │ │ │ +00002960: 6b53 756d 732e 6e65 772e 627a 3222 2c20 kSums.new.bz2", │ │ │ │ +00002970: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ │ +00002980: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2";...chmod │ │ │ │ +00002990: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, "$e/$md5Ch │ │ │ │ +000029a0: 6563 6b53 756d 732e 627a 3222 3b0a 0920 eckSums.bz2";.. │ │ │ │ +000029b0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ │ +000029c0: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink " │ │ │ │ +000029d0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ │ +000029e0: 223b 0a09 0972 656e 616d 6520 2224 652f ";...rename "$e/ │ │ │ │ +000029f0: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne │ │ │ │ +00002a00: 7722 2c20 2224 652f 246d 6435 4368 6563 w", "$e/$md5Chec │ │ │ │ +00002a10: 6b53 756d 7322 3b0a 0909 6368 6d6f 6420 kSums";...chmod │ │ │ │ +00002a20: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, "$e/$md5Ch │ │ │ │ +00002a30: 6563 6b53 756d 7322 3b0a 0920 2020 207d eckSums";.. } │ │ │ │ +00002a40: 0a09 2020 2020 7072 696e 7420 2220 6f6b .. print " ok │ │ │ │ +00002a50: 5c6e 223b 0a09 2020 2020 636c 6f73 6528 \n";.. close( │ │ │ │ +00002a60: 4649 4c45 293b 0a09 7d0a 0965 6c73 650a FILE);..}..else. │ │ │ │ +00002a70: 097b 0a09 2020 2020 7072 696e 7420 2224 .{.. print "$ │ │ │ │ +00002a80: 656e 7472 793a 2075 6e73 7570 706f 7274 entry: unsupport │ │ │ │ +00002a90: 6564 2076 6572 7369 6f6e 203c 2476 3e5c ed version <$v>\ │ │ │ │ +00002aa0: 6e22 3b0a 097d 0a20 2020 207d 0a7d 0a0a n";..}. }.}.. │ │ │ │ +00002ab0: 0a70 7269 6e74 2022 4552 524f 523a 206e .print "ERROR: n │ │ │ │ +00002ac0: 6f20 6261 636b 7570 2064 6972 6563 746f o backup directo │ │ │ │ +00002ad0: 7269 6573 2066 6f75 6e64 5c6e 220a 2020 ries found\n". │ │ │ │ +00002ae0: 2020 756e 6c65 7373 2028 2466 6c61 6729 unless ($flag) │ │ │ │ +00002af0: 3b0a 0a ;.. │ │ │ ├── ./usr/bin/storeBackupDel │ │ │ │ @@ -1,4 +1,1298 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7044 656c 0a pDel. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 332d 3230 3132 290a 2320 2020 2020 2020 3-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ │ +00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ │ +00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ │ +00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ │ +000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ │ +000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ │ +000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ │ +000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ │ +000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ │ +000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ │ +00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ │ +00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ │ +00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ │ +00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ │ +00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ │ +00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ │ +00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ │ +00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ │ +00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ │ +00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ │ +000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ │ +000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ │ +000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ │ +000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ │ +000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ │ +000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ │ +00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ │ +00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ │ +00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ │ +00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ │ +00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ │ +00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ │ +00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ │ +00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ │ +00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ │ +000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ │ +000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ │ +000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ │ +000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...my $ │ │ │ │ +00000300: 5645 5253 494f 4e20 3d20 2724 4964 3a20 VERSION = '$Id: │ │ │ │ +00000310: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p │ │ │ │ +00000320: 6c20 3336 3220 3230 3132 2d30 312d 3238 l 362 2012-01-28 │ │ │ │ +00000330: 2032 323a 3131 3a31 335a 2068 6a63 2024 22:11:13Z hjc $ │ │ │ │ +00000340: 2027 3b0a 7075 7368 2040 5645 5253 494f ';.push @VERSIO │ │ │ │ +00000350: 4e2c 2024 5645 5253 494f 4e3b 0a6d 7920 N, $VERSION;.my │ │ │ │ +00000360: 2824 5645 5253 494f 4e70 4e61 6d65 2c20 ($VERSIONpName, │ │ │ │ +00000370: 2456 4552 5349 4f4e 7376 6e49 4429 203d $VERSIONsvnID) = │ │ │ │ +00000380: 2024 5645 5253 494f 4e20 3d7e 202f 4964 $VERSION =~ /Id │ │ │ │ +00000390: 3a5c 732b 285c 532b 295c 732b 285c 642b :\s+(\S+)\s+(\d+ │ │ │ │ +000003a0: 292f 3b0a 246d 6169 6e3a 3a53 544f 5245 )/;.$main::STORE │ │ │ │ +000003b0: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = │ │ │ │ +000003c0: 756e 6465 663b 0a0a 0a75 7365 2073 7472 undef;...use str │ │ │ │ +000003d0: 6963 743b 0a0a 7573 6520 4663 6e74 6c20 ict;..use Fcntl │ │ │ │ +000003e0: 7177 284f 5f52 4457 5220 4f5f 4352 4541 qw(O_RDWR O_CREA │ │ │ │ +000003f0: 5429 3b0a 7573 6520 4669 6c65 3a3a 436f T);.use File::Co │ │ │ │ +00000400: 7079 3b0a 7573 6520 504f 5349 583b 0a0a py;.use POSIX;.. │ │ │ │ +00000410: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. │ │ │ │ +00000420: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi │ │ │ │ +00000430: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir │ │ │ │ +00000440: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D │ │ │ │ +00000450: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein │ │ │ │ +00000460: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol │ │ │ │ +00000470: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis │ │ │ │ +00000480: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i │ │ │ │ +00000490: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). │ │ │ │ +000004a0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f │ │ │ │ +000004b0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my │ │ │ │ +000004c0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink │ │ │ │ +000004d0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i │ │ │ │ +000004e0: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link, │ │ │ │ +000004f0: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne "/").. │ │ │ │ +00000500: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~ │ │ │ │ +00000510: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\/]+$/$link │ │ │ │ +00000520: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e │ │ │ │ +00000530: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi │ │ │ │ +00000540: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. │ │ │ │ +00000550: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $ │ │ │ │ +00000560: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi │ │ │ │ +00000570: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$ │ │ │ │ +00000580: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = "/$file"; │ │ │ │ +00000590: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ │ +000005a0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD │ │ │ │ +000005b0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR "<$file> doe │ │ │ │ +000005c0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\n"; │ │ │ │ +000005d0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }. │ │ │ │ +000005e0: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= "/. │ │ │ │ +000005f0: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib"; │ │ │ │ +00000600: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den │ │ │ │ +00000610: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. │ │ │ │ +00000620: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/ │ │ │ │ +00000630: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch │ │ │ │ +00000640: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. │ │ │ │ +00000650: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir) │ │ │ │ +00000660: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD │ │ │ │ +00000670: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`; │ │ │ │ +00000680: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;. │ │ │ │ +00000690: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;. │ │ │ │ +000006a0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split │ │ │ │ +000006b0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir("$absDir │ │ │ │ +000006c0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file"));. }. │ │ │ │ +000006d0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ │ +000006e0: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR "<$ │ │ │ │ +000006f0: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex │ │ │ │ +00000700: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\n"; │ │ │ │ +00000710: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl │ │ │ │ +00000720: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. │ │ │ │ +00000730: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift │ │ │ │ +00000740: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return (' │ │ │ │ +00000750: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles │ │ │ │ +00000760: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\//) │ │ │ │ +00000770: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa │ │ │ │ +00000780: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname.. │ │ │ │ +00000790: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f │ │ │ │ +000007a0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ │ │ │ │ +000007b0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\/(.*)$/s; │ │ │ │ +000007c0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' │ │ │ │ +000007d0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq ''); │ │ │ │ +000007e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000007f0: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls │ │ │ │ +00000800: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename. │ │ │ │ +00000810: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir │ │ │ │ +00000820: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my ( │ │ │ │ +00000830: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = & │ │ │ │ +00000840: 6c69 6250 6174 6828 2430 293b 0a28 4049 libPath($0);.(@I │ │ │ │ +00000850: 4e43 2920 3d20 2824 7265 712c 2040 494e NC) = ($req, @IN │ │ │ │ +00000860: 4329 3b0a 0a72 6571 7569 7265 2027 7374 C);..require 'st │ │ │ │ +00000870: 6f72 6542 6163 6b75 704c 6962 2e70 6c27 oreBackupLib.pl' │ │ │ │ +00000880: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check │ │ │ │ +00000890: 5061 7261 6d32 2e70 6c27 3b0a 7265 7175 Param2.pl';.requ │ │ │ │ +000008a0: 6972 6520 2763 6865 636b 4f62 6a50 6172 ire 'checkObjPar │ │ │ │ +000008b0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p │ │ │ │ +000008c0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir │ │ │ │ +000008d0: 6520 2776 6572 7369 6f6e 2e70 6c27 3b0a e 'version.pl';. │ │ │ │ +000008e0: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo │ │ │ │ +000008f0: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require │ │ │ │ +00000900: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re │ │ │ │ +00000910: 7175 6972 6520 2768 756d 616e 5265 6164 quire 'humanRead │ │ │ │ +00000920: 2e70 6c27 3b0a 0a6d 7920 246c 6f63 6b46 .pl';..my $lockF │ │ │ │ +00000930: 696c 6520 3d20 272f 746d 702f 7374 6f72 ile = '/tmp/stor │ │ │ │ +00000940: 6542 6163 6b75 702e 6c6f 636b 273b 2020 eBackup.lock'; │ │ │ │ +00000950: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value │ │ │ │ +00000960: 0a6d 7920 246b 6565 7041 6c6c 203d 2027 .my $keepAll = ' │ │ │ │ +00000970: 3330 6427 3b0a 6d79 2024 6b65 6570 4475 30d';.my $keepDu │ │ │ │ +00000980: 706c 6963 6174 6520 3d20 2737 6427 3b0a plicate = '7d';. │ │ │ │ +00000990: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile │ │ │ │ +000009a0: 203d 2027 2e6d 6435 4368 6563 6b53 756d = '.md5CheckSum │ │ │ │ +000009b0: 7327 3b0a 6d79 2024 6368 6d6f 644d 4435 s';.my $chmodMD5 │ │ │ │ +000009c0: 4669 6c65 203d 2027 3036 3030 273b 0a0a File = '0600';.. │ │ │ │ +000009d0: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto │ │ │ │ +000009e0: 7265 4261 636b 7570 4465 6c2e 706c 202d reBackupDel.pl - │ │ │ │ +000009f0: 2074 6869 7320 7072 6f67 7261 6d20 6465 this program de │ │ │ │ +00000a00: 6c65 7465 7320 6261 636b 7570 7320 6372 letes backups cr │ │ │ │ +00000a10: 6561 7465 6420 6279 2073 746f 7265 4261 eated by storeBa │ │ │ │ +00000a20: 636b 7570 0a0a 3d68 6561 6431 2053 594e ckup..=head1 SYN │ │ │ │ +00000a30: 4f50 5349 530a 0a09 7374 6f72 6542 6163 OPSIS...storeBac │ │ │ │ +00000a40: 6b75 7044 656c 2e70 6c20 5b2d 6620 636f kupDel.pl [-f co │ │ │ │ +00000a50: 6e66 6967 4669 6c65 5d20 5b2d 2d70 7269 nfigFile] [--pri │ │ │ │ +00000a60: 6e74 5d0a 095b 2d62 2062 6163 6b75 7044 nt]..[-b backupD │ │ │ │ +00000a70: 6972 6563 746f 7279 5d20 5b2d 5320 7365 irectory] [-S se │ │ │ │ +00000a80: 7269 6573 5d20 5b2d 2d64 6f4e 6f74 4465 ries] [--doNotDe │ │ │ │ +00000a90: 6c65 7465 5d0a 095b 2d2d 6465 6c65 7465 lete]..[--delete │ │ │ │ +00000aa0: 4e6f 7446 696e 6973 6865 6444 6972 735d NotFinishedDirs] │ │ │ │ +00000ab0: 205b 2d4c 206c 6f63 6b46 696c 655d 0a09 [-L lockFile].. │ │ │ │ +00000ac0: 5b2d 2d6b 6565 7041 6c6c 2074 696d 6550 [--keepAll timeP │ │ │ │ +00000ad0: 6572 696f 645d 205b 2d2d 6b65 6570 5765 eriod] [--keepWe │ │ │ │ +00000ae0: 656b 6461 7920 656e 7472 795d 205b 2d2d ekday entry] [-- │ │ │ │ +00000af0: 6b65 6570 4669 7273 744f 6659 6561 725d keepFirstOfYear] │ │ │ │ +00000b00: 0a09 5b2d 2d6b 6565 704c 6173 744f 6659 ..[--keepLastOfY │ │ │ │ +00000b10: 6561 725d 205b 2d2d 6b65 6570 4669 7273 ear] [--keepFirs │ │ │ │ +00000b20: 744f 664d 6f6e 7468 5d20 5b2d 2d6b 6565 tOfMonth] [--kee │ │ │ │ +00000b30: 704c 6173 744f 664d 6f6e 7468 5d0a 095b pLastOfMonth]..[ │ │ │ │ +00000b40: 2d2d 6b65 6570 4669 7273 744f 6657 6565 --keepFirstOfWee │ │ │ │ +00000b50: 6b5d 205b 2d2d 6b65 6570 4c61 7374 4f66 k] [--keepLastOf │ │ │ │ +00000b60: 5765 656b 5d0a 095b 2d2d 6b65 6570 4475 Week]..[--keepDu │ │ │ │ +00000b70: 706c 6963 6174 655d 205b 2d2d 6b65 6570 plicate] [--keep │ │ │ │ +00000b80: 4d69 6e4e 756d 6265 725d 205b 2d2d 6b65 MinNumber] [--ke │ │ │ │ +00000b90: 6570 4d61 784e 756d 6265 725d 0a09 5b2d epMaxNumber]..[- │ │ │ │ +00000ba0: 6c20 6c6f 6746 696c 650a 0920 5b2d 2d70 l logFile.. [--p │ │ │ │ +00000bb0: 6c75 734c 6f67 5374 646f 7574 5d20 5b2d lusLogStdout] [- │ │ │ │ +00000bc0: 2d73 7570 7072 6573 7354 696d 655d 205b -suppressTime] [ │ │ │ │ +00000bd0: 2d6d 206d 6178 4669 6c65 6c65 6e5d 0a09 -m maxFilelen].. │ │ │ │ +00000be0: 205b 5b2d 6e20 6e6f 4f66 4f6c 6446 696c [[-n noOfOldFil │ │ │ │ +00000bf0: 6573 5d20 7c20 5b2d 2d73 6176 654c 6f67 es] | [--saveLog │ │ │ │ +00000c00: 735d 0a09 205b 2d2d 636f 6d70 7265 7373 s].. [--compress │ │ │ │ +00000c10: 5769 7468 2063 6f6d 7072 6573 7370 726f With compresspro │ │ │ │ +00000c20: 675d 5d0a 0a3d 6865 6164 3120 5741 524e g]]..=head1 WARN │ │ │ │ +00000c30: 494e 470a 0a20 2021 2121 2055 5341 4745 ING.. !!! USAGE │ │ │ │ +00000c40: 2049 4e20 5041 5241 4c4c 454c 2057 4954 IN PARALLEL WIT │ │ │ │ +00000c50: 4820 7374 6f72 6542 6163 6b75 702e 706c H storeBackup.pl │ │ │ │ +00000c60: 2043 414e 2044 4553 5452 4f59 2059 4f55 CAN DESTROY YOU │ │ │ │ +00000c70: 5220 4241 434b 5550 5320 2121 210a 0a3d R BACKUPS !!!..= │ │ │ │ +00000c80: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..= │ │ │ │ +00000c90: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B< │ │ │ │ +00000ca0: 2d2d 6669 6c65 3e2c 2042 3c2d 663e 0a0a --file>, B<-f>.. │ │ │ │ +00000cb0: 2020 2020 636f 6e66 6967 7572 6174 696f configuratio │ │ │ │ +00000cc0: 6e20 6669 6c65 2028 696e 7374 6561 6420 n file (instead │ │ │ │ +00000cd0: 6f66 2070 6172 616d 6574 6572 7329 0a0a of parameters).. │ │ │ │ +00000ce0: 3d69 7465 6d20 423c 2d2d 7072 696e 743e =item B<--print> │ │ │ │ +00000cf0: 0a0a 2020 2020 7072 696e 7420 636f 6e66 .. print conf │ │ │ │ +00000d00: 6967 7572 6174 696f 6e20 7265 6164 2066 iguration read f │ │ │ │ +00000d10: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio │ │ │ │ +00000d20: 6e20 6669 6c65 2061 6e64 2073 746f 700a n file and stop. │ │ │ │ +00000d30: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu │ │ │ │ +00000d40: 7044 6972 3e2c 2042 3c2d 623e 0a0a 2020 pDir>, B<-b>.. │ │ │ │ +00000d50: 2020 746f 7020 6c65 7665 6c20 6469 7265 top level dire │ │ │ │ +00000d60: 6374 6f72 7920 6f66 2061 6c6c 2062 6163 ctory of all bac │ │ │ │ +00000d70: 6b75 7073 2028 6d75 7374 2065 7869 7374 kups (must exist │ │ │ │ +00000d80: 290a 0a3d 6974 656d 2042 3c2d 2d73 6572 )..=item B<--ser │ │ │ │ +00000d90: 6965 733e 2c20 423c 2d53 3e0a 0a20 2020 ies>, B<-S>.. │ │ │ │ +00000da0: 2064 6972 6563 746f 7279 206f 6620 6261 directory of ba │ │ │ │ +00000db0: 636b 7570 2073 6572 6965 730a 2020 2020 ckup series. │ │ │ │ +00000dc0: 7361 6d65 2070 6172 616d 6574 6572 2061 same parameter a │ │ │ │ +00000dd0: 7320 696e 2073 746f 7265 4261 636b 7570 s in storeBackup │ │ │ │ +00000de0: 202f 2072 656c 6174 6976 6520 7061 7468 / relative path │ │ │ │ +00000df0: 0a20 2020 2066 726f 6d20 6261 636b 7570 . from backup │ │ │ │ +00000e00: 4469 722c 2064 6566 6175 6c74 2069 7320 Dir, default is │ │ │ │ +00000e10: 2764 6566 6175 6c74 270a 0a3d 6974 656d 'default'..=item │ │ │ │ +00000e20: 2042 3c2d 2d6c 6f63 6b46 696c 653e 2c20 B<--lockFile>, │ │ │ │ +00000e30: 423c 2d4c 3e0a 0a20 2020 206c 6f63 6b20 B<-L>.. lock │ │ │ │ +00000e40: 6669 6c65 2c20 6966 2065 7869 7374 732c file, if exists, │ │ │ │ +00000e50: 206e 6577 2069 6e73 7461 6e63 6573 2077 new instances w │ │ │ │ +00000e60: 696c 6c20 6669 6e69 7368 2069 660a 2020 ill finish if. │ │ │ │ +00000e70: 2020 616e 206f 6c64 2069 7320 616c 7265 an old is alre │ │ │ │ +00000e80: 6164 7920 7275 6e6e 696e 672c 2064 6566 ady running, def │ │ │ │ +00000e90: 6175 6c74 2069 7320 246c 6f63 6b46 696c ault is $lockFil │ │ │ │ +00000ea0: 650a 0a3d 6974 656d 2042 3c2d 2d64 6f4e e..=item B<--doN │ │ │ │ +00000eb0: 6f74 4465 6c65 7465 3e0a 0a20 2020 2074 otDelete>.. t │ │ │ │ +00000ec0: 6573 7420 6f6e 6c79 2c20 646f 206e 6f74 est only, do not │ │ │ │ +00000ed0: 2064 656c 6574 6520 616e 7920 6261 636b delete any back │ │ │ │ +00000ee0: 7570 0a0a 3d69 7465 6d20 423c 2d2d 6465 up..=item B<--de │ │ │ │ +00000ef0: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD │ │ │ │ +00000f00: 6972 733e 0a0a 2020 2020 6465 6c65 7465 irs>.. delete │ │ │ │ +00000f10: 206f 6c64 2062 6163 6b75 7073 2077 6869 old backups whi │ │ │ │ +00000f20: 6368 2077 6865 7265 206e 6f74 2066 696e ch where not fin │ │ │ │ +00000f30: 6973 6865 640a 2020 2020 7468 6973 2077 ished. this w │ │ │ │ +00000f40: 696c 6c20 6e6f 7420 6861 7070 656e 2069 ill not happen i │ │ │ │ +00000f50: 6620 646f 4e6f 7444 656c 6574 6520 6973 f doNotDelete is │ │ │ │ +00000f60: 2073 6574 0a0a 3d69 7465 6d20 423c 2d2d set..=item B<-- │ │ │ │ +00000f70: 6b65 6570 416c 6c3e 0a0a 2020 2020 6b65 keepAll>.. ke │ │ │ │ +00000f80: 6570 2062 6163 6b75 7073 2077 6869 6368 ep backups which │ │ │ │ +00000f90: 2061 7265 206e 6f74 206f 6c64 6572 2074 are not older t │ │ │ │ +00000fa0: 6861 6e20 7468 6520 7370 6563 6966 6965 han the specifie │ │ │ │ +00000fb0: 6420 616d 6f75 6e74 0a20 2020 206f 6620 d amount. of │ │ │ │ +00000fc0: 7469 6d65 2e20 5468 6973 2069 7320 6c69 time. This is li │ │ │ │ +00000fd0: 6b65 2061 2064 6566 6175 6c74 2076 616c ke a default val │ │ │ │ +00000fe0: 7565 2066 6f72 2061 6c6c 2064 6179 7320 ue for all days │ │ │ │ +00000ff0: 696e 0a20 2020 202d 2d6b 6565 7057 6565 in. --keepWee │ │ │ │ +00001000: 6b64 6179 2e20 4265 6769 6e73 2064 656c kday. Begins del │ │ │ │ +00001010: 6574 696e 6720 6174 2074 6865 2065 6e64 eting at the end │ │ │ │ +00001020: 206f 6620 7468 6520 7363 7269 7074 0a20 of the script. │ │ │ │ +00001030: 2020 2074 6865 2074 696d 6520 7261 6e67 the time rang │ │ │ │ +00001040: 6520 6861 7320 746f 2062 6520 7370 6563 e has to be spec │ │ │ │ +00001050: 6966 6965 6420 696e 2066 6f72 6d61 7420 ified in format │ │ │ │ +00001060: 2764 686d 7327 2c20 652e 672e 0a20 2020 'dhms', e.g.. │ │ │ │ +00001070: 2031 3064 3468 206d 6561 6e73 2031 3020 10d4h means 10 │ │ │ │ +00001080: 6461 7973 2061 6e64 2034 2068 6f75 7273 days and 4 hours │ │ │ │ +00001090: 0a20 2020 2064 6566 6175 6c74 203d 2024 . default = $ │ │ │ │ +000010a0: 6b65 6570 416c 6c3b 0a0a 3d69 7465 6d20 keepAll;..=item │ │ │ │ +000010b0: 423c 2d2d 6b65 6570 5765 656b 6461 793e B<--keepWeekday> │ │ │ │ +000010c0: 0a0a 0909 2020 2020 6b65 6570 2062 6163 .... keep bac │ │ │ │ +000010d0: 6b75 7073 2066 6f72 2074 6865 2073 7065 kups for the spe │ │ │ │ +000010e0: 6369 6669 6564 2064 6179 7320 666f 7220 cified days for │ │ │ │ +000010f0: 7468 6520 7370 6563 6966 6965 640a 0909 the specified... │ │ │ │ +00001100: 2020 2020 616d 6f75 6e74 206f 6620 7469 amount of ti │ │ │ │ +00001110: 6d65 2e20 4f76 6572 7772 6974 6573 2074 me. Overwrites t │ │ │ │ +00001120: 6865 2064 6566 6175 6c74 2076 616c 7565 he default value │ │ │ │ +00001130: 7320 6368 6f73 656e 2069 6e0a 0909 2020 s chosen in... │ │ │ │ +00001140: 2020 2d2d 6b65 6570 416c 6c2e 2027 4d6f --keepAll. 'Mo │ │ │ │ +00001150: 6e2c 5765 643a 3430 6420 5361 743a 3630 n,Wed:40d Sat:60 │ │ │ │ +00001160: 6431 306d 2720 6d65 616e 733a 0a09 0909 d10m' means:.... │ │ │ │ +00001170: 6b65 6570 2062 6163 6b75 7073 206f 6620 keep backups of │ │ │ │ +00001180: 4d6f 6e20 616e 6420 5765 6420 3430 6461 Mon and Wed 40da │ │ │ │ +00001190: 7973 202b 2035 6d69 6e73 0a09 0909 6b65 ys + 5mins....ke │ │ │ │ +000011a0: 6570 2062 6163 6b75 7073 206f 6620 5361 ep backups of Sa │ │ │ │ +000011b0: 7420 3630 6461 7973 202b 2031 306d 696e t 60days + 10min │ │ │ │ +000011c0: 730a 0909 096b 6565 7020 6261 636b 7570 s....keep backup │ │ │ │ +000011d0: 7320 6f66 2074 6865 2072 6573 7420 6f66 s of the rest of │ │ │ │ +000011e0: 2074 6865 2064 6179 7320 6c69 6b65 2073 the days like s │ │ │ │ +000011f0: 7063 6966 6965 6420 696e 0a09 0909 092d pcified in.....- │ │ │ │ +00001200: 2d6b 6565 7041 6c6c 2028 6465 6661 756c -keepAll (defaul │ │ │ │ +00001210: 7420 246b 6565 7041 6c6c 290a 0909 2020 t $keepAll)... │ │ │ │ +00001220: 2020 6966 2079 6f75 2061 6c73 6f20 7573 if you also us │ │ │ │ +00001230: 6520 7468 6520 2761 7263 6869 7665 2066 e the 'archive f │ │ │ │ +00001240: 6c61 6727 2069 7420 6d65 616e 7320 746f lag' it means to │ │ │ │ +00001250: 206e 6f74 0a09 0920 2020 2064 656c 6574 not... delet │ │ │ │ +00001260: 6520 7468 6520 6166 6665 6374 6564 2064 e the affected d │ │ │ │ +00001270: 6972 6563 746f 7269 6573 2076 6961 202d irectories via - │ │ │ │ +00001280: 2d6b 6565 704d 6178 4e75 6d62 6572 3a0a -keepMaxNumber:. │ │ │ │ +00001290: 0909 2020 2020 2020 2061 3130 6434 6820 .. a10d4h │ │ │ │ +000012a0: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an │ │ │ │ +000012b0: 6420 3420 686f 7572 7320 616e 6420 2761 d 4 hours and 'a │ │ │ │ +000012c0: 7263 6869 7665 2066 6c61 6727 0a09 0920 rchive flag'... │ │ │ │ +000012d0: 2020 2065 2e67 2e20 274d 6f6e 2c57 6564 e.g. 'Mon,Wed │ │ │ │ +000012e0: 3a61 3430 6420 5361 743a 3630 6431 306d :a40d Sat:60d10m │ │ │ │ +000012f0: 2720 6d65 616e 733a 0a09 0909 6b65 6570 ' means:....keep │ │ │ │ +00001300: 2062 6163 6b75 7073 206f 6620 4d6f 6e20 backups of Mon │ │ │ │ +00001310: 616e 6420 5765 6420 3430 6461 7973 202b and Wed 40days + │ │ │ │ +00001320: 2035 6d69 6e73 202b 2027 6172 6368 6976 5mins + 'archiv │ │ │ │ +00001330: 6527 0a09 0909 6b65 6570 2062 6163 6b75 e'....keep backu │ │ │ │ +00001340: 7073 206f 6620 5361 7420 3630 6461 7973 ps of Sat 60days │ │ │ │ +00001350: 202b 2031 306d 696e 730a 0909 096b 6565 + 10mins....kee │ │ │ │ +00001360: 7020 6261 636b 7570 7320 6f66 2074 6865 p backups of the │ │ │ │ +00001370: 2072 6573 7420 6f66 2074 6865 2064 6179 rest of the day │ │ │ │ +00001380: 7320 6c69 6b65 2073 7065 6369 6669 6564 s like specified │ │ │ │ +00001390: 2069 6e0a 0909 0909 2d2d 6b65 6570 416c in.....--keepAl │ │ │ │ +000013a0: 6c20 2864 6566 6175 6c74 2024 6b65 6570 l (default $keep │ │ │ │ +000013b0: 416c 6c29 0a0a 3d69 7465 6d20 423c 2d2d All)..=item B<-- │ │ │ │ +000013c0: 6b65 6570 4669 7273 744f 6659 6561 723e keepFirstOfYear> │ │ │ │ +000013d0: 0a0a 2020 2020 646f 206e 6f74 2064 656c .. do not del │ │ │ │ +000013e0: 6574 6520 7468 6520 6669 7273 7420 6261 ete the first ba │ │ │ │ +000013f0: 636b 7570 206f 6620 6120 7965 6172 0a20 ckup of a year. │ │ │ │ +00001400: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim │ │ │ │ +00001410: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos │ │ │ │ +00001420: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f │ │ │ │ +00001430: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<-- │ │ │ │ +00001440: 6b65 6570 4c61 7374 4f66 5965 6172 3e0a keepLastOfYear>. │ │ │ │ +00001450: 0a20 2020 2064 6f20 6e6f 7420 6465 6c65 . do not dele │ │ │ │ +00001460: 7465 2074 6865 206c 6173 7420 6261 636b te the last back │ │ │ │ +00001470: 7570 206f 6620 6120 7965 6172 0a20 2020 up of a year. │ │ │ │ +00001480: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP │ │ │ │ +00001490: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi │ │ │ │ +000014a0: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla │ │ │ │ +000014b0: 6727 0a0a 3d69 7465 6d20 423c 2d2d 6b65 g'..=item B<--ke │ │ │ │ +000014c0: 6570 4669 7273 744f 664d 6f6e 7468 3e0a epFirstOfMonth>. │ │ │ │ +000014d0: 0a20 2020 2064 6f20 6e6f 7420 6465 6c65 . do not dele │ │ │ │ +000014e0: 7465 2074 6865 2066 6972 7374 2062 6163 te the first bac │ │ │ │ +000014f0: 6b75 7020 6f66 2061 206d 6f6e 7468 0a20 kup of a month. │ │ │ │ +00001500: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim │ │ │ │ +00001510: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos │ │ │ │ +00001520: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f │ │ │ │ +00001530: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<-- │ │ │ │ +00001540: 6b65 6570 4c61 7374 4f66 4d6f 6e74 683e keepLastOfMonth> │ │ │ │ +00001550: 0a0a 2020 2020 646f 206e 6f74 2064 656c .. do not del │ │ │ │ +00001560: 6574 6520 7468 6520 6c61 7374 2062 6163 ete the last bac │ │ │ │ +00001570: 6b75 7020 6f66 2061 206d 6f6e 7468 0a20 kup of a month. │ │ │ │ +00001580: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim │ │ │ │ +00001590: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos │ │ │ │ +000015a0: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f │ │ │ │ +000015b0: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<-- │ │ │ │ +000015c0: 6669 7273 7444 6179 4f66 5765 656b 3e0a firstDayOfWeek>. │ │ │ │ +000015d0: 0a20 2020 2064 6566 6175 6c74 3a20 2753 . default: 'S │ │ │ │ +000015e0: 756e 272e 2054 6869 7320 7661 6c75 6520 un'. This value │ │ │ │ +000015f0: 6973 2075 7365 6420 666f 7220 6361 6c63 is used for calc │ │ │ │ +00001600: 756c 6174 696e 670a 2020 2020 2d2d 6b65 ulating. --ke │ │ │ │ +00001610: 6570 4669 7273 744f 6657 6565 6b20 616e epFirstOfWeek an │ │ │ │ +00001620: 6420 2d2d 6b65 6570 4c61 7374 4f66 5765 d --keepLastOfWe │ │ │ │ +00001630: 656b 0a0a 3d69 7465 6d20 423c 2d2d 6b65 ek..=item B<--ke │ │ │ │ +00001640: 6570 4669 7273 744f 6657 6565 6b3e 0a0a epFirstOfWeek>.. │ │ │ │ +00001650: 2020 2020 646f 206e 6f74 2064 656c 6574 do not delet │ │ │ │ +00001660: 6520 7468 6520 6669 7273 7420 6261 636b e the first back │ │ │ │ +00001670: 7570 206f 6620 6120 7765 656b 0a20 2020 up of a week. │ │ │ │ +00001680: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP │ │ │ │ +00001690: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi │ │ │ │ +000016a0: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla │ │ │ │ +000016b0: 6727 0a0a 3d69 7465 6d20 423c 2d2d 6b65 g'..=item B<--ke │ │ │ │ +000016c0: 6570 4c61 7374 4f66 5765 656b 3e0a 0a20 epLastOfWeek>.. │ │ │ │ +000016d0: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete │ │ │ │ +000016e0: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup │ │ │ │ +000016f0: 206f 6620 6120 7765 656b 0a20 2020 2066 of a week. f │ │ │ │ +00001700: 6f72 6d61 7420 6973 2074 696d 6550 6572 ormat is timePer │ │ │ │ +00001710: 696f 6420 7769 7468 2070 6f73 7369 626c iod with possibl │ │ │ │ +00001720: 6520 2761 7263 6869 7665 2066 6c61 6727 e 'archive flag' │ │ │ │ +00001730: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep │ │ │ │ +00001740: 4475 706c 6963 6174 653e 0a0a 2020 2020 Duplicate>.. │ │ │ │ +00001750: 6b65 6570 206d 756c 7469 706c 6520 6261 keep multiple ba │ │ │ │ +00001760: 636b 7570 7320 6f66 206f 6e65 2064 6179 ckups of one day │ │ │ │ +00001770: 2075 7020 746f 2074 696d 6550 6572 696f up to timePerio │ │ │ │ +00001780: 640a 2020 2020 666f 726d 6174 2069 7320 d. format is │ │ │ │ +00001790: 7469 6d65 5065 7269 6f64 2c20 2761 7263 timePeriod, 'arc │ │ │ │ +000017a0: 6869 7665 2066 6c61 6727 2069 7320 6e6f hive flag' is no │ │ │ │ +000017b0: 7420 706f 7373 6962 6c65 0a20 2020 2064 t possible. d │ │ │ │ +000017c0: 6566 6175 6c74 203d 2024 6b65 6570 4475 efault = $keepDu │ │ │ │ +000017d0: 706c 6963 6174 653b 0a0a 3d69 7465 6d20 plicate;..=item │ │ │ │ +000017e0: 423c 2d2d 6b65 6570 4d69 6e4e 756d 6265 B<--keepMinNumbe │ │ │ │ +000017f0: 723e 0a0a 2020 2020 4b65 6570 2074 6861 r>.. Keep tha │ │ │ │ +00001800: 7420 6d69 6d69 6e75 6d20 6f66 2062 6163 t miminum of bac │ │ │ │ +00001810: 6b75 7073 2e20 4d75 6c74 6970 6c65 2062 kups. Multiple b │ │ │ │ +00001820: 6163 6b75 7073 206f 6620 6f6e 650a 2020 ackups of one. │ │ │ │ +00001830: 2020 6461 7920 6172 6520 636f 756e 7465 day are counte │ │ │ │ +00001840: 6420 6173 206f 6e65 2062 6163 6b75 702e d as one backup. │ │ │ │ +00001850: 2044 6566 6175 6c74 2069 7320 3130 2e0a Default is 10.. │ │ │ │ +00001860: 0a3d 6974 656d 2042 3c2d 2d6b 6565 704d .=item B<--keepM │ │ │ │ +00001870: 6178 4e75 6d62 6572 3e0a 0a20 2020 2054 axNumber>.. T │ │ │ │ +00001880: 7279 2074 6f20 6b65 6570 206f 6e6c 7920 ry to keep only │ │ │ │ +00001890: 7468 6174 206d 6178 696d 756d 206f 6620 that maximum of │ │ │ │ +000018a0: 6261 636b 7570 732e 2049 6620 796f 7520 backups. If you │ │ │ │ +000018b0: 6861 7665 0a20 2020 206d 6f72 6520 6261 have. more ba │ │ │ │ +000018c0: 636b 7570 732c 2074 6865 2066 6f6c 6c6f ckups, the follo │ │ │ │ +000018d0: 7769 6e67 2073 6571 7565 6e63 6520 6f66 wing sequence of │ │ │ │ +000018e0: 2064 656c 6574 696e 6720 7769 6c6c 0a20 deleting will. │ │ │ │ +000018f0: 2020 2068 6170 7065 6e3a 0a09 2020 2020 happen:.. │ │ │ │ +00001900: 2d20 6465 6c65 7465 2061 6c6c 2064 7570 - delete all dup │ │ │ │ +00001910: 6c69 6361 7465 7320 6f66 2061 2064 6179 licates of a day │ │ │ │ +00001920: 2c20 6265 6769 6e6e 696e 6720 7769 7468 , beginning with │ │ │ │ +00001930: 2074 6865 0a20 2020 2020 2020 2020 2020 the. │ │ │ │ +00001940: 2020 206f 6c64 206f 6e63 652c 2065 7863 old once, exc │ │ │ │ +00001950: 6570 7420 7468 6520 6f6c 6465 7374 206f ept the oldest o │ │ │ │ +00001960: 6620 6576 6572 7920 6461 790a 0920 2020 f every day.. │ │ │ │ +00001970: 202d 2069 6620 7468 6973 2069 7320 6e6f - if this is no │ │ │ │ +00001980: 7420 656e 6f75 6768 2c20 6465 6c65 7465 t enough, delete │ │ │ │ +00001990: 2074 6865 2072 6573 7420 6f66 2074 6865 the rest of the │ │ │ │ +000019a0: 2062 6163 6b75 7073 0a09 2020 2020 2020 backups.. │ │ │ │ +000019b0: 6265 6769 6e6e 696e 6720 7769 7468 2074 beginning with t │ │ │ │ +000019c0: 6865 206f 6c64 6573 742c 2062 7574 202a he oldest, but * │ │ │ │ +000019d0: 6e65 7665 722a 2061 2062 6163 6b75 7020 never* a backup │ │ │ │ +000019e0: 7769 7468 0a09 2020 2020 2020 7468 6520 with.. the │ │ │ │ +000019f0: 2761 7263 6869 7665 2066 6c61 6727 206f 'archive flag' o │ │ │ │ +00001a00: 7220 7468 6520 6c61 7374 2062 6163 6b75 r the last backu │ │ │ │ +00001a10: 700a 0a3d 6974 656d 2042 3c2d 2d6b 6565 p..=item B<--kee │ │ │ │ +00001a20: 7052 656c 6174 6976 653e 2c20 423c 2d52 pRelative>, B<-R │ │ │ │ +00001a30: 3e0a 0a20 2020 2041 6c74 6572 6e61 7469 >.. Alternati │ │ │ │ +00001a40: 7665 2064 656c 6574 696f 6e20 7363 6865 ve deletion sche │ │ │ │ +00001a50: 6d65 2e20 4966 2079 6f75 2075 7365 2074 me. If you use t │ │ │ │ +00001a60: 6869 7320 6f70 7469 6f6e 2c20 616c 6c20 his option, all │ │ │ │ +00001a70: 6f74 6865 720a 2020 2020 6b65 6570 206f other. keep o │ │ │ │ +00001a80: 7074 696f 6e73 2061 7265 2069 676e 6f72 ptions are ignor │ │ │ │ +00001a90: 6564 2e20 5072 6573 6572 7665 7320 6261 ed. Preserves ba │ │ │ │ +00001aa0: 636b 7570 7320 6465 7065 6e64 696e 670a ckups depending. │ │ │ │ +00001ab0: 2020 2020 6f6e 2074 6865 6972 202a 7265 on their *re │ │ │ │ +00001ac0: 6c61 7469 7665 2a20 6167 652e 2045 7861 lative* age. Exa │ │ │ │ +00001ad0: 6d70 6c65 3a0a 2020 2020 2d52 2027 3164 mple:. -R '1d │ │ │ │ +00001ae0: 2037 6420 326d 2033 6d27 0a20 2020 2020 7d 2m 3m'. │ │ │ │ +00001af0: 2020 2077 696c 6c20 2874 7279 2074 6f29 will (try to) │ │ │ │ +00001b00: 2065 6e73 7572 6520 7468 6174 2074 6865 ensure that the │ │ │ │ +00001b10: 7265 2069 7320 616c 7761 7973 0a09 2d20 re is always..- │ │ │ │ +00001b20: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe │ │ │ │ +00001b30: 656e 2031 2064 6179 2061 6e64 2037 2064 en 1 day and 7 d │ │ │ │ +00001b40: 6179 7320 6f6c 640a 092d 204f 6e65 2062 ays old..- One b │ │ │ │ +00001b50: 6163 6b75 7020 6265 7477 6565 6e20 3520 ackup between 5 │ │ │ │ +00001b60: 6461 7973 2061 6e64 2032 206d 6f6e 7468 days and 2 month │ │ │ │ +00001b70: 7320 6f6c 640a 092d 204f 6e65 2062 6163 s old..- One bac │ │ │ │ +00001b80: 6b75 7020 6265 7477 6565 6e20 3220 6d6f kup between 2 mo │ │ │ │ +00001b90: 6e74 6873 2061 6e64 2033 206d 6f6e 7468 nths and 3 month │ │ │ │ +00001ba0: 7320 6f6c 640a 0949 6620 7468 6572 6520 s old..If there │ │ │ │ +00001bb0: 6973 206e 6f20 6261 636b 7570 2066 6f72 is no backup for │ │ │ │ +00001bc0: 2061 2073 7065 6369 6669 6564 2074 696d a specified tim │ │ │ │ +00001bd0: 6573 7061 6e0a 0928 652e 672e 2062 6563 espan..(e.g. bec │ │ │ │ +00001be0: 6175 7365 2074 6865 206c 6173 7420 6261 ause the last ba │ │ │ │ +00001bf0: 636b 7570 2077 6173 2064 6f6e 6520 6d6f ckup was done mo │ │ │ │ +00001c00: 7265 2074 6861 6e20 3220 7765 656b 730a re than 2 weeks. │ │ │ │ +00001c10: 0961 676f 2920 7468 6520 6e65 7874 206f .ago) the next o │ │ │ │ +00001c20: 6c64 6572 2062 6163 6b75 7020 7769 6c6c lder backup will │ │ │ │ +00001c30: 2062 6520 7573 6564 2066 6f72 2074 6869 be used for thi │ │ │ │ +00001c40: 7320 7469 6d65 7370 616e 2e0a 0a3d 6974 s timespan...=it │ │ │ │ +00001c50: 656d 2042 3c2d 2d6c 6f67 4669 6c65 3e2c em B<--logFile>, │ │ │ │ +00001c60: 2042 3c2d 6c3e 0a0a 2020 2020 6c6f 6720 B<-l>.. log │ │ │ │ +00001c70: 6669 6c65 2028 6465 6661 756c 7420 6973 file (default is │ │ │ │ +00001c80: 2053 5444 4f55 5429 0a0a 3d69 7465 6d20 STDOUT)..=item │ │ │ │ +00001c90: 423c 2d2d 706c 7573 4c6f 6753 7464 6f75 B<--plusLogStdou │ │ │ │ +00001ca0: 743e 0a0a 2020 2020 6966 2079 6f75 2073 t>.. if you s │ │ │ │ +00001cb0: 7065 6369 6679 2061 206c 6f67 2066 696c pecify a log fil │ │ │ │ +00001cc0: 6520 7769 7468 202d 2d6c 6f67 4669 6c65 e with --logFile │ │ │ │ +00001cd0: 2079 6f75 2063 616e 0a20 2020 2061 6464 you can. add │ │ │ │ +00001ce0: 6974 696f 6e61 6c6c 7920 7072 696e 7420 itionally print │ │ │ │ +00001cf0: 7468 6520 6f75 7470 7574 2074 6f20 5354 the output to ST │ │ │ │ +00001d00: 444f 5554 2077 6974 6820 7468 6973 2066 DOUT with this f │ │ │ │ +00001d10: 6c61 670a 0a3d 6974 656d 2042 3c2d 2d73 lag..=item B<--s │ │ │ │ +00001d20: 7570 7072 6573 7354 696d 653e 0a0a 2020 uppressTime>.. │ │ │ │ +00001d30: 2020 7375 7070 7265 7373 206f 7574 7075 suppress outpu │ │ │ │ +00001d40: 7420 6f66 2074 696d 6520 696e 206c 6f67 t of time in log │ │ │ │ +00001d50: 6669 6c65 0a0a 3d69 7465 6d20 423c 2d2d file..=item B<-- │ │ │ │ +00001d60: 6d61 7846 696c 656c 656e 3e2c 2042 3c2d maxFilelen>, B<- │ │ │ │ +00001d70: 6d3e 0a0a 2020 2020 6d61 7869 6d61 6c20 m>.. maximal │ │ │ │ +00001d80: 6c65 6e67 7468 206f 6620 6669 6c65 2c20 length of file, │ │ │ │ +00001d90: 6465 6661 756c 7420 3d20 3165 360a 0a3d default = 1e6..= │ │ │ │ +00001da0: 6974 656d 2042 3c2d 2d6e 6f4f 664f 6c64 item B<--noOfOld │ │ │ │ +00001db0: 4669 6c65 733e 2c20 423c 2d6e 3e0a 0a20 Files>, B<-n>.. │ │ │ │ +00001dc0: 2020 206e 756d 6265 7220 6f66 206f 6c64 number of old │ │ │ │ +00001dd0: 206c 6f67 2066 696c 6573 2c20 6465 6661 log files, defa │ │ │ │ +00001de0: 756c 7420 3d20 350a 0a3d 6974 656d 2042 ult = 5..=item B │ │ │ │ +00001df0: 3c2d 2d73 6176 654c 6f67 733e 0a0a 2020 <--saveLogs>.. │ │ │ │ +00001e00: 2020 7361 7665 206c 6f67 2066 696c 6573 save log files │ │ │ │ +00001e10: 2077 6974 6820 6461 7465 2061 6e64 2074 with date and t │ │ │ │ +00001e20: 696d 6520 696e 7374 6561 6420 6f66 2064 ime instead of d │ │ │ │ +00001e30: 656c 6574 696e 6720 7468 650a 2020 2020 eleting the. │ │ │ │ +00001e40: 6f6c 6420 2877 6974 6820 5b2d 6e6f 4f6c old (with [-noOl │ │ │ │ +00001e50: 6446 696c 6573 5d29 0a0a 3d69 7465 6d20 dFiles])..=item │ │ │ │ +00001e60: 423c 2d2d 636f 6d70 7265 7373 5769 7468 B<--compressWith │ │ │ │ +00001e70: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress │ │ │ │ +00001e80: 7361 7665 6420 6c6f 6720 6669 6c65 7320 saved log files │ │ │ │ +00001e90: 2865 2e67 2e20 7769 7468 2027 677a 6970 (e.g. with 'gzip │ │ │ │ +00001ea0: 202d 3927 290a 2020 2020 6465 6661 756c -9'). defaul │ │ │ │ +00001eb0: 7420 6973 2027 627a 6970 3227 0a0a 3d62 t is 'bzip2'..=b │ │ │ │ +00001ec0: 6163 6b0a 0a3d 6865 6164 3120 434f 5059 ack..=head1 COPY │ │ │ │ +00001ed0: 5249 4748 540a 0a43 6f70 7972 6967 6874 RIGHT..Copyright │ │ │ │ +00001ee0: 2028 6329 2032 3030 332d 3230 3038 2062 (c) 2003-2008 b │ │ │ │ +00001ef0: 7920 4865 696e 7a2d 4a6f 7365 6620 436c y Heinz-Josef Cl │ │ │ │ +00001f00: 6165 7320 2873 6565 2052 4541 444d 4529 aes (see README) │ │ │ │ +00001f10: 2e0a 5075 626c 6973 6865 6420 756e 6465 ..Published unde │ │ │ │ +00001f20: 7220 7468 6520 474e 5520 4765 6e65 7261 r the GNU Genera │ │ │ │ +00001f30: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +00001f40: 2076 3320 6f72 2061 6e79 206c 6174 6572 v3 or any later │ │ │ │ +00001f50: 2076 6572 7369 6f6e 0a0a 3d63 7574 0a0a version..=cut.. │ │ │ │ +00001f60: 6d79 2024 4865 6c70 203d 206a 6f69 6e28 my $Help = join( │ │ │ │ +00001f70: 2727 2c20 6772 6570 2821 2f5e 5c73 2a24 '', grep(!/^\s*$ │ │ │ │ +00001f80: 2f2c 2060 706f 6432 7465 7874 2024 3060 /, `pod2text $0` │ │ │ │ +00001f90: 2929 3b0a 2448 656c 7020 3d20 2263 616e ));.$Help = "can │ │ │ │ +00001fa0: 6e6f 7420 6669 6e64 2070 6f64 3274 6578 not find pod2tex │ │ │ │ +00001fb0: 742c 2073 6565 2064 6f63 756d 656e 7461 t, see documenta │ │ │ │ +00001fc0: 7469 6f6e 2066 6f72 2064 6574 6169 6c73 tion for details │ │ │ │ +00001fd0: 5c6e 220a 2020 2020 756e 6c65 7373 2024 \n". unless $ │ │ │ │ +00001fe0: 4865 6c70 3b0a 0a26 7072 696e 7456 6572 Help;..&printVer │ │ │ │ +00001ff0: 7369 6f6e 7328 5c40 4152 4756 2c20 272d sions(\@ARGV, '- │ │ │ │ +00002000: 5627 293b 0a0a 6d79 2024 7374 6172 7444 V');..my $startD │ │ │ │ +00002010: 6174 6520 3d20 6461 7465 546f 6f6c 732d ate = dateTools- │ │ │ │ +00002020: 3e6e 6577 2829 3b0a 0a6d 7920 2443 6865 >new();..my $Che │ │ │ │ +00002030: 636b 5061 7220 3d0a 2020 2020 4368 6563 ckPar =. Chec │ │ │ │ +00002040: 6b50 6172 616d 2d3e 6e65 7728 272d 616c kParam->new('-al │ │ │ │ +00002050: 6c6f 774c 6973 7473 2720 3d3e 2027 6e6f lowLists' => 'no │ │ │ │ +00002060: 272c 0a09 0920 2020 2027 2d63 6f6e 6669 ',... '-confi │ │ │ │ +00002070: 6746 696c 6527 203d 3e20 272d 6627 2c0a gFile' => '-f',. │ │ │ │ +00002080: 0909 2020 2020 272d 6c69 7374 2720 3d3e .. '-list' => │ │ │ │ +00002090: 205b 4f70 7469 6f6e 2d3e 6e65 7728 272d [Option->new('- │ │ │ │ +000020a0: 6e61 6d65 2720 3d3e 2027 636f 6e66 6967 name' => 'config │ │ │ │ +000020b0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ │ +000020c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +000020d0: 272d 6627 2c0a 0909 0909 0920 2020 2027 '-f',...... ' │ │ │ │ +000020e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +000020f0: 2d66 696c 6527 2c0a 0909 0909 0920 2020 -file',...... │ │ │ │ +00002100: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ │ +00002110: 7327 292c 0a20 2020 2020 2020 2020 2020 s'),. │ │ │ │ +00002120: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002130: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ │ +00002140: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri │ │ │ │ +00002150: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '- │ │ │ │ +00002160: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +00002170: 2d70 7269 6e74 2729 2c0a 2020 2020 2020 -print'),. │ │ │ │ +00002180: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002190: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +000021a0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +000021b0: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',... │ │ │ │ +000021c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +000021d0: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',.... │ │ │ │ +000021e0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +000021f0: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi │ │ │ │ +00002200: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ │ +00002210: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu │ │ │ │ +00002220: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ │ +00002230: 272d 6d75 7374 5f62 6527 203d 3e20 2779 '-must_be' => 'y │ │ │ │ +00002240: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ │ +00002250: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ │ +00002260: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +00002270: 7728 272d 6e61 6d65 2720 3d3e 2027 7365 w('-name' => 'se │ │ │ │ +00002280: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... │ │ │ │ +00002290: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +000022a0: 272d 5327 2c0a 0909 0909 0920 2020 2027 '-S',...... ' │ │ │ │ +000022b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +000022c0: 2d73 6572 6965 7327 2c0a 0909 0909 0920 -series',...... │ │ │ │ +000022d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +000022e0: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... │ │ │ │ +000022f0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ │ +00002300: 2027 6465 6661 756c 7427 292c 0a09 0909 'default'),.... │ │ │ │ +00002310: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +00002320: 616d 6527 203d 3e20 276c 6f63 6b46 696c ame' => 'lockFil │ │ │ │ +00002330: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +00002340: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d4c l_option' => '-L │ │ │ │ +00002350: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00002360: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6c6f _alias' => '--lo │ │ │ │ +00002370: 636b 4669 6c65 272c 0a09 0909 0909 2020 ckFile',...... │ │ │ │ +00002380: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +00002390: 6c6f 636b 4669 6c65 272c 0a09 0909 0909 lockFile',...... │ │ │ │ +000023a0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' = │ │ │ │ +000023b0: 3e20 246c 6f63 6b46 696c 6529 2c0a 0909 > $lockFile),... │ │ │ │ +000023c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +000023d0: 6e61 6d65 2720 3d3e 2027 646f 4e6f 7444 name' => 'doNotD │ │ │ │ +000023e0: 656c 6574 6527 2c0a 0909 0909 0920 2020 elete',...... │ │ │ │ +000023f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +00002400: 2027 2d2d 646f 4e6f 7444 656c 6574 6527 '--doNotDelete' │ │ │ │ +00002410: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ │ +00002420: 6b65 7927 203d 3e20 2764 6f4e 6f74 4465 key' => 'doNotDe │ │ │ │ +00002430: 6c65 7465 272c 0a09 0909 0909 2020 2020 lete',...... │ │ │ │ +00002440: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ │ +00002450: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ │ +00002460: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +00002470: 7728 272d 6e61 6d65 2720 3d3e 2027 6465 w('-name' => 'de │ │ │ │ +00002480: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD │ │ │ │ +00002490: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... ' │ │ │ │ +000024a0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +000024b0: 2d2d 6465 6c65 7465 4e6f 7446 696e 6973 --deleteNotFinis │ │ │ │ +000024c0: 6865 6444 6972 7327 2c0a 0909 0909 0920 hedDirs',...... │ │ │ │ +000024d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +000024e0: 2764 656c 6574 654e 6f74 4669 6e69 7368 'deleteNotFinish │ │ │ │ +000024f0: 6564 4469 7273 272c 0a09 0909 0909 2020 edDirs',...... │ │ │ │ +00002500: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet' │ │ │ │ +00002510: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no' │ │ │ │ +00002520: 5d29 2c0a 0909 0909 4f70 7469 6f6e 2d3e ]),.....Option-> │ │ │ │ +00002530: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00002540: 6b65 6570 416c 6c27 2c0a 0909 0909 0920 keepAll',...... │ │ │ │ +00002550: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +00002560: 3d3e 2027 2d2d 6b65 6570 416c 6c27 2c0a => '--keepAll',. │ │ │ │ +00002570: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +00002580: 7927 203d 3e20 276b 6565 7041 6c6c 272c y' => 'keepAll', │ │ │ │ +00002590: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ │ +000025a0: 756c 7427 203d 3e20 246b 6565 7041 6c6c ult' => $keepAll │ │ │ │ +000025b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +000025c0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ │ +000025d0: 6565 7057 6565 6b64 6179 272c 0a09 0909 eepWeekday',.... │ │ │ │ +000025e0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +000025f0: 6e27 203d 3e20 272d 2d6b 6565 7057 6565 n' => '--keepWee │ │ │ │ +00002600: 6b64 6179 272c 0a09 0909 0909 2020 2020 kday',...... │ │ │ │ +00002610: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke │ │ │ │ +00002620: 6570 5765 656b 6461 7927 2c0a 0909 0909 epWeekday',..... │ │ │ │ +00002630: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ │ +00002640: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ │ +00002650: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +00002660: 616d 6527 203d 3e20 276b 6565 7046 6972 ame' => 'keepFir │ │ │ │ +00002670: 7374 4f66 5965 6172 272c 0a09 0909 0909 stOfYear',...... │ │ │ │ +00002680: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00002690: 203d 3e20 272d 2d6b 6565 7046 6972 7374 => '--keepFirst │ │ │ │ +000026a0: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... │ │ │ │ +000026b0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +000026c0: 6b65 6570 4669 7273 744f 6659 6561 7227 keepFirstOfYear' │ │ │ │ +000026d0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ │ +000026e0: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),.. │ │ │ │ +000026f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +00002700: 2d6e 616d 6527 203d 3e20 276b 6565 704c -name' => 'keepL │ │ │ │ +00002710: 6173 744f 6659 6561 7227 2c0a 0909 0909 astOfYear',..... │ │ │ │ +00002720: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +00002730: 2720 3d3e 2027 2d2d 6b65 6570 4c61 7374 ' => '--keepLast │ │ │ │ +00002740: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... │ │ │ │ +00002750: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +00002760: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear', │ │ │ │ +00002770: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ │ +00002780: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ │ +00002790: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +000027a0: 6e61 6d65 2720 3d3e 2027 6b65 6570 4669 name' => 'keepFi │ │ │ │ +000027b0: 7273 744f 664d 6f6e 7468 272c 0a09 0909 rstOfMonth',.... │ │ │ │ +000027c0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +000027d0: 6e27 203d 3e20 272d 2d6b 6565 7046 6972 n' => '--keepFir │ │ │ │ +000027e0: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',..... │ │ │ │ +000027f0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +00002800: 3e20 276b 6565 7046 6972 7374 4f66 4d6f > 'keepFirstOfMo │ │ │ │ +00002810: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... ' │ │ │ │ +00002820: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ │ +00002830: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00002840: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ │ +00002850: 6565 704c 6173 744f 664d 6f6e 7468 272c eepLastOfMonth', │ │ │ │ +00002860: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00002870: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ │ +00002880: 704c 6173 744f 664d 6f6e 7468 272c 0a09 pLastOfMonth',.. │ │ │ │ +00002890: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +000028a0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf │ │ │ │ +000028b0: 4d6f 6e74 6827 2c0a 0909 0909 0920 2020 Month',...... │ │ │ │ +000028c0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ │ +000028d0: 7327 292c 0a20 2020 2020 2020 2020 2020 s'),. │ │ │ │ +000028e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000028f0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ │ +00002900: 2827 2d6e 616d 6527 203d 3e20 2766 6972 ('-name' => 'fir │ │ │ │ +00002910: 7374 4461 794f 6657 6565 6b27 2c0a 0909 stDayOfWeek',... │ │ │ │ +00002920: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00002930: 6f6e 2720 3d3e 2027 2d2d 6669 7273 7444 on' => '--firstD │ │ │ │ +00002940: 6179 4f66 5765 656b 272c 0a09 0909 0909 ayOfWeek',...... │ │ │ │ +00002950: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +00002960: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek │ │ │ │ +00002970: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ │ +00002980: 6661 756c 7427 203d 3e20 2753 756e 2729 fault' => 'Sun') │ │ │ │ +00002990: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +000029a0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke │ │ │ │ +000029b0: 6570 4669 7273 744f 6657 6565 6b27 2c0a epFirstOfWeek',. │ │ │ │ +000029c0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +000029d0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ │ +000029e0: 4669 7273 744f 6657 6565 6b27 2c0a 0909 FirstOfWeek',... │ │ │ │ +000029f0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +00002a00: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf │ │ │ │ +00002a10: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... │ │ │ │ +00002a20: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +00002a30: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ │ +00002a40: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00002a50: 6b65 6570 4c61 7374 4f66 5765 656b 272c keepLastOfWeek', │ │ │ │ +00002a60: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00002a70: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ │ +00002a80: 704c 6173 744f 6657 6565 6b27 2c0a 0909 pLastOfWeek',... │ │ │ │ +00002a90: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +00002aa0: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW │ │ │ │ +00002ab0: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... ' │ │ │ │ +00002ac0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ │ +00002ad0: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. │ │ │ │ +00002ae0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002af0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ │ +00002b00: 2d6e 616d 6527 203d 3e20 276b 6565 7044 -name' => 'keepD │ │ │ │ +00002b10: 7570 6c69 6361 7465 272c 0a09 0909 0909 uplicate',...... │ │ │ │ +00002b20: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00002b30: 203d 3e20 272d 2d6b 6565 7044 7570 6c69 => '--keepDupli │ │ │ │ +00002b40: 6361 7465 272c 0a09 0909 0909 2020 2020 cate',...... │ │ │ │ +00002b50: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke │ │ │ │ +00002b60: 6570 4475 706c 6963 6174 6527 2c0a 0909 epDuplicate',... │ │ │ │ +00002b70: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +00002b80: 2720 3d3e 2024 6b65 6570 4475 706c 6963 ' => $keepDuplic │ │ │ │ +00002b90: 6174 6529 2c0a 2020 2020 2020 2020 2020 ate),. │ │ │ │ +00002ba0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002bb0: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne │ │ │ │ +00002bc0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke │ │ │ │ +00002bd0: 6570 4d69 6e4e 756d 6265 7227 2c0a 0909 epMinNumber',... │ │ │ │ +00002be0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00002bf0: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4d69 on' => '--keepMi │ │ │ │ +00002c00: 6e4e 756d 6265 7227 2c0a 0909 0909 0920 nNumber',...... │ │ │ │ +00002c10: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +00002c20: 276b 6565 704d 696e 4e75 6d62 6572 272c 'keepMinNumber', │ │ │ │ +00002c30: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ │ +00002c40: 756c 7427 203d 3e20 3130 2c0a 0909 0909 ult' => 10,..... │ │ │ │ +00002c50: 0920 2020 2027 2d70 6174 7465 726e 2720 . '-pattern' │ │ │ │ +00002c60: 3d3e 2027 5c41 5c64 2b5c 5a27 292c 0a20 => '\A\d+\Z'),. │ │ │ │ +00002c70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002c80: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +00002c90: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00002ca0: 6527 203d 3e20 276b 6565 704d 6178 4e75 e' => 'keepMaxNu │ │ │ │ +00002cb0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... │ │ │ │ +00002cc0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +00002cd0: 272d 2d6b 6565 704d 6178 4e75 6d62 6572 '--keepMaxNumber │ │ │ │ +00002ce0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +00002cf0: 5f6b 6579 2720 3d3e 2027 6b65 6570 4d61 _key' => 'keepMa │ │ │ │ +00002d00: 784e 756d 6265 7227 2c0a 0909 0909 0920 xNumber',...... │ │ │ │ +00002d10: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ │ +00002d20: 2030 2c0a 0909 0909 0920 2020 2027 2d70 0,...... '-p │ │ │ │ +00002d30: 6174 7465 726e 2720 3d3e 2027 5c41 5c64 attern' => '\A\d │ │ │ │ +00002d40: 2b5c 5a27 292c 0a20 2020 2020 2020 2020 +\Z'),. │ │ │ │ +00002d50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002d60: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n │ │ │ │ +00002d70: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ │ +00002d80: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',... │ │ │ │ +00002d90: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00002da0: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 5265 on' => '--keepRe │ │ │ │ +00002db0: 6c61 7469 7665 272c 0a09 0909 0909 2020 lative',...... │ │ │ │ +00002dc0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +00002dd0: 6b65 6570 5265 6c61 7469 7665 272c 0a09 keepRelative',.. │ │ │ │ +00002de0: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE │ │ │ │ +00002df0: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',.. │ │ │ │ +00002e00: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ │ +00002e10: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ │ +00002e20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +00002e30: 6d65 2720 3d3e 2027 6c6f 6746 696c 6527 me' => 'logFile' │ │ │ │ +00002e40: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00002e50: 6f70 7469 6f6e 2720 3d3e 2027 2d6c 272c option' => '-l', │ │ │ │ +00002e60: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +00002e70: 6c69 6173 2720 3d3e 2027 2d2d 6c6f 6746 lias' => '--logF │ │ │ │ +00002e80: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ │ +00002e90: 2d63 665f 6b65 7927 203d 3e20 276c 6f67 -cf_key' => 'log │ │ │ │ +00002ea0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ │ +00002eb0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +00002ec0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ │ +00002ed0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00002ee0: 706c 7573 4c6f 6753 7464 6f75 7427 2c0a plusLogStdout',. │ │ │ │ +00002ef0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00002f00: 7469 6f6e 2720 3d3e 2027 2d2d 706c 7573 tion' => '--plus │ │ │ │ +00002f10: 4c6f 6753 7464 6f75 7427 2c0a 0909 0909 LogStdout',..... │ │ │ │ +00002f20: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +00002f30: 3e20 2770 6c75 734c 6f67 5374 646f 7574 > 'plusLogStdout │ │ │ │ +00002f40: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +00002f50: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => [' │ │ │ │ +00002f60: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),... │ │ │ │ +00002f70: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +00002f80: 6e61 6d65 2720 3d3e 2027 7375 7070 7265 name' => 'suppre │ │ │ │ +00002f90: 7373 5469 6d65 272c 0a09 0909 0909 2020 ssTime',...... │ │ │ │ +00002fa0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00002fb0: 3e20 272d 2d73 7570 7072 6573 7354 696d > '--suppressTim │ │ │ │ +00002fc0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +00002fd0: 665f 6b65 7927 203d 3e20 2773 7570 7072 f_key' => 'suppr │ │ │ │ +00002fe0: 6573 7354 696d 6527 2c0a 0909 0909 0920 essTime',...... │ │ │ │ +00002ff0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' => │ │ │ │ +00003000: 2022 5b6c 6f67 4669 6c65 5d22 2c0a 0909 "[logFile]",... │ │ │ │ +00003010: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp │ │ │ │ +00003020: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes', │ │ │ │ +00003030: 2027 6e6f 275d 292c 0a09 0909 094f 7074 'no']),.....Opt │ │ │ │ +00003040: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00003050: 203d 3e20 276d 6178 4669 6c65 6c65 6e27 => 'maxFilelen' │ │ │ │ +00003060: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00003070: 6f70 7469 6f6e 2720 3d3e 2027 2d6d 272c option' => '-m', │ │ │ │ +00003080: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +00003090: 6c69 6173 2720 3d3e 2027 2d2d 6d61 7846 lias' => '--maxF │ │ │ │ +000030a0: 696c 656c 656e 272c 0a09 0909 0909 2020 ilelen',...... │ │ │ │ +000030b0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +000030c0: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',.... │ │ │ │ +000030d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ │ +000030e0: 203d 3e20 3165 362c 0a09 0909 0909 2020 => 1e6,...... │ │ │ │ +000030f0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ │ +00003100: 275c 415b 655c 645d 2b5c 5a27 2c0a 0909 '\A[e\d]+\Z',... │ │ │ │ +00003110: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if │ │ │ │ +00003120: 2720 3d3e 2022 5b6c 6f67 4669 6c65 5d22 ' => "[logFile]" │ │ │ │ +00003130: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00003140: 6577 2827 2d6e 616d 6527 203d 3e20 276e ew('-name' => 'n │ │ │ │ +00003150: 6f4f 664f 6c64 4669 6c65 7327 2c0a 0909 oOfOldFiles',... │ │ │ │ +00003160: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00003170: 6f6e 2720 3d3e 2027 2d6e 272c 0a09 0909 on' => '-n',.... │ │ │ │ +00003180: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +00003190: 2720 3d3e 2027 2d2d 6e6f 4f66 4f6c 6446 ' => '--noOfOldF │ │ │ │ +000031a0: 696c 6573 272c 0a09 0909 0909 2020 2020 iles',...... │ │ │ │ +000031b0: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no │ │ │ │ +000031c0: 4f66 4f6c 6446 696c 6573 272c 0a09 0909 OfOldFiles',.... │ │ │ │ +000031d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ │ +000031e0: 203d 3e20 2735 272c 0a09 0909 0909 2020 => '5',...... │ │ │ │ +000031f0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ │ +00003200: 275c 415c 642b 5c5a 272c 0a09 0909 0909 '\A\d+\Z',...... │ │ │ │ +00003210: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ │ +00003220: 3e22 5b6c 6f67 4669 6c65 5d22 292c 0a20 >"[logFile]"),. │ │ │ │ +00003230: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003240: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +00003250: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00003260: 6527 203d 3e20 2773 6176 654c 6f67 7327 e' => 'saveLogs' │ │ │ │ +00003270: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00003280: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7361 option' => '--sa │ │ │ │ +00003290: 7665 4c6f 6773 272c 0a09 0909 0909 2020 veLogs',...... │ │ │ │ +000032a0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +000032b0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',...... │ │ │ │ +000032c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ │ +000032d0: 3e20 225b 6c6f 6746 696c 655d 222c 0a09 > "[logFile]",.. │ │ │ │ +000032e0: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO │ │ │ │ +000032f0: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes' │ │ │ │ +00003300: 2c20 276e 6f27 5d29 2c0a 2020 2020 2020 , 'no']),. │ │ │ │ +00003310: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003320: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +00003330: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00003340: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith', │ │ │ │ +00003350: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00003360: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com │ │ │ │ +00003370: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',..... │ │ │ │ +00003380: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +00003390: 3e20 2763 6f6d 7072 6573 7357 6974 6827 > 'compressWith' │ │ │ │ +000033a0: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo │ │ │ │ +000033b0: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes' │ │ │ │ +000033c0: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ │ +000033d0: 6175 6c74 2720 3d3e 2027 627a 6970 3227 ault' => 'bzip2' │ │ │ │ +000033e0: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl │ │ │ │ +000033f0: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>"[logFil │ │ │ │ +00003400: 655d 2229 2c0a 2320 6869 6464 656e 206f e]"),.# hidden o │ │ │ │ +00003410: 7074 696f 6e73 0a09 0909 094f 7074 696f ptions.....Optio │ │ │ │ +00003420: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00003430: 3e20 2770 7269 6e74 416c 6c27 2c0a 0909 > 'printAll',... │ │ │ │ +00003440: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00003450: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7441 on' => '--printA │ │ │ │ +00003460: 6c6c 272c 0a09 0909 0909 2020 2020 272d ll',...... '- │ │ │ │ +00003470: 6869 6464 656e 2720 3d3e 2027 7965 7327 hidden' => 'yes' │ │ │ │ +00003480: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00003490: 6577 2827 2d6e 616d 6527 203d 3e20 2774 ew('-name' => 't │ │ │ │ +000034a0: 6f64 6179 4f70 7427 2c0a 0909 0909 0920 odayOpt',...... │ │ │ │ +000034b0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +000034c0: 3d3e 2027 2d2d 746f 6461 7927 2c0a 0909 => '--today',... │ │ │ │ +000034d0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +000034e0: 203d 3e20 2774 6f64 6179 272c 0a09 0909 => 'today',.... │ │ │ │ +000034f0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' │ │ │ │ +00003500: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... │ │ │ │ +00003510: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ │ +00003520: 7965 7327 290a 0909 0909 5d0a 0909 2020 yes').....]... │ │ │ │ +00003530: 2020 293b 0a0a 2443 6865 636b 5061 722d );..$CheckPar- │ │ │ │ +00003540: 3e63 6865 636b 2827 2d61 7267 7627 203d >check('-argv' = │ │ │ │ +00003550: 3e20 5c40 4152 4756 2c0a 2020 2020 2020 > \@ARGV,. │ │ │ │ +00003560: 2020 2020 2020 2020 2020 2027 2d68 656c '-hel │ │ │ │ +00003570: 7027 203d 3e20 2448 656c 702c 0a20 2020 p' => $Help,. │ │ │ │ +00003580: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +00003590: 6967 6e6f 7265 4164 6469 7469 6f6e 616c ignoreAdditional │ │ │ │ +000035a0: 4b65 7973 2720 3d3e 2031 0a20 2020 2020 Keys' => 1. │ │ │ │ +000035b0: 2020 2020 2020 2020 2020 2020 293b 0a0a );.. │ │ │ │ +000035c0: 2320 4175 7377 6572 7475 6e67 2064 6572 # Auswertung der │ │ │ │ +000035d0: 2050 6172 616d 6574 6572 0a6d 7920 2463 Parameter.my $c │ │ │ │ +000035e0: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che │ │ │ │ +000035f0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00003600: 6850 6172 2827 636f 6e66 6967 4669 6c65 hPar('configFile │ │ │ │ +00003610: 2729 3b0a 6d79 2024 7072 696e 7420 3d20 ');.my $print = │ │ │ │ +00003620: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00003630: 7457 6974 686f 7574 5061 7228 2770 7269 tWithoutPar('pri │ │ │ │ +00003640: 6e74 2729 3b0a 0a6d 7920 2462 6163 6b75 nt');..my $backu │ │ │ │ +00003650: 7044 6972 203d 2024 4368 6563 6b50 6172 pDir = $CheckPar │ │ │ │ +00003660: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00003670: 2762 6163 6b75 7044 6972 2729 3b0a 6d79 'backupDir');.my │ │ │ │ +00003680: 2024 7365 7269 6573 203d 2024 4368 6563 $series = $Chec │ │ │ │ +00003690: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +000036a0: 5061 7228 2773 6572 6965 7327 293b 0a0a Par('series');.. │ │ │ │ +000036b0: 6d79 2024 6c6f 636b 4669 6c65 203d 2024 my $lockFile = $ │ │ │ │ +000036c0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +000036d0: 5769 7468 5061 7228 276c 6f63 6b46 696c WithPar('lockFil │ │ │ │ +000036e0: 6527 293b 0a6d 7920 2464 6f4e 6f74 4465 e');.my $doNotDe │ │ │ │ +000036f0: 6c65 7465 203d 2024 4368 6563 6b50 6172 lete = $CheckPar │ │ │ │ +00003700: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00003710: 6172 2827 646f 4e6f 7444 656c 6574 6527 ar('doNotDelete' │ │ │ │ +00003720: 293b 0a6d 7920 2464 656c 6574 654e 6f74 );.my $deleteNot │ │ │ │ +00003730: 4669 6e69 7368 6564 4469 7273 203d 2024 FinishedDirs = $ │ │ │ │ +00003740: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00003750: 5769 7468 6f75 7450 6172 2827 6465 6c65 WithoutPar('dele │ │ │ │ +00003760: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir │ │ │ │ +00003770: 7327 293b 0a24 6b65 6570 416c 6c20 3d20 s');.$keepAll = │ │ │ │ +00003780: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00003790: 7457 6974 6850 6172 2827 6b65 6570 416c tWithPar('keepAl │ │ │ │ +000037a0: 6c27 293b 0a6d 7920 246b 6565 7057 6565 l');.my $keepWee │ │ │ │ +000037b0: 6b64 6179 203d 2024 4368 6563 6b50 6172 kday = $CheckPar │ │ │ │ +000037c0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +000037d0: 276b 6565 7057 6565 6b64 6179 2729 3b0a 'keepWeekday');. │ │ │ │ +000037e0: 246b 6565 7057 6565 6b64 6179 203d 2022 $keepWeekday = " │ │ │ │ +000037f0: 4024 6b65 6570 5765 656b 6461 7922 2069 @$keepWeekday" i │ │ │ │ +00003800: 6620 6465 6669 6e65 6420 246b 6565 7057 f defined $keepW │ │ │ │ +00003810: 6565 6b64 6179 3b0a 6d79 2024 6b65 6570 eekday;.my $keep │ │ │ │ +00003820: 4669 7273 744f 6659 6561 7220 3d20 2443 FirstOfYear = $C │ │ │ │ +00003830: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00003840: 6974 6850 6172 2827 6b65 6570 4669 7273 ithPar('keepFirs │ │ │ │ +00003850: 744f 6659 6561 7227 293b 0a6d 7920 246b tOfYear');.my $k │ │ │ │ +00003860: 6565 704c 6173 744f 6659 6561 7220 3d20 eepLastOfYear = │ │ │ │ +00003870: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00003880: 7457 6974 6850 6172 2827 6b65 6570 4c61 tWithPar('keepLa │ │ │ │ +00003890: 7374 4f66 5965 6172 2729 3b0a 6d79 2024 stOfYear');.my $ │ │ │ │ +000038a0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ │ +000038b0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000038c0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee │ │ │ │ +000038d0: 7046 6972 7374 4f66 4d6f 6e74 6827 293b pFirstOfMonth'); │ │ │ │ +000038e0: 0a6d 7920 246b 6565 704c 6173 744f 664d .my $keepLastOfM │ │ │ │ +000038f0: 6f6e 7468 203d 2024 4368 6563 6b50 6172 onth = $CheckPar │ │ │ │ +00003900: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00003910: 276b 6565 704c 6173 744f 664d 6f6e 7468 'keepLastOfMonth │ │ │ │ +00003920: 2729 3b0a 6d79 2024 6669 7273 7444 6179 ');.my $firstDay │ │ │ │ +00003930: 4f66 5765 656b 203d 2024 4368 6563 6b50 OfWeek = $CheckP │ │ │ │ +00003940: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00003950: 7228 2766 6972 7374 4461 794f 6657 6565 r('firstDayOfWee │ │ │ │ +00003960: 6b27 293b 0a6d 7920 246b 6565 7046 6972 k');.my $keepFir │ │ │ │ +00003970: 7374 4f66 5765 656b 203d 2024 4368 6563 stOfWeek = $Chec │ │ │ │ +00003980: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00003990: 5061 7228 276b 6565 7046 6972 7374 4f66 Par('keepFirstOf │ │ │ │ +000039a0: 5765 656b 2729 3b0a 6d79 2024 6b65 6570 Week');.my $keep │ │ │ │ +000039b0: 4c61 7374 4f66 5765 656b 203d 2024 4368 LastOfWeek = $Ch │ │ │ │ +000039c0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +000039d0: 7468 5061 7228 276b 6565 704c 6173 744f thPar('keepLastO │ │ │ │ +000039e0: 6657 6565 6b27 293b 0a24 6b65 6570 4475 fWeek');.$keepDu │ │ │ │ +000039f0: 706c 6963 6174 6520 3d20 2443 6865 636b plicate = $Check │ │ │ │ +00003a00: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00003a10: 6172 2827 6b65 6570 4475 706c 6963 6174 ar('keepDuplicat │ │ │ │ +00003a20: 6527 293b 0a6d 7920 246b 6565 704d 696e e');.my $keepMin │ │ │ │ +00003a30: 4e75 6d62 6572 203d 2024 4368 6563 6b50 Number = $CheckP │ │ │ │ +00003a40: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00003a50: 7228 276b 6565 704d 696e 4e75 6d62 6572 r('keepMinNumber │ │ │ │ +00003a60: 2729 3b0a 6d79 2024 6b65 6570 4d61 784e ');.my $keepMaxN │ │ │ │ +00003a70: 756d 6265 7220 3d20 2443 6865 636b 5061 umber = $CheckPa │ │ │ │ +00003a80: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00003a90: 2827 6b65 6570 4d61 784e 756d 6265 7227 ('keepMaxNumber' │ │ │ │ +00003aa0: 293b 0a6d 7920 246b 6565 7052 656c 6174 );.my $keepRelat │ │ │ │ +00003ab0: 6976 6520 3d20 2443 6865 636b 5061 722d ive = $CheckPar- │ │ │ │ +00003ac0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00003ad0: 6b65 6570 5265 6c61 7469 7665 2729 3b0a keepRelative');. │ │ │ │ +00003ae0: 6d79 2024 6c6f 6746 696c 6520 3d20 2443 my $logFile = $C │ │ │ │ +00003af0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00003b00: 6974 6850 6172 2827 6c6f 6746 696c 6527 ithPar('logFile' │ │ │ │ +00003b10: 293b 0a6d 7920 2470 6c75 734c 6f67 5374 );.my $plusLogSt │ │ │ │ +00003b20: 646f 7574 203d 2024 4368 6563 6b50 6172 dout = $CheckPar │ │ │ │ +00003b30: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00003b40: 6172 2827 706c 7573 4c6f 6753 7464 6f75 ar('plusLogStdou │ │ │ │ +00003b50: 7427 293b 0a6d 7920 2477 6974 6854 696d t');.my $withTim │ │ │ │ +00003b60: 6520 3d20 6e6f 7420 2443 6865 636b 5061 e = not $CheckPa │ │ │ │ +00003b70: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ │ +00003b80: 5061 7228 2773 7570 7072 6573 7354 696d Par('suppressTim │ │ │ │ +00003b90: 6527 293b 0a24 7769 7468 5469 6d65 203d e');.$withTime = │ │ │ │ +00003ba0: 2024 7769 7468 5469 6d65 203f 2027 7965 $withTime ? 'ye │ │ │ │ +00003bb0: 7327 203a 2027 6e6f 273b 0a6d 7920 246d s' : 'no';.my $m │ │ │ │ +00003bc0: 6178 4669 6c65 6c65 6e20 3d20 2443 6865 axFilelen = $Che │ │ │ │ +00003bd0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00003be0: 6850 6172 2827 6d61 7846 696c 656c 656e hPar('maxFilelen │ │ │ │ +00003bf0: 2729 3b0a 6d79 2024 6e6f 4f66 4f6c 6446 ');.my $noOfOldF │ │ │ │ +00003c00: 696c 6573 203d 2024 4368 6563 6b50 6172 iles = $CheckPar │ │ │ │ +00003c10: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00003c20: 276e 6f4f 664f 6c64 4669 6c65 7327 293b 'noOfOldFiles'); │ │ │ │ +00003c30: 0a6d 7920 2473 6176 654c 6f67 7320 3d20 .my $saveLogs = │ │ │ │ +00003c40: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00003c50: 7457 6974 686f 7574 5061 7228 2773 6176 tWithoutPar('sav │ │ │ │ +00003c60: 654c 6f67 7327 2920 3f20 2779 6573 2720 eLogs') ? 'yes' │ │ │ │ +00003c70: 3a20 276e 6f27 3b0a 6d79 2024 636f 6d70 : 'no';.my $comp │ │ │ │ +00003c80: 7265 7373 5769 7468 203d 2024 4368 6563 ressWith = $Chec │ │ │ │ +00003c90: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00003ca0: 5061 7228 2763 6f6d 7072 6573 7357 6974 Par('compressWit │ │ │ │ +00003cb0: 6827 293b 0a0a 6d79 2024 7072 696e 7441 h');..my $printA │ │ │ │ +00003cc0: 6c6c 203d 2024 4368 6563 6b50 6172 2d3e ll = $CheckPar-> │ │ │ │ +00003cd0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ │ +00003ce0: 2827 7072 696e 7441 6c6c 2729 3b0a 2470 ('printAll');.$p │ │ │ │ +00003cf0: 7269 6e74 203d 2031 2069 6620 2470 7269 rint = 1 if $pri │ │ │ │ +00003d00: 6e74 416c 6c3b 0a6d 7920 2474 6f64 6179 ntAll;.my $today │ │ │ │ +00003d10: 4f70 7420 3d20 2443 6865 636b 5061 722d Opt = $CheckPar- │ │ │ │ +00003d20: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ │ +00003d30: 746f 6461 794f 7074 2729 3b20 2023 2066 todayOpt'); # f │ │ │ │ +00003d40: 6f72 6d61 7420 6c69 6b65 0a20 2020 2020 ormat like. │ │ │ │ +00003d50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003d60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003d70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003d80: 2023 2062 6163 6b75 7020 6469 7220 6e61 # backup dir na │ │ │ │ +00003d90: 6d65 0a0a 6966 2028 2470 7269 6e74 290a me..if ($print). │ │ │ │ +00003da0: 7b0a 2020 2020 2443 6865 636b 5061 722d {. $CheckPar- │ │ │ │ +00003db0: 3e70 7269 6e74 2827 2d73 686f 7748 6964 >print('-showHid │ │ │ │ +00003dc0: 6465 6e27 203d 3e20 2470 7269 6e74 416c den' => $printAl │ │ │ │ +00003dd0: 6c29 3b0a 2020 2020 6578 6974 2030 3b0a l);. exit 0;. │ │ │ │ +00003de0: 7d0a 0a6d 7920 2470 724c 6f67 3b0a 6d79 }..my $prLog;.my │ │ │ │ +00003df0: 2028 406b 696e 6429 203d 2028 2749 3a49 (@kind) = ('I:I │ │ │ │ +00003e00: 4e46 4f27 2c20 2757 3a57 4152 4e49 4e47 NFO', 'W:WARNING │ │ │ │ +00003e10: 272c 2027 453a 4552 524f 5227 2c20 2753 ', 'E:ERROR', 'S │ │ │ │ +00003e20: 3a53 5441 5449 5354 4943 272c 0a09 2020 :STATISTIC',.. │ │ │ │ +00003e30: 2020 2020 2744 3a44 4542 5547 272c 2027 'D:DEBUG', ' │ │ │ │ +00003e40: 563a 5645 5253 494f 4e27 293b 0a0a 6966 V:VERSION');..if │ │ │ │ +00003e50: 2028 246c 6f67 4669 6c65 290a 7b0a 2020 ($logFile).{. │ │ │ │ +00003e60: 2020 2470 724c 6f67 203d 2070 7269 6e74 $prLog = print │ │ │ │ +00003e70: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind' │ │ │ │ +00003e80: 203d 3e20 5c40 6b69 6e64 2c0a 0909 0920 => \@kind,.... │ │ │ │ +00003e90: 2020 272d 6669 6c65 2720 3d3e 2024 6c6f '-file' => $lo │ │ │ │ +00003ea0: 6746 696c 652c 0a09 0909 2020 272d 7769 gFile,.... '-wi │ │ │ │ +00003eb0: 7468 5469 6d65 2720 3d3e 2024 7769 7468 thTime' => $with │ │ │ │ +00003ec0: 5469 6d65 2c0a 0909 0920 2027 2d6d 6178 Time,.... '-max │ │ │ │ +00003ed0: 4669 6c65 6c65 6e27 203d 3e20 246d 6178 Filelen' => $max │ │ │ │ +00003ee0: 4669 6c65 6c65 6e2c 0a09 0909 2020 272d Filelen,.... '- │ │ │ │ +00003ef0: 6e6f 4f66 4f6c 6446 696c 6573 2720 3d3e noOfOldFiles' => │ │ │ │ +00003f00: 2024 6e6f 4f66 4f6c 6446 696c 6573 293b $noOfOldFiles); │ │ │ │ +00003f10: 0a7d 0a65 6c73 650a 7b0a 2020 2020 2470 .}.else.{. $p │ │ │ │ +00003f20: 724c 6f67 203d 2070 7269 6e74 4c6f 672d rLog = printLog- │ │ │ │ +00003f30: 3e6e 6577 2827 2d6b 696e 6427 203d 3e20 >new('-kind' => │ │ │ │ +00003f40: 5c40 6b69 6e64 293b 0a7d 0a0a 2470 724c \@kind);.}..$prL │ │ │ │ +00003f50: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00003f60: 2720 3d3e 2027 5627 2c0a 0920 2020 2020 ' => 'V',.. │ │ │ │ +00003f70: 2027 2d73 7472 2720 3d3e 205b 2224 5645 '-str' => ["$VE │ │ │ │ +00003f80: 5253 494f 4e70 4e61 6d65 2c20 246d 6169 RSIONpName, $mai │ │ │ │ +00003f90: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ │ +00003fa0: 5253 494f 4e2c 2022 202e 0a09 0909 2022 RSION, " ..... " │ │ │ │ +00003fb0: 6275 696c 6420 2456 4552 5349 4f4e 7376 build $VERSIONsv │ │ │ │ +00003fc0: 6e49 4422 5d29 3b0a 0a24 7072 4c6f 672d nID"]);..$prLog- │ │ │ │ +00003fd0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00003fe0: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '- │ │ │ │ +00003ff0: 7374 7227 203d 3e20 5b22 6261 636b 7570 str' => ["backup │ │ │ │ +00004000: 4469 7220 6469 7265 6374 6f72 7920 3c24 Dir directory <$ │ │ │ │ +00004010: 6261 636b 7570 4469 723e 2064 6f65 7320 backupDir> does │ │ │ │ +00004020: 6e6f 7420 6578 6973 745c 6e24 4865 6c70 not exist\n$Help │ │ │ │ +00004030: 225d 2c0a 0920 2020 2020 2027 2d65 7869 "],.. '-exi │ │ │ │ +00004040: 7427 203d 3e20 3129 0a20 2020 2075 6e6c t' => 1). unl │ │ │ │ +00004050: 6573 7320 2d65 2024 6261 636b 7570 4469 ess -e $backupDi │ │ │ │ +00004060: 723b 0a0a 6d79 2024 7461 7267 6574 4469 r;..my $targetDi │ │ │ │ +00004070: 7220 3d20 2224 6261 636b 7570 4469 722f r = "$backupDir/ │ │ │ │ +00004080: 2473 6572 6965 7322 3b0a 2470 724c 6f67 $series";.$prLog │ │ │ │ +00004090: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000040a0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. ' │ │ │ │ +000040b0: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => ["canno │ │ │ │ +000040c0: 7420 7772 6974 6520 746f 2074 6172 6765 t write to targe │ │ │ │ +000040d0: 7420 6469 7265 6374 6f72 7920 3c24 7461 t directory <$ta │ │ │ │ +000040e0: 7267 6574 4469 723e 225d 2c0a 0920 2020 rgetDir>"],.. │ │ │ │ +000040f0: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ │ +00004100: 0a20 2020 2075 6e6c 6573 7320 282d 7720 . unless (-w │ │ │ │ +00004110: 2474 6172 6765 7444 6972 293b 0a24 7461 $targetDir);.$ta │ │ │ │ +00004120: 7267 6574 4469 7220 3d20 3a3a 6162 736f rgetDir = ::abso │ │ │ │ +00004130: 6c75 7465 5061 7468 2824 7461 7267 6574 lutePath($target │ │ │ │ +00004140: 4469 7229 3b0a 0a0a 6d79 2024 616c 6c4c Dir);...my $allL │ │ │ │ +00004150: 696e 6b73 203d 206c 6174 654c 696e 6b73 inks = lateLinks │ │ │ │ +00004160: 2d3e 6e65 7728 272d 6469 7273 2720 3d3e ->new('-dirs' => │ │ │ │ +00004170: 205b 2474 6172 6765 7444 6972 5d2c 0a09 [$targetDir],.. │ │ │ │ +00004180: 0909 2020 2020 2020 272d 6b69 6e64 2720 .. '-kind' │ │ │ │ +00004190: 3d3e 2027 7265 6375 7273 6976 6553 6561 => 'recursiveSea │ │ │ │ +000041a0: 7263 6827 2c0a 0909 0920 2020 2020 2027 rch',.... ' │ │ │ │ +000041b0: 2d76 6572 626f 7365 2720 3d3e 2030 2c0a -verbose' => 0,. │ │ │ │ +000041c0: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog │ │ │ │ +000041d0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a0a ' => $prLog);... │ │ │ │ +000041e0: 230a 2320 6c6f 636b 2066 696c 6520 fc62 #.# lock file .b │ │ │ │ +000041f0: 6572 7072 fc66 656e 0a23 0a69 6620 2824 erpr.fen.#.if ($ │ │ │ │ +00004200: 6c6f 636b 4669 6c65 290a 7b0a 2020 2020 lockFile).{. │ │ │ │ +00004210: 6966 2028 2d66 2024 6c6f 636b 4669 6c65 if (-f $lockFile │ │ │ │ +00004220: 290a 2020 2020 7b0a 096f 7065 6e28 4649 ). {..open(FI │ │ │ │ +00004230: 4c45 2c20 223c 2024 6c6f 636b 4669 6c65 LE, "< $lockFile │ │ │ │ +00004240: 2229 206f 720a 0920 2020 2024 7072 4c6f ") or.. $prLo │ │ │ │ +00004250: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00004260: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +00004270: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ │ +00004280: 2072 6561 6420 6c6f 636b 2066 696c 6520 read lock file │ │ │ │ +00004290: 3c24 6c6f 636b 4669 6c65 3e22 5d2c 0a09 <$lockFile>"],.. │ │ │ │ +000042a0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ │ +000042b0: 293b 0a09 6d79 2024 7069 6420 3d20 3c46 );..my $pid = ;..chop $pid │ │ │ │ +000042d0: 3b0a 0963 6c6f 7365 2846 494c 4529 3b0a ;..close(FILE);. │ │ │ │ +000042e0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +000042f0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00004300: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00004310: 205b 2273 7472 616e 6765 2066 6f72 6d61 ["strange forma │ │ │ │ +00004320: 7420 696e 206c 6f63 6b20 6669 6c65 203c t in lock file < │ │ │ │ +00004330: 246c 6f63 6b46 696c 653e 2c20 2220 2e0a $lockFile>, " .. │ │ │ │ +00004340: 0909 0909 2022 6c69 6e65 2069 7320 3c24 .... "line is <$ │ │ │ │ +00004350: 7069 643e 225d 2c0a 0909 2020 2020 2020 pid>"],... │ │ │ │ +00004360: 272d 6578 6974 2720 3d3e 2031 290a 0920 '-exit' => 1).. │ │ │ │ +00004370: 2020 2075 6e6c 6573 7320 2824 7069 6420 unless ($pid │ │ │ │ +00004380: 3d7e 202f 5c41 5c64 2b5c 5a2f 6f29 3b0a =~ /\A\d+\Z/o);. │ │ │ │ +00004390: 0969 6620 286b 696c 6c28 302c 2024 7069 .if (kill(0, $pi │ │ │ │ +000043a0: 6429 203d 3d20 3129 2020 2023 2061 6c74 d) == 1) # alt │ │ │ │ +000043b0: 6520 496e 7374 616e 7a20 6ce4 7566 7420 e Instanz l.uft │ │ │ │ +000043c0: 6e6f 6368 0a09 7b0a 0920 2020 2024 7072 noch..{.. $pr │ │ │ │ +000043d0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000043e0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ │ +000043f0: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => ["cann │ │ │ │ +00004400: 6f74 2073 7461 7274 2c20 6f6c 6420 696e ot start, old in │ │ │ │ +00004410: 7374 616e 6365 2077 6974 6820 7069 6420 stance with pid │ │ │ │ +00004420: 2220 2e0a 0909 0909 2020 2020 2022 3c24 " ...... "<$ │ │ │ │ +00004430: 7069 643e 2069 7320 616c 7265 6164 7920 pid> is already │ │ │ │ +00004440: 7275 6e6e 696e 6722 5d2c 0a09 0909 2020 running"],.... │ │ │ │ +00004450: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);.. │ │ │ │ +00004460: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. │ │ │ │ +00004470: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00004480: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00004490: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => ["r │ │ │ │ +000044a0: 656d 6f76 696e 6720 6f6c 6420 6c6f 636b emoving old lock │ │ │ │ +000044b0: 2066 696c 6520 6f66 2070 726f 6365 7373 file of process │ │ │ │ +000044c0: 203c 2470 6964 3e22 5d0a 0909 0920 2029 <$pid>"].... ) │ │ │ │ +000044d0: 3b0a 097d 0a20 2020 207d 0a0a 2020 2020 ;..}. }.. │ │ │ │ +000044e0: 6f70 656e 2846 494c 452c 2022 3e20 246c open(FILE, "> $l │ │ │ │ +000044f0: 6f63 6b46 696c 6522 2920 6f72 0a09 2470 ockFile") or..$p │ │ │ │ +00004500: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00004510: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ │ +00004520: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00004530: 6361 6e6e 6f74 2063 7265 6174 6520 6c6f cannot create lo │ │ │ │ +00004540: 636b 2066 696c 6520 3c24 6c6f 636b 4669 ck file <$lockFi │ │ │ │ +00004550: 6c65 3e22 5d2c 0a09 0920 2020 2020 2027 le>"],... ' │ │ │ │ +00004560: 2d65 7869 7427 203d 3e20 3129 3b0a 2020 -exit' => 1);. │ │ │ │ +00004570: 2020 7072 696e 7420 4649 4c45 2022 2424 print FILE "$$ │ │ │ │ +00004580: 5c6e 223b 0a20 2020 2063 6c6f 7365 2846 \n";. close(F │ │ │ │ +00004590: 494c 4529 3b0a 7d0a 0a6d 7920 2473 7461 ILE);.}..my $sta │ │ │ │ +000045a0: 7444 656c 4f6c 6442 6163 6b75 7044 6972 tDelOldBackupDir │ │ │ │ +000045b0: 7320 3d0a 2020 2020 7374 6174 6973 7469 s =. statisti │ │ │ │ +000045c0: 6344 656c 6574 654f 6c64 4261 636b 7570 cDeleteOldBackup │ │ │ │ +000045d0: 4469 7273 2d3e 6e65 7728 272d 7072 4c6f Dirs->new('-prLo │ │ │ │ +000045e0: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m │ │ │ │ +000045f0: 7920 2474 6f64 6179 203d 2064 6174 6554 y $today = dateT │ │ │ │ +00004600: 6f6f 6c73 2d3e 6e65 7728 293b 0a69 6620 ools->new();.if │ │ │ │ +00004610: 2824 746f 6461 794f 7074 290a 7b0a 2020 ($todayOpt).{. │ │ │ │ +00004620: 2020 6966 2028 2474 6f64 6179 4f70 7420 if ($todayOpt │ │ │ │ +00004630: 3d7e 202f 5c41 285c 647b 347d 295c 2e28 =~ /\A(\d{4})\.( │ │ │ │ +00004640: 5c64 7b32 7d29 5c2e 285c 647b 327d 295f \d{2})\.(\d{2})_ │ │ │ │ +00004650: 285c 647b 327d 292e 285c 647b 327d 292e (\d{2}).(\d{2}). │ │ │ │ +00004660: 285c 647b 327d 295c 5a2f 290a 2020 2020 (\d{2})\Z/). │ │ │ │ +00004670: 7b0a 0924 746f 6461 7920 3d20 6461 7465 {..$today = date │ │ │ │ +00004680: 546f 6f6c 732d 3e6e 6577 2827 2d79 6561 Tools->new('-yea │ │ │ │ +00004690: 7227 203d 3e20 2431 2c0a 0909 0909 272d r' => $1,.....'- │ │ │ │ +000046a0: 6d6f 6e74 6827 203d 3e20 2432 2c0a 0909 month' => $2,... │ │ │ │ +000046b0: 0909 272d 6461 7927 203d 3e20 2433 2c0a ..'-day' => $3,. │ │ │ │ +000046c0: 0909 0909 272d 686f 7572 2720 3d3e 2024 ....'-hour' => $ │ │ │ │ +000046d0: 342c 0a09 0909 0927 2d6d 696e 2720 3d3e 4,.....'-min' => │ │ │ │ +000046e0: 2024 352c 0a09 0909 0927 2d73 6563 2720 $5,.....'-sec' │ │ │ │ +000046f0: 3d3e 2024 3629 3b0a 0924 7072 4c6f 672d => $6);..$prLog- │ │ │ │ +00004700: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00004710: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ │ +00004720: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ │ +00004730: 205b 2224 746f 6461 794f 7074 2028 6f70 ["$todayOpt (op │ │ │ │ +00004740: 7469 6f6e 2074 6f64 6179 2920 6973 206e tion today) is n │ │ │ │ +00004750: 6f74 2061 2076 616c 6964 2064 6174 6522 ot a valid date" │ │ │ │ +00004760: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi │ │ │ │ +00004770: 7427 203d 3e20 3129 0a09 2020 2020 756e t' => 1).. un │ │ │ │ +00004780: 6c65 7373 2024 746f 6461 792d 3e69 7356 less $today->isV │ │ │ │ +00004790: 616c 6964 2829 3b0a 0924 7072 4c6f 672d alid();..$prLog- │ │ │ │ +000047a0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +000047b0: 3e20 2757 272c 0a09 0920 2020 2020 2027 > 'W',... ' │ │ │ │ +000047c0: 2d73 7472 2720 3d3e 205b 2273 6574 7469 -str' => ["setti │ │ │ │ +000047d0: 6e67 2074 6f64 6179 2074 6f20 2220 2e0a ng today to " .. │ │ │ │ +000047e0: 0909 0909 2024 746f 6461 792d 3e67 6574 .... $today->get │ │ │ │ +000047f0: 4461 7465 5469 6d65 2829 5d29 3b0a 2020 DateTime()]);. │ │ │ │ +00004800: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +00004810: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin │ │ │ │ +00004820: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00004830: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ │ +00004840: 203d 3e20 5b22 666f 726d 6174 2065 7272 => ["format err │ │ │ │ +00004850: 6f72 2061 7420 6f70 7469 6f6e 2074 6f64 or at option tod │ │ │ │ +00004860: 6179 2c20 6d75 7374 2062 6522 2c0a 0909 ay, must be",... │ │ │ │ +00004870: 0909 2022 2020 5959 5959 2e4d 4d2e 4444 .. " YYYY.MM.DD │ │ │ │ +00004880: 5f48 482e 4d4d 2e53 5322 5d2c 0a09 0920 _HH.MM.SS"],... │ │ │ │ +00004890: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +000048a0: 3129 3b0a 2020 2020 7d0a 7d0a 0a6d 7920 1);. }.}..my │ │ │ │ +000048b0: 2464 656c 4f6c 6420 3d0a 2020 2020 6465 $delOld =. de │ │ │ │ +000048c0: 6c65 7465 4f6c 6442 6163 6b75 7044 6972 leteOldBackupDir │ │ │ │ +000048d0: 732d 3e6e 6577 2827 2d74 6172 6765 7444 s->new('-targetD │ │ │ │ +000048e0: 6972 2720 3d3e 2024 7461 7267 6574 4469 ir' => $targetDi │ │ │ │ +000048f0: 722c 0a09 0909 2020 2020 2027 2d64 6f4e r,.... '-doN │ │ │ │ +00004900: 6f74 4465 6c65 7465 2720 3d3e 2024 646f otDelete' => $do │ │ │ │ +00004910: 4e6f 7444 656c 6574 652c 0a09 0909 2020 NotDelete,.... │ │ │ │ +00004920: 2020 2027 2d64 656c 6574 654e 6f74 4669 '-deleteNotFi │ │ │ │ +00004930: 6e69 7368 6564 4469 7273 2720 3d3e 2024 nishedDirs' => $ │ │ │ │ +00004940: 6465 6c65 7465 4e6f 7446 696e 6973 6865 deleteNotFinishe │ │ │ │ +00004950: 6444 6972 732c 0a09 0909 2020 2020 2027 dDirs,.... ' │ │ │ │ +00004960: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' = │ │ │ │ +00004970: 3e20 2463 6865 636b 5375 6d46 696c 652c > $checkSumFile, │ │ │ │ +00004980: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog │ │ │ │ +00004990: 2720 3d3e 2024 7072 4c6f 672c 0a09 0909 ' => $prLog,.... │ │ │ │ +000049a0: 2020 2020 2027 2d74 6f64 6179 2720 3d3e '-today' => │ │ │ │ +000049b0: 2024 746f 6461 792c 0a09 0909 2020 2020 $today,.... │ │ │ │ +000049c0: 2027 2d6b 6565 7046 6972 7374 4f66 5965 '-keepFirstOfYe │ │ │ │ +000049d0: 6172 2720 3d3e 2024 6b65 6570 4669 7273 ar' => $keepFirs │ │ │ │ +000049e0: 744f 6659 6561 722c 0a09 0909 2020 2020 tOfYear,.... │ │ │ │ +000049f0: 2027 2d6b 6565 704c 6173 744f 6659 6561 '-keepLastOfYea │ │ │ │ +00004a00: 7227 203d 3e20 246b 6565 704c 6173 744f r' => $keepLastO │ │ │ │ +00004a10: 6659 6561 722c 0a09 0909 2020 2020 2027 fYear,.... ' │ │ │ │ +00004a20: 2d6b 6565 7046 6972 7374 4f66 4d6f 6e74 -keepFirstOfMont │ │ │ │ +00004a30: 6827 203d 3e20 246b 6565 7046 6972 7374 h' => $keepFirst │ │ │ │ +00004a40: 4f66 4d6f 6e74 682c 0a09 0909 2020 2020 OfMonth,.... │ │ │ │ +00004a50: 2027 2d6b 6565 704c 6173 744f 664d 6f6e '-keepLastOfMon │ │ │ │ +00004a60: 7468 2720 3d3e 2024 6b65 6570 4c61 7374 th' => $keepLast │ │ │ │ +00004a70: 4f66 4d6f 6e74 682c 0a09 0909 2020 2020 OfMonth,.... │ │ │ │ +00004a80: 2027 2d66 6972 7374 4461 794f 6657 6565 '-firstDayOfWee │ │ │ │ +00004a90: 6b27 203d 3e20 2466 6972 7374 4461 794f k' => $firstDayO │ │ │ │ +00004aa0: 6657 6565 6b2c 0a09 0909 2020 2020 2027 fWeek,.... ' │ │ │ │ +00004ab0: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek │ │ │ │ +00004ac0: 2720 3d3e 2024 6b65 6570 4669 7273 744f ' => $keepFirstO │ │ │ │ +00004ad0: 6657 6565 6b2c 0a09 0909 2020 2020 2027 fWeek,.... ' │ │ │ │ +00004ae0: 2d6b 6565 704c 6173 744f 6657 6565 6b27 -keepLastOfWeek' │ │ │ │ +00004af0: 203d 3e20 246b 6565 704c 6173 744f 6657 => $keepLastOfW │ │ │ │ +00004b00: 6565 6b2c 0a09 0909 2020 2020 2027 2d6b eek,.... '-k │ │ │ │ +00004b10: 6565 7041 6c6c 2720 3d3e 2024 6b65 6570 eepAll' => $keep │ │ │ │ +00004b20: 416c 6c2c 0a09 0909 2020 2020 2027 2d6b All,.... '-k │ │ │ │ +00004b30: 6565 7052 656c 6174 6976 6527 203d 3e20 eepRelative' => │ │ │ │ +00004b40: 246b 6565 7052 656c 6174 6976 652c 0a09 $keepRelative,.. │ │ │ │ +00004b50: 0909 2020 2020 2027 2d6b 6565 7057 6565 .. '-keepWee │ │ │ │ +00004b60: 6b64 6179 2720 3d3e 2024 6b65 6570 5765 kday' => $keepWe │ │ │ │ +00004b70: 656b 6461 792c 0a09 0909 2020 2020 2027 ekday,.... ' │ │ │ │ +00004b80: 2d6b 6565 7044 7570 6c69 6361 7465 2720 -keepDuplicate' │ │ │ │ +00004b90: 3d3e 2024 6b65 6570 4475 706c 6963 6174 => $keepDuplicat │ │ │ │ +00004ba0: 652c 0a09 0909 2020 2020 2027 2d6b 6565 e,.... '-kee │ │ │ │ +00004bb0: 704d 696e 4e75 6d62 6572 2720 3d3e 2024 pMinNumber' => $ │ │ │ │ +00004bc0: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,.. │ │ │ │ +00004bd0: 0909 2020 2020 2027 2d6b 6565 704d 6178 .. '-keepMax │ │ │ │ +00004be0: 4e75 6d62 6572 2720 3d3e 2024 6b65 6570 Number' => $keep │ │ │ │ +00004bf0: 4d61 784e 756d 6265 722c 0a09 0909 2020 MaxNumber,.... │ │ │ │ +00004c00: 2020 2027 2d73 7461 7444 656c 4f6c 6442 '-statDelOldB │ │ │ │ +00004c10: 6163 6b75 7044 6972 7327 203d 3e20 2473 ackupDirs' => $s │ │ │ │ +00004c20: 7461 7444 656c 4f6c 6442 6163 6b75 7044 tatDelOldBackupD │ │ │ │ +00004c30: 6972 732c 0a09 0909 2020 2020 2027 2d6c irs,.... '-l │ │ │ │ +00004c40: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' = │ │ │ │ +00004c50: 3e20 756e 6465 662c 0a09 0909 2020 2020 > undef,.... │ │ │ │ +00004c60: 2027 2d61 6c6c 4c69 6e6b 7327 203d 3e20 '-allLinks' => │ │ │ │ +00004c70: 2461 6c6c 4c69 6e6b 730a 0909 0920 2020 $allLinks.... │ │ │ │ +00004c80: 2020 293b 0a0a 2464 656c 4f6c 642d 3e63 );..$delOld->c │ │ │ │ +00004c90: 6865 636b 4261 636b 7570 7328 293b 0a0a heckBackups();.. │ │ │ │ +00004ca0: 2464 656c 4f6c 642d 3e64 656c 6574 6542 $delOld->deleteB │ │ │ │ +00004cb0: 6163 6b75 7073 2829 3b0a 2473 7461 7444 ackups();.$statD │ │ │ │ +00004cc0: 656c 4f6c 6442 6163 6b75 7044 6972 732d elOldBackupDirs- │ │ │ │ +00004cd0: 3e70 7269 6e74 2829 3b0a 0a23 2053 7461 >print();..# Sta │ │ │ │ +00004ce0: 7469 7374 696b 20fc 6265 7220 4461 7565 tistik .ber Daue │ │ │ │ +00004cf0: 7220 756e 6420 4350 552d 5665 7262 7261 r und CPU-Verbra │ │ │ │ +00004d00: 7563 680a 0a6d 7920 2840 6c29 3b0a 6d79 uch..my (@l);.my │ │ │ │ +00004d10: 2028 2475 7365 722c 2473 7973 7465 6d2c ($user,$system, │ │ │ │ +00004d20: 2463 7573 6572 2c24 6373 7973 7465 6d29 $cuser,$csystem) │ │ │ │ +00004d30: 203d 2074 696d 6573 3b0a 6d79 2028 2474 = times;.my ($t │ │ │ │ +00004d40: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = "------- │ │ │ │ +00004d50: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+---- │ │ │ │ +00004d60: 2d2d 2d2d 2d2d 223b 0a70 7573 6820 406c ------";.push @l │ │ │ │ +00004d70: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf("%-7s| │ │ │ │ +00004d80: 2531 3073 7c25 3130 7322 2c20 2220 5b73 %10s|%10s", " [s │ │ │ │ +00004d90: 6563 5d22 2c20 2275 7365 7222 2c20 2273 ec]", "user", "s │ │ │ │ +00004da0: 7973 7465 6d22 293b 0a70 7573 6820 406c ystem");.push @l │ │ │ │ +00004db0: 2c20 2224 7472 656e 6e22 3b0a 7075 7368 , "$trenn";.push │ │ │ │ +00004dc0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf("%- │ │ │ │ +00004dd0: 3773 7c25 3130 2e32 667c 2531 302e 3266 7s|%10.2f|%10.2f │ │ │ │ +00004de0: 222c 2022 7072 6f63 6573 7322 2c20 2475 ", "process", $u │ │ │ │ +00004df0: 7365 722c 2024 7379 7374 656d 293b 0a70 ser, $system);.p │ │ │ │ +00004e00: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf( │ │ │ │ +00004e10: 2225 2d37 737c 2531 302e 3266 7c25 3130 "%-7s|%10.2f|%10 │ │ │ │ +00004e20: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f", "childs", │ │ │ │ +00004e30: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem │ │ │ │ +00004e40: 293b 0a70 7573 6820 406c 2c20 2224 7472 );.push @l, "$tr │ │ │ │ +00004e50: 656e 6e22 3b0a 6d79 2028 2475 2c20 2473 enn";.my ($u, $s │ │ │ │ +00004e60: 2920 3d20 2824 6375 7365 7220 2b20 2475 ) = ($cuser + $u │ │ │ │ +00004e70: 7365 722c 2024 6373 7973 7465 6d20 2b20 ser, $csystem + │ │ │ │ +00004e80: 2473 7973 7465 6d29 3b0a 7075 7368 2040 $system);.push @ │ │ │ │ +00004e90: 6c2c 2073 7072 696e 7466 2822 252d 3773 l, sprintf("%-7s │ │ │ │ +00004ea0: 7c25 3130 2e32 667c 2531 302e 3266 203d |%10.2f|%10.2f = │ │ │ │ +00004eb0: 3e20 252e 3266 222c 2022 7375 6d22 2c20 > %.2f", "sum", │ │ │ │ +00004ec0: 2475 2c20 2473 2c20 2475 202b 2024 7329 $u, $s, $u + $s) │ │ │ │ +00004ed0: 3b0a 0a6d 7920 2840 7374 6172 7444 6174 ;..my (@startDat │ │ │ │ +00004ee0: 6529 203d 2028 293b 0a69 6620 2824 7374 e) = ();.if ($st │ │ │ │ +00004ef0: 6172 7444 6174 6529 0a7b 0a20 2020 2070 artDate).{. p │ │ │ │ +00004f00: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, │ │ │ │ +00004f10: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec │ │ │ │ +00004f20: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration │ │ │ │ +00004f30: 3d20 2720 2e0a 0924 7374 6172 7444 6174 = ' ...$startDat │ │ │ │ +00004f40: 652d 3e64 656c 7461 496e 5374 7228 272d e->deltaInStr('- │ │ │ │ +00004f50: 7365 636f 6e64 4461 7465 2720 3d3e 2024 secondDate' => $ │ │ │ │ +00004f60: 7374 6172 7444 6174 6529 3b0a 7d0a 0a6d startDate);.}..m │ │ │ │ +00004f70: 7920 2464 456e 6420 3d20 6461 7465 546f y $dEnd = dateTo │ │ │ │ +00004f80: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $ │ │ │ │ +00004f90: 6475 7261 7469 6f6e 203d 2024 7374 6172 duration = $star │ │ │ │ +00004fa0: 7444 6174 652d 3e64 656c 7461 496e 5365 tDate->deltaInSe │ │ │ │ +00004fb0: 6373 2827 2d73 6563 6f6e 6444 6174 6527 cs('-secondDate' │ │ │ │ +00004fc0: 203d 3e20 2464 456e 6429 3b0a 2464 7572 => $dEnd);.$dur │ │ │ │ +00004fd0: 6174 696f 6e20 3d20 3120 6966 2028 2464 ation = 1 if ($d │ │ │ │ +00004fe0: 7572 6174 696f 6e20 3d3d 2030 293b 2020 uration == 0); │ │ │ │ +00004ff0: 2023 204d 696e 696d 616c 6572 2057 6572 # Minimaler Wer │ │ │ │ +00005000: 740a 0a24 7072 4c6f 672d 3e70 7269 6e74 t..$prLog->print │ │ │ │ +00005010: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S', │ │ │ │ +00005020: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00005030: 3e0a 0920 2020 2020 205b 2720 2020 2020 >.. [' │ │ │ │ +00005040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00005050: 2064 7572 6174 696f 6e20 3d20 2720 2e0a duration = ' .. │ │ │ │ +00005060: 0920 2020 2020 2020 6461 7465 546f 6f6c . dateTool │ │ │ │ +00005070: 733a 3a76 616c 546f 5374 7228 272d 7365 s::valToStr('-se │ │ │ │ +00005080: 6327 203d 3e20 2464 7572 6174 696f 6e29 c' => $duration) │ │ │ │ +00005090: 2c0a 0920 2020 2020 2020 406c 0a09 2020 ,.. @l.. │ │ │ │ +000050a0: 2020 2020 205d 293b 0a0a 2470 724c 6f67 ]);..$prLog │ │ │ │ +000050b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000050c0: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. ' │ │ │ │ +000050d0: 2d73 7472 2720 3d3e 205b 2272 656d 6f76 -str' => ["remov │ │ │ │ +000050e0: 696e 6720 6c6f 636b 2066 696c 6520 3c24 ing lock file <$ │ │ │ │ +000050f0: 6c6f 636b 4669 6c65 3e22 5d29 3b0a 756e lockFile>"]);.un │ │ │ │ +00005100: 6c69 6e6b 2024 6c6f 636b 4669 6c65 3b0a link $lockFile;. │ │ │ │ +00005110: 0a65 7869 7420 303b 0a .exit 0;. │ │ │ ├── ./usr/bin/storeBackupMount │ │ │ │ @@ -1,4 +1,899 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 704d 6f75 6e74 0a pMount. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 342d 3230 3132 290a 2320 2020 2020 2020 4-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ │ +00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ │ +00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ │ +00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ │ +000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ │ +000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ │ +000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ │ +000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ │ +000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ │ +000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ │ +00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ │ +00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ │ +00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ │ +00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ │ +00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ │ +00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ │ +00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ │ +00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ │ +00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ │ +00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ │ +000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ │ +000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ │ +000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ │ +000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ │ +000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ │ +000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ │ +00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ │ +00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ │ +00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ │ +00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ │ +00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ │ +00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ │ +00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ │ +00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ │ +00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ │ +00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ │ +000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ │ +000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ │ +000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m │ │ │ │ +00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I │ │ │ │ +00000310: 643a 2073 746f 7265 4261 636b 7570 4d6f d: storeBackupMo │ │ │ │ +00000320: 756e 742e 706c 2033 3634 2032 3031 322d unt.pl 364 2012- │ │ │ │ +00000330: 3032 2d31 3220 3134 3a31 343a 3434 5a20 02-12 14:14:44Z │ │ │ │ +00000340: 686a 6320 2420 273b 0a6f 7572 2040 5645 hjc $ ';.our @VE │ │ │ │ +00000350: 5253 494f 4e3b 0a70 7573 6820 4056 4552 RSION;.push @VER │ │ │ │ +00000360: 5349 4f4e 2c20 2456 4552 5349 4f4e 3b0a SION, $VERSION;. │ │ │ │ +00000370: 6d79 2028 2456 4552 5349 4f4e 704e 616d my ($VERSIONpNam │ │ │ │ +00000380: 652c 2024 5645 5253 494f 4e73 766e 4944 e, $VERSIONsvnID │ │ │ │ +00000390: 2920 3d20 2456 4552 5349 4f4e 203d 7e20 ) = $VERSION =~ │ │ │ │ +000003a0: 2f49 643a 5c73 2b28 5c53 2b29 5c73 2b28 /Id:\s+(\S+)\s+( │ │ │ │ +000003b0: 5c64 2b29 2f3b 0a24 6d61 696e 3a3a 5354 \d+)/;.$main::ST │ │ │ │ +000003c0: 4f52 4542 4143 4b55 5056 4552 5349 4f4e OREBACKUPVERSION │ │ │ │ +000003d0: 203d 2075 6e64 6566 3b0a 0a75 7365 2073 = undef;..use s │ │ │ │ +000003e0: 7472 6963 743b 0a75 7365 204e 6574 3a3a trict;.use Net:: │ │ │ │ +000003f0: 5069 6e67 3b0a 7573 6520 504f 5349 583b Ping;.use POSIX; │ │ │ │ +00000400: 0a0a 0a73 7562 206c 6962 5061 7468 0a7b ...sub libPath.{ │ │ │ │ +00000410: 0a20 2020 206d 7920 2466 696c 6520 3d20 . my $file = │ │ │ │ +00000420: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $ │ │ │ │ +00000430: 6469 723b 0a0a 2020 2020 2320 4661 6c6c dir;.. # Fall │ │ │ │ +00000440: 7320 4461 7465 6920 7365 6c62 7374 2065 s Datei selbst e │ │ │ │ +00000450: 696e 2073 796d 6c69 6e6b 2069 7374 2c20 in symlink ist, │ │ │ │ +00000460: 736f 6c61 6e67 6520 666f 6c67 656e 2c20 solange folgen, │ │ │ │ +00000470: 6269 7320 6175 6667 656c f673 740a 2020 bis aufgel.st. │ │ │ │ +00000480: 2020 6966 2028 2d66 2024 6669 6c65 290a if (-f $file). │ │ │ │ +00000490: 2020 2020 7b0a 0977 6869 6c65 2028 2d6c {..while (-l │ │ │ │ +000004a0: 2024 6669 6c65 290a 097b 0a09 2020 2020 $file)..{.. │ │ │ │ +000004b0: 6d79 2024 6c69 6e6b 203d 2072 6561 646c my $link = readl │ │ │ │ +000004c0: 696e 6b28 2466 696c 6529 3b0a 0a09 2020 ink($file);... │ │ │ │ +000004d0: 2020 6966 2028 7375 6273 7472 2824 6c69 if (substr($li │ │ │ │ +000004e0: 6e6b 2c20 302c 2031 2920 6e65 2022 2f22 nk, 0, 1) ne "/" │ │ │ │ +000004f0: 290a 0920 2020 207b 0a09 0924 6669 6c65 ).. {...$file │ │ │ │ +00000500: 203d 7e20 732f 5b5e 5c2f 5d2b 242f 246c =~ s/[^\/]+$/$l │ │ │ │ +00000510: 696e 6b2f 3b0a 0920 2020 207d 0a09 2020 ink/;.. }.. │ │ │ │ +00000520: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {... │ │ │ │ +00000530: 2466 696c 6520 3d20 246c 696e 6b3b 0a09 $file = $link;.. │ │ │ │ +00000540: 2020 2020 7d0a 097d 0a0a 0928 2464 6972 }..}...($dir │ │ │ │ +00000550: 2c20 2466 696c 6529 203d 2026 7370 6c69 , $file) = &spli │ │ │ │ +00000560: 7446 696c 6544 6972 2824 6669 6c65 293b tFileDir($file); │ │ │ │ +00000570: 0a09 2466 696c 6520 3d20 222f 2466 696c ..$file = "/$fil │ │ │ │ +00000580: 6522 3b0a 2020 2020 7d0a 2020 2020 656c e";. }. el │ │ │ │ +00000590: 7365 0a20 2020 207b 0a09 7072 696e 7420 se. {..print │ │ │ │ +000005a0: 5354 4445 5252 2022 3c24 6669 6c65 3e20 STDERR "<$file> │ │ │ │ +000005b0: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, │ │ │ │ +000005c0: 6578 6974 696e 6721 5c6e 223b 0a20 2020 exiting!\n";. │ │ │ │ +000005d0: 2020 2020 2050 4f53 4958 3a3a 5f65 7869 POSIX::_exi │ │ │ │ +000005e0: 7420 323b 0a20 2020 207d 0a0a 2020 2020 t 2;. }.. │ │ │ │ +000005f0: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= "/../lib │ │ │ │ +00000600: 223b 2020 2020 2020 2020 2020 2023 2050 "; # P │ │ │ │ +00000610: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli │ │ │ │ +00000620: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $ │ │ │ │ +00000630: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p │ │ │ │ +00000640: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $ │ │ │ │ +00000650: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if ( │ │ │ │ +00000660: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). │ │ │ │ +00000670: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = │ │ │ │ +00000680: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho │ │ │ │ +00000690: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi │ │ │ │ +000006a0: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret │ │ │ │ +000006b0: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD │ │ │ │ +000006c0: 6972 2822 2461 6273 4469 7224 6669 6c65 ir("$absDir$file │ │ │ │ +000006d0: 2229 293b 0a20 2020 207d 0a20 2020 2065 "));. }. e │ │ │ │ +000006e0: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print │ │ │ │ +000006f0: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR "<$dir> │ │ │ │ +00000700: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, │ │ │ │ +00000710: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\n";. │ │ │ │ +00000720: 2020 2020 504f 5349 583a 3a5f 6578 6974 POSIX::_exit │ │ │ │ +00000730: 2032 3b0a 2020 2020 7d0a 7d0a 7375 6220 2;. }.}.sub │ │ │ │ +00000740: 7370 6c69 7446 696c 6544 6972 0a7b 0a20 splitFileDir.{. │ │ │ │ +00000750: 2020 206d 7920 246e 616d 6520 3d20 7368 my $name = sh │ │ │ │ +00000760: 6966 743b 0a0a 2020 2020 7265 7475 726e ift;.. return │ │ │ │ +00000770: 2028 272e 272c 2024 6e61 6d65 2920 756e ('.', $name) un │ │ │ │ +00000780: 6c65 7373 2028 246e 616d 6520 3d7e 2f5c less ($name =~/\ │ │ │ │ +00000790: 2f2f 293b 2020 2020 2320 6e75 7220 6569 //); # nur ei │ │ │ │ +000007a0: 6e66 6163 6865 7220 4461 7465 696e 616d nfacher Dateinam │ │ │ │ +000007b0: 650a 0a20 2020 206d 7920 2824 6469 722c e.. my ($dir, │ │ │ │ +000007c0: 2024 6669 6c65 2920 3d20 246e 616d 6520 $file) = $name │ │ │ │ +000007d0: 3d7e 202f 5e28 2e2a 295c 2f28 2e2a 2924 =~ /^(.*)\/(.*)$ │ │ │ │ +000007e0: 2f73 3b0a 2020 2020 2464 6972 203d 2027 /s;. $dir = ' │ │ │ │ +000007f0: 2f27 2069 6620 2824 6469 7220 6571 2027 /' if ($dir eq ' │ │ │ │ +00000800: 2729 3b20 2020 2020 2020 2020 2020 2020 '); │ │ │ │ +00000810: 2020 2020 2020 2320 6769 6c74 2c20 6661 # gilt, fa │ │ │ │ +00000820: 6c6c 7320 7a2e 422e 202f 6669 6c65 6e61 lls z.B. /filena │ │ │ │ +00000830: 6d65 0a20 2020 2072 6574 7572 6e20 2824 me. return ($ │ │ │ │ +00000840: 6469 722c 2024 6669 6c65 293b 0a7d 0a6d dir, $file);.}.m │ │ │ │ +00000850: 7920 2824 7265 712c 2024 7072 6f67 2920 y ($req, $prog) │ │ │ │ +00000860: 3d20 266c 6962 5061 7468 2824 3029 3b0a = &libPath($0);. │ │ │ │ +00000870: 2840 494e 4329 203d 2028 2472 6571 2c20 (@INC) = ($req, │ │ │ │ +00000880: 4049 4e43 293b 0a0a 7265 7175 6972 6520 @INC);..require │ │ │ │ +00000890: 2763 6865 636b 5061 7261 6d32 2e70 6c27 'checkParam2.pl' │ │ │ │ +000008a0: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check │ │ │ │ +000008b0: 4f62 6a50 6172 2e70 6c27 3b0a 7265 7175 ObjPar.pl';.requ │ │ │ │ +000008c0: 6972 6520 2770 724c 6f67 2e70 6c27 3b0a ire 'prLog.pl';. │ │ │ │ +000008d0: 7265 7175 6972 6520 2766 6f72 6b50 726f require 'forkPro │ │ │ │ +000008e0: 632e 706c 273b 0a72 6571 7569 7265 2027 c.pl';.require ' │ │ │ │ +000008f0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p │ │ │ │ +00000900: 6c27 3b0a 7265 7175 6972 6520 2764 6174 l';.require 'dat │ │ │ │ +00000910: 6554 6f6f 6c73 2e70 6c27 3b0a 7265 7175 eTools.pl';.requ │ │ │ │ +00000920: 6972 6520 2776 6572 7369 6f6e 2e70 6c27 ire 'version.pl' │ │ │ │ +00000930: 3b0a 7265 7175 6972 6520 2774 6169 6c2e ;.require 'tail. │ │ │ │ +00000940: 706c 273b 0a0a 246d 6169 6e3a 3a65 7869 pl';..$main::exi │ │ │ │ +00000950: 7420 3d20 303b 2020 2020 2020 2020 2020 t = 0; │ │ │ │ +00000960: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000970: 2020 2020 2023 2065 7869 7420 7374 6174 # exit stat │ │ │ │ +00000980: 7573 0a0a 3d68 6561 6431 204e 414d 450a us..=head1 NAME. │ │ │ │ +00000990: 0a73 746f 7265 4261 636b 7570 4d6f 756e .storeBackupMoun │ │ │ │ +000009a0: 742e 706c 202d 2072 756e 7320 7374 6f72 t.pl - runs stor │ │ │ │ +000009b0: 6542 6163 6b75 7020 6261 636b 696e 6720 eBackup backing │ │ │ │ +000009c0: 7570 2074 6f20 616e 206e 6673 206d 6f75 up to an nfs mou │ │ │ │ +000009d0: 6e74 0a0a 3d68 6561 6431 2053 594e 4f50 nt..=head1 SYNOP │ │ │ │ +000009e0: 5349 530a 0a09 7374 6f72 6542 6163 6b75 SIS...storeBacku │ │ │ │ +000009f0: 704d 6f75 6e74 2e70 6c20 2d63 2063 6f6e pMount.pl -c con │ │ │ │ +00000a00: 6669 6746 696c 6520 5b2d 7320 7365 7276 figFile [-s serv │ │ │ │ +00000a10: 6572 5d20 5b2d 6c20 6c6f 6746 696c 655d er] [-l logFile] │ │ │ │ +00000a20: 205b 2d64 5d0a 095b 2d70 2070 6174 6854 [-d]..[-p pathT │ │ │ │ +00000a30: 6f53 746f 7265 4261 636b 7570 5d20 5b2d oStoreBackup] [- │ │ │ │ +00000a40: 6b20 6b69 6c6c 5469 6d65 5d20 5b2d 6d5d k killTime] [-m] │ │ │ │ +00000a50: 206d 6f75 6e74 506f 696e 7473 2e2e 2e0a mountPoints.... │ │ │ │ +00000a60: 0a3d 6865 6164 3120 4445 5343 5249 5054 .=head1 DESCRIPT │ │ │ │ +00000a70: 494f 4e0a 0a54 6869 7320 7363 7269 7074 ION..This script │ │ │ │ +00000a80: 2064 6f65 7320 7468 6520 666f 6c6c 6f77 does the follow │ │ │ │ +00000a90: 696e 673a 0a0a 3d6f 7665 7220 340a 0a3d ing:..=over 4..= │ │ │ │ +00000aa0: 6974 656d 202d 2063 6865 636b 7320 616e item - checks an │ │ │ │ +00000ab0: 206e 6673 2073 6572 7665 7220 7769 7468 nfs server with │ │ │ │ +00000ac0: 2070 696e 670a 0a3d 6974 656d 202d 206d ping..=item - m │ │ │ │ +00000ad0: 6f75 6e74 7320 7468 6174 2073 6572 7665 ounts that serve │ │ │ │ +00000ae0: 7220 7669 6120 6120 6c69 7374 206f 6620 r via a list of │ │ │ │ +00000af0: 6d6f 756e 7420 706f 696e 7473 0a0a 3d69 mount points..=i │ │ │ │ +00000b00: 7465 6d20 2d20 7374 6172 7473 2073 746f tem - starts sto │ │ │ │ +00000b10: 7265 4261 636b 7570 2028 7769 7468 2061 reBackup (with a │ │ │ │ +00000b20: 2063 6f6e 6669 6720 6669 6c65 290a 0a3d config file)..= │ │ │ │ +00000b30: 6974 656d 202d 2075 6d6f 756e 7473 2074 item - umounts t │ │ │ │ +00000b40: 6861 7420 7365 7276 6572 0a0a 3d62 6163 hat server..=bac │ │ │ │ +00000b50: 6b0a 0a3d 6865 6164 3120 4f50 5449 4f4e k..=head1 OPTION │ │ │ │ +00000b60: 530a 0a3d 6f76 6572 2038 0a0a 3d69 7465 S..=over 8..=ite │ │ │ │ +00000b70: 6d20 423c 2d2d 7365 7276 6572 3e2c 2042 m B<--server>, B │ │ │ │ +00000b80: 3c2d 733e 0a0a 2020 2020 6e61 6d65 206f <-s>.. name o │ │ │ │ +00000b90: 7220 6970 2061 6464 7265 7373 206f 6620 r ip address of │ │ │ │ +00000ba0: 7468 6520 6e66 7320 7365 7276 6572 0a20 the nfs server. │ │ │ │ +00000bb0: 2020 2064 6566 6175 6c74 2069 7320 6c6f default is lo │ │ │ │ +00000bc0: 6361 6c68 6f73 740a 0a3d 6974 656d 2042 calhost..=item B │ │ │ │ +00000bd0: 3c2d 2d63 6f6e 6669 6746 696c 653e 2c20 <--configFile>, │ │ │ │ +00000be0: 423c 2d63 3e0a 0a20 2020 2063 6f6e 6669 B<-c>.. confi │ │ │ │ +00000bf0: 6775 7261 7469 6f6e 2066 696c 6520 666f guration file fo │ │ │ │ +00000c00: 7220 7374 6f72 6542 6163 6b75 702e 0a20 r storeBackup.. │ │ │ │ +00000c10: 2020 2069 6620 6f70 7469 6f6e 2027 6c6f if option 'lo │ │ │ │ +00000c20: 6746 696c 6527 2069 7320 7365 7420 696e gFile' is set in │ │ │ │ +00000c30: 2074 6865 2063 6f6e 6669 6772 6174 696f the configratio │ │ │ │ +00000c40: 6e20 6669 6c65 2c0a 2020 2020 7468 6174 n file,. that │ │ │ │ +00000c50: 206c 6f67 2066 696c 6520 6973 2072 6561 log file is rea │ │ │ │ +00000c60: 6420 6f6e 6c69 6e65 2c20 6966 2069 7420 d online, if it │ │ │ │ +00000c70: 6973 2064 6966 6665 7265 6e74 2066 726f is different fro │ │ │ │ +00000c80: 6d20 2d6c 0a0a 3d69 7465 6d20 423c 2d2d m -l..=item B<-- │ │ │ │ +00000c90: 6c6f 6746 696c 653e 2c20 423c 2d6c 3e0a logFile>, B<-l>. │ │ │ │ +00000ca0: 0a20 2020 206c 6f67 4669 6c65 2066 6f72 . logFile for │ │ │ │ +00000cb0: 2074 6869 7320 7072 6f63 6573 732e 0a20 this process.. │ │ │ │ +00000cc0: 2020 2064 6566 6175 6c74 2069 7320 5354 default is ST │ │ │ │ +00000cd0: 444f 5554 2e0a 2020 2020 796f 7520 6361 DOUT.. you ca │ │ │ │ +00000ce0: 6e20 6c6f 6720 696e 746f 2074 6865 2073 n log into the s │ │ │ │ +00000cf0: 616d 6520 6c6f 6766 696c 6520 6173 2073 ame logfile as s │ │ │ │ +00000d00: 746f 7265 4261 636b 7570 0a0a 3d69 7465 toreBackup..=ite │ │ │ │ +00000d10: 6d20 423c 2d2d 6465 6275 673e 2c20 423c m B<--debug>, B< │ │ │ │ +00000d20: 2d64 3e0a 0a20 2020 2067 656e 6572 6174 -d>.. generat │ │ │ │ +00000d30: 6520 736f 6d65 2064 6562 7567 206d 6573 e some debug mes │ │ │ │ +00000d40: 7361 6765 730a 0a3d 6974 656d 2042 3c2d sages..=item B<- │ │ │ │ +00000d50: 2d70 6174 6853 7462 753e 2c20 423c 2d70 -pathStbu>, B<-p │ │ │ │ +00000d60: 3e0a 0a20 2020 2070 6174 6820 746f 2073 >.. path to s │ │ │ │ +00000d70: 746f 7265 4261 636b 7570 2e70 6c0a 0a3d toreBackup.pl..= │ │ │ │ +00000d80: 6974 656d 2042 3c2d 2d6b 696c 6c54 696d item B<--killTim │ │ │ │ +00000d90: 653e 2042 3c2d 6b3e 0a0a 2020 2020 7469 e> B<-k>.. ti │ │ │ │ +00000da0: 6d65 2075 6e74 696c 2073 746f 7265 4261 me until storeBa │ │ │ │ +00000db0: 636b 7570 2e70 6c20 7769 6c6c 2062 6520 ckup.pl will be │ │ │ │ +00000dc0: 6b69 6c6c 6564 2e0a 2020 2020 6465 6661 killed.. defa │ │ │ │ +00000dd0: 756c 7420 6973 2033 3635 2064 6179 732e ult is 365 days. │ │ │ │ +00000de0: 0a20 2020 2074 6865 2074 696d 6520 7261 . the time ra │ │ │ │ +00000df0: 6e67 6520 6861 7320 746f 2062 6520 7370 nge has to be sp │ │ │ │ +00000e00: 6563 6966 6965 6420 696e 2066 6f72 6d61 ecified in forma │ │ │ │ +00000e10: 7420 2764 686d 7327 2c20 652e 672e 0a20 t 'dhms', e.g.. │ │ │ │ +00000e20: 2020 2031 3064 3468 206d 6561 6e73 2031 10d4h means 1 │ │ │ │ +00000e30: 3020 6461 7973 2061 6e64 2034 2068 6f75 0 days and 4 hou │ │ │ │ +00000e40: 7273 0a0a 3d69 7465 6d20 423c 2d2d 6b65 rs..=item B<--ke │ │ │ │ +00000e50: 6570 4578 6973 7469 6e67 4d6f 756e 7473 epExistingMounts │ │ │ │ +00000e60: 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 6966 >, B<-m>.. if │ │ │ │ +00000e70: 2061 206d 6f75 6e74 2061 6c72 6561 6479 a mount already │ │ │ │ +00000e80: 2065 7869 7374 732c 2064 6f20 6e6f 7420 exists, do not │ │ │ │ +00000e90: 756d 6f75 6e74 2061 6674 6572 0a20 2020 umount after. │ │ │ │ +00000ea0: 2072 756e 6e69 6e67 2073 746f 7265 4261 running storeBa │ │ │ │ +00000eb0: 636b 7570 0a0a 3d69 7465 6d20 463c 6d6f ckup..=item F.. │ │ │ │ +00000ed0: 4c69 7374 206f 6620 6d6f 756e 7420 706f List of mount po │ │ │ │ +00000ee0: 696e 7473 206e 6565 6465 6420 746f 2070 ints needed to p │ │ │ │ +00000ef0: 6572 666f 726d 2074 6865 2062 6163 6b75 erform the backu │ │ │ │ +00000f00: 702e 0a20 2020 2054 6869 7320 6d75 7374 p.. This must │ │ │ │ +00000f10: 2062 6520 6120 6c69 7374 206f 6620 7061 be a list of pa │ │ │ │ +00000f20: 7468 7320 7768 6963 6820 6861 7665 2074 ths which have t │ │ │ │ +00000f30: 6f20 6265 0a20 2020 2064 6566 696e 6564 o be. defined │ │ │ │ +00000f40: 2069 6e20 2f65 7463 2f66 7374 6162 2e0a in /etc/fstab.. │ │ │ │ +00000f50: 2020 2020 2d0a 2020 2020 6966 2079 6f75 -. if you │ │ │ │ +00000f60: 2061 6464 2027 726f 2c27 206f 7220 2772 add 'ro,' or 'r │ │ │ │ +00000f70: 772c 2720 746f 2074 6865 2062 6567 696e w,' to the begin │ │ │ │ +00000f80: 6e69 6e67 206f 6620 6120 6d6f 756e 740a ning of a mount. │ │ │ │ +00000f90: 2020 2020 706f 696e 742c 2079 6f75 2063 point, you c │ │ │ │ +00000fa0: 616e 206f 7665 7277 7269 7465 2074 6861 an overwrite tha │ │ │ │ +00000fb0: 7420 6f70 7469 6f6e 2073 6574 2069 6e20 t option set in │ │ │ │ +00000fc0: 2f65 7463 2f66 7374 6162 0a0a 2020 2020 /etc/fstab.. │ │ │ │ +00000fd0: 6578 616d 706c 653a 0a20 2020 2072 6f2c example:. ro, │ │ │ │ +00000fe0: 2f66 696c 6573 5379 7374 656d 546f 5265 /filesSystemToRe │ │ │ │ +00000ff0: 6164 0a20 2020 2020 2020 7769 6c6c 206d ad. will m │ │ │ │ +00001000: 6f75 6e74 202f 6669 6c65 5379 7374 656d ount /fileSystem │ │ │ │ +00001010: 546f 5265 6164 2072 6561 6420 6f6e 6c79 ToRead read only │ │ │ │ +00001020: 2c20 6576 656e 2069 6620 7468 650a 2020 , even if the. │ │ │ │ +00001030: 2020 2020 2063 6f72 7265 7370 6f6e 6469 correspondi │ │ │ │ +00001040: 6e67 2065 6e74 7279 2069 6e20 2f65 7463 ng entry in /etc │ │ │ │ +00001050: 2f66 7374 6162 206d 6f75 6e74 7320 6974 /fstab mounts it │ │ │ │ +00001060: 2072 6561 6420 7772 6974 650a 0a20 2020 read write.. │ │ │ │ +00001070: 206f 6e6c 7920 726f 6f74 2069 7320 616c only root is al │ │ │ │ +00001080: 6c6f 7765 6420 746f 2075 7365 2074 6869 lowed to use thi │ │ │ │ +00001090: 7320 6665 6174 7572 6521 0a0a 3d62 6163 s feature!..=bac │ │ │ │ +000010a0: 6b0a 0a3d 6865 6164 3120 4558 4954 2053 k..=head1 EXIT S │ │ │ │ +000010b0: 5441 5455 530a 0a3d 6f76 6572 2034 0a0a TATUS..=over 4.. │ │ │ │ +000010c0: 3d69 7465 6d20 3020 2d3e 2065 7665 7279 =item 0 -> every │ │ │ │ +000010d0: 7468 696e 6720 6973 206f 6b0a 0a3d 6974 thing is ok..=it │ │ │ │ +000010e0: 656d 2031 202d 3e20 6572 726f 7220 6672 em 1 -> error fr │ │ │ │ +000010f0: 6f6d 2073 746f 7265 4261 636b 7570 0a0a om storeBackup.. │ │ │ │ +00001100: 3d69 7465 6d20 3220 2d3e 2065 7272 6f72 =item 2 -> error │ │ │ │ +00001110: 2066 726f 6d20 7374 6f72 6542 6163 6b75 from storeBacku │ │ │ │ +00001120: 704d 6f75 6e74 0a0a 3d69 7465 6d20 3320 pMount..=item 3 │ │ │ │ +00001130: 2d3e 2065 7272 6f72 2066 726f 6d20 626f -> error from bo │ │ │ │ +00001140: 7468 2070 726f 6772 616d 730a 0a3d 6261 th programs..=ba │ │ │ │ +00001150: 636b 0a0a 3d68 6561 6431 2043 4f50 5952 ck..=head1 COPYR │ │ │ │ +00001160: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright │ │ │ │ +00001170: 2863 2920 3230 3034 2d32 3030 382c 3230 (c) 2004-2008,20 │ │ │ │ +00001180: 3132 2062 7920 4865 696e 7a2d 4a6f 7365 12 by Heinz-Jose │ │ │ │ +00001190: 6620 436c 6165 7320 2873 6565 2052 4541 f Claes (see REA │ │ │ │ +000011a0: 444d 4529 2e0a 5075 626c 6973 6865 6420 DME)..Published │ │ │ │ +000011b0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge │ │ │ │ +000011c0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ │ +000011d0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l │ │ │ │ +000011e0: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c │ │ │ │ +000011f0: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j │ │ │ │ +00001200: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^ │ │ │ │ +00001210: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \s*$/, `pod2text │ │ │ │ +00001220: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = │ │ │ │ +00001230: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 "cannot find pod │ │ │ │ +00001240: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum │ │ │ │ +00001250: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det │ │ │ │ +00001260: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\n". unle │ │ │ │ +00001270: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin │ │ │ │ +00001280: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\@ARGV │ │ │ │ +00001290: 2c20 272d 5627 293b 0a0a 6d79 2024 4368 , '-V');..my $Ch │ │ │ │ +000012a0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che │ │ │ │ +000012b0: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a │ │ │ │ +000012c0: 6c6c 6f77 4c69 7374 7327 203d 3e20 2779 llowLists' => 'y │ │ │ │ +000012d0: 6573 272c 0a09 0920 2020 2027 2d6c 6973 es',... '-lis │ │ │ │ +000012e0: 7427 203d 3e20 5b4f 7074 696f 6e2d 3e6e t' => [Option->n │ │ │ │ +000012f0: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's │ │ │ │ +00001300: 6572 7665 7227 2c0a 0909 0909 0920 2020 erver',...... │ │ │ │ +00001310: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +00001320: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... │ │ │ │ +00001330: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +00001340: 2d2d 7365 7276 6572 272c 0a09 0909 0909 --server',...... │ │ │ │ +00001350: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ │ +00001360: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ │ +00001370: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +00001380: 3d3e 2027 636f 6e66 6967 4669 6c65 272c => 'configFile', │ │ │ │ +00001390: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +000013a0: 7074 696f 6e27 203d 3e20 272d 6327 2c0a ption' => '-c',. │ │ │ │ +000013b0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ │ +000013c0: 6961 7327 203d 3e20 272d 2d63 6f6e 6669 ias' => '--confi │ │ │ │ +000013d0: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ │ +000013e0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ │ +000013f0: 7327 2c0a 0909 0909 0920 2020 2027 2d6d s',...... '-m │ │ │ │ +00001400: 7573 745f 6265 2720 3d3e 2027 7965 7327 ust_be' => 'yes' │ │ │ │ +00001410: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00001420: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l │ │ │ │ +00001430: 6f67 4669 6c65 272c 0a09 0909 0909 2020 ogFile',...... │ │ │ │ +00001440: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00001450: 3e20 272d 6c27 2c0a 0909 0909 0920 2020 > '-l',...... │ │ │ │ +00001460: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +00001470: 272d 2d6c 6f67 4669 6c65 272c 0a09 0909 '--logFile',.... │ │ │ │ +00001480: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ │ +00001490: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ │ +000014a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +000014b0: 2720 3d3e 2027 6465 6275 6727 2c0a 0909 ' => 'debug',... │ │ │ │ +000014c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +000014d0: 6f6e 2720 3d3e 2027 2d64 272c 0a09 0909 on' => '-d',.... │ │ │ │ +000014e0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +000014f0: 2720 3d3e 2027 2d2d 6465 6275 6727 292c ' => '--debug'), │ │ │ │ +00001500: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ │ +00001510: 2827 2d6e 616d 6527 203d 3e20 2770 6174 ('-name' => 'pat │ │ │ │ +00001520: 6853 7462 7527 2c0a 0909 0909 0920 2020 hStbu',...... │ │ │ │ +00001530: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +00001540: 2027 2d70 272c 0a09 0909 0909 2020 2020 '-p',...... │ │ │ │ +00001550: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +00001560: 2d2d 7061 7468 5374 6275 272c 0a09 0909 --pathStbu',.... │ │ │ │ +00001570: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ │ +00001580: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ │ +00001590: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +000015a0: 2720 3d3e 2027 6b69 6c6c 5469 6d65 272c ' => 'killTime', │ │ │ │ +000015b0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +000015c0: 7074 696f 6e27 203d 3e20 272d 6b27 2c0a ption' => '-k',. │ │ │ │ +000015d0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ │ +000015e0: 6961 7327 203d 3e20 272d 2d6b 696c 6c54 ias' => '--killT │ │ │ │ +000015f0: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... ' │ │ │ │ +00001600: 2d64 6566 6175 6c74 2720 3d3e 2027 3336 -default' => '36 │ │ │ │ +00001610: 3564 2729 2c0a 0909 0909 4f70 7469 6f6e 5d'),.....Option │ │ │ │ +00001620: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001630: 2027 6b65 6570 4578 6973 7469 6e67 4d6f 'keepExistingMo │ │ │ │ +00001640: 756e 7473 272c 0a09 0909 0909 2020 2020 unts',...... │ │ │ │ +00001650: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +00001660: 272d 6d27 2c0a 0909 0909 0920 2020 2027 '-m',...... ' │ │ │ │ +00001670: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +00001680: 2d6b 6565 7045 7869 7374 696e 674d 6f75 -keepExistingMou │ │ │ │ +00001690: 6e74 7327 290a 0909 0909 5d29 3b0a 0a24 nts').....]);..$ │ │ │ │ +000016a0: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check( │ │ │ │ +000016b0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \@ARG │ │ │ │ +000016c0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. │ │ │ │ +000016d0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $ │ │ │ │ +000016e0: 4865 6c70 0a20 2020 2020 2020 2020 2020 Help. │ │ │ │ +000016f0: 2020 2020 2020 293b 0a0a 6d79 2024 7365 );..my $se │ │ │ │ +00001700: 7276 6572 203d 2024 4368 6563 6b50 6172 rver = $CheckPar │ │ │ │ +00001710: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00001720: 2773 6572 7665 7227 293b 0a6d 7920 2463 'server');.my $c │ │ │ │ +00001730: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che │ │ │ │ +00001740: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00001750: 6850 6172 2827 636f 6e66 6967 4669 6c65 hPar('configFile │ │ │ │ +00001760: 2729 3b0a 6d79 2024 6c6f 6746 696c 6520 ');.my $logFile │ │ │ │ +00001770: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00001780: 4f70 7457 6974 6850 6172 2827 6c6f 6746 OptWithPar('logF │ │ │ │ +00001790: 696c 6527 293b 0a6d 7920 2464 6562 7567 ile');.my $debug │ │ │ │ +000017a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000017b0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ │ +000017c0: 6465 6275 6727 293b 0a6d 7920 2470 6174 debug');.my $pat │ │ │ │ +000017d0: 6853 7462 7520 3d20 2443 6865 636b 5061 hStbu = $CheckPa │ │ │ │ +000017e0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +000017f0: 2827 7061 7468 5374 6275 2729 3b0a 6d79 ('pathStbu');.my │ │ │ │ +00001800: 2024 6b74 203d 2024 4368 6563 6b50 6172 $kt = $CheckPar │ │ │ │ +00001810: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00001820: 276b 696c 6c54 696d 6527 293b 0a6d 7920 'killTime');.my │ │ │ │ +00001830: 246b 6565 7045 7869 7374 696e 674d 6f75 $keepExistingMou │ │ │ │ +00001840: 6e74 7320 3d20 2443 6865 636b 5061 722d nts = $CheckPar- │ │ │ │ +00001850: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +00001860: 7228 276b 6565 7045 7869 7374 696e 674d r('keepExistingM │ │ │ │ +00001870: 6f75 6e74 7327 293b 0a6d 7920 2840 6d6f ounts');.my (@mo │ │ │ │ +00001880: 756e 7450 6f69 6e74 7329 203d 2024 4368 untPoints) = $Ch │ │ │ │ +00001890: 6563 6b50 6172 2d3e 6765 744c 6973 7450 eckPar->getListP │ │ │ │ +000018a0: 6172 2829 3b0a 0a6d 7920 2470 724c 6f67 ar();..my $prLog │ │ │ │ +000018b0: 3b0a 6d79 2028 2470 724c 6f67 4b69 6e64 ;.my ($prLogKind │ │ │ │ +000018c0: 2920 3d20 5b27 413a 4245 4749 4e27 2c0a ) = ['A:BEGIN',. │ │ │ │ +000018d0: 0909 2020 2027 5a3a 454e 4427 2c0a 0909 .. 'Z:END',... │ │ │ │ +000018e0: 2020 2027 563a 5645 5253 494f 4e27 2c0a 'V:VERSION',. │ │ │ │ +000018f0: 0909 2020 2027 493a 494e 464f 272c 0a09 .. 'I:INFO',.. │ │ │ │ +00001900: 0920 2020 2744 3a44 4542 5547 272c 0a09 . 'D:DEBUG',.. │ │ │ │ +00001910: 0920 2020 2757 3a57 4152 4e49 4e47 272c . 'W:WARNING', │ │ │ │ +00001920: 0a09 0920 2020 2745 3a45 5252 4f52 275d ... 'E:ERROR'] │ │ │ │ +00001930: 3b0a 6966 2028 246c 6f67 4669 6c65 290a ;.if ($logFile). │ │ │ │ +00001940: 7b0a 2020 2020 2470 724c 6f67 203d 2070 {. $prLog = p │ │ │ │ +00001950: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d66 rintLog->new('-f │ │ │ │ +00001960: 696c 6527 203d 3e20 246c 6f67 4669 6c65 ile' => $logFile │ │ │ │ +00001970: 2c0a 0909 0920 2020 272d 6d75 6c74 6970 ,.... '-multip │ │ │ │ +00001980: 7269 6e74 2720 3d3e 2027 7965 7327 2c0a rint' => 'yes',. │ │ │ │ +00001990: 0909 0920 2020 272d 6b69 6e64 2720 3d3e ... '-kind' => │ │ │ │ +000019a0: 2024 7072 4c6f 674b 696e 6429 3b0a 7d0a $prLogKind);.}. │ │ │ │ +000019b0: 656c 7365 0a7b 0a20 2020 2024 7072 4c6f else.{. $prLo │ │ │ │ +000019c0: 6720 3d20 7072 696e 744c 6f67 2d3e 6e65 g = printLog->ne │ │ │ │ +000019d0: 7728 272d 6b69 6e64 2720 3d3e 2024 7072 w('-kind' => $pr │ │ │ │ +000019e0: 4c6f 674b 696e 6429 3b0a 7d0a 0a24 7072 LogKind);.}..$pr │ │ │ │ +000019f0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00001a00: 6427 203d 3e20 2741 272c 0a09 2020 2020 d' => 'A',.. │ │ │ │ +00001a10: 2020 272d 7374 7227 203d 3e20 5b22 7374 '-str' => ["st │ │ │ │ +00001a20: 6172 7469 6e67 2073 746f 7265 4261 636b arting storeBack │ │ │ │ +00001a30: 7570 202d 6620 2463 6f6e 6669 6746 696c up -f $configFil │ │ │ │ +00001a40: 6522 5d29 3b0a 2470 724c 6f67 2d3e 7072 e"]);.$prLog->pr │ │ │ │ +00001a50: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00001a60: 5627 2c0a 0920 2020 2020 2027 2d73 7472 V',.. '-str │ │ │ │ +00001a70: 2720 3d3e 205b 2224 5645 5253 494f 4e70 ' => ["$VERSIONp │ │ │ │ +00001a80: 4e61 6d65 2c20 246d 6169 6e3a 3a53 544f Name, $main::STO │ │ │ │ +00001a90: 5245 4241 434b 5550 5645 5253 494f 4e2c REBACKUPVERSION, │ │ │ │ +00001aa0: 2022 202e 0a09 0909 2022 6275 696c 6420 " ..... "build │ │ │ │ +00001ab0: 2456 4552 5349 4f4e 7376 6e49 4422 5d29 $VERSIONsvnID"]) │ │ │ │ +00001ac0: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print( │ │ │ │ +00001ad0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00001ae0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00001af0: 205b 2263 616e 6e6f 7420 6f70 656e 2063 ["cannot open c │ │ │ │ +00001b00: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ │ +00001b10: 6520 3c24 636f 6e66 6967 4669 6c65 3e22 e <$configFile>" │ │ │ │ +00001b20: 5d2c 0a09 2020 2020 2020 272d 6578 6974 ],.. '-exit │ │ │ │ +00001b30: 2720 3d3e 2031 290a 2020 2020 756e 6c65 ' => 1). unle │ │ │ │ +00001b40: 7373 202d 7220 2463 6f6e 6669 6746 696c ss -r $configFil │ │ │ │ +00001b50: 653b 0a0a 0a23 206b 696c 6c54 696d 6520 e;...# killTime │ │ │ │ +00001b60: 696e 2073 6563 6f6e 6473 3a0a 6d79 2024 in seconds:.my $ │ │ │ │ +00001b70: 6b69 6c6c 5469 6d65 203d 2026 6461 7465 killTime = &date │ │ │ │ +00001b80: 546f 6f6c 733a 3a73 7472 546f 5365 6328 Tools::strToSec( │ │ │ │ +00001b90: 272d 7374 7227 203d 3e20 246b 7429 3b0a '-str' => $kt);. │ │ │ │ +00001ba0: 756e 6c65 7373 2028 6465 6669 6e65 6420 unless (defined │ │ │ │ +00001bb0: 246b 696c 6c54 696d 6529 0a7b 0a20 2020 $killTime).{. │ │ │ │ +00001bc0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00001bd0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00001be0: 0920 2027 2d73 7472 2720 3d3e 205b 2277 . '-str' => ["w │ │ │ │ +00001bf0: 726f 6e67 2066 6f72 6d61 7420 6f66 2070 rong format of p │ │ │ │ +00001c00: 6172 616d 6574 6572 202d 2d6b 696c 6c54 arameter --killT │ │ │ │ +00001c10: 696d 653a 203c 246b 743e 225d 293b 0a20 ime: <$kt>"]);. │ │ │ │ +00001c20: 2020 2077 6169 743b 0a20 2020 2050 4f53 wait;. POS │ │ │ │ +00001c30: 4958 3a3a 5f65 7869 7420 323b 0a7d 0a0a IX::_exit 2;.}.. │ │ │ │ +00001c40: 230a 2320 7265 6164 2063 6f6e 6669 6720 #.# read config │ │ │ │ +00001c50: 6669 6c65 206f 6620 7374 6f72 6542 6163 file of storeBac │ │ │ │ +00001c60: 6b75 702e 706c 0a23 0a6d 7920 2473 7462 kup.pl.#.my $stb │ │ │ │ +00001c70: 754c 6f67 4669 6c65 203d 2075 6e64 6566 uLogFile = undef │ │ │ │ +00001c80: 3b0a 7b0a 2020 2020 6d79 2024 4368 6563 ;.{. my $Chec │ │ │ │ +00001c90: 6b53 7462 7543 6f6e 6620 3d0a 0943 6865 kStbuConf =..Che │ │ │ │ +00001ca0: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a │ │ │ │ +00001cb0: 6c6c 6f77 4c69 7374 7327 203d 3e20 276e llowLists' => 'n │ │ │ │ +00001cc0: 6f27 2c0a 0909 0927 2d63 6f6e 6669 6746 o',....'-configF │ │ │ │ +00001cd0: 696c 6527 203d 3e20 272d 6627 2c0a 0909 ile' => '-f',... │ │ │ │ +00001ce0: 0927 2d6c 6973 7427 203d 3e20 5b4f 7074 .'-list' => [Opt │ │ │ │ +00001cf0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00001d00: 203d 3e20 2763 6f6e 6669 6746 696c 6527 => 'configFile' │ │ │ │ +00001d10: 2c0a 0909 0909 0909 272d 636c 5f6f 7074 ,.......'-cl_opt │ │ │ │ +00001d20: 696f 6e27 203d 3e20 272d 6627 2c0a 0909 ion' => '-f',... │ │ │ │ +00001d30: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => │ │ │ │ +00001d40: 2779 6573 2729 2c0a 0909 0909 2020 2020 'yes'),..... │ │ │ │ +00001d50: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +00001d60: 6d65 2720 3d3e 2027 6c6f 6746 696c 6527 me' => 'logFile' │ │ │ │ +00001d70: 2c0a 0909 0909 0909 272d 6366 5f6b 6579 ,.......'-cf_key │ │ │ │ +00001d80: 2720 3d3e 2027 6c6f 6746 696c 6527 2c0a ' => 'logFile',. │ │ │ │ +00001d90: 0909 0909 0909 272d 7061 7261 6d27 203d ......'-param' = │ │ │ │ +00001da0: 3e20 2779 6573 2729 0a09 0909 5d29 3b0a > 'yes')....]);. │ │ │ │ +00001db0: 2020 2020 2443 6865 636b 5374 6275 436f $CheckStbuCo │ │ │ │ +00001dc0: 6e66 2d3e 6368 6563 6b28 272d 6172 6776 nf->check('-argv │ │ │ │ +00001dd0: 2720 3d3e 205b 272d 6627 203d 3e20 2463 ' => ['-f' => $c │ │ │ │ +00001de0: 6f6e 6669 6746 696c 655d 2c0a 0909 0920 onfigFile],.... │ │ │ │ +00001df0: 2027 2d68 656c 7027 203d 3e0a 0909 0920 '-help' =>.... │ │ │ │ +00001e00: 2022 6361 6e6e 6f74 2072 6561 6420 636f "cannot read co │ │ │ │ +00001e10: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file │ │ │ │ +00001e20: 203c 2463 6f6e 6669 6746 696c 653e 5c6e <$configFile>\n │ │ │ │ +00001e30: 222c 0a09 0909 2020 272d 6967 6e6f 7265 ",.... '-ignore │ │ │ │ +00001e40: 4164 6469 7469 6f6e 616c 4b65 7973 2720 AdditionalKeys' │ │ │ │ +00001e50: 3d3e 2031 293b 0a20 2020 2024 7374 6275 => 1);. $stbu │ │ │ │ +00001e60: 4c6f 6746 696c 6520 3d20 2443 6865 636b LogFile = $Check │ │ │ │ +00001e70: 5374 6275 436f 6e66 2d3e 6765 744f 7074 StbuConf->getOpt │ │ │ │ +00001e80: 5769 7468 5061 7228 276c 6f67 4669 6c65 WithPar('logFile │ │ │ │ +00001e90: 2729 3b0a 0a20 2020 2024 6c6f 6746 696c ');.. $logFil │ │ │ │ +00001ea0: 6520 3d20 3a3a 6162 736f 6c75 7465 5061 e = ::absolutePa │ │ │ │ +00001eb0: 7468 2824 6c6f 6746 696c 6529 2069 6620 th($logFile) if │ │ │ │ +00001ec0: 246c 6f67 4669 6c65 3b0a 2020 2020 6d79 $logFile;. my │ │ │ │ +00001ed0: 2024 5f6c 6f67 4669 6c65 203d 2024 6c6f $_logFile = $lo │ │ │ │ +00001ee0: 6746 696c 6520 3f20 246c 6f67 4669 6c65 gFile ? $logFile │ │ │ │ +00001ef0: 203a 2022 7374 646f 7574 223b 0a20 2020 : "stdout";. │ │ │ │ +00001f00: 2024 7374 6275 4c6f 6746 696c 6520 3d20 $stbuLogFile = │ │ │ │ +00001f10: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($ │ │ │ │ +00001f20: 7374 6275 4c6f 6746 696c 6529 2069 6620 stbuLogFile) if │ │ │ │ +00001f30: 2824 6c6f 6746 696c 6529 3b0a 2020 2020 ($logFile);. │ │ │ │ +00001f40: 6d79 2024 5f73 7462 754c 6f67 4669 6c65 my $_stbuLogFile │ │ │ │ +00001f50: 203d 2024 7374 6275 4c6f 6746 696c 6520 = $stbuLogFile │ │ │ │ +00001f60: 3f20 2473 7462 754c 6f67 4669 6c65 203a ? $stbuLogFile : │ │ │ │ +00001f70: 2022 7374 646f 7574 223b 0a20 2020 2024 "stdout";. $ │ │ │ │ +00001f80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00001f90: 696e 6427 203d 3e20 2744 272c 0a09 0920 ind' => 'D',... │ │ │ │ +00001fa0: 2027 2d73 7472 2720 3d3e 0a09 0920 205b '-str' =>... [ │ │ │ │ +00001fb0: 226c 6f67 4669 6c65 2066 6f72 2024 7072 "logFile for $pr │ │ │ │ +00001fc0: 6f67 2069 7320 7365 7420 746f 203c 245f og is set to <$_ │ │ │ │ +00001fd0: 6c6f 6746 696c 653e 222c 0a09 0920 2020 logFile>",... │ │ │ │ +00001fe0: 226c 6f67 4669 6c65 2069 6e20 3c24 636f "logFile in <$co │ │ │ │ +00001ff0: 6e66 6967 4669 6c65 3e20 6973 2073 6574 nfigFile> is set │ │ │ │ +00002000: 2074 6f20 3c24 5f73 7462 754c 6f67 4669 to <$_stbuLogFi │ │ │ │ +00002010: 6c65 3e22 5d29 0a09 6966 2024 6465 6275 le>"])..if $debu │ │ │ │ +00002020: 673b 0a20 2020 2069 6620 286e 6f74 2024 g;. if (not $ │ │ │ │ +00002030: 7374 6275 4c6f 6746 696c 6520 6f72 2024 stbuLogFile or $ │ │ │ │ +00002040: 7374 6275 4c6f 6746 696c 6520 6571 2024 stbuLogFile eq $ │ │ │ │ +00002050: 6c6f 6746 696c 6529 0a20 2020 207b 0a09 logFile). {.. │ │ │ │ +00002060: 2473 7462 754c 6f67 4669 6c65 203d 2075 $stbuLogFile = u │ │ │ │ +00002070: 6e64 6566 3b20 2023 2064 6f20 6e6f 7420 ndef; # do not │ │ │ │ +00002080: 7265 6164 206c 6f67 2066 696c 6520 6672 read log file fr │ │ │ │ +00002090: 6f6d 2073 746f 7265 4261 636b 7570 2e70 om storeBackup.p │ │ │ │ +000020a0: 6c0a 2020 2020 7d0a 2020 2020 656c 7365 l. }. else │ │ │ │ +000020b0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ │ +000020c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +000020d0: 2027 4427 2c0a 0909 2020 2020 2020 272d 'D',... '- │ │ │ │ +000020e0: 7374 7227 203d 3e20 5b22 636f 7079 696e str' => ["copyin │ │ │ │ +000020f0: 6720 6c6f 6720 6672 6f6d 2073 746f 7265 g log from store │ │ │ │ +00002100: 4261 636b 7570 2e70 6c20 746f 206d 7920 Backup.pl to my │ │ │ │ +00002110: 6c6f 6722 5d29 3b0a 2020 2020 7d0a 7d0a log"]);. }.}. │ │ │ │ +00002120: 0a23 0a23 2074 6573 7420 7069 6e67 2074 .#.# test ping t │ │ │ │ +00002130: 6f20 7365 7276 6572 0a23 0a69 6620 2824 o server.#.if ($ │ │ │ │ +00002140: 7365 7276 6572 290a 7b0a 2020 2020 6d79 server).{. my │ │ │ │ +00002150: 2024 7020 3d20 4e65 743a 3a50 696e 672d $p = Net::Ping- │ │ │ │ +00002160: 3e6e 6577 2827 7463 7027 2c20 3529 3b20 >new('tcp', 5); │ │ │ │ +00002170: 2320 7761 6974 2061 206d 6178 696d 756d # wait a maximum │ │ │ │ +00002180: 206f 6620 3520 7365 636f 6e64 7320 666f of 5 seconds fo │ │ │ │ +00002190: 7220 7265 7370 6f6e 7365 0a20 2020 206d r response. m │ │ │ │ +000021a0: 7920 2472 6574 203d 2024 702d 3e70 696e y $ret = $p->pin │ │ │ │ +000021b0: 6728 2473 6572 7665 7229 3b0a 2020 2020 g($server);. │ │ │ │ +000021c0: 6966 2028 2472 6574 203d 3d20 3129 0a20 if ($ret == 1). │ │ │ │ +000021d0: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr │ │ │ │ +000021e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000021f0: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st │ │ │ │ +00002200: 7227 203d 3e20 5b22 686f 7374 203c 2473 r' => ["host <$s │ │ │ │ +00002210: 6572 7665 723e 2072 6561 6368 6162 6c65 erver> reachable │ │ │ │ +00002220: 2076 6961 2074 6370 2d70 696e 6722 5d29 via tcp-ping"]) │ │ │ │ +00002230: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ │ +00002240: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e │ │ │ │ +00002250: 7869 7420 7c3d 2032 3b0a 0924 7072 4c6f xit |= 2;..$prLo │ │ │ │ +00002260: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00002270: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ │ +00002280: 2027 2d73 7472 2720 3d3e 205b 2268 6f73 '-str' => ["hos │ │ │ │ +00002290: 7420 3c24 7365 7276 6572 3e20 6e6f 7420 t <$server> not │ │ │ │ +000022a0: 7265 6163 6861 626c 6520 7669 6120 7463 reachable via tc │ │ │ │ +000022b0: 702d 7069 6e67 225d 293b 0a09 7761 6974 p-ping"]);..wait │ │ │ │ +000022c0: 3b0a 0950 4f53 4958 3a3a 5f65 7869 7420 ;..POSIX::_exit │ │ │ │ +000022d0: 246d 6169 6e3a 3a65 7869 743b 0a20 2020 $main::exit;. │ │ │ │ +000022e0: 207d 0a7d 0a0a 230a 2320 6368 6563 6b69 }.}..#.# checki │ │ │ │ +000022f0: 6e67 2066 6f72 2061 6c72 6561 6479 206d ng for already m │ │ │ │ +00002300: 6f75 6e74 6564 2066 696c 6573 7973 7465 ounted filesyste │ │ │ │ +00002310: 6d73 0a23 0a6d 7920 2840 614d 2920 3d20 ms.#.my (@aM) = │ │ │ │ +00002320: 606d 6f75 6e74 603b 0a6d 7920 2825 616c `mount`;.my (%al │ │ │ │ +00002330: 7265 6164 794d 6f75 6e74 6564 2c20 246d readyMounted, $m │ │ │ │ +00002340: 293b 0a66 6f72 6561 6368 2024 6d20 2840 );.foreach $m (@ │ │ │ │ +00002350: 614d 290a 7b0a 2020 2020 246d 203d 7e20 aM).{. $m =~ │ │ │ │ +00002360: 2f28 2e2b 3f29 206f 6e20 282e 2a29 2074 /(.+?) on (.*) t │ │ │ │ +00002370: 7970 6520 2f3b 0a20 2020 2024 616c 7265 ype /;. $alre │ │ │ │ +00002380: 6164 794d 6f75 6e74 6564 7b24 327d 203d adyMounted{$2} = │ │ │ │ +00002390: 2031 3b0a 7d0a 0a23 0a23 206d 6f75 6e74 1;.}..#.# mount │ │ │ │ +000023a0: 696e 6720 7468 6520 6669 6c65 2073 7973 ing the file sys │ │ │ │ +000023b0: 7465 6d73 0a23 0a6d 7920 2840 6d6f 756e tems.#.my (@moun │ │ │ │ +000023c0: 7465 6429 203d 2028 293b 0a6d 7920 2465 ted) = ();.my $e │ │ │ │ +000023d0: 7272 6f72 203d 2030 3b0a 666f 7265 6163 rror = 0;.foreac │ │ │ │ +000023e0: 6820 246d 2028 406d 6f75 6e74 506f 696e h $m (@mountPoin │ │ │ │ +000023f0: 7473 290a 7b0a 2020 2020 6d79 2028 406f ts).{. my (@o │ │ │ │ +00002400: 7074 2920 3d20 2829 3b0a 2020 2020 6966 pt) = ();. if │ │ │ │ +00002410: 2028 246d 203d 7e20 2f5c 4128 725b 6f77 ($m =~ /\A(r[ow │ │ │ │ +00002420: 5d29 2c28 2e2a 292f 290a 2020 2020 7b0a ]),(.*)/). {. │ │ │ │ +00002430: 0928 406f 7074 2920 3d20 2827 2d6f 272c .(@opt) = ('-o', │ │ │ │ +00002440: 2024 3129 3b0a 0924 6d20 3d20 2432 3b0a $1);..$m = $2;. │ │ │ │ +00002450: 2020 2020 7d0a 0a20 2020 2069 6620 2865 }.. if (e │ │ │ │ +00002460: 7869 7374 7320 2461 6c72 6561 6479 4d6f xists $alreadyMo │ │ │ │ +00002470: 756e 7465 647b 246d 7d29 0a20 2020 207b unted{$m}). { │ │ │ │ +00002480: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00002490: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +000024a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +000024b0: 3e20 5b22 3c24 6d3e 2069 7320 616c 7265 > ["<$m> is alre │ │ │ │ +000024c0: 6164 7920 6d6f 756e 7465 6422 5d29 3b0a ady mounted"]);. │ │ │ │ +000024d0: 096e 6578 743b 0a20 2020 207d 0a0a 2020 .next;. }.. │ │ │ │ +000024e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +000024f0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +00002500: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00002510: 7472 7969 6e67 2074 6f20 6d6f 756e 7420 trying to mount │ │ │ │ +00002520: 406f 7074 2024 6d22 5d29 3b0a 2020 2020 @opt $m"]);. │ │ │ │ +00002530: 6d79 2024 6670 203d 2066 6f72 6b50 726f my $fp = forkPro │ │ │ │ +00002540: 632d 3e6e 6577 2827 2d65 7865 6327 203d c->new('-exec' = │ │ │ │ +00002550: 3e20 276d 6f75 6e74 272c 0a09 0909 2020 > 'mount',.... │ │ │ │ +00002560: 2027 2d70 6172 616d 2720 3d3e 205b 406f '-param' => [@o │ │ │ │ +00002570: 7074 2c20 246d 5d2c 0a09 0909 2020 2027 pt, $m],.... ' │ │ │ │ +00002580: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2027 -outRandom' => ' │ │ │ │ +00002590: 2f74 6d70 2f64 6f53 746f 7265 4261 636b /tmp/doStoreBack │ │ │ │ +000025a0: 7570 2d66 6f72 6b4d 6f75 6e74 2d27 2c0a up-forkMount-',. │ │ │ │ +000025b0: 0909 0920 2020 272d 7072 4c6f 6727 203d ... '-prLog' = │ │ │ │ +000025c0: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. │ │ │ │ +000025d0: 2320 7761 6974 2066 6f72 2061 206d 6178 # wait for a max │ │ │ │ +000025e0: 696d 756d 206f 6620 3130 2073 6563 6f6e imum of 10 secon │ │ │ │ +000025f0: 6473 0a20 2020 2066 6f72 6561 6368 2028 ds. foreach ( │ │ │ │ +00002600: 312e 2e31 3029 0a20 2020 207b 0a09 736c 1..10). {..sl │ │ │ │ +00002610: 6565 7020 313b 0a09 6966 2028 2466 702d eep 1;..if ($fp- │ │ │ │ +00002620: 3e70 726f 6365 7373 5275 6e73 2829 203d >processRuns() = │ │ │ │ +00002630: 3d20 3029 0a09 7b0a 0920 2020 206c 6173 = 0)..{.. las │ │ │ │ +00002640: 743b 0a09 7d0a 0965 6c73 650a 097b 0a09 t;..}..else..{.. │ │ │ │ +00002650: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00002660: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D' │ │ │ │ +00002670: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ │ +00002680: 205b 2277 6169 7469 6e67 2066 6f72 206d ["waiting for m │ │ │ │ +00002690: 6f75 6e74 2063 6f6d 6d61 6e64 202e 2e2e ount command ... │ │ │ │ +000026a0: 225d 290a 0909 6966 2024 6465 6275 673b "])...if $debug; │ │ │ │ +000026b0: 0a09 7d0a 2020 2020 7d0a 2020 2020 6d79 ..}. }. my │ │ │ │ +000026c0: 2024 6f75 7431 203d 2024 6670 2d3e 6765 $out1 = $fp->ge │ │ │ │ +000026d0: 7453 5444 4f55 5428 293b 0a20 2020 206d tSTDOUT();. m │ │ │ │ +000026e0: 7920 246f 7574 3220 3d20 2466 702d 3e67 y $out2 = $fp->g │ │ │ │ +000026f0: 6574 5354 4445 5252 2829 3b0a 2020 2020 etSTDERR();. │ │ │ │ +00002700: 2466 702d 3e44 4553 5452 4f59 2829 3b0a $fp->DESTROY();. │ │ │ │ +00002710: 2020 2020 6966 2028 2466 702d 3e67 6574 if ($fp->get │ │ │ │ +00002720: 2827 2d77 6861 7427 203d 3e20 2773 7461 ('-what' => 'sta │ │ │ │ +00002730: 7475 7327 2920 213d 2030 2020 2020 2320 tus') != 0 # │ │ │ │ +00002740: 6d6f 756e 7420 6e6f 7420 7375 6363 6573 mount not succes │ │ │ │ +00002750: 7366 756c 6c0a 096f 7220 4024 6f75 7432 sfull..or @$out2 │ │ │ │ +00002760: 203e 2030 290a 2020 2020 7b0a 0924 6d61 > 0). {..$ma │ │ │ │ +00002770: 696e 3a3a 6578 6974 207c 3d20 323b 0a09 in::exit |= 2;.. │ │ │ │ +00002780: 2465 7272 6f72 203d 2031 3b0a 0924 7072 $error = 1;..$pr │ │ │ │ +00002790: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +000027a0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... │ │ │ │ +000027b0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +000027c0: 6f75 6c64 206e 6f74 206d 6f75 6e74 2040 ould not mount @ │ │ │ │ +000027d0: 6f70 7420 246d 225d 293b 0a09 2466 702d opt $m"]);..$fp- │ │ │ │ +000027e0: 3e73 6967 6e61 6c28 272d 7661 6c75 6527 >signal('-value' │ │ │ │ +000027f0: 203d 3e20 3929 3b0a 0a09 2675 6d6f 756e => 9);...&umoun │ │ │ │ +00002800: 7428 5c40 6d6f 756e 7465 642c 2024 6b65 t(\@mounted, $ke │ │ │ │ +00002810: 6570 4578 6973 7469 6e67 4d6f 756e 7473 epExistingMounts │ │ │ │ +00002820: 2c20 5c25 616c 7265 6164 794d 6f75 6e74 , \%alreadyMount │ │ │ │ +00002830: 6564 2c20 2464 6562 7567 293b 0a0a 0924 ed, $debug);...$ │ │ │ │ +00002840: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00002850: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ │ +00002860: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00002870: 2265 7869 7469 6e67 225d 293b 0a09 7761 "exiting"]);..wa │ │ │ │ +00002880: 6974 3b0a 0950 4f53 4958 3a3a 5f65 7869 it;..POSIX::_exi │ │ │ │ +00002890: 7420 246d 6169 6e3a 3a65 7869 743b 0a20 t $main::exit;. │ │ │ │ +000028a0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ │ +000028b0: 2020 7b0a 0970 7573 6820 406d 6f75 6e74 {..push @mount │ │ │ │ +000028c0: 6564 2c20 246d 3b0a 0924 7072 4c6f 672d ed, $m;..$prLog- │ │ │ │ +000028d0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +000028e0: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ │ +000028f0: 2d73 7472 2720 3d3e 205b 223c 6d6f 756e -str' => [" successful │ │ │ │ +00002910: 6c22 5d29 3b0a 2020 2020 7d0a 0a20 2020 l"]);. }.. │ │ │ │ +00002920: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00002930: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ │ +00002940: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => ["S │ │ │ │ +00002950: 5444 4f55 5420 6f66 203c 6d6f 756e 7420 TDOUT of :", @$out1]). │ │ │ │ +00002970: 0969 6620 2840 246f 7574 3120 3e20 3029 .if (@$out1 > 0) │ │ │ │ +00002980: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ │ +00002990: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000029a0: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' = │ │ │ │ +000029b0: 3e20 5b22 5354 4445 5252 206f 6620 3c6d > ["STDERR of :", @$ou │ │ │ │ +000029d0: 7432 5d29 0a09 6966 2028 4024 6f75 7432 t2])..if (@$out2 │ │ │ │ +000029e0: 203e 2030 293b 0a0a 2020 2020 6966 2028 > 0);.. if ( │ │ │ │ +000029f0: 4024 6f75 7432 290a 2020 2020 7b0a 0924 @$out2). {..$ │ │ │ │ +00002a00: 6d61 696e 3a3a 6578 6974 207c 3d20 323b main::exit |= 2; │ │ │ │ +00002a10: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00002a20: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00002a30: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00002a40: 3e20 5b22 6578 6974 696e 6722 5d29 3b0a > ["exiting"]);. │ │ │ │ +00002a50: 0977 6169 743b 0a09 504f 5349 583a 3a5f .wait;..POSIX::_ │ │ │ │ +00002a60: 6578 6974 2024 6d61 696e 3a3a 6578 6974 exit $main::exit │ │ │ │ +00002a70: 3b0a 2020 2020 7d0a 7d0a 6966 2028 2465 ;. }.}.if ($e │ │ │ │ +00002a80: 7272 6f72 203d 3d20 3129 0a7b 0a20 2020 rror == 1).{. │ │ │ │ +00002a90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00002aa0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00002ab0: 0920 2027 2d73 7472 2720 3d3e 205b 2265 . '-str' => ["e │ │ │ │ +00002ac0: 7869 7469 6e67 225d 293b 0a20 2020 2077 xiting"]);. w │ │ │ │ +00002ad0: 6169 743b 0a20 2020 2050 4f53 4958 3a3a ait;. POSIX:: │ │ │ │ +00002ae0: 5f65 7869 7420 246d 6169 6e3a 3a65 7869 _exit $main::exi │ │ │ │ +00002af0: 743b 0a7d 0a0a 230a 2320 7374 6172 7469 t;.}..#.# starti │ │ │ │ +00002b00: 6e67 2073 746f 7265 4261 636b 7570 0a23 ng storeBackup.# │ │ │ │ +00002b10: 0a6d 7920 2473 746f 7265 4261 636b 7570 .my $storeBackup │ │ │ │ +00002b20: 203d 2024 7061 7468 5374 6275 203f 2022 = $pathStbu ? " │ │ │ │ +00002b30: 2470 6174 6853 7462 752f 7374 6f72 6542 $pathStbu/storeB │ │ │ │ +00002b40: 6163 6b75 702e 706c 2220 3a20 2773 746f ackup.pl" : 'sto │ │ │ │ +00002b50: 7265 4261 636b 7570 2e70 6c27 3b0a 0a6d reBackup.pl';..m │ │ │ │ +00002b60: 7920 2474 6169 6c53 7462 754c 6f67 4669 y $tailStbuLogFi │ │ │ │ +00002b70: 6c65 203d 2075 6e64 6566 3b0a 6966 2028 le = undef;.if ( │ │ │ │ +00002b80: 2473 7462 754c 6f67 4669 6c65 290a 7b0a $stbuLogFile).{. │ │ │ │ +00002b90: 2020 2020 2474 6169 6c53 7462 754c 6f67 $tailStbuLog │ │ │ │ +00002ba0: 4669 6c65 203d 2074 6169 6c4f 6e65 4669 File = tailOneFi │ │ │ │ +00002bb0: 6c65 2d3e 6e65 7728 272d 6669 6c65 6e61 le->new('-filena │ │ │ │ +00002bc0: 6d65 2720 3d3e 2024 7374 6275 4c6f 6746 me' => $stbuLogF │ │ │ │ +00002bd0: 696c 652c 0a09 0909 0909 2027 2d70 6f73 ile,...... '-pos │ │ │ │ +00002be0: 6974 696f 6e27 203d 3e20 2765 6e64 272c ition' => 'end', │ │ │ │ +00002bf0: 0a09 0909 0909 2027 2d6d 6178 6c69 6e65 ...... '-maxline │ │ │ │ +00002c00: 7327 203d 3e20 3130 3029 3b0a 2370 7269 s' => 100);.#pri │ │ │ │ +00002c10: 6e74 2022 7461 696c 4f6e 6546 696c 6521 nt "tailOneFile! │ │ │ │ +00002c20: 5c6e 223b 0a7d 0a0a 6d79 2024 7374 6275 \n";.}..my $stbu │ │ │ │ +00002c30: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new │ │ │ │ +00002c40: 2827 2d65 7865 6327 203d 3e20 2473 746f ('-exec' => $sto │ │ │ │ +00002c50: 7265 4261 636b 7570 2c0a 0909 0920 272d reBackup,.... '- │ │ │ │ +00002c60: 7061 7261 6d27 203d 3e20 5b27 2d66 272c param' => ['-f', │ │ │ │ +00002c70: 2024 636f 6e66 6967 4669 6c65 5d2c 0a09 $configFile],.. │ │ │ │ +00002c80: 0909 2027 2d6f 7574 5261 6e64 6f6d 2720 .. '-outRandom' │ │ │ │ +00002c90: 3d3e 2027 2f74 6d70 2f64 6f53 746f 7265 => '/tmp/doStore │ │ │ │ +00002ca0: 4261 636b 7570 2d73 7462 752d 272c 0a09 Backup-stbu-',.. │ │ │ │ +00002cb0: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $ │ │ │ │ +00002cc0: 7072 4c6f 6729 3b0a 2470 724c 6f67 2d3e prLog);.$prLog-> │ │ │ │ +00002cd0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00002ce0: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s │ │ │ │ +00002cf0: 7472 2720 3d3e 205b 2273 7461 7274 6564 tr' => ["started │ │ │ │ +00002d00: 203c 2473 746f 7265 4261 636b 7570 202d <$storeBackup - │ │ │ │ +00002d10: 6620 2463 6f6e 6669 6746 696c 653e 2c20 f $configFile>, │ │ │ │ +00002d20: 7069 643d 2220 2e0a 0909 0920 2473 7462 pid=" ..... $stb │ │ │ │ +00002d30: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' = │ │ │ │ +00002d40: 3e20 2770 6964 2729 5d29 3b0a 0a24 6b69 > 'pid')]);..$ki │ │ │ │ +00002d50: 6c6c 5469 6d65 203d 2033 3630 302a 3234 llTime = 3600*24 │ │ │ │ +00002d60: 2a33 3635 3b20 2020 2320 7365 7420 746f *365; # set to │ │ │ │ +00002d70: 206f 6e65 2079 6561 720a 6966 2028 246b one year.if ($k │ │ │ │ +00002d80: 696c 6c54 696d 6529 0a7b 0a20 2020 206d illTime).{. m │ │ │ │ +00002d90: 7920 2472 6561 6479 203d 2030 3b0a 2020 y $ready = 0;. │ │ │ │ +00002da0: 2020 666f 7265 6163 6820 2831 2e2e 246b foreach (1..$k │ │ │ │ +00002db0: 696c 6c54 696d 6529 0a20 2020 207b 0a09 illTime). {.. │ │ │ │ +00002dc0: 6966 2028 2473 7462 754c 6f67 4669 6c65 if ($stbuLogFile │ │ │ │ +00002dd0: 290a 097b 0a09 2020 2020 6d79 2028 246c )..{.. my ($l │ │ │ │ +00002de0: 2c20 2465 2920 3d20 2474 6169 6c53 7462 , $e) = $tailStb │ │ │ │ +00002df0: 754c 6f67 4669 6c65 2d3e 7265 6164 2829 uLogFile->read() │ │ │ │ +00002e00: 3b0a 0920 2020 2063 686f 7020 4024 6c3b ;.. chop @$l; │ │ │ │ +00002e10: 0a09 2020 2020 2470 724c 6f67 2d3e 5f5f .. $prLog->__ │ │ │ │ +00002e20: 7265 616c 6c79 5072 696e 7428 246c 2920 reallyPrint($l) │ │ │ │ +00002e30: 6966 2028 4024 6c20 3e20 3029 3b0a 0920 if (@$l > 0);.. │ │ │ │ +00002e40: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00002e50: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00002e60: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ │ +00002e70: 5b24 655d 2920 6966 2024 653b 0a09 7d0a [$e]) if $e;..}. │ │ │ │ +00002e80: 0973 6c65 6570 2031 3b0a 0969 6620 2824 .sleep 1;..if ($ │ │ │ │ +00002e90: 7374 6275 2d3e 7072 6f63 6573 7352 756e stbu->processRun │ │ │ │ +00002ea0: 7328 2920 3d3d 2030 290a 097b 0a09 2020 s() == 0)..{.. │ │ │ │ +00002eb0: 2020 2472 6561 6479 203d 2031 3b0a 0920 $ready = 1;.. │ │ │ │ +00002ec0: 2020 206c 6173 743b 0a09 7d0a 2020 2020 last;..}. │ │ │ │ +00002ed0: 7d0a 2020 2020 6966 2028 2472 6561 6479 }. if ($ready │ │ │ │ +00002ee0: 203d 3d20 3029 2020 2020 2020 2320 6475 == 0) # du │ │ │ │ +00002ef0: 7261 7469 6f6e 2074 6f6f 206c 6f6e 670a ration too long. │ │ │ │ +00002f00: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ │ +00002f10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00002f20: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ │ +00002f30: 7472 2720 3d3e 205b 2274 696d 6520 6c69 tr' => ["time li │ │ │ │ +00002f40: 6d69 7420 3c24 6b74 3e20 6578 6365 6564 mit <$kt> exceed │ │ │ │ +00002f50: 6564 2066 6f72 2022 202e 0a09 0909 0920 ed for " ...... │ │ │ │ +00002f60: 223c 7374 6f72 6542 6163 6b75 7020 2d66 ""]) │ │ │ │ +00002f80: 3b0a 0924 7374 6275 2d3e 7369 676e 616c ;..$stbu->signal │ │ │ │ +00002f90: 2827 2d76 616c 7565 2720 3d3e 2032 293b ('-value' => 2); │ │ │ │ +00002fa0: 2020 2020 2023 2053 4947 494e 540a 0924 # SIGINT..$ │ │ │ │ +00002fb0: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1; │ │ │ │ +00002fc0: 0a09 736c 6565 7020 3130 3b20 2020 2020 ..sleep 10; │ │ │ │ +00002fd0: 2020 2020 2023 2074 696d 6520 666f 7220 # time for │ │ │ │ +00002fe0: 7374 6f72 6542 6163 6b75 7020 746f 2066 storeBackup to f │ │ │ │ +00002ff0: 696e 6973 680a 2020 2020 7d0a 7d0a 0a69 inish. }.}..i │ │ │ │ +00003000: 6620 2824 7374 6275 4c6f 6746 696c 6529 f ($stbuLogFile) │ │ │ │ +00003010: 0a7b 0a20 2020 206d 7920 2824 6c2c 2024 .{. my ($l, $ │ │ │ │ +00003020: 6529 3b0a 2020 2020 646f 0a20 2020 207b e);. do. { │ │ │ │ +00003030: 0a09 2824 6c2c 2024 6529 203d 2024 7461 ..($l, $e) = $ta │ │ │ │ +00003040: 696c 5374 6275 4c6f 6746 696c 652d 3e72 ilStbuLogFile->r │ │ │ │ +00003050: 6561 6428 293b 0a09 6368 6f70 2040 246c ead();..chop @$l │ │ │ │ +00003060: 3b0a 0924 7072 4c6f 672d 3e5f 5f72 6561 ;..$prLog->__rea │ │ │ │ +00003070: 6c6c 7950 7269 6e74 2824 6c29 2069 6620 llyPrint($l) if │ │ │ │ +00003080: 2840 246c 203e 2030 293b 0a09 2470 724c (@$l > 0);..$prL │ │ │ │ +00003090: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000030a0: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... │ │ │ │ +000030b0: 2020 272d 7374 7227 203d 3e20 5b24 655d '-str' => [$e] │ │ │ │ +000030c0: 2920 6966 2024 653b 0a20 2020 207d 2077 ) if $e;. } w │ │ │ │ +000030d0: 6869 6c65 2028 4024 6c29 3b0a 7d0a 0a69 hile (@$l);.}..i │ │ │ │ +000030e0: 6620 2824 7374 6275 2d3e 6765 7428 272d f ($stbu->get('- │ │ │ │ +000030f0: 7768 6174 2720 3d3e 2027 7374 6174 7573 what' => 'status │ │ │ │ +00003100: 2729 2021 3d20 3029 0a7b 0a20 2020 2024 ') != 0).{. $ │ │ │ │ +00003110: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1; │ │ │ │ +00003120: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00003130: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00003140: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00003150: 205b 2273 746f 7265 4261 636b 7570 2065 ["storeBackup e │ │ │ │ +00003160: 7869 7420 7374 6174 7573 2021 3d20 3022 xit status != 0" │ │ │ │ +00003170: 5d29 3b0a 7d0a 0a75 6e6c 6573 7320 2824 ]);.}..unless ($ │ │ │ │ +00003180: 7374 6275 4c6f 6746 696c 6529 0a7b 0a20 stbuLogFile).{. │ │ │ │ +00003190: 2020 206d 7920 246f 7574 3120 3d20 2473 my $out1 = $s │ │ │ │ +000031a0: 7462 752d 3e67 6574 5354 444f 5554 2829 tbu->getSTDOUT() │ │ │ │ +000031b0: 3b0a 2020 2020 2470 724c 6f67 2d3e 5f5f ;. $prLog->__ │ │ │ │ +000031c0: 7265 616c 6c79 5072 696e 7428 246f 7574 reallyPrint($out │ │ │ │ +000031d0: 3129 2069 6620 2840 246f 7574 3120 3e20 1) if (@$out1 > │ │ │ │ +000031e0: 3029 3b0a 7d0a 0a6d 7920 246f 7574 3220 0);.}..my $out2 │ │ │ │ +000031f0: 3d20 2473 7462 752d 3e67 6574 5354 4445 = $stbu->getSTDE │ │ │ │ +00003200: 5252 2829 3b0a 6966 2028 4024 6f75 7432 RR();.if (@$out2 │ │ │ │ +00003210: 203e 2030 290a 7b0a 2020 2020 246d 6169 > 0).{. $mai │ │ │ │ +00003220: 6e3a 3a65 7869 7420 7c3d 2031 3b0a 2020 n::exit |= 1;. │ │ │ │ +00003230: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00003240: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00003250: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00003260: 5354 4445 5252 206f 6620 3c73 746f 7265 STDERR of :",.... │ │ │ │ +00003290: 2020 4024 6f75 7432 5d29 3b0a 7d0a 2473 @$out2]);.}.$s │ │ │ │ +000032a0: 7462 752d 3e44 4553 5452 4f59 2829 3b0a tbu->DESTROY();. │ │ │ │ +000032b0: 0a73 6c65 6570 2032 3b0a 0a26 756d 6f75 .sleep 2;..&umou │ │ │ │ +000032c0: 6e74 285c 406d 6f75 6e74 6564 2c20 246b nt(\@mounted, $k │ │ │ │ +000032d0: 6565 7045 7869 7374 696e 674d 6f75 6e74 eepExistingMount │ │ │ │ +000032e0: 732c 205c 2561 6c72 6561 6479 4d6f 756e s, \%alreadyMoun │ │ │ │ +000032f0: 7465 642c 2024 6465 6275 6729 3b0a 0a24 ted, $debug);..$ │ │ │ │ +00003300: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00003310: 696e 6427 203d 3e20 275a 272c 0a09 2020 ind' => 'Z',.. │ │ │ │ +00003320: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00003330: 6669 6e69 7368 6564 2073 746f 7265 4261 finished storeBa │ │ │ │ +00003340: 636b 7570 202d 6620 2463 6f6e 6669 6746 ckup -f $configF │ │ │ │ +00003350: 696c 6522 5d29 3b0a 0a77 6169 743b 0a50 ile"]);..wait;.P │ │ │ │ +00003360: 4f53 4958 3a3a 5f65 7869 7420 246d 6169 OSIX::_exit $mai │ │ │ │ +00003370: 6e3a 3a65 7869 743b 0a0a 2323 2323 2323 n::exit;..###### │ │ │ │ +00003380: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003390: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000033a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000033b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000033c0: 0a73 7562 2075 6d6f 756e 740a 7b0a 2020 .sub umount.{. │ │ │ │ +000033d0: 2020 6d79 2028 246d 6f75 6e74 6564 2c20 my ($mounted, │ │ │ │ +000033e0: 246b 6565 7045 7869 7374 696e 674d 6f75 $keepExistingMou │ │ │ │ +000033f0: 6e74 732c 2024 616c 7265 6164 794d 6f75 nts, $alreadyMou │ │ │ │ +00003400: 6e74 6564 2c20 2464 6562 7567 2920 3d20 nted, $debug) = │ │ │ │ +00003410: 405f 3b0a 0a20 2020 2066 6f72 6561 6368 @_;.. foreach │ │ │ │ +00003420: 2024 6d20 2872 6576 6572 7365 2040 246d $m (reverse @$m │ │ │ │ +00003430: 6f75 6e74 6564 290a 2020 2020 7b0a 0969 ounted). {..i │ │ │ │ +00003440: 6620 2865 7869 7374 7320 2461 6c72 6561 f (exists $alrea │ │ │ │ +00003450: 6479 4d6f 756e 7465 647b 246d 7d29 0a09 dyMounted{$m}).. │ │ │ │ +00003460: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p │ │ │ │ +00003470: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00003480: 2749 272c 0a09 0909 2020 272d 7374 7227 'I',.... '-str' │ │ │ │ +00003490: 203d 3e0a 0909 0920 205b 2264 6f20 6e6f =>.... ["do no │ │ │ │ +000034a0: 7420 756d 6f75 6e74 203c 246d 3e2c 2077 t umount <$m>, w │ │ │ │ +000034b0: 6173 2061 6c72 6561 6479 206d 6f75 6e74 as already mount │ │ │ │ +000034c0: 6564 225d 293b 0a09 2020 2020 6e65 7874 ed"]);.. next │ │ │ │ +000034d0: 3b0a 097d 0a09 2470 724c 6f67 2d3e 7072 ;..}..$prLog->pr │ │ │ │ +000034e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000034f0: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st │ │ │ │ +00003500: 7227 203d 3e20 5b22 7472 7969 6e67 2074 r' => ["trying t │ │ │ │ +00003510: 6f20 3c75 6d6f 756e 7420 246d 3e22 5d29 o "]) │ │ │ │ +00003520: 3b0a 0973 6c65 6570 2035 3b0a 096d 7920 ;..sleep 5;..my │ │ │ │ +00003530: 2475 6d20 3d20 666f 726b 5072 6f63 2d3e $um = forkProc-> │ │ │ │ +00003540: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => ' │ │ │ │ +00003550: 756d 6f75 6e74 272c 0a09 0909 2020 2020 umount',.... │ │ │ │ +00003560: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [ │ │ │ │ +00003570: 246d 5d2c 0a09 0909 2020 2020 2020 2027 $m],.... ' │ │ │ │ +00003580: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>.. │ │ │ │ +00003590: 0909 2020 2020 2020 2027 2f74 6d70 2f64 .. '/tmp/d │ │ │ │ +000035a0: 6f53 746f 7265 4261 636b 7570 2d66 6f72 oStoreBackup-for │ │ │ │ +000035b0: 6b4d 6f75 6e74 2d27 2c0a 0909 0920 2020 kMount-',.... │ │ │ │ +000035c0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ │ +000035d0: 2470 724c 6f67 293b 0a0a 0923 2077 6169 $prLog);...# wai │ │ │ │ +000035e0: 7420 666f 7220 6120 6d61 7869 6d75 6d20 t for a maximum │ │ │ │ +000035f0: 6f66 2036 3020 7365 636f 6e64 730a 0966 of 60 seconds..f │ │ │ │ +00003600: 6f72 6561 6368 2028 312e 2e36 3029 0a09 oreach (1..60).. │ │ │ │ +00003610: 7b0a 0920 2020 2073 6c65 6570 2031 3b0a {.. sleep 1;. │ │ │ │ +00003620: 0920 2020 2069 6620 2824 756d 2d3e 7072 . if ($um->pr │ │ │ │ +00003630: 6f63 6573 7352 756e 7328 2920 3d3d 2030 ocessRuns() == 0 │ │ │ │ +00003640: 290a 0920 2020 207b 0a09 096c 6173 743b ).. {...last; │ │ │ │ +00003650: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00003660: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo │ │ │ │ +00003670: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00003680: 203d 3e20 2744 272c 0a09 0909 2020 2020 => 'D',.... │ │ │ │ +00003690: 2020 272d 7374 7227 203d 3e20 5b22 7761 '-str' => ["wa │ │ │ │ +000036a0: 6974 696e 6720 666f 7220 756d 6f75 6e74 iting for umount │ │ │ │ +000036b0: 2063 6f6d 6d61 6e64 202e 2e2e 225d 290a command ..."]). │ │ │ │ +000036c0: 0909 2020 2020 6966 2024 6465 6275 673b .. if $debug; │ │ │ │ +000036d0: 0a09 2020 2020 7d0a 097d 0a09 2475 6d2d .. }..}..$um- │ │ │ │ +000036e0: 3e44 4553 5452 4f59 2829 3b0a 0969 6620 >DESTROY();..if │ │ │ │ +000036f0: 2824 756d 2d3e 6765 7428 272d 7768 6174 ($um->get('-what │ │ │ │ +00003700: 2720 3d3e 2027 7374 6174 7573 2729 2021 ' => 'status') ! │ │ │ │ +00003710: 3d20 3029 2020 2020 2320 756d 6f75 6e74 = 0) # umount │ │ │ │ +00003720: 206e 6f74 2073 7563 6365 7373 6675 6c6c not successfull │ │ │ │ +00003730: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog- │ │ │ │ +00003740: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00003750: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ │ +00003760: 7227 203d 3e20 5b22 636f 756c 6420 6e6f r' => ["could no │ │ │ │ +00003770: 7420 3c75 6d6f 756e 7420 246d 3e22 5d29 t "]) │ │ │ │ +00003780: 3b0a 0920 2020 2024 756d 2d3e 7369 676e ;.. $um->sign │ │ │ │ +00003790: 616c 2827 2d76 616c 7565 2720 3d3e 2039 al('-value' => 9 │ │ │ │ +000037a0: 293b 0a09 2020 2020 246d 6169 6e3a 3a65 );.. $main::e │ │ │ │ +000037b0: 7869 7420 7c3d 2032 3b0a 097d 0a09 656c xit |= 2;..}..el │ │ │ │ +000037c0: 7365 0a09 7b0a 0920 2020 2024 7072 4c6f se..{.. $prLo │ │ │ │ +000037d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +000037e0: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '- │ │ │ │ +000037f0: 7374 7227 203d 3e20 5b22 3c75 6d6f 756e str' => [" $m successful │ │ │ │ +00003810: 6c22 5d29 3b0a 097d 0a20 2020 207d 0a7d l"]);..}. }.} │ │ │ │ +00003820: 0a . │ │ │ ├── ./usr/bin/storeBackupRecover │ │ │ │ @@ -1,4 +1,1468 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7052 6563 6f76 6572 0a pRecover. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ │ +00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ │ +00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ │ +00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ │ +000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ │ +000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ │ +000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ │ +000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ │ +000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ │ +000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ │ +00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ │ +00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ │ +00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ │ +00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ │ +00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ │ +00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ │ +00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ │ +00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ │ +00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ │ +00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ │ +000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ │ +000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ │ +000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ │ +000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ │ +000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ │ +000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ │ +00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ │ +00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ │ +00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ │ +00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ │ +00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ │ +00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ │ +00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ │ +00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ │ +00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ │ +00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ │ +000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ │ +000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ │ +000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m │ │ │ │ +00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I │ │ │ │ +00000310: 643a 2073 746f 7265 4261 636b 7570 5265 d: storeBackupRe │ │ │ │ +00000320: 636f 7665 722e 706c 2033 3634 2032 3031 cover.pl 364 201 │ │ │ │ +00000330: 322d 3032 2d31 3220 3134 3a31 343a 3434 2-02-12 14:14:44 │ │ │ │ +00000340: 5a20 686a 6320 2420 273b 0a70 7573 6820 Z hjc $ ';.push │ │ │ │ +00000350: 4056 4552 5349 4f4e 2c20 2456 4552 5349 @VERSION, $VERSI │ │ │ │ +00000360: 4f4e 3b0a 6d79 2028 2456 4552 5349 4f4e ON;.my ($VERSION │ │ │ │ +00000370: 704e 616d 652c 2024 5645 5253 494f 4e73 pName, $VERSIONs │ │ │ │ +00000380: 766e 4944 2920 3d20 2456 4552 5349 4f4e vnID) = $VERSION │ │ │ │ +00000390: 203d 7e20 2f49 643a 5c73 2b28 5c53 2b29 =~ /Id:\s+(\S+) │ │ │ │ +000003a0: 5c73 2b28 5c64 2b29 2f3b 0a24 6d61 696e \s+(\d+)/;.$main │ │ │ │ +000003b0: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER │ │ │ │ +000003c0: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;... │ │ │ │ +000003d0: 7573 6520 7374 7269 6374 3b0a 7573 6520 use strict;.use │ │ │ │ +000003e0: 4442 5f46 696c 653b 2020 2020 2020 2020 DB_File; │ │ │ │ +000003f0: 2020 2023 2042 6572 6b65 6c65 7920 4442 # Berkeley DB │ │ │ │ +00000400: 2076 6572 7369 6f6e 2031 0a0a 0a73 7562 version 1...sub │ │ │ │ +00000410: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m │ │ │ │ +00000420: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift; │ │ │ │ +00000430: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;.. │ │ │ │ +00000440: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date │ │ │ │ +00000450: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym │ │ │ │ +00000460: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang │ │ │ │ +00000470: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au │ │ │ │ +00000480: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if ( │ │ │ │ +00000490: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {. │ │ │ │ +000004a0: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file │ │ │ │ +000004b0: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li │ │ │ │ +000004c0: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f │ │ │ │ +000004d0: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if ( │ │ │ │ +000004e0: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0, │ │ │ │ +000004f0: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne "/").. │ │ │ │ +00000500: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/ │ │ │ │ +00000510: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\/]+$/$link/;. │ │ │ │ +00000520: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ │ +00000530: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file │ │ │ │ +00000540: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }. │ │ │ │ +00000550: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil │ │ │ │ +00000560: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD │ │ │ │ +00000570: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil │ │ │ │ +00000580: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = "/$file";. │ │ │ │ +00000590: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +000005a0: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ │ +000005b0: 2022 3c24 6669 6c65 3e20 646f 6573 206e "<$file> does n │ │ │ │ +000005c0: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\n";..e │ │ │ │ +000005d0: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. │ │ │ │ +000005e0: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= "/../l │ │ │ │ +000005f0: 6962 223b 2020 2020 2020 2020 2020 2023 ib"; # │ │ │ │ +00000600: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib │ │ │ │ +00000610: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my │ │ │ │ +00000620: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin │ │ │ │ +00000630: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp │ │ │ │ +00000640: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if │ │ │ │ +00000650: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). │ │ │ │ +00000660: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir │ │ │ │ +00000670: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c │ │ │ │ +00000680: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch │ │ │ │ +00000690: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r │ │ │ │ +000006a0: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil │ │ │ │ +000006b0: 6544 6972 2822 2461 6273 4469 7224 6669 eDir("$absDir$fi │ │ │ │ +000006c0: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le"));. }. │ │ │ │ +000006d0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri │ │ │ │ +000006e0: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR "<$dir │ │ │ │ +000006f0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist │ │ │ │ +00000700: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\n";. │ │ │ │ +00000710: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF │ │ │ │ +00000720: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my │ │ │ │ +00000730: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;.. │ │ │ │ +00000740: 2020 2020 7265 7475 726e 2028 272e 272c return ('.', │ │ │ │ +00000750: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless ( │ │ │ │ +00000760: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\//); │ │ │ │ +00000770: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache │ │ │ │ +00000780: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. │ │ │ │ +00000790: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file │ │ │ │ +000007a0: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^( │ │ │ │ +000007b0: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\/(.*)$/s;. │ │ │ │ +000007c0: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if │ │ │ │ +000007d0: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); │ │ │ │ +000007e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000007f0: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z. │ │ │ │ +00000800: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. │ │ │ │ +00000810: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $ │ │ │ │ +00000820: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re │ │ │ │ +00000830: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib │ │ │ │ +00000840: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @ │ │ │ │ +00000850: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, "$req";..re │ │ │ │ +00000860: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara │ │ │ │ +00000870: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require │ │ │ │ +00000880: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl' │ │ │ │ +00000890: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog │ │ │ │ +000008a0: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v │ │ │ │ +000008b0: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ │ │ │ │ +000008c0: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl' │ │ │ │ +000008d0: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP │ │ │ │ +000008e0: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require │ │ │ │ +000008f0: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib │ │ │ │ +00000900: 2e70 6c27 3b0a 0a0a 6d79 2024 6d64 3543 .pl';...my $md5C │ │ │ │ +00000910: 6865 636b 5375 6d56 6572 7369 6f6e 203d heckSumVersion = │ │ │ │ +00000920: 2027 312e 3127 3b0a 6d79 2024 6e6f 5265 '1.1';.my $noRe │ │ │ │ +00000930: 7374 6f72 6550 6172 616c 6c65 6c20 3d20 storeParallel = │ │ │ │ +00000940: 3132 3b0a 6d79 2024 6368 6563 6b53 756d 12;.my $checkSum │ │ │ │ +00000950: 4669 6c65 203d 2027 2e6d 6435 4368 6563 File = '.md5Chec │ │ │ │ +00000960: 6b53 756d 7327 3b0a 0a6d 7920 2474 6d70 kSums';..my $tmp │ │ │ │ +00000970: 6469 7220 3d20 272f 746d 7027 3b20 2020 dir = '/tmp'; │ │ │ │ +00000980: 2020 2020 2020 2020 2020 2023 2064 6566 # def │ │ │ │ +00000990: 6175 6c74 2076 616c 7565 0a24 746d 7064 ault value.$tmpd │ │ │ │ +000009a0: 6972 203d 2024 454e 567b 2754 4d50 4449 ir = $ENV{'TMPDI │ │ │ │ +000009b0: 5227 7d20 6966 2064 6566 696e 6564 2024 R'} if defined $ │ │ │ │ +000009c0: 454e 567b 2754 4d50 4449 5227 7d3b 0a0a ENV{'TMPDIR'};.. │ │ │ │ +000009d0: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto │ │ │ │ +000009e0: 7265 4261 636b 7570 5265 636f 7665 722e reBackupRecover. │ │ │ │ +000009f0: 706c 202d 2072 6563 6f76 6572 7320 6669 pl - recovers fi │ │ │ │ +00000a00: 6c65 7320 7361 7665 6420 7769 7468 2073 les saved with s │ │ │ │ +00000a10: 746f 7265 4261 636b 7570 2e70 6c2e 0a0a toreBackup.pl... │ │ │ │ +00000a20: 3d68 6561 6431 2053 594e 4f50 5349 530a =head1 SYNOPSIS. │ │ │ │ +00000a30: 0a09 7374 6f72 6542 6163 6b75 7052 6563 ..storeBackupRec │ │ │ │ +00000a40: 6f76 6572 2e70 6c20 2d72 2072 6573 746f over.pl -r resto │ │ │ │ +00000a50: 7265 205b 2d62 2072 6f6f 745d 202d 7420 re [-b root] -t │ │ │ │ +00000a60: 7461 7267 6574 4469 7220 5b2d 2d66 6c61 targetDir [--fla │ │ │ │ +00000a70: 745d 0a09 095b 2d6f 5d20 5b2d 2d74 6d70 t]...[-o] [--tmp │ │ │ │ +00000a80: 6469 725d 205b 2d2d 6e6f 4861 7264 4c69 dir] [--noHardLi │ │ │ │ +00000a90: 6e6b 735d 205b 2d70 206e 756d 6265 725d nks] [-p number] │ │ │ │ +00000aa0: 205b 2d76 5d20 5b2d 6e5d 0a09 095b 2d2d [-v] [-n]...[-- │ │ │ │ +00000ab0: 6370 4973 476e 755d 205b 2d2d 6e6f 476e cpIsGnu] [--noGn │ │ │ │ +00000ac0: 7543 705d 0a0a 3d68 6561 6431 204f 5054 uCp]..=head1 OPT │ │ │ │ +00000ad0: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..= │ │ │ │ +00000ae0: 6974 656d 2042 3c2d 2d72 6573 746f 7265 item B<--restore │ │ │ │ +00000af0: 5472 6565 3e2c 2042 3c2d 723e 0a0a 2020 Tree>, B<-r>.. │ │ │ │ +00000b00: 2020 6669 6c65 206f 7220 2870 6172 7420 file or (part │ │ │ │ +00000b10: 6f66 2920 7468 6520 7472 6565 2074 6f20 of) the tree to │ │ │ │ +00000b20: 7265 7374 6f72 650a 2020 2020 7768 656e restore. when │ │ │ │ +00000b30: 2072 6573 746f 7269 6e67 2061 2066 696c restoring a fil │ │ │ │ +00000b40: 652c 2074 6865 2066 696c 6520 6e61 6d65 e, the file name │ │ │ │ +00000b50: 2069 6e20 7468 6520 6261 636b 7570 2068 in the backup h │ │ │ │ +00000b60: 6173 0a20 2020 2074 6f20 6265 2075 7365 as. to be use │ │ │ │ +00000b70: 6420 2865 672e 2077 6974 6820 636f 6d70 d (eg. with comp │ │ │ │ +00000b80: 7265 7373 696f 6e20 7375 6666 6978 290a ression suffix). │ │ │ │ +00000b90: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu │ │ │ │ +00000ba0: 7052 6f6f 743e 2c20 423c 2d62 3e0a 0a20 pRoot>, B<-b>.. │ │ │ │ +00000bb0: 2020 2072 6f6f 7420 6f66 2073 746f 7265 root of store │ │ │ │ +00000bc0: 4261 636b 7570 2074 7265 652c 206e 6f72 Backup tree, nor │ │ │ │ +00000bd0: 6d61 6c6c 7920 6e6f 7420 6e65 6564 6564 mally not needed │ │ │ │ +00000be0: 0a0a 3d69 7465 6d20 423c 2d2d 7461 7267 ..=item B<--targ │ │ │ │ +00000bf0: 6574 4469 723e 2c20 423c 2d74 3e0a 0a20 etDir>, B<-t>.. │ │ │ │ +00000c00: 2020 2064 6972 6563 746f 7279 2066 6f72 directory for │ │ │ │ +00000c10: 2075 6e70 6163 6b69 6e67 0a0a 3d69 7465 unpacking..=ite │ │ │ │ +00000c20: 6d20 423c 2d2d 666c 6174 3e0a 0a20 2020 m B<--flat>.. │ │ │ │ +00000c30: 2064 6f20 6e6f 7420 6372 6561 7465 2073 do not create s │ │ │ │ +00000c40: 7562 6469 7265 6374 6f72 6965 730a 0a3d ubdirectories..= │ │ │ │ +00000c50: 6974 656d 2042 3c2d 2d6f 7665 7277 7269 item B<--overwri │ │ │ │ +00000c60: 7465 3e2c 2042 3c2d 6f3e 0a0a 2020 2020 te>, B<-o>.. │ │ │ │ +00000c70: 6f76 6572 7772 6974 6520 6578 6973 7469 overwrite existi │ │ │ │ +00000c80: 6e67 2066 696c 6573 0a0a 3d69 7465 6d20 ng files..=item │ │ │ │ +00000c90: 423c 2d2d 746d 7064 6972 3e2c 2042 3c2d B<--tmpdir>, B<- │ │ │ │ +00000ca0: 543e 0a0a 2020 2020 6469 7265 6374 6f72 T>.. director │ │ │ │ +00000cb0: 7920 666f 7220 7465 6d70 6f72 6172 7920 y for temporary │ │ │ │ +00000cc0: 6669 6c65 2c20 6465 6661 756c 7420 6973 file, default is │ │ │ │ +00000cd0: 203c 2474 6d70 6469 723e 0a0a 3d69 7465 <$tmpdir>..=ite │ │ │ │ +00000ce0: 6d20 423c 2d2d 6e6f 4861 7264 4c69 6e6b m B<--noHardLink │ │ │ │ +00000cf0: 733e 0a0a 2020 2020 646f 206e 6f74 2072 s>.. do not r │ │ │ │ +00000d00: 6563 6f6e 7374 7275 6374 2068 6172 6420 econstruct hard │ │ │ │ +00000d10: 6c69 6e6b 7320 696e 2072 6573 746f 7265 links in restore │ │ │ │ +00000d20: 2074 7265 650a 0a3d 6974 656d 2042 3c2d tree..=item B<- │ │ │ │ +00000d30: 2d6e 6f52 6573 746f 7265 5061 7261 6c6c -noRestoreParall │ │ │ │ +00000d40: 656c 3e2c 2042 3c2d 703e 0a0a 2020 2020 el>, B<-p>.. │ │ │ │ +00000d50: 6d61 7820 6e6f 206f 6620 7061 7261 6c65 max no of parale │ │ │ │ +00000d60: 6c6c 2070 726f 6772 616d 7320 746f 2075 ll programs to u │ │ │ │ +00000d70: 6e70 6163 6b2c 2064 6566 6175 6c74 2069 npack, default i │ │ │ │ +00000d80: 7320 3132 0a20 2020 2072 6564 7563 6520 s 12. reduce │ │ │ │ +00000d90: 7468 6973 206e 756d 6265 7220 6966 2079 this number if y │ │ │ │ +00000da0: 6f75 2061 7265 2072 6573 746f 7269 6e67 ou are restoring │ │ │ │ +00000db0: 2062 6c6f 636b 6564 2066 696c 6573 0a20 blocked files. │ │ │ │ +00000dc0: 2020 2061 6e64 2074 6865 2073 7973 7465 and the syste │ │ │ │ +00000dd0: 6d20 6861 7320 696e 7375 6666 6963 6965 m has insufficie │ │ │ │ +00000de0: 6e74 2052 414d 0a0a 3d69 7465 6d20 423c nt RAM..=item B< │ │ │ │ +00000df0: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v │ │ │ │ +00000e00: 3e0a 0a20 2020 2070 7269 6e74 2076 6572 >.. print ver │ │ │ │ +00000e10: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..= │ │ │ │ +00000e20: 6974 656d 2042 3c2d 2d6e 6f52 6573 746f item B<--noResto │ │ │ │ +00000e30: 7265 643e 2c20 423c 2d6e 3e0a 0a20 2020 red>, B<-n>.. │ │ │ │ +00000e40: 2070 7269 6e74 206e 756d 6265 7220 6f66 print number of │ │ │ │ +00000e50: 2072 6573 746f 7265 6420 6469 7273 2c20 restored dirs, │ │ │ │ +00000e60: 6861 7264 6c69 6e6b 732c 2073 796d 6c69 hardlinks, symli │ │ │ │ +00000e70: 6e6b 732c 2066 696c 6573 2c20 2e2e 2e0a nks, files, .... │ │ │ │ +00000e80: 0a3d 6974 656d 2042 3c2d 2d6e 6f47 6e75 .=item B<--noGnu │ │ │ │ +00000e90: 4370 3e0a 0a20 2020 206f 7665 7277 7269 Cp>.. overwri │ │ │ │ +00000ea0: 7465 2069 6e66 6f72 6d61 7469 6f6e 2069 te information i │ │ │ │ +00000eb0: 6e20 6261 636b 7570 3a20 796f 7520 646f n backup: you do │ │ │ │ +00000ec0: 206e 6f74 2068 6176 6520 676e 7563 700a not have gnucp. │ │ │ │ +00000ed0: 2020 2020 696e 7374 616c 6c65 640a 2020 installed. │ │ │ │ +00000ee0: 2020 286f 6e6c 7920 7265 6c65 7661 6e74 (only relevant │ │ │ │ +00000ef0: 2066 6f72 2073 6f63 6b65 7473 2c20 626c for sockets, bl │ │ │ │ +00000f00: 6f63 6b20 616e 6420 6368 6172 6163 7465 ock and characte │ │ │ │ +00000f10: 7220 6465 7669 6365 7329 0a0a 3d62 6163 r devices)..=bac │ │ │ │ +00000f20: 6b0a 0a3d 6865 6164 3120 434f 5059 5249 k..=head1 COPYRI │ │ │ │ +00000f30: 4748 540a 0a43 6f70 7972 6967 6874 2028 GHT..Copyright ( │ │ │ │ +00000f40: 6329 2032 3030 322d 3230 3039 2c32 3031 c) 2002-2009,201 │ │ │ │ +00000f50: 3220 6279 2048 6569 6e7a 2d4a 6f73 6566 2 by Heinz-Josef │ │ │ │ +00000f60: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ │ │ │ │ +00000f70: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u │ │ │ │ +00000f80: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen │ │ │ │ +00000f90: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00000fa0: 6e73 6520 7633 206f 7220 616e 7920 6c61 nse v3 or any la │ │ │ │ +00000fb0: 7465 7220 7665 7273 696f 6e0a 0a3d 6375 ter version..=cu │ │ │ │ +00000fc0: 740a 0a6d 7920 2448 656c 7020 3d20 6a6f t..my $Help = jo │ │ │ │ +00000fd0: 696e 2827 272c 2067 7265 7028 212f 5e5c in('', grep(!/^\ │ │ │ │ +00000fe0: 732a 242f 2c20 6070 6f64 3274 6578 7420 s*$/, `pod2text │ │ │ │ +00000ff0: 2430 6029 293b 0a24 4865 6c70 203d 2022 $0`));.$Help = " │ │ │ │ +00001000: 6361 6e6e 6f74 2066 696e 6420 706f 6432 cannot find pod2 │ │ │ │ +00001010: 7465 7874 2c20 7365 6520 646f 6375 6d65 text, see docume │ │ │ │ +00001020: 6e74 6174 696f 6e20 666f 7220 6465 7461 ntation for deta │ │ │ │ +00001030: 696c 735c 6e22 0a20 2020 2075 6e6c 6573 ils\n". unles │ │ │ │ +00001040: 7320 2448 656c 703b 0a0a 2670 7269 6e74 s $Help;..&print │ │ │ │ +00001050: 5665 7273 696f 6e73 285c 4041 5247 562c Versions(\@ARGV, │ │ │ │ +00001060: 2027 2d56 2729 3b0a 0a6d 7920 2443 6865 '-V');..my $Che │ │ │ │ +00001070: 636b 5061 7220 3d0a 2020 2020 4368 6563 ckPar =. Chec │ │ │ │ +00001080: 6b50 6172 616d 2d3e 6e65 7728 272d 616c kParam->new('-al │ │ │ │ +00001090: 6c6f 774c 6973 7473 2720 3d3e 2027 6e6f lowLists' => 'no │ │ │ │ +000010a0: 272c 0a09 0920 2020 2027 2d6c 6973 7427 ',... '-list' │ │ │ │ +000010b0: 203d 3e20 5b4f 7074 696f 6e2d 3e6e 6577 => [Option->new │ │ │ │ +000010c0: 2827 2d6e 616d 6527 203d 3e20 2772 6573 ('-name' => 'res │ │ │ │ +000010d0: 746f 7265 5472 6565 272c 0a09 0909 0909 toreTree',...... │ │ │ │ +000010e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +000010f0: 203d 3e20 272d 7227 2c0a 0909 0909 0920 => '-r',...... │ │ │ │ +00001100: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +00001110: 3e20 272d 2d72 6573 746f 7265 5472 6565 > '--restoreTree │ │ │ │ +00001120: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +00001130: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',.. │ │ │ │ +00001140: 0909 0909 2020 2020 272d 6d75 7374 5f62 .... '-must_b │ │ │ │ +00001150: 6527 203d 3e20 2779 6573 2729 2c0a 0909 e' => 'yes'),... │ │ │ │ +00001160: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +00001170: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup │ │ │ │ +00001180: 526f 6f74 272c 0a09 0909 0909 2020 2020 Root',...... │ │ │ │ +00001190: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +000011a0: 272d 6227 2c0a 0909 0909 0920 2020 2027 '-b',...... ' │ │ │ │ +000011b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +000011c0: 2d62 6163 6b75 7052 6f6f 7427 2c0a 0909 -backupRoot',... │ │ │ │ +000011d0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ │ +000011e0: 2720 3d3e 2027 2729 2c0a 0909 0909 4f70 ' => ''),.....Op │ │ │ │ +000011f0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +00001200: 2720 3d3e 2027 7461 7267 6574 4469 7227 ' => 'targetDir' │ │ │ │ +00001210: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001220: 6f70 7469 6f6e 2720 3d3e 2027 2d74 272c option' => '-t', │ │ │ │ +00001230: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +00001240: 6c69 6173 2720 3d3e 2027 2d2d 7461 7267 lias' => '--targ │ │ │ │ +00001250: 6574 4469 7227 2c0a 0909 0909 0920 2020 etDir',...... │ │ │ │ +00001260: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ │ +00001270: 7327 2c0a 0909 0909 0920 2020 2027 2d6d s',...... '-m │ │ │ │ +00001280: 7573 745f 6265 2720 3d3e 2027 7965 7327 ust_be' => 'yes' │ │ │ │ +00001290: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +000012a0: 6577 2827 2d6e 616d 6527 203d 3e20 2766 ew('-name' => 'f │ │ │ │ +000012b0: 6c61 7427 2c0a 0909 0909 0920 2020 2027 lat',...... ' │ │ │ │ +000012c0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +000012d0: 2d2d 666c 6174 2729 2c0a 0909 0909 4f70 --flat'),.....Op │ │ │ │ +000012e0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +000012f0: 2720 3d3e 2027 6f76 6572 7772 6974 6527 ' => 'overwrite' │ │ │ │ +00001300: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001310: 6f70 7469 6f6e 2720 3d3e 2027 2d6f 272c option' => '-o', │ │ │ │ +00001320: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +00001330: 6c69 6173 2720 3d3e 2027 2d2d 6f76 6572 lias' => '--over │ │ │ │ +00001340: 7772 6974 6527 292c 0a09 0909 094f 7074 write'),.....Opt │ │ │ │ +00001350: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00001360: 203d 3e20 2774 6d70 4469 7227 2c0a 0909 => 'tmpDir',... │ │ │ │ +00001370: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ │ +00001380: 6f6e 2720 3d3e 2027 2d54 272c 0a09 0909 on' => '-T',.... │ │ │ │ +00001390: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ │ +000013a0: 2720 3d3e 2027 2d2d 746d 7064 6972 272c ' => '--tmpdir', │ │ │ │ +000013b0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ │ +000013c0: 756c 7427 203d 3e20 2474 6d70 6469 7229 ult' => $tmpdir) │ │ │ │ +000013d0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +000013e0: 7728 272d 6e61 6d65 2720 3d3e 2027 6e6f w('-name' => 'no │ │ │ │ +000013f0: 4861 7264 4c69 6e6b 7327 2c0a 0909 0909 HardLinks',..... │ │ │ │ +00001400: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +00001410: 2720 3d3e 2027 2d2d 6e6f 4861 7264 4c69 ' => '--noHardLi │ │ │ │ +00001420: 6e6b 7327 292c 0a09 0909 094f 7074 696f nks'),.....Optio │ │ │ │ +00001430: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001440: 3e20 276e 6f52 6573 746f 7265 5061 7261 > 'noRestorePara │ │ │ │ +00001450: 6c6c 656c 272c 0a09 0909 0909 2020 2020 llel',...... │ │ │ │ +00001460: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +00001470: 272d 7027 2c0a 0909 0909 0920 2020 2027 '-p',...... ' │ │ │ │ +00001480: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +00001490: 2d6e 6f52 6573 746f 7265 5061 7261 6c6c -noRestoreParall │ │ │ │ +000014a0: 656c 272c 0a09 0909 0909 2020 2020 272d el',...... '- │ │ │ │ +000014b0: 7061 7474 6572 6e27 203d 3e20 275c 415c pattern' => '\A\ │ │ │ │ +000014c0: 642b 5c5a 272c 0a09 0909 0909 2020 2020 d+\Z',...... │ │ │ │ +000014d0: 272d 6465 6661 756c 7427 203d 3e20 246e '-default' => $n │ │ │ │ +000014e0: 6f52 6573 746f 7265 5061 7261 6c6c 656c oRestoreParallel │ │ │ │ +000014f0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00001500: 6577 2827 2d6e 616d 6527 203d 3e20 2776 ew('-name' => 'v │ │ │ │ +00001510: 6572 626f 7365 272c 0a09 0909 0909 2020 erbose',...... │ │ │ │ +00001520: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00001530: 3e20 272d 7627 2c0a 0909 0909 0920 2020 > '-v',...... │ │ │ │ +00001540: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +00001550: 272d 2d76 6572 626f 7365 2729 2c0a 0909 '--verbose'),... │ │ │ │ +00001560: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ │ +00001570: 6e61 6d65 2720 3d3e 2027 6e6f 5265 7374 name' => 'noRest │ │ │ │ +00001580: 6f72 6564 272c 0a09 0909 0909 2020 2020 ored',...... │ │ │ │ +00001590: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ │ +000015a0: 272d 6e27 2c0a 0909 0909 0920 2020 2027 '-n',...... ' │ │ │ │ +000015b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ │ +000015c0: 2d6e 6f52 6573 746f 7265 6427 292c 0a09 -noRestored'),.. │ │ │ │ +000015d0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +000015e0: 2d6e 616d 6527 203d 3e20 276e 6f47 6e75 -name' => 'noGnu │ │ │ │ +000015f0: 4370 272c 0a09 0909 0909 2020 2020 272d Cp',...... '- │ │ │ │ +00001600: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +00001610: 2d6e 6f47 6e75 4370 2729 0a09 0909 095d -noGnuCp').....] │ │ │ │ +00001620: 0a09 0920 2020 2029 3b0a 0a24 4368 6563 ... );..$Chec │ │ │ │ +00001630: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar │ │ │ │ +00001640: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \@ARGV,. │ │ │ │ +00001650: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001660: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help │ │ │ │ +00001670: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00001680: 2020 293b 0a0a 2320 4175 7377 6572 7475 );..# Auswertu │ │ │ │ +00001690: 6e67 2064 6572 2050 6172 616d 6574 6572 ng der Parameter │ │ │ │ +000016a0: 0a6d 7920 2472 6573 746f 7265 5472 6565 .my $restoreTree │ │ │ │ +000016b0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000016c0: 744f 7074 5769 7468 5061 7228 2772 6573 tOptWithPar('res │ │ │ │ +000016d0: 746f 7265 5472 6565 2729 3b0a 6d79 2024 toreTree');.my $ │ │ │ │ +000016e0: 6261 636b 7570 526f 6f74 203d 2024 4368 backupRoot = $Ch │ │ │ │ +000016f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00001700: 7468 5061 7228 2762 6163 6b75 7052 6f6f thPar('backupRoo │ │ │ │ +00001710: 7427 293b 0a6d 7920 2474 6172 6765 7444 t');.my $targetD │ │ │ │ +00001720: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar-> │ │ │ │ +00001730: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t │ │ │ │ +00001740: 6172 6765 7444 6972 2729 3b0a 6d79 2024 argetDir');.my $ │ │ │ │ +00001750: 666c 6174 203d 2024 4368 6563 6b50 6172 flat = $CheckPar │ │ │ │ +00001760: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00001770: 6172 2827 666c 6174 2729 3b0a 6d79 2024 ar('flat');.my $ │ │ │ │ +00001780: 6f76 6572 7772 6974 6520 3d20 2443 6865 overwrite = $Che │ │ │ │ +00001790: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +000017a0: 686f 7574 5061 7228 276f 7665 7277 7269 houtPar('overwri │ │ │ │ +000017b0: 7465 2729 3b0a 2474 6d70 6469 7220 3d20 te');.$tmpdir = │ │ │ │ +000017c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000017d0: 7457 6974 6850 6172 2827 746d 7044 6972 tWithPar('tmpDir │ │ │ │ +000017e0: 2729 3b0a 6d79 2024 6e6f 4861 7264 4c69 ');.my $noHardLi │ │ │ │ +000017f0: 6e6b 7320 3d20 2443 6865 636b 5061 722d nks = $CheckPar- │ │ │ │ +00001800: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +00001810: 7228 276e 6f48 6172 644c 696e 6b73 2729 r('noHardLinks') │ │ │ │ +00001820: 3b0a 6d79 2024 6e6f 5265 7374 6f72 6550 ;.my $noRestoreP │ │ │ │ +00001830: 6172 616c 6c65 6c20 3d20 2443 6865 636b arallel = $Check │ │ │ │ +00001840: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00001850: 6172 2827 6e6f 5265 7374 6f72 6550 6172 ar('noRestorePar │ │ │ │ +00001860: 616c 6c65 6c27 293b 0a6d 7920 2476 6572 allel');.my $ver │ │ │ │ +00001870: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar │ │ │ │ +00001880: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00001890: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m │ │ │ │ +000018a0: 7920 246e 6f52 6573 746f 7265 6420 3d20 y $noRestored = │ │ │ │ +000018b0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +000018c0: 7457 6974 686f 7574 5061 7228 276e 6f52 tWithoutPar('noR │ │ │ │ +000018d0: 6573 746f 7265 6427 293b 0a6d 7920 246e estored');.my $n │ │ │ │ +000018e0: 6f47 6e75 4370 203d 2024 4368 6563 6b50 oGnuCp = $CheckP │ │ │ │ +000018f0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +00001900: 7450 6172 2827 6e6f 476e 7543 7027 293b tPar('noGnuCp'); │ │ │ │ +00001910: 0a0a 0a6d 7920 2470 724c 6f67 203d 2070 ...my $prLog = p │ │ │ │ +00001920: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k │ │ │ │ +00001930: 696e 6427 203d 3e20 5b27 493a 494e 464f ind' => ['I:INFO │ │ │ │ +00001940: 272c 2027 573a 5741 524e 494e 4727 2c20 ', 'W:WARNING', │ │ │ │ +00001950: 2745 3a45 5252 4f52 272c 0a09 0909 0920 'E:ERROR',..... │ │ │ │ +00001960: 2020 2020 2027 533a 5354 4154 4953 5449 'S:STATISTI │ │ │ │ +00001970: 4327 2c20 2744 3a44 4542 5547 272c 2027 C', 'D:DEBUG', ' │ │ │ │ +00001980: 563a 5645 5253 494f 4e27 5d29 3b0a 0a24 V:VERSION']);..$ │ │ │ │ +00001990: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +000019a0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ │ +000019b0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +000019c0: 7461 7267 6574 2064 6972 6563 746f 7279 target directory │ │ │ │ +000019d0: 203c 2474 6172 6765 7444 6972 3e20 646f <$targetDir> do │ │ │ │ +000019e0: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist"],. │ │ │ │ +000019f0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ │ +00001a00: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless │ │ │ │ +00001a10: 282d 6420 2474 6172 6765 7444 6972 293b (-d $targetDir); │ │ │ │ +00001a20: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00001a30: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',. │ │ │ │ +00001a40: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00001a50: 205b 2224 5645 5253 494f 4e70 4e61 6d65 ["$VERSIONpName │ │ │ │ +00001a60: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA │ │ │ │ +00001a70: 434b 5550 5645 5253 494f 4e2c 2022 202e CKUPVERSION, " . │ │ │ │ +00001a80: 0a09 0909 2022 6275 696c 6420 2456 4552 .... "build $VER │ │ │ │ +00001a90: 5349 4f4e 7376 6e49 4422 5d29 0a20 2020 SIONsvnID"]). │ │ │ │ +00001aa0: 2069 6620 2476 6572 626f 7365 3b0a 0a6d if $verbose;..m │ │ │ │ +00001ab0: 7920 2472 7420 3d20 2472 6573 746f 7265 y $rt = $restore │ │ │ │ +00001ac0: 5472 6565 3b0a 6d79 2024 7265 7374 6f72 Tree;.my $restor │ │ │ │ +00001ad0: 6554 7265 6520 3d20 2661 6273 6f6c 7574 eTree = &absolut │ │ │ │ +00001ae0: 6550 6174 6828 2472 6573 746f 7265 5472 ePath($restoreTr │ │ │ │ +00001af0: 6565 293b 0a24 7265 7374 6f72 6554 7265 ee);.$restoreTre │ │ │ │ +00001b00: 6520 3d20 2431 2069 6620 2472 6573 746f e = $1 if $resto │ │ │ │ +00001b10: 7265 5472 6565 203d 7e20 2f28 2e2a 295c reTree =~ /(.*)\ │ │ │ │ +00001b20: 2f24 2f3b 2020 2320 7265 6d6f 7665 2074 /$/; # remove t │ │ │ │ +00001b30: 7261 696c 696e 6720 272f 270a 0a23 0a23 railing '/'..#.# │ │ │ │ +00001b40: 206d 6435 4368 6563 6b53 756d 202d 2044 md5CheckSum - D │ │ │ │ +00001b50: 6174 6569 2066 696e 6465 6e0a 2470 724c atei finden.$prL │ │ │ │ +00001b60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00001b70: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. │ │ │ │ +00001b80: 2027 2d73 7472 2720 3d3e 205b 2264 6972 '-str' => ["dir │ │ │ │ +00001b90: 6563 746f 7279 206f 7220 6669 6c65 203c ectory or file < │ │ │ │ +00001ba0: 2472 743e 2064 6f65 7320 6e6f 7420 6578 $rt> does not ex │ │ │ │ +00001bb0: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist"],.. '- │ │ │ │ +00001bc0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ │ +00001bd0: 756e 6c65 7373 2028 2d65 2024 7274 293b unless (-e $rt); │ │ │ │ +00001be0: 0a6d 7920 2469 7346 696c 6520 3d20 3120 .my $isFile = 1 │ │ │ │ +00001bf0: 6966 2028 2d66 2024 7274 293b 0a0a 6966 if (-f $rt);..if │ │ │ │ +00001c00: 2028 2462 6163 6b75 7052 6f6f 7429 0a7b ($backupRoot).{ │ │ │ │ +00001c10: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00001c20: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00001c30: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00001c40: 205b 2264 6972 6563 746f 7279 203c 2462 ["directory <$b │ │ │ │ +00001c50: 6163 6b75 7052 6f6f 743e 2064 6f65 7320 ackupRoot> does │ │ │ │ +00001c60: 6e6f 7420 6578 6974 225d 2c0a 0909 2020 not exit"],... │ │ │ │ +00001c70: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u │ │ │ │ +00001c80: 6e6c 6573 7320 282d 6420 2462 6163 6b75 nless (-d $backu │ │ │ │ +00001c90: 7052 6f6f 7429 3b0a 2020 2020 2462 6163 pRoot);. $bac │ │ │ │ +00001ca0: 6b75 7052 6f6f 7420 3d20 2661 6273 6f6c kupRoot = &absol │ │ │ │ +00001cb0: 7574 6550 6174 6828 2462 6163 6b75 7052 utePath($backupR │ │ │ │ +00001cc0: 6f6f 7429 3b0a 7d0a 656c 7365 0a7b 0a20 oot);.}.else.{. │ │ │ │ +00001cd0: 2020 206d 7920 2464 6972 203d 2024 7265 my $dir = $re │ │ │ │ +00001ce0: 7374 6f72 6554 7265 653b 0a20 2020 2024 storeTree;. $ │ │ │ │ +00001cf0: 6469 7220 3d7e 2073 2f28 5c2f 5c2e 292a dir =~ s/(\/\.)* │ │ │ │ +00001d00: 242f 2f3b 2020 2020 2020 2320 7265 6d6f $//; # remo │ │ │ │ +00001d10: 7665 2074 7261 696c 696e 6720 2f2e 0a0a ve trailing /... │ │ │ │ +00001d20: 2020 2020 2462 6163 6b75 7052 6f6f 7420 $backupRoot │ │ │ │ +00001d30: 3d20 756e 6465 663b 0a20 2020 2064 6f0a = undef;. do. │ │ │ │ +00001d40: 2020 2020 7b0a 0924 6469 7220 3d7e 2073 {..$dir =~ s │ │ │ │ +00001d50: 2f5c 2f5c 2e5c 2f2f 5c2f 2f67 3b20 2020 /\/\.\//\//g; │ │ │ │ +00001d60: 2320 7375 6273 7469 7475 7465 202f 2e2f # substitute /./ │ │ │ │ +00001d70: 202d 3e20 2f0a 0a09 2320 6665 7374 7374 -> /...# festst │ │ │ │ +00001d80: 656c 6c65 6e2c 206f 6220 6569 6e65 202e ellen, ob eine . │ │ │ │ +00001d90: 6d64 3573 756d 2044 6174 6569 2076 6f72 md5sum Datei vor │ │ │ │ +00001da0: 6861 6e64 656e 2069 7374 0a09 6966 2028 handen ist..if ( │ │ │ │ +00001db0: 2d66 2022 2464 6972 2f24 6368 6563 6b53 -f "$dir/$checkS │ │ │ │ +00001dc0: 756d 4669 6c65 2220 6f72 202d 6620 2224 umFile" or -f "$ │ │ │ │ +00001dd0: 6469 722f 2463 6865 636b 5375 6d46 696c dir/$checkSumFil │ │ │ │ +00001de0: 652e 627a 3222 290a 097b 0a09 2020 2020 e.bz2")..{.. │ │ │ │ +00001df0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00001e00: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00001e10: 0920 2027 2d73 7472 2720 3d3e 205b 2266 . '-str' => ["f │ │ │ │ +00001e20: 6f75 6e64 2069 6e66 6f20 6669 6c65 203c ound info file < │ │ │ │ +00001e30: 2463 6865 636b 5375 6d46 696c 653e 2069 $checkSumFile> i │ │ │ │ +00001e40: 6e20 2220 2e0a 0909 0909 2020 2020 2022 n " ...... " │ │ │ │ +00001e50: 6469 7265 6374 6f72 7920 3c24 6469 723e directory <$dir> │ │ │ │ +00001e60: 225d 290a 0909 6966 2028 2476 6572 626f "])...if ($verbo │ │ │ │ +00001e70: 7365 293b 0a09 2020 2020 2470 724c 6f67 se);.. $prLog │ │ │ │ +00001e80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00001e90: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ │ +00001ea0: 7472 2720 3d3e 0a09 0909 2020 5b22 666f tr' =>.... ["fo │ │ │ │ +00001eb0: 756e 6420 696e 666f 2066 696c 6520 3c24 und info file <$ │ │ │ │ +00001ec0: 6368 6563 6b53 756d 4669 6c65 3e20 6120 checkSumFile> a │ │ │ │ +00001ed0: 7365 636f 6e64 2074 696d 6520 696e 2022 second time in " │ │ │ │ +00001ee0: 202e 0a09 0909 2020 2022 3c24 6469 723e ..... "<$dir> │ │ │ │ +00001ef0: 2c20 6669 7273 7420 7469 6d65 2066 6f75 , first time fou │ │ │ │ +00001f00: 6e64 2069 6e20 3c24 6261 636b 7570 526f nd in <$backupRo │ │ │ │ +00001f10: 6f74 3e22 5d2c 0a09 0909 2020 272d 6578 ot>"],.... '-ex │ │ │ │ +00001f20: 6974 2720 3d3e 2031 290a 0909 6966 2028 it' => 1)...if ( │ │ │ │ +00001f30: 2462 6163 6b75 7052 6f6f 7429 3b0a 0a09 $backupRoot);... │ │ │ │ +00001f40: 2020 2020 2462 6163 6b75 7052 6f6f 7420 $backupRoot │ │ │ │ +00001f50: 3d20 2464 6972 3b0a 097d 0a0a 0928 2464 = $dir;..}...($d │ │ │ │ +00001f60: 6972 2c20 245f 2920 3d20 2673 706c 6974 ir, $_) = &split │ │ │ │ +00001f70: 4669 6c65 4469 7228 2464 6972 293b 0a20 FileDir($dir);. │ │ │ │ +00001f80: 2020 207d 2077 6869 6c65 2028 2464 6972 } while ($dir │ │ │ │ +00001f90: 206e 6520 272f 2729 3b0a 0a0a 2020 2020 ne '/');... │ │ │ │ +00001fa0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00001fb0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00001fc0: 2020 272d 7374 7227 203d 3e20 5b22 6469 '-str' => ["di │ │ │ │ +00001fd0: 6420 6e6f 7420 6669 6e64 2069 6e66 6f20 d not find info │ │ │ │ +00001fe0: 6669 6c65 203c 2463 6865 636b 5375 6d46 file <$checkSumF │ │ │ │ +00001ff0: 696c 653e 225d 2c0a 0909 2020 272d 6578 ile>"],... '-ex │ │ │ │ +00002000: 6974 2720 3d3e 2031 290a 0975 6e6c 6573 it' => 1)..unles │ │ │ │ +00002010: 7320 2824 6261 636b 7570 526f 6f74 293b s ($backupRoot); │ │ │ │ +00002020: 0a7d 0a0a 2324 7265 7374 6f72 6554 7265 .}..#$restoreTre │ │ │ │ +00002030: 6520 3d7e 2073 2f24 6261 636b 7570 526f e =~ s/$backupRo │ │ │ │ +00002040: 6f74 5c2f 2a2f 2f3b 0a24 7265 7374 6f72 ot\/*//;.$restor │ │ │ │ +00002050: 6554 7265 6520 3d20 7375 6273 7472 2824 eTree = substr($ │ │ │ │ +00002060: 7265 7374 6f72 6554 7265 652c 206c 656e restoreTree, len │ │ │ │ +00002070: 6774 6828 2462 6163 6b75 7052 6f6f 7429 gth($backupRoot) │ │ │ │ +00002080: 202b 2031 293b 0a0a 0a23 205e 5e5e 0a23 + 1);...# ^^^.# │ │ │ │ +00002090: 2024 6261 636b 7570 526f 6f74 2062 6569 $backupRoot bei │ │ │ │ +000020a0: 6e68 616c 7465 7420 6a65 747a 7420 6465 nhaltet jetzt de │ │ │ │ +000020b0: 6e20 5066 6164 207a 756d 2041 7263 6869 n Pfad zum Archi │ │ │ │ +000020c0: 760a 2320 2472 6573 746f 7265 5472 6565 v.# $restoreTree │ │ │ │ +000020d0: 2062 6569 6e68 616c 7465 7420 6a65 747a beinhaltet jetz │ │ │ │ +000020e0: 7420 6465 6e20 7265 6c61 7469 7665 6e20 t den relativen │ │ │ │ +000020f0: 5066 6164 2069 6e6e 6572 6861 6c62 2064 Pfad innerhalb d │ │ │ │ +00002100: 6573 2041 7263 6869 7673 0a0a 2470 724c es Archivs..$prL │ │ │ │ +00002110: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00002120: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. │ │ │ │ +00002130: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ │ +00002140: 6e6f 7420 7265 7374 6f72 6520 3c24 6261 not restore <$ba │ │ │ │ +00002150: 636b 7570 526f 6f74 3e20 6265 6361 7573 ckupRoot> becaus │ │ │ │ +00002160: 6520 6f66 2075 6e72 6573 6f6c 7665 6420 e of unresolved │ │ │ │ +00002170: 6c69 6e6b 7322 2c0a 0920 2020 2020 2022 links",.. " │ │ │ │ +00002180: 7275 6e20 7374 6f72 6542 6163 6b75 7055 run storeBackupU │ │ │ │ +00002190: 7064 6174 6542 6163 6b75 702e 706c 2074 pdateBackup.pl t │ │ │ │ +000021a0: 6f20 7265 736f 6c76 6522 5d2c 0a09 2020 o resolve"],.. │ │ │ │ +000021b0: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ │ +000021c0: 290a 2020 2020 6966 202d 6520 2224 6261 ). if -e "$ba │ │ │ │ +000021d0: 636b 7570 526f 6f74 2f2e 7374 6f72 6542 ckupRoot/.storeB │ │ │ │ +000021e0: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF │ │ │ │ +000021f0: 696c 652e 627a 3222 3b0a 0a6d 7920 2825 ile.bz2";..my (% │ │ │ │ +00002200: 7365 7450 6572 6d44 6972 7329 3b0a 756e setPermDirs);.un │ │ │ │ +00002210: 6c65 7373 2028 2466 6c61 7429 0a7b 0a20 less ($flat).{. │ │ │ │ +00002220: 2020 2023 2053 7562 7472 6565 2075 6e74 # Subtree unt │ │ │ │ +00002230: 6572 2064 656d 205a 6965 6c64 6972 6563 er dem Zieldirec │ │ │ │ +00002240: 746f 7279 2065 727a 6575 6765 6e0a 2020 tory erzeugen. │ │ │ │ +00002250: 2020 263a 3a6d 616b 6546 696c 6550 6174 &::makeFilePat │ │ │ │ +00002260: 6828 2224 7461 7267 6574 4469 722f 2472 h("$targetDir/$r │ │ │ │ +00002270: 6573 746f 7265 5472 6565 222c 2024 7072 estoreTree", $pr │ │ │ │ +00002280: 4c6f 6729 3b0a 0a20 2020 206d 7920 2840 Log);.. my (@ │ │ │ │ +00002290: 6429 203d 2073 706c 6974 282f 5c2f 2b2f d) = split(/\/+/ │ │ │ │ +000022a0: 2c20 2472 6573 746f 7265 5472 6565 293b , $restoreTree); │ │ │ │ +000022b0: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. │ │ │ │ +000022c0: 666f 7220 2824 6920 3d20 3020 3b20 2469 for ($i = 0 ; $i │ │ │ │ +000022d0: 203c 2040 6420 3b20 2469 2b2b 290a 2020 < @d ; $i++). │ │ │ │ +000022e0: 2020 7b0a 0924 7365 7450 6572 6d44 6972 {..$setPermDir │ │ │ │ +000022f0: 737b 6a6f 696e 2827 2f27 2c20 4064 5b30 s{join('/', @d[0 │ │ │ │ +00002300: 2e2e 2469 5d29 7d20 3d20 313b 0a20 2020 ..$i])} = 1;. │ │ │ │ +00002310: 207d 0a7d 0a0a 230a 2320 4a65 7a74 2049 }.}..#.# Jezt I │ │ │ │ +00002320: 6e66 6f66 696c 6520 6569 6e6c 6573 656e nfofile einlesen │ │ │ │ +00002330: 2075 6e64 2064 6965 2067 6577 fc6e 7363 und die gew.nsc │ │ │ │ +00002340: 6874 656e 2044 6174 6569 656e 2061 7573 hten Dateien aus │ │ │ │ +00002350: 736f 7274 6965 7265 6e0a 230a 0a6d 7920 sortieren.#..my │ │ │ │ +00002360: 2472 6373 6620 3d20 7265 6164 4368 6563 $rcsf = readChec │ │ │ │ +00002370: 6b53 756d 4669 6c65 2d3e 6e65 7728 272d kSumFile->new('- │ │ │ │ +00002380: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' => │ │ │ │ +00002390: 0a09 0909 0920 2224 6261 636b 7570 526f ..... "$backupRo │ │ │ │ +000023a0: 6f74 2f24 6368 6563 6b53 756d 4669 6c65 ot/$checkSumFile │ │ │ │ +000023b0: 222c 0a09 0909 0920 272d 7072 4c6f 6727 ",..... '-prLog' │ │ │ │ +000023c0: 203d 3e20 2470 724c 6f67 293b 0a0a 6d79 => $prLog);..my │ │ │ │ +000023d0: 2024 666f 726b 203d 2070 6172 616c 6c65 $fork = paralle │ │ │ │ +000023e0: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max │ │ │ │ +000023f0: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no │ │ │ │ +00002400: 5265 7374 6f72 6550 6172 616c 6c65 6c2c RestoreParallel, │ │ │ │ +00002410: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog │ │ │ │ +00002420: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a23 ' => $prLog);..# │ │ │ │ +00002430: 6d79 2024 6d65 7461 203d 2024 7263 7366 my $meta = $rcsf │ │ │ │ +00002440: 2d3e 6765 744d 6574 6156 616c 4669 656c ->getMetaValFiel │ │ │ │ +00002450: 6428 293b 0a0a 236d 7920 2824 756e 636f d();..#my ($unco │ │ │ │ +00002460: 6d70 722c 2040 756e 636f 6d70 7250 6172 mpr, @uncomprPar │ │ │ │ +00002470: 2920 3d20 407b 2424 6d65 7461 7b27 756e ) = @{$$meta{'un │ │ │ │ +00002480: 636f 6d70 7265 7373 277d 7d3b 0a6d 7920 compress'}};.my │ │ │ │ +00002490: 2824 756e 636f 6d70 722c 2040 756e 636f ($uncompr, @unco │ │ │ │ +000024a0: 6d70 7250 6172 2920 3d20 407b 2472 6373 mprPar) = @{$rcs │ │ │ │ +000024b0: 662d 3e67 6574 496e 666f 5769 7468 5061 f->getInfoWithPa │ │ │ │ +000024c0: 7228 2775 6e63 6f6d 7072 6573 7327 297d r('uncompress')} │ │ │ │ +000024d0: 3b0a 236d 7920 2824 6370 2c20 4063 7050 ;.#my ($cp, @cpP │ │ │ │ +000024e0: 6172 2920 3d20 2827 6370 272c 2027 2d64 ar) = ('cp', '-d │ │ │ │ +000024f0: 5052 2729 3b0a 6d79 2028 2463 702c 2040 PR');.my ($cp, @ │ │ │ │ +00002500: 6370 5061 7229 203d 2028 2763 7027 2c20 cpPar) = ('cp', │ │ │ │ +00002510: 272d 6450 5227 293b 0a23 6d79 2024 706f '-dPR');.#my $po │ │ │ │ +00002520: 7374 6669 7820 3d20 2824 246d 6574 617b stfix = ($$meta{ │ │ │ │ +00002530: 2770 6f73 7466 6978 277d 292d 3e5b 305d 'postfix'})->[0] │ │ │ │ +00002540: 3b0a 6d79 2024 706f 7374 6669 7820 3d20 ;.my $postfix = │ │ │ │ +00002550: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi │ │ │ │ +00002560: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix') │ │ │ │ +00002570: 3b0a 236d 7920 2467 6e75 6370 203d 2028 ;.#my $gnucp = ( │ │ │ │ +00002580: 2424 6d65 7461 7b27 6370 4973 476e 7527 $$meta{'cpIsGnu' │ │ │ │ +00002590: 7d29 2d3e 5b30 5d3b 0a6d 7920 2467 6e75 })->[0];.my $gnu │ │ │ │ +000025a0: 6370 203d 2024 7263 7366 2d3e 6765 7449 cp = $rcsf->getI │ │ │ │ +000025b0: 6e66 6f57 6974 6850 6172 2827 6370 4973 nfoWithPar('cpIs │ │ │ │ +000025c0: 476e 7527 293b 0a24 676e 7563 7020 3d20 Gnu');.$gnucp = │ │ │ │ +000025d0: 2824 676e 7563 7020 6571 2027 7965 7327 ($gnucp eq 'yes' │ │ │ │ +000025e0: 2920 3f20 3120 3a20 303b 0a24 676e 7563 ) ? 1 : 0;.$gnuc │ │ │ │ +000025f0: 7020 3d20 3020 6966 2024 6e6f 476e 7543 p = 0 if $noGnuC │ │ │ │ +00002600: 703b 0a0a 246d 6169 6e3a 3a49 4f43 6f6d p;..$main::IOCom │ │ │ │ +00002610: 7072 6573 7344 6972 6563 7420 3d20 303b pressDirect = 0; │ │ │ │ +00002620: 0a69 6620 2824 756e 636f 6d70 7220 6571 .if ($uncompr eq │ │ │ │ +00002630: 2027 627a 6970 3227 206f 7220 2475 6e63 'bzip2' or $unc │ │ │ │ +00002640: 6f6d 7072 2065 7120 2762 756e 7a69 7032 ompr eq 'bunzip2 │ │ │ │ +00002650: 2729 0a7b 0a20 2020 2065 7661 6c20 2275 ').{. eval "u │ │ │ │ +00002660: 7365 2049 4f3a 3a55 6e63 6f6d 7072 6573 se IO::Uncompres │ │ │ │ +00002670: 733a 3a42 756e 7a69 7032 2071 7728 6275 s::Bunzip2 qw(bu │ │ │ │ +00002680: 6e7a 6970 3229 223b 0a20 2020 2069 6620 nzip2)";. if │ │ │ │ +00002690: 2824 4029 0a20 2020 207b 0a09 2470 724c ($@). {..$prL │ │ │ │ +000026a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000026b0: 2720 3d3e 2027 4927 2c0a 0909 2020 2020 ' => 'I',... │ │ │ │ +000026c0: 2020 272d 7374 7227 203d 3e20 5b22 706c '-str' => ["pl │ │ │ │ +000026d0: 6561 7365 2069 6e73 7461 6c6c 2049 4f3a ease install IO: │ │ │ │ +000026e0: 3a55 6e63 6f6d 7072 6573 733a 3a42 756e :Uncompress::Bun │ │ │ │ +000026f0: 7a69 7032 2066 726f 6d20 2220 2e0a 0909 zip2 from " .... │ │ │ │ +00002700: 0909 2022 4350 414e 2066 6f72 2062 6574 .. "CPAN for bet │ │ │ │ +00002710: 7465 7220 7065 7266 6f72 6d61 6e63 6522 ter performance" │ │ │ │ +00002720: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el │ │ │ │ +00002730: 7365 0a20 2020 207b 0a09 246d 6169 6e3a se. {..$main: │ │ │ │ +00002740: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec │ │ │ │ +00002750: 7420 3d20 313b 0a20 2020 207d 0a7d 0a0a t = 1;. }.}.. │ │ │ │ +00002760: 2320 6462 6d2d 4669 6c65 20f6 6666 6e65 # dbm-File .ffne │ │ │ │ +00002770: 6e0a 6d79 2025 4442 4d48 6172 644c 696e n.my %DBMHardLin │ │ │ │ +00002780: 6b3b 2020 2020 2020 2020 2320 6b65 793a k; # key: │ │ │ │ +00002790: 2064 6576 2d69 6e6f 6465 2028 6f64 6572 dev-inode (oder │ │ │ │ +000027a0: 2075 6e64 6566 292c 2076 616c 7565 3a20 undef), value: │ │ │ │ +000027b0: 6669 6c65 6e61 6d65 0a6d 7920 2568 6173 filename.my %has │ │ │ │ +000027c0: 546f 4265 4c69 6e6b 6564 203d 2028 293b ToBeLinked = (); │ │ │ │ +000027d0: 2023 2068 6965 7220 7765 7264 656e 2064 # hier werden d │ │ │ │ +000027e0: 6965 207a 7520 6c69 6e6b 656e 6465 6e20 ie zu linkenden │ │ │ │ +000027f0: 4461 7465 6965 6e20 6765 7361 6d6d 656c Dateien gesammel │ │ │ │ +00002800: 742c 0a20 2020 2020 2020 2020 2020 2020 t,. │ │ │ │ +00002810: 2020 2020 2020 2020 2020 2023 2062 6973 # bis │ │ │ │ +00002820: 2064 6965 2052 6566 6572 656e 7a64 6174 die Referenzdat │ │ │ │ +00002830: 6569 2076 6f6c 6c73 74e4 6e64 6967 207a ei vollst.ndig z │ │ │ │ +00002840: 7572 fc63 6b67 6573 6963 6865 7274 2069 ur.ckgesichert i │ │ │ │ +00002850: 7374 0a75 6e6c 6573 7320 2824 6e6f 4861 st.unless ($noHa │ │ │ │ +00002860: 7264 4c69 6e6b 7329 0a7b 0a20 2020 2064 rdLinks).{. d │ │ │ │ +00002870: 626d 6f70 656e 2825 4442 4d48 6172 644c bmopen(%DBMHardL │ │ │ │ +00002880: 696e 6b2c 2022 2474 6d70 6469 722f 7374 ink, "$tmpdir/st │ │ │ │ +00002890: 6272 6563 6f76 6572 2e24 2422 2c20 3036 brecover.$$", 06 │ │ │ │ +000028a0: 3030 293b 0a7d 0a0a 6d79 2024 6e6f 4669 00);.}..my $noFi │ │ │ │ +000028b0: 6c65 7343 6f70 7920 3d20 303b 0a6d 7920 lesCopy = 0;.my │ │ │ │ +000028c0: 246e 6f46 696c 6573 436f 6d70 7220 3d20 $noFilesCompr = │ │ │ │ +000028d0: 303b 0a6d 7920 246e 6f46 696c 6573 426c 0;.my $noFilesBl │ │ │ │ +000028e0: 6f63 6b65 6420 3d20 303b 0a6d 7920 246e ocked = 0;.my $n │ │ │ │ +000028f0: 6f53 796d 4c69 6e6b 7320 3d20 303b 0a6d oSymLinks = 0;.m │ │ │ │ +00002900: 7920 246e 6f4e 616d 6564 5069 7065 7320 y $noNamedPipes │ │ │ │ +00002910: 3d20 303b 0a6d 7920 246e 6f53 6f63 6b65 = 0;.my $noSocke │ │ │ │ +00002920: 7473 203d 2030 3b0a 6d79 2024 6e6f 426c ts = 0;.my $noBl │ │ │ │ +00002930: 6f63 6b44 6576 7320 3d20 303b 0a6d 7920 ockDevs = 0;.my │ │ │ │ +00002940: 246e 6f43 6861 7244 6576 7320 3d20 303b $noCharDevs = 0; │ │ │ │ +00002950: 0a6d 7920 246e 6f44 6972 7320 3d20 303b .my $noDirs = 0; │ │ │ │ +00002960: 0a6d 7920 2468 6172 644c 696e 6b73 203d .my $hardLinks = │ │ │ │ +00002970: 2030 3b0a 0a24 7265 7374 6f72 6554 7265 0;..$restoreTre │ │ │ │ +00002980: 6520 3d20 2727 2069 6620 2472 6573 746f e = '' if $resto │ │ │ │ +00002990: 7265 5472 6565 2065 7120 272e 273b 0a6d reTree eq '.';.m │ │ │ │ +000029a0: 7920 246c 7265 7374 6f72 6554 7265 6520 y $lrestoreTree │ │ │ │ +000029b0: 3d20 6c65 6e67 7468 2824 7265 7374 6f72 = length($restor │ │ │ │ +000029c0: 6554 7265 6529 3b0a 0a6d 7920 2474 6d70 eTree);..my $tmp │ │ │ │ +000029d0: 4469 7246 696c 6520 3d20 263a 3a75 6e69 DirFile = &::uni │ │ │ │ +000029e0: 7146 696c 654e 616d 6528 2224 746d 7064 qFileName("$tmpd │ │ │ │ +000029f0: 6972 2f73 7462 7552 6563 2e22 293b 0a26 ir/stbuRec.");.& │ │ │ │ +00002a00: 3a3a 6368 6563 6b44 656c 5379 6d4c 696e ::checkDelSymLin │ │ │ │ +00002a10: 6b28 2474 6d70 4469 7246 696c 652c 2024 k($tmpDirFile, $ │ │ │ │ +00002a20: 7072 4c6f 672c 2030 7830 3129 3b0a 6c6f prLog, 0x01);.lo │ │ │ │ +00002a30: 6361 6c20 2a44 4952 4649 4c45 3b0a 6f70 cal *DIRFILE;.op │ │ │ │ +00002a40: 656e 2844 4952 4649 4c45 2c20 223e 2024 en(DIRFILE, "> $ │ │ │ │ +00002a50: 746d 7044 6972 4669 6c65 2229 206f 720a tmpDirFile") or. │ │ │ │ +00002a60: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00002a70: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00002a80: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => │ │ │ │ +00002a90: 5b22 6361 6e6e 6f74 206f 7065 6e20 3c24 ["cannot open <$ │ │ │ │ +00002aa0: 746d 7044 6972 4669 6c65 3e2c 2065 7869 tmpDirFile>, exi │ │ │ │ +00002ab0: 7469 6e67 225d 2c0a 0909 2020 272d 6164 ting"],... '-ad │ │ │ │ +00002ac0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__, │ │ │ │ +00002ad0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 2020 __LINE__],... │ │ │ │ +00002ae0: 272d 6578 6974 2720 3d3e 2031 293b 0a63 '-exit' => 1);.c │ │ │ │ +00002af0: 686d 6f64 2030 3630 302c 2024 746d 7044 hmod 0600, $tmpD │ │ │ │ +00002b00: 6972 4669 6c65 3b0a 0a6d 7920 2824 6d64 irFile;..my ($md │ │ │ │ +00002b10: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d │ │ │ │ +00002b20: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB │ │ │ │ +00002b30: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $ │ │ │ │ +00002b40: 6d74 696d 652c 2024 6174 696d 652c 0a20 mtime, $atime,. │ │ │ │ +00002b50: 2020 2024 7369 7a65 2c20 2475 6964 2c20 $size, $uid, │ │ │ │ +00002b60: 2467 6964 2c20 246d 6f64 652c 2024 6669 $gid, $mode, $fi │ │ │ │ +00002b70: 6c65 6e61 6d65 293b 0a23 7072 696e 7420 lename);.#print │ │ │ │ +00002b80: 2272 6573 746f 7265 5472 6565 203d 203c "restoreTree = < │ │ │ │ +00002b90: 2472 6573 746f 7265 5472 6565 3e5c 6e22 $restoreTree>\n" │ │ │ │ +00002ba0: 3b0a 2370 7269 6e74 2022 6c72 6573 746f ;.#print "lresto │ │ │ │ +00002bb0: 7265 5472 6565 203d 203c 246c 7265 7374 reTree = <$lrest │ │ │ │ +00002bc0: 6f72 6554 7265 653e 5c6e 223b 0a23 7072 oreTree>\n";.#pr │ │ │ │ +00002bd0: 696e 7420 2269 7346 696c 6520 3d20 3c24 int "isFile = <$ │ │ │ │ +00002be0: 6973 4669 6c65 3e5c 6e22 3b0a 7768 696c isFile>\n";.whil │ │ │ │ +00002bf0: 6520 2828 2824 6d64 3573 756d 2c20 2463 e ((($md5sum, $c │ │ │ │ +00002c00: 6f6d 7072 2c20 2464 6576 496e 6f64 652c ompr, $devInode, │ │ │ │ +00002c10: 2024 696e 6f64 6542 6163 6b75 702c 2024 $inodeBackup, $ │ │ │ │ +00002c20: 6374 696d 652c 2024 6d74 696d 652c 2024 ctime, $mtime, $ │ │ │ │ +00002c30: 6174 696d 652c 0a09 2024 7369 7a65 2c20 atime,.. $size, │ │ │ │ +00002c40: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod │ │ │ │ +00002c50: 652c 2024 6669 6c65 6e61 6d65 2920 3d20 e, $filename) = │ │ │ │ +00002c60: 2472 6373 662d 3e6e 6578 744c 696e 6528 $rcsf->nextLine( │ │ │ │ +00002c70: 2929 203e 2030 290a 7b0a 2020 2020 6d79 )) > 0).{. my │ │ │ │ +00002c80: 2024 6620 3d20 2466 696c 656e 616d 653b $f = $filename; │ │ │ │ +00002c90: 0a20 2020 2069 6620 2865 7869 7374 7328 . if (exists( │ │ │ │ +00002ca0: 2473 6574 5065 726d 4469 7273 7b24 667d $setPermDirs{$f} │ │ │ │ +00002cb0: 2929 0a20 2020 207b 0a09 6368 6f77 6e20 )). {..chown │ │ │ │ +00002cc0: 2475 6964 2c20 2467 6964 2c20 2224 7461 $uid, $gid, "$ta │ │ │ │ +00002cd0: 7267 6574 4469 722f 2466 223b 0a09 6368 rgetDir/$f";..ch │ │ │ │ +00002ce0: 6d6f 6420 246d 6f64 652c 2022 2474 6172 mod $mode, "$tar │ │ │ │ +00002cf0: 6765 7444 6972 2f24 6622 3b0a 0975 7469 getDir/$f";..uti │ │ │ │ +00002d00: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim │ │ │ │ +00002d10: 652c 2022 2474 6172 6765 7444 6972 2f24 e, "$targetDir/$ │ │ │ │ +00002d20: 6622 3b0a 2020 2020 7d0a 2020 2020 6966 f";. }. if │ │ │ │ +00002d30: 2028 2469 7346 696c 6520 616e 6420 6c65 ($isFile and le │ │ │ │ +00002d40: 6e67 7468 2824 6d64 3573 756d 2920 3d3d ngth($md5sum) == │ │ │ │ +00002d50: 2033 3229 0a20 2020 207b 0a09 2466 202e 32). {..$f . │ │ │ │ +00002d60: 3d20 2470 6f73 7466 6978 2069 6620 2824 = $postfix if ($ │ │ │ │ +00002d70: 636f 6d70 7220 6571 2027 6327 293b 0a20 compr eq 'c');. │ │ │ │ +00002d80: 2020 207d 0a23 7072 696e 7420 2266 726f }.#print "fro │ │ │ │ +00002d90: 6d20 2e6d 6435 4368 6563 6b53 756d 733a m .md5CheckSums: │ │ │ │ +00002da0: 203c 2466 3e20 3c24 7265 7374 6f72 6554 <$f> <$restoreT │ │ │ │ +00002db0: 7265 653e 2024 6c72 6573 746f 7265 5472 ree> $lrestoreTr │ │ │ │ +00002dc0: 6565 5c6e 223b 0a20 2020 2069 6620 2824 ee\n";. if ($ │ │ │ │ +00002dd0: 7265 7374 6f72 6554 7265 6520 6571 2027 restoreTree eq ' │ │ │ │ +00002de0: 270a 096f 7220 2224 7265 7374 6f72 6554 '..or "$restoreT │ │ │ │ +00002df0: 7265 652f 2220 6571 2073 7562 7374 7228 ree/" eq substr( │ │ │ │ +00002e00: 2224 662f 222c 2030 2c20 246c 7265 7374 "$f/", 0, $lrest │ │ │ │ +00002e10: 6f72 6554 7265 6520 2b20 3129 0a09 6f72 oreTree + 1)..or │ │ │ │ +00002e20: 2028 2469 7346 696c 6520 616e 6420 2472 ($isFile and $r │ │ │ │ +00002e30: 6573 746f 7265 5472 6565 2065 7120 2466 estoreTree eq $f │ │ │ │ +00002e40: 2929 0a20 2020 207b 0a23 7072 696e 7420 )). {.#print │ │ │ │ +00002e50: 222d 2d2d 3e20 7265 7374 6f72 6521 5c6e "---> restore!\n │ │ │ │ +00002e60: 223b 0a09 6d79 2024 7461 7267 6574 4669 ";..my $targetFi │ │ │ │ +00002e70: 6c65 3b0a 0969 6620 2824 666c 6174 290a le;..if ($flat). │ │ │ │ +00002e80: 097b 0a09 2020 2020 2824 5f2c 2024 7461 .{.. ($_, $ta │ │ │ │ +00002e90: 7267 6574 4669 6c65 2920 3d20 2673 706c rgetFile) = &spl │ │ │ │ +00002ea0: 6974 4669 6c65 4469 7228 2466 696c 656e itFileDir($filen │ │ │ │ +00002eb0: 616d 6529 3b0a 0920 2020 2024 7461 7267 ame);.. $targ │ │ │ │ +00002ec0: 6574 4669 6c65 203d 2022 2474 6172 6765 etFile = "$targe │ │ │ │ +00002ed0: 7444 6972 2f24 7461 7267 6574 4669 6c65 tDir/$targetFile │ │ │ │ +00002ee0: 223b 0a09 7d0a 0965 6c73 650a 097b 0a09 ";..}..else..{.. │ │ │ │ +00002ef0: 2020 2020 2474 6172 6765 7446 696c 6520 $targetFile │ │ │ │ +00002f00: 3d20 2224 7461 7267 6574 4469 722f 2466 = "$targetDir/$f │ │ │ │ +00002f10: 696c 656e 616d 6522 3b0a 097d 0a0a 096d ilename";..}...m │ │ │ │ +00002f20: 7920 2475 7365 476e 7543 7020 3d20 2467 y $useGnuCp = $g │ │ │ │ +00002f30: 6e75 6370 2061 6e64 2028 246d 6435 7375 nucp and ($md5su │ │ │ │ +00002f40: 6d20 6571 2027 736f 636b 6574 2720 6f72 m eq 'socket' or │ │ │ │ +00002f50: 0a09 0909 0920 2020 246d 6435 7375 6d20 ..... $md5sum │ │ │ │ +00002f60: 6571 2027 626c 6f63 6b64 6576 2720 6f72 eq 'blockdev' or │ │ │ │ +00002f70: 0a09 0909 0920 2020 246d 6435 7375 6d20 ..... $md5sum │ │ │ │ +00002f80: 6571 2027 6368 6172 6465 7627 293b 0a0a eq 'chardev');.. │ │ │ │ +00002f90: 0969 6620 2824 6d64 3573 756d 2065 7120 .if ($md5sum eq │ │ │ │ +00002fa0: 2764 6972 2729 0a09 7b0a 0920 2020 2069 'dir')..{.. i │ │ │ │ +00002fb0: 6620 286e 6f74 2024 666c 6174 2061 6e64 f (not $flat and │ │ │ │ +00002fc0: 206e 6f74 202d 6520 2474 6172 6765 7446 not -e $targetF │ │ │ │ +00002fd0: 696c 6529 0a09 2020 2020 7b0a 0909 2b2b ile).. {...++ │ │ │ │ +00002fe0: 246e 6f44 6972 733b 0a09 0924 7072 4c6f $noDirs;...$prLo │ │ │ │ +00002ff0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00003000: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... │ │ │ │ +00003010: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +00003020: 2020 2020 205b 2263 616e 6e6f 7420 6372 ["cannot cr │ │ │ │ +00003030: 6561 7465 2064 6972 6563 746f 7279 203c eate directory < │ │ │ │ +00003040: 2474 6172 6765 7446 696c 653e 225d 2c0a $targetFile>"],. │ │ │ │ +00003050: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit' │ │ │ │ +00003060: 203d 3e20 3129 0a09 0920 2020 2075 6e6c => 1)... unl │ │ │ │ +00003070: 6573 7320 6d6b 6469 7220 2474 6172 6765 ess mkdir $targe │ │ │ │ +00003080: 7446 696c 653b 0a09 0963 686f 776e 2024 tFile;...chown $ │ │ │ │ +00003090: 7569 642c 2024 6769 642c 2024 7461 7267 uid, $gid, $targ │ │ │ │ +000030a0: 6574 4669 6c65 3b0a 2309 0963 686d 6f64 etFile;.#..chmod │ │ │ │ +000030b0: 2024 6d6f 6465 2c20 2474 6172 6765 7446 $mode, $targetF │ │ │ │ +000030c0: 696c 653b 0a23 0909 7574 696d 6520 2461 ile;.#..utime $a │ │ │ │ +000030d0: 7469 6d65 2c20 246d 7469 6d65 2c20 2474 time, $mtime, $t │ │ │ │ +000030e0: 6172 6765 7446 696c 653b 0a0a 0909 6d79 argetFile;....my │ │ │ │ +000030f0: 2024 7772 203d 2024 7461 7267 6574 4669 $wr = $targetFi │ │ │ │ +00003100: 6c65 3b0a 0909 2477 7220 3d7e 2073 2f5c le;...$wr =~ s/\ │ │ │ │ +00003110: 6e2f 5c30 2f6f 673b 0a09 0970 7269 6e74 n/\0/og;...print │ │ │ │ +00003120: 2044 4952 4649 4c45 2022 2461 7469 6d65 DIRFILE "$atime │ │ │ │ +00003130: 2024 6d74 696d 6520 246d 6f64 6520 2477 $mtime $mode $w │ │ │ │ +00003140: 725c 6e22 3b0a 0a09 0924 7072 4c6f 672d r\n";....$prLog- │ │ │ │ +00003150: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00003160: 3e20 2749 272c 0a09 0909 2020 2020 2020 > 'I',.... │ │ │ │ +00003170: 272d 7374 7227 203d 3e20 5b22 6d6b 6469 '-str' => ["mkdi │ │ │ │ +00003180: 7220 2474 6172 6765 7446 696c 6522 5d29 r $targetFile"]) │ │ │ │ +00003190: 0a09 0920 2020 2069 6620 2824 7665 7262 ... if ($verb │ │ │ │ +000031a0: 6f73 6529 3b0a 0920 2020 207d 0a09 7d0a ose);.. }..}. │ │ │ │ +000031b0: 0965 6c73 6966 2028 246d 6435 7375 6d20 .elsif ($md5sum │ │ │ │ +000031c0: 6571 2027 7379 6d6c 696e 6b27 290a 097b eq 'symlink')..{ │ │ │ │ +000031d0: 0a09 2020 2020 756e 6c65 7373 2028 246e .. unless ($n │ │ │ │ +000031e0: 6f48 6172 644c 696e 6b73 290a 0920 2020 oHardLinks).. │ │ │ │ +000031f0: 207b 0a09 0969 6620 2865 7869 7374 7328 {...if (exists( │ │ │ │ +00003200: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de │ │ │ │ +00003210: 7649 6e6f 6465 7d29 2920 2020 2320 6d75 vInode})) # mu │ │ │ │ +00003220: 7373 206e 7572 2067 656c 696e 6b74 2077 ss nur gelinkt w │ │ │ │ +00003230: 6572 6465 6e0a 0909 7b0a 0909 2020 2020 erden...{... │ │ │ │ +00003240: 6966 2028 6c69 6e6b 2024 4442 4d48 6172 if (link $DBMHar │ │ │ │ +00003250: 644c 696e 6b7b 2464 6576 496e 6f64 657d dLink{$devInode} │ │ │ │ +00003260: 2c20 2474 6172 6765 7446 696c 6529 0a09 , $targetFile).. │ │ │ │ +00003270: 0920 2020 207b 0a09 0909 2470 724c 6f67 . {....$prLog │ │ │ │ +00003280: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00003290: 3d3e 2027 4927 2c0a 0909 0909 2020 2020 => 'I',..... │ │ │ │ +000032a0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ │ +000032b0: 2020 2020 2020 5b22 6c69 6e6b 2022 202e ["link " . │ │ │ │ +000032c0: 2024 4442 4d48 6172 644c 696e 6b7b 2464 $DBMHardLink{$d │ │ │ │ +000032d0: 6576 496e 6f64 657d 202e 0a09 0909 0920 evInode} ...... │ │ │ │ +000032e0: 2020 2020 2020 2220 2474 6172 6765 7446 " $targetF │ │ │ │ +000032f0: 696c 6522 5d29 0a09 0909 2020 2020 6966 ile"]).... if │ │ │ │ +00003300: 2024 7665 7262 6f73 653b 0a23 0909 0975 $verbose;.#...u │ │ │ │ +00003310: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt │ │ │ │ +00003320: 696d 652c 2024 663b 0a09 0909 2b2b 2468 ime, $f;....++$h │ │ │ │ +00003330: 6172 644c 696e 6b73 3b0a 0909 2020 2020 ardLinks;... │ │ │ │ +00003340: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... │ │ │ │ +00003350: 2020 207b 0a09 0909 2470 724c 6f67 2d3e {....$prLog-> │ │ │ │ +00003360: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00003370: 2027 4527 2c0a 0909 0909 2020 2020 2020 'E',..... │ │ │ │ +00003380: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... │ │ │ │ +00003390: 2020 2020 5b22 6661 696c 6564 3a20 6c69 ["failed: li │ │ │ │ +000033a0: 6e6b 2022 202e 0a09 0909 0920 2020 2020 nk " ...... │ │ │ │ +000033b0: 2020 2444 424d 4861 7264 4c69 6e6b 7b24 $DBMHardLink{$ │ │ │ │ +000033c0: 6465 7649 6e6f 6465 7d20 2e0a 0909 0909 devInode} ...... │ │ │ │ +000033d0: 2020 2020 2020 2022 2024 7461 7267 6574 " $target │ │ │ │ +000033e0: 4669 6c65 225d 293b 0a09 0920 2020 207d File"]);... } │ │ │ │ +000033f0: 0a09 0920 2020 2067 6f74 6f20 636f 6e74 ... goto cont │ │ │ │ +00003400: 4c6f 6f70 3b0a 0909 7d0a 0909 656c 7365 Loop;...}...else │ │ │ │ +00003410: 0a09 097b 0a09 0920 2020 2024 4442 4d48 ...{... $DBMH │ │ │ │ +00003420: 6172 644c 696e 6b7b 2464 6576 496e 6f64 ardLink{$devInod │ │ │ │ +00003430: 657d 203d 2024 7461 7267 6574 4669 6c65 e} = $targetFile │ │ │ │ +00003440: 3b0a 0909 7d0a 0920 2020 207d 0a09 2020 ;...}.. }.. │ │ │ │ +00003450: 2020 6d79 2024 6c69 6e6b 546f 203d 2072 my $linkTo = r │ │ │ │ +00003460: 6561 646c 696e 6b20 2224 6261 636b 7570 eadlink "$backup │ │ │ │ +00003470: 526f 6f74 2f24 6669 6c65 6e61 6d65 223b Root/$filename"; │ │ │ │ +00003480: 0a09 2020 2020 6966 2028 6e6f 7420 246f .. if (not $o │ │ │ │ +00003490: 7665 7277 7269 7465 2061 6e64 202d 6520 verwrite and -e │ │ │ │ +000034a0: 2474 6172 6765 7446 696c 6529 0a09 2020 $targetFile).. │ │ │ │ +000034b0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +000034c0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000034d0: 5727 2c0a 0909 0920 2020 2020 2027 2d73 W',.... '-s │ │ │ │ +000034e0: 7472 2720 3d3e 205b 2274 6172 6765 7420 tr' => ["target │ │ │ │ +000034f0: 2474 6172 6765 7446 696c 6520 616c 7265 $targetFile alre │ │ │ │ +00003500: 6164 7920 6578 6973 7473 3a22 2c0a 0909 ady exists:",... │ │ │ │ +00003510: 0909 0920 225c 746c 6e20 2d73 2024 6c69 ... "\tln -s $li │ │ │ │ +00003520: 6e6b 546f 2024 7461 7267 6574 4669 6c65 nkTo $targetFile │ │ │ │ +00003530: 225d 293b 0a09 2020 2020 7d0a 0920 2020 "]);.. }.. │ │ │ │ +00003540: 2065 6c73 650a 0920 2020 207b 0a09 092b else.. {...+ │ │ │ │ +00003550: 2b24 6e6f 5379 6d4c 696e 6b73 3b0a 0909 +$noSymLinks;... │ │ │ │ +00003560: 7379 6d6c 696e 6b20 246c 696e 6b54 6f2c symlink $linkTo, │ │ │ │ +00003570: 2024 7461 7267 6574 4669 6c65 3b0a 0a09 $targetFile;... │ │ │ │ +00003580: 0923 2062 6569 2065 696e 6967 656e 2042 .# bei einigen B │ │ │ │ +00003590: 6574 7269 6562 7373 7973 7465 6d20 287a etriebssystem (z │ │ │ │ +000035a0: 2e42 2e20 4c69 6e75 7829 2077 6972 6420 .B. Linux) wird │ │ │ │ +000035b0: 6265 6920 4175 6672 7566 0a09 0923 2064 bei Aufruf...# d │ │ │ │ +000035c0: 6573 2053 7973 7465 6d63 616c 6c73 2063 es Systemcalls c │ │ │ │ +000035d0: 686d 6f64 2062 6569 2073 796d 6c69 6e6b hmod bei symlink │ │ │ │ +000035e0: 7320 6e69 6368 7420 6465 7220 5379 6d6c s nicht der Syml │ │ │ │ +000035f0: 696e 6b20 7365 6c62 7374 0a09 0923 2067 ink selbst...# g │ │ │ │ +00003600: 6561 656e 6465 7274 2c20 736f 6e64 6572 eaendert, sonder │ │ │ │ +00003610: 6e20 6469 6520 4461 7465 692c 2061 7566 n die Datei, auf │ │ │ │ +00003620: 2064 6965 2065 7220 7665 7277 6569 7374 die er verweist │ │ │ │ +00003630: 2e0a 0909 2320 2864 616e 6e20 6d75 7373 ....# (dann muss │ │ │ │ +00003640: 206c 6368 6f77 6e20 6765 6e6f 6d6d 656e lchown genommen │ │ │ │ +00003650: 2077 6572 6465 6e20 2d3e 2049 6e6b 6f6d werden -> Inkom │ │ │ │ +00003660: 7061 7469 6269 6c69 7461 6574 656e 213f patibilitaeten!? │ │ │ │ +00003670: 290a 0909 6d79 2024 6368 6f77 6e20 3d20 )...my $chown = │ │ │ │ +00003680: 666f 726b 5072 6f63 2d3e 6e65 7728 272d forkProc->new('- │ │ │ │ +00003690: 6578 6563 2720 3d3e 2027 6368 6f77 6e27 exec' => 'chown' │ │ │ │ +000036a0: 2c0a 0909 0909 0920 2027 2d70 6172 616d ,...... '-param │ │ │ │ +000036b0: 2720 3d3e 205b 272d 6827 2c20 2224 7569 ' => ['-h', "$ui │ │ │ │ +000036c0: 643a 2467 6964 222c 0a09 0909 0909 0920 d:$gid",....... │ │ │ │ +000036d0: 2020 2020 2020 2224 7461 7267 6574 4669 "$targetFi │ │ │ │ +000036e0: 6c65 225d 2c0a 0909 0909 0920 2027 2d6f le"],...... '-o │ │ │ │ +000036f0: 7574 5261 6e64 6f6d 2720 3d3e 2022 2474 utRandom' => "$t │ │ │ │ +00003700: 6d70 6469 722f 6368 6f77 6e2d 222c 0a09 mpdir/chown-",.. │ │ │ │ +00003710: 0909 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' = │ │ │ │ +00003720: 3e20 2470 724c 6f67 293b 0a09 0924 6368 > $prLog);...$ch │ │ │ │ +00003730: 6f77 6e2d 3e77 6169 7428 293b 0a23 0909 own->wait();.#.. │ │ │ │ +00003740: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m │ │ │ │ +00003750: 7469 6d65 2c20 2474 6172 6765 7446 696c time, $targetFil │ │ │ │ +00003760: 653b 0a09 0924 7072 4c6f 672d 3e70 7269 e;...$prLog->pri │ │ │ │ +00003770: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00003780: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +00003790: 7227 203d 3e20 5b22 6c6e 202d 7320 246c r' => ["ln -s $l │ │ │ │ +000037a0: 696e 6b54 6f20 2474 6172 6765 7446 696c inkTo $targetFil │ │ │ │ +000037b0: 6522 5d29 0a09 0920 2020 2069 6620 2824 e"])... if ($ │ │ │ │ +000037c0: 7665 7262 6f73 6529 3b0a 0920 2020 207d verbose);.. } │ │ │ │ +000037d0: 0a09 7d0a 0965 6c73 6966 2028 246d 6435 ..}..elsif ($md5 │ │ │ │ +000037e0: 7375 6d20 6571 2027 7069 7065 2729 0a09 sum eq 'pipe').. │ │ │ │ +000037f0: 7b0a 0920 2020 206d 7920 246d 6b6e 6f64 {.. my $mknod │ │ │ │ +00003800: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new │ │ │ │ +00003810: 2827 2d65 7865 6327 203d 3e20 276d 6b6e ('-exec' => 'mkn │ │ │ │ +00003820: 6f64 272c 0a09 0909 0920 2020 2020 2027 od',..... ' │ │ │ │ +00003830: 2d70 6172 616d 2720 3d3e 205b 2224 7461 -param' => ["$ta │ │ │ │ +00003840: 7267 6574 4669 6c65 222c 2027 7027 5d2c rgetFile", 'p'], │ │ │ │ +00003850: 0a09 0909 0920 2020 2020 2027 2d6f 7574 ..... '-out │ │ │ │ +00003860: 5261 6e64 6f6d 2720 3d3e 2022 2474 6d70 Random' => "$tmp │ │ │ │ +00003870: 6469 722f 6d6b 6e6f 642d 222c 0a09 0909 dir/mknod-",.... │ │ │ │ +00003880: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ │ +00003890: 3d3e 2024 7072 4c6f 6729 3b0a 0920 2020 => $prLog);.. │ │ │ │ +000038a0: 2024 6d6b 6e6f 642d 3e77 6169 7428 293b $mknod->wait(); │ │ │ │ +000038b0: 0a09 2020 2020 6d79 2024 6f75 7420 3d20 .. my $out = │ │ │ │ +000038c0: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU │ │ │ │ +000038d0: 5428 293b 0a09 2020 2020 2470 724c 6f67 T();.. $prLog │ │ │ │ +000038e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000038f0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ │ +00003900: 7472 2720 3d3e 0a09 0909 2020 5b22 5354 tr' =>.... ["ST │ │ │ │ +00003910: 444f 5554 206f 6620 3c6d 6b6e 6f64 2024 DOUT of :", │ │ │ │ +00003930: 2040 246f 7574 5d29 0a09 0969 6620 2840 @$out])...if (@ │ │ │ │ +00003940: 246f 7574 203e 2030 293b 0a09 2020 2020 $out > 0);.. │ │ │ │ +00003950: 246f 7574 203d 2024 6d6b 6e6f 642d 3e67 $out = $mknod->g │ │ │ │ +00003960: 6574 5354 4445 5252 2829 3b0a 0920 2020 etSTDERR();.. │ │ │ │ +00003970: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00003980: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00003990: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ │ +000039a0: 0920 205b 2253 5444 4552 5220 6f66 203c . ["STDERR of < │ │ │ │ +000039b0: 6d6b 6e6f 6420 2474 6172 6765 7446 696c mknod $targetFil │ │ │ │ +000039c0: 6520 703e 3a22 2c20 4024 6f75 745d 290a e p>:", @$out]). │ │ │ │ +000039d0: 0909 6966 2028 4024 6f75 7420 3e20 3029 ..if (@$out > 0) │ │ │ │ +000039e0: 3b0a 0920 2020 2063 686f 776e 2024 7569 ;.. chown $ui │ │ │ │ +000039f0: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target │ │ │ │ +00003a00: 4669 6c65 3b0a 0920 2020 2063 686d 6f64 File;.. chmod │ │ │ │ +00003a10: 2024 6d6f 6465 2c20 2474 6172 6765 7446 $mode, $targetF │ │ │ │ +00003a20: 696c 653b 0a09 2020 2020 7574 696d 6520 ile;.. utime │ │ │ │ +00003a30: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, │ │ │ │ +00003a40: 2474 6172 6765 7446 696c 653b 0a09 7d0a $targetFile;..}. │ │ │ │ +00003a50: 0965 6c73 6966 2028 6c65 6e67 7468 2824 .elsif (length($ │ │ │ │ +00003a60: 6d64 3573 756d 2920 3d3d 2033 3220 6f72 md5sum) == 32 or │ │ │ │ +00003a70: 2020 2020 2023 206e 6f72 6d61 6c20 6669 # normal fi │ │ │ │ +00003a80: 6c65 0a09 2020 2020 2020 2024 7573 6547 le.. $useG │ │ │ │ +00003a90: 6e75 4370 2920 2020 2020 2020 2020 2020 nuCp) │ │ │ │ +00003aa0: 2020 2020 2020 2020 2320 7370 6563 6961 # specia │ │ │ │ +00003ab0: 6c20 6669 6c65 0a09 7b0a 2320 4964 6565 l file..{.# Idee │ │ │ │ +00003ac0: 207a 7572 204c f673 756e 6720 6465 7320 zur L.sung des │ │ │ │ +00003ad0: 7061 7261 6c6c 656c 6974 e474 732d 5072 parallelit.ts-Pr │ │ │ │ +00003ae0: 6f6c 656d 7320 6265 696d 205a 7572 fc63 olems beim Zur.c │ │ │ │ +00003af0: 6b73 6963 6865 726e 0a23 2069 6e20 5665 ksichern.# in Ve │ │ │ │ +00003b00: 7262 696e 6475 6e67 206d 6974 2064 656d rbindung mit dem │ │ │ │ +00003b10: 2053 6574 7a65 6e20 6465 7220 6861 7264 Setzen der hard │ │ │ │ +00003b20: 206c 696e 6b73 3a0a 2320 6572 7374 6520 links:.# erste │ │ │ │ +00003b30: 4461 7465 693a 0a23 2064 6576 2d69 6e6f Datei:.# dev-ino │ │ │ │ +00003b40: 6465 203d 3e20 272e 2720 696e 2064 626d de => '.' in dbm │ │ │ │ +00003b50: 2d66 696c 6520 2825 4442 4d48 6172 644c -file (%DBMHardL │ │ │ │ +00003b60: 696e 6b29 0a23 2066 6f72 6b2d 3e61 6464 ink).# fork->add │ │ │ │ +00003b70: 5f62 6c6f 636b 0a23 2077 656e 6e20 6665 _block.# wenn fe │ │ │ │ +00003b80: 7274 6967 2c20 6461 6e6e 2064 6576 2d69 rtig, dann dev-i │ │ │ │ +00003b90: 6e6f 6465 203d 3e20 6669 6c65 6e61 6d65 node => filename │ │ │ │ +00003ba0: 2069 6e20 6462 6d2d 6669 6c65 0a23 0a23 in dbm-file.#.# │ │ │ │ +00003bb0: 207a 7765 6974 6520 4461 7465 6920 2868 zweite Datei (h │ │ │ │ +00003bc0: 6172 6420 6c69 6e6b 290a 2320 6e61 6368 ard link).# nach │ │ │ │ +00003bd0: 7365 6865 6e20 696e 2064 626d 2d66 696c sehen in dbm-fil │ │ │ │ +00003be0: 650a 2320 7765 6e6e 2027 2e27 202d 3e20 e.# wenn '.' -> │ │ │ │ +00003bf0: 696e 2057 6172 7465 7363 686c 616e 6765 in Warteschlange │ │ │ │ +00003c00: 2068 e46e 6765 6e20 2868 6173 6829 0a23 h.ngen (hash).# │ │ │ │ +00003c10: 2077 656e 6e20 6669 6c65 6e61 6d65 202d wenn filename - │ │ │ │ +00003c20: 3e20 6c69 6e6b 656e 0a23 2075 6e74 656e > linken.# unten │ │ │ │ +00003c30: 2069 6d6d 6572 2057 6172 7465 7363 686c immer Warteschl │ │ │ │ +00003c40: 616e 6765 2069 6e20 6462 6d2d 6669 6c65 ange in dbm-file │ │ │ │ +00003c50: 20fc 6265 7270 72fc 6665 6e0a 0920 2020 .berpr.fen.. │ │ │ │ +00003c60: 206d 7920 2824 6f6c 642c 2024 6e65 7729 my ($old, $new) │ │ │ │ +00003c70: 203d 2028 756e 6465 662c 2075 6e64 6566 = (undef, undef │ │ │ │ +00003c80: 293b 0a0a 0920 2020 2075 6e6c 6573 7320 );... unless │ │ │ │ +00003c90: 2824 6e6f 4861 7264 4c69 6e6b 7329 2023 ($noHardLinks) # │ │ │ │ +00003ca0: 2048 6172 6420 4c69 6e6b 20fc 6265 7270 Hard Link .berp │ │ │ │ +00003cb0: 72fc 6665 6e0a 0920 2020 207b 0a09 0969 r.fen.. {...i │ │ │ │ +00003cc0: 6620 2865 7869 7374 7328 2444 424d 4861 f (exists($DBMHa │ │ │ │ +00003cd0: 7264 4c69 6e6b 7b24 6465 7649 6e6f 6465 rdLink{$devInode │ │ │ │ +00003ce0: 7d29 2920 2020 2320 6d75 7373 206e 7572 })) # muss nur │ │ │ │ +00003cf0: 2067 656c 696e 6b74 2077 6572 6465 6e0a gelinkt werden. │ │ │ │ +00003d00: 0909 7b0a 0909 2020 2020 2468 6173 546f ..{... $hasTo │ │ │ │ +00003d10: 4265 4c69 6e6b 6564 7b24 7461 7267 6574 BeLinked{$target │ │ │ │ +00003d20: 4669 6c65 7d20 3d20 5b24 6465 7649 6e6f File} = [$devIno │ │ │ │ +00003d30: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, │ │ │ │ +00003d40: 246d 6f64 652c 0a09 0909 0909 0920 2020 $mode,....... │ │ │ │ +00003d50: 2461 7469 6d65 2c20 246d 7469 6d65 5d3b $atime, $mtime]; │ │ │ │ +00003d60: 0a09 0920 2020 2024 6861 7264 4c69 6e6b ... $hardLink │ │ │ │ +00003d70: 732b 2b3b 0a09 0920 2020 2067 6f74 6f20 s++;... goto │ │ │ │ +00003d80: 636f 6e74 4c6f 6f70 3b0a 0909 7d0a 0909 contLoop;...}... │ │ │ │ +00003d90: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $ │ │ │ │ +00003da0: 4442 4d48 6172 644c 696e 6b7b 2464 6576 DBMHardLink{$dev │ │ │ │ +00003db0: 496e 6f64 657d 203d 2027 2e27 3b20 2020 Inode} = '.'; │ │ │ │ +00003dc0: 2320 6973 7420 696e 2042 6561 7262 6569 # ist in Bearbei │ │ │ │ +00003dd0: 7475 6e67 0a09 097d 0a09 2020 2020 7d0a tung...}.. }. │ │ │ │ +00003de0: 0920 2020 2069 6620 2824 636f 6d70 7220 . if ($compr │ │ │ │ +00003df0: 6571 2027 7527 2920 2020 2023 2077 6173 eq 'u') # was │ │ │ │ +00003e00: 206e 6f74 2063 6f6d 7072 6573 7365 642c not compressed, │ │ │ │ +00003e10: 2061 6c73 6f20 7661 6c69 6420 666f 7220 also valid for │ │ │ │ +00003e20: 736f 636b 6574 2c0a 0920 2020 207b 2020 socket,.. { │ │ │ │ +00003e30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003e40: 2020 2023 2062 6c6f 636b 6465 762c 2063 # blockdev, c │ │ │ │ +00003e50: 6861 7264 6576 0a09 0969 6620 286e 6f74 hardev...if (not │ │ │ │ +00003e60: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and │ │ │ │ +00003e70: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile). │ │ │ │ +00003e80: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog │ │ │ │ +00003e90: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00003ea0: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ │ +00003eb0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ │ +00003ec0: 7461 7267 6574 2024 7461 7267 6574 4669 target $targetFi │ │ │ │ +00003ed0: 6c65 2061 6c72 6561 6479 2065 7869 7374 le already exist │ │ │ │ +00003ee0: 733a 222c 0a09 0909 0920 2020 225c 7424 s:",..... "\t$ │ │ │ │ +00003ef0: 6370 2040 6370 5061 7220 2462 6163 6b75 cp @cpPar $backu │ │ │ │ +00003f00: 7052 6f6f 742f 2466 696c 656e 616d 6520 pRoot/$filename │ │ │ │ +00003f10: 2220 2e0a 0909 0909 2020 2022 2474 6172 " ...... "$tar │ │ │ │ +00003f20: 6765 7446 696c 6522 5d29 3b0a 0909 7d0a getFile"]);...}. │ │ │ │ +00003f30: 0909 656c 7365 0a09 097b 0a09 0920 2020 ..else...{... │ │ │ │ +00003f40: 2024 6e6f 4669 6c65 7343 6f70 792b 2b20 $noFilesCopy++ │ │ │ │ +00003f50: 756e 6c65 7373 2024 7573 6547 6e75 4370 unless $useGnuCp │ │ │ │ +00003f60: 3b0a 0909 2020 2020 246e 6f53 6f63 6b65 ;... $noSocke │ │ │ │ +00003f70: 7473 2b2b 2069 6620 246d 6435 7375 6d20 ts++ if $md5sum │ │ │ │ +00003f80: 6571 2027 736f 636b 6574 273b 0a09 0920 eq 'socket';... │ │ │ │ +00003f90: 2020 2024 6e6f 426c 6f63 6b44 6576 732b $noBlockDevs+ │ │ │ │ +00003fa0: 2b20 6966 2024 6d64 3573 756d 2065 7120 + if $md5sum eq │ │ │ │ +00003fb0: 2762 6c6f 636b 6465 7627 3b0a 0909 2020 'blockdev';... │ │ │ │ +00003fc0: 2020 246e 6f43 6861 7244 6576 732b 2b20 $noCharDevs++ │ │ │ │ +00003fd0: 6966 2024 6d64 3573 756d 2065 7120 2763 if $md5sum eq 'c │ │ │ │ +00003fe0: 6861 7264 6576 273b 0a0a 0909 2020 2020 hardev';.... │ │ │ │ +00003ff0: 2824 6f6c 642c 2024 6e65 7729 203d 0a09 ($old, $new) =.. │ │ │ │ +00004000: 0909 2466 6f72 6b2d 3e61 6464 5f62 6c6f ..$fork->add_blo │ │ │ │ +00004010: 636b 2827 2d65 7865 6327 203d 3e20 2463 ck('-exec' => $c │ │ │ │ +00004020: 702c 0a09 0909 0920 2020 272d 7061 7261 p,..... '-para │ │ │ │ +00004030: 6d27 203d 3e20 5b40 6370 5061 722c 2022 m' => [@cpPar, " │ │ │ │ +00004040: 2462 6163 6b75 7052 6f6f 742f 2466 696c $backupRoot/$fil │ │ │ │ +00004050: 656e 616d 6522 2c0a 0909 0909 0909 2224 ename",......."$ │ │ │ │ +00004060: 7461 7267 6574 4669 6c65 225d 2c0a 0909 targetFile"],... │ │ │ │ +00004070: 0909 2020 2027 2d6f 7574 5261 6e64 6f6d .. '-outRandom │ │ │ │ +00004080: 2720 3d3e 2022 2474 6d70 6469 722f 7265 ' => "$tmpdir/re │ │ │ │ +00004090: 636f 7665 722d 222c 0a09 0909 0920 2020 cover-",..... │ │ │ │ +000040a0: 272d 696e 666f 2720 3d3e 205b 2474 6172 '-info' => [$tar │ │ │ │ +000040b0: 6765 7446 696c 652c 2024 7569 642c 2024 getFile, $uid, $ │ │ │ │ +000040c0: 6769 642c 2024 6d6f 6465 2c0a 0909 0909 gid, $mode,..... │ │ │ │ +000040d0: 0920 2020 2020 2020 2461 7469 6d65 2c20 . $atime, │ │ │ │ +000040e0: 246d 7469 6d65 2c20 2464 6576 496e 6f64 $mtime, $devInod │ │ │ │ +000040f0: 655d 293b 0a09 0920 2020 2024 7072 4c6f e]);... $prLo │ │ │ │ +00004100: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00004110: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... ' │ │ │ │ +00004120: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ │ +00004130: 2263 7020 2462 6163 6b75 7052 6f6f 742f "cp $backupRoot/ │ │ │ │ +00004140: 2466 696c 656e 616d 6520 2474 6172 6765 $filename $targe │ │ │ │ +00004150: 7446 696c 6522 5d29 0a09 0909 6966 2028 tFile"])....if ( │ │ │ │ +00004160: 2476 6572 626f 7365 293b 0a09 097d 0a09 $verbose);...}.. │ │ │ │ +00004170: 2020 2020 7d0a 0920 2020 2065 6c73 6966 }.. elsif │ │ │ │ +00004180: 2028 2463 6f6d 7072 2065 7120 2763 2729 ($compr eq 'c') │ │ │ │ +00004190: 2020 2020 2020 2020 2020 2320 7761 7220 # war │ │ │ │ +000041a0: 6b6f 6d70 7269 6d69 6572 740a 0920 2020 komprimiert.. │ │ │ │ +000041b0: 207b 0a09 0969 6620 286e 6f74 2024 6f76 {...if (not $ov │ │ │ │ +000041c0: 6572 7772 6974 6520 616e 6420 2d65 2024 erwrite and -e $ │ │ │ │ +000041d0: 7461 7267 6574 4669 6c65 290a 0909 7b0a targetFile)...{. │ │ │ │ +000041e0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +000041f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00004200: 5727 2c0a 0909 0909 2020 272d 7374 7227 W',..... '-str' │ │ │ │ +00004210: 203d 3e0a 0909 0909 2020 5b22 7461 7267 =>..... ["targ │ │ │ │ +00004220: 6574 2024 7461 7267 6574 4669 6c65 2061 et $targetFile a │ │ │ │ +00004230: 6c72 6561 6479 2065 7869 7374 733a 222c lready exists:", │ │ │ │ +00004240: 0a09 0909 0920 2020 225c 7424 756e 636f ..... "\t$unco │ │ │ │ +00004250: 6d70 7220 4075 6e63 6f6d 7072 5061 7220 mpr @uncomprPar │ │ │ │ +00004260: 2220 2e0a 0909 0909 2020 2022 3c20 2462 " ...... "< $b │ │ │ │ +00004270: 6163 6b75 7052 6f6f 742f 2466 696c 656e ackupRoot/$filen │ │ │ │ +00004280: 616d 6524 706f 7374 6669 7820 2220 2e0a ame$postfix " .. │ │ │ │ +00004290: 0909 0909 2020 2022 3e20 2474 6172 6765 .... "> $targe │ │ │ │ +000042a0: 7446 696c 6522 5d29 3b0a 0909 7d0a 0909 tFile"]);...}... │ │ │ │ +000042b0: 656c 7365 0a09 097b 0a09 0920 2020 202b else...{... + │ │ │ │ +000042c0: 2b24 6e6f 4669 6c65 7343 6f6d 7072 3b0a +$noFilesCompr;. │ │ │ │ +000042d0: 0909 2020 2020 2824 6f6c 642c 2024 6e65 .. ($old, $ne │ │ │ │ +000042e0: 7729 203d 0a09 0909 2466 6f72 6b2d 3e61 w) =....$fork->a │ │ │ │ +000042f0: 6464 5f62 6c6f 636b 2827 2d65 7865 6327 dd_block('-exec' │ │ │ │ +00004300: 203d 3e20 2475 6e63 6f6d 7072 2c0a 0909 => $uncompr,... │ │ │ │ +00004310: 0909 2020 2027 2d70 6172 616d 2720 3d3e .. '-param' => │ │ │ │ +00004320: 205c 4075 6e63 6f6d 7072 5061 722c 0a09 \@uncomprPar,.. │ │ │ │ +00004330: 0909 0920 2020 272d 7374 6469 6e27 203d ... '-stdin' = │ │ │ │ +00004340: 3e20 2224 6261 636b 7570 526f 6f74 2f24 > "$backupRoot/$ │ │ │ │ +00004350: 6669 6c65 6e61 6d65 2470 6f73 7466 6978 filename$postfix │ │ │ │ +00004360: 222c 0a09 0909 0920 2020 272d 7374 646f ",..... '-stdo │ │ │ │ +00004370: 7574 2720 3d3e 2022 2474 6172 6765 7446 ut' => "$targetF │ │ │ │ +00004380: 696c 6522 2c0a 0909 0909 2020 2027 2d64 ile",..... '-d │ │ │ │ +00004390: 656c 5374 646f 7574 2720 3d3e 2027 6e6f elStdout' => 'no │ │ │ │ +000043a0: 272c 0a09 0909 0920 2020 272d 6f75 7452 ',..... '-outR │ │ │ │ +000043b0: 616e 646f 6d27 203d 3e20 2224 746d 7064 andom' => "$tmpd │ │ │ │ +000043c0: 6972 2f72 6563 6f76 6572 2d22 2c0a 0909 ir/recover-",... │ │ │ │ +000043d0: 0909 2020 2027 2d69 6e66 6f27 203d 3e20 .. '-info' => │ │ │ │ +000043e0: 5b24 7461 7267 6574 4669 6c65 2c20 2475 [$targetFile, $u │ │ │ │ +000043f0: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode, │ │ │ │ +00004400: 0a09 0909 0909 2020 2020 2020 2024 6174 ...... $at │ │ │ │ +00004410: 696d 652c 2024 6d74 696d 652c 2024 6465 ime, $mtime, $de │ │ │ │ +00004420: 7649 6e6f 6465 5d29 3b0a 0909 2020 2020 vInode]);... │ │ │ │ +00004430: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00004440: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00004450: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00004460: 2475 6e63 6f6d 7072 2040 756e 636f 6d70 $uncompr @uncomp │ │ │ │ +00004470: 7250 6172 203c 2022 202e 0a09 0909 0909 rPar < " ....... │ │ │ │ +00004480: 2020 2020 2022 2462 6163 6b75 7052 6f6f "$backupRoo │ │ │ │ +00004490: 742f 2466 696c 656e 616d 6524 706f 7374 t/$filename$post │ │ │ │ +000044a0: 6669 7820 3e20 2220 2e0a 0909 0909 0920 fix > " ....... │ │ │ │ +000044b0: 2020 2020 2224 7461 7267 6574 4669 6c65 "$targetFile │ │ │ │ +000044c0: 225d 290a 0909 0969 6620 2824 7665 7262 "])....if ($verb │ │ │ │ +000044d0: 6f73 6529 3b0a 0909 7d0a 0920 2020 207d ose);...}.. } │ │ │ │ +000044e0: 0a09 2020 2020 656c 7369 6620 2824 636f .. elsif ($co │ │ │ │ +000044f0: 6d70 7220 6571 2027 6227 2920 2020 2020 mpr eq 'b') │ │ │ │ +00004500: 2020 2320 626c 6f63 6b65 6420 6669 6c65 # blocked file │ │ │ │ +00004510: 0a09 2020 2020 7b0a 0909 2b2b 246e 6f46 .. {...++$noF │ │ │ │ +00004520: 696c 6573 426c 6f63 6b65 643b 0a09 0928 ilesBlocked;...( │ │ │ │ +00004530: 246f 6c64 2c20 246e 6577 2920 3d0a 0909 $old, $new) =... │ │ │ │ +00004540: 2020 2020 2466 6f72 6b2d 3e61 6464 5f62 $fork->add_b │ │ │ │ +00004550: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function' │ │ │ │ +00004560: 203d 3e20 5c26 756e 636f 6d70 7265 7373 => \&uncompress │ │ │ │ +00004570: 4361 7442 6c6f 636b 2c0a 0909 0909 2020 CatBlock,..... │ │ │ │ +00004580: 2020 2027 2d66 756e 6350 6172 2720 3d3e '-funcPar' => │ │ │ │ +00004590: 205b 2224 6261 636b 7570 526f 6f74 2f24 ["$backupRoot/$ │ │ │ │ +000045a0: 6669 6c65 6e61 6d65 222c 0a09 0909 0920 filename",..... │ │ │ │ +000045b0: 2020 2020 2474 6172 6765 7446 696c 652c $targetFile, │ │ │ │ +000045c0: 2027 5c41 5c64 2e2a 272c 2024 756e 636f '\A\d.*', $unco │ │ │ │ +000045d0: 6d70 722c 205c 4075 6e63 6f6d 7072 5061 mpr, \@uncomprPa │ │ │ │ +000045e0: 722c 0a09 0909 0920 2020 2020 2470 6f73 r,..... $pos │ │ │ │ +000045f0: 7466 6978 2c20 2470 724c 6f67 5d2c 0a09 tfix, $prLog],.. │ │ │ │ +00004600: 0909 0920 2020 2020 272d 696e 666f 2720 ... '-info' │ │ │ │ +00004610: 3d3e 205b 2474 6172 6765 7446 696c 652c => [$targetFile, │ │ │ │ +00004620: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo │ │ │ │ +00004630: 6465 2c0a 0909 0909 0909 2024 6174 696d de,....... $atim │ │ │ │ +00004640: 652c 2024 6d74 696d 652c 2024 6465 7649 e, $mtime, $devI │ │ │ │ +00004650: 6e6f 6465 5d29 3b0a 0909 2470 724c 6f67 node]);...$prLog │ │ │ │ +00004660: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00004670: 3d3e 2027 4927 2c0a 0909 0920 2020 2020 => 'I',.... │ │ │ │ +00004680: 2027 2d73 7472 2720 3d3e 205b 2263 7020 '-str' => ["cp │ │ │ │ +00004690: 2862 6c6f 636b 6564 2920 2220 2e0a 0909 (blocked) " .... │ │ │ │ +000046a0: 0909 0920 2020 2020 2224 6261 636b 7570 ... "$backup │ │ │ │ +000046b0: 526f 6f74 2f24 6669 6c65 6e61 6d65 2470 Root/$filename$p │ │ │ │ +000046c0: 6f73 7466 6978 2022 202e 0a09 0909 0909 ostfix " ....... │ │ │ │ +000046d0: 2020 2020 2022 2474 6172 6765 7446 696c "$targetFil │ │ │ │ +000046e0: 6522 5d29 0a09 0909 6966 2028 2476 6572 e"])....if ($ver │ │ │ │ +000046f0: 626f 7365 293b 0a09 2020 2020 7d0a 0920 bose);.. }.. │ │ │ │ +00004700: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ │ +00004710: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +00004720: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00004730: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00004740: 3e0a 0909 0920 2020 2020 205b 2275 6e6b >.... ["unk │ │ │ │ +00004750: 6e6f 7720 636f 6d70 7220 666c 6167 203c now compr flag < │ │ │ │ +00004760: 2463 6f6d 7072 3e20 696e 202e 6d64 3543 $compr> in .md5C │ │ │ │ +00004770: 6865 636b 5375 6d73 2022 202e 0a09 0909 heckSums " ..... │ │ │ │ +00004780: 2020 2020 2020 2022 666f 7220 6669 6c65 "for file │ │ │ │ +00004790: 203c 2462 6163 6b75 7052 6f6f 742f 2466 <$backupRoot/$f │ │ │ │ +000047a0: 696c 656e 616d 653e 225d 293b 0a09 2020 ilename>"]);.. │ │ │ │ +000047b0: 2020 7d0a 0920 2020 2069 6620 2824 6f6c }.. if ($ol │ │ │ │ +000047c0: 6429 0a09 2020 2020 7b0a 0909 6d79 2028 d).. {...my ( │ │ │ │ +000047d0: 2466 2c20 246f 5569 642c 2024 6f47 6964 $f, $oUid, $oGid │ │ │ │ +000047e0: 2c20 246f 4d6f 6465 2c20 246f 4174 696d , $oMode, $oAtim │ │ │ │ +000047f0: 652c 2024 6f4d 7469 6d65 2c20 246f 4465 e, $oMtime, $oDe │ │ │ │ +00004800: 7649 6e6f 6465 2920 3d0a 0909 2020 2020 vInode) =... │ │ │ │ +00004810: 407b 246f 6c64 2d3e 6765 7428 272d 7768 @{$old->get('-wh │ │ │ │ +00004820: 6174 2720 3d3e 2027 696e 666f 2729 7d3b at' => 'info')}; │ │ │ │ +00004830: 0a09 0975 6e6c 6573 7320 2824 6e6f 4861 ...unless ($noHa │ │ │ │ +00004840: 7264 4c69 6e6b 7329 0a09 097b 2020 2020 rdLinks)...{ │ │ │ │ +00004850: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00004860: 2020 2020 2020 2020 2020 2020 2023 2046 # F │ │ │ │ +00004870: 696c 6520 696e 2044 424d 2076 6572 6d65 ile in DBM verme │ │ │ │ +00004880: 726b 656e 0a09 0920 2020 2024 4442 4d48 rken... $DBMH │ │ │ │ +00004890: 6172 644c 696e 6b7b 246f 4465 7649 6e6f ardLink{$oDevIno │ │ │ │ +000048a0: 6465 7d20 3d20 2466 3b0a 0909 7d0a 0909 de} = $f;...}... │ │ │ │ +000048b0: 6368 6f77 6e20 246f 5569 642c 2024 6f47 chown $oUid, $oG │ │ │ │ +000048c0: 6964 2c20 2466 3b0a 0909 6368 6d6f 6420 id, $f;...chmod │ │ │ │ +000048d0: 246f 4d6f 6465 2c20 2466 3b0a 0909 7574 $oMode, $f;...ut │ │ │ │ +000048e0: 696d 6520 246f 4174 696d 652c 2024 6f4d ime $oAtime, $oM │ │ │ │ +000048f0: 7469 6d65 2c20 2466 3b0a 0920 2020 207d time, $f;.. } │ │ │ │ +00004900: 0a0a 0920 2020 2067 6f74 6f20 6669 6e69 ... goto fini │ │ │ │ +00004910: 7368 2069 6620 2469 7346 696c 653b 2020 sh if $isFile; │ │ │ │ +00004920: 2020 2320 6175 6668 f672 656e 2c20 6973 # aufh.ren, is │ │ │ │ +00004930: 7420 6e75 7220 5f65 696e 655f 2044 6174 t nur _eine_ Dat │ │ │ │ +00004940: 6569 0a09 7d0a 0965 6c73 6520 2020 2023 ei..}..else # │ │ │ │ +00004950: 2075 6e6b 6e6f 776e 2074 7970 650a 097b unknown type..{ │ │ │ │ +00004960: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +00004970: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00004980: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ │ +00004990: 3d3e 0a09 0909 2020 5b22 756e 6b6e 6f77 =>.... ["unknow │ │ │ │ +000049a0: 6e20 656e 7472 7920 3c24 6d64 3573 756d n entry <$md5sum │ │ │ │ +000049b0: 3e20 666f 7220 6669 6c65 203c 2466 696c > for file <$fil │ │ │ │ +000049c0: 656e 616d 653e 3a22 5d29 3b0a 097d 0a20 ename>:"]);..}. │ │ │ │ +000049d0: 2020 207d 0a0a 636f 6e74 4c6f 6f70 3a3b }..contLoop:; │ │ │ │ +000049e0: 0a23 206e 6163 6873 6568 656e 2c20 6f62 .# nachsehen, ob │ │ │ │ +000049f0: 206f 6666 656e 6520 4c69 6e6b 7320 6765 offene Links ge │ │ │ │ +00004a00: 7365 747a 7420 7765 7264 656e 206b f66e setzt werden k.n │ │ │ │ +00004a10: 6e65 6e0a 2020 2020 2673 6574 4861 7264 nen. &setHard │ │ │ │ +00004a20: 4c69 6e6b 7328 5c25 6861 7354 6f42 654c Links(\%hasToBeL │ │ │ │ +00004a30: 696e 6b65 642c 205c 2544 424d 4861 7264 inked, \%DBMHard │ │ │ │ +00004a40: 4c69 6e6b 2c20 2470 724c 6f67 2c20 2476 Link, $prLog, $v │ │ │ │ +00004a50: 6572 626f 7365 290a 0975 6e6c 6573 7320 erbose)..unless │ │ │ │ +00004a60: 246e 6f48 6172 644c 696e 6b73 3b0a 0a7d $noHardLinks;..} │ │ │ │ +00004a70: 0a0a 6669 6e69 7368 3a3b 0a0a 6d79 2024 ..finish:;..my $ │ │ │ │ +00004a80: 6a6f 623b 0a77 6869 6c65 2028 246a 6f62 job;.while ($job │ │ │ │ +00004a90: 203d 2024 666f 726b 2d3e 7761 6974 466f = $fork->waitFo │ │ │ │ +00004aa0: 7241 6c6c 4a6f 6273 2829 290a 7b0a 2020 rAllJobs()).{. │ │ │ │ +00004ab0: 2020 6d79 2028 2466 2c20 246f 5569 642c my ($f, $oUid, │ │ │ │ +00004ac0: 2024 6f47 6964 2c20 246f 4d6f 6465 2c20 $oGid, $oMode, │ │ │ │ +00004ad0: 246f 4174 696d 652c 2024 6f4d 7469 6d65 $oAtime, $oMtime │ │ │ │ +00004ae0: 2c20 246f 4465 7649 6e6f 6465 2920 3d0a , $oDevInode) =. │ │ │ │ +00004af0: 0940 7b24 6a6f 622d 3e67 6574 2827 2d77 .@{$job->get('-w │ │ │ │ +00004b00: 6861 7427 203d 3e20 2769 6e66 6f27 297d hat' => 'info')} │ │ │ │ +00004b10: 3b0a 2020 2020 756e 6c65 7373 2028 246e ;. unless ($n │ │ │ │ +00004b20: 6f48 6172 644c 696e 6b73 290a 2020 2020 oHardLinks). │ │ │ │ +00004b30: 7b20 2020 2020 2020 2020 2020 2020 2020 { │ │ │ │ +00004b40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00004b50: 2020 2320 4669 6c65 2069 6e20 4442 4d20 # File in DBM │ │ │ │ +00004b60: 7665 726d 6572 6b65 6e0a 0924 4442 4d48 vermerken..$DBMH │ │ │ │ +00004b70: 6172 644c 696e 6b7b 246f 4465 7649 6e6f ardLink{$oDevIno │ │ │ │ +00004b80: 6465 7d20 3d20 2466 3b0a 2020 2020 7d0a de} = $f;. }. │ │ │ │ +00004b90: 2020 2020 6368 6f77 6e20 246f 5569 642c chown $oUid, │ │ │ │ +00004ba0: 2024 6f47 6964 2c20 2466 3b0a 2020 2020 $oGid, $f;. │ │ │ │ +00004bb0: 6368 6d6f 6420 246f 4d6f 6465 2c20 2466 chmod $oMode, $f │ │ │ │ +00004bc0: 3b0a 2020 2020 7574 696d 6520 246f 4174 ;. utime $oAt │ │ │ │ +00004bd0: 696d 652c 2024 6f4d 7469 6d65 2c20 2466 ime, $oMtime, $f │ │ │ │ +00004be0: 0a7d 0a0a 756e 6c65 7373 2028 246e 6f48 .}..unless ($noH │ │ │ │ +00004bf0: 6172 644c 696e 6b73 290a 7b0a 2020 2020 ardLinks).{. │ │ │ │ +00004c00: 2673 6574 4861 7264 4c69 6e6b 7328 5c25 &setHardLinks(\% │ │ │ │ +00004c10: 6861 7354 6f42 654c 696e 6b65 642c 205c hasToBeLinked, \ │ │ │ │ +00004c20: 2544 424d 4861 7264 4c69 6e6b 2c20 2470 %DBMHardLink, $p │ │ │ │ +00004c30: 724c 6f67 2c20 2476 6572 626f 7365 293b rLog, $verbose); │ │ │ │ +00004c40: 0a20 2020 2064 626d 636c 6f73 6528 2544 . dbmclose(%D │ │ │ │ +00004c50: 424d 4861 7264 4c69 6e6b 293b 0a20 2020 BMHardLink);. │ │ │ │ +00004c60: 2075 6e6c 696e 6b20 2224 746d 7064 6972 unlink "$tmpdir │ │ │ │ +00004c70: 2f73 7462 7265 636f 7665 722e 2424 223b /stbrecover.$$"; │ │ │ │ +00004c80: 0a7d 0a0a 2320 7365 7420 6174 696d 652c .}..# set atime, │ │ │ │ +00004c90: 206d 7469 6d65 2c20 6d6f 6465 206f 6620 mtime, mode of │ │ │ │ +00004ca0: 6469 7265 6374 6f72 6965 730a 636c 6f73 directories.clos │ │ │ │ +00004cb0: 6528 4449 5246 494c 4529 3b0a 756e 6c65 e(DIRFILE);.unle │ │ │ │ +00004cc0: 7373 2028 6f70 656e 2844 4952 4649 4c45 ss (open(DIRFILE │ │ │ │ +00004cd0: 2c20 223c 2024 746d 7044 6972 4669 6c65 , "< $tmpDirFile │ │ │ │ +00004ce0: 2229 290a 7b0a 2020 2020 2470 724c 6f67 ")).{. $prLog │ │ │ │ +00004cf0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00004d00: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ │ +00004d10: 7227 203d 3e20 5b22 6361 6e6e 6f74 2072 r' => ["cannot r │ │ │ │ +00004d20: 6561 6420 3c24 746d 7044 6972 4669 6c65 ead <$tmpDirFile │ │ │ │ +00004d30: 3e2c 2063 616e 6e6f 7420 7365 7420 2220 >, cannot set " │ │ │ │ +00004d40: 2e0a 0909 0920 2020 2020 2261 7469 6d65 ..... "atime │ │ │ │ +00004d50: 2061 6e64 206d 7469 6d65 2066 6f72 2064 and mtime for d │ │ │ │ +00004d60: 6972 6563 746f 7269 6573 225d 293b 0a7d irectories"]);.} │ │ │ │ +00004d70: 0a65 6c73 650a 7b0a 2020 2020 2470 724c .else.{. $prL │ │ │ │ +00004d80: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00004d90: 2720 3d3e 2027 4927 2c0a 0909 2020 272d ' => 'I',... '- │ │ │ │ +00004da0: 7374 7227 203d 3e20 5b22 7365 7474 696e str' => ["settin │ │ │ │ +00004db0: 6720 6174 696d 652c 206d 7469 6d65 206f g atime, mtime o │ │ │ │ +00004dc0: 6620 6469 7265 6374 6f72 6965 7320 2e2e f directories .. │ │ │ │ +00004dd0: 2e22 5d29 0a09 6966 2024 7665 7262 6f73 ."])..if $verbos │ │ │ │ +00004de0: 653b 0a0a 2020 2020 6d79 2024 6c69 6e65 e;.. my $line │ │ │ │ +00004df0: 3b0a 2020 2020 7768 696c 6520 2824 6c69 ;. while ($li │ │ │ │ +00004e00: 6e65 203d 203c 4449 5246 494c 453e 290a ne = ). │ │ │ │ +00004e10: 2020 2020 7b0a 0963 686f 7020 246c 696e {..chop $lin │ │ │ │ +00004e20: 653b 0a09 6d79 2028 2461 7469 6d65 2c20 e;..my ($atime, │ │ │ │ +00004e30: 246d 7469 6d65 2c20 246d 6f64 652c 2024 $mtime, $mode, $ │ │ │ │ +00004e40: 6466 2920 3d20 7370 6c69 7428 2f5c 732f df) = split(/\s/ │ │ │ │ +00004e50: 2c20 246c 696e 652c 2034 293b 0a09 2464 , $line, 4);..$d │ │ │ │ +00004e60: 6620 3d7e 2073 2f5c 302f 5c6e 2f6f 673b f =~ s/\0/\n/og; │ │ │ │ +00004e70: 0a09 6368 6d6f 6420 246d 6f64 652c 2024 ..chmod $mode, $ │ │ │ │ +00004e80: 6466 3b0a 0975 7469 6d65 2024 6174 696d df;..utime $atim │ │ │ │ +00004e90: 652c 2024 6d74 696d 652c 2024 6466 3b0a e, $mtime, $df;. │ │ │ │ +00004ea0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $ │ │ │ │ +00004eb0: 6d74 696d 652c 2024 6466 3b0a 2020 2020 mtime, $df;. │ │ │ │ +00004ec0: 7d0a 2020 2020 636c 6f73 6528 4449 5246 }. close(DIRF │ │ │ │ +00004ed0: 494c 4529 3b0a 7d0a 756e 6c69 6e6b 2024 ILE);.}.unlink $ │ │ │ │ +00004ee0: 746d 7044 6972 4669 6c65 3b0a 0a24 7072 tmpDirFile;..$pr │ │ │ │ +00004ef0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00004f00: 6427 203d 3e20 2749 272c 0a09 2020 2020 d' => 'I',.. │ │ │ │ +00004f10: 2020 272d 7374 7227 203d 3e0a 0920 2020 '-str' =>.. │ │ │ │ +00004f20: 2020 205b 6a6f 696e 2827 2c20 272c 0a09 [join(', ',.. │ │ │ │ +00004f30: 0920 2020 2028 246e 6f44 6972 7320 3f20 . ($noDirs ? │ │ │ │ +00004f40: 2224 6e6f 4469 7273 2064 6972 7322 203a "$noDirs dirs" : │ │ │ │ +00004f50: 2028 2929 2c0a 0909 2020 2020 2824 6861 ()),... ($ha │ │ │ │ +00004f60: 7264 4c69 6e6b 7320 3f20 2224 6861 7264 rdLinks ? "$hard │ │ │ │ +00004f70: 4c69 6e6b 7320 6861 7264 6c69 6e6b 7322 Links hardlinks" │ │ │ │ +00004f80: 203a 2028 2929 2c0a 0909 2020 2020 2824 : ()),... ($ │ │ │ │ +00004f90: 6e6f 5379 6d4c 696e 6b73 203f 2022 246e noSymLinks ? "$n │ │ │ │ +00004fa0: 6f53 796d 4c69 6e6b 7320 7379 6d6c 696e oSymLinks symlin │ │ │ │ +00004fb0: 6b73 2220 3a20 2829 292c 0a09 0920 2020 ks" : ()),... │ │ │ │ +00004fc0: 2028 246e 6f4e 616d 6564 5069 7065 7320 ($noNamedPipes │ │ │ │ +00004fd0: 3f20 2224 6e6f 4e61 6d65 6450 6970 6573 ? "$noNamedPipes │ │ │ │ +00004fe0: 206e 616d 6564 2070 6970 6573 2220 3a20 named pipes" : │ │ │ │ +00004ff0: 2829 292c 0a09 0920 2020 2028 246e 6f53 ()),... ($noS │ │ │ │ +00005000: 6f63 6b65 7473 203f 2022 246e 6f53 6f63 ockets ? "$noSoc │ │ │ │ +00005010: 6b65 7473 2073 6f63 6b65 7473 2220 3a20 kets sockets" : │ │ │ │ +00005020: 2829 292c 0a09 0920 2020 2028 246e 6f42 ()),... ($noB │ │ │ │ +00005030: 6c6f 636b 4465 7673 203f 2022 246e 6f42 lockDevs ? "$noB │ │ │ │ +00005040: 6c6f 636b 4465 7673 2062 6c6f 636b 2064 lockDevs block d │ │ │ │ +00005050: 6576 7322 203a 2028 2929 2c0a 0909 2020 evs" : ()),... │ │ │ │ +00005060: 2020 2824 6e6f 4368 6172 4465 7673 203f ($noCharDevs ? │ │ │ │ +00005070: 2022 246e 6f43 6861 7244 6576 7320 6368 "$noCharDevs ch │ │ │ │ +00005080: 6172 2064 6576 7322 203a 2028 2929 2c0a ar devs" : ()),. │ │ │ │ +00005090: 0909 2020 2020 2824 6e6f 4669 6c65 7343 .. ($noFilesC │ │ │ │ +000050a0: 6f70 7920 3f20 2224 6e6f 4669 6c65 7343 opy ? "$noFilesC │ │ │ │ +000050b0: 6f70 7920 636f 7069 6564 2220 3a20 2829 opy copied" : () │ │ │ │ +000050c0: 292c 0a09 0920 2020 2028 246e 6f46 696c ),... ($noFil │ │ │ │ +000050d0: 6573 436f 6d70 7220 3f20 2224 6e6f 4669 esCompr ? "$noFi │ │ │ │ +000050e0: 6c65 7343 6f6d 7072 2075 6e63 6f6d 7072 lesCompr uncompr │ │ │ │ +000050f0: 6573 7365 6422 203a 2028 2929 2c0a 0909 essed" : ()),... │ │ │ │ +00005100: 2020 2020 2824 6e6f 4669 6c65 7342 6c6f ($noFilesBlo │ │ │ │ +00005110: 636b 6564 203f 2022 246e 6f46 696c 6573 cked ? "$noFiles │ │ │ │ +00005120: 426c 6f63 6b65 6420 6361 7420 626c 6f63 Blocked cat bloc │ │ │ │ +00005130: 6b65 6420 6669 6c65 7322 203a 2028 2929 ked files" : ()) │ │ │ │ +00005140: 295d 0a20 2020 2029 0a20 2020 2069 6620 )]. ). if │ │ │ │ +00005150: 2824 6e6f 5265 7374 6f72 6564 293b 0a0a ($noRestored);.. │ │ │ │ +00005160: 6578 6974 2030 3b0a 0a0a 2323 2323 2323 exit 0;...###### │ │ │ │ +00005170: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00005180: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00005190: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000051a0: 2323 2323 2323 0a73 7562 2073 6574 4861 ######.sub setHa │ │ │ │ +000051b0: 7264 4c69 6e6b 730a 7b0a 2020 2020 6d79 rdLinks.{. my │ │ │ │ +000051c0: 2028 2468 6173 546f 4265 4c69 6e6b 6564 ($hasToBeLinked │ │ │ │ +000051d0: 2c20 2444 424d 4861 7264 4c69 6e6b 2c20 , $DBMHardLink, │ │ │ │ +000051e0: 2470 724c 6f67 2c20 2476 6572 626f 7365 $prLog, $verbose │ │ │ │ +000051f0: 2920 3d20 405f 3b0a 0a20 2020 206d 7920 ) = @_;.. my │ │ │ │ +00005200: 2466 3b0a 2020 2020 666f 7265 6163 6820 $f;. foreach │ │ │ │ +00005210: 2466 2028 6b65 7973 2025 2468 6173 546f $f (keys %$hasTo │ │ │ │ +00005220: 4265 4c69 6e6b 6564 290a 2020 2020 7b0a BeLinked). {. │ │ │ │ +00005230: 096d 7920 2824 6469 2c20 2475 6964 2c20 .my ($di, $uid, │ │ │ │ +00005240: 2467 6964 2c20 246d 6f64 652c 2024 6174 $gid, $mode, $at │ │ │ │ +00005250: 696d 652c 2024 6d74 696d 6529 203d 2040 ime, $mtime) = @ │ │ │ │ +00005260: 7b24 2468 6173 546f 4265 4c69 6e6b 6564 {$$hasToBeLinked │ │ │ │ +00005270: 7b24 667d 7d3b 0a09 6966 2028 6578 6973 {$f}};..if (exis │ │ │ │ +00005280: 7473 2824 2444 424d 4861 7264 4c69 6e6b ts($$DBMHardLink │ │ │ │ +00005290: 7b24 6469 7d29 2061 6e64 2024 2444 424d {$di}) and $$DBM │ │ │ │ +000052a0: 4861 7264 4c69 6e6b 7b24 6469 7d20 6e65 HardLink{$di} ne │ │ │ │ +000052b0: 2027 2e27 290a 097b 0a09 2020 2020 6d79 '.')..{.. my │ │ │ │ +000052c0: 2024 6f6c 6446 203d 2024 2444 424d 4861 $oldF = $$DBMHa │ │ │ │ +000052d0: 7264 4c69 6e6b 7b24 6469 7d3b 0a09 2020 rdLink{$di};.. │ │ │ │ +000052e0: 2020 6966 2028 2d65 2024 6629 0a09 2020 if (-e $f).. │ │ │ │ +000052f0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +00005300: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00005310: 5727 2c0a 0909 0920 2020 2020 2027 2d73 W',.... '-s │ │ │ │ +00005320: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ │ +00005330: 6c69 6e6b 203c 2466 3e20 746f 2069 7473 link <$f> to its │ │ │ │ +00005340: 656c 6622 5d29 3b0a 0920 2020 207d 0a09 elf"]);.. }.. │ │ │ │ +00005350: 2020 2020 656c 7365 0a09 2020 2020 7b09 else.. {. │ │ │ │ +00005360: 090a 0909 6966 2028 6c69 6e6b 2024 6f6c ....if (link $ol │ │ │ │ +00005370: 6446 2c20 2466 290a 0909 7b0a 0909 2020 dF, $f)...{... │ │ │ │ +00005380: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00005390: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +000053a0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ │ +000053b0: 5b22 6c69 6e6b 2024 6f6c 6446 2024 6622 ["link $oldF $f" │ │ │ │ +000053c0: 5d29 0a09 0909 6966 2028 2476 6572 626f ])....if ($verbo │ │ │ │ +000053d0: 7365 293b 0a09 0920 2020 2063 686f 776e se);... chown │ │ │ │ +000053e0: 2024 7569 642c 2024 6769 642c 2024 663b $uid, $gid, $f; │ │ │ │ +000053f0: 0a09 0920 2020 2063 686d 6f64 2024 6d6f ... chmod $mo │ │ │ │ +00005400: 6465 2c20 2466 3b0a 0909 2020 2020 7574 de, $f;... ut │ │ │ │ +00005410: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti │ │ │ │ +00005420: 6d65 2c20 2466 3b0a 0909 7d0a 0909 656c me, $f;...}...el │ │ │ │ +00005430: 7365 0a09 097b 0a09 0920 2020 2024 7072 se...{... $pr │ │ │ │ +00005440: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00005450: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ │ +00005460: 2027 2d73 7472 2720 3d3e 205b 2266 6169 '-str' => ["fai │ │ │ │ +00005470: 6c65 643a 206c 696e 6b20 246f 6c64 4620 led: link $oldF │ │ │ │ +00005480: 2466 225d 293b 0a09 097d 0a09 2020 2020 $f"]);...}.. │ │ │ │ +00005490: 7d0a 0920 2020 2064 656c 6574 6520 2424 }.. delete $$ │ │ │ │ +000054a0: 6861 7354 6f42 654c 696e 6b65 647b 2466 hasToBeLinked{$f │ │ │ │ +000054b0: 7d3b 0a09 7d0a 2020 2020 7d0a 7d0a 0a0a };..}. }.}... │ │ │ │ +000054c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000054d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000054e0: 2323 2323 2323 2323 0a73 7562 2075 6e63 ########.sub unc │ │ │ │ +000054f0: 6f6d 7072 6573 7343 6174 426c 6f63 6b0a ompressCatBlock. │ │ │ │ +00005500: 7b0a 2020 2020 6d79 2024 6672 6f6d 4469 {. my $fromDi │ │ │ │ +00005510: 7220 3d20 7368 6966 743b 0a20 2020 206d r = shift;. m │ │ │ │ +00005520: 7920 2474 6f46 696c 6520 3d20 7368 6966 y $toFile = shif │ │ │ │ +00005530: 743b 0a20 2020 206d 7920 246d 6173 6b20 t;. my $mask │ │ │ │ +00005540: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ │ +00005550: 2475 6d63 6f6d 7072 203d 2073 6869 6674 $umcompr = shift │ │ │ │ +00005560: 3b0a 2020 2020 6d79 2024 756e 636f 6d70 ;. my $uncomp │ │ │ │ +00005570: 7250 6172 203d 2073 6869 6674 3b0a 2020 rPar = shift;. │ │ │ │ +00005580: 2020 6d79 2024 706f 7374 6669 7820 3d20 my $postfix = │ │ │ │ +00005590: 7368 6966 743b 0a20 2020 206d 7920 2470 shift;. my $p │ │ │ │ +000055a0: 724c 6f67 203d 2073 6869 6674 3b0a 0a20 rLog = shift;.. │ │ │ │ +000055b0: 2020 206c 6f63 616c 202a 4449 523b 0a20 local *DIR;. │ │ │ │ +000055c0: 2020 2075 6e6c 6573 7320 286f 7065 6e64 unless (opend │ │ │ │ +000055d0: 6972 2844 4952 2c20 2466 726f 6d44 6972 ir(DIR, $fromDir │ │ │ │ +000055e0: 2929 0a20 2020 207b 0a09 2470 724c 6f67 )). {..$prLog │ │ │ │ +000055f0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00005600: 3d3e 2027 4527 2c0a 0909 2020 2020 2020 => 'E',... │ │ │ │ +00005610: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => ["cann │ │ │ │ +00005620: 6f74 206f 7065 6e20 3c24 6672 6f6d 4469 ot open <$fromDi │ │ │ │ +00005630: 723e 225d 293b 0a09 7265 7475 726e 2031 r>"]);..return 1 │ │ │ │ +00005640: 3b0a 2020 2020 7d0a 2020 2020 6d79 2028 ;. }. my ( │ │ │ │ +00005650: 2465 6e74 7279 2c20 4065 6e74 7269 6573 $entry, @entries │ │ │ │ +00005660: 293b 0a20 2020 2077 6869 6c65 2028 2465 );. while ($e │ │ │ │ +00005670: 6e74 7279 203d 2072 6561 6464 6972 2044 ntry = readdir D │ │ │ │ +00005680: 4952 290a 2020 2020 7b0a 096e 6578 7420 IR). {..next │ │ │ │ +00005690: 756e 6c65 7373 2024 656e 7472 7920 3d7e unless $entry =~ │ │ │ │ +000056a0: 202f 246d 6173 6b2f 3b0a 0a09 7075 7368 /$mask/;...push │ │ │ │ +000056b0: 2040 656e 7472 6965 732c 2024 656e 7472 @entries, $entr │ │ │ │ +000056c0: 793b 0a20 2020 207d 0a20 2020 2063 6c6f y;. }. clo │ │ │ │ +000056d0: 7365 2844 4952 293b 0a0a 2020 2020 6c6f se(DIR);.. lo │ │ │ │ +000056e0: 6361 6c20 2a54 4f3b 0a20 2020 2075 6e6c cal *TO;. unl │ │ │ │ +000056f0: 6573 7320 2873 7973 6f70 656e 2854 4f2c ess (sysopen(TO, │ │ │ │ +00005700: 2024 746f 4669 6c65 2c20 4f5f 4352 4541 $toFile, O_CREA │ │ │ │ +00005710: 5420 7c20 4f5f 5752 4f4e 4c59 2929 0a20 T | O_WRONLY)). │ │ │ │ +00005720: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr │ │ │ │ +00005730: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00005740: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ │ +00005750: 7227 203d 3e20 5b22 6361 6e6e 6f74 2077 r' => ["cannot w │ │ │ │ +00005760: 7269 7465 2074 6f20 3c24 746f 4669 6c65 rite to <$toFile │ │ │ │ +00005770: 3e22 5d29 3b0a 2020 2020 7d0a 0a20 2020 >"]);. }.. │ │ │ │ +00005780: 2066 6f72 6561 6368 2024 656e 7472 7920 foreach $entry │ │ │ │ +00005790: 2873 6f72 7420 4065 6e74 7269 6573 290a (sort @entries). │ │ │ │ +000057a0: 2020 2020 7b0a 096d 7920 2462 7566 6665 {..my $buffe │ │ │ │ +000057b0: 723b 0a09 6c6f 6361 6c20 2a46 524f 4d3b r;..local *FROM; │ │ │ │ +000057c0: 0a09 6d79 2024 6669 6c65 496e 203d 2075 ..my $fileIn = u │ │ │ │ +000057d0: 6e64 6566 3b0a 0969 6620 2824 656e 7472 ndef;..if ($entr │ │ │ │ +000057e0: 7920 3d7e 202f 2470 6f73 7466 6978 5c5a y =~ /$postfix\Z │ │ │ │ +000057f0: 2f29 2020 2020 2320 636f 6d70 7265 7373 /) # compress │ │ │ │ +00005800: 6564 2062 6c6f 636b 0a09 7b0a 0920 2020 ed block..{.. │ │ │ │ +00005810: 2069 6620 2824 6d61 696e 3a3a 494f 436f if ($main::IOCo │ │ │ │ +00005820: 6d70 7265 7373 4469 7265 6374 290a 0920 mpressDirect).. │ │ │ │ +00005830: 2020 207b 0a09 096d 7920 2469 6e70 7574 {...my $input │ │ │ │ +00005840: 203d 2022 2466 726f 6d44 6972 2f24 656e = "$fromDir/$en │ │ │ │ +00005850: 7472 7922 3b0a 0909 6d79 2024 7563 203d try";...my $uc = │ │ │ │ +00005860: 206e 6577 2049 4f3a 3a55 6e63 6f6d 7072 new IO::Uncompr │ │ │ │ +00005870: 6573 733a 3a42 756e 7a69 7032 2024 696e ess::Bunzip2 $in │ │ │ │ +00005880: 7075 743b 0a09 0977 6869 6c65 2028 2475 put;...while ($u │ │ │ │ +00005890: 632d 3e72 6561 6428 2462 7566 6665 722c c->read($buffer, │ │ │ │ +000058a0: 2031 302a 3130 3234 2a2a 3229 290a 0909 10*1024**2))... │ │ │ │ +000058b0: 7b0a 0909 2020 2020 7379 7377 7269 7465 {... syswrite │ │ │ │ +000058c0: 2854 4f2c 2024 6275 6666 6572 293b 0a09 (TO, $buffer);.. │ │ │ │ +000058d0: 097d 0a09 096e 6578 743b 0a09 2020 2020 .}...next;.. │ │ │ │ +000058e0: 7d0a 0a09 2020 2020 2466 696c 6549 6e20 }... $fileIn │ │ │ │ +000058f0: 3d0a 0909 7069 7065 4672 6f6d 466f 726b =...pipeFromFork │ │ │ │ +00005900: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' => │ │ │ │ +00005910: 2024 756e 636f 6d70 722c 0a09 0909 0920 $uncompr,..... │ │ │ │ +00005920: 2027 2d70 6172 616d 2720 3d3e 205c 4075 '-param' => \@u │ │ │ │ +00005930: 6e63 6f6d 7072 5061 722c 0a09 0909 0920 ncomprPar,..... │ │ │ │ +00005940: 2027 2d73 7464 696e 2720 3d3e 2022 2466 '-stdin' => "$f │ │ │ │ +00005950: 726f 6d44 6972 2f24 656e 7472 7922 2c0a romDir/$entry",. │ │ │ │ +00005960: 0909 0909 2020 272d 6f75 7452 616e 646f .... '-outRando │ │ │ │ +00005970: 6d27 203d 3e20 272f 746d 702f 7374 6275 m' => '/tmp/stbu │ │ │ │ +00005980: 5069 7065 4672 6f6d 3131 2d27 2c0a 0909 PipeFrom11-',... │ │ │ │ +00005990: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => │ │ │ │ +000059a0: 2470 724c 6f67 293b 0a09 2020 2020 7768 $prLog);.. wh │ │ │ │ +000059b0: 696c 6520 2824 6669 6c65 496e 2d3e 7379 ile ($fileIn->sy │ │ │ │ +000059c0: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\$buffer, │ │ │ │ +000059d0: 3130 2a31 3032 342a 2a32 2929 0a09 2020 10*1024**2)).. │ │ │ │ +000059e0: 2020 7b0a 0909 7379 7377 7269 7465 2854 {...syswrite(T │ │ │ │ +000059f0: 4f2c 2024 6275 6666 6572 293b 0a09 2020 O, $buffer);.. │ │ │ │ +00005a00: 2020 7d0a 097d 0a09 656c 7365 2020 2020 }..}..else │ │ │ │ +00005a10: 2020 2020 2020 2023 2062 6c6f 636b 206e # block n │ │ │ │ +00005a20: 6f74 2063 6f6d 7072 6573 7365 640a 097b ot compressed..{ │ │ │ │ +00005a30: 0a09 2020 2020 756e 6c65 7373 2028 7379 .. unless (sy │ │ │ │ +00005a40: 736f 7065 6e28 4652 4f4d 2c20 2224 6672 sopen(FROM, "$fr │ │ │ │ +00005a50: 6f6d 4469 722f 2465 6e74 7279 222c 204f omDir/$entry", O │ │ │ │ +00005a60: 5f52 444f 4e4c 5929 290a 0920 2020 207b _RDONLY)).. { │ │ │ │ +00005a70: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ │ +00005a80: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00005a90: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ │ +00005aa0: 203d 3e20 5b22 6361 6e6e 6f74 2072 6561 => ["cannot rea │ │ │ │ +00005ab0: 6420 3c24 6672 6f6d 4469 722f 2465 6e74 d <$fromDir/$ent │ │ │ │ +00005ac0: 7279 3e22 5d29 3b0a 0909 7265 7475 726e ry>"]);...return │ │ │ │ +00005ad0: 2031 3b0a 0920 2020 207d 0a09 2020 2020 1;.. }.. │ │ │ │ +00005ae0: 7768 696c 6520 2873 7973 7265 6164 2846 while (sysread(F │ │ │ │ +00005af0: 524f 4d2c 2024 6275 6666 6572 2c20 3130 ROM, $buffer, 10 │ │ │ │ +00005b00: 2a31 3032 342a 2a32 2929 0a09 2020 2020 *1024**2)).. │ │ │ │ +00005b10: 7b0a 0909 7379 7377 7269 7465 2854 4f2c {...syswrite(TO, │ │ │ │ +00005b20: 2024 6275 6666 6572 293b 0a09 2020 2020 $buffer);.. │ │ │ │ +00005b30: 7d0a 097d 0a0a 0969 6620 2824 6669 6c65 }..}...if ($file │ │ │ │ +00005b40: 496e 290a 097b 0a09 2020 2020 2466 696c In)..{.. $fil │ │ │ │ +00005b50: 6549 6e2d 3e63 6c6f 7365 2829 3b0a 0920 eIn->close();.. │ │ │ │ +00005b60: 2020 2024 6669 6c65 496e 203d 2075 6e64 $fileIn = und │ │ │ │ +00005b70: 6566 3b0a 097d 0a09 656c 7365 0a09 7b0a ef;..}..else..{. │ │ │ │ +00005b80: 0920 2020 2063 6c6f 7365 2846 524f 4d29 . close(FROM) │ │ │ │ +00005b90: 3b0a 097d 0a20 2020 207d 0a20 2020 2063 ;..}. }. c │ │ │ │ +00005ba0: 6c6f 7365 2854 4f29 3b0a 2020 2020 7265 lose(TO);. re │ │ │ │ +00005bb0: 7475 726e 2030 3b0a 7d0a turn 0;.}. │ │ │ ├── ./usr/bin/storeBackupSearch │ │ │ │ @@ -1,4 +1,1089 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7053 6561 7263 680a pSearch. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 382d 3230 3132 290a 2320 2020 2020 2020 8-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ │ +00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ │ +00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ │ +00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ │ +000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ │ +000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ │ +000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ │ +000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ │ +000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ │ +000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ │ +00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ │ +00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ │ +00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ │ +00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ │ +00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ │ +00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ │ +00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ │ +00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ │ +00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ │ +00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ │ +000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ │ +000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ │ +000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ │ +000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ │ +000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ │ +000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ │ +00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ │ +00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ │ +00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ │ +00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ │ +00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ │ +00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ │ +00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ │ +00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ │ +00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ │ +00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ │ +000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ │ +000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ │ +000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m │ │ │ │ +00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I │ │ │ │ +00000310: 643a 2073 746f 7265 4261 636b 7570 5365 d: storeBackupSe │ │ │ │ +00000320: 6172 6368 2e70 6c20 3334 3120 3230 3038 arch.pl 341 2008 │ │ │ │ +00000330: 2d30 372d 3331 2031 333a 3133 3a31 375a -07-31 13:13:17Z │ │ │ │ +00000340: 2068 6a63 2024 2027 3b0a 7075 7368 2040 hjc $ ';.push @ │ │ │ │ +00000350: 5645 5253 494f 4e2c 2024 5645 5253 494f VERSION, $VERSIO │ │ │ │ +00000360: 4e3b 0a6d 7920 2824 5645 5253 494f 4e70 N;.my ($VERSIONp │ │ │ │ +00000370: 4e61 6d65 2c20 2456 4552 5349 4f4e 7376 Name, $VERSIONsv │ │ │ │ +00000380: 6e49 4429 203d 2024 5645 5253 494f 4e20 nID) = $VERSION │ │ │ │ +00000390: 3d7e 202f 4964 3a5c 732b 285c 532b 295c =~ /Id:\s+(\S+)\ │ │ │ │ +000003a0: 732b 285c 642b 292f 3b0a 246d 6169 6e3a s+(\d+)/;.$main: │ │ │ │ +000003b0: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS │ │ │ │ +000003c0: 494f 4e20 3d20 756e 6465 663b 0a0a 0a75 ION = undef;...u │ │ │ │ +000003d0: 7365 2073 7472 6963 743b 0a0a 0a73 7562 se strict;...sub │ │ │ │ +000003e0: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m │ │ │ │ +000003f0: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift; │ │ │ │ +00000400: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;.. │ │ │ │ +00000410: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date │ │ │ │ +00000420: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym │ │ │ │ +00000430: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang │ │ │ │ +00000440: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au │ │ │ │ +00000450: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if ( │ │ │ │ +00000460: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {. │ │ │ │ +00000470: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file │ │ │ │ +00000480: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li │ │ │ │ +00000490: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f │ │ │ │ +000004a0: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if ( │ │ │ │ +000004b0: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0, │ │ │ │ +000004c0: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne "/").. │ │ │ │ +000004d0: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/ │ │ │ │ +000004e0: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\/]+$/$link/;. │ │ │ │ +000004f0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ │ +00000500: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file │ │ │ │ +00000510: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }. │ │ │ │ +00000520: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil │ │ │ │ +00000530: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD │ │ │ │ +00000540: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil │ │ │ │ +00000550: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = "/$file";. │ │ │ │ +00000560: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ │ +00000570: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ │ +00000580: 2022 3c24 6669 6c65 3e20 646f 6573 206e "<$file> does n │ │ │ │ +00000590: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\n";..e │ │ │ │ +000005a0: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. │ │ │ │ +000005b0: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= "/../l │ │ │ │ +000005c0: 6962 223b 2020 2020 2020 2020 2020 2023 ib"; # │ │ │ │ +000005d0: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib │ │ │ │ +000005e0: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my │ │ │ │ +000005f0: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin │ │ │ │ +00000600: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp │ │ │ │ +00000610: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if │ │ │ │ +00000620: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). │ │ │ │ +00000630: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir │ │ │ │ +00000640: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c │ │ │ │ +00000650: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch │ │ │ │ +00000660: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r │ │ │ │ +00000670: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil │ │ │ │ +00000680: 6544 6972 2822 2461 6273 4469 7224 6669 eDir("$absDir$fi │ │ │ │ +00000690: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le"));. }. │ │ │ │ +000006a0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri │ │ │ │ +000006b0: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR "<$dir │ │ │ │ +000006c0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist │ │ │ │ +000006d0: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\n";. │ │ │ │ +000006e0: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF │ │ │ │ +000006f0: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my │ │ │ │ +00000700: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;.. │ │ │ │ +00000710: 2020 2020 7265 7475 726e 2028 272e 272c return ('.', │ │ │ │ +00000720: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless ( │ │ │ │ +00000730: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\//); │ │ │ │ +00000740: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache │ │ │ │ +00000750: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. │ │ │ │ +00000760: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file │ │ │ │ +00000770: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^( │ │ │ │ +00000780: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\/(.*)$/s;. │ │ │ │ +00000790: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if │ │ │ │ +000007a0: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); │ │ │ │ +000007b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000007c0: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z. │ │ │ │ +000007d0: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. │ │ │ │ +000007e0: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $ │ │ │ │ +000007f0: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re │ │ │ │ +00000800: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib │ │ │ │ +00000810: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @ │ │ │ │ +00000820: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, "$req";..re │ │ │ │ +00000830: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara │ │ │ │ +00000840: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require │ │ │ │ +00000850: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl' │ │ │ │ +00000860: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog │ │ │ │ +00000870: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v │ │ │ │ +00000880: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ │ │ │ │ +00000890: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl' │ │ │ │ +000008a0: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP │ │ │ │ +000008b0: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require │ │ │ │ +000008c0: 2027 6875 6d61 6e52 6561 642e 706c 273b 'humanRead.pl'; │ │ │ │ +000008d0: 0a72 6571 7569 7265 2027 6461 7465 546f .require 'dateTo │ │ │ │ +000008e0: 6f6c 732e 706c 273b 0a72 6571 7569 7265 ols.pl';.require │ │ │ │ +000008f0: 2027 6576 616c 546f 6f6c 732e 706c 273b 'evalTools.pl'; │ │ │ │ +00000900: 0a72 6571 7569 7265 2027 7374 6f72 6542 .require 'storeB │ │ │ │ +00000910: 6163 6b75 704c 6962 2e70 6c27 3b0a 0a6d ackupLib.pl';..m │ │ │ │ +00000920: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile │ │ │ │ +00000930: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums │ │ │ │ +00000940: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME. │ │ │ │ +00000950: 0a73 746f 7265 4261 636b 7570 5365 6172 .storeBackupSear │ │ │ │ +00000960: 6368 2e70 6c20 2d20 6c6f 6361 7465 7320 ch.pl - locates │ │ │ │ +00000970: 6469 6666 6572 656e 7420 7665 7273 696f different versio │ │ │ │ +00000980: 6e73 206f 6620 6120 6669 6c65 2073 6176 ns of a file sav │ │ │ │ +00000990: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac │ │ │ │ +000009a0: 6b75 702e 706c 2e0a 0a3d 6865 6164 3120 kup.pl...=head1 │ │ │ │ +000009b0: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store │ │ │ │ +000009c0: 4261 636b 7570 5365 6172 6368 2e70 6c20 BackupSearch.pl │ │ │ │ +000009d0: 2d67 2063 6f6e 6669 6746 696c 650a 0a09 -g configFile... │ │ │ │ +000009e0: 7374 6f72 6542 6163 6b75 7053 6561 7263 storeBackupSearc │ │ │ │ +000009f0: 682e 706c 202d 6220 6261 636b 7570 4469 h.pl -b backupDi │ │ │ │ +00000a00: 7244 6972 205b 2d66 2063 6f6e 6669 6746 rDir [-f configF │ │ │ │ +00000a10: 696c 655d 0a09 2020 2020 2020 5b2d 7320 ile].. [-s │ │ │ │ +00000a20: 7275 6c65 5d20 205b 2d2d 6162 7350 6174 rule] [--absPat │ │ │ │ +00000a30: 685d 205b 2d77 2066 696c 655d 205b 2d2d h] [-w file] [-- │ │ │ │ +00000a40: 7061 724a 6f62 7320 6e75 6d62 6572 5d0a parJobs number]. │ │ │ │ +00000a50: 0920 2020 2020 205b 2d64 206c 6576 656c . [-d level │ │ │ │ +00000a60: 5d20 5b2d 2d6f 6e63 655d 205b 2d2d 7072 ] [--once] [--pr │ │ │ │ +00000a70: 696e 745d 205b 6261 636b 7570 526f 6f74 int] [backupRoot │ │ │ │ +00000a80: 202e 202e 202e 5d0a 0a3d 6865 6164 3120 . . .]..=head1 │ │ │ │ +00000a90: 4445 5343 5249 5054 494f 4e0a 0a59 6f75 DESCRIPTION..You │ │ │ │ +00000aa0: 206e 6565 6420 736f 6d65 2062 6173 6963 need some basic │ │ │ │ +00000ab0: 2075 6e64 6572 7374 616e 6469 6e67 206f understanding o │ │ │ │ +00000ac0: 6620 6c69 6e75 7820 616e 6420 7065 726c f linux and perl │ │ │ │ +00000ad0: 2074 6f20 7573 6520 6974 2e0a 0a3d 6865 to use it...=he │ │ │ │ +00000ae0: 6164 3120 4f50 5449 4f4e 530a 0a3d 6f76 ad1 OPTIONS..=ov │ │ │ │ +00000af0: 6572 2038 0a0a 3d69 7465 6d20 423c 2d2d er 8..=item B<-- │ │ │ │ +00000b00: 6765 6e65 7261 7465 3e2c 2042 3c2d 673e generate>, B<-g> │ │ │ │ +00000b10: 0a0a 2020 2020 6765 6e65 7261 7465 2061 .. generate a │ │ │ │ +00000b20: 2063 6f6e 6669 6720 6669 6c65 0a0a 3d69 config file..=i │ │ │ │ +00000b30: 7465 6d20 423c 2d2d 7072 696e 743e 0a0a tem B<--print>.. │ │ │ │ +00000b40: 2020 2020 7072 696e 7420 636f 6e66 6967 print config │ │ │ │ +00000b50: 7572 6174 696f 6e20 7265 6164 2066 726f uration read fro │ │ │ │ +00000b60: 6d20 636f 6e66 6967 7572 6174 696f 6e20 m configuration │ │ │ │ +00000b70: 6669 6c65 2061 6e64 2073 746f 700a 0a3d file and stop..= │ │ │ │ +00000b80: 6974 656d 2042 3c2d 2d63 6f6e 6669 6746 item B<--configF │ │ │ │ +00000b90: 696c 653e 2c20 423c 2d66 3e0a 0a20 2020 ile>, B<-f>.. │ │ │ │ +00000ba0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f │ │ │ │ +00000bb0: 696c 6520 2869 6e73 7465 6164 206f 6620 ile (instead of │ │ │ │ +00000bc0: 6f72 0a20 2020 2061 6464 6974 696f 6e61 or. additiona │ │ │ │ +00000bd0: 6c6c 7920 746f 2070 6172 616d 6574 6572 lly to parameter │ │ │ │ +00000be0: 7329 0a0a 3d69 7465 6d20 423c 2d2d 6261 s)..=item B<--ba │ │ │ │ +00000bf0: 636b 7570 4469 723e 2046 3c62 6163 6b75 ckupDir> F, B<-b> │ │ │ │ +00000c10: 463c 6261 636b 7570 4469 7244 6972 3e0a F. │ │ │ │ +00000c20: 0a09 0920 2020 2074 6f70 206c 6576 656c ... top level │ │ │ │ +00000c30: 2064 6972 6563 746f 7279 206f 6620 616c directory of al │ │ │ │ +00000c40: 6c20 6261 636b 7570 730a 0a3d 6974 656d l backups..=item │ │ │ │ +00000c50: 2042 3c2d 2d73 6561 7263 6852 756c 653e B<--searchRule> │ │ │ │ +00000c60: 2c20 423c 2d73 3e0a 0a09 0920 2020 2072 , B<-s>.... r │ │ │ │ +00000c70: 756c 6520 666f 7220 7365 6172 6368 696e ule for searchin │ │ │ │ +00000c80: 670a 0909 2020 2020 7365 6520 5245 4144 g... see READ │ │ │ │ +00000c90: 4d45 3a20 2769 6e63 6c75 6469 6e67 202f ME: 'including / │ │ │ │ +00000ca0: 2065 7863 6c75 6469 6e67 2066 696c 6573 excluding files │ │ │ │ +00000cb0: 2061 6e64 2064 6972 6563 746f 7269 6573 and directories │ │ │ │ +00000cc0: 270a 0a3d 6974 656d 2042 3c2d 2d61 6273 '..=item B<--abs │ │ │ │ +00000cd0: 5061 7468 3e2c 2042 3c2d 613e 0a0a 2020 Path>, B<-a>.. │ │ │ │ +00000ce0: 2020 7772 6974 6520 7265 7375 6c74 2077 write result w │ │ │ │ +00000cf0: 6974 6820 6162 736f 6c75 7465 2070 6174 ith absolute pat │ │ │ │ +00000d00: 6820 6e61 6d65 730a 0a3d 6974 656d 2042 h names..=item B │ │ │ │ +00000d10: 3c2d 2d77 7269 7465 546f 4669 6c65 3e2c <--writeToFile>, │ │ │ │ +00000d20: 2042 3c2d 773e 0a0a 2020 2020 7772 6974 B<-w>.. writ │ │ │ │ +00000d30: 6520 7365 6172 6368 2072 6573 756c 7420 e search result │ │ │ │ +00000d40: 616c 736f 2074 6f20 6669 6c65 0a0a 3d69 also to file..=i │ │ │ │ +00000d50: 7465 6d20 423c 2d2d 7061 724a 6f62 733e tem B<--parJobs> │ │ │ │ +00000d60: 2c20 423c 2d70 3e0a 0a20 2020 206e 756d , B<-p>.. num │ │ │ │ +00000d70: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel │ │ │ │ +00000d80: 6a6f 6273 2c20 6465 6661 756c 7420 3d20 jobs, default = │ │ │ │ +00000d90: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic │ │ │ │ +00000da0: 616c 6c79 0a0a 3d69 7465 6d20 423c 2d2d ally..=item B<-- │ │ │ │ +00000db0: 6465 6275 673e 2c20 423c 2d64 3e0a 0a20 debug>, B<-d>.. │ │ │ │ +00000dc0: 2020 2064 6562 7567 206c 6576 656c 2c20 debug level, │ │ │ │ +00000dd0: 706f 7373 6962 6c65 2076 616c 7565 7320 possible values │ │ │ │ +00000de0: 6172 6520 302c 2031 2c20 322c 2064 6566 are 0, 1, 2, def │ │ │ │ +00000df0: 6175 6c74 203d 2030 0a0a 3d69 7465 6d20 ault = 0..=item │ │ │ │ +00000e00: 423c 2d2d 6f6e 6365 3e2c 2042 3c2d 6f3e B<--once>, B<-o> │ │ │ │ +00000e10: 0a0a 2020 2020 7368 6f77 2065 7665 7279 .. show every │ │ │ │ +00000e20: 2066 696c 6520 666f 756e 6420 6f6e 6c79 file found only │ │ │ │ +00000e30: 206f 6e63 6520 2864 6570 656e 6469 6e67 once (depending │ │ │ │ +00000e40: 206f 6e20 6d64 3520 7375 6d29 0a0a 3d69 on md5 sum)..=i │ │ │ │ +00000e50: 7465 6d20 6261 636b 7570 526f 6f74 0a0a tem backupRoot.. │ │ │ │ +00000e60: 2020 2020 526f 6f74 2064 6972 6563 746f Root directo │ │ │ │ +00000e70: 7269 6573 206f 6620 6261 636b 7570 7320 ries of backups │ │ │ │ +00000e80: 7768 6572 6520 746f 2073 6561 7263 6820 where to search │ │ │ │ +00000e90: 7265 6c61 7469 7665 0a20 2020 2074 6f20 relative. to │ │ │ │ +00000ea0: 6261 636b 7570 4469 722e 2049 6620 6e6f backupDir. If no │ │ │ │ +00000eb0: 2064 6972 6563 746f 7269 6573 2061 7265 directories are │ │ │ │ +00000ec0: 2073 7065 6369 6669 6564 2c20 616c 6c0a specified, all. │ │ │ │ +00000ed0: 2020 2020 6261 636b 7570 7320 6265 6c6f backups belo │ │ │ │ +00000ee0: 7720 6261 636b 7570 4469 7220 6172 6520 w backupDir are │ │ │ │ +00000ef0: 6368 6f73 656e 2e0a 0a3d 6261 636b 0a0a chosen...=back.. │ │ │ │ +00000f00: 3d68 6561 6431 2043 4f50 5952 4947 4854 =head1 COPYRIGHT │ │ │ │ +00000f10: 0a0a 436f 7079 7269 6768 7420 2863 2920 ..Copyright (c) │ │ │ │ +00000f20: 3230 3038 2d32 3030 3920 6279 2048 6569 2008-2009 by Hei │ │ │ │ +00000f30: 6e7a 2d4a 6f73 6566 2043 6c61 6573 2028 nz-Josef Claes ( │ │ │ │ +00000f40: 7365 6520 5245 4144 4d45 292e 0a50 7562 see README)..Pub │ │ │ │ +00000f50: 6c69 7368 6564 2075 6e64 6572 2074 6865 lished under the │ │ │ │ +00000f60: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ │ +00000f70: 6c69 6320 4c69 6365 6e73 6520 7633 206f lic License v3 o │ │ │ │ +00000f80: 7220 616e 7920 6c61 7465 7220 7665 7273 r any later vers │ │ │ │ +00000f90: 696f 6e0a 0a3d 6375 740a 0a6d 7920 2448 ion..=cut..my $H │ │ │ │ +00000fa0: 656c 7020 3d20 6a6f 696e 2827 272c 2067 elp = join('', g │ │ │ │ +00000fb0: 7265 7028 212f 5e5c 732a 242f 2c20 6070 rep(!/^\s*$/, `p │ │ │ │ +00000fc0: 6f64 3274 6578 7420 2430 6029 293b 0a24 od2text $0`));.$ │ │ │ │ +00000fd0: 4865 6c70 203d 2022 6361 6e6e 6f74 2066 Help = "cannot f │ │ │ │ +00000fe0: 696e 6420 706f 6432 7465 7874 2c20 7365 ind pod2text, se │ │ │ │ +00000ff0: 6520 646f 6375 6d65 6e74 6174 696f 6e20 e documentation │ │ │ │ +00001000: 666f 7220 6465 7461 696c 735c 6e22 0a20 for details\n". │ │ │ │ +00001010: 2020 2075 6e6c 6573 7320 2448 656c 703b unless $Help; │ │ │ │ +00001020: 0a0a 6d79 2024 7465 6d70 6c61 7465 436f ..my $templateCo │ │ │ │ +00001030: 6e66 6967 4669 6c65 203d 203c 3c45 4f43 nfigFile = < &::SIZE("3M")' │ │ │ │ +000015b0: 2061 6e64 2027 5c24 7569 6420 6571 2022 and '\$uid eq " │ │ │ │ +000015c0: 686a 6322 2720 2920 6f72 0a23 2020 2020 hjc"' ) or.# │ │ │ │ +000015d0: 2820 275c 246d 7469 6d65 203e 2026 3a3a ( '\$mtime > &:: │ │ │ │ +000015e0: 4441 5445 2822 3364 3468 2229 2720 616e DATE("3d4h")' an │ │ │ │ +000015f0: 6420 6e6f 7420 275c 2466 696c 6520 3d7e d not '\$file =~ │ │ │ │ +00001600: 206d 232f 746d 702f 2327 2029 270a 3b73 m#/tmp/#' )'.;s │ │ │ │ +00001610: 6561 7263 6852 756c 653d 0a0a 2320 726f earchRule=..# ro │ │ │ │ +00001620: 6f74 2064 6972 6563 746f 7279 206f 6620 ot directory of │ │ │ │ +00001630: 6261 636b 7570 2072 656c 6174 6976 6520 backup relative │ │ │ │ +00001640: 746f 2062 6163 6b75 7044 6972 2064 6972 to backupDir dir │ │ │ │ +00001650: 6563 746f 7279 0a3b 6261 636b 7570 526f ectory.;backupRo │ │ │ │ +00001660: 6f74 3d0a 0a23 2077 7269 7465 2072 6573 ot=..# write res │ │ │ │ +00001670: 756c 7420 7769 7468 2061 6273 6f6c 7574 ult with absolut │ │ │ │ +00001680: 6520 7061 7468 206e 616d 6573 0a23 2064 e path names.# d │ │ │ │ +00001690: 6566 6175 6c74 2069 7320 276e 6f27 2c20 efault is 'no', │ │ │ │ +000016a0: 706f 7373 6962 6c65 2076 616c 7565 7320 possible values │ │ │ │ +000016b0: 6172 6520 2779 6573 2720 616e 6420 276e are 'yes' and 'n │ │ │ │ +000016c0: 6f27 0a3b 6162 7350 6174 680a 0a23 2077 o'.;absPath..# w │ │ │ │ +000016d0: 7269 7465 2073 6561 7263 6820 7265 7375 rite search resu │ │ │ │ +000016e0: 6c74 2061 6c73 6f20 746f 2066 696c 650a lt also to file. │ │ │ │ +000016f0: 3b77 7269 7465 546f 4669 6c65 3d0a 0a23 ;writeToFile=..# │ │ │ │ +00001700: 206e 756d 6265 7220 6f66 2070 6172 616c number of paral │ │ │ │ +00001710: 6c65 6c20 6a6f 6273 2c20 6465 6661 756c lel jobs, defaul │ │ │ │ +00001720: 7420 3d20 6368 6f73 656e 2061 7574 6f6d t = chosen autom │ │ │ │ +00001730: 6174 6963 616c 6c79 0a3b 7061 724a 6f62 atically.;parJob │ │ │ │ +00001740: 733d 0a0a 2320 6465 6275 6720 6c65 7665 s=..# debug leve │ │ │ │ +00001750: 6c2c 2070 6f73 7369 626c 6520 7661 6c75 l, possible valu │ │ │ │ +00001760: 6573 2061 7265 2030 2c20 312c 2032 2c20 es are 0, 1, 2, │ │ │ │ +00001770: 6465 6661 756c 7420 3d20 300a 3b64 6562 default = 0.;deb │ │ │ │ +00001780: 7567 3d0a 0a23 2073 686f 7720 6576 6572 ug=..# show ever │ │ │ │ +00001790: 7920 666f 756e 6420 6669 6c65 206f 6e6c y found file onl │ │ │ │ +000017a0: 7920 6f6e 6365 2028 6465 7065 6e64 696e y once (dependin │ │ │ │ +000017b0: 6720 6f6e 206d 6435 2073 756d 290a 2320 g on md5 sum).# │ │ │ │ +000017c0: 6465 6661 756c 7420 6973 2027 6e6f 272c default is 'no', │ │ │ │ +000017d0: 2070 6f73 7369 626c 6520 7661 6c75 6573 possible values │ │ │ │ +000017e0: 2061 7265 2027 7965 7327 2061 6e64 2027 are 'yes' and ' │ │ │ │ +000017f0: 6e6f 270a 3b6f 6e63 653d 0a45 4f43 0a20 no'.;once=.EOC. │ │ │ │ +00001800: 2020 203b 0a0a 0a26 7072 696e 7456 6572 ;...&printVer │ │ │ │ +00001810: 7369 6f6e 7328 5c40 4152 4756 2c20 272d sions(\@ARGV, '- │ │ │ │ +00001820: 5627 293b 0a0a 6d79 2024 4368 6563 6b50 V');..my $CheckP │ │ │ │ +00001830: 6172 203d 0a20 2020 2043 6865 636b 5061 ar =. CheckPa │ │ │ │ +00001840: 7261 6d2d 3e6e 6577 2827 2d63 6f6e 6669 ram->new('-confi │ │ │ │ +00001850: 6746 696c 6527 203d 3e20 272d 6627 2c0a gFile' => '-f',. │ │ │ │ +00001860: 0909 2020 2020 272d 616c 6c6f 774c 6973 .. '-allowLis │ │ │ │ +00001870: 7473 2720 3d3e 2027 7965 7327 2c0a 0909 ts' => 'yes',... │ │ │ │ +00001880: 2020 2020 272d 6c69 7374 4d61 7070 696e '-listMappin │ │ │ │ +00001890: 6727 203d 3e20 2762 6163 6b75 7052 6f6f g' => 'backupRoo │ │ │ │ +000018a0: 7427 2c0a 0909 2020 2020 272d 6c69 7374 t',... '-list │ │ │ │ +000018b0: 2720 3d3e 205b 4f70 7469 6f6e 2d3e 6e65 ' => [Option->ne │ │ │ │ +000018c0: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co │ │ │ │ +000018d0: 6e66 6967 4669 6c65 272c 0a09 0909 0909 nfigFile',...... │ │ │ │ +000018e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +000018f0: 203d 3e20 272d 6627 2c0a 0909 0909 0920 => '-f',...... │ │ │ │ +00001900: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +00001910: 3e20 272d 2d63 6f6e 6669 6746 696c 6527 > '--configFile' │ │ │ │ +00001920: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ │ +00001930: 616d 2720 3d3e 2027 7965 7327 292c 0a20 am' => 'yes'),. │ │ │ │ +00001940: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001950: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ │ +00001960: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00001970: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate' │ │ │ │ +00001980: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001990: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g', │ │ │ │ +000019a0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +000019b0: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene │ │ │ │ +000019c0: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... │ │ │ │ +000019d0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +000019e0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +000019f0: 6c79 5f69 6627 203d 3e0a 276e 6f74 205b ly_if' =>.'not [ │ │ │ │ +00001a00: 636f 6e66 6967 4669 6c65 5d20 616e 6420 configFile] and │ │ │ │ +00001a10: 6e6f 7420 5b62 6163 6b75 7044 6972 5d20 not [backupDir] │ │ │ │ +00001a20: 616e 6420 6e6f 7420 5b62 6163 6b75 7052 and not [backupR │ │ │ │ +00001a30: 6f6f 745d 2061 6e64 206e 6f74 205b 7365 oot] and not [se │ │ │ │ +00001a40: 6172 6368 5275 6c65 5d27 292c 0a20 2020 archRule]'),. │ │ │ │ +00001a50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001a60: 2020 2020 2020 2020 2020 2020 204f 7074 Opt │ │ │ │ +00001a70: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00001a80: 203d 3e20 2762 6163 6b75 7044 6972 272c => 'backupDir', │ │ │ │ +00001a90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00001aa0: 7074 696f 6e27 203d 3e20 272d 6227 2c0a ption' => '-b',. │ │ │ │ +00001ab0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ │ +00001ac0: 6961 7327 203d 3e20 272d 2d62 6163 6b75 ias' => '--backu │ │ │ │ +00001ad0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ │ +00001ae0: 272d 6366 5f6b 6579 2720 3d3e 2027 6261 '-cf_key' => 'ba │ │ │ │ +00001af0: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... │ │ │ │ +00001b00: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ │ +00001b10: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ │ +00001b20: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001b30: 3e20 2773 6561 7263 6852 756c 6527 2c0a > 'searchRule',. │ │ │ │ +00001b40: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00001b50: 7469 6f6e 2720 3d3e 2027 2d73 272c 0a09 tion' => '-s',.. │ │ │ │ +00001b60: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +00001b70: 6173 2720 3d3e 2027 2d2d 7365 6172 6368 as' => '--search │ │ │ │ +00001b80: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... │ │ │ │ +00001b90: 272d 6366 5f6b 6579 2720 3d3e 2027 7365 '-cf_key' => 'se │ │ │ │ +00001ba0: 6172 6368 5275 6c65 272c 0a09 0909 0909 archRule',...... │ │ │ │ +00001bb0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ │ +00001bc0: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ │ +00001bd0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => │ │ │ │ +00001be0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ │ +00001bf0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +00001c00: 3d3e 2027 7772 6974 6541 6273 5061 7468 => 'writeAbsPath │ │ │ │ +00001c10: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001c20: 5f6f 7074 696f 6e27 203d 3e20 272d 6127 _option' => '-a' │ │ │ │ +00001c30: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001c40: 616c 6961 7327 203d 3e20 272d 2d61 6273 alias' => '--abs │ │ │ │ +00001c50: 5061 7468 272c 0a09 0909 0909 2020 2020 Path',...... │ │ │ │ +00001c60: 272d 6366 5f6b 6579 2720 3d3e 2027 6162 '-cf_key' => 'ab │ │ │ │ +00001c70: 7350 6174 6827 2c0a 0909 0909 0920 2020 sPath',...... │ │ │ │ +00001c80: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ │ +00001c90: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ │ +00001ca0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00001cb0: 6577 2827 2d6e 616d 6527 203d 3e20 2777 ew('-name' => 'w │ │ │ │ +00001cc0: 7269 7465 546f 4669 6c65 272c 0a09 0909 riteToFile',.... │ │ │ │ +00001cd0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001ce0: 6e27 203d 3e20 272d 7727 2c0a 0909 0909 n' => '-w',..... │ │ │ │ +00001cf0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +00001d00: 203d 3e20 272d 2d77 7269 7465 546f 4669 => '--writeToFi │ │ │ │ +00001d10: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '- │ │ │ │ +00001d20: 6366 5f6b 6579 2720 3d3e 2027 7772 6974 cf_key' => 'writ │ │ │ │ +00001d30: 6554 6f46 696c 6527 2c0a 0909 0909 0920 eToFile',...... │ │ │ │ +00001d40: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ │ +00001d50: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ │ +00001d60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001d70: 3e20 2770 6172 4a6f 6273 272c 0a09 0909 > 'parJobs',.... │ │ │ │ +00001d80: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001d90: 6e27 203d 3e20 272d 7027 2c0a 0909 0909 n' => '-p',..... │ │ │ │ +00001da0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +00001db0: 203d 3e20 272d 2d70 6172 4a6f 6273 272c => '--parJobs', │ │ │ │ +00001dc0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +00001dd0: 6579 2720 3d3e 2027 7061 724a 6f62 7327 ey' => 'parJobs' │ │ │ │ +00001de0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ │ +00001df0: 616d 2720 3d3e 2027 7965 7327 2c0a 0909 am' => 'yes',... │ │ │ │ +00001e00: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern │ │ │ │ +00001e10: 2720 3d3e 2027 5c41 5b31 2d39 5d5c 642a ' => '\A[1-9]\d* │ │ │ │ +00001e20: 5c5a 2729 2c0a 0909 0909 4f70 7469 6f6e \Z'),.....Option │ │ │ │ +00001e30: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001e40: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... │ │ │ │ +00001e50: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +00001e60: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... │ │ │ │ +00001e70: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ │ +00001e80: 2027 2d2d 6465 6275 6727 2c0a 0909 0909 '--debug',..... │ │ │ │ +00001e90: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +00001ea0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',...... │ │ │ │ +00001eb0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' = │ │ │ │ +00001ec0: 3e20 302c 0a09 0909 0909 2020 2020 272d > 0,...... '- │ │ │ │ +00001ed0: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\A[ │ │ │ │ +00001ee0: 3031 325d 5c5a 2729 2c0a 0909 0909 4f70 012]\Z'),.....Op │ │ │ │ +00001ef0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +00001f00: 2720 3d3e 2027 6f6e 6365 272c 0a09 0909 ' => 'once',.... │ │ │ │ +00001f10: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001f20: 6e27 203d 3e20 272d 6f27 2c0a 0909 0909 n' => '-o',..... │ │ │ │ +00001f30: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +00001f40: 203d 3e20 272d 2d6f 6e63 6527 2c0a 0909 => '--once',... │ │ │ │ +00001f50: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +00001f60: 203d 3e20 276f 6e63 6527 2c0a 0909 0909 => 'once',..... │ │ │ │ +00001f70: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ │ +00001f80: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ │ +00001f90: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio │ │ │ │ +00001fa0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001fb0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',...... │ │ │ │ +00001fc0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001fd0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),. │ │ │ │ +00001fe0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +00001ff0: 272d 6e61 6d65 2720 3d3e 2027 6261 636b '-name' => 'back │ │ │ │ +00002000: 7570 526f 6f74 272c 0a09 0909 0909 2020 upRoot',...... │ │ │ │ +00002010: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +00002020: 6261 636b 7570 526f 6f74 272c 0a09 0909 backupRoot',.... │ │ │ │ +00002030: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ │ +00002040: 3e20 2779 6573 2729 2c0a 2320 6869 6464 > 'yes'),.# hidd │ │ │ │ +00002050: 656e 206f 7074 696f 6e73 0a09 0909 094f en options.....O │ │ │ │ +00002060: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00002070: 6527 203d 3e20 2770 7269 6e74 416c 6c27 e' => 'printAll' │ │ │ │ +00002080: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00002090: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr │ │ │ │ +000020a0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... │ │ │ │ +000020b0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => ' │ │ │ │ +000020c0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ │ +000020d0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +000020e0: 3e20 2772 6561 644e 6f4c 696e 6573 272c > 'readNoLines', │ │ │ │ +000020f0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00002100: 7074 696f 6e27 203d 3e20 272d 2d72 6561 ption' => '--rea │ │ │ │ +00002110: 644e 6f4c 696e 6573 272c 0a09 0909 0909 dNoLines',...... │ │ │ │ +00002120: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ │ +00002130: 2027 7265 6164 4e6f 4c69 6e65 7327 2c0a 'readNoLines',. │ │ │ │ +00002140: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde │ │ │ │ +00002150: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',.... │ │ │ │ +00002160: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ │ +00002170: 203d 3e20 3230 3030 3029 0a09 0920 2020 => 20000)... │ │ │ │ +00002180: 205d 0a20 2020 2029 3b0a 0a0a 2443 6865 ]. );...$Che │ │ │ │ +00002190: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a │ │ │ │ +000021a0: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \@ARGV,. │ │ │ │ +000021b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000021c0: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel │ │ │ │ +000021d0: 700a 2020 2020 2020 2020 2020 2020 2020 p. │ │ │ │ +000021e0: 2020 2029 3b0a 0a23 2041 7573 7765 7274 );..# Auswert │ │ │ │ +000021f0: 756e 6720 6465 7220 5061 7261 6d65 7465 ung der Paramete │ │ │ │ +00002200: 720a 6d79 2024 636f 6e66 6967 4669 6c65 r.my $configFile │ │ │ │ +00002210: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00002220: 744f 7074 5769 7468 5061 7228 2763 6f6e tOptWithPar('con │ │ │ │ +00002230: 6669 6746 696c 6527 293b 0a6d 7920 2467 figFile');.my $g │ │ │ │ +00002240: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil │ │ │ │ +00002250: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ │ +00002260: 6574 4f70 7457 6974 6850 6172 2827 6765 etOptWithPar('ge │ │ │ │ +00002270: 6e65 7261 7465 2729 3b0a 6d79 2024 7072 nerate');.my $pr │ │ │ │ +00002280: 696e 7420 3d20 2443 6865 636b 5061 722d int = $CheckPar- │ │ │ │ +00002290: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +000022a0: 7228 2770 7269 6e74 2729 3b0a 6d79 2024 r('print');.my $ │ │ │ │ +000022b0: 6261 636b 7570 4469 7220 3d20 2443 6865 backupDir = $Che │ │ │ │ +000022c0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +000022d0: 6850 6172 2827 6261 636b 7570 4469 7227 hPar('backupDir' │ │ │ │ +000022e0: 293b 0a6d 7920 2477 7269 7465 546f 4669 );.my $writeToFi │ │ │ │ +000022f0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar-> │ │ │ │ +00002300: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w │ │ │ │ +00002310: 7269 7465 546f 4669 6c65 2729 3b0a 6d79 riteToFile');.my │ │ │ │ +00002320: 2024 7365 6172 6368 5275 6c65 203d 2024 $searchRule = $ │ │ │ │ +00002330: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00002340: 5769 7468 5061 7228 2773 6561 7263 6852 WithPar('searchR │ │ │ │ +00002350: 756c 6527 293b 2020 2020 2320 7665 6374 ule'); # vect │ │ │ │ +00002360: 6f72 0a6d 7920 2477 7269 7465 4162 7350 or.my $writeAbsP │ │ │ │ +00002370: 6174 6820 3d20 2443 6865 636b 5061 722d ath = $CheckPar- │ │ │ │ +00002380: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ │ +00002390: 7228 2777 7269 7465 4162 7350 6174 6827 r('writeAbsPath' │ │ │ │ +000023a0: 293b 0a6d 7920 2470 6172 4a6f 6273 203d );.my $parJobs = │ │ │ │ +000023b0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +000023c0: 7074 5769 7468 5061 7228 2770 6172 4a6f ptWithPar('parJo │ │ │ │ +000023d0: 6273 2729 3b0a 6d79 2024 6465 6275 6720 bs');.my $debug │ │ │ │ +000023e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000023f0: 4f70 7457 6974 6850 6172 2827 6465 6275 OptWithPar('debu │ │ │ │ +00002400: 6727 293b 0a6d 7920 246f 6e63 6520 3d20 g');.my $once = │ │ │ │ +00002410: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00002420: 7457 6974 686f 7574 5061 7228 276f 6e63 tWithoutPar('onc │ │ │ │ +00002430: 6527 293b 0a6d 7920 2840 6261 636b 7570 e');.my (@backup │ │ │ │ +00002440: 526f 6f74 2920 3d20 2443 6865 636b 5061 Root) = $CheckPa │ │ │ │ +00002450: 722d 3e67 6574 4c69 7374 5061 7228 293b r->getListPar(); │ │ │ │ +00002460: 0a0a 6d79 2024 7072 696e 7441 6c6c 203d ..my $printAll = │ │ │ │ +00002470: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00002480: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr │ │ │ │ +00002490: 696e 7441 6c6c 2729 3b0a 2470 7269 6e74 intAll');.$print │ │ │ │ +000024a0: 203d 2031 2069 6620 2470 7269 6e74 416c = 1 if $printAl │ │ │ │ +000024b0: 6c3b 0a6d 7920 2472 6561 644e 6f4c 696e l;.my $readNoLin │ │ │ │ +000024c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ │ +000024d0: 6765 744f 7074 5769 7468 5061 7228 2772 getOptWithPar('r │ │ │ │ +000024e0: 6561 644e 6f4c 696e 6573 2729 3b0a 0a75 eadNoLines');..u │ │ │ │ +000024f0: 6e6c 6573 7320 2824 7061 724a 6f62 7329 nless ($parJobs) │ │ │ │ +00002500: 0a7b 0a20 2020 206c 6f63 616c 202a 4649 .{. local *FI │ │ │ │ +00002510: 4c45 3b0a 2020 2020 6966 2028 6f70 656e LE;. if (open │ │ │ │ +00002520: 2846 494c 452c 2022 2f70 726f 632f 6370 (FILE, "/proc/cp │ │ │ │ +00002530: 7569 6e66 6f22 2929 0a20 2020 207b 0a09 uinfo")). {.. │ │ │ │ +00002540: 6d79 2024 6c3b 0a09 2470 6172 4a6f 6273 my $l;..$parJobs │ │ │ │ +00002550: 203d 2031 3b0a 0977 6869 6c65 2028 246c = 1;..while ($l │ │ │ │ +00002560: 203d 203c 4649 4c45 3e29 0a09 7b0a 0920 = )..{.. │ │ │ │ +00002570: 2020 2024 7061 724a 6f62 732b 2b20 6966 $parJobs++ if │ │ │ │ +00002580: 2024 6c20 3d7e 202f 7072 6f63 6573 736f $l =~ /processo │ │ │ │ +00002590: 722f 3b0a 097d 0a09 636c 6f73 6528 4649 r/;..}..close(FI │ │ │ │ +000025a0: 4c45 293b 0a20 2020 207d 0a20 2020 2024 LE);. }. $ │ │ │ │ +000025b0: 7061 724a 6f62 7320 3d20 3220 6966 2024 parJobs = 2 if $ │ │ │ │ +000025c0: 7061 724a 6f62 7320 3c20 323b 0a7d 0a0a parJobs < 2;.}.. │ │ │ │ +000025d0: 6966 2028 2467 656e 6572 6174 6543 6f6e if ($generateCon │ │ │ │ +000025e0: 6669 6746 696c 6529 0a7b 0a20 2020 206d figFile).{. m │ │ │ │ +000025f0: 7920 2461 6e73 7765 7220 3d20 2779 6573 y $answer = 'yes │ │ │ │ +00002600: 273b 0a20 2020 2069 6620 282d 6520 2467 ';. if (-e $g │ │ │ │ +00002610: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil │ │ │ │ +00002620: 6529 0a20 2020 207b 0a09 646f 0a09 7b0a e). {..do..{. │ │ │ │ +00002630: 0920 2020 2070 7269 6e74 2022 3c24 6765 . print "<$ge │ │ │ │ +00002640: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile │ │ │ │ +00002650: 3e20 616c 7265 6164 7920 6578 6973 7473 > already exists │ │ │ │ +00002660: 2e20 4f76 6572 7772 6974 653f 5c6e 222c . Overwrite?\n", │ │ │ │ +00002670: 0a09 2020 2020 2279 6573 202f 206e 6f20 .. "yes / no │ │ │ │ +00002680: 2d3e 2022 3b0a 0920 2020 2024 616e 7377 -> ";.. $answ │ │ │ │ +00002690: 6572 203d 203c 5354 4449 4e3e 3b0a 0920 er = ;.. │ │ │ │ +000026a0: 2020 2063 686f 6d70 2024 616e 7377 6572 chomp $answer │ │ │ │ +000026b0: 3b0a 097d 2077 6869 6c65 2028 2461 6e73 ;..} while ($ans │ │ │ │ +000026c0: 7765 7220 6e65 2027 7965 7327 2061 6e64 wer ne 'yes' and │ │ │ │ +000026d0: 2024 616e 7377 6572 206e 6520 276e 6f27 $answer ne 'no' │ │ │ │ +000026e0: 293b 0a20 2020 207d 0a20 2020 2065 7869 );. }. exi │ │ │ │ +000026f0: 7420 3020 6966 2024 616e 7377 6572 2065 t 0 if $answer e │ │ │ │ +00002700: 7120 276e 6f27 3b0a 0a20 2020 206c 6f63 q 'no';.. loc │ │ │ │ +00002710: 616c 202a 4649 4c45 3b0a 2020 2020 6f70 al *FILE;. op │ │ │ │ +00002720: 656e 2846 494c 452c 2022 3e20 2467 656e en(FILE, "> $gen │ │ │ │ +00002730: 6572 6174 6543 6f6e 6669 6746 696c 6522 erateConfigFile" │ │ │ │ +00002740: 2920 6f72 0a09 6469 6520 2263 6f75 6c64 ) or..die "could │ │ │ │ +00002750: 206e 6f74 2077 7269 7465 2074 6f20 3c24 not write to <$ │ │ │ │ +00002760: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi │ │ │ │ +00002770: 6c65 3e22 3b0a 2020 2020 7072 696e 7420 le>";. print │ │ │ │ +00002780: 4649 4c45 2024 7465 6d70 6c61 7465 436f FILE $templateCo │ │ │ │ +00002790: 6e66 6967 4669 6c65 3b0a 2020 2020 636c nfigFile;. cl │ │ │ │ +000027a0: 6f73 6528 4649 4c45 293b 0a20 2020 2065 ose(FILE);. e │ │ │ │ +000027b0: 7869 7420 303b 0a7d 0a0a 0a69 6620 2824 xit 0;.}...if ($ │ │ │ │ +000027c0: 7072 696e 7429 0a7b 0a20 2020 2024 4368 print).{. $Ch │ │ │ │ +000027d0: 6563 6b50 6172 2d3e 7072 696e 7428 272d eckPar->print('- │ │ │ │ +000027e0: 7368 6f77 4869 6464 656e 2720 3d3e 2024 showHidden' => $ │ │ │ │ +000027f0: 7072 696e 7441 6c6c 293b 0a7d 0a0a 6d79 printAll);.}..my │ │ │ │ +00002800: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL │ │ │ │ +00002810: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' │ │ │ │ +00002820: 3d3e 205b 2749 3a49 4e46 4f27 2c20 2757 => ['I:INFO', 'W │ │ │ │ +00002830: 3a57 4152 4e49 4e47 272c 2027 453a 4552 :WARNING', 'E:ER │ │ │ │ +00002840: 524f 5227 2c0a 0909 0909 2020 2020 2020 ROR',..... │ │ │ │ +00002850: 2753 3a53 5441 5449 5354 4943 272c 2027 'S:STATISTIC', ' │ │ │ │ +00002860: 443a 4445 4255 4727 2c20 2756 3a56 4552 D:DEBUG', 'V:VER │ │ │ │ +00002870: 5349 4f4e 275d 293b 0a0a 2470 724c 6f67 SION']);..$prLog │ │ │ │ +00002880: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00002890: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. ' │ │ │ │ +000028a0: 2d73 7472 2720 3d3e 205b 2224 5645 5253 -str' => ["$VERS │ │ │ │ +000028b0: 494f 4e70 4e61 6d65 2c20 246d 6169 6e3a IONpName, $main: │ │ │ │ +000028c0: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS │ │ │ │ +000028d0: 494f 4e2c 2022 202e 0a09 0909 2022 6275 ION, " ..... "bu │ │ │ │ +000028e0: 696c 6420 2456 4552 5349 4f4e 7376 6e49 ild $VERSIONsvnI │ │ │ │ +000028f0: 4422 5d29 3b0a 0a24 7072 4c6f 672d 3e70 D"]);..$prLog->p │ │ │ │ +00002900: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00002910: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ │ +00002920: 7227 203d 3e20 5b22 6d69 7373 696e 6720 r' => ["missing │ │ │ │ +00002930: 7061 7261 6d65 7465 7273 2062 6163 6b75 parameters backu │ │ │ │ +00002940: 7044 6972 2061 6e64 2073 6561 7263 6852 pDir and searchR │ │ │ │ +00002950: 756c 655c 6e24 4865 6c70 225d 2c0a 0920 ule\n$Help"],.. │ │ │ │ +00002960: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ │ +00002970: 3129 0a20 2020 2075 6e6c 6573 7320 6465 1). unless de │ │ │ │ +00002980: 6669 6e65 6420 2462 6163 6b75 7044 6972 fined $backupDir │ │ │ │ +00002990: 2061 6e64 2064 6566 696e 6564 2024 7365 and defined $se │ │ │ │ +000029a0: 6172 6368 5275 6c65 3b0a 2470 724c 6f67 archRule;.$prLog │ │ │ │ +000029b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000029c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. ' │ │ │ │ +000029d0: 2d73 7472 2720 3d3e 205b 226d 6973 7369 -str' => ["missi │ │ │ │ +000029e0: 6e67 2070 6172 616d 6574 6572 2062 6163 ng parameter bac │ │ │ │ +000029f0: 6b75 7044 6972 5c6e 2448 656c 7022 5d2c kupDir\n$Help"], │ │ │ │ +00002a00: 0a09 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ │ +00002a10: 3d3e 2031 290a 2020 2020 756e 6c65 7373 => 1). unless │ │ │ │ +00002a20: 2064 6566 696e 6564 2024 6261 636b 7570 defined $backup │ │ │ │ +00002a30: 4469 723b 0a24 7072 4c6f 672d 3e70 7269 Dir;.$prLog->pri │ │ │ │ +00002a40: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00002a50: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ │ +00002a60: 203d 3e20 5b22 6261 636b 7570 4469 7220 => ["backupDir │ │ │ │ +00002a70: 6469 7265 6374 6f72 7920 3c24 6261 636b directory <$back │ │ │ │ +00002a80: 7570 4469 723e 2064 6f65 7320 6e6f 7420 upDir> does not │ │ │ │ +00002a90: 6578 6973 7420 2220 2e0a 0920 2020 2020 exist " ... │ │ │ │ +00002aa0: 2022 6f72 2069 7320 6e6f 7420 6163 6365 "or is not acce │ │ │ │ +00002ab0: 7369 626c 6522 5d2c 0a09 2020 2020 2020 sible"],.. │ │ │ │ +00002ac0: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). │ │ │ │ +00002ad0: 2020 756e 6c65 7373 202d 7220 2462 6163 unless -r $bac │ │ │ │ +00002ae0: 6b75 7044 6972 3b0a 2470 724c 6f67 2d3e kupDir;.$prLog-> │ │ │ │ +00002af0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00002b00: 2027 4527 2c0a 0920 2020 2020 2027 2d73 'E',.. '-s │ │ │ │ +00002b10: 7472 2720 3d3e 205b 226d 6973 7369 6e67 tr' => ["missing │ │ │ │ +00002b20: 2070 6172 616d 6574 6572 2073 6561 7263 parameter searc │ │ │ │ +00002b30: 6852 756c 655c 6e24 4865 6c70 225d 2c0a hRule\n$Help"],. │ │ │ │ +00002b40: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ │ +00002b50: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless │ │ │ │ +00002b60: 6465 6669 6e65 6420 2473 6561 7263 6852 defined $searchR │ │ │ │ +00002b70: 756c 653b 0a0a 0a6d 7920 2473 5275 6c65 ule;...my $sRule │ │ │ │ +00002b80: 203d 2065 7661 6c49 6e6f 6465 5275 6c65 = evalInodeRule │ │ │ │ +00002b90: 2d3e 6e65 7728 272d 6c69 6e65 2720 3d3e ->new('-line' => │ │ │ │ +00002ba0: 2024 7365 6172 6368 5275 6c65 2c0a 0909 $searchRule,... │ │ │ │ +00002bb0: 0920 2020 2020 2020 272d 6b65 794e 616d . '-keyNam │ │ │ │ +00002bc0: 6527 203d 3e20 2773 6561 7263 6827 2c0a e' => 'search',. │ │ │ │ +00002bd0: 0909 0920 2020 2020 2020 272d 6465 6275 ... '-debu │ │ │ │ +00002be0: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,... │ │ │ │ +00002bf0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog' │ │ │ │ +00002c00: 203d 3e20 2470 724c 6f67 293b 0a0a 2470 => $prLog);..$p │ │ │ │ +00002c10: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00002c20: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. │ │ │ │ +00002c30: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => ["s │ │ │ │ +00002c40: 6561 7263 6869 6e67 2077 6974 6820 7275 earching with ru │ │ │ │ +00002c50: 6c65 222c 2027 2020 2720 2e0a 0909 0920 le", ' ' ..... │ │ │ │ +00002c60: 6a6f 696e 2827 2027 2c20 407b 2473 5275 join(' ', @{$sRu │ │ │ │ +00002c70: 6c65 2d3e 6765 744c 696e 6528 297d 295d le->getLine()})] │ │ │ │ +00002c80: 293b 0a0a 6966 2028 2470 7269 6e74 290a );..if ($print). │ │ │ │ +00002c90: 7b0a 2020 2020 6578 6974 2030 3b0a 7d0a {. exit 0;.}. │ │ │ │ +00002ca0: 0a0a 6d79 2024 616c 6c4c 696e 6b73 203d ..my $allLinks = │ │ │ │ +00002cb0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new( │ │ │ │ +00002cc0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac │ │ │ │ +00002cd0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... │ │ │ │ +00002ce0: 2020 272d 6b69 6e64 2720 3d3e 2027 7265 '-kind' => 're │ │ │ │ +00002cf0: 6375 7273 6976 6553 6561 7263 6827 2c0a cursiveSearch',. │ │ │ │ +00002d00: 0909 0920 2020 2020 2027 2d76 6572 626f ... '-verbo │ │ │ │ +00002d10: 7365 2720 3d3e 2030 2c0a 0909 0920 2020 se' => 0,.... │ │ │ │ +00002d20: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +00002d30: 7072 4c6f 6729 3b0a 0a6d 7920 2461 6c6c prLog);..my $all │ │ │ │ +00002d40: 5374 6275 4469 7273 203d 2024 616c 6c4c StbuDirs = $allL │ │ │ │ +00002d50: 696e 6b73 2d3e 6765 7441 6c6c 5374 6f72 inks->getAllStor │ │ │ │ +00002d60: 6542 6163 6b75 7044 6972 7328 293b 0a0a eBackupDirs();.. │ │ │ │ +00002d70: 0a23 2066 696c 7465 7220 7468 6520 7265 .# filter the re │ │ │ │ +00002d80: 6c65 7661 6e74 2062 6163 6b75 7073 0a6d levant backups.m │ │ │ │ +00002d90: 7920 2840 6469 7273 546f 5365 6172 6368 y (@dirsToSearch │ │ │ │ +00002da0: 2920 3d20 2829 3b0a 6966 2028 4062 6163 ) = ();.if (@bac │ │ │ │ +00002db0: 6b75 7052 6f6f 7429 0a7b 0a20 2020 206d kupRoot).{. m │ │ │ │ +00002dc0: 7920 2464 3b0a 2020 2020 666f 7265 6163 y $d;. foreac │ │ │ │ +00002dd0: 6820 2464 2028 4062 6163 6b75 7052 6f6f h $d (@backupRoo │ │ │ │ +00002de0: 7429 0a20 2020 207b 0a09 756e 6c65 7373 t). {..unless │ │ │ │ +00002df0: 2028 2464 203d 7e20 6d23 5c41 2f23 290a ($d =~ m#\A/#). │ │ │ │ +00002e00: 097b 0a09 2020 2020 2464 203d 2022 2462 .{.. $d = "$b │ │ │ │ +00002e10: 6163 6b75 7044 6972 2f24 6422 3b0a 097d ackupDir/$d";..} │ │ │ │ +00002e20: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00002e30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00002e40: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00002e50: 3e20 5b22 6469 7265 6374 6f72 7920 3c24 > ["directory <$ │ │ │ │ +00002e60: 643e 2064 6f65 7320 6e6f 7420 6578 6973 d> does not exis │ │ │ │ +00002e70: 7420 2220 2e0a 0909 0909 2022 6f72 2069 t " ...... "or i │ │ │ │ +00002e80: 7320 6e6f 7420 6163 6365 7369 626c 6522 s not accesible" │ │ │ │ +00002e90: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi │ │ │ │ +00002ea0: 7427 203d 3e20 3129 0a09 2020 2020 756e t' => 1).. un │ │ │ │ +00002eb0: 6c65 7373 202d 7220 2464 3b0a 0924 6420 less -r $d;..$d │ │ │ │ +00002ec0: 3d20 263a 3a61 6273 6f6c 7574 6550 6174 = &::absolutePat │ │ │ │ +00002ed0: 6828 2464 293b 0a09 2470 724c 6f67 2d3e h($d);..$prLog-> │ │ │ │ +00002ee0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00002ef0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +00002f00: 7374 7227 203d 3e20 5b22 6469 7265 6374 str' => ["direct │ │ │ │ +00002f10: 6f72 7920 3c24 643e 2069 7320 6e6f 7420 ory <$d> is not │ │ │ │ +00002f20: 6120 7375 6264 6972 6563 746f 7279 2022 a subdirectory " │ │ │ │ +00002f30: 202e 0a09 0909 0920 226f 6620 6261 636b ...... "of back │ │ │ │ +00002f40: 7570 4469 7220 3c24 6261 636b 7570 4469 upDir <$backupDi │ │ │ │ +00002f50: 723e 225d 2c0a 0909 2020 2020 2020 272d r>"],... '- │ │ │ │ +00002f60: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ │ +00002f70: 2075 6e6c 6573 7320 2464 203d 7e20 2f5c unless $d =~ /\ │ │ │ │ +00002f80: 4124 6261 636b 7570 4469 722f 3b0a 0a09 A$backupDir/;... │ │ │ │ +00002f90: 2320 6e6f 7720 6765 7420 616c 6c20 6469 # now get all di │ │ │ │ +00002fa0: 7273 2066 726f 6d20 4024 616c 6c53 7462 rs from @$allStb │ │ │ │ +00002fb0: 7544 6972 7320 6265 6c6f 7720 2464 0a09 uDirs below $d.. │ │ │ │ +00002fc0: 6d79 2024 613b 0a09 666f 7265 6163 6820 my $a;..foreach │ │ │ │ +00002fd0: 2461 2028 4024 616c 6c53 7462 7544 6972 $a (@$allStbuDir │ │ │ │ +00002fe0: 7329 0a09 7b0a 0920 2020 2070 7573 6820 s)..{.. push │ │ │ │ +00002ff0: 4064 6972 7354 6f53 6561 7263 682c 2024 @dirsToSearch, $ │ │ │ │ +00003000: 610a 0909 6966 2024 6120 3d7e 202f 5c41 a...if $a =~ /\A │ │ │ │ +00003010: 2464 5c2f 2f73 206f 7220 2461 203d 7e20 $d\//s or $a =~ │ │ │ │ +00003020: 2f5c 4124 645c 7a2f 733b 0a09 7d0a 2020 /\A$d\z/s;..}. │ │ │ │ +00003030: 2020 7d0a 2020 2020 2840 6469 7273 546f }. (@dirsTo │ │ │ │ +00003040: 5365 6172 6368 2920 3d20 736f 7274 207b Search) = sort { │ │ │ │ +00003050: 2024 6120 636d 7020 2462 207d 2040 6469 $a cmp $b } @di │ │ │ │ +00003060: 7273 546f 5365 6172 6368 3b0a 7d0a 656c rsToSearch;.}.el │ │ │ │ +00003070: 7365 0a7b 0a20 2020 2028 4064 6972 7354 se.{. (@dirsT │ │ │ │ +00003080: 6f53 6561 7263 6829 203d 2073 6f72 7420 oSearch) = sort │ │ │ │ +00003090: 7b20 2461 2063 6d70 2024 6220 7d20 4024 { $a cmp $b } @$ │ │ │ │ +000030a0: 616c 6c53 7462 7544 6972 733b 0a7d 0a0a allStbuDirs;.}.. │ │ │ │ +000030b0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ │ +000030c0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +000030d0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +000030e0: 5b22 6e6f 7468 696e 6720 746f 2073 6561 ["nothing to sea │ │ │ │ +000030f0: 7263 682c 206e 6f20 6261 636b 7570 2064 rch, no backup d │ │ │ │ +00003100: 6972 6563 746f 7269 6573 2073 7065 6369 irectories speci │ │ │ │ +00003110: 6669 6564 225d 2c0a 0920 2020 2020 2027 fied"],.. ' │ │ │ │ +00003120: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ │ +00003130: 2075 6e6c 6573 7320 4064 6972 7354 6f53 unless @dirsToS │ │ │ │ +00003140: 6561 7263 683b 0a0a 7b0a 2020 2020 6d79 earch;..{. my │ │ │ │ +00003150: 2028 406f 7574 2c20 2464 293b 0a20 2020 (@out, $d);. │ │ │ │ +00003160: 2066 6f72 6561 6368 2024 6420 2840 6469 foreach $d (@di │ │ │ │ +00003170: 7273 546f 5365 6172 6368 290a 2020 2020 rsToSearch). │ │ │ │ +00003180: 7b0a 0970 7573 6820 406f 7574 2c20 2220 {..push @out, " │ │ │ │ +00003190: 2024 6422 3b0a 2020 2020 7d0a 2020 2020 $d";. }. │ │ │ │ +000031a0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000031b0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +000031c0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => ["ba │ │ │ │ +000031d0: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories │ │ │ │ +000031e0: 2074 6f20 7365 6172 6368 222c 2040 6f75 to search", @ou │ │ │ │ +000031f0: 745d 293b 0a7d 0a0a 0a6d 7920 2470 6172 t]);.}...my $par │ │ │ │ +00003200: 466f 726b 203d 2070 6172 616c 6c65 6c46 Fork = parallelF │ │ │ │ +00003210: 6f72 6b2d 3e6e 6577 2827 2d6d 6178 5061 ork->new('-maxPa │ │ │ │ +00003220: 7261 6c6c 656c 2720 3d3e 2024 7061 724a rallel' => $parJ │ │ │ │ +00003230: 6f62 732c 0a09 0909 0927 2d70 724c 6f67 obs,.....'-prLog │ │ │ │ +00003240: 2720 3d3e 2024 7072 4c6f 6729 3b0a 6d79 ' => $prLog);.my │ │ │ │ +00003250: 2024 7469 6e79 5363 6865 6420 3d20 7469 $tinySched = ti │ │ │ │ +00003260: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler- │ │ │ │ +00003270: 3e6e 6577 2827 2d70 724c 6f67 2720 3d3e >new('-prLog' => │ │ │ │ +00003280: 2024 7072 4c6f 6729 3b0a 0a23 0a23 2073 $prLog);..#.# s │ │ │ │ +00003290: 6561 7263 6820 7468 726f 7567 6820 616c earch through al │ │ │ │ +000032a0: 6c20 6469 7265 6374 6f72 6965 7320 696e l directories in │ │ │ │ +000032b0: 2040 6469 7273 546f 5365 6172 6368 0a23 @dirsToSearch.# │ │ │ │ +000032c0: 0a6c 6f63 616c 202a 4649 4c45 3b0a 6f70 .local *FILE;.op │ │ │ │ +000032d0: 656e 2846 494c 452c 2022 3e20 2477 7269 en(FILE, "> $wri │ │ │ │ +000032e0: 7465 546f 4669 6c65 2229 206f 720a 2020 teToFile") or. │ │ │ │ +000032f0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00003300: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00003310: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00003320: 6361 6e6e 6f74 206f 7065 6e20 3c24 7772 cannot open <$wr │ │ │ │ +00003330: 6974 6554 6f46 696c 653e 2066 6f72 2077 iteToFile> for w │ │ │ │ +00003340: 7269 7469 6e67 225d 2c0a 0909 2020 272d riting"],... '- │ │ │ │ +00003350: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ │ +00003360: 6966 2024 7772 6974 6554 6f46 696c 653b if $writeToFile; │ │ │ │ +00003370: 0a6d 7920 2824 6469 7254 6f53 6561 7263 .my ($dirToSearc │ │ │ │ +00003380: 682c 2025 6f6e 6365 2c20 246e 652c 2024 h, %once, $ne, $ │ │ │ │ +00003390: 6e62 2c20 2473 293b 0a66 6f72 6561 6368 nb, $s);.foreach │ │ │ │ +000033a0: 2024 6469 7254 6f53 6561 7263 6820 2840 $dirToSearch (@ │ │ │ │ +000033b0: 6469 7273 546f 5365 6172 6368 290a 7b0a dirsToSearch).{. │ │ │ │ +000033c0: 2020 2020 756e 6c65 7373 2028 2d72 2022 unless (-r " │ │ │ │ +000033d0: 2464 6972 546f 5365 6172 6368 2f24 6368 $dirToSearch/$ch │ │ │ │ +000033e0: 6563 6b53 756d 4669 6c65 2220 6f72 0a09 eckSumFile" or.. │ │ │ │ +000033f0: 2020 2020 2d72 2022 2464 6972 546f 5365 -r "$dirToSe │ │ │ │ +00003400: 6172 6368 2f24 6368 6563 6b53 756d 4669 arch/$checkSumFi │ │ │ │ +00003410: 6c65 2e62 7a32 2229 0a20 2020 207b 0a09 le.bz2"). {.. │ │ │ │ +00003420: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00003430: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00003440: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00003450: 5b22 6e6f 2072 6561 6461 626c 6520 3c24 ["no readable <$ │ │ │ │ +00003460: 6368 6563 6b53 756d 4669 6c65 3e20 696e checkSumFile> in │ │ │ │ +00003470: 2022 202e 0a09 0909 0920 223c 2464 6972 " ...... "<$dir │ │ │ │ +00003480: 546f 5365 6172 6368 3e20 2e2e 2e20 736b ToSearch> ... sk │ │ │ │ +00003490: 6970 7069 6e67 225d 293b 0a09 6e65 7874 ipping"]);..next │ │ │ │ +000034a0: 3b0a 2020 2020 7d0a 2020 2020 6966 2028 ;. }. if ( │ │ │ │ +000034b0: 2d66 2022 2464 6972 546f 5365 6172 6368 -f "$dirToSearch │ │ │ │ +000034c0: 2f24 6368 6563 6b53 756d 4669 6c65 2e6e /$checkSumFile.n │ │ │ │ +000034d0: 6f74 4669 6e69 7368 6564 2229 0a20 2020 otFinished"). │ │ │ │ +000034e0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin │ │ │ │ +000034f0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00003500: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ │ +00003510: 203d 3e20 5b22 6261 636b 7570 203c 2464 => ["backup <$d │ │ │ │ +00003520: 6972 546f 5365 6172 6368 3e20 6e6f 7420 irToSearch> not │ │ │ │ +00003530: 6669 6e69 7368 6564 2220 2e0a 0909 0909 finished" ...... │ │ │ │ +00003540: 2022 202e 2e2e 2073 6b69 7070 696e 6722 " ... skipping" │ │ │ │ +00003550: 5d29 3b0a 096e 6578 743b 0a20 2020 207d ]);..next;. } │ │ │ │ +00003560: 0a0a 2020 2020 246e 622b 2b3b 0a0a 2020 .. $nb++;.. │ │ │ │ +00003570: 2020 2473 203d 2022 3d3d 3d20 7365 6172 $s = "=== sear │ │ │ │ +00003580: 6368 696e 6720 696e 203c 2464 6972 546f ching in <$dirTo │ │ │ │ +00003590: 5365 6172 6368 3e3a 5c6e 223b 0a20 2020 Search>:\n";. │ │ │ │ +000035a0: 200a 2020 2020 7072 696e 7420 2473 3b0a . print $s;. │ │ │ │ +000035b0: 2020 2020 7072 696e 7420 4649 4c45 2024 print FILE $ │ │ │ │ +000035c0: 7320 6966 2024 7772 6974 6554 6f46 696c s if $writeToFil │ │ │ │ +000035d0: 6520 616e 6420 6e6f 7420 2477 7269 7465 e and not $write │ │ │ │ +000035e0: 4162 7350 6174 683b 0a0a 2020 2020 6d79 AbsPath;.. my │ │ │ │ +000035f0: 2024 7263 7366 203d 0a09 7265 6164 4368 $rcsf =..readCh │ │ │ │ +00003600: 6563 6b53 756d 4669 6c65 2d3e 6e65 7728 eckSumFile->new( │ │ │ │ +00003610: 272d 6368 6563 6b53 756d 4669 6c65 2720 '-checkSumFile' │ │ │ │ +00003620: 3d3e 2022 2464 6972 546f 5365 6172 6368 => "$dirToSearch │ │ │ │ +00003630: 2f24 6368 6563 6b53 756d 4669 6c65 222c /$checkSumFile", │ │ │ │ +00003640: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ │ +00003650: 6727 203d 3e20 2470 724c 6f67 293b 0a23 g' => $prLog);.# │ │ │ │ +00003660: 2020 2020 6d79 2024 6d65 7461 203d 2024 my $meta = $ │ │ │ │ +00003670: 7263 7366 2d3e 6765 744d 6574 6156 616c rcsf->getMetaVal │ │ │ │ +00003680: 4669 656c 6428 293b 0a23 2020 2020 6d79 Field();.# my │ │ │ │ +00003690: 2024 706f 7374 6669 7820 3d20 2824 246d $postfix = ($$m │ │ │ │ +000036a0: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})- │ │ │ │ +000036b0: 3e5b 305d 3b20 2020 2023 2070 6f73 7466 >[0]; # postf │ │ │ │ +000036c0: 6978 2066 6f72 2063 6f6d 7072 6573 7369 ix for compressi │ │ │ │ +000036d0: 6f6e 0a20 2020 206d 7920 2470 6f73 7466 on. my $postf │ │ │ │ +000036e0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI │ │ │ │ +000036f0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post │ │ │ │ +00003700: 6669 7827 293b 0a0a 2020 2020 6d79 2024 fix');.. my $ │ │ │ │ +00003710: 6a6f 6254 6f44 6f20 3d20 313b 0a20 2020 jobToDo = 1;. │ │ │ │ +00003720: 206d 7920 2470 6172 466f 726b 546f 446f my $parForkToDo │ │ │ │ +00003730: 203d 2031 3b0a 2020 2020 7768 696c 6520 = 1;. while │ │ │ │ +00003740: 2824 6a6f 6254 6f44 6f20 3e20 3020 6f72 ($jobToDo > 0 or │ │ │ │ +00003750: 2024 7061 7246 6f72 6b54 6f44 6f20 3e20 $parForkToDo > │ │ │ │ +00003760: 3029 0a20 2020 207b 0a09 230a 0923 2063 0). {..#..# c │ │ │ │ +00003770: 6865 636b 2066 6f72 206a 6f62 7320 646f heck for jobs do │ │ │ │ +00003780: 6e65 0a09 230a 096d 7920 246f 6c64 203d ne..#..my $old = │ │ │ │ +00003790: 2024 7061 7246 6f72 6b2d 3e63 6865 636b $parFork->check │ │ │ │ +000037a0: 4f6e 6528 293b 0a09 6966 2028 246f 6c64 One();..if ($old │ │ │ │ +000037b0: 290a 097b 0a09 2020 2020 6d79 2024 746d )..{.. my $tm │ │ │ │ +000037c0: 704e 616d 6520 3d20 246f 6c64 2d3e 6765 pName = $old->ge │ │ │ │ +000037d0: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in │ │ │ │ +000037e0: 666f 2729 3b0a 0920 2020 206c 6f63 616c fo');.. local │ │ │ │ +000037f0: 202a 494e 3b0a 0920 2020 206f 7065 6e28 *IN;.. open( │ │ │ │ +00003800: 494e 2c20 2474 6d70 4e61 6d65 2920 6f72 IN, $tmpName) or │ │ │ │ +00003810: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ │ +00003820: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00003830: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ │ +00003840: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => ["cannot ope │ │ │ │ +00003850: 6e20 7465 6d70 6f72 6172 7920 6669 6c65 n temporary file │ │ │ │ +00003860: 203c 2474 6d70 4e61 6d65 3e22 5d2c 0a09 <$tmpName>"],.. │ │ │ │ +00003870: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ │ +00003880: 3d3e 2031 293b 0a09 2020 2020 6d79 2024 => 1);.. my $ │ │ │ │ +00003890: 6c3b 0a09 2020 2020 7768 696c 6520 2824 l;.. while ($ │ │ │ │ +000038a0: 6c20 3d20 3c49 4e3e 290a 0920 2020 207b l = ).. { │ │ │ │ +000038b0: 0a09 0963 686f 7020 246c 3b0a 0909 6d79 ...chop $l;...my │ │ │ │ +000038c0: 2028 246d 6435 7375 6d2c 2024 7369 7a65 ($md5sum, $size │ │ │ │ +000038d0: 2c20 246d 6f64 652c 2024 6374 696d 652c , $mode, $ctime, │ │ │ │ +000038e0: 2024 6d74 696d 652c 2024 7569 642c 2024 $mtime, $uid, $ │ │ │ │ +000038f0: 6769 642c 0a09 0920 2020 2024 6669 6c65 gid,... $file │ │ │ │ +00003900: 6e61 6d65 2920 3d20 7370 6c69 7428 2f5c name) = split(/\ │ │ │ │ +00003910: 732b 2f2c 2024 6c2c 2038 293b 0a0a 0909 s+/, $l, 8);.... │ │ │ │ +00003920: 6966 2028 246f 6e63 6529 0a09 097b 0a09 if ($once)...{.. │ │ │ │ +00003930: 0920 2020 206e 6578 7420 6966 2065 7869 . next if exi │ │ │ │ +00003940: 7374 7320 246f 6e63 657b 246d 6435 7375 sts $once{$md5su │ │ │ │ +00003950: 6d7d 3b0a 0909 2020 2020 246f 6e63 657b m};... $once{ │ │ │ │ +00003960: 246d 6435 7375 6d7d 203d 2031 3b0a 0909 $md5sum} = 1;... │ │ │ │ +00003970: 7d0a 0a09 0924 6669 6c65 6e61 6d65 203d }....$filename = │ │ │ │ +00003980: 7e20 732f 5c5c 3041 2f5c 6e2f 6f67 3b20 ~ s/\\0A/\n/og; │ │ │ │ +00003990: 2020 2023 2072 6573 746f 7265 2027 5c6e # restore '\n │ │ │ │ +000039a0: 270a 0909 2466 696c 656e 616d 6520 3d7e '...$filename =~ │ │ │ │ +000039b0: 2073 2f5c 5c35 432f 5c5c 2f6f 673b 2020 s/\\5C/\\/og; │ │ │ │ +000039c0: 2020 2320 7265 7374 6f72 6520 275c 5c27 # restore '\\' │ │ │ │ +000039d0: 0a0a 0909 6966 2028 2477 7269 7465 4162 ....if ($writeAb │ │ │ │ +000039e0: 7350 6174 6829 0a09 097b 0a09 0920 2020 sPath)...{... │ │ │ │ +000039f0: 2024 7320 3d20 2224 6469 7254 6f53 6561 $s = "$dirToSea │ │ │ │ +00003a00: 7263 682f 2466 696c 656e 616d 655c 6e22 rch/$filename\n" │ │ │ │ +00003a10: 3b0a 0909 7d0a 0909 656c 7365 0a09 097b ;...}...else...{ │ │ │ │ +00003a20: 0a09 0920 2020 2024 7320 3d20 2224 6669 ... $s = "$fi │ │ │ │ +00003a30: 6c65 6e61 6d65 5c6e 223b 0a09 097d 0a0a lename\n";...}.. │ │ │ │ +00003a40: 0909 7072 696e 7420 2473 3b0a 0909 7072 ..print $s;...pr │ │ │ │ +00003a50: 696e 7420 4649 4c45 2024 7320 6966 2024 int FILE $s if $ │ │ │ │ +00003a60: 7772 6974 6554 6f46 696c 653b 0a09 2020 writeToFile;.. │ │ │ │ +00003a70: 2020 7d0a 0920 2020 2063 6c6f 7365 2849 }.. close(I │ │ │ │ +00003a80: 4e29 3b0a 0920 2020 2075 6e6c 696e 6b20 N);.. unlink │ │ │ │ +00003a90: 2474 6d70 4e61 6d65 3b0a 097d 0a0a 0923 $tmpName;..}...# │ │ │ │ +00003aa0: 0a09 2320 7374 6172 7420 6120 6e65 7720 ..# start a new │ │ │ │ +00003ab0: 6a6f 620a 0923 0a09 6966 2028 246a 6f62 job..#..if ($job │ │ │ │ +00003ac0: 546f 446f 203e 2030 2061 6e64 2024 7061 ToDo > 0 and $pa │ │ │ │ +00003ad0: 7246 6f72 6b2d 3e67 6574 4e6f 4672 6565 rFork->getNoFree │ │ │ │ +00003ae0: 456e 7472 6965 7328 2920 3e20 3029 0a09 Entries() > 0).. │ │ │ │ +00003af0: 7b0a 0920 2020 206d 7920 2840 6c69 6e65 {.. my (@line │ │ │ │ +00003b00: 4275 6666 6572 2c20 2469 293b 0a09 2020 Buffer, $i);.. │ │ │ │ +00003b10: 2020 6d79 2024 646f 6e65 203d 2030 3b0a my $done = 0;. │ │ │ │ +00003b20: 0920 2020 2023 2072 6561 6420 2472 6561 . # read $rea │ │ │ │ +00003b30: 644e 6f4c 696e 6573 206c 696e 6573 0a09 dNoLines lines.. │ │ │ │ +00003b40: 2020 2020 666f 7220 2824 646f 6e65 203d for ($done = │ │ │ │ +00003b50: 2024 6920 3d20 3020 3b20 2469 203c 2024 $i = 0 ; $i < $ │ │ │ │ +00003b60: 7265 6164 4e6f 4c69 6e65 7320 3b20 2469 readNoLines ; $i │ │ │ │ +00003b70: 2b2b 290a 0920 2020 207b 0a09 096d 7920 ++).. {...my │ │ │ │ +00003b80: 246c 203d 2024 7263 7366 2d3e 6e65 7874 $l = $rcsf->next │ │ │ │ +00003b90: 4269 6e4c 696e 6528 293b 0a09 0975 6e6c BinLine();...unl │ │ │ │ +00003ba0: 6573 7320 2824 6c29 0a09 097b 0a09 0920 ess ($l)...{... │ │ │ │ +00003bb0: 2020 2024 646f 6e65 203d 2031 3b0a 0909 $done = 1;... │ │ │ │ +00003bc0: 2020 2020 6c61 7374 3b0a 0909 7d0a 0909 last;...}... │ │ │ │ +00003bd0: 246e 652b 2b3b 0a09 0970 7573 6820 406c $ne++;...push @l │ │ │ │ +00003be0: 696e 6542 7566 6665 722c 2024 6c3b 0a09 ineBuffer, $l;.. │ │ │ │ +00003bf0: 2020 2020 7d0a 0920 2020 2024 6a6f 6254 }.. $jobT │ │ │ │ +00003c00: 6f44 6f20 3d20 406c 696e 6542 7566 6665 oDo = @lineBuffe │ │ │ │ +00003c10: 723b 0a09 2020 2020 6d79 2024 746d 704e r;.. my $tmpN │ │ │ │ +00003c20: 616d 6520 3d20 263a 3a75 6e69 7146 696c ame = &::uniqFil │ │ │ │ +00003c30: 654e 616d 6528 222f 746d 702f 7374 6f72 eName("/tmp/stor │ │ │ │ +00003c40: 6542 6163 6b75 7053 6561 7263 682d 2229 eBackupSearch-") │ │ │ │ +00003c50: 3b0a 0a09 2020 2020 6966 2028 246a 6f62 ;... if ($job │ │ │ │ +00003c60: 546f 446f 290a 0920 2020 207b 0a09 0924 ToDo).. {...$ │ │ │ │ +00003c70: 7061 7246 6f72 6b2d 3e61 6464 5f6e 6f62 parFork->add_nob │ │ │ │ +00003c80: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function' │ │ │ │ +00003c90: 203d 3e20 5c26 6368 6563 6b52 756c 652c => \&checkRule, │ │ │ │ +00003ca0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun │ │ │ │ +00003cb0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... │ │ │ │ +00003cc0: 2020 205b 2473 5275 6c65 2c20 5c40 6c69 [$sRule, \@li │ │ │ │ +00003cd0: 6e65 4275 6666 6572 2c20 2470 724c 6f67 neBuffer, $prLog │ │ │ │ +00003ce0: 2c20 2463 6865 636b 5375 6d46 696c 652c , $checkSumFile, │ │ │ │ +00003cf0: 0a09 0909 0920 2020 2020 2020 2474 6d70 ..... $tmp │ │ │ │ +00003d00: 4e61 6d65 5d2c 0a09 0909 0920 2020 2020 Name],..... │ │ │ │ +00003d10: 2027 2d69 6e66 6f27 203d 3e20 2474 6d70 '-info' => $tmp │ │ │ │ +00003d20: 4e61 6d65 293b 0a09 0924 7469 6e79 5363 Name);...$tinySc │ │ │ │ +00003d30: 6865 642d 3e72 6573 6574 2829 3b0a 0920 hed->reset();.. │ │ │ │ +00003d40: 2020 207d 0a09 7d0a 0a09 230a 0923 2077 }..}...#..# w │ │ │ │ +00003d50: 6169 7420 0a09 230a 0924 7469 6e79 5363 ait ..#..$tinySc │ │ │ │ +00003d60: 6865 642d 3e77 6169 7428 293b 0a0a 0924 hed->wait();...$ │ │ │ │ +00003d70: 7061 7246 6f72 6b54 6f44 6f20 3d20 2470 parForkToDo = $p │ │ │ │ +00003d80: 6172 466f 726b 2d3e 6765 744e 6f55 7365 arFork->getNoUse │ │ │ │ +00003d90: 6445 6e74 7269 6573 2829 3b0a 2020 2020 dEntries();. │ │ │ │ +00003da0: 7d0a 7d0a 636c 6f73 6528 4649 4c45 2920 }.}.close(FILE) │ │ │ │ +00003db0: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p │ │ │ │ +00003dc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00003dd0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ │ +00003de0: 3d3e 205b 2263 616e 6e6f 7420 636c 6f73 => ["cannot clos │ │ │ │ +00003df0: 6520 3c24 7772 6974 6554 6f46 696c 653e e <$writeToFile> │ │ │ │ +00003e00: 225d 2c0a 0909 2020 272d 6578 6974 2720 "],... '-exit' │ │ │ │ +00003e10: 3d3e 2031 290a 2020 2020 6966 2024 7772 => 1). if $wr │ │ │ │ +00003e20: 6974 6554 6f46 696c 653b 0a0a 6d79 2024 iteToFile;..my $ │ │ │ │ +00003e30: 7320 3d20 2727 3b0a 2473 203d 2022 2c20 s = '';.$s = ", │ │ │ │ +00003e40: 736b 6970 7065 6420 2220 2e20 7363 616c skipped " . scal │ │ │ │ +00003e50: 6172 2040 6469 7273 546f 5365 6172 6368 ar @dirsToSearch │ │ │ │ +00003e60: 202d 2024 6e62 202e 2022 2062 6163 6b75 - $nb . " backu │ │ │ │ +00003e70: 7028 7329 220a 2020 2020 6966 2040 6469 p(s)". if @di │ │ │ │ +00003e80: 7273 546f 5365 6172 6368 203e 2024 6e62 rsToSearch > $nb │ │ │ │ +00003e90: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print( │ │ │ │ +00003ea0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +00003eb0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ │ +00003ec0: 205b 2263 6865 636b 6564 2024 6e65 2065 ["checked $ne e │ │ │ │ +00003ed0: 6e74 7269 6573 2069 6e20 246e 6220 6261 ntries in $nb ba │ │ │ │ +00003ee0: 636b 7570 7324 7322 5d29 3b0a 0a65 7869 ckups$s"]);..exi │ │ │ │ +00003ef0: 7420 303b 0a0a 0a0a 2323 2323 2323 2323 t 0;....######## │ │ │ │ +00003f00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003f10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003f20: 0a73 7562 2063 6865 636b 5275 6c65 0a7b .sub checkRule.{ │ │ │ │ +00003f30: 0a20 2020 206d 7920 2473 5275 6c65 203d . my $sRule = │ │ │ │ +00003f40: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $ │ │ │ │ +00003f50: 6c69 7374 4f66 4669 6c65 7320 3d20 7368 listOfFiles = sh │ │ │ │ +00003f60: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL │ │ │ │ +00003f70: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. │ │ │ │ +00003f80: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile │ │ │ │ +00003f90: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ │ +00003fa0: 2024 746d 7066 696c 6520 3d20 7368 6966 $tmpfile = shif │ │ │ │ +00003fb0: 743b 0a0a 2020 2020 6c6f 6361 6c20 2a4f t;.. local *O │ │ │ │ +00003fc0: 5554 3b0a 2020 2020 756e 6c65 7373 2028 UT;. unless ( │ │ │ │ +00003fd0: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, "> $tm │ │ │ │ +00003fe0: 7066 696c 6522 2929 0a20 2020 207b 0a09 pfile")). {.. │ │ │ │ +00003ff0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00004000: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00004010: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00004020: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 ["cannot open te │ │ │ │ +00004030: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t │ │ │ │ +00004040: 6d70 6669 6c65 3e22 5d29 3b0a 0972 6574 mpfile>"]);..ret │ │ │ │ +00004050: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; │ │ │ │ +00004060: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ │ +00004070: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. │ │ │ │ +00004080: 2020 6d79 2028 246c 293b 0a20 2020 206d my ($l);. m │ │ │ │ +00004090: 7920 2825 7479 7065 2920 3d20 2827 6469 y (%type) = ('di │ │ │ │ +000040a0: 7227 203d 3e20 2764 272c 0a09 0920 2027 r' => 'd',... ' │ │ │ │ +000040b0: 7379 6d6c 696e 6b27 203d 3e20 276c 272c symlink' => 'l', │ │ │ │ +000040c0: 0a09 0920 2027 7069 7065 2720 3d3e 2027 ... 'pipe' => ' │ │ │ │ +000040d0: 7027 2c0a 0909 2020 2773 6f63 6b65 7427 p',... 'socket' │ │ │ │ +000040e0: 203d 3e20 2773 272c 0a09 0920 2027 626c => 's',... 'bl │ │ │ │ +000040f0: 6f63 6b64 6576 2720 3d3e 2027 6227 2c0a ockdev' => 'b',. │ │ │ │ +00004100: 0909 2020 2763 6861 7264 6576 2720 3d3e .. 'chardev' => │ │ │ │ +00004110: 2027 6327 293b 0a20 2020 206d 7920 2824 'c');. my ($ │ │ │ │ +00004120: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ │ +00004130: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ │ +00004140: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ │ +00004150: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime, │ │ │ │ +00004160: 0a09 2473 697a 652c 2024 7569 642c 2024 ..$size, $uid, $ │ │ │ │ +00004170: 6769 642c 2024 6d6f 6465 2c20 2466 696c gid, $mode, $fil │ │ │ │ +00004180: 656e 616d 6529 3b0a 2020 2020 666f 7265 ename);. fore │ │ │ │ +00004190: 6163 6820 246c 2028 4024 6c69 7374 4f66 ach $l (@$listOf │ │ │ │ +000041a0: 4669 6c65 7329 0a20 2020 207b 0a09 6d79 Files). {..my │ │ │ │ +000041b0: 2028 4072 6574 2920 3d20 7265 6164 4368 (@ret) = readCh │ │ │ │ +000041c0: 6563 6b53 756d 4669 6c65 3a3a 6576 616c eckSumFile::eval │ │ │ │ +000041d0: 4269 6e4c 696e 6528 246c 2c20 2470 724c BinLine($l, $prL │ │ │ │ +000041e0: 6f67 2c20 2463 6865 636b 5375 6d46 696c og, $checkSumFil │ │ │ │ +000041f0: 6529 3b0a 096e 6578 7420 6966 2040 7265 e);..next if @re │ │ │ │ +00004200: 7420 213d 2031 323b 0a09 2824 6d64 3573 t != 12;..($md5s │ │ │ │ +00004210: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev │ │ │ │ +00004220: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac │ │ │ │ +00004230: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt │ │ │ │ +00004240: 696d 652c 2024 6174 696d 652c 0a09 2024 ime, $atime,.. $ │ │ │ │ +00004250: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid │ │ │ │ +00004260: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena │ │ │ │ +00004270: 6d65 2920 3d20 4072 6574 3b0a 0a09 6d79 me) = @ret;...my │ │ │ │ +00004280: 2024 7479 7065 203d 2027 6627 3b0a 0924 $type = 'f';..$ │ │ │ │ +00004290: 7479 7065 203d 2024 7479 7065 7b24 6d64 type = $type{$md │ │ │ │ +000042a0: 3573 756d 7d20 0969 6620 6578 6973 7473 5sum} .if exists │ │ │ │ +000042b0: 2024 7479 7065 7b24 6d64 3573 756d 7d3b $type{$md5sum}; │ │ │ │ +000042c0: 0a09 6966 2028 2473 5275 6c65 2d3e 6368 ..if ($sRule->ch │ │ │ │ +000042d0: 6563 6b52 756c 6528 2466 696c 656e 616d eckRule($filenam │ │ │ │ +000042e0: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode, │ │ │ │ +000042f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ │ +00004300: 2024 7569 642c 0a09 0909 2020 2020 2020 $uid,.... │ │ │ │ +00004310: 2467 6964 2c20 2474 7970 6529 203d 3d20 $gid, $type) == │ │ │ │ +00004320: 3129 0a09 7b0a 0920 2020 2024 6669 6c65 1)..{.. $file │ │ │ │ +00004330: 6e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 name =~ s/\\/\\5 │ │ │ │ +00004340: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\' │ │ │ │ +00004350: 7374 6f72 6564 2061 7320 5c35 430a 0920 stored as \5C.. │ │ │ │ +00004360: 2020 2024 6669 6c65 6e61 6d65 203d 7e20 $filename =~ │ │ │ │ +00004370: 732f 5c6e 2f5c 5c30 412f 736f 673b 2020 s/\n/\\0A/sog; │ │ │ │ +00004380: 2023 2027 5c6e 2720 7374 6f72 6564 2061 # '\n' stored a │ │ │ │ +00004390: 7320 5c30 410a 0a09 2020 2020 7072 696e s \0A... prin │ │ │ │ +000043a0: 7420 4f55 5420 2224 6d64 3573 756d 2024 t OUT "$md5sum $ │ │ │ │ +000043b0: 7369 7a65 2024 6d6f 6465 2024 6374 696d size $mode $ctim │ │ │ │ +000043c0: 6520 246d 7469 6d65 2024 7569 6420 2467 e $mtime $uid $g │ │ │ │ +000043d0: 6964 2024 6669 6c65 6e61 6d65 5c6e 223b id $filename\n"; │ │ │ │ +000043e0: 0a09 7d0a 2020 2020 7d0a 0a20 2020 2063 ..}. }.. c │ │ │ │ +000043f0: 6c6f 7365 284f 5554 293b 0a0a 2020 2020 lose(OUT);.. │ │ │ │ +00004400: 7265 7475 726e 2030 3b0a 7d0a return 0;.}. │ │ │ ├── ./usr/bin/storeBackupUpdateBackup │ │ │ │ @@ -1,4 +1,1886 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7055 7064 6174 6542 6163 6b75 700a pUpdateBackup. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 382d 3230 3132 290a 2320 2020 2020 2020 8-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ │ +00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ │ +00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ │ +00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ │ +000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ │ +000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ │ +000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ │ +000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ │ +000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ │ +000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ │ +00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ │ +00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ │ +00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ │ +00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ │ +00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ │ +00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ │ +00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ │ +00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ │ +00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ │ +00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ │ +000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ │ +000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ │ +000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ │ +000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ │ +000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ │ +000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ │ +00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ │ +00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ │ +00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ │ +00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ │ +00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ │ +00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ │ +00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ │ +00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ │ +00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ │ +00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ │ +000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ │ +000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ │ +000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ │ +000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...use │ │ │ │ +00000300: 504f 5349 583b 0a75 7365 2073 7472 6963 POSIX;.use stric │ │ │ │ +00000310: 743b 0a75 7365 2077 6172 6e69 6e67 733b t;.use warnings; │ │ │ │ +00000320: 0a0a 7573 6520 4663 6e74 6c20 7177 284f ..use Fcntl qw(O │ │ │ │ +00000330: 5f52 4457 5220 4f5f 4352 4541 5429 3b0a _RDWR O_CREAT);. │ │ │ │ +00000340: 7573 6520 504f 5349 583b 0a0a 6d79 2024 use POSIX;..my $ │ │ │ │ +00000350: 5645 5253 494f 4e20 3d20 2724 4964 3a20 VERSION = '$Id: │ │ │ │ +00000360: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat │ │ │ │ +00000370: 6542 6163 6b75 702e 706c 2033 3434 2032 eBackup.pl 344 2 │ │ │ │ +00000380: 3030 382d 3038 2d32 3620 3130 3a34 373a 008-08-26 10:47: │ │ │ │ +00000390: 3233 5a20 686a 6320 2420 273b 0a6f 7572 23Z hjc $ ';.our │ │ │ │ +000003a0: 2040 5645 5253 494f 4e3b 0a70 7573 6820 @VERSION;.push │ │ │ │ +000003b0: 4056 4552 5349 4f4e 2c20 2456 4552 5349 @VERSION, $VERSI │ │ │ │ +000003c0: 4f4e 3b0a 6d79 2028 2456 4552 5349 4f4e ON;.my ($VERSION │ │ │ │ +000003d0: 704e 616d 652c 2024 5645 5253 494f 4e73 pName, $VERSIONs │ │ │ │ +000003e0: 766e 4944 2920 3d20 2456 4552 5349 4f4e vnID) = $VERSION │ │ │ │ +000003f0: 203d 7e20 2f49 643a 5c73 2b28 5c53 2b29 =~ /Id:\s+(\S+) │ │ │ │ +00000400: 5c73 2b28 5c64 2b29 2f3b 0a24 6d61 696e \s+(\d+)/;.$main │ │ │ │ +00000410: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER │ │ │ │ +00000420: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;... │ │ │ │ +00000430: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. │ │ │ │ +00000440: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi │ │ │ │ +00000450: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir │ │ │ │ +00000460: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D │ │ │ │ +00000470: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein │ │ │ │ +00000480: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol │ │ │ │ +00000490: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis │ │ │ │ +000004a0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i │ │ │ │ +000004b0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). │ │ │ │ +000004c0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f │ │ │ │ +000004d0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my │ │ │ │ +000004e0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink │ │ │ │ +000004f0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i │ │ │ │ +00000500: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link, │ │ │ │ +00000510: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne "/").. │ │ │ │ +00000520: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~ │ │ │ │ +00000530: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\/]+$/$link │ │ │ │ +00000540: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e │ │ │ │ +00000550: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi │ │ │ │ +00000560: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. │ │ │ │ +00000570: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $ │ │ │ │ +00000580: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi │ │ │ │ +00000590: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$ │ │ │ │ +000005a0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = "/$file"; │ │ │ │ +000005b0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ │ +000005c0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD │ │ │ │ +000005d0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR "<$file> doe │ │ │ │ +000005e0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\n"; │ │ │ │ +000005f0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }. │ │ │ │ +00000600: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= "/. │ │ │ │ +00000610: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib"; │ │ │ │ +00000620: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den │ │ │ │ +00000630: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. │ │ │ │ +00000640: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/ │ │ │ │ +00000650: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch │ │ │ │ +00000660: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. │ │ │ │ +00000670: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir) │ │ │ │ +00000680: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD │ │ │ │ +00000690: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`; │ │ │ │ +000006a0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;. │ │ │ │ +000006b0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;. │ │ │ │ +000006c0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split │ │ │ │ +000006d0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir("$absDir │ │ │ │ +000006e0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file"));. }. │ │ │ │ +000006f0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ │ +00000700: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR "<$ │ │ │ │ +00000710: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex │ │ │ │ +00000720: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\n"; │ │ │ │ +00000730: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl │ │ │ │ +00000740: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. │ │ │ │ +00000750: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift │ │ │ │ +00000760: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return (' │ │ │ │ +00000770: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles │ │ │ │ +00000780: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\//) │ │ │ │ +00000790: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa │ │ │ │ +000007a0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname.. │ │ │ │ +000007b0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f │ │ │ │ +000007c0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ │ │ │ │ +000007d0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\/(.*)$/s; │ │ │ │ +000007e0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' │ │ │ │ +000007f0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq ''); │ │ │ │ +00000800: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000810: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls │ │ │ │ +00000820: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename. │ │ │ │ +00000830: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir │ │ │ │ +00000840: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my ( │ │ │ │ +00000850: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = & │ │ │ │ +00000860: 6c69 6250 6174 6828 2430 293b 0a28 4049 libPath($0);.(@I │ │ │ │ +00000870: 4e43 2920 3d20 2824 7265 712c 2040 494e NC) = ($req, @IN │ │ │ │ +00000880: 4329 3b0a 0a72 6571 7569 7265 2027 7374 C);..require 'st │ │ │ │ +00000890: 6f72 6542 6163 6b75 704c 6962 2e70 6c27 oreBackupLib.pl' │ │ │ │ +000008a0: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check │ │ │ │ +000008b0: 5061 7261 6d32 2e70 6c27 3b0a 7265 7175 Param2.pl';.requ │ │ │ │ +000008c0: 6972 6520 2763 6865 636b 4f62 6a50 6172 ire 'checkObjPar │ │ │ │ +000008d0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p │ │ │ │ +000008e0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir │ │ │ │ +000008f0: 6520 2776 6572 7369 6f6e 2e70 6c27 3b0a e 'version.pl';. │ │ │ │ +00000900: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo │ │ │ │ +00000910: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require │ │ │ │ +00000920: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re │ │ │ │ +00000930: 7175 6972 6520 2768 756d 616e 5265 6164 quire 'humanRead │ │ │ │ +00000940: 2e70 6c27 3b0a 0a6d 7920 246c 6f63 6b46 .pl';..my $lockF │ │ │ │ +00000950: 696c 6520 3d20 272f 746d 702f 7374 6f72 ile = '/tmp/stor │ │ │ │ +00000960: 6542 6163 6b75 702e 6c6f 636b 273b 2020 eBackup.lock'; │ │ │ │ +00000970: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value │ │ │ │ +00000980: 0a6d 7920 2463 6865 636b 5375 6d46 696c .my $checkSumFil │ │ │ │ +00000990: 6520 3d20 272e 6d64 3543 6865 636b 5375 e = '.md5CheckSu │ │ │ │ +000009a0: 6d73 273b 0a6d 7920 2462 6c6f 636b 4368 ms';.my $blockCh │ │ │ │ +000009b0: 6563 6b53 756d 4669 6c65 203d 2027 2e6d eckSumFile = '.m │ │ │ │ +000009c0: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ │ +000009d0: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME. │ │ │ │ +000009e0: 0a73 746f 7265 4261 636b 7570 5570 6461 .storeBackupUpda │ │ │ │ +000009f0: 7465 4261 636b 7570 2e70 6c20 2d20 7570 teBackup.pl - up │ │ │ │ +00000a00: 6461 7465 7320 2f20 6669 6e61 6c69 7a65 dates / finalize │ │ │ │ +00000a10: 7320 6261 636b 7570 7320 6372 6561 7465 s backups create │ │ │ │ +00000a20: 6420 6279 2073 746f 7265 4261 636b 7570 d by storeBackup │ │ │ │ +00000a30: 2e70 6c20 7769 7468 206f 7074 696f 6e20 .pl with option │ │ │ │ +00000a40: 2d2d 6c61 7465 4c69 6e6b 2c20 2d2d 6c61 --lateLink, --la │ │ │ │ +00000a50: 7465 436f 6d70 7265 7373 0a0a 3d68 6561 teCompress..=hea │ │ │ │ +00000a60: 6431 2053 594e 4f50 5349 530a 0a09 7374 d1 SYNOPSIS...st │ │ │ │ +00000a70: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB │ │ │ │ +00000a80: 6163 6b75 702e 706c 202d 6220 6261 636b ackup.pl -b back │ │ │ │ +00000a90: 7570 4469 7265 6374 6f72 7920 5b2d 2d61 upDirectory [--a │ │ │ │ +00000aa0: 7574 6f72 6570 6169 725d 0a09 2020 2020 utorepair].. │ │ │ │ +00000ab0: 2020 5b2d 2d70 7269 6e74 5d20 5b2d 2d76 [--print] [--v │ │ │ │ +00000ac0: 6572 626f 7365 5d20 5b2d 2d64 6562 7567 erbose] [--debug │ │ │ │ +00000ad0: 5d20 5b2d 2d6c 6f63 6b46 696c 655d 205b ] [--lockFile] [ │ │ │ │ +00000ae0: 2d2d 6e6f 436f 6d70 7265 7373 5d0a 0920 --noCompress].. │ │ │ │ +00000af0: 2020 2020 205b 2d2d 7072 6f67 7265 7373 [--progress │ │ │ │ +00000b00: 5265 706f 7274 206e 756d 6265 725d 205b Report number] [ │ │ │ │ +00000b10: 2d2d 6368 6563 6b4f 6e6c 795d 0a09 2020 --checkOnly].. │ │ │ │ +00000b20: 2020 2020 5b2d 2d6c 6f67 4669 6c65 0a09 [--logFile.. │ │ │ │ +00000b30: 2020 2020 2020 205b 2d2d 7375 7070 7265 [--suppre │ │ │ │ +00000b40: 7373 5469 6d65 5d20 5b2d 6d20 6d61 7846 ssTime] [-m maxF │ │ │ │ +00000b50: 696c 656c 656e 5d0a 0920 2020 2020 2020 ilelen].. │ │ │ │ +00000b60: 5b5b 2d6e 206e 6f4f 664f 6c64 4669 6c65 [[-n noOfOldFile │ │ │ │ +00000b70: 735d 207c 205b 2d2d 7361 7665 4c6f 6773 s] | [--saveLogs │ │ │ │ +00000b80: 5d5d 0a09 2020 2020 2020 205b 2d2d 636f ]].. [--co │ │ │ │ +00000b90: 6d70 7265 7373 5769 7468 2063 6f6d 7072 mpressWith compr │ │ │ │ +00000ba0: 6573 7370 726f 675d 5d20 0a0a 0973 746f essprog]] ...sto │ │ │ │ +00000bb0: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa │ │ │ │ +00000bc0: 636b 7570 2e70 6c20 2d2d 696e 7465 7261 ckup.pl --intera │ │ │ │ +00000bd0: 6374 6976 6520 2d2d 6261 636b 7570 4469 ctive --backupDi │ │ │ │ +00000be0: 7220 746f 704c 6576 6c44 6972 0a09 2020 r topLevlDir.. │ │ │ │ +00000bf0: 2020 2020 5b2d 2d61 7574 6f72 6570 6169 [--autorepai │ │ │ │ +00000c00: 725d 205b 2d2d 7072 696e 745d 0a0a 3d68 r] [--print]..=h │ │ │ │ +00000c10: 6561 6431 2057 4152 4e49 4e47 0a0a 2020 ead1 WARNING.. │ │ │ │ +00000c20: 2121 2120 5553 4147 4520 494e 2050 4152 !!! USAGE IN PAR │ │ │ │ +00000c30: 414c 4c45 4c20 5749 5448 2073 746f 7265 ALLEL WITH store │ │ │ │ +00000c40: 4261 636b 7570 2e70 6c20 4341 4e20 4445 Backup.pl CAN DE │ │ │ │ +00000c50: 5354 524f 5920 594f 5552 2042 4143 4b55 STROY YOUR BACKU │ │ │ │ +00000c60: 5053 2021 2121 0a0a 3d68 6561 6431 204f PS !!!..=head1 O │ │ │ │ +00000c70: 5054 494f 4e53 0a0a 3d6f 7665 7220 380a PTIONS..=over 8. │ │ │ │ +00000c80: 0a3d 6974 656d 2042 3c2d 2d69 6e74 6572 .=item B<--inter │ │ │ │ +00000c90: 6163 7469 7665 3e2c 2042 3c2d 693e 0a0a active>, B<-i>.. │ │ │ │ +00000ca0: 2020 2020 696e 7465 7261 6374 6976 6520 interactive │ │ │ │ +00000cb0: 6d6f 6465 2066 6f72 2072 6570 6172 696e mode for reparin │ │ │ │ +00000cc0: 6720 2f20 6465 6c65 7469 6e67 2063 7572 g / deleting cur │ │ │ │ +00000cd0: 7275 7074 6564 0a20 2020 2062 6163 6b75 rupted. backu │ │ │ │ +00000ce0: 7073 2063 7265 6174 6564 2077 6974 6820 ps created with │ │ │ │ +00000cf0: 6f70 7469 6f6e 2027 2d2d 6c61 7465 4c69 option '--lateLi │ │ │ │ +00000d00: 6e6b 7327 0a0a 3d69 7465 6d20 423c 2d2d nks'..=item B<-- │ │ │ │ +00000d10: 6261 636b 7570 4469 723e 2c20 423c 2d62 backupDir>, B<-b │ │ │ │ +00000d20: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level │ │ │ │ +00000d30: 2064 6972 6563 746f 7279 206f 6620 616c directory of al │ │ │ │ +00000d40: 6c20 6261 636b 7570 7320 286d 7573 7420 l backups (must │ │ │ │ +00000d50: 6578 6973 7429 0a0a 3d69 7465 6d20 423c exist)..=item B< │ │ │ │ +00000d60: 2d2d 6175 746f 7265 7061 6972 3e2c 2042 --autorepair>, B │ │ │ │ +00000d70: 3c2d 613e 0a0a 2020 2020 7265 7061 6972 <-a>.. repair │ │ │ │ +00000d80: 2073 696d 706c 6520 696e 636f 6e73 6973 simple inconsis │ │ │ │ +00000d90: 7465 6e63 6965 7320 6175 746f 6d61 7469 tencies automati │ │ │ │ +00000da0: 6361 6c6c 7920 7769 7468 6f75 740a 2020 cally without. │ │ │ │ +00000db0: 2020 7265 7175 6573 7469 6e67 2074 6865 requesting the │ │ │ │ +00000dc0: 2061 6374 696f 6e0a 0a3d 6974 656d 2042 action..=item B │ │ │ │ +00000dd0: 3c2d 2d70 7269 6e74 3e0a 0a20 2020 2070 <--print>.. p │ │ │ │ +00000de0: 7269 6e74 2063 6f6e 6669 6775 7261 7469 rint configurati │ │ │ │ +00000df0: 6f6e 2072 6561 6420 6672 6f6d 2063 6f6e on read from con │ │ │ │ +00000e00: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file │ │ │ │ +00000e10: 616e 6420 7374 6f70 0a0a 3d69 7465 6d20 and stop..=item │ │ │ │ +00000e20: 423c 2d2d 7665 7262 6f73 653e 2c20 423c B<--verbose>, B< │ │ │ │ +00000e30: 2d76 3e0a 0a20 2020 2076 6572 626f 7365 -v>.. verbose │ │ │ │ +00000e40: 206d 6573 7361 6765 730a 0a3d 6974 656d messages..=item │ │ │ │ +00000e50: 2042 3c2d 2d64 6562 7567 3e2c 2042 3c2d B<--debug>, B<- │ │ │ │ +00000e60: 643e 0a0a 2020 2020 6765 6e65 7261 7465 d>.. generate │ │ │ │ +00000e70: 2064 6574 6169 6c65 6420 696e 666f 726d detailed inform │ │ │ │ +00000e80: 6174 696f 6e20 6162 6f75 7420 7468 6520 ation about the │ │ │ │ +00000e90: 6669 6c65 730a 2020 2020 7769 7468 2074 files. with t │ │ │ │ +00000ea0: 6865 206c 696e 6b69 6e67 2069 6e66 6f72 he linking infor │ │ │ │ +00000eb0: 6d61 7469 6f6e 2069 6e20 6974 0a0a 3d69 mation in it..=i │ │ │ │ +00000ec0: 7465 6d20 423c 2d2d 6c6f 636b 4669 6c65 tem B<--lockFile │ │ │ │ +00000ed0: 3e2c 2042 3c2d 4c3e 0a0a 2020 2020 6c6f >, B<-L>.. lo │ │ │ │ +00000ee0: 636b 2066 696c 652c 2069 6620 6578 6973 ck file, if exis │ │ │ │ +00000ef0: 742c 206e 6577 2069 6e73 7461 6e63 6573 t, new instances │ │ │ │ +00000f00: 2077 696c 6c20 6669 6e69 7368 2069 660a will finish if. │ │ │ │ +00000f10: 2020 2020 616e 206f 6c64 2069 7320 616c an old is al │ │ │ │ +00000f20: 7265 6164 7920 7275 6e6e 696e 670a 2020 ready running. │ │ │ │ +00000f30: 2020 4966 2073 6574 2074 6f20 7468 6520 If set to the │ │ │ │ +00000f40: 7361 6d65 2066 696c 6520 6173 2069 6e20 same file as in │ │ │ │ +00000f50: 7374 6f72 6542 6163 6b75 7020 6974 2077 storeBackup it w │ │ │ │ +00000f60: 696c 6c0a 2020 2020 7072 6576 656e 7420 ill. prevent │ │ │ │ +00000f70: 2470 726f 6720 6672 6f6d 2072 756e 6e69 $prog from runni │ │ │ │ +00000f80: 6e67 2069 6e20 7061 7261 6c6c 656c 0a20 ng in parallel. │ │ │ │ +00000f90: 2020 2074 6f20 7374 6f72 6542 6163 6b75 to storeBacku │ │ │ │ +00000fa0: 702c 2064 6566 6175 6c74 2069 7320 246c p, default is $l │ │ │ │ +00000fb0: 6f63 6b46 696c 650a 0a3d 6974 656d 2042 ockFile..=item B │ │ │ │ +00000fc0: 3c2d 2d6e 6f43 6f6d 7072 6573 733e 0a0a <--noCompress>.. │ │ │ │ +00000fd0: 2020 2020 6d61 7869 6d61 6c20 6e75 6d62 maximal numb │ │ │ │ +00000fe0: 6572 206f 6620 7061 7261 6c6c 656c 2063 er of parallel c │ │ │ │ +00000ff0: 6f6d 7072 6573 7320 6f70 6572 6174 696f ompress operatio │ │ │ │ +00001000: 6e73 2c0a 2020 2020 6465 6661 756c 7420 ns,. default │ │ │ │ +00001010: 3d20 6368 6f73 656e 2061 7574 6f6d 6174 = chosen automat │ │ │ │ +00001020: 6963 616c 6c79 0a0a 3d69 7465 6d20 423c ically..=item B< │ │ │ │ +00001030: 2d2d 6368 6563 6b4f 6e6c 793e 2042 3c2d --checkOnly> B<- │ │ │ │ +00001040: 633e 0a0a 2020 2020 646f 206e 6f74 2070 c>.. do not p │ │ │ │ +00001050: 6572 666f 726d 2061 6e79 2061 6374 696f erform any actio │ │ │ │ +00001060: 6e2c 206f 6e6c 7920 6368 6563 6b20 636f n, only check co │ │ │ │ +00001070: 6e73 6973 7465 6e63 790a 0a3d 6974 656d nsistency..=item │ │ │ │ +00001080: 2042 3c2d 2d70 726f 6772 6573 7352 6570 B<--progressRep │ │ │ │ +00001090: 6f72 743e 0a0a 2020 2020 7072 696e 7420 ort>.. print │ │ │ │ +000010a0: 7072 6f67 7265 7373 2072 6570 6f72 743a progress report: │ │ │ │ +000010b0: 0a0a 3d6f 7665 7220 340a 0a3d 6974 656d ..=over 4..=item │ │ │ │ +000010c0: 2061 6674 6572 2065 6163 6820 276e 756d after each 'num │ │ │ │ +000010d0: 6265 7227 2066 696c 6573 2077 6865 6e20 ber' files when │ │ │ │ +000010e0: 636f 6d70 7265 7373 696e 670a 0a3d 6974 compressing..=it │ │ │ │ +000010f0: 656d 2061 6674 6572 2065 6163 6820 276e em after each 'n │ │ │ │ +00001100: 756d 6265 7220 2a20 3130 3030 2720 6669 umber * 1000' fi │ │ │ │ +00001110: 6c65 7320 7768 656e 206c 696e 6b69 6e67 les when linking │ │ │ │ +00001120: 0a0a 3d69 7465 6d20 6166 7465 7220 6561 ..=item after ea │ │ │ │ +00001130: 6368 2027 6e75 6d62 6572 202a 2031 3030 ch 'number * 100 │ │ │ │ +00001140: 3030 2720 6669 6c65 7320 7768 656e 2070 00' files when p │ │ │ │ +00001150: 6572 666f 726d 696e 6720 6368 6d6f 640a erforming chmod. │ │ │ │ +00001160: 0a3d 6261 636b 0a0a 3d69 7465 6d20 423c .=back..=item B< │ │ │ │ +00001170: 2d2d 6c6f 6746 696c 653e 2c20 423c 2d6c --logFile>, B<-l │ │ │ │ +00001180: 3e0a 0a20 2020 206c 6f67 4669 6c65 2c20 >.. logFile, │ │ │ │ +00001190: 4465 6661 756c 743a 2073 7464 6f75 740a Default: stdout. │ │ │ │ +000011a0: 0a3d 6974 656d 2042 3c2d 2d73 7570 7072 .=item B<--suppr │ │ │ │ +000011b0: 6573 7354 696d 653e 0a0a 2020 2020 7375 essTime>.. su │ │ │ │ +000011c0: 7070 7265 7373 206f 7574 7075 7420 6f66 ppress output of │ │ │ │ +000011d0: 2074 696d 6520 696e 206c 6f67 6669 6c65 time in logfile │ │ │ │ +000011e0: 0a0a 3d69 7465 6d20 423c 2d2d 6d61 7846 ..=item B<--maxF │ │ │ │ +000011f0: 696c 656c 656e 3e2c 2042 3c2d 6d3e 0a0a ilelen>, B<-m>.. │ │ │ │ +00001200: 2020 2020 6d61 7869 6d61 6c20 6c65 6e67 maximal leng │ │ │ │ +00001210: 7468 206f 6620 6c6f 6720 6669 6c65 2c20 th of log file, │ │ │ │ +00001220: 6465 6661 756c 7420 3d20 3165 360a 0a3d default = 1e6..= │ │ │ │ +00001230: 6974 656d 2042 3c2d 2d6e 6f4f 664f 6c64 item B<--noOfOld │ │ │ │ +00001240: 4669 6c65 733e 2c20 423c 2d6e 3e0a 0a20 Files>, B<-n>.. │ │ │ │ +00001250: 2020 206e 756d 6265 7220 6f66 206f 6c64 number of old │ │ │ │ +00001260: 206c 6f67 2066 696c 6573 2c20 6465 6661 log files, defa │ │ │ │ +00001270: 756c 7420 3d20 350a 0a3d 6974 656d 2042 ult = 5..=item B │ │ │ │ +00001280: 3c2d 2d73 6176 654c 6f67 733e 0a0a 2020 <--saveLogs>.. │ │ │ │ +00001290: 2020 7361 7665 206c 6f67 2066 696c 6573 save log files │ │ │ │ +000012a0: 2077 6974 6820 6461 7465 2061 6e64 2074 with date and t │ │ │ │ +000012b0: 696d 6520 696e 7374 6561 6420 6f66 2064 ime instead of d │ │ │ │ +000012c0: 656c 6574 696e 6720 7468 650a 2020 2020 eleting the. │ │ │ │ +000012d0: 6f6c 6420 2877 6974 6820 5b2d 6e6f 4f6c old (with [-noOl │ │ │ │ +000012e0: 6446 696c 6573 5d29 0a0a 3d69 7465 6d20 dFiles])..=item │ │ │ │ +000012f0: 423c 2d2d 636f 6d70 7265 7373 5769 7468 B<--compressWith │ │ │ │ +00001300: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress │ │ │ │ +00001310: 7361 7665 6420 6c6f 6720 6669 6c65 7320 saved log files │ │ │ │ +00001320: 2865 2e67 2e20 7769 7468 2027 677a 6970 (e.g. with 'gzip │ │ │ │ +00001330: 202d 3927 292e 0a20 2020 2064 6566 6175 -9').. defau │ │ │ │ +00001340: 6c74 2069 7320 2762 7a69 7032 270a 0a3d lt is 'bzip2'..= │ │ │ │ +00001350: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP │ │ │ │ +00001360: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh │ │ │ │ +00001370: 7420 2863 2920 3230 3038 2c32 3031 3220 t (c) 2008,2012 │ │ │ │ +00001380: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C │ │ │ │ +00001390: 6c61 6573 2e0a 5075 626c 6973 6865 6420 laes..Published │ │ │ │ +000013a0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge │ │ │ │ +000013b0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ │ +000013c0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l │ │ │ │ +000013d0: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c │ │ │ │ +000013e0: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j │ │ │ │ +000013f0: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^ │ │ │ │ +00001400: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \s*$/, `pod2text │ │ │ │ +00001410: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = │ │ │ │ +00001420: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 "cannot find pod │ │ │ │ +00001430: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum │ │ │ │ +00001440: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det │ │ │ │ +00001450: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\n". unle │ │ │ │ +00001460: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin │ │ │ │ +00001470: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\@ARGV │ │ │ │ +00001480: 2c20 272d 5627 293b 0a0a 6d79 2024 7374 , '-V');..my $st │ │ │ │ +00001490: 6172 7444 6174 6520 3d20 6461 7465 546f artDate = dateTo │ │ │ │ +000014a0: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $ │ │ │ │ +000014b0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C │ │ │ │ +000014c0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new(' │ │ │ │ +000014d0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio │ │ │ │ +000014e0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +000014f0: 3e20 2762 6163 6b75 7044 6972 272c 0a09 > 'backupDir',.. │ │ │ │ +00001500: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +00001510: 696f 6e27 203d 3e20 272d 6227 2c0a 0909 ion' => '-b',... │ │ │ │ +00001520: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ │ +00001530: 7327 203d 3e20 272d 2d62 6163 6b75 7044 s' => '--backupD │ │ │ │ +00001540: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '- │ │ │ │ +00001550: 6d75 7374 5f62 6527 203d 3e20 2779 6573 must_be' => 'yes │ │ │ │ +00001560: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +00001570: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ │ +00001580: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +00001590: 272d 6e61 6d65 2720 3d3e 2027 6175 746f '-name' => 'auto │ │ │ │ +000015a0: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... │ │ │ │ +000015b0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +000015c0: 3e20 272d 2d61 7574 6f72 6570 6169 7227 > '--autorepair' │ │ │ │ +000015d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +000015e0: 616c 6961 7327 203d 3e20 272d 6127 292c alias' => '-a'), │ │ │ │ +000015f0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00001600: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001610: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n │ │ │ │ +00001620: 616d 6527 203d 3e20 2770 7269 6e74 272c ame' => 'print', │ │ │ │ +00001630: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00001640: 7074 696f 6e27 203d 3e20 272d 2d70 7269 ption' => '--pri │ │ │ │ +00001650: 6e74 2729 2c0a 0909 0909 4f70 7469 6f6e nt'),.....Option │ │ │ │ +00001660: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001670: 2027 696e 7465 7261 6374 6976 6527 2c0a 'interactive',. │ │ │ │ +00001680: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00001690: 7469 6f6e 2720 3d3e 2027 2d69 272c 0a09 tion' => '-i',.. │ │ │ │ +000016a0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +000016b0: 6173 2720 3d3e 2027 2d2d 696e 7465 7261 as' => '--intera │ │ │ │ +000016c0: 6374 6976 6527 292c 0a09 0909 094f 7074 ctive'),.....Opt │ │ │ │ +000016d0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +000016e0: 203d 3e20 276c 6f63 6b46 696c 6527 2c0a => 'lockFile',. │ │ │ │ +000016f0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00001700: 7469 6f6e 2720 3d3e 2027 2d4c 272c 0a20 tion' => '-L',. │ │ │ │ +00001710: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001720: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001730: 2020 2020 2020 2020 2020 2027 2d63 6c5f '-cl_ │ │ │ │ +00001740: 616c 6961 7327 203d 3e20 272d 2d6c 6f63 alias' => '--loc │ │ │ │ +00001750: 6b46 696c 6527 2c0a 0909 0909 0920 2020 kFile',...... │ │ │ │ +00001760: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => ' │ │ │ │ +00001770: 6e6f 7420 5b69 6e74 6572 6163 7469 7665 not [interactive │ │ │ │ +00001780: 5d27 2c0a 2020 2020 2020 2020 2020 2020 ]',. │ │ │ │ +00001790: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000017a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000017b0: 272d 6465 6661 756c 7427 203d 3e20 246c '-default' => $l │ │ │ │ +000017c0: 6f63 6b46 696c 6529 2c0a 0909 0909 4f70 ockFile),.....Op │ │ │ │ +000017d0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ │ +000017e0: 2720 3d3e 2027 6e6f 436f 6d70 7265 7373 ' => 'noCompress │ │ │ │ +000017f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001800: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6e _option' => '--n │ │ │ │ +00001810: 6f43 6f6d 7072 6573 7327 2c0a 0909 0909 oCompress',..... │ │ │ │ +00001820: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ │ +00001830: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... │ │ │ │ +00001840: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => ' │ │ │ │ +00001850: 5c41 5b31 2d39 5d5c 642a 5c5a 2729 2c0a \A[1-9]\d*\Z'),. │ │ │ │ +00001860: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +00001870: 272d 6e61 6d65 2720 3d3e 2027 6368 6563 '-name' => 'chec │ │ │ │ +00001880: 6b4f 6e6c 7927 2c0a 0909 0909 0920 2020 kOnly',...... │ │ │ │ +00001890: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +000018a0: 2027 2d63 272c 0a09 0909 0909 2020 2020 '-c',...... │ │ │ │ +000018b0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +000018c0: 2d2d 6368 6563 6b4f 6e6c 7927 2c0a 0909 --checkOnly',... │ │ │ │ +000018d0: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if │ │ │ │ +000018e0: 2720 3d3e 2027 6e6f 7420 5b69 6e74 6572 ' => 'not [inter │ │ │ │ +000018f0: 6163 7469 7665 5d27 292c 0a09 0909 094f active]'),.....O │ │ │ │ +00001900: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00001910: 6527 203d 3e20 2770 726f 6772 6573 7352 e' => 'progressR │ │ │ │ +00001920: 6570 6f72 7427 2c0a 0909 0909 0920 2020 eport',...... │ │ │ │ +00001930: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +00001940: 2027 2d2d 7072 6f67 7265 7373 5265 706f '--progressRepo │ │ │ │ +00001950: 7274 272c 0a09 0909 0909 2020 2020 272d rt',...... '- │ │ │ │ +00001960: 6465 6661 756c 7427 203d 3e20 302c 0a09 default' => 0,.. │ │ │ │ +00001970: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ │ +00001980: 6e27 203d 3e20 275c 415c 642b 5c5a 2729 n' => '\A\d+\Z') │ │ │ │ +00001990: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +000019a0: 7728 272d 6e61 6d65 2720 3d3e 2027 7665 w('-name' => 've │ │ │ │ +000019b0: 7262 6f73 6527 2c0a 0909 0909 0920 2020 rbose',...... │ │ │ │ +000019c0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +000019d0: 2027 2d76 272c 0a09 0909 0909 2020 2020 '-v',...... │ │ │ │ +000019e0: 272d 6f6e 6c79 5f69 6627 203d 3e20 276e '-only_if' => 'n │ │ │ │ +000019f0: 6f74 205b 696e 7465 7261 6374 6976 655d ot [interactive] │ │ │ │ +00001a00: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001a10: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7665 _alias' => '--ve │ │ │ │ +00001a20: 7262 6f73 6527 292c 0a09 0909 094f 7074 rbose'),.....Opt │ │ │ │ +00001a30: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00001a40: 203d 3e20 2764 6562 7567 272c 0a09 0909 => 'debug',.... │ │ │ │ +00001a50: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001a60: 6e27 203d 3e20 272d 2d64 6562 7567 272c n' => '--debug', │ │ │ │ +00001a70: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00001a80: 7074 696f 6e27 203d 3e20 272d 6427 2c0a ption' => '-d',. │ │ │ │ +00001a90: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ │ +00001aa0: 6966 2720 3d3e 2027 6e6f 7420 5b69 6e74 if' => 'not [int │ │ │ │ +00001ab0: 6572 6163 7469 7665 5d27 292c 0a09 0909 eractive]'),.... │ │ │ │ +00001ac0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +00001ad0: 616d 6527 203d 3e20 276c 6f67 4669 6c65 ame' => 'logFile │ │ │ │ +00001ae0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001af0: 5f6f 7074 696f 6e27 203d 3e20 272d 6c27 _option' => '-l' │ │ │ │ +00001b00: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001b10: 616c 6961 7327 203d 3e20 272d 2d6c 6f67 alias' => '--log │ │ │ │ +00001b20: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ │ +00001b30: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +00001b40: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +00001b50: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ │ +00001b60: 696e 7465 7261 6374 6976 655d 2729 2c0a interactive]'),. │ │ │ │ +00001b70: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +00001b80: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp │ │ │ │ +00001b90: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',...... │ │ │ │ +00001ba0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001bb0: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT │ │ │ │ +00001bc0: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio │ │ │ │ +00001bd0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001be0: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',. │ │ │ │ +00001bf0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00001c00: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',.. │ │ │ │ +00001c10: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ │ +00001c20: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil │ │ │ │ +00001c30: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... │ │ │ │ +00001c40: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e │ │ │ │ +00001c50: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa │ │ │ │ +00001c60: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\A[e\ │ │ │ │ +00001c70: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\Z',. │ │ │ │ +00001c80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001c90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001ca0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ │ +00001cb0: 3e22 5b6c 6f67 4669 6c65 5d22 292c 0a09 >"[logFile]"),.. │ │ │ │ +00001cc0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +00001cd0: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO │ │ │ │ +00001ce0: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... │ │ │ │ +00001cf0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ │ +00001d00: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... │ │ │ │ +00001d10: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ │ +00001d20: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles │ │ │ │ +00001d30: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ │ +00001d40: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',.. │ │ │ │ +00001d50: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ │ +00001d60: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\A\d+\Z', │ │ │ │ +00001d70: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00001d80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001d90: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o │ │ │ │ +00001da0: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>"[logF │ │ │ │ +00001db0: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]"),. │ │ │ │ +00001dc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001dd0: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ │ +00001de0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00001df0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',...... │ │ │ │ +00001e00: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001e10: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs' │ │ │ │ +00001e20: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +00001e30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001e40: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +00001e50: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no' │ │ │ │ +00001e60: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +00001e70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001e80: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +00001e90: 6f6e 6c79 5f69 6627 203d 3e20 225b 6c6f only_if' => "[lo │ │ │ │ +00001ea0: 6746 696c 655d 2229 2c0a 2020 2020 2020 gFile]"),. │ │ │ │ +00001eb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001ec0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +00001ed0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001ee0: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith', │ │ │ │ +00001ef0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00001f00: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com │ │ │ │ +00001f10: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',..... │ │ │ │ +00001f20: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ │ +00001f30: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. │ │ │ │ +00001f40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001f50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001f60: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul │ │ │ │ +00001f70: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. │ │ │ │ +00001f80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001f90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001fa0: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl │ │ │ │ +00001fb0: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>"[logFil │ │ │ │ +00001fc0: 655d 2229 0a09 0909 095d 0a09 0920 2020 e]").....]... │ │ │ │ +00001fd0: 2029 3b0a 0a24 4368 6563 6b50 6172 2d3e );..$CheckPar-> │ │ │ │ +00001fe0: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' => │ │ │ │ +00001ff0: 205c 4041 5247 562c 0a20 2020 2020 2020 \@ARGV,. │ │ │ │ +00002000: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help │ │ │ │ +00002010: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. │ │ │ │ +00002020: 2020 2020 2020 2020 2020 2020 293b 0a0a );.. │ │ │ │ +00002030: 2320 4175 7377 6572 7475 6e67 2064 6572 # Auswertung der │ │ │ │ +00002040: 2050 6172 616d 6574 6572 0a6d 7920 2461 Parameter.my $a │ │ │ │ +00002050: 7574 6f72 6570 6169 7220 3d20 2443 6865 utorepair = $Che │ │ │ │ +00002060: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00002070: 686f 7574 5061 7228 2761 7574 6f72 6570 houtPar('autorep │ │ │ │ +00002080: 6169 7227 293b 0a6d 7920 2470 7269 6e74 air');.my $print │ │ │ │ +00002090: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +000020a0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ │ +000020b0: 7072 696e 7427 293b 0a6d 7920 2469 6e74 print');.my $int │ │ │ │ +000020c0: 6572 6163 7469 7665 203d 2024 4368 6563 eractive = $Chec │ │ │ │ +000020d0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +000020e0: 6f75 7450 6172 2827 696e 7465 7261 6374 outPar('interact │ │ │ │ +000020f0: 6976 6527 293b 0a6d 7920 2476 6572 626f ive');.my $verbo │ │ │ │ +00002100: 7365 203d 2024 4368 6563 6b50 6172 2d3e se = $CheckPar-> │ │ │ │ +00002110: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ │ +00002120: 2827 7665 7262 6f73 6527 293b 0a6d 7920 ('verbose');.my │ │ │ │ +00002130: 2464 6562 7567 203d 2024 4368 6563 6b50 $debug = $CheckP │ │ │ │ +00002140: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +00002150: 7450 6172 2827 6465 6275 6727 293b 0a24 tPar('debug');.$ │ │ │ │ +00002160: 6c6f 636b 4669 6c65 203d 2024 4368 6563 lockFile = $Chec │ │ │ │ +00002170: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00002180: 5061 7228 276c 6f63 6b46 696c 6527 293b Par('lockFile'); │ │ │ │ +00002190: 0a6d 7920 246e 6f43 6f6d 7072 6573 7320 .my $noCompress │ │ │ │ +000021a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000021b0: 4f70 7457 6974 6850 6172 2827 6e6f 436f OptWithPar('noCo │ │ │ │ +000021c0: 6d70 7265 7373 2729 3b0a 6d79 2024 6368 mpress');.my $ch │ │ │ │ +000021d0: 6563 6b4f 6e6c 7920 3d20 2443 6865 636b eckOnly = $Check │ │ │ │ +000021e0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ │ +000021f0: 7574 5061 7228 2763 6865 636b 4f6e 6c79 utPar('checkOnly │ │ │ │ +00002200: 2729 3b0a 6d79 2024 7072 6f67 7265 7373 ');.my $progress │ │ │ │ +00002210: 5265 706f 7274 203d 2024 4368 6563 6b50 Report = $CheckP │ │ │ │ +00002220: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00002230: 7228 2770 726f 6772 6573 7352 6570 6f72 r('progressRepor │ │ │ │ +00002240: 7427 293b 0a6d 7920 246c 6f67 4669 6c65 t');.my $logFile │ │ │ │ +00002250: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00002260: 744f 7074 5769 7468 5061 7228 276c 6f67 tOptWithPar('log │ │ │ │ +00002270: 4669 6c65 2729 3b0a 6d79 2024 7769 7468 File');.my $with │ │ │ │ +00002280: 5469 6d65 203d 206e 6f74 2024 4368 6563 Time = not $Chec │ │ │ │ +00002290: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +000022a0: 6f75 7450 6172 2827 7375 7070 7265 7373 outPar('suppress │ │ │ │ +000022b0: 5469 6d65 2729 3b0a 2477 6974 6854 696d Time');.$withTim │ │ │ │ +000022c0: 6520 3d20 2477 6974 6854 696d 6520 3f20 e = $withTime ? │ │ │ │ +000022d0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my │ │ │ │ +000022e0: 2024 6d61 7846 696c 656c 656e 203d 2024 $maxFilelen = $ │ │ │ │ +000022f0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00002300: 5769 7468 5061 7228 276d 6178 4669 6c65 WithPar('maxFile │ │ │ │ +00002310: 6c65 6e27 293b 0a6d 7920 246e 6f4f 664f len');.my $noOfO │ │ │ │ +00002320: 6c64 4669 6c65 7320 3d20 2443 6865 636b ldFiles = $Check │ │ │ │ +00002330: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00002340: 6172 2827 6e6f 4f66 4f6c 6446 696c 6573 ar('noOfOldFiles │ │ │ │ +00002350: 2729 3b0a 6d79 2024 7361 7665 4c6f 6773 ');.my $saveLogs │ │ │ │ +00002360: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00002370: 744f 7074 5769 7468 5061 7228 2773 6176 tOptWithPar('sav │ │ │ │ +00002380: 654c 6f67 7327 293b 0a6d 7920 2463 6f6d eLogs');.my $com │ │ │ │ +00002390: 7072 6573 7357 6974 6820 3d20 2443 6865 pressWith = $Che │ │ │ │ +000023a0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +000023b0: 6850 6172 2827 636f 6d70 7265 7373 5769 hPar('compressWi │ │ │ │ +000023c0: 7468 2729 3b0a 6d79 2028 4062 6163 6b75 th');.my (@backu │ │ │ │ +000023d0: 7044 6972 7329 203d 2024 4368 6563 6b50 pDirs) = $CheckP │ │ │ │ +000023e0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +000023f0: 7228 2762 6163 6b75 7044 6972 2729 3b0a r('backupDir');. │ │ │ │ +00002400: 0a75 6e6c 6573 7320 2824 6e6f 436f 6d70 .unless ($noComp │ │ │ │ +00002410: 7265 7373 290a 7b0a 2020 2020 6c6f 6361 ress).{. loca │ │ │ │ +00002420: 6c20 2a46 494c 453b 0a20 2020 2069 6620 l *FILE;. if │ │ │ │ +00002430: 286f 7065 6e28 4649 4c45 2c20 222f 7072 (open(FILE, "/pr │ │ │ │ +00002440: 6f63 2f63 7075 696e 666f 2229 290a 2020 oc/cpuinfo")). │ │ │ │ +00002450: 2020 7b0a 096d 7920 246c 3b0a 0924 6e6f {..my $l;..$no │ │ │ │ +00002460: 436f 6d70 7265 7373 203d 2031 3b0a 0977 Compress = 1;..w │ │ │ │ +00002470: 6869 6c65 2028 246c 203d 203c 4649 4c45 hile ($l = )..{.. $noCo │ │ │ │ +00002490: 6d70 7265 7373 2b2b 2069 6620 246c 203d mpress++ if $l = │ │ │ │ +000024a0: 7e20 2f70 726f 6365 7373 6f72 2f3b 0a09 ~ /processor/;.. │ │ │ │ +000024b0: 7d0a 0963 6c6f 7365 2846 494c 4529 3b0a }..close(FILE);. │ │ │ │ +000024c0: 2020 2020 7d0a 2020 2020 246e 6f43 6f6d }. $noCom │ │ │ │ +000024d0: 7072 6573 7320 3d20 3220 6966 2024 6e6f press = 2 if $no │ │ │ │ +000024e0: 436f 6d70 7265 7373 203c 2032 3b0a 7d0a Compress < 2;.}. │ │ │ │ +000024f0: 0a69 6620 2824 7072 696e 7429 0a7b 0a20 .if ($print).{. │ │ │ │ +00002500: 2020 2024 4368 6563 6b50 6172 2d3e 7072 $CheckPar->pr │ │ │ │ +00002510: 696e 7428 293b 0a20 2020 2065 7869 7420 int();. exit │ │ │ │ +00002520: 303b 0a7d 0a0a 6966 2028 2469 6e74 6572 0;.}..if ($inter │ │ │ │ +00002530: 6163 7469 7665 290a 7b0a 2020 2020 2476 active).{. $v │ │ │ │ +00002540: 6572 626f 7365 203d 2031 3b0a 2020 2020 erbose = 1;. │ │ │ │ +00002550: 2464 6562 7567 203d 2031 3b0a 7d0a 0a0a $debug = 1;.}... │ │ │ │ +00002560: 6966 2028 2469 6e74 6572 6163 7469 7665 if ($interactive │ │ │ │ +00002570: 290a 7b0a 2020 2020 6d79 2024 616e 7377 ).{. my $answ │ │ │ │ +00002580: 6572 3b0a 2020 2020 646f 0a20 2020 207b er;. do. { │ │ │ │ +00002590: 0a09 7072 696e 7420 225c 6e42 6566 6f72 ..print "\nBefor │ │ │ │ +000025a0: 6520 7472 7969 6e67 2074 6f20 7265 7061 e trying to repa │ │ │ │ +000025b0: 6972 2061 6e79 2064 616d 6167 6573 206f ir any damages o │ │ │ │ +000025c0: 6620 7468 6520 6261 636b 7570 5c6e 222c f the backup\n", │ │ │ │ +000025d0: 0a09 2279 6f75 2073 686f 756c 6420 6d61 .."you should ma │ │ │ │ +000025e0: 6b65 2061 2062 6163 6b75 7020 6f66 2074 ke a backup of t │ │ │ │ +000025f0: 6865 2066 696c 6573 2062 6565 696e 6720 he files beeing │ │ │ │ +00002600: 6d61 6e69 7075 6c61 7465 6420 6279 5c6e manipulated by\n │ │ │ │ +00002610: 222c 0a09 2274 6869 7320 7072 6f67 7261 ",.."this progra │ │ │ │ +00002620: 6d2e 2044 6f20 7468 6973 2062 7920 6567 m. Do this by eg │ │ │ │ +00002630: 2e20 6578 6563 7574 696e 675c 6e22 2c0a . executing\n",. │ │ │ │ +00002640: 0922 2320 7461 7220 6366 202f 7361 7665 ."# tar cf /save │ │ │ │ +00002650: 506c 6163 652e 7461 7220 3c62 6163 6b75 Place.tar /..storeB │ │ │ │ +00002670: 6163 6b75 704c 696e 6b73 5c6e 222c 0a09 ackupLinks\n",.. │ │ │ │ +00002680: 2266 6f72 2061 6c6c 2061 6666 6563 7465 "for all affecte │ │ │ │ +00002690: 6420 6261 636b 7570 2064 6972 6563 746f d backup directo │ │ │ │ +000026a0: 7269 6573 206f 7220 7369 6d70 6c79 2061 ries or simply a │ │ │ │ +000026b0: 6c6c 206f 6620 796f 7572 2062 6163 6b75 ll of your backu │ │ │ │ +000026c0: 7073 2e5c 6e22 2c0a 0922 636f 6e74 696e ps.\n",.."contin │ │ │ │ +000026d0: 7565 3f5c 6e22 2c0a 0922 7965 7320 2f20 ue?\n",.."yes / │ │ │ │ +000026e0: 6e6f 2020 2d3e 2022 3b0a 0924 616e 7377 no -> ";..$answ │ │ │ │ +000026f0: 6572 203d 203c 5354 4449 4e3e 3b0a 0963 er = ;..c │ │ │ │ +00002700: 686f 6d70 2024 616e 7377 6572 3b0a 2020 homp $answer;. │ │ │ │ +00002710: 2020 7d20 7768 696c 6520 2824 616e 7377 } while ($answ │ │ │ │ +00002720: 6572 206e 6520 2779 6573 2720 616e 6420 er ne 'yes' and │ │ │ │ +00002730: 2461 6e73 7765 7220 6e65 2027 6e6f 2729 $answer ne 'no') │ │ │ │ +00002740: 3b0a 0a20 2020 2065 7869 7420 300a 0969 ;.. exit 0..i │ │ │ │ +00002750: 6620 2461 6e73 7765 7220 6571 2027 6e6f f $answer eq 'no │ │ │ │ +00002760: 273b 0a7d 0a0a 0a6d 7920 2840 7061 7229 ';.}...my (@par) │ │ │ │ +00002770: 203d 2028 293b 0a69 6620 2864 6566 696e = ();.if (defin │ │ │ │ +00002780: 6564 2024 6c6f 6746 696c 6529 0a7b 0a20 ed $logFile).{. │ │ │ │ +00002790: 2020 2070 7573 6820 4070 6172 2c20 2827 push @par, (' │ │ │ │ +000027a0: 2d66 696c 6527 203d 3e20 246c 6f67 4669 -file' => $logFi │ │ │ │ +000027b0: 6c65 2c0a 0909 272d 6d75 6c74 6970 7269 le,...'-multipri │ │ │ │ +000027c0: 6e74 2720 3d3e 2027 7965 7327 293b 0a7d nt' => 'yes');.} │ │ │ │ +000027d0: 0a65 6c73 650a 7b0a 2020 2020 7075 7368 .else.{. push │ │ │ │ +000027e0: 2040 7061 722c 2028 272d 6669 6c65 6465 @par, ('-filede │ │ │ │ +000027f0: 7363 7269 7074 6f72 272c 202a 5354 444f scriptor', *STDO │ │ │ │ +00002800: 5554 293b 0a7d 0a0a 6d79 2028 2470 724c UT);.}..my ($prL │ │ │ │ +00002810: 6f67 4b69 6e64 2920 3d20 5b27 413a 4245 ogKind) = ['A:BE │ │ │ │ +00002820: 4749 4e27 2c0a 0909 2020 2027 5a3a 454e GIN',... 'Z:EN │ │ │ │ +00002830: 4427 2c0a 0909 2020 2027 563a 5645 5253 D',... 'V:VERS │ │ │ │ +00002840: 494f 4e27 2c0a 0909 2020 2027 493a 494e ION',... 'I:IN │ │ │ │ +00002850: 464f 272c 0a09 0920 2020 2757 3a57 4152 FO',... 'W:WAR │ │ │ │ +00002860: 4e49 4e47 272c 0a09 0920 2020 2745 3a45 NING',... 'E:E │ │ │ │ +00002870: 5252 4f52 272c 0a09 0920 2020 2750 3a50 RROR',... 'P:P │ │ │ │ +00002880: 524f 4752 4553 5327 2c0a 0909 2020 2027 ROGRESS',... ' │ │ │ │ +00002890: 533a 5354 4154 4953 5449 4327 2c0a 0909 S:STATISTIC',... │ │ │ │ +000028a0: 2020 2027 443a 4445 4255 4727 5d3b 0a6d 'D:DEBUG'];.m │ │ │ │ +000028b0: 7920 2470 724c 6f67 203d 2070 7269 6e74 y $prLog = print │ │ │ │ +000028c0: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind' │ │ │ │ +000028d0: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,. │ │ │ │ +000028e0: 0909 0920 2040 7061 722c 0a09 0909 2020 ... @par,.... │ │ │ │ +000028f0: 272d 7769 7468 5469 6d65 2720 3d3e 2024 '-withTime' => $ │ │ │ │ +00002900: 7769 7468 5469 6d65 2c0a 0909 0920 2027 withTime,.... ' │ │ │ │ +00002910: 2d6d 6178 4669 6c65 6c65 6e27 203d 3e20 -maxFilelen' => │ │ │ │ +00002920: 246d 6178 4669 6c65 6c65 6e2c 0a09 0909 $maxFilelen,.... │ │ │ │ +00002930: 2020 272d 6e6f 4f66 4f6c 6446 696c 6573 '-noOfOldFiles │ │ │ │ +00002940: 2720 3d3e 2024 6e6f 4f66 4f6c 6446 696c ' => $noOfOldFil │ │ │ │ +00002950: 6573 2c0a 0909 0920 2027 2d73 6176 654c es,.... '-saveL │ │ │ │ +00002960: 6f67 7327 203d 3e20 2473 6176 654c 6f67 ogs' => $saveLog │ │ │ │ +00002970: 732c 0a09 0909 2020 272d 636f 6d70 7265 s,.... '-compre │ │ │ │ +00002980: 7373 5769 7468 2720 3d3e 2024 636f 6d70 ssWith' => $comp │ │ │ │ +00002990: 7265 7373 5769 7468 293b 0a0a 2470 724c ressWith);..$prL │ │ │ │ +000029a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +000029b0: 2720 3d3e 2027 4127 2c0a 0920 2020 2020 ' => 'A',.. │ │ │ │ +000029c0: 2027 2d73 7472 2720 3d3e 205b 2263 6865 '-str' => ["che │ │ │ │ +000029d0: 636b 696e 6720 7265 6665 7265 6e63 6573 cking references │ │ │ │ +000029e0: 2069 6e20 3c40 6261 636b 7570 4469 7273 in <@backupDirs │ │ │ │ +000029f0: 3e22 5d29 3b0a 2470 724c 6f67 2d3e 7072 >"]);.$prLog->pr │ │ │ │ +00002a00: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00002a10: 5627 2c0a 0920 2020 2020 2027 2d73 7472 V',.. '-str │ │ │ │ +00002a20: 2720 3d3e 205b 2224 5645 5253 494f 4e70 ' => ["$VERSIONp │ │ │ │ +00002a30: 4e61 6d65 2c20 246d 6169 6e3a 3a53 544f Name, $main::STO │ │ │ │ +00002a40: 5245 4241 434b 5550 5645 5253 494f 4e2c REBACKUPVERSION, │ │ │ │ +00002a50: 2022 202e 0a09 0909 2022 6275 696c 6420 " ..... "build │ │ │ │ +00002a60: 2456 4552 5349 4f4e 7376 6e49 4422 5d29 $VERSIONsvnID"]) │ │ │ │ +00002a70: 3b0a 0a3a 3a63 6865 636b 4c6f 636b 4669 ;..::checkLockFi │ │ │ │ +00002a80: 6c65 2824 6c6f 636b 4669 6c65 2c20 2470 le($lockFile, $p │ │ │ │ +00002a90: 724c 6f67 293b 0a0a 6d79 2024 616c 6c4c rLog);..my $allL │ │ │ │ +00002aa0: 696e 6b73 203d 206c 6174 654c 696e 6b73 inks = lateLinks │ │ │ │ +00002ab0: 2d3e 6e65 7728 272d 6469 7273 2720 3d3e ->new('-dirs' => │ │ │ │ +00002ac0: 205c 4062 6163 6b75 7044 6972 732c 0a09 \@backupDirs,.. │ │ │ │ +00002ad0: 0909 2020 2020 2020 272d 6b69 6e64 2720 .. '-kind' │ │ │ │ +00002ae0: 3d3e 2027 7265 6375 7273 6976 6553 6561 => 'recursiveSea │ │ │ │ +00002af0: 7263 6827 2c0a 0909 0920 2020 2020 2027 rch',.... ' │ │ │ │ +00002b00: 2d63 6865 636b 4c69 6e6b 4672 6f6d 436f -checkLinkFromCo │ │ │ │ +00002b10: 6e73 6973 7465 6e63 7927 203d 3e20 312c nsistency' => 1, │ │ │ │ +00002b20: 0a09 0909 2020 2020 2020 272d 7665 7262 .... '-verb │ │ │ │ +00002b30: 6f73 6527 203d 3e20 2476 6572 626f 7365 ose' => $verbose │ │ │ │ +00002b40: 2c0a 0909 0920 2020 2020 2027 2d64 6562 ,.... '-deb │ │ │ │ +00002b50: 7567 2720 3d3e 2024 6465 6275 672c 0a09 ug' => $debug,.. │ │ │ │ +00002b60: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog' │ │ │ │ +00002b70: 203d 3e20 2470 724c 6f67 2c0a 0909 0920 => $prLog,.... │ │ │ │ +00002b80: 2020 2020 2027 2d69 6e74 6572 6163 7469 '-interacti │ │ │ │ +00002b90: 7665 2720 3d3e 2024 696e 7465 7261 6374 ve' => $interact │ │ │ │ +00002ba0: 6976 652c 0a09 0909 2020 2020 2020 272d ive,.... '- │ │ │ │ +00002bb0: 6175 746f 7265 7061 6972 2720 3d3e 2024 autorepair' => $ │ │ │ │ +00002bc0: 6175 746f 7265 7061 6972 293b 0a0a 6966 autorepair);..if │ │ │ │ +00002bd0: 2028 2463 6865 636b 4f6e 6c79 290a 7b0a ($checkOnly).{. │ │ │ │ +00002be0: 2020 2020 756e 6c69 6e6b 2024 6c6f 636b unlink $lock │ │ │ │ +00002bf0: 4669 6c65 3b0a 2020 2020 6578 6974 2030 File;. exit 0 │ │ │ │ +00002c00: 3b0a 7d0a 0a69 6620 2824 696e 7465 7261 ;.}..if ($intera │ │ │ │ +00002c10: 6374 6976 6529 0a7b 0a20 2020 206d 7920 ctive).{. my │ │ │ │ +00002c20: 2461 6e73 7765 723b 0a20 2020 2064 6f0a $answer;. do. │ │ │ │ +00002c30: 2020 2020 7b0a 0970 7269 6e74 2022 5c6e {..print "\n │ │ │ │ +00002c40: 636f 6e74 696e 7565 2077 6974 6820 7570 continue with up │ │ │ │ +00002c50: 6461 7469 6e67 2074 6865 2062 6163 6b75 dating the backu │ │ │ │ +00002c60: 7028 7329 3f5c 6e22 2c0a 0922 2863 6f6d p(s)?\n",.."(com │ │ │ │ +00002c70: 7072 6573 7369 6e67 2061 6e64 2073 6574 pressing and set │ │ │ │ +00002c80: 7469 6e67 2068 6172 6420 6c69 6e6b 7329 ting hard links) │ │ │ │ +00002c90: 5c6e 222c 0a09 2279 6573 202f 206e 6f20 \n",.."yes / no │ │ │ │ +00002ca0: 202d 3e20 223b 0a09 2461 6e73 7765 7220 -> ";..$answer │ │ │ │ +00002cb0: 3d20 3c53 5444 494e 3e3b 0a09 6368 6f6d = ;..chom │ │ │ │ +00002cc0: 7020 2461 6e73 7765 723b 0a20 2020 207d p $answer;. } │ │ │ │ +00002cd0: 2077 6869 6c65 2028 2461 6e73 7765 7220 while ($answer │ │ │ │ +00002ce0: 6e65 2027 7965 7327 2061 6e64 2024 616e ne 'yes' and $an │ │ │ │ +00002cf0: 7377 6572 206e 6520 276e 6f27 293b 0a0a swer ne 'no');.. │ │ │ │ +00002d00: 2020 2020 6578 6974 2030 0a09 6966 2024 exit 0..if $ │ │ │ │ +00002d10: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';. │ │ │ │ +00002d20: 7d0a 0a23 0a23 2073 6574 206c 696e 6b73 }..#.# set links │ │ │ │ +00002d30: 2061 6e64 2063 6f6d 7072 6573 7320 6669 and compress fi │ │ │ │ +00002d40: 6c65 730a 230a 6d79 2024 7570 6461 7465 les.#.my $update │ │ │ │ +00002d50: 4469 7246 6c61 6720 3d20 303b 0a6d 7920 DirFlag = 0;.my │ │ │ │ +00002d60: 2840 6c61 7465 4c69 6e6b 4469 7273 293b (@lateLinkDirs); │ │ │ │ +00002d70: 0a77 6869 6c65 2028 2828 406c 6174 654c .while (((@lateL │ │ │ │ +00002d80: 696e 6b44 6972 7329 203d 2024 616c 6c4c inkDirs) = $allL │ │ │ │ +00002d90: 696e 6b73 2d3e 6765 7441 6c6c 4469 7273 inks->getAllDirs │ │ │ │ +00002da0: 5769 7468 4c61 7465 4c69 6e6b 7328 2929 WithLateLinks()) │ │ │ │ +00002db0: 203e 2030 290a 7b0a 2020 2020 6d79 2024 > 0).{. my $ │ │ │ │ +00002dc0: 643b 0a20 2020 2066 6f72 6561 6368 2024 d;. foreach $ │ │ │ │ +00002dd0: 6420 2873 6f72 7420 406c 6174 654c 696e d (sort @lateLin │ │ │ │ +00002de0: 6b44 6972 7329 0a20 2020 207b 0a09 6d79 kDirs). {..my │ │ │ │ +00002df0: 2024 6c69 6e6b 546f 4861 7368 203d 2024 $linkToHash = $ │ │ │ │ +00002e00: 616c 6c4c 696e 6b73 2d3e 6765 744c 696e allLinks->getLin │ │ │ │ +00002e10: 6b54 6f48 6173 6828 293b 0a09 6d79 2024 kToHash();..my $ │ │ │ │ +00002e20: 6c69 6e6b 4672 6f6d 4861 7368 203d 2024 linkFromHash = $ │ │ │ │ +00002e30: 616c 6c4c 696e 6b73 2d3e 6765 744c 696e allLinks->getLin │ │ │ │ +00002e40: 6b46 726f 6d48 6173 6828 293b 0a0a 2320 kFromHash();..# │ │ │ │ +00002e50: 2020 2020 2020 7072 696e 7420 2263 6865 print "che │ │ │ │ +00002e60: 636b 696e 6720 3c24 643e 5c6e 223b 0a20 cking <$d>\n";. │ │ │ │ +00002e70: 2020 2020 2020 6966 2028 2d65 2022 2464 if (-e "$d │ │ │ │ +00002e80: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin │ │ │ │ +00002e90: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2" │ │ │ │ +00002ea0: 290a 2020 2020 2020 207b 0a23 0920 2020 ). {.#. │ │ │ │ +00002eb0: 7072 696e 7420 225c 7424 642f 2e73 746f print "\t$d/.sto │ │ │ │ +00002ec0: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li │ │ │ │ +00002ed0: 6e6b 4669 6c65 2e62 7a32 2065 7869 7374 nkFile.bz2 exist │ │ │ │ +00002ee0: 735c 6e22 3b0a 0920 2020 6d79 2024 6c69 s\n";.. my $li │ │ │ │ +00002ef0: 6e6b 546f 4469 723b 0a09 2020 206d 7920 nkToDir;.. my │ │ │ │ +00002f00: 246e 6565 6473 5570 6461 7465 203d 2030 $needsUpdate = 0 │ │ │ │ +00002f10: 3b0a 0920 2020 6d79 2024 6861 7368 203d ;.. my $hash = │ │ │ │ +00002f20: 2024 246c 696e 6b54 6f48 6173 687b 2464 $$linkToHash{$d │ │ │ │ +00002f30: 7d3b 0a09 2020 2066 6f72 6561 6368 2024 };.. foreach $ │ │ │ │ +00002f40: 6c69 6e6b 546f 4469 7220 2873 6f72 7420 linkToDir (sort │ │ │ │ +00002f50: 6b65 7973 2025 2468 6173 6829 0a09 2020 keys %$hash).. │ │ │ │ +00002f60: 207b 0a23 0920 2020 2020 2020 7072 696e {.#. prin │ │ │ │ +00002f70: 7420 225c 745c 7463 6865 636b 696e 6720 t "\t\tchecking │ │ │ │ +00002f80: 246c 696e 6b54 6f44 6972 2066 6f72 206c $linkToDir for l │ │ │ │ +00002f90: 696e 6b46 696c 652e 627a 323a 2022 3b0a inkFile.bz2: ";. │ │ │ │ +00002fa0: 0920 2020 2020 2020 6966 2028 2d65 2022 . if (-e " │ │ │ │ +00002fb0: 246c 696e 6b54 6f44 6972 2f2e 7374 6f72 $linkToDir/.stor │ │ │ │ +00002fc0: 6542 6163 6b75 704c 696e 6b73 2f6c 696e eBackupLinks/lin │ │ │ │ +00002fd0: 6b46 696c 652e 627a 3222 290a 0920 2020 kFile.bz2").. │ │ │ │ +00002fe0: 2020 2020 7b0a 0909 2020 2024 6e65 6564 {... $need │ │ │ │ +00002ff0: 7355 7064 6174 6520 3d20 313b 0a23 0909 sUpdate = 1;.#.. │ │ │ │ +00003000: 2020 2070 7269 6e74 2022 6e65 6564 7320 print "needs │ │ │ │ +00003010: 5570 6461 7465 215c 6e22 3b0a 0909 2020 Update!\n";... │ │ │ │ +00003020: 206c 6173 743b 0a09 2020 2020 2020 207d last;.. } │ │ │ │ +00003030: 0a09 2020 2020 2020 2065 6c73 650a 0920 .. else.. │ │ │ │ +00003040: 2020 2020 2020 7b0a 2309 0920 2020 7072 {.#.. pr │ │ │ │ +00003050: 696e 7420 226f 6b2c 2069 7320 7570 6461 int "ok, is upda │ │ │ │ +00003060: 7465 645c 6e22 3b0a 0920 2020 2020 2020 ted\n";.. │ │ │ │ +00003070: 7d0a 0920 2020 7d0a 0920 2020 6966 2028 }.. }.. if ( │ │ │ │ +00003080: 246e 6565 6473 5570 6461 7465 203d 3d20 $needsUpdate == │ │ │ │ +00003090: 3029 0a09 2020 207b 0a23 0920 2020 2020 0).. {.#. │ │ │ │ +000030a0: 2020 7072 696e 7420 2275 7064 6174 6520 print "update │ │ │ │ +000030b0: 2464 5c6e 223b 0a09 2020 207d 0a09 2020 $d\n";.. }.. │ │ │ │ +000030c0: 2065 6c73 650a 0920 2020 7b0a 0920 2020 else.. {.. │ │ │ │ +000030d0: 2020 2020 6e65 7874 3b0a 0920 2020 7d0a next;.. }. │ │ │ │ +000030e0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. │ │ │ │ +000030f0: 656c 7365 0a20 2020 2020 2020 7b0a 0920 else. {.. │ │ │ │ +00003100: 2020 6e65 7874 3b0a 2020 2020 2020 207d next;. } │ │ │ │ +00003110: 0a0a 0924 7570 6461 7465 4469 7246 6c61 ...$updateDirFla │ │ │ │ +00003120: 6720 3d20 313b 0a09 3a3a 7570 6461 7465 g = 1;..::update │ │ │ │ +00003130: 4261 636b 7570 4469 7228 2464 2c20 246e BackupDir($d, $n │ │ │ │ +00003140: 6f43 6f6d 7072 6573 732c 2024 7072 6f67 oCompress, $prog │ │ │ │ +00003150: 7265 7373 5265 706f 7274 2c20 2470 724c ressReport, $prL │ │ │ │ +00003160: 6f67 2c0a 0909 0920 2024 696e 7465 7261 og,.... $intera │ │ │ │ +00003170: 6374 6976 6529 3b0a 0a09 2320 6465 6c65 ctive);...# dele │ │ │ │ +00003180: 7465 2070 726f 6365 7373 6564 2066 696c te processed fil │ │ │ │ +00003190: 6573 0a09 6d79 2024 6620 3d20 2224 642f es..my $f = "$d/ │ │ │ │ +000031a0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink │ │ │ │ +000031b0: 732f 6c69 6e6b 4669 6c65 2e62 7a32 223b s/linkFile.bz2"; │ │ │ │ +000031c0: 0a09 6966 2028 2875 6e6c 696e 6b20 2466 ..if ((unlink $f │ │ │ │ +000031d0: 2920 213d 2031 290a 097b 0a09 2020 2020 ) != 1)..{.. │ │ │ │ +000031e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +000031f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ │ +00003200: 0920 2027 2d73 7472 2720 3d3e 205b 2231 . '-str' => ["1 │ │ │ │ +00003210: 2063 616e 6e6f 7420 6465 6c65 7465 203c cannot delete < │ │ │ │ +00003220: 2466 3e22 5d29 3b0a 097d 0a09 656c 7365 $f>"]);..}..else │ │ │ │ +00003230: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog- │ │ │ │ +00003240: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00003250: 3e20 2749 272c 0a09 0909 2020 272d 7374 > 'I',.... '-st │ │ │ │ +00003260: 7227 203d 3e20 5b22 3120 6465 6c65 7465 r' => ["1 delete │ │ │ │ +00003270: 6420 3c24 663e 225d 290a 0909 6966 2024 d <$f>"])...if $ │ │ │ │ +00003280: 7665 7262 6f73 653b 0a09 7d0a 0a09 2466 verbose;..}...$f │ │ │ │ +00003290: 203d 2022 2464 2f2e 7374 6f72 6542 6163 = "$d/.storeBac │ │ │ │ +000032a0: 6b75 704c 696e 6b73 2f6c 696e 6b54 6f22 kupLinks/linkTo" │ │ │ │ +000032b0: 3b0a 0969 6620 282d 6520 2466 290a 097b ;..if (-e $f)..{ │ │ │ │ +000032c0: 0a09 2020 2020 6966 2028 2875 6e6c 696e .. if ((unlin │ │ │ │ +000032d0: 6b20 2466 2920 213d 2031 290a 0920 2020 k $f) != 1).. │ │ │ │ +000032e0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ │ +000032f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00003300: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +00003310: 7227 203d 3e20 5b22 3220 6361 6e6e 6f74 r' => ["2 cannot │ │ │ │ +00003320: 2064 656c 6574 6520 3c24 663e 225d 293b delete <$f>"]); │ │ │ │ +00003330: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00003340: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo │ │ │ │ +00003350: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00003360: 203d 3e20 2749 272c 0a09 0909 2020 2020 => 'I',.... │ │ │ │ +00003370: 2020 272d 7374 7227 203d 3e20 5b22 3220 '-str' => ["2 │ │ │ │ +00003380: 6465 6c65 7465 6420 3c24 663e 225d 290a deleted <$f>"]). │ │ │ │ +00003390: 0909 2020 2020 6966 2024 7665 7262 6f73 .. if $verbos │ │ │ │ +000033a0: 653b 0a09 2020 2020 7d0a 097d 0a0a 2309 e;.. }..}..#. │ │ │ │ +000033b0: 7072 696e 7420 2264 656c 6574 6520 6c69 print "delete li │ │ │ │ +000033c0: 6e6b 546f 3a5c 6e22 3b0a 2320 2020 2020 nkTo:\n";.# │ │ │ │ +000033d0: 2020 7072 696e 7420 225c 7424 643a 5c6e print "\t$d:\n │ │ │ │ +000033e0: 223b 0a20 2020 2020 2020 206d 7920 246b ";. my $k │ │ │ │ +000033f0: 3b0a 096d 7920 2468 6173 6820 3d20 2424 ;..my $hash = $$ │ │ │ │ +00003400: 6c69 6e6b 546f 4861 7368 7b24 647d 3b0a linkToHash{$d};. │ │ │ │ +00003410: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor │ │ │ │ +00003420: 7420 6b65 7973 2025 2468 6173 6829 0a09 t keys %$hash).. │ │ │ │ +00003430: 7b0a 0920 2020 2024 6620 3d20 2424 6861 {.. $f = $$ha │ │ │ │ +00003440: 7368 7b24 6b7d 3b0a 2309 2020 2020 7072 sh{$k};.#. pr │ │ │ │ +00003450: 696e 7420 225c 745c 7424 6b20 2d3e 2022 int "\t\t$k -> " │ │ │ │ +00003460: 2c20 2424 6861 7368 7b24 6b7d 2c20 225c , $$hash{$k}, "\ │ │ │ │ +00003470: 6e22 3b0a 0a09 2020 2020 6966 2028 2d65 n";... if (-e │ │ │ │ +00003480: 2024 6629 0a09 2020 2020 7b0a 0909 6966 $f).. {...if │ │ │ │ +00003490: 2028 2875 6e6c 696e 6b20 2466 2920 213d ((unlink $f) != │ │ │ │ +000034a0: 2031 290a 0909 7b0a 0909 2020 2020 2470 1)...{... $p │ │ │ │ +000034b0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +000034c0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ │ +000034d0: 2020 272d 7374 7227 203d 3e20 5b22 3320 '-str' => ["3 │ │ │ │ +000034e0: 6361 6e6e 6f74 2064 656c 6574 6520 3c24 cannot delete <$ │ │ │ │ +000034f0: 663e 225d 293b 0a09 097d 0a09 0965 6c73 f>"]);...}...els │ │ │ │ +00003500: 650a 0909 7b0a 0909 2020 2020 2470 724c e...{... $prL │ │ │ │ +00003510: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00003520: 2720 3d3e 2027 4927 2c0a 0909 0909 2020 ' => 'I',..... │ │ │ │ +00003530: 272d 7374 7227 203d 3e20 5b22 3320 6465 '-str' => ["3 de │ │ │ │ +00003540: 6c65 7465 6420 3c24 663e 225d 290a 0909 leted <$f>"])... │ │ │ │ +00003550: 0969 6620 2476 6572 626f 7365 3b0a 0909 .if $verbose;... │ │ │ │ +00003560: 7d0a 0920 2020 207d 0a0a 0920 2020 2024 }.. }... $ │ │ │ │ +00003570: 6620 3d20 2424 6c69 6e6b 4672 6f6d 4861 f = $$linkFromHa │ │ │ │ +00003580: 7368 7b24 6b7d 7b24 647d 3b0a 2309 2020 sh{$k}{$d};.#. │ │ │ │ +00003590: 2020 7072 696e 7420 2264 656c 6574 6520 print "delete │ │ │ │ +000035a0: 6c69 6e6b 4672 6f6d 3a20 3c24 663e 5c6e linkFrom: <$f>\n │ │ │ │ +000035b0: 223b 0a09 2020 2020 6966 2028 2875 6e6c ";.. if ((unl │ │ │ │ +000035c0: 696e 6b20 2466 2920 213d 2031 290a 0920 ink $f) != 1).. │ │ │ │ +000035d0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ │ +000035e0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +000035f0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ │ +00003600: 7374 7227 203d 3e20 5b22 3320 6361 6e6e str' => ["3 cann │ │ │ │ +00003610: 6f74 2064 656c 6574 6520 3c24 663e 225d ot delete <$f>"] │ │ │ │ +00003620: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e │ │ │ │ +00003630: 6c73 650a 0920 2020 207b 0a09 0924 7072 lse.. {...$pr │ │ │ │ +00003640: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00003650: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ │ +00003660: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00003670: 3320 6465 6c65 7465 6420 3c24 663e 225d 3 deleted <$f>"] │ │ │ │ +00003680: 290a 0909 2020 2020 6966 2024 7665 7262 )... if $verb │ │ │ │ +00003690: 6f73 653b 0a09 2020 2020 7d0a 0920 2020 ose;.. }.. │ │ │ │ +000036a0: 200a 097d 0a0a 2020 2020 2020 2020 676f ..}.. go │ │ │ │ +000036b0: 746f 206e 6578 744c 6f6f 703b 0a20 2020 to nextLoop;. │ │ │ │ +000036c0: 207d 0a0a 6e65 7874 4c6f 6f70 3a0a 0a20 }..nextLoop:.. │ │ │ │ +000036d0: 2020 2024 616c 6c4c 696e 6b73 203d 206c $allLinks = l │ │ │ │ +000036e0: 6174 654c 696e 6b73 2d3e 6e65 7728 272d ateLinks->new('- │ │ │ │ +000036f0: 6469 7273 2720 3d3e 205c 4062 6163 6b75 dirs' => \@backu │ │ │ │ +00003700: 7044 6972 732c 0a09 0909 2020 2020 2020 pDirs,.... │ │ │ │ +00003710: 2027 2d6b 696e 6427 203d 3e20 2772 6563 '-kind' => 'rec │ │ │ │ +00003720: 7572 7369 7665 5365 6172 6368 272c 0a09 ursiveSearch',.. │ │ │ │ +00003730: 0909 2020 2020 2020 2027 2d63 6865 636b .. '-check │ │ │ │ +00003740: 4c69 6e6b 4672 6f6d 436f 6e73 6973 7465 LinkFromConsiste │ │ │ │ +00003750: 6e63 7927 203d 3e20 312c 0a09 0909 2020 ncy' => 1,.... │ │ │ │ +00003760: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' │ │ │ │ +00003770: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,.... │ │ │ │ +00003780: 2020 2020 2020 2027 2d64 6562 7567 2720 '-debug' │ │ │ │ +00003790: 3d3e 2024 6465 6275 672c 0a09 0909 2020 => $debug,.... │ │ │ │ +000037a0: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ │ +000037b0: 2024 7072 4c6f 672c 0a09 0909 2020 2020 $prLog,.... │ │ │ │ +000037c0: 2020 2027 2d69 6e74 6572 6163 7469 7665 '-interactive │ │ │ │ +000037d0: 2720 3d3e 2024 696e 7465 7261 6374 6976 ' => $interactiv │ │ │ │ +000037e0: 6529 3b0a 0a7d 0a0a 2470 724c 6f67 2d3e e);..}..$prLog-> │ │ │ │ +000037f0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00003800: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s │ │ │ │ +00003810: 7472 2720 3d3e 205b 2265 7665 7279 7468 tr' => ["everyth │ │ │ │ +00003820: 696e 6720 6973 2075 7064 6174 6564 2c20 ing is updated, │ │ │ │ +00003830: 6e6f 7468 696e 6720 746f 2064 6f22 5d29 nothing to do"]) │ │ │ │ +00003840: 0a20 2020 2075 6e6c 6573 7320 2475 7064 . unless $upd │ │ │ │ +00003850: 6174 6544 6972 466c 6167 3b0a 0a0a 2320 ateDirFlag;...# │ │ │ │ +00003860: 5374 6174 6973 7469 6b20 fc62 6572 2044 Statistik .ber D │ │ │ │ +00003870: 6175 6572 2075 6e64 2043 5055 2d56 6572 auer und CPU-Ver │ │ │ │ +00003880: 6272 6175 6368 0a0a 6d79 2028 406c 293b brauch..my (@l); │ │ │ │ +00003890: 0a6d 7920 2824 7573 6572 2c24 7379 7374 .my ($user,$syst │ │ │ │ +000038a0: 656d 2c24 6375 7365 722c 2463 7379 7374 em,$cuser,$csyst │ │ │ │ +000038b0: 656d 2920 3d20 7469 6d65 733b 0a6d 7920 em) = times;.my │ │ │ │ +000038c0: 2824 7472 656e 6e29 203d 2022 2d2d 2d2d ($trenn) = "---- │ │ │ │ +000038d0: 2d2d 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d ---+----------+- │ │ │ │ +000038e0: 2d2d 2d2d 2d2d 2d2d 2d22 3b0a 7075 7368 ---------";.push │ │ │ │ +000038f0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf("%- │ │ │ │ +00003900: 3773 7c25 3130 737c 2531 3073 222c 2022 7s|%10s|%10s", " │ │ │ │ +00003910: 205b 7365 635d 222c 2022 7573 6572 222c [sec]", "user", │ │ │ │ +00003920: 2022 7379 7374 656d 2229 3b0a 7075 7368 "system");.push │ │ │ │ +00003930: 2040 6c2c 2022 2474 7265 6e6e 223b 0a70 @l, "$trenn";.p │ │ │ │ +00003940: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf( │ │ │ │ +00003950: 2225 2d37 737c 2531 302e 3266 7c25 3130 "%-7s|%10.2f|%10 │ │ │ │ +00003960: 2e32 6622 2c20 2270 726f 6365 7373 222c .2f", "process", │ │ │ │ +00003970: 2024 7573 6572 2c20 2473 7973 7465 6d29 $user, $system) │ │ │ │ +00003980: 3b0a 7075 7368 2040 6c2c 2073 7072 696e ;.push @l, sprin │ │ │ │ +00003990: 7466 2822 252d 3773 7c25 3130 2e32 667c tf("%-7s|%10.2f| │ │ │ │ +000039a0: 2531 302e 3266 222c 2022 6368 696c 6473 %10.2f", "childs │ │ │ │ +000039b0: 222c 2024 6375 7365 722c 2024 6373 7973 ", $cuser, $csys │ │ │ │ +000039c0: 7465 6d29 3b0a 7075 7368 2040 6c2c 2022 tem);.push @l, " │ │ │ │ +000039d0: 2474 7265 6e6e 223b 0a6d 7920 2824 752c $trenn";.my ($u, │ │ │ │ +000039e0: 2024 7329 203d 2028 2463 7573 6572 202b $s) = ($cuser + │ │ │ │ +000039f0: 2024 7573 6572 2c20 2463 7379 7374 656d $user, $csystem │ │ │ │ +00003a00: 202b 2024 7379 7374 656d 293b 0a70 7573 + $system);.pus │ │ │ │ +00003a10: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf("% │ │ │ │ +00003a20: 2d37 737c 2531 302e 3266 7c25 3130 2e32 -7s|%10.2f|%10.2 │ │ │ │ +00003a30: 6620 3d3e 2025 2e32 6622 2c20 2273 756d f => %.2f", "sum │ │ │ │ +00003a40: 222c 2024 752c 2024 732c 2024 7520 2b20 ", $u, $s, $u + │ │ │ │ +00003a50: 2473 293b 0a0a 6d79 2028 4073 7461 7274 $s);..my (@start │ │ │ │ +00003a60: 4461 7465 2920 3d20 2829 3b0a 6966 2028 Date) = ();.if ( │ │ │ │ +00003a70: 2473 7461 7274 4461 7465 290a 7b0a 2020 $startDate).{. │ │ │ │ +00003a80: 2020 7075 7368 2040 7374 6172 7444 6174 push @startDat │ │ │ │ +00003a90: 652c 2027 2020 2020 2020 2020 2020 2070 e, ' p │ │ │ │ +00003aa0: 7265 636f 6d6d 616e 6420 6475 7261 7469 recommand durati │ │ │ │ +00003ab0: 6f6e 203d 2027 202e 0a09 2473 7461 7274 on = ' ...$start │ │ │ │ +00003ac0: 4461 7465 2d3e 6465 6c74 6149 6e53 7472 Date->deltaInStr │ │ │ │ +00003ad0: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' = │ │ │ │ +00003ae0: 3e20 2473 7461 7274 4461 7465 293b 0a7d > $startDate);.} │ │ │ │ +00003af0: 0a0a 6d79 2024 6445 6e64 203d 2064 6174 ..my $dEnd = dat │ │ │ │ +00003b00: 6554 6f6f 6c73 2d3e 6e65 7728 293b 0a6d eTools->new();.m │ │ │ │ +00003b10: 7920 2464 7572 6174 696f 6e20 3d20 2473 y $duration = $s │ │ │ │ +00003b20: 7461 7274 4461 7465 2d3e 6465 6c74 6149 tartDate->deltaI │ │ │ │ +00003b30: 6e53 6563 7328 272d 7365 636f 6e64 4461 nSecs('-secondDa │ │ │ │ +00003b40: 7465 2720 3d3e 2024 6445 6e64 293b 0a24 te' => $dEnd);.$ │ │ │ │ +00003b50: 6475 7261 7469 6f6e 203d 2031 2069 6620 duration = 1 if │ │ │ │ +00003b60: 2824 6475 7261 7469 6f6e 203d 3d20 3029 ($duration == 0) │ │ │ │ +00003b70: 3b20 2020 2320 4d69 6e69 6d61 6c65 7220 ; # Minimaler │ │ │ │ +00003b80: 5765 7274 0a0a 2470 724c 6f67 2d3e 7072 Wert..$prLog->pr │ │ │ │ +00003b90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00003ba0: 5327 2c0a 0920 2020 2020 2027 2d73 7472 S',.. '-str │ │ │ │ +00003bb0: 2720 3d3e 0a09 2020 2020 2020 5b27 2020 ' =>.. [' │ │ │ │ +00003bc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003bd0: 2020 2020 6475 7261 7469 6f6e 203d 2027 duration = ' │ │ │ │ +00003be0: 202e 0a09 2020 2020 2020 2064 6174 6554 ... dateT │ │ │ │ +00003bf0: 6f6f 6c73 3a3a 7661 6c54 6f53 7472 2827 ools::valToStr(' │ │ │ │ +00003c00: 2d73 6563 2720 3d3e 2024 6475 7261 7469 -sec' => $durati │ │ │ │ +00003c10: 6f6e 292c 0a09 2020 2020 2020 2040 6c0a on),.. @l. │ │ │ │ +00003c20: 0920 2020 2020 2020 5d29 3b0a 0a75 6e6c . ]);..unl │ │ │ │ +00003c30: 696e 6b20 246c 6f63 6b46 696c 653b 0a0a ink $lockFile;.. │ │ │ │ +00003c40: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00003c50: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. │ │ │ │ +00003c60: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ │ +00003c70: 2273 796e 6369 6e67 202e 2e2e 225d 293b "syncing ..."]); │ │ │ │ +00003c80: 0a73 7973 7465 6d20 222f 6269 6e2f 7379 .system "/bin/sy │ │ │ │ +00003c90: 6e63 223b 0a0a 2470 724c 6f67 2d3e 7072 nc";..$prLog->pr │ │ │ │ +00003ca0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00003cb0: 5a27 2c0a 0920 2020 2020 2027 2d73 7472 Z',.. '-str │ │ │ │ +00003cc0: 2720 3d3e 205b 2263 6865 636b 696e 6720 ' => ["checking │ │ │ │ +00003cd0: 7265 6665 7265 6e63 6573 2069 6e20 3c40 references in <@ │ │ │ │ +00003ce0: 6261 636b 7570 4469 7273 3e22 5d29 3b0a backupDirs>"]);. │ │ │ │ +00003cf0: 0a65 7869 7420 303b 0a0a 0a0a 2323 2323 .exit 0;....#### │ │ │ │ +00003d00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003d10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003d20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00003d30: 2323 2323 2323 2323 0a73 7562 2075 7064 ########.sub upd │ │ │ │ +00003d40: 6174 6542 6163 6b75 7044 6972 0a7b 0a20 ateBackupDir.{. │ │ │ │ +00003d50: 2020 206d 7920 2464 6972 203d 2073 6869 my $dir = shi │ │ │ │ +00003d60: 6674 3b0a 2020 2020 6d79 2024 6e6f 436f ft;. my $noCo │ │ │ │ +00003d70: 6d70 7265 7373 203d 2073 6869 6674 3b0a mpress = shift;. │ │ │ │ +00003d80: 2020 2020 6d79 2024 7072 6f67 7265 7373 my $progress │ │ │ │ +00003d90: 5265 706f 7274 203d 2073 6869 6674 3b0a Report = shift;. │ │ │ │ +00003da0: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ │ +00003db0: 7368 6966 743b 0a20 2020 206d 7920 2469 shift;. my $i │ │ │ │ +00003dc0: 6e74 6572 6163 7469 7665 203d 2073 6869 nteractive = shi │ │ │ │ +00003dd0: 6674 3b0a 0a20 2020 2023 0a20 2020 2023 ft;.. #. # │ │ │ │ +00003de0: 2072 6561 6420 636f 6d70 7265 7373 2066 read compress f │ │ │ │ +00003df0: 726f 6d20 2e6d 6435 4368 6563 6b53 756d rom .md5CheckSum │ │ │ │ +00003e00: 2e69 6e66 6f0a 2020 2020 230a 2020 2020 .info. #. │ │ │ │ +00003e10: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00003e20: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ │ +00003e30: 2020 272d 7374 7227 203d 3e20 5b22 7570 '-str' => ["up │ │ │ │ +00003e40: 6461 7469 6e67 203c 2464 6972 3e22 5d29 dating <$dir>"]) │ │ │ │ +00003e50: 3b0a 0a20 2020 206d 7920 2472 6373 6620 ;.. my $rcsf │ │ │ │ +00003e60: 3d20 7265 6164 4368 6563 6b53 756d 4669 = readCheckSumFi │ │ │ │ +00003e70: 6c65 2d3e 6e65 7728 272d 6368 6563 6b53 le->new('-checkS │ │ │ │ +00003e80: 756d 4669 6c65 2720 3d3e 0a09 0909 0920 umFile' =>..... │ │ │ │ +00003e90: 2020 2020 2224 6469 722f 2e6d 6435 4368 "$dir/.md5Ch │ │ │ │ +00003ea0: 6563 6b53 756d 7322 2c0a 0909 0909 2020 eckSums",..... │ │ │ │ +00003eb0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ │ +00003ec0: 7072 4c6f 6729 3b0a 0a23 2020 2020 6d79 prLog);..# my │ │ │ │ +00003ed0: 2024 6d65 7461 203d 2024 7263 7366 2d3e $meta = $rcsf-> │ │ │ │ +00003ee0: 6765 744d 6574 6156 616c 4669 656c 6428 getMetaValField( │ │ │ │ +00003ef0: 293b 0a0a 2320 2020 206d 7920 2824 636f );..# my ($co │ │ │ │ +00003f00: 6d70 722c 2040 636f 6d70 7250 6172 2920 mpr, @comprPar) │ │ │ │ +00003f10: 3d20 407b 2424 6d65 7461 7b27 636f 6d70 = @{$$meta{'comp │ │ │ │ +00003f20: 7265 7373 277d 7d3b 0a23 2020 2020 6d79 ress'}};.# my │ │ │ │ +00003f30: 2024 636f 6d70 7250 6f73 7466 6978 203d $comprPostfix = │ │ │ │ +00003f40: 2028 2424 6d65 7461 7b27 706f 7374 6669 ($$meta{'postfi │ │ │ │ +00003f50: 7827 7d29 2d3e 5b30 5d3b 0a20 2020 206d x'})->[0];. m │ │ │ │ +00003f60: 7920 2824 636f 6d70 722c 2040 636f 6d70 y ($compr, @comp │ │ │ │ +00003f70: 7250 6172 2920 3d20 407b 2472 6373 662d rPar) = @{$rcsf- │ │ │ │ +00003f80: 3e67 6574 496e 666f 5769 7468 5061 7228 >getInfoWithPar( │ │ │ │ +00003f90: 2763 6f6d 7072 6573 7327 297d 3b0a 2020 'compress')};. │ │ │ │ +00003fa0: 2020 6d79 2024 636f 6d70 7250 6f73 7466 my $comprPostf │ │ │ │ +00003fb0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI │ │ │ │ +00003fc0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post │ │ │ │ +00003fd0: 6669 7827 293b 0a23 7072 696e 7420 2263 fix');.#print "c │ │ │ │ +00003fe0: 6f6d 7072 203d 203c 2463 6f6d 7072 3e2c ompr = <$compr>, │ │ │ │ +00003ff0: 2063 6f6d 7072 5061 7220 3d20 3c40 636f comprPar = <@co │ │ │ │ +00004000: 6d70 7250 6172 3e5c 6e22 3b0a 0a20 2020 mprPar>\n";.. │ │ │ │ +00004010: 2023 0a20 2020 2023 2073 6574 206c 696e #. # set lin │ │ │ │ +00004020: 6b73 2061 6e64 2063 6f6d 7072 6573 730a ks and compress. │ │ │ │ +00004030: 2020 2020 230a 2020 2020 6d79 2028 256d #. my (%m │ │ │ │ +00004040: 6435 546f 4669 6c65 293b 2020 2020 2020 d5ToFile); │ │ │ │ +00004050: 2320 7374 6f72 6520 6d64 3573 756d 7320 # store md5sums │ │ │ │ +00004060: 6f66 2063 6f70 6965 6420 6669 6c65 7320 of copied files │ │ │ │ +00004070: 6265 6361 7573 650a 2020 2020 2020 2020 because. │ │ │ │ +00004080: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00004090: 2020 2320 6e75 6d62 6572 206f 6620 6c69 # number of li │ │ │ │ +000040a0: 6e6b 7320 6973 2065 7868 6175 7374 6564 nks is exhausted │ │ │ │ +000040b0: 0a20 2020 206d 7920 2466 203d 2022 2464 . my $f = "$d │ │ │ │ +000040c0: 6972 2f2e 7374 6f72 6542 6163 6b75 704c ir/.storeBackupL │ │ │ │ +000040d0: 696e 6b73 2f6c 696e 6b46 696c 652e 627a inks/linkFile.bz │ │ │ │ +000040e0: 3222 3b0a 0a20 2020 2072 6574 7572 6e20 2";.. return │ │ │ │ +000040f0: 756e 6c65 7373 202d 6520 2466 3b0a 0a20 unless -e $f;.. │ │ │ │ +00004100: 2020 2023 0a20 2020 2023 0a20 2020 2023 #. #. # │ │ │ │ +00004110: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00004120: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00004130: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00004140: 205b 2270 6861 7365 2031 3a20 6d6b 6469 ["phase 1: mkdi │ │ │ │ +00004150: 722c 2073 796d 6c69 6e6b 2061 6e64 2063 r, symlink and c │ │ │ │ +00004160: 6f6d 7072 6573 7369 6e67 2066 696c 6573 ompressing files │ │ │ │ +00004170: 225d 293b 0a0a 2020 2020 6d79 2024 6c3b "]);.. my $l; │ │ │ │ +00004180: 0a20 2020 206d 7920 2470 6172 466f 726b . my $parFork │ │ │ │ +00004190: 5072 6f63 203d 2070 6172 616c 6c65 6c46 Proc = parallelF │ │ │ │ +000041a0: 6f72 6b2d 3e6e 6577 2827 2d6d 6178 5061 ork->new('-maxPa │ │ │ │ +000041b0: 7261 6c6c 656c 2720 3d3e 2024 6e6f 436f rallel' => $noCo │ │ │ │ +000041c0: 6d70 7265 7373 2c0a 0909 0909 0927 2d70 mpress,......'-p │ │ │ │ +000041d0: 724c 6f67 2720 3d3e 2024 7072 4c6f 672c rLog' => $prLog, │ │ │ │ +000041e0: 0a09 0909 0909 272d 6669 7273 7446 6173 ......'-firstFas │ │ │ │ +000041f0: 7427 203d 3e20 312c 0a09 0909 0909 272d t' => 1,......'- │ │ │ │ +00004200: 6d61 7857 6169 7454 696d 6527 203d 3e20 maxWaitTime' => │ │ │ │ +00004210: 2e32 2c0a 0909 0909 0927 2d6e 6f4f 6657 .2,......'-noOfW │ │ │ │ +00004220: 6169 7453 7465 7073 2720 3d3e 2031 3030 aitSteps' => 100 │ │ │ │ +00004230: 293b 0a0a 2020 2020 6d79 2024 6e6f 436f );.. my $noCo │ │ │ │ +00004240: 6d70 7265 7373 6564 4669 6c65 7320 3d20 mpressedFiles = │ │ │ │ +00004250: 303b 0a20 2020 206d 7920 246e 6f4d 6b64 0;. my $noMkd │ │ │ │ +00004260: 6972 203d 2030 3b0a 2020 2020 6d79 2024 ir = 0;. my $ │ │ │ │ +00004270: 6e6f 5379 6d4c 696e 6b20 3d20 303b 0a20 noSymLink = 0;. │ │ │ │ +00004280: 2020 206d 7920 2824 6f6c 6453 697a 652c my ($oldSize, │ │ │ │ +00004290: 2024 6e65 7753 697a 6529 203d 2028 302c $newSize) = (0, │ │ │ │ +000042a0: 2030 293b 0a20 2020 206d 7920 246c 696e 0);. my $lin │ │ │ │ +000042b0: 6b46 696c 6520 3d20 7069 7065 4672 6f6d kFile = pipeFrom │ │ │ │ +000042c0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec │ │ │ │ +000042d0: 2720 3d3e 2027 627a 6970 3227 2c0a 0909 ' => 'bzip2',... │ │ │ │ +000042e0: 0909 2020 2020 2027 2d70 6172 616d 2720 .. '-param' │ │ │ │ +000042f0: 3d3e 205b 272d 6427 5d2c 0a09 0909 0920 => ['-d'],..... │ │ │ │ +00004300: 2020 2020 272d 7374 6469 6e27 203d 3e20 '-stdin' => │ │ │ │ +00004310: 2466 2c0a 0909 0909 2020 2020 2027 2d6f $f,..... '-o │ │ │ │ +00004320: 7574 5261 6e64 6f6d 2720 3d3e 2027 2f74 utRandom' => '/t │ │ │ │ +00004330: 6d70 2f73 7462 7550 6970 6546 726f 6d31 mp/stbuPipeFrom1 │ │ │ │ +00004340: 302d 272c 0a09 0909 0920 2020 2020 272d 0-',..... '- │ │ │ │ +00004350: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ │ +00004360: 293b 0a0a 2020 2020 7768 696c 6520 2824 );.. while ($ │ │ │ │ +00004370: 6c20 3d20 246c 696e 6b46 696c 652d 3e72 l = $linkFile->r │ │ │ │ +00004380: 6561 6428 2929 0a20 2020 207b 0a09 6e65 ead()). {..ne │ │ │ │ +00004390: 7874 2069 6620 246c 203d 7e20 2f5e 232f xt if $l =~ /^#/ │ │ │ │ +000043a0: 3b0a 0963 686f 6d70 2024 6c3b 0a09 6d79 ;..chomp $l;..my │ │ │ │ +000043b0: 2028 2477 6861 742c 2024 6d64 3529 203d ($what, $md5) = │ │ │ │ +000043c0: 2073 706c 6974 282f 5c73 2b2f 2c20 246c split(/\s+/, $l │ │ │ │ +000043d0: 2c20 3229 3b0a 0a09 6966 2028 2477 6861 , 2);...if ($wha │ │ │ │ +000043e0: 7420 6571 2027 6469 7227 290a 097b 0a09 t eq 'dir')..{.. │ │ │ │ +000043f0: 2020 2020 246d 6435 203d 7e20 732f 5c30 $md5 =~ s/\0 │ │ │ │ +00004400: 2f5c 6e2f 6f67 3b20 2020 2023 206e 616d /\n/og; # nam │ │ │ │ +00004410: 6520 6f66 2064 6972 6563 746f 7279 210a e of directory!. │ │ │ │ +00004420: 0920 2020 2075 6e6c 6573 7320 282d 6420 . unless (-d │ │ │ │ +00004430: 2224 6469 722f 246d 6435 2229 0a09 2020 "$dir/$md5").. │ │ │ │ +00004440: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ │ +00004450: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00004460: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ │ +00004470: 7472 2720 3d3e 0a09 0909 2020 2020 2020 tr' =>.... │ │ │ │ +00004480: 5b22 6361 6e6e 6f74 2063 7265 6174 6520 ["cannot create │ │ │ │ +00004490: 6469 7265 6374 6f72 7920 3c24 6469 722f directory <$dir/ │ │ │ │ +000044a0: 246d 6435 3e22 5d2c 0a09 0909 2020 2020 $md5>"],.... │ │ │ │ +000044b0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ │ +000044c0: 0909 2020 2020 756e 6c65 7373 206d 6b64 .. unless mkd │ │ │ │ +000044d0: 6972 2022 2464 6972 2f24 6d64 3522 2c20 ir "$dir/$md5", │ │ │ │ +000044e0: 3037 3030 3b0a 0920 2020 207d 0a09 2020 0700;.. }.. │ │ │ │ +000044f0: 2020 246e 6f4d 6b64 6972 2b2b 3b0a 097d $noMkdir++;..} │ │ │ │ +00004500: 0a09 656c 7369 6620 2824 7768 6174 2065 ..elsif ($what e │ │ │ │ +00004510: 7120 276c 696e 6b27 206f 7220 2477 6861 q 'link' or $wha │ │ │ │ +00004520: 7420 6571 2027 6c69 6e6b 626c 6f63 6b27 t eq 'linkblock' │ │ │ │ +00004530: 206f 720a 0920 2020 2024 7768 6174 2065 or.. $what e │ │ │ │ +00004540: 7120 276c 696e 6b53 796d 6c69 6e6b 2729 q 'linkSymlink') │ │ │ │ +00004550: 0a09 7b0a 0920 2020 206d 7920 2465 7869 ..{.. my $exi │ │ │ │ +00004560: 7374 696e 6746 696c 6520 3d20 246c 696e stingFile = $lin │ │ │ │ +00004570: 6b46 696c 652d 3e72 6561 6428 293b 0a09 kFile->read();.. │ │ │ │ +00004580: 2020 2020 2465 7869 7374 696e 6746 696c $existingFil │ │ │ │ +00004590: 6520 3d20 2224 6469 722f 2465 7869 7374 e = "$dir/$exist │ │ │ │ +000045a0: 696e 6746 696c 6522 3b0a 0920 2020 2024 ingFile";.. $ │ │ │ │ +000045b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +000045c0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +000045d0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +000045e0: 205b 2266 696c 6520 3c24 663e 2065 6e64 ["file <$f> end │ │ │ │ +000045f0: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at │ │ │ │ +00004600: 6c69 6e65 2024 2e22 5d2c 0a09 0909 2020 line $."],.... │ │ │ │ +00004610: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)... │ │ │ │ +00004620: 756e 6c65 7373 2024 6578 6973 7469 6e67 unless $existing │ │ │ │ +00004630: 4669 6c65 3b0a 0a09 2020 2020 6d79 2024 File;... my $ │ │ │ │ +00004640: 6e65 774c 696e 6b20 3d20 246c 696e 6b46 newLink = $linkF │ │ │ │ +00004650: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. │ │ │ │ +00004660: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00004670: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ │ +00004680: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ │ +00004690: 0909 2020 5b22 6669 6c65 203c 2466 3e20 .. ["file <$f> │ │ │ │ +000046a0: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected │ │ │ │ +000046b0: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $."],... │ │ │ │ +000046c0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ │ +000046d0: 0a09 0975 6e6c 6573 7320 246e 6577 4c69 ...unless $newLi │ │ │ │ +000046e0: 6e6b 3b0a 097d 200a 0965 6c73 6966 2028 nk;..} ..elsif ( │ │ │ │ +000046f0: 2477 6861 7420 6571 2027 7379 6d6c 696e $what eq 'symlin │ │ │ │ +00004700: 6b27 290a 097b 0a09 2020 2020 246d 6435 k')..{.. $md5 │ │ │ │ +00004710: 203d 7e20 732f 5c30 2f5c 6e2f 6f67 3b20 =~ s/\0/\n/og; │ │ │ │ +00004720: 2020 2020 2320 6669 6c65 2028 6e6f 7420 # file (not │ │ │ │ +00004730: 6d64 3573 756d 290a 0920 2020 2024 6d64 md5sum).. $md │ │ │ │ +00004740: 3520 3d20 2224 6469 722f 246d 6435 223b 5 = "$dir/$md5"; │ │ │ │ +00004750: 0a09 2020 2020 6d79 2024 7461 7267 6574 .. my $target │ │ │ │ +00004760: 203d 2024 6c69 6e6b 4669 6c65 2d3e 7265 = $linkFile->re │ │ │ │ +00004770: 6164 2829 3b0a 0920 2020 2024 7072 4c6f ad();.. $prLo │ │ │ │ +00004780: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ │ +00004790: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ │ +000047a0: 7374 7227 203d 3e0a 0909 0920 205b 2266 str' =>.... ["f │ │ │ │ +000047b0: 696c 6520 3c24 663e 2065 6e64 7320 756e ile <$f> ends un │ │ │ │ +000047c0: 6578 7065 6374 6564 2061 7420 6c69 6e65 expected at line │ │ │ │ +000047d0: 2024 2e22 5d2c 0a09 0909 2020 272d 6578 $."],.... '-ex │ │ │ │ +000047e0: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle │ │ │ │ +000047f0: 7373 2024 7461 7267 6574 3b0a 0920 2020 ss $target;.. │ │ │ │ +00004800: 2063 686f 6d70 2024 7461 7267 6574 3b0a chomp $target;. │ │ │ │ +00004810: 0920 2020 2024 7461 7267 6574 203d 7e20 . $target =~ │ │ │ │ +00004820: 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 2020 s/\0/\n/og;.. │ │ │ │ +00004830: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00004840: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00004850: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ │ +00004860: 0920 205b 2263 616e 6e6f 7420 6372 6561 . ["cannot crea │ │ │ │ +00004870: 7465 2073 796d 6c69 6e6b 2066 726f 6d20 te symlink from │ │ │ │ +00004880: 3c24 6d64 353e 202d 3e20 3c24 7461 7267 <$md5> -> <$targ │ │ │ │ +00004890: 6574 3e22 5d29 0a09 0975 6e6c 6573 7320 et>"])...unless │ │ │ │ +000048a0: 7379 6d6c 696e 6b20 2474 6172 6765 742c symlink $target, │ │ │ │ +000048b0: 2024 6d64 353b 0a09 2020 2020 246e 6f53 $md5;.. $noS │ │ │ │ +000048c0: 796d 4c69 6e6b 2b2b 3b0a 097d 0a09 656c ymLink++;..}..el │ │ │ │ +000048d0: 7369 6620 2824 7768 6174 2065 7120 2763 sif ($what eq 'c │ │ │ │ +000048e0: 6f6d 7072 6573 7327 290a 097b 0a09 2020 ompress')..{.. │ │ │ │ +000048f0: 2020 6d79 2024 6669 6c65 203d 2024 6c69 my $file = $li │ │ │ │ +00004900: 6e6b 4669 6c65 2d3e 7265 6164 2829 3b0a nkFile->read();. │ │ │ │ +00004910: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00004920: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00004930: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ │ +00004940: 3e0a 0909 0920 205b 2266 696c 6520 3c24 >.... ["file <$ │ │ │ │ +00004950: 663e 2065 6e64 7320 756e 6578 7065 6374 f> ends unexpect │ │ │ │ +00004960: 6564 2061 7420 6c69 6e65 2024 2e22 5d2c ed at line $."], │ │ │ │ +00004970: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' => │ │ │ │ +00004980: 2031 290a 0909 756e 6c65 7373 2024 6669 1)...unless $fi │ │ │ │ +00004990: 6c65 3b0a 0920 2020 2063 686f 6d70 2024 le;.. chomp $ │ │ │ │ +000049a0: 6669 6c65 3b0a 0a09 2020 2020 2466 696c file;... $fil │ │ │ │ +000049b0: 6520 3d7e 2073 2f5c 302f 5c6e 2f6f 673b e =~ s/\0/\n/og; │ │ │ │ +000049c0: 0a09 2020 2020 2466 696c 6520 3d20 2224 .. $file = "$ │ │ │ │ +000049d0: 6469 722f 2466 696c 6522 3b20 2020 2020 dir/$file"; │ │ │ │ +000049e0: 2020 2023 2066 696c 6520 746f 2063 6f6d # file to com │ │ │ │ +000049f0: 7072 6573 730a 0920 2020 206d 7920 2473 press.. my $s │ │ │ │ +00004a00: 7420 3d20 2873 7461 7428 2466 696c 6529 t = (stat($file) │ │ │ │ +00004a10: 295b 375d 3b0a 0920 2020 2024 6f6c 6453 )[7];.. $oldS │ │ │ │ +00004a20: 697a 6520 2b3d 2024 7374 2069 6620 6465 ize += $st if de │ │ │ │ +00004a30: 6669 6e65 6420 2473 743b 0a09 2020 2020 fined $st;.. │ │ │ │ +00004a40: 6d79 2028 246f 6c64 2c20 246e 6577 2920 my ($old, $new) │ │ │ │ +00004a50: 3d0a 0909 2470 6172 466f 726b 5072 6f63 =...$parForkProc │ │ │ │ +00004a60: 2d3e 6164 645f 626c 6f63 6b28 272d 6578 ->add_block('-ex │ │ │ │ +00004a70: 6563 2720 3d3e 2024 636f 6d70 722c 0a09 ec' => $compr,.. │ │ │ │ +00004a80: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => │ │ │ │ +00004a90: 5c40 636f 6d70 7250 6172 2c0a 0909 0909 \@comprPar,..... │ │ │ │ +00004aa0: 0927 2d6f 7574 5261 6e64 6f6d 2720 3d3e .'-outRandom' => │ │ │ │ +00004ab0: 2027 2f74 6d70 2f62 7a69 7032 2d27 2c0a '/tmp/bzip2-',. │ │ │ │ +00004ac0: 0909 0909 0927 2d73 7464 696e 2720 3d3e .....'-stdin' => │ │ │ │ +00004ad0: 2024 6669 6c65 2c0a 0909 0909 0927 2d73 $file,......'-s │ │ │ │ +00004ae0: 7464 6f75 7427 203d 3e20 2224 6669 6c65 tdout' => "$file │ │ │ │ +00004af0: 2463 6f6d 7072 506f 7374 6669 7822 2c0a $comprPostfix",. │ │ │ │ +00004b00: 0909 0909 0927 2d64 656c 5374 646f 7574 .....'-delStdout │ │ │ │ +00004b10: 2720 3d3e 2027 6e6f 272c 0a09 0909 0909 ' => 'no',...... │ │ │ │ +00004b20: 272d 696e 666f 2720 3d3e 2024 6669 6c65 '-info' => $file │ │ │ │ +00004b30: 293b 0a09 2020 2020 6966 2028 246f 6c64 );.. if ($old │ │ │ │ +00004b40: 290a 0920 2020 207b 0a09 0924 6e6f 436f ).. {...$noCo │ │ │ │ +00004b50: 6d70 7265 7373 6564 4669 6c65 732b 2b3b mpressedFiles++; │ │ │ │ +00004b60: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ │ +00004b70: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S', │ │ │ │ +00004b80: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ │ +00004b90: 203d 3e20 5b22 636f 6d70 7265 7373 6564 => ["compressed │ │ │ │ +00004ba0: 2024 6e6f 436f 6d70 7265 7373 6564 4669 $noCompressedFi │ │ │ │ +00004bb0: 6c65 7320 6669 6c65 7322 5d29 0a09 0920 les files"])... │ │ │ │ +00004bc0: 2020 2069 6620 2824 7072 6f67 7265 7373 if ($progress │ │ │ │ +00004bd0: 5265 706f 7274 2061 6e64 0a09 0909 246e Report and....$n │ │ │ │ +00004be0: 6f43 6f6d 7072 6573 7365 6446 696c 6573 oCompressedFiles │ │ │ │ +00004bf0: 2025 2024 7072 6f67 7265 7373 5265 706f % $progressRepo │ │ │ │ +00004c00: 7274 203d 3d20 3029 3b0a 0a09 096d 7920 rt == 0);....my │ │ │ │ +00004c10: 2466 203d 2024 6f6c 642d 3e67 6574 2827 $f = $old->get(' │ │ │ │ +00004c20: 2d77 6861 7427 203d 3e20 2769 6e66 6f27 -what' => 'info' │ │ │ │ +00004c30: 293b 0a09 0926 3a3a 7761 6974 466f 7246 );...&::waitForF │ │ │ │ +00004c40: 696c 6528 2224 6624 636f 6d70 7250 6f73 ile("$f$comprPos │ │ │ │ +00004c50: 7466 6978 2229 3b0a 0909 246e 6577 5369 tfix");...$newSi │ │ │ │ +00004c60: 7a65 202b 3d20 2873 7461 7428 2224 6624 ze += (stat("$f$ │ │ │ │ +00004c70: 636f 6d70 7250 6f73 7466 6978 2229 295b comprPostfix"))[ │ │ │ │ +00004c80: 375d 3b0a 0909 6d79 2024 6f75 7420 3d20 7];...my $out = │ │ │ │ +00004c90: 246f 6c64 2d3e 6765 7453 5444 4552 5228 $old->getSTDERR( │ │ │ │ +00004ca0: 293b 0a09 0924 7072 4c6f 672d 3e70 7269 );...$prLog->pri │ │ │ │ +00004cb0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00004cc0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ │ +00004cd0: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => ["STDERR o │ │ │ │ +00004ce0: 6620 3c24 636f 6d70 7220 4063 6f6d 7072 f <$compr @compr │ │ │ │ +00004cf0: 5061 7220 2220 2e0a 0909 0909 0920 223c Par " ....... "< │ │ │ │ +00004d00: 2466 203e 2466 2463 6f6d 7072 506f 7374 $f >$f$comprPost │ │ │ │ +00004d10: 6669 783e 3a22 2c20 4024 6f75 745d 290a fix>:", @$out]). │ │ │ │ +00004d20: 0909 2020 2020 6966 2028 4024 6f75 7420 .. if (@$out │ │ │ │ +00004d30: 3e20 3029 3b0a 0909 2470 724c 6f67 2d3e > 0);...$prLog-> │ │ │ │ +00004d40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00004d50: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... ' │ │ │ │ +00004d60: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => ["canno │ │ │ │ +00004d70: 7420 6465 6c65 7465 203c 2466 3e22 5d29 t delete <$f>"]) │ │ │ │ +00004d80: 0a09 0920 2020 2069 6620 2875 6e6c 696e ... if (unlin │ │ │ │ +00004d90: 6b20 2466 2920 213d 2031 3b0a 0920 2020 k $f) != 1;.. │ │ │ │ +00004da0: 207d 0a09 7d0a 0965 6c73 650a 097b 0a09 }..}..else..{.. │ │ │ │ +00004db0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00004dc0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00004dd0: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ │ +00004de0: 205b 2269 6c6c 6567 616c 206b 6579 776f ["illegal keywo │ │ │ │ +00004df0: 7264 203c 2477 6861 743e 2022 202e 0a09 rd <$what> " ... │ │ │ │ +00004e00: 0909 0920 2020 2020 2261 7420 6c69 6e65 ... "at line │ │ │ │ +00004e10: 2024 2e20 696e 2066 696c 6520 3c24 663e $. in file <$f> │ │ │ │ +00004e20: 3a22 2c0a 0909 0909 2020 2020 2022 5c74 :",..... "\t │ │ │ │ +00004e30: 3c24 6c3e 225d 2c0a 0909 0920 2027 2d65 <$l>"],.... '-e │ │ │ │ +00004e40: 7869 7427 203d 3e20 3129 3b0a 097d 0a20 xit' => 1);..}. │ │ │ │ +00004e50: 2020 207d 0a20 2020 2024 6c69 6e6b 4669 }. $linkFi │ │ │ │ +00004e60: 6c65 2d3e 7761 6974 2829 3b0a 2020 2020 le->wait();. │ │ │ │ +00004e70: 6d79 2024 6f75 7420 3d20 246c 696e 6b46 my $out = $linkF │ │ │ │ +00004e80: 696c 652d 3e67 6574 5354 4445 5252 2829 ile->getSTDERR() │ │ │ │ +00004e90: 3b0a 2020 2020 6966 2028 4024 6f75 7429 ;. if (@$out) │ │ │ │ +00004ea0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ │ +00004eb0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00004ec0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +00004ed0: 7374 7227 203d 3e20 5b22 7265 6164 696e str' => ["readin │ │ │ │ +00004ee0: 6720 6c69 6e6b 4669 6c65 2066 696c 6520 g linkFile file │ │ │ │ +00004ef0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:" │ │ │ │ +00004f00: 2c0a 0909 0909 2040 246f 7574 5d29 3b0a ,..... @$out]);. │ │ │ │ +00004f10: 0965 7869 7420 313b 0a20 2020 207d 0a20 .exit 1;. }. │ │ │ │ +00004f20: 2020 2024 6c69 6e6b 4669 6c65 2d3e 636c $linkFile->cl │ │ │ │ +00004f30: 6f73 6528 293b 0a20 2020 206d 7920 246f ose();. my $o │ │ │ │ +00004f40: 6c64 3b0a 2020 2020 7768 696c 6520 2824 ld;. while ($ │ │ │ │ +00004f50: 6f6c 6420 3d20 2470 6172 466f 726b 5072 old = $parForkPr │ │ │ │ +00004f60: 6f63 2d3e 7761 6974 466f 7241 6c6c 4a6f oc->waitForAllJo │ │ │ │ +00004f70: 6273 2829 290a 2020 2020 7b0a 0924 6e6f bs()). {..$no │ │ │ │ +00004f80: 436f 6d70 7265 7373 6564 4669 6c65 732b CompressedFiles+ │ │ │ │ +00004f90: 2b3b 0a09 263a 3a77 6169 7446 6f72 4669 +;..&::waitForFi │ │ │ │ +00004fa0: 6c65 2822 2466 2463 6f6d 7072 506f 7374 le("$f$comprPost │ │ │ │ +00004fb0: 6669 7822 293b 0a20 096d 7920 2466 203d fix");. .my $f = │ │ │ │ +00004fc0: 2024 6f6c 642d 3e67 6574 2827 2d77 6861 $old->get('-wha │ │ │ │ +00004fd0: 7427 203d 3e20 2769 6e66 6f27 293b 0a09 t' => 'info');.. │ │ │ │ +00004fe0: 246e 6577 5369 7a65 202b 3d20 2873 7461 $newSize += (sta │ │ │ │ +00004ff0: 7428 2224 6624 636f 6d70 7250 6f73 7466 t("$f$comprPostf │ │ │ │ +00005000: 6978 2229 295b 375d 3b0a 096d 7920 246f ix"))[7];..my $o │ │ │ │ +00005010: 7574 203d 2024 6f6c 642d 3e67 6574 5354 ut = $old->getST │ │ │ │ +00005020: 4445 5252 2829 3b0a 0924 7072 4c6f 672d DERR();..$prLog- │ │ │ │ +00005030: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00005040: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ │ +00005050: 2d73 7472 2720 3d3e 205b 2253 5444 4552 -str' => ["STDER │ │ │ │ +00005060: 5220 6f66 203c 2463 6f6d 7072 2040 636f R of <$compr @co │ │ │ │ +00005070: 6d70 7250 6172 2022 202e 0a09 0909 0920 mprPar " ...... │ │ │ │ +00005080: 223c 2466 203e 2466 2463 6f6d 7072 506f "<$f >$f$comprPo │ │ │ │ +00005090: 7374 6669 783e 3a22 2c20 4024 6f75 745d stfix>:", @$out] │ │ │ │ +000050a0: 290a 0920 2020 2069 6620 2840 246f 7574 ).. if (@$out │ │ │ │ +000050b0: 203e 2030 293b 0a09 2470 724c 6f67 2d3e > 0);..$prLog-> │ │ │ │ +000050c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +000050d0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ │ +000050e0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ │ +000050f0: 2064 656c 6574 6520 3c24 663e 225d 290a delete <$f>"]). │ │ │ │ +00005100: 0920 2020 2069 6620 2875 6e6c 696e 6b20 . if (unlink │ │ │ │ +00005110: 2466 2920 213d 2031 3b0a 2020 2020 7d0a $f) != 1;. }. │ │ │ │ +00005120: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00005130: 6e74 2827 2d6b 696e 6427 203d 3e20 2753 nt('-kind' => 'S │ │ │ │ +00005140: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ │ +00005150: 205b 2263 7265 6174 6564 2024 6e6f 4d6b ["created $noMk │ │ │ │ +00005160: 6469 7220 6469 7265 6374 6f72 6965 7322 dir directories" │ │ │ │ +00005170: 2c0a 0909 0920 2020 2020 2263 7265 6174 ,.... "creat │ │ │ │ +00005180: 6564 2024 6e6f 5379 6d4c 696e 6b20 7379 ed $noSymLink sy │ │ │ │ +00005190: 6d62 6f6c 6963 206c 696e 6b73 222c 0a09 mbolic links",.. │ │ │ │ +000051a0: 0909 2020 2020 2022 636f 6d70 7265 7373 .. "compress │ │ │ │ +000051b0: 6564 2024 6e6f 436f 6d70 7265 7373 6564 ed $noCompressed │ │ │ │ +000051c0: 4669 6c65 7320 6669 6c65 7322 2c0a 0909 Files files",... │ │ │ │ +000051d0: 0920 2020 2020 2275 7365 6420 2220 2e20 . "used " . │ │ │ │ +000051e0: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl │ │ │ │ +000051f0: 6528 246e 6577 5369 7a65 2929 5b30 5d20 e($newSize))[0] │ │ │ │ +00005200: 2e0a 0909 0920 2020 2020 2220 696e 7374 ..... " inst │ │ │ │ +00005210: 6561 6420 6f66 2022 202e 2028 263a 3a68 ead of " . (&::h │ │ │ │ +00005220: 756d 616e 5265 6164 6162 6c65 2824 6f6c umanReadable($ol │ │ │ │ +00005230: 6453 697a 6529 295b 305d 202e 0a09 0909 dSize))[0] ..... │ │ │ │ +00005240: 2020 2020 2022 2028 246e 6577 5369 7a65 " ($newSize │ │ │ │ +00005250: 203c 2d20 246f 6c64 5369 7a65 2922 5d29 <- $oldSize)"]) │ │ │ │ +00005260: 3b0a 0a20 2020 2023 0a20 2020 2023 2073 ;.. #. # s │ │ │ │ +00005270: 6574 2068 6172 6420 6c69 6e6b 730a 2020 et hard links. │ │ │ │ +00005280: 2020 230a 2020 2020 2470 724c 6f67 2d3e #. $prLog-> │ │ │ │ +00005290: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +000052a0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str' │ │ │ │ +000052b0: 203d 3e20 5b22 7068 6173 6520 323a 2073 => ["phase 2: s │ │ │ │ +000052c0: 6574 7469 6e67 2068 6172 6420 6c69 6e6b etting hard link │ │ │ │ +000052d0: 7322 5d29 3b0a 0a20 2020 206d 7920 2477 s"]);.. my $w │ │ │ │ +000052e0: 6974 6842 6c6f 636b 6564 4669 6c65 7320 ithBlockedFiles │ │ │ │ +000052f0: 3d20 303b 0a20 2020 206d 7920 246e 6f48 = 0;. my $noH │ │ │ │ +00005300: 6172 644c 696e 6b73 203d 2030 3b0a 2020 ardLinks = 0;. │ │ │ │ +00005310: 2020 6d79 2024 6e6f 436f 7069 6564 4669 my $noCopiedFi │ │ │ │ +00005320: 6c65 7320 3d20 303b 0a20 2020 206d 7920 les = 0;. my │ │ │ │ +00005330: 2470 7220 3d20 2470 726f 6772 6573 7352 $pr = $progressR │ │ │ │ +00005340: 6570 6f72 7420 2a20 3230 303b 0a20 2020 eport * 200;. │ │ │ │ +00005350: 2024 6c69 6e6b 4669 6c65 203d 2070 6970 $linkFile = pip │ │ │ │ +00005360: 6546 726f 6d46 6f72 6b2d 3e6e 6577 2827 eFromFork->new(' │ │ │ │ +00005370: 2d65 7865 6327 203d 3e20 2762 7a69 7032 -exec' => 'bzip2 │ │ │ │ +00005380: 272c 0a09 0909 0920 2027 2d70 6172 616d ',..... '-param │ │ │ │ +00005390: 2720 3d3e 205b 272d 6427 5d2c 0a09 0909 ' => ['-d'],.... │ │ │ │ +000053a0: 0920 2027 2d73 7464 696e 2720 3d3e 2024 . '-stdin' => $ │ │ │ │ +000053b0: 662c 0a09 0909 0920 2027 2d6f 7574 5261 f,..... '-outRa │ │ │ │ +000053c0: 6e64 6f6d 2720 3d3e 2027 2f74 6d70 2f73 ndom' => '/tmp/s │ │ │ │ +000053d0: 7462 7550 6970 6546 726f 6d31 312d 272c tbuPipeFrom11-', │ │ │ │ +000053e0: 0a09 0909 0920 2027 2d70 724c 6f67 2720 ..... '-prLog' │ │ │ │ +000053f0: 3d3e 2024 7072 4c6f 6729 3b0a 0a20 2020 => $prLog);.. │ │ │ │ +00005400: 206c 6f63 616c 202a 424c 4f43 4b4d 4435 local *BLOCKMD5 │ │ │ │ +00005410: 3b0a 2020 2020 6966 2028 2d65 2022 2464 ;. if (-e "$d │ │ │ │ +00005420: 6972 2f2e 6d64 3542 6c6f 636b 4368 6563 ir/.md5BlockChec │ │ │ │ +00005430: 6b53 756d 7322 290a 2020 2020 7b0a 0924 kSums"). {..$ │ │ │ │ +00005440: 7769 7468 426c 6f63 6b65 6446 696c 6573 withBlockedFiles │ │ │ │ +00005450: 203d 2031 3b0a 096f 7065 6e28 424c 4f43 = 1;..open(BLOC │ │ │ │ +00005460: 4b4d 4435 2c20 223e 3e22 2c20 2224 6469 KMD5, ">>", "$di │ │ │ │ +00005470: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck │ │ │ │ +00005480: 5375 6d73 2229 206f 720a 0920 2020 2024 Sums") or.. $ │ │ │ │ +00005490: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +000054a0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +000054b0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +000054c0: 205b 2263 616e 6e6f 7420 6170 7065 6e64 ["cannot append │ │ │ │ +000054d0: 2074 6f20 3c24 6469 722f 2e6d 6435 426c to <$dir/.md5Bl │ │ │ │ +000054e0: 6f63 6b43 6865 636b 5375 6d73 3e22 5d2c ockCheckSums>"], │ │ │ │ +000054f0: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' => │ │ │ │ +00005500: 2031 293b 0a20 2020 207d 0a0a 2020 2020 1);. }.. │ │ │ │ +00005510: 7768 696c 6520 2824 6c20 3d20 246c 696e while ($l = $lin │ │ │ │ +00005520: 6b46 696c 652d 3e72 6561 6428 2929 0a20 kFile->read()). │ │ │ │ +00005530: 2020 207b 0a09 6e65 7874 2069 6620 246c {..next if $l │ │ │ │ +00005540: 203d 7e20 2f5e 232f 3b0a 0963 686f 6d70 =~ /^#/;..chomp │ │ │ │ +00005550: 2024 6c3b 0a09 6d79 2028 2477 6861 742c $l;..my ($what, │ │ │ │ +00005560: 2024 6d64 3529 203d 2073 706c 6974 282f $md5) = split(/ │ │ │ │ +00005570: 5c73 2b2f 2c20 246c 2c20 3229 3b0a 096d \s+/, $l, 2);..m │ │ │ │ +00005580: 7920 246c 696e 654e 7220 3d20 246c 696e y $lineNr = $lin │ │ │ │ +00005590: 6b46 696c 652d 3e67 6574 2827 2d77 6861 kFile->get('-wha │ │ │ │ +000055a0: 7427 203d 3e20 276c 696e 654e 7227 293b t' => 'lineNr'); │ │ │ │ +000055b0: 0a09 6966 2028 2477 6861 7420 6571 2027 ..if ($what eq ' │ │ │ │ +000055c0: 6c69 6e6b 2729 0a09 7b0a 0920 2020 206d link')..{.. m │ │ │ │ +000055d0: 7920 2465 7869 7374 696e 6746 696c 6520 y $existingFile │ │ │ │ +000055e0: 3d20 246c 696e 6b46 696c 652d 3e72 6561 = $linkFile->rea │ │ │ │ +000055f0: 6428 293b 0a09 2020 2020 2465 7869 7374 d();.. $exist │ │ │ │ +00005600: 696e 6746 696c 6520 3d20 2224 6469 722f ingFile = "$dir/ │ │ │ │ +00005610: 2465 7869 7374 696e 6746 696c 6522 3b0a $existingFile";. │ │ │ │ +00005620: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00005630: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ │ +00005640: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ │ +00005650: 3e20 5b22 6669 6c65 203c 2466 3e20 656e > ["file <$f> en │ │ │ │ +00005660: 6473 2075 6e65 7870 6563 7465 6420 6174 ds unexpected at │ │ │ │ +00005670: 206c 696e 6520 246c 696e 654e 7222 5d2c line $lineNr"], │ │ │ │ +00005680: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' => │ │ │ │ +00005690: 2031 290a 0909 756e 6c65 7373 2024 6578 1)...unless $ex │ │ │ │ +000056a0: 6973 7469 6e67 4669 6c65 3b0a 0920 2020 istingFile;.. │ │ │ │ +000056b0: 2063 686f 6d70 2024 6578 6973 7469 6e67 chomp $existing │ │ │ │ +000056c0: 4669 6c65 3b0a 0920 2020 2024 6578 6973 File;.. $exis │ │ │ │ +000056d0: 7469 6e67 4669 6c65 203d 7e20 732f 5c30 tingFile =~ s/\0 │ │ │ │ +000056e0: 2f5c 6e2f 6f67 3b0a 0a09 2020 2020 6d79 /\n/og;... my │ │ │ │ +000056f0: 2024 6e65 774c 696e 6b20 3d20 246c 696e $newLink = $lin │ │ │ │ +00005700: 6b46 696c 652d 3e72 6561 6428 293b 0a09 kFile->read();.. │ │ │ │ +00005710: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00005720: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00005730: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ │ +00005740: 205b 2266 696c 6520 3c24 663e 2065 6e64 ["file <$f> end │ │ │ │ +00005750: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at │ │ │ │ +00005760: 6c69 6e65 2024 6c69 6e65 4e72 225d 2c0a line $lineNr"],. │ │ │ │ +00005770: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ │ +00005780: 3129 0a09 0975 6e6c 6573 7320 246e 6577 1)...unless $new │ │ │ │ +00005790: 4c69 6e6b 3b0a 0920 2020 2063 686f 6d70 Link;.. chomp │ │ │ │ +000057a0: 2024 6e65 774c 696e 6b3b 0a09 2020 2020 $newLink;.. │ │ │ │ +000057b0: 246e 6577 4c69 6e6b 203d 7e20 732f 5c30 $newLink =~ s/\0 │ │ │ │ +000057c0: 2f5c 6e2f 6f67 3b0a 0920 2020 2024 6e65 /\n/og;.. $ne │ │ │ │ +000057d0: 774c 696e 6b20 3d20 2224 6469 722f 246e wLink = "$dir/$n │ │ │ │ +000057e0: 6577 4c69 6e6b 223b 0a09 2020 2020 2465 ewLink";.. $e │ │ │ │ +000057f0: 7869 7374 696e 6746 696c 6520 3d20 246d xistingFile = $m │ │ │ │ +00005800: 6435 546f 4669 6c65 7b24 6d64 357d 2069 d5ToFile{$md5} i │ │ │ │ +00005810: 6620 6578 6973 7473 2024 6d64 3554 6f46 f exists $md5ToF │ │ │ │ +00005820: 696c 657b 246d 6435 7d3b 0a09 2020 2020 ile{$md5};.. │ │ │ │ +00005830: 6966 2028 6c69 6e6b 2024 6578 6973 7469 if (link $existi │ │ │ │ +00005840: 6e67 4669 6c65 2c20 246e 6577 4c69 6e6b ngFile, $newLink │ │ │ │ +00005850: 290a 0920 2020 207b 0a09 0924 6e6f 4861 ).. {...$noHa │ │ │ │ +00005860: 7264 4c69 6e6b 732b 2b3b 0a09 0924 7072 rdLinks++;...$pr │ │ │ │ +00005870: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00005880: 6427 203d 3e20 2753 272c 0a09 0909 2020 d' => 'S',.... │ │ │ │ +00005890: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +000058a0: 6c69 6e6b 6564 2024 6e6f 4861 7264 4c69 linked $noHardLi │ │ │ │ +000058b0: 6e6b 7320 6669 6c65 7322 5d29 0a09 0909 nks files"]).... │ │ │ │ +000058c0: 6966 2028 2470 7220 616e 6420 246e 6f48 if ($pr and $noH │ │ │ │ +000058d0: 6172 644c 696e 6b73 2025 2024 7072 203d ardLinks % $pr = │ │ │ │ +000058e0: 3d20 3029 3b0a 0920 2020 207d 0a09 2020 = 0);.. }.. │ │ │ │ +000058f0: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {... │ │ │ │ +00005900: 2320 636f 7079 2066 696c 650a 2020 2020 # copy file. │ │ │ │ +00005910: 2020 2020 2020 2020 2020 2020 756e 6c65 unle │ │ │ │ +00005920: 7373 2028 3a3a 636f 7079 4669 6c65 2822 ss (::copyFile(" │ │ │ │ +00005930: 2465 7869 7374 696e 6746 696c 6522 2c20 $existingFile", │ │ │ │ +00005940: 2224 6e65 774c 696e 6b22 2929 0a20 2020 "$newLink")). │ │ │ │ +00005950: 2020 2020 2020 2020 2020 2020 207b 0a20 {. │ │ │ │ +00005960: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00005970: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00005980: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00005990: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +000059a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000059b0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +000059c0: 6f75 6c64 206e 6f74 206c 696e 6b2f 636f ould not link/co │ │ │ │ +000059d0: 7079 2022 202e 0a09 0909 0909 2020 2020 py " ....... │ │ │ │ +000059e0: 2022 2465 7869 7374 696e 6746 696c 6520 "$existingFile │ │ │ │ +000059f0: 246e 6577 4c69 6e6b 225d 293b 0a20 2020 $newLink"]);. │ │ │ │ +00005a00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00005a10: 206e 6578 743b 0a20 2020 2020 2020 2020 next;. │ │ │ │ +00005a20: 2020 2020 2020 207d 0a09 0924 6e6f 436f }...$noCo │ │ │ │ +00005a30: 7069 6564 4669 6c65 732b 2b3b 0a09 0924 piedFiles++;...$ │ │ │ │ +00005a40: 6d64 3554 6f46 696c 657b 246d 6435 7d20 md5ToFile{$md5} │ │ │ │ +00005a50: 3d20 246e 6577 4c69 6e6b 3b0a 0920 2020 = $newLink;.. │ │ │ │ +00005a60: 207d 0a09 7d0a 0965 6c73 6966 2028 2477 }..}..elsif ($w │ │ │ │ +00005a70: 6861 7420 6571 2027 6469 7227 290a 097b hat eq 'dir')..{ │ │ │ │ +00005a80: 0a09 7d0a 0965 6c73 6966 2028 2477 6861 ..}..elsif ($wha │ │ │ │ +00005a90: 7420 6571 2027 636f 6d70 7265 7373 2720 t eq 'compress' │ │ │ │ +00005aa0: 6f72 2024 7768 6174 2065 7120 2773 796d or $what eq 'sym │ │ │ │ +00005ab0: 6c69 6e6b 2729 0a09 7b0a 0920 2020 206d link')..{.. m │ │ │ │ +00005ac0: 7920 2466 696c 6520 3d20 246c 696e 6b46 y $file = $linkF │ │ │ │ +00005ad0: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. │ │ │ │ +00005ae0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00005af0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00005b00: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ │ +00005b10: 2266 696c 6520 3c24 663e 2065 6e64 7320 "file <$f> ends │ │ │ │ +00005b20: 756e 6578 7065 6374 6564 2061 7420 6c69 unexpected at li │ │ │ │ +00005b30: 6e65 2024 6c69 6e65 4e72 225d 2c0a 0909 ne $lineNr"],... │ │ │ │ +00005b40: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ │ +00005b50: 0a09 0975 6e6c 6573 7320 2466 696c 653b ...unless $file; │ │ │ │ +00005b60: 0a09 7d0a 0965 6c73 6966 2028 2477 6861 ..}..elsif ($wha │ │ │ │ +00005b70: 7420 6571 2027 6c69 6e6b 5379 6d6c 696e t eq 'linkSymlin │ │ │ │ +00005b80: 6b27 290a 097b 0a09 2020 2020 6d79 2024 k')..{.. my $ │ │ │ │ +00005b90: 6578 6973 7469 6e67 4669 6c65 203d 2024 existingFile = $ │ │ │ │ +00005ba0: 6c69 6e6b 4669 6c65 2d3e 7265 6164 2829 linkFile->read() │ │ │ │ +00005bb0: 3b0a 0920 2020 2024 6578 6973 7469 6e67 ;.. $existing │ │ │ │ +00005bc0: 4669 6c65 203d 2022 2464 6972 2f24 6578 File = "$dir/$ex │ │ │ │ +00005bd0: 6973 7469 6e67 4669 6c65 223b 0a09 2020 istingFile";.. │ │ │ │ +00005be0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ │ +00005bf0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00005c00: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ │ +00005c10: 2266 696c 6520 3c24 663e 2065 6e64 7320 "file <$f> ends │ │ │ │ +00005c20: 756e 6578 7065 6374 6564 2061 7420 6c69 unexpected at li │ │ │ │ +00005c30: 6e65 2024 6c69 6e65 4e72 225d 2c0a 0909 ne $lineNr"],... │ │ │ │ +00005c40: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ │ +00005c50: 0a09 0975 6e6c 6573 7320 2465 7869 7374 ...unless $exist │ │ │ │ +00005c60: 696e 6746 696c 653b 0a09 2020 2020 6368 ingFile;.. ch │ │ │ │ +00005c70: 6f6d 7020 2465 7869 7374 696e 6746 696c omp $existingFil │ │ │ │ +00005c80: 653b 0a09 2020 2020 2465 7869 7374 696e e;.. $existin │ │ │ │ +00005c90: 6746 696c 6520 3d7e 2073 2f5c 302f 5c6e gFile =~ s/\0/\n │ │ │ │ +00005ca0: 2f6f 673b 0a0a 0920 2020 206d 7920 246e /og;... my $n │ │ │ │ +00005cb0: 6577 4c69 6e6b 203d 2024 6c69 6e6b 4669 ewLink = $linkFi │ │ │ │ +00005cc0: 6c65 2d3e 7265 6164 2829 3b0a 0920 2020 le->read();.. │ │ │ │ +00005cd0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00005ce0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00005cf0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00005d00: 6669 6c65 203c 2466 3e20 656e 6473 2075 file <$f> ends u │ │ │ │ +00005d10: 6e65 7870 6563 7465 6420 6174 206c 696e nexpected at lin │ │ │ │ +00005d20: 6520 246c 696e 654e 7222 5d2c 0a09 0909 e $lineNr"],.... │ │ │ │ +00005d30: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ │ +00005d40: 0909 756e 6c65 7373 2024 6e65 774c 696e ..unless $newLin │ │ │ │ +00005d50: 6b3b 0a09 2020 2020 6368 6f6d 7020 246e k;.. chomp $n │ │ │ │ +00005d60: 6577 4c69 6e6b 3b0a 0920 2020 2024 6e65 ewLink;.. $ne │ │ │ │ +00005d70: 774c 696e 6b20 3d7e 2073 2f5c 302f 5c6e wLink =~ s/\0/\n │ │ │ │ +00005d80: 2f6f 673b 0a09 2020 2020 246e 6577 4c69 /og;.. $newLi │ │ │ │ +00005d90: 6e6b 203d 2022 2464 6972 2f24 6e65 774c nk = "$dir/$newL │ │ │ │ +00005da0: 696e 6b22 3b0a 0920 2020 2069 6620 286c ink";.. if (l │ │ │ │ +00005db0: 696e 6b20 2465 7869 7374 696e 6746 696c ink $existingFil │ │ │ │ +00005dc0: 652c 2024 6e65 774c 696e 6b29 0a09 2020 e, $newLink).. │ │ │ │ +00005dd0: 2020 7b0a 0909 246e 6f48 6172 644c 696e {...$noHardLin │ │ │ │ +00005de0: 6b73 2b2b 3b0a 0909 2470 724c 6f67 2d3e ks++;...$prLog-> │ │ │ │ +00005df0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ │ +00005e00: 2027 5327 2c0a 0909 0920 2020 2020 2027 'S',.... ' │ │ │ │ +00005e10: 2d73 7472 2720 3d3e 205b 226c 696e 6b65 -str' => ["linke │ │ │ │ +00005e20: 6420 246e 6f48 6172 644c 696e 6b73 2066 d $noHardLinks f │ │ │ │ +00005e30: 696c 6573 225d 290a 0909 0969 6620 2824 iles"])....if ($ │ │ │ │ +00005e40: 7072 2061 6e64 2024 6e6f 4861 7264 4c69 pr and $noHardLi │ │ │ │ +00005e50: 6e6b 7320 2520 2470 7220 3d3d 2030 293b nks % $pr == 0); │ │ │ │ +00005e60: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00005e70: 650a 0920 2020 207b 0a09 0923 2063 7265 e.. {...# cre │ │ │ │ +00005e80: 6174 6520 7379 6d6c 696e 6b0a 0909 2470 ate symlink...$p │ │ │ │ +00005e90: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00005ea0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +00005eb0: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>.. │ │ │ │ +00005ec0: 0909 2020 2020 2020 5b22 6361 6e6e 6f74 .. ["cannot │ │ │ │ +00005ed0: 2063 7265 6174 6520 7379 6d6c 696e 6b20 create symlink │ │ │ │ +00005ee0: 6672 6f6d 203c 246e 6577 4c69 6e6b 3e20 from <$newLink> │ │ │ │ +00005ef0: 2d3e 203c 246d 6435 3e22 5d29 0a09 0975 -> <$md5>"])...u │ │ │ │ +00005f00: 6e6c 6573 7320 7379 6d6c 696e 6b20 246d nless symlink $m │ │ │ │ +00005f10: 6435 2c20 246e 6577 4c69 6e6b 3b0a 0920 d5, $newLink;.. │ │ │ │ +00005f20: 2020 2024 6e6f 5379 6d4c 696e 6b2b 2b3b $noSymLink++; │ │ │ │ +00005f30: 0a09 2020 2020 7d0a 097d 0a09 656c 7369 .. }..}..elsi │ │ │ │ +00005f40: 6620 2824 7768 6174 2065 7120 276c 696e f ($what eq 'lin │ │ │ │ +00005f50: 6b62 6c6f 636b 2729 0a09 7b0a 0920 2020 kblock')..{.. │ │ │ │ +00005f60: 206d 7920 2465 7869 7374 696e 6746 696c my $existingFil │ │ │ │ +00005f70: 6520 3d20 246c 696e 6b46 696c 652d 3e72 e = $linkFile->r │ │ │ │ +00005f80: 6561 6428 293b 0a09 2020 2020 2465 7869 ead();.. $exi │ │ │ │ +00005f90: 7374 696e 6746 696c 6520 3d20 2224 6469 stingFile = "$di │ │ │ │ +00005fa0: 722f 2465 7869 7374 696e 6746 696c 6522 r/$existingFile" │ │ │ │ +00005fb0: 3b0a 0920 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p │ │ │ │ +00005fc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00005fd0: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str' │ │ │ │ +00005fe0: 203d 3e20 5b22 6669 6c65 203c 2466 3e20 => ["file <$f> │ │ │ │ +00005ff0: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected │ │ │ │ +00006000: 6174 206c 696e 6520 246c 696e 654e 7222 at line $lineNr" │ │ │ │ +00006010: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' │ │ │ │ +00006020: 3d3e 2031 290a 0909 756e 6c65 7373 2024 => 1)...unless $ │ │ │ │ +00006030: 6578 6973 7469 6e67 4669 6c65 3b0a 0920 existingFile;.. │ │ │ │ +00006040: 2020 2063 686f 6d70 2024 6578 6973 7469 chomp $existi │ │ │ │ +00006050: 6e67 4669 6c65 3b0a 0920 2020 2024 6578 ngFile;.. $ex │ │ │ │ +00006060: 6973 7469 6e67 4669 6c65 203d 7e20 732f istingFile =~ s/ │ │ │ │ +00006070: 5c30 2f5c 6e2f 6f67 3b0a 0a09 2020 2020 \0/\n/og;... │ │ │ │ +00006080: 6d79 2024 6e65 774c 696e 6b20 3d20 246c my $newLink = $l │ │ │ │ +00006090: 696e 6b46 696c 652d 3e72 6561 6428 293b inkFile->read(); │ │ │ │ +000060a0: 0a09 2020 2020 246e 6577 4c69 6e6b 203d .. $newLink = │ │ │ │ +000060b0: 2022 2464 6972 2f24 6e65 774c 696e 6b22 "$dir/$newLink" │ │ │ │ +000060c0: 3b0a 0920 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p │ │ │ │ +000060d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +000060e0: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str' │ │ │ │ +000060f0: 203d 3e20 5b22 6669 6c65 203c 2466 3e20 => ["file <$f> │ │ │ │ +00006100: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected │ │ │ │ +00006110: 6174 206c 696e 6520 246c 696e 654e 7222 at line $lineNr" │ │ │ │ +00006120: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' │ │ │ │ +00006130: 3d3e 2031 290a 0909 756e 6c65 7373 2024 => 1)...unless $ │ │ │ │ +00006140: 6e65 774c 696e 6b3b 0a09 2020 2020 6368 newLink;.. ch │ │ │ │ +00006150: 6f6d 7020 246e 6577 4c69 6e6b 3b0a 0920 omp $newLink;.. │ │ │ │ +00006160: 2020 2024 6e65 774c 696e 6b20 3d7e 2073 $newLink =~ s │ │ │ │ +00006170: 2f5c 302f 5c6e 2f6f 673b 0a0a 0920 2020 /\0/\n/og;... │ │ │ │ +00006180: 2024 6e6f 4861 7264 4c69 6e6b 7320 2b3d $noHardLinks += │ │ │ │ +00006190: 0a09 0926 3a3a 6861 7264 4c69 6e6b 4469 ...&::hardLinkDi │ │ │ │ +000061a0: 7228 2465 7869 7374 696e 6746 696c 652c r($existingFile, │ │ │ │ +000061b0: 2024 6e65 774c 696e 6b2c 2027 5c41 5c64 $newLink, '\A\d │ │ │ │ +000061c0: 2e2a 272c 2024 7072 4c6f 6729 3b0a 0a09 .*', $prLog);... │ │ │ │ +000061d0: 2020 2020 6d79 2024 626c 6f63 6b4c 6f63 my $blockLoc │ │ │ │ +000061e0: 616c 203d 0a09 0970 6970 6546 726f 6d46 al =...pipeFromF │ │ │ │ +000061f0: 6f72 6b2d 3e6e 6577 2827 2d65 7865 6327 ork->new('-exec' │ │ │ │ +00006200: 203d 3e20 2762 7a69 7032 272c 0a09 0909 => 'bzip2',.... │ │ │ │ +00006210: 0920 2027 2d70 6172 616d 2720 3d3e 205b . '-param' => [ │ │ │ │ +00006220: 272d 6427 5d2c 0a09 0909 0920 2027 2d73 '-d'],..... '-s │ │ │ │ +00006230: 7464 696e 2720 3d3e 2022 246e 6577 4c69 tdin' => "$newLi │ │ │ │ +00006240: 6e6b 2f2e 6d64 3542 6c6f 636b 4368 6563 nk/.md5BlockChec │ │ │ │ +00006250: 6b53 756d 732e 627a 3222 2c0a 0909 0909 kSums.bz2",..... │ │ │ │ +00006260: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' = │ │ │ │ +00006270: 3e20 272f 746d 702f 7374 6275 5069 7065 > '/tmp/stbuPipe │ │ │ │ +00006280: 4672 6f6d 3132 2d27 2c0a 0909 0909 2020 From12-',..... │ │ │ │ +00006290: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +000062a0: 6f67 293b 0a0a 0920 2020 206d 7920 246c og);... my $l │ │ │ │ +000062b0: 3b0a 0920 2020 2077 6869 6c65 2028 246c ;.. while ($l │ │ │ │ +000062c0: 203d 2024 626c 6f63 6b4c 6f63 616c 2d3e = $blockLocal-> │ │ │ │ +000062d0: 7265 6164 2829 290a 0920 2020 207b 0a09 read()).. {.. │ │ │ │ +000062e0: 0970 7269 6e74 2042 4c4f 434b 4d44 3520 .print BLOCKMD5 │ │ │ │ +000062f0: 246c 3b0a 0920 2020 207d 0a09 2020 2020 $l;.. }.. │ │ │ │ +00006300: 2462 6c6f 636b 4c6f 6361 6c2d 3e77 6169 $blockLocal->wai │ │ │ │ +00006310: 7428 293b 0a09 2020 2020 6d79 2024 6f75 t();.. my $ou │ │ │ │ +00006320: 7420 3d20 2462 6c6f 636b 4c6f 6361 6c2d t = $blockLocal- │ │ │ │ +00006330: 3e67 6574 5354 4445 5252 2829 3b0a 0920 >getSTDERR();.. │ │ │ │ +00006340: 2020 2069 6620 2840 246f 7574 290a 0920 if (@$out).. │ │ │ │ +00006350: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ │ +00006360: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ │ +00006370: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ │ +00006380: 7374 7227 203d 3e20 5b22 7265 6164 696e str' => ["readin │ │ │ │ +00006390: 6720 6c69 6e6b 4669 6c65 2066 696c 6520 g linkFile file │ │ │ │ +000063a0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:" │ │ │ │ +000063b0: 2c0a 0909 0909 0920 4024 6f75 745d 293b ,...... @$out]); │ │ │ │ +000063c0: 0a09 0965 7869 7420 313b 0a09 2020 2020 ...exit 1;.. │ │ │ │ +000063d0: 7d0a 0920 2020 2024 626c 6f63 6b4c 6f63 }.. $blockLoc │ │ │ │ +000063e0: 616c 2d3e 636c 6f73 6528 293b 0a09 7d0a al->close();..}. │ │ │ │ +000063f0: 0965 6c73 650a 097b 0a09 2020 2020 2470 .else..{.. $p │ │ │ │ +00006400: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00006410: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ │ +00006420: 2027 2d73 7472 2720 3d3e 205b 2269 6c6c '-str' => ["ill │ │ │ │ +00006430: 6567 616c 206b 6579 776f 7264 203c 2477 egal keyword <$w │ │ │ │ +00006440: 6861 743e 2022 202e 0a09 0909 0920 2020 hat> " ...... │ │ │ │ +00006450: 2020 2261 7420 6c69 6e65 2024 6c69 6e65 "at line $line │ │ │ │ +00006460: 4e72 2069 6e20 6669 6c65 203c 2466 3e3a Nr in file <$f>: │ │ │ │ +00006470: 222c 0a09 0909 2020 2020 2020 2020 2020 ",.... │ │ │ │ +00006480: 2020 2022 5c74 3c24 6c3e 225d 2c0a 0909 "\t<$l>"],... │ │ │ │ +00006490: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ │ +000064a0: 3b0a 097d 0a0a 2020 2020 7d0a 2020 2020 ;..}.. }. │ │ │ │ +000064b0: 6966 2028 2477 6974 6842 6c6f 636b 6564 if ($withBlocked │ │ │ │ +000064c0: 4669 6c65 7329 0a20 2020 207b 0a09 636c Files). {..cl │ │ │ │ +000064d0: 6f73 6528 424c 4f43 4b4d 4435 2920 6f72 ose(BLOCKMD5) or │ │ │ │ +000064e0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ │ +000064f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00006500: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ │ +00006510: 3d3e 0a09 0909 2020 5b22 6361 6e6e 6f74 =>.... ["cannot │ │ │ │ +00006520: 2063 6c6f 7365 2066 696c 6520 3c24 6469 close file <$di │ │ │ │ +00006530: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck │ │ │ │ +00006540: 5375 6d73 3e22 5d2c 0a09 0909 2020 272d Sums>"],.... '- │ │ │ │ +00006550: 6578 6974 2720 3d3e 2031 293b 0a20 2020 exit' => 1);. │ │ │ │ +00006560: 207d 0a20 2020 2024 6c69 6e6b 4669 6c65 }. $linkFile │ │ │ │ +00006570: 2d3e 7761 6974 2829 3b0a 2020 2020 246f ->wait();. $o │ │ │ │ +00006580: 7574 203d 2024 6c69 6e6b 4669 6c65 2d3e ut = $linkFile-> │ │ │ │ +00006590: 6765 7453 5444 4552 5228 293b 0a20 2020 getSTDERR();. │ │ │ │ +000065a0: 2069 6620 2840 246f 7574 290a 2020 2020 if (@$out). │ │ │ │ +000065b0: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print │ │ │ │ +000065c0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +000065d0: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +000065e0: 3d3e 205b 2272 6561 6469 6e67 206c 696e => ["reading lin │ │ │ │ +000065f0: 6b46 696c 6520 6669 6c65 2072 6570 6f72 kFile file repor │ │ │ │ +00006600: 7473 2065 7272 6f72 733a 222c 0a09 0909 ts errors:",.... │ │ │ │ +00006610: 0920 4024 6f75 745d 293b 0a09 6578 6974 . @$out]);..exit │ │ │ │ +00006620: 2031 3b0a 2020 2020 7d0a 2020 2020 246c 1;. }. $l │ │ │ │ +00006630: 696e 6b46 696c 652d 3e63 6c6f 7365 2829 inkFile->close() │ │ │ │ +00006640: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ │ +00006650: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +00006660: 5327 2c0a 0909 2020 272d 7374 7227 203d S',... '-str' = │ │ │ │ +00006670: 3e20 5b22 6c69 6e6b 6564 2024 6e6f 4861 > ["linked $noHa │ │ │ │ +00006680: 7264 4c69 6e6b 7320 6669 6c65 7322 5d29 rdLinks files"]) │ │ │ │ +00006690: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ │ +000066a0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ │ +000066b0: 5327 2c0a 0909 2020 272d 7374 7227 203d S',... '-str' = │ │ │ │ +000066c0: 3e20 5b22 636f 7069 6564 2024 6e6f 436f > ["copied $noCo │ │ │ │ +000066d0: 7069 6564 4669 6c65 7320 6669 6c65 7322 piedFiles files" │ │ │ │ +000066e0: 5d29 0a09 6966 2024 6e6f 436f 7069 6564 ])..if $noCopied │ │ │ │ +000066f0: 4669 6c65 733b 0a0a 2020 2020 6d79 2024 Files;.. my $ │ │ │ │ +00006700: 636f 6d70 724d 6435 426c 6f63 6b43 6865 comprMd5BlockChe │ │ │ │ +00006710: 636b 5375 6d73 3b0a 2020 2020 6966 2028 ckSums;. if ( │ │ │ │ +00006720: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile │ │ │ │ +00006730: 7320 616e 6420 2d65 2022 2464 6972 2f2e s and -e "$dir/. │ │ │ │ +00006740: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2 │ │ │ │ +00006750: 2229 0a20 2020 207b 0a09 2320 636f 6d70 "). {..# comp │ │ │ │ +00006760: 7265 7373 202e 6d64 3542 6c6f 636b 4368 ress .md5BlockCh │ │ │ │ +00006770: 6563 6b53 756d 730a 0924 636f 6d70 724d eckSums..$comprM │ │ │ │ +00006780: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ │ +00006790: 203d 0a09 2020 2020 666f 726b 5072 6f63 =.. forkProc │ │ │ │ +000067a0: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' => │ │ │ │ +000067b0: 2027 627a 6970 3227 2c0a 0909 0920 2027 'bzip2',.... ' │ │ │ │ +000067c0: 2d70 6172 616d 2720 3d3e 205b 2224 6469 -param' => ["$di │ │ │ │ +000067d0: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck │ │ │ │ +000067e0: 5375 6d73 225d 2c0a 0909 0920 2027 2d6f Sums"],.... '-o │ │ │ │ +000067f0: 7574 5261 6e64 6f6d 2720 3d3e 0a09 0909 utRandom' =>.... │ │ │ │ +00006800: 2020 272f 746d 702f 7374 6275 2d63 6f6d '/tmp/stbu-com │ │ │ │ +00006810: 7072 2d27 2c0a 0909 0920 2027 2d70 724c pr-',.... '-prL │ │ │ │ +00006820: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +00006830: 2020 2020 7d0a 0a20 2020 2023 0a20 2020 }.. #. │ │ │ │ +00006840: 2023 2073 6574 2066 696c 6520 7065 726d # set file perm │ │ │ │ +00006850: 6973 7369 6f6e 730a 2020 2020 230a 2020 issions. #. │ │ │ │ +00006860: 2020 6d79 2024 7072 6573 6572 7665 5065 my $preservePe │ │ │ │ +00006870: 726d 7320 3d0a 0924 7263 7366 2d3e 6765 rms =..$rcsf->ge │ │ │ │ +00006880: 7449 6e66 6f57 6974 6850 6172 2827 7072 tInfoWithPar('pr │ │ │ │ +00006890: 6573 6572 7665 5065 726d 7327 2920 6571 eservePerms') eq │ │ │ │ +000068a0: 2027 6e6f 2720 3f20 3020 3a20 313b 0a23 'no' ? 0 : 1;.# │ │ │ │ +000068b0: 0928 2824 246d 6574 617b 2770 7265 7365 .(($$meta{'prese │ │ │ │ +000068c0: 7276 6550 6572 6d73 277d 292d 3e5b 305d rvePerms'})->[0] │ │ │ │ +000068d0: 2065 7120 276e 6f27 2920 3f20 3020 3a20 eq 'no') ? 0 : │ │ │ │ +000068e0: 313b 0a20 2020 2024 7072 203d 2024 7072 1;. $pr = $pr │ │ │ │ +000068f0: 6f67 7265 7373 5265 706f 7274 202a 2032 ogressReport * 2 │ │ │ │ +00006900: 3030 303b 0a20 2020 2069 6620 2824 7072 000;. if ($pr │ │ │ │ +00006910: 6573 6572 7665 5065 726d 7329 0a20 2020 eservePerms). │ │ │ │ +00006920: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin │ │ │ │ +00006930: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ │ +00006940: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ │ +00006950: 203d 3e20 5b22 7068 6173 6520 333a 2073 => ["phase 3: s │ │ │ │ +00006960: 6574 7469 6e67 2066 696c 6520 7065 726d etting file perm │ │ │ │ +00006970: 6973 7369 6f6e 7322 5d29 3b0a 2309 6d79 issions"]);.#.my │ │ │ │ +00006980: 2024 636f 6d70 7250 6f73 7466 6978 203d $comprPostfix = │ │ │ │ +00006990: 2028 2424 6d65 7461 7b27 706f 7374 6669 ($$meta{'postfi │ │ │ │ +000069a0: 7827 7d29 2d3e 5b30 5d3b 0a09 6d79 2024 x'})->[0];..my $ │ │ │ │ +000069b0: 636f 6d70 7250 6f73 7466 6978 203d 2024 comprPostfix = $ │ │ │ │ +000069c0: 7263 7366 2d3e 6765 7449 6e66 6f57 6974 rcsf->getInfoWit │ │ │ │ +000069d0: 6850 6172 2827 706f 7374 6669 7827 293b hPar('postfix'); │ │ │ │ +000069e0: 0a0a 096d 7920 246e 6f46 696c 6573 203d ...my $noFiles = │ │ │ │ +000069f0: 2030 3b0a 096d 7920 2472 6373 6620 3d20 0;..my $rcsf = │ │ │ │ +00006a00: 7265 6164 4368 6563 6b53 756d 4669 6c65 readCheckSumFile │ │ │ │ +00006a10: 2d3e 6e65 7728 272d 6368 6563 6b53 756d ->new('-checkSum │ │ │ │ +00006a20: 4669 6c65 2720 3d3e 2022 2464 6972 2f2e File' => "$dir/. │ │ │ │ +00006a30: 6d64 3543 6865 636b 5375 6d73 222c 0a09 md5CheckSums",.. │ │ │ │ +00006a40: 0909 0909 2027 2d70 724c 6f67 2720 3d3e .... '-prLog' => │ │ │ │ +00006a50: 2024 7072 4c6f 6729 3b0a 096d 7920 2824 $prLog);..my ($ │ │ │ │ +00006a60: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ │ +00006a70: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ │ +00006a80: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ │ +00006a90: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime, │ │ │ │ +00006aa0: 0a09 2020 2020 2473 697a 652c 2024 7569 .. $size, $ui │ │ │ │ +00006ab0: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, │ │ │ │ +00006ac0: 2466 293b 0a09 7768 696c 6520 2828 2824 $f);..while ((($ │ │ │ │ +00006ad0: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ │ +00006ae0: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ │ +00006af0: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ │ +00006b00: 2024 6d74 696d 652c 0a09 0920 2461 7469 $mtime,... $ati │ │ │ │ +00006b10: 6d65 2c20 2473 697a 652c 2024 7569 642c me, $size, $uid, │ │ │ │ +00006b20: 2024 6769 642c 2024 6d6f 6465 2c20 2466 $gid, $mode, $f │ │ │ │ +00006b30: 2920 3d20 2472 6373 662d 3e6e 6578 744c ) = $rcsf->nextL │ │ │ │ +00006b40: 696e 6528 2929 203e 2030 290a 097b 0a09 ine()) > 0)..{.. │ │ │ │ +00006b50: 2020 2020 6d79 2024 6669 6c65 203d 2022 my $file = " │ │ │ │ +00006b60: 2464 6972 2f24 6622 3b0a 0920 2020 206e $dir/$f";.. n │ │ │ │ +00006b70: 6578 7420 6966 2028 246d 6435 7375 6d20 ext if ($md5sum │ │ │ │ +00006b80: 6571 2027 6469 7227 293b 0a0a 0920 2020 eq 'dir');... │ │ │ │ +00006b90: 2024 6669 6c65 202e 3d20 2463 6f6d 7072 $file .= $compr │ │ │ │ +00006ba0: 506f 7374 6669 7820 6966 2024 636f 6d70 Postfix if $comp │ │ │ │ +00006bb0: 7220 6571 2027 6327 3b0a 0a09 2020 2020 r eq 'c';... │ │ │ │ +00006bc0: 6966 2028 6e6f 7420 2d6c 2024 6669 6c65 if (not -l $file │ │ │ │ +00006bd0: 2061 6e64 206e 6f74 202d 6520 2466 696c and not -e $fil │ │ │ │ +00006be0: 6529 0a09 2020 2020 7b0a 0909 2470 724c e).. {...$prL │ │ │ │ +00006bf0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00006c00: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ │ +00006c10: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ │ +00006c20: 616e 6e6f 7420 6163 6365 7320 3c24 6669 annot acces <$fi │ │ │ │ +00006c30: 6c65 3e22 5d29 3b0a 0909 6e65 7874 3b0a le>"]);...next;. │ │ │ │ +00006c40: 0920 2020 207d 0a09 2020 2020 246e 6f46 . }.. $noF │ │ │ │ +00006c50: 696c 6573 2b2b 3b0a 0920 2020 2024 7072 iles++;.. $pr │ │ │ │ +00006c60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ │ +00006c70: 6427 203d 3e20 2753 272c 0a09 0909 2020 d' => 'S',.... │ │ │ │ +00006c80: 272d 7374 7227 203d 3e20 5b22 7365 7420 '-str' => ["set │ │ │ │ +00006c90: 7065 726d 6973 7369 6f6e 7320 6f66 2024 permissions of $ │ │ │ │ +00006ca0: 6e6f 4669 6c65 7320 6669 6c65 7322 5d29 noFiles files"]) │ │ │ │ +00006cb0: 0a09 0909 6966 2028 2470 7220 616e 6420 ....if ($pr and │ │ │ │ +00006cc0: 246e 6f46 696c 6573 2025 2024 7072 203d $noFiles % $pr = │ │ │ │ +00006cd0: 3d20 3029 3b0a 0a09 2020 2020 6e65 7874 = 0);... next │ │ │ │ +00006ce0: 2069 6620 246d 6435 7375 6d20 6571 2027 if $md5sum eq ' │ │ │ │ +00006cf0: 7379 6d6c 696e 6b27 3b0a 0a09 2020 2020 symlink';... │ │ │ │ +00006d00: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m │ │ │ │ +00006d10: 7469 6d65 2c20 2466 696c 653b 0a09 2020 time, $file;.. │ │ │ │ +00006d20: 2020 6368 6f77 6e20 2475 6964 2c20 2467 chown $uid, $g │ │ │ │ +00006d30: 6964 2c20 2466 696c 653b 0a09 2020 2020 id, $file;.. │ │ │ │ +00006d40: 6966 2028 2463 6f6d 7072 2065 7120 2762 if ($compr eq 'b │ │ │ │ +00006d50: 2729 2020 2020 2020 2020 2023 2062 6c6f ') # blo │ │ │ │ +00006d60: 636b 2066 696c 650a 0920 2020 207b 0a09 ck file.. {.. │ │ │ │ +00006d70: 0924 6d6f 6465 2026 3d20 3037 3737 3b20 .$mode &= 0777; │ │ │ │ +00006d80: 2020 2023 2073 7472 6970 2073 7065 6369 # strip speci │ │ │ │ +00006d90: 616c 2070 6572 6d69 7373 696f 6e73 0a09 al permissions.. │ │ │ │ +00006da0: 0924 6d6f 6465 207c 3d20 3031 3131 3b20 .$mode |= 0111; │ │ │ │ +00006db0: 2020 2023 2061 6464 2064 6972 6563 746f # add directo │ │ │ │ +00006dc0: 7279 2070 6572 6d69 7373 696f 6e73 0a09 ry permissions.. │ │ │ │ +00006dd0: 2020 2020 7d0a 0920 2020 2063 686d 6f64 }.. chmod │ │ │ │ +00006de0: 2024 6d6f 6465 2c20 2466 696c 653b 0a09 $mode, $file;.. │ │ │ │ +00006df0: 7d0a 0a09 2470 724c 6f67 2d3e 7072 696e }...$prLog->prin │ │ │ │ +00006e00: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S' │ │ │ │ +00006e10: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ │ +00006e20: 203d 3e20 5b22 7365 7420 7065 726d 6973 => ["set permis │ │ │ │ +00006e30: 7369 6f6e 7320 666f 7220 246e 6f46 696c sions for $noFil │ │ │ │ +00006e40: 6573 2066 696c 6573 225d 293b 0a20 2020 es files"]);. │ │ │ │ +00006e50: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ │ +00006e60: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print │ │ │ │ +00006e70: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ │ +00006e80: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +00006e90: 3d3e 205b 2270 6861 7365 2033 3a20 6669 => ["phase 3: fi │ │ │ │ +00006ea0: 6c65 2070 6572 6d69 7373 696f 6e73 206e le permissions n │ │ │ │ +00006eb0: 6f74 2073 6574 2062 6563 6175 7365 2022 ot set because " │ │ │ │ +00006ec0: 202e 0a09 0909 0920 2270 7265 7365 7276 ...... "preserv │ │ │ │ +00006ed0: 6550 6572 6d73 206e 6f74 2073 6574 2069 ePerms not set i │ │ │ │ +00006ee0: 6e20 7374 6f72 6542 6163 6b75 702e 706c n storeBackup.pl │ │ │ │ +00006ef0: 225d 293b 0a20 2020 207d 0a0a 2020 2020 "]);. }.. │ │ │ │ +00006f00: 6966 2028 2477 6974 6842 6c6f 636b 6564 if ($withBlocked │ │ │ │ +00006f10: 4669 6c65 7320 616e 6420 2d65 2022 2464 Files and -e "$d │ │ │ │ +00006f20: 6972 2f2e 6d64 3543 6865 636b 5375 6d73 ir/.md5CheckSums │ │ │ │ +00006f30: 2e62 7a32 2229 0a20 2020 207b 0a09 2320 .bz2"). {..# │ │ │ │ +00006f40: 636f 6d70 7265 7373 202e 6d64 3542 6c6f compress .md5Blo │ │ │ │ +00006f50: 636b 4368 6563 6b53 756d 730a 0924 636f ckCheckSums..$co │ │ │ │ +00006f60: 6d70 724d 6435 426c 6f63 6b43 6865 636b mprMd5BlockCheck │ │ │ │ +00006f70: 5375 6d73 2d3e 7761 6974 2829 3b0a 096d Sums->wait();..m │ │ │ │ +00006f80: 7920 246f 7574 203d 2024 636f 6d70 724d y $out = $comprM │ │ │ │ +00006f90: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ │ +00006fa0: 2d3e 6765 7453 5444 4f55 5428 293b 0a09 ->getSTDOUT();.. │ │ │ │ +00006fb0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ │ +00006fc0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ │ +00006fd0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ │ +00006fe0: 5b22 5354 4445 5252 206f 6620 3c75 6e61 ["STDERR of :", @$out]).. │ │ │ │ +00007000: 2020 2020 6966 2028 4024 6f75 7420 3e20 if (@$out > │ │ │ │ +00007010: 3029 3b0a 0924 6f75 7420 3d20 2463 6f6d 0);..$out = $com │ │ │ │ +00007020: 7072 4d64 3542 6c6f 636b 4368 6563 6b53 prMd5BlockCheckS │ │ │ │ +00007030: 756d 732d 3e67 6574 5354 4445 5252 2829 ums->getSTDERR() │ │ │ │ +00007040: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print │ │ │ │ +00007050: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +00007060: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ │ +00007070: 3d3e 205b 2253 5444 4552 5220 6f66 203c => ["STDERR of < │ │ │ │ +00007080: 756e 616d 653e 3a22 2c20 4024 6f75 745d uname>:", @$out] │ │ │ │ +00007090: 290a 0920 2020 2069 6620 2840 246f 7574 ).. if (@$out │ │ │ │ +000070a0: 203e 2030 293b 0a20 2020 207d 0a0a 2020 > 0);. }.. │ │ │ │ +000070b0: 2020 230a 2020 2020 2320 7365 7420 6469 #. # set di │ │ │ │ +000070c0: 7265 6374 6f72 7920 7065 726d 6973 7369 rectory permissi │ │ │ │ +000070d0: 6f6e 730a 2020 2020 230a 2020 2020 6966 ons. #. if │ │ │ │ +000070e0: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms │ │ │ │ +000070f0: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog- │ │ │ │ +00007100: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00007110: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ │ +00007120: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => ["phase │ │ │ │ +00007130: 2034 3a20 7365 7474 696e 6720 6469 7265 4: setting dire │ │ │ │ +00007140: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission │ │ │ │ +00007150: 7322 5d29 3b0a 2309 6d79 2024 636f 6d70 s"]);.#.my $comp │ │ │ │ +00007160: 7250 6f73 7466 6978 203d 2028 2424 6d65 rPostfix = ($$me │ │ │ │ +00007170: 7461 7b27 706f 7374 6669 7827 7d29 2d3e ta{'postfix'})-> │ │ │ │ +00007180: 5b30 5d3b 0a09 6d79 2024 636f 6d70 7250 [0];..my $comprP │ │ │ │ +00007190: 6f73 7466 6978 203d 2024 7263 7366 2d3e ostfix = $rcsf-> │ │ │ │ +000071a0: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar(' │ │ │ │ +000071b0: 706f 7374 6669 7827 293b 0a0a 096d 7920 postfix');...my │ │ │ │ +000071c0: 246e 6f44 6972 7320 3d20 303b 0a09 6d79 $noDirs = 0;..my │ │ │ │ +000071d0: 2024 7263 7366 203d 2072 6561 6443 6865 $rcsf = readChe │ │ │ │ +000071e0: 636b 5375 6d46 696c 652d 3e6e 6577 2827 ckSumFile->new(' │ │ │ │ +000071f0: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' = │ │ │ │ +00007200: 3e20 2224 6469 722f 2e6d 6435 4368 6563 > "$dir/.md5Chec │ │ │ │ +00007210: 6b53 756d 7322 2c0a 0909 0909 0920 272d kSums",...... '- │ │ │ │ +00007220: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ │ +00007230: 293b 0a09 6d79 2028 246d 6435 7375 6d2c );..my ($md5sum, │ │ │ │ +00007240: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno │ │ │ │ +00007250: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup │ │ │ │ +00007260: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime │ │ │ │ +00007270: 2c20 2461 7469 6d65 2c0a 0920 2020 2024 , $atime,.. $ │ │ │ │ +00007280: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid │ │ │ │ +00007290: 2c20 246d 6f64 652c 2024 6629 3b0a 0977 , $mode, $f);..w │ │ │ │ +000072a0: 6869 6c65 2028 2828 246d 6435 7375 6d2c hile ((($md5sum, │ │ │ │ +000072b0: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno │ │ │ │ +000072c0: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup │ │ │ │ +000072d0: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime │ │ │ │ +000072e0: 2c0a 0909 2024 6174 696d 652c 2024 7369 ,... $atime, $si │ │ │ │ +000072f0: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, │ │ │ │ +00007300: 246d 6f64 652c 2024 6629 203d 2024 7263 $mode, $f) = $rc │ │ │ │ +00007310: 7366 2d3e 6e65 7874 4c69 6e65 2829 2920 sf->nextLine()) │ │ │ │ +00007320: 3e20 3029 0a09 7b0a 0920 2020 206d 7920 > 0)..{.. my │ │ │ │ +00007330: 2466 696c 6520 3d20 2224 6469 722f 2466 $file = "$dir/$f │ │ │ │ +00007340: 223b 0a09 2020 2020 6966 2028 246d 6435 ";.. if ($md5 │ │ │ │ +00007350: 7375 6d20 6571 2027 6469 7227 290a 0920 sum eq 'dir').. │ │ │ │ +00007360: 2020 207b 0a09 0975 6e6c 6573 7320 282d {...unless (- │ │ │ │ +00007370: 6520 2466 696c 6529 0a09 097b 0a09 0920 e $file)...{... │ │ │ │ +00007380: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ │ +00007390: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +000073a0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ │ +000073b0: 205b 2263 616e 6e6f 7420 6163 6365 7320 ["cannot acces │ │ │ │ +000073c0: 3c24 6669 6c65 3e22 5d29 3b0a 0909 2020 <$file>"]);... │ │ │ │ +000073d0: 2020 6e65 7874 3b0a 0909 7d0a 0909 6368 next;...}...ch │ │ │ │ +000073e0: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ │ +000073f0: 2466 696c 653b 0a09 0963 686d 6f64 2024 $file;...chmod $ │ │ │ │ +00007400: 6d6f 6465 2c20 2466 696c 653b 0a09 0975 mode, $file;...u │ │ │ │ +00007410: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt │ │ │ │ +00007420: 696d 652c 2024 6669 6c65 3b0a 0a09 0924 ime, $file;....$ │ │ │ │ +00007430: 6e6f 4469 7273 2b2b 3b0a 0909 2470 724c noDirs++;...$prL │ │ │ │ +00007440: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00007450: 2720 3d3e 2027 5327 2c0a 0909 0920 2027 ' => 'S',.... ' │ │ │ │ +00007460: 2d73 7472 2720 3d3e 205b 2273 6574 2070 -str' => ["set p │ │ │ │ +00007470: 6572 6d69 7373 696f 6e73 206f 6620 246e ermissions of $n │ │ │ │ +00007480: 6f44 6972 7320 6469 7265 6374 6f72 6965 oDirs directorie │ │ │ │ +00007490: 7322 5d29 0a09 0909 6966 2028 2470 7220 s"])....if ($pr │ │ │ │ +000074a0: 616e 6420 246e 6f44 6972 7320 2520 2470 and $noDirs % $p │ │ │ │ +000074b0: 7220 3d3d 2030 293b 0a09 2020 2020 7d0a r == 0);.. }. │ │ │ │ +000074c0: 097d 0a0a 0924 7072 4c6f 672d 3e70 7269 .}...$prLog->pri │ │ │ │ +000074d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2753 nt('-kind' => 'S │ │ │ │ +000074e0: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ │ +000074f0: 2720 3d3e 205b 2273 6574 2070 6572 6d69 ' => ["set permi │ │ │ │ +00007500: 7373 696f 6e73 2066 6f72 2024 6e6f 4469 ssions for $noDi │ │ │ │ +00007510: 7273 2064 6972 6563 746f 7269 6573 225d rs directories"] │ │ │ │ +00007520: 293b 0a20 2020 207d 0a20 2020 2065 6c73 );. }. els │ │ │ │ +00007530: 650a 2020 2020 7b0a 0924 7072 4c6f 672d e. {..$prLog- │ │ │ │ +00007540: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ │ +00007550: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ │ +00007560: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => ["phase │ │ │ │ +00007570: 2034 3a20 6469 7265 6374 6f72 7920 7065 4: directory pe │ │ │ │ +00007580: 726d 6973 7369 6f6e 7320 6e6f 7420 7365 rmissions not se │ │ │ │ +00007590: 7420 6265 6361 7573 6520 2220 2e0a 0909 t because " .... │ │ │ │ +000075a0: 0909 2022 7072 6573 6572 7665 5065 726d .. "preservePerm │ │ │ │ +000075b0: 7320 6e6f 7420 7365 7420 696e 2073 746f s not set in sto │ │ │ │ +000075c0: 7265 4261 636b 7570 2e70 6c22 5d29 3b0a reBackup.pl"]);. │ │ │ │ +000075d0: 2020 2020 7d0a 0a7d 0a }..}. │ │ │ ├── ./usr/bin/storeBackupVersions │ │ │ │ @@ -1,4 +1,1100 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 7056 6572 7369 6f6e 730a pVersions. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ │ +00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ │ +00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ │ +00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ │ +000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ │ +000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ │ +000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ │ +000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ │ +000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ │ +000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ │ +00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ │ +00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ │ +00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ │ +00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ │ +00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ │ +00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ │ +00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ │ +00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ │ +00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ │ +00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ │ +000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ │ +000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ │ +000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ │ +000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ │ +000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ │ +000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ │ +00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ │ +00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ │ +00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ │ +00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ │ +00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ │ +00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ │ +00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ │ +00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ │ +00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ │ +00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ │ +000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ │ +000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ │ +000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m │ │ │ │ +00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I │ │ │ │ +00000310: 643a 2073 746f 7265 4261 636b 7570 5665 d: storeBackupVe │ │ │ │ +00000320: 7273 696f 6e73 2e70 6c20 3336 3220 3230 rsions.pl 362 20 │ │ │ │ +00000330: 3132 2d30 312d 3238 2032 323a 3131 3a31 12-01-28 22:11:1 │ │ │ │ +00000340: 335a 2068 6a63 2024 2027 3b0a 7075 7368 3Z hjc $ ';.push │ │ │ │ +00000350: 2040 5645 5253 494f 4e2c 2024 5645 5253 @VERSION, $VERS │ │ │ │ +00000360: 494f 4e3b 0a6d 7920 2824 5645 5253 494f ION;.my ($VERSIO │ │ │ │ +00000370: 4e70 4e61 6d65 2c20 2456 4552 5349 4f4e NpName, $VERSION │ │ │ │ +00000380: 7376 6e49 4429 203d 2024 5645 5253 494f svnID) = $VERSIO │ │ │ │ +00000390: 4e20 3d7e 202f 4964 3a5c 732b 285c 532b N =~ /Id:\s+(\S+ │ │ │ │ +000003a0: 295c 732b 285c 642b 292f 3b0a 246d 6169 )\s+(\d+)/;.$mai │ │ │ │ +000003b0: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ │ +000003c0: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ │ +000003d0: 7573 6520 4663 6e74 6c20 7177 284f 5f52 use Fcntl qw(O_R │ │ │ │ +000003e0: 4457 5220 4f5f 4352 4541 5429 3b0a 7573 DWR O_CREAT);.us │ │ │ │ +000003f0: 6520 4669 6c65 3a3a 436f 7079 3b0a 7573 e File::Copy;.us │ │ │ │ +00000400: 6520 504f 5349 583b 0a75 7365 2044 6967 e POSIX;.use Dig │ │ │ │ +00000410: 6573 743a 3a4d 4435 2071 7728 6d64 355f est::MD5 qw(md5_ │ │ │ │ +00000420: 6865 7829 3b0a 0a75 7365 2073 7472 6963 hex);..use stric │ │ │ │ +00000430: 743b 0a0a 0a73 7562 206c 6962 5061 7468 t;...sub libPath │ │ │ │ +00000440: 0a7b 0a20 2020 206d 7920 2466 696c 6520 .{. my $file │ │ │ │ +00000450: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my │ │ │ │ +00000460: 2024 6469 723b 0a0a 2020 2020 2320 4661 $dir;.. # Fa │ │ │ │ +00000470: 6c6c 7320 4461 7465 6920 7365 6c62 7374 lls Datei selbst │ │ │ │ +00000480: 2065 696e 2073 796d 6c69 6e6b 2069 7374 ein symlink ist │ │ │ │ +00000490: 2c20 736f 6c61 6e67 6520 666f 6c67 656e , solange folgen │ │ │ │ +000004a0: 2c20 6269 7320 6175 6667 656c f673 740a , bis aufgel.st. │ │ │ │ +000004b0: 2020 2020 6966 2028 2d66 2024 6669 6c65 if (-f $file │ │ │ │ +000004c0: 290a 2020 2020 7b0a 0977 6869 6c65 2028 ). {..while ( │ │ │ │ +000004d0: 2d6c 2024 6669 6c65 290a 097b 0a09 2020 -l $file)..{.. │ │ │ │ +000004e0: 2020 6d79 2024 6c69 6e6b 203d 2072 6561 my $link = rea │ │ │ │ +000004f0: 646c 696e 6b28 2466 696c 6529 3b0a 0a09 dlink($file);... │ │ │ │ +00000500: 2020 2020 6966 2028 7375 6273 7472 2824 if (substr($ │ │ │ │ +00000510: 6c69 6e6b 2c20 302c 2031 2920 6e65 2022 link, 0, 1) ne " │ │ │ │ +00000520: 2f22 290a 0920 2020 207b 0a09 0924 6669 /").. {...$fi │ │ │ │ +00000530: 6c65 203d 7e20 732f 5b5e 5c2f 5d2b 242f le =~ s/[^\/]+$/ │ │ │ │ +00000540: 246c 696e 6b2f 3b0a 0920 2020 207d 0a09 $link/;.. }.. │ │ │ │ +00000550: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {. │ │ │ │ +00000560: 0909 2466 696c 6520 3d20 246c 696e 6b3b ..$file = $link; │ │ │ │ +00000570: 0a09 2020 2020 7d0a 097d 0a0a 0928 2464 .. }..}...($d │ │ │ │ +00000580: 6972 2c20 2466 696c 6529 203d 2026 7370 ir, $file) = &sp │ │ │ │ +00000590: 6c69 7446 696c 6544 6972 2824 6669 6c65 litFileDir($file │ │ │ │ +000005a0: 293b 0a09 2466 696c 6520 3d20 222f 2466 );..$file = "/$f │ │ │ │ +000005b0: 696c 6522 3b0a 2020 2020 7d0a 2020 2020 ile";. }. │ │ │ │ +000005c0: 656c 7365 0a20 2020 207b 0a09 7072 696e else. {..prin │ │ │ │ +000005d0: 7420 5354 4445 5252 2022 3c24 6669 6c65 t STDERR "<$file │ │ │ │ +000005e0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist │ │ │ │ +000005f0: 215c 6e22 3b0a 0965 7869 7420 313b 0a20 !\n";..exit 1;. │ │ │ │ +00000600: 2020 207d 0a0a 2020 2020 2464 6972 202e }.. $dir . │ │ │ │ +00000610: 3d20 222f 2e2e 2f6c 6962 223b 2020 2020 = "/../lib"; │ │ │ │ +00000620: 2020 2020 2020 2023 2050 6661 6420 7a75 # Pfad zu │ │ │ │ +00000630: 2064 656e 2042 6962 6c69 6f74 6865 6b65 den Bibliotheke │ │ │ │ +00000640: 6e0a 2020 2020 6d79 2024 6f6c 6444 6972 n. my $oldDir │ │ │ │ +00000650: 203d 2060 2f62 696e 2f70 7764 603b 0a20 = `/bin/pwd`;. │ │ │ │ +00000660: 2020 2063 686f 6d70 2024 6f6c 6444 6972 chomp $oldDir │ │ │ │ +00000670: 3b0a 2020 2020 6966 2028 6368 6469 7220 ;. if (chdir │ │ │ │ +00000680: 2464 6972 290a 2020 2020 7b0a 096d 7920 $dir). {..my │ │ │ │ +00000690: 2461 6273 4469 7220 3d20 602f 6269 6e2f $absDir = `/bin/ │ │ │ │ +000006a0: 7077 6460 3b0a 0963 686f 7020 2461 6273 pwd`;..chop $abs │ │ │ │ +000006b0: 4469 723b 0a09 6368 6469 7220 246f 6c64 Dir;..chdir $old │ │ │ │ +000006c0: 4469 723b 0a0a 0972 6574 7572 6e20 2826 Dir;...return (& │ │ │ │ +000006d0: 7370 6c69 7446 696c 6544 6972 2822 2461 splitFileDir("$a │ │ │ │ +000006e0: 6273 4469 7224 6669 6c65 2229 293b 0a20 bsDir$file"));. │ │ │ │ +000006f0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ │ +00000700: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER │ │ │ │ +00000710: 5220 223c 2464 6972 3e20 646f 6573 206e R "<$dir> does n │ │ │ │ +00000720: 6f74 2065 7869 7374 2c20 6578 6974 696e ot exist, exitin │ │ │ │ +00000730: 675c 6e22 3b0a 2020 2020 7d0a 7d0a 7375 g\n";. }.}.su │ │ │ │ +00000740: 6220 7370 6c69 7446 696c 6544 6972 0a7b b splitFileDir.{ │ │ │ │ +00000750: 0a20 2020 206d 7920 246e 616d 6520 3d20 . my $name = │ │ │ │ +00000760: 7368 6966 743b 0a0a 2020 2020 7265 7475 shift;.. retu │ │ │ │ +00000770: 726e 2028 272e 272c 2024 6e61 6d65 2920 rn ('.', $name) │ │ │ │ +00000780: 756e 6c65 7373 2028 246e 616d 6520 3d7e unless ($name =~ │ │ │ │ +00000790: 2f5c 2f2f 293b 2020 2020 2320 6e75 7220 /\//); # nur │ │ │ │ +000007a0: 6569 6e66 6163 6865 7220 4461 7465 696e einfacher Datein │ │ │ │ +000007b0: 616d 650a 0a20 2020 206d 7920 2824 6469 ame.. my ($di │ │ │ │ +000007c0: 722c 2024 6669 6c65 2920 3d20 246e 616d r, $file) = $nam │ │ │ │ +000007d0: 6520 3d7e 202f 5e28 2e2a 295c 2f28 2e2a e =~ /^(.*)\/(.* │ │ │ │ +000007e0: 2924 2f73 3b0a 2020 2020 2464 6972 203d )$/s;. $dir = │ │ │ │ +000007f0: 2027 2f27 2069 6620 2824 6469 7220 6571 '/' if ($dir eq │ │ │ │ +00000800: 2027 2729 3b20 2020 2020 2020 2020 2020 ''); │ │ │ │ +00000810: 2020 2020 2020 2020 2320 6769 6c74 2c20 # gilt, │ │ │ │ +00000820: 6661 6c6c 7320 7a2e 422e 202f 6669 6c65 falls z.B. /file │ │ │ │ +00000830: 6e61 6d65 0a20 2020 2072 6574 7572 6e20 name. return │ │ │ │ +00000840: 2824 6469 722c 2024 6669 6c65 293b 0a7d ($dir, $file);.} │ │ │ │ +00000850: 0a6d 7920 2824 7265 712c 2024 7072 6f67 .my ($req, $prog │ │ │ │ +00000860: 2920 3d20 266c 6962 5061 7468 2824 3029 ) = &libPath($0) │ │ │ │ +00000870: 3b0a 7075 7368 2040 494e 432c 2022 2472 ;.push @INC, "$r │ │ │ │ +00000880: 6571 223b 0a0a 7265 7175 6972 6520 2763 eq";..require 'c │ │ │ │ +00000890: 6865 636b 5061 7261 6d32 2e70 6c27 3b0a heckParam2.pl';. │ │ │ │ +000008a0: 7265 7175 6972 6520 2763 6865 636b 4f62 require 'checkOb │ │ │ │ +000008b0: 6a50 6172 2e70 6c27 3b0a 7265 7175 6972 jPar.pl';.requir │ │ │ │ +000008c0: 6520 2770 724c 6f67 2e70 6c27 3b0a 7265 e 'prLog.pl';.re │ │ │ │ +000008d0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p │ │ │ │ +000008e0: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil │ │ │ │ +000008f0: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir │ │ │ │ +00000900: 6520 2766 6f72 6b50 726f 632e 706c 273b e 'forkProc.pl'; │ │ │ │ +00000910: 0a72 6571 7569 7265 2027 6875 6d61 6e52 .require 'humanR │ │ │ │ +00000920: 6561 642e 706c 273b 0a72 6571 7569 7265 ead.pl';.require │ │ │ │ +00000930: 2027 6461 7465 546f 6f6c 732e 706c 273b 'dateTools.pl'; │ │ │ │ +00000940: 0a72 6571 7569 7265 2027 7374 6f72 6542 .require 'storeB │ │ │ │ +00000950: 6163 6b75 704c 6962 2e70 6c27 3b0a 0a6d ackupLib.pl';..m │ │ │ │ +00000960: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile │ │ │ │ +00000970: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums │ │ │ │ +00000980: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME. │ │ │ │ +00000990: 0a73 746f 7265 4261 636b 7570 5665 7273 .storeBackupVers │ │ │ │ +000009a0: 696f 6e73 2e70 6c20 2d20 6c6f 6361 7465 ions.pl - locate │ │ │ │ +000009b0: 7320 6469 6666 6572 656e 7420 7665 7273 s different vers │ │ │ │ +000009c0: 696f 6e73 206f 6620 6120 6669 6c65 2073 ions of a file s │ │ │ │ +000009d0: 6176 6564 2077 6974 6820 7374 6f72 6542 aved with storeB │ │ │ │ +000009e0: 6163 6b75 702e 706c 2e0a 0a3d 6865 6164 ackup.pl...=head │ │ │ │ +000009f0: 3120 5359 4e4f 5053 4953 0a0a 0973 746f 1 SYNOPSIS...sto │ │ │ │ +00000a00: 7265 4261 636b 7570 5665 7273 696f 6e73 reBackupVersions │ │ │ │ +00000a10: 2e70 6c20 2d66 2066 696c 6520 5b2d 6220 .pl -f file [-b │ │ │ │ +00000a20: 726f 6f74 5d20 205b 2d76 5d0a 0920 5b2d root] [-v].. [- │ │ │ │ +00000a30: 6c20 5b2d 6120 7c20 5b2d 735d 205b 2d75 l [-a | [-s] [-u │ │ │ │ +00000a40: 5d20 5b2d 675d 205b 2d4d 5d20 5b2d 635d ] [-g] [-M] [-c] │ │ │ │ +00000a50: 205b 2d6d 5d5d 5d0a 0a3d 6865 6164 3120 [-m]]]..=head1 │ │ │ │ +00000a60: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8 │ │ │ │ +00000a70: 0a0a 3d69 7465 6d20 423c 2d2d 6669 6c65 ..=item B<--file │ │ │ │ +00000a80: 3e2c 2042 3c2d 663e 0a0a 2020 2020 6669 >, B<-f>.. fi │ │ │ │ +00000a90: 6c65 206e 616d 6520 286e 616d 6520 696e le name (name in │ │ │ │ +00000aa0: 2074 6865 2062 6163 6b75 702c 2070 726f the backup, pro │ │ │ │ +00000ab0: 6261 626c 7920 7769 7468 2073 7566 6669 bably with suffi │ │ │ │ +00000ac0: 780a 2020 2020 6672 6f6d 2063 6f6d 7072 x. from compr │ │ │ │ +00000ad0: 6573 7369 6f6e 290a 0a3d 6974 656d 2042 ession)..=item B │ │ │ │ +00000ae0: 3c2d 2d62 6163 6b75 7052 6f6f 743e 2042 <--backupRoot> B │ │ │ │ +00000af0: 3c2d 623e 0a0a 2020 2020 726f 6f74 206f <-b>.. root o │ │ │ │ +00000b00: 6620 7374 6f72 6542 6163 6b75 7020 7472 f storeBackup tr │ │ │ │ +00000b10: 6565 2c20 6e6f 726d 616c 6c79 206e 6f74 ee, normally not │ │ │ │ +00000b20: 206e 6565 6465 640a 0a3d 6974 656d 2042 needed..=item B │ │ │ │ +00000b30: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<- │ │ │ │ +00000b40: 763e 0a0a 2020 2020 7072 696e 7420 7665 v>.. print ve │ │ │ │ +00000b50: 7262 6f73 6520 6d65 7373 6167 6573 0a0a rbose messages.. │ │ │ │ +00000b60: 3d69 7465 6d20 423c 2d2d 6c6f 6361 7465 =item B<--locate │ │ │ │ +00000b70: 5361 6d65 3e2c 2042 3c2d 6c3e 0a0a 2020 Same>, B<-l>.. │ │ │ │ +00000b80: 2020 6c6f 6361 7465 2073 616d 6520 6669 locate same fi │ │ │ │ +00000b90: 6c65 2077 6974 6820 6f74 6865 7220 6e61 le with other na │ │ │ │ +00000ba0: 6d65 730a 0a3d 6974 656d 2042 3c2d 2d73 mes..=item B<--s │ │ │ │ +00000bb0: 686f 7741 6c6c 3e2c 2042 3c2d 413e 0a0a howAll>, B<-A>.. │ │ │ │ +00000bc0: 2020 2020 7361 6d65 2061 733a 205b 2d73 same as: [-s │ │ │ │ +00000bd0: 202d 7520 2d67 202d 4d20 2d63 202d 6d5d -u -g -M -c -m] │ │ │ │ +00000be0: 0a0a 3d69 7465 6d20 423c 2d2d 7369 7a65 ..=item B<--size │ │ │ │ +00000bf0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 7368 >, B<-s>.. sh │ │ │ │ +00000c00: 6f77 2073 697a 6520 2868 756d 616e 2072 ow size (human r │ │ │ │ +00000c10: 6561 6461 626c 6529 206f 6620 736f 7572 eadable) of sour │ │ │ │ +00000c20: 6365 2066 696c 650a 0a3d 6974 656d 2042 ce file..=item B │ │ │ │ +00000c30: 3c2d 2d75 6964 3e2c 2042 3c2d 753e 0a0a <--uid>, B<-u>.. │ │ │ │ +00000c40: 2020 2020 7368 6f77 2075 6964 206f 6620 show uid of │ │ │ │ +00000c50: 736f 7572 6365 2066 696c 650a 0a3d 6974 source file..=it │ │ │ │ +00000c60: 656d 2042 3c2d 2d67 6964 3e2c 2042 3c2d em B<--gid>, B<- │ │ │ │ +00000c70: 673e 0a0a 2020 2020 7368 6f77 2067 6964 g>.. show gid │ │ │ │ +00000c80: 206f 6620 736f 7572 6365 2066 696c 650a of source file. │ │ │ │ +00000c90: 0a3d 6974 656d 2042 3c2d 2d6d 6f64 653e .=item B<--mode> │ │ │ │ +00000ca0: 2c20 423c 2d4d 3e0a 0a20 2020 2073 686f , B<-M>.. sho │ │ │ │ +00000cb0: 7720 7065 726d 6973 7369 6f6e 7320 6f66 w permissions of │ │ │ │ +00000cc0: 2073 6f75 7263 6520 6669 6c65 0a0a 3d69 source file..=i │ │ │ │ +00000cd0: 7465 6d20 423c 2d2d 6374 696d 653e 2c20 tem B<--ctime>, │ │ │ │ +00000ce0: 423c 2d63 3e0a 0a20 2020 2073 686f 7720 B<-c>.. show │ │ │ │ +00000cf0: 6372 6561 7469 6f6e 2074 696d 6520 6f66 creation time of │ │ │ │ +00000d00: 2073 6f75 7263 6520 6669 6c65 0a0a 3d69 source file..=i │ │ │ │ +00000d10: 7465 6d20 423c 2d2d 6d74 696d 653e 2c20 tem B<--mtime>, │ │ │ │ +00000d20: 423c 2d6d 3e0a 0a20 2020 2073 686f 7720 B<-m>.. show │ │ │ │ +00000d30: 6d6f 6469 6679 2074 696d 6520 6f66 2073 modify time of s │ │ │ │ +00000d40: 6f75 7263 6520 6669 6c65 0a0a 3d69 7465 ource file..=ite │ │ │ │ +00000d50: 6d20 423c 2d2d 6174 696d 653e 2c20 423c m B<--atime>, B< │ │ │ │ +00000d60: 2d61 3e0a 0a20 2020 2073 686f 7720 6163 -a>.. show ac │ │ │ │ +00000d70: 6365 7373 2074 696d 6520 6f66 2073 6f75 cess time of sou │ │ │ │ +00000d80: 7263 6520 6669 6c65 0a0a 3d62 6163 6b0a rce file..=back. │ │ │ │ +00000d90: 0a49 7420 646f 6573 206e 6f74 2061 6c77 .It does not alw │ │ │ │ +00000da0: 6179 7320 776f 726b 2063 6f72 7265 6374 ays work correct │ │ │ │ +00000db0: 6c79 2077 6865 6e20 6120 6669 6c65 2069 ly when a file i │ │ │ │ +00000dc0: 7320 7361 7665 6420 626c 6f63 6b65 6420 s saved blocked │ │ │ │ +00000dd0: 2a61 6e64 2a0a 6e6f 6e2d 626c 6f63 6b65 *and*.non-blocke │ │ │ │ +00000de0: 6420 696e 2064 6966 6665 7265 6e74 2062 d in different b │ │ │ │ +00000df0: 6163 6b75 7073 2e20 496e 2073 7563 6820 ackups. In such │ │ │ │ +00000e00: 6361 7365 732c 2075 7365 206f 7074 696f cases, use optio │ │ │ │ +00000e10: 6e20 423c 2d2d 6c6f 6361 7465 5361 6d65 n B<--locateSame │ │ │ │ +00000e20: 3e2e 0a0a 3d68 6561 6431 2043 4f50 5952 >...=head1 COPYR │ │ │ │ +00000e30: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright │ │ │ │ +00000e40: 2863 2920 3230 3032 2d32 3030 3820 6279 (c) 2002-2008 by │ │ │ │ +00000e50: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla │ │ │ │ +00000e60: 6573 2028 7365 6520 5245 4144 4d45 290a es (see README). │ │ │ │ +00000e70: 5075 626c 6973 6865 6420 756e 6465 7220 Published under │ │ │ │ +00000e80: 7468 6520 474e 5520 4765 6e65 7261 6c20 the GNU General │ │ │ │ +00000e90: 5075 626c 6963 204c 6963 656e 7365 2076 Public License v │ │ │ │ +00000ea0: 3320 6f72 2061 6e79 206c 6174 6572 2076 3 or any later v │ │ │ │ +00000eb0: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my │ │ │ │ +00000ec0: 2024 4865 6c70 203d 206a 6f69 6e28 2727 $Help = join('' │ │ │ │ +00000ed0: 2c20 6772 6570 2821 2f5e 5c73 2a24 2f2c , grep(!/^\s*$/, │ │ │ │ +00000ee0: 2060 706f 6432 7465 7874 2024 3060 2929 `pod2text $0`)) │ │ │ │ +00000ef0: 3b0a 2448 656c 7020 3d20 2263 616e 6e6f ;.$Help = "canno │ │ │ │ +00000f00: 7420 6669 6e64 2070 6f64 3274 6578 742c t find pod2text, │ │ │ │ +00000f10: 2073 6565 2064 6f63 756d 656e 7461 7469 see documentati │ │ │ │ +00000f20: 6f6e 2066 6f72 2064 6574 6169 6c73 5c6e on for details\n │ │ │ │ +00000f30: 220a 2020 2020 756e 6c65 7373 2024 4865 ". unless $He │ │ │ │ +00000f40: 6c70 3b0a 0a26 7072 696e 7456 6572 7369 lp;..&printVersi │ │ │ │ +00000f50: 6f6e 7328 5c40 4152 4756 2c20 272d 5627 ons(\@ARGV, '-V' │ │ │ │ +00000f60: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar │ │ │ │ +00000f70: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara │ │ │ │ +00000f80: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi │ │ │ │ +00000f90: 7374 7327 203d 3e20 276e 6f27 2c0a 0909 sts' => 'no',... │ │ │ │ +00000fa0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [ │ │ │ │ +00000fb0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +00000fc0: 6d65 2720 3d3e 2027 6669 6c65 272c 0a09 me' => 'file',.. │ │ │ │ +00000fd0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ │ +00000fe0: 696f 6e27 203d 3e20 272d 6627 2c0a 0909 ion' => '-f',... │ │ │ │ +00000ff0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ │ +00001000: 7327 203d 3e20 272d 2d66 696c 6527 2c0a s' => '--file',. │ │ │ │ +00001010: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param │ │ │ │ +00001020: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',..... │ │ │ │ +00001030: 0920 2020 2027 2d6d 7573 745f 6265 2720 . '-must_be' │ │ │ │ +00001040: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O │ │ │ │ +00001050: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +00001060: 6527 203d 3e20 2762 6163 6b75 7052 6f6f e' => 'backupRoo │ │ │ │ +00001070: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ │ +00001080: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b │ │ │ │ +00001090: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +000010a0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba │ │ │ │ +000010b0: 636b 7570 526f 6f74 272c 0a09 0909 0909 ckupRoot',...... │ │ │ │ +000010c0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' = │ │ │ │ +000010d0: 3e20 2727 292c 0a09 0909 094f 7074 696f > ''),.....Optio │ │ │ │ +000010e0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +000010f0: 3e20 2776 6572 626f 7365 272c 0a09 0909 > 'verbose',.... │ │ │ │ +00001100: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001110: 6e27 203d 3e20 272d 7627 2c0a 0909 0909 n' => '-v',..... │ │ │ │ +00001120: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +00001130: 203d 3e20 272d 2d76 6572 626f 7365 2729 => '--verbose') │ │ │ │ +00001140: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +00001150: 7728 272d 6e61 6d65 2720 3d3e 2027 6c6f w('-name' => 'lo │ │ │ │ +00001160: 6361 7465 5361 6d65 272c 0a09 0909 0909 cateSame',...... │ │ │ │ +00001170: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001180: 203d 3e20 272d 6c27 2c0a 0909 0909 0920 => '-l',...... │ │ │ │ +00001190: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +000011a0: 3e20 272d 2d6c 6f63 6174 6553 616d 6527 > '--locateSame' │ │ │ │ +000011b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +000011c0: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's │ │ │ │ +000011d0: 686f 7741 6c6c 272c 0a09 0909 0909 2020 howAll',...... │ │ │ │ +000011e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +000011f0: 3e20 272d 4127 2c0a 0909 0909 0920 2020 > '-A',...... │ │ │ │ +00001200: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ │ +00001210: 272d 2d73 686f 7741 6c6c 272c 0a09 0909 '--showAll',.... │ │ │ │ +00001220: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if' │ │ │ │ +00001230: 203d 3e20 275b 6c6f 6361 7465 5361 6d65 => '[locateSame │ │ │ │ +00001240: 5d27 2c0a 0909 0909 0920 2020 2027 2d63 ]',...... '-c │ │ │ │ +00001250: 6f6d 6d65 6e74 2720 3d3e 0a09 0909 0922 omment' =>....." │ │ │ │ +00001260: 2d73 2063 616e 206f 6e6c 7920 6265 2075 -s can only be u │ │ │ │ +00001270: 7365 2069 6e20 636f 6e6a 756e 6374 696f se in conjunctio │ │ │ │ +00001280: 6e20 7769 7468 202d 6c5c 6e22 292c 0a09 n with -l\n"),.. │ │ │ │ +00001290: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ │ +000012a0: 2d6e 616d 6527 203d 3e20 2773 697a 6527 -name' => 'size' │ │ │ │ +000012b0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +000012c0: 6f70 7469 6f6e 2720 3d3e 2027 2d73 272c option' => '-s', │ │ │ │ +000012d0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ │ +000012e0: 6c69 6173 2720 3d3e 2027 2d2d 7369 7a65 lias' => '--size │ │ │ │ +000012f0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ │ +00001300: 6c79 5f69 6627 203d 3e0a 0909 0909 0920 ly_if' =>...... │ │ │ │ +00001310: 2020 2027 5b6c 6f63 6174 6553 616d 655d '[locateSame] │ │ │ │ +00001320: 2061 6e64 206e 6f74 205b 7368 6f77 416c and not [showAl │ │ │ │ +00001330: 6c5d 2729 2c0a 0909 0909 4f70 7469 6f6e l]'),.....Option │ │ │ │ +00001340: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001350: 2027 7569 6427 2c0a 0909 0909 0920 2020 'uid',...... │ │ │ │ +00001360: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ │ +00001370: 2027 2d75 272c 0a09 0909 0909 2020 2020 '-u',...... │ │ │ │ +00001380: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ │ +00001390: 2d2d 7569 6427 2c0a 0909 0909 0920 2020 --uid',...... │ │ │ │ +000013a0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>.. │ │ │ │ +000013b0: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate │ │ │ │ +000013c0: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s │ │ │ │ +000013d0: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O │ │ │ │ +000013e0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ │ +000013f0: 6527 203d 3e20 2767 6964 272c 0a09 0909 e' => 'gid',.... │ │ │ │ +00001400: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +00001410: 6e27 203d 3e20 272d 6727 2c0a 0909 0909 n' => '-g',..... │ │ │ │ +00001420: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +00001430: 203d 3e20 272d 2d67 6964 272c 0a09 0909 => '--gid',.... │ │ │ │ +00001440: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if' │ │ │ │ +00001450: 203d 3e0a 0909 0909 0920 2020 2027 5b6c =>...... '[l │ │ │ │ +00001460: 6f63 6174 6553 616d 655d 2061 6e64 206e ocateSame] and n │ │ │ │ +00001470: 6f74 205b 7368 6f77 416c 6c5d 2729 2c0a ot [showAll]'),. │ │ │ │ +00001480: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +00001490: 272d 6e61 6d65 2720 3d3e 2027 6d6f 6465 '-name' => 'mode │ │ │ │ +000014a0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +000014b0: 5f6f 7074 696f 6e27 203d 3e20 272d 4d27 _option' => '-M' │ │ │ │ +000014c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +000014d0: 616c 6961 7327 203d 3e20 272d 2d6d 6f64 alias' => '--mod │ │ │ │ +000014e0: 6527 2c0a 0909 0909 0920 2020 2027 2d6f e',...... '-o │ │ │ │ +000014f0: 6e6c 795f 6966 2720 3d3e 0a09 0909 0909 nly_if' =>...... │ │ │ │ +00001500: 2020 2020 275b 6c6f 6361 7465 5361 6d65 '[locateSame │ │ │ │ +00001510: 5d20 616e 6420 6e6f 7420 5b73 686f 7741 ] and not [showA │ │ │ │ +00001520: 6c6c 5d27 292c 0a09 0909 094f 7074 696f ll]'),.....Optio │ │ │ │ +00001530: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001540: 3e20 2763 7469 6d65 272c 0a09 0909 0909 > 'ctime',...... │ │ │ │ +00001550: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ │ +00001560: 203d 3e20 272d 6327 2c0a 0909 0909 0920 => '-c',...... │ │ │ │ +00001570: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ │ +00001580: 3e20 272d 2d63 7469 6d65 272c 0a09 0909 > '--ctime',.... │ │ │ │ +00001590: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if' │ │ │ │ +000015a0: 203d 3e0a 0909 0909 0920 2020 2027 5b6c =>...... '[l │ │ │ │ +000015b0: 6f63 6174 6553 616d 655d 2061 6e64 206e ocateSame] and n │ │ │ │ +000015c0: 6f74 205b 7368 6f77 416c 6c5d 2729 2c0a ot [showAll]'),. │ │ │ │ +000015d0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ │ +000015e0: 272d 6e61 6d65 2720 3d3e 2027 6d74 696d '-name' => 'mtim │ │ │ │ +000015f0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ │ +00001600: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d6d l_option' => '-m │ │ │ │ +00001610: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001620: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6d74 _alias' => '--mt │ │ │ │ +00001630: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... ' │ │ │ │ +00001640: 2d6f 6e6c 795f 6966 2720 3d3e 0a09 0909 -only_if' =>.... │ │ │ │ +00001650: 0909 2020 2020 275b 6c6f 6361 7465 5361 .. '[locateSa │ │ │ │ +00001660: 6d65 5d20 616e 6420 6e6f 7420 5b73 686f me] and not [sho │ │ │ │ +00001670: 7741 6c6c 5d27 292c 0a09 0909 094f 7074 wAll]'),.....Opt │ │ │ │ +00001680: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +00001690: 203d 3e20 2761 7469 6d65 272c 0a09 0909 => 'atime',.... │ │ │ │ +000016a0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ │ +000016b0: 6e27 203d 3e20 272d 6127 2c0a 0909 0909 n' => '-a',..... │ │ │ │ +000016c0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ │ +000016d0: 203d 3e20 272d 2d61 7469 6d65 272c 0a09 => '--atime',.. │ │ │ │ +000016e0: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ │ +000016f0: 6627 203d 3e0a 0909 0909 0920 2020 2027 f' =>...... ' │ │ │ │ +00001700: 5b6c 6f63 6174 6553 616d 655d 2061 6e64 [locateSame] and │ │ │ │ +00001710: 206e 6f74 205b 7368 6f77 416c 6c5d 2729 not [showAll]') │ │ │ │ +00001720: 0a09 0909 095d 0a09 0920 2020 2029 3b0a .....]... );. │ │ │ │ +00001730: 0a24 4368 6563 6b50 6172 2d3e 6368 6563 .$CheckPar->chec │ │ │ │ +00001740: 6b28 272d 6172 6776 2720 3d3e 205c 4041 k('-argv' => \@A │ │ │ │ +00001750: 5247 562c 0a20 2020 2020 2020 2020 2020 RGV,. │ │ │ │ +00001760: 2020 2020 2020 272d 6865 6c70 2720 3d3e '-help' => │ │ │ │ +00001770: 2024 4865 6c70 0a20 2020 2020 2020 2020 $Help. │ │ │ │ +00001780: 2020 2020 2020 2020 293b 0a0a 2320 4175 );..# Au │ │ │ │ +00001790: 7377 6572 7475 6e67 2064 6572 2050 6172 swertung der Par │ │ │ │ +000017a0: 616d 6574 6572 0a6d 7920 2466 696c 6520 ameter.my $file │ │ │ │ +000017b0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000017c0: 4f70 7457 6974 6850 6172 2827 6669 6c65 OptWithPar('file │ │ │ │ +000017d0: 2729 3b0a 6d79 2024 7665 7262 6f73 6520 ');.my $verbose │ │ │ │ +000017e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +000017f0: 4f70 7457 6974 686f 7574 5061 7228 2776 OptWithoutPar('v │ │ │ │ +00001800: 6572 626f 7365 2729 3b0a 6d79 2024 6261 erbose');.my $ba │ │ │ │ +00001810: 636b 7570 526f 6f74 203d 2024 4368 6563 ckupRoot = $Chec │ │ │ │ +00001820: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00001830: 5061 7228 2762 6163 6b75 7052 6f6f 7427 Par('backupRoot' │ │ │ │ +00001840: 293b 0a6d 7920 246c 6f63 6174 6553 616d );.my $locateSam │ │ │ │ +00001850: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ │ +00001860: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ │ +00001870: 276c 6f63 6174 6553 616d 6527 293b 0a6d 'locateSame');.m │ │ │ │ +00001880: 7920 2473 686f 7741 6c6c 203d 2024 4368 y $showAll = $Ch │ │ │ │ +00001890: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +000018a0: 7468 6f75 7450 6172 2827 7368 6f77 416c thoutPar('showAl │ │ │ │ +000018b0: 6c27 293b 0a6d 7920 2473 686f 7753 697a l');.my $showSiz │ │ │ │ +000018c0: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ │ +000018d0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ │ +000018e0: 2773 697a 6527 2920 7c20 2473 686f 7741 'size') | $showA │ │ │ │ +000018f0: 6c6c 3b0a 6d79 2024 7368 6f77 5549 4420 ll;.my $showUID │ │ │ │ +00001900: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ │ +00001910: 4f70 7457 6974 686f 7574 5061 7228 2775 OptWithoutPar('u │ │ │ │ +00001920: 6964 2729 207c 2024 7368 6f77 416c 6c3b id') | $showAll; │ │ │ │ +00001930: 0a6d 7920 2473 686f 7747 4944 203d 2024 .my $showGID = $ │ │ │ │ +00001940: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001950: 5769 7468 6f75 7450 6172 2827 6769 6427 WithoutPar('gid' │ │ │ │ +00001960: 2920 7c20 2473 686f 7741 6c6c 3b0a 6d79 ) | $showAll;.my │ │ │ │ +00001970: 2024 7368 6f77 4d6f 6465 203d 2024 4368 $showMode = $Ch │ │ │ │ +00001980: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00001990: 7468 6f75 7450 6172 2827 6d6f 6465 2729 thoutPar('mode') │ │ │ │ +000019a0: 207c 2024 7368 6f77 416c 6c3b 0a6d 7920 | $showAll;.my │ │ │ │ +000019b0: 2473 686f 7743 5469 6d65 203d 2024 4368 $showCTime = $Ch │ │ │ │ +000019c0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +000019d0: 7468 6f75 7450 6172 2827 6374 696d 6527 thoutPar('ctime' │ │ │ │ +000019e0: 2920 7c20 2473 686f 7741 6c6c 3b0a 6d79 ) | $showAll;.my │ │ │ │ +000019f0: 2024 7368 6f77 4d54 696d 6520 3d20 2443 $showMTime = $C │ │ │ │ +00001a00: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00001a10: 6974 686f 7574 5061 7228 276d 7469 6d65 ithoutPar('mtime │ │ │ │ +00001a20: 2729 207c 2024 7368 6f77 416c 6c3b 0a6d ') | $showAll;.m │ │ │ │ +00001a30: 7920 2473 686f 7741 5469 6d65 203d 2024 y $showATime = $ │ │ │ │ +00001a40: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001a50: 5769 7468 6f75 7450 6172 2827 6174 696d WithoutPar('atim │ │ │ │ +00001a60: 6527 2920 7c20 2473 686f 7741 6c6c 3b0a e') | $showAll;. │ │ │ │ +00001a70: 0a6d 7920 2466 203d 2024 6669 6c65 3b0a .my $f = $file;. │ │ │ │ +00001a80: 6d79 2024 6669 6c65 203d 2026 6162 736f my $file = &abso │ │ │ │ +00001a90: 6c75 7465 5061 7468 2824 6669 6c65 293b lutePath($file); │ │ │ │ +00001aa0: 0a0a 6d79 2024 7072 4c6f 6720 3d20 7072 ..my $prLog = pr │ │ │ │ +00001ab0: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki │ │ │ │ +00001ac0: 6e64 2720 3d3e 205b 2749 3a49 4e46 4f27 nd' => ['I:INFO' │ │ │ │ +00001ad0: 2c20 2757 3a57 4152 4e49 4e47 272c 2027 , 'W:WARNING', ' │ │ │ │ +00001ae0: 453a 4552 524f 5227 2c0a 0909 0909 2020 E:ERROR',..... │ │ │ │ +00001af0: 2020 2020 2753 3a53 5441 5449 5354 4943 'S:STATISTIC │ │ │ │ +00001b00: 272c 2027 443a 4445 4255 4727 2c20 2756 ', 'D:DEBUG', 'V │ │ │ │ +00001b10: 3a56 4552 5349 4f4e 275d 293b 0a0a 2470 :VERSION']);..$p │ │ │ │ +00001b20: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +00001b30: 6e64 2720 3d3e 2027 5627 2c0a 0920 2020 nd' => 'V',.. │ │ │ │ +00001b40: 2020 2027 2d73 7472 2720 3d3e 205b 2224 '-str' => ["$ │ │ │ │ +00001b50: 5645 5253 494f 4e70 4e61 6d65 2c20 246d VERSIONpName, $m │ │ │ │ +00001b60: 6169 6e3a 3a53 544f 5245 4241 434b 5550 ain::STOREBACKUP │ │ │ │ +00001b70: 5645 5253 494f 4e2c 2022 202e 0a09 0909 VERSION, " ..... │ │ │ │ +00001b80: 2022 6275 696c 6420 2456 4552 5349 4f4e "build $VERSION │ │ │ │ +00001b90: 7376 6e49 4422 5d29 0a20 2020 2069 6620 svnID"]). if │ │ │ │ +00001ba0: 2476 6572 626f 7365 3b0a 0a23 0a23 206d $verbose;..#.# m │ │ │ │ +00001bb0: 6435 4368 6563 6b53 756d 202d 2044 6174 d5CheckSum - Dat │ │ │ │ +00001bc0: 6569 2066 696e 6465 6e0a 2470 724c 6f67 ei finden.$prLog │ │ │ │ +00001bd0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00001be0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. ' │ │ │ │ +00001bf0: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => ["file │ │ │ │ +00001c00: 3c24 663e 2064 6f65 7320 6e6f 7420 6578 <$f> does not ex │ │ │ │ +00001c10: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist"],.. '- │ │ │ │ +00001c20: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ │ +00001c30: 756e 6c65 7373 2028 2d66 2024 6620 6f72 unless (-f $f or │ │ │ │ +00001c40: 202d 6420 2466 293b 0a0a 6966 2028 2462 -d $f);..if ($b │ │ │ │ +00001c50: 6163 6b75 7052 6f6f 7429 0a7b 0a20 2020 ackupRoot).{. │ │ │ │ +00001c60: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00001c70: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00001c80: 0920 2027 2d73 7472 2720 3d3e 205b 2264 . '-str' => ["d │ │ │ │ +00001c90: 6972 6563 746f 7279 203c 2462 6163 6b75 irectory <$backu │ │ │ │ +00001ca0: 7052 6f6f 743e 2064 6f65 7320 6e6f 7420 pRoot> does not │ │ │ │ +00001cb0: 6578 6973 7422 5d2c 0a09 0920 2027 2d65 exist"],... '-e │ │ │ │ +00001cc0: 7869 7427 203d 3e20 3129 0a09 756e 6c65 xit' => 1)..unle │ │ │ │ +00001cd0: 7373 2028 2d64 2024 6261 636b 7570 526f ss (-d $backupRo │ │ │ │ +00001ce0: 6f74 293b 0a20 2020 2024 6261 636b 7570 ot);. $backup │ │ │ │ +00001cf0: 526f 6f74 203d 2026 6162 736f 6c75 7465 Root = &absolute │ │ │ │ +00001d00: 5061 7468 2824 6261 636b 7570 526f 6f74 Path($backupRoot │ │ │ │ +00001d10: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. │ │ │ │ +00001d20: 6d79 2028 2464 6972 2c20 2478 2920 3d20 my ($dir, $x) = │ │ │ │ +00001d30: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ │ +00001d40: 696c 6529 3b0a 2020 2020 2462 6163 6b75 ile);. $backu │ │ │ │ +00001d50: 7052 6f6f 7420 3d20 756e 6465 663b 0a20 pRoot = undef;. │ │ │ │ +00001d60: 2020 2064 6f0a 2020 2020 7b0a 0923 2066 do. {..# f │ │ │ │ +00001d70: 6573 7473 7465 6c6c 656e 2c20 6f62 2065 eststellen, ob e │ │ │ │ +00001d80: 696e 6520 2e6d 6435 7375 6d20 4461 7465 ine .md5sum Date │ │ │ │ +00001d90: 6920 766f 7268 616e 6465 6e20 6973 740a i vorhanden ist. │ │ │ │ +00001da0: 0969 6620 282d 6620 2224 6469 722f 2463 .if (-f "$dir/$c │ │ │ │ +00001db0: 6865 636b 5375 6d46 696c 6522 206f 7220 heckSumFile" or │ │ │ │ +00001dc0: 2d66 2022 2464 6972 2f24 6368 6563 6b53 -f "$dir/$checkS │ │ │ │ +00001dd0: 756d 4669 6c65 2e62 7a32 2229 0a09 7b0a umFile.bz2")..{. │ │ │ │ +00001de0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ │ +00001df0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ │ +00001e00: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ │ +00001e10: 3e20 5b22 666f 756e 6420 696e 666f 2066 > ["found info f │ │ │ │ +00001e20: 696c 6520 3c24 6368 6563 6b53 756d 4669 ile <$checkSumFi │ │ │ │ +00001e30: 6c65 3e20 696e 2022 202e 0a09 0909 0920 le> in " ...... │ │ │ │ +00001e40: 2020 2020 2264 6972 6563 746f 7279 203c "directory < │ │ │ │ +00001e50: 2464 6972 3e22 5d29 0a09 0969 6620 2824 $dir>"])...if ($ │ │ │ │ +00001e60: 7665 7262 6f73 6529 3b0a 0920 2020 2024 verbose);.. $ │ │ │ │ +00001e70: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00001e80: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ │ +00001e90: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ │ +00001ea0: 205b 2266 6f75 6e64 2069 6e66 6f20 6669 ["found info fi │ │ │ │ +00001eb0: 6c65 203c 2463 6865 636b 5375 6d46 696c le <$checkSumFil │ │ │ │ +00001ec0: 653e 2061 2073 6563 6f6e 6420 7469 6d65 e> a second time │ │ │ │ +00001ed0: 2069 6e20 2220 2e0a 0909 0920 2020 223c in " ..... "< │ │ │ │ +00001ee0: 2464 6972 3e2c 2066 6972 7374 2074 696d $dir>, first tim │ │ │ │ +00001ef0: 6520 666f 756e 6420 696e 203c 2462 6163 e found in <$bac │ │ │ │ +00001f00: 6b75 7052 6f6f 743e 225d 2c0a 0909 0920 kupRoot>"],.... │ │ │ │ +00001f10: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1).. │ │ │ │ +00001f20: 0969 6620 2824 6261 636b 7570 526f 6f74 .if ($backupRoot │ │ │ │ +00001f30: 293b 0a0a 0920 2020 2024 6261 636b 7570 );... $backup │ │ │ │ +00001f40: 526f 6f74 203d 2024 6469 723b 0a09 7d0a Root = $dir;..}. │ │ │ │ +00001f50: 0a09 2824 6469 722c 2024 7829 203d 2026 ..($dir, $x) = & │ │ │ │ +00001f60: 7370 6c69 7446 696c 6544 6972 2824 6469 splitFileDir($di │ │ │ │ +00001f70: 7229 3b0a 2020 2020 7d20 7768 696c 6520 r);. } while │ │ │ │ +00001f80: 2824 6469 7220 6e65 2027 2f27 293b 0a0a ($dir ne '/');.. │ │ │ │ +00001f90: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ │ +00001fa0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ │ +00001fb0: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => │ │ │ │ +00001fc0: 5b22 6469 6420 6e6f 7420 6669 6e64 2069 ["did not find i │ │ │ │ +00001fd0: 6e66 6f20 6669 6c65 203c 2463 6865 636b nfo file <$check │ │ │ │ +00001fe0: 5375 6d46 696c 653e 225d 2c0a 0909 2020 SumFile>"],... │ │ │ │ +00001ff0: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u │ │ │ │ +00002000: 6e6c 6573 7320 2824 6261 636b 7570 526f nless ($backupRo │ │ │ │ +00002010: 6f74 293b 0a7d 0a0a 6d79 2024 6368 6563 ot);.}..my $chec │ │ │ │ +00002020: 6b53 756d 4669 6c65 526f 6f74 203d 2024 kSumFileRoot = $ │ │ │ │ +00002030: 6368 6563 6b53 756d 4669 6c65 3b0a 2463 checkSumFile;.$c │ │ │ │ +00002040: 6865 636b 5375 6d46 696c 6552 6f6f 7420 heckSumFileRoot │ │ │ │ +00002050: 2e3d 2022 2e62 7a32 2220 6966 2028 2d66 .= ".bz2" if (-f │ │ │ │ +00002060: 2022 2462 6163 6b75 7052 6f6f 742f 2463 "$backupRoot/$c │ │ │ │ +00002070: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2" │ │ │ │ +00002080: 293b 0a24 7072 4c6f 672d 3e70 7269 6e74 );.$prLog->print │ │ │ │ +00002090: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ │ +000020a0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +000020b0: 3e20 5b22 6e6f 2069 6e66 6f20 6669 6c65 > ["no info file │ │ │ │ +000020c0: 203c 2463 6865 636b 5375 6d46 696c 6552 <$checkSumFileR │ │ │ │ +000020d0: 6f6f 743e 2069 6e20 3c24 6261 636b 7570 oot> in <$backup │ │ │ │ +000020e0: 526f 6f74 3e22 5d2c 0a09 2020 2020 2020 Root>"],.. │ │ │ │ +000020f0: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). │ │ │ │ +00002100: 2020 756e 6c65 7373 282d 6620 2224 6261 unless(-f "$ba │ │ │ │ +00002110: 636b 7570 526f 6f74 2f24 6368 6563 6b53 ckupRoot/$checkS │ │ │ │ +00002120: 756d 4669 6c65 526f 6f74 2229 3b0a 0a23 umFileRoot");..# │ │ │ │ +00002130: 206a 6574 7a74 2024 7265 7374 6f72 6554 jetzt $restoreT │ │ │ │ +00002140: 7265 6520 7265 6c61 7469 7620 7a75 2024 ree relativ zu $ │ │ │ │ +00002150: 6261 636b 7570 526f 6f74 206d 6163 6865 backupRoot mache │ │ │ │ +00002160: 6e0a 6d79 2024 6669 6c65 5769 7468 5265 n.my $fileWithRe │ │ │ │ +00002170: 6c50 6174 6820 3d20 7375 6273 7472 2824 lPath = substr($ │ │ │ │ +00002180: 6669 6c65 2c20 6c65 6e67 7468 2824 6261 file, length($ba │ │ │ │ +00002190: 636b 7570 526f 6f74 2920 2b20 3129 3b0a ckupRoot) + 1);. │ │ │ │ +000021a0: 6d79 2028 2473 746f 7265 4261 636b 7570 my ($storeBackup │ │ │ │ +000021b0: 416c 6c54 7265 6573 2c20 2466 696c 6544 AllTrees, $fileD │ │ │ │ +000021c0: 6174 6544 6972 2920 3d20 2673 706c 6974 ateDir) = &split │ │ │ │ +000021d0: 4669 6c65 4469 7228 2462 6163 6b75 7052 FileDir($backupR │ │ │ │ +000021e0: 6f6f 7429 3b0a 0a23 205e 5e5e 0a23 2042 oot);..# ^^^.# B │ │ │ │ +000021f0: 6569 7370 6965 6c3a 2020 2020 2020 2020 eispiel: │ │ │ │ +00002200: 2020 2020 282f 746d 702f 7374 6275 2f32 (/tmp/stbu/2 │ │ │ │ +00002210: 3030 312e 3132 2e32 305f 3136 2e32 312e 001.12.20_16.21. │ │ │ │ +00002220: 3539 2f70 6572 6c2f 4a75 6c69 616e 2e63 59/perl/Julian.c │ │ │ │ +00002230: 2e62 7a32 290a 2320 2462 6163 6b75 7052 .bz2).# $backupR │ │ │ │ +00002240: 6f6f 7420 6265 696e 6861 6c74 6574 206a oot beinhaltet j │ │ │ │ +00002250: 6574 7a74 2064 656e 2050 6661 6420 7a75 etzt den Pfad zu │ │ │ │ +00002260: 6d20 4172 6368 6976 0a23 2020 2020 2020 m Archiv.# │ │ │ │ +00002270: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002280: 282f 746d 702f 7374 6275 2f32 3030 312e (/tmp/stbu/2001. │ │ │ │ +00002290: 3132 2e32 305f 3136 2e32 312e 3539 290a 12.20_16.21.59). │ │ │ │ +000022a0: 2320 2466 696c 6520 6265 696e 6861 6c74 # $file beinhalt │ │ │ │ +000022b0: 6574 2064 6965 2044 6174 6569 206d 6974 et die Datei mit │ │ │ │ +000022c0: 206b 6f6d 706c 6574 7465 6e2c 2061 6273 kompletten, abs │ │ │ │ +000022d0: 6f6c 7574 656e 2050 6661 640a 2320 2020 oluten Pfad.# │ │ │ │ +000022e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000022f0: 2020 2028 2f74 6d70 2f73 7462 752f 3230 (/tmp/stbu/20 │ │ │ │ +00002300: 3031 2e31 322e 3230 5f31 362e 3231 2e35 01.12.20_16.21.5 │ │ │ │ +00002310: 392f 7065 726c 2f4a 756c 6961 6e2e 632e 9/perl/Julian.c. │ │ │ │ +00002320: 627a 3229 0a23 2024 6669 6c65 5769 7468 bz2).# $fileWith │ │ │ │ +00002330: 5265 6c50 6174 6820 6265 696e 6861 6c74 RelPath beinhalt │ │ │ │ +00002340: 6574 206a 6574 7a74 2064 656e 2072 656c et jetzt den rel │ │ │ │ +00002350: 6174 6976 656e 2050 6661 6420 696e 6e65 ativen Pfad inne │ │ │ │ +00002360: 7268 616c 6220 6465 7320 4172 6368 6976 rhalb des Archiv │ │ │ │ +00002370: 730a 2320 2020 2020 2020 2020 2020 2020 s.# │ │ │ │ +00002380: 2020 2020 2020 2020 2028 7065 726c 2f4a (perl/J │ │ │ │ +00002390: 756c 6961 6e2e 632e 627a 3229 0a23 2024 ulian.c.bz2).# $ │ │ │ │ +000023a0: 7374 6f72 6542 6163 6b75 7041 6c6c 5472 storeBackupAllTr │ │ │ │ +000023b0: 6565 7320 6265 696e 6861 6c74 6574 2064 ees beinhaltet d │ │ │ │ +000023c0: 656e 2052 6f6f 742d 5066 6164 2064 6573 en Root-Pfad des │ │ │ │ +000023d0: 2073 746f 7265 4261 636b 7570 2028 6f62 storeBackup (ob │ │ │ │ +000023e0: 6572 6861 6c62 0a23 2020 2020 2020 6465 erhalb.# de │ │ │ │ +000023f0: 7220 4461 7475 6d20 4469 7265 6374 6f72 r Datum Director │ │ │ │ +00002400: 6965 7329 0a23 2020 2020 2020 2020 2020 ies).# │ │ │ │ +00002410: 2020 2020 2020 2020 2020 2020 282f 746d (/tm │ │ │ │ +00002420: 702f 7374 6275 290a 2320 2466 696c 6544 p/stbu).# $fileD │ │ │ │ +00002430: 6174 6544 6972 2062 6569 6e68 616c 7465 ateDir beinhalte │ │ │ │ +00002440: 7420 6465 6e20 4e61 6d65 6e20 6465 7320 t den Namen des │ │ │ │ +00002450: 4461 7475 6d2d 4469 7273 2064 6573 2067 Datum-Dirs des g │ │ │ │ +00002460: 6573 7563 6874 656e 2066 696c 6573 0a23 esuchten files.# │ │ │ │ +00002470: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002480: 2020 2020 2020 2832 3030 312e 3132 2e32 (2001.12.2 │ │ │ │ +00002490: 305f 3136 2e32 312e 3539 290a 0a23 7072 0_16.21.59)..#pr │ │ │ │ +000024a0: 696e 7420 2262 6163 6b75 7052 6f6f 7420 int "backupRoot │ │ │ │ +000024b0: 3d20 2462 6163 6b75 7052 6f6f 745c 6e22 = $backupRoot\n" │ │ │ │ +000024c0: 3b0a 2370 7269 6e74 2022 6669 6c65 203d ;.#print "file = │ │ │ │ +000024d0: 2024 6669 6c65 5c6e 223b 0a23 7072 696e $file\n";.#prin │ │ │ │ +000024e0: 7420 2266 696c 6557 6974 6852 656c 5061 t "fileWithRelPa │ │ │ │ +000024f0: 7468 203d 2024 6669 6c65 5769 7468 5265 th = $fileWithRe │ │ │ │ +00002500: 6c50 6174 685c 6e22 3b0a 2370 7269 6e74 lPath\n";.#print │ │ │ │ +00002510: 2022 7374 6f72 6542 6163 6b75 7041 6c6c "storeBackupAll │ │ │ │ +00002520: 5472 6565 7320 3d20 2473 746f 7265 4261 Trees = $storeBa │ │ │ │ +00002530: 636b 7570 416c 6c54 7265 6573 5c6e 223b ckupAllTrees\n"; │ │ │ │ +00002540: 0a23 7072 696e 7420 2266 696c 6544 6174 .#print "fileDat │ │ │ │ +00002550: 6544 6972 203d 2024 6669 6c65 4461 7465 eDir = $fileDate │ │ │ │ +00002560: 4469 725c 6e5c 6e22 3b0a 0a0a 2470 724c Dir\n\n";...$prL │ │ │ │ +00002570: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ │ +00002580: 2720 3d3e 2027 4927 2c0a 0920 2020 2020 ' => 'I',.. │ │ │ │ +00002590: 2027 2d73 7472 2720 3d3e 205b 2263 6865 '-str' => ["che │ │ │ │ +000025a0: 636b 696e 6720 666f 7220 3c24 6669 6c65 cking for <$file │ │ │ │ +000025b0: 5769 7468 5265 6c50 6174 683e 225d 290a WithRelPath>"]). │ │ │ │ +000025c0: 2020 2020 6966 2024 7665 7262 6f73 653b if $verbose; │ │ │ │ +000025d0: 0a0a 2320 5665 7273 696f 6e73 2d44 6972 ..# Versions-Dir │ │ │ │ +000025e0: 6563 746f 7269 6573 2075 6e74 6572 2024 ectories unter $ │ │ │ │ +000025f0: 6261 636b 7570 526f 6f74 2065 696e 6c65 backupRoot einle │ │ │ │ +00002600: 7365 6e0a 6d79 2028 4061 6c6c 4469 7273 sen.my (@allDirs │ │ │ │ +00002610: 2920 3d20 2826 3a3a 7265 6164 416c 6c42 ) = (&::readAllB │ │ │ │ +00002620: 6163 6b75 7044 6972 7328 2473 746f 7265 ackupDirs($store │ │ │ │ +00002630: 4261 636b 7570 416c 6c54 7265 6573 2c20 BackupAllTrees, │ │ │ │ +00002640: 2470 724c 6f67 2c20 3129 293b 0a23 7072 $prLog, 1));.#pr │ │ │ │ +00002650: 696e 7420 2261 6c6c 4469 7273 203d 5c6e int "allDirs =\n │ │ │ │ +00002660: 222c 206a 6f69 6e28 225c 6e22 2c20 4061 ", join("\n", @a │ │ │ │ +00002670: 6c6c 4469 7273 292c 2022 5c6e 223b 0a0a llDirs), "\n";.. │ │ │ │ +00002680: 2320 6368 6563 6b20 666f 7220 6c61 7465 # check for late │ │ │ │ +00002690: 4c69 6e6b 730a 6d79 2028 256c 696e 6b46 Links.my (%linkF │ │ │ │ +000026a0: 696c 6529 3b0a 6d79 2028 2464 2c20 4064 ile);.my ($d, @d │ │ │ │ +000026b0: 293b 0a66 6f72 6561 6368 2024 6420 2840 );.foreach $d (@ │ │ │ │ +000026c0: 616c 6c44 6972 7329 0a7b 0a20 2020 2069 allDirs).{. i │ │ │ │ +000026d0: 6620 282d 6520 2224 642f 2e73 746f 7265 f (-e "$d/.store │ │ │ │ +000026e0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link │ │ │ │ +000026f0: 4669 6c65 2e62 7a32 2229 0a20 2020 207b File.bz2"). { │ │ │ │ +00002700: 0a09 7075 7368 2040 642c 2022 2020 2464 ..push @d, " $d │ │ │ │ +00002710: 223b 0a09 246c 696e 6b46 696c 657b 2464 ";..$linkFile{$d │ │ │ │ +00002720: 7d20 3d20 313b 0a20 2020 207d 0a7d 0a24 } = 1;. }.}.$ │ │ │ │ +00002730: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ │ +00002740: 696e 6427 203d 3e20 2757 272c 0a09 2020 ind' => 'W',.. │ │ │ │ +00002750: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ │ +00002760: 666f 756e 6420 756e 7265 736f 6c76 6564 found unresolved │ │ │ │ +00002770: 206c 696e 6b73 2069 6e20 3a20 222c 0a09 links in : ",.. │ │ │ │ +00002780: 0909 2040 642c 0a09 0909 2022 706c 6561 .. @d,.... "plea │ │ │ │ +00002790: 7365 2072 756e 2073 746f 7265 4261 636b se run storeBack │ │ │ │ +000027a0: 7570 5570 6461 7465 4261 636b 7570 2e70 upUpdateBackup.p │ │ │ │ +000027b0: 6c22 2c0a 0909 0920 2267 656e 6572 6174 l",.... "generat │ │ │ │ +000027c0: 6564 206c 6973 7420 7769 6c6c 206e 6f74 ed list will not │ │ │ │ +000027d0: 2062 6520 636f 6d70 6c65 7465 2122 2c0a be complete!",. │ │ │ │ +000027e0: 0909 0920 2222 5d29 0a20 2020 2069 6620 ... ""]). if │ │ │ │ +000027f0: 4064 3b0a 0a0a 2320 5a75 6572 7374 2064 @d;...# Zuerst d │ │ │ │ +00002800: 6965 2044 6174 6569 656e 2064 6972 656b ie Dateien direk │ │ │ │ +00002810: 7420 6175 6620 4578 6973 7465 6e7a 20fc t auf Existenz . │ │ │ │ +00002820: 6265 7270 72fc 6665 6e0a 2320 6461 6e6e berpr.fen.# dann │ │ │ │ +00002830: 206d 6435 2d53 756d 6d65 6e20 6265 7265 md5-Summen bere │ │ │ │ +00002840: 6368 6e65 6e2c 2075 6d20 756e 7465 7273 chnen, um unters │ │ │ │ +00002850: 6368 6965 646c 6963 6865 2053 74e4 6e64 chiedliche St.nd │ │ │ │ +00002860: 6520 6665 7374 7a75 7374 656c 6c65 6e0a e festzustellen. │ │ │ │ +00002870: 6d79 2028 4066 696c 6573 2c20 406d 6435 my (@files, @md5 │ │ │ │ +00002880: 7375 6d2c 2040 6469 7273 2c20 2465 6e74 sum, @dirs, $ent │ │ │ │ +00002890: 7279 293b 0a6d 7920 246d 6435 7375 6d42 ry);.my $md5sumB │ │ │ │ +000028a0: 6c6f 636b 203d 2075 6e64 6566 3b0a 6d79 lock = undef;.my │ │ │ │ +000028b0: 2024 6c61 7374 496e 6f64 6520 3d20 756e $lastInode = un │ │ │ │ +000028c0: 6465 663b 0a66 6f72 6561 6368 2024 656e def;.foreach $en │ │ │ │ +000028d0: 7472 7920 2840 616c 6c44 6972 7329 0a7b try (@allDirs).{ │ │ │ │ +000028e0: 0a20 2020 2069 6620 2865 7869 7374 7320 . if (exists │ │ │ │ +000028f0: 246c 696e 6b46 696c 657b 2465 6e74 7279 $linkFile{$entry │ │ │ │ +00002900: 7d29 0a20 2020 207b 0a09 2470 724c 6f67 }). {..$prLog │ │ │ │ +00002910: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00002920: 3d3e 2027 5727 2c0a 0909 2020 2020 2020 => 'W',... │ │ │ │ +00002930: 272d 7374 7227 203d 3e20 5b22 736b 6970 '-str' => ["skip │ │ │ │ +00002940: 7069 6e67 203c 2465 6e74 7279 3e22 5d29 ping <$entry>"]) │ │ │ │ +00002950: 3b0a 096e 6578 743b 0a20 2020 207d 0a0a ;..next;. }.. │ │ │ │ +00002960: 2020 2020 6d79 2024 6620 3d20 2465 6e74 my $f = $ent │ │ │ │ +00002970: 7279 202e 2027 2f27 202e 2024 6669 6c65 ry . '/' . $file │ │ │ │ +00002980: 5769 7468 5265 6c50 6174 683b 0a20 2020 WithRelPath;. │ │ │ │ +00002990: 2069 6620 282d 6620 2466 290a 2020 2020 if (-f $f). │ │ │ │ +000029a0: 7b0a 0970 7573 6820 4066 696c 6573 2c20 {..push @files, │ │ │ │ +000029b0: 2466 3b0a 0970 7573 6820 4064 6972 732c $f;..push @dirs, │ │ │ │ +000029c0: 2024 656e 7472 793b 0a0a 0923 2065 7273 $entry;...# ers │ │ │ │ +000029d0: 7420 6d61 6c20 7072 fc66 656e 2c20 6f62 t mal pr.fen, ob │ │ │ │ +000029e0: 2069 6e6f 6465 2069 6465 6e74 6973 6368 inode identisch │ │ │ │ +000029f0: 2069 7374 0a09 6d79 2028 2469 6e6f 6465 ist..my ($inode │ │ │ │ +00002a00: 2c20 2473 697a 6529 203d 2028 7374 6174 , $size) = (stat │ │ │ │ +00002a10: 2824 6629 295b 312c 375d 3b0a 0969 6620 ($f))[1,7];..if │ │ │ │ +00002a20: 2824 696e 6f64 6520 3d3d 2024 6c61 7374 ($inode == $last │ │ │ │ +00002a30: 496e 6f64 6529 0a09 7b0a 0920 2020 2070 Inode)..{.. p │ │ │ │ +00002a40: 7573 6820 406d 6435 7375 6d2c 2024 6d64 ush @md5sum, $md │ │ │ │ +00002a50: 3573 756d 5b40 6d64 3573 756d 202d 2031 5sum[@md5sum - 1 │ │ │ │ +00002a60: 5d3b 2020 2320 6c65 747a 7465 206d 6435 ]; # letzte md5 │ │ │ │ +00002a70: 2053 756d 6d65 206b 6f70 6965 7265 6e0a Summe kopieren. │ │ │ │ +00002a80: 0920 2020 206e 6578 743b 2020 2020 2020 . next; │ │ │ │ +00002a90: 2020 2020 2020 2020 2320 6d64 3520 5375 # md5 Su │ │ │ │ +00002aa0: 6d6d 6520 6d75 7373 206e 6963 6874 2062 mme muss nicht b │ │ │ │ +00002ab0: 6572 6563 686e 6574 2077 6572 6465 6e0a erechnet werden. │ │ │ │ +00002ac0: 097d 0a09 246c 6173 7449 6e6f 6465 203d .}..$lastInode = │ │ │ │ +00002ad0: 2024 696e 6f64 653b 0a0a 0923 206d 6435 $inode;...# md5 │ │ │ │ +00002ae0: 2053 756d 6d65 206d 7573 7320 6265 7265 Summe muss bere │ │ │ │ +00002af0: 6368 6e65 7420 7765 7264 656e 0a09 6d79 chnet werden..my │ │ │ │ +00002b00: 2024 6d64 3520 3d20 263a 3a63 616c 6346 $md5 = &::calcF │ │ │ │ +00002b10: 696c 654d 4435 5375 6d28 2224 6622 293b ileMD5Sum("$f"); │ │ │ │ +00002b20: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00002b30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00002b40: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00002b50: 3e20 5b22 636f 756c 6420 6e6f 7420 7265 > ["could not re │ │ │ │ +00002b60: 6164 203c 2466 3e22 5d29 0a09 2020 2020 ad <$f>"]).. │ │ │ │ +00002b70: 756e 6c65 7373 2024 6d64 353b 0a0a 0970 unless $md5;...p │ │ │ │ +00002b80: 7573 6820 406d 6435 7375 6d2c 2024 6d64 ush @md5sum, $md │ │ │ │ +00002b90: 353b 0a20 2020 207d 0a20 2020 2065 6c73 5;. }. els │ │ │ │ +00002ba0: 6966 2028 2d64 2024 6629 2020 2020 2020 if (-d $f) │ │ │ │ +00002bb0: 2023 2062 6c6f 636b 6564 2066 696c 650a # blocked file. │ │ │ │ +00002bc0: 2020 2020 7b0a 0923 206d 6435 2073 756d {..# md5 sum │ │ │ │ +00002bd0: 206f 6620 626c 6f63 6b20 6368 6563 6b20 of block check │ │ │ │ +00002be0: 7375 6d20 6669 6c65 0a09 6d79 2024 6642 sum file..my $fB │ │ │ │ +00002bf0: 6c6f 636b 203d 2022 2466 2f2e 6d64 3542 lock = "$f/.md5B │ │ │ │ +00002c00: 6c6f 636b 4368 6563 6b53 756d 732e 627a lockCheckSums.bz │ │ │ │ +00002c10: 3222 3b0a 0975 6e6c 6573 7320 282d 6620 2";..unless (-f │ │ │ │ +00002c20: 2466 426c 6f63 6b29 0a09 7b0a 0920 2020 $fBlock)..{.. │ │ │ │ +00002c30: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ │ +00002c40: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ │ +00002c50: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ │ +00002c60: 6361 6e6e 6f74 206f 7065 6e20 3c24 6642 cannot open <$fB │ │ │ │ +00002c70: 6c6f 636b 3e22 5d29 3b0a 0920 2020 206e lock>"]);.. n │ │ │ │ +00002c80: 6578 743b 0a09 7d0a 096d 7920 246d 6435 ext;..}..my $md5 │ │ │ │ +00002c90: 203d 2026 3a3a 6361 6c63 4669 6c65 4d44 = &::calcFileMD │ │ │ │ +00002ca0: 3553 756d 2822 2466 426c 6f63 6b22 293b 5Sum("$fBlock"); │ │ │ │ +00002cb0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00002cc0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ │ +00002cd0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00002ce0: 3e20 5b22 636f 756c 6420 6e6f 7420 7265 > ["could not re │ │ │ │ +00002cf0: 6164 203c 2466 426c 6f63 6b3e 225d 290a ad <$fBlock>"]). │ │ │ │ +00002d00: 0920 2020 2075 6e6c 6573 7320 246d 6435 . unless $md5 │ │ │ │ +00002d10: 3b0a 0970 7573 6820 4066 696c 6573 2c20 ;..push @files, │ │ │ │ +00002d20: 2466 3b0a 0970 7573 6820 4064 6972 732c $f;..push @dirs, │ │ │ │ +00002d30: 2024 656e 7472 793b 0a09 7075 7368 2040 $entry;..push @ │ │ │ │ +00002d40: 6d64 3573 756d 2c20 246d 6435 3b0a 2020 md5sum, $md5;. │ │ │ │ +00002d50: 2020 7d0a 7d0a 0a23 7072 696e 7420 2266 }.}..#print "f │ │ │ │ +00002d60: 696c 6573 203d 205c 6e22 2c20 6a6f 696e iles = \n", join │ │ │ │ +00002d70: 2822 5c6e 222c 2040 6669 6c65 7329 2c20 ("\n", @files), │ │ │ │ +00002d80: 225c 6e22 3b0a 2370 7269 6e74 2022 6d64 "\n";.#print "md │ │ │ │ +00002d90: 3573 203d 205c 6e22 2c20 6a6f 696e 2822 5s = \n", join(" │ │ │ │ +00002da0: 5c6e 222c 2040 6d64 3573 756d 292c 2022 \n", @md5sum), " │ │ │ │ +00002db0: 5c6e 223b 0a0a 2320 556e 7465 7273 6368 \n";..# Untersch │ │ │ │ +00002dc0: 6965 646c 6963 6865 2056 6572 7369 6f6e iedliche Version │ │ │ │ +00002dd0: 656e 206d 6572 6b65 6e0a 6d79 2028 2469 en merken.my ($i │ │ │ │ +00002de0: 2c20 246a 293b 0a6d 7920 2840 7665 7273 , $j);.my (@vers │ │ │ │ +00002df0: 696f 6e46 696c 6573 2920 3d20 2466 696c ionFiles) = $fil │ │ │ │ +00002e00: 6573 5b30 5d3b 0a6d 7920 2840 7665 7273 es[0];.my (@vers │ │ │ │ +00002e10: 696f 6e44 6972 7329 203d 2024 6469 7273 ionDirs) = $dirs │ │ │ │ +00002e20: 5b30 5d3b 0a6d 7920 246c 6173 746d 6435 [0];.my $lastmd5 │ │ │ │ +00002e30: 203d 2024 6d64 3573 756d 5b30 5d3b 0a70 = $md5sum[0];.p │ │ │ │ +00002e40: 7269 6e74 6628 2225 3264 2025 735c 6e22 rintf("%2d %s\n" │ │ │ │ +00002e50: 2c20 312c 2024 7665 7273 696f 6e46 696c , 1, $versionFil │ │ │ │ +00002e60: 6573 5b30 5d29 2075 6e6c 6573 7320 246c es[0]) unless $l │ │ │ │ +00002e70: 6f63 6174 6553 616d 653b 0a66 6f72 2028 ocateSame;.for ( │ │ │ │ +00002e80: 246a 203d 2030 2c20 2469 203d 2031 203b $j = 0, $i = 1 ; │ │ │ │ +00002e90: 2024 6920 3c20 4066 696c 6573 203b 2024 $i < @files ; $ │ │ │ │ +00002ea0: 692b 2b29 0a7b 0a20 2020 2069 6620 2824 i++).{. if ($ │ │ │ │ +00002eb0: 6d64 3573 756d 5b24 695d 206e 6520 246c md5sum[$i] ne $l │ │ │ │ +00002ec0: 6173 746d 6435 290a 2020 2020 7b0a 0924 astmd5). {..$ │ │ │ │ +00002ed0: 6c61 7374 6d64 3520 3d20 246d 6435 7375 lastmd5 = $md5su │ │ │ │ +00002ee0: 6d5b 2469 5d3b 0a09 2b2b 246a 3b0a 0924 m[$i];..++$j;..$ │ │ │ │ +00002ef0: 7665 7273 696f 6e46 696c 6573 5b24 6a5d versionFiles[$j] │ │ │ │ +00002f00: 203d 2024 6669 6c65 735b 2469 5d3b 0a09 = $files[$i];.. │ │ │ │ +00002f10: 2476 6572 7369 6f6e 4469 7273 5b24 6a5d $versionDirs[$j] │ │ │ │ +00002f20: 203d 2024 6469 7273 5b24 695d 3b0a 0970 = $dirs[$i];..p │ │ │ │ +00002f30: 7269 6e74 6628 2225 3264 2025 735c 6e22 rintf("%2d %s\n" │ │ │ │ +00002f40: 2c20 246a 202b 2031 2c20 2476 6572 7369 , $j + 1, $versi │ │ │ │ +00002f50: 6f6e 4669 6c65 735b 246a 5d29 2075 6e6c onFiles[$j]) unl │ │ │ │ +00002f60: 6573 7320 246c 6f63 6174 6553 616d 653b ess $locateSame; │ │ │ │ +00002f70: 0a20 2020 207d 0a7d 0a0a 6578 6974 2030 . }.}..exit 0 │ │ │ │ +00002f80: 2075 6e6c 6573 7320 246c 6f63 6174 6553 unless $locateS │ │ │ │ +00002f90: 616d 653b 0a0a 6d79 2025 7665 7273 696f ame;..my %versio │ │ │ │ +00002fa0: 6e4d 4435 7375 6d3b 2020 2320 6d64 3520 nMD5sum; # md5 │ │ │ │ +00002fb0: 5375 6d6d 656e 206d fc73 7365 6e20 6175 Summen m.ssen au │ │ │ │ +00002fc0: 7320 2463 6865 636b 5375 6d46 696c 6520 s $checkSumFile │ │ │ │ +00002fd0: 6765 6c65 7365 6e20 7765 7264 656e 2c0a gelesen werden,. │ │ │ │ +00002fe0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00002ff0: 2020 2020 2320 6461 2061 6e73 6f6e 7374 # da ansonst │ │ │ │ +00003000: 656e 206b 6f6d 7072 696d 6965 7274 6520 en komprimierte │ │ │ │ +00003010: 4461 7465 6965 6e20 6d69 7420 6e69 6368 Dateien mit nich │ │ │ │ +00003020: 742d 6b6f 6d70 7269 6d69 6572 7465 6e0a t-komprimierten. │ │ │ │ +00003030: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003040: 2020 2020 2320 7665 7267 6c69 6368 656e # verglichen │ │ │ │ +00003050: 2077 fc72 6465 6e21 0a6d 7920 2576 6572 w.rden!.my %ver │ │ │ │ +00003060: 7369 6f6e 5369 7a65 3b20 2020 2023 206b sionSize; # k │ │ │ │ +00003070: 6579 203d 206d 6435 7375 6d20 2877 6965 ey = md5sum (wie │ │ │ │ +00003080: 206f 6265 6e29 2c20 7661 6c75 6520 3d20 oben), value = │ │ │ │ +00003090: 7369 7a65 2061 7573 2024 6368 6563 6b53 size aus $checkS │ │ │ │ +000030a0: 756d 4669 6c65 0a6d 7920 2576 6572 7369 umFile.my %versi │ │ │ │ +000030b0: 6f6e 5549 443b 2020 2020 2023 206b 6579 onUID; # key │ │ │ │ +000030c0: 203d 206d 6435 7375 6d20 2877 6965 206f = md5sum (wie o │ │ │ │ +000030d0: 6265 6e29 2c20 7661 6c75 6520 3d20 7569 ben), value = ui │ │ │ │ +000030e0: 6420 6175 7320 2463 6865 636b 5375 6d46 d aus $checkSumF │ │ │ │ +000030f0: 696c 650a 6d79 2025 7665 7273 696f 6e47 ile.my %versionG │ │ │ │ +00003100: 4944 3b20 2020 2020 2320 6b65 7920 3d20 ID; # key = │ │ │ │ +00003110: 6d64 3573 756d 2028 7769 6520 6f62 656e md5sum (wie oben │ │ │ │ +00003120: 292c 2076 616c 7565 203d 2075 6964 2061 ), value = uid a │ │ │ │ +00003130: 7573 2024 6368 6563 6b53 756d 4669 6c65 us $checkSumFile │ │ │ │ +00003140: 0a6d 7920 2576 6572 7369 6f6e 4d6f 6465 .my %versionMode │ │ │ │ +00003150: 3b20 2020 2023 206b 6579 203d 206d 6435 ; # key = md5 │ │ │ │ +00003160: 7375 6d20 2877 6965 206f 6265 6e29 2c20 sum (wie oben), │ │ │ │ +00003170: 7661 6c75 6520 3d20 6d6f 6465 2061 7573 value = mode aus │ │ │ │ +00003180: 2024 6368 6563 6b53 756d 4669 6c65 0a6d $checkSumFile.m │ │ │ │ +00003190: 7920 2576 6572 7369 6f6e 4354 696d 653b y %versionCTime; │ │ │ │ +000031a0: 2020 2023 206b 6579 203d 206d 6435 7375 # key = md5su │ │ │ │ +000031b0: 6d20 2877 6965 206f 6265 6e29 2c20 7661 m (wie oben), va │ │ │ │ +000031c0: 6c75 6520 3d20 6374 696d 6520 6175 7320 lue = ctime aus │ │ │ │ +000031d0: 2463 6865 636b 5375 6d46 696c 650a 6d79 $checkSumFile.my │ │ │ │ +000031e0: 2025 7665 7273 696f 6e4d 5469 6d65 3b20 %versionMTime; │ │ │ │ +000031f0: 2020 2320 6b65 7920 3d20 6d64 3573 756d # key = md5sum │ │ │ │ +00003200: 2028 7769 6520 6f62 656e 292c 2076 616c (wie oben), val │ │ │ │ +00003210: 7565 203d 206d 7469 6d65 2061 7573 2024 ue = mtime aus $ │ │ │ │ +00003220: 6368 6563 6b53 756d 4669 6c65 0a6d 7920 checkSumFile.my │ │ │ │ +00003230: 2576 6572 7369 6f6e 436f 6d70 723b 2020 %versionCompr; │ │ │ │ +00003240: 2023 206b 6579 203d 206d 6435 7375 6d20 # key = md5sum │ │ │ │ +00003250: 2877 6965 206f 6265 6e29 2c20 7661 6c75 (wie oben), valu │ │ │ │ +00003260: 6520 3d20 637c 7520 6175 7320 2463 6865 e = c|u aus $che │ │ │ │ +00003270: 636b 5375 6d46 696c 650a 6d79 2028 4076 ckSumFile.my (@v │ │ │ │ +00003280: 6572 7369 6f6e 4d44 3573 293b 0a6d 7920 ersionMD5s);.my │ │ │ │ +00003290: 2840 6475 6d6d 7929 3b0a 0a6d 7920 2461 (@dummy);..my $a │ │ │ │ +000032a0: 6c6c 203d 2040 7665 7273 696f 6e44 6972 ll = @versionDir │ │ │ │ +000032b0: 7320 2b20 4061 6c6c 4469 7273 3b0a 6d79 s + @allDirs;.my │ │ │ │ +000032c0: 2024 616c 6c43 6f75 6e74 203d 2030 3b0a $allCount = 0;. │ │ │ │ +000032d0: 6d79 2024 616c 6c41 6374 436f 756e 7420 my $allActCount │ │ │ │ +000032e0: 3d20 303b 0a66 6f72 6561 6368 2024 656e = 0;.foreach $en │ │ │ │ +000032f0: 7472 7920 2840 7665 7273 696f 6e44 6972 try (@versionDir │ │ │ │ +00003300: 7329 2020 2023 206a 6574 7a74 2061 6c6c s) # jetzt all │ │ │ │ +00003310: 6520 7a75 7220 4461 7465 6920 2a67 6573 e zur Datei *ges │ │ │ │ +00003320: 7065 6963 6865 7274 656e 2a0a 7b20 2020 peicherten*.{ │ │ │ │ +00003330: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00003340: 2020 2020 2020 2020 2020 2020 2320 756e # un │ │ │ │ +00003350: 7465 7273 6368 6965 646c 6963 6865 6e20 terschiedlichen │ │ │ │ +00003360: 6d64 3520 5375 6d6d 656e 206c 6164 656e md5 Summen laden │ │ │ │ +00003370: 0a20 2020 2069 6620 2824 7665 7262 6f73 . if ($verbos │ │ │ │ +00003380: 6529 0a20 2020 207b 0a09 2470 724c 6f67 e). {..$prLog │ │ │ │ +00003390: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +000033a0: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... │ │ │ │ +000033b0: 272d 7374 7227 203d 3e20 5b22 7265 6164 '-str' => ["read │ │ │ │ +000033c0: 696e 6720 3c24 656e 7472 793e 225d 293b ing <$entry>"]); │ │ │ │ +000033d0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ │ +000033e0: 2020 2020 7b0a 0969 6620 2824 616c 6c43 {..if ($allC │ │ │ │ +000033f0: 6f75 6e74 2b2b 202f 2024 616c 6c20 3e3d ount++ / $all >= │ │ │ │ +00003400: 2024 616c 6c41 6374 436f 756e 7420 2f20 $allActCount / │ │ │ │ +00003410: 3130 290a 097b 0a09 2020 2020 7072 696e 10)..{.. prin │ │ │ │ +00003420: 7420 2224 616c 6c41 6374 436f 756e 7420 t "$allActCount │ │ │ │ +00003430: 223b 0a09 2020 2020 5354 444f 5554 2d3e ";.. STDOUT-> │ │ │ │ +00003440: 6175 746f 666c 7573 6828 3129 3b0a 0920 autoflush(1);.. │ │ │ │ +00003450: 2020 2024 616c 6c41 6374 436f 756e 742b $allActCount+ │ │ │ │ +00003460: 2b3b 0a09 7d0a 2020 2020 7d0a 0a20 2020 +;..}. }.. │ │ │ │ +00003470: 206d 7920 2466 6f75 6e64 203d 2030 3b0a my $found = 0;. │ │ │ │ +00003480: 2020 2020 6d79 2024 7263 7366 203d 2072 my $rcsf = r │ │ │ │ +00003490: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile- │ │ │ │ +000034a0: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF │ │ │ │ +000034b0: 696c 6527 203d 3e20 2224 656e 7472 792f ile' => "$entry/ │ │ │ │ +000034c0: 2463 6865 636b 5375 6d46 696c 6522 2c0a $checkSumFile",. │ │ │ │ +000034d0: 0909 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog │ │ │ │ +000034e0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0909 ' => $prLog);... │ │ │ │ +000034f0: 0909 2020 2020 200a 2320 2020 206d 7920 .. .# my │ │ │ │ +00003500: 246d 6574 6120 3d20 2472 6373 662d 3e67 $meta = $rcsf->g │ │ │ │ +00003510: 6574 4d65 7461 5661 6c46 6965 6c64 2829 etMetaValField() │ │ │ │ +00003520: 3b0a 2320 2020 206d 7920 2470 6f73 7466 ;.# my $postf │ │ │ │ +00003530: 6978 203d 2028 2424 6d65 7461 7b27 706f ix = ($$meta{'po │ │ │ │ +00003540: 7374 6669 7827 7d29 2d3e 5b30 5d3b 2020 stfix'})->[0]; │ │ │ │ +00003550: 2020 2320 706f 7374 6669 7820 286b 6f6d # postfix (kom │ │ │ │ +00003560: 7072 2e20 6f64 6572 206e 6963 6874 2920 pr. oder nicht) │ │ │ │ +00003570: 6d65 726b 656e 0a20 2020 206d 7920 2470 merken. my $p │ │ │ │ +00003580: 6f73 7466 6978 203d 2024 7263 7366 2d3e ostfix = $rcsf-> │ │ │ │ +00003590: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar(' │ │ │ │ +000035a0: 706f 7374 6669 7827 293b 0a0a 2020 2020 postfix');.. │ │ │ │ +000035b0: 6d79 2028 246d 6435 7375 6d2c 2024 636f my ($md5sum, $co │ │ │ │ +000035c0: 6d70 722c 2024 6465 7649 6e6f 6465 2c20 mpr, $devInode, │ │ │ │ +000035d0: 2469 6e6f 6465 4261 636b 7570 2c20 2463 $inodeBackup, $c │ │ │ │ +000035e0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a │ │ │ │ +000035f0: 7469 6d65 2c0a 0924 7369 7a65 2c20 2475 time,..$size, $u │ │ │ │ +00003600: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode, │ │ │ │ +00003610: 2024 6669 6c65 6e61 6d65 293b 0a20 2020 $filename);. │ │ │ │ +00003620: 2077 6869 6c65 2028 2828 246d 6435 7375 while ((($md5su │ │ │ │ +00003630: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI │ │ │ │ +00003640: 6e6f 6465 2c20 2469 6e6f 6465 4261 636b node, $inodeBack │ │ │ │ +00003650: 7570 2c20 2463 7469 6d65 2c20 246d 7469 up, $ctime, $mti │ │ │ │ +00003660: 6d65 2c20 2461 7469 6d65 2c0a 0920 2020 me, $atime,.. │ │ │ │ +00003670: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g │ │ │ │ +00003680: 6964 2c20 246d 6f64 652c 2024 6669 6c65 id, $mode, $file │ │ │ │ +00003690: 6e61 6d65 2920 3d20 2472 6373 662d 3e6e name) = $rcsf->n │ │ │ │ +000036a0: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0). │ │ │ │ +000036b0: 2020 2020 7b0a 0924 6669 6c65 6e61 6d65 {..$filename │ │ │ │ +000036c0: 202e 3d20 2470 6f73 7466 6978 2069 6620 .= $postfix if │ │ │ │ +000036d0: 2463 6f6d 7072 2065 7120 2763 273b 0a0a $compr eq 'c';.. │ │ │ │ +000036e0: 0969 6620 2824 6669 6c65 5769 7468 5265 .if ($fileWithRe │ │ │ │ +000036f0: 6c50 6174 6820 6571 2024 6669 6c65 6e61 lPath eq $filena │ │ │ │ +00003700: 6d65 290a 097b 0a09 2020 2020 7075 7368 me)..{.. push │ │ │ │ +00003710: 2040 7665 7273 696f 6e4d 4435 732c 2024 @versionMD5s, $ │ │ │ │ +00003720: 6d64 3573 756d 3b20 2020 2020 2020 2320 md5sum; # │ │ │ │ +00003730: 4f72 6967 696e 616c 206d 6435 2053 756d Original md5 Sum │ │ │ │ +00003740: 6d65 206d 6572 6b65 6e0a 0920 2020 2070 me merken.. p │ │ │ │ +00003750: 7573 6820 4064 756d 6d79 2c20 2465 6e74 ush @dummy, $ent │ │ │ │ +00003760: 7279 3b0a 0920 2020 2024 7665 7273 696f ry;.. $versio │ │ │ │ +00003770: 6e4d 4435 7375 6d7b 246d 6435 7375 6d7d nMD5sum{$md5sum} │ │ │ │ +00003780: 203d 205b 5d3b 0a09 2020 2020 2476 6572 = [];.. $ver │ │ │ │ +00003790: 7369 6f6e 5369 7a65 7b24 6d64 3573 756d sionSize{$md5sum │ │ │ │ +000037a0: 7d20 3d20 2473 697a 653b 0a09 2020 2020 } = $size;.. │ │ │ │ +000037b0: 2476 6572 7369 6f6e 5549 447b 246d 6435 $versionUID{$md5 │ │ │ │ +000037c0: 7375 6d7d 203d 2024 7569 643b 0a09 2020 sum} = $uid;.. │ │ │ │ +000037d0: 2020 2476 6572 7369 6f6e 4749 447b 246d $versionGID{$m │ │ │ │ +000037e0: 6435 7375 6d7d 203d 2024 6769 643b 0a09 d5sum} = $gid;.. │ │ │ │ +000037f0: 2020 2020 2476 6572 7369 6f6e 4d6f 6465 $versionMode │ │ │ │ +00003800: 7b24 6d64 3573 756d 7d20 3d20 246d 6f64 {$md5sum} = $mod │ │ │ │ +00003810: 653b 0a09 2020 2020 2476 6572 7369 6f6e e;.. $version │ │ │ │ +00003820: 4354 696d 657b 246d 6435 7375 6d7d 203d CTime{$md5sum} = │ │ │ │ +00003830: 2024 6374 696d 653b 0a09 2020 2020 2476 $ctime;.. $v │ │ │ │ +00003840: 6572 7369 6f6e 4d54 696d 657b 246d 6435 ersionMTime{$md5 │ │ │ │ +00003850: 7375 6d7d 203d 2024 6d74 696d 653b 0a09 sum} = $mtime;.. │ │ │ │ +00003860: 2020 2020 2476 6572 7369 6f6e 436f 6d70 $versionComp │ │ │ │ +00003870: 727b 246d 6435 7375 6d7d 203d 2024 636f r{$md5sum} = $co │ │ │ │ +00003880: 6d70 723b 0a09 2020 2020 2466 6f75 6e64 mpr;.. $found │ │ │ │ +00003890: 203d 2031 3b0a 0920 2020 206c 6173 743b = 1;.. last; │ │ │ │ +000038a0: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p │ │ │ │ +000038b0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ │ +000038c0: 6e64 2720 3d3e 2027 4527 2c0a 2020 2020 nd' => 'E',. │ │ │ │ +000038d0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ │ +000038e0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ │ +000038f0: 2066 696e 6420 3c24 6669 6c65 5769 7468 find <$fileWith │ │ │ │ +00003900: 5265 6c50 6174 683e 2069 6e20 3c24 656e RelPath> in <$en │ │ │ │ +00003910: 7472 793e 225d 290a 2020 2020 2020 2020 try>"]). │ │ │ │ +00003920: 6966 2028 2466 6f75 6e64 203d 3d20 3029 if ($found == 0) │ │ │ │ +00003930: 3b0a 7d0a 2840 7665 7273 696f 6e44 6972 ;.}.(@versionDir │ │ │ │ +00003940: 7329 203d 2028 4064 756d 6d79 293b 0a0a s) = (@dummy);.. │ │ │ │ +00003950: 2370 7269 6e74 2022 5c6e 4f72 6967 696e #print "\nOrigin │ │ │ │ +00003960: 616c 2d4d 4435 2d53 756d 6d65 6e3a 5c6e al-MD5-Summen:\n │ │ │ │ +00003970: 223b 0a23 7072 696e 7420 2276 6572 7369 ";.#print "versi │ │ │ │ +00003980: 6f6e 4669 6c65 7320 3d20 5c6e 222c 206a onFiles = \n", j │ │ │ │ +00003990: 6f69 6e28 225c 6e22 2c20 4076 6572 7369 oin("\n", @versi │ │ │ │ +000039a0: 6f6e 4669 6c65 7329 2c20 225c 6e22 3b0a onFiles), "\n";. │ │ │ │ +000039b0: 2370 7269 6e74 2022 7665 7273 696f 6e4d #print "versionM │ │ │ │ +000039c0: 4435 7320 3d20 5c6e 222c 206a 6f69 6e28 D5s = \n", join( │ │ │ │ +000039d0: 225c 6e22 2c20 4076 6572 7369 6f6e 4d44 "\n", @versionMD │ │ │ │ +000039e0: 3573 292c 2022 5c6e 223b 0a0a 230a 2320 5s), "\n";..#.# │ │ │ │ +000039f0: 416c 6c65 2024 6368 6563 6b53 756d 4669 Alle $checkSumFi │ │ │ │ +00003a00: 6c65 7320 6475 7263 6867 6568 656e 2075 les durchgehen u │ │ │ │ +00003a10: 6e64 2044 6174 6569 656e 206d 6974 2070 nd Dateien mit p │ │ │ │ +00003a20: 6173 7365 6e64 656e 204d 4435 2053 756d assenden MD5 Sum │ │ │ │ +00003a30: 6d65 6e20 6d65 726b 656e 0a23 0a66 6f72 men merken.#.for │ │ │ │ +00003a40: 6561 6368 2024 656e 7472 7920 2840 616c each $entry (@al │ │ │ │ +00003a50: 6c44 6972 7329 0a7b 0a20 2020 2069 6620 lDirs).{. if │ │ │ │ +00003a60: 2824 7665 7262 6f73 6529 0a20 2020 207b ($verbose). { │ │ │ │ +00003a70: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ │ +00003a80: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ │ +00003a90: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ │ +00003aa0: 3e20 5b22 6368 6563 6b69 6e67 203c 2465 > ["checking <$e │ │ │ │ +00003ab0: 6e74 7279 3e22 5d29 3b0a 2020 2020 7d0a ntry>"]);. }. │ │ │ │ +00003ac0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ │ +00003ad0: 6966 2028 2461 6c6c 436f 756e 742b 2b20 if ($allCount++ │ │ │ │ +00003ae0: 2f20 2461 6c6c 203e 3d20 2461 6c6c 4163 / $all >= $allAc │ │ │ │ +00003af0: 7443 6f75 6e74 202f 2031 3029 0a09 7b0a tCount / 10)..{. │ │ │ │ +00003b00: 0920 2020 2070 7269 6e74 2022 2461 6c6c . print "$all │ │ │ │ +00003b10: 4163 7443 6f75 6e74 2022 3b0a 0920 2020 ActCount ";.. │ │ │ │ +00003b20: 2053 5444 4f55 542d 3e61 7574 6f66 6c75 STDOUT->autoflu │ │ │ │ +00003b30: 7368 2831 293b 0a09 2020 2020 2461 6c6c sh(1);.. $all │ │ │ │ +00003b40: 4163 7443 6f75 6e74 2b2b 3b0a 097d 0a20 ActCount++;..}. │ │ │ │ +00003b50: 2020 207d 0a0a 2020 2020 6d79 2024 7263 }.. my $rc │ │ │ │ +00003b60: 7366 203d 2072 6561 6443 6865 636b 5375 sf = readCheckSu │ │ │ │ +00003b70: 6d46 696c 652d 3e6e 6577 2827 2d63 6865 mFile->new('-che │ │ │ │ +00003b80: 636b 5375 6d46 696c 6527 203d 3e20 2224 ckSumFile' => "$ │ │ │ │ +00003b90: 656e 7472 792f 2463 6865 636b 5375 6d46 entry/$checkSumF │ │ │ │ +00003ba0: 696c 6522 2c0a 0909 0909 2020 2020 2027 ile",..... ' │ │ │ │ +00003bb0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ │ +00003bc0: 6729 3b0a 0a20 2020 206d 7920 2824 6d64 g);.. my ($md │ │ │ │ +00003bd0: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d │ │ │ │ +00003be0: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB │ │ │ │ +00003bf0: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $ │ │ │ │ +00003c00: 6d74 696d 652c 2024 6174 696d 652c 0a09 mtime, $atime,.. │ │ │ │ +00003c10: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi │ │ │ │ +00003c20: 642c 2024 6d6f 6465 2c20 2466 696c 656e d, $mode, $filen │ │ │ │ +00003c30: 616d 6529 3b0a 2020 2020 7768 696c 6520 ame);. while │ │ │ │ +00003c40: 2828 2824 6d64 3573 756d 2c20 2463 6f6d ((($md5sum, $com │ │ │ │ +00003c50: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $ │ │ │ │ +00003c60: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct │ │ │ │ +00003c70: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at │ │ │ │ +00003c80: 696d 652c 0a09 2020 2020 2473 697a 652c ime,.. $size, │ │ │ │ +00003c90: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo │ │ │ │ +00003ca0: 6465 2c20 2466 696c 656e 616d 6529 203d de, $filename) = │ │ │ │ +00003cb0: 2024 7263 7366 2d3e 6e65 7874 4c69 6e65 $rcsf->nextLine │ │ │ │ +00003cc0: 2829 2920 3e20 3029 0a20 2020 207b 0a0a ()) > 0). {.. │ │ │ │ +00003cd0: 0969 6620 2865 7869 7374 7328 2476 6572 .if (exists($ver │ │ │ │ +00003ce0: 7369 6f6e 4d44 3573 756d 7b24 6d64 3573 sionMD5sum{$md5s │ │ │ │ +00003cf0: 756d 7d29 290a 097b 0a09 2020 2020 7075 um}))..{.. pu │ │ │ │ +00003d00: 7368 2040 7b24 7665 7273 696f 6e4d 4435 sh @{$versionMD5 │ │ │ │ +00003d10: 7375 6d7b 246d 6435 7375 6d7d 7d2c 2022 sum{$md5sum}}, " │ │ │ │ +00003d20: 2465 6e74 7279 2f24 6669 6c65 6e61 6d65 $entry/$filename │ │ │ │ +00003d30: 223b 0a23 0920 2020 2070 7269 6e74 2022 ";.#. print " │ │ │ │ +00003d40: 246d 6435 7375 6d20 2465 6e74 7279 2f24 $md5sum $entry/$ │ │ │ │ +00003d50: 6669 6c65 6e61 6d65 5c6e 223b 0a09 7d0a filename\n";..}. │ │ │ │ +00003d60: 2020 2020 7d0a 2320 2020 2063 6c6f 7365 }.# close │ │ │ │ +00003d70: 2846 494c 4529 3b0a 7d0a 7072 696e 7420 (FILE);.}.print │ │ │ │ +00003d80: 225c 6e22 2075 6e6c 6573 7320 2476 6572 "\n" unless $ver │ │ │ │ +00003d90: 626f 7365 3b0a 0a0a 2320 4175 7367 6162 bose;...# Ausgab │ │ │ │ +00003da0: 653a 0a0a 2320 536f 7274 6965 7265 6e20 e:..# Sortieren │ │ │ │ +00003db0: 6465 7220 6765 6675 6e64 656e 656e 2044 der gefundenen D │ │ │ │ +00003dc0: 6174 6569 656e 2070 726f 206d 6435 2053 ateien pro md5 S │ │ │ │ +00003dd0: 756d 6d65 0a66 6f72 6561 6368 2024 656e umme.foreach $en │ │ │ │ +00003de0: 7472 7920 286b 6579 7320 2576 6572 7369 try (keys %versi │ │ │ │ +00003df0: 6f6e 4d44 3573 756d 290a 7b0a 2020 2020 onMD5sum).{. │ │ │ │ +00003e00: 407b 2476 6572 7369 6f6e 4d44 3573 756d @{$versionMD5sum │ │ │ │ +00003e10: 7b24 656e 7472 797d 7d20 3d20 736f 7274 {$entry}} = sort │ │ │ │ +00003e20: 2040 7b24 7665 7273 696f 6e4d 4435 7375 @{$versionMD5su │ │ │ │ +00003e30: 6d7b 2465 6e74 7279 7d7d 3b0a 7d0a 0a23 m{$entry}};.}..# │ │ │ │ +00003e40: 2041 7566 6261 7565 6e20 6569 6e65 7220 Aufbauen einer │ │ │ │ +00003e50: 4c69 7374 652c 2064 6965 2073 6f20 736f Liste, die so so │ │ │ │ +00003e60: 7274 6965 7274 2077 6572 6465 6e20 6b61 rtiert werden ka │ │ │ │ +00003e70: 6e6e 2c20 6461 df20 6469 6520 e46c 7465 nn, da. die .lte │ │ │ │ +00003e80: 7374 656e 0a23 2044 6174 6569 6e61 6d65 sten.# Dateiname │ │ │ │ +00003e90: 6e20 6469 6520 6572 7374 656e 2056 6572 n die ersten Ver │ │ │ │ +00003ea0: 7369 6f6e 736e 756d 6d65 726e 2062 656b sionsnummern bek │ │ │ │ +00003eb0: 6f6d 6d65 6e0a 6d79 2040 6c69 7374 3b0a ommen.my @list;. │ │ │ │ +00003ec0: 666f 7265 6163 6820 2465 6e74 7279 2028 foreach $entry ( │ │ │ │ +00003ed0: 6b65 7973 2025 7665 7273 696f 6e4d 4435 keys %versionMD5 │ │ │ │ +00003ee0: 7375 6d29 0a7b 0a20 2020 2070 7573 6820 sum).{. push │ │ │ │ +00003ef0: 406c 6973 742c 207b 0a09 276d 6435 2720 @list, {..'md5' │ │ │ │ +00003f00: 3d3e 2024 656e 7472 792c 0a09 276c 6973 => $entry,..'lis │ │ │ │ +00003f10: 7427 203d 3e20 2476 6572 7369 6f6e 4d44 t' => $versionMD │ │ │ │ +00003f20: 3573 756d 7b24 656e 7472 797d 2c0a 0927 5sum{$entry},..' │ │ │ │ +00003f30: 7369 7a65 2720 3d3e 2024 7665 7273 696f size' => $versio │ │ │ │ +00003f40: 6e53 697a 657b 2465 6e74 7279 7d2c 0a09 nSize{$entry},.. │ │ │ │ +00003f50: 2775 6964 2720 3d3e 2024 7665 7273 696f 'uid' => $versio │ │ │ │ +00003f60: 6e55 4944 7b24 656e 7472 797d 2c0a 0927 nUID{$entry},..' │ │ │ │ +00003f70: 6769 6427 203d 3e20 2476 6572 7369 6f6e gid' => $version │ │ │ │ +00003f80: 4749 447b 2465 6e74 7279 7d2c 0a09 276d GID{$entry},..'m │ │ │ │ +00003f90: 6f64 6527 203d 3e20 2476 6572 7369 6f6e ode' => $version │ │ │ │ +00003fa0: 4d6f 6465 7b24 656e 7472 797d 2c0a 0927 Mode{$entry},..' │ │ │ │ +00003fb0: 6374 696d 6527 203d 3e20 2476 6572 7369 ctime' => $versi │ │ │ │ +00003fc0: 6f6e 4354 696d 657b 2465 6e74 7279 7d2c onCTime{$entry}, │ │ │ │ +00003fd0: 0a09 276d 7469 6d65 2720 3d3e 2024 7665 ..'mtime' => $ve │ │ │ │ +00003fe0: 7273 696f 6e4d 5469 6d65 7b24 656e 7472 rsionMTime{$entr │ │ │ │ +00003ff0: 797d 2c0a 0927 636f 6d70 7227 203d 3e20 y},..'compr' => │ │ │ │ +00004000: 2476 6572 7369 6f6e 436f 6d70 727b 2465 $versionCompr{$e │ │ │ │ +00004010: 6e74 7279 7d0a 2020 2020 7d3b 0a7d 0a24 ntry}. };.}.$ │ │ │ │ +00004020: 6920 3d20 313b 0a66 6f72 6561 6368 2024 i = 1;.foreach $ │ │ │ │ +00004030: 656e 7472 7920 2820 736f 7274 207b 2024 entry ( sort { $ │ │ │ │ +00004040: 612d 3e7b 276c 6973 7427 7d5b 305d 2063 a->{'list'}[0] c │ │ │ │ +00004050: 6d70 2024 622d 3e7b 276c 6973 7427 7d5b mp $b->{'list'}[ │ │ │ │ +00004060: 305d 207d 2040 6c69 7374 2029 0a7b 0a20 0] } @list ).{. │ │ │ │ +00004070: 2020 206d 7920 2470 7673 203d 2027 273b my $pvs = ''; │ │ │ │ +00004080: 0a20 2020 2069 6620 2824 7368 6f77 5369 . if ($showSi │ │ │ │ +00004090: 7a65 290a 2020 2020 7b0a 0924 7076 7320 ze). {..$pvs │ │ │ │ +000040a0: 3d20 2720 2720 2e20 2826 6875 6d61 6e52 = ' ' . (&humanR │ │ │ │ +000040b0: 6561 6461 626c 6528 2465 6e74 7279 2d3e eadable($entry-> │ │ │ │ +000040c0: 7b27 7369 7a65 277d 2929 5b30 5d20 2e20 {'size'}))[0] . │ │ │ │ +000040d0: 2720 2720 2e0a 0920 2020 2024 656e 7472 ' ' ... $entr │ │ │ │ +000040e0: 792d 3e7b 2773 697a 6527 7d20 2e20 2720 y->{'size'} . ' │ │ │ │ +000040f0: 6279 7465 7320 273b 0a20 2020 2069 6620 bytes ';. if │ │ │ │ +00004100: 2824 656e 7472 792d 3e7b 2763 6f6d 7072 ($entry->{'compr │ │ │ │ +00004110: 277d 2065 7120 2763 2729 0a20 2020 207b '} eq 'c'). { │ │ │ │ +00004120: 0a09 2470 7673 202e 3d20 2728 636f 6d70 ..$pvs .= '(comp │ │ │ │ +00004130: 7265 7373 6564 2927 3b0a 2020 2020 7d0a ressed)';. }. │ │ │ │ +00004140: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ │ +00004150: 2470 7673 202e 3d20 2728 6e6f 7420 636f $pvs .= '(not co │ │ │ │ +00004160: 6d70 7265 7373 6564 2927 3b0a 2020 2020 mpressed)';. │ │ │ │ +00004170: 7d0a 2020 2020 7d0a 2020 2020 7072 696e }. }. prin │ │ │ │ +00004180: 7420 2224 693a 2470 7673 2028 6d64 353d t "$i:$pvs (md5= │ │ │ │ +00004190: 222c 2024 656e 7472 792d 3e7b 276d 6435 ", $entry->{'md5 │ │ │ │ +000041a0: 277d 2c20 2229 5c6e 223b 0a20 2020 206d '}, ")\n";. m │ │ │ │ +000041b0: 7920 4070 3b0a 2020 2020 7075 7368 2040 y @p;. push @ │ │ │ │ +000041c0: 702c 2027 7569 6420 3d20 2720 2e20 2465 p, 'uid = ' . $e │ │ │ │ +000041d0: 6e74 7279 2d3e 7b27 7569 6427 7d20 6966 ntry->{'uid'} if │ │ │ │ +000041e0: 2024 7368 6f77 5549 443b 0a20 2020 2070 $showUID;. p │ │ │ │ +000041f0: 7573 6820 4070 2c20 2767 6964 203d 2027 ush @p, 'gid = ' │ │ │ │ +00004200: 202e 2024 656e 7472 792d 3e7b 2767 6964 . $entry->{'gid │ │ │ │ +00004210: 277d 2020 6966 2024 7368 6f77 4749 443b '} if $showGID; │ │ │ │ +00004220: 0a20 2020 2070 7573 6820 4070 2c20 7370 . push @p, sp │ │ │ │ +00004230: 7269 6e74 6628 226d 6f64 6520 3d20 3025 rintf("mode = 0% │ │ │ │ +00004240: 6f22 2c20 2465 6e74 7279 2d3e 7b27 6d6f o", $entry->{'mo │ │ │ │ +00004250: 6465 277d 2920 6966 2024 7368 6f77 4d6f de'}) if $showMo │ │ │ │ +00004260: 6465 3b0a 2020 2020 7072 696e 7420 2720 de;. print ' │ │ │ │ +00004270: 2020 2027 2c20 6a6f 696e 2827 2c20 272c ', join(', ', │ │ │ │ +00004280: 2040 7029 2c20 225c 6e22 2069 6620 2840 @p), "\n" if (@ │ │ │ │ +00004290: 7029 3b0a 2020 2020 4070 203d 2028 293b p);. @p = (); │ │ │ │ +000042a0: 0a20 2020 2069 6620 2824 7368 6f77 4354 . if ($showCT │ │ │ │ +000042b0: 696d 6529 0a20 2020 207b 0a09 6d79 2024 ime). {..my $ │ │ │ │ +000042c0: 6420 3d20 6461 7465 546f 6f6c 732d 3e6e d = dateTools->n │ │ │ │ +000042d0: 6577 2827 2d75 6e69 7854 696d 6527 203d ew('-unixTime' = │ │ │ │ +000042e0: 3e20 2465 6e74 7279 2d3e 7b27 6374 696d > $entry->{'ctim │ │ │ │ +000042f0: 6527 7d29 3b0a 0970 7573 6820 4070 2c20 e'});..push @p, │ │ │ │ +00004300: 2763 7469 6d65 203d 2027 202e 2024 642d 'ctime = ' . $d- │ │ │ │ +00004310: 3e67 6574 4461 7465 5469 6d65 2829 3b0a >getDateTime();. │ │ │ │ +00004320: 2020 2020 7d0a 2020 2020 6966 2028 2473 }. if ($s │ │ │ │ +00004330: 686f 774d 5469 6d65 290a 2020 2020 7b0a howMTime). {. │ │ │ │ +00004340: 096d 7920 2464 203d 2064 6174 6554 6f6f .my $d = dateToo │ │ │ │ +00004350: 6c73 2d3e 6e65 7728 272d 756e 6978 5469 ls->new('-unixTi │ │ │ │ +00004360: 6d65 2720 3d3e 2024 656e 7472 792d 3e7b me' => $entry->{ │ │ │ │ +00004370: 276d 7469 6d65 277d 293b 0a09 7075 7368 'mtime'});..push │ │ │ │ +00004380: 2040 702c 2027 6d74 696d 6520 3d20 2720 @p, 'mtime = ' │ │ │ │ +00004390: 2e20 2464 2d3e 6765 7444 6174 6554 696d . $d->getDateTim │ │ │ │ +000043a0: 6528 293b 0a20 2020 207d 0a20 2020 2069 e();. }. i │ │ │ │ +000043b0: 6620 2824 7368 6f77 4154 696d 6529 0a20 f ($showATime). │ │ │ │ +000043c0: 2020 207b 0a09 6d79 2024 6420 3d20 6461 {..my $d = da │ │ │ │ +000043d0: 7465 546f 6f6c 732d 3e6e 6577 2827 2d75 teTools->new('-u │ │ │ │ +000043e0: 6e69 7854 696d 6527 203d 3e20 2465 6e74 nixTime' => $ent │ │ │ │ +000043f0: 7279 2d3e 7b27 6174 696d 6527 7d29 3b0a ry->{'atime'});. │ │ │ │ +00004400: 0970 7573 6820 4070 2c20 2761 7469 6d65 .push @p, 'atime │ │ │ │ +00004410: 203d 2027 202e 2024 642d 3e67 6574 4461 = ' . $d->getDa │ │ │ │ +00004420: 7465 5469 6d65 2829 3b0a 2020 2020 7d0a teTime();. }. │ │ │ │ +00004430: 2020 2020 7072 696e 7420 2720 2020 2027 print ' ' │ │ │ │ +00004440: 2c20 6a6f 696e 2827 2c20 272c 2040 7029 , join(', ', @p) │ │ │ │ +00004450: 2c20 225c 6e22 2069 6620 2840 7029 3b0a , "\n" if (@p);. │ │ │ │ +00004460: 2020 2020 7072 696e 7420 225c 7422 3b0a print "\t";. │ │ │ │ +00004470: 2020 2020 7072 696e 7420 6a6f 696e 2822 print join(" │ │ │ │ +00004480: 5c6e 5c74 222c 2040 7b24 656e 7472 792d \n\t", @{$entry- │ │ │ │ +00004490: 3e7b 276c 6973 7427 7d7d 292c 2022 5c6e >{'list'}}), "\n │ │ │ │ +000044a0: 223b 0a20 2020 202b 2b24 693b 0a7d 0a0a ";. ++$i;.}.. │ │ │ │ +000044b0: 6578 6974 2030 3b0a exit 0;. │ │ │ ├── ./usr/bin/storeBackup_du │ │ │ │ @@ -1,4 +1,435 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 705f 6475 0a p_du. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose │ │ │ │ +00000030: 6620 436c 6165 7320 2832 3030 322d 3230 f Claes (2002-20 │ │ │ │ +00000040: 3132 290a 2320 2020 2020 2020 2020 2020 12).# │ │ │ │ +00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we │ │ │ │ +00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th │ │ │ │ +00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ │ +00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ │ +00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ │ +000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ │ +000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ │ +000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ │ +000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ │ +000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ │ +000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ │ +00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ │ +00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ │ +00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ │ +00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ │ +00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ │ +00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ │ +00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ │ +00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ │ +00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ │ +00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ │ +000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ │ +000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ │ +000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ │ +000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ │ +000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ │ +000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ │ +00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ │ +00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ │ +00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ │ +00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ │ +00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ │ +00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ │ +00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ │ +00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ │ +00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ │ +00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ │ +000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ │ +000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ │ +000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ │ +000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..use Fc │ │ │ │ +00000300: 6e74 6c20 7177 284f 5f52 4457 5220 4f5f ntl qw(O_RDWR O_ │ │ │ │ +00000310: 4352 4541 5429 3b0a 7573 6520 504f 5349 CREAT);.use POSI │ │ │ │ +00000320: 583b 0a0a 6d79 2024 5645 5253 494f 4e20 X;..my $VERSION │ │ │ │ +00000330: 3d20 2724 4964 3a20 7374 6f72 6542 6163 = '$Id: storeBac │ │ │ │ +00000340: 6b75 705f 6475 2e70 6c20 3336 3220 3230 kup_du.pl 362 20 │ │ │ │ +00000350: 3132 2d30 312d 3238 2032 323a 3131 3a31 12-01-28 22:11:1 │ │ │ │ +00000360: 335a 2068 6a63 2024 2027 3b0a 7075 7368 3Z hjc $ ';.push │ │ │ │ +00000370: 2040 5645 5253 494f 4e2c 2024 5645 5253 @VERSION, $VERS │ │ │ │ +00000380: 494f 4e3b 0a6d 7920 2824 5645 5253 494f ION;.my ($VERSIO │ │ │ │ +00000390: 4e70 4e61 6d65 2c20 2456 4552 5349 4f4e NpName, $VERSION │ │ │ │ +000003a0: 7376 6e49 4429 203d 2024 5645 5253 494f svnID) = $VERSIO │ │ │ │ +000003b0: 4e20 3d7e 202f 4964 3a5c 732b 285c 532b N =~ /Id:\s+(\S+ │ │ │ │ +000003c0: 295c 732b 285c 642b 292f 3b0a 246d 6169 )\s+(\d+)/;.$mai │ │ │ │ +000003d0: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ │ +000003e0: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ │ +000003f0: 7573 6520 7374 7269 6374 3b0a 0a0a 7375 use strict;...su │ │ │ │ +00000400: 6220 6c69 6250 6174 680a 7b0a 2020 2020 b libPath.{. │ │ │ │ +00000410: 6d79 2024 6669 6c65 203d 2073 6869 6674 my $file = shift │ │ │ │ +00000420: 3b0a 0a20 2020 206d 7920 2464 6972 3b0a ;.. my $dir;. │ │ │ │ +00000430: 0a20 2020 2023 2046 616c 6c73 2044 6174 . # Falls Dat │ │ │ │ +00000440: 6569 2073 656c 6273 7420 6569 6e20 7379 ei selbst ein sy │ │ │ │ +00000450: 6d6c 696e 6b20 6973 742c 2073 6f6c 616e mlink ist, solan │ │ │ │ +00000460: 6765 2066 6f6c 6765 6e2c 2062 6973 2061 ge folgen, bis a │ │ │ │ +00000470: 7566 6765 6cf6 7374 0a20 2020 2069 6620 ufgel.st. if │ │ │ │ +00000480: 282d 6620 2466 696c 6529 0a20 2020 207b (-f $file). { │ │ │ │ +00000490: 0a09 7768 696c 6520 282d 6c20 2466 696c ..while (-l $fil │ │ │ │ +000004a0: 6529 0a09 7b0a 0920 2020 206d 7920 246c e)..{.. my $l │ │ │ │ +000004b0: 696e 6b20 3d20 7265 6164 6c69 6e6b 2824 ink = readlink($ │ │ │ │ +000004c0: 6669 6c65 293b 0a0a 0920 2020 2069 6620 file);... if │ │ │ │ +000004d0: 2873 7562 7374 7228 246c 696e 6b2c 2030 (substr($link, 0 │ │ │ │ +000004e0: 2c20 3129 206e 6520 222f 2229 0a09 2020 , 1) ne "/").. │ │ │ │ +000004f0: 2020 7b0a 0909 2466 696c 6520 3d7e 2073 {...$file =~ s │ │ │ │ +00000500: 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b /[^\/]+$/$link/; │ │ │ │ +00000510: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ │ +00000520: 650a 0920 2020 207b 0a09 0924 6669 6c65 e.. {...$file │ │ │ │ +00000530: 203d 2024 6c69 6e6b 3b0a 0920 2020 207d = $link;.. } │ │ │ │ +00000540: 0a09 7d0a 0a09 2824 6469 722c 2024 6669 ..}...($dir, $fi │ │ │ │ +00000550: 6c65 2920 3d20 2673 706c 6974 4669 6c65 le) = &splitFile │ │ │ │ +00000560: 4469 7228 2466 696c 6529 3b0a 0924 6669 Dir($file);..$fi │ │ │ │ +00000570: 6c65 203d 2022 2f24 6669 6c65 223b 0a20 le = "/$file";. │ │ │ │ +00000580: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ │ +00000590: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER │ │ │ │ +000005a0: 5220 223c 2466 696c 653e 2064 6f65 7320 R "<$file> does │ │ │ │ +000005b0: 6e6f 7420 6578 6973 7421 5c6e 223b 0a09 not exist!\n";.. │ │ │ │ +000005c0: 6578 6974 2031 3b0a 2020 2020 7d0a 0a20 exit 1;. }.. │ │ │ │ +000005d0: 2020 2024 6469 7220 2e3d 2022 2f2e 2e2f $dir .= "/../ │ │ │ │ +000005e0: 6c69 6222 3b20 2020 2020 2020 2020 2020 lib"; │ │ │ │ +000005f0: 2320 5066 6164 207a 7520 6465 6e20 4269 # Pfad zu den Bi │ │ │ │ +00000600: 626c 696f 7468 656b 656e 0a20 2020 206d bliotheken. m │ │ │ │ +00000610: 7920 246f 6c64 4469 7220 3d20 602f 6269 y $oldDir = `/bi │ │ │ │ +00000620: 6e2f 7077 6460 3b0a 2020 2020 6368 6f6d n/pwd`;. chom │ │ │ │ +00000630: 7020 246f 6c64 4469 723b 0a20 2020 2069 p $oldDir;. i │ │ │ │ +00000640: 6620 2863 6864 6972 2024 6469 7229 0a20 f (chdir $dir). │ │ │ │ +00000650: 2020 207b 0a09 6d79 2024 6162 7344 6972 {..my $absDir │ │ │ │ +00000660: 203d 2060 2f62 696e 2f70 7764 603b 0a09 = `/bin/pwd`;.. │ │ │ │ +00000670: 6368 6f70 2024 6162 7344 6972 3b0a 0963 chop $absDir;..c │ │ │ │ +00000680: 6864 6972 2024 6f6c 6444 6972 3b0a 0a09 hdir $oldDir;... │ │ │ │ +00000690: 7265 7475 726e 2028 2673 706c 6974 4669 return (&splitFi │ │ │ │ +000006a0: 6c65 4469 7228 2224 6162 7344 6972 2466 leDir("$absDir$f │ │ │ │ +000006b0: 696c 6522 2929 3b0a 2020 2020 7d0a 2020 ile"));. }. │ │ │ │ +000006c0: 2020 656c 7365 0a20 2020 207b 0a09 7072 else. {..pr │ │ │ │ +000006d0: 696e 7420 5354 4445 5252 2022 3c24 6469 int STDERR "<$di │ │ │ │ +000006e0: 723e 2064 6f65 7320 6e6f 7420 6578 6973 r> does not exis │ │ │ │ +000006f0: 742c 2065 7869 7469 6e67 5c6e 223b 0a20 t, exiting\n";. │ │ │ │ +00000700: 2020 207d 0a7d 0a73 7562 2073 706c 6974 }.}.sub split │ │ │ │ +00000710: 4669 6c65 4469 720a 7b0a 2020 2020 6d79 FileDir.{. my │ │ │ │ +00000720: 2024 6e61 6d65 203d 2073 6869 6674 3b0a $name = shift;. │ │ │ │ +00000730: 0a20 2020 2072 6574 7572 6e20 2827 2e27 . return ('.' │ │ │ │ +00000740: 2c20 246e 616d 6529 2075 6e6c 6573 7320 , $name) unless │ │ │ │ +00000750: 2824 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 ($name =~/\//); │ │ │ │ +00000760: 2020 2023 206e 7572 2065 696e 6661 6368 # nur einfach │ │ │ │ +00000770: 6572 2044 6174 6569 6e61 6d65 0a0a 2020 er Dateiname.. │ │ │ │ +00000780: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil │ │ │ │ +00000790: 6529 203d 2024 6e61 6d65 203d 7e20 2f5e e) = $name =~ /^ │ │ │ │ +000007a0: 282e 2a29 5c2f 282e 2a29 242f 733b 0a20 (.*)\/(.*)$/s;. │ │ │ │ +000007b0: 2020 2024 6469 7220 3d20 272f 2720 6966 $dir = '/' if │ │ │ │ +000007c0: 2028 2464 6972 2065 7120 2727 293b 2020 ($dir eq ''); │ │ │ │ +000007d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000007e0: 2023 2067 696c 742c 2066 616c 6c73 207a # gilt, falls z │ │ │ │ +000007f0: 2e42 2e20 2f66 696c 656e 616d 650a 2020 .B. /filename. │ │ │ │ +00000800: 2020 7265 7475 726e 2028 2464 6972 2c20 return ($dir, │ │ │ │ +00000810: 2466 696c 6529 3b0a 7d0a 6d79 2028 2472 $file);.}.my ($r │ │ │ │ +00000820: 6571 2c20 2470 726f 6729 203d 2026 6c69 eq, $prog) = &li │ │ │ │ +00000830: 6250 6174 6828 2430 293b 0a70 7573 6820 bPath($0);.push │ │ │ │ +00000840: 4049 4e43 2c20 2224 7265 7122 3b0a 0a72 @INC, "$req";..r │ │ │ │ +00000850: 6571 7569 7265 2027 6368 6563 6b50 6172 equire 'checkPar │ │ │ │ +00000860: 616d 322e 706c 273b 0a72 6571 7569 7265 am2.pl';.require │ │ │ │ +00000870: 2027 7665 7273 696f 6e2e 706c 273b 0a72 'version.pl';.r │ │ │ │ +00000880: 6571 7569 7265 2027 6875 6d61 6e52 6561 equire 'humanRea │ │ │ │ +00000890: 642e 706c 273b 0a72 6571 7569 7265 2027 d.pl';.require ' │ │ │ │ +000008a0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p │ │ │ │ +000008b0: 6c27 3b0a 0a3d 6865 6164 3120 4e41 4d45 l';..=head1 NAME │ │ │ │ +000008c0: 0a0a 7374 6f72 6542 6163 6b75 705f 6475 ..storeBackup_du │ │ │ │ +000008d0: 2e70 6c20 2d20 6576 616c 7561 7465 7320 .pl - evaluates │ │ │ │ +000008e0: 7468 6520 6469 736b 2075 7361 6765 2069 the disk usage i │ │ │ │ +000008f0: 6e20 6f6e 6520 6f72 206d 6f72 6520 6261 n one or more ba │ │ │ │ +00000900: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories │ │ │ │ +00000910: 2e0a 0a3d 6865 6164 3120 5359 4e4f 5053 ...=head1 SYNOPS │ │ │ │ +00000920: 4953 0a0a 2020 2020 7374 6f72 6542 6163 IS.. storeBac │ │ │ │ +00000930: 6b75 705f 6475 2e70 6c20 5b2d 765d 205b kup_du.pl [-v] [ │ │ │ │ +00000940: 2d6c 5d20 6261 636b 7570 6469 7273 202e -l] backupdirs . │ │ │ │ +00000950: 2e2e 0a0a 3d68 6561 6431 204f 5054 494f ....=head1 OPTIO │ │ │ │ +00000960: 4e53 0a0a 3d6f 7665 7220 380a 0a3d 6974 NS..=over 8..=it │ │ │ │ +00000970: 656d 2042 3c2d 2d76 6572 626f 7365 3e2c em B<--verbose>, │ │ │ │ +00000980: 2042 3c2d 763e 0a0a 2020 2020 5072 696e B<-v>.. Prin │ │ │ │ +00000990: 7420 6163 6375 6d75 6c61 7465 6420 7661 t accumulated va │ │ │ │ +000009a0: 6c75 6573 2066 6f72 206d 756c 7469 706c lues for multipl │ │ │ │ +000009b0: 6520 7665 7273 696f 6e73 2028 6461 7973 e versions (days │ │ │ │ +000009c0: 290a 2020 2020 6f66 2062 6163 6b75 7065 ). of backupe │ │ │ │ +000009d0: 6420 6669 6c65 732e 2053 686f 7773 2074 d files. Shows t │ │ │ │ +000009e0: 6865 2073 7465 7073 2077 6865 6e20 6361 he steps when ca │ │ │ │ +000009f0: 6c63 756c 6174 696e 6720 7468 650a 2020 lculating the. │ │ │ │ +00000a00: 2020 7370 6163 6520 7573 6564 2062 7920 space used by │ │ │ │ +00000a10: 7468 6520 7370 6563 6966 6965 6420 6261 the specified ba │ │ │ │ +00000a20: 636b 7570 730a 0a3d 6974 656d 2042 3c2d ckups..=item B<- │ │ │ │ +00000a30: 2d6c 696e 6b73 3e2c 2042 3c2d 6c3e 0a0a -links>, B<-l>.. │ │ │ │ +00000a40: 2020 2020 416c 736f 2070 7269 6e74 2073 Also print s │ │ │ │ +00000a50: 7461 7469 7374 6963 2061 626f 7574 2068 tatistic about h │ │ │ │ +00000a60: 6f77 206d 616e 7920 6c69 6e6b 7320 7468 ow many links th │ │ │ │ +00000a70: 6520 6669 6c65 7320 6861 7665 0a20 2020 e files have. │ │ │ │ +00000a80: 2061 6e64 2068 6f77 206d 7563 6820 7370 and how much sp │ │ │ │ +00000a90: 6163 6520 7468 6973 2073 6176 6573 2e0a ace this saves.. │ │ │ │ +00000aa0: 0a3d 6261 636b 0a0a 3d68 6561 6431 2043 .=back..=head1 C │ │ │ │ +00000ab0: 4f50 5952 4947 4854 0a0a 436f 7079 7269 OPYRIGHT..Copyri │ │ │ │ +00000ac0: 6768 7420 2863 2920 3230 3032 2d32 3030 ght (c) 2002-200 │ │ │ │ +00000ad0: 3820 6279 2048 6569 6e7a 2d4a 6f73 6566 8 by Heinz-Josef │ │ │ │ +00000ae0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ │ │ │ │ +00000af0: 4d45 290a 5075 626c 6973 6865 6420 756e ME).Published un │ │ │ │ +00000b00: 6465 7220 7468 6520 474e 5520 4765 6e65 der the GNU Gene │ │ │ │ +00000b10: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ │ +00000b20: 7365 2076 3320 6f72 2061 6e79 206c 6174 se v3 or any lat │ │ │ │ +00000b30: 6572 2076 6572 7369 6f6e 0a0a 3d63 7574 er version..=cut │ │ │ │ +00000b40: 0a0a 6d79 2024 4865 6c70 203d 206a 6f69 ..my $Help = joi │ │ │ │ +00000b50: 6e28 2727 2c20 6772 6570 2821 2f5e 5c73 n('', grep(!/^\s │ │ │ │ +00000b60: 2a24 2f2c 2060 706f 6432 7465 7874 2024 *$/, `pod2text $ │ │ │ │ +00000b70: 3060 2929 3b0a 2448 656c 7020 3d20 2263 0`));.$Help = "c │ │ │ │ +00000b80: 616e 6e6f 7420 6669 6e64 2070 6f64 3274 annot find pod2t │ │ │ │ +00000b90: 6578 742c 2073 6565 2064 6f63 756d 656e ext, see documen │ │ │ │ +00000ba0: 7461 7469 6f6e 2066 6f72 2064 6574 6169 tation for detai │ │ │ │ +00000bb0: 6c73 5c6e 220a 2020 2020 756e 6c65 7373 ls\n". unless │ │ │ │ +00000bc0: 2024 4865 6c70 3b0a 0a64 6965 2022 2448 $Help;..die "$H │ │ │ │ +00000bd0: 656c 7022 2075 6e6c 6573 7320 4041 5247 elp" unless @ARG │ │ │ │ +00000be0: 563b 0a0a 2670 7269 6e74 5665 7273 696f V;..&printVersio │ │ │ │ +00000bf0: 6e73 285c 4041 5247 562c 2027 2d56 2729 ns(\@ARGV, '-V') │ │ │ │ +00000c00: 3b0a 0a0a 6d79 2024 4368 6563 6b50 6172 ;...my $CheckPar │ │ │ │ +00000c10: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara │ │ │ │ +00000c20: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi │ │ │ │ +00000c30: 7374 7327 203d 3e20 2779 6573 272c 0a09 sts' => 'yes',.. │ │ │ │ +00000c40: 0920 2020 2027 2d6c 6973 7427 203d 3e20 . '-list' => │ │ │ │ +00000c50: 5b4f 7074 696f 6e2d 3e6e 6577 2827 2d6e [Option->new('-n │ │ │ │ +00000c60: 616d 6527 203d 3e20 2776 6572 626f 7365 ame' => 'verbose │ │ │ │ +00000c70: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00000c80: 5f6f 7074 696f 6e27 203d 3e20 272d 7627 _option' => '-v' │ │ │ │ +00000c90: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00000ca0: 616c 6961 7327 203d 3e20 272d 2d76 6572 alias' => '--ver │ │ │ │ +00000cb0: 626f 7365 2729 2c0a 0909 0909 4f70 7469 bose'),.....Opti │ │ │ │ +00000cc0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +00000cd0: 3d3e 2027 6c69 6e6b 7327 2c0a 0909 0909 => 'links',..... │ │ │ │ +00000ce0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +00000cf0: 2720 3d3e 2027 2d6c 272c 0a09 0909 0909 ' => '-l',...... │ │ │ │ +00000d00: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ │ +00000d10: 3d3e 2027 2d2d 6c69 6e6b 7327 290a 0909 => '--links')... │ │ │ │ +00000d20: 0909 5d0a 0909 2020 2020 293b 0a0a 2443 ..]... );..$C │ │ │ │ +00000d30: 6865 636b 5061 722d 3e63 6865 636b 2827 heckPar->check(' │ │ │ │ +00000d40: 2d61 7267 7627 203d 3e20 5c40 4152 4756 -argv' => \@ARGV │ │ │ │ +00000d50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ │ +00000d60: 2020 2027 2d68 656c 7027 203d 3e20 2448 '-help' => $H │ │ │ │ +00000d70: 656c 700a 2020 2020 2020 2020 2020 2020 elp. │ │ │ │ +00000d80: 2020 2020 2029 3b0a 0a6d 7920 2476 6572 );..my $ver │ │ │ │ +00000d90: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar │ │ │ │ +00000da0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ │ +00000db0: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m │ │ │ │ +00000dc0: 7920 246c 696e 6b73 203d 2024 4368 6563 y $links = $Chec │ │ │ │ +00000dd0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ │ +00000de0: 6f75 7450 6172 2827 6c69 6e6b 7327 293b outPar('links'); │ │ │ │ +00000df0: 0a0a 7072 696e 7420 2224 5645 5253 494f ..print "$VERSIO │ │ │ │ +00000e00: 4e70 4e61 6d65 2c20 246d 6169 6e3a 3a53 NpName, $main::S │ │ │ │ +00000e10: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO │ │ │ │ +00000e20: 4e2c 2062 7569 6c64 2024 5645 5253 494f N, build $VERSIO │ │ │ │ +00000e30: 4e73 766e 4944 5c6e 220a 2020 2020 6966 NsvnID\n". if │ │ │ │ +00000e40: 2024 7665 7262 6f73 653b 0a0a 6469 6520 $verbose;..die │ │ │ │ +00000e50: 2264 6972 6563 746f 7269 6573 206d 6973 "directories mis │ │ │ │ +00000e60: 7369 6e67 2069 6e20 6172 6775 6d65 6e74 sing in argument │ │ │ │ +00000e70: 206c 6973 7422 0a20 2020 2069 6620 2824 list". if ($ │ │ │ │ +00000e80: 4368 6563 6b50 6172 2d3e 6765 744c 6973 CheckPar->getLis │ │ │ │ +00000e90: 7450 6172 2829 203d 3d20 3029 3b0a 0a23 tPar() == 0);..# │ │ │ │ +00000ea0: 2050 72fc 6665 6e2c 206f 6220 4469 7265 Pr.fen, ob Dire │ │ │ │ +00000eb0: 6374 6f72 6965 7320 fc62 6572 6861 7570 ctories .berhaup │ │ │ │ +00000ec0: 7420 6578 6973 7469 6572 656e 0a6d 7920 t existieren.my │ │ │ │ +00000ed0: 2464 3b0a 666f 7265 6163 6820 2464 2028 $d;.foreach $d ( │ │ │ │ +00000ee0: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi │ │ │ │ +00000ef0: 7374 5061 7228 2929 0a7b 0a20 2020 2064 stPar()).{. d │ │ │ │ +00000f00: 6965 2022 3c24 643e 2064 6f65 7320 6e6f ie "<$d> does no │ │ │ │ +00000f10: 7420 6578 6973 7422 2075 6e6c 6573 7320 t exist" unless │ │ │ │ +00000f20: 282d 6520 2464 293b 0a20 2020 2064 6965 (-e $d);. die │ │ │ │ +00000f30: 2022 3c24 643e 2069 7320 6e6f 7420 6120 "<$d> is not a │ │ │ │ +00000f40: 6469 7265 6374 6f72 6965 7322 2075 6e6c directories" unl │ │ │ │ +00000f50: 6573 7320 282d 6420 2464 293b 0a7d 0a0a ess (-d $d);.}.. │ │ │ │ +00000f60: 0a0a 256d 6169 6e3a 3a6e 6f4c 696e 6b73 ..%main::noLinks │ │ │ │ +00000f70: 3b20 2020 2023 206b 6579 203d 2069 6e6f ; # key = ino │ │ │ │ +00000f80: 6465 2c0a 2020 2020 2020 2020 2020 2020 de,. │ │ │ │ +00000f90: 2020 2020 2020 2023 2020 2020 2020 2020 # │ │ │ │ +00000fa0: 2020 2020 2020 2773 697a 6527 2020 2020 'size' │ │ │ │ +00000fb0: 3d3e 2044 6174 6569 6772 f6df 6520 2865 => Dateigr..e (e │ │ │ │ +00000fc0: 696e 7a65 6c6e 6520 4461 7465 6929 0a20 inzelne Datei). │ │ │ │ +00000fd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000fe0: 2020 2320 2020 2020 2020 2020 2020 2020 # │ │ │ │ +00000ff0: 2027 7265 7374 4e6f 4c69 6e6b 7327 203d 'restNoLinks' = │ │ │ │ +00001000: 3e20 6269 7368 6572 2067 657a e468 6c74 > bisher gez.hlt │ │ │ │ +00001010: 6520 416e 7a61 686c 204c 696e 6b73 0a0a e Anzahl Links.. │ │ │ │ +00001020: 246d 6169 6e3a 3a73 756d 4c6f 6361 6c20 $main::sumLocal │ │ │ │ +00001030: 3d20 303b 0a40 6d61 696e 3a3a 6e6f 4669 = 0;.@main::noFi │ │ │ │ +00001040: 6c65 7357 6974 684c 696e 6b73 203d 2028 lesWithLinks = ( │ │ │ │ +00001050: 293b 0a40 6d61 696e 3a3a 7369 7a65 4669 );.@main::sizeFi │ │ │ │ +00001060: 6c65 7357 6974 684c 696e 6b73 203d 2028 lesWithLinks = ( │ │ │ │ +00001070: 293b 0a0a 0a6d 7920 2473 203d 2027 273b );...my $s = ''; │ │ │ │ +00001080: 0a66 6f72 6561 6368 2024 6420 2824 4368 .foreach $d ($Ch │ │ │ │ +00001090: 6563 6b50 6172 2d3e 6765 744c 6973 7450 eckPar->getListP │ │ │ │ +000010a0: 6172 2829 290a 7b0a 2020 2020 6966 2028 ar()).{. if ( │ │ │ │ +000010b0: 2d65 2022 2464 2f2e 7374 6f72 6542 6163 -e "$d/.storeBac │ │ │ │ +000010c0: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil │ │ │ │ +000010d0: 652e 627a 3222 290a 2020 2020 7b0a 0970 e.bz2"). {..p │ │ │ │ +000010e0: 7269 6e74 2022 3c24 643e 2061 6666 6563 rint "<$d> affec │ │ │ │ +000010f0: 7465 6420 6279 2075 6e72 6573 6f6c 7665 ted by unresolve │ │ │ │ +00001100: 6420 6c69 6e6b 732c 2073 6b69 7070 696e d links, skippin │ │ │ │ +00001110: 675c 6e22 3b0a 096e 6578 743b 0a20 2020 g\n";..next;. │ │ │ │ +00001120: 207d 0a20 2020 2070 7269 6e74 2022 5f5f }. print "__ │ │ │ │ +00001130: 5f5f 5f5f 5f5f 6368 6563 6b69 6e67 2024 ______checking $ │ │ │ │ +00001140: 6420 2e2e 2e5c 6e22 2069 6620 2824 7665 d ...\n" if ($ve │ │ │ │ +00001150: 7262 6f73 6529 3b0a 2020 2020 6368 6469 rbose);. chdi │ │ │ │ +00001160: 7220 2224 6422 3b0a 2020 2020 2674 7261 r "$d";. &tra │ │ │ │ +00001170: 7665 7273 6554 7265 6573 2829 3b0a 2020 verseTrees();. │ │ │ │ +00001180: 2020 6368 6469 7220 222e 2e22 3b0a 2020 chdir "..";. │ │ │ │ +00001190: 2020 6966 2028 2476 6572 626f 7365 290a if ($verbose). │ │ │ │ +000011a0: 2020 2020 7b0a 0970 7269 6e74 2022 2073 {..print " s │ │ │ │ +000011b0: 756d 4c6f 6361 6c20 3d20 222c 2026 6875 umLocal = ", &hu │ │ │ │ +000011c0: 6d61 6e52 6561 6461 626c 6528 246d 6169 manReadable($mai │ │ │ │ +000011d0: 6e3a 3a73 756d 4c6f 6361 6c29 2c20 2224 n::sumLocal), "$ │ │ │ │ +000011e0: 735c 6e22 3b0a 096d 7920 2473 756d 5368 s\n";..my $sumSh │ │ │ │ +000011f0: 6172 6564 3b0a 0966 6f72 6561 6368 2024 ared;..foreach $ │ │ │ │ +00001200: 6420 286b 6579 7320 256d 6169 6e3a 3a6e d (keys %main::n │ │ │ │ +00001210: 6f4c 696e 6b73 290a 097b 0a09 2020 2020 oLinks)..{.. │ │ │ │ +00001220: 2473 756d 5368 6172 6564 202b 3d20 246d $sumShared += $m │ │ │ │ +00001230: 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 647d ain::noLinks{$d} │ │ │ │ +00001240: 7b27 7369 7a65 277d 3b0a 097d 0a09 7072 {'size'};..}..pr │ │ │ │ +00001250: 696e 7420 2273 756d 5368 6172 6564 203d int "sumShared = │ │ │ │ +00001260: 2022 2c20 2668 756d 616e 5265 6164 6162 ", &humanReadab │ │ │ │ +00001270: 6c65 2824 7375 6d53 6861 7265 6429 2c20 le($sumShared), │ │ │ │ +00001280: 2224 735c 6e22 3b0a 0924 7320 3d20 2220 "$s\n";..$s = " │ │ │ │ +00001290: 2861 6363 756d 756c 6174 6564 2922 3b0a (accumulated)";. │ │ │ │ +000012a0: 2020 2020 7d0a 7d0a 0a23 205a 7573 616d }.}..# Zusam │ │ │ │ +000012b0: 6d65 6e72 6563 686e 656e 2064 6572 2045 menrechnen der E │ │ │ │ +000012c0: 7267 6562 6e69 7373 650a 756e 6c65 7373 rgebnisse.unless │ │ │ │ +000012d0: 2028 2476 6572 626f 7365 290a 7b0a 2020 ($verbose).{. │ │ │ │ +000012e0: 2020 7072 696e 7420 2220 7375 6d4c 6f63 print " sumLoc │ │ │ │ +000012f0: 616c 203d 2022 2c20 2668 756d 616e 5265 al = ", &humanRe │ │ │ │ +00001300: 6164 6162 6c65 2824 6d61 696e 3a3a 7375 adable($main::su │ │ │ │ +00001310: 6d4c 6f63 616c 292c 2022 5c6e 223b 0a20 mLocal), "\n";. │ │ │ │ +00001320: 2020 206d 7920 2473 756d 5368 6172 6564 my $sumShared │ │ │ │ +00001330: 3b0a 2020 2020 666f 7265 6163 6820 2464 ;. foreach $d │ │ │ │ +00001340: 2028 6b65 7973 2025 6d61 696e 3a3a 6e6f (keys %main::no │ │ │ │ +00001350: 4c69 6e6b 7329 0a20 2020 207b 0a09 2473 Links). {..$s │ │ │ │ +00001360: 756d 5368 6172 6564 202b 3d20 246d 6169 umShared += $mai │ │ │ │ +00001370: 6e3a 3a6e 6f4c 696e 6b73 7b24 647d 7b27 n::noLinks{$d}{' │ │ │ │ +00001380: 7369 7a65 277d 3b0a 2020 2020 7d0a 2020 size'};. }. │ │ │ │ +00001390: 2020 7072 696e 7420 2273 756d 5368 6172 print "sumShar │ │ │ │ +000013a0: 6564 203d 2022 2c20 2668 756d 616e 5265 ed = ", &humanRe │ │ │ │ +000013b0: 6164 6162 6c65 2824 7375 6d53 6861 7265 adable($sumShare │ │ │ │ +000013c0: 6429 2c20 225c 6e22 3b0a 7d0a 0a69 6620 d), "\n";.}..if │ │ │ │ +000013d0: 2824 6c69 6e6b 7329 0a7b 0a20 2020 2070 ($links).{. p │ │ │ │ +000013e0: 7269 6e74 2022 5c6e 6c69 6e6b 7320 7c20 rint "\nlinks | │ │ │ │ +000013f0: 2066 696c 6573 207c 2073 697a 6520 7c20 files | size | │ │ │ │ +00001400: 6c20 2a20 7320 7c20 6c65 7373 5c6e 223b l * s | less\n"; │ │ │ │ +00001410: 0a20 2020 2070 7269 6e74 2022 2d2d 2d2d . print "---- │ │ │ │ +00001420: 2d2d 2b2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d --+--------+---- │ │ │ │ +00001430: 2d2d 2b2d 2d2d 2d2d 2d20 2b2d 2d2d 2d2d --+------ +----- │ │ │ │ +00001440: 5c6e 223b 0a20 2020 2066 6f72 2028 2464 \n";. for ($d │ │ │ │ +00001450: 203d 2031 203b 2024 6420 3c20 406d 6169 = 1 ; $d < @mai │ │ │ │ +00001460: 6e3a 3a6e 6f46 696c 6573 5769 7468 4c69 n::noFilesWithLi │ │ │ │ +00001470: 6e6b 7320 3b20 2464 2b2b 290a 2020 2020 nks ; $d++). │ │ │ │ +00001480: 7b0a 096e 6578 7420 756e 6c65 7373 2024 {..next unless $ │ │ │ │ +00001490: 6d61 696e 3a3a 6e6f 4669 6c65 7357 6974 main::noFilesWit │ │ │ │ +000014a0: 684c 696e 6b73 5b24 645d 3b0a 096d 7920 hLinks[$d];..my │ │ │ │ +000014b0: 246c 7320 3d20 2464 202a 2024 6d61 696e $ls = $d * $main │ │ │ │ +000014c0: 3a3a 7369 7a65 4669 6c65 7357 6974 684c ::sizeFilesWithL │ │ │ │ +000014d0: 696e 6b73 5b24 645d 3b0a 0970 7269 6e74 inks[$d];..print │ │ │ │ +000014e0: 6628 2220 2534 6420 7c20 2536 6420 7c20 f(" %4d | %6d | │ │ │ │ +000014f0: 2573 207c 2020 2573 207c 2025 735c 6e22 %s | %s | %s\n" │ │ │ │ +00001500: 2c20 2464 2c20 246d 6169 6e3a 3a6e 6f46 , $d, $main::noF │ │ │ │ +00001510: 696c 6573 5769 7468 4c69 6e6b 735b 2464 ilesWithLinks[$d │ │ │ │ +00001520: 5d2c 0a09 2020 2020 2020 2026 6875 6d61 ],.. &huma │ │ │ │ +00001530: 6e52 6561 6461 626c 6528 246d 6169 6e3a nReadable($main: │ │ │ │ +00001540: 3a73 697a 6546 696c 6573 5769 7468 4c69 :sizeFilesWithLi │ │ │ │ +00001550: 6e6b 735b 2464 5d29 2c0a 0920 2020 2020 nks[$d]),.. │ │ │ │ +00001560: 2020 2668 756d 616e 5265 6164 6162 6c65 &humanReadable │ │ │ │ +00001570: 2824 6c73 292c 0a09 2020 2020 2020 2026 ($ls),.. & │ │ │ │ +00001580: 6875 6d61 6e52 6561 6461 626c 6528 246c humanReadable($l │ │ │ │ +00001590: 7320 2d20 246d 6169 6e3a 3a73 697a 6546 s - $main::sizeF │ │ │ │ +000015a0: 696c 6573 5769 7468 4c69 6e6b 735b 2464 ilesWithLinks[$d │ │ │ │ +000015b0: 5d29 293b 0a20 2020 207d 0a7d 0a0a 6578 ]));. }.}..ex │ │ │ │ +000015c0: 6974 2030 3b0a 0a0a 2323 2323 2323 2323 it 0;...######## │ │ │ │ +000015d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000015e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000015f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +00001600: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ │ +00001610: 7562 2074 7261 7665 7273 6554 7265 6573 ub traverseTrees │ │ │ │ +00001620: 0a7b 0a20 2020 206c 6f63 616c 202a 4449 .{. local *DI │ │ │ │ +00001630: 523b 0a20 2020 206f 7065 6e64 6972 2844 R;. opendir(D │ │ │ │ +00001640: 4952 2c20 272e 2729 3b0a 0a20 2020 206d IR, '.');.. m │ │ │ │ +00001650: 7920 2466 3b0a 2020 2020 7768 696c 6520 y $f;. while │ │ │ │ +00001660: 2824 6620 3d20 7265 6164 6469 7220 4449 ($f = readdir DI │ │ │ │ +00001670: 5229 0a20 2020 207b 0a09 6966 2028 2d6c R). {..if (-l │ │ │ │ +00001680: 2024 6629 0a09 7b0a 0920 2020 206d 7920 $f)..{.. my │ │ │ │ +00001690: 2824 696e 6f64 652c 2024 6e6c 696e 6b2c ($inode, $nlink, │ │ │ │ +000016a0: 2024 7369 7a65 2920 3d20 286c 7374 6174 $size) = (lstat │ │ │ │ +000016b0: 2824 6629 295b 312c 332c 375d 3b0a 0920 ($f))[1,3,7];.. │ │ │ │ +000016c0: 2020 2069 6620 2864 6566 696e 6564 2824 if (defined($ │ │ │ │ +000016d0: 6d61 696e 3a3a 6e6f 4c69 6e6b 737b 2469 main::noLinks{$i │ │ │ │ +000016e0: 6e6f 6465 7d29 290a 0920 2020 207b 0a09 node})).. {.. │ │ │ │ +000016f0: 0969 6620 282d 2d24 6d61 696e 3a3a 6e6f .if (--$main::no │ │ │ │ +00001700: 4c69 6e6b 737b 2469 6e6f 6465 7d7b 2772 Links{$inode}{'r │ │ │ │ +00001710: 6573 744e 6f4c 696e 6b73 277d 203d 3d20 estNoLinks'} == │ │ │ │ +00001720: 3029 0a09 097b 0a09 0920 2020 2024 6d61 0)...{... $ma │ │ │ │ +00001730: 696e 3a3a 7375 6d4c 6f63 616c 202b 3d20 in::sumLocal += │ │ │ │ +00001740: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$ │ │ │ │ +00001750: 696e 6f64 657d 7b27 7369 7a65 277d 3b0a inode}{'size'};. │ │ │ │ +00001760: 0909 2020 2020 6465 6c65 7465 2024 6d61 .. delete $ma │ │ │ │ +00001770: 696e 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f in::noLinks{$ino │ │ │ │ +00001780: 6465 7d3b 0a09 0920 2020 206e 6578 743b de};... next; │ │ │ │ +00001790: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. │ │ │ │ +000017a0: 2065 6c73 650a 0920 2020 207b 0a09 0969 else.. {...i │ │ │ │ +000017b0: 6620 2824 6e6c 696e 6b20 3d3d 2031 290a f ($nlink == 1). │ │ │ │ +000017c0: 0909 7b0a 0909 2020 2020 246d 6169 6e3a ..{... $main: │ │ │ │ +000017d0: 3a73 756d 4c6f 6361 6c20 2b3d 2024 7369 :sumLocal += $si │ │ │ │ +000017e0: 7a65 3b0a 0909 2020 2020 6e65 7874 3b0a ze;... next;. │ │ │ │ +000017f0: 0909 7d0a 0909 246d 6169 6e3a 3a6e 6f4c ..}...$main::noL │ │ │ │ +00001800: 696e 6b73 7b24 696e 6f64 657d 7b27 7369 inks{$inode}{'si │ │ │ │ +00001810: 7a65 277d 203d 2024 7369 7a65 3b0a 0909 ze'} = $size;... │ │ │ │ +00001820: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$ │ │ │ │ +00001830: 696e 6f64 657d 7b27 7265 7374 4e6f 4c69 inode}{'restNoLi │ │ │ │ +00001840: 6e6b 7327 7d20 3d20 246e 6c69 6e6b 202d nks'} = $nlink - │ │ │ │ +00001850: 2031 3b0a 0920 2020 207d 0a09 7d0a 0965 1;.. }..}..e │ │ │ │ +00001860: 6c73 6966 2028 2d66 2024 6629 0a09 7b0a lsif (-f $f)..{. │ │ │ │ +00001870: 0920 2020 206d 7920 2824 696e 6f64 652c . my ($inode, │ │ │ │ +00001880: 2024 6e6c 696e 6b2c 2024 7369 7a65 2920 $nlink, $size) │ │ │ │ +00001890: 3d20 2873 7461 7428 2466 2929 5b31 2c33 = (stat($f))[1,3 │ │ │ │ +000018a0: 2c37 5d3b 0a09 2020 2020 6966 2028 6465 ,7];.. if (de │ │ │ │ +000018b0: 6669 6e65 6428 246d 6169 6e3a 3a6e 6f4c fined($main::noL │ │ │ │ +000018c0: 696e 6b73 7b24 696e 6f64 657d 2929 0a09 inks{$inode})).. │ │ │ │ +000018d0: 2020 2020 7b0a 0909 6966 2028 2d2d 246d {...if (--$m │ │ │ │ +000018e0: 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 696e ain::noLinks{$in │ │ │ │ +000018f0: 6f64 657d 7b27 7265 7374 4e6f 4c69 6e6b ode}{'restNoLink │ │ │ │ +00001900: 7327 7d20 3d3d 2030 290a 0909 7b0a 0909 s'} == 0)...{... │ │ │ │ +00001910: 2020 2020 246d 6169 6e3a 3a73 756d 4c6f $main::sumLo │ │ │ │ +00001920: 6361 6c20 2b3d 2024 6d61 696e 3a3a 6e6f cal += $main::no │ │ │ │ +00001930: 4c69 6e6b 737b 2469 6e6f 6465 7d7b 2773 Links{$inode}{'s │ │ │ │ +00001940: 697a 6527 7d3b 0a09 0920 2020 2064 656c ize'};... del │ │ │ │ +00001950: 6574 6520 246d 6169 6e3a 3a6e 6f4c 696e ete $main::noLin │ │ │ │ +00001960: 6b73 7b24 696e 6f64 657d 3b0a 0909 2020 ks{$inode};... │ │ │ │ +00001970: 2020 6e65 7874 3b0a 0909 7d0a 0920 2020 next;...}.. │ │ │ │ +00001980: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ │ +00001990: 2020 7b0a 0909 2b2b 246d 6169 6e3a 3a6e {...++$main::n │ │ │ │ +000019a0: 6f46 696c 6573 5769 7468 4c69 6e6b 735b oFilesWithLinks[ │ │ │ │ +000019b0: 246e 6c69 6e6b 5d3b 0a09 0924 6d61 696e $nlink];...$main │ │ │ │ +000019c0: 3a3a 7369 7a65 4669 6c65 7357 6974 684c ::sizeFilesWithL │ │ │ │ +000019d0: 696e 6b73 5b24 6e6c 696e 6b5d 202b 3d20 inks[$nlink] += │ │ │ │ +000019e0: 2473 697a 653b 0a09 0969 6620 2824 6e6c $size;...if ($nl │ │ │ │ +000019f0: 696e 6b20 3d3d 2031 290a 0909 7b0a 0909 ink == 1)...{... │ │ │ │ +00001a00: 2020 2020 246d 6169 6e3a 3a73 756d 4c6f $main::sumLo │ │ │ │ +00001a10: 6361 6c20 2b3d 2024 7369 7a65 3b0a 0909 cal += $size;... │ │ │ │ +00001a20: 2020 2020 6e65 7874 3b0a 0909 7d0a 0909 next;...}... │ │ │ │ +00001a30: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$ │ │ │ │ +00001a40: 696e 6f64 657d 7b27 7369 7a65 277d 203d inode}{'size'} = │ │ │ │ +00001a50: 2024 7369 7a65 3b0a 0909 246d 6169 6e3a $size;...$main: │ │ │ │ +00001a60: 3a6e 6f4c 696e 6b73 7b24 696e 6f64 657d :noLinks{$inode} │ │ │ │ +00001a70: 7b27 7265 7374 4e6f 4c69 6e6b 7327 7d20 {'restNoLinks'} │ │ │ │ +00001a80: 3d20 246e 6c69 6e6b 202d 2031 3b0a 0920 = $nlink - 1;.. │ │ │ │ +00001a90: 2020 207d 0a09 7d0a 0965 6c73 6966 2028 }..}..elsif ( │ │ │ │ +00001aa0: 2d64 2024 6629 0a09 7b0a 0920 2020 206e -d $f)..{.. n │ │ │ │ +00001ab0: 6578 7420 6966 2028 2466 2065 7120 272e ext if ($f eq '. │ │ │ │ +00001ac0: 2720 6f72 2024 6620 6571 2027 2e2e 2729 ' or $f eq '..') │ │ │ │ +00001ad0: 3b0a 0920 2020 2063 6864 6972 2022 2466 ;.. chdir "$f │ │ │ │ +00001ae0: 223b 0a09 2020 2020 2674 7261 7665 7273 ";.. &travers │ │ │ │ +00001af0: 6554 7265 6573 2829 3b0a 0920 2020 2063 eTrees();.. c │ │ │ │ +00001b00: 6864 6972 2022 2e2e 223b 0a09 7d0a 2020 hdir "..";..}. │ │ │ │ +00001b10: 2020 7d0a 2020 2020 636c 6f73 6528 4449 }. close(DI │ │ │ │ +00001b20: 5229 3b0a 7d0a R);.}. │ │ │ ├── ./usr/bin/storeBackupls │ │ │ │ @@ -1,4 +1,735 @@ │ │ │ │ -00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ │ -00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ │ -00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ │ -00000030: 706c 730a pls. │ │ │ │ +00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ │ +00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ │ +00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ │ +00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ │ +00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# │ │ │ │ +00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ │ +00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ │ +00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ │ +00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ │ +00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ │ +000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ │ +000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ │ +000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ │ +000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ │ +000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ │ +000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ │ +00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ │ +00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ │ +00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ │ +00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ │ +00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ │ +00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ │ +00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ │ +00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ │ +00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ │ +00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ │ +000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ │ +000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ │ +000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ │ +000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ │ +000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ │ +000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ │ +00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ │ +00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ │ +00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ │ +00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ │ +00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ │ +00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ │ +00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ │ +00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ │ +00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ │ +00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ │ +000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ │ +000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ │ +000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ │ +000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#.#.. │ │ │ │ +00000300: 7573 6520 4663 6e74 6c20 7177 284f 5f52 use Fcntl qw(O_R │ │ │ │ +00000310: 4457 5220 4f5f 4352 4541 5429 3b0a 7573 DWR O_CREAT);.us │ │ │ │ +00000320: 6520 4669 6c65 3a3a 436f 7079 3b0a 7573 e File::Copy;.us │ │ │ │ +00000330: 6520 504f 5349 583b 0a75 7365 2044 6967 e POSIX;.use Dig │ │ │ │ +00000340: 6573 743a 3a4d 4435 2071 7728 6d64 355f est::MD5 qw(md5_ │ │ │ │ +00000350: 6865 7829 3b0a 0a0a 6d79 2024 5645 5253 hex);...my $VERS │ │ │ │ +00000360: 494f 4e20 3d20 2724 4964 3a20 7374 6f72 ION = '$Id: stor │ │ │ │ +00000370: 6542 6163 6b75 706c 732e 706c 2033 3634 eBackupls.pl 364 │ │ │ │ +00000380: 2032 3031 322d 3032 2d31 3220 3134 3a31 2012-02-12 14:1 │ │ │ │ +00000390: 343a 3434 5a20 686a 6320 2420 273b 0a70 4:44Z hjc $ ';.p │ │ │ │ +000003a0: 7573 6820 4056 4552 5349 4f4e 2c20 2456 ush @VERSION, $V │ │ │ │ +000003b0: 4552 5349 4f4e 3b0a 6d79 2028 2456 4552 ERSION;.my ($VER │ │ │ │ +000003c0: 5349 4f4e 704e 616d 652c 2024 5645 5253 SIONpName, $VERS │ │ │ │ +000003d0: 494f 4e73 766e 4944 2920 3d20 2456 4552 IONsvnID) = $VER │ │ │ │ +000003e0: 5349 4f4e 203d 7e20 2f49 643a 5c73 2b28 SION =~ /Id:\s+( │ │ │ │ +000003f0: 5c53 2b29 5c73 2b28 5c64 2b29 2f3b 0a24 \S+)\s+(\d+)/;.$ │ │ │ │ +00000400: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ │ +00000410: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ │ +00000420: 3b0a 0a75 7365 2073 7472 6963 743b 0a0a ;..use strict;.. │ │ │ │ +00000430: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. │ │ │ │ +00000440: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi │ │ │ │ +00000450: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir │ │ │ │ +00000460: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D │ │ │ │ +00000470: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein │ │ │ │ +00000480: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol │ │ │ │ +00000490: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis │ │ │ │ +000004a0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i │ │ │ │ +000004b0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). │ │ │ │ +000004c0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f │ │ │ │ +000004d0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my │ │ │ │ +000004e0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink │ │ │ │ +000004f0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i │ │ │ │ +00000500: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link, │ │ │ │ +00000510: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne "/").. │ │ │ │ +00000520: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~ │ │ │ │ +00000530: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\/]+$/$link │ │ │ │ +00000540: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e │ │ │ │ +00000550: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi │ │ │ │ +00000560: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. │ │ │ │ +00000570: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $ │ │ │ │ +00000580: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi │ │ │ │ +00000590: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$ │ │ │ │ +000005a0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = "/$file"; │ │ │ │ +000005b0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ │ +000005c0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD │ │ │ │ +000005d0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR "<$file> doe │ │ │ │ +000005e0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\n"; │ │ │ │ +000005f0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }. │ │ │ │ +00000600: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= "/. │ │ │ │ +00000610: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib"; │ │ │ │ +00000620: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den │ │ │ │ +00000630: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. │ │ │ │ +00000640: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/ │ │ │ │ +00000650: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch │ │ │ │ +00000660: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. │ │ │ │ +00000670: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir) │ │ │ │ +00000680: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD │ │ │ │ +00000690: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`; │ │ │ │ +000006a0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;. │ │ │ │ +000006b0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;. │ │ │ │ +000006c0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split │ │ │ │ +000006d0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir("$absDir │ │ │ │ +000006e0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file"));. }. │ │ │ │ +000006f0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ │ +00000700: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR "<$ │ │ │ │ +00000710: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex │ │ │ │ +00000720: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\n"; │ │ │ │ +00000730: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl │ │ │ │ +00000740: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. │ │ │ │ +00000750: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift │ │ │ │ +00000760: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return (' │ │ │ │ +00000770: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles │ │ │ │ +00000780: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\//) │ │ │ │ +00000790: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa │ │ │ │ +000007a0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname.. │ │ │ │ +000007b0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f │ │ │ │ +000007c0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ │ │ │ │ +000007d0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\/(.*)$/s; │ │ │ │ +000007e0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' │ │ │ │ +000007f0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq ''); │ │ │ │ +00000800: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000810: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls │ │ │ │ +00000820: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename. │ │ │ │ +00000830: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir │ │ │ │ +00000840: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my ( │ │ │ │ +00000850: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = & │ │ │ │ +00000860: 6c69 6250 6174 6828 2430 293b 0a70 7573 libPath($0);.pus │ │ │ │ +00000870: 6820 4049 4e43 2c20 2224 7265 7122 3b0a h @INC, "$req";. │ │ │ │ +00000880: 0a72 6571 7569 7265 2027 6368 6563 6b50 .require 'checkP │ │ │ │ +00000890: 6172 616d 322e 706c 273b 0a72 6571 7569 aram2.pl';.requi │ │ │ │ +000008a0: 7265 2027 6461 7465 546f 6f6c 732e 706c re 'dateTools.pl │ │ │ │ +000008b0: 273b 0a72 6571 7569 7265 2027 7665 7273 ';.require 'vers │ │ │ │ +000008c0: 696f 6e2e 706c 273b 0a72 6571 7569 7265 ion.pl';.require │ │ │ │ +000008d0: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib │ │ │ │ +000008e0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p │ │ │ │ +000008f0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir │ │ │ │ +00000900: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';. │ │ │ │ +00000910: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa │ │ │ │ +00000920: 636b 7570 4c69 622e 706c 273b 0a0a 6d79 ckupLib.pl';..my │ │ │ │ +00000930: 2024 6b65 6570 416c 6c20 3d20 2733 3064 $keepAll = '30d │ │ │ │ +00000940: 273b 0a6d 7920 246b 6565 7044 7570 6c69 ';.my $keepDupli │ │ │ │ +00000950: 6361 7465 203d 2027 3764 273b 0a24 6d61 cate = '7d';.$ma │ │ │ │ +00000960: 696e 3a3a 6368 6563 6b53 756d 4669 6c65 in::checkSumFile │ │ │ │ +00000970: 203d 2027 2e6d 6435 4368 6563 6b53 756d = '.md5CheckSum │ │ │ │ +00000980: 7327 3b0a 246d 6169 6e3a 3a63 686d 6f64 s';.$main::chmod │ │ │ │ +00000990: 4d44 3546 696c 6520 3d20 2730 3630 3027 MD5File = '0600' │ │ │ │ +000009a0: 3b0a 6d79 2024 6368 6563 6b53 756d 4669 ;.my $checkSumFi │ │ │ │ +000009b0: 6c65 203d 2027 2e6d 6435 4368 6563 6b53 le = '.md5CheckS │ │ │ │ +000009c0: 756d 7327 3b0a 0a3d 6865 6164 3120 4e41 ums';..=head1 NA │ │ │ │ +000009d0: 4d45 0a0a 7374 6f72 6542 6163 6b75 706c ME..storeBackupl │ │ │ │ +000009e0: 732e 706c 202d 204c 6973 7473 2062 6163 s.pl - Lists bac │ │ │ │ +000009f0: 6b75 7020 6469 7265 6374 6f72 6965 7320 kup directories │ │ │ │ +00000a00: 6765 6e65 7261 7465 6420 7769 7468 2073 generated with s │ │ │ │ +00000a10: 746f 7265 4261 636b 7570 2e70 6c20 7769 toreBackup.pl wi │ │ │ │ +00000a20: 7468 2077 6565 6b20 6461 792e 0a0a 3d68 th week day...=h │ │ │ │ +00000a30: 6561 6431 2053 594e 4f50 5349 530a 0a20 ead1 SYNOPSIS.. │ │ │ │ +00000a40: 2020 2073 746f 7265 4261 636b 7570 6c73 storeBackupls │ │ │ │ +00000a50: 2e70 6c20 2d66 2063 6f6e 6669 6746 696c .pl -f configFil │ │ │ │ +00000a60: 6520 5b2d 2d70 7269 6e74 5d20 5b73 746f e [--print] [sto │ │ │ │ +00000a70: 7265 4261 636b 7570 2d64 6972 5d0a 2020 reBackup-dir]. │ │ │ │ +00000a80: 2020 7374 6f72 6542 6163 6b75 706c 732e storeBackupls. │ │ │ │ +00000a90: 706c 205b 2d76 5d20 5b2d 2d70 7269 6e74 pl [-v] [--print │ │ │ │ +00000aa0: 5d20 7374 6f72 6542 6163 6b75 702d 6469 ] storeBackup-di │ │ │ │ +00000ab0: 720a 0a3d 6865 6164 3120 4f50 5449 4f4e r..=head1 OPTION │ │ │ │ +00000ac0: 530a 0a3d 6f76 6572 2038 0a0a 3d69 7465 S..=over 8..=ite │ │ │ │ +00000ad0: 6d20 423c 2d2d 7665 7262 6f73 653e 2c20 m B<--verbose>, │ │ │ │ +00000ae0: 423c 2d76 3e0a 0a20 2020 2061 6464 6974 B<-v>.. addit │ │ │ │ +00000af0: 696f 6e61 6c20 696e 666f 726d 6174 696f ional informatio │ │ │ │ +00000b00: 6e20 6162 6f75 7420 7468 6520 6261 636b n about the back │ │ │ │ +00000b10: 7570 2064 6972 6563 746f 7269 6573 0a0a up directories.. │ │ │ │ +00000b20: 3d69 7465 6d20 423c 2d2d 7072 696e 743e =item B<--print> │ │ │ │ +00000b30: 0a0a 2020 2020 7072 696e 7420 636f 6e66 .. print conf │ │ │ │ +00000b40: 6967 7572 6174 696f 6e20 7265 6164 2066 iguration read f │ │ │ │ +00000b50: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio │ │ │ │ +00000b60: 6e20 6669 6c65 2061 6e64 2073 746f 700a n file and stop. │ │ │ │ +00000b70: 0a3d 6974 656d 2042 3c2d 2d66 696c 653e .=item B<--file> │ │ │ │ +00000b80: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con │ │ │ │ +00000b90: 6669 6775 7261 7469 6f6e 2066 696c 653b figuration file; │ │ │ │ +00000ba0: 2061 6e61 6c79 7365 2062 6163 6b75 7073 analyse backups │ │ │ │ +00000bb0: 2064 6570 656e 6469 6e67 206f 6e0a 2020 depending on. │ │ │ │ +00000bc0: 2020 6b65 6570 2070 6172 616d 6574 6572 keep parameter │ │ │ │ +00000bd0: 7320 696e 2063 6f6e 6669 6775 7261 7469 s in configurati │ │ │ │ +00000be0: 6f6e 2066 696c 650a 0a3d 6974 656d 2046 on file..=item F │ │ │ │ +00000bf0: 3c73 746f 7265 4261 636b 7570 2d64 6972 .. directory │ │ │ │ +00000c10: 2077 6865 7265 2074 6865 2073 746f 7265 where the store │ │ │ │ +00000c20: 4261 636b 7570 2064 6972 6563 746f 7269 Backup directori │ │ │ │ +00000c30: 6573 2061 7265 0a20 2020 206f 7665 7277 es are. overw │ │ │ │ +00000c40: 7269 7465 7320 7468 6520 7061 7468 2069 rites the path i │ │ │ │ +00000c50: 6e20 7468 6520 636f 6e66 6967 2066 696c n the config fil │ │ │ │ +00000c60: 6520 6966 2075 7365 6420 7769 7468 202d e if used with - │ │ │ │ +00000c70: 660a 0a3d 6261 636b 0a0a 3d68 6561 6431 f..=back..=head1 │ │ │ │ +00000c80: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy │ │ │ │ +00000c90: 7269 6768 7420 2863 2920 3230 3032 2d32 right (c) 2002-2 │ │ │ │ +00000ca0: 3030 382c 3230 3132 2062 7920 4865 696e 008,2012 by Hein │ │ │ │ +00000cb0: 7a2d 4a6f 7365 6620 436c 6165 7320 2873 z-Josef Claes (s │ │ │ │ +00000cc0: 6565 2052 4541 444d 4529 2e0a 5075 626c ee README)..Publ │ │ │ │ +00000cd0: 6973 6865 6420 756e 6465 7220 7468 6520 ished under the │ │ │ │ +00000ce0: 474e 5520 4765 6e65 7261 6c20 5075 626c GNU General Publ │ │ │ │ +00000cf0: 6963 204c 6963 656e 7365 2076 3320 6f72 ic License v3 or │ │ │ │ +00000d00: 2061 6e79 206c 6174 6572 2076 6572 7369 any later versi │ │ │ │ +00000d10: 6f6e 0a0a 3d63 7574 0a0a 6d79 2024 4865 on..=cut..my $He │ │ │ │ +00000d20: 6c70 203d 206a 6f69 6e28 2727 2c20 6772 lp = join('', gr │ │ │ │ +00000d30: 6570 2821 2f5e 5c73 2a24 2f2c 2060 706f ep(!/^\s*$/, `po │ │ │ │ +00000d40: 6432 7465 7874 2024 3060 2929 3b0a 2448 d2text $0`));.$H │ │ │ │ +00000d50: 656c 7020 3d20 2263 616e 6e6f 7420 6669 elp = "cannot fi │ │ │ │ +00000d60: 6e64 2070 6f64 3274 6578 742c 2073 6565 nd pod2text, see │ │ │ │ +00000d70: 2064 6f63 756d 656e 7461 7469 6f6e 2066 documentation f │ │ │ │ +00000d80: 6f72 2064 6574 6169 6c73 5c6e 220a 2020 or details\n". │ │ │ │ +00000d90: 2020 756e 6c65 7373 2024 4865 6c70 3b0a unless $Help;. │ │ │ │ +00000da0: 0a26 7072 696e 7456 6572 7369 6f6e 7328 .&printVersions( │ │ │ │ +00000db0: 5c40 4152 4756 2c20 272d 5627 293b 0a0a \@ARGV, '-V');.. │ │ │ │ +00000dc0: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. │ │ │ │ +00000dd0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n │ │ │ │ +00000de0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists' │ │ │ │ +00000df0: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... │ │ │ │ +00000e00: 2027 2d63 6f6e 6669 6746 696c 6527 203d '-configFile' = │ │ │ │ +00000e10: 3e20 272d 6627 2c0a 0909 2020 2020 272d > '-f',... '- │ │ │ │ +00000e20: 6c69 7374 2720 3d3e 205b 4f70 7469 6f6e list' => [Option │ │ │ │ +00000e30: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00000e40: 2027 7665 7262 6f73 6527 2c0a 0909 0909 'verbose',..... │ │ │ │ +00000e50: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +00000e60: 2720 3d3e 2027 2d76 272c 0a09 0909 0909 ' => '-v',...... │ │ │ │ +00000e70: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ │ +00000e80: 3d3e 2027 2d2d 7665 7262 6f73 6527 292c => '--verbose'), │ │ │ │ +00000e90: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ │ +00000ea0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000eb0: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n │ │ │ │ +00000ec0: 616d 6527 203d 3e20 2770 7269 6e74 272c ame' => 'print', │ │ │ │ +00000ed0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00000ee0: 7074 696f 6e27 203d 3e20 272d 2d70 7269 ption' => '--pri │ │ │ │ +00000ef0: 6e74 2729 2c0a 0909 0909 4f70 7469 6f6e nt'),.....Option │ │ │ │ +00000f00: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00000f10: 2027 6669 6c65 272c 0a09 0909 0909 2020 'file',...... │ │ │ │ +00000f20: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ │ +00000f30: 3e20 272d 6627 2c0a 2020 2020 2020 2020 > '-f',. │ │ │ │ +00000f40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000f50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000f60: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ │ +00000f70: 3d3e 2027 2d2d 6669 6c65 272c 0a20 2020 => '--file',. │ │ │ │ +00000f80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000f90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00000fa0: 2020 2020 2020 2020 2027 2d70 6172 616d '-param │ │ │ │ +00000fb0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ │ +00000fc0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +00000fd0: 616d 6527 203d 3e20 2762 6163 6b75 7044 ame' => 'backupD │ │ │ │ +00000fe0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '- │ │ │ │ +00000ff0: 6366 5f6b 6579 2720 3d3e 2027 6261 636b cf_key' => 'back │ │ │ │ +00001000: 7570 4469 7227 2c0a 0909 0909 0920 2020 upDir',...... │ │ │ │ +00001010: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ │ +00001020: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option- │ │ │ │ +00001030: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ │ +00001040: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... │ │ │ │ +00001050: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ │ +00001060: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... │ │ │ │ +00001070: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ │ +00001080: 2027 6465 6661 756c 7427 292c 0a09 0909 'default'),.... │ │ │ │ +00001090: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ │ +000010a0: 616d 6527 203d 3e20 276b 6565 7041 6c6c ame' => 'keepAll │ │ │ │ +000010b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +000010c0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ │ +000010d0: 6565 7041 6c6c 272c 0a09 0909 0909 2020 eepAll',...... │ │ │ │ +000010e0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ │ +000010f0: 6b65 6570 416c 6c27 2c0a 0909 0909 0920 keepAll',...... │ │ │ │ +00001100: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ │ +00001110: 2024 6b65 6570 416c 6c29 2c0a 0909 0909 $keepAll),..... │ │ │ │ +00001120: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ │ +00001130: 6d65 2720 3d3e 2027 6b65 6570 5765 656b me' => 'keepWeek │ │ │ │ +00001140: 6461 7927 2c0a 0909 0909 0920 2020 2027 day',...... ' │ │ │ │ +00001150: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +00001160: 2d2d 6b65 6570 5765 656b 6461 7927 2c0a --keepWeekday',. │ │ │ │ +00001170: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +00001180: 7927 203d 3e20 276b 6565 7057 6565 6b64 y' => 'keepWeekd │ │ │ │ +00001190: 6179 272c 0a09 0909 0909 2020 2020 272d ay',...... '- │ │ │ │ +000011a0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ │ +000011b0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ │ +000011c0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke │ │ │ │ +000011d0: 6570 4669 7273 744f 6659 6561 7227 2c0a epFirstOfYear',. │ │ │ │ +000011e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +000011f0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ │ +00001200: 4669 7273 744f 6659 6561 7227 2c0a 0909 FirstOfYear',... │ │ │ │ +00001210: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +00001220: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf │ │ │ │ +00001230: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... │ │ │ │ +00001240: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ │ +00001250: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ │ +00001260: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00001270: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear', │ │ │ │ +00001280: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ │ +00001290: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ │ +000012a0: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',... │ │ │ │ +000012b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +000012c0: 203d 3e20 276b 6565 704c 6173 744f 6659 => 'keepLastOfY │ │ │ │ +000012d0: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... ' │ │ │ │ +000012e0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ │ +000012f0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ │ +00001300: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ │ +00001310: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth' │ │ │ │ +00001320: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ │ +00001330: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke │ │ │ │ +00001340: 6570 4669 7273 744f 664d 6f6e 7468 272c epFirstOfMonth', │ │ │ │ +00001350: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ │ +00001360: 6579 2720 3d3e 2027 6b65 6570 4669 7273 ey' => 'keepFirs │ │ │ │ +00001370: 744f 664d 6f6e 7468 272c 0a09 0909 0909 tOfMonth',...... │ │ │ │ +00001380: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ │ +00001390: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ │ +000013a0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +000013b0: 3d3e 2027 6b65 6570 4c61 7374 4f66 4d6f => 'keepLastOfMo │ │ │ │ +000013c0: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... ' │ │ │ │ +000013d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +000013e0: 2d2d 6b65 6570 4c61 7374 4f66 4d6f 6e74 --keepLastOfMont │ │ │ │ +000013f0: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c │ │ │ │ +00001400: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL │ │ │ │ +00001410: 6173 744f 664d 6f6e 7468 272c 0a09 0909 astOfMonth',.... │ │ │ │ +00001420: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ │ +00001430: 3e20 2779 6573 2729 2c0a 2020 2020 2020 > 'yes'),. │ │ │ │ +00001440: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001450: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ │ +00001460: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ │ +00001470: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek │ │ │ │ +00001480: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001490: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f │ │ │ │ +000014a0: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',. │ │ │ │ +000014b0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ │ +000014c0: 7927 203d 3e20 2766 6972 7374 4461 794f y' => 'firstDayO │ │ │ │ +000014d0: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... │ │ │ │ +000014e0: 2027 2d64 6566 6175 6c74 2720 3d3e 2027 '-default' => ' │ │ │ │ +000014f0: 5375 6e27 292c 0a09 0909 094f 7074 696f Sun'),.....Optio │ │ │ │ +00001500: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001510: 3e20 276b 6565 7046 6972 7374 4f66 5765 > 'keepFirstOfWe │ │ │ │ +00001520: 656b 272c 0a09 0909 0909 2020 2020 272d ek',...... '- │ │ │ │ +00001530: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ │ +00001540: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek │ │ │ │ +00001550: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +00001560: 5f6b 6579 2720 3d3e 2027 6b65 6570 4669 _key' => 'keepFi │ │ │ │ +00001570: 7273 744f 6657 6565 6b27 2c0a 0909 0909 rstOfWeek',..... │ │ │ │ +00001580: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ │ +00001590: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ │ +000015a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ │ +000015b0: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW │ │ │ │ +000015c0: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... ' │ │ │ │ +000015d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ │ +000015e0: 2d2d 6b65 6570 4c61 7374 4f66 5765 656b --keepLastOfWeek │ │ │ │ +000015f0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ │ +00001600: 5f6b 6579 2720 3d3e 2027 6b65 6570 4c61 _key' => 'keepLa │ │ │ │ +00001610: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',...... │ │ │ │ +00001620: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ │ +00001630: 2779 6573 2729 2c0a 2020 2020 2020 2020 'yes'),. │ │ │ │ +00001640: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001650: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ │ +00001660: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ │ +00001670: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',. │ │ │ │ +00001680: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ │ +00001690: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ │ +000016a0: 4475 706c 6963 6174 6527 2c0a 0909 0909 Duplicate',..... │ │ │ │ +000016b0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ │ +000016c0: 3e20 276b 6565 7044 7570 6c69 6361 7465 > 'keepDuplicate │ │ │ │ +000016d0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ │ +000016e0: 6661 756c 7427 203d 3e20 246b 6565 7044 fault' => $keepD │ │ │ │ +000016f0: 7570 6c69 6361 7465 292c 0a20 2020 2020 uplicate),. │ │ │ │ +00001700: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +00001710: 2020 2020 2020 2020 2020 204f 7074 696f Optio │ │ │ │ +00001720: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ │ +00001730: 3e20 276b 6565 704d 696e 4e75 6d62 6572 > 'keepMinNumber │ │ │ │ +00001740: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001750: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ │ +00001760: 6565 704d 696e 4e75 6d62 6572 272c 0a09 eepMinNumber',.. │ │ │ │ +00001770: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ │ +00001780: 2720 3d3e 2027 6b65 6570 4d69 6e4e 756d ' => 'keepMinNum │ │ │ │ +00001790: 6265 7227 2c0a 0909 0909 0920 2020 2027 ber',...... ' │ │ │ │ +000017a0: 2d64 6566 6175 6c74 2720 3d3e 2031 302c -default' => 10, │ │ │ │ +000017b0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ │ +000017c0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\A\d+\Z │ │ │ │ +000017d0: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ │ +000017e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000017f0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ │ +00001800: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ │ +00001810: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',..... │ │ │ │ +00001820: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ │ +00001830: 2720 3d3e 2027 2d2d 6b65 6570 4d61 784e ' => '--keepMaxN │ │ │ │ +00001840: 756d 6265 7227 2c0a 0909 0909 0920 2020 umber',...... │ │ │ │ +00001850: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k │ │ │ │ +00001860: 6565 704d 6178 4e75 6d62 6572 272c 0a09 eepMaxNumber',.. │ │ │ │ +00001870: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ │ +00001880: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... │ │ │ │ +00001890: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ │ +000018a0: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\A\d+\Z'),. │ │ │ │ +000018b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000018c0: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ │ +000018d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ │ +000018e0: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative │ │ │ │ +000018f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ │ +00001900: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ │ +00001910: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',... │ │ │ │ +00001920: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ │ +00001930: 203d 3e20 276b 6565 7052 656c 6174 6976 => 'keepRelativ │ │ │ │ +00001940: 6527 2c0a 0909 0909 0920 2020 2027 2d6d e',...... '-m │ │ │ │ +00001950: 756c 7469 706c 6527 203d 3e20 2779 6573 ultiple' => 'yes │ │ │ │ +00001960: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ │ +00001970: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ │ +00001980: 0909 2020 2020 5d29 3b0a 0a24 4368 6563 .. ]);..$Chec │ │ │ │ +00001990: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar │ │ │ │ +000019a0: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \@ARGV,. │ │ │ │ +000019b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ │ +000019c0: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help │ │ │ │ +000019d0: 2c0a 0909 2027 2d69 676e 6f72 6541 6464 ,... '-ignoreAdd │ │ │ │ +000019e0: 6974 696f 6e61 6c4b 6579 7327 203d 3e20 itionalKeys' => │ │ │ │ +000019f0: 310a 2020 2020 2020 2020 2020 2020 2020 1. │ │ │ │ +00001a00: 2020 2029 3b0a 0a6d 7920 2476 6572 626f );..my $verbo │ │ │ │ +00001a10: 7365 203d 2024 4368 6563 6b50 6172 2d3e se = $CheckPar-> │ │ │ │ +00001a20: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ │ +00001a30: 2827 7665 7262 6f73 6527 293b 0a6d 7920 ('verbose');.my │ │ │ │ +00001a40: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP │ │ │ │ +00001a50: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ │ +00001a60: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m │ │ │ │ +00001a70: 7920 2463 6f6e 6669 6746 696c 6520 3d20 y $configFile = │ │ │ │ +00001a80: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00001a90: 7457 6974 6850 6172 2827 6669 6c65 2729 tWithPar('file') │ │ │ │ +00001aa0: 3b0a 0a6d 7920 2462 6163 6b75 7044 6972 ;..my $backupDir │ │ │ │ +00001ab0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ │ +00001ac0: 744f 7074 5769 7468 5061 7228 2762 6163 tOptWithPar('bac │ │ │ │ +00001ad0: 6b75 7044 6972 2729 3b0a 6d79 2024 7365 kupDir');.my $se │ │ │ │ +00001ae0: 7269 6573 203d 2024 4368 6563 6b50 6172 ries = $CheckPar │ │ │ │ +00001af0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ │ +00001b00: 2773 6572 6965 7327 293b 0a6d 7920 246b 'series');.my $k │ │ │ │ +00001b10: 6565 7041 6c6c 203d 2024 4368 6563 6b50 eepAll = $CheckP │ │ │ │ +00001b20: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ │ +00001b30: 7228 276b 6565 7041 6c6c 2729 3b0a 6d79 r('keepAll');.my │ │ │ │ +00001b40: 2024 6b65 6570 5765 656b 6461 7920 3d20 $keepWeekday = │ │ │ │ +00001b50: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ │ +00001b60: 7457 6974 6850 6172 2827 6b65 6570 5765 tWithPar('keepWe │ │ │ │ +00001b70: 656b 6461 7927 293b 0a6d 7920 246b 6565 ekday');.my $kee │ │ │ │ +00001b80: 7046 6972 7374 4f66 5965 6172 203d 2024 pFirstOfYear = $ │ │ │ │ +00001b90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ │ +00001ba0: 5769 7468 5061 7228 276b 6565 7046 6972 WithPar('keepFir │ │ │ │ +00001bb0: 7374 4f66 5965 6172 2729 3b0a 6d79 2024 stOfYear');.my $ │ │ │ │ +00001bc0: 6b65 6570 4c61 7374 4f66 5965 6172 203d keepLastOfYear = │ │ │ │ +00001bd0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ │ +00001be0: 7074 5769 7468 5061 7228 276b 6565 704c ptWithPar('keepL │ │ │ │ +00001bf0: 6173 744f 6659 6561 7227 293b 0a6d 7920 astOfYear');.my │ │ │ │ +00001c00: 246b 6565 7046 6972 7374 4f66 4d6f 6e74 $keepFirstOfMont │ │ │ │ +00001c10: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g │ │ │ │ +00001c20: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke │ │ │ │ +00001c30: 6570 4669 7273 744f 664d 6f6e 7468 2729 epFirstOfMonth') │ │ │ │ +00001c40: 3b0a 6d79 2024 6b65 6570 4c61 7374 4f66 ;.my $keepLastOf │ │ │ │ +00001c50: 4d6f 6e74 6820 3d20 2443 6865 636b 5061 Month = $CheckPa │ │ │ │ +00001c60: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ │ +00001c70: 2827 6b65 6570 4c61 7374 4f66 4d6f 6e74 ('keepLastOfMont │ │ │ │ +00001c80: 6827 293b 0a6d 7920 2466 6972 7374 4461 h');.my $firstDa │ │ │ │ +00001c90: 794f 6657 6565 6b20 3d20 2443 6865 636b yOfWeek = $Check │ │ │ │ +00001ca0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00001cb0: 6172 2827 6669 7273 7444 6179 4f66 5765 ar('firstDayOfWe │ │ │ │ +00001cc0: 656b 2729 3b0a 6d79 2024 6b65 6570 4669 ek');.my $keepFi │ │ │ │ +00001cd0: 7273 744f 6657 6565 6b20 3d20 2443 6865 rstOfWeek = $Che │ │ │ │ +00001ce0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00001cf0: 6850 6172 2827 6b65 6570 4669 7273 744f hPar('keepFirstO │ │ │ │ +00001d00: 6657 6565 6b27 293b 0a6d 7920 246b 6565 fWeek');.my $kee │ │ │ │ +00001d10: 704c 6173 744f 6657 6565 6b20 3d20 2443 pLastOfWeek = $C │ │ │ │ +00001d20: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00001d30: 6974 6850 6172 2827 6b65 6570 4c61 7374 ithPar('keepLast │ │ │ │ +00001d40: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke │ │ │ │ +00001d50: 6570 4475 706c 6963 6174 6520 3d20 2443 epDuplicate = $C │ │ │ │ +00001d60: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ │ +00001d70: 6974 6850 6172 2827 6b65 6570 4475 706c ithPar('keepDupl │ │ │ │ +00001d80: 6963 6174 6527 293b 0a6d 7920 246b 6565 icate');.my $kee │ │ │ │ +00001d90: 704d 696e 4e75 6d62 6572 203d 2024 4368 pMinNumber = $Ch │ │ │ │ +00001da0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ │ +00001db0: 7468 5061 7228 276b 6565 704d 696e 4e75 thPar('keepMinNu │ │ │ │ +00001dc0: 6d62 6572 2729 3b0a 6d79 2024 6b65 6570 mber');.my $keep │ │ │ │ +00001dd0: 4d61 784e 756d 6265 7220 3d20 2443 6865 MaxNumber = $Che │ │ │ │ +00001de0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ │ +00001df0: 6850 6172 2827 6b65 6570 4d61 784e 756d hPar('keepMaxNum │ │ │ │ +00001e00: 6265 7227 293b 0a6d 7920 246b 6565 7052 ber');.my $keepR │ │ │ │ +00001e10: 656c 6174 6976 6520 3d20 2443 6865 636b elative = $Check │ │ │ │ +00001e20: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ │ +00001e30: 6172 2827 6b65 6570 5265 6c61 7469 7665 ar('keepRelative │ │ │ │ +00001e40: 2729 3b0a 0a69 6620 2824 7072 696e 7429 ');..if ($print) │ │ │ │ +00001e50: 0a7b 0a20 2020 2024 4368 6563 6b50 6172 .{. $CheckPar │ │ │ │ +00001e60: 2d3e 7072 696e 7428 293b 0a20 2020 2065 ->print();. e │ │ │ │ +00001e70: 7869 7420 303b 0a7d 0a0a 6d79 2024 6469 xit 0;.}..my $di │ │ │ │ +00001e80: 723b 0a69 6620 2824 6261 636b 7570 4469 r;.if ($backupDi │ │ │ │ +00001e90: 7229 0a7b 0a20 2020 2024 6469 7220 3d20 r).{. $dir = │ │ │ │ +00001ea0: 2462 6163 6b75 7044 6972 202e 2027 2f27 $backupDir . '/' │ │ │ │ +00001eb0: 202e 2473 6572 6965 7320 2e20 272f 273b .$series . '/'; │ │ │ │ +00001ec0: 0a7d 0a0a 6966 2028 2443 6865 636b 5061 .}..if ($CheckPa │ │ │ │ +00001ed0: 722d 3e67 6574 4c69 7374 5061 7228 2929 r->getListPar()) │ │ │ │ +00001ee0: 0a7b 0a20 2020 2028 2464 6972 2920 3d20 .{. ($dir) = │ │ │ │ +00001ef0: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi │ │ │ │ +00001f00: 7374 5061 7228 293b 0a7d 0a64 6965 2022 stPar();.}.die " │ │ │ │ +00001f10: 2448 656c 7022 2075 6e6c 6573 7320 2464 $Help" unless $d │ │ │ │ +00001f20: 6972 206f 7220 2463 6f6e 6669 6746 696c ir or $configFil │ │ │ │ +00001f30: 653b 0a0a 6d79 2024 746f 6461 7920 3d20 e;..my $today = │ │ │ │ +00001f40: 6461 7465 546f 6f6c 732d 3e6e 6577 2829 dateTools->new() │ │ │ │ +00001f50: 3b0a 0a69 6620 2824 636f 6e66 6967 4669 ;..if ($configFi │ │ │ │ +00001f60: 6c65 290a 7b0a 2020 2020 2661 6e61 6c79 le).{. &analy │ │ │ │ +00001f70: 7365 4f6c 6442 6163 6b75 7073 2824 6469 seOldBackups($di │ │ │ │ +00001f80: 722c 2024 636f 6e66 6967 4669 6c65 2c20 r, $configFile, │ │ │ │ +00001f90: 2474 6f64 6179 2c20 2476 6572 626f 7365 $today, $verbose │ │ │ │ +00001fa0: 2c20 246b 6565 7041 6c6c 2c0a 0909 2020 , $keepAll,... │ │ │ │ +00001fb0: 2020 2020 2024 6b65 6570 5765 656b 6461 $keepWeekda │ │ │ │ +00001fc0: 792c 2024 6b65 6570 4669 7273 744f 6659 y, $keepFirstOfY │ │ │ │ +00001fd0: 6561 722c 2024 6b65 6570 4c61 7374 4f66 ear, $keepLastOf │ │ │ │ +00001fe0: 5965 6172 2c0a 0909 2020 2020 2020 2024 Year,... $ │ │ │ │ +00001ff0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ │ +00002000: 2c20 246b 6565 704c 6173 744f 664d 6f6e , $keepLastOfMon │ │ │ │ +00002010: 7468 2c20 2466 6972 7374 4461 794f 6657 th, $firstDayOfW │ │ │ │ +00002020: 6565 6b2c 0a09 0920 2020 2020 2020 246b eek,... $k │ │ │ │ +00002030: 6565 7046 6972 7374 4f66 5765 656b 2c20 eepFirstOfWeek, │ │ │ │ +00002040: 246b 6565 704c 6173 744f 6657 6565 6b2c $keepLastOfWeek, │ │ │ │ +00002050: 2024 6b65 6570 4475 706c 6963 6174 652c $keepDuplicate, │ │ │ │ +00002060: 0a09 0920 2020 2020 2020 246b 6565 704d ... $keepM │ │ │ │ +00002070: 696e 4e75 6d62 6572 2c20 246b 6565 704d inNumber, $keepM │ │ │ │ +00002080: 6178 4e75 6d62 6572 2c20 246b 6565 7052 axNumber, $keepR │ │ │ │ +00002090: 656c 6174 6976 6529 3b0a 2020 2020 6578 elative);. ex │ │ │ │ +000020a0: 6974 2030 3b0a 7d0a 0a6f 7065 6e64 6972 it 0;.}..opendir │ │ │ │ +000020b0: 2844 4952 2c20 2464 6972 2920 6f72 0a20 (DIR, $dir) or. │ │ │ │ +000020c0: 2020 2064 6965 2022 6361 6e6e 6f74 206f die "cannot o │ │ │ │ +000020d0: 7065 6e20 3c24 6469 723e 223b 0a6d 7920 pen <$dir>";.my │ │ │ │ +000020e0: 2824 656e 7472 792c 2040 656e 7472 6965 ($entry, @entrie │ │ │ │ +000020f0: 7329 3b0a 7768 696c 6520 2824 656e 7472 s);.while ($entr │ │ │ │ +00002100: 7920 3d20 7265 6164 6469 7220 4449 5229 y = readdir DIR) │ │ │ │ +00002110: 0a7b 0a20 2020 206d 7920 2465 203d 2022 .{. my $e = " │ │ │ │ +00002120: 2464 6972 2f24 656e 7472 7922 3b0a 2020 $dir/$entry";. │ │ │ │ +00002130: 2020 6e65 7874 2069 6620 282d 6c20 2465 next if (-l $e │ │ │ │ +00002140: 2061 6e64 206e 6f74 202d 6420 2465 293b and not -d $e); │ │ │ │ +00002150: 0a20 2020 2070 7573 6820 4065 6e74 7269 . push @entri │ │ │ │ +00002160: 6573 2c20 2465 6e74 7279 3b0a 7d0a 636c es, $entry;.}.cl │ │ │ │ +00002170: 6f73 6564 6972 2844 4952 293b 0a0a 6d79 osedir(DIR);..my │ │ │ │ +00002180: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL │ │ │ │ +00002190: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' │ │ │ │ +000021a0: 3d3e 205b 2749 3a49 4e46 4f27 2c20 2757 => ['I:INFO', 'W │ │ │ │ +000021b0: 3a57 4152 4e49 4e47 272c 2027 453a 4552 :WARNING', 'E:ER │ │ │ │ +000021c0: 524f 5227 2c0a 0909 0909 2020 2020 2020 ROR',..... │ │ │ │ +000021d0: 2753 3a53 5441 5449 5354 4943 272c 2027 'S:STATISTIC', ' │ │ │ │ +000021e0: 443a 4445 4255 4727 2c20 2756 3a56 4552 D:DEBUG', 'V:VER │ │ │ │ +000021f0: 5349 4f4e 275d 293b 0a0a 2470 724c 6f67 SION']);..$prLog │ │ │ │ +00002200: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ │ +00002210: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. ' │ │ │ │ +00002220: 2d73 7472 2720 3d3e 205b 2224 5645 5253 -str' => ["$VERS │ │ │ │ +00002230: 494f 4e70 4e61 6d65 2c20 246d 6169 6e3a IONpName, $main: │ │ │ │ +00002240: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS │ │ │ │ +00002250: 494f 4e2c 2022 202e 0a09 0909 2022 6275 ION, " ..... "bu │ │ │ │ +00002260: 696c 6420 2456 4552 5349 4f4e 7376 6e49 ild $VERSIONsvnI │ │ │ │ +00002270: 4422 5d29 0a20 2020 2069 6620 2476 6572 D"]). if $ver │ │ │ │ +00002280: 626f 7365 3b0a 0a0a 6d79 2024 6920 3d20 bose;...my $i = │ │ │ │ +00002290: 313b 0a66 6f72 6561 6368 2024 656e 7472 1;.foreach $entr │ │ │ │ +000022a0: 7920 2873 6f72 7420 4065 6e74 7269 6573 y (sort @entries │ │ │ │ +000022b0: 290a 7b0a 2020 2020 6e65 7874 2075 6e6c ).{. next unl │ │ │ │ +000022c0: 6573 7320 2465 6e74 7279 203d 7e0a 092f ess $entry =~../ │ │ │ │ +000022d0: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \A(\d{4})\.(\d{2 │ │ │ │ +000022e0: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\.(\d{2})_(\d{ │ │ │ │ +000022f0: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\.(\d{2})\.(\ │ │ │ │ +00002300: 647b 327d 295c 5a2f 6f3b 0a20 2020 206d d{2})\Z/o;. m │ │ │ │ +00002310: 7920 2464 203d 2064 6174 6554 6f6f 6c73 y $d = dateTools │ │ │ │ +00002320: 2d3e 6e65 7728 272d 7965 6172 2720 3d3e ->new('-year' => │ │ │ │ +00002330: 2024 312c 0a09 0909 2020 2027 2d6d 6f6e $1,.... '-mon │ │ │ │ +00002340: 7468 2720 3d3e 2024 322c 0a09 0909 2020 th' => $2,.... │ │ │ │ +00002350: 2027 2d64 6179 2720 3d3e 2024 3329 3b0a '-day' => $3);. │ │ │ │ +00002360: 2020 2020 6d79 2028 4061 2920 3d20 2822 my (@a) = (" │ │ │ │ +00002370: 2464 6972 2f24 656e 7472 792f 2e73 746f $dir/$entry/.sto │ │ │ │ +00002380: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li │ │ │ │ +00002390: 6e6b 4672 6f6d 2a22 293b 0a20 2020 206d nkFrom*");. m │ │ │ │ +000023a0: 7920 2840 6529 203d 203c 4061 3e3b 0a20 y (@e) = <@a>;. │ │ │ │ +000023b0: 2020 2070 7269 6e74 6620 2225 3364 2020 printf "%3d │ │ │ │ +000023c0: 222c 2024 692b 2b3b 0a20 2020 2070 7269 ", $i++;. pri │ │ │ │ +000023d0: 6e74 2024 642d 3e67 6574 4461 7465 5469 nt $d->getDateTi │ │ │ │ +000023e0: 6d65 2827 2d66 6f72 6d61 7427 203d 3e20 me('-format' => │ │ │ │ +000023f0: 2725 5720 2558 2025 4420 2559 2729 2c20 '%W %X %D %Y'), │ │ │ │ +00002400: 2220 2020 2465 6e74 7279 2020 2022 2c0a " $entry ",. │ │ │ │ +00002410: 2020 2020 2474 6f64 6179 2d3e 6465 6c74 $today->delt │ │ │ │ +00002420: 6149 6e44 6179 7328 272d 7365 636f 6e64 aInDays('-second │ │ │ │ +00002430: 4461 7465 2720 3d3e 2024 6429 3b0a 2020 Date' => $d);. │ │ │ │ +00002440: 2020 7072 696e 7420 2220 206e 6f74 2066 print " not f │ │ │ │ +00002450: 696e 6973 6865 6420 2220 6966 2028 2d65 inished " if (-e │ │ │ │ +00002460: 2022 2464 6972 2f24 656e 7472 792f 2463 "$dir/$entry/$c │ │ │ │ +00002470: 6865 636b 5375 6d46 696c 652e 6e6f 7446 heckSumFile.notF │ │ │ │ +00002480: 696e 6973 6865 6422 293b 0a20 2020 2070 inished");. p │ │ │ │ +00002490: 7269 6e74 2022 2061 6666 6563 7465 6420 rint " affected │ │ │ │ +000024a0: 6279 2075 6e72 6573 6f6c 7665 6420 6c69 by unresolved li │ │ │ │ +000024b0: 6e6b 7322 0a09 6966 202d 6520 2224 6469 nks"..if -e "$di │ │ │ │ +000024c0: 722f 2465 6e74 7279 2f2e 7374 6f72 6542 r/$entry/.storeB │ │ │ │ +000024d0: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF │ │ │ │ +000024e0: 696c 652e 627a 3222 206f 7220 4065 3b0a ile.bz2" or @e;. │ │ │ │ +000024f0: 2020 2020 7072 696e 7420 225c 6e22 3b0a print "\n";. │ │ │ │ +00002500: 0a20 2020 2069 6620 2824 7665 7262 6f73 . if ($verbos │ │ │ │ +00002510: 6529 0a20 2020 207b 0a23 096d 7920 2472 e). {.#.my $r │ │ │ │ +00002520: 6373 6620 3d20 7265 6164 4368 6563 6b53 csf = readCheckS │ │ │ │ +00002530: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch │ │ │ │ +00002540: 6563 6b53 756d 4669 6c65 2720 3d3e 0a23 eckSumFile' =>.# │ │ │ │ +00002550: 0909 0909 0920 2224 6469 722f 2465 6e74 ..... "$dir/$ent │ │ │ │ +00002560: 7279 2f24 6368 6563 6b53 756d 4669 6c65 ry/$checkSumFile │ │ │ │ +00002570: 222c 0a23 0909 0909 0920 272d 7072 4c6f ",.#..... '-prLo │ │ │ │ +00002580: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ │ +00002590: 6d79 2024 7269 6620 3d20 7265 6164 496e my $rif = readIn │ │ │ │ +000025a0: 666f 4669 6c65 2d3e 6e65 7728 272d 6368 foFile->new('-ch │ │ │ │ +000025b0: 6563 6b53 756d 4669 6c65 2720 3d3e 0a09 eckSumFile' =>.. │ │ │ │ +000025c0: 0909 0920 2020 2020 2224 6469 722f 2465 ... "$dir/$e │ │ │ │ +000025d0: 6e74 7279 2f24 6368 6563 6b53 756d 4669 ntry/$checkSumFi │ │ │ │ +000025e0: 6c65 222c 0a09 0909 0920 2020 2020 272d le",..... '- │ │ │ │ +000025f0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ │ +00002600: 293b 0a0a 2309 6d79 2024 6d65 7461 5661 );..#.my $metaVa │ │ │ │ +00002610: 6c20 3d20 2472 6373 662d 3e67 6574 4d65 l = $rcsf->getMe │ │ │ │ +00002620: 7461 5661 6c28 293b 0a23 096d 7920 246d taVal();.#.my $m │ │ │ │ +00002630: 6574 614b 6579 203d 2024 7263 7366 2d3e etaKey = $rcsf-> │ │ │ │ +00002640: 6765 744d 6574 614b 6579 2829 3b0a 2309 getMetaKey();.#. │ │ │ │ +00002650: 6d79 2024 6b65 793b 0a23 0966 6f72 6561 my $key;.#.forea │ │ │ │ +00002660: 6368 2024 6b65 7920 2840 246d 6574 614b ch $key (@$metaK │ │ │ │ +00002670: 6579 290a 2309 7b0a 2309 2020 2020 7072 ey).#.{.#. pr │ │ │ │ +00002680: 696e 7420 225c 7424 6b65 7920 2d3e 2022 int "\t$key -> " │ │ │ │ +00002690: 2c20 2424 6d65 7461 5661 6c7b 246b 6579 , $$metaVal{$key │ │ │ │ +000026a0: 7d2c 2022 5c6e 220a 2309 0969 6620 2424 }, "\n".#..if $$ │ │ │ │ +000026b0: 6d65 7461 5661 6c7b 246b 6579 7d3b 0a23 metaVal{$key};.# │ │ │ │ +000026c0: 097d 0a23 0924 7263 7366 2d3e 4445 5354 .}.#.$rcsf->DEST │ │ │ │ +000026d0: 524f 5928 293b 0a09 6d79 2024 6f70 743b ROY();..my $opt; │ │ │ │ +000026e0: 0a09 666f 7265 6163 6820 246f 7074 2028 ..foreach $opt ( │ │ │ │ +000026f0: 2472 6966 2d3e 6765 7441 6c6c 496e 666f $rif->getAllInfo │ │ │ │ +00002700: 4f70 7473 2829 290a 097b 0a09 2020 2020 Opts())..{.. │ │ │ │ +00002710: 6d79 2024 6920 3d20 2472 6966 2d3e 6765 my $i = $rif->ge │ │ │ │ +00002720: 7449 6e66 6f57 6974 6850 6172 2824 6f70 tInfoWithPar($op │ │ │ │ +00002730: 7429 3b0a 0920 2020 2070 7269 6e74 2022 t);.. print " │ │ │ │ +00002740: 5c74 246f 7074 202d 3e20 222c 2072 6566 \t$opt -> ", ref │ │ │ │ +00002750: 2024 6920 6571 2027 4152 5241 5927 203f $i eq 'ARRAY' ? │ │ │ │ +00002760: 2022 4024 6922 203a 2024 692c 2022 5c6e "@$i" : $i, "\n │ │ │ │ +00002770: 223b 0a09 7d0a 2020 2020 7d0a 7d0a 0a65 ";..}. }.}..e │ │ │ │ +00002780: 7869 7420 303b 0a0a 0a23 2323 2323 2323 xit 0;...####### │ │ │ │ +00002790: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ │ +000027c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ │ +000027d0: 7375 6220 616e 616c 7973 654f 6c64 4261 sub analyseOldBa │ │ │ │ +000027e0: 636b 7570 730a 7b0a 2020 2020 6d79 2028 ckups.{. my ( │ │ │ │ +000027f0: 2464 6972 2c20 2463 6f6e 6669 6746 696c $dir, $configFil │ │ │ │ +00002800: 652c 2024 746f 6461 792c 2024 7665 7262 e, $today, $verb │ │ │ │ +00002810: 6f73 652c 2024 6b65 6570 416c 6c2c 2024 ose, $keepAll, $ │ │ │ │ +00002820: 6b65 6570 5765 656b 6461 792c 0a09 246b keepWeekday,..$k │ │ │ │ +00002830: 6565 7046 6972 7374 4f66 5965 6172 2c20 eepFirstOfYear, │ │ │ │ +00002840: 246b 6565 704c 6173 744f 6659 6561 722c $keepLastOfYear, │ │ │ │ +00002850: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon │ │ │ │ +00002860: 7468 2c0a 0924 6b65 6570 4c61 7374 4f66 th,..$keepLastOf │ │ │ │ +00002870: 4d6f 6e74 682c 2024 6669 7273 7444 6179 Month, $firstDay │ │ │ │ +00002880: 4f66 5765 656b 2c20 246b 6565 7046 6972 OfWeek, $keepFir │ │ │ │ +00002890: 7374 4f66 5765 656b 2c0a 0924 6b65 6570 stOfWeek,..$keep │ │ │ │ +000028a0: 4c61 7374 4f66 5765 656b 2c20 246b 6565 LastOfWeek, $kee │ │ │ │ +000028b0: 7044 7570 6c69 6361 7465 2c20 246b 6565 pDuplicate, $kee │ │ │ │ +000028c0: 704d 696e 4e75 6d62 6572 2c0a 0924 6b65 pMinNumber,..$ke │ │ │ │ +000028d0: 6570 4d61 784e 756d 6265 722c 2024 6b65 epMaxNumber, $ke │ │ │ │ +000028e0: 6570 5265 6c61 7469 7665 2920 3d20 405f epRelative) = @_ │ │ │ │ +000028f0: 3b0a 0a20 2020 206d 7920 2470 724c 6f67 ;.. my $prLog │ │ │ │ +00002900: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new │ │ │ │ +00002910: 2827 2d77 6974 6854 696d 6527 203d 3e20 ('-withTime' => │ │ │ │ +00002920: 276e 6f27 2c0a 0909 0920 2020 2020 2027 'no',.... ' │ │ │ │ +00002930: 2d77 6974 6850 4944 2720 3d3e 2027 6e6f -withPID' => 'no │ │ │ │ +00002940: 2729 3b0a 0a0a 2020 2020 6d79 2024 616c ');... my $al │ │ │ │ +00002950: 6c4c 696e 6b73 203d 206c 6174 654c 696e lLinks = lateLin │ │ │ │ +00002960: 6b73 2d3e 6e65 7728 272d 6469 7273 2720 ks->new('-dirs' │ │ │ │ +00002970: 3d3e 205b 2464 6972 5d2c 0a09 0909 0920 => [$dir],..... │ │ │ │ +00002980: 2027 2d6b 696e 6427 203d 3e20 2772 6563 '-kind' => 'rec │ │ │ │ +00002990: 7572 7369 7665 5365 6172 6368 272c 0a09 ursiveSearch',.. │ │ │ │ +000029a0: 0909 0920 2027 2d76 6572 626f 7365 2720 ... '-verbose' │ │ │ │ +000029b0: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,.... │ │ │ │ +000029c0: 0920 2027 2d70 724c 6f67 2720 3d3e 2024 . '-prLog' => $ │ │ │ │ +000029d0: 7072 4c6f 6729 3b0a 0a20 2020 206d 7920 prLog);.. my │ │ │ │ +000029e0: 2473 7461 7444 656c 4f6c 6442 6163 6b75 $statDelOldBacku │ │ │ │ +000029f0: 7044 6972 7320 3d0a 0973 7461 7469 7374 pDirs =..statist │ │ │ │ +00002a00: 6963 4465 6c65 7465 4f6c 6442 6163 6b75 icDeleteOldBacku │ │ │ │ +00002a10: 7044 6972 732d 3e6e 6577 2827 2d70 724c pDirs->new('-prL │ │ │ │ +00002a20: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ │ +00002a30: 2020 2020 6d79 2024 6465 6c4f 6c64 203d my $delOld = │ │ │ │ +00002a40: 0a09 6465 6c65 7465 4f6c 6442 6163 6b75 ..deleteOldBacku │ │ │ │ +00002a50: 7044 6972 732d 3e6e 6577 2827 2d74 6172 pDirs->new('-tar │ │ │ │ +00002a60: 6765 7444 6972 2720 3d3e 2024 6469 722c getDir' => $dir, │ │ │ │ +00002a70: 0a09 0909 0920 272d 646f 4e6f 7444 656c ..... '-doNotDel │ │ │ │ +00002a80: 6574 6527 203d 3e20 756e 6465 662c 0a09 ete' => undef,.. │ │ │ │ +00002a90: 0909 0920 272d 6368 6563 6b53 756d 4669 ... '-checkSumFi │ │ │ │ +00002aa0: 6c65 2720 3d3e 2024 6d61 696e 3a3a 6368 le' => $main::ch │ │ │ │ +00002ab0: 6563 6b53 756d 4669 6c65 2c0a 0909 0909 eckSumFile,..... │ │ │ │ +00002ac0: 2027 2d61 6374 4261 636b 7570 4469 7227 '-actBackupDir' │ │ │ │ +00002ad0: 203d 3e20 756e 6465 662c 0a09 0909 0920 => undef,..... │ │ │ │ +00002ae0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ │ +00002af0: 6f67 2c0a 0909 0909 2027 2d74 6f64 6179 og,..... '-today │ │ │ │ +00002b00: 2720 3d3e 2024 746f 6461 792c 0a09 0909 ' => $today,.... │ │ │ │ +00002b10: 0920 272d 6b65 6570 4669 7273 744f 6659 . '-keepFirstOfY │ │ │ │ +00002b20: 6561 7227 203d 3e20 246b 6565 7046 6972 ear' => $keepFir │ │ │ │ +00002b30: 7374 4f66 5965 6172 2c0a 0909 0909 2027 stOfYear,..... ' │ │ │ │ +00002b40: 2d6b 6565 704c 6173 744f 6659 6561 7227 -keepLastOfYear' │ │ │ │ +00002b50: 203d 3e20 246b 6565 704c 6173 744f 6659 => $keepLastOfY │ │ │ │ +00002b60: 6561 722c 0a09 0909 0920 272d 6b65 6570 ear,..... '-keep │ │ │ │ +00002b70: 4669 7273 744f 664d 6f6e 7468 2720 3d3e FirstOfMonth' => │ │ │ │ +00002b80: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon │ │ │ │ +00002b90: 7468 2c0a 0909 0909 2027 2d6b 6565 704c th,..... '-keepL │ │ │ │ +00002ba0: 6173 744f 664d 6f6e 7468 2720 3d3e 2024 astOfMonth' => $ │ │ │ │ +00002bb0: 6b65 6570 4c61 7374 4f66 4d6f 6e74 682c keepLastOfMonth, │ │ │ │ +00002bc0: 0a09 0909 0920 272d 6669 7273 7444 6179 ..... '-firstDay │ │ │ │ +00002bd0: 4f66 5765 656b 2720 3d3e 2024 6669 7273 OfWeek' => $firs │ │ │ │ +00002be0: 7444 6179 4f66 5765 656b 2c0a 0909 0909 tDayOfWeek,..... │ │ │ │ +00002bf0: 2027 2d6b 6565 7046 6972 7374 4f66 5765 '-keepFirstOfWe │ │ │ │ +00002c00: 656b 2720 3d3e 2024 6b65 6570 4669 7273 ek' => $keepFirs │ │ │ │ +00002c10: 744f 6657 6565 6b2c 0a09 0909 0920 272d tOfWeek,..... '- │ │ │ │ +00002c20: 6b65 6570 4c61 7374 4f66 5765 656b 2720 keepLastOfWeek' │ │ │ │ +00002c30: 3d3e 2024 6b65 6570 4c61 7374 4f66 5765 => $keepLastOfWe │ │ │ │ +00002c40: 656b 2c0a 0909 0909 2027 2d6b 6565 7041 ek,..... '-keepA │ │ │ │ +00002c50: 6c6c 2720 3d3e 2024 6b65 6570 416c 6c2c ll' => $keepAll, │ │ │ │ +00002c60: 0a09 0909 0920 272d 6b65 6570 5265 6c61 ..... '-keepRela │ │ │ │ +00002c70: 7469 7665 2720 3d3e 2024 6b65 6570 5265 tive' => $keepRe │ │ │ │ +00002c80: 6c61 7469 7665 2c0a 0909 0909 2027 2d6b lative,..... '-k │ │ │ │ +00002c90: 6565 7057 6565 6b64 6179 2720 3d3e 2024 eepWeekday' => $ │ │ │ │ +00002ca0: 6b65 6570 5765 656b 6461 792c 0a09 0909 keepWeekday,.... │ │ │ │ +00002cb0: 0920 272d 6b65 6570 4475 706c 6963 6174 . '-keepDuplicat │ │ │ │ +00002cc0: 6527 203d 3e20 246b 6565 7044 7570 6c69 e' => $keepDupli │ │ │ │ +00002cd0: 6361 7465 2c0a 0909 0909 2027 2d6b 6565 cate,..... '-kee │ │ │ │ +00002ce0: 704d 696e 4e75 6d62 6572 2720 3d3e 2024 pMinNumber' => $ │ │ │ │ +00002cf0: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,.. │ │ │ │ +00002d00: 0909 0920 272d 6b65 6570 4d61 784e 756d ... '-keepMaxNum │ │ │ │ +00002d10: 6265 7227 203d 3e20 246b 6565 704d 6178 ber' => $keepMax │ │ │ │ +00002d20: 4e75 6d62 6572 2c0a 0909 0909 2027 2d6c Number,..... '-l │ │ │ │ +00002d30: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' = │ │ │ │ +00002d40: 3e20 312c 0a09 0909 0920 272d 616c 6c4c > 1,..... '-allL │ │ │ │ +00002d50: 696e 6b73 2720 3d3e 2024 616c 6c4c 696e inks' => $allLin │ │ │ │ +00002d60: 6b73 2c0a 0909 0909 2027 2d73 7461 7444 ks,..... '-statD │ │ │ │ +00002d70: 656c 4f6c 6442 6163 6b75 7044 6972 7327 elOldBackupDirs' │ │ │ │ +00002d80: 203d 3e0a 0909 0909 2024 7374 6174 4465 =>..... $statDe │ │ │ │ +00002d90: 6c4f 6c64 4261 636b 7570 4469 7273 2c0a lOldBackupDirs,. │ │ │ │ +00002da0: 0909 0909 2027 2d66 6c61 744f 7574 7075 .... '-flatOutpu │ │ │ │ +00002db0: 7427 203d 3e20 2779 6573 270a 0909 0909 t' => 'yes'..... │ │ │ │ +00002dc0: 2029 3b0a 2020 2020 2464 656c 4f6c 642d );. $delOld- │ │ │ │ +00002dd0: 3e63 6865 636b 4261 636b 7570 7328 293b >checkBackups(); │ │ │ │ +00002de0: 0a7d 0a .}.