{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.7yLbCKoC/b1/storebackup_3.2.1-2_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.7yLbCKoC/b2/storebackup_3.2.1-2_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,2 +1,2 @@\n \n- f3277098c48ccb78b5e3cc253caec8a2 717700 utils optional storebackup_3.2.1-2_all.deb\n+ 04162322602081d2f641b89d55d43cee 718012 utils optional storebackup_3.2.1-2_all.deb\n"}, {"source1": "storebackup_3.2.1-2_all.deb", "source2": "storebackup_3.2.1-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2020-07-08 12:54:21.000000 debian-binary\n--rw-r--r-- 0 0 0 2532 2020-07-08 12:54:21.000000 control.tar.xz\n--rw-r--r-- 0 0 0 714976 2020-07-08 12:54:21.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 2596 2020-07-08 12:54:21.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 715224 2020-07-08 12:54:21.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,5 +1,5 @@\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./\n -rw-r--r-- 0 root (0) root (0) 28 2020-07-08 12:54:21.000000 ./conffiles\n -rw-r--r-- 0 root (0) root (0) 908 2020-07-08 12:54:21.000000 ./control\n--rw-r--r-- 0 root (0) root (0) 3824 2020-07-08 12:54:21.000000 ./md5sums\n+-rw-r--r-- 0 root (0) root (0) 4534 2020-07-08 12:54:21.000000 ./md5sums\n -rwxr-xr-x 0 root (0) root (0) 511 2020-07-08 12:54:21.000000 ./postinst\n"}, {"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,12 +1,12 @@\n Package: storebackup\n Version: 3.2.1-2\n Architecture: all\n Maintainer: Debian QA Group \n-Installed-Size: 1341\n+Installed-Size: 1749\n Depends: bzip2, debianutils (>= 1.16.9), perl:any\n Recommends: libio-compress-bzip2-perl\n Section: utils\n Priority: optional\n Homepage: http://www.nongnu.org/storebackup/\n Description: fancy compressing managing checksumming deduplicating hard-linking cp -ua\n Copies directory hierarchies recursively into another location,\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}, {"source1": "line order", "source2": "line order", "unified_diff": "@@ -1,7 +1,19 @@\n+usr/bin/llt\n+usr/bin/storeBackup\n+usr/bin/storeBackupCheckBackup\n+usr/bin/storeBackupConvertBackup\n+usr/bin/storeBackupDel\n+usr/bin/storeBackupMount\n+usr/bin/storeBackupRecover\n+usr/bin/storeBackupSearch\n+usr/bin/storeBackupUpdateBackup\n+usr/bin/storeBackupVersions\n+usr/bin/storeBackup_du\n+usr/bin/storeBackupls\n usr/share/doc-base/storebackup.storebackup\n usr/share/doc/storebackup/README.1ST\n usr/share/doc/storebackup/README.Debian\n usr/share/doc/storebackup/README.gz\n usr/share/doc/storebackup/ROADMAP\n usr/share/doc/storebackup/_ATTENTION_\n usr/share/doc/storebackup/changelog.Debian.gz\n"}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,14 +1,26 @@\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/cron.daily/\n -rwxr-xr-x 0 root (0) root (0) 743 2020-07-08 12:54:21.000000 ./etc/cron.daily/storebackup\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./etc/storebackup.d/\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/\n+-rwxr-xr-x 0 root (0) root (0) 7059 2020-07-08 12:54:21.000000 ./usr/bin/llt\n+-rwxr-xr-x 0 root (0) root (0) 235546 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup\n+-rwxr-xr-x 0 root (0) root (0) 27187 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupCheckBackup\n+-rwxr-xr-x 0 root (0) root (0) 10995 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupConvertBackup\n+-rwxr-xr-x 0 root (0) root (0) 20761 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupDel\n+-rwxr-xr-x 0 root (0) root (0) 14369 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupMount\n+-rwxr-xr-x 0 root (0) root (0) 23482 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupRecover\n+-rwxr-xr-x 0 root (0) root (0) 17420 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupSearch\n+-rwxr-xr-x 0 root (0) root (0) 30169 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupUpdateBackup\n+-rwxr-xr-x 0 root (0) root (0) 17592 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupVersions\n+-rwxr-xr-x 0 root (0) root (0) 6950 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup_du\n+-rwxr-xr-x 0 root (0) root (0) 11747 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupls\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/share/doc/storebackup/\n -rw-r--r-- 0 root (0) root (0) 3697 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/README.1ST\n -rw-r--r-- 0 root (0) root (0) 2561 2012-06-16 10:00:35.000000 ./usr/share/doc/storebackup/README.Debian\n -rw-r--r-- 0 root (0) root (0) 19119 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/README.gz\n -rw-r--r-- 0 root (0) root (0) 1035 2012-03-04 07:45:54.000000 ./usr/share/doc/storebackup/ROADMAP\n@@ -62,19 +74,7 @@\n -rw-r--r-- 0 root (0) root (0) 14268 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/prLog.pl\n -rw-r--r-- 0 root (0) root (0) 1544 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/splitLine.pl\n -rwxr-xr-x 0 root (0) root (0) 2269 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/stbuMd5Exec.pl\n -rwxr-xr-x 0 root (0) root (0) 1623 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/stbuMd5cp.pl\n -rw-r--r-- 0 root (0) root (0) 116996 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/storeBackupLib.pl\n -rw-r--r-- 0 root (0) root (0) 3770 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/tail.pl\n -rw-r--r-- 0 root (0) root (0) 1455 2012-03-04 07:45:54.000000 ./usr/share/storebackup/lib/version.pl\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/llt -> ../share/storebackup/bin/llt\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup -> ../share/storebackup/bin/storeBackup\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupCheckBackup -> ../share/storebackup/bin/storeBackupCheckBackup\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupConvertBackup -> ../share/storebackup/bin/storeBackupConvertBackup\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupDel -> ../share/storebackup/bin/storeBackupDel\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupMount -> ../share/storebackup/bin/storeBackupMount\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupRecover -> ../share/storebackup/bin/storeBackupRecover\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupSearch -> ../share/storebackup/bin/storeBackupSearch\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupUpdateBackup -> ../share/storebackup/bin/storeBackupUpdateBackup\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupVersions -> ../share/storebackup/bin/storeBackupVersions\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackup_du -> ../share/storebackup/bin/storeBackup_du\n-lrwxrwxrwx 0 root (0) root (0) 0 2020-07-08 12:54:21.000000 ./usr/bin/storeBackupls -> ../share/storebackup/bin/storeBackupls\n"}, {"source1": "./usr/bin/llt", "source2": "./usr/bin/llt", "has_internal_linenos": true, "unified_diff": "@@ -1,3 +1,442 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 6c6c 740a p/bin/llt.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose\n+00000030: 6620 436c 6165 7320 2832 3030 302d 3230 f Claes (2000-20\n+00000040: 3132 290a 2320 2020 2020 2020 2020 2020 12).# \n+00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we\n+00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th\n+00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr\n+00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you\n+00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut\n+000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi\n+000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under \n+000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the\n+000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub\n+000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p\n+000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# \n+00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar\n+00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei\n+00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o\n+00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o\n+00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o\n+00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later\n+00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T\n+00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d\n+00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th\n+00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w\n+000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.#\n+000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A\n+000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit\n+000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im\n+000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o\n+000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB\n+00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS\n+00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA\n+00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See \n+00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene\n+00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen\n+00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta\n+00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s\n+00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei\n+00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th\n+00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n+000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# \n+000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this\n+000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no\n+000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..push @\n+00000300: 5645 5253 494f 4e2c 2027 2449 643a 206c VERSION, '$Id: l\n+00000310: 6c74 2033 3632 2032 3031 322d 3031 2d32 lt 362 2012-01-2\n+00000320: 3820 3232 3a31 313a 3133 5a20 686a 6320 8 22:11:13Z hjc \n+00000330: 2420 273b 0a0a 0a75 7365 2073 7472 6963 $ ';...use stric\n+00000340: 743b 0a0a 7375 6220 6c69 6250 6174 680a t;..sub libPath.\n+00000350: 7b0a 2020 2020 6d79 2024 6669 6c65 203d {. my $file =\n+00000360: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my \n+00000370: 2464 6972 3b0a 0a20 2020 2023 2046 616c $dir;.. # Fal\n+00000380: 6c73 2044 6174 6569 2073 656c 6273 7420 ls Datei selbst \n+00000390: 6569 6e20 7379 6d6c 696e 6b20 6973 742c ein symlink ist,\n+000003a0: 2073 6f6c 616e 6765 2066 6f6c 6765 6e2c solange folgen,\n+000003b0: 2062 6973 2061 7566 6765 6cf6 7374 0a20 bis aufgel.st. \n+000003c0: 2020 2069 6620 282d 6620 2466 696c 6529 if (-f $file)\n+000003d0: 0a20 2020 207b 0a09 7768 696c 6520 282d . {..while (-\n+000003e0: 6c20 2466 696c 6529 0a09 7b0a 0920 2020 l $file)..{.. \n+000003f0: 206d 7920 246c 696e 6b20 3d20 7265 6164 my $link = read\n+00000400: 6c69 6e6b 2824 6669 6c65 293b 0a0a 0920 link($file);... \n+00000410: 2020 2069 6620 2873 7562 7374 7228 246c if (substr($l\n+00000420: 696e 6b2c 2030 2c20 3129 206e 6520 222f ink, 0, 1) ne \"/\n+00000430: 2229 0a09 2020 2020 7b0a 0909 2466 696c \").. {...$fil\n+00000440: 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 e =~ s/[^\\/]+$/$\n+00000450: 6c69 6e6b 2f3b 0a09 2020 2020 7d0a 0920 link/;.. }.. \n+00000460: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n+00000470: 0924 6669 6c65 203d 2024 6c69 6e6b 3b0a .$file = $link;.\n+00000480: 0920 2020 207d 0a09 7d0a 0a09 2824 6469 . }..}...($di\n+00000490: 722c 2024 6669 6c65 2920 3d20 2673 706c r, $file) = &spl\n+000004a0: 6974 4669 6c65 4469 7228 2466 696c 6529 itFileDir($file)\n+000004b0: 3b0a 0924 6669 6c65 203d 2022 2f24 6669 ;..$file = \"/$fi\n+000004c0: 6c65 223b 0a20 2020 207d 0a20 2020 2065 le\";. }. e\n+000004d0: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print\n+000004e0: 2053 5444 4552 5220 223c 2466 696c 653e STDERR \"<$file>\n+000004f0: 2064 6f65 7320 6e6f 7420 6578 6973 7421 does not exist!\n+00000500: 5c6e 223b 0a09 6578 6974 2031 3b0a 2020 \\n\";..exit 1;. \n+00000510: 2020 7d0a 0a20 2020 2024 6469 7220 2e3d }.. $dir .=\n+00000520: 2022 2f2e 2e2f 6c69 6222 3b20 2020 2020 \"/../lib\"; \n+00000530: 2020 2020 2020 2320 5066 6164 207a 7520 # Pfad zu \n+00000540: 6465 6e20 4269 626c 696f 7468 656b 656e den Bibliotheken\n+00000550: 0a20 2020 206d 7920 246f 6c64 4469 7220 . my $oldDir \n+00000560: 3d20 602f 6269 6e2f 7077 6460 3b0a 2020 = `/bin/pwd`;. \n+00000570: 2020 6368 6f6d 7020 246f 6c64 4469 723b chomp $oldDir;\n+00000580: 0a20 2020 2069 6620 2863 6864 6972 2024 . if (chdir $\n+00000590: 6469 7229 0a20 2020 207b 0a09 6d79 2024 dir). {..my $\n+000005a0: 6162 7344 6972 203d 2060 2f62 696e 2f70 absDir = `/bin/p\n+000005b0: 7764 603b 0a09 6368 6f70 2024 6162 7344 wd`;..chop $absD\n+000005c0: 6972 3b0a 0963 6864 6972 2024 6f6c 6444 ir;..chdir $oldD\n+000005d0: 6972 3b0a 0a09 7265 7475 726e 2028 2673 ir;...return (&s\n+000005e0: 706c 6974 4669 6c65 4469 7228 2224 6162 plitFileDir(\"$ab\n+000005f0: 7344 6972 2466 696c 6522 2929 3b0a 2020 sDir$file\"));. \n+00000600: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+00000610: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR\n+00000620: 2022 3c24 6469 723e 2064 6f65 7320 6e6f \"<$dir> does no\n+00000630: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting\n+00000640: 5c6e 223b 0a20 2020 207d 0a7d 0a73 7562 \\n\";. }.}.sub\n+00000650: 2073 706c 6974 4669 6c65 4469 720a 7b0a splitFileDir.{.\n+00000660: 2020 2020 6d79 2024 6e61 6d65 203d 2073 my $name = s\n+00000670: 6869 6674 3b0a 0a20 2020 2072 6574 7572 hift;.. retur\n+00000680: 6e20 2827 2e27 2c20 246e 616d 6529 2075 n ('.', $name) u\n+00000690: 6e6c 6573 7320 2824 6e61 6d65 203d 7e2f nless ($name =~/\n+000006a0: 5c2f 2f29 3b20 2020 2023 206e 7572 2065 \\//); # nur e\n+000006b0: 696e 6661 6368 6572 2044 6174 6569 6e61 infacher Dateina\n+000006c0: 6d65 0a0a 2020 2020 6d79 2028 2464 6972 me.. my ($dir\n+000006d0: 2c20 2466 696c 6529 203d 2024 6e61 6d65 , $file) = $name\n+000006e0: 203d 7e20 2f5e 282e 2a29 5c2f 282e 2a29 =~ /^(.*)\\/(.*)\n+000006f0: 242f 733b 0a20 2020 2024 6469 7220 3d20 $/s;. $dir = \n+00000700: 272f 2720 6966 2028 2464 6972 2065 7120 '/' if ($dir eq \n+00000710: 2727 293b 2020 2020 2020 2020 2020 2020 ''); \n+00000720: 2020 2020 2020 2023 2067 696c 742c 2066 # gilt, f\n+00000730: 616c 6c73 207a 2e42 2e20 2f66 696c 656e alls z.B. /filen\n+00000740: 616d 650a 2020 2020 7265 7475 726e 2028 ame. return (\n+00000750: 2464 6972 2c20 2466 696c 6529 3b0a 7d0a $dir, $file);.}.\n+00000760: 6d79 2028 2472 6571 2c20 2470 726f 6729 my ($req, $prog)\n+00000770: 203d 2026 6c69 6250 6174 6828 2430 293b = &libPath($0);\n+00000780: 0a70 7573 6820 4049 4e43 2c20 2224 7265 .push @INC, \"$re\n+00000790: 7122 3b0a 0a72 6571 7569 7265 2027 6368 q\";..require 'ch\n+000007a0: 6563 6b50 6172 616d 322e 706c 273b 0a72 eckParam2.pl';.r\n+000007b0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version.\n+000007c0: 706c 273b 0a0a 3d68 6561 6431 204e 414d pl';..=head1 NAM\n+000007d0: 450a 0a6c 6c74 202d 206c 6973 7420 6372 E..llt - list cr\n+000007e0: 6561 7465 2c20 6163 6365 7373 2061 6e64 eate, access and\n+000007f0: 206d 6f64 6966 6963 6174 696f 6e20 7469 modification ti\n+00000800: 6d65 7320 6f66 2066 696c 6573 0a0a 3d68 mes of files..=h\n+00000810: 6561 6431 2053 594e 4f50 5349 530a 0a09 ead1 SYNOPSIS...\n+00000820: 6c6c 7420 5b2d 725d 205b 2d69 5d20 5b2d llt [-r] [-i] [-\n+00000830: 617c 2d6d 7c2d 635d 205b 6669 6c65 735d a|-m|-c] [files]\n+00000840: 205b 6469 7273 5d0a 6f72 0a20 2020 2020 [dirs].or. \n+00000850: 2020 206c 6c74 202d 6520 7469 6d65 0a0a llt -e time..\n+00000860: 3d68 6561 6431 204f 5054 494f 4e53 0a0a =head1 OPTIONS..\n+00000870: 3d6f 7665 7220 380a 0a3d 6974 656d 2042 =over 8..=item B\n+00000880: 3c2d 2d68 656c 703e 2c20 423c 2d68 3e0a <--help>, B<-h>.\n+00000890: 0a20 2020 2073 686f 7720 7468 6973 2068 . show this h\n+000008a0: 656c 700a 0a3d 6974 656d 2042 3c2d 2d72 elp..=item B<--r\n+000008b0: 6576 6572 7365 3e2c 2042 3c2d 723e 0a0a everse>, B<-r>..\n+000008c0: 2020 2020 736f 7274 2069 6e20 7265 7665 sort in reve\n+000008d0: 7273 6520 6f72 6465 720a 0a3d 6974 656d rse order..=item\n+000008e0: 2042 3c2d 2d69 6e73 656e 7369 7469 7665 B<--insensitive\n+000008f0: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6361 >, B<-i>.. ca\n+00000900: 7365 2069 6e73 656e 7369 7469 7665 6c79 se insensitively\n+00000910: 2028 6e6f 7420 7769 7468 202d 612c 202d (not with -a, -\n+00000920: 6d20 6f72 202d 6329 0a0a 3d69 7465 6d20 m or -c)..=item \n+00000930: 423c 2d2d 6163 6365 7373 3e2c 2042 3c2d B<--access>, B<-\n+00000940: 613e 0a0a 2020 2020 736f 7274 2061 6363 a>.. sort acc\n+00000950: 6f72 6469 6e67 2074 6f20 6163 6365 7373 ording to access\n+00000960: 2074 696d 650a 0a3d 6974 656d 2042 3c2d time..=item B<-\n+00000970: 2d6d 6f64 6966 6963 6174 696f 6e3e 2c20 -modification>, \n+00000980: 423c 2d6d 3e0a 0a20 2020 2073 6f72 7420 B<-m>.. sort \n+00000990: 6163 636f 7264 696e 6720 746f 206d 6f64 according to mod\n+000009a0: 6966 6963 6174 696f 6e20 7469 6d65 0a0a ification time..\n+000009b0: 3d69 7465 6d20 423c 2d2d 6372 6561 7469 =item B<--creati\n+000009c0: 6f6e 3e2c 2042 3c2d 633e 0a0a 2020 2020 on>, B<-c>.. \n+000009d0: 736f 7274 2061 6363 6f72 6469 6e67 2074 sort according t\n+000009e0: 6f20 6372 6561 7469 6f6e 2074 696d 650a o creation time.\n+000009f0: 0a3d 6974 656d 2042 3c2d 2d75 6e69 7854 .=item B<--unixT\n+00000a00: 696d 653e 2c20 423c 2d75 3e0a 0a20 2020 ime>, B<-u>.. \n+00000a10: 2073 686f 7720 756e 6978 2074 696d 6520 show unix time \n+00000a20: 2875 6e73 6967 6e65 6420 696e 7465 6765 (unsigned intege\n+00000a30: 7229 0a0a 3d69 7465 6d20 423c 2d56 3e0a r)..=item B<-V>.\n+00000a40: 0a20 2020 2070 7269 6e74 2076 6572 7369 . print versi\n+00000a50: 6f6e 2873 290a 0a3d 6974 656d 2042 3c2d on(s)..=item B<-\n+00000a60: 2d65 706f 6368 3e2c 2042 3c2d 653e 0a0a -epoch>, B<-e>..\n+00000a70: 2020 2020 7061 7261 6d65 7465 7220 6973 parameter is\n+00000a80: 2074 6865 2074 696d 6520 7369 6e63 6520 the time since \n+00000a90: 6570 6f63 680a 2020 2020 6c6c 7420 7072 epoch. llt pr\n+00000aa0: 696e 7420 7468 6520 6461 7465 2069 6e20 int the date in \n+00000ab0: 6120 7265 6164 6162 6c65 2066 6f72 6d61 a readable forma\n+00000ac0: 740a 2020 2020 7468 6973 206f 7074 696f t. this optio\n+00000ad0: 6e20 6361 6e20 6265 2072 6570 6561 7465 n can be repeate\n+00000ae0: 6420 6d75 6c74 6970 6c65 2074 696d 6573 d multiple times\n+00000af0: 0a20 2020 206c 6c74 2077 696c 6c20 7374 . llt will st\n+00000b00: 6f70 2065 7865 6375 7469 6e67 2069 6620 op executing if \n+00000b10: 6e6f 206f 7468 6572 206f 7074 696f 6e73 no other options\n+00000b20: 206f 7220 7061 7261 6d73 2061 7265 2063 or params are c\n+00000b30: 686f 7365 6e0a 0a3d 6261 636b 0a0a 536f hosen..=back..So\n+00000b40: 7274 696e 6720 7769 7468 6f75 7420 5b2d rting without [-\n+00000b50: 617c 2d6d 7c2d 635d 2069 7320 736f 7274 a|-m|-c] is sort\n+00000b60: 696e 6720 6163 636f 7264 696e 6720 746f ing according to\n+00000b70: 2066 696c 6520 6e61 6d65 732e 0a0a 3d68 file names...=h\n+00000b80: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT..\n+00000b90: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20\n+00000ba0: 3030 2c32 3030 342c 3230 3038 2c32 3030 00,2004,2008,200\n+00000bb0: 3920 6279 2048 6569 6e7a 2d4a 6f73 6566 9 by Heinz-Josef\n+00000bc0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ\n+00000bd0: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u\n+00000be0: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen\n+00000bf0: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00000c00: 6e73 6520 7633 206f 7220 616e 7920 6c61 nse v3 or any la\n+00000c10: 7465 7220 7665 7273 696f 6e2e 0a0a 3d63 ter version...=c\n+00000c20: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j\n+00000c30: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^\n+00000c40: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \\s*$/, `pod2text\n+00000c50: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = \n+00000c60: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 \"cannot find pod\n+00000c70: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum\n+00000c80: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det\n+00000c90: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\\n\". unle\n+00000ca0: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin\n+00000cb0: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\\@ARGV\n+00000cc0: 2c20 272d 5627 293b 0a0a 6d79 2024 4368 , '-V');..my $Ch\n+00000cd0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che\n+00000ce0: 636b 5061 7261 6d2d 3e6e 6577 280a 0909 ckParam->new(...\n+00000cf0: 2020 2020 272d 616c 6c6f 774c 6973 7473 '-allowLists\n+00000d00: 2720 3d3e 2027 7965 7327 2c0a 0909 2020 ' => 'yes',... \n+00000d10: 2020 272d 6c69 7374 2720 3d3e 205b 0a09 '-list' => [..\n+00000d20: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+00000d30: 2d6e 616d 6527 203d 3e20 2769 6e73 656e -name' => 'insen\n+00000d40: 7369 7469 7665 272c 0a09 0909 0909 2020 sitive',...... \n+00000d50: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00000d60: 3e20 272d 6927 2c0a 0909 0909 0920 2020 > '-i',...... \n+00000d70: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+00000d80: 272d 696e 7365 6e73 6974 6976 6527 2c0a '-insensitive',.\n+00000d90: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n+00000da0: 6966 2720 3d3e 0a09 0920 2020 2027 6e6f if' =>... 'no\n+00000db0: 7420 5b61 6363 6573 735d 2061 6e64 206e t [access] and n\n+00000dc0: 6f74 205b 6d6f 6469 6669 6361 7469 6f6e ot [modification\n+00000dd0: 5d20 616e 6420 6e6f 7420 5b63 7265 6174 ] and not [creat\n+00000de0: 696f 6e5d 270a 0909 0909 0920 2020 2029 ion]'...... )\n+00000df0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+00000e00: 7728 272d 6e61 6d65 2720 3d3e 2027 6163 w('-name' => 'ac\n+00000e10: 6365 7373 272c 0a09 0909 0909 2020 2020 cess',...... \n+00000e20: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+00000e30: 272d 6127 2c0a 0909 0909 0920 2020 2027 '-a',...... '\n+00000e40: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+00000e50: 2d61 6363 6573 7327 2c0a 0909 0909 0920 -access',...... \n+00000e60: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' =>\n+00000e70: 0a09 0920 2020 2027 6e6f 7420 5b6d 6f64 ... 'not [mod\n+00000e80: 6966 6963 6174 696f 6e5d 2061 6e64 206e ification] and n\n+00000e90: 6f74 205b 6372 6561 7469 6f6e 5d27 0a09 ot [creation]'..\n+00000ea0: 0909 0909 2020 2020 292c 0a09 0909 094f .... ),.....O\n+00000eb0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00000ec0: 6527 203d 3e20 276d 6f64 6966 6963 6174 e' => 'modificat\n+00000ed0: 696f 6e27 2c0a 0909 0909 0920 2020 2027 ion',...... '\n+00000ee0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+00000ef0: 2d6d 272c 0a09 0909 0909 2020 2020 272d -m',...... '-\n+00000f00: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n+00000f10: 6d6f 6469 6669 6361 7469 6f6e 272c 0a09 modification',..\n+00000f20: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n+00000f30: 6627 203d 3e0a 0909 2020 2020 276e 6f74 f' =>... 'not\n+00000f40: 205b 6163 6365 7373 5d20 616e 6420 6e6f [access] and no\n+00000f50: 7420 5b63 7265 6174 696f 6e5d 270a 0909 t [creation]'...\n+00000f60: 0909 0920 2020 2029 2c0a 0909 0909 4f70 ... ),.....Op\n+00000f70: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+00000f80: 2720 3d3e 2027 6372 6561 7469 6f6e 272c ' => 'creation',\n+00000f90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00000fa0: 7074 696f 6e27 203d 3e20 272d 6327 2c0a ption' => '-c',.\n+00000fb0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n+00000fc0: 6961 7327 203d 3e20 272d 2d63 7265 6174 ias' => '--creat\n+00000fd0: 696f 6e27 2c0a 0909 0909 0920 2020 2027 ion',...... '\n+00000fe0: 2d6f 6e6c 795f 6966 2720 3d3e 0a09 0920 -only_if' =>... \n+00000ff0: 2020 2027 6e6f 7420 5b61 6363 6573 735d 'not [access]\n+00001000: 2061 6e64 206e 6f74 205b 6d6f 6469 6669 and not [modifi\n+00001010: 6361 7469 6f6e 5d27 0a09 0909 0909 2020 cation]'...... \n+00001020: 2020 292c 0a09 0909 094f 7074 696f 6e2d ),.....Option-\n+00001030: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+00001040: 2772 6576 6572 7365 272c 0a09 0909 0909 'reverse',......\n+00001050: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001060: 203d 3e20 272d 7227 2c0a 0909 0909 0920 => '-r',...... \n+00001070: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+00001080: 3e20 272d 2d72 6576 6572 7365 270a 0909 > '--reverse'...\n+00001090: 0909 0920 2020 2029 2c0a 0909 0909 4f70 ... ),.....Op\n+000010a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+000010b0: 2720 3d3e 2027 756e 6978 5469 6d65 272c ' => 'unixTime',\n+000010c0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+000010d0: 7074 696f 6e27 203d 3e20 272d 7527 2c0a ption' => '-u',.\n+000010e0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n+000010f0: 6961 7327 203d 3e20 272d 2d75 6e69 7854 ias' => '--unixT\n+00001100: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio\n+00001110: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001120: 3e20 2765 706f 6368 272c 0a09 0909 0909 > 'epoch',......\n+00001130: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001140: 203d 3e20 272d 6527 2c0a 0909 0909 0920 => '-e',...... \n+00001150: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+00001160: 3e20 272d 2d65 706f 6368 272c 0a09 0909 > '--epoch',....\n+00001170: 0909 2020 2020 272d 6d75 6c74 6970 6c65 .. '-multiple\n+00001180: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n+00001190: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+000011a0: 616d 6527 203d 3e20 2768 656c 7027 2c0a ame' => 'help',.\n+000011b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+000011c0: 7469 6f6e 2720 3d3e 2027 2d68 272c 0a09 tion' => '-h',..\n+000011d0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+000011e0: 6173 2720 3d3e 2027 2d2d 6865 6c70 270a as' => '--help'.\n+000011f0: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),.....\n+00001200: 5d0a 0909 2020 2020 293b 0a0a 2443 6865 ]... );..$Che\n+00001210: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a\n+00001220: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \\@ARGV,.\n+00001230: 0909 2027 2d68 656c 7027 203d 3e20 2448 .. '-help' => $H\n+00001240: 656c 700a 0909 2029 3b0a 0a69 6620 2824 elp... );..if ($\n+00001250: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001260: 5769 7468 6f75 7450 6172 2827 6865 6c70 WithoutPar('help\n+00001270: 2729 290a 7b0a 2020 2020 7072 696e 7420 ')).{. print \n+00001280: 2224 4865 6c70 223b 0a20 2020 2065 7869 \"$Help\";. exi\n+00001290: 7420 303b 0a7d 0a0a 6d79 2024 736f 7274 t 0;.}..my $sort\n+000012a0: 203d 2027 6e61 6d65 273b 2020 2020 2020 = 'name'; \n+000012b0: 2320 4465 6661 756c 743a 2041 6c70 6861 # Default: Alpha\n+000012c0: 6265 7469 7363 6820 736f 7274 6965 7265 betisch sortiere\n+000012d0: 6e0a 2473 6f72 7420 3d20 2761 7469 6d65 n.$sort = 'atime\n+000012e0: 2720 6966 2028 2443 6865 636b 5061 722d ' if ($CheckPar-\n+000012f0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+00001300: 7228 2761 6363 6573 7327 2929 3b0a 2473 r('access'));.$s\n+00001310: 6f72 7420 3d20 276d 7469 6d65 2720 6966 ort = 'mtime' if\n+00001320: 2028 2443 6865 636b 5061 722d 3e67 6574 ($CheckPar->get\n+00001330: 4f70 7457 6974 686f 7574 5061 7228 276d OptWithoutPar('m\n+00001340: 6f64 6966 6963 6174 696f 6e27 2929 3b0a odification'));.\n+00001350: 2473 6f72 7420 3d20 2763 7469 6d65 2720 $sort = 'ctime' \n+00001360: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g\n+00001370: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n+00001380: 2763 7265 6174 696f 6e27 2929 3b0a 6d79 'creation'));.my\n+00001390: 2024 7265 7665 7273 6520 3d20 3120 6966 $reverse = 1 if\n+000013a0: 2028 2443 6865 636b 5061 722d 3e67 6574 ($CheckPar->get\n+000013b0: 4f70 7457 6974 686f 7574 5061 7228 2772 OptWithoutPar('r\n+000013c0: 6576 6572 7365 2729 293b 0a6d 7920 2469 everse'));.my $i\n+000013d0: 6e73 656e 7369 7469 7665 203d 2031 2069 nsensitive = 1 i\n+000013e0: 6620 2824 4368 6563 6b50 6172 2d3e 6765 f ($CheckPar->ge\n+000013f0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n+00001400: 696e 7365 6e73 6974 6976 6527 2929 3b0a insensitive'));.\n+00001410: 6d79 2024 756e 6978 5469 6d65 203d 2024 my $unixTime = $\n+00001420: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001430: 5769 7468 6f75 7450 6172 2827 756e 6978 WithoutPar('unix\n+00001440: 5469 6d65 2729 3b0a 6d79 2024 6570 6f63 Time');.my $epoc\n+00001450: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g\n+00001460: 6574 4f70 7457 6974 6850 6172 2827 6570 etOptWithPar('ep\n+00001470: 6f63 6827 293b 0a0a 6d79 2028 4061 6c6c och');..my (@all\n+00001480: 2920 3d20 2824 4368 6563 6b50 6172 2d3e ) = ($CheckPar->\n+00001490: 6765 744c 6973 7450 6172 2829 293b 0a0a getListPar());..\n+000014a0: 0a69 6620 2824 6570 6f63 6829 0a7b 0a20 .if ($epoch).{. \n+000014b0: 2020 206d 7920 2824 6570 293b 0a20 2020 my ($ep);. \n+000014c0: 2066 6f72 6561 6368 2024 6570 2028 4024 foreach $ep (@$\n+000014d0: 6570 6f63 6829 0a20 2020 207b 0a09 7072 epoch). {..pr\n+000014e0: 696e 7420 2224 6570 202d 3e20 222c 2026 int \"$ep -> \", &\n+000014f0: 6765 7454 696d 6528 2465 7029 2c20 225c getTime($ep), \"\\\n+00001500: 6e22 3b0a 2020 2020 7d0a 2020 2020 6578 n\";. }. ex\n+00001510: 6974 2030 2075 6e6c 6573 7320 4061 6c6c it 0 unless @all\n+00001520: 3b0a 7d0a 0a28 4061 6c6c 2920 3d20 2827 ;.}..(@all) = ('\n+00001530: 2e27 2920 756e 6c65 7373 2040 616c 6c3b .') unless @all;\n+00001540: 0a0a 6d79 2028 4066 696c 6573 293b 0a6d ..my (@files);.m\n+00001550: 7920 2466 3b0a 666f 7265 6163 6820 2466 y $f;.foreach $f\n+00001560: 2028 4061 6c6c 290a 7b0a 2020 2020 6966 (@all).{. if\n+00001570: 2028 2d64 2024 6629 2020 2020 2320 7765 (-d $f) # we\n+00001580: 6e6e 2044 6972 6563 746f 7279 0a20 2020 nn Directory. \n+00001590: 207b 0a09 6f70 656e 6469 7228 4449 522c {..opendir(DIR,\n+000015a0: 2024 6629 206f 7220 7072 696e 7420 5354 $f) or print ST\n+000015b0: 4445 5252 2022 6361 6e6e 6f74 206f 7065 DERR \"cannot ope\n+000015c0: 6e20 3c24 663e 5c6e 223b 0a09 6d79 2024 n <$f>\\n\";..my $\n+000015d0: 6631 3b0a 0966 6f72 6561 6368 2024 6631 f1;..foreach $f1\n+000015e0: 2028 7265 6164 6469 7228 4449 5229 290a (readdir(DIR)).\n+000015f0: 097b 0a09 2020 2020 7075 7368 2040 6669 .{.. push @fi\n+00001600: 6c65 732c 2022 2466 2f24 6631 223b 0a09 les, \"$f/$f1\";..\n+00001610: 7d0a 0963 6c6f 7365 6469 7228 4449 5229 }..closedir(DIR)\n+00001620: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00001630: 2020 2020 2020 2020 2020 2320 4461 7465 # Date\n+00001640: 690a 2020 2020 7b0a 0969 6620 282d 6620 i. {..if (-f \n+00001650: 2466 290a 097b 0a09 2020 2020 7075 7368 $f)..{.. push\n+00001660: 2040 6669 6c65 732c 2024 663b 0a09 7d0a @files, $f;..}.\n+00001670: 0965 6c73 650a 097b 0a09 2020 2020 7072 .else..{.. pr\n+00001680: 696e 7420 2243 616e 6e6f 7420 6f70 656e int \"Cannot open\n+00001690: 2066 696c 6520 3c24 663e 5c6e 223b 0a09 file <$f>\\n\";..\n+000016a0: 7d0a 2020 2020 7d0a 7d0a 0a23 2045 726d }. }.}..# Erm\n+000016b0: 6974 7465 6c6e 2064 6572 205a 6569 7465 itteln der Zeite\n+000016c0: 6e0a 6d79 2028 4066 293b 0a66 6f72 6561 n.my (@f);.forea\n+000016d0: 6368 2024 6620 2840 6669 6c65 7329 0a7b ch $f (@files).{\n+000016e0: 0a20 2020 206d 7920 2824 6174 696d 652c . my ($atime,\n+000016f0: 2024 6d74 696d 652c 2024 6374 696d 6529 $mtime, $ctime)\n+00001700: 203d 2028 6c73 7461 7428 2466 2929 5b38 = (lstat($f))[8\n+00001710: 2c39 2c31 305d 3b0a 2020 2020 6d79 2025 ,9,10];. my %\n+00001720: 6820 3d20 2827 6e61 6d65 2720 3d3e 2024 h = ('name' => $\n+00001730: 662c 0a09 2020 2020 2027 6174 696d 6527 f,.. 'atime'\n+00001740: 203d 3e20 2461 7469 6d65 2c0a 0920 2020 => $atime,.. \n+00001750: 2020 276d 7469 6d65 2720 3d3e 2024 6d74 'mtime' => $mt\n+00001760: 696d 652c 0a09 2020 2020 2027 6374 696d ime,.. 'ctim\n+00001770: 6527 203d 3e20 2463 7469 6d65 0a09 2020 e' => $ctime.. \n+00001780: 2020 2029 3b0a 2020 2020 7075 7368 2040 );. push @\n+00001790: 662c 205c 2568 3b0a 7d0a 0a23 2053 6f72 f, \\%h;.}..# Sor\n+000017a0: 7469 6572 656e 0a6d 7920 2840 7366 293b tieren.my (@sf);\n+000017b0: 0a69 6620 2824 736f 7274 2065 7120 276e .if ($sort eq 'n\n+000017c0: 616d 6527 290a 7b0a 2020 2020 6966 2028 ame').{. if (\n+000017d0: 2469 6e73 656e 7369 7469 7665 290a 2020 $insensitive). \n+000017e0: 2020 7b0a 0940 7366 203d 2024 7265 7665 {..@sf = $reve\n+000017f0: 7273 6520 3f20 736f 7274 207b 2075 6328 rse ? sort { uc(\n+00001800: 2462 2d3e 7b24 736f 7274 7d29 2063 6d70 $b->{$sort}) cmp\n+00001810: 2075 6328 2461 2d3e 7b24 736f 7274 7d29 uc($a->{$sort})\n+00001820: 207d 2040 660a 0920 2020 203a 2073 6f72 } @f.. : sor\n+00001830: 7420 7b20 7563 2824 612d 3e7b 2473 6f72 t { uc($a->{$sor\n+00001840: 747d 2920 636d 7020 7563 2824 622d 3e7b t}) cmp uc($b->{\n+00001850: 2473 6f72 747d 2920 7d20 4066 3b0a 2020 $sort}) } @f;. \n+00001860: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+00001870: 207b 0a09 4073 6620 3d20 2472 6576 6572 {..@sf = $rever\n+00001880: 7365 203f 2073 6f72 7420 7b20 2462 2d3e se ? sort { $b->\n+00001890: 7b24 736f 7274 7d20 636d 7020 2461 2d3e {$sort} cmp $a->\n+000018a0: 7b24 736f 7274 7d20 7d20 4066 0a09 2020 {$sort} } @f.. \n+000018b0: 2020 3a20 736f 7274 207b 2024 612d 3e7b : sort { $a->{\n+000018c0: 2473 6f72 747d 2063 6d70 2024 622d 3e7b $sort} cmp $b->{\n+000018d0: 2473 6f72 747d 207d 2040 663b 0a20 2020 $sort} } @f;. \n+000018e0: 207d 0a7d 0a65 6c73 650a 7b0a 2020 2020 }.}.else.{. \n+000018f0: 4073 6620 3d20 2472 6576 6572 7365 203f @sf = $reverse ?\n+00001900: 0a09 736f 7274 207b 2024 622d 3e7b 2473 ..sort { $b->{$s\n+00001910: 6f72 747d 203c 3d3e 2024 612d 3e7b 2473 ort} <=> $a->{$s\n+00001920: 6f72 747d 207d 2040 6620 3a0a 0973 6f72 ort} } @f :..sor\n+00001930: 7420 7b20 2461 2d3e 7b24 736f 7274 7d20 t { $a->{$sort} \n+00001940: 3c3d 3e20 2462 2d3e 7b24 736f 7274 7d20 <=> $b->{$sort} \n+00001950: 7d20 4066 3b0a 7d0a 0a23 2041 7573 6761 } @f;.}..# Ausga\n+00001960: 6265 0a6d 7920 246c 656e 203d 2024 756e be.my $len = $un\n+00001970: 6978 5469 6d65 203f 2031 3120 3a20 3139 ixTime ? 11 : 19\n+00001980: 3b0a 7072 696e 7466 2022 252d 247b 6c65 ;.printf \"%-${le\n+00001990: 6e7d 7320 2025 2d24 7b6c 656e 7d73 2020 n}s %-${len}s \n+000019a0: 252d 247b 6c65 6e7d 7320 205b 5469 6d65 %-${len}s [Time\n+000019b0: 5d5c 6e22 2c20 2261 6363 6573 7322 2c0a ]\\n\", \"access\",.\n+000019c0: 2020 2020 226d 6f64 6966 6963 6174 696f \"modificatio\n+000019d0: 6e22 2c20 2263 7265 6174 696f 6e22 3b0a n\", \"creation\";.\n+000019e0: 666f 7265 6163 6820 2466 2028 4073 6629 foreach $f (@sf)\n+000019f0: 0a7b 0a20 2020 206d 7920 2474 3b0a 2020 .{. my $t;. \n+00001a00: 2020 666f 7265 6163 6820 2474 2028 2466 foreach $t ($f\n+00001a10: 2d3e 7b27 6174 696d 6527 7d2c 2024 662d ->{'atime'}, $f-\n+00001a20: 3e7b 276d 7469 6d65 277d 2c20 2466 2d3e >{'mtime'}, $f->\n+00001a30: 7b27 6374 696d 6527 7d29 0a20 2020 207b {'ctime'}). {\n+00001a40: 0a09 6966 2028 2475 6e69 7854 696d 6529 ..if ($unixTime)\n+00001a50: 0a09 7b0a 0920 2020 2070 7269 6e74 2022 ..{.. print \"\n+00001a60: 2474 2020 2022 2c0a 097d 0a09 656c 7365 $t \",..}..else\n+00001a70: 0a09 7b0a 0920 2020 2070 7269 6e74 2026 ..{.. print &\n+00001a80: 6765 7454 696d 6528 2474 292c 2022 2020 getTime($t), \" \n+00001a90: 223b 0a09 7d0a 2020 2020 7d0a 2020 2020 \";..}. }. \n+00001aa0: 7072 696e 7420 2466 2d3e 7b27 6e61 6d65 print $f->{'name\n+00001ab0: 277d 2c20 225c 6e22 3b0a 7d0a 0a65 7869 '}, \"\\n\";.}..exi\n+00001ac0: 7420 303b 0a0a 0a73 7562 2067 6574 5469 t 0;...sub getTi\n+00001ad0: 6d65 0a7b 0a20 2020 206d 7920 2474 203d me.{. my $t =\n+00001ae0: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my \n+00001af0: 2824 7365 632c 246d 696e 2c24 686f 7572 ($sec,$min,$hour\n+00001b00: 2c24 6d64 6179 2c24 6d6f 6e2c 2479 6561 ,$mday,$mon,$yea\n+00001b10: 7229 203d 206c 6f63 616c 7469 6d65 2824 r) = localtime($\n+00001b20: 7429 3b0a 2020 2020 7265 7475 726e 2073 t);. return s\n+00001b30: 7072 696e 7466 2822 2534 642e 2530 3264 printf(\"%4d.%02d\n+00001b40: 2e25 3032 6420 2530 3264 3a25 3032 643a .%02d %02d:%02d:\n+00001b50: 2530 3264 222c 0a09 0920 2020 2479 6561 %02d\",... $yea\n+00001b60: 722b 3139 3030 2c20 246d 6f6e 2b31 2c20 r+1900, $mon+1, \n+00001b70: 246d 6461 792c 0a09 0920 2020 2468 6f75 $mday,... $hou\n+00001b80: 722c 2024 6d69 6e2c 2024 7365 6329 3b0a r, $min, $sec);.\n+00001b90: 7d0a 0a }..\n"}, {"source1": "./usr/bin/storeBackup", "source2": "./usr/bin/storeBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,14722 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 700a p.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 312d 3230 3132 290a 2320 2020 2020 2020 1-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T\n+00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f\n+00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo\n+00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu\n+000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod\n+000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under\n+000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th\n+000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n+000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as \n+000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# \n+00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa\n+00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e\n+00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 \n+00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, \n+00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your \n+00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late\n+00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# \n+00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is \n+00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t\n+00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it \n+000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,.\n+000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT \n+000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi\n+000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i\n+000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty \n+000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA\n+00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES\n+00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL\n+00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See\n+00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen\n+00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det\n+00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You \n+00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece\n+00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t\n+00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P\n+000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# \n+000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi\n+000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n\n+000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#..requi\n+00000300: 7265 2053 4442 4d5f 4669 6c65 3b0a 7265 re SDBM_File;.re\n+00000310: 7175 6972 6520 5469 653a 3a48 6173 683b quire Tie::Hash;\n+00000320: 0a0a 7573 6520 4663 6e74 6c20 7177 284f ..use Fcntl qw(O\n+00000330: 5f52 4457 5220 4f5f 4352 4541 5429 3b0a _RDWR O_CREAT);.\n+00000340: 7573 6520 504f 5349 583b 0a75 7365 2044 use POSIX;.use D\n+00000350: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md\n+00000360: 355f 6865 7829 3b0a 0a75 7365 2073 7472 5_hex);..use str\n+00000370: 6963 743b 0a75 7365 2077 6172 6e69 6e67 ict;.use warning\n+00000380: 733b 0a0a 6d79 2024 5645 5253 494f 4e20 s;..my $VERSION \n+00000390: 3d20 2724 4964 3a20 7374 6f72 6542 6163 = '$Id: storeBac\n+000003a0: 6b75 702e 706c 2033 3634 2032 3031 322d kup.pl 364 2012-\n+000003b0: 3032 2d31 3220 3134 3a31 343a 3434 5a20 02-12 14:14:44Z \n+000003c0: 686a 6320 2420 273b 0a6f 7572 2040 5645 hjc $ ';.our @VE\n+000003d0: 5253 494f 4e3b 0a70 7573 6820 4056 4552 RSION;.push @VER\n+000003e0: 5349 4f4e 2c20 2456 4552 5349 4f4e 3b0a SION, $VERSION;.\n+000003f0: 6d79 2028 2456 4552 5349 4f4e 704e 616d my ($VERSIONpNam\n+00000400: 652c 2024 5645 5253 494f 4e73 766e 4944 e, $VERSIONsvnID\n+00000410: 2920 3d20 2456 4552 5349 4f4e 203d 7e20 ) = $VERSION =~ \n+00000420: 2f49 643a 5c73 2b28 5c53 2b29 5c73 2b28 /Id:\\s+(\\S+)\\s+(\n+00000430: 5c64 2b29 2f3b 0a24 6d61 696e 3a3a 5354 \\d+)/;.$main::ST\n+00000440: 4f52 4542 4143 4b55 5056 4552 5349 4f4e OREBACKUPVERSION\n+00000450: 203d 2075 6e64 6566 3b0a 0a0a 7573 6520 = undef;...use \n+00000460: 4442 5f46 696c 653b 2020 2020 2020 2020 DB_File; \n+00000470: 2020 2023 2042 6572 6b65 6c65 7920 4442 # Berkeley DB\n+00000480: 0a0a 0a73 7562 206c 6962 5061 7468 0a7b ...sub libPath.{\n+00000490: 0a20 2020 206d 7920 2466 696c 6520 3d20 . my $file = \n+000004a0: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $\n+000004b0: 6469 723b 0a0a 2020 2020 2320 4661 6c6c dir;.. # Fall\n+000004c0: 7320 4461 7465 6920 7365 6c62 7374 2065 s Datei selbst e\n+000004d0: 696e 2073 796d 6c69 6e6b 2069 7374 2c20 in symlink ist, \n+000004e0: 736f 6c61 6e67 6520 666f 6c67 656e 2c20 solange folgen, \n+000004f0: 6269 7320 6175 6667 656c c3b6 7374 0a20 bis aufgel..st. \n+00000500: 2020 2069 6620 282d 6620 2466 696c 6529 if (-f $file)\n+00000510: 0a20 2020 207b 0a09 7768 696c 6520 282d . {..while (-\n+00000520: 6c20 2466 696c 6529 0a09 7b0a 0920 2020 l $file)..{.. \n+00000530: 206d 7920 246c 696e 6b20 3d20 7265 6164 my $link = read\n+00000540: 6c69 6e6b 2824 6669 6c65 293b 0a0a 0920 link($file);... \n+00000550: 2020 2069 6620 2873 7562 7374 7228 246c if (substr($l\n+00000560: 696e 6b2c 2030 2c20 3129 206e 6520 222f ink, 0, 1) ne \"/\n+00000570: 2229 0a09 2020 2020 7b0a 0909 2466 696c \").. {...$fil\n+00000580: 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 e =~ s/[^\\/]+$/$\n+00000590: 6c69 6e6b 2f3b 0a20 2020 2020 2020 2020 link/;. \n+000005a0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n+000005b0: 2020 2020 7b0a 0909 2466 696c 6520 3d20 {...$file = \n+000005c0: 246c 696e 6b3b 0a09 2020 2020 7d0a 097d $link;.. }..}\n+000005d0: 0a0a 0928 2464 6972 2c20 2466 696c 6529 ...($dir, $file)\n+000005e0: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir\n+000005f0: 2824 6669 6c65 293b 0a09 2466 696c 6520 ($file);..$file \n+00000600: 3d20 222f 2466 696c 6522 3b0a 2020 2020 = \"/$file\";. \n+00000610: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. {\n+00000620: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR \"\n+00000630: 3c24 6669 6c65 3e20 646f 6573 206e 6f74 <$file> does not\n+00000640: 2065 7869 7374 215c 6e22 3b0a 0965 7869 exist!\\n\";..exi\n+00000650: 7420 313b 0a20 2020 207d 0a0a 2020 2020 t 1;. }.. \n+00000660: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= \"/../lib\n+00000670: 223b 2020 2020 2020 2020 2020 2023 2050 \"; # P\n+00000680: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli\n+00000690: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $\n+000006a0: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p\n+000006b0: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $\n+000006c0: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if (\n+000006d0: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). \n+000006e0: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = \n+000006f0: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho\n+00000700: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi\n+00000710: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret\n+00000720: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD\n+00000730: 6972 2822 2461 6273 4469 7224 6669 6c65 ir(\"$absDir$file\n+00000740: 2229 293b 0a20 2020 207d 0a20 2020 2065 \"));. }. e\n+00000750: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print\n+00000760: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR \"<$dir> \n+00000770: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, \n+00000780: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\\n\";. \n+00000790: 7d0a 7d0a 7375 6220 7370 6c69 7446 696c }.}.sub splitFil\n+000007a0: 6544 6972 0a7b 0a20 2020 206d 7920 246e eDir.{. my $n\n+000007b0: 616d 6520 3d20 7368 6966 743b 0a0a 2020 ame = shift;.. \n+000007c0: 2020 7265 7475 726e 2028 272e 272c 2024 return ('.', $\n+000007d0: 6e61 6d65 2920 756e 6c65 7373 2028 246e name) unless ($n\n+000007e0: 616d 6520 3d7e 2f5c 2f2f 293b 2020 2020 ame =~/\\//); \n+000007f0: 2320 6e75 7220 6569 6e66 6163 6865 7220 # nur einfacher \n+00000800: 4461 7465 696e 616d 650a 0a20 2020 206d Dateiname.. m\n+00000810: 7920 2824 6469 722c 2024 6669 6c65 2920 y ($dir, $file) \n+00000820: 3d20 246e 616d 6520 3d7e 202f 5e28 2e2a = $name =~ /^(.*\n+00000830: 295c 2f28 2e2a 2924 2f73 3b0a 2020 2020 )\\/(.*)$/s;. \n+00000840: 2464 6972 203d 2027 2f27 2069 6620 2824 $dir = '/' if ($\n+00000850: 6469 7220 6571 2027 2729 3b20 2020 2020 dir eq ''); \n+00000860: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+00000870: 6769 6c74 2c20 6661 6c6c 7320 7a2e 422e gilt, falls z.B.\n+00000880: 202f 6669 6c65 6e61 6d65 0a20 2020 2072 /filename. r\n+00000890: 6574 7572 6e20 2824 6469 722c 2024 6669 eturn ($dir, $fi\n+000008a0: 6c65 293b 0a7d 0a6d 7920 2824 7265 712c le);.}.my ($req,\n+000008b0: 2024 7072 6f67 2920 3d20 266c 6962 5061 $prog) = &libPa\n+000008c0: 7468 2824 3029 3b0a 2840 494e 4329 203d th($0);.(@INC) =\n+000008d0: 2028 2472 6571 2c20 4049 4e43 293b 0a0a ($req, @INC);..\n+000008e0: 7265 7175 6972 6520 2763 6865 636b 5061 require 'checkPa\n+000008f0: 7261 6d32 2e70 6c27 3b0a 7265 7175 6972 ram2.pl';.requir\n+00000900: 6520 2763 6865 636b 4f62 6a50 6172 2e70 e 'checkObjPar.p\n+00000910: 6c27 3b0a 7265 7175 6972 6520 2770 724c l';.require 'prL\n+00000920: 6f67 2e70 6c27 3b0a 7265 7175 6972 6520 og.pl';.require \n+00000930: 2773 706c 6974 4c69 6e65 2e70 6c27 3b0a 'splitLine.pl';.\n+00000940: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir\n+00000950: 2e70 6c27 3b0a 7265 7175 6972 6520 2764 .pl';.require 'd\n+00000960: 6174 6554 6f6f 6c73 2e70 6c27 3b0a 7265 ateTools.pl';.re\n+00000970: 7175 6972 6520 2766 6f72 6b50 726f 632e quire 'forkProc.\n+00000980: 706c 273b 0a72 6571 7569 7265 2027 6875 pl';.require 'hu\n+00000990: 6d61 6e52 6561 642e 706c 273b 0a72 6571 manRead.pl';.req\n+000009a0: 7569 7265 2027 7665 7273 696f 6e2e 706c uire 'version.pl\n+000009b0: 273b 0a72 6571 7569 7265 2027 6576 616c ';.require 'eval\n+000009c0: 546f 6f6c 732e 706c 273b 0a72 6571 7569 Tools.pl';.requi\n+000009d0: 7265 2027 7374 6f72 6542 6163 6b75 704c re 'storeBackupL\n+000009e0: 6962 2e70 6c27 3b0a 0a6e 6f20 7761 726e ib.pl';..no warn\n+000009f0: 696e 6773 2027 6e65 776c 696e 6527 3b20 ings 'newline'; \n+00000a00: 2020 2023 206e 6f20 7761 726e 696e 6720 # no warning \n+00000a10: 666f 7220 7374 6174 206f 6620 6669 6c65 for stat of file\n+00000a20: 7320 7769 7468 206e 6577 6c69 6e65 0a20 s with newline. \n+00000a30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000a40: 2020 2020 2020 2020 2023 2077 6f72 6b73 # works\n+00000a50: 2069 6e20 7065 726c 2035 2e36 2b20 6f6e in perl 5.6+ on\n+00000a60: 6c79 0a0a 232f 7573 722f 696e 636c 7564 ly..#/usr/includ\n+00000a70: 652f 6c69 6e75 782f 6c69 6d69 7473 2e68 e/linux/limits.h\n+00000a80: 3a23 6465 6669 6e65 2041 5247 5f4d 4158 :#define ARG_MAX\n+00000a90: 2020 2020 2020 2031 3331 3037 3220 2020 131072 \n+00000aa0: 2020 2020 202f 2a20 230a 2362 7974 6573 /* #.#bytes\n+00000ab0: 206f 6620 6172 6773 202b 2065 6e76 6972 of args + envir\n+00000ac0: 6f6e 2066 6f72 2065 7865 6328 2920 2a2f on for exec() */\n+00000ad0: 0a23 0a23 0a23 4175 7320 6465 6d20 536f .#.#.#Aus dem So\n+00000ae0: 7572 6365 2066 c3bc 7220 2278 6172 6773 urce f..r \"xargs\n+00000af0: 2220 6765 6874 2068 6572 766f 723a 0a23 \" geht hervor:.#\n+00000b00: 0a23 2020 6f72 6967 5f61 7267 5f6d 6178 .# orig_arg_max\n+00000b10: 203d 2041 5247 5f4d 4158 202d 2032 3034 = ARG_MAX - 204\n+00000b20: 383b 202f 2a20 504f 5349 582e 3220 7265 8; /* POSIX.2 re\n+00000b30: 7175 6972 6573 2073 7562 7472 6163 7469 quires subtracti\n+00000b40: 6e67 2032 3034 382e 202a 2f0a 2320 2061 ng 2048. */.# a\n+00000b50: 7267 5f6d 6178 203d 206f 7269 675f 6172 rg_max = orig_ar\n+00000b60: 675f 6d61 783b 0a0a 246d 6169 6e3a 3a73 g_max;..$main::s\n+00000b70: 7462 754d 6435 4578 6563 203d 2022 2472 tbuMd5Exec = \"$r\n+00000b80: 6571 2f73 7462 754d 6435 4578 6563 2e70 eq/stbuMd5Exec.p\n+00000b90: 6c22 3b0a 246d 6169 6e3a 3a73 7462 754d l\";.$main::stbuM\n+00000ba0: 6435 6370 203d 2022 2472 6571 2f73 7462 d5cp = \"$req/stb\n+00000bb0: 754d 6435 6370 2e70 6c22 3b0a 246d 6169 uMd5cp.pl\";.$mai\n+00000bc0: 6e3a 3a65 6e64 4f66 5374 6f72 6542 6163 n::endOfStoreBac\n+00000bd0: 6b75 7020 3d20 303b 0a24 6d61 696e 3a3a kup = 0;.$main::\n+00000be0: 6578 6563 5061 7261 6d4c 656e 6774 6820 execParamLength \n+00000bf0: 3d20 3420 2a20 3130 3234 3b20 2020 2020 = 4 * 1024; \n+00000c00: 2023 2044 6566 6175 6c74 2057 6572 742c # Default Wert,\n+00000c10: 2073 6568 7220 6e69 6564 7269 6720 616e sehr niedrig an\n+00000c20: 6765 7365 747a 740a 246d 6169 6e3a 3a6d gesetzt.$main::m\n+00000c30: 696e 436f 7079 5769 7468 466f 726b 203d inCopyWithFork =\n+00000c40: 2031 3032 342a 2a32 3b20 2020 2020 2020 1024**2; \n+00000c50: 2320 616c 6c65 7320 7761 7320 3c3d 2069 # alles was <= i\n+00000c60: 7374 2c20 7769 7264 2069 6e20 7065 726c st, wird in perl\n+00000c70: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00000c80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000c90: 2020 2020 2020 2020 2023 206b 6f70 6965 # kopie\n+00000ca0: 7274 2c20 7761 7320 3e20 6973 742c 206d rt, was > ist, m\n+00000cb0: 6974 2066 6f72 6b0a 6d79 2028 2565 7865 it fork.my (%exe\n+00000cc0: 6350 6172 616d 4c65 6e67 7468 2920 3d20 cParamLength) = \n+00000cd0: 2827 4149 5827 203d 3e20 3232 202a 2031 ('AIX' => 22 * 1\n+00000ce0: 3032 342c 0a09 0909 2027 4c69 6e75 7827 024,.... 'Linux'\n+00000cf0: 203d 3e20 3632 202a 2031 3032 3429 3b0a => 62 * 1024);.\n+00000d00: 246d 6169 6e3a 3a73 6f75 7263 6544 6972 $main::sourceDir\n+00000d10: 203d 2027 273b 2020 2020 2020 2020 2020 = ''; \n+00000d20: 2020 2020 2020 2020 2320 7365 7420 666f # set fo\n+00000d30: 7220 6d61 696e 3a3a 434f 4d52 4553 530a r main::COMRESS.\n+00000d40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000d50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000d60: 2020 2020 2020 2020 2320 7061 7468 2074 # path t\n+00000d70: 6f20 6261 636b 7570 2064 6972 6563 746f o backup directo\n+00000d80: 7279 0a0a 0a6d 7920 2473 746f 7265 4261 ry...my $storeBa\n+00000d90: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup\n+00000da0: 5f70 7267 203d 2027 7374 6f72 6542 6163 _prg = 'storeBac\n+00000db0: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup.\n+00000dc0: 706c 273b 0a6d 7920 246c 6f63 6b46 696c pl';.my $lockFil\n+00000dd0: 6520 3d20 272f 746d 702f 7374 6f72 6542 e = '/tmp/storeB\n+00000de0: 6163 6b75 702e 6c6f 636b 273b 2020 2023 ackup.lock'; #\n+00000df0: 2064 6566 6175 6c74 2076 616c 7565 0a6d default value.m\n+00000e00: 7920 2840 636f 6d70 7265 7373 2920 3d20 y (@compress) = \n+00000e10: 2827 627a 6970 3227 293b 2020 2020 2020 ('bzip2'); \n+00000e20: 2020 2020 2020 2020 2023 2064 6566 6175 # defau\n+00000e30: 6c74 2076 616c 7565 0a6d 7920 2840 756e lt value.my (@un\n+00000e40: 636f 6d70 7265 7373 2920 3d20 2827 627a compress) = ('bz\n+00000e50: 6970 3227 2c20 272d 6427 293b 2020 2020 ip2', '-d'); \n+00000e60: 2020 2023 2064 6566 6175 6c74 2076 616c # default val\n+00000e70: 7565 0a6d 7920 246d 696e 436f 6d70 7265 ue.my $minCompre\n+00000e80: 7373 5369 7a65 203d 2031 3032 343b 2020 ssSize = 1024; \n+00000e90: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v\n+00000ea0: 616c 7565 0a6d 7920 2470 6f73 7466 6978 alue.my $postfix\n+00000eb0: 203d 2027 2e62 7a32 273b 2020 2020 2020 = '.bz2'; \n+00000ec0: 2020 2020 2020 2023 2064 6566 6175 6c74 # default\n+00000ed0: 2076 616c 7565 0a6d 7920 2471 7565 7565 value.my $queue\n+00000ee0: 436f 6d70 7265 7373 203d 2031 3030 303b Compress = 1000;\n+00000ef0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau\n+00000f00: 6c74 2076 616c 7565 0a6d 7920 2471 7565 lt value.my $que\n+00000f10: 7565 436f 7079 203d 2031 3030 303b 2020 ueCopy = 1000; \n+00000f20: 2020 2020 2020 2020 2020 2023 2064 6566 # def\n+00000f30: 6175 6c74 2076 616c 7565 0a6d 7920 2471 ault value.my $q\n+00000f40: 7565 7565 426c 6f63 6b20 3d20 3130 3030 ueueBlock = 1000\n+00000f50: 3b20 2020 2020 2020 2020 2020 2023 2064 ; # d\n+00000f60: 6566 6175 6c74 2076 616c 7565 0a6d 7920 efault value.my \n+00000f70: 246e 6f42 6c6f 636b 5275 6c65 7320 3d20 $noBlockRules = \n+00000f80: 353b 2020 2020 2020 2020 2020 2020 2023 5; #\n+00000f90: 2064 6566 6175 6c74 2076 616c 7565 2c20 default value, \n+00000fa0: 6d75 7374 2062 6520 3e20 300a 246d 6169 must be > 0.$mai\n+00000fb0: 6e3a 3a6e 6f42 6c6f 636b 4465 7669 6365 n::noBlockDevice\n+00000fc0: 7320 3d20 353b 2020 2020 2020 2020 2320 s = 5; # \n+00000fd0: 6465 6661 756c 7420 7661 6c75 652c 206d default value, m\n+00000fe0: 7573 7420 6265 203e 2030 0a24 6d61 696e ust be > 0.$main\n+00000ff0: 3a3a 6e6f 436f 6d70 7265 7373 5275 6c65 ::noCompressRule\n+00001000: 7320 3d20 353b 2020 2020 2020 2023 2064 s = 5; # d\n+00001010: 6566 6175 6c74 2076 616c 7565 2c20 6d75 efault value, mu\n+00001020: 7374 2062 6520 3e20 300a 6d79 2024 6368 st be > 0.my $ch\n+00001030: 6563 6b42 6c6f 636b 7342 5364 6566 6175 eckBlocksBSdefau\n+00001040: 6c74 203d 2027 314d 273b 2020 2320 6465 lt = '1M'; # de\n+00001050: 6661 756c 7420 7661 6c75 650a 6d79 2024 fault value.my $\n+00001060: 6368 6563 6b42 6c6f 636b 7342 536d 696e checkBlocksBSmin\n+00001070: 203d 2031 302a 3130 3234 3b20 2020 2320 = 10*1024; # \n+00001080: 6d69 6e69 6d61 6c20 7661 6c75 650a 6d79 minimal value.my\n+00001090: 2024 6e6f 436f 7079 203d 2031 3b20 2020 $noCopy = 1; \n+000010a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000010b0: 2320 6465 6661 756c 7420 7661 6c75 650a # default value.\n+000010c0: 6d79 2024 6368 6d6f 644d 4435 4669 6c65 my $chmodMD5File\n+000010d0: 203d 2027 3036 3030 273b 2020 2020 2020 = '0600'; \n+000010e0: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu\n+000010f0: 650a 6d79 2024 746d 7064 6972 203d 2027 e.my $tmpdir = '\n+00001100: 2f74 6d70 273b 2020 2020 2020 2020 2020 /tmp'; \n+00001110: 2020 2020 2320 6465 6661 756c 7420 7661 # default va\n+00001120: 6c75 650a 6d79 2040 6578 6365 7074 5375 lue.my @exceptSu\n+00001130: 6666 6978 203d 2028 275c 2e7a 6970 272c ffix = ('\\.zip',\n+00001140: 2027 5c2e 627a 3227 2c20 275c 2e67 7a27 '\\.bz2', '\\.gz'\n+00001150: 2c20 275c 2e74 677a 272c 2027 5c2e 6a70 , '\\.tgz', '\\.jp\n+00001160: 6727 2c20 275c 2e67 6966 272c 2027 5c2e g', '\\.gif', '\\.\n+00001170: 7469 6666 272c 0a09 0920 2020 2027 5c2e tiff',... '\\.\n+00001180: 7469 6627 2c20 275c 2e6d 7065 6727 2c20 tif', '\\.mpeg', \n+00001190: 275c 2e6d 7067 272c 2027 5c2e 6d70 3327 '\\.mpg', '\\.mp3'\n+000011a0: 2c20 275c 2e6f 6767 272c 2027 5c2e 6770 , '\\.ogg', '\\.gp\n+000011b0: 6727 2c20 275c 2e70 6e67 2729 3b0a 6d79 g', '\\.png');.my\n+000011c0: 2024 6c6f 6749 6e42 6163 6b75 7044 6972 $logInBackupDir\n+000011d0: 4669 6c65 4e61 6d65 203d 2027 2e73 746f FileName = '.sto\n+000011e0: 7265 4261 636b 7570 2e6c 6f67 273b 0a6d reBackup.log';.m\n+000011f0: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile \n+00001200: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums\n+00001210: 273b 0a6d 7920 2462 6c6f 636b 4368 6563 ';.my $blockChec\n+00001220: 6b53 756d 4669 6c65 203d 2027 2e6d 6435 kSumFile = '.md5\n+00001230: 426c 6f63 6b43 6865 636b 5375 6d73 273b BlockCheckSums';\n+00001240: 0a24 6d61 696e 3a3a 6368 6563 6b53 756d .$main::checkSum\n+00001250: 4669 6c65 5665 7273 696f 6e20 3d20 2731 FileVersion = '1\n+00001260: 2e33 273b 0a6d 7920 246b 6565 7041 6c6c .3';.my $keepAll\n+00001270: 203d 2027 3330 6427 3b0a 6d79 2024 6b65 = '30d';.my $ke\n+00001280: 6570 4475 706c 6963 6174 6520 3d20 2737 epDuplicate = '7\n+00001290: 6427 3b0a 0a6d 7920 2466 6c61 6742 6c6f d';..my $flagBlo\n+000012a0: 636b 4465 7669 6365 203d 2030 3b20 2020 ckDevice = 0; \n+000012b0: 2020 2020 2020 2023 2031 2069 6620 626c # 1 if bl\n+000012c0: 6f63 6b20 6f72 2064 6576 6963 6520 6f70 ock or device op\n+000012d0: 7469 6f6e 7320 6172 6520 7573 6564 0a24 tions are used.$\n+000012e0: 746d 7064 6972 203d 2024 454e 567b 2754 tmpdir = $ENV{'T\n+000012f0: 4d50 4449 5227 7d20 6966 2064 6566 696e MPDIR'} if defin\n+00001300: 6564 2024 454e 567b 2754 4d50 4449 5227 ed $ENV{'TMPDIR'\n+00001310: 7d3b 0a0a 0a23 2024 5645 5253 494f 4e70 };...# $VERSIONp\n+00001320: 4e61 6d65 2024 6d61 696e 3a3a 5354 4f52 Name $main::STOR\n+00001330: 4542 4143 4b55 5056 4552 5349 4f4e 0a0a EBACKUPVERSION..\n+00001340: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto\n+00001350: 7265 4261 636b 7570 2e70 6c20 2d20 6661 reBackup.pl - fa\n+00001360: 6e63 7920 636f 6d70 7265 7373 696e 6720 ncy compressing \n+00001370: 6d61 6e61 6769 6e67 2063 6865 636b 7375 managing checksu\n+00001380: 6d6d 696e 6720 6861 7264 2d6c 696e 6b69 mming hard-linki\n+00001390: 6e67 2063 7020 2d75 610a 0a3d 6865 6164 ng cp -ua..=head\n+000013a0: 3120 4445 5343 5249 5054 494f 4e0a 0a54 1 DESCRIPTION..T\n+000013b0: 6869 7320 7072 6f67 7261 6d20 636f 7069 his program copi\n+000013c0: 6573 2074 7265 6573 2074 6f20 616e 6f74 es trees to anot\n+000013d0: 6865 7220 6c6f 6361 7469 6f6e 2e20 4576 her location. Ev\n+000013e0: 6572 7920 6669 6c65 2063 6f70 6965 6420 ery file copied \n+000013f0: 6973 0a70 6f74 656e 7469 616c 6c79 2063 is.potentially c\n+00001400: 6f6d 7072 6573 7365 6420 2873 6565 202d ompressed (see -\n+00001410: 2d65 7863 6570 7453 7566 6669 7829 2e20 -exceptSuffix). \n+00001420: 5468 6520 6261 636b 7570 7320 6166 7465 The backups afte\n+00001430: 720a 7468 6520 6669 7273 7420 6261 636b r.the first back\n+00001440: 7570 2077 696c 6c20 636f 6d70 6172 6520 up will compare \n+00001450: 7468 6520 6669 6c65 7320 7769 7468 2061 the files with a\n+00001460: 6e20 6d64 3520 6368 6563 6b73 756d 0a77 n md5 checksum.w\n+00001470: 6974 6820 7468 6520 6c61 7374 2073 746f ith the last sto\n+00001480: 7265 6420 7665 7273 696f 6e2e 2049 6620 red version. If \n+00001490: 7468 6579 2061 7265 2065 7175 616c 2c20 they are equal, \n+000014a0: 6974 2077 696c 6c20 6f6e 6c79 206d 616b it will only mak\n+000014b0: 6520 616e 0a68 6172 6420 6c69 6e6b 2074 e an.hard link t\n+000014c0: 6f20 6974 2e20 4974 2077 696c 6c20 616c o it. It will al\n+000014d0: 736f 2063 6865 636b 206d 7469 6d65 2c20 so check mtime, \n+000014e0: 6374 696d 6520 616e 6420 7369 7a65 2074 ctime and size t\n+000014f0: 6f20 7265 636f 676e 697a 650a 6964 656e o recognize.iden\n+00001500: 7469 616c 2066 696c 6573 2069 6e20 6f6c tial files in ol\n+00001510: 6465 7220 6261 636b 7570 7320 7665 7279 der backups very\n+00001520: 2066 6173 742e 0a49 7420 6361 6e20 616c fast..It can al\n+00001530: 736f 2062 6163 6b75 7020 6269 6720 696d so backup big im\n+00001540: 6167 6520 6669 6c65 7320 6661 7374 2061 age files fast a\n+00001550: 6e64 2065 6666 6963 6965 6e74 6c79 206f nd efficiently o\n+00001560: 6e20 6120 7065 7220 626c 6f63 6b0a 6261 n a per block.ba\n+00001570: 7369 7320 2864 6174 6120 6465 6475 706c sis (data dedupl\n+00001580: 6963 6174 696f 6e29 2e0a 0a59 6f75 2063 ication)...You c\n+00001590: 616e 206f 7665 7277 7269 7465 206f 7074 an overwrite opt\n+000015a0: 696f 6e73 2069 6e20 7468 6520 636f 6e66 ions in the conf\n+000015b0: 6967 7572 6174 696f 6e20 6669 6c65 206f iguration file o\n+000015c0: 6e20 7468 6520 636f 6d6d 616e 6420 6c69 n the command li\n+000015d0: 6e65 2e0a 0a3d 6865 6164 3120 5359 4e4f ne...=head1 SYNO\n+000015e0: 5053 4953 0a0a 0924 7072 6f67 202d 2d68 PSIS...$prog --h\n+000015f0: 656c 700a 6f72 2020 2020 0a09 2470 726f elp.or ..$pro\n+00001600: 6720 2d67 2063 6f6e 6669 6746 696c 650a g -g configFile.\n+00001610: 6f72 0a09 2470 726f 6720 5b2d 6620 636f or..$prog [-f co\n+00001620: 6e66 6967 4669 6c65 5d20 5b2d 7320 736f nfigFile] [-s so\n+00001630: 7572 6365 4469 725d 0a09 2020 2020 2020 urceDir].. \n+00001640: 5b2d 6220 6261 636b 7570 4469 7265 6374 [-b backupDirect\n+00001650: 6f72 795d 205b 2d53 2073 6572 6965 735d ory] [-S series]\n+00001660: 205b 2d2d 7072 696e 745d 0a09 2020 2020 [--print].. \n+00001670: 2020 5b2d 5420 746d 7064 6972 5d20 5b2d [-T tmpdir] [-\n+00001680: 4c20 6c6f 636b 4669 6c65 5d20 5b2d 2d75 L lockFile] [--u\n+00001690: 6e6c 6f63 6b42 6566 6f72 6544 656c 5d20 nlockBeforeDel] \n+000016a0: 0a09 2020 2020 2020 5b2d 2d65 7863 6570 .. [--excep\n+000016b0: 7444 6972 7320 6469 7231 2c64 6972 322c tDirs dir1,dir2,\n+000016c0: 6469 7233 5d20 5b2d 2d63 6f6e 7445 7863 dir3] [--contExc\n+000016d0: 6570 7444 6972 7345 7272 5d0a 0920 2020 eptDirsErr].. \n+000016e0: 2020 205b 2d2d 696e 636c 7564 6544 6972 [--includeDir\n+000016f0: 7320 6469 7231 2c64 6972 322c 6469 7233 s dir1,dir2,dir3\n+00001700: 5d0a 0920 2020 2020 205b 2d2d 6578 6365 ].. [--exce\n+00001710: 7074 5275 6c65 2072 756c 655d 205b 2d2d ptRule rule] [--\n+00001720: 696e 636c 7564 6552 756c 6520 7275 6c65 includeRule rule\n+00001730: 5d0a 0920 2020 2020 205b 2d2d 6578 6365 ].. [--exce\n+00001740: 7074 5479 7065 7320 7479 7065 735d 205b ptTypes types] [\n+00001750: 2d2d 6370 4973 476e 755d 205b 2d2d 6c69 --cpIsGnu] [--li\n+00001760: 6e6b 5379 6d6c 696e 6b73 5d0a 0920 2020 nkSymlinks].. \n+00001770: 2020 205b 2d2d 7072 6563 6f6d 6d61 6e64 [--precommand\n+00001780: 206a 6f62 5d20 5b2d 2d70 6f73 7463 6f6d job] [--postcom\n+00001790: 6d61 6e64 206a 6f62 5d0a 2020 2020 2020 mand job]. \n+000017a0: 2020 2020 2020 2020 5b2d 2d66 6f6c 6c6f [--follo\n+000017b0: 774c 696e 6b73 2064 6570 7468 5d20 5b2d wLinks depth] [-\n+000017c0: 2d68 6967 684c 6174 656e 6379 5d0a 0920 -highLatency].. \n+000017d0: 2020 2020 205b 2d2d 6967 6e6f 7265 5065 [--ignorePe\n+000017e0: 726d 735d 205b 2d2d 6c61 7465 4c69 6e6b rms] [--lateLink\n+000017f0: 7320 5b2d 2d6c 6174 6543 6f6d 7072 6573 s [--lateCompres\n+00001800: 735d 5d0a 0920 2020 2020 205b 2d2d 6368 s]].. [--ch\n+00001810: 6563 6b42 6c6f 636b 7353 7566 6669 7820 eckBlocksSuffix \n+00001820: 7375 6666 6978 5d20 5b2d 2d63 6865 636b suffix] [--check\n+00001830: 426c 6f63 6b73 4d69 6e53 697a 6520 7369 BlocksMinSize si\n+00001840: 7a65 5d0a 0920 2020 2020 205b 2d2d 6368 ze].. [--ch\n+00001850: 6563 6b42 6c6f 636b 7342 535d 0a20 2020 eckBlocksBS]. \n+00001860: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch\n+00001870: 6563 6b42 6c6f 636b 7352 756c 6530 2072 eckBlocksRule0 r\n+00001880: 756c 6520 5b2d 2d63 6865 636b 426c 6f63 ule [--checkBloc\n+00001890: 6b73 4253 3020 7369 7a65 5d0a 2020 2020 ksBS0 size]. \n+000018a0: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch\n+000018b0: 6563 6b42 6c6f 636b 7343 6f6d 7072 305d eckBlocksCompr0]\n+000018c0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7352 [--checkBlocksR\n+000018d0: 6561 6430 2066 696c 7465 725d 0a20 2020 ead0 filter]. \n+000018e0: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c\n+000018f0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall\n+00001900: 656c 305d 5d0a 2020 2020 2020 2020 2020 el0]]. \n+00001910: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc\n+00001920: 6b73 5275 6c65 3120 7275 6c65 205b 2d2d ksRule1 rule [--\n+00001930: 6368 6563 6b42 6c6f 636b 7342 5331 2073 checkBlocksBS1 s\n+00001940: 697a 655d 0a20 2020 2020 2020 2020 2020 ize]. \n+00001950: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc\n+00001960: 6b73 436f 6d70 7231 5d20 5b2d 2d63 6865 ksCompr1] [--che\n+00001970: 636b 426c 6f63 6b73 5265 6164 3120 6669 ckBlocksRead1 fi\n+00001980: 6c74 6572 5d0a 2020 2020 2020 2020 2020 lter]. \n+00001990: 2020 2020 205b 2d2d 6368 6563 6b42 6c6f [--checkBlo\n+000019a0: 636b 7350 6172 616c 6c65 6c31 5d5d 0a20 cksParallel1]]. \n+000019b0: 2020 2020 2020 2020 2020 2020 205b 2d2d [--\n+000019c0: 6368 6563 6b42 6c6f 636b 7352 756c 6532 checkBlocksRule2\n+000019d0: 2072 756c 6520 5b2d 2d63 6865 636b 426c rule [--checkBl\n+000019e0: 6f63 6b73 4253 3220 7369 7a65 5d0a 2020 ocksBS2 size]. \n+000019f0: 2020 2020 2020 2020 2020 2020 205b 2d2d [--\n+00001a00: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr\n+00001a10: 325d 205b 2d2d 6368 6563 6b42 6c6f 636b 2] [--checkBlock\n+00001a20: 7352 6561 6432 2066 696c 7465 725d 0a20 sRead2 filter]. \n+00001a30: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n+00001a40: 2d63 6865 636b 426c 6f63 6b73 5061 7261 -checkBlocksPara\n+00001a50: 6c6c 656c 325d 5d0a 2020 2020 2020 2020 llel2]]. \n+00001a60: 2020 2020 2020 5b2d 2d63 6865 636b 426c [--checkBl\n+00001a70: 6f63 6b73 5275 6c65 3320 7275 6c65 205b ocksRule3 rule [\n+00001a80: 2d2d 6368 6563 6b42 6c6f 636b 7342 5333 --checkBlocksBS3\n+00001a90: 2073 697a 655d 0a20 2020 2020 2020 2020 size]. \n+00001aa0: 2020 2020 2020 5b2d 2d63 6865 636b 426c [--checkBl\n+00001ab0: 6f63 6b73 436f 6d70 7233 5d20 5b2d 2d63 ocksCompr3] [--c\n+00001ac0: 6865 636b 426c 6f63 6b73 5265 6164 3320 heckBlocksRead3 \n+00001ad0: 6669 6c74 6572 5d0a 2020 2020 2020 2020 filter]. \n+00001ae0: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB\n+00001af0: 6c6f 636b 7350 6172 616c 6c65 6c33 5d5d locksParallel3]]\n+00001b00: 0a20 2020 2020 2020 2020 2020 2020 205b . [\n+00001b10: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul\n+00001b20: 6534 2072 756c 6520 5b2d 2d63 6865 636b e4 rule [--check\n+00001b30: 426c 6f63 6b73 4253 3420 7369 7a65 5d0a BlocksBS4 size].\n+00001b40: 2020 2020 2020 2020 2020 2020 2020 205b [\n+00001b50: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom\n+00001b60: 7072 345d 205b 2d2d 6368 6563 6b42 6c6f pr4] [--checkBlo\n+00001b70: 636b 7352 6561 6434 2066 696c 7465 725d cksRead4 filter]\n+00001b80: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00001b90: 5b2d 2d63 6865 636b 426c 6f63 6b73 5061 [--checkBlocksPa\n+00001ba0: 7261 6c6c 656c 345d 5d0a 2020 2020 2020 rallel4]]. \n+00001bb0: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check\n+00001bc0: 4465 7669 6365 7330 206c 6973 7420 5b2d Devices0 list [-\n+00001bd0: 2d63 6865 636b 4465 7669 6365 7344 6972 -checkDevicesDir\n+00001be0: 305d 0a20 2020 2020 2020 2020 2020 2020 0]. \n+00001bf0: 2020 5b2d 2d63 6865 636b 4465 7669 6365 [--checkDevice\n+00001c00: 7342 5330 5d20 5b63 6865 636b 4465 7669 sBS0] [checkDevi\n+00001c10: 6365 7343 6f6d 7072 305d 0a20 2020 2020 cesCompr0]. \n+00001c20: 2020 2020 2020 2020 2020 5b2d 2d63 6865 [--che\n+00001c30: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n+00001c40: 6c30 5d5d 0a20 2020 2020 2020 2020 2020 l0]]. \n+00001c50: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic\n+00001c60: 6573 3120 6c69 7374 205b 2d2d 6368 6563 es1 list [--chec\n+00001c70: 6b44 6576 6963 6573 4469 7231 5d0a 2020 kDevicesDir1]. \n+00001c80: 2020 2020 2020 2020 2020 2020 205b 2d2d [--\n+00001c90: 6368 6563 6b44 6576 6963 6573 4253 315d checkDevicesBS1]\n+00001ca0: 205b 6368 6563 6b44 6576 6963 6573 436f [checkDevicesCo\n+00001cb0: 6d70 7231 5d0a 2020 2020 2020 2020 2020 mpr1]. \n+00001cc0: 2020 2020 205b 2d2d 6368 6563 6b44 6576 [--checkDev\n+00001cd0: 6963 6573 5061 7261 6c6c 656c 315d 5d0a icesParallel1]].\n+00001ce0: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n+00001cf0: 2d63 6865 636b 4465 7669 6365 7332 206c -checkDevices2 l\n+00001d00: 6973 7420 5b2d 2d63 6865 636b 4465 7669 ist [--checkDevi\n+00001d10: 6365 7344 6972 325d 0a20 2020 2020 2020 cesDir2]. \n+00001d20: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check\n+00001d30: 4465 7669 6365 7342 5332 5d20 5b63 6865 DevicesBS2] [che\n+00001d40: 636b 4465 7669 6365 7343 6f6d 7072 325d ckDevicesCompr2]\n+00001d50: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00001d60: 5b2d 2d63 6865 636b 4465 7669 6365 7350 [--checkDevicesP\n+00001d70: 6172 616c 6c65 6c32 5d5d 0a20 2020 2020 arallel2]]. \n+00001d80: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec\n+00001d90: 6b44 6576 6963 6573 3320 6c69 7374 205b kDevices3 list [\n+00001da0: 2d2d 6368 6563 6b44 6576 6963 6573 4469 --checkDevicesDi\n+00001db0: 7233 5d0a 2020 2020 2020 2020 2020 2020 r3]. \n+00001dc0: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic\n+00001dd0: 6573 4253 335d 205b 6368 6563 6b44 6576 esBS3] [checkDev\n+00001de0: 6963 6573 436f 6d70 7233 5d0a 2020 2020 icesCompr3]. \n+00001df0: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch\n+00001e00: 6563 6b44 6576 6963 6573 5061 7261 6c6c eckDevicesParall\n+00001e10: 656c 335d 5d0a 2020 2020 2020 2020 2020 el3]]. \n+00001e20: 2020 2020 5b2d 2d63 6865 636b 4465 7669 [--checkDevi\n+00001e30: 6365 7334 206c 6973 7420 5b2d 2d63 6865 ces4 list [--che\n+00001e40: 636b 4465 7669 6365 7344 6972 345d 0a20 ckDevicesDir4]. \n+00001e50: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n+00001e60: 2d63 6865 636b 4465 7669 6365 7342 5334 -checkDevicesBS4\n+00001e70: 5d20 5b63 6865 636b 4465 7669 6365 7343 ] [checkDevicesC\n+00001e80: 6f6d 7072 345d 0a20 2020 2020 2020 2020 ompr4]. \n+00001e90: 2020 2020 2020 5b2d 2d63 6865 636b 4465 [--checkDe\n+00001ea0: 7669 6365 7350 6172 616c 6c65 6c31 5d5d vicesParallel1]]\n+00001eb0: 0a09 2020 2020 2020 5b2d 2d73 6176 6552 .. [--saveR\n+00001ec0: 414d 5d20 5b2d 6320 636f 6d70 7265 7373 AM] [-c compress\n+00001ed0: 5d20 5b2d 7520 756e 636f 6d70 7265 7373 ] [-u uncompress\n+00001ee0: 5d20 5b2d 7020 706f 7374 6669 785d 0a09 ] [-p postfix]..\n+00001ef0: 2020 2020 2020 5b2d 2d6e 6f43 6f6d 7072 [--noCompr\n+00001f00: 6573 7320 6e75 6d62 6572 5d20 5b2d 2d71 ess number] [--q\n+00001f10: 7565 7565 436f 6d70 7265 7373 206e 756d ueueCompress num\n+00001f20: 6265 725d 0a09 2020 2020 2020 5b2d 2d6e ber].. [--n\n+00001f30: 6f43 6f70 7920 6e75 6d62 6572 5d20 5b2d oCopy number] [-\n+00001f40: 2d71 7565 7565 436f 7079 206e 756d 6265 -queueCopy numbe\n+00001f50: 725d 0a09 2020 2020 2020 5b2d 2d77 6974 r].. [--wit\n+00001f60: 6855 7365 7247 726f 7570 5374 6174 5d20 hUserGroupStat] \n+00001f70: 5b2d 2d75 7365 7247 726f 7570 5374 6174 [--userGroupStat\n+00001f80: 4669 6c65 2066 696c 656e 616d 655d 0a09 File filename]..\n+00001f90: 2020 2020 2020 5b2d 2d65 7863 6570 7453 [--exceptS\n+00001fa0: 7566 6669 7820 7375 6666 6978 6573 5d09 uffix suffixes].\n+00001fb0: 5b2d 2d61 6464 4578 6365 7074 5375 6666 [--addExceptSuff\n+00001fc0: 6978 2073 7566 6669 7865 735d 0a09 2020 ix suffixes].. \n+00001fd0: 2020 2020 5b2d 2d6d 696e 436f 6d70 7265 [--minCompre\n+00001fe0: 7373 5369 7a65 2073 697a 655d 205b 2d2d ssSize size] [--\n+00001ff0: 636f 6d70 7252 756c 655d 0a09 2020 2020 comprRule].. \n+00002000: 2020 5b2d 2d64 6f4e 6f74 436f 6d70 7265 [--doNotCompre\n+00002010: 7373 4d44 3546 696c 655d 205b 2d2d 6368 ssMD5File] [--ch\n+00002020: 6d6f 644d 4435 4669 6c65 5d20 5b2d 765d modMD5File] [-v]\n+00002030: 0a09 2020 2020 2020 5b2d 6420 6c65 7665 .. [-d leve\n+00002040: 6c5d 5b2d 2d70 726f 6772 6573 7352 6570 l][--progressRep\n+00002050: 6f72 7420 6e75 6d62 6572 5d20 5b2d 2d70 ort number] [--p\n+00002060: 7269 6e74 4465 7074 685d 0a09 2020 2020 rintDepth].. \n+00002070: 2020 5b2d 2d69 676e 6f72 6552 6561 6445 [--ignoreReadE\n+00002080: 7272 6f72 5d0a 2020 2020 2020 2020 2020 rror]. \n+00002090: 2020 2020 5b2d 2d73 7570 7072 6573 7357 [--suppressW\n+000020a0: 6172 6e69 6e67 206b 6579 5d20 5b2d 2d6c arning key] [--l\n+000020b0: 696e 6b54 6f52 6563 656e 7420 6e61 6d65 inkToRecent name\n+000020c0: 5d0a 0920 2020 2020 205b 2d2d 646f 4e6f ].. [--doNo\n+000020d0: 7444 656c 6574 655d 205b 2d2d 6465 6c65 tDelete] [--dele\n+000020e0: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir\n+000020f0: 735d 0a09 2020 2020 2020 5b2d 2d72 6573 s].. [--res\n+00002100: 6574 4174 696d 655d 205b 2d2d 6b65 6570 etAtime] [--keep\n+00002110: 416c 6c20 7469 6d65 5065 7269 6f64 5d20 All timePeriod] \n+00002120: 5b2d 2d6b 6565 7057 6565 6b64 6179 2065 [--keepWeekday e\n+00002130: 6e74 7279 5d0a 0920 2020 2020 205b 5b2d ntry].. [[-\n+00002140: 2d6b 6565 7046 6972 7374 4f66 5965 6172 -keepFirstOfYear\n+00002150: 5d20 5b2d 2d6b 6565 704c 6173 744f 6659 ] [--keepLastOfY\n+00002160: 6561 725d 0a09 2020 2020 2020 205b 2d2d ear].. [--\n+00002170: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n+00002180: 5d20 5b2d 2d6b 6565 704c 6173 744f 664d ] [--keepLastOfM\n+00002190: 6f6e 7468 5d0a 0920 2020 2020 2020 5b2d onth].. [-\n+000021a0: 2d66 6972 7374 4461 794f 6657 6565 6b20 -firstDayOfWeek \n+000021b0: 6461 795d 205b 2d2d 6b65 6570 4669 7273 day] [--keepFirs\n+000021c0: 744f 6657 6565 6b5d 0a20 2020 2020 2020 tOfWeek]. \n+000021d0: 2020 2020 2020 2020 5b2d 2d6b 6565 704c [--keepL\n+000021e0: 6173 744f 6657 6565 6b5d 205b 2d2d 6b65 astOfWeek] [--ke\n+000021f0: 6570 4475 706c 6963 6174 655d 205b 2d2d epDuplicate] [--\n+00002200: 6b65 6570 4d69 6e4e 756d 6265 725d 0a20 keepMinNumber]. \n+00002210: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n+00002220: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber].\n+00002230: 0920 2020 2020 2020 207c 205b 2d2d 6b65 . | [--ke\n+00002240: 6570 5265 6c61 7469 7665 5d20 5d0a 0920 epRelative] ].. \n+00002250: 2020 2020 205b 2d6c 206c 6f67 4669 6c65 [-l logFile\n+00002260: 0a09 2020 2020 2020 205b 2d2d 706c 7573 .. [--plus\n+00002270: 4c6f 6753 7464 6f75 745d 205b 2d2d 7375 LogStdout] [--su\n+00002280: 7070 7265 7373 5469 6d65 5d20 5b2d 6d20 ppressTime] [-m \n+00002290: 6d61 7846 696c 656c 656e 5d0a 0920 2020 maxFilelen].. \n+000022a0: 2020 2020 5b5b 2d6e 206e 6f4f 664f 6c64 [[-n noOfOld\n+000022b0: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save\n+000022c0: 4c6f 6773 5d5d 0a09 2020 2020 2020 205b Logs]].. [\n+000022d0: 2d2d 636f 6d70 7265 7373 5769 7468 2063 --compressWith c\n+000022e0: 6f6d 7072 6573 7370 726f 675d 5d0a 0920 ompressprog]].. \n+000022f0: 2020 2020 205b 2d2d 6c6f 6749 6e42 6163 [--logInBac\n+00002300: 6b75 7044 6972 205b 2d2d 636f 6d70 7265 kupDir [--compre\n+00002310: 7373 4c6f 6749 6e42 6163 6b75 7044 6972 ssLogInBackupDir\n+00002320: 5d0a 0920 2020 2020 2020 5b2d 2d6c 6f67 ].. [--log\n+00002330: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n+00002340: 616d 6520 6c6f 6746 696c 655d 5d0a 0920 ame logFile]].. \n+00002350: 2020 2020 205b 6f74 6865 7242 6163 6b75 [otherBacku\n+00002360: 7053 6572 6965 7320 2e2e 2e5d 0a0a 0a3d pSeries ...]...=\n+00002370: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..=\n+00002380: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B<\n+00002390: 2d2d 6865 6c70 3e0a 0a20 2020 2073 686f --help>.. sho\n+000023a0: 7720 7468 6973 2068 656c 700a 0a3d 6974 w this help..=it\n+000023b0: 656d 2042 3c2d 2d67 656e 6572 6174 653e em B<--generate>\n+000023c0: 2c20 423c 2d67 3e0a 0a20 2020 2067 656e , B<-g>.. gen\n+000023d0: 6572 6174 6520 6120 7465 6d70 6c61 7465 erate a template\n+000023e0: 206f 6620 7468 6520 636f 6e66 6967 7572 of the configur\n+000023f0: 6174 696f 6e20 6669 6c65 0a0a 3d69 7465 ation file..=ite\n+00002400: 6d20 423c 2d2d 7072 696e 743e 0a0a 2020 m B<--print>.. \n+00002410: 2020 7072 696e 7420 636f 6e66 6967 7572 print configur\n+00002420: 6174 696f 6e20 7265 6164 2066 726f 6d20 ation read from \n+00002430: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi\n+00002440: 6c65 0a20 2020 206f 7220 636f 6d6d 616e le. or comman\n+00002450: 6420 6c69 6e65 2061 6e64 2073 746f 700a d line and stop.\n+00002460: 0a3d 6974 656d 2042 3c2d 2d66 696c 653e .=item B<--file>\n+00002470: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con\n+00002480: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file \n+00002490: 2869 6e73 7465 6164 206f 6620 6f72 2061 (instead of or a\n+000024a0: 6464 6974 696f 6e61 6c6c 7920 746f 206f dditionally to o\n+000024b0: 7074 696f 6e73 0a20 2020 206f 6e20 636f ptions. on co\n+000024c0: 6d6d 616e 6420 6c69 6e65 290a 0a3d 6974 mmand line)..=it\n+000024d0: 656d 2042 3c2d 2d73 6f75 7263 6544 6972 em B<--sourceDir\n+000024e0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 736f >, B<-s>.. so\n+000024f0: 7572 6365 2064 6972 6563 746f 7279 2028 urce directory (\n+00002500: 6d75 7374 2065 7869 7374 290a 0a3d 6974 must exist)..=it\n+00002510: 656d 2042 3c2d 2d62 6163 6b75 7044 6972 em B<--backupDir\n+00002520: 3e2c 2042 3c2d 623e 0a0a 2020 2020 746f >, B<-b>.. to\n+00002530: 7020 6c65 7665 6c20 6469 7265 6374 6f72 p level director\n+00002540: 7920 6f66 2061 6c6c 2062 6163 6b75 7073 y of all backups\n+00002550: 2028 6d75 7374 2065 7869 7374 290a 0a3d (must exist)..=\n+00002560: 6974 656d 2042 3c2d 2d73 6572 6965 733e item B<--series>\n+00002570: 2c20 423c 2d53 3e0a 0a20 2020 2073 6572 , B<-S>.. ser\n+00002580: 6965 7320 6469 7265 6374 6f72 792c 2064 ies directory, d\n+00002590: 6566 6175 6c74 2069 7320 2764 6566 6175 efault is 'defau\n+000025a0: 6c74 270a 2020 2020 7265 6c61 7469 7665 lt'. relative\n+000025b0: 2070 6174 6820 6672 6f6d 2062 6163 6b75 path from backu\n+000025c0: 7044 6972 0a0a 3d69 7465 6d20 423c 2d2d pDir..=item B<--\n+000025d0: 746d 7064 6972 3e2c 2042 3c2d 543e 0a0a tmpdir>, B<-T>..\n+000025e0: 2020 2020 6469 7265 6374 6f72 7920 666f directory fo\n+000025f0: 7220 7465 6d70 6f72 6172 7920 6669 6c65 r temporary file\n+00002600: 732c 2064 6566 6175 6c74 2069 7320 3c2f s, default is ..=item B<--\n+00002620: 6c6f 636b 4669 6c65 3e2c 2042 3c2d 4c3e lockFile>, B<-L>\n+00002630: 0a0a 2020 2020 6c6f 636b 2066 696c 652c .. lock file,\n+00002640: 2069 6620 6578 6973 7473 2c20 6e65 7720 if exists, new \n+00002650: 696e 7374 616e 6365 7320 7769 6c6c 2066 instances will f\n+00002660: 696e 6973 6820 6966 2061 6e20 6f6c 640a inish if an old.\n+00002670: 2020 2020 6973 2061 6c72 6561 6479 2072 is already r\n+00002680: 756e 6e69 6e67 2c20 6465 6661 756c 7420 unning, default \n+00002690: 6973 2024 6c6f 636b 4669 6c65 0a0a 3d69 is $lockFile..=i\n+000026a0: 7465 6d20 423c 2d2d 756e 6c6f 636b 4265 tem B<--unlockBe\n+000026b0: 666f 7265 4465 6c3e 0a0a 2020 2020 7265 foreDel>.. re\n+000026c0: 6d6f 7665 2074 6865 206c 6f63 6b20 6669 move the lock fi\n+000026d0: 6c65 2062 6566 6f72 6520 6465 6c65 7469 le before deleti\n+000026e0: 6e67 206f 6c64 2062 6163 6b75 7073 0a20 ng old backups. \n+000026f0: 2020 2064 6566 6175 6c74 2069 7320 746f default is to\n+00002700: 2064 656c 6574 6520 7468 6520 6c6f 636b delete the lock\n+00002710: 2066 696c 6520 6166 7465 7220 7265 6d6f file after remo\n+00002720: 7669 6e67 206f 6c64 0a20 2020 2062 6163 ving old. bac\n+00002730: 6b75 7073 0a0a 3d69 7465 6d20 423c 2d2d kups..=item B<--\n+00002740: 6578 6365 7074 4469 7273 3e2c 2042 3c2d exceptDirs>, B<-\n+00002750: 653e 0a0a 2020 2020 6469 7265 6374 6f72 e>.. director\n+00002760: 6965 7320 746f 2065 7863 6570 7420 6672 ies to except fr\n+00002770: 6f6d 2062 6163 6b69 6e67 2075 7020 2872 om backing up (r\n+00002780: 656c 6174 6976 6520 7061 7468 292c 0a20 elative path),. \n+00002790: 2020 2077 696c 6463 6172 6473 2061 7265 wildcards are\n+000027a0: 2070 6f73 7369 626c 6520 616e 6420 7368 possible and sh\n+000027b0: 6f75 6c64 2062 6520 7175 6f74 6564 2074 ould be quoted t\n+000027c0: 6f20 6176 6f69 640a 2020 2020 7265 706c o avoid. repl\n+000027d0: 6163 656d 656e 7473 2062 7920 7468 6520 acements by the \n+000027e0: 7368 656c 6c0a 2020 2020 7573 6520 7468 shell. use th\n+000027f0: 6973 2070 6172 616d 6574 6572 206d 756c is parameter mul\n+00002800: 7469 706c 6520 7469 6d65 7320 666f 7220 tiple times for \n+00002810: 6d75 6c74 6970 6c65 0a20 2020 2064 6972 multiple. dir\n+00002820: 6563 746f 7269 6573 0a0a 3d69 7465 6d20 ectories..=item \n+00002830: 423c 2d2d 636f 6e74 4578 6365 7074 4469 B<--contExceptDi\n+00002840: 7273 4572 723e 0a0a 2020 2020 636f 6e74 rsErr>.. cont\n+00002850: 696e 7565 2069 6620 6f6e 6520 6f72 206d inue if one or m\n+00002860: 6f72 6520 6f66 2074 6865 2065 7863 6570 ore of the excep\n+00002870: 7469 6f6e 616c 2064 6972 6563 746f 7269 tional directori\n+00002880: 6573 0a20 2020 2064 6f20 6e6f 7420 6578 es. do not ex\n+00002890: 6973 7420 2864 6566 6175 6c74 2069 7320 ist (default is \n+000028a0: 746f 2073 746f 7020 7072 6f63 6573 7369 to stop processi\n+000028b0: 6e67 290a 0a3d 6974 656d 2042 3c2d 2d69 ng)..=item B<--i\n+000028c0: 6e63 6c75 6465 4469 7273 3e2c 2042 3c2d ncludeDirs>, B<-\n+000028d0: 693e 0a0a 2020 2020 6469 7265 6374 6f72 i>.. director\n+000028e0: 6965 7320 746f 2069 6e63 6c75 6465 2069 ies to include i\n+000028f0: 6e20 7468 6520 6261 636b 7570 2028 7265 n the backup (re\n+00002900: 6c61 7469 7665 2070 6174 6829 2c0a 2020 lative path),. \n+00002910: 2020 7769 6c64 6361 7264 7320 6172 6520 wildcards are \n+00002920: 706f 7373 6962 6c65 2061 6e64 2068 6176 possible and hav\n+00002930: 6520 746f 2062 6520 7175 6f74 6564 0a20 e to be quoted. \n+00002940: 2020 2075 7365 2074 6869 7320 7061 7261 use this para\n+00002950: 6d65 7465 7220 6d75 6c74 6970 6c65 2074 meter multiple t\n+00002960: 696d 6573 2066 6f72 206d 756c 7469 706c imes for multipl\n+00002970: 6520 6469 7265 6374 6f72 6965 730a 0a3d e directories..=\n+00002980: 6974 656d 2042 3c2d 2d65 7863 6570 7452 item B<--exceptR\n+00002990: 756c 653e 0a0a 2020 2020 4669 6c65 7320 ule>.. Files \n+000029a0: 746f 2065 7863 6c75 6465 2066 726f 6d20 to exclude from \n+000029b0: 6261 636b 696e 6720 7570 2e0a 2020 2020 backing up.. \n+000029c0: 7365 6520 5245 4144 4d45 3a20 2769 6e63 see README: 'inc\n+000029d0: 6c75 6469 6e67 202f 2065 7863 6c75 6469 luding / excludi\n+000029e0: 6e67 2066 696c 6573 2061 6e64 2064 6972 ng files and dir\n+000029f0: 6563 746f 7269 6573 270a 0a3d 6974 656d ectories'..=item\n+00002a00: 2042 3c2d 2d69 6e63 6c75 6465 5275 6c65 B<--includeRule\n+00002a10: 3e0a 0a20 2020 2046 696c 6573 2074 6f20 >.. Files to \n+00002a20: 696e 636c 7564 6520 696e 2074 6865 2062 include in the b\n+00002a30: 6163 6b75 6720 7570 202d 206c 696b 6520 ackug up - like \n+00002a40: 6578 6365 7074 5275 6c65 0a20 2020 2073 exceptRule. s\n+00002a50: 6565 2052 4541 444d 453a 2027 696e 636c ee README: 'incl\n+00002a60: 7564 696e 6720 2f20 6578 636c 7564 696e uding / excludin\n+00002a70: 6720 6669 6c65 7320 616e 6420 6469 7265 g files and dire\n+00002a80: 6374 6f72 6965 7327 0a0a 3d69 7465 6d20 ctories'..=item \n+00002a90: 423c 2d2d 7772 6974 6545 7863 6c75 6465 B<--writeExclude\n+00002aa0: 4c6f 673e 0a0a 2020 2020 7772 6974 6520 Log>.. write \n+00002ab0: 6120 6669 6c65 206e 616d 6520 2e73 746f a file name .sto\n+00002ac0: 7265 4261 636b 7570 2e6e 6f74 5361 7665 reBackup.notSave\n+00002ad0: 642e 627a 3220 7769 7468 2074 6865 206e d.bz2 with the n\n+00002ae0: 616d 6573 0a20 2020 206f 6620 616c 6c20 ames. of all \n+00002af0: 736b 6970 7065 6420 6669 6c65 730a 0a3d skipped files..=\n+00002b00: 6974 656d 2042 3c2d 2d65 7863 6570 7454 item B<--exceptT\n+00002b10: 7970 6573 3e0a 0a20 2020 2064 6f20 6e6f ypes>.. do no\n+00002b20: 7420 7361 7665 2074 6865 2073 7065 6369 t save the speci\n+00002b30: 6669 6564 2074 7970 6520 6f66 2066 696c fied type of fil\n+00002b40: 6573 2c20 616c 6c6f 7765 643a 2053 6263 es, allowed: Sbc\n+00002b50: 6670 6c0a 2020 2020 2020 2020 5320 2d20 fpl. S - \n+00002b60: 6669 6c65 2069 7320 6120 736f 636b 6574 file is a socket\n+00002b70: 0a20 2020 2020 2020 2062 202d 2066 696c . b - fil\n+00002b80: 6520 6973 2061 2062 6c6f 636b 2073 7065 e is a block spe\n+00002b90: 6369 616c 2066 696c 650a 2020 2020 2020 cial file. \n+00002ba0: 2020 6320 2d20 6669 6c65 2069 7320 6120 c - file is a \n+00002bb0: 6368 6172 6163 7465 7220 7370 6563 6961 character specia\n+00002bc0: 6c20 6669 6c65 0a20 2020 2020 2020 2066 l file. f\n+00002bd0: 202d 2066 696c 6520 6973 2061 2070 6c61 - file is a pla\n+00002be0: 696e 2066 696c 650a 2020 2020 2020 2020 in file. \n+00002bf0: 7020 2d20 6669 6c65 2069 7320 6120 6e61 p - file is a na\n+00002c00: 6d65 6420 7069 7065 0a20 2020 2020 2020 med pipe. \n+00002c10: 206c 202d 2066 696c 6520 6973 2061 2073 l - file is a s\n+00002c20: 796d 626f 6c69 6320 6c69 6e6b 0a20 2020 ymbolic link. \n+00002c30: 2020 2020 2053 6263 2063 616e 206f 6e6c Sbc can onl\n+00002c40: 7920 6265 2073 6176 6564 2077 6865 6e20 y be saved when \n+00002c50: 7573 696e 6720 6f70 7469 6f6e 205b 6370 using option [cp\n+00002c60: 4973 476e 755d 0a0a 3d69 7465 6d20 423c IsGnu]..=item B<\n+00002c70: 2d2d 6370 4973 476e 753e 0a0a 2020 2020 --cpIsGnu>.. \n+00002c80: 4163 7469 7661 7465 2074 6869 7320 6f70 Activate this op\n+00002c90: 7469 6f6e 2069 6620 796f 7572 2073 7973 tion if your sys\n+00002ca0: 7465 6d73 2063 7020 6973 2061 2066 756c tems cp is a ful\n+00002cb0: 6c2d 6665 6174 7572 6564 0a20 2020 2047 l-featured. G\n+00002cc0: 4e55 2076 6572 7369 6f6e 2e20 496e 2074 NU version. In t\n+00002cd0: 6869 7320 6361 7365 2079 6f75 2077 696c his case you wil\n+00002ce0: 6c20 6265 2061 626c 6520 746f 2061 6c73 l be able to als\n+00002cf0: 6f20 6261 636b 7570 0a20 2020 2073 6576 o backup. sev\n+00002d00: 6572 616c 2073 7065 6369 616c 2066 696c eral special fil\n+00002d10: 6520 7479 7065 7320 6c69 6b65 2073 6f63 e types like soc\n+00002d20: 6b65 7473 2e0a 0a3d 6974 656d 2042 3c2d kets...=item B<-\n+00002d30: 2d6c 696e 6b53 796d 6c69 6e6b 733e 0a0a -linkSymlinks>..\n+00002d40: 2020 2020 6861 7264 206c 696e 6b20 6964 hard link id\n+00002d50: 656e 7469 6361 6c20 7379 6d6c 696e 6b73 entical symlinks\n+00002d60: 0a0a 3d69 7465 6d20 423c 2d2d 7072 6563 ..=item B<--prec\n+00002d70: 6f6d 6d61 6e64 3e0a 0a20 2020 2065 7865 ommand>.. exe\n+00002d80: 6320 6a6f 6220 6265 666f 7265 2073 7461 c job before sta\n+00002d90: 7274 696e 6720 7468 6520 6261 636b 7570 rting the backup\n+00002da0: 2c20 6368 6563 6b73 206c 6f63 6b46 696c , checks lockFil\n+00002db0: 6520 282d 4c29 0a20 2020 2062 6566 6f72 e (-L). befor\n+00002dc0: 6520 7374 6172 7469 6e67 2028 652e 672e e starting (e.g.\n+00002dd0: 2063 616e 2062 6520 7573 6564 2066 6f72 can be used for\n+00002de0: 2072 7379 6e63 290a 2020 2020 7374 6f70 rsync). stop\n+00002df0: 7320 6578 6563 7574 696f 6e20 6966 206a s execution if j\n+00002e00: 6f62 2072 6574 7572 6e73 2065 7869 7420 ob returns exit \n+00002e10: 7374 6174 7573 2021 3d20 300a 2020 2020 status != 0. \n+00002e20: 5468 6973 2070 6172 616d 6574 6572 2069 This parameter i\n+00002e30: 7320 7061 7273 6564 206c 696b 6520 6120 s parsed like a \n+00002e40: 6c69 6e65 2069 6e20 7468 6520 636f 6e66 line in the conf\n+00002e50: 6967 7572 6174 696f 6e0a 2020 2020 6669 iguration. fi\n+00002e60: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally \n+00002e70: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted\n+00002e80: 2e0a 0a3d 6974 656d 2042 3c2d 2d70 6f73 ...=item B<--pos\n+00002e90: 7463 6f6d 6d61 6e64 3e0a 0a20 2020 2065 tcommand>.. e\n+00002ea0: 7865 6320 6a6f 6220 6166 7465 7220 6669 xec job after fi\n+00002eb0: 6e69 7368 696e 6720 7468 6520 6261 636b nishing the back\n+00002ec0: 7570 2c20 6275 7420 6265 666f 7265 2065 up, but before e\n+00002ed0: 7261 7369 6e67 206f 660a 2020 2020 6f6c rasing of. ol\n+00002ee0: 6420 6261 636b 7570 7320 2072 6570 6f72 d backups repor\n+00002ef0: 7473 2069 6620 6a6f 6220 7265 7475 726e ts if job return\n+00002f00: 7320 6578 6974 2073 7461 7475 7320 213d s exit status !=\n+00002f10: 2030 0a20 2020 2054 6869 7320 7061 7261 0. This para\n+00002f20: 6d65 7465 7220 6973 2070 6172 7365 6420 meter is parsed \n+00002f30: 6c69 6b65 2061 206c 696e 6520 696e 2074 like a line in t\n+00002f40: 6865 2063 6f6e 6669 6775 7261 7469 6f6e he configuration\n+00002f50: 0a20 2020 2066 696c 6520 616e 6420 6e6f . file and no\n+00002f60: 726d 616c 6c79 2068 6173 2074 6f20 6265 rmally has to be\n+00002f70: 2071 756f 7465 642e 0a0a 3d69 7465 6d20 quoted...=item \n+00002f80: 423c 2d2d 666f 6c6c 6f77 4c69 6e6b 733e B<--followLinks>\n+00002f90: 0a0a 2020 2020 666f 6c6c 6f77 2073 796d .. follow sym\n+00002fa0: 626f 6c69 6320 6c69 6e6b 7320 6c69 6b65 bolic links like\n+00002fb0: 2064 6972 6563 746f 7269 6573 2075 7020 directories up \n+00002fc0: 746f 2064 6570 7468 0a20 2020 2064 6566 to depth. def\n+00002fd0: 6175 6c74 203d 2030 202d 3e20 646f 206e ault = 0 -> do n\n+00002fe0: 6f74 2066 6f6c 6c6f 7720 6c69 6e6b 730a ot follow links.\n+00002ff0: 0a3d 6974 656d 2042 3c2d 2d68 6967 684c .=item B<--highL\n+00003000: 6174 656e 6379 3e0a 0a20 2020 2075 7365 atency>.. use\n+00003010: 2074 6869 7320 666f 7220 6120 7665 7279 this for a very\n+00003020: 2068 6967 6820 6c61 7465 6e63 7920 6c69 high latency li\n+00003030: 6e65 2028 6567 2e20 7670 6e20 6f76 6572 ne (eg. vpn over\n+00003040: 0a20 2020 2074 6865 2069 6e74 6572 6e65 . the interne\n+00003050: 7429 2066 6f72 2062 6574 7465 7220 7061 t) for better pa\n+00003060: 7261 6c6c 656c 697a 6174 696f 6e0a 0a3d rallelization..=\n+00003070: 6974 656d 2042 3c2d 2d69 676e 6f72 6550 item B<--ignoreP\n+00003080: 6572 6d73 3e0a 0a20 2020 2049 6620 7468 erms>.. If th\n+00003090: 6973 206f 7074 696f 6e20 6368 6f73 656e is option chosen\n+000030a0: 2c20 6669 6c65 7320 7769 6c6c 206e 6f74 , files will not\n+000030b0: 206e 6563 6573 7361 7269 6c79 2068 6176 necessarily hav\n+000030c0: 650a 2020 2020 7468 6520 7361 6d65 2070 e. the same p\n+000030d0: 6572 6d69 7373 696f 6e73 2061 6e64 206f ermissions and o\n+000030e0: 776e 6572 2061 7320 7468 6520 6f72 6967 wner as the orig\n+000030f0: 696e 616c 732e 2054 6869 730a 2020 2020 inals. This. \n+00003100: 7370 6565 6473 2075 7020 6261 636b 7570 speeds up backup\n+00003110: 7320 6f6e 206e 6574 776f 726b 2064 7269 s on network dri\n+00003120: 7665 7320 6120 6c6f 742e 2052 6563 6f76 ves a lot. Recov\n+00003130: 6572 7920 7769 7468 0a20 2020 2073 746f ery with. sto\n+00003140: 7265 4261 636b 7570 5265 636f 7665 722e reBackupRecover.\n+00003150: 706c 2077 696c 6c20 7265 7374 6f72 6520 pl will restore \n+00003160: 7468 656d 2063 6f72 7265 6374 6c79 2e0a them correctly..\n+00003170: 0a3d 6974 656d 2042 3c2d 2d6c 6174 654c .=item B<--lateL\n+00003180: 696e 6b73 3e0a 0a20 2020 2064 6f20 2a6e inks>.. do *n\n+00003190: 6f74 2a20 7772 6974 6520 6861 7264 206c ot* write hard l\n+000031a0: 696e 6b73 2074 6f20 6578 6973 7469 6e67 inks to existing\n+000031b0: 2066 696c 6573 2069 6e20 7468 6520 6261 files in the ba\n+000031c0: 636b 7570 0a20 2020 2064 7572 696e 6720 ckup. during \n+000031d0: 7468 6520 6261 636b 7570 0a20 2020 2079 the backup. y\n+000031e0: 6f75 2068 6176 6520 746f 2063 616c 6c20 ou have to call \n+000031f0: 7468 6520 7072 6f67 7261 6d20 7374 6f72 the program stor\n+00003200: 6542 6163 6b75 7057 7269 7465 4c61 7465 eBackupWriteLate\n+00003210: 4c69 6e6b 2e70 6c0a 2020 2020 6c61 7465 Link.pl. late\n+00003220: 7220 6f6e 2079 6f75 7220 7365 7276 6572 r on your server\n+00003230: 2069 6620 796f 7520 7365 7420 7468 6973 if you set this\n+00003240: 2066 6c61 6720 746f 2027 7965 7327 0a20 flag to 'yes'. \n+00003250: 2020 2079 6f75 2068 6176 6520 746f 2072 you have to r\n+00003260: 756e 2073 746f 7265 4261 636b 7570 5570 un storeBackupUp\n+00003270: 6461 7465 4261 636b 7570 2e70 6c20 6c61 dateBackup.pl la\n+00003280: 7465 7220 2d20 7365 650a 2020 2020 6465 ter - see. de\n+00003290: 7363 7269 7074 696f 6e20 666f 7220 7468 scription for th\n+000032a0: 6174 2070 726f 6772 616d 0a0a 3d69 7465 at program..=ite\n+000032b0: 6d20 423c 2d2d 6c61 7465 436f 6d70 7265 m B<--lateCompre\n+000032c0: 7373 3e0a 0a20 2020 206f 6e6c 7920 696e ss>.. only in\n+000032d0: 2063 6f6d 6269 6e61 7469 6f6e 2077 6974 combination wit\n+000032e0: 6820 2d2d 6c61 7465 4c69 6e6b 730a 2020 h --lateLinks. \n+000032f0: 2020 636f 6d70 7265 7373 696f 6e20 6672 compression fr\n+00003300: 6f6d 2066 696c 6573 203e 3d20 6d69 6e43 om files >= minC\n+00003310: 6f6d 7072 6573 7353 697a 6520 7769 6c6c ompressSize will\n+00003320: 2062 6520 646f 6e65 0a20 2020 206c 6174 be done. lat\n+00003330: 6572 2c20 7468 6520 6669 6c65 2069 7320 er, the file is \n+00003340: 2874 656d 706f 7261 7269 6c79 2920 636f (temporarily) co\n+00003350: 7069 6564 2069 6e74 6f20 7468 6520 6261 pied into the ba\n+00003360: 636b 7570 0a0a 3d69 7465 6d20 423c 2d2d ckup..=item B<--\n+00003370: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi\n+00003380: 783e 0a0a 2020 2020 4669 6c65 7320 7769 x>.. Files wi\n+00003390: 7468 2073 7566 6669 7820 666f 7220 7768 th suffix for wh\n+000033a0: 6963 6820 7374 6f72 6542 6163 6b75 7020 ich storeBackup \n+000033b0: 7769 6c6c 206d 616b 6520 616e 206d 6435 will make an md5\n+000033c0: 0a20 2020 2063 6865 636b 206f 6e20 626c . check on bl\n+000033d0: 6f63 6b73 206f 6620 7468 6174 2066 696c ocks of that fil\n+000033e0: 652e 2045 7865 6375 7465 6420 6166 7465 e. Executed afte\n+000033f0: 720a 2020 2020 2d2d 6368 6563 6b42 6c6f r. --checkBlo\n+00003400: 636b 7352 756c 6528 6e29 0a20 2020 2054 cksRule(n). T\n+00003410: 6869 7320 6f70 7469 6f6e 2063 616e 2062 his option can b\n+00003420: 6520 7265 7065 6174 6564 206d 756c 7469 e repeated multi\n+00003430: 706c 6520 7469 6d65 730a 0a3d 6974 656d ple times..=item\n+00003440: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks\n+00003450: 4d69 6e53 697a 653e 0a0a 2020 2020 4f6e MinSize>.. On\n+00003460: 6c79 2063 6865 636b 2066 696c 6573 2073 ly check files s\n+00003470: 7065 6369 6669 6564 2069 6e20 2d2d 6368 pecified in --ch\n+00003480: 6563 6b42 6c6f 636b 7353 7566 6669 7820 eckBlocksSuffix \n+00003490: 6966 2074 6865 7265 0a20 2020 2066 696c if there. fil\n+000034a0: 6520 7369 7a65 2069 7320 6174 206c 6561 e size is at lea\n+000034b0: 7374 2074 6869 7320 7661 6c75 652c 2064 st this value, d\n+000034c0: 6566 6175 6c74 2069 7320 3130 304d 0a0a efault is 100M..\n+000034d0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB\n+000034e0: 6c6f 636b 7342 533e 0a0a 2020 2020 426c locksBS>.. Bl\n+000034f0: 6f63 6b20 7369 7a65 2066 6f72 2066 696c ock size for fil\n+00003500: 6573 2073 7065 6369 6669 6564 2077 6974 es specified wit\n+00003510: 6820 2d2d 6368 6563 6b42 6c6f 636b 7353 h --checkBlocksS\n+00003520: 7566 6669 780a 2020 2020 4465 6661 756c uffix. Defaul\n+00003530: 7420 6973 2024 6368 6563 6b42 6c6f 636b t is $checkBlock\n+00003540: 7342 5364 6566 6175 6c74 2028 3120 6d65 sBSdefault (1 me\n+00003550: 6761 6279 7465 290a 0a3d 6974 656d 2042 gabyte)..=item B\n+00003560: 3c2d 2d63 6865 636b 426c 6f63 6b73 436f <--checkBlocksCo\n+00003570: 6d70 723e 0a0a 2020 2020 6966 2073 6574 mpr>.. if set\n+00003580: 2c20 7468 6520 626c 6f63 6b73 2067 656e , the blocks gen\n+00003590: 6572 6174 6564 2064 7565 2074 6f20 6368 erated due to ch\n+000035a0: 6563 6b42 6c6f 636b 7353 7566 6669 780a eckBlocksSuffix.\n+000035b0: 2020 2020 6172 6520 636f 6d70 7265 7373 are compress\n+000035c0: 6564 0a0a 3d69 7465 6d20 423c 2d2d 6368 ed..=item B<--ch\n+000035d0: 6563 6b42 6c6f 636b 7352 756c 6530 3e0a eckBlocksRule0>.\n+000035e0: 0a20 2020 2046 696c 6573 2066 6f72 2077 . Files for w\n+000035f0: 6869 6368 2073 746f 7265 4261 636b 7570 hich storeBackup\n+00003600: 2077 696c 6c20 6d61 6b65 2061 6e20 6d64 will make an md\n+00003610: 3520 6368 6563 6b0a 2020 2020 6465 7065 5 check. depe\n+00003620: 6e64 696e 6720 6f6e 2062 6c6f 636b 7320 nding on blocks \n+00003630: 6f66 2074 6861 7420 6669 6c65 2e0a 0a3d of that file...=\n+00003640: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl\n+00003650: 6f63 6b73 4253 303e 0a0a 2020 2020 426c ocksBS0>.. Bl\n+00003660: 6f63 6b20 7369 7a65 2066 6f72 206f 7074 ock size for opt\n+00003670: 696f 6e20 6368 6563 6b42 6c6f 636b 7352 ion checkBlocksR\n+00003680: 756c 650a 2020 2020 4465 6661 756c 7420 ule. Default \n+00003690: 6973 2024 6368 6563 6b42 6c6f 636b 7342 is $checkBlocksB\n+000036a0: 5364 6566 6175 6c74 2028 3120 6d65 6761 Sdefault (1 mega\n+000036b0: 6279 7465 290a 0a3d 6974 656d 2042 3c2d byte)..=item B<-\n+000036c0: 2d63 6865 636b 426c 6f63 6b73 436f 6d70 -checkBlocksComp\n+000036d0: 7230 3e0a 0a20 2020 2069 6620 7365 742c r0>.. if set,\n+000036e0: 2074 6865 2062 6c6f 636b 7320 6765 6e65 the blocks gene\n+000036f0: 7261 7465 6420 6475 6520 746f 2074 6869 rated due to thi\n+00003700: 7320 7275 6c65 2061 7265 0a20 2020 2063 s rule are. c\n+00003710: 6f6d 7072 6573 7365 640a 0a3d 6974 656d ompressed..=item\n+00003720: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks\n+00003730: 5265 6164 303e 0a0a 2020 2020 4669 6c74 Read0>.. Filt\n+00003740: 6572 2066 6f72 2072 6561 6469 6e67 2074 er for reading t\n+00003750: 6865 2066 696c 6520 746f 2074 7265 6174 he file to treat\n+00003760: 2061 7320 6120 626c 6f63 6b65 6420 6669 as a blocked fi\n+00003770: 6c65 0a20 2020 2065 672e 2027 677a 6970 le. eg. 'gzip\n+00003780: 202d 6427 2069 6620 7468 6520 6669 6c65 -d' if the file\n+00003790: 2069 7320 636f 6d70 7265 7373 6564 2e20 is compressed. \n+000037a0: 4465 6661 756c 7420 6973 206e 6f0a 2020 Default is no. \n+000037b0: 2020 7265 6164 2066 696c 7465 722e 0a20 read filter.. \n+000037c0: 2020 2054 6869 7320 7061 7261 6d65 7465 This paramete\n+000037d0: 7220 6973 2070 6172 7365 6420 6c69 6b65 r is parsed like\n+000037e0: 2074 6865 206c 696e 6520 696e 2074 6865 the line in the\n+000037f0: 0a20 2020 2063 6f6e 6669 6775 7261 7469 . configurati\n+00003800: 6f6e 2066 696c 6520 616e 6420 6e6f 726d on file and norm\n+00003810: 616c 6c79 2068 6173 2074 6f20 6265 2071 ally has to be q\n+00003820: 756f 7465 642c 0a20 2020 2065 672e 2027 uoted,. eg. '\n+00003830: 677a 6970 202d 3927 0a0a 3d69 7465 6d20 gzip -9'..=item \n+00003840: 423c 2d2d 6368 6563 6b42 6c6f 636b 7350 B<--checkBlocksP\n+00003850: 6172 616c 6c65 6c30 3e0a 0a20 2020 2052 arallel0>.. R\n+00003860: 6561 6420 6669 6c65 7320 7370 6563 6966 ead files specif\n+00003870: 6965 6420 6865 7265 2069 6e20 7061 7261 ied here in para\n+00003880: 6c6c 656c 2074 6f20 226e 6f72 6d61 6c22 llel to \"normal\"\n+00003890: 206f 6e65 732e 0a20 2020 2054 6869 7320 ones.. This \n+000038a0: 6f6e 6c79 206d 616b 6573 2073 656e 7365 only makes sense\n+000038b0: 2069 6620 7468 6579 2061 7265 206f 6e20 if they are on \n+000038c0: 6120 6469 6666 6572 656e 7420 6469 736b a different disk\n+000038d0: 2e0a 2020 2020 4465 6661 756c 7420 7661 .. Default va\n+000038e0: 6c75 6520 6973 2027 6e6f 270a 0a3d 6974 lue is 'no'..=it\n+000038f0: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc\n+00003900: 6b73 5275 6c65 313e 0a0a 3d69 7465 6d20 ksRule1>..=item \n+00003910: 423c 2d2d 6368 6563 6b42 6c6f 636b 7342 B<--checkBlocksB\n+00003920: 5331 3e0a 0a3d 6974 656d 2042 3c2d 2d63 S1>..=item B<--c\n+00003930: 6865 636b 426c 6f63 6b73 436f 6d70 7231 heckBlocksCompr1\n+00003940: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n+00003950: 636b 426c 6f63 6b73 5265 6164 313e 0a0a ckBlocksRead1>..\n+00003960: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB\n+00003970: 6c6f 636b 7350 6172 616c 6c65 6c31 3e0a locksParallel1>.\n+00003980: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check\n+00003990: 426c 6f63 6b73 5275 6c65 323e 0a0a 3d69 BlocksRule2>..=i\n+000039a0: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo\n+000039b0: 636b 7342 5332 3e0a 0a3d 6974 656d 2042 cksBS2>..=item B\n+000039c0: 3c2d 2d63 6865 636b 426c 6f63 6b73 436f <--checkBlocksCo\n+000039d0: 6d70 7232 3e0a 0a3d 6974 656d 2042 3c2d mpr2>..=item B<-\n+000039e0: 2d63 6865 636b 426c 6f63 6b73 5265 6164 -checkBlocksRead\n+000039f0: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch\n+00003a00: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle\n+00003a10: 6c32 3e0a 0a3d 6974 656d 2042 3c2d 2d63 l2>..=item B<--c\n+00003a20: 6865 636b 426c 6f63 6b73 5275 6c65 333e heckBlocksRule3>\n+00003a30: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n+00003a40: 6b42 6c6f 636b 7342 5333 3e0a 0a3d 6974 kBlocksBS3>..=it\n+00003a50: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc\n+00003a60: 6b73 436f 6d70 7233 3e0a 0a3d 6974 656d ksCompr3>..=item\n+00003a70: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks\n+00003a80: 5265 6164 333e 0a0a 3d69 7465 6d20 423c Read3>..=item B<\n+00003a90: 2d2d 6368 6563 6b42 6c6f 636b 7350 6172 --checkBlocksPar\n+00003aa0: 616c 6c65 6c33 3e0a 0a3d 6974 656d 2042 allel3>..=item B\n+00003ab0: 3c2d 2d63 6865 636b 426c 6f63 6b73 5275 <--checkBlocksRu\n+00003ac0: 6c65 343e 0a0a 3d69 7465 6d20 423c 2d2d le4>..=item B<--\n+00003ad0: 6368 6563 6b42 6c6f 636b 7342 5334 3e0a checkBlocksBS4>.\n+00003ae0: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check\n+00003af0: 426c 6f63 6b73 436f 6d70 7234 3e0a 0a3d BlocksCompr4>..=\n+00003b00: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl\n+00003b10: 6f63 6b73 5265 6164 343e 0a0a 3d69 7465 ocksRead4>..=ite\n+00003b20: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock\n+00003b30: 7350 6172 616c 6c65 6c34 3e0a 0a3d 6974 sParallel4>..=it\n+00003b40: 656d 2042 3c2d 2d63 6865 636b 4465 7669 em B<--checkDevi\n+00003b50: 6365 7330 3e0a 0a20 2020 204c 6973 7420 ces0>.. List \n+00003b60: 6f66 2064 6576 6963 6573 2066 6f72 206d of devices for m\n+00003b70: 6435 2063 6b65 636b 2064 6570 656e 6469 d5 ckeck dependi\n+00003b80: 6e67 206f 6e20 626c 6f63 6b73 206f 6620 ng on blocks of \n+00003b90: 7468 6573 650a 2020 2020 6465 7669 6365 these. device\n+00003ba0: 730a 0a3d 6974 656d 2042 3c2d 2d63 6865 s..=item B<--che\n+00003bb0: 636b 4465 7669 6365 7344 6972 303e 0a0a ckDevicesDir0>..\n+00003bc0: 2020 2020 4469 7265 6374 6f72 7920 7768 Directory wh\n+00003bd0: 6572 6520 746f 2073 746f 7265 2074 6865 ere to store the\n+00003be0: 2062 6163 6b75 7020 6f66 2074 6865 2064 backup of the d\n+00003bf0: 6576 6963 650a 0a3d 6974 656d 2042 3c2d evice..=item B<-\n+00003c00: 2d63 6865 636b 4465 7669 6365 7342 5330 -checkDevicesBS0\n+00003c10: 3e0a 0a20 2020 2042 6c6f 636b 2073 697a >.. Block siz\n+00003c20: 6520 6f66 206f 7074 696f 6e20 6368 6563 e of option chec\n+00003c30: 6b44 6576 6963 6573 302c 0a20 2020 2064 kDevices0,. d\n+00003c40: 6566 6175 6c74 2069 7320 314d 2028 3120 efault is 1M (1 \n+00003c50: 6d65 6761 6279 7465 290a 0a3d 6974 656d megabyte)..=item\n+00003c60: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice\n+00003c70: 7343 6f6d 7072 303e 0a0a 2020 2020 436f sCompr0>.. Co\n+00003c80: 6d70 7265 7373 2062 6c6f 636b 7320 7265 mpress blocks re\n+00003c90: 7375 6c74 696e 6720 6672 6f6d 206f 7074 sulting from opt\n+00003ca0: 696f 6e20 6368 6563 6b44 6576 6963 6573 ion checkDevices\n+00003cb0: 300a 0a3d 6974 656d 2042 3c2d 2d63 6865 0..=item B<--che\n+00003cc0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n+00003cd0: 6c30 3e0a 0a20 2020 2052 6561 6420 6465 l0>.. Read de\n+00003ce0: 7669 6365 7320 7370 6563 6966 6965 6420 vices specified \n+00003cf0: 696e 2070 6172 616c 6c65 6c20 746f 2074 in parallel to t\n+00003d00: 6865 2072 6573 7420 6f66 2074 6865 0a20 he rest of the. \n+00003d10: 2020 2062 6163 6b75 702e 2054 6869 7320 backup. This \n+00003d20: 6f6e 6c79 206d 616b 6573 2073 656e 7365 only makes sense\n+00003d30: 2069 6620 7468 6579 2061 7265 206f 6e20 if they are on \n+00003d40: 6120 6469 6666 6572 656e 740a 2020 2020 a different. \n+00003d50: 6469 736b 2e20 4465 6661 756c 7420 7661 disk. Default va\n+00003d60: 6c75 6520 6973 2027 6e6f 270a 0a3d 6974 lue is 'no'..=it\n+00003d70: 656d 2042 3c2d 2d63 6865 636b 4465 7669 em B<--checkDevi\n+00003d80: 6365 7331 3e0a 0a3d 6974 656d 2042 3c2d ces1>..=item B<-\n+00003d90: 2d63 6865 636b 4465 7669 6365 7344 6972 -checkDevicesDir\n+00003da0: 313e 0a0a 3d69 7465 6d20 423c 2d2d 6368 1>..=item B<--ch\n+00003db0: 6563 6b44 6576 6963 6573 4253 313e 0a0a eckDevicesBS1>..\n+00003dc0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD\n+00003dd0: 6576 6963 6573 436f 6d70 7231 3e0a 0a3d evicesCompr1>..=\n+00003de0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe\n+00003df0: 7669 6365 7350 6172 616c 6c65 6c31 3e0a vicesParallel1>.\n+00003e00: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check\n+00003e10: 4465 7669 6365 7332 3e0a 0a3d 6974 656d Devices2>..=item\n+00003e20: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice\n+00003e30: 7344 6972 323e 0a0a 3d69 7465 6d20 423c sDir2>..=item B<\n+00003e40: 2d2d 6368 6563 6b44 6576 6963 6573 4253 --checkDevicesBS\n+00003e50: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch\n+00003e60: 6563 6b44 6576 6963 6573 436f 6d70 7232 eckDevicesCompr2\n+00003e70: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n+00003e80: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n+00003e90: 6c32 3e0a 0a3d 6974 656d 2042 3c2d 2d63 l2>..=item B<--c\n+00003ea0: 6865 636b 4465 7669 6365 7333 3e0a 0a3d heckDevices3>..=\n+00003eb0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe\n+00003ec0: 7669 6365 7344 6972 333e 0a0a 3d69 7465 vicesDir3>..=ite\n+00003ed0: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic\n+00003ee0: 6573 4253 333e 0a0a 3d69 7465 6d20 423c esBS3>..=item B<\n+00003ef0: 2d2d 6368 6563 6b44 6576 6963 6573 436f --checkDevicesCo\n+00003f00: 6d70 7233 3e0a 0a3d 6974 656d 2042 3c2d mpr3>..=item B<-\n+00003f10: 2d63 6865 636b 4465 7669 6365 7350 6172 -checkDevicesPar\n+00003f20: 616c 6c65 6c33 3e0a 0a3d 6974 656d 2042 allel3>..=item B\n+00003f30: 3c2d 2d63 6865 636b 4465 7669 6365 7334 <--checkDevices4\n+00003f40: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n+00003f50: 636b 4465 7669 6365 7344 6972 343e 0a0a ckDevicesDir4>..\n+00003f60: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD\n+00003f70: 6576 6963 6573 4253 343e 0a0a 3d69 7465 evicesBS4>..=ite\n+00003f80: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic\n+00003f90: 6573 436f 6d70 7234 3e0a 0a3d 6974 656d esCompr4>..=item\n+00003fa0: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice\n+00003fb0: 7350 6172 616c 6c65 6c34 3e0a 0a3d 6974 sParallel4>..=it\n+00003fc0: 656d 2042 3c2d 2d73 6176 6552 414d 3e0a em B<--saveRAM>.\n+00003fd0: 0a20 2020 2077 7269 7465 2074 656d 706f . write tempo\n+00003fe0: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i\n+00003ff0: 6e20 2d2d 746d 7064 6972 0a20 2020 2075 n --tmpdir. u\n+00004000: 7365 2074 6869 7320 6966 2079 6f75 2064 se this if you d\n+00004010: 6f20 6e6f 7420 6861 7665 2065 6e6f 7567 o not have enoug\n+00004020: 6820 5241 4d0a 0a3d 6974 656d 2042 3c2d h RAM..=item B<-\n+00004030: 2d63 6f6d 7072 6573 733e 2c20 423c 2d63 -compress>, B<-c\n+00004040: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress \n+00004050: 636f 6d6d 616e 6420 2877 6974 6820 6f70 command (with op\n+00004060: 7469 6f6e 7329 2c20 6465 6661 756c 7420 tions), default \n+00004070: 6973 203c 627a 6970 323e 0a20 2020 2054 is . T\n+00004080: 6869 7320 7061 7261 6d65 7465 7220 6973 his parameter is\n+00004090: 2070 6172 7365 6420 6c69 6b65 2074 6865 parsed like the\n+000040a0: 206c 696e 6520 696e 2074 6865 0a20 2020 line in the. \n+000040b0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f\n+000040c0: 696c 6520 616e 6420 6e6f 726d 616c 6c79 ile and normally\n+000040d0: 2068 6173 2074 6f20 6265 2071 756f 7465 has to be quote\n+000040e0: 642c 0a20 2020 2065 672e 2027 677a 6970 d,. eg. 'gzip\n+000040f0: 202d 3927 0a0a 3d69 7465 6d20 423c 2d2d -9'..=item B<--\n+00004100: 756e 636f 6d70 7265 7373 3e2c 2042 3c2d uncompress>, B<-\n+00004110: 753e 0a0a 2020 2020 756e 636f 6d70 7265 u>.. uncompre\n+00004120: 7373 2063 6f6d 6d61 6e64 2028 7769 7468 ss command (with\n+00004130: 206f 7074 696f 6e73 292c 2064 6566 6175 options), defau\n+00004140: 6c74 2069 7320 203c 627a 6970 3220 2d64 lt is . This param\n+00004160: 6574 6572 2069 7320 7061 7273 6564 206c eter is parsed l\n+00004170: 696b 6520 7468 6520 6c69 6e65 2069 6e20 ike the line in \n+00004180: 7468 650a 2020 2020 636f 6e66 6967 7572 the. configur\n+00004190: 6174 696f 6e20 6669 6c65 2061 6e64 206e ation file and n\n+000041a0: 6f72 6d61 6c6c 7920 6861 7320 746f 2062 ormally has to b\n+000041b0: 6520 7175 6f74 6564 2c20 6567 2e0a 2020 e quoted, eg.. \n+000041c0: 2020 2767 7a69 7020 2d64 270a 0a3d 6974 'gzip -d'..=it\n+000041d0: 656d 2042 3c2d 2d70 6f73 7466 6978 3e2c em B<--postfix>,\n+000041e0: 2042 3c2d 703e 0a0a 2020 2020 706f 7374 B<-p>.. post\n+000041f0: 6669 7820 746f 2061 6464 2061 6674 6572 fix to add after\n+00004200: 2063 6f6d 7072 6573 7369 6f6e 2c20 6465 compression, de\n+00004210: 6661 756c 7420 6973 203c 2e62 7a32 3e0a fault is <.bz2>.\n+00004220: 0a3d 6974 656d 2042 3c2d 2d65 7863 6570 .=item B<--excep\n+00004230: 7453 7566 6669 783e 0a0a 2020 2020 646f tSuffix>.. do\n+00004240: 206e 6f74 2063 6f6d 7072 6573 7320 6669 not compress fi\n+00004250: 6c65 7320 7769 7468 2074 6865 2066 6f6c les with the fol\n+00004260: 6c6f 7769 6e67 0a20 2020 2073 7566 6669 lowing. suffi\n+00004270: 7820 2875 7070 6572 6361 7365 2069 6e63 x (uppercase inc\n+00004280: 6c75 6465 6429 3a0a 2020 2020 2827 5c2e luded):. ('\\.\n+00004290: 7a69 7027 2c20 275c 2e62 7a32 272c 2027 zip', '\\.bz2', '\n+000042a0: 5c2e 677a 272c 2027 5c2e 7467 7a27 2c20 \\.gz', '\\.tgz', \n+000042b0: 275c 2e6a 7067 272c 2027 5c2e 6769 6627 '\\.jpg', '\\.gif'\n+000042c0: 2c0a 2020 2020 2027 5c2e 7469 6666 272c ,. '\\.tiff',\n+000042d0: 2027 5c2e 7469 6627 2c20 275c 2e6d 7065 '\\.tif', '\\.mpe\n+000042e0: 6727 2c20 275c 2e6d 7067 272c 2027 5c2e g', '\\.mpg', '\\.\n+000042f0: 6d70 3327 2c20 275c 2e6f 6767 272c 0a20 mp3', '\\.ogg',. \n+00004300: 2020 2020 275c 2e67 7067 272c 2027 5c2e '\\.gpg', '\\.\n+00004310: 706e 6727 290a 2020 2020 5468 6973 206f png'). This o\n+00004320: 7074 696f 6e20 6361 6e20 6265 2072 6570 ption can be rep\n+00004330: 6561 7465 6420 6d75 6c74 6970 6c65 2074 eated multiple t\n+00004340: 696d 6573 0a20 2020 2049 6620 796f 7520 imes. If you \n+00004350: 646f 206e 6f74 2077 616e 7420 616e 7920 do not want any \n+00004360: 636f 6d70 7265 7373 696f 6e2c 2073 6574 compression, set\n+00004370: 2074 6869 7320 6f70 7469 6f6e 0a20 2020 this option. \n+00004380: 2074 6f20 272e 2a27 0a0a 3d69 7465 6d20 to '.*'..=item \n+00004390: 423c 2d2d 6164 6445 7863 6570 7453 7566 B<--addExceptSuf\n+000043a0: 6669 783e 0a0a 2020 2020 6c69 6b65 202d fix>.. like -\n+000043b0: 2d65 7863 6570 7453 7566 6669 782c 2062 -exceptSuffix, b\n+000043c0: 7574 2064 6f20 6e6f 7420 7265 706c 6163 ut do not replac\n+000043d0: 6520 6465 6661 756c 7473 2c20 6164 640a e defaults, add.\n+000043e0: 0a3d 6974 656d 2042 3c2d 2d6d 696e 436f .=item B<--minCo\n+000043f0: 6d70 7265 7373 5369 7a65 3e0a 0a20 2020 mpressSize>.. \n+00004400: 2046 696c 6573 2073 6d61 6c6c 6572 2074 Files smaller t\n+00004410: 6861 6e20 7468 6973 2073 697a 6520 7769 han this size wi\n+00004420: 6c6c 206e 6576 6572 2062 6520 636f 6d70 ll never be comp\n+00004430: 7265 7373 6564 0a20 2020 2062 7574 2063 ressed. but c\n+00004440: 6f70 6965 640a 0a3d 6974 656d 2042 3c2d opied..=item B<-\n+00004450: 2d63 6f6d 7072 5275 6c65 3e0a 0a20 2020 -comprRule>.. \n+00004460: 2061 6c74 6572 6e61 7469 7665 2074 6f20 alternative to \n+00004470: 2d2d 6578 6365 7074 5375 6666 6978 2061 --exceptSuffix a\n+00004480: 6e64 206d 696e 436f 6d70 7265 7373 5369 nd minCompressSi\n+00004490: 7a65 3a0a 2020 2020 6465 6669 6e69 7469 ze:. definiti\n+000044a0: 6f6e 206f 6620 6120 7275 6c65 2077 6869 on of a rule whi\n+000044b0: 6368 2066 696c 6573 2077 696c 6c20 6265 ch files will be\n+000044c0: 2063 6f6d 7072 6573 7365 640a 0a3d 6974 compressed..=it\n+000044d0: 656d 2042 3c2d 2d6e 6f43 6f6d 7072 6573 em B<--noCompres\n+000044e0: 733e 0a0a 2020 2020 6d61 7869 6d61 6c20 s>.. maximal \n+000044f0: 6e75 6d62 6572 206f 6620 7061 7261 6c6c number of parall\n+00004500: 656c 2063 6f6d 7072 6573 7320 6f70 6572 el compress oper\n+00004510: 6174 696f 6e73 2c0a 2020 2020 6465 6661 ations,. defa\n+00004520: 756c 7420 3d20 6368 6f73 656e 2061 7574 ult = chosen aut\n+00004530: 6f6d 6174 6963 616c 6c79 0a0a 3d69 7465 omatically..=ite\n+00004540: 6d20 423c 2d2d 7175 6575 6543 6f6d 7072 m B<--queueCompr\n+00004550: 6573 733e 0a0a 2020 2020 6c65 6e67 7468 ess>.. length\n+00004560: 206f 6620 7175 6575 6520 746f 2073 746f of queue to sto\n+00004570: 7265 2066 696c 6573 2062 6566 6f72 6520 re files before \n+00004580: 636f 6d70 7265 7373 696f 6e2c 0a20 2020 compression,. \n+00004590: 2064 6566 6175 6c74 203d 2031 3030 300a default = 1000.\n+000045a0: 0a3d 6974 656d 2042 3c2d 2d6e 6f43 6f70 .=item B<--noCop\n+000045b0: 793e 0a0a 2020 2020 6d61 7869 6d61 6c20 y>.. maximal \n+000045c0: 6e75 6d62 6572 206f 6620 7061 7261 6c6c number of parall\n+000045d0: 656c 2063 6f70 7920 6f70 6572 6174 696f el copy operatio\n+000045e0: 6e73 2c0a 2020 2020 6465 6661 756c 7420 ns,. default \n+000045f0: 3d20 310a 0a3d 6974 656d 2042 3c2d 2d71 = 1..=item B<--q\n+00004600: 7565 7565 436f 7079 3e0a 0a20 2020 206c ueueCopy>.. l\n+00004610: 656e 6774 6820 6f66 2071 7565 7565 2074 ength of queue t\n+00004620: 6f20 7374 6f72 6520 6669 6c65 7320 6265 o store files be\n+00004630: 666f 7265 2063 6f70 7969 6e67 2c0a 2020 fore copying,. \n+00004640: 2020 6465 6661 756c 7420 3d20 3130 3030 default = 1000\n+00004650: 0a0a 3d69 7465 6d20 423c 2d2d 7769 7468 ..=item B<--with\n+00004660: 5573 6572 4772 6f75 7053 7461 743e 0a0a UserGroupStat>..\n+00004670: 2020 2020 7772 6974 6520 7374 6174 6973 write statis\n+00004680: 7469 6373 2061 626f 7574 2075 7365 6420 tics about used \n+00004690: 7370 6163 6520 696e 206c 6f67 2066 696c space in log fil\n+000046a0: 650a 0a3d 6974 656d 2042 3c2d 2d75 7365 e..=item B<--use\n+000046b0: 7247 726f 7570 5374 6174 4669 6c65 3e0a rGroupStatFile>.\n+000046c0: 0a20 2020 2077 7269 7465 2073 7461 7469 . write stati\n+000046d0: 7374 6963 7320 6162 6f75 7420 7573 6564 stics about used\n+000046e0: 2073 7061 6365 2069 6e20 6e61 6d65 2066 space in name f\n+000046f0: 696c 650a 2020 2020 7769 6c6c 2062 6520 ile. will be \n+00004700: 6f76 6572 7269 6464 656e 2065 6163 6820 overridden each \n+00004710: 7469 6d65 0a0a 3d69 7465 6d20 423c 2d2d time..=item B<--\n+00004720: 646f 4e6f 7443 6f6d 7072 6573 734d 4435 doNotCompressMD5\n+00004730: 4669 6c65 3e0a 0a20 2020 2064 6f20 6e6f File>.. do no\n+00004740: 7420 636f 6d70 7265 7373 202e 6d64 3543 t compress .md5C\n+00004750: 6865 636b 5375 6d46 696c 650a 0a3d 6974 heckSumFile..=it\n+00004760: 656d 2042 3c2d 2d63 686d 6f64 4d44 3546 em B<--chmodMD5F\n+00004770: 696c 653e 0a0a 2020 2020 7065 726d 6973 ile>.. permis\n+00004780: 7369 6f6e 7320 6f66 202e 6d64 3543 6865 sions of .md5Che\n+00004790: 636b 5375 6d46 696c 6520 616e 6420 636f ckSumFile and co\n+000047a0: 7272 6573 706f 6e64 696e 670a 2020 2020 rresponding. \n+000047b0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink\n+000047c0: 7320 6469 7265 6374 6f72 792c 2064 6566 s directory, def\n+000047d0: 6175 6c74 2069 7320 3036 3030 0a0a 3d69 ault is 0600..=i\n+000047e0: 7465 6d20 423c 2d2d 7665 7262 6f73 653e tem B<--verbose>\n+000047f0: 2c20 423c 2d76 3e0a 0a20 2020 2076 6572 , B<-v>.. ver\n+00004800: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..=\n+00004810: 6974 656d 2042 3c2d 2d64 6562 7567 3e2c item B<--debug>,\n+00004820: 2042 3c2d 643e 0a0a 2020 2020 6765 6e65 B<-d>.. gene\n+00004830: 7261 7465 2064 6562 7567 206d 6573 7361 rate debug messa\n+00004840: 6765 732c 206c 6576 656c 7320 6172 6520 ges, levels are \n+00004850: 3020 286e 6f6e 652c 2064 6566 6175 6c74 0 (none, default\n+00004860: 292c 0a20 2020 2031 2028 736f 6d65 292c ),. 1 (some),\n+00004870: 2032 2028 6d61 6e79 2920 6d65 7373 6167 2 (many) messag\n+00004880: 6573 2c20 6573 7065 6369 616c 6c79 2069 es, especially i\n+00004890: 6e0a 2020 2020 2d2d 6578 6365 7074 5275 n. --exceptRu\n+000048a0: 6c65 2061 6e64 202d 2d69 6e63 6c75 6465 le and --include\n+000048b0: 5275 6c65 0a0a 3d69 7465 6d20 423c 2d2d Rule..=item B<--\n+000048c0: 7265 7365 7441 7469 6d65 3e0a 0a20 2020 resetAtime>.. \n+000048d0: 2072 6573 6574 2061 6363 6573 7320 7469 reset access ti\n+000048e0: 6d65 2069 6e20 7468 6520 736f 7572 6365 me in the source\n+000048f0: 2064 6972 6563 746f 7279 202d 2062 7574 directory - but\n+00004900: 2074 6869 7320 7769 6c6c 0a20 2020 2063 this will. c\n+00004910: 6861 6e67 6520 6374 696d 6520 2874 696d hange ctime (tim\n+00004920: 6520 6f66 206c 6173 7420 6d6f 6469 6669 e of last modifi\n+00004930: 6361 7469 6f6e 206f 6620 6669 6c65 2073 cation of file s\n+00004940: 7461 7475 730a 2020 2020 696e 666f 726d tatus. inform\n+00004950: 6174 696f 6e29 0a0a 3d69 7465 6d20 423c ation)..=item B<\n+00004960: 2d2d 646f 4e6f 7444 656c 6574 653e 0a0a --doNotDelete>..\n+00004970: 2020 2020 6368 6563 6b20 6f6e 6c79 2c20 check only, \n+00004980: 646f 206e 6f74 2064 656c 6574 6520 616e do not delete an\n+00004990: 7920 6261 636b 7570 0a0a 3d69 7465 6d20 y backup..=item \n+000049a0: 423c 2d2d 6465 6c65 7465 4e6f 7446 696e B<--deleteNotFin\n+000049b0: 6973 6865 6444 6972 733e 0a0a 2020 2020 ishedDirs>.. \n+000049c0: 6465 6c65 7465 206f 6c64 2062 6163 6b75 delete old backu\n+000049d0: 7073 2077 6869 6368 2068 6176 6520 6e6f ps which have no\n+000049e0: 7420 6265 656e 2066 696e 6973 6865 640a t been finished.\n+000049f0: 2020 2020 7468 6973 2077 696c 6c20 6e6f this will no\n+00004a00: 7420 6861 7070 656e 2069 6620 646f 4e6f t happen if doNo\n+00004a10: 7444 656c 6574 6520 6973 2073 6574 0a0a tDelete is set..\n+00004a20: 3d69 7465 6d20 423c 2d2d 6b65 6570 416c =item B<--keepAl\n+00004a30: 6c3e 0a0a 2020 2020 6b65 6570 2062 6163 l>.. keep bac\n+00004a40: 6b75 7073 2077 6869 6368 2061 7265 206e kups which are n\n+00004a50: 6f74 206f 6c64 6572 2074 6861 6e20 7468 ot older than th\n+00004a60: 6520 7370 6563 6966 6965 6420 616d 6f75 e specified amou\n+00004a70: 6e74 0a20 2020 206f 6620 7469 6d65 2e20 nt. of time. \n+00004a80: 5468 6973 2069 7320 6c69 6b65 2061 2064 This is like a d\n+00004a90: 6566 6175 6c74 2076 616c 7565 2066 6f72 efault value for\n+00004aa0: 2061 6c6c 2064 6179 7320 696e 0a20 2020 all days in. \n+00004ab0: 202d 2d6b 6565 7057 6565 6b64 6179 2e20 --keepWeekday. \n+00004ac0: 4265 6769 6e73 2064 656c 6574 696e 6720 Begins deleting \n+00004ad0: 6174 2074 6865 2065 6e64 206f 6620 7468 at the end of th\n+00004ae0: 6520 7363 7269 7074 0a20 2020 2074 6865 e script. the\n+00004af0: 2074 696d 6520 7261 6e67 6520 6861 7320 time range has \n+00004b00: 746f 2062 6520 7370 6563 6966 6965 6420 to be specified \n+00004b10: 696e 2066 6f72 6d61 7420 2764 686d 7327 in format 'dhms'\n+00004b20: 2c20 652e 672e 0a20 2020 2020 2031 3064 , e.g.. 10d\n+00004b30: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days\n+00004b40: 2061 6e64 2034 2068 6f75 7273 0a20 2020 and 4 hours. \n+00004b50: 2020 2064 6566 6175 6c74 203d 2032 3064 default = 20d\n+00004b60: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep\n+00004b70: 5765 656b 6461 793e 0a0a 2020 2020 6b65 Weekday>.. ke\n+00004b80: 6570 2062 6163 6b75 7073 2066 6f72 2074 ep backups for t\n+00004b90: 6865 2073 7065 6369 6669 6564 2064 6179 he specified day\n+00004ba0: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif\n+00004bb0: 6965 640a 2020 2020 616d 6f75 6e74 206f ied. amount o\n+00004bc0: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit\n+00004bd0: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v\n+00004be0: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in.\n+00004bf0: 2020 2020 2d2d 6b65 6570 416c 6c2e 2027 --keepAll. '\n+00004c00: 4d6f 6e2c 5765 643a 3430 6420 5361 743a Mon,Wed:40d Sat:\n+00004c10: 3630 6431 306d 2720 6d65 616e 733a 0a20 60d10m' means:. \n+00004c20: 2020 2020 206b 6565 7020 6261 636b 7570 keep backup\n+00004c30: 7320 6672 6f6d 204d 6f6e 2061 6e64 2057 s from Mon and W\n+00004c40: 6564 2034 3064 6179 7320 2b20 356d 696e ed 40days + 5min\n+00004c50: 730a 2020 2020 2020 6b65 6570 2062 6163 s. keep bac\n+00004c60: 6b75 7073 2066 726f 6d20 5361 7420 3630 kups from Sat 60\n+00004c70: 6461 7973 202b 2031 306d 696e 730a 2020 days + 10mins. \n+00004c80: 2020 2020 6b65 6570 2062 6163 6b75 7073 keep backups\n+00004c90: 2066 726f 6d20 7468 6520 7265 7374 206f from the rest o\n+00004ca0: 6620 7468 6520 6461 7973 206c 696b 6520 f the days like \n+00004cb0: 7370 6369 6669 6564 2069 6e0a 2020 2020 spcified in. \n+00004cc0: 2020 2d2d 6b65 6570 416c 6c20 2864 6566 --keepAll (def\n+00004cd0: 6175 6c74 2024 6b65 6570 416c 6c29 0a20 ault $keepAll). \n+00004ce0: 2020 2069 6620 796f 7520 616c 736f 2075 if you also u\n+00004cf0: 7365 2074 6865 2027 6172 6368 6976 6520 se the 'archive \n+00004d00: 666c 6167 2720 6974 206d 6561 6e73 2074 flag' it means t\n+00004d10: 6f20 6e6f 740a 2020 2020 6465 6c65 7465 o not. delete\n+00004d20: 2074 6865 2061 6666 6563 7465 6420 6469 the affected di\n+00004d30: 7265 6374 6f72 6965 7320 7669 6120 2d2d rectories via --\n+00004d40: 6b65 6570 4d61 784e 756d 6265 723a 0a20 keepMaxNumber:. \n+00004d50: 2020 2020 2061 3130 6434 6820 6d65 616e a10d4h mean\n+00004d60: 7320 3130 2064 6179 7320 616e 6420 3420 s 10 days and 4 \n+00004d70: 686f 7572 7320 616e 6420 2761 7263 6869 hours and 'archi\n+00004d80: 7665 2066 6c61 6727 0a20 2020 2065 2e67 ve flag'. e.g\n+00004d90: 2e20 274d 6f6e 2c57 6564 3a61 3430 6435 . 'Mon,Wed:a40d5\n+00004da0: 6d20 5361 743a 3630 6431 306d 2720 6d65 m Sat:60d10m' me\n+00004db0: 616e 733a 0a20 2020 2020 206b 6565 7020 ans:. keep \n+00004dc0: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon\n+00004dd0: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days \n+00004de0: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi\n+00004df0: 7665 270a 2020 2020 2020 6b65 6570 2062 ve'. keep b\n+00004e00: 6163 6b75 7073 2066 726f 6d20 5361 7420 ackups from Sat \n+00004e10: 3630 6461 7973 202b 2031 306d 696e 730a 60days + 10mins.\n+00004e20: 2020 2020 2020 6b65 6570 2062 6163 6b75 keep backu\n+00004e30: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest\n+00004e40: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik\n+00004e50: 6520 7370 6563 6966 6965 6420 696e 0a20 e specified in. \n+00004e60: 2020 2020 202d 2d6b 6565 7041 6c6c 2028 --keepAll (\n+00004e70: 6465 6661 756c 7420 3330 6429 0a0a 3d69 default 30d)..=i\n+00004e80: 7465 6d20 423c 2d2d 6b65 6570 4669 7273 tem B<--keepFirs\n+00004e90: 744f 6659 6561 723e 0a0a 2020 2020 646f tOfYear>.. do\n+00004ea0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the \n+00004eb0: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of \n+00004ec0: 6120 7965 6172 0a20 2020 2066 6f72 6d61 a year. forma\n+00004ed0: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n+00004ee0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n+00004ef0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n+00004f00: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast\n+00004f10: 4f66 5965 6172 3e0a 0a20 2020 2064 6f20 OfYear>.. do \n+00004f20: 6e6f 7420 6465 6c65 7465 2074 6865 206c not delete the l\n+00004f30: 6173 7420 6261 636b 7570 206f 6620 6120 ast backup of a \n+00004f40: 7965 6172 0a20 2020 2066 6f72 6d61 7420 year. format \n+00004f50: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi\n+00004f60: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc\n+00004f70: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite\n+00004f80: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO\n+00004f90: 664d 6f6e 7468 3e0a 0a20 2020 2064 6f20 fMonth>.. do \n+00004fa0: 6e6f 7420 6465 6c65 7465 2074 6865 2066 not delete the f\n+00004fb0: 6972 7374 2062 6163 6b75 7020 6f66 2061 irst backup of a\n+00004fc0: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma\n+00004fd0: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n+00004fe0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n+00004ff0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n+00005000: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast\n+00005010: 4f66 4d6f 6e74 683e 0a0a 2020 2020 646f OfMonth>.. do\n+00005020: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the \n+00005030: 6c61 7374 2062 6163 6b75 7020 6f66 2061 last backup of a\n+00005040: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma\n+00005050: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n+00005060: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n+00005070: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n+00005080: 7465 6d20 423c 2d2d 6669 7273 7444 6179 tem B<--firstDay\n+00005090: 4f66 5765 656b 3e0a 0a20 2020 2064 6566 OfWeek>.. def\n+000050a0: 6175 6c74 3a20 2753 756e 272e 2054 6869 ault: 'Sun'. Thi\n+000050b0: 7320 7661 6c75 6520 6973 2075 7365 6420 s value is used \n+000050c0: 666f 7220 6361 6c63 756c 6174 696e 670a for calculating.\n+000050d0: 2020 2020 2d2d 6b65 6570 4669 7273 744f --keepFirstO\n+000050e0: 6657 6565 6b20 616e 6420 2d2d 6b65 6570 fWeek and --keep\n+000050f0: 4c61 7374 4f66 5765 656b 0a0a 3d69 7465 LastOfWeek..=ite\n+00005100: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO\n+00005110: 6657 6565 6b3e 0a0a 2020 2020 646f 206e fWeek>.. do n\n+00005120: 6f74 2064 656c 6574 6520 7468 6520 6669 ot delete the fi\n+00005130: 7273 7420 6261 636b 7570 206f 6620 6120 rst backup of a \n+00005140: 7765 656b 0a20 2020 2066 6f72 6d61 7420 week. format \n+00005150: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi\n+00005160: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc\n+00005170: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite\n+00005180: 6d20 423c 2d2d 6b65 6570 4c61 7374 4f66 m B<--keepLastOf\n+00005190: 5765 656b 3e0a 0a20 2020 2064 6f20 6e6f Week>.. do no\n+000051a0: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las\n+000051b0: 7420 6261 636b 7570 206f 6620 6120 7765 t backup of a we\n+000051c0: 656b 0a20 2020 2066 6f72 6d61 7420 6973 ek. format is\n+000051d0: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with\n+000051e0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi\n+000051f0: 7665 2066 6c61 6727 0a0a 3d69 7465 6d20 ve flag'..=item \n+00005200: 423c 2d2d 6b65 6570 4475 706c 6963 6174 B<--keepDuplicat\n+00005210: 653e 0a0a 2020 2020 6b65 6570 206d 756c e>.. keep mul\n+00005220: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of\n+00005230: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t\n+00005240: 696d 6550 6572 696f 640a 2020 2020 666f imePeriod. fo\n+00005250: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri\n+00005260: 6f64 2c20 2761 7263 6869 7665 2066 6c61 od, 'archive fla\n+00005270: 6727 2069 7320 6e6f 7420 706f 7373 6962 g' is not possib\n+00005280: 6c65 0a20 2020 2064 6566 6175 6c74 203d le. default =\n+00005290: 2037 640a 0a3d 6974 656d 2042 3c2d 2d6b 7d..=item B<--k\n+000052a0: 6565 704d 696e 4e75 6d62 6572 3e0a 0a20 eepMinNumber>.. \n+000052b0: 2020 204b 6565 7020 7468 6174 206d 696d Keep that mim\n+000052c0: 696e 756d 206f 6620 6261 636b 7570 732e inum of backups.\n+000052d0: 204d 756c 7469 706c 6520 6261 636b 7570 Multiple backup\n+000052e0: 7320 6f66 206f 6e65 0a20 2020 2064 6179 s of one. day\n+000052f0: 2061 7265 2063 6f75 6e74 6564 2061 7320 are counted as \n+00005300: 6f6e 6520 6261 636b 7570 2e20 4465 6661 one backup. Defa\n+00005310: 756c 7420 6973 2031 302e 0a0a 3d69 7465 ult is 10...=ite\n+00005320: 6d20 423c 2d2d 6b65 6570 4d61 784e 756d m B<--keepMaxNum\n+00005330: 6265 723e 0a0a 2020 2020 5472 7920 746f ber>.. Try to\n+00005340: 206b 6565 7020 6f6e 6c79 2074 6861 7420 keep only that \n+00005350: 6d61 7869 6d75 6d20 6f66 2062 6163 6b75 maximum of backu\n+00005360: 7073 2e20 4966 2079 6f75 2068 6176 6520 ps. If you have \n+00005370: 6d6f 7265 0a20 2020 2062 6163 6b75 7073 more. backups\n+00005380: 2c20 7468 6520 666f 6c6c 6f77 696e 6720 , the following \n+00005390: 7365 7175 656e 6365 206f 6620 6465 6c65 sequence of dele\n+000053a0: 7469 6e67 2077 696c 6c20 6861 7070 656e ting will happen\n+000053b0: 3a0a 2020 2020 2d20 6465 6c65 7465 2061 :. - delete a\n+000053c0: 6c6c 2064 7570 6c69 6361 7465 7320 6f66 ll duplicates of\n+000053d0: 2061 2064 6179 2c20 6265 6769 6e6e 696e a day, beginnin\n+000053e0: 6720 7769 7468 2074 6865 206f 6c64 0a20 g with the old. \n+000053f0: 2020 2020 206f 6e63 652c 2065 7863 6570 once, excep\n+00005400: 7420 7468 6520 6c61 7374 206f 6620 6576 t the last of ev\n+00005410: 6572 7920 6461 790a 2020 2020 2d20 6966 ery day. - if\n+00005420: 2074 6869 7320 6973 206e 6f74 2065 6e6f this is not eno\n+00005430: 7567 682c 2064 656c 6574 6520 7468 6520 ugh, delete the \n+00005440: 7265 7374 206f 6620 7468 6520 6261 636b rest of the back\n+00005450: 7570 730a 2020 2020 2020 6265 6769 6e6e ups. beginn\n+00005460: 696e 6720 7769 7468 2074 6865 206f 6c64 ing with the old\n+00005470: 6573 742c 2062 7574 202a 6e65 7665 722a est, but *never*\n+00005480: 2061 2062 6163 6b75 7020 7769 7468 0a20 a backup with. \n+00005490: 2020 2020 2074 6865 2027 6172 6368 6976 the 'archiv\n+000054a0: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l\n+000054b0: 6173 7420 6261 636b 7570 0a0a 3d69 7465 ast backup..=ite\n+000054c0: 6d20 423c 2d2d 6b65 6570 5265 6c61 7469 m B<--keepRelati\n+000054d0: 7665 3e2c 2042 3c2d 523e 0a0a 2020 2020 ve>, B<-R>.. \n+000054e0: 416c 7465 726e 6174 6976 6520 6465 6c65 Alternative dele\n+000054f0: 7469 6f6e 2073 6368 656d 652e 2049 6620 tion scheme. If \n+00005500: 796f 7520 7573 6520 7468 6973 206f 7074 you use this opt\n+00005510: 696f 6e2c 2061 6c6c 0a20 2020 206f 7468 ion, all. oth\n+00005520: 6572 206b 6565 7020 6f70 7469 6f6e 7320 er keep options \n+00005530: 6172 6520 6967 6e6f 7265 642e 2050 7265 are ignored. Pre\n+00005540: 7365 7276 6573 2062 6163 6b75 7073 2064 serves backups d\n+00005550: 6570 656e 6469 6e67 0a20 2020 206f 6e20 epending. on \n+00005560: 7468 6569 7220 2a72 656c 6174 6976 652a their *relative*\n+00005570: 2061 6765 2e20 4578 616d 706c 653a 0a20 age. Example:. \n+00005580: 2020 202d 5220 2731 6420 3764 2036 3164 -R '1d 7d 61d\n+00005590: 2039 3262 270a 2020 2020 7769 6c6c 2028 92b'. will (\n+000055a0: 7472 7920 746f 2920 656e 7375 7265 2074 try to) ensure t\n+000055b0: 6861 7420 7468 6572 6520 6973 2061 6c77 hat there is alw\n+000055c0: 6179 730a 2020 2020 2d20 4f6e 6520 6261 ays. - One ba\n+000055d0: 636b 7570 2062 6574 7765 656e 2031 2064 ckup between 1 d\n+000055e0: 6179 2061 6e64 2037 2064 6179 7320 6f6c ay and 7 days ol\n+000055f0: 640a 2020 2020 2d20 4f6e 6520 6261 636b d. - One back\n+00005600: 7570 2062 6574 7765 656e 2035 2064 6179 up between 5 day\n+00005610: 7320 616e 6420 3220 6d6f 6e74 6873 206f s and 2 months o\n+00005620: 6c64 0a20 2020 202d 204f 6e65 2062 6163 ld. - One bac\n+00005630: 6b75 7020 6265 7477 6565 6e20 7e32 206d kup between ~2 m\n+00005640: 6f6e 7468 7320 616e 6420 7e33 206d 6f6e onths and ~3 mon\n+00005650: 7468 7320 6f6c 640a 2020 2020 4966 2074 ths old. If t\n+00005660: 6865 7265 2069 7320 6e6f 2062 6163 6b75 here is no backu\n+00005670: 7020 666f 7220 6120 7370 6563 6966 6965 p for a specifie\n+00005680: 6420 7469 6d65 7370 616e 0a20 2020 2028 d timespan. (\n+00005690: 652e 672e 2062 6563 6175 7365 2074 6865 e.g. because the\n+000056a0: 206c 6173 7420 6261 636b 7570 2077 6173 last backup was\n+000056b0: 2064 6f6e 6520 6d6f 7265 2074 6861 6e20 done more than \n+000056c0: 3220 7765 656b 730a 2020 2020 6167 6f29 2 weeks. ago)\n+000056d0: 2074 6865 206e 6578 7420 6f6c 6465 7220 the next older \n+000056e0: 6261 636b 7570 2077 696c 6c20 6265 2075 backup will be u\n+000056f0: 7365 6420 666f 7220 7468 6973 2074 696d sed for this tim\n+00005700: 6573 7061 6e2e 0a0a 3d69 7465 6d20 423c espan...=item B<\n+00005710: 2d2d 7072 6f67 7265 7373 5265 706f 7274 --progressReport\n+00005720: 3e2c 2042 3c2d 503e 0a0a 2020 2020 7072 >, B<-P>.. pr\n+00005730: 696e 7420 7072 6f67 7265 7373 2072 6570 int progress rep\n+00005740: 6f72 7420 6166 7465 7220 6561 6368 2027 ort after each '\n+00005750: 6e75 6d62 6572 2720 6669 6c65 730a 0a3d number' files..=\n+00005760: 6974 656d 2042 3c2d 2d70 7269 6e74 4465 item B<--printDe\n+00005770: 7074 683e 2c20 423c 2d44 3e0a 0a20 2020 pth>, B<-D>.. \n+00005780: 2070 7269 6e74 2064 6570 7468 206f 6620 print depth of \n+00005790: 6163 7475 616c 2072 6561 6420 6469 7265 actual read dire\n+000057a0: 6374 6f72 7920 6475 7269 6e67 2062 6163 ctory during bac\n+000057b0: 6b75 700a 0a3d 6974 656d 2042 3c2d 2d69 kup..=item B<--i\n+000057c0: 676e 6f72 6552 6561 6445 7272 6f72 3e0a gnoreReadError>.\n+000057d0: 0a20 2020 2069 676e 6f72 6520 7265 6164 . ignore read\n+000057e0: 2065 7272 6f72 7320 696e 2073 6f75 7263 errors in sourc\n+000057f0: 6520 6469 7265 6374 6f72 793b 206e 6f74 e directory; not\n+00005800: 2072 6561 6461 626c 650a 2020 2020 6469 readable. di\n+00005810: 7265 6374 6f72 6965 7320 646f 206e 6f74 rectories do not\n+00005820: 2063 6175 7365 2073 746f 7265 4261 636b cause storeBack\n+00005830: 7570 2e70 6c20 746f 2073 746f 7020 7072 up.pl to stop pr\n+00005840: 6f63 6573 7369 6e67 0a0a 3d69 7465 6d20 ocessing..=item \n+00005850: 423c 2d2d 7375 7070 7265 7373 5761 726e B<--suppressWarn\n+00005860: 696e 673e 0a0a 2020 2020 7375 7070 7265 ing>.. suppre\n+00005870: 7373 2028 756e 7761 6e74 6564 2920 7761 ss (unwanted) wa\n+00005880: 726e 696e 6773 2069 6e20 7468 6520 6c6f rnings in the lo\n+00005890: 6720 6669 6c65 733b 0a20 2020 2074 6f20 g files;. to \n+000058a0: 7375 7070 7265 7373 2077 6172 6e69 6e67 suppress warning\n+000058b0: 732c 2074 6865 2066 6f6c 6c6f 7769 6e67 s, the following\n+000058c0: 206b 6579 7320 6361 6e20 6265 2075 7365 keys can be use\n+000058d0: 643a 0a20 2020 2020 2065 7863 4469 7220 d:. excDir \n+000058e0: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the \n+000058f0: 7761 726e 696e 6720 7468 6174 2065 7863 warning that exc\n+00005900: 6c75 6465 6420 6469 7265 6374 6f72 6965 luded directorie\n+00005910: 730a 2020 2020 2020 2020 2020 2020 2064 s. d\n+00005920: 6f20 6e6f 7420 6578 6973 7429 0a20 2020 o not exist). \n+00005930: 2020 2066 696c 6543 6861 6e67 6520 2873 fileChange (s\n+00005940: 7570 7072 6573 7365 7320 7468 6520 7761 uppresses the wa\n+00005950: 726e 696e 6720 7468 6174 2061 2066 696c rning that a fil\n+00005960: 6520 6861 7320 6368 616e 6765 640a 2020 e has changed. \n+00005970: 2020 2020 2020 2020 2020 2020 2020 2064 d\n+00005980: 7572 696e 6720 7468 6520 6261 636b 7570 uring the backup\n+00005990: 290a 2020 2020 2020 6372 5365 7269 6573 ). crSeries\n+000059a0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n+000059b0: 2077 6172 6e69 6e67 2074 6861 7420 7374 warning that st\n+000059c0: 6f72 6542 6163 6b75 7020 6861 6420 746f oreBackup had to\n+000059d0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+000059e0: 6372 6561 7465 2074 6865 2027 6465 6661 create the 'defa\n+000059f0: 756c 7427 2073 6572 6965 7329 0a20 2020 ult' series). \n+00005a00: 2020 2068 6173 6843 6f6c 6c69 7369 6f6e hashCollision\n+00005a10: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n+00005a20: 2077 6172 6e69 6e67 2069 6620 6120 706f warning if a po\n+00005a30: 7373 6962 6c65 0a20 2020 2020 2020 2020 ssible. \n+00005a40: 2020 2020 2020 2020 2020 2068 6173 6820 hash \n+00005a50: 636f 6c6c 6973 696f 6e20 6973 2064 6574 collision is det\n+00005a60: 6563 7465 6429 0a20 2020 2020 6669 6c65 ected). file\n+00005a70: 4e61 6d65 5769 7468 4c69 6e65 4665 6564 NameWithLineFeed\n+00005a80: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n+00005a90: 2077 6172 6e69 6e67 2069 6620 6120 6669 warning if a fi\n+00005aa0: 6c65 6e61 6d65 0a20 2020 2020 2020 2020 lename. \n+00005ab0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00005ac0: 2063 6f6e 7461 696e 7320 6120 6c69 6e65 contains a line\n+00005ad0: 2066 6565 6429 0a20 2020 2054 6869 7320 feed). This \n+00005ae0: 6f70 7469 6f6e 2063 616e 2062 6520 7265 option can be re\n+00005af0: 7065 6174 6564 206d 756c 7469 706c 6520 peated multiple \n+00005b00: 7469 6d65 7320 6f6e 2074 6865 2063 6f6d times on the com\n+00005b10: 6d61 6e64 206c 696e 652e 0a0a 3d69 7465 mand line...=ite\n+00005b20: 6d20 423c 2d2d 6c69 6e6b 546f 5265 6365 m B<--linkToRece\n+00005b30: 6e74 3e0a 0a20 2020 2061 6674 6572 2061 nt>.. after a\n+00005b40: 2073 7563 6365 7373 6675 6c20 6261 636b successful back\n+00005b50: 7570 2c20 7365 7420 6120 7379 6d62 6f6c up, set a symbol\n+00005b60: 6963 206c 696e 6b20 746f 0a20 2020 2074 ic link to. t\n+00005b70: 6861 7420 6261 636b 7570 2061 6e64 2064 hat backup and d\n+00005b80: 656c 6574 6520 6578 6973 7469 6e67 206f elete existing o\n+00005b90: 6c64 6572 206c 696e 6b73 2077 6974 6820 lder links with \n+00005ba0: 7468 650a 2020 2020 7361 6d65 206e 616d the. same nam\n+00005bb0: 650a 0a3d 6974 656d 2042 3c2d 2d6c 6f67 e..=item B<--log\n+00005bc0: 4669 6c65 3e2c 2042 3c2d 6c3e 0a0a 2020 File>, B<-l>.. \n+00005bd0: 2020 6c6f 6720 6669 6c65 2028 6465 6661 log file (defa\n+00005be0: 756c 7420 6973 2053 5444 4f55 5429 0a0a ult is STDOUT)..\n+00005bf0: 3d69 7465 6d20 423c 2d2d 706c 7573 4c6f =item B<--plusLo\n+00005c00: 6753 7464 6f75 743e 0a0a 2020 2020 6966 gStdout>.. if\n+00005c10: 2079 6f75 2073 7065 6369 6679 2061 206c you specify a l\n+00005c20: 6f67 2066 696c 6520 7769 7468 202d 2d6c og file with --l\n+00005c30: 6f67 4669 6c65 2079 6f75 2063 616e 0a20 ogFile you can. \n+00005c40: 2020 2061 6464 6974 696f 6e61 6c6c 7920 additionally \n+00005c50: 7072 696e 7420 7468 6520 6f75 7470 7574 print the output\n+00005c60: 2074 6f20 5354 444f 5554 2077 6974 6820 to STDOUT with \n+00005c70: 7468 6973 2066 6c61 670a 0a3d 6974 656d this flag..=item\n+00005c80: 2042 3c2d 2d73 7570 7072 6573 7354 696d B<--suppressTim\n+00005c90: 653e 0a0a 2020 2020 7375 7070 7265 7373 e>.. suppress\n+00005ca0: 206f 7574 7075 7420 6f66 2074 696d 6520 output of time \n+00005cb0: 696e 206c 6f67 6669 6c65 0a0a 3d69 7465 in logfile..=ite\n+00005cc0: 6d20 423c 2d2d 6d61 7846 696c 656c 656e m B<--maxFilelen\n+00005cd0: 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 6d61 >, B<-m>.. ma\n+00005ce0: 7869 6d61 6c20 6c65 6e67 7468 206f 6620 ximal length of \n+00005cf0: 6c6f 6720 6669 6c65 2c20 6465 6661 756c log file, defaul\n+00005d00: 7420 3d20 3165 360a 0a3d 6974 656d 2042 t = 1e6..=item B\n+00005d10: 3c2d 2d6e 6f4f 664f 6c64 4669 6c65 733e <--noOfOldFiles>\n+00005d20: 2c20 423c 2d6e 3e0a 0a20 2020 206e 756d , B<-n>.. num\n+00005d30: 6265 7220 6f66 206f 6c64 206c 6f67 2066 ber of old log f\n+00005d40: 696c 6573 2c20 6465 6661 756c 7420 3d20 iles, default = \n+00005d50: 350a 0a3d 6974 656d 2042 3c2d 2d73 6176 5..=item B<--sav\n+00005d60: 654c 6f67 733e 0a0a 2020 2020 7361 7665 eLogs>.. save\n+00005d70: 206c 6f67 2066 696c 6573 2077 6974 6820 log files with \n+00005d80: 6461 7465 2061 6e64 2074 696d 6520 696e date and time in\n+00005d90: 7374 6561 6420 6f66 2064 656c 6574 696e stead of deletin\n+00005da0: 6720 7468 650a 2020 2020 6f6c 6420 2877 g the. old (w\n+00005db0: 6974 6820 5b2d 6e6f 4f6c 6446 696c 6573 ith [-noOldFiles\n+00005dc0: 5d29 0a0a 3d69 7465 6d20 423c 2d2d 636f ])..=item B<--co\n+00005dd0: 6d70 7265 7373 5769 7468 3e0a 0a20 2020 mpressWith>.. \n+00005de0: 2063 6f6d 7072 6573 7320 7361 7665 6420 compress saved \n+00005df0: 6c6f 6720 6669 6c65 7320 2865 2e67 2e20 log files (e.g. \n+00005e00: 7769 7468 2027 677a 6970 202d 3927 290a with 'gzip -9').\n+00005e10: 2020 2020 6465 6661 756c 7420 6973 2027 default is '\n+00005e20: 627a 6970 3227 0a20 2020 2054 6869 7320 bzip2'. This \n+00005e30: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par\n+00005e40: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line \n+00005e50: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura\n+00005e60: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an\n+00005e70: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t\n+00005e80: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i\n+00005e90: 7465 6d20 423c 2d2d 6c6f 6749 6e42 6163 tem B<--logInBac\n+00005ea0: 6b75 7044 6972 3e0a 0a20 2020 2077 7269 kupDir>.. wri\n+00005eb0: 7465 206c 6f67 2066 696c 6520 2861 6c73 te log file (als\n+00005ec0: 6f29 2069 6e20 7468 6520 6261 636b 7570 o) in the backup\n+00005ed0: 2064 6972 6563 746f 7279 0a20 2020 2042 directory. B\n+00005ee0: 6520 6177 6172 6520 7468 6174 2074 6869 e aware that thi\n+00005ef0: 7320 6c6f 6720 646f 6573 206e 6f74 2063 s log does not c\n+00005f00: 6f6e 7461 696e 2061 6c6c 2065 7272 6f72 ontain all error\n+00005f10: 0a20 2020 206d 6573 7361 6765 7320 6f66 . messages of\n+00005f20: 2074 6865 206f 6e65 2073 7065 6369 6669 the one specifi\n+00005f30: 6564 2077 6974 6820 2d2d 6c6f 6746 696c ed with --logFil\n+00005f40: 6521 0a0a 3d69 7465 6d20 423c 2d2d 636f e!..=item B<--co\n+00005f50: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku\n+00005f60: 7044 6972 3e0a 0a20 2020 2063 6f6d 7072 pDir>.. compr\n+00005f70: 6573 7320 7468 6520 6c6f 6720 6669 6c65 ess the log file\n+00005f80: 2069 6e20 7468 6520 6261 636b 7570 2064 in the backup d\n+00005f90: 6972 6563 746f 7279 0a0a 3d69 7465 6d20 irectory..=item \n+00005fa0: 423c 2d2d 6c6f 6749 6e42 6163 6b75 7044 B<--logInBackupD\n+00005fb0: 6972 4669 6c65 4e61 6d65 3e0a 0a20 2020 irFileName>.. \n+00005fc0: 2066 696c 656e 616d 6520 746f 2075 7365 filename to use\n+00005fd0: 2066 6f72 2077 7269 7469 6e67 2074 6865 for writing the\n+00005fe0: 2061 626f 7665 206c 6f67 2066 696c 652c above log file,\n+00005ff0: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is \n+00006000: 2e73 746f 7265 4261 636b 7570 2e6c 6f67 .storeBackup.log\n+00006010: 0a0a 3d69 7465 6d20 423c 6f74 6865 7242 ..=item B.. \n+00006030: 2020 4c69 7374 206f 6620 6f74 6865 7220 List of other \n+00006040: 6261 636b 7570 2073 6572 6965 7320 746f backup series to\n+00006050: 2063 6f6e 7369 6465 7220 666f 720a 2020 consider for. \n+00006060: 2020 6861 7264 206c 696e 6b69 6e67 2e20 hard linking. \n+00006070: 5265 6c61 7469 7665 2070 6174 6820 6672 Relative path fr\n+00006080: 6f6d 2062 6163 6b75 7044 6972 210a 2020 om backupDir!. \n+00006090: 2020 466f 726d 6174 2028 6578 616d 706c Format (exampl\n+000060a0: 6573 293a 0a20 2020 2062 6163 6b75 7053 es):. backupS\n+000060b0: 6572 6965 732f 3230 3032 2e30 382e 3239 eries/2002.08.29\n+000060c0: 5f30 382e 3235 2e32 3820 2d3e 2063 6f6e _08.25.28 -> con\n+000060d0: 7369 6465 7220 7468 6973 2062 6163 6b75 sider this backu\n+000060e0: 700a 2020 2020 6f72 0a20 2020 2030 3a62 p. or. 0:b\n+000060f0: 6163 6b75 7053 6572 6965 7320 2d3e 6c61 ackupSeries ->la\n+00006100: 7374 2028 796f 756e 6765 7374 2920 696e st (youngest) in\n+00006110: 203c 6261 636b 7570 4469 723e 2f62 6163 /bac\n+00006120: 6b75 7053 6572 6965 730a 2020 2020 313a kupSeries. 1:\n+00006130: 6261 636b 7570 5365 7269 6573 202d 3e6f backupSeries ->o\n+00006140: 6e65 2062 6566 6f72 6520 6c61 7374 2069 ne before last i\n+00006150: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba\n+00006160: 636b 7570 5365 7269 6573 0a20 2020 206e ckupSeries. n\n+00006170: 3a62 6163 6b75 7053 6572 6965 7320 2d3e :backupSeries ->\n+00006180: 0a20 2020 2020 206e 2774 6820 6265 666f . n'th befo\n+00006190: 7265 206c 6173 7420 696e 203c 6261 636b re last in /backupSer\n+000061b0: 6965 730a 2020 2020 332d 353a 6261 636b ies. 3-5:back\n+000061c0: 7570 5365 7269 6573 202d 3e0a 2020 2020 upSeries ->. \n+000061d0: 2020 3372 642c 2034 7468 2061 6e64 2035 3rd, 4th and 5\n+000061e0: 7468 2069 6e20 3c62 6163 6b75 7044 6972 th in /backupSeries. \n+00006200: 2020 2061 6c6c 3a62 6163 6b75 7053 6572 all:backupSer\n+00006210: 6965 7320 2d3e 2061 6c6c 2069 6e20 3c62 ies -> all in /backup\n+00006230: 5365 7269 6573 0a20 2020 2064 6566 6175 Series. defau\n+00006240: 6c74 2069 7320 746f 206c 696e 6b20 746f lt is to link to\n+00006250: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup\n+00006260: 2069 6e20 6576 6572 7920 7365 7269 6573 in every series\n+00006270: 0a0a 3d62 6163 6b0a 0a3d 6865 6164 3120 ..=back..=head1 \n+00006280: 434f 5059 5249 4748 540a 0a43 6f70 7972 COPYRIGHT..Copyr\n+00006290: 6967 6874 2028 6329 2032 3030 302c 3230 ight (c) 2000,20\n+000062a0: 3034 2c32 3030 382d 3230 3039 2c32 3031 04,2008-2009,201\n+000062b0: 3220 6279 2048 6569 6e7a 2d4a 6f73 6566 2 by Heinz-Josef\n+000062c0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ\n+000062d0: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u\n+000062e0: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen\n+000062f0: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00006300: 6e73 6520 6f72 2061 6e79 206c 6174 6572 nse or any later\n+00006310: 2076 6572 7369 6f6e 2e0a 0a3d 6375 740a version...=cut.\n+00006320: 0a23 2323 2323 2323 2323 2323 2069 6e73 .########### ins\n+00006330: 6572 7420 6162 6f76 650a 2309 2020 2020 ert above.#. \n+00006340: 2020 5b2d 2d73 6176 6552 414d 5d20 5b2d [--saveRAM] [-\n+00006350: 6320 636f 6d70 7265 7373 5d20 5b2d 7520 c compress] [-u \n+00006360: 756e 636f 6d70 7265 7373 5d20 5b2d 7020 uncompress] [-p \n+00006370: 706f 7374 6669 785d 0a23 0920 2020 2020 postfix].#. \n+00006380: 205b 2d2d 636f 6d70 7265 7373 3020 636f [--compress0 co\n+00006390: 6d70 7265 7373 205b 2d2d 756e 636f 6d70 mpress [--uncomp\n+000063a0: 7265 7373 3020 756e 636f 6d70 7265 7373 ress0 uncompress\n+000063b0: 5d0a 2309 2020 2020 2020 205b 2d2d 706f ].#. [--po\n+000063c0: 7374 6669 7830 2070 6f73 7466 6978 5d20 stfix0 postfix] \n+000063d0: 5b2d 2d63 6f6d 7072 6573 7352 756c 6530 [--compressRule0\n+000063e0: 5d5d 0a23 0920 2020 2020 205b 2d2d 636f ]].#. [--co\n+000063f0: 6d70 7265 7373 3120 636f 6d70 7265 7373 mpress1 compress\n+00006400: 205b 2d2d 756e 636f 6d70 7265 7373 3120 [--uncompress1 \n+00006410: 756e 636f 6d70 7265 7373 5d0a 2309 2020 uncompress].#. \n+00006420: 2020 2020 205b 2d2d 706f 7374 6669 7831 [--postfix1\n+00006430: 2070 6f73 7466 6978 5d20 5b2d 2d63 6f6d postfix] [--com\n+00006440: 7072 6573 7352 756c 6531 5d5d 0a23 0920 pressRule1]].#. \n+00006450: 2020 2020 205b 2d2d 636f 6d70 7265 7373 [--compress\n+00006460: 3220 636f 6d70 7265 7373 205b 2d2d 756e 2 compress [--un\n+00006470: 636f 6d70 7265 7373 3220 756e 636f 6d70 compress2 uncomp\n+00006480: 7265 7373 5d0a 2309 2020 2020 2020 205b ress].#. [\n+00006490: 2d2d 706f 7374 6669 7832 2070 6f73 7466 --postfix2 postf\n+000064a0: 6978 5d20 5b2d 2d63 6f6d 7072 6573 7352 ix] [--compressR\n+000064b0: 756c 6532 5d5d 0a23 0920 2020 2020 205b ule2]].#. [\n+000064c0: 2d2d 636f 6d70 7265 7373 3320 636f 6d70 --compress3 comp\n+000064d0: 7265 7373 205b 2d2d 756e 636f 6d70 7265 ress [--uncompre\n+000064e0: 7373 3320 756e 636f 6d70 7265 7373 5d0a ss3 uncompress].\n+000064f0: 2309 2020 2020 2020 205b 2d2d 706f 7374 #. [--post\n+00006500: 6669 7833 2070 6f73 7466 6978 5d20 5b2d fix3 postfix] [-\n+00006510: 2d63 6f6d 7072 6573 7352 756c 6533 5d5d -compressRule3]]\n+00006520: 0a23 0920 2020 2020 205b 2d2d 636f 6d70 .#. [--comp\n+00006530: 7265 7373 3420 636f 6d70 7265 7373 205b ress4 compress [\n+00006540: 2d2d 756e 636f 6d70 7265 7373 3420 756e --uncompress4 un\n+00006550: 636f 6d70 7265 7373 5d0a 2309 2020 2020 compress].#. \n+00006560: 2020 205b 2d2d 706f 7374 6669 7834 2070 [--postfix4 p\n+00006570: 6f73 7466 6978 5d20 5b2d 2d63 6f6d 7072 ostfix] [--compr\n+00006580: 6573 7352 756c 6534 5d5d 0a23 0920 2020 essRule4]].#. \n+00006590: 2020 205b 2d2d 6e6f 436f 6d70 7265 7373 [--noCompress\n+000065a0: 206e 756d 6265 725d 205b 2d2d 7175 6575 number] [--queu\n+000065b0: 6543 6f6d 7072 6573 7320 6e75 6d62 6572 eCompress number\n+000065c0: 5d0a 0a23 3d69 7465 6d20 423c 2d2d 706f ]..#=item B<--po\n+000065d0: 7374 6669 783e 2c20 423c 2d70 3e0a 230a stfix>, B<-p>.#.\n+000065e0: 2320 2020 2070 6f73 7466 6978 2074 6f20 # postfix to \n+000065f0: 6164 6420 6166 7465 7220 636f 6d70 7265 add after compre\n+00006600: 7373 696f 6e2c 2064 6566 6175 6c74 2069 ssion, default i\n+00006610: 7320 3c2e 627a 323e 0a23 0a23 3d69 7465 s <.bz2>.#.#=ite\n+00006620: 6d20 423c 2d2d 636f 6d70 7265 7373 303e m B<--compress0>\n+00006630: 0a23 0a23 2020 2020 2020 636f 6d70 7265 .#.# compre\n+00006640: 7373 2063 6f6d 6d61 6e64 2028 7769 7468 ss command (with\n+00006650: 206f 7074 696f 6e73 290a 2320 2020 2020 options).# \n+00006660: 2073 6565 202d 2d63 6f6d 7072 6573 7352 see --compressR\n+00006670: 756c 6530 2062 656c 6f77 0a23 0a23 3d69 ule0 below.#.#=i\n+00006680: 7465 6d20 423c 2d2d 756e 636f 6d70 7265 tem B<--uncompre\n+00006690: 7373 303e 0a23 0a23 2020 2020 2020 756e ss0>.#.# un\n+000066a0: 636f 6d70 7265 7373 2063 6f6d 6d61 6e64 compress command\n+000066b0: 2028 7769 7468 206f 7074 696f 6e73 292c (with options),\n+000066c0: 206d 7573 7420 6669 7420 746f 202d 2d63 must fit to --c\n+000066d0: 6f6d 7072 6573 7330 0a23 2020 2020 2020 ompress0.# \n+000066e0: 7365 6520 2d2d 636f 6d70 7265 7373 5275 see --compressRu\n+000066f0: 6c65 3020 6265 6c6f 770a 230a 233d 6974 le0 below.#.#=it\n+00006700: 656d 2042 3c2d 2d70 6f73 7466 6978 303e em B<--postfix0>\n+00006710: 0a23 0a23 2020 2020 2020 706f 7374 6669 .#.# postfi\n+00006720: 7820 666f 7220 636f 6d6d 616e 6420 7175 x for command qu\n+00006730: 6f74 6564 2061 7420 2d2d 636f 6d70 7265 oted at --compre\n+00006740: 7373 300a 2320 2020 2020 2073 6565 202d ss0.# see -\n+00006750: 2d63 6f6d 7072 6573 7352 756c 6530 2062 -compressRule0 b\n+00006760: 656c 6f77 0a23 0a23 3d69 7465 6d20 423c elow.#.#=item B<\n+00006770: 2d2d 636f 6d70 7265 7373 5275 6c65 303e --compressRule0>\n+00006780: 0a23 0a23 2020 2020 2020 5275 6c65 2066 .#.# Rule f\n+00006790: 6f72 2063 616c 6c69 6e67 2061 6e20 6578 or calling an ex\n+000067a0: 7465 726e 616c 2070 726f 6772 616d 206f ternal program o\n+000067b0: 6e20 6561 6368 2066 696c 652e 0a23 2020 n each file..# \n+000067c0: 2020 2020 5468 6973 2063 616e 2062 6520 This can be \n+000067d0: 646f 6e65 2077 6974 6820 6469 6666 6572 done with differ\n+000067e0: 656e 7420 636f 6d70 7265 7373 696f 6e20 ent compression \n+000067f0: 7072 6f67 7261 6d73 206f 720a 2320 2020 programs or.# \n+00006800: 2020 2065 672e 2077 6974 6820 656e 6372 eg. with encr\n+00006810: 7970 7469 6f6e 2070 726f 6772 616d 732e yption programs.\n+00006820: 0a23 2020 2020 2020 5468 6520 7275 6c65 .# The rule\n+00006830: 7320 6172 6520 6f70 6572 6174 6564 2066 s are operated f\n+00006840: 726f 6d20 7275 6c65 2030 2074 6f20 7275 rom rule 0 to ru\n+00006850: 6c65 2034 202d 2069 6620 6e6f 6e65 0a23 le 4 - if none.#\n+00006860: 2020 2020 2020 6f66 2074 6865 7365 2072 of these r\n+00006870: 756c 6573 2066 6974 732c 202d 2d63 6f6d ules fits, --com\n+00006880: 7072 6573 7320 7768 6963 6820 6465 7065 press which depe\n+00006890: 6e64 7320 6f6e 0a23 2020 2020 2020 2d2d nds on.# --\n+000068a0: 6578 6365 7074 5375 6666 6978 2c20 2d2d exceptSuffix, --\n+000068b0: 6164 6445 7863 6570 7453 7566 6669 7820 addExceptSuffix \n+000068c0: 6f72 2063 6f6d 7072 5275 6c65 2069 7320 or comprRule is \n+000068d0: 7573 6564 2e0a 230a 233d 6974 656d 2042 used..#.#=item B\n+000068e0: 3c2d 2d63 6f6d 7072 6573 7331 3e0a 230a <--compress1>.#.\n+000068f0: 233d 6974 656d 2042 3c2d 2d75 6e63 6f6d #=item B<--uncom\n+00006900: 7072 6573 7331 3e0a 230a 233d 6974 656d press1>.#.#=item\n+00006910: 2042 3c2d 2d70 6f73 7466 6978 313e 0a23 B<--postfix1>.#\n+00006920: 0a23 3d69 7465 6d20 423c 2d2d 636f 6d70 .#=item B<--comp\n+00006930: 7265 7373 5275 6c65 313e 0a23 0a23 3d69 ressRule1>.#.#=i\n+00006940: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress\n+00006950: 323e 0a23 0a23 3d69 7465 6d20 423c 2d2d 2>.#.#=item B<--\n+00006960: 756e 636f 6d70 7265 7373 323e 0a23 0a23 uncompress2>.#.#\n+00006970: 3d69 7465 6d20 423c 2d2d 706f 7374 6669 =item B<--postfi\n+00006980: 7832 3e0a 230a 233d 6974 656d 2042 3c2d x2>.#.#=item B<-\n+00006990: 2d63 6f6d 7072 6573 7352 756c 6532 3e0a -compressRule2>.\n+000069a0: 230a 233d 6974 656d 2042 3c2d 2d63 6f6d #.#=item B<--com\n+000069b0: 7072 6573 7333 3e0a 230a 233d 6974 656d press3>.#.#=item\n+000069c0: 2042 3c2d 2d75 6e63 6f6d 7072 6573 7333 B<--uncompress3\n+000069d0: 3e0a 230a 233d 6974 656d 2042 3c2d 2d70 >.#.#=item B<--p\n+000069e0: 6f73 7466 6978 333e 0a23 0a23 3d69 7465 ostfix3>.#.#=ite\n+000069f0: 6d20 423c 2d2d 636f 6d70 7265 7373 5275 m B<--compressRu\n+00006a00: 6c65 333e 0a23 0a23 3d69 7465 6d20 423c le3>.#.#=item B<\n+00006a10: 2d2d 636f 6d70 7265 7373 343e 0a23 0a23 --compress4>.#.#\n+00006a20: 3d69 7465 6d20 423c 2d2d 756e 636f 6d70 =item B<--uncomp\n+00006a30: 7265 7373 343e 0a23 0a23 3d69 7465 6d20 ress4>.#.#=item \n+00006a40: 423c 2d2d 706f 7374 6669 7834 3e0a 230a B<--postfix4>.#.\n+00006a50: 233d 6974 656d 2042 3c2d 2d63 6f6d 7072 #=item B<--compr\n+00006a60: 6573 7352 756c 6534 3e0a 230a 233d 6974 essRule4>.#.#=it\n+00006a70: 656d 2042 3c2d 2d65 7863 6570 7453 7566 em B<--exceptSuf\n+00006a80: 6669 783e 0a0a 2323 2323 2323 2323 2323 fix>..##########\n+00006a90: 230a 0a6d 7920 2448 656c 7020 3d20 3c3c #..my $Help = <<\n+00006aa0: 454f 483b 0a74 7279 2027 2470 726f 6720 EOH;.try '$prog \n+00006ab0: 2d2d 6865 6c70 2720 746f 2067 6574 2061 --help' to get a\n+00006ac0: 2064 6573 6372 6970 7469 6f6e 206f 6620 description of \n+00006ad0: 7468 6520 6f70 7469 6f6e 732e 0a45 4f48 the options..EOH\n+00006ae0: 0a20 2020 203b 0a23 2027 0a0a 6d79 2024 . ;.# '..my $\n+00006af0: 4675 6c6c 4865 6c70 203d 206a 6f69 6e28 FullHelp = join(\n+00006b00: 2727 2c20 6772 6570 2821 2f5e 5c73 2a24 '', grep(!/^\\s*$\n+00006b10: 2f2c 2060 706f 6432 7465 7874 2024 3060 /, `pod2text $0`\n+00006b20: 2929 3b0a 2446 756c 6c48 656c 7020 3d20 ));.$FullHelp = \n+00006b30: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 \"cannot find pod\n+00006b40: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum\n+00006b50: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det\n+00006b60: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\\n\". unle\n+00006b70: 7373 2024 4865 6c70 3b0a 0a0a 6d79 2024 ss $Help;...my $\n+00006b80: 626c 6f63 6b52 756c 6573 4865 6c70 203d blockRulesHelp =\n+00006b90: 203c 3c45 4f48 3b0a 2320 4669 6c65 7320 < &::SIZE(\"3M\")\n+00006cb0: 2720 616e 6420 275c 2475 6964 2065 7120 ' and '\\$uid eq \n+00006cc0: 2268 6a63 2227 2029 206f 720a 2320 2020 \"hjc\"' ) or.# \n+00006cd0: 2028 2027 5c24 6d74 696d 6520 3e20 263a ( '\\$mtime > &:\n+00006ce0: 3a44 4154 4528 2233 6434 6822 2927 2061 :DATE(\"3d4h\")' a\n+00006cf0: 6e64 206e 6f74 2027 5c24 6669 6c65 203d nd not '\\$file =\n+00006d00: 7e20 6d23 2f74 6d70 2f23 2720 2927 0a3b ~ m#/tmp/#' )'.;\n+00006d10: 6368 6563 6b42 6c6f 636b 7352 756c 6530 checkBlocksRule0\n+00006d20: 3d0a 0a23 2042 6c6f 636b 2073 697a 6520 =..# Block size \n+00006d30: 666f 7220 6f70 7469 6f6e 2063 6865 636b for option check\n+00006d40: 426c 6f63 6b73 5275 6c65 0a23 2064 6566 BlocksRule.# def\n+00006d50: 6175 6c74 2069 7320 2463 6865 636b 426c ault is $checkBl\n+00006d60: 6f63 6b73 4253 6465 6661 756c 7420 2831 ocksBSdefault (1\n+00006d70: 206d 6567 6162 7974 6529 0a3b 6368 6563 megabyte).;chec\n+00006d80: 6b42 6c6f 636b 7342 5330 3d0a 0a23 2069 kBlocksBS0=..# i\n+00006d90: 6620 7365 7420 746f 2027 7965 7327 2c20 f set to 'yes', \n+00006da0: 626c 6f63 6b73 2067 656e 6572 6174 6564 blocks generated\n+00006db0: 2064 7565 2074 6f20 7468 6973 2072 756c due to this rul\n+00006dc0: 6520 7769 6c6c 2062 6520 636f 6d70 7265 e will be compre\n+00006dd0: 7373 6564 0a23 2070 6f73 7369 626c 6520 ssed.# possible \n+00006de0: 7661 6c75 6573 3a20 2779 6573 2720 6f72 values: 'yes' or\n+00006df0: 2027 6e6f 272c 2064 6566 6175 6c74 2069 'no', default i\n+00006e00: 7320 276e 6f27 0a3b 6368 6563 6b42 6c6f s 'no'.;checkBlo\n+00006e10: 636b 7343 6f6d 7072 303d 0a0a 2320 4669 cksCompr0=..# Fi\n+00006e20: 6c74 6572 2066 6f72 2072 6561 6469 6e67 lter for reading\n+00006e30: 2074 6865 2066 696c 6520 746f 2074 7265 the file to tre\n+00006e40: 6174 2061 7320 6120 626c 6f63 6b65 6420 at as a blocked \n+00006e50: 6669 6c65 0a23 2065 672e 2020 2067 7a69 file.# eg. gzi\n+00006e60: 7020 2d64 2020 2069 6620 7468 6520 6669 p -d if the fi\n+00006e70: 6c65 2069 7320 636f 6d70 7265 7373 6564 le is compressed\n+00006e80: 2e20 4465 6661 756c 7420 6973 206e 6f20 . Default is no \n+00006e90: 7265 6164 2066 696c 7465 722e 0a3b 6368 read filter..;ch\n+00006ea0: 6563 6b42 6c6f 636b 7352 6561 6430 3d0a eckBlocksRead0=.\n+00006eb0: 0a23 2052 6561 6420 6669 6c65 7320 7370 .# Read files sp\n+00006ec0: 6563 6966 6965 6420 6865 7265 2069 6e20 ecified here in \n+00006ed0: 7061 7261 6c6c 656c 2074 6f20 226e 6f72 parallel to \"nor\n+00006ee0: 6d61 6c22 206f 6e65 732e 0a23 2054 6869 mal\" ones..# Thi\n+00006ef0: 7320 6f6e 6c79 206d 616b 6573 2073 656e s only makes sen\n+00006f00: 7365 2069 6620 7468 6579 2061 7265 206f se if they are o\n+00006f10: 6e20 6120 6469 6666 6572 656e 7420 6469 n a different di\n+00006f20: 736b 2e0a 2320 4465 6661 756c 7420 7661 sk..# Default va\n+00006f30: 6c75 6520 6973 2027 6e6f 270a 3b63 6865 lue is 'no'.;che\n+00006f40: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel\n+00006f50: 303d 0a0a 454f 480a 2020 2020 3b0a 7b0a 0=..EOH. ;.{.\n+00006f60: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f\n+00006f70: 6f72 6561 6368 2024 6920 2831 2e2e 246e oreach $i (1..$n\n+00006f80: 6f42 6c6f 636b 5275 6c65 732d 3129 0a20 oBlockRules-1). \n+00006f90: 2020 207b 0a09 2462 6c6f 636b 5275 6c65 {..$blockRule\n+00006fa0: 7348 656c 7020 2e3d 0a09 2020 2020 7370 sHelp .=.. sp\n+00006fb0: 7269 6e74 6628 223b 6368 6563 6b42 6c6f rintf(\";checkBlo\n+00006fc0: 636b 7352 756c 6525 643d 5c6e 3b63 6865 cksRule%d=\\n;che\n+00006fd0: 636b 426c 6f63 6b73 4253 2564 3d5c 6e3b ckBlocksBS%d=\\n;\n+00006fe0: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr\n+00006ff0: 2564 3d5c 6e22 202e 0a09 0920 2020 2022 %d=\\n\" .... \"\n+00007000: 3b63 6865 636b 426c 6f63 6b73 5265 6164 ;checkBlocksRead\n+00007010: 2564 3d5c 6e3b 6368 6563 6b42 6c6f 636b %d=\\n;checkBlock\n+00007020: 7350 6172 616c 6c65 6c25 643d 5c6e 5c6e sParallel%d=\\n\\n\n+00007030: 222c 0a09 0920 2020 2024 692c 2024 692c \",... $i, $i,\n+00007040: 2024 692c 2024 692c 2024 6929 3b0a 2020 $i, $i, $i);. \n+00007050: 2020 7d0a 2020 2020 6368 6f70 2024 626c }. chop $bl\n+00007060: 6f63 6b52 756c 6573 4865 6c70 3b0a 7d0a ockRulesHelp;.}.\n+00007070: 0a6d 7920 2462 6c6f 636b 4465 7669 6365 .my $blockDevice\n+00007080: 4865 6c70 203d 203c 3c45 4f48 3b0a 2320 Help = < cons\n+00007f80: 6964 6572 2074 6869 7320 6261 636b 7570 ider this backup\n+00007f90: 0a23 206f 720a 2320 303a 6261 636b 7570 .# or.# 0:backup\n+00007fa0: 5365 7269 6573 2020 2020 2d3e 206c 6173 Series -> las\n+00007fb0: 7420 2879 6f75 6e67 6573 7429 2062 6163 t (youngest) bac\n+00007fc0: 6b75 7020 696e 203c 6261 636b 7570 4469 kup in /backupSeries.\n+00007fe0: 2320 313a 6261 636b 7570 5365 7269 6573 # 1:backupSeries\n+00007ff0: 2020 2020 2d3e 2066 6972 7374 2062 6566 -> first bef\n+00008000: 6f72 6520 6c61 7374 2062 6163 6b75 7020 ore last backup \n+00008010: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b\n+00008020: 6163 6b75 7053 6572 6965 730a 2320 6e3a ackupSeries.# n:\n+00008030: 6261 636b 7570 5365 7269 6573 2020 2020 backupSeries \n+00008040: 2d3e 206e 2774 6820 6265 666f 7265 206c -> n'th before l\n+00008050: 6173 7420 6261 636b 7570 2069 6e20 3c62 ast backup in /backup\n+00008070: 5365 7269 6573 0a23 2033 2d35 3a62 6163 Series.# 3-5:bac\n+00008080: 6b75 7053 6572 6965 7320 202d 3e20 3372 kupSeries -> 3r\n+00008090: 642c 2034 7468 2061 6e64 2035 7468 2069 d, 4th and 5th i\n+000080a0: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba\n+000080b0: 636b 7570 5365 7269 6573 0a23 2061 6c6c ckupSeries.# all\n+000080c0: 3a62 6163 6b75 7053 6572 6965 7320 202d :backupSeries -\n+000080d0: 3e20 616c 6c20 696e 203c 6261 636b 7570 > all in /backupSerie\n+000080f0: 730a 2320 5468 6973 206f 7074 696f 6e20 s.# This option \n+00008100: 6973 2075 7365 6675 6c2c 2069 6620 796f is useful, if yo\n+00008110: 7520 7761 6e74 2074 6f20 6578 706c 6963 u want to explic\n+00008120: 6974 6c79 2068 6172 6420 6c69 6e6b 0a23 itly hard link.#\n+00008130: 2074 6f20 6261 636b 7570 2073 6572 6965 to backup serie\n+00008140: 7320 6672 6f6d 2064 6966 6665 7265 6e74 s from different\n+00008150: 2062 6163 6b75 7073 2e20 596f 7520 6361 backups. You ca\n+00008160: 6e20 7370 6563 6966 7920 6567 2e20 7769 n specify eg. wi\n+00008170: 7468 0a23 2030 3a6d 7942 6163 6b75 7020 th.# 0:myBackup \n+00008180: 746f 2074 6865 206c 6173 7420 6261 636b to the last back\n+00008190: 7570 206f 6620 7365 7269 6573 2027 6d79 up of series 'my\n+000081a0: 4261 636b 7570 272e 2049 6620 796f 7520 Backup'. If you \n+000081b0: 7370 6563 6966 790a 2320 6261 636b 7570 specify.# backup\n+000081c0: 2073 6572 6965 7320 7769 7468 206f 7468 series with oth\n+000081d0: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, \n+000081e0: 7468 656e 206f 6e6c 7920 7468 6573 6520 then only these \n+000081f0: 6261 636b 7570 7320 7769 6c6c 2062 650a backups will be.\n+00008200: 2320 7573 6564 2066 6f72 2068 6172 6420 # used for hard \n+00008210: 6c69 6e6b 696e 672e 0a23 2044 6566 6175 linking..# Defau\n+00008220: 6c74 2076 616c 7565 2069 7320 746f 206c lt value is to l\n+00008230: 696e 6b20 746f 2074 6865 206c 6173 7420 ink to the last \n+00008240: 6261 636b 7570 206f 6620 616c 6c20 7365 backup of all se\n+00008250: 7269 6573 2073 746f 7265 6420 696e 0a23 ries stored in.#\n+00008260: 2027 6261 636b 7570 4469 7227 2e0a 3b6f 'backupDir'..;o\n+00008270: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries\n+00008280: 3d0a 0a23 206c 6f63 6b20 6669 6c65 2c20 =..# lock file, \n+00008290: 6966 2065 7869 7374 2c20 6e65 7720 696e if exist, new in\n+000082a0: 7374 616e 6365 7320 7769 6c6c 2066 696e stances will fin\n+000082b0: 6973 6820 6966 0a23 2061 6e20 6f6c 6420 ish if.# an old \n+000082c0: 6973 2061 6c72 6561 6479 2072 756e 6e69 is already runni\n+000082d0: 6e67 2c20 6465 6661 756c 7420 6973 2024 ng, default is $\n+000082e0: 6c6f 636b 4669 6c65 0a3b 6c6f 636b 4669 lockFile.;lockFi\n+000082f0: 6c65 3d0a 0a23 2072 656d 6f76 6520 7468 le=..# remove th\n+00008300: 6520 6c6f 636b 2066 696c 6573 2062 6566 e lock files bef\n+00008310: 6f72 6520 6465 6c65 7469 6e67 206f 6c64 ore deleting old\n+00008320: 2062 6163 6b75 7073 0a23 2064 6566 6175 backups.# defau\n+00008330: 6c74 2028 276e 6f27 2920 6973 2074 6f20 lt ('no') is to \n+00008340: 6465 6c65 7465 2074 6865 206c 6f63 6b20 delete the lock \n+00008350: 6669 6c65 2061 6674 6572 2064 656c 6574 file after delet\n+00008360: 696e 670a 2320 706f 7373 6962 6c65 2076 ing.# possible v\n+00008370: 616c 7565 7320 6172 6520 2779 6573 2720 alues are 'yes' \n+00008380: 616e 6420 276e 6f27 0a3b 756e 6c6f 636b and 'no'.;unlock\n+00008390: 4265 666f 7265 4465 6c3d 0a0a 2320 636f BeforeDel=..# co\n+000083a0: 6e74 696e 7565 2069 6620 6f6e 6520 6f72 ntinue if one or\n+000083b0: 206d 6f72 6520 6f66 2074 6865 2065 7863 more of the exc\n+000083c0: 6570 7469 6f6e 616c 2064 6972 6563 746f eptional directo\n+000083d0: 7269 6573 0a23 2064 6f20 6e6f 7420 6578 ries.# do not ex\n+000083e0: 6973 7420 286e 6f20 6973 2073 746f 7070 ist (no is stopp\n+000083f0: 696e 6720 7072 6f63 6573 7369 6e67 290a ing processing).\n+00008400: 2320 6465 6661 756c 7420 6973 2027 6e6f # default is 'no\n+00008410: 272c 2063 616e 2062 6520 2779 6573 2720 ', can be 'yes' \n+00008420: 6f72 2027 6e6f 270a 3b63 6f6e 7445 7863 or 'no'.;contExc\n+00008430: 6570 7444 6972 7345 7272 3d0a 0a23 2044 eptDirsErr=..# D\n+00008440: 6972 6563 746f 7269 6573 2074 6f20 6578 irectories to ex\n+00008450: 636c 7564 6520 6672 6f6d 2074 6865 2062 clude from the b\n+00008460: 6163 6b75 7020 2872 656c 6174 6976 6520 ackup (relative \n+00008470: 7061 7468 2069 6e73 6964 6520 6f66 2074 path inside of t\n+00008480: 6865 2062 6163 6b75 7029 2e0a 2320 596f he backup)..# Yo\n+00008490: 7520 6361 6e20 7573 6520 7368 656c 6c20 u can use shell \n+000084a0: 7479 7065 2077 696c 6463 6172 6473 2e0a type wildcards..\n+000084b0: 2320 5468 6573 6520 6469 7265 6374 6f72 # These director\n+000084c0: 6965 7320 6861 7665 2074 6f20 6265 2073 ies have to be s\n+000084d0: 6570 6172 6174 6564 2062 7920 7370 6163 eparated by spac\n+000084e0: 6520 6f72 206e 6577 6c69 6e65 2e0a 3b65 e or newline..;e\n+000084f0: 7863 6570 7444 6972 733d 0a0a 2320 4469 xceptDirs=..# Di\n+00008500: 7265 6374 6f72 6965 7320 746f 2069 6e63 rectories to inc\n+00008510: 6c75 6465 2069 6e20 7468 6520 6261 636b lude in the back\n+00008520: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat\n+00008530: 6820 696e 7369 6465 206f 6620 7468 6520 h inside of the \n+00008540: 6261 636b 7570 292e 0a23 2059 6f75 2063 backup)..# You c\n+00008550: 616e 2075 7365 2073 6865 6c6c 2074 7970 an use shell typ\n+00008560: 6520 7769 6c64 6361 7264 732e 0a23 2054 e wildcards..# T\n+00008570: 6865 7365 2064 6972 6563 746f 7269 6573 hese directories\n+00008580: 2068 6176 6520 746f 2062 6520 7365 7061 have to be sepa\n+00008590: 7261 7465 6420 6279 2073 7061 6365 206f rated by space o\n+000085a0: 7220 6e65 776c 696e 652e 0a3b 696e 636c r newline..;incl\n+000085b0: 7564 6544 6972 733d 0a0a 2320 7275 6c65 udeDirs=..# rule\n+000085c0: 2066 6f72 2065 7863 6c75 6469 6e67 2066 for excluding f\n+000085d0: 696c 6573 202f 206f 6e6c 7920 666f 7220 iles / only for \n+000085e0: 6578 7065 7269 656e 6365 6420 6164 6d69 experienced admi\n+000085f0: 6e69 7374 7261 746f 7273 0a23 2021 2121 nistrators.# !!!\n+00008600: 2073 6565 2052 4541 444d 4520 6669 6c65 see README file\n+00008610: 2027 696e 636c 7564 696e 6720 2f20 6578 'including / ex\n+00008620: 636c 7564 696e 6720 6669 6c65 7320 616e cluding files an\n+00008630: 6420 6469 7265 6374 6f72 6965 7327 0a23 d directories'.#\n+00008640: 2045 5841 4d50 4c45 3a20 0a23 2073 6561 EXAMPLE: .# sea\n+00008650: 7263 6852 756c 6520 3d20 2820 275c 2473 rchRule = ( '\\$s\n+00008660: 697a 6520 3e20 263a 3a53 495a 4528 2233 ize > &::SIZE(\"3\n+00008670: 4d22 2927 2061 6e64 2027 5c24 7569 6420 M\")' and '\\$uid \n+00008680: 6571 2022 686a 6322 2720 2920 6f72 0a23 eq \"hjc\"' ) or.#\n+00008690: 2020 2020 2820 275c 246d 7469 6d65 203e ( '\\$mtime >\n+000086a0: 2026 3a3a 4441 5445 2822 3364 3468 2229 &::DATE(\"3d4h\")\n+000086b0: 2720 616e 6420 6e6f 7420 275c 2466 696c ' and not '\\$fil\n+000086c0: 6520 3d7e 206d 232f 746d 702f 2327 2029 e =~ m#/tmp/#' )\n+000086d0: 270a 3b65 7863 6570 7452 756c 653d 0a0a '.;exceptRule=..\n+000086e0: 2320 466f 7220 6578 706c 616e 6174 696f # For explanatio\n+000086f0: 6e73 2c20 7365 6520 2765 7863 6570 7452 ns, see 'exceptR\n+00008700: 756c 6527 2e0a 3b69 6e63 6c75 6465 5275 ule'..;includeRu\n+00008710: 6c65 3d0a 0a23 2077 7269 7465 2061 2066 le=..# write a f\n+00008720: 696c 6520 6e61 6d65 202e 7374 6f72 6542 ile name .storeB\n+00008730: 6163 6b75 702e 6e6f 7453 6176 6564 2e62 ackup.notSaved.b\n+00008740: 7a32 2077 6974 6820 7468 650a 2320 6e61 z2 with the.# na\n+00008750: 6d65 7320 6f66 2061 6c6c 2073 6b69 7070 mes of all skipp\n+00008760: 6564 2066 696c 6573 2c20 6465 6661 756c ed files, defaul\n+00008770: 7420 6973 2027 6e6f 272c 2063 616e 2062 t is 'no', can b\n+00008780: 6520 2779 6573 2720 6f72 2027 6e6f 270a e 'yes' or 'no'.\n+00008790: 3b77 7269 7465 4578 636c 7564 654c 6f67 ;writeExcludeLog\n+000087a0: 3d0a 0a23 2064 6f20 6e6f 7420 7361 7665 =..# do not save\n+000087b0: 2074 6865 2073 7065 6369 6669 6564 2074 the specified t\n+000087c0: 7970 6573 206f 6620 6669 6c65 732c 2061 ypes of files, a\n+000087d0: 6c6c 6f77 6564 3a20 5362 6366 706c 0a23 llowed: Sbcfpl.#\n+000087e0: 2053 202d 2066 696c 6520 6973 2061 2073 S - file is a s\n+000087f0: 6f63 6b65 740a 2320 6220 2d20 6669 6c65 ocket.# b - file\n+00008800: 2069 7320 6120 626c 6f63 6b20 7370 6563 is a block spec\n+00008810: 6961 6c20 6669 6c65 0a23 2063 202d 2066 ial file.# c - f\n+00008820: 696c 6520 6973 2061 2063 6861 7261 6374 ile is a charact\n+00008830: 6572 2073 7065 6369 616c 2066 696c 650a er special file.\n+00008840: 2320 6620 2d20 6669 6c65 2069 7320 6120 # f - file is a \n+00008850: 706c 6169 6e20 6669 6c65 0a23 2070 202d plain file.# p -\n+00008860: 2066 696c 6520 6973 2061 206e 616d 6564 file is a named\n+00008870: 2070 6970 650a 2320 6c20 2d20 6669 6c65 pipe.# l - file\n+00008880: 2069 7320 6120 7379 6d62 6f6c 6963 206c is a symbolic l\n+00008890: 696e 6b0a 2320 5370 6263 2063 616e 206f ink.# Spbc can o\n+000088a0: 6e6c 7920 6265 2062 6163 6b65 6420 7570 nly be backed up\n+000088b0: 2069 6620 474e 5520 636f 7079 2069 7320 if GNU copy is \n+000088c0: 6176 6169 6c61 626c 652e 0a3b 6578 6365 available..;exce\n+000088d0: 7074 5479 7065 733d 0a0a 2320 4163 7469 ptTypes=..# Acti\n+000088e0: 7661 7465 2074 6869 7320 6f70 7469 6f6e vate this option\n+000088f0: 2069 6620 796f 7572 2073 7973 7465 6d27 if your system'\n+00008900: 7320 6370 2069 7320 6120 6675 6c6c 2d66 s cp is a full-f\n+00008910: 6561 7475 7265 6420 474e 550a 2320 7665 eatured GNU.# ve\n+00008920: 7273 696f 6e2e 2049 6e20 7468 6973 2063 rsion. In this c\n+00008930: 6173 6520 796f 7520 7769 6c6c 2062 6520 ase you will be \n+00008940: 6162 6c65 2074 6f20 616c 736f 2062 6163 able to also bac\n+00008950: 6b75 7020 7365 7665 7261 6c0a 2320 7370 kup several.# sp\n+00008960: 6563 6961 6c20 6669 6c65 2074 7970 6573 ecial file types\n+00008970: 206c 696b 6520 736f 636b 6574 732e 0a23 like sockets..#\n+00008980: 2050 6f73 7369 626c 6520 7661 6c75 6573 Possible values\n+00008990: 2061 7265 2027 7965 7327 2061 6e64 2027 are 'yes' and '\n+000089a0: 6e6f 272e 2044 6566 6175 6c74 2069 7320 no'. Default is \n+000089b0: 276e 6f27 0a3b 6370 4973 476e 753d 0a0a 'no'.;cpIsGnu=..\n+000089c0: 2320 6d61 6b65 2061 2068 6172 6420 6c69 # make a hard li\n+000089d0: 6e6b 2074 6f20 6578 6973 7469 6e67 2c20 nk to existing, \n+000089e0: 6964 656e 7469 6361 6c20 7379 6d6c 696e identical symlin\n+000089f0: 6b73 2069 6e20 6f6c 6420 6261 636b 7570 ks in old backup\n+00008a00: 730a 2320 7573 6520 7468 6973 2c20 6966 s.# use this, if\n+00008a10: 2079 6f75 7220 6f70 6572 6174 696e 6720 your operating \n+00008a20: 7379 7374 656d 2073 7570 706f 7274 7320 system supports \n+00008a30: 7468 6973 2028 6c69 6e75 7820 646f 6573 this (linux does\n+00008a40: 290a 2320 506f 7373 6962 6c65 2076 616c ).# Possible val\n+00008a50: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an\n+00008a60: 6420 276e 6f27 2e20 4465 6661 756c 7420 d 'no'. Default \n+00008a70: 6973 2027 6e6f 270a 3b6c 696e 6b53 796d is 'no'.;linkSym\n+00008a80: 6c69 6e6b 733d 0a0a 2320 6578 6563 206a links=..# exec j\n+00008a90: 6f62 2062 6566 6f72 6520 7374 6172 7469 ob before starti\n+00008aa0: 6e67 2074 6865 2062 6163 6b75 702c 2063 ng the backup, c\n+00008ab0: 6865 636b 7320 6c6f 636b 4669 6c65 2028 hecks lockFile (\n+00008ac0: 2d4c 2920 6265 666f 7265 0a23 2073 7461 -L) before.# sta\n+00008ad0: 7274 696e 6720 2865 2e67 2e20 6361 6e20 rting (e.g. can \n+00008ae0: 6265 2075 7365 6420 666f 7220 7273 796e be used for rsyn\n+00008af0: 6329 2073 746f 7073 2065 7865 6375 7469 c) stops executi\n+00008b00: 6f6e 2069 6620 6a6f 6220 7265 7475 726e on if job return\n+00008b10: 730a 2320 6578 6974 2073 7461 7475 7320 s.# exit status \n+00008b20: 213d 2030 0a3b 7072 6563 6f6d 6d61 6e64 != 0.;precommand\n+00008b30: 3d0a 0a23 2065 7865 6320 6a6f 6220 6166 =..# exec job af\n+00008b40: 7465 7220 6669 6e69 7368 696e 6720 7468 ter finishing th\n+00008b50: 6520 6261 636b 7570 2c20 6275 7420 6265 e backup, but be\n+00008b60: 666f 7265 2065 7261 7369 6e67 206f 6620 fore erasing of \n+00008b70: 6f6c 640a 2320 6261 636b 7570 7320 7265 old.# backups re\n+00008b80: 706f 7274 7320 6966 206a 6f62 2072 6574 ports if job ret\n+00008b90: 7572 6e73 2065 7869 7420 7374 6174 7573 urns exit status\n+00008ba0: 2021 3d20 300a 3b70 6f73 7463 6f6d 6d61 != 0.;postcomma\n+00008bb0: 6e64 3d0a 0a23 2066 6f6c 6c6f 7720 7379 nd=..# follow sy\n+00008bc0: 6d62 6f6c 6963 206c 696e 6b73 206c 696b mbolic links lik\n+00008bd0: 6520 6469 7265 6374 6f72 6965 7320 7570 e directories up\n+00008be0: 2074 6f20 6465 7074 6820 3020 2d3e 2064 to depth 0 -> d\n+00008bf0: 6f20 6e6f 740a 2320 666f 6c6c 6f77 206c o not.# follow l\n+00008c00: 696e 6b73 0a3b 666f 6c6c 6f77 4c69 6e6b inks.;followLink\n+00008c10: 733d 0a0a 2320 7573 6520 7468 6973 206f s=..# use this o\n+00008c20: 6e6c 7920 6966 2079 6f75 2077 7269 7465 nly if you write\n+00008c30: 2079 6f75 7220 6261 636b 7570 206f 7665 your backup ove\n+00008c40: 7220 6120 6869 6768 206c 6174 656e 6379 r a high latency\n+00008c50: 206c 696e 650a 2320 6c69 6b65 2061 2076 line.# like a v\n+00008c60: 706e 206f 7665 7220 7468 6520 696e 7465 pn over the inte\n+00008c70: 726e 6574 0a23 2073 746f 7265 6261 636b rnet.# storeback\n+00008c80: 7570 2077 696c 6c20 7573 6520 6d6f 7265 up will use more\n+00008c90: 2070 6172 616c 6c65 6c69 7a61 7469 6f6e parallelization\n+00008ca0: 2061 7420 7468 6520 636f 7374 206f 6620 at the cost of \n+00008cb0: 6d6f 7265 0a23 2063 7075 2070 6f77 6572 more.# cpu power\n+00008cc0: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu\n+00008cd0: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and\n+00008ce0: 2027 6e6f 273b 2064 6566 6175 6c74 2069 'no'; default i\n+00008cf0: 7320 276e 6f27 0a3b 6869 6768 4c61 7465 s 'no'.;highLate\n+00008d00: 6e63 793d 0a0a 2320 4966 2074 6869 7320 ncy=..# If this \n+00008d10: 6f70 7469 6f6e 2069 7320 6469 7361 626c option is disabl\n+00008d20: 6564 2c20 7468 656e 2074 6865 2066 696c ed, then the fil\n+00008d30: 6573 2069 6e20 7468 6520 6261 636b 7570 es in the backup\n+00008d40: 2077 696c 6c20 6e6f 740a 2320 6e65 6363 will not.# necc\n+00008d50: 6573 7361 7269 6c79 2068 6176 6520 7468 essarily have th\n+00008d60: 6520 7361 6d65 2070 6572 6d69 7373 696f e same permissio\n+00008d70: 6e73 2061 6e64 206f 776e 6572 2061 7320 ns and owner as \n+00008d80: 7468 6520 6f72 6967 696e 616c 732e 0a23 the originals..#\n+00008d90: 2054 6869 7320 7370 6565 6473 2075 7020 This speeds up \n+00008da0: 6261 636b 7570 7320 6f6e 206e 6574 776f backups on netwo\n+00008db0: 726b 2064 7269 7665 7320 6120 6c6f 742e rk drives a lot.\n+00008dc0: 2043 6f72 7265 6374 2070 6572 6d69 7373 Correct permiss\n+00008dd0: 696f 6e73 0a23 2061 7265 2072 6573 746f ions.# are resto\n+00008de0: 7265 6420 6279 2073 746f 7265 4261 636b red by storeBack\n+00008df0: 7570 5265 636f 7665 722e 706c 206e 6f20 upRecover.pl no \n+00008e00: 6d61 7474 6572 2077 6861 7420 7468 6973 matter what this\n+00008e10: 206f 7074 696f 6e20 6973 0a23 2073 6574 option is.# set\n+00008e20: 2074 6f2e 2044 6566 6175 6c74 2069 7320 to. Default is \n+00008e30: 276e 6f27 0a3b 6967 6e6f 7265 5065 726d 'no'.;ignorePerm\n+00008e40: 733d 0a0a 2320 7375 7070 7265 7373 2028 s=..# suppress (\n+00008e50: 756e 7761 6e74 6564 2920 7761 726e 696e unwanted) warnin\n+00008e60: 6773 2069 6e20 7468 6520 6c6f 6720 6669 gs in the log fi\n+00008e70: 6c65 733b 0a23 2074 6f20 7375 7070 7265 les;.# to suppre\n+00008e80: 7373 2077 6172 6e69 6e67 732c 2074 6865 ss warnings, the\n+00008e90: 2066 6f6c 6c6f 7769 6e67 206b 6579 7320 following keys \n+00008ea0: 6361 6e20 6265 2075 7365 643a 0a23 2020 can be used:.# \n+00008eb0: 2065 7863 4469 7220 2873 7570 7072 6573 excDir (suppres\n+00008ec0: 7365 7320 7468 6520 7761 726e 696e 6720 ses the warning \n+00008ed0: 7468 6174 2065 7863 6c75 6465 6420 6469 that excluded di\n+00008ee0: 7265 6374 6f72 6965 730a 2320 2020 2020 rectories.# \n+00008ef0: 2020 2020 2064 6f20 6e6f 7420 6578 6973 do not exis\n+00008f00: 7429 0a23 2020 2066 696c 6543 6861 6e67 t).# fileChang\n+00008f10: 6520 2873 7570 7072 6573 7365 7320 7468 e (suppresses th\n+00008f20: 6520 7761 726e 696e 6720 7468 6174 2061 e warning that a\n+00008f30: 2066 696c 6520 6861 7320 6368 616e 6765 file has change\n+00008f40: 6420 6475 7269 6e67 0a23 2020 2020 2020 d during.# \n+00008f50: 2020 2020 2020 2020 7468 6520 6261 636b the back\n+00008f60: 7570 290a 2320 2020 6372 5365 7269 6573 up).# crSeries\n+00008f70: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n+00008f80: 2077 6172 6e69 6e67 2074 6861 7420 7374 warning that st\n+00008f90: 6f72 6542 6163 6b75 7020 6861 6420 746f oreBackup had to\n+00008fa0: 2063 7265 6174 6520 7468 650a 2320 2020 create the.# \n+00008fb0: 2020 2020 2020 2020 2027 6465 6661 756c 'defaul\n+00008fc0: 7427 2073 6572 6965 7329 0a23 2020 2068 t' series).# h\n+00008fd0: 6173 6843 6f6c 6c69 7369 6f6e 2028 7375 ashCollision (su\n+00008fe0: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war\n+00008ff0: 6e69 6e67 2069 6620 6120 706f 7373 6962 ning if a possib\n+00009000: 6c65 0a23 2020 2020 2020 2020 2020 2020 le.# \n+00009010: 2020 2020 2068 6173 6820 636f 6c6c 6973 hash collis\n+00009020: 696f 6e20 6973 2064 6574 6563 7465 6429 ion is detected)\n+00009030: 0a23 2020 2066 696c 654e 616d 6557 6974 .# fileNameWit\n+00009040: 684c 696e 6546 6565 6420 2873 7570 7072 hLineFeed (suppr\n+00009050: 6573 7365 7320 7468 6520 7761 726e 696e esses the warnin\n+00009060: 6720 6966 2061 2066 696c 656e 616d 650a g if a filename.\n+00009070: 2320 2020 2020 2020 2020 2020 2020 2020 # \n+00009080: 2020 2020 2020 2020 2063 6f6e 7461 696e contain\n+00009090: 7320 6120 6c69 6e65 2066 6565 6429 0a23 s a line feed).#\n+000090a0: 2020 5468 6973 206f 7074 696f 6e20 6361 This option ca\n+000090b0: 6e20 6265 2072 6570 6561 7465 6420 6d75 n be repeated mu\n+000090c0: 6c74 6970 6c65 2074 696d 6573 206f 6e20 ltiple times on \n+000090d0: 7468 6520 636f 6d6d 616e 6420 6c69 6e65 the command line\n+000090e0: 2e0a 2320 2045 7861 6d70 6c65 2075 7361 ..# Example usa\n+000090f0: 6765 2069 6e20 636f 6e66 2066 696c 653a ge in conf file:\n+00009100: 0a23 2020 7375 7070 7265 7373 5761 726e .# suppressWarn\n+00009110: 696e 6720 3d20 6578 6344 6972 2066 696c ing = excDir fil\n+00009120: 6543 6861 6e67 6520 6372 5365 7269 6573 eChange crSeries\n+00009130: 2068 6173 6843 6f6c 6c69 7369 6f6e 0a23 hashCollision.#\n+00009140: 2020 4279 2064 6566 6175 6c74 206e 6f20 By default no \n+00009150: 7761 726e 696e 6773 2061 7265 2073 7570 warnings are sup\n+00009160: 7072 6573 7365 642e 0a3b 7375 7070 7265 pressed..;suppre\n+00009170: 7373 5761 726e 696e 673d 0a0a 2320 646f ssWarning=..# do\n+00009180: 202a 6e6f 742a 2077 7269 7465 2068 6172 *not* write har\n+00009190: 6420 6c69 6e6b 7320 746f 2065 7869 7374 d links to exist\n+000091a0: 696e 6720 6669 6c65 7320 696e 2074 6865 ing files in the\n+000091b0: 2062 6163 6b75 700a 2320 6475 7269 6e67 backup.# during\n+000091c0: 2074 6865 2062 6163 6b75 7020 2879 6573 the backup (yes\n+000091d0: 7c6e 6f29 0a23 2079 6f75 2068 6176 6520 |no).# you have \n+000091e0: 746f 2063 616c 6c20 7468 6520 7072 6f67 to call the prog\n+000091f0: 7261 6d20 7374 6f72 6542 6163 6b75 7055 ram storeBackupU\n+00009200: 7064 6174 6542 6163 6b75 702e 706c 0a23 pdateBackup.pl.#\n+00009210: 206c 6174 6572 206f 6e20 796f 7572 2073 later on your s\n+00009220: 6572 7665 7220 6966 2079 6f75 2073 6574 erver if you set\n+00009230: 2074 6869 7320 666c 6167 2074 6f20 2779 this flag to 'y\n+00009240: 6573 270a 2320 796f 7520 6861 7665 2074 es'.# you have t\n+00009250: 6f20 7275 6e20 7374 6f72 6542 6163 6b75 o run storeBacku\n+00009260: 7055 7064 6174 6542 6163 6b75 702e 706c pUpdateBackup.pl\n+00009270: 206c 6174 6572 202d 2073 6565 0a23 2064 later - see.# d\n+00009280: 6573 6372 6970 7469 6f6e 2066 6f72 2074 escription for t\n+00009290: 6861 7420 7072 6f67 7261 6d0a 2320 6465 hat program.# de\n+000092a0: 6661 756c 7420 3d20 6e6f 3a20 646f 206e fault = no: do n\n+000092b0: 6f74 2077 7269 7465 2068 6172 6420 6c69 ot write hard li\n+000092c0: 6e6b 730a 3b6c 6174 654c 696e 6b73 3d0a nks.;lateLinks=.\n+000092d0: 0a23 206f 6e6c 7920 696e 2063 6f6d 6269 .# only in combi\n+000092e0: 6e61 7469 6f6e 2077 6974 6820 2d2d 6c61 nation with --la\n+000092f0: 7465 4c69 6e6b 730a 2320 636f 6d70 7265 teLinks.# compre\n+00009300: 7373 696f 6e20 6672 6f6d 2066 696c 6573 ssion from files\n+00009310: 203e 3d20 7369 7a65 2077 696c 6c20 6265 >= size will be\n+00009320: 2064 6f6e 6520 6c61 7465 722c 0a23 2074 done later,.# t\n+00009330: 6865 2066 696c 6520 6973 2028 7465 6d70 he file is (temp\n+00009340: 6f72 6172 696c 7929 2063 6f70 6965 6420 orarily) copied \n+00009350: 696e 746f 2074 6865 2062 6163 6b75 700a into the backup.\n+00009360: 2320 6465 6661 756c 7420 3d20 6e6f 3a20 # default = no: \n+00009370: 6e6f 206c 6174 6520 636f 6d70 7265 7373 no late compress\n+00009380: 696f 6e0a 3b6c 6174 6543 6f6d 7072 6573 ion.;lateCompres\n+00009390: 733d 0a0a 2320 4669 6c65 7320 7769 7468 s=..# Files with\n+000093a0: 2073 7065 6369 6669 6564 2073 7566 6669 specified suffi\n+000093b0: 7820 666f 7220 7768 6963 6820 7374 6f72 x for which stor\n+000093c0: 6542 6163 6b75 7020 7769 6c6c 206d 616b eBackup will mak\n+000093d0: 6520 616e 206d 6435 2063 6865 636b 0a23 e an md5 check.#\n+000093e0: 206f 6e20 626c 6f63 6b73 206f 6620 7468 on blocks of th\n+000093f0: 6174 2066 696c 652e 2045 7865 6375 7465 at file. Execute\n+00009400: 6420 6166 7465 7220 2d2d 6368 6563 6b42 d after --checkB\n+00009410: 6c6f 636b 7352 756c 6528 6e29 0a3b 6368 locksRule(n).;ch\n+00009420: 6563 6b42 6c6f 636b 7353 7566 6669 783d eckBlocksSuffix=\n+00009430: 0a0a 2320 4f6e 6c79 2063 6865 636b 2066 ..# Only check f\n+00009440: 696c 6573 2073 7065 6369 6669 6564 2069 iles specified i\n+00009450: 6e20 2d2d 6368 6563 6b42 6c6f 636b 7353 n --checkBlocksS\n+00009460: 7566 6669 7820 6966 2074 6865 7265 0a23 uffix if there.#\n+00009470: 2066 696c 6520 7369 7a65 2069 7320 6174 file size is at\n+00009480: 206c 6561 7374 2074 6869 7320 7661 6c75 least this valu\n+00009490: 652c 2064 6566 6175 6c74 2069 7320 3130 e, default is 10\n+000094a0: 304d 0a3b 6368 6563 6b42 6c6f 636b 734d 0M.;checkBlocksM\n+000094b0: 696e 5369 7a65 3d0a 0a23 2042 6c6f 636b inSize=..# Block\n+000094c0: 2073 697a 6520 666f 7220 6669 6c65 7320 size for files \n+000094d0: 7370 6563 6966 6965 6420 7769 7468 202d specified with -\n+000094e0: 2d63 6865 636b 426c 6f63 6b73 5375 6666 -checkBlocksSuff\n+000094f0: 6978 0a23 2064 6566 6175 6c74 2069 7320 ix.# default is \n+00009500: 2463 6865 636b 426c 6f63 6b73 4253 6465 $checkBlocksBSde\n+00009510: 6661 756c 7420 2831 206d 6567 6162 7974 fault (1 megabyt\n+00009520: 6529 0a3b 6368 6563 6b42 6c6f 636b 7342 e).;checkBlocksB\n+00009530: 533d 0a0a 2320 6966 2073 6574 2c20 7468 S=..# if set, th\n+00009540: 6520 626c 6f63 6b73 2067 656e 6572 6174 e blocks generat\n+00009550: 6564 2064 7565 2074 6f20 6368 6563 6b42 ed due to checkB\n+00009560: 6c6f 636b 7353 7566 6669 7820 6172 6520 locksSuffix are \n+00009570: 636f 6d70 7265 7373 6564 0a23 2050 6f73 compressed.# Pos\n+00009580: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are\n+00009590: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'.\n+000095a0: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no'\n+000095b0: 0a3b 6368 6563 6b42 6c6f 636b 7343 6f6d .;checkBlocksCom\n+000095c0: 7072 3d0a 0a23 206c 656e 6774 6820 6f66 pr=..# length of\n+000095d0: 2071 7565 7565 2074 6f20 7374 6f72 6520 queue to store \n+000095e0: 6669 6c65 7320 6265 666f 7265 2062 6c6f files before blo\n+000095f0: 636b 2063 6865 636b 696e 672c 0a23 2064 ck checking,.# d\n+00009600: 6566 6175 6c74 203d 2024 7175 6575 6542 efault = $queueB\n+00009610: 6c6f 636b 0a3b 7175 6575 6542 6c6f 636b lock.;queueBlock\n+00009620: 3d0a 0a24 626c 6f63 6b52 756c 6573 4865 =..$blockRulesHe\n+00009630: 6c70 0a24 626c 6f63 6b44 6576 6963 6548 lp.$blockDeviceH\n+00009640: 656c 700a 2320 7772 6974 6520 7465 6d70 elp.# write temp\n+00009650: 6f72 6172 7920 6462 6d20 6669 6c65 7320 orary dbm files \n+00009660: 696e 202d 2d74 6d70 6469 720a 2320 7573 in --tmpdir.# us\n+00009670: 6520 7468 6973 2069 6620 796f 7520 6861 e this if you ha\n+00009680: 7665 206e 6f74 2065 6e6f 7567 6820 5241 ve not enough RA\n+00009690: 4d2c 2064 6566 6175 6c74 2069 7320 6e6f M, default is no\n+000096a0: 0a3b 7361 7665 5241 4d3d 0a0a 2320 636f .;saveRAM=..# co\n+000096b0: 6d70 7265 7373 2063 6f6d 6d61 6e64 2028 mpress command (\n+000096c0: 7769 7468 206f 7074 696f 6e73 292c 2064 with options), d\n+000096d0: 6566 6175 6c74 2069 7320 3c40 636f 6d70 efault is <@comp\n+000096e0: 7265 7373 3e0a 3b63 6f6d 7072 6573 733d ress>.;compress=\n+000096f0: 0a0a 2320 756e 636f 6d70 7265 7373 2063 ..# uncompress c\n+00009700: 6f6d 6d61 6e64 2028 7769 7468 206f 7074 ommand (with opt\n+00009710: 696f 6e73 292c 2064 6566 6175 6c74 2069 ions), default i\n+00009720: 7320 3c40 756e 636f 6d70 7265 7373 3e0a s <@uncompress>.\n+00009730: 3b75 6e63 6f6d 7072 6573 733d 0a0a 2320 ;uncompress=..# \n+00009740: 706f 7374 6669 7820 746f 2061 6464 2061 postfix to add a\n+00009750: 6674 6572 2063 6f6d 7072 6573 7369 6f6e fter compression\n+00009760: 2c20 6465 6661 756c 7420 6973 203c 2470 , default is <$p\n+00009770: 6f73 7466 6978 3e0a 3b70 6f73 7466 6978 ostfix>.;postfix\n+00009780: 3d0a 0a23 2064 6f20 6e6f 7420 636f 6d70 =..# do not comp\n+00009790: 7265 7373 2066 696c 6573 2077 6974 6820 ress files with \n+000097a0: 7468 6520 666f 6c6c 6f77 696e 670a 2320 the following.# \n+000097b0: 7375 6666 6978 2028 7570 7065 7263 6173 suffix (uppercas\n+000097c0: 6520 696e 636c 7564 6564 293a 0a23 2028 e included):.# (\n+000097d0: 6966 2079 6f75 2073 6574 2074 6869 7320 if you set this \n+000097e0: 746f 2027 2e2a 272c 206e 6f20 6669 6c65 to '.*', no file\n+000097f0: 7320 7769 6c6c 2062 6520 636f 6d70 7265 s will be compre\n+00009800: 7373 6564 290a 2320 4465 6661 756c 7420 ssed).# Default \n+00009810: 6973 2040 6578 6365 7074 5375 6666 6978 is @exceptSuffix\n+00009820: 0a3b 6578 6365 7074 5375 6666 6978 3d0a .;exceptSuffix=.\n+00009830: 0a23 206c 696b 6520 2d2d 6578 6365 7074 .# like --except\n+00009840: 5375 6666 6978 2c20 6275 7420 646f 206e Suffix, but do n\n+00009850: 6f74 2072 6570 6c61 6365 2064 6566 6175 ot replace defau\n+00009860: 6c74 732c 2061 6464 0a3b 6164 6445 7863 lts, add.;addExc\n+00009870: 6570 7453 7566 6669 783d 0a0a 2320 4669 eptSuffix=..# Fi\n+00009880: 6c65 7320 736d 616c 6c65 7220 7468 616e les smaller than\n+00009890: 2074 6869 7320 7369 7a65 2077 696c 6c20 this size will \n+000098a0: 6e65 7665 7220 6265 2063 6f6d 7072 6573 never be compres\n+000098b0: 7365 6420 6275 7420 616c 7761 7973 0a23 sed but always.#\n+000098c0: 2063 6f70 6965 642e 2044 6566 6175 6c74 copied. Default\n+000098d0: 2069 7320 246d 696e 436f 6d70 7265 7373 is $minCompress\n+000098e0: 5369 7a65 0a3b 6d69 6e43 6f6d 7072 6573 Size.;minCompres\n+000098f0: 7353 697a 653d 0a0a 2320 616c 7465 726e sSize=..# altern\n+00009900: 6174 6976 6520 746f 2065 7863 6570 7453 ative to exceptS\n+00009910: 7566 6669 7820 616e 6420 6d69 6e43 6f6d uffix and minCom\n+00009920: 7072 6573 7353 697a 653a 0a23 2064 6566 pressSize:.# def\n+00009930: 696e 6974 696f 6e20 6f66 2061 2072 756c inition of a rul\n+00009940: 6520 7768 6963 6820 6669 6c65 7320 7769 e which files wi\n+00009950: 6c6c 2062 6520 636f 6d70 7265 7373 6564 ll be compressed\n+00009960: 0a23 2049 6620 7468 6973 2072 756c 6520 .# If this rule \n+00009970: 6973 2073 6574 2c20 6578 6365 7074 5375 is set, exceptSu\n+00009980: 6666 6978 2c20 6164 6445 7863 6570 7453 ffix, addExceptS\n+00009990: 7566 6669 780a 2320 616e 6420 6d69 6e43 uffix.# and minC\n+000099a0: 6f6d 7072 6573 7353 697a 6520 6172 6520 ompressSize are \n+000099b0: 6967 6e6f 7265 642e 0a23 2044 6566 6175 ignored..# Defau\n+000099c0: 6c74 2072 756c 6520 6765 6e65 7261 7465 lt rule generate\n+000099d0: 6420 6672 6f6d 2074 6865 206f 7074 696f d from the optio\n+000099e0: 6e73 2061 626f 7665 2069 733a 0a23 2063 ns above is:.# c\n+000099f0: 6f6d 7072 5275 6c65 203d 2027 5c24 7369 omprRule = '\\$si\n+00009a00: 7a65 203e 2031 3032 3427 2061 6e64 206e ze > 1024' and n\n+00009a10: 6f74 0a23 2020 2027 5c24 6669 6c65 203d ot.# '\\$file =\n+00009a20: 7e20 2f5c 2e7a 6970 5c5c 5a7c 5c2e 627a ~ /\\.zip\\\\Z|\\.bz\n+00009a30: 325c 5c5a 7c5c 2e67 7a5c 5c5a 7c5c 2e74 2\\\\Z|\\.gz\\\\Z|\\.t\n+00009a40: 677a 5c5c 5a7c 5c2e 6a70 675c 5c5a 7c5c gz\\\\Z|\\.jpg\\\\Z|\\\n+00009a50: 2e67 6966 5c5c 5a7c 5c2e 7469 6666 5c5c .gif\\\\Z|\\.tiff\\\\\n+00009a60: 5a7c 5c2e 7469 665c 5c5a 7c5c 2e6d 7065 Z|\\.tif\\\\Z|\\.mpe\n+00009a70: 675c 5c5a 7c5c 2e6d 7067 5c5c 5a7c 5c2e g\\\\Z|\\.mpg\\\\Z|\\.\n+00009a80: 6d70 335c 5c5a 7c5c 2e6f 6767 5c5c 5a7c mp3\\\\Z|\\.ogg\\\\Z|\n+00009a90: 5c2e 6770 675c 5c5a 7c5c 2e70 6e67 5c5c \\.gpg\\\\Z|\\.png\\\\\n+00009aa0: 5a2f 6927 0a3b 636f 6d70 7252 756c 653d Z/i'.;comprRule=\n+00009ab0: 0a0a 2320 6d61 7869 6d61 6c20 6e75 6d62 ..# maximal numb\n+00009ac0: 6572 206f 6620 7061 7261 6c6c 656c 2063 er of parallel c\n+00009ad0: 6f6d 7072 6573 7320 6f70 6572 6174 696f ompress operatio\n+00009ae0: 6e73 2c0a 2320 6465 6661 756c 7420 3d20 ns,.# default = \n+00009af0: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic\n+00009b00: 616c 6c79 0a3b 6e6f 436f 6d70 7265 7373 ally.;noCompress\n+00009b10: 3d0a 0a23 206c 656e 6774 6820 6f66 2071 =..# length of q\n+00009b20: 7565 7565 2074 6f20 7374 6f72 6520 6669 ueue to store fi\n+00009b30: 6c65 7320 6265 666f 7265 2063 6f6d 7072 les before compr\n+00009b40: 6573 7369 6f6e 2c0a 2320 6465 6661 756c ession,.# defaul\n+00009b50: 7420 3d20 2471 7565 7565 436f 6d70 7265 t = $queueCompre\n+00009b60: 7373 0a3b 7175 6575 6543 6f6d 7072 6573 ss.;queueCompres\n+00009b70: 733d 0a0a 2320 6d61 7869 6d61 6c20 6e75 s=..# maximal nu\n+00009b80: 6d62 6572 206f 6620 7061 7261 6c6c 656c mber of parallel\n+00009b90: 2063 6f70 7920 6f70 6572 6174 696f 6e73 copy operations\n+00009ba0: 2c0a 2320 6465 6661 756c 7420 3d20 246e ,.# default = $n\n+00009bb0: 6f43 6f70 790a 3b6e 6f43 6f70 793d 0a0a oCopy.;noCopy=..\n+00009bc0: 2320 6c65 6e67 7468 206f 6620 7175 6575 # length of queu\n+00009bd0: 6520 746f 2073 746f 7265 2066 696c 6573 e to store files\n+00009be0: 2062 6566 6f72 6520 636f 7079 696e 672c before copying,\n+00009bf0: 0a23 2064 6566 6175 6c74 203d 2024 7175 .# default = $qu\n+00009c00: 6575 6543 6f70 790a 3b71 7565 7565 436f eueCopy.;queueCo\n+00009c10: 7079 3d0a 0a23 2077 7269 7465 2073 7461 py=..# write sta\n+00009c20: 7469 7374 6963 7320 6162 6f75 7420 7573 tistics about us\n+00009c30: 6564 2073 7061 6365 2069 6e20 6c6f 6720 ed space in log \n+00009c40: 6669 6c65 0a23 2064 6566 6175 6c74 2069 file.# default i\n+00009c50: 7320 276e 6f27 0a3b 7769 7468 5573 6572 s 'no'.;withUser\n+00009c60: 4772 6f75 7053 7461 743d 0a0a 2320 7772 GroupStat=..# wr\n+00009c70: 6974 6520 7374 6174 6973 7469 6373 2061 ite statistics a\n+00009c80: 626f 7574 2075 7365 6420 7370 6163 6520 bout used space \n+00009c90: 696e 206e 616d 6520 6669 6c65 0a23 0909 in name file.#..\n+00009ca0: 2020 2020 7769 6c6c 2062 6520 6f76 6572 will be over\n+00009cb0: 7269 6464 656e 2065 6163 6820 7469 6d65 ridden each time\n+00009cc0: 0a23 2069 6620 6e6f 2066 696c 6520 6e61 .# if no file na\n+00009cd0: 6d65 2069 7320 6769 7665 6e2c 206e 6f74 me is given, not\n+00009ce0: 6869 6e67 2077 696c 6c20 6265 2077 7269 hing will be wri\n+00009cf0: 7474 656e 0a23 2066 6f72 6d61 7420 6973 tten.# format is\n+00009d00: 3a0a 2320 6964 656e 7469 6669 6572 2075 :.# identifier u\n+00009d10: 6964 2075 7365 724e 616d 6520 7661 6c75 id userName valu\n+00009d20: 650a 2320 6964 656e 7469 6669 6572 2067 e.# identifier g\n+00009d30: 6964 2067 726f 7570 4e61 6d65 2076 616c id groupName val\n+00009d40: 7565 0a3b 7573 6572 4772 6f75 7053 7461 ue.;userGroupSta\n+00009d50: 7446 696c 653d 0a0a 2320 6465 6661 756c tFile=..# defaul\n+00009d60: 7420 6973 2027 6e6f 272c 2069 6620 796f t is 'no', if yo\n+00009d70: 7520 646f 206e 6f74 2077 616e 7420 746f u do not want to\n+00009d80: 2063 6f6d 7072 6573 732c 2073 6179 2027 compress, say '\n+00009d90: 7965 7327 0a3b 646f 4e6f 7443 6f6d 7072 yes'.;doNotCompr\n+00009da0: 6573 734d 4435 4669 6c65 3d0a 0a23 2070 essMD5File=..# p\n+00009db0: 6572 6d69 7373 696f 6e73 206f 6620 2e6d ermissions of .m\n+00009dc0: 6435 6368 6563 6b53 756d 4669 6c65 2c20 d5checkSumFile, \n+00009dd0: 6465 6661 756c 7420 6973 2024 6368 6d6f default is $chmo\n+00009de0: 644d 4435 4669 6c65 0a3b 6368 6d6f 644d dMD5File.;chmodM\n+00009df0: 4435 4669 6c65 3d0a 0a23 2076 6572 626f D5File=..# verbo\n+00009e00: 7365 206d 6573 7361 6765 732c 2061 626f se messages, abo\n+00009e10: 7574 2065 7863 6570 7452 756c 6520 616e ut exceptRule an\n+00009e20: 6420 696e 636c 7564 6552 756c 650a 2320 d includeRule.# \n+00009e30: 616e 6420 6164 6465 6420 6669 6c65 732e and added files.\n+00009e40: 2064 6566 6175 6c74 2069 7320 276e 6f27 default is 'no'\n+00009e50: 0a3b 7665 7262 6f73 653d 0a0a 2320 6765 .;verbose=..# ge\n+00009e60: 6e65 7261 7465 2064 6562 7567 206d 6573 nerate debug mes\n+00009e70: 7361 6765 732c 206c 6576 656c 7320 6172 sages, levels ar\n+00009e80: 6520 3020 286e 6f6e 652c 2064 6566 6175 e 0 (none, defau\n+00009e90: 6c74 292c 0a23 2031 2028 736f 6d65 292c lt),.# 1 (some),\n+00009ea0: 2032 2028 6d61 6e79 2920 6d65 7373 6167 2 (many) messag\n+00009eb0: 6573 0a3b 6465 6275 673d 0a0a 2320 7265 es.;debug=..# re\n+00009ec0: 7365 7420 6163 6365 7373 2074 696d 6520 set access time \n+00009ed0: 696e 2074 6865 2073 6f75 7263 6520 6469 in the source di\n+00009ee0: 7265 6374 6f72 7920 2d20 6275 7420 7468 rectory - but th\n+00009ef0: 6973 2077 696c 6c0a 2320 6368 616e 6765 is will.# change\n+00009f00: 2063 7469 6d65 2028 7469 6d65 206f 6620 ctime (time of \n+00009f10: 6c61 7374 206d 6f64 6966 6963 6174 696f last modificatio\n+00009f20: 6e20 6f66 2066 696c 6520 7374 6174 7573 n of file status\n+00009f30: 0a23 2069 6e66 6f72 6d61 7469 6f6e 0a23 .# information.#\n+00009f40: 2064 6566 6175 6c74 2069 7320 276e 6f27 default is 'no'\n+00009f50: 2c20 6966 2079 6f75 2077 616e 7420 7468 , if you want th\n+00009f60: 6973 2c20 7361 7920 2779 6573 270a 3b72 is, say 'yes'.;r\n+00009f70: 6573 6574 4174 696d 653d 0a0a 2320 646f esetAtime=..# do\n+00009f80: 206e 6f74 2064 656c 6574 6520 616e 7920 not delete any \n+00009f90: 6f6c 6420 6261 636b 7570 2028 652e 672e old backup (e.g.\n+00009fa0: 2073 7065 6369 6669 6564 2076 6961 202d specified via -\n+00009fb0: 2d6b 6565 7041 6c6c 206f 720a 2320 2d2d -keepAll or.# --\n+00009fc0: 6b65 6570 5765 656b 6461 7929 2062 7574 keepWeekday) but\n+00009fd0: 2070 7269 6e74 2061 206d 6573 7361 6765 print a message\n+00009fe0: 2e20 5468 6973 2069 7320 666f 7220 7465 . This is for te\n+00009ff0: 7374 696e 6720 636f 6e66 6967 7572 6174 sting configurat\n+0000a000: 6f6e 730a 2320 6f72 2069 6620 796f 7520 ons.# or if you \n+0000a010: 7761 6e74 2074 6f20 6465 6c65 7465 206f want to delete o\n+0000a020: 6c64 2062 6163 6b75 7073 2077 6974 6820 ld backups with \n+0000a030: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p\n+0000a040: 6c2e 0a23 2056 616c 7565 7320 6172 6520 l..# Values are \n+0000a050: 2779 6573 2720 616e 6420 276e 6f27 2e20 'yes' and 'no'. \n+0000a060: 4465 6661 756c 7420 6973 2027 6e6f 2720 Default is 'no' \n+0000a070: 7768 6963 6820 6d65 616e 7320 746f 2064 which means to d\n+0000a080: 656c 6574 652e 0a3b 646f 4e6f 7444 656c elete..;doNotDel\n+0000a090: 6574 653d 0a0a 2320 6465 6c65 7465 206f ete=..# delete o\n+0000a0a0: 6c64 2062 6163 6b75 7073 2077 6869 6368 ld backups which\n+0000a0b0: 2068 6176 6520 6e6f 7420 6265 656e 2066 have not been f\n+0000a0c0: 696e 6973 6865 640a 2320 7468 6973 2077 inished.# this w\n+0000a0d0: 696c 6c20 6e6f 7420 6861 7070 656e 2069 ill not happen i\n+0000a0e0: 6620 646f 4e6f 7444 656c 6574 6520 6973 f doNotDelete is\n+0000a0f0: 2073 6574 0a23 2056 616c 7565 7320 6172 set.# Values ar\n+0000a100: 6520 2779 6573 2720 616e 6420 276e 6f27 e 'yes' and 'no'\n+0000a110: 2e20 4465 6661 756c 7420 6973 2027 6e6f . Default is 'no\n+0000a120: 2720 7768 6963 6820 6d65 616e 7320 746f ' which means to\n+0000a130: 2064 656c 6574 652e 0a3b 6465 6c65 7465 delete..;delete\n+0000a140: 4e6f 7446 696e 6973 6865 6444 6972 733d NotFinishedDirs=\n+0000a150: 0a0a 2320 6b65 6570 2062 6163 6b75 7073 ..# keep backups\n+0000a160: 2077 6869 6368 2061 7265 206e 6f74 206f which are not o\n+0000a170: 6c64 6572 2074 6861 6e20 7468 6520 7370 lder than the sp\n+0000a180: 6563 6966 6965 6420 616d 6f75 6e74 0a23 ecified amount.#\n+0000a190: 206f 6620 7469 6d65 2e20 5468 6973 2069 of time. This i\n+0000a1a0: 7320 6c69 6b65 2061 2064 6566 6175 6c74 s like a default\n+0000a1b0: 2076 616c 7565 2066 6f72 2061 6c6c 2064 value for all d\n+0000a1c0: 6179 7320 696e 0a23 202d 2d6b 6565 7057 ays in.# --keepW\n+0000a1d0: 6565 6b64 6179 2e20 4265 6769 6e73 2064 eekday. Begins d\n+0000a1e0: 656c 6574 696e 6720 6174 2074 6865 2065 eleting at the e\n+0000a1f0: 6e64 206f 6620 7468 6520 7363 7269 7074 nd of the script\n+0000a200: 0a23 2074 6865 2074 696d 6520 7261 6e67 .# the time rang\n+0000a210: 6520 6861 7320 746f 2062 6520 7370 6563 e has to be spec\n+0000a220: 6966 6965 6420 696e 2066 6f72 6d61 7420 ified in format \n+0000a230: 2764 686d 7327 2c20 652e 672e 0a23 2031 'dhms', e.g..# 1\n+0000a240: 3064 3468 206d 6561 6e73 2031 3020 6461 0d4h means 10 da\n+0000a250: 7973 2061 6e64 2034 2068 6f75 7273 0a23 ys and 4 hours.#\n+0000a260: 2064 6566 6175 6c74 203d 2024 6b65 6570 default = $keep\n+0000a270: 416c 6c3b 0a23 2041 6e20 6172 6368 6976 All;.# An archiv\n+0000a280: 6520 666c 6167 2069 7320 6e6f 7420 706f e flag is not po\n+0000a290: 7373 6962 6c65 2077 6974 6820 7468 6973 ssible with this\n+0000a2a0: 2070 6172 616d 6574 6572 2028 7365 6520 parameter (see \n+0000a2b0: 6265 6c6f 7729 2e0a 3b6b 6565 7041 6c6c below)..;keepAll\n+0000a2c0: 3d0a 0a23 206b 6565 7020 6261 636b 7570 =..# keep backup\n+0000a2d0: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif\n+0000a2e0: 6965 6420 6461 7973 2066 6f72 2074 6865 ied days for the\n+0000a2f0: 2073 7065 6369 6669 6564 0a23 2061 6d6f specified.# amo\n+0000a300: 756e 7420 6f66 2074 696d 652e 204f 7665 unt of time. Ove\n+0000a310: 7277 7269 7465 7320 7468 6520 6465 6661 rwrites the defa\n+0000a320: 756c 7420 7661 6c75 6573 2063 686f 7365 ult values chose\n+0000a330: 6e20 696e 0a23 202d 2d6b 6565 7041 6c6c n in.# --keepAll\n+0000a340: 2e20 274d 6f6e 2c57 6564 3a34 3064 2053 . 'Mon,Wed:40d S\n+0000a350: 6174 3a36 3064 3130 6d27 206d 6561 6e73 at:60d10m' means\n+0000a360: 3a0a 2320 6b65 6570 2062 6163 6b75 7073 :.# keep backups\n+0000a370: 2066 726f 6d20 4d6f 6e20 616e 6420 5765 from Mon and We\n+0000a380: 6420 3430 6461 7973 202b 2035 6d69 6e73 d 40days + 5mins\n+0000a390: 0a23 206b 6565 7020 6261 636b 7570 7320 .# keep backups \n+0000a3a0: 6672 6f6d 2053 6174 2036 3064 6179 7320 from Sat 60days \n+0000a3b0: 2b20 3130 6d69 6e73 0a23 206b 6565 7020 + 10mins.# keep \n+0000a3c0: 6261 636b 7570 7320 6672 6f6d 2074 6865 backups from the\n+0000a3d0: 2072 6573 7420 6f66 2074 6865 2064 6179 rest of the day\n+0000a3e0: 7320 6c69 6b65 2073 7063 6966 6965 6420 s like spcified \n+0000a3f0: 696e 0a23 202d 2d6b 6565 7041 6c6c 2028 in.# --keepAll (\n+0000a400: 6465 6661 756c 7420 246b 6565 7041 6c6c default $keepAll\n+0000a410: 290a 2320 796f 7520 6361 6e20 616c 736f ).# you can also\n+0000a420: 2073 6574 2074 6865 2027 6172 6368 6976 set the 'archiv\n+0000a430: 6520 666c 6167 272e 0a23 2027 4d6f 6e2c e flag'..# 'Mon,\n+0000a440: 5765 643a 6134 3064 356d 2053 6174 3a36 Wed:a40d5m Sat:6\n+0000a450: 3064 3130 6d27 206d 6561 6e73 3a0a 2320 0d10m' means:.# \n+0000a460: 6b65 6570 2062 6163 6b75 7073 2066 726f keep backups fro\n+0000a470: 6d20 4d6f 6e20 616e 6420 5765 6420 3430 m Mon and Wed 40\n+0000a480: 6461 7973 202b 2035 6d69 6e73 202b 2027 days + 5mins + '\n+0000a490: 6172 6368 6976 6527 0a23 206b 6565 7020 archive'.# keep \n+0000a4a0: 6261 636b 7570 7320 6672 6f6d 2053 6174 backups from Sat\n+0000a4b0: 2036 3064 6179 7320 2b20 3130 6d69 6e73 60days + 10mins\n+0000a4c0: 0a23 206b 6565 7020 6261 636b 7570 7320 .# keep backups \n+0000a4d0: 6672 6f6d 2074 6865 2072 6573 7420 6f66 from the rest of\n+0000a4e0: 2074 6865 2064 6179 7320 6c69 6b65 2073 the days like s\n+0000a4f0: 7065 6369 6669 6564 2069 6e0a 2320 2d2d pecified in.# --\n+0000a500: 6b65 6570 416c 6c20 2864 6566 6175 6c74 keepAll (default\n+0000a510: 2024 6b65 6570 416c 6c29 0a23 2049 6620 $keepAll).# If \n+0000a520: 796f 7520 616c 736f 2075 7365 2074 6865 you also use the\n+0000a530: 2027 6172 6368 6976 6520 666c 6167 2720 'archive flag' \n+0000a540: 6974 206d 6561 6e73 2074 6f20 6e6f 740a it means to not.\n+0000a550: 2320 6465 6c65 7465 2074 6865 2061 6666 # delete the aff\n+0000a560: 6563 7465 6420 6469 7265 6374 6f72 6965 ected directorie\n+0000a570: 7320 7669 6120 2d2d 6b65 6570 4d61 784e s via --keepMaxN\n+0000a580: 756d 6265 723a 0a23 2061 3130 6434 6820 umber:.# a10d4h \n+0000a590: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an\n+0000a5a0: 6420 3420 686f 7572 7320 616e 6420 2761 d 4 hours and 'a\n+0000a5b0: 7263 6869 7665 2066 6c61 6727 0a3b 6b65 rchive flag'.;ke\n+0000a5c0: 6570 5765 656b 6461 793d 0a0a 2320 646f epWeekday=..# do\n+0000a5d0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the \n+0000a5e0: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of \n+0000a5f0: 6120 7965 6172 0a23 2066 6f72 6d61 7420 a year.# format \n+0000a600: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi\n+0000a610: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc\n+0000a620: 6869 7665 2066 6c61 6727 0a3b 6b65 6570 hive flag'.;keep\n+0000a630: 4669 7273 744f 6659 6561 723d 0a0a 2320 FirstOfYear=..# \n+0000a640: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th\n+0000a650: 6520 6c61 7374 2062 6163 6b75 7020 6f66 e last backup of\n+0000a660: 2061 2079 6561 720a 2320 666f 726d 6174 a year.# format\n+0000a670: 2069 7320 7469 6d65 5065 7269 6f64 2077 is timePeriod w\n+0000a680: 6974 6820 706f 7373 6962 6c65 2027 6172 ith possible 'ar\n+0000a690: 6368 6976 6520 666c 6167 270a 3b6b 6565 chive flag'.;kee\n+0000a6a0: 704c 6173 744f 6659 6561 723d 0a0a 2320 pLastOfYear=..# \n+0000a6b0: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th\n+0000a6c0: 6520 6669 7273 7420 6261 636b 7570 206f e first backup o\n+0000a6d0: 6620 6120 6d6f 6e74 680a 2320 666f 726d f a month.# form\n+0000a6e0: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod\n+0000a6f0: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible '\n+0000a700: 6172 6368 6976 6520 666c 6167 270a 3b6b archive flag'.;k\n+0000a710: 6565 7046 6972 7374 4f66 4d6f 6e74 683d eepFirstOfMonth=\n+0000a720: 0a0a 2320 646f 206e 6f74 2064 656c 6574 ..# do not delet\n+0000a730: 6520 7468 6520 6c61 7374 2062 6163 6b75 e the last backu\n+0000a740: 7020 6f66 2061 206d 6f6e 7468 0a23 2066 p of a month.# f\n+0000a750: 6f72 6d61 7420 6973 2074 696d 6550 6572 ormat is timePer\n+0000a760: 696f 6420 7769 7468 2070 6f73 7369 626c iod with possibl\n+0000a770: 6520 2761 7263 6869 7665 2066 6c61 6727 e 'archive flag'\n+0000a780: 0a3b 6b65 6570 4c61 7374 4f66 4d6f 6e74 .;keepLastOfMont\n+0000a790: 683d 0a0a 2320 6465 6661 756c 743a 2027 h=..# default: '\n+0000a7a0: 5375 6e27 2e20 5468 6973 2076 616c 7565 Sun'. This value\n+0000a7b0: 2069 7320 7573 6564 2066 6f72 2063 616c is used for cal\n+0000a7c0: 6375 6c61 7469 6e67 0a23 202d 2d6b 6565 culating.# --kee\n+0000a7d0: 7046 6972 7374 4f66 5765 656b 2061 6e64 pFirstOfWeek and\n+0000a7e0: 202d 2d6b 6565 704c 6173 744f 6657 6565 --keepLastOfWee\n+0000a7f0: 6b0a 3b66 6972 7374 4461 794f 6657 6565 k.;firstDayOfWee\n+0000a800: 6b3d 0a0a 2320 646f 206e 6f74 2064 656c k=..# do not del\n+0000a810: 6574 6520 7468 6520 6669 7273 7420 6261 ete the first ba\n+0000a820: 636b 7570 206f 6620 6120 7765 656b 0a23 ckup of a week.#\n+0000a830: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP\n+0000a840: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi\n+0000a850: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla\n+0000a860: 6727 0a3b 6b65 6570 4669 7273 744f 6657 g'.;keepFirstOfW\n+0000a870: 6565 6b3d 0a0a 2320 646f 206e 6f74 2064 eek=..# do not d\n+0000a880: 656c 6574 6520 7468 6520 6c61 7374 2062 elete the last b\n+0000a890: 6163 6b75 7020 6f66 2061 2077 6565 6b0a ackup of a week.\n+0000a8a0: 2320 666f 726d 6174 2069 7320 7469 6d65 # format is time\n+0000a8b0: 5065 7269 6f64 2077 6974 6820 706f 7373 Period with poss\n+0000a8c0: 6962 6c65 2027 6172 6368 6976 6520 666c ible 'archive fl\n+0000a8d0: 6167 270a 3b6b 6565 704c 6173 744f 6657 ag'.;keepLastOfW\n+0000a8e0: 6565 6b3d 0a0a 2320 6b65 6570 206d 756c eek=..# keep mul\n+0000a8f0: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of\n+0000a900: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t\n+0000a910: 696d 6550 6572 696f 640a 2320 666f 726d imePeriod.# form\n+0000a920: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod\n+0000a930: 2c20 2761 7263 6869 7665 2066 6c61 6727 , 'archive flag'\n+0000a940: 2069 7320 6e6f 7420 706f 7373 6962 6c65 is not possible\n+0000a950: 0a23 2064 6566 6175 6c74 2069 7320 246b .# default is $k\n+0000a960: 6565 7044 7570 6c69 6361 7465 0a3b 6b65 eepDuplicate.;ke\n+0000a970: 6570 4475 706c 6963 6174 653d 0a0a 2320 epDuplicate=..# \n+0000a980: 4b65 6570 2074 6861 7420 6d69 6d69 6e75 Keep that miminu\n+0000a990: 6d20 6f66 2062 6163 6b75 7073 2e20 4d75 m of backups. Mu\n+0000a9a0: 6c74 6970 6c65 2062 6163 6b75 7073 206f ltiple backups o\n+0000a9b0: 6620 6f6e 650a 2320 6461 7920 6172 6520 f one.# day are \n+0000a9c0: 636f 756e 7465 6420 6173 206f 6e65 2062 counted as one b\n+0000a9d0: 6163 6b75 702e 2044 6566 6175 6c74 2069 ackup. Default i\n+0000a9e0: 7320 3130 2e0a 3b6b 6565 704d 696e 4e75 s 10..;keepMinNu\n+0000a9f0: 6d62 6572 3d0a 0a23 2054 7279 2074 6f20 mber=..# Try to \n+0000aa00: 6b65 6570 206f 6e6c 7920 7468 6174 206d keep only that m\n+0000aa10: 6178 696d 756d 206f 6620 6261 636b 7570 aximum of backup\n+0000aa20: 732e 2049 6620 796f 7520 6861 7665 206d s. If you have m\n+0000aa30: 6f72 650a 2320 6261 636b 7570 732c 2074 ore.# backups, t\n+0000aa40: 6865 2066 6f6c 6c6f 7769 6e67 2073 6571 he following seq\n+0000aa50: 7565 6e63 6520 6f66 2064 656c 6574 696e uence of deletin\n+0000aa60: 6720 7769 6c6c 2068 6170 7065 6e3a 0a23 g will happen:.#\n+0000aa70: 202d 2064 656c 6574 6520 616c 6c20 6475 - delete all du\n+0000aa80: 706c 6963 6174 6573 206f 6620 6120 6461 plicates of a da\n+0000aa90: 792c 2062 6567 696e 6e69 6e67 2077 6974 y, beginning wit\n+0000aaa0: 6820 7468 6520 6f6c 640a 2320 2020 6f6e h the old.# on\n+0000aab0: 6365 2c20 6578 6365 7074 2074 6865 206f ce, except the o\n+0000aac0: 6c64 6573 7420 6f66 2065 7665 7279 2064 ldest of every d\n+0000aad0: 6179 0a23 202d 2069 6620 7468 6973 2069 ay.# - if this i\n+0000aae0: 7320 6e6f 7420 656e 6f75 6768 2c20 6465 s not enough, de\n+0000aaf0: 6c65 7465 2074 6865 2072 6573 7420 6f66 lete the rest of\n+0000ab00: 2074 6865 2062 6163 6b75 7073 0a23 2020 the backups.# \n+0000ab10: 2062 6567 696e 6e69 6e67 2077 6974 6820 beginning with \n+0000ab20: 7468 6520 6f6c 6465 7374 2c20 6275 7420 the oldest, but \n+0000ab30: 2a6e 6576 6572 2a20 6120 6261 636b 7570 *never* a backup\n+0000ab40: 2077 6974 680a 2320 2020 7468 6520 2761 with.# the 'a\n+0000ab50: 7263 6869 7665 2066 6c61 6727 206f 7220 rchive flag' or \n+0000ab60: 7468 6520 6c61 7374 2062 6163 6b75 700a the last backup.\n+0000ab70: 3b6b 6565 704d 6178 4e75 6d62 6572 3d0a ;keepMaxNumber=.\n+0000ab80: 0a23 2041 6c74 6572 6e61 7469 7665 2064 .# Alternative d\n+0000ab90: 656c 6574 696f 6e20 7363 6865 6d65 2e20 eletion scheme. \n+0000aba0: 4966 2079 6f75 2075 7365 2074 6869 7320 If you use this \n+0000abb0: 6f70 7469 6f6e 2c20 616c 6c0a 2320 6f74 option, all.# ot\n+0000abc0: 6865 7220 6b65 6570 206f 7074 696f 6e73 her keep options\n+0000abd0: 2061 7265 2069 676e 6f72 6564 2e20 5072 are ignored. Pr\n+0000abe0: 6573 6572 7665 7320 6261 636b 7570 7320 eserves backups \n+0000abf0: 6465 7065 6e64 696e 670a 2320 6f6e 2074 depending.# on t\n+0000ac00: 6865 6972 202a 7265 6c61 7469 7665 2a20 heir *relative* \n+0000ac10: 6167 652e 2045 7861 6d70 6c65 3a0a 230a age. Example:.#.\n+0000ac20: 2320 2020 6b65 6570 5265 6c61 7469 7665 # keepRelative\n+0000ac30: 203d 2031 6420 3764 2036 3164 2039 3264 = 1d 7d 61d 92d\n+0000ac40: 0a23 0a23 2077 696c 6c20 2874 7279 2074 .#.# will (try t\n+0000ac50: 6f29 2065 6e73 7572 6520 7468 6174 2074 o) ensure that t\n+0000ac60: 6865 7265 2069 7320 616c 7761 7973 0a23 here is always.#\n+0000ac70: 0a23 202d 204f 6e65 2062 6163 6b75 7020 .# - One backup \n+0000ac80: 6265 7477 6565 6e20 3120 6461 7920 616e between 1 day an\n+0000ac90: 6420 3720 6461 7973 206f 6c64 0a23 202d d 7 days old.# -\n+0000aca0: 204f 6e65 2062 6163 6b75 7020 6265 7477 One backup betw\n+0000acb0: 6565 6e20 3520 6461 7973 2061 6e64 2032 een 5 days and 2\n+0000acc0: 206d 6f6e 7468 7320 6f6c 640a 2320 2d20 months old.# - \n+0000acd0: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe\n+0000ace0: 656e 207e 3220 6d6f 6e74 6873 2061 6e64 en ~2 months and\n+0000acf0: 207e 3320 6d6f 6e74 6873 206f 6c64 0a23 ~3 months old.#\n+0000ad00: 0a23 2049 6620 7468 6572 6520 6973 206e .# If there is n\n+0000ad10: 6f20 6261 636b 7570 2066 6f72 2061 2073 o backup for a s\n+0000ad20: 7065 6369 6669 6564 2074 696d 6573 7061 pecified timespa\n+0000ad30: 6e20 2865 2e67 2e20 6265 6361 7573 6520 n (e.g. because \n+0000ad40: 7468 650a 2320 6c61 7374 2062 6163 6b75 the.# last backu\n+0000ad50: 7020 7761 7320 646f 6e65 206d 6f72 6520 p was done more \n+0000ad60: 7468 616e 2032 2077 6565 6b73 2061 676f than 2 weeks ago\n+0000ad70: 2920 7468 6520 6e65 7874 206f 6c64 6572 ) the next older\n+0000ad80: 2062 6163 6b75 700a 2320 7769 6c6c 2062 backup.# will b\n+0000ad90: 6520 7573 6564 2066 6f72 2074 6869 7320 e used for this \n+0000ada0: 7469 6d65 7370 616e 2e0a 3b6b 6565 7052 timespan..;keepR\n+0000adb0: 656c 6174 6976 6520 3d0a 0a23 2070 7269 elative =..# pri\n+0000adc0: 6e74 2070 726f 6772 6573 7320 7265 706f nt progress repo\n+0000add0: 7274 2061 6674 6572 2065 6163 6820 276e rt after each 'n\n+0000ade0: 756d 6265 7227 2066 696c 6573 0a23 2044 umber' files.# D\n+0000adf0: 6566 6175 6c74 2069 7320 302c 2077 6869 efault is 0, whi\n+0000ae00: 6368 206d 6561 6e73 206e 6f20 7265 706f ch means no repo\n+0000ae10: 7274 732e 0a3b 7072 6f67 7265 7373 5265 rts..;progressRe\n+0000ae20: 706f 7274 3d0a 0a23 2070 7269 6e74 2064 port=..# print d\n+0000ae30: 6570 7468 206f 6620 6163 7475 616c 2072 epth of actual r\n+0000ae40: 6561 6465 6420 6469 7265 6374 6f72 7920 eaded directory \n+0000ae50: 6475 7269 6e67 2062 6163 6b75 700a 2320 during backup.# \n+0000ae60: 6465 6661 756c 7420 6973 2027 6e6f 272c default is 'no',\n+0000ae70: 2076 616c 7565 7320 6172 6520 2779 6573 values are 'yes\n+0000ae80: 2720 616e 6420 276e 6f27 0a3b 7072 696e ' and 'no'.;prin\n+0000ae90: 7444 6570 7468 3d0a 0a23 2069 676e 6f72 tDepth=..# ignor\n+0000aea0: 6520 7265 6164 2065 7272 6f72 7320 696e e read errors in\n+0000aeb0: 2073 6f75 7263 6520 6469 7265 6374 6f72 source director\n+0000aec0: 793b 206e 6f74 2072 6561 6461 626c 650a y; not readable.\n+0000aed0: 2320 6469 7265 6374 6f72 6965 7320 646f # directories do\n+0000aee0: 6573 206e 6f74 2063 6175 7365 2073 746f es not cause sto\n+0000aef0: 7265 4261 636b 7570 2e70 6c20 746f 2073 reBackup.pl to s\n+0000af00: 746f 7020 7072 6f63 6573 7369 6e67 0a23 top processing.#\n+0000af10: 2056 616c 7565 7320 6172 6520 2779 6573 Values are 'yes\n+0000af20: 2720 616e 6420 276e 6f27 2e20 4465 6661 ' and 'no'. Defa\n+0000af30: 756c 7420 6973 2027 6e6f 2720 7768 6963 ult is 'no' whic\n+0000af40: 6820 6d65 616e 7320 6e6f 740a 2320 746f h means not.# to\n+0000af50: 2069 676e 6f72 6520 7468 656d 0a3b 6967 ignore them.;ig\n+0000af60: 6e6f 7265 5265 6164 4572 726f 723d 0a0a noreReadError=..\n+0000af70: 2320 6166 7465 7220 6120 7375 6363 6573 # after a succes\n+0000af80: 7366 756c 2062 6163 6b75 702c 2073 6574 sful backup, set\n+0000af90: 2061 2073 796d 626f 6c69 6320 6c69 6e6b a symbolic link\n+0000afa0: 2074 6f0a 2320 7468 6174 2062 6163 6b75 to.# that backu\n+0000afb0: 7020 616e 6420 6465 6c65 7465 2065 7869 p and delete exi\n+0000afc0: 7374 696e 6720 6f6c 6465 7220 6c69 6e6b sting older link\n+0000afd0: 7320 7769 7468 2074 6865 0a23 2073 616d s with the.# sam\n+0000afe0: 6520 6e61 6d65 0a3b 6c69 6e6b 546f 5265 e name.;linkToRe\n+0000aff0: 6365 6e74 3d0a 0a23 206e 616d 6520 6f66 cent=..# name of\n+0000b000: 2074 6865 206c 6f67 2066 696c 6520 2864 the log file (d\n+0000b010: 6566 6175 6c74 2069 7320 5354 444f 5554 efault is STDOUT\n+0000b020: 290a 3b6c 6f67 4669 6c65 3d0a 0a23 2069 ).;logFile=..# i\n+0000b030: 6620 796f 7520 7370 6563 6966 7920 6120 f you specify a \n+0000b040: 6c6f 6720 6669 6c65 2077 6974 6820 2d2d log file with --\n+0000b050: 6c6f 6746 696c 6520 796f 7520 6361 6e0a logFile you can.\n+0000b060: 2320 6164 6469 7469 6f6e 616c 6c79 2070 # additionally p\n+0000b070: 7269 6e74 2074 6865 206f 7574 7075 7420 rint the output \n+0000b080: 746f 2053 5444 4f55 5420 7769 7468 2074 to STDOUT with t\n+0000b090: 6869 7320 666c 6167 0a23 2056 616c 7565 his flag.# Value\n+0000b0a0: 7320 6172 6520 2779 6573 2720 616e 6420 s are 'yes' and \n+0000b0b0: 276e 6f27 2e20 4465 6661 756c 7420 6973 'no'. Default is\n+0000b0c0: 2027 6e6f 272e 0a3b 706c 7573 4c6f 6753 'no'..;plusLogS\n+0000b0d0: 7464 6f75 743d 0a0a 2320 6f75 7470 7574 tdout=..# output\n+0000b0e0: 2069 6e20 6c6f 6766 696c 6520 7769 7468 in logfile with\n+0000b0f0: 2074 696d 653a 2027 7965 7327 206f 7220 time: 'yes' or \n+0000b100: 276e 6f27 0a23 2064 6566 6175 6c74 203d 'no'.# default =\n+0000b110: 206e 6f0a 3b73 7570 7072 6573 7354 696d no.;suppressTim\n+0000b120: 653d 0a0a 2320 6d61 7869 6d61 6c20 6c65 e=..# maximal le\n+0000b130: 6e67 7468 206f 6620 6c6f 6720 6669 6c65 ngth of log file\n+0000b140: 2c20 6465 6661 756c 7420 3d20 3165 360a , default = 1e6.\n+0000b150: 3b6d 6178 4669 6c65 6c65 6e3d 0a0a 2320 ;maxFilelen=..# \n+0000b160: 6e75 6d62 6572 206f 6620 6f6c 6420 6c6f number of old lo\n+0000b170: 6720 6669 6c65 732c 2064 6566 6175 6c74 g files, default\n+0000b180: 203d 2035 0a3b 6e6f 4f66 4f6c 6446 696c = 5.;noOfOldFil\n+0000b190: 6573 3d0a 0a23 2073 6176 6520 6c6f 6720 es=..# save log \n+0000b1a0: 6669 6c65 7320 7769 7468 2064 6174 6520 files with date \n+0000b1b0: 616e 6420 7469 6d65 2069 6e73 7465 6164 and time instead\n+0000b1c0: 206f 6620 6465 6c65 7469 6e67 2074 6865 of deleting the\n+0000b1d0: 0a23 206f 6c64 2028 7769 7468 205b 2d6e .# old (with [-n\n+0000b1e0: 6f4f 6c64 4669 6c65 735d 293a 2027 7965 oOldFiles]): 'ye\n+0000b1f0: 7327 206f 7220 276e 6f27 2c20 6465 6661 s' or 'no', defa\n+0000b200: 756c 7420 3d20 276e 6f27 0a3b 7361 7665 ult = 'no'.;save\n+0000b210: 4c6f 6773 3d0a 0a23 2063 6f6d 7072 6573 Logs=..# compres\n+0000b220: 7320 7361 7665 6420 6c6f 6720 6669 6c65 s saved log file\n+0000b230: 7320 2865 2e67 2e20 7769 7468 2027 677a s (e.g. with 'gz\n+0000b240: 6970 202d 3927 290a 2320 6465 6661 756c ip -9').# defaul\n+0000b250: 7420 6973 2027 627a 6970 3227 0a3b 636f t is 'bzip2'.;co\n+0000b260: 6d70 7265 7373 5769 7468 3d0a 0a23 2077 mpressWith=..# w\n+0000b270: 7269 7465 206c 6f67 2066 696c 6520 2861 rite log file (a\n+0000b280: 6c73 6f29 2069 6e20 7468 6520 6261 636b lso) in the back\n+0000b290: 7570 2064 6972 6563 746f 7279 3a0a 2320 up directory:.# \n+0000b2a0: 2779 6573 2720 6f72 2027 6e6f 272c 2064 'yes' or 'no', d\n+0000b2b0: 6566 6175 6c74 2069 7320 276e 6f27 0a23 efault is 'no'.#\n+0000b2c0: 2042 6520 6177 6172 6520 7468 6174 2074 Be aware that t\n+0000b2d0: 6869 7320 6c6f 6720 646f 6573 206e 6f74 his log does not\n+0000b2e0: 2063 6f6e 7461 696e 2061 6c6c 2065 7272 contain all err\n+0000b2f0: 6f72 0a23 206d 6573 7361 6765 7320 6f66 or.# messages of\n+0000b300: 2074 6865 206f 6e65 2073 7065 6369 6669 the one specifi\n+0000b310: 6564 2077 6974 6820 2d2d 6c6f 6746 696c ed with --logFil\n+0000b320: 6521 0a23 2053 6f6d 6520 6572 726f 7273 e!.# Some errors\n+0000b330: 2061 7265 2070 6f73 7369 626c 6520 6265 are possible be\n+0000b340: 666f 7265 2074 6865 2062 6163 6b75 700a fore the backup.\n+0000b350: 2320 6469 7265 6374 6f72 7920 6973 2063 # directory is c\n+0000b360: 7265 6174 6564 2e0a 3b6c 6f67 496e 4261 reated..;logInBa\n+0000b370: 636b 7570 4469 723d 0a0a 2320 636f 6d70 ckupDir=..# comp\n+0000b380: 7265 7373 2074 6865 206c 6f67 2066 696c ress the log fil\n+0000b390: 6520 696e 2074 6865 2062 6163 6b75 7020 e in the backup \n+0000b3a0: 6469 7265 6374 6f72 793a 0a23 2027 7965 directory:.# 'ye\n+0000b3b0: 7327 206f 7220 276e 6f27 2c20 6465 6661 s' or 'no', defa\n+0000b3c0: 756c 7420 6973 2027 6e6f 270a 3b63 6f6d ult is 'no'.;com\n+0000b3d0: 7072 6573 734c 6f67 496e 4261 636b 7570 pressLogInBackup\n+0000b3e0: 4469 723d 0a0a 2320 6669 6c65 6e61 6d65 Dir=..# filename\n+0000b3f0: 2074 6f20 7573 6520 666f 7220 7772 6974 to use for writ\n+0000b400: 696e 6720 7468 6520 6162 6f76 6520 6c6f ing the above lo\n+0000b410: 6720 6669 6c65 2c0a 2320 6465 6661 756c g file,.# defaul\n+0000b420: 7420 6973 2027 246c 6f67 496e 4261 636b t is '$logInBack\n+0000b430: 7570 4469 7246 696c 654e 616d 6527 0a3b upDirFileName'.;\n+0000b440: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+0000b450: 6c65 4e61 6d65 3d0a 0a45 4f43 0a20 2020 leName=..EOC. \n+0000b460: 203b 0a0a 0a26 7072 696e 7456 6572 7369 ;...&printVersi\n+0000b470: 6f6e 7328 5c40 4152 4756 2c20 272d 5627 ons(\\@ARGV, '-V'\n+0000b480: 293b 0a0a 6d79 2028 4062 6c6f 636b 5275 );..my (@blockRu\n+0000b490: 6c65 734f 7074 7329 3b0a 7b0a 2020 2020 lesOpts);.{. \n+0000b4a0: 6d79 2024 693b 0a20 2020 2066 6f72 6561 my $i;. forea\n+0000b4b0: 6368 2024 6920 2830 2e2e 246e 6f42 6c6f ch $i (0..$noBlo\n+0000b4c0: 636b 5275 6c65 732d 3129 0a20 2020 207b ckRules-1). {\n+0000b4d0: 0a09 7075 7368 2040 626c 6f63 6b52 756c ..push @blockRul\n+0000b4e0: 6573 4f70 7473 2c0a 094f 7074 696f 6e2d esOpts,..Option-\n+0000b4f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000b500: 2263 6865 636b 426c 6f63 6b73 5275 6c65 \"checkBlocksRule\n+0000b510: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i\",... '-cl_\n+0000b520: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 6368 option' => \"--ch\n+0000b530: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i\"\n+0000b540: 2c0a 0909 2020 2020 272d 6366 5f6b 6579 ,... '-cf_key\n+0000b550: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n+0000b560: 7352 756c 6524 6922 2c0a 0909 2020 2020 sRule$i\",... \n+0000b570: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => \n+0000b580: 2779 6573 2729 2c0a 094f 7074 696f 6e2d 'yes'),..Option-\n+0000b590: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000b5a0: 2263 6865 636b 426c 6f63 6b73 4253 2469 \"checkBlocksBS$i\n+0000b5b0: 222c 0a09 0920 2020 2027 2d63 6c5f 6f70 \",... '-cl_op\n+0000b5c0: 7469 6f6e 2720 3d3e 2022 2d2d 6368 6563 tion' => \"--chec\n+0000b5d0: 6b42 6c6f 636b 7342 5324 6922 2c0a 0909 kBlocksBS$i\",...\n+0000b5e0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000b5f0: 2022 6368 6563 6b42 6c6f 636b 7342 5324 \"checkBlocksBS$\n+0000b600: 6922 2c0a 0909 2020 2020 272d 6465 6661 i\",... '-defa\n+0000b610: 756c 7427 203d 3e20 2463 6865 636b 426c ult' => $checkBl\n+0000b620: 6f63 6b73 4253 6465 6661 756c 7429 2c0a ocksBSdefault),.\n+0000b630: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+0000b640: 616d 6527 203d 3e20 2263 6865 636b 426c ame' => \"checkBl\n+0000b650: 6f63 6b73 436f 6d70 7224 6922 2c0a 0909 ocksCompr$i\",...\n+0000b660: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000b670: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => \"--checkBloc\n+0000b680: 6b73 436f 6d70 7224 6922 2c0a 0909 2020 ksCompr$i\",... \n+0000b690: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => \"\n+0000b6a0: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr\n+0000b6b0: 2469 222c 0a09 0920 2020 2027 2d63 665f $i\",... '-cf_\n+0000b6c0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y\n+0000b6d0: 6573 272c 2027 6e6f 275d 292c 0a09 4f70 es', 'no']),..Op\n+0000b6e0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000b6f0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n+0000b700: 7352 6561 6424 6922 2c0a 0909 2020 2020 sRead$i\",... \n+0000b710: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000b720: 222d 2d63 6865 636b 426c 6f63 6b73 5265 \"--checkBlocksRe\n+0000b730: 6164 2469 222c 0a09 0920 2020 2027 2d63 ad$i\",... '-c\n+0000b740: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => \"check\n+0000b750: 426c 6f63 6b73 5265 6164 2469 222c 0a09 BlocksRead$i\",..\n+0000b760: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n+0000b770: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op\n+0000b780: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000b790: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n+0000b7a0: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i\",...\n+0000b7b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000b7c0: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => \"--checkBloc\n+0000b7d0: 6b73 5061 7261 6c6c 656c 2469 222c 0a09 ksParallel$i\",..\n+0000b7e0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000b7f0: 3e20 2263 6865 636b 426c 6f63 6b73 5061 > \"checkBlocksPa\n+0000b800: 7261 6c6c 656c 2469 222c 0a09 0920 2020 rallel$i\",... \n+0000b810: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n+0000b820: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n+0000b830: 293b 0a0a 2020 2020 7d0a 7d0a 6d79 2028 );.. }.}.my (\n+0000b840: 4062 6c6f 636b 4465 7669 6365 734f 7074 @blockDevicesOpt\n+0000b850: 7329 3b0a 7b0a 2020 2020 6d79 2024 693b s);.{. my $i;\n+0000b860: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i \n+0000b870: 2830 2e2e 246d 6169 6e3a 3a6e 6f42 6c6f (0..$main::noBlo\n+0000b880: 636b 4465 7669 6365 732d 3129 0a20 2020 ckDevices-1). \n+0000b890: 207b 0a09 7075 7368 2040 626c 6f63 6b44 {..push @blockD\n+0000b8a0: 6576 6963 6573 4f70 7473 2c0a 094f 7074 evicesOpts,..Opt\n+0000b8b0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000b8c0: 203d 3e20 2263 6865 636b 4465 7669 6365 => \"checkDevice\n+0000b8d0: 7324 6922 2c0a 0909 2020 2020 272d 636c s$i\",... '-cl\n+0000b8e0: 5f6f 7074 696f 6e27 203d 3e20 222d 2d63 _option' => \"--c\n+0000b8f0: 6865 636b 4465 7669 6365 7324 6922 2c0a heckDevices$i\",.\n+0000b900: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000b910: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => \"checkDevices\n+0000b920: 2469 222c 0a09 0920 2020 2027 2d6d 756c $i\",... '-mul\n+0000b930: 7469 706c 6527 203d 3e20 2779 6573 2729 tiple' => 'yes')\n+0000b940: 2c0a 094f 7074 696f 6e2d 3e6e 6577 2827 ,..Option->new('\n+0000b950: 2d6e 616d 6527 203d 3e20 2263 6865 636b -name' => \"check\n+0000b960: 4465 7669 6365 7344 6972 2469 222c 0a09 DevicesDir$i\",..\n+0000b970: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+0000b980: 2720 3d3e 2022 2d2d 6368 6563 6b44 6576 ' => \"--checkDev\n+0000b990: 6963 6573 4469 7224 6922 2c0a 0909 2020 icesDir$i\",... \n+0000b9a0: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => \"\n+0000b9b0: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$\n+0000b9c0: 6922 2c0a 0909 2020 2020 272d 6d75 6c74 i\",... '-mult\n+0000b9d0: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'),\n+0000b9e0: 0a09 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000b9f0: 6e61 6d65 2720 3d3e 2022 6368 6563 6b44 name' => \"checkD\n+0000ba00: 6576 6963 6573 4253 2469 222c 0a09 0920 evicesBS$i\",... \n+0000ba10: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+0000ba20: 3d3e 2022 2d2d 6368 6563 6b44 6576 6963 => \"--checkDevic\n+0000ba30: 6573 4253 2469 222c 0a09 0920 2020 2027 esBS$i\",... '\n+0000ba40: 2d63 665f 6b65 7927 203d 3e20 2263 6865 -cf_key' => \"che\n+0000ba50: 636b 4465 7669 6365 7342 5324 6922 2c0a ckDevicesBS$i\",.\n+0000ba60: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n+0000ba70: 203d 3e20 2463 6865 636b 426c 6f63 6b73 => $checkBlocks\n+0000ba80: 4253 6465 6661 756c 7429 2c0a 094f 7074 BSdefault),..Opt\n+0000ba90: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000baa0: 203d 3e20 2263 6865 636b 4465 7669 6365 => \"checkDevice\n+0000bab0: 7343 6f6d 7072 2469 222c 0a09 0920 2020 sCompr$i\",... \n+0000bac0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000bad0: 2022 2d2d 6368 6563 6b44 6576 6963 6573 \"--checkDevices\n+0000bae0: 436f 6d70 7224 6922 2c0a 0909 2020 2020 Compr$i\",... \n+0000baf0: 272d 6366 5f6b 6579 2720 3d3e 2022 6368 '-cf_key' => \"ch\n+0000bb00: 6563 6b44 6576 6963 6573 436f 6d70 7224 eckDevicesCompr$\n+0000bb10: 6922 2c0a 0909 2020 2020 272d 6366 5f6e i\",... '-cf_n\n+0000bb20: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye\n+0000bb30: 7327 2c20 276e 6f27 5d29 2c0a 094f 7074 s', 'no']),..Opt\n+0000bb40: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000bb50: 203d 3e20 2263 6865 636b 4465 7669 6365 => \"checkDevice\n+0000bb60: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i\",...\n+0000bb70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000bb80: 203d 3e20 222d 2d63 6865 636b 4465 7669 => \"--checkDevi\n+0000bb90: 6365 7350 6172 616c 6c65 6c24 6922 2c0a cesParallel$i\",.\n+0000bba0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000bbb0: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => \"checkDevices\n+0000bbc0: 5061 7261 6c6c 656c 2469 222c 0a09 0920 Parallel$i\",... \n+0000bbd0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n+0000bbe0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n+0000bbf0: 275d 293b 0a20 2020 207d 0a7d 0a0a 2323 ']);. }.}..##\n+0000bc00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0000bc10: 2323 2121 2121 2121 2121 2121 2121 2121 ##!!!!!!!!!!!!!!\n+0000bc20: 2121 0a6d 7920 2840 636f 6d70 7265 7373 !!.my (@compress\n+0000bc30: 5275 6c65 7329 3b0a 7b0a 2020 2020 6d79 Rules);.{. my\n+0000bc40: 2024 693b 0a0a 2020 2020 666f 7265 6163 $i;.. foreac\n+0000bc50: 6820 2469 2028 302e 2e24 6d61 696e 3a3a h $i (0..$main::\n+0000bc60: 6e6f 436f 6d70 7265 7373 5275 6c65 732d noCompressRules-\n+0000bc70: 3129 0a20 2020 207b 0a09 7075 7368 2040 1). {..push @\n+0000bc80: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,..\n+0000bc90: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+0000bca0: 6d65 2720 3d3e 2022 636f 6d70 7265 7373 me' => \"compress\n+0000bcb0: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i\",... '-cl_\n+0000bcc0: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 636f option' => \"--co\n+0000bcd0: 6d70 7265 7373 2469 222c 0a09 0920 2020 mpress$i\",... \n+0000bce0: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => \"c\n+0000bcf0: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i\",... \n+0000bd00: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n+0000bd10: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option\n+0000bd20: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000bd30: 2022 756e 636f 6d70 7265 7373 2469 222c \"uncompress$i\",\n+0000bd40: 0a09 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000bd50: 6f6e 2720 3d3e 2022 2d2d 756e 636f 6d70 on' => \"--uncomp\n+0000bd60: 7265 7373 2469 222c 0a09 0920 2020 2027 ress$i\",... '\n+0000bd70: 2d63 665f 6b65 7927 203d 3e20 2275 6e63 -cf_key' => \"unc\n+0000bd80: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i\",... \n+0000bd90: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n+0000bda0: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option\n+0000bdb0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000bdc0: 2022 706f 7374 6669 7824 6922 2c0a 0909 \"postfix$i\",...\n+0000bdd0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000bde0: 203d 3e20 222d 2d70 6f73 7466 6978 2469 => \"--postfix$i\n+0000bdf0: 222c 0a09 0920 2020 2027 2d63 665f 6b65 \",... '-cf_ke\n+0000be00: 7927 203d 3e20 2270 6f73 7466 6978 2469 y' => \"postfix$i\n+0000be10: 222c 0a09 0920 2020 2027 2d70 6172 616d \",... '-param\n+0000be20: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op\n+0000be30: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000be40: 2720 3d3e 2022 636f 6d70 7265 7373 5275 ' => \"compressRu\n+0000be50: 6c65 2469 222c 0a09 0920 2020 2027 2d63 le$i\",... '-c\n+0000be60: 6c5f 6f70 7469 6f6e 2720 3d3e 2022 2d2d l_option' => \"--\n+0000be70: 636f 6d70 7265 7373 5275 6c65 2469 222c compressRule$i\",\n+0000be80: 0a09 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000be90: 203d 3e20 2263 6f6d 7072 6573 7352 756c => \"compressRul\n+0000bea0: 6524 6922 2c0a 0909 2020 2020 272d 6d75 e$i\",... '-mu\n+0000beb0: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes'\n+0000bec0: 293b 0a20 2020 207d 0a7d 0a0a 6d79 2024 );. }.}..my $\n+0000bed0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C\n+0000bee0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new('\n+0000bef0: 2d61 6c6c 6f77 4c69 7374 7327 203d 3e20 -allowLists' => \n+0000bf00: 2779 6573 272c 0a20 2020 2020 2020 2020 'yes',. \n+0000bf10: 2020 2020 2020 2020 2020 2027 2d6c 6973 '-lis\n+0000bf20: 744d 6170 7069 6e67 2720 3d3e 2027 6f74 tMapping' => 'ot\n+0000bf30: 6865 7242 6163 6b75 7053 6572 6965 7327 herBackupSeries'\n+0000bf40: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+0000bf50: 2020 2020 2020 272d 636f 6e66 6967 4669 '-configFi\n+0000bf60: 6c65 2720 3d3e 2027 2d66 272c 0a09 0920 le' => '-f',... \n+0000bf70: 2020 2027 2d6c 6973 7427 203d 3e20 5b4f '-list' => [O\n+0000bf80: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000bf90: 6527 203d 3e20 2768 656c 7027 2c0a 0909 e' => 'help',...\n+0000bfa0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000bfb0: 6f6e 2720 3d3e 2027 2d2d 6865 6c70 2729 on' => '--help')\n+0000bfc0: 2c0a 0a20 2020 2020 2020 2020 2020 2020 ,.. \n+0000bfd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000bfe0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n+0000bff0: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi\n+0000c000: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n+0000c010: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000c020: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... \n+0000c030: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+0000c040: 2d2d 6669 6c65 272c 0a09 0909 0909 2020 --file',...... \n+0000c050: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y\n+0000c060: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n+0000c070: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not\n+0000c080: 205b 6765 6e65 7261 7465 5d27 292c 0a20 [generate]'),. \n+0000c090: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c0a0: 2020 2020 2020 2020 2020 2020 2020 204f O\n+0000c0b0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000c0c0: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate'\n+0000c0d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000c0e0: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g',\n+0000c0f0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+0000c100: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene\n+0000c110: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... \n+0000c120: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+0000c130: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+0000c140: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n+0000c150: 636f 6e66 6967 4669 6c65 5d27 292c 0a20 configFile]'),. \n+0000c160: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c170: 2020 2020 2020 2020 2020 2020 2020 204f O\n+0000c180: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000c190: 6527 203d 3e20 2770 7269 6e74 272c 0a09 e' => 'print',..\n+0000c1a0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+0000c1b0: 696f 6e27 203d 3e20 272d 2d70 7269 6e74 ion' => '--print\n+0000c1c0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+0000c1d0: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back\n+0000c1e0: 7570 4469 725d 2729 2c0a 2020 2020 2020 upDir]'),. \n+0000c1f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c200: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+0000c210: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000c220: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',...\n+0000c230: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000c240: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',....\n+0000c250: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+0000c260: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi\n+0000c270: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n+0000c280: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu\n+0000c290: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n+0000c2a0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+0000c2b0: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n+0000c2c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c2d0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n+0000c2e0: 272d 6e61 6d65 2720 3d3e 2027 736f 7572 '-name' => 'sour\n+0000c2f0: 6365 4469 7227 2c0a 0909 0909 0920 2020 ceDir',...... \n+0000c300: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000c310: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... \n+0000c320: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+0000c330: 2d2d 736f 7572 6365 4469 7227 2c0a 0909 --sourceDir',...\n+0000c340: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000c350: 203d 3e20 2773 6f75 7263 6544 6972 272c => 'sourceDir',\n+0000c360: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n+0000c370: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n+0000c380: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000c390: 6e61 6d65 2720 3d3e 2027 7365 7269 6573 name' => 'series\n+0000c3a0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000c3b0: 5f6f 7074 696f 6e27 203d 3e20 272d 5327 _option' => '-S'\n+0000c3c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000c3d0: 616c 6961 7327 203d 3e20 272d 2d73 6572 alias' => '--ser\n+0000c3e0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... '\n+0000c3f0: 2d63 665f 6b65 7927 203d 3e20 2773 6572 -cf_key' => 'ser\n+0000c400: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... '\n+0000c410: 2d64 6566 6175 6c74 2720 3d3e 2027 6465 -default' => 'de\n+0000c420: 6661 756c 7427 292c 0a09 0909 094f 7074 fault'),.....Opt\n+0000c430: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000c440: 203d 3e20 2774 6d70 6469 7227 2c0a 0909 => 'tmpdir',...\n+0000c450: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000c460: 6f6e 2720 3d3e 2027 2d54 272c 0a09 0909 on' => '-T',....\n+0000c470: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+0000c480: 2720 3d3e 2027 2d2d 746d 7064 6972 272c ' => '--tmpdir',\n+0000c490: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000c4a0: 6579 2720 3d3e 2027 746d 7044 6972 272c ey' => 'tmpDir',\n+0000c4b0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n+0000c4c0: 756c 7427 203d 3e20 2474 6d70 6469 7229 ult' => $tmpdir)\n+0000c4d0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+0000c4e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000c4f0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n+0000c500: 6e61 6d65 2720 3d3e 2027 6f74 6865 7242 name' => 'otherB\n+0000c510: 6163 6b75 7053 6572 6965 7327 2c0a 0909 ackupSeries',...\n+0000c520: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000c530: 203d 3e20 276f 7468 6572 4261 636b 7570 => 'otherBackup\n+0000c540: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... \n+0000c550: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n+0000c560: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n+0000c570: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000c580: 203d 3e20 276c 6f63 6b46 696c 6527 2c0a => 'lockFile',.\n+0000c590: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+0000c5a0: 7469 6f6e 2720 3d3e 2027 2d4c 272c 0a09 tion' => '-L',..\n+0000c5b0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+0000c5c0: 6173 2720 3d3e 2027 2d2d 6c6f 636b 4669 as' => '--lockFi\n+0000c5d0: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '-\n+0000c5e0: 6366 5f6b 6579 2720 3d3e 2027 6c6f 636b cf_key' => 'lock\n+0000c5f0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n+0000c600: 272d 6465 6661 756c 7427 203d 3e20 246c '-default' => $l\n+0000c610: 6f63 6b46 696c 6529 2c0a 0909 0909 4f70 ockFile),.....Op\n+0000c620: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000c630: 2720 3d3e 2027 756e 6c6f 636b 4265 666f ' => 'unlockBefo\n+0000c640: 7265 4465 6c27 2c0a 0909 0909 0920 2020 reDel',...... \n+0000c650: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000c660: 2027 2d2d 756e 6c6f 636b 4265 666f 7265 '--unlockBefore\n+0000c670: 4465 6c27 2c0a 0909 0909 0920 2020 2027 Del',...... '\n+0000c680: 2d63 665f 6b65 7927 203d 3e20 2775 6e6c -cf_key' => 'unl\n+0000c690: 6f63 6b42 6566 6f72 6544 656c 272c 0a09 ockBeforeDel',..\n+0000c6a0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n+0000c6b0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n+0000c6c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n+0000c6d0: 3e20 275b 6c6f 636b 4669 6c65 5d27 0a09 > '[lockFile]'..\n+0000c6e0: 0909 0909 2020 2020 292c 0a09 0909 094f .... ),.....O\n+0000c6f0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000c700: 6527 203d 3e20 2765 7863 6570 7444 6972 e' => 'exceptDir\n+0000c710: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n+0000c720: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d65 l_option' => '-e\n+0000c730: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000c740: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6578 _alias' => '--ex\n+0000c750: 6365 7074 4469 7273 272c 0a09 0909 0909 ceptDirs',......\n+0000c760: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000c770: 2027 6578 6365 7074 4469 7273 272c 0a09 'exceptDirs',..\n+0000c780: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip\n+0000c790: 6c65 2720 3d3e 2027 7965 7327 292c 0a09 le' => 'yes'),..\n+0000c7a0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000c7b0: 2d6e 616d 6527 203d 3e20 2769 6e63 6c75 -name' => 'inclu\n+0000c7c0: 6465 4469 7273 272c 0a09 0909 0909 2020 deDirs',...... \n+0000c7d0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000c7e0: 3e20 272d 6927 2c0a 0909 0909 0920 2020 > '-i',...... \n+0000c7f0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+0000c800: 272d 2d69 6e63 6c75 6465 4469 7273 272c '--includeDirs',\n+0000c810: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000c820: 6579 2720 3d3e 2027 696e 636c 7564 6544 ey' => 'includeD\n+0000c830: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... '\n+0000c840: 2d6d 756c 7469 706c 6527 203d 3e20 2779 -multiple' => 'y\n+0000c850: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option\n+0000c860: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000c870: 2027 6578 6365 7074 5275 6c65 272c 0a09 'exceptRule',..\n+0000c880: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+0000c890: 696f 6e27 203d 3e20 272d 2d65 7863 6570 ion' => '--excep\n+0000c8a0: 7452 756c 6527 2c0a 0909 0909 0920 2020 tRule',...... \n+0000c8b0: 2027 2d63 665f 6b65 7927 203d 3e20 2765 '-cf_key' => 'e\n+0000c8c0: 7863 6570 7452 756c 6527 2c0a 0909 0909 xceptRule',.....\n+0000c8d0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n+0000c8e0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n+0000c8f0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+0000c900: 616d 6527 203d 3e20 2769 6e63 6c75 6465 ame' => 'include\n+0000c910: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... \n+0000c920: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000c930: 272d 2d69 6e63 6c75 6465 5275 6c65 272c '--includeRule',\n+0000c940: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000c950: 6579 2720 3d3e 2027 696e 636c 7564 6552 ey' => 'includeR\n+0000c960: 756c 6527 2c0a 0909 0909 0920 2020 2027 ule',...... '\n+0000c970: 2d71 756f 7465 4576 616c 2720 3d3e 2027 -quoteEval' => '\n+0000c980: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n+0000c990: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+0000c9a0: 3e20 2777 7269 7465 4578 636c 7564 654c > 'writeExcludeL\n+0000c9b0: 6f67 272c 0a09 0909 0909 2020 2020 272d og',...... '-\n+0000c9c0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+0000c9d0: 2d77 7269 7465 4578 636c 7564 654c 6f67 -writeExcludeLog\n+0000c9e0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+0000c9f0: 5f6b 6579 2720 3d3e 2027 7772 6974 6545 _key' => 'writeE\n+0000ca00: 7863 6c75 6465 4c6f 6727 2c0a 0909 0909 xcludeLog',.....\n+0000ca10: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n+0000ca20: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n+0000ca30: 6e6f 275d 292c 0a09 0909 2020 2020 2020 no']),.... \n+0000ca40: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n+0000ca50: 6e61 6d65 2720 3d3e 2027 636f 6e74 4578 name' => 'contEx\n+0000ca60: 6365 7074 4469 7273 4572 7227 2c0a 0909 ceptDirsErr',...\n+0000ca70: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000ca80: 6f6e 2720 3d3e 2027 2d2d 636f 6e74 4578 on' => '--contEx\n+0000ca90: 6365 7074 4469 7273 4572 7227 2c0a 0909 ceptDirsErr',...\n+0000caa0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000cab0: 203d 3e20 2763 6f6e 7445 7863 6570 7444 => 'contExceptD\n+0000cac0: 6972 7345 7272 272c 0a09 0909 0909 2020 irsErr',...... \n+0000cad0: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet'\n+0000cae0: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no'\n+0000caf0: 5d29 2c0a 0909 0920 2020 2020 2020 204f ]),.... O\n+0000cb00: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000cb10: 6527 203d 3e20 2765 7863 6570 7454 7970 e' => 'exceptTyp\n+0000cb20: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n+0000cb30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+0000cb40: 2d65 7863 6570 7454 7970 6573 272c 0a09 -exceptTypes',..\n+0000cb50: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+0000cb60: 2720 3d3e 2027 6578 6365 7074 5479 7065 ' => 'exceptType\n+0000cb70: 7327 2c0a 0909 0909 0920 2020 2027 2d70 s',...... '-p\n+0000cb80: 6172 616d 2720 3d3e 2027 7965 7327 2c0a aram' => 'yes',.\n+0000cb90: 0909 0909 0920 2020 2027 2d70 6174 7465 ..... '-patte\n+0000cba0: 726e 2720 3d3e 2027 5c41 5b53 6263 6670 rn' => '\\A[Sbcfp\n+0000cbb0: 6c5d 2b5c 5a27 292c 0a09 0909 094f 7074 l]+\\Z'),.....Opt\n+0000cbc0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000cbd0: 203d 3e20 2763 7049 7347 6e75 272c 0a09 => 'cpIsGnu',..\n+0000cbe0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+0000cbf0: 696f 6e27 203d 3e20 272d 2d63 7049 7347 ion' => '--cpIsG\n+0000cc00: 6e75 272c 0a09 0909 0909 2020 2020 272d nu',...... '-\n+0000cc10: 6366 5f6b 6579 2720 3d3e 2027 6370 4973 cf_key' => 'cpIs\n+0000cc20: 476e 7527 2c0a 0909 0909 0920 2020 2027 Gnu',...... '\n+0000cc30: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n+0000cc40: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n+0000cc50: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+0000cc60: 2827 2d6e 616d 6527 203d 3e20 276c 696e ('-name' => 'lin\n+0000cc70: 6b53 796d 6c69 6e6b 7327 2c0a 0909 0909 kSymlinks',.....\n+0000cc80: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+0000cc90: 2720 3d3e 2027 2d2d 6c69 6e6b 5379 6d6c ' => '--linkSyml\n+0000cca0: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... \n+0000ccb0: 272d 6366 5f6b 6579 2720 3d3e 2027 6c69 '-cf_key' => 'li\n+0000ccc0: 6e6b 5379 6d6c 696e 6b73 272c 0a09 0909 nkSymlinks',....\n+0000ccd0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n+0000cce0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n+0000ccf0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n+0000cd00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000cd10: 3d3e 2027 7072 6563 6f6d 6d61 6e64 272c => 'precommand',\n+0000cd20: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+0000cd30: 7074 696f 6e27 203d 3e20 272d 2d70 7265 ption' => '--pre\n+0000cd40: 636f 6d6d 616e 6427 2c0a 0909 0909 0920 command',...... \n+0000cd50: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+0000cd60: 2770 7265 636f 6d6d 616e 6427 2c0a 0909 'precommand',...\n+0000cd70: 0909 0920 2020 2027 2d71 756f 7465 4576 ... '-quoteEv\n+0000cd80: 616c 2720 3d3e 2027 7965 7327 292c 0a09 al' => 'yes'),..\n+0000cd90: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000cda0: 2d6e 616d 6527 203d 3e20 2770 6f73 7463 -name' => 'postc\n+0000cdb0: 6f6d 6d61 6e64 272c 0a09 0909 0909 2020 ommand',...... \n+0000cdc0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000cdd0: 3e20 272d 2d70 6f73 7463 6f6d 6d61 6e64 > '--postcommand\n+0000cde0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+0000cdf0: 5f6b 6579 2720 3d3e 2027 706f 7374 636f _key' => 'postco\n+0000ce00: 6d6d 616e 6427 2c0a 0909 0909 0920 2020 mmand',...... \n+0000ce10: 2027 2d71 756f 7465 4576 616c 2720 3d3e '-quoteEval' =>\n+0000ce20: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n+0000ce30: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000ce40: 203d 3e20 2766 6f6c 6c6f 774c 696e 6b73 => 'followLinks\n+0000ce50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000ce60: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f\n+0000ce70: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',....\n+0000ce80: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000ce90: 3d3e 2027 666f 6c6c 6f77 4c69 6e6b 7327 => 'followLinks'\n+0000cea0: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+0000ceb0: 6175 6c74 2720 3d3e 2030 2c0a 0909 0909 ault' => 0,.....\n+0000cec0: 0920 2020 2027 2d70 6174 7465 726e 2720 . '-pattern' \n+0000ced0: 3d3e 2027 5c41 5c64 2b5c 5a27 292c 0a09 => '\\A\\d+\\Z'),..\n+0000cee0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000cef0: 2d6e 616d 6527 203d 3e20 2768 6967 684c -name' => 'highL\n+0000cf00: 6174 656e 6379 272c 0a09 0909 0909 2020 atency',...... \n+0000cf10: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000cf20: 3e20 272d 2d68 6967 684c 6174 656e 6379 > '--highLatency\n+0000cf30: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+0000cf40: 5f6b 6579 2720 3d3e 2027 6869 6768 4c61 _key' => 'highLa\n+0000cf50: 7465 6e63 7927 2c0a 0909 0909 0920 2020 tency',...... \n+0000cf60: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n+0000cf70: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n+0000cf80: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+0000cf90: 6577 2827 2d6e 616d 6527 203d 3e20 2769 ew('-name' => 'i\n+0000cfa0: 676e 6f72 6550 6572 6d73 272c 0a09 0909 gnorePerms',....\n+0000cfb0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+0000cfc0: 6e27 203d 3e20 272d 2d69 676e 6f72 6550 n' => '--ignoreP\n+0000cfd0: 6572 6d73 272c 0a09 0909 0909 2020 2020 erms',...... \n+0000cfe0: 272d 6366 5f6b 6579 2720 3d3e 2027 6967 '-cf_key' => 'ig\n+0000cff0: 6e6f 7265 5065 726d 7327 2c0a 0909 0909 norePerms',.....\n+0000d000: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n+0000d010: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n+0000d020: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio\n+0000d030: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+0000d040: 3e20 276c 6174 654c 696e 6b73 272c 0a09 > 'lateLinks',..\n+0000d050: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+0000d060: 696f 6e27 203d 3e20 272d 2d6c 6174 654c ion' => '--lateL\n+0000d070: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... \n+0000d080: 272d 6366 5f6b 6579 2720 3d3e 2027 6c61 '-cf_key' => 'la\n+0000d090: 7465 4c69 6e6b 7327 2c0a 0909 0909 0920 teLinks',...... \n+0000d0a0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n+0000d0b0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n+0000d0c0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option-\n+0000d0d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000d0e0: 276c 6174 6543 6f6d 7072 6573 7327 2c0a 'lateCompress',.\n+0000d0f0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+0000d100: 7469 6f6e 2720 3d3e 2027 2d2d 6c61 7465 tion' => '--late\n+0000d110: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',......\n+0000d120: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n+0000d130: 3e20 275b 6c61 7465 4c69 6e6b 735d 272c > '[lateLinks]',\n+0000d140: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000d150: 6579 2720 3d3e 2027 6c61 7465 436f 6d70 ey' => 'lateComp\n+0000d160: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... \n+0000d170: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n+0000d180: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n+0000d190: 2c0a 0909 0909 4062 6c6f 636b 5275 6c65 ,.....@blockRule\n+0000d1a0: 734f 7074 732c 0a09 0909 0940 626c 6f63 sOpts,.....@bloc\n+0000d1b0: 6b44 6576 6963 6573 4f70 7473 2c0a 0909 kDevicesOpts,...\n+0000d1c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000d1d0: 6e61 6d65 2720 3d3e 2027 6368 6563 6b42 name' => 'checkB\n+0000d1e0: 6c6f 636b 7353 7566 6669 7827 2c0a 0909 locksSuffix',...\n+0000d1f0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000d200: 6f6e 2720 3d3e 2027 2d2d 6368 6563 6b42 on' => '--checkB\n+0000d210: 6c6f 636b 7353 7566 6669 7827 2c0a 0909 locksSuffix',...\n+0000d220: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000d230: 203d 3e20 2763 6865 636b 426c 6f63 6b73 => 'checkBlocks\n+0000d240: 5375 6666 6978 272c 0a09 0909 0909 2020 Suffix',...... \n+0000d250: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n+0000d260: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n+0000d270: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000d280: 203d 3e20 2763 6865 636b 426c 6f63 6b73 => 'checkBlocks\n+0000d290: 4d69 6e53 697a 6527 2c0a 0909 0909 0920 MinSize',...... \n+0000d2a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+0000d2b0: 3d3e 2027 2d2d 6368 6563 6b42 6c6f 636b => '--checkBlock\n+0000d2c0: 734d 696e 5369 7a65 272c 0a09 0909 0909 sMinSize',......\n+0000d2d0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000d2e0: 2027 6368 6563 6b42 6c6f 636b 734d 696e 'checkBlocksMin\n+0000d2f0: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... \n+0000d300: 272d 6465 6661 756c 7427 203d 3e20 2731 '-default' => '1\n+0000d310: 3030 4d27 292c 0a09 0909 094f 7074 696f 00M'),.....Optio\n+0000d320: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+0000d330: 3e20 2763 6865 636b 426c 6f63 6b73 4253 > 'checkBlocksBS\n+0000d340: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000d350: 5f6f 7074 696f 6e27 203d 3e20 272d 2d63 _option' => '--c\n+0000d360: 6865 636b 426c 6f63 6b73 4253 272c 0a09 heckBlocksBS',..\n+0000d370: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+0000d380: 2720 3d3e 2027 6368 6563 6b42 6c6f 636b ' => 'checkBlock\n+0000d390: 7342 5327 2c0a 0909 0909 0920 2020 2027 sBS',...... '\n+0000d3a0: 2d64 6566 6175 6c74 2720 3d3e 2024 6368 -default' => $ch\n+0000d3b0: 6563 6b42 6c6f 636b 7342 5364 6566 6175 eckBlocksBSdefau\n+0000d3c0: 6c74 292c 0a09 0909 094f 7074 696f 6e2d lt),.....Option-\n+0000d3d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000d3e0: 2763 6865 636b 426c 6f63 6b73 436f 6d70 'checkBlocksComp\n+0000d3f0: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n+0000d400: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n+0000d410: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr\n+0000d420: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+0000d430: 5f6b 6579 2720 3d3e 2027 6368 6563 6b42 _key' => 'checkB\n+0000d440: 6c6f 636b 7343 6f6d 7072 272c 0a09 0909 locksCompr',....\n+0000d450: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n+0000d460: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n+0000d470: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n+0000d480: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000d490: 3d3e 2027 7175 6575 6542 6c6f 636b 272c => 'queueBlock',\n+0000d4a0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+0000d4b0: 7074 696f 6e27 203d 3e20 272d 2d71 7565 ption' => '--que\n+0000d4c0: 7565 426c 6f63 6b27 2c0a 0909 0909 0920 ueBlock',...... \n+0000d4d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+0000d4e0: 2771 7565 7565 426c 6f63 6b27 2c0a 0909 'queueBlock',...\n+0000d4f0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+0000d500: 2720 3d3e 2024 7175 6575 6542 6c6f 636b ' => $queueBlock\n+0000d510: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat\n+0000d520: 7465 726e 2720 3d3e 2027 5c41 5b31 2d39 tern' => '\\A[1-9\n+0000d530: 5d5c 642a 5c5a 2729 2c0a 0909 0909 4f70 ]\\d*\\Z'),.....Op\n+0000d540: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000d550: 2720 3d3e 2027 7361 7665 5241 4d27 2c0a ' => 'saveRAM',.\n+0000d560: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+0000d570: 7469 6f6e 2720 3d3e 2027 2d2d 7361 7665 tion' => '--save\n+0000d580: 5241 4d27 2c0a 0909 0909 0920 2020 2027 RAM',...... '\n+0000d590: 2d63 665f 6b65 7927 203d 3e20 2773 6176 -cf_key' => 'sav\n+0000d5a0: 6552 414d 272c 0a09 0909 0909 2020 2020 eRAM',...... \n+0000d5b0: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n+0000d5c0: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n+0000d5d0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+0000d5e0: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co\n+0000d5f0: 6d70 7265 7373 272c 0a09 0909 0909 2020 mpress',...... \n+0000d600: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000d610: 3e20 272d 6327 2c0a 0909 0909 0920 2020 > '-c',...... \n+0000d620: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+0000d630: 272d 2d63 6f6d 7072 6573 7327 2c0a 0909 '--compress',...\n+0000d640: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000d650: 203d 3e20 2763 6f6d 7072 6573 7327 2c0a => 'compress',.\n+0000d660: 0909 0909 0920 2020 2027 2d71 756f 7465 ..... '-quote\n+0000d670: 4576 616c 2720 3d3e 2027 7965 7327 2c0a Eval' => 'yes',.\n+0000d680: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n+0000d690: 6c74 2720 3d3e 205c 4063 6f6d 7072 6573 lt' => \\@compres\n+0000d6a0: 7329 2c0a 0909 0909 4f70 7469 6f6e 2d3e s),.....Option->\n+0000d6b0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+0000d6c0: 756e 636f 6d70 7265 7373 272c 0a09 0909 uncompress',....\n+0000d6d0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+0000d6e0: 6e27 203d 3e20 272d 7527 2c0a 0909 0909 n' => '-u',.....\n+0000d6f0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+0000d700: 203d 3e20 272d 2d75 6e63 6f6d 7072 6573 => '--uncompres\n+0000d710: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n+0000d720: 665f 6b65 7927 203d 3e20 2775 6e63 6f6d f_key' => 'uncom\n+0000d730: 7072 6573 7327 2c0a 0909 0909 0920 2020 press',...... \n+0000d740: 2027 2d71 756f 7465 4576 616c 2720 3d3e '-quoteEval' =>\n+0000d750: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... \n+0000d760: 2027 2d64 6566 6175 6c74 2720 3d3e 205c '-default' => \\\n+0000d770: 4075 6e63 6f6d 7072 6573 7329 2c0a 0909 @uncompress),...\n+0000d780: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000d790: 6e61 6d65 2720 3d3e 2027 706f 7374 6669 name' => 'postfi\n+0000d7a0: 7827 2c0a 0909 0909 0920 2020 2027 2d63 x',...... '-c\n+0000d7b0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d70 l_option' => '-p\n+0000d7c0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000d7d0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 706f _alias' => '--po\n+0000d7e0: 7374 6669 7827 2c0a 0909 0909 0920 2020 stfix',...... \n+0000d7f0: 2027 2d63 665f 6b65 7927 203d 3e20 2770 '-cf_key' => 'p\n+0000d800: 6f73 7466 6978 272c 0a09 0909 0909 2020 ostfix',...... \n+0000d810: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => \n+0000d820: 2470 6f73 7466 6978 292c 0a23 0909 0909 $postfix),.#....\n+0000d830: 4063 6f6d 7072 6573 7352 756c 6573 2c0a @compressRules,.\n+0000d840: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+0000d850: 272d 6e61 6d65 2720 3d3e 2027 6d69 6e43 '-name' => 'minC\n+0000d860: 6f6d 7072 6573 7353 697a 6527 2c0a 0909 ompressSize',...\n+0000d870: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000d880: 6f6e 2720 3d3e 2027 2d2d 6d69 6e43 6f6d on' => '--minCom\n+0000d890: 7072 6573 7353 697a 6527 2c0a 0909 0909 pressSize',.....\n+0000d8a0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000d8b0: 3e20 276d 696e 436f 6d70 7265 7373 5369 > 'minCompressSi\n+0000d8c0: 7a65 272c 0a09 0909 0909 2020 2020 272d ze',...... '-\n+0000d8d0: 6465 6661 756c 7427 203d 3e20 246d 696e default' => $min\n+0000d8e0: 436f 6d70 7265 7373 5369 7a65 2c0a 0909 CompressSize,...\n+0000d8f0: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern\n+0000d900: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 292c ' => '\\A\\d+\\Z'),\n+0000d910: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+0000d920: 2827 2d6e 616d 6527 203d 3e20 2763 6f6d ('-name' => 'com\n+0000d930: 7072 5275 6c65 272c 0a09 0909 0909 2020 prRule',...... \n+0000d940: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000d950: 3e20 272d 2d63 6f6d 7072 5275 6c65 272c > '--comprRule',\n+0000d960: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000d970: 6579 2720 3d3e 2027 636f 6d70 7252 756c ey' => 'comprRul\n+0000d980: 6527 2c0a 0909 0909 0920 2020 2027 2d71 e',...... '-q\n+0000d990: 756f 7465 4576 616c 2720 3d3e 2027 7965 uoteEval' => 'ye\n+0000d9a0: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option-\n+0000d9b0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000d9c0: 276e 6f43 6f6d 7072 6573 7327 2c0a 0909 'noCompress',...\n+0000d9d0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000d9e0: 6f6e 2720 3d3e 2027 2d2d 6e6f 436f 6d70 on' => '--noComp\n+0000d9f0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... \n+0000da00: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no\n+0000da10: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',......\n+0000da20: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n+0000da30: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n+0000da40: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\\\n+0000da50: 415b 312d 395d 5c64 2a5c 5a27 292c 0a09 A[1-9]\\d*\\Z'),..\n+0000da60: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000da70: 2d6e 616d 6527 203d 3e20 2771 7565 7565 -name' => 'queue\n+0000da80: 436f 6d70 7265 7373 272c 0a09 0909 0909 Compress',......\n+0000da90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000daa0: 203d 3e20 272d 2d71 7565 7565 436f 6d70 => '--queueComp\n+0000dab0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... \n+0000dac0: 272d 6366 5f6b 6579 2720 3d3e 2027 7175 '-cf_key' => 'qu\n+0000dad0: 6575 6543 6f6d 7072 6573 7327 2c0a 0909 eueCompress',...\n+0000dae0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+0000daf0: 2720 3d3e 2024 7175 6575 6543 6f6d 7072 ' => $queueCompr\n+0000db00: 6573 732c 0a09 0909 0909 2020 2020 272d ess,...... '-\n+0000db10: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\\A[\n+0000db20: 312d 395d 5c64 2a5c 5a27 292c 0a09 0909 1-9]\\d*\\Z'),....\n+0000db30: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+0000db40: 616d 6527 203d 3e20 276e 6f43 6f70 7927 ame' => 'noCopy'\n+0000db50: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000db60: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6e6f option' => '--no\n+0000db70: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... \n+0000db80: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no\n+0000db90: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... \n+0000dba0: 272d 6465 6661 756c 7427 203d 3e20 246e '-default' => $n\n+0000dbb0: 6f43 6f70 792c 0a09 0909 0909 2020 2020 oCopy,...... \n+0000dbc0: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\\\n+0000dbd0: 415b 312d 395d 5c64 2a5c 5a27 292c 0a09 A[1-9]\\d*\\Z'),..\n+0000dbe0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000dbf0: 2d6e 616d 6527 203d 3e20 2771 7565 7565 -name' => 'queue\n+0000dc00: 436f 7079 272c 0a09 0909 0909 2020 2020 Copy',...... \n+0000dc10: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000dc20: 272d 2d71 7565 7565 436f 7079 272c 0a09 '--queueCopy',..\n+0000dc30: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+0000dc40: 2720 3d3e 2027 7175 6575 6543 6f70 7927 ' => 'queueCopy'\n+0000dc50: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+0000dc60: 6175 6c74 2720 3d3e 2024 7175 6575 6543 ault' => $queueC\n+0000dc70: 6f70 792c 0a09 0909 0909 2020 2020 272d opy,...... '-\n+0000dc80: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\\A[\n+0000dc90: 312d 395d 5c64 2a5c 5a27 292c 0a09 0909 1-9]\\d*\\Z'),....\n+0000dca0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+0000dcb0: 616d 6527 203d 3e20 2763 6f70 7942 574c ame' => 'copyBWL\n+0000dcc0: 696d 6974 272c 0a09 0909 0909 2020 2020 imit',...... \n+0000dcd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000dce0: 272d 2d63 6f70 7942 574c 696d 6974 272c '--copyBWLimit',\n+0000dcf0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000dd00: 6579 2720 3d3e 2027 636f 7079 4257 4c69 ey' => 'copyBWLi\n+0000dd10: 6d69 7427 2c0a 0909 0909 0920 2020 2027 mit',...... '\n+0000dd20: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n+0000dd30: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat\n+0000dd40: 7465 726e 2720 3d3e 2027 5c41 5c64 2b5c tern' => '\\A\\d+\\\n+0000dd50: 5a27 292c 0a09 0909 094f 7074 696f 6e2d Z'),.....Option-\n+0000dd60: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000dd70: 2777 6974 6855 7365 7247 726f 7570 5374 'withUserGroupSt\n+0000dd80: 6174 272c 0a09 0909 0909 2020 2020 272d at',...... '-\n+0000dd90: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+0000dda0: 2d77 6974 6855 7365 7247 726f 7570 5374 -withUserGroupSt\n+0000ddb0: 6174 272c 0a09 0909 0909 2020 2020 272d at',...... '-\n+0000ddc0: 6366 5f6b 6579 2720 3d3e 2027 7769 7468 cf_key' => 'with\n+0000ddd0: 5573 6572 4772 6f75 7053 7461 7427 2c0a UserGroupStat',.\n+0000dde0: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no\n+0000ddf0: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes\n+0000de00: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O\n+0000de10: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000de20: 6527 203d 3e20 2775 7365 7247 726f 7570 e' => 'userGroup\n+0000de30: 5374 6174 4669 6c65 272c 0a09 0909 0909 StatFile',......\n+0000de40: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000de50: 203d 3e20 272d 2d75 7365 7247 726f 7570 => '--userGroup\n+0000de60: 5374 6174 4669 6c65 272c 0a09 0909 0909 StatFile',......\n+0000de70: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000de80: 2027 7573 6572 4772 6f75 7053 7461 7446 'userGroupStatF\n+0000de90: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n+0000dea0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n+0000deb0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+0000dec0: 6577 2827 2d6e 616d 6527 203d 3e20 2765 ew('-name' => 'e\n+0000ded0: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',...\n+0000dee0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000def0: 6f6e 2720 3d3e 2027 2d2d 6578 6365 7074 on' => '--except\n+0000df00: 5375 6666 6978 272c 0a09 0909 0909 2020 Suffix',...... \n+0000df10: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+0000df20: 6578 6365 7074 5375 6666 6978 272c 0a09 exceptSuffix',..\n+0000df30: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip\n+0000df40: 6c65 2720 3d3e 2027 7965 7327 2c0a 0909 le' => 'yes',...\n+0000df50: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+0000df60: 2720 3d3e 205c 4065 7863 6570 7453 7566 ' => \\@exceptSuf\n+0000df70: 6669 7829 2c0a 0909 0909 4f70 7469 6f6e fix),.....Option\n+0000df80: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000df90: 2027 636f 6d70 7265 7373 5375 6666 6978 'compressSuffix\n+0000dfa0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000dfb0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d63 _option' => '--c\n+0000dfc0: 6f6d 7072 6573 7353 7566 6669 7827 2c0a ompressSuffix',.\n+0000dfd0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+0000dfe0: 7927 203d 3e20 2763 6f6d 7072 6573 7353 y' => 'compressS\n+0000dff0: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... \n+0000e000: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => \n+0000e010: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n+0000e020: 272d 6465 6661 756c 7427 203d 3e20 5b5d '-default' => []\n+0000e030: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+0000e040: 6577 2827 2d6e 616d 6527 203d 3e20 2761 ew('-name' => 'a\n+0000e050: 6464 4578 6365 7074 5375 6666 6978 272c ddExceptSuffix',\n+0000e060: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+0000e070: 7074 696f 6e27 203d 3e20 272d 2d61 6464 ption' => '--add\n+0000e080: 4578 6365 7074 5375 6666 6978 272c 0a09 ExceptSuffix',..\n+0000e090: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+0000e0a0: 2720 3d3e 2027 6164 6445 7863 6570 7453 ' => 'addExceptS\n+0000e0b0: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... \n+0000e0c0: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => \n+0000e0d0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n+0000e0e0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000e0f0: 3d3e 2027 646f 4e6f 7443 6f6d 7072 6573 => 'doNotCompres\n+0000e100: 734d 4435 4669 6c65 272c 0a09 0909 0909 sMD5File',......\n+0000e110: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000e120: 203d 3e20 272d 2d64 6f4e 6f74 436f 6d70 => '--doNotComp\n+0000e130: 7265 7373 4d44 3546 696c 6527 2c0a 0909 ressMD5File',...\n+0000e140: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000e150: 203d 3e20 2764 6f4e 6f74 436f 6d70 7265 => 'doNotCompre\n+0000e160: 7373 4d44 3546 696c 6527 2c0a 0909 0909 ssMD5File',.....\n+0000e170: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n+0000e180: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n+0000e190: 6e6f 275d 292c 0a20 2020 2020 2020 2020 no']),. \n+0000e1a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000e1b0: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n\n+0000e1c0: 6577 2827 2d6e 616d 6527 203d 3e20 2763 ew('-name' => 'c\n+0000e1d0: 686d 6f64 4d44 3546 696c 6527 2c0a 0909 hmodMD5File',...\n+0000e1e0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000e1f0: 6f6e 2720 3d3e 2027 2d2d 6368 6d6f 644d on' => '--chmodM\n+0000e200: 4435 4669 6c65 272c 0a09 0909 0909 2020 D5File',...... \n+0000e210: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+0000e220: 6368 6d6f 644d 4435 4669 6c65 272c 0a09 chmodMD5File',..\n+0000e230: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n+0000e240: 7427 203d 3e20 2463 686d 6f64 4d44 3546 t' => $chmodMD5F\n+0000e250: 696c 652c 0a09 0909 0909 2020 2020 272d ile,...... '-\n+0000e260: 7061 7474 6572 6e27 203d 3e20 275c 4130 pattern' => '\\A0\n+0000e270: 5b30 2d37 5d7b 332c 347d 5c5a 2729 2c0a [0-7]{3,4}\\Z'),.\n+0000e280: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+0000e290: 272d 6e61 6d65 2720 3d3e 2027 7665 7262 '-name' => 'verb\n+0000e2a0: 6f73 6527 2c0a 0909 0909 0920 2020 2027 ose',...... '\n+0000e2b0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+0000e2c0: 2d76 272c 0a09 0909 0909 2020 2020 272d -v',...... '-\n+0000e2d0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n+0000e2e0: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... \n+0000e2f0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+0000e300: 2776 6572 626f 7365 272c 0a09 0909 0909 'verbose',......\n+0000e310: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe\n+0000e320: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n\n+0000e330: 6f27 5d29 2c0a 0909 0909 4f70 7469 6f6e o']),.....Option\n+0000e340: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000e350: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... \n+0000e360: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+0000e370: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... \n+0000e380: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n+0000e390: 2027 2d2d 6465 6275 6727 2c0a 0909 0909 '--debug',.....\n+0000e3a0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000e3b0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',......\n+0000e3c0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' =\n+0000e3d0: 3e20 302c 0a09 0909 0909 2020 2020 272d > 0,...... '-\n+0000e3e0: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\\A[\n+0000e3f0: 302d 345d 5c5a 2729 2c0a 0909 0909 4f70 0-4]\\Z'),.....Op\n+0000e400: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000e410: 2720 3d3e 2027 7265 7365 7441 7469 6d65 ' => 'resetAtime\n+0000e420: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000e430: 5f6f 7074 696f 6e27 203d 3e20 272d 2d72 _option' => '--r\n+0000e440: 6573 6574 4174 696d 6527 2c0a 0909 0909 esetAtime',.....\n+0000e450: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000e460: 3e20 2772 6573 6574 4174 696d 6527 2c0a > 'resetAtime',.\n+0000e470: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no\n+0000e480: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes\n+0000e490: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O\n+0000e4a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000e4b0: 6527 203d 3e20 2764 6f4e 6f74 4465 6c65 e' => 'doNotDele\n+0000e4c0: 7465 272c 0a09 0909 0909 2020 2020 272d te',...... '-\n+0000e4d0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+0000e4e0: 2d64 6f4e 6f74 4465 6c65 7465 272c 0a09 -doNotDelete',..\n+0000e4f0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+0000e500: 2720 3d3e 2027 646f 4e6f 7444 656c 6574 ' => 'doNotDelet\n+0000e510: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+0000e520: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [\n+0000e530: 2779 6573 272c 2027 6e6f 275d 292c 0a09 'yes', 'no']),..\n+0000e540: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000e550: 2d6e 616d 6527 203d 3e20 2764 656c 6574 -name' => 'delet\n+0000e560: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs\n+0000e570: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000e580: 5f6f 7074 696f 6e27 203d 3e20 272d 2d64 _option' => '--d\n+0000e590: 656c 6574 654e 6f74 4669 6e69 7368 6564 eleteNotFinished\n+0000e5a0: 4469 7273 272c 0a09 0909 0909 2020 2020 Dirs',...... \n+0000e5b0: 272d 6366 5f6b 6579 2720 3d3e 2027 6465 '-cf_key' => 'de\n+0000e5c0: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD\n+0000e5d0: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... '\n+0000e5e0: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n+0000e5f0: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n+0000e600: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+0000e610: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee\n+0000e620: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... \n+0000e630: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000e640: 272d 2d6b 6565 7041 6c6c 272c 0a09 0909 '--keepAll',....\n+0000e650: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000e660: 3d3e 2027 6b65 6570 416c 6c27 2c0a 0909 => 'keepAll',...\n+0000e670: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+0000e680: 2720 3d3e 2024 6b65 6570 416c 6c29 2c0a ' => $keepAll),.\n+0000e690: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+0000e6a0: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n+0000e6b0: 5765 656b 6461 7927 2c0a 0909 0909 0920 Weekday',...... \n+0000e6c0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+0000e6d0: 3d3e 2027 2d2d 6b65 6570 5765 656b 6461 => '--keepWeekda\n+0000e6e0: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c\n+0000e6f0: 665f 6b65 7927 203d 3e20 276b 6565 7057 f_key' => 'keepW\n+0000e700: 6565 6b64 6179 272c 0a09 0909 0909 2020 eekday',...... \n+0000e710: 2020 272d 7175 6f74 6545 7661 6c27 203d '-quoteEval' =\n+0000e720: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n+0000e730: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000e740: 2720 3d3e 2027 6b65 6570 4669 7273 744f ' => 'keepFirstO\n+0000e750: 6659 6561 7227 2c0a 0909 0909 0920 2020 fYear',...... \n+0000e760: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000e770: 2027 2d2d 6b65 6570 4669 7273 744f 6659 '--keepFirstOfY\n+0000e780: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... '\n+0000e790: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee\n+0000e7a0: 7046 6972 7374 4f66 5965 6172 272c 0a09 pFirstOfYear',..\n+0000e7b0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n+0000e7c0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n+0000e7d0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+0000e7e0: 6d65 2720 3d3e 2027 6b65 6570 4c61 7374 me' => 'keepLast\n+0000e7f0: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... \n+0000e800: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000e810: 3e20 272d 2d6b 6565 704c 6173 744f 6659 > '--keepLastOfY\n+0000e820: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... '\n+0000e830: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee\n+0000e840: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',...\n+0000e850: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n+0000e860: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O\n+0000e870: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000e880: 6527 203d 3e20 276b 6565 7046 6972 7374 e' => 'keepFirst\n+0000e890: 4f66 4d6f 6e74 6827 2c0a 0909 0909 0920 OfMonth',...... \n+0000e8a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+0000e8b0: 3d3e 2027 2d2d 6b65 6570 4669 7273 744f => '--keepFirstO\n+0000e8c0: 664d 6f6e 7468 272c 0a09 0909 0909 2020 fMonth',...... \n+0000e8d0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+0000e8e0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n+0000e8f0: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+0000e900: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n+0000e910: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+0000e920: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n+0000e930: 4c61 7374 4f66 4d6f 6e74 6827 2c0a 0909 LastOfMonth',...\n+0000e940: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000e950: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4c61 on' => '--keepLa\n+0000e960: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',.....\n+0000e970: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000e980: 3e20 276b 6565 704c 6173 744f 664d 6f6e > 'keepLastOfMon\n+0000e990: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n+0000e9a0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n+0000e9b0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+0000e9c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000e9d0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n+0000e9e0: 6e61 6d65 2720 3d3e 2027 6669 7273 7444 name' => 'firstD\n+0000e9f0: 6179 4f66 5765 656b 272c 0a09 0909 0909 ayOfWeek',......\n+0000ea00: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000ea10: 203d 3e20 272d 2d66 6972 7374 4461 794f => '--firstDayO\n+0000ea20: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... \n+0000ea30: 2027 2d63 665f 6b65 7927 203d 3e20 2766 '-cf_key' => 'f\n+0000ea40: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',.\n+0000ea50: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n+0000ea60: 6c74 2720 3d3e 2027 5375 6e27 292c 0a09 lt' => 'Sun'),..\n+0000ea70: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+0000ea80: 2d6e 616d 6527 203d 3e20 276b 6565 7046 -name' => 'keepF\n+0000ea90: 6972 7374 4f66 5765 656b 272c 0a09 0909 irstOfWeek',....\n+0000eaa0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+0000eab0: 6e27 203d 3e20 272d 2d6b 6565 7046 6972 n' => '--keepFir\n+0000eac0: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',......\n+0000ead0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000eae0: 2027 6b65 6570 4669 7273 744f 6657 6565 'keepFirstOfWee\n+0000eaf0: 6b27 2c0a 0909 0909 0920 2020 2027 2d70 k',...... '-p\n+0000eb00: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'),\n+0000eb10: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+0000eb20: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee\n+0000eb30: 704c 6173 744f 6657 6565 6b27 2c0a 0909 pLastOfWeek',...\n+0000eb40: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+0000eb50: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4c61 on' => '--keepLa\n+0000eb60: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',......\n+0000eb70: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000eb80: 2027 6b65 6570 4c61 7374 4f66 5765 656b 'keepLastOfWeek\n+0000eb90: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+0000eba0: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n+0000ebb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ebc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ebd0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+0000ebe0: 6d65 2720 3d3e 2027 6b65 6570 4475 706c me' => 'keepDupl\n+0000ebf0: 6963 6174 6527 2c0a 0909 0909 0920 2020 icate',...... \n+0000ec00: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000ec10: 2027 2d2d 6b65 6570 4475 706c 6963 6174 '--keepDuplicat\n+0000ec20: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+0000ec30: 665f 6b65 7927 203d 3e20 276b 6565 7044 f_key' => 'keepD\n+0000ec40: 7570 6c69 6361 7465 272c 0a09 0909 0909 uplicate',......\n+0000ec50: 2020 2020 272d 6465 6661 756c 7427 203d '-default' =\n+0000ec60: 3e20 246b 6565 7044 7570 6c69 6361 7465 > $keepDuplicate\n+0000ec70: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. \n+0000ec80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ec90: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n+0000eca0: 2d6e 616d 6527 203d 3e20 276b 6565 704d -name' => 'keepM\n+0000ecb0: 696e 4e75 6d62 6572 272c 0a09 0909 0909 inNumber',......\n+0000ecc0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000ecd0: 203d 3e20 272d 2d6b 6565 704d 696e 4e75 => '--keepMinNu\n+0000ece0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... \n+0000ecf0: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke\n+0000ed00: 6570 4d69 6e4e 756d 6265 7227 2c0a 0909 epMinNumber',...\n+0000ed10: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+0000ed20: 2720 3d3e 2031 302c 0a09 0909 0909 2020 ' => 10,...... \n+0000ed30: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n+0000ed40: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\\A\\d+\\Z'),. \n+0000ed50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ed60: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n+0000ed70: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000ed80: 3d3e 2027 6b65 6570 4d61 784e 756d 6265 => 'keepMaxNumbe\n+0000ed90: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n+0000eda0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n+0000edb0: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',.\n+0000edc0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+0000edd0: 7927 203d 3e20 276b 6565 704d 6178 4e75 y' => 'keepMaxNu\n+0000ede0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... \n+0000edf0: 272d 6465 6661 756c 7427 203d 3e20 302c '-default' => 0,\n+0000ee00: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n+0000ee10: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\\A\\d+\\Z\n+0000ee20: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n+0000ee30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ee40: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n+0000ee50: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n+0000ee60: 5265 6c61 7469 7665 272c 0a09 0909 0909 Relative',......\n+0000ee70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000ee80: 203d 3e20 272d 2d6b 6565 7052 656c 6174 => '--keepRelat\n+0000ee90: 6976 6527 2c0a 0909 0909 0920 2020 2027 ive',...... '\n+0000eea0: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee\n+0000eeb0: 7052 656c 6174 6976 6527 2c0a 0909 0909 pRelative',.....\n+0000eec0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n+0000eed0: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',.....\n+0000eee0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n+0000eef0: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. \n+0000ef00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000ef10: 2020 2020 2020 2020 204f 7074 696f 6e2d Option-\n+0000ef20: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000ef30: 2769 676e 6f72 6552 6561 6445 7272 6f72 'ignoreReadError\n+0000ef40: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000ef50: 5f6f 7074 696f 6e27 203d 3e20 272d 2d69 _option' => '--i\n+0000ef60: 676e 6f72 6552 6561 6445 7272 6f72 272c gnoreReadError',\n+0000ef70: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000ef80: 6579 2720 3d3e 2027 6967 6e6f 7265 5265 ey' => 'ignoreRe\n+0000ef90: 6164 4572 726f 7227 2c0a 0909 0909 0920 adError',...... \n+0000efa0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n+0000efb0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n+0000efc0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option-\n+0000efd0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000efe0: 2773 7570 7072 6573 7357 6172 6e69 6e67 'suppressWarning\n+0000eff0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000f000: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s\n+0000f010: 7570 7072 6573 7357 6172 6e69 6e67 272c uppressWarning',\n+0000f020: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000f030: 6579 2720 3d3e 2027 7375 7070 7265 7373 ey' => 'suppress\n+0000f040: 5761 726e 696e 6727 2c0a 0909 0909 0920 Warning',...... \n+0000f050: 2020 2027 2d6d 756c 7469 706c 6527 203d '-multiple' =\n+0000f060: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... \n+0000f070: 2020 272d 7061 7474 6572 6e27 203d 3e0a '-pattern' =>.\n+0000f080: 2020 275c 4165 7863 4469 725c 5a7c 5c41 '\\AexcDir\\Z|\\A\n+0000f090: 6669 6c65 4368 616e 6765 5c5a 7c5c 4163 fileChange\\Z|\\Ac\n+0000f0a0: 7253 6572 6965 735c 5a7c 5c41 6861 7368 rSeries\\Z|\\Ahash\n+0000f0b0: 436f 6c6c 6973 696f 6e5c 5a7c 5c41 6669 Collision\\Z|\\Afi\n+0000f0c0: 6c65 4e61 6d65 5769 7468 4c69 6e65 4665 leNameWithLineFe\n+0000f0d0: 6564 5c5a 2729 2c0a 0909 0909 4f70 7469 ed\\Z'),.....Opti\n+0000f0e0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000f0f0: 3d3e 2027 6c69 6e6b 546f 5265 6365 6e74 => 'linkToRecent\n+0000f100: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000f110: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6c _option' => '--l\n+0000f120: 696e 6b54 6f52 6563 656e 7427 2c0a 0909 inkToRecent',...\n+0000f130: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000f140: 203d 3e20 276c 696e 6b54 6f52 6563 656e => 'linkToRecen\n+0000f150: 7427 2c0a 0909 0909 0920 2020 2027 2d70 t',...... '-p\n+0000f160: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'),\n+0000f170: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+0000f180: 2827 2d6e 616d 6527 203d 3e20 276c 6f67 ('-name' => 'log\n+0000f190: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n+0000f1a0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000f1b0: 272d 6c27 2c0a 0909 0909 0920 2020 2027 '-l',...... '\n+0000f1c0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+0000f1d0: 2d6c 6f67 4669 6c65 272c 0a09 0909 0909 -logFile',......\n+0000f1e0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000f1f0: 2027 6c6f 6746 696c 6527 2c0a 0909 0909 'logFile',.....\n+0000f200: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n+0000f210: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n+0000f220: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+0000f230: 203d 3e20 2770 6c75 734c 6f67 5374 646f => 'plusLogStdo\n+0000f240: 7574 272c 0a09 0909 0909 2020 2020 272d ut',...... '-\n+0000f250: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+0000f260: 2d70 6c75 734c 6f67 5374 646f 7574 272c -plusLogStdout',\n+0000f270: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000f280: 6579 2720 3d3e 2027 706c 7573 4c6f 6753 ey' => 'plusLogS\n+0000f290: 7464 6f75 7427 2c0a 0909 0909 0920 2020 tdout',...... \n+0000f2a0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => '\n+0000f2b0: 5b6c 6f67 4669 6c65 5d27 2c0a 0909 0909 [logFile]',.....\n+0000f2c0: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n+0000f2d0: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n+0000f2e0: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio\n+0000f2f0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+0000f300: 3e20 2773 7570 7072 6573 7354 696d 6527 > 'suppressTime'\n+0000f310: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000f320: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7375 option' => '--su\n+0000f330: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',....\n+0000f340: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000f350: 3d3e 2027 7375 7070 7265 7373 5469 6d65 => 'suppressTime\n+0000f360: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+0000f370: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => ['\n+0000f380: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),...\n+0000f390: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000f3a0: 6e61 6d65 2720 3d3e 2027 6d61 7846 696c name' => 'maxFil\n+0000f3b0: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... \n+0000f3c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000f3d0: 272d 6d27 2c0a 0909 0909 0920 2020 2027 '-m',...... '\n+0000f3e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+0000f3f0: 2d6d 6178 4669 6c65 6c65 6e27 2c0a 0909 -maxFilelen',...\n+0000f400: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000f410: 203d 3e20 276d 6178 4669 6c65 6c65 6e27 => 'maxFilelen'\n+0000f420: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+0000f430: 6175 6c74 2720 3d3e 2031 6536 2c0a 0909 ault' => 1e6,...\n+0000f440: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern\n+0000f450: 2720 3d3e 2027 5c41 5b65 5c64 5d2b 5c5a ' => '\\A[e\\d]+\\Z\n+0000f460: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+0000f470: 6c79 5f69 6627 203d 3e20 225b 6c6f 6746 ly_if' => \"[logF\n+0000f480: 696c 655d 2229 2c0a 0909 0909 4f70 7469 ile]\"),.....Opti\n+0000f490: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000f4a0: 3d3e 2027 6e6f 4f66 4f6c 6446 696c 6573 => 'noOfOldFiles\n+0000f4b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+0000f4c0: 5f6f 7074 696f 6e27 203d 3e20 272d 6e27 _option' => '-n'\n+0000f4d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000f4e0: 616c 6961 7327 203d 3e20 272d 2d6e 6f4f alias' => '--noO\n+0000f4f0: 664f 6c64 4669 6c65 7327 2c0a 0909 0909 fOldFiles',.....\n+0000f500: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+0000f510: 3e20 276e 6f4f 664f 6c64 4669 6c65 7327 > 'noOfOldFiles'\n+0000f520: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+0000f530: 6175 6c74 2720 3d3e 2027 3527 2c0a 0909 ault' => '5',...\n+0000f540: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern\n+0000f550: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 2c0a ' => '\\A\\d+\\Z',.\n+0000f560: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n+0000f570: 6966 2720 3d3e 225b 6c6f 6746 696c 655d if' =>\"[logFile]\n+0000f580: 2229 2c0a 2020 2020 2020 2020 2020 2020 \"),. \n+0000f590: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000f5a0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n+0000f5b0: 272d 6e61 6d65 2720 3d3e 2027 7361 7665 '-name' => 'save\n+0000f5c0: 4c6f 6773 272c 0a09 0909 0909 2020 2020 Logs',...... \n+0000f5d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+0000f5e0: 272d 2d73 6176 654c 6f67 7327 2c0a 0909 '--saveLogs',...\n+0000f5f0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+0000f600: 203d 3e20 2773 6176 654c 6f67 7327 2c0a => 'saveLogs',.\n+0000f610: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n+0000f620: 6966 2720 3d3e 2022 5b6c 6f67 4669 6c65 if' => \"[logFile\n+0000f630: 5d22 2c0a 0909 0909 0920 2020 2027 2d63 ]\",...... '-c\n+0000f640: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [\n+0000f650: 2779 6573 272c 2027 6e6f 275d 292c 0a20 'yes', 'no']),. \n+0000f660: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000f670: 2020 2020 2020 2020 2020 2020 2020 204f O\n+0000f680: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000f690: 6527 203d 3e20 2763 6f6d 7072 6573 7357 e' => 'compressW\n+0000f6a0: 6974 6827 2c0a 0909 0909 0920 2020 2027 ith',...... '\n+0000f6b0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+0000f6c0: 2d2d 636f 6d70 7265 7373 5769 7468 272c --compressWith',\n+0000f6d0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+0000f6e0: 6579 2720 3d3e 2027 636f 6d70 7265 7373 ey' => 'compress\n+0000f6f0: 5769 7468 272c 0a09 0909 0909 2020 2020 With',...... \n+0000f700: 272d 6465 6661 756c 7427 203d 3e20 2762 '-default' => 'b\n+0000f710: 7a69 7032 272c 0a09 0909 0909 2020 2020 zip2',...... \n+0000f720: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => \n+0000f730: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n+0000f740: 272d 6f6e 6c79 5f69 6627 203d 3e22 5b6c '-only_if' =>\"[l\n+0000f750: 6f67 4669 6c65 5d22 292c 0a09 0909 094f ogFile]\"),.....O\n+0000f760: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+0000f770: 6527 203d 3e20 276c 6f67 496e 4261 636b e' => 'logInBack\n+0000f780: 7570 4469 7227 2c0a 0909 0909 0920 2020 upDir',...... \n+0000f790: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+0000f7a0: 2027 2d2d 6c6f 6749 6e42 6163 6b75 7044 '--logInBackupD\n+0000f7b0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '-\n+0000f7c0: 6366 5f6b 6579 2720 3d3e 2027 6c6f 6749 cf_key' => 'logI\n+0000f7d0: 6e42 6163 6b75 7044 6972 272c 0a09 0909 nBackupDir',....\n+0000f7e0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n+0000f7f0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n+0000f800: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n+0000f810: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+0000f820: 3d3e 2027 636f 6d70 7265 7373 4c6f 6749 => 'compressLogI\n+0000f830: 6e42 6163 6b75 7044 6972 272c 0a09 0909 nBackupDir',....\n+0000f840: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+0000f850: 6e27 203d 3e0a 0909 0909 0920 2020 2027 n' =>...... '\n+0000f860: 2d2d 636f 6d70 7265 7373 4c6f 6749 6e42 --compressLogInB\n+0000f870: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',......\n+0000f880: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+0000f890: 2027 636f 6d70 7265 7373 4c6f 6749 6e42 'compressLogInB\n+0000f8a0: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',......\n+0000f8b0: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe\n+0000f8c0: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n\n+0000f8d0: 6f27 5d2c 0a09 0909 0909 2020 2020 272d o'],...... '-\n+0000f8e0: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo\n+0000f8f0: 6749 6e42 6163 6b75 7044 6972 5d27 292c gInBackupDir]'),\n+0000f900: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0000f910: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000f920: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n\n+0000f930: 616d 6527 203d 3e20 276c 6f67 496e 4261 ame' => 'logInBa\n+0000f940: 636b 7570 4469 7246 696c 654e 616d 6527 ckupDirFileName'\n+0000f950: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000f960: 6f70 7469 6f6e 2720 3d3e 0a09 0909 0909 option' =>......\n+0000f970: 2020 2020 272d 2d6c 6f67 496e 4261 636b '--logInBack\n+0000f980: 7570 4469 7246 696c 654e 616d 6527 2c0a upDirFileName',.\n+0000f990: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+0000f9a0: 7927 203d 3e20 276c 6f67 496e 4261 636b y' => 'logInBack\n+0000f9b0: 7570 4469 7246 696c 654e 616d 6527 2c0a upDirFileName',.\n+0000f9c0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n+0000f9d0: 6c74 2720 3d3e 0a09 0909 0909 2020 2020 lt' =>...... \n+0000f9e0: 246c 6f67 496e 4261 636b 7570 4469 7246 $logInBackupDirF\n+0000f9f0: 696c 654e 616d 652c 0a09 0909 0909 2020 ileName,...... \n+0000fa00: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => \n+0000fa10: 275b 6c6f 6749 6e42 6163 6b75 7044 6972 '[logInBackupDir\n+0000fa20: 5d27 292c 0a09 0909 094f 7074 696f 6e2d ]'),.....Option-\n+0000fa30: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+0000fa40: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport'\n+0000fa50: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+0000fa60: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr\n+0000fa70: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',..\n+0000fa80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+0000fa90: 6173 2720 3d3e 2027 2d50 272c 0a09 0909 as' => '-P',....\n+0000faa0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+0000fab0: 3d3e 2027 7072 6f67 7265 7373 5265 706f => 'progressRepo\n+0000fac0: 7274 272c 0a09 0909 0909 2020 2020 272d rt',...... '-\n+0000fad0: 6465 6661 756c 7427 203d 3e20 302c 0a09 default' => 0,..\n+0000fae0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n+0000faf0: 6e27 203d 3e20 275c 415c 642b 5c5a 2729 n' => '\\A\\d+\\Z')\n+0000fb00: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+0000fb10: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr\n+0000fb20: 696e 7444 6570 7468 272c 0a09 0909 0909 intDepth',......\n+0000fb30: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000fb40: 203d 3e20 272d 2d70 7269 6e74 4465 7074 => '--printDept\n+0000fb50: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c\n+0000fb60: 6c5f 616c 6961 7327 203d 3e20 272d 4427 l_alias' => '-D'\n+0000fb70: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n+0000fb80: 6b65 7927 203d 3e20 2770 7269 6e74 4465 key' => 'printDe\n+0000fb90: 7074 6827 2c0a 0909 0909 0920 2020 2027 pth',...... '\n+0000fba0: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n+0000fbb0: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n+0000fbc0: 0a23 2068 6964 6465 6e20 6f70 7469 6f6e .# hidden option\n+0000fbd0: 730a 0909 0909 4f70 7469 6f6e 2d3e 6e65 s.....Option->ne\n+0000fbe0: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr\n+0000fbf0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... \n+0000fc00: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+0000fc10: 3e20 272d 2d70 7269 6e74 416c 6c27 2c0a > '--printAll',.\n+0000fc20: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde\n+0000fc30: 6e27 203d 3e20 2779 6573 2729 2c0a 0909 n' => 'yes'),...\n+0000fc40: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+0000fc50: 6e61 6d65 2720 3d3e 2027 6d69 6e42 6c6f name' => 'minBlo\n+0000fc60: 636b 4c65 6e67 7468 272c 0a09 0909 0909 ckLength',......\n+0000fc70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+0000fc80: 203d 3e20 272d 2d6d 696e 426c 6f63 6b4c => '--minBlockL\n+0000fc90: 656e 6774 6827 2c0a 0909 0909 0920 2020 ength',...... \n+0000fca0: 2027 2d63 665f 6b65 7927 203d 3e20 276d '-cf_key' => 'm\n+0000fcb0: 696e 426c 6f63 6b4c 656e 6774 6827 2c0a inBlockLength',.\n+0000fcc0: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde\n+0000fcd0: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',....\n+0000fce0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n+0000fcf0: 203d 3e20 2463 6865 636b 426c 6f63 6b73 => $checkBlocks\n+0000fd00: 4253 6d69 6e2c 0a09 0909 0909 2020 2020 BSmin,...... \n+0000fd10: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\\\n+0000fd20: 415c 642b 5c5a 2729 2c0a 0909 0909 4f70 A\\d+\\Z'),.....Op\n+0000fd30: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+0000fd40: 2720 3d3e 2027 746f 6461 794f 7074 272c ' => 'todayOpt',\n+0000fd50: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+0000fd60: 7074 696f 6e27 203d 3e20 272d 2d74 6f64 ption' => '--tod\n+0000fd70: 6179 272c 0a09 0909 0909 2020 2020 272d ay',...... '-\n+0000fd80: 6366 5f6b 6579 2720 3d3e 2027 746f 6461 cf_key' => 'toda\n+0000fd90: 7927 2c0a 0909 0909 0920 2020 2027 2d68 y',...... '-h\n+0000fda0: 6964 6465 6e27 203d 3e20 2779 6573 272c idden' => 'yes',\n+0000fdb0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n+0000fdc0: 6d27 203d 3e20 2779 6573 2729 2c0a 2320 m' => 'yes'),.# \n+0000fdd0: 6967 6e6f 7265 2073 7065 6369 6669 6564 ignore specified\n+0000fde0: 2074 696d 6520 7768 656e 2063 6f6d 7061 time when compa\n+0000fdf0: 6972 696e 6720 6669 6c65 733b 2070 6f73 iring files; pos\n+0000fe00: 7369 626c 650a 2320 7661 6c75 6573 2061 sible.# values a\n+0000fe10: 7265 3a20 2763 7469 6d65 272c 2027 6d74 re: 'ctime', 'mt\n+0000fe20: 696d 6527 206f 7220 276e 6f6e 6527 2c20 ime' or 'none', \n+0000fe30: 6465 6661 756c 7420 6973 2027 6e6f 6e65 default is 'none\n+0000fe40: 270a 2320 5365 7474 696e 6720 7468 6973 '.# Setting this\n+0000fe50: 2070 6172 616d 6574 6572 206f 6e6c 7920 parameter only \n+0000fe60: 6d61 6b65 7320 7365 6e73 6520 696e 206d makes sense in m\n+0000fe70: 6978 6564 0a23 2065 6e76 6972 6f6e 6d65 ixed.# environme\n+0000fe80: 6e74 732c 2077 6865 6e20 6f6e 6520 7469 nts, when one ti\n+0000fe90: 6d65 2068 6173 2073 746f 6368 6173 7469 me has stochasti\n+0000fea0: 6320 7661 6c75 6573 2e0a 2020 2020 2020 c values.. \n+0000feb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0000fec0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+0000fed0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+0000fee0: 2027 6967 6e6f 7265 5469 6d65 272c 0a09 'ignoreTime',..\n+0000fef0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+0000ff00: 696f 6e27 203d 3e20 272d 2d69 676e 6f72 ion' => '--ignor\n+0000ff10: 6554 696d 6527 2c0a 0909 0909 0920 2020 eTime',...... \n+0000ff20: 2027 2d63 665f 6b65 7927 203d 3e20 2769 '-cf_key' => 'i\n+0000ff30: 676e 6f72 6554 696d 6527 2c0a 0909 0909 gnoreTime',.....\n+0000ff40: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n+0000ff50: 3d3e 2027 6e6f 6e65 272c 0a09 0909 0909 => 'none',......\n+0000ff60: 2020 2020 272d 7061 7474 6572 6e27 203d '-pattern' =\n+0000ff70: 3e0a 0909 0909 0920 2020 2027 5c41 6e6f >...... '\\Ano\n+0000ff80: 6e65 5c5a 7c5c 4163 7469 6d65 5c5a 7c5c ne\\Z|\\Actime\\Z|\\\n+0000ff90: 416d 7469 6d65 5c5a 2729 2c0a 0909 0909 Amtime\\Z'),.....\n+0000ffa0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+0000ffb0: 6d65 2720 3d3e 2027 7374 6f70 4166 7465 me' => 'stopAfte\n+0000ffc0: 724e 6f52 6561 6445 7272 6f72 7327 2c0a rNoReadErrors',.\n+0000ffd0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+0000ffe0: 7469 6f6e 2720 3d3e 0a09 0909 0909 2020 tion' =>...... \n+0000fff0: 2020 272d 2d73 746f 7041 6674 6572 4e6f '--stopAfterNo\n+00010000: 5265 6164 4572 726f 7273 272c 0a09 0909 ReadErrors',....\n+00010010: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n+00010020: 3d3e 0a09 0909 0909 2020 2020 2773 746f =>...... 'sto\n+00010030: 7041 6674 6572 4e6f 5265 6164 4572 726f pAfterNoReadErro\n+00010040: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '-\n+00010050: 6869 6464 656e 2720 3d3e 2027 7965 7327 hidden' => 'yes'\n+00010060: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+00010070: 6175 6c74 2720 3d3e 2035 3030 290a 0909 ault' => 500)...\n+00010080: 0909 5d0a 0909 2020 2020 293b 0a0a 0a24 ..]... );...$\n+00010090: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check(\n+000100a0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \\@ARG\n+000100b0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. \n+000100c0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $\n+000100d0: 4865 6c70 0a20 2020 2020 2020 2020 2020 Help. \n+000100e0: 2020 2020 2020 293b 0a0a 2320 4175 7377 );..# Ausw\n+000100f0: 6572 7475 6e67 2064 6572 2050 6172 616d ertung der Param\n+00010100: 6574 6572 0a6d 7920 2468 656c 7020 3d20 eter.my $help = \n+00010110: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00010120: 7457 6974 686f 7574 5061 7228 2768 656c tWithoutPar('hel\n+00010130: 7027 293b 0a0a 6469 6520 2224 4675 6c6c p');..die \"$Full\n+00010140: 4865 6c70 2220 6966 2024 6865 6c70 3b0a Help\" if $help;.\n+00010150: 0a6d 7920 2463 6f6e 6669 6746 696c 6520 .my $configFile \n+00010160: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00010170: 4f70 7457 6974 6850 6172 2827 636f 6e66 OptWithPar('conf\n+00010180: 6967 4669 6c65 2729 3b0a 6d79 2024 6765 igFile');.my $ge\n+00010190: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile\n+000101a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000101b0: 744f 7074 5769 7468 5061 7228 2767 656e tOptWithPar('gen\n+000101c0: 6572 6174 6527 293b 0a6d 7920 2470 7269 erate');.my $pri\n+000101d0: 6e74 203d 2024 4368 6563 6b50 6172 2d3e nt = $CheckPar->\n+000101e0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n+000101f0: 2827 7072 696e 7427 293b 0a0a 6d79 2024 ('print');..my $\n+00010200: 6261 636b 7570 4469 7220 3d20 2443 6865 backupDir = $Che\n+00010210: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00010220: 6850 6172 2827 6261 636b 7570 4469 7227 hPar('backupDir'\n+00010230: 293b 0a6d 7920 2473 6f75 7263 6544 6972 );.my $sourceDir\n+00010240: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00010250: 744f 7074 5769 7468 5061 7228 2773 6f75 tOptWithPar('sou\n+00010260: 7263 6544 6972 2729 3b0a 6d79 2024 7365 rceDir');.my $se\n+00010270: 7269 6573 203d 2024 4368 6563 6b50 6172 ries = $CheckPar\n+00010280: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00010290: 2773 6572 6965 7327 293b 0a24 746d 7064 'series');.$tmpd\n+000102a0: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar->\n+000102b0: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t\n+000102c0: 6d70 6469 7227 293b 0a24 6c6f 636b 4669 mpdir');.$lockFi\n+000102d0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar->\n+000102e0: 6765 744f 7074 5769 7468 5061 7228 276c getOptWithPar('l\n+000102f0: 6f63 6b46 696c 6527 293b 0a6d 7920 2475 ockFile');.my $u\n+00010300: 6e6c 6f63 6b42 6566 6f72 6544 656c 203d nlockBeforeDel =\n+00010310: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00010320: 7074 5769 7468 5061 7228 2775 6e6c 6f63 ptWithPar('unloc\n+00010330: 6b42 6566 6f72 6544 656c 2729 3b0a 6d79 kBeforeDel');.my\n+00010340: 2024 6578 6365 7074 4469 7273 203d 2024 $exceptDirs = $\n+00010350: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00010360: 5769 7468 5061 7228 2765 7863 6570 7444 WithPar('exceptD\n+00010370: 6972 7327 293b 0a6d 7920 2469 6e63 6c75 irs');.my $inclu\n+00010380: 6465 4469 7273 203d 2024 4368 6563 6b50 deDirs = $CheckP\n+00010390: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+000103a0: 7228 2769 6e63 6c75 6465 4469 7273 2729 r('includeDirs')\n+000103b0: 3b0a 6d79 2024 6578 6365 7074 5275 6c65 ;.my $exceptRule\n+000103c0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000103d0: 744f 7074 5769 7468 5061 7228 2765 7863 tOptWithPar('exc\n+000103e0: 6570 7452 756c 6527 293b 0a6d 7920 2469 eptRule');.my $i\n+000103f0: 6e63 6c75 6465 5275 6c65 203d 2024 4368 ncludeRule = $Ch\n+00010400: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00010410: 7468 5061 7228 2769 6e63 6c75 6465 5275 thPar('includeRu\n+00010420: 6c65 2729 3b0a 6d79 2024 7772 6974 6545 le');.my $writeE\n+00010430: 7863 6c75 6465 4c6f 6720 3d20 2443 6865 xcludeLog = $Che\n+00010440: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00010450: 686f 7574 5061 7228 2777 7269 7465 4578 houtPar('writeEx\n+00010460: 636c 7564 654c 6f67 2729 3b0a 6d79 2024 cludeLog');.my $\n+00010470: 636f 6e74 4578 6365 7074 4469 7273 4572 contExceptDirsEr\n+00010480: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g\n+00010490: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n+000104a0: 2763 6f6e 7445 7863 6570 7444 6972 7345 'contExceptDirsE\n+000104b0: 7272 2729 3b0a 6d79 2024 6578 6365 7074 rr');.my $except\n+000104c0: 5479 7065 7320 3d20 2443 6865 636b 5061 Types = $CheckPa\n+000104d0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+000104e0: 2827 6578 6365 7074 5479 7065 7327 293b ('exceptTypes');\n+000104f0: 0a6d 7920 2467 6e75 6370 203d 2024 4368 .my $gnucp = $Ch\n+00010500: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00010510: 7468 6f75 7450 6172 2827 6370 4973 476e thoutPar('cpIsGn\n+00010520: 7527 293b 0a6d 7920 246c 696e 6b53 796d u');.my $linkSym\n+00010530: 6c69 6e6b 7320 3d20 2443 6865 636b 5061 links = $CheckPa\n+00010540: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n+00010550: 5061 7228 276c 696e 6b53 796d 6c69 6e6b Par('linkSymlink\n+00010560: 7327 293b 0a6d 7920 2470 7265 636f 6d6d s');.my $precomm\n+00010570: 616e 6420 3d20 2443 6865 636b 5061 722d and = $CheckPar-\n+00010580: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00010590: 7072 6563 6f6d 6d61 6e64 2729 3b0a 6d79 precommand');.my\n+000105a0: 2024 706f 7374 636f 6d6d 616e 6420 3d20 $postcommand = \n+000105b0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000105c0: 7457 6974 6850 6172 2827 706f 7374 636f tWithPar('postco\n+000105d0: 6d6d 616e 6427 293b 0a6d 7920 2466 6f6c mmand');.my $fol\n+000105e0: 6c6f 774c 696e 6b73 203d 2024 4368 6563 lowLinks = $Chec\n+000105f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00010600: 5061 7228 2766 6f6c 6c6f 774c 696e 6b73 Par('followLinks\n+00010610: 2729 3b0a 6d79 2024 6869 6768 4c61 7465 ');.my $highLate\n+00010620: 6e63 7920 3d20 2443 6865 636b 5061 722d ncy = $CheckPar-\n+00010630: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+00010640: 7228 2768 6967 684c 6174 656e 6379 2729 r('highLatency')\n+00010650: 3b0a 246d 6169 6e3a 3a6d 696e 436f 7079 ;.$main::minCopy\n+00010660: 5769 7468 466f 726b 203d 2030 2069 6620 WithFork = 0 if \n+00010670: 2468 6967 684c 6174 656e 6379 3b0a 6d79 $highLatency;.my\n+00010680: 2024 6967 6e6f 7265 5065 726d 7320 3d20 $ignorePerms = \n+00010690: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000106a0: 7457 6974 686f 7574 5061 7228 2769 676e tWithoutPar('ign\n+000106b0: 6f72 6550 6572 6d73 2729 3b0a 6d79 2024 orePerms');.my $\n+000106c0: 7072 6573 6572 7665 5065 726d 7320 3d20 preservePerms = \n+000106d0: 6e6f 7420 2469 676e 6f72 6550 6572 6d73 not $ignorePerms\n+000106e0: 3b0a 6d79 2024 6c61 7465 4c69 6e6b 7320 ;.my $lateLinks \n+000106f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00010700: 4f70 7457 6974 686f 7574 5061 7228 276c OptWithoutPar('l\n+00010710: 6174 654c 696e 6b73 2729 3b0a 6d79 2024 ateLinks');.my $\n+00010720: 6c61 7465 436f 6d70 7265 7373 203d 2024 lateCompress = $\n+00010730: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00010740: 5769 7468 6f75 7450 6172 2827 6c61 7465 WithoutPar('late\n+00010750: 436f 6d70 7265 7373 2729 3b0a 6d79 2024 Compress');.my $\n+00010760: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi\n+00010770: 7820 3d20 2443 6865 636b 5061 722d 3e67 x = $CheckPar->g\n+00010780: 6574 4f70 7457 6974 6850 6172 2822 6368 etOptWithPar(\"ch\n+00010790: 6563 6b42 6c6f 636b 7353 7566 6669 7822 eckBlocksSuffix\"\n+000107a0: 293b 0a6d 7920 2463 6865 636b 426c 6f63 );.my $checkBloc\n+000107b0: 6b73 5375 6666 6978 4d69 6e53 697a 6520 ksSuffixMinSize \n+000107c0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000107d0: 4f70 7457 6974 6850 6172 2822 6368 6563 OptWithPar(\"chec\n+000107e0: 6b42 6c6f 636b 734d 696e 5369 7a65 2229 kBlocksMinSize\")\n+000107f0: 3b0a 6d79 2024 6368 6563 6b42 6c6f 636b ;.my $checkBlock\n+00010800: 7353 7566 6669 7842 5320 3d20 2443 6865 sSuffixBS = $Che\n+00010810: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00010820: 6850 6172 2822 6368 6563 6b42 6c6f 636b hPar(\"checkBlock\n+00010830: 7342 5322 293b 0a6d 7920 2463 6865 636b sBS\");.my $check\n+00010840: 426c 6f63 6b73 436f 6d70 7220 3d20 2443 BlocksCompr = $C\n+00010850: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00010860: 6974 686f 7574 5061 7228 2263 6865 636b ithoutPar(\"check\n+00010870: 426c 6f63 6b73 436f 6d70 7222 293b 0a6d BlocksCompr\");.m\n+00010880: 7920 2840 6368 6563 6b42 6c6f 636b 7352 y (@checkBlocksR\n+00010890: 756c 652c 2040 6368 6563 6b42 6c6f 636b ule, @checkBlock\n+000108a0: 7342 532c 2040 6368 6563 6b42 6c6f 636b sBS, @checkBlock\n+000108b0: 7343 6f6d 7072 2c20 4063 6865 636b 426c sCompr, @checkBl\n+000108c0: 6f63 6b73 5265 6164 2c0a 2020 2020 4063 ocksRead,. @c\n+000108d0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall\n+000108e0: 656c 293b 0a7b 0a20 2020 206d 7920 2469 el);.{. my $i\n+000108f0: 3b0a 2020 2020 666f 7265 6163 6820 2469 ;. foreach $i\n+00010900: 2028 302e 2e24 6e6f 426c 6f63 6b52 756c (0..$noBlockRul\n+00010910: 6573 2d31 290a 2020 2020 7b0a 0970 7573 es-1). {..pus\n+00010920: 6820 4063 6865 636b 426c 6f63 6b73 5275 h @checkBlocksRu\n+00010930: 6c65 2c20 2443 6865 636b 5061 722d 3e67 le, $CheckPar->g\n+00010940: 6574 4f70 7457 6974 6850 6172 2822 6368 etOptWithPar(\"ch\n+00010950: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i\"\n+00010960: 293b 0a09 7075 7368 2040 6368 6563 6b42 );..push @checkB\n+00010970: 6c6f 636b 7342 532c 2024 4368 6563 6b50 locksBS, $CheckP\n+00010980: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00010990: 7228 2263 6865 636b 426c 6f63 6b73 4253 r(\"checkBlocksBS\n+000109a0: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i\");..push @che\n+000109b0: 636b 426c 6f63 6b73 436f 6d70 722c 0a09 ckBlocksCompr,..\n+000109c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000109d0: 7457 6974 686f 7574 5061 7228 2263 6865 tWithoutPar(\"che\n+000109e0: 636b 426c 6f63 6b73 436f 6d70 7224 6922 ckBlocksCompr$i\"\n+000109f0: 293b 0a09 7075 7368 2040 6368 6563 6b42 );..push @checkB\n+00010a00: 6c6f 636b 7352 6561 642c 2024 4368 6563 locksRead, $Chec\n+00010a10: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00010a20: 5061 7228 2263 6865 636b 426c 6f63 6b73 Par(\"checkBlocks\n+00010a30: 5265 6164 2469 2229 3b0a 0970 7573 6820 Read$i\");..push \n+00010a40: 4063 6865 636b 426c 6f63 6b73 5061 7261 @checkBlocksPara\n+00010a50: 6c6c 656c 2c0a 0924 4368 6563 6b50 6172 llel,..$CheckPar\n+00010a60: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00010a70: 6172 2822 6368 6563 6b42 6c6f 636b 7350 ar(\"checkBlocksP\n+00010a80: 6172 616c 6c65 6c24 6922 293b 0a20 2020 arallel$i\");. \n+00010a90: 207d 0a7d 0a6d 7920 2840 6368 6563 6b44 }.}.my (@checkD\n+00010aa0: 6576 6963 6573 2c20 4063 6865 636b 4465 evices, @checkDe\n+00010ab0: 7669 6365 7344 6972 2c20 4063 6865 636b vicesDir, @check\n+00010ac0: 4465 7669 6365 7342 532c 2040 6368 6563 DevicesBS, @chec\n+00010ad0: 6b44 6576 6963 6573 436f 6d70 722c 0a20 kDevicesCompr,. \n+00010ae0: 2020 2040 6368 6563 6b44 6576 6963 6573 @checkDevices\n+00010af0: 5061 7261 6c6c 656c 293b 0a7b 0a20 2020 Parallel);.{. \n+00010b00: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore\n+00010b10: 6163 6820 2469 2028 302e 2e24 6d61 696e ach $i (0..$main\n+00010b20: 3a3a 6e6f 426c 6f63 6b44 6576 6963 6573 ::noBlockDevices\n+00010b30: 2d31 290a 2020 2020 7b0a 0970 7573 6820 -1). {..push \n+00010b40: 4063 6865 636b 4465 7669 6365 732c 2024 @checkDevices, $\n+00010b50: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00010b60: 5769 7468 5061 7228 2263 6865 636b 4465 WithPar(\"checkDe\n+00010b70: 7669 6365 7324 6922 293b 0a09 7075 7368 vices$i\");..push\n+00010b80: 2040 6368 6563 6b44 6576 6963 6573 4469 @checkDevicesDi\n+00010b90: 722c 2024 4368 6563 6b50 6172 2d3e 6765 r, $CheckPar->ge\n+00010ba0: 744f 7074 5769 7468 5061 7228 2263 6865 tOptWithPar(\"che\n+00010bb0: 636b 4465 7669 6365 7344 6972 2469 2229 ckDevicesDir$i\")\n+00010bc0: 3b0a 0970 7573 6820 4063 6865 636b 4465 ;..push @checkDe\n+00010bd0: 7669 6365 7342 532c 2024 4368 6563 6b50 vicesBS, $CheckP\n+00010be0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00010bf0: 7228 2263 6865 636b 4465 7669 6365 7342 r(\"checkDevicesB\n+00010c00: 5324 6922 293b 0a09 7075 7368 2040 6368 S$i\");..push @ch\n+00010c10: 6563 6b44 6576 6963 6573 436f 6d70 722c eckDevicesCompr,\n+00010c20: 0a09 2443 6865 636b 5061 722d 3e67 6574 ..$CheckPar->get\n+00010c30: 4f70 7457 6974 686f 7574 5061 7228 2263 OptWithoutPar(\"c\n+00010c40: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr\n+00010c50: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i\");..push @che\n+00010c60: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n+00010c70: 6c2c 0a09 2443 6865 636b 5061 722d 3e67 l,..$CheckPar->g\n+00010c80: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n+00010c90: 2263 6865 636b 4465 7669 6365 7350 6172 \"checkDevicesPar\n+00010ca0: 616c 6c65 6c24 6922 293b 0a20 2020 207d allel$i\");. }\n+00010cb0: 0a7d 0a24 7175 6575 6542 6c6f 636b 203d .}.$queueBlock =\n+00010cc0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00010cd0: 7074 5769 7468 5061 7228 2771 7565 7565 ptWithPar('queue\n+00010ce0: 426c 6f63 6b27 293b 0a6d 7920 2473 6176 Block');.my $sav\n+00010cf0: 6552 414d 203d 2024 4368 6563 6b50 6172 eRAM = $CheckPar\n+00010d00: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00010d10: 6172 2827 7361 7665 5241 4d27 293b 0a6d ar('saveRAM');.m\n+00010d20: 7920 2463 6f6d 7072 6573 7320 3d20 2443 y $compress = $C\n+00010d30: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00010d40: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress\n+00010d50: 2729 3b0a 6d79 2024 756e 636f 6d70 7265 ');.my $uncompre\n+00010d60: 7373 203d 2024 4368 6563 6b50 6172 2d3e ss = $CheckPar->\n+00010d70: 6765 744f 7074 5769 7468 5061 7228 2775 getOptWithPar('u\n+00010d80: 6e63 6f6d 7072 6573 7327 293b 0a24 706f ncompress');.$po\n+00010d90: 7374 6669 7820 3d20 2443 6865 636b 5061 stfix = $CheckPa\n+00010da0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00010db0: 2827 706f 7374 6669 7827 293b 0a6d 7920 ('postfix');.my \n+00010dc0: 246e 6f43 6f6d 7072 6573 7320 3d20 2443 $noCompress = $C\n+00010dd0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00010de0: 6974 6850 6172 2827 6e6f 436f 6d70 7265 ithPar('noCompre\n+00010df0: 7373 2729 3b0a 2471 7565 7565 436f 6d70 ss');.$queueComp\n+00010e00: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar\n+00010e10: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00010e20: 2771 7565 7565 436f 6d70 7265 7373 2729 'queueCompress')\n+00010e30: 3b0a 246e 6f43 6f70 7920 3d20 2443 6865 ;.$noCopy = $Che\n+00010e40: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00010e50: 6850 6172 2827 6e6f 436f 7079 2729 3b0a hPar('noCopy');.\n+00010e60: 2471 7565 7565 436f 7079 203d 2024 4368 $queueCopy = $Ch\n+00010e70: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00010e80: 7468 5061 7228 2771 7565 7565 436f 7079 thPar('queueCopy\n+00010e90: 2729 3b0a 6d79 2024 636f 7079 4257 4c69 ');.my $copyBWLi\n+00010ea0: 6d69 7420 3d20 2443 6865 636b 5061 722d mit = $CheckPar-\n+00010eb0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00010ec0: 636f 7079 4257 4c69 6d69 7427 293b 0a6d copyBWLimit');.m\n+00010ed0: 7920 2477 6974 6855 7365 7247 726f 7570 y $withUserGroup\n+00010ee0: 5374 6174 203d 2024 4368 6563 6b50 6172 Stat = $CheckPar\n+00010ef0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00010f00: 6172 2827 7769 7468 5573 6572 4772 6f75 ar('withUserGrou\n+00010f10: 7053 7461 7427 293b 0a6d 7920 2475 7365 pStat');.my $use\n+00010f20: 7247 726f 7570 5374 6174 4669 6c65 203d rGroupStatFile =\n+00010f30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00010f40: 7074 5769 7468 5061 7228 2775 7365 7247 ptWithPar('userG\n+00010f50: 726f 7570 5374 6174 4669 6c65 2729 3b0a roupStatFile');.\n+00010f60: 6d79 2024 6578 6365 7074 5375 6666 6978 my $exceptSuffix\n+00010f70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00010f80: 744f 7074 5769 7468 5061 7228 2765 7863 tOptWithPar('exc\n+00010f90: 6570 7453 7566 6669 7827 293b 0a6d 7920 eptSuffix');.my \n+00010fa0: 2463 6f6d 7072 6573 7353 7566 6669 7820 $compressSuffix \n+00010fb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00010fc0: 4f70 7457 6974 6850 6172 2827 636f 6d70 OptWithPar('comp\n+00010fd0: 7265 7373 5375 6666 6978 2729 3b0a 6d79 ressSuffix');.my\n+00010fe0: 2024 6164 6445 7863 6570 7453 7566 6669 $addExceptSuffi\n+00010ff0: 7820 3d20 2443 6865 636b 5061 722d 3e67 x = $CheckPar->g\n+00011000: 6574 4f70 7457 6974 6850 6172 2827 6164 etOptWithPar('ad\n+00011010: 6445 7863 6570 7453 7566 6669 7827 293b dExceptSuffix');\n+00011020: 0a24 6d69 6e43 6f6d 7072 6573 7353 697a .$minCompressSiz\n+00011030: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n+00011040: 6574 4f70 7457 6974 6850 6172 2827 6d69 etOptWithPar('mi\n+00011050: 6e43 6f6d 7072 6573 7353 697a 6527 293b nCompressSize');\n+00011060: 0a6d 7920 2463 6f6d 7072 5275 6c65 203d .my $comprRule =\n+00011070: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00011080: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr\n+00011090: 5275 6c65 2729 3b0a 6d79 2024 636f 6d70 Rule');.my $comp\n+000110a0: 7265 7373 4d44 3546 696c 6520 3d20 2443 ressMD5File = $C\n+000110b0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+000110c0: 6974 686f 7574 5061 7228 2764 6f4e 6f74 ithoutPar('doNot\n+000110d0: 436f 6d70 7265 7373 4d44 3546 696c 6527 CompressMD5File'\n+000110e0: 290a 2020 2020 3f20 276e 6f27 203a 2027 ). ? 'no' : '\n+000110f0: 7965 7327 3b0a 2463 686d 6f64 4d44 3546 yes';.$chmodMD5F\n+00011100: 696c 6520 3d20 2443 6865 636b 5061 722d ile = $CheckPar-\n+00011110: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00011120: 6368 6d6f 644d 4435 4669 6c65 2729 3b0a chmodMD5File');.\n+00011130: 6d79 2024 7665 7262 6f73 6520 3d20 2443 my $verbose = $C\n+00011140: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00011150: 6974 686f 7574 5061 7228 2776 6572 626f ithoutPar('verbo\n+00011160: 7365 2729 3b0a 6d79 2024 6465 6275 6720 se');.my $debug \n+00011170: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00011180: 4f70 7457 6974 6850 6172 2827 6465 6275 OptWithPar('debu\n+00011190: 6727 293b 0a6d 7920 2472 6573 6574 4174 g');.my $resetAt\n+000111a0: 696d 6520 3d20 2443 6865 636b 5061 722d ime = $CheckPar-\n+000111b0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+000111c0: 7228 2772 6573 6574 4174 696d 6527 293b r('resetAtime');\n+000111d0: 0a6d 7920 2464 6f4e 6f74 4465 6c65 7465 .my $doNotDelete\n+000111e0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000111f0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n+00011200: 646f 4e6f 7444 656c 6574 6527 293b 0a6d doNotDelete');.m\n+00011210: 7920 2464 656c 6574 654e 6f74 4669 6e69 y $deleteNotFini\n+00011220: 7368 6564 4469 7273 203d 2024 4368 6563 shedDirs = $Chec\n+00011230: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00011240: 6f75 7450 6172 2827 6465 6c65 7465 4e6f outPar('deleteNo\n+00011250: 7446 696e 6973 6865 6444 6972 7327 293b tFinishedDirs');\n+00011260: 0a24 6b65 6570 416c 6c20 3d20 2443 6865 .$keepAll = $Che\n+00011270: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00011280: 6850 6172 2827 6b65 6570 416c 6c27 293b hPar('keepAll');\n+00011290: 0a6d 7920 246b 6565 7057 6565 6b64 6179 .my $keepWeekday\n+000112a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000112b0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee\n+000112c0: 7057 6565 6b64 6179 2729 3b0a 246b 6565 pWeekday');.$kee\n+000112d0: 7057 6565 6b64 6179 203d 2022 4024 6b65 pWeekday = \"@$ke\n+000112e0: 6570 5765 656b 6461 7922 2069 6620 6465 epWeekday\" if de\n+000112f0: 6669 6e65 6420 246b 6565 7057 6565 6b64 fined $keepWeekd\n+00011300: 6179 3b0a 6d79 2024 6b65 6570 4669 7273 ay;.my $keepFirs\n+00011310: 744f 6659 6561 7220 3d20 2443 6865 636b tOfYear = $Check\n+00011320: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00011330: 6172 2827 6b65 6570 4669 7273 744f 6659 ar('keepFirstOfY\n+00011340: 6561 7227 293b 0a6d 7920 246b 6565 704c ear');.my $keepL\n+00011350: 6173 744f 6659 6561 7220 3d20 2443 6865 astOfYear = $Che\n+00011360: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00011370: 6850 6172 2827 6b65 6570 4c61 7374 4f66 hPar('keepLastOf\n+00011380: 5965 6172 2729 3b0a 6d79 2024 6b65 6570 Year');.my $keep\n+00011390: 4669 7273 744f 664d 6f6e 7468 203d 2024 FirstOfMonth = $\n+000113a0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+000113b0: 5769 7468 5061 7228 276b 6565 7046 6972 WithPar('keepFir\n+000113c0: 7374 4f66 4d6f 6e74 6827 293b 0a6d 7920 stOfMonth');.my \n+000113d0: 246b 6565 704c 6173 744f 664d 6f6e 7468 $keepLastOfMonth\n+000113e0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000113f0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee\n+00011400: 704c 6173 744f 664d 6f6e 7468 2729 3b0a pLastOfMonth');.\n+00011410: 6d79 2024 6669 7273 7444 6179 4f66 5765 my $firstDayOfWe\n+00011420: 656b 203d 2024 4368 6563 6b50 6172 2d3e ek = $CheckPar->\n+00011430: 6765 744f 7074 5769 7468 5061 7228 2766 getOptWithPar('f\n+00011440: 6972 7374 4461 794f 6657 6565 6b27 293b irstDayOfWeek');\n+00011450: 0a6d 7920 246b 6565 7046 6972 7374 4f66 .my $keepFirstOf\n+00011460: 5765 656b 203d 2024 4368 6563 6b50 6172 Week = $CheckPar\n+00011470: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00011480: 276b 6565 7046 6972 7374 4f66 5765 656b 'keepFirstOfWeek\n+00011490: 2729 3b0a 6d79 2024 6b65 6570 4c61 7374 ');.my $keepLast\n+000114a0: 4f66 5765 656b 203d 2024 4368 6563 6b50 OfWeek = $CheckP\n+000114b0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+000114c0: 7228 276b 6565 704c 6173 744f 6657 6565 r('keepLastOfWee\n+000114d0: 6b27 293b 0a24 6b65 6570 4475 706c 6963 k');.$keepDuplic\n+000114e0: 6174 6520 3d20 2443 6865 636b 5061 722d ate = $CheckPar-\n+000114f0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00011500: 6b65 6570 4475 706c 6963 6174 6527 293b keepDuplicate');\n+00011510: 0a6d 7920 246b 6565 704d 696e 4e75 6d62 .my $keepMinNumb\n+00011520: 6572 203d 2024 4368 6563 6b50 6172 2d3e er = $CheckPar->\n+00011530: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k\n+00011540: 6565 704d 696e 4e75 6d62 6572 2729 3b0a eepMinNumber');.\n+00011550: 6d79 2024 6b65 6570 4d61 784e 756d 6265 my $keepMaxNumbe\n+00011560: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g\n+00011570: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke\n+00011580: 6570 4d61 784e 756d 6265 7227 293b 0a6d epMaxNumber');.m\n+00011590: 7920 246b 6565 7052 656c 6174 6976 6520 y $keepRelative \n+000115a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000115b0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n+000115c0: 5265 6c61 7469 7665 2729 3b0a 6d79 2024 Relative');.my $\n+000115d0: 6967 6e6f 7265 5265 6164 4572 726f 7220 ignoreReadError \n+000115e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000115f0: 4f70 7457 6974 686f 7574 5061 7228 2769 OptWithoutPar('i\n+00011600: 676e 6f72 6552 6561 6445 7272 6f72 2729 gnoreReadError')\n+00011610: 3b0a 6d79 2024 7375 7070 7265 7373 5761 ;.my $suppressWa\n+00011620: 726e 696e 6720 3d20 2443 6865 636b 5061 rning = $CheckPa\n+00011630: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00011640: 2827 7375 7070 7265 7373 5761 726e 696e ('suppressWarnin\n+00011650: 6727 293b 0a6d 7920 246c 696e 6b54 6f52 g');.my $linkToR\n+00011660: 6563 656e 7420 3d20 2443 6865 636b 5061 ecent = $CheckPa\n+00011670: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00011680: 2827 6c69 6e6b 546f 5265 6365 6e74 2729 ('linkToRecent')\n+00011690: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = \n+000116a0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000116b0: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil\n+000116c0: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog\n+000116d0: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP\n+000116e0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+000116f0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd\n+00011700: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT\n+00011710: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check\n+00011720: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n+00011730: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT\n+00011740: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime\n+00011750: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? '\n+00011760: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my \n+00011770: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C\n+00011780: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00011790: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel\n+000117a0: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl\n+000117b0: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP\n+000117c0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+000117d0: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles'\n+000117e0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs \n+000117f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00011800: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s\n+00011810: 6176 654c 6f67 7327 2920 3f20 2779 6573 aveLogs') ? 'yes\n+00011820: 2720 3a20 276e 6f27 3b0a 6d79 2024 636f ' : 'no';.my $co\n+00011830: 6d70 7265 7373 5769 7468 203d 2024 4368 mpressWith = $Ch\n+00011840: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00011850: 7468 5061 7228 2763 6f6d 7072 6573 7357 thPar('compressW\n+00011860: 6974 6827 293b 0a6d 7920 246c 6f67 496e ith');.my $logIn\n+00011870: 4261 636b 7570 4469 7220 3d20 2443 6865 BackupDir = $Che\n+00011880: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00011890: 686f 7574 5061 7228 276c 6f67 496e 4261 houtPar('logInBa\n+000118a0: 636b 7570 4469 7227 293b 0a6d 7920 2463 ckupDir');.my $c\n+000118b0: 6f6d 7072 6573 734c 6f67 496e 4261 636b ompressLogInBack\n+000118c0: 7570 4469 7220 3d0a 2024 4368 6563 6b50 upDir =. $CheckP\n+000118d0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+000118e0: 7450 6172 2827 636f 6d70 7265 7373 4c6f tPar('compressLo\n+000118f0: 6749 6e42 6163 6b75 7044 6972 2729 3b0a gInBackupDir');.\n+00011900: 246c 6f67 496e 4261 636b 7570 4469 7246 $logInBackupDirF\n+00011910: 696c 654e 616d 6520 3d0a 2024 4368 6563 ileName =. $Chec\n+00011920: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00011930: 5061 7228 276c 6f67 496e 4261 636b 7570 Par('logInBackup\n+00011940: 4469 7246 696c 654e 616d 6527 293b 0a6d DirFileName');.m\n+00011950: 7920 2470 726f 6772 6573 7352 6570 6f72 y $progressRepor\n+00011960: 7420 3d20 2443 6865 636b 5061 722d 3e67 t = $CheckPar->g\n+00011970: 6574 4f70 7457 6974 6850 6172 2827 7072 etOptWithPar('pr\n+00011980: 6f67 7265 7373 5265 706f 7274 2729 3b0a ogressReport');.\n+00011990: 6d79 2024 7072 696e 7444 6570 7468 203d my $printDepth =\n+000119a0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+000119b0: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr\n+000119c0: 696e 7444 6570 7468 2729 3b0a 2470 7269 intDepth');.$pri\n+000119d0: 6e74 4465 7074 6820 3d20 2470 7269 6e74 ntDepth = $print\n+000119e0: 4465 7074 6820 3f20 2779 6573 2720 3a20 Depth ? 'yes' : \n+000119f0: 276e 6f27 3b0a 6d79 2028 406f 7468 6572 'no';.my (@other\n+00011a00: 4261 636b 7570 5365 7269 6573 2920 3d20 BackupSeries) = \n+00011a10: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi\n+00011a20: 7374 5061 7228 293b 0a23 2068 6964 6465 stPar();.# hidde\n+00011a30: 6e20 6f70 7469 6f6e 730a 6d79 2024 7072 n options.my $pr\n+00011a40: 696e 7441 6c6c 203d 2024 4368 6563 6b50 intAll = $CheckP\n+00011a50: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+00011a60: 7450 6172 2827 7072 696e 7441 6c6c 2729 tPar('printAll')\n+00011a70: 3b0a 2470 7269 6e74 203d 2031 2069 6620 ;.$print = 1 if \n+00011a80: 2470 7269 6e74 416c 6c3b 0a6d 7920 246d $printAll;.my $m\n+00011a90: 696e 426c 6f63 6b4c 656e 6774 6820 3d20 inBlockLength = \n+00011aa0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00011ab0: 7457 6974 6850 6172 2827 6d69 6e42 6c6f tWithPar('minBlo\n+00011ac0: 636b 4c65 6e67 7468 2729 3b0a 6d79 2024 ckLength');.my $\n+00011ad0: 746f 6461 794f 7074 203d 2024 4368 6563 todayOpt = $Chec\n+00011ae0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00011af0: 5061 7228 2774 6f64 6179 4f70 7427 293b Par('todayOpt');\n+00011b00: 2020 2320 666f 726d 6174 206c 696b 650a # format like.\n+00011b10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00011b20: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00011b30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00011b40: 2020 2020 2020 2320 6261 636b 7570 2064 # backup d\n+00011b50: 6972 206e 616d 650a 6d79 2024 6967 6e6f ir name.my $igno\n+00011b60: 7265 5469 6d65 203d 2024 4368 6563 6b50 reTime = $CheckP\n+00011b70: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00011b80: 7228 2769 676e 6f72 6554 696d 6527 293b r('ignoreTime');\n+00011b90: 0a6d 7920 2473 746f 7041 6674 6572 4e6f .my $stopAfterNo\n+00011ba0: 5265 6164 4572 726f 7273 203d 0a20 2020 ReadErrors =. \n+00011bb0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00011bc0: 7074 5769 7468 5061 7228 2773 746f 7041 ptWithPar('stopA\n+00011bd0: 6674 6572 4e6f 5265 6164 4572 726f 7273 fterNoReadErrors\n+00011be0: 2729 3b0a 0a75 6e6c 6573 7320 2824 6e6f ');..unless ($no\n+00011bf0: 436f 6d70 7265 7373 290a 7b0a 2020 2020 Compress).{. \n+00011c00: 6c6f 6361 6c20 2a46 494c 453b 0a20 2020 local *FILE;. \n+00011c10: 2069 6620 286f 7065 6e28 4649 4c45 2c20 if (open(FILE, \n+00011c20: 222f 7072 6f63 2f63 7075 696e 666f 2229 \"/proc/cpuinfo\")\n+00011c30: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;.\n+00011c40: 0924 6e6f 436f 6d70 7265 7373 203d 2031 .$noCompress = 1\n+00011c50: 3b0a 0977 6869 6c65 2028 246c 203d 203c ;..while ($l = <\n+00011c60: 4649 4c45 3e29 0a09 7b0a 0920 2020 2024 FILE>)..{.. $\n+00011c70: 6e6f 436f 6d70 7265 7373 2b2b 2069 6620 noCompress++ if \n+00011c80: 246c 203d 7e20 2f70 726f 6365 7373 6f72 $l =~ /processor\n+00011c90: 2f3b 0a09 7d0a 0963 6c6f 7365 2846 494c /;..}..close(FIL\n+00011ca0: 4529 3b0a 2020 2020 7d0a 2020 2020 246e E);. }. $n\n+00011cb0: 6f43 6f6d 7072 6573 7320 3d20 3220 6966 oCompress = 2 if\n+00011cc0: 2024 6e6f 436f 6d70 7265 7373 203c 2032 $noCompress < 2\n+00011cd0: 3b0a 7d0a 0a28 4065 7863 6570 7453 7566 ;.}..(@exceptSuf\n+00011ce0: 6669 7829 203d 2028 293b 0a70 7573 6820 fix) = ();.push \n+00011cf0: 4065 7863 6570 7453 7566 6669 782c 2028 @exceptSuffix, (\n+00011d00: 4024 6578 6365 7074 5375 6666 6978 2920 @$exceptSuffix) \n+00011d10: 6966 2064 6566 696e 6564 2024 6578 6365 if defined $exce\n+00011d20: 7074 5375 6666 6978 3b0a 7075 7368 2040 ptSuffix;.push @\n+00011d30: 6578 6365 7074 5375 6666 6978 2c20 2840 exceptSuffix, (@\n+00011d40: 2461 6464 4578 6365 7074 5375 6666 6978 $addExceptSuffix\n+00011d50: 2920 6966 2064 6566 696e 6564 2024 6164 ) if defined $ad\n+00011d60: 6445 7863 6570 7453 7566 6669 783b 0a0a dExceptSuffix;..\n+00011d70: 0a69 6620 2824 6765 6e65 7261 7465 436f .if ($generateCo\n+00011d80: 6e66 6967 4669 6c65 290a 7b0a 2020 2020 nfigFile).{. \n+00011d90: 6d79 2024 616e 7377 6572 203d 2027 7965 my $answer = 'ye\n+00011da0: 7327 3b0a 2020 2020 6966 2028 2d65 2024 s';. if (-e $\n+00011db0: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi\n+00011dc0: 6c65 290a 2020 2020 7b0a 0964 6f0a 097b le). {..do..{\n+00011dd0: 0a09 2020 2020 7072 696e 7420 223c 2467 .. print \"<$g\n+00011de0: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil\n+00011df0: 653e 2061 6c72 6561 6479 2065 7869 7374 e> already exist\n+00011e00: 732e 204f 7665 7277 7269 7465 3f5c 6e22 s. Overwrite?\\n\"\n+00011e10: 2c0a 0920 2020 2022 7965 7320 2f20 6e6f ,.. \"yes / no\n+00011e20: 202d 3e20 223b 0a09 2020 2020 2461 6e73 -> \";.. $ans\n+00011e30: 7765 7220 3d20 3c53 5444 494e 3e3b 0a09 wer = ;..\n+00011e40: 2020 2020 6368 6f6d 7020 2461 6e73 7765 chomp $answe\n+00011e50: 723b 0a09 7d20 7768 696c 6520 2824 616e r;..} while ($an\n+00011e60: 7377 6572 206e 6520 2779 6573 2720 616e swer ne 'yes' an\n+00011e70: 6420 2461 6e73 7765 7220 6e65 2027 6e6f d $answer ne 'no\n+00011e80: 2729 3b0a 2020 2020 7d0a 2020 2020 6578 ');. }. ex\n+00011e90: 6974 2030 2069 6620 2461 6e73 7765 7220 it 0 if $answer \n+00011ea0: 6571 2027 6e6f 273b 0a0a 2020 2020 6c6f eq 'no';.. lo\n+00011eb0: 6361 6c20 2a46 494c 453b 0a20 2020 206f cal *FILE;. o\n+00011ec0: 7065 6e28 4649 4c45 2c20 223e 2024 6765 pen(FILE, \"> $ge\n+00011ed0: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile\n+00011ee0: 2229 206f 720a 0964 6965 2022 636f 756c \") or..die \"coul\n+00011ef0: 6420 6e6f 7420 7772 6974 6520 746f 203c d not write to <\n+00011f00: 2467 656e 6572 6174 6543 6f6e 6669 6746 $generateConfigF\n+00011f10: 696c 653e 223b 0a20 2020 2070 7269 6e74 ile>\";. print\n+00011f20: 2046 494c 4520 2474 656d 706c 6174 6543 FILE $templateC\n+00011f30: 6f6e 6669 6746 696c 653b 0a20 2020 2063 onfigFile;. c\n+00011f40: 6c6f 7365 2846 494c 4529 3b0a 2020 2020 lose(FILE);. \n+00011f50: 6578 6974 2030 3b0a 7d0a 0a69 6620 2824 exit 0;.}..if ($\n+00011f60: 7072 696e 7429 0a7b 0a20 2020 2024 4368 print).{. $Ch\n+00011f70: 6563 6b50 6172 2d3e 7072 696e 7428 272d eckPar->print('-\n+00011f80: 7368 6f77 4869 6464 656e 2720 3d3e 2024 showHidden' => $\n+00011f90: 7072 696e 7441 6c6c 293b 0a20 2020 2065 printAll);. e\n+00011fa0: 7869 7420 303b 0a7d 0a0a 2463 686d 6f64 xit 0;.}..$chmod\n+00011fb0: 4d44 3546 696c 6520 3d20 6f63 7420 2463 MD5File = oct $c\n+00011fc0: 686d 6f64 4d44 3546 696c 653b 0a0a 6d79 hmodMD5File;..my\n+00011fd0: 2028 4070 6172 293b 0a69 6620 2824 6c6f (@par);.if ($lo\n+00011fe0: 6746 696c 6529 0a7b 0a20 2020 2070 7573 gFile).{. pus\n+00011ff0: 6820 4070 6172 2c20 2827 2d66 696c 6527 h @par, ('-file'\n+00012000: 203d 3e20 246c 6f67 4669 6c65 293b 0a7d => $logFile);.}\n+00012010: 0a65 6c73 650a 7b0a 2020 2020 7075 7368 .else.{. push\n+00012020: 2040 7061 722c 2028 272d 6669 6c65 6465 @par, ('-filede\n+00012030: 7363 7269 7074 6f72 272c 202a 5354 444f scriptor', *STDO\n+00012040: 5554 293b 0a7d 0a6d 7920 2824 7072 4c6f UT);.}.my ($prLo\n+00012050: 674b 696e 6429 203d 205b 2741 3a42 4547 gKind) = ['A:BEG\n+00012060: 494e 272c 0a09 0920 2020 275a 3a45 4e44 IN',... 'Z:END\n+00012070: 272c 0a09 0920 2020 2749 3a49 4e46 4f27 ',... 'I:INFO'\n+00012080: 2c0a 0909 2020 2027 563a 5645 5253 494f ,... 'V:VERSIO\n+00012090: 4e27 2c0a 0909 2020 2027 573a 5741 524e N',... 'W:WARN\n+000120a0: 494e 4727 2c0a 0909 2020 2027 453a 4552 ING',... 'E:ER\n+000120b0: 524f 5227 2c0a 0909 2020 2027 503a 5052 ROR',... 'P:PR\n+000120c0: 4f47 5245 5353 272c 0a09 0920 2020 2753 OGRESS',... 'S\n+000120d0: 3a53 5441 5449 5354 4943 272c 0a09 0920 :STATISTIC',... \n+000120e0: 2020 2744 3a44 4542 5547 275d 3b0a 6d79 'D:DEBUG'];.my\n+000120f0: 2024 7072 4c6f 6731 203d 2070 7269 6e74 $prLog1 = print\n+00012100: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind'\n+00012110: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,.\n+00012120: 0909 0920 2020 4070 6172 2c0a 0909 0920 ... @par,.... \n+00012130: 2020 272d 7769 7468 5469 6d65 2720 3d3e '-withTime' =>\n+00012140: 2024 7769 7468 5469 6d65 2c0a 0909 0920 $withTime,.... \n+00012150: 2020 272d 6d61 7846 696c 656c 656e 2720 '-maxFilelen' \n+00012160: 3d3e 2024 6d61 7846 696c 656c 656e 2c0a => $maxFilelen,.\n+00012170: 0909 0920 2020 272d 6e6f 4f66 4f6c 6446 ... '-noOfOldF\n+00012180: 696c 6573 2720 3d3e 2024 6e6f 4f66 4f6c iles' => $noOfOl\n+00012190: 6446 696c 6573 2c0a 0909 0920 2020 272d dFiles,.... '-\n+000121a0: 7361 7665 4c6f 6773 2720 3d3e 2024 7361 saveLogs' => $sa\n+000121b0: 7665 4c6f 6773 2c0a 0909 0920 2020 272d veLogs,.... '-\n+000121c0: 636f 6d70 7265 7373 5769 7468 2720 3d3e compressWith' =>\n+000121d0: 2024 636f 6d70 7265 7373 5769 7468 293b $compressWith);\n+000121e0: 0a24 7072 4c6f 6731 2d3e 7365 7453 746f .$prLog1->setSto\n+000121f0: 7041 744e 6f4d 6573 7361 6765 7328 272d pAtNoMessages('-\n+00012200: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00012210: 0920 2020 2020 272d 7374 6f70 4174 2720 . '-stopAt' \n+00012220: 3d3e 2024 7374 6f70 4166 7465 724e 6f52 => $stopAfterNoR\n+00012230: 6561 6445 7272 6f72 7329 3b0a 0a6d 7920 eadErrors);..my \n+00012240: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo\n+00012250: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new('\n+00012260: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr\n+00012270: 4c6f 6731 5d29 3b0a 0a28 406d 6169 6e3a Log1]);..(@main:\n+00012280: 3a63 6c65 616e 7570 2920 3d20 2824 7072 :cleanup) = ($pr\n+00012290: 4c6f 672c 2031 293b 0a0a 6d79 2028 2573 Log, 1);..my (%s\n+000122a0: 7570 7072 6573 7357 6172 6e69 6e67 293b uppressWarning);\n+000122b0: 0a7b 0a20 2020 206d 7920 2473 3b0a 2020 .{. my $s;. \n+000122c0: 2020 666f 7265 6163 6820 2473 2028 4024 foreach $s (@$\n+000122d0: 7375 7070 7265 7373 5761 726e 696e 6729 suppressWarning)\n+000122e0: 0a20 2020 207b 0a09 2473 7570 7072 6573 . {..$suppres\n+000122f0: 7357 6172 6e69 6e67 7b24 737d 203d 2031 sWarning{$s} = 1\n+00012300: 3b0a 2020 2020 7d0a 7d0a 0a24 7072 4c6f ;. }.}..$prLo\n+00012310: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00012320: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. \n+00012330: 272d 7374 7227 203d 3e20 5b22 6d69 7373 '-str' => [\"miss\n+00012340: 696e 6720 7061 7261 6d73 2062 6163 6b75 ing params backu\n+00012350: 7044 6972 2c20 736f 7572 6365 4469 722c pDir, sourceDir,\n+00012360: 2073 6572 6965 735c 6e24 4865 6c70 225d series\\n$Help\"]\n+00012370: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit'\n+00012380: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles\n+00012390: 7320 6465 6669 6e65 6420 2462 6163 6b75 s defined $backu\n+000123a0: 7044 6972 2061 6e64 2064 6566 696e 6564 pDir and defined\n+000123b0: 2024 736f 7572 6365 4469 7220 616e 6420 $sourceDir and \n+000123c0: 6465 6669 6e65 6420 2473 6572 6965 733b defined $series;\n+000123d0: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n+000123e0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+000123f0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00012400: 3e20 5b22 6261 636b 7570 4469 7220 6469 > [\"backupDir di\n+00012410: 7265 6374 6f72 7920 3c24 6261 636b 7570 rectory <$backup\n+00012420: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex\n+00012430: 6973 745c 6e24 4865 6c70 225d 2c0a 0920 ist\\n$Help\"],.. \n+00012440: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+00012450: 3129 0a20 2020 2075 6e6c 6573 7320 2d65 1). unless -e\n+00012460: 2024 6261 636b 7570 4469 723b 0a0a 2470 $backupDir;..$p\n+00012470: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00012480: 6e64 2720 3d3e 2027 4527 2c0a 0920 2020 nd' => 'E',.. \n+00012490: 2020 2027 2d73 7472 2720 3d3e 205b 2262 '-str' => [\"b\n+000124a0: 6163 6b75 7044 6972 206d 7573 7420 6265 ackupDir must be\n+000124b0: 2074 6865 2074 6f70 206c 6576 656c 2064 the top level d\n+000124c0: 6972 6563 746f 7279 2066 6f72 2061 6c6c irectory for all\n+000124d0: 2079 6f75 7222 2c0a 0920 2020 2020 2022 your\",.. \"\n+000124e0: 7374 6f72 6542 6163 6b75 7020 6261 636b storeBackup back\n+000124f0: 7570 7320 6f6e 2074 6861 7420 7061 7274 ups on that part\n+00012500: 6974 696f 6e2e 2059 6f75 2063 616e 6e6f ition. You canno\n+00012510: 7420 7573 6520 272f 2720 666f 7220 7468 t use '/' for th\n+00012520: 6174 225d 2c0a 0920 2020 2020 2027 2d65 at\"],.. '-e\n+00012530: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i\n+00012540: 6620 2462 6163 6b75 7044 6972 2065 7120 f $backupDir eq \n+00012550: 272f 273b 0a0a 6d79 2024 7461 7267 6574 '/';..my $target\n+00012560: 4469 7220 3d20 2224 6261 636b 7570 4469 Dir = \"$backupDi\n+00012570: 722f 2473 6572 6965 7322 3b0a 756e 6c65 r/$series\";.unle\n+00012580: 7373 2028 2d65 2024 7461 7267 6574 4469 ss (-e $targetDi\n+00012590: 7229 0a7b 0a20 2020 2024 7072 4c6f 672d r).{. $prLog-\n+000125a0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+000125b0: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n+000125c0: 2720 3d3e 205b 2263 616e 6e6f 7420 6372 ' => [\"cannot cr\n+000125d0: 6561 7465 2064 6972 6563 746f 7279 2066 eate directory f\n+000125e0: 6f72 2073 6572 6965 7320 3c24 7461 7267 or series <$targ\n+000125f0: 6574 4469 723e 225d 2c0a 0909 2020 272d etDir>\"],... '-\n+00012600: 6578 6974 2720 3d3e 2031 290a 0975 6e6c exit' => 1)..unl\n+00012610: 6573 7320 6d6b 6469 7220 2474 6172 6765 ess mkdir $targe\n+00012620: 7444 6972 2c20 3037 3030 3b0a 2020 2020 tDir, 0700;. \n+00012630: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00012640: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00012650: 2020 272d 7374 7227 203d 3e20 5b22 6372 '-str' => [\"cr\n+00012660: 6561 7465 6420 6469 7265 6374 6f72 7920 eated directory \n+00012670: 3c24 7461 7267 6574 4469 723e 225d 290a <$targetDir>\"]).\n+00012680: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $\n+00012690: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{\n+000126a0: 2763 7253 6572 6965 7327 7d3b 0a7d 0a0a 'crSeries'};.}..\n+000126b0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000126c0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. \n+000126d0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+000126e0: 2263 616e 6e6f 7420 7772 6974 6520 746f \"cannot write to\n+000126f0: 2074 6172 6765 7420 6469 7265 6374 6f72 target director\n+00012700: 7920 3c24 7461 7267 6574 4469 723e 225d y <$targetDir>\"]\n+00012710: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit'\n+00012720: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles\n+00012730: 7320 282d 7720 2474 6172 6765 7444 6972 s (-w $targetDir\n+00012740: 293b 0a0a 2474 6172 6765 7444 6972 203d );..$targetDir =\n+00012750: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath\n+00012760: 2824 7461 7267 6574 4469 7229 3b0a 2473 ($targetDir);.$s\n+00012770: 6f75 7263 6544 6972 203d 2026 3a3a 6162 ourceDir = &::ab\n+00012780: 736f 6c75 7465 5061 7468 2824 736f 7572 solutePath($sour\n+00012790: 6365 4469 7229 3b0a 2462 6163 6b75 7044 ceDir);.$backupD\n+000127a0: 6972 203d 2026 3a3a 6162 736f 6c75 7465 ir = &::absolute\n+000127b0: 5061 7468 2824 6261 636b 7570 4469 7229 Path($backupDir)\n+000127c0: 3b0a 0a24 6d61 696e 3a3a 736f 7572 6365 ;..$main::source\n+000127d0: 4469 7220 3d20 2473 6f75 7263 6544 6972 Dir = $sourceDir\n+000127e0: 3b0a 0a24 6d61 696e 3a3a 494f 436f 6d70 ;..$main::IOComp\n+000127f0: 7265 7373 4469 7265 6374 203d 2030 3b0a ressDirect = 0;.\n+00012800: 7b0a 2020 2020 2320 6275 696c 6420 6120 {. # build a \n+00012810: 7275 6c65 2066 726f 6d20 6f70 7469 6f6e rule from option\n+00012820: 2063 6865 636b 426c 6f63 6b73 5375 6666 checkBlocksSuff\n+00012830: 6978 0a20 2020 2069 6620 2864 6566 696e ix. if (defin\n+00012840: 6564 2824 6368 6563 6b42 6c6f 636b 7353 ed($checkBlocksS\n+00012850: 7566 6669 7829 290a 2020 2020 7b0a 096d uffix)). {..m\n+00012860: 7920 2462 7320 3d20 2826 3a3a 7265 7665 y $bs = (&::reve\n+00012870: 7274 4875 6d61 6e52 6561 6461 626c 6528 rtHumanReadable(\n+00012880: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff\n+00012890: 6978 4253 2929 5b30 5d3b 0a09 2470 724c ixBS))[0];..$prL\n+000128a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000128b0: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... \n+000128c0: 2020 272d 7374 7227 203d 3e20 5b22 6368 '-str' => [\"ch\n+000128d0: 6563 6b42 6c6f 636b 7342 5320 746f 6f20 eckBlocksBS too \n+000128e0: 736d 616c 6c20 2220 2e20 0a09 0909 0920 small \" . ..... \n+000128f0: 2228 2463 6865 636b 426c 6f63 6b73 5375 \"($checkBlocksSu\n+00012900: 6666 6978 4253 203c 2024 6368 6563 6b42 ffixBS < $checkB\n+00012910: 6c6f 636b 7342 536d 696e 2922 5d2c 0a09 locksBSmin)\"],..\n+00012920: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n+00012930: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs\n+00012940: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB\n+00012950: 536d 696e 3b0a 0970 7573 6820 4063 6865 Smin;..push @che\n+00012960: 636b 426c 6f63 6b73 4253 2c20 2463 6865 ckBlocksBS, $che\n+00012970: 636b 426c 6f63 6b73 5375 6666 6978 4253 ckBlocksSuffixBS\n+00012980: 3b0a 0970 7573 6820 4063 6865 636b 426c ;..push @checkBl\n+00012990: 6f63 6b73 436f 6d70 722c 2024 6368 6563 ocksCompr, $chec\n+000129a0: 6b42 6c6f 636b 7343 6f6d 7072 3b0a 0970 kBlocksCompr;..p\n+000129b0: 7573 6820 4063 6865 636b 426c 6f63 6b73 ush @checkBlocks\n+000129c0: 5275 6c65 2c0a 095b 2724 7369 7a65 203e Rule,..['$size >\n+000129d0: 3d20 263a 3a53 495a 4528 2227 202e 2024 = &::SIZE(\"' . $\n+000129e0: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi\n+000129f0: 784d 696e 5369 7a65 202e 2027 2229 2720 xMinSize . '\")' \n+00012a00: 2c20 0a09 2027 616e 6427 2c0a 0920 2724 , .. 'and',.. '$\n+00012a10: 6669 6c65 203d 7e20 2f27 202e 206a 6f69 file =~ /' . joi\n+00012a20: 6e28 275c 5a7c 272c 2040 2463 6865 636b n('\\Z|', @$check\n+00012a30: 426c 6f63 6b73 5375 6666 6978 2920 2e20 BlocksSuffix) . \n+00012a40: 275c 5a2f 275d 3b0a 0970 7573 6820 4063 '\\Z/'];..push @c\n+00012a50: 6865 636b 426c 6f63 6b73 5265 6164 2c20 heckBlocksRead, \n+00012a60: 756e 6465 663b 0a09 7075 7368 2040 6368 undef;..push @ch\n+00012a70: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle\n+00012a80: 6c2c 2075 6e64 6566 3b0a 2020 2020 7d0a l, undef;. }.\n+00012a90: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. \n+00012aa0: 666f 7265 6163 6820 2469 2028 302e 2e40 foreach $i (0..@\n+00012ab0: 6368 6563 6b42 6c6f 636b 7352 756c 652d checkBlocksRule-\n+00012ac0: 3129 0a20 2020 207b 0a09 6e65 7874 2075 1). {..next u\n+00012ad0: 6e6c 6573 7320 6465 6669 6e65 6420 2463 nless defined $c\n+00012ae0: 6865 636b 426c 6f63 6b73 5275 6c65 5b24 heckBlocksRule[$\n+00012af0: 695d 3b0a 0a09 756e 6c65 7373 2028 6465 i];...unless (de\n+00012b00: 6669 6e65 6420 2463 6865 636b 426c 6f63 fined $checkBloc\n+00012b10: 6b73 4253 5b24 695d 290a 097b 0a09 2020 ksBS[$i])..{.. \n+00012b20: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00012b30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00012b40: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n+00012b50: 0909 2020 5b22 626c 6f63 6b20 7369 7a65 .. [\"block size\n+00012b60: 2066 6f72 206f 7074 696f 6e20 6368 6563 for option chec\n+00012b70: 6b42 6c6f 636b 7352 756c 6524 6920 6973 kBlocksRule$i is\n+00012b80: 206d 6973 7369 6e67 225d 2c0a 0909 0920 missing\"],.... \n+00012b90: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);.\n+00012ba0: 097d 0a09 2466 6c61 6742 6c6f 636b 4465 .}..$flagBlockDe\n+00012bb0: 7669 6365 203d 2031 3b0a 096d 7920 2462 vice = 1;..my $b\n+00012bc0: 733b 0a09 2462 7320 3d20 2463 6865 636b s;..$bs = $check\n+00012bd0: 426c 6f63 6b73 4253 5b24 695d 203d 0a09 BlocksBS[$i] =..\n+00012be0: 2020 2020 2826 3a3a 7265 7665 7274 4875 (&::revertHu\n+00012bf0: 6d61 6e52 6561 6461 626c 6528 2463 6865 manReadable($che\n+00012c00: 636b 426c 6f63 6b73 4253 5b24 695d 2929 ckBlocksBS[$i]))\n+00012c10: 5b30 5d3b 0a0a 0924 7072 4c6f 672d 3e70 [0];...$prLog->p\n+00012c20: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00012c30: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n+00012c40: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [\n+00012c50: 2263 6865 636b 426c 6f63 6b73 4253 2469 \"checkBlocksBS$i\n+00012c60: 2074 6f6f 2073 6d61 6c6c 2028 2462 7320 too small ($bs \n+00012c70: 3c20 2463 6865 636b 426c 6f63 6b73 4253 < $checkBlocksBS\n+00012c80: 6d69 6e29 225d 2c0a 0909 2020 2020 2020 min)\"],... \n+00012c90: 272d 6578 6974 2720 3d3e 2031 290a 0920 '-exit' => 1).. \n+00012ca0: 2020 2069 6620 2462 7320 3c20 2463 6865 if $bs < $che\n+00012cb0: 636b 426c 6f63 6b73 4253 6d69 6e3b 0a0a ckBlocksBSmin;..\n+00012cc0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00012cd0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00012ce0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00012cf0: 0a09 0920 2020 2020 205b 2262 6c6f 636b ... [\"block\n+00012d00: 2073 697a 6520 666f 7220 6368 6563 6b42 size for checkB\n+00012d10: 6c6f 636b 7352 756c 6524 6920 6973 2022 locksRule$i is \"\n+00012d20: 202e 2024 6368 6563 6b42 6c6f 636b 7342 . $checkBlocksB\n+00012d30: 535b 2469 5d20 2e0a 0909 2020 2020 2020 S[$i] .... \n+00012d40: 2022 2c20 6d75 7374 2062 6520 246d 696e \", must be $min\n+00012d50: 426c 6f63 6b4c 656e 6774 6820 6f72 206d BlockLength or m\n+00012d60: 6f72 6522 5d2c 0a09 0920 2020 2020 2027 ore\"],... '\n+00012d70: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. \n+00012d80: 2020 6966 2024 6273 203c 2024 6d69 6e42 if $bs < $minB\n+00012d90: 6c6f 636b 4c65 6e67 7468 3b0a 0a09 2470 lockLength;...$p\n+00012da0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00012db0: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n+00012dc0: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>...\n+00012dd0: 2020 2020 2020 5b22 7061 7261 6d65 7465 [\"paramete\n+00012de0: 7220 3c24 6273 3e20 666f 7220 6f70 7469 r <$bs> for opti\n+00012df0: 6f6e 2063 6865 636b 426c 6f63 6b73 4253 on checkBlocksBS\n+00012e00: 2569 2068 6173 2077 726f 6e67 2066 6f72 %i has wrong for\n+00012e10: 6d61 7422 5d2c 0a09 0920 2020 2020 2027 mat\"],... '\n+00012e20: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. \n+00012e30: 2020 756e 6c65 7373 2064 6566 696e 6564 unless defined\n+00012e40: 2024 6273 3b0a 2020 2020 7d0a 0a20 2020 $bs;. }.. \n+00012e50: 206d 7920 2840 6368 6b44 6576 6963 6573 my (@chkDevices\n+00012e60: 2c20 4063 686b 4465 7669 6365 7344 6972 , @chkDevicesDir\n+00012e70: 2c20 4063 686b 4465 7669 6365 7342 532c , @chkDevicesBS,\n+00012e80: 2040 6368 6b44 6576 6963 6573 436f 6d70 @chkDevicesComp\n+00012e90: 722c 0a09 4063 686b 4465 7669 6365 7350 r,..@chkDevicesP\n+00012ea0: 6172 616c 6c65 6c29 3b0a 2020 2020 666f arallel);. fo\n+00012eb0: 7265 6163 6820 2469 2028 302e 2e40 6368 reach $i (0..@ch\n+00012ec0: 6563 6b44 6576 6963 6573 2d31 290a 2020 eckDevices-1). \n+00012ed0: 2020 7b0a 096e 6578 7420 756e 6c65 7373 {..next unless\n+00012ee0: 2024 6368 6563 6b44 6576 6963 6573 5b24 $checkDevices[$\n+00012ef0: 695d 3b0a 0a09 756e 6c65 7373 2028 6465 i];...unless (de\n+00012f00: 6669 6e65 6420 2463 6865 636b 4465 7669 fined $checkDevi\n+00012f10: 6365 7342 535b 2469 5d29 0a09 7b0a 0920 cesBS[$i])..{.. \n+00012f20: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00012f30: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00012f40: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n+00012f50: 0909 0920 205b 2262 6c6f 636b 2073 697a ... [\"block siz\n+00012f60: 6520 666f 7220 6f70 7469 6f6e 2063 6865 e for option che\n+00012f70: 636b 4465 7669 6365 7324 6920 6973 206d ckDevices$i is m\n+00012f80: 6973 7369 6e67 225d 2c0a 0909 0920 2027 issing\"],.... '\n+00012f90: 2d65 7869 7427 203d 3e20 3129 3b0a 097d -exit' => 1);..}\n+00012fa0: 0a09 2466 6c61 6742 6c6f 636b 4465 7669 ..$flagBlockDevi\n+00012fb0: 6365 203d 2031 3b0a 096d 7920 2462 733b ce = 1;..my $bs;\n+00012fc0: 0a09 2462 7320 3d20 2463 6865 636b 4465 ..$bs = $checkDe\n+00012fd0: 7669 6365 7342 535b 2469 5d20 3d0a 0920 vicesBS[$i] =.. \n+00012fe0: 2020 2028 263a 3a72 6576 6572 7448 756d (&::revertHum\n+00012ff0: 616e 5265 6164 6162 6c65 2824 6368 6563 anReadable($chec\n+00013000: 6b44 6576 6963 6573 4253 5b24 695d 2929 kDevicesBS[$i]))\n+00013010: 5b30 5d3b 0a0a 0924 7072 4c6f 672d 3e70 [0];...$prLog->p\n+00013020: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00013030: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n+00013040: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [\n+00013050: 2263 6865 636b 4465 7669 6365 7342 5324 \"checkDevicesBS$\n+00013060: 6920 746f 6f20 736d 616c 6c20 2824 6273 i too small ($bs\n+00013070: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB\n+00013080: 536d 696e 2922 5d2c 0a09 0920 2020 2020 Smin)\"],... \n+00013090: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1)..\n+000130a0: 2020 2020 6966 2024 6273 203c 2024 6368 if $bs < $ch\n+000130b0: 6563 6b42 6c6f 636b 7342 536d 696e 3b0a eckBlocksBSmin;.\n+000130c0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+000130d0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+000130e0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+000130f0: 3e0a 0909 2020 2020 2020 5b22 626c 6f63 >... [\"bloc\n+00013100: 6b20 7369 7a65 2066 6f72 2063 6865 636b k size for check\n+00013110: 4465 7669 6365 7324 6920 6973 2022 202e Devices$i is \" .\n+00013120: 2024 6368 6563 6b44 6576 6963 6573 4253 $checkDevicesBS\n+00013130: 5b24 695d 202e 0a09 0920 2020 2020 2020 [$i] .... \n+00013140: 222c 206d 7573 7420 6265 2024 6d69 6e42 \", must be $minB\n+00013150: 6c6f 636b 4c65 6e67 7468 206f 7220 6d6f lockLength or mo\n+00013160: 7265 225d 2c0a 0909 2020 2020 2020 272d re\"],... '-\n+00013170: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n+00013180: 2069 6620 2462 7320 3c20 246d 696e 426c if $bs < $minBl\n+00013190: 6f63 6b4c 656e 6774 683b 0a0a 0924 7072 ockLength;...$pr\n+000131a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000131b0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... \n+000131c0: 2020 2027 2d73 7472 2720 3d3e 0a09 0920 '-str' =>... \n+000131d0: 2020 2020 205b 2270 6172 616d 6574 6572 [\"parameter\n+000131e0: 203c 2462 733e 2066 6f72 206f 7074 696f <$bs> for optio\n+000131f0: 6e20 6368 6563 6b44 6576 6963 6573 4253 n checkDevicesBS\n+00013200: 2569 2068 6173 2077 726f 6e67 2066 6f72 %i has wrong for\n+00013210: 6d61 7422 5d2c 0a09 0920 2020 2020 2027 mat\"],... '\n+00013220: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. \n+00013230: 2020 756e 6c65 7373 2064 6566 696e 6564 unless defined\n+00013240: 2024 6273 3b0a 0a09 2470 724c 6f67 2d3e $bs;...$prLog->\n+00013250: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00013260: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+00013270: 7374 7227 203d 3e0a 0909 2020 2020 2020 str' =>... \n+00013280: 5b22 6f70 7469 6f6e 2063 6865 636b 4465 [\"option checkDe\n+00013290: 7669 6365 7344 6972 2469 206e 6f74 2073 vicesDir$i not s\n+000132a0: 6574 225d 2c0a 0909 2020 2020 2020 272d et\"],... '-\n+000132b0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n+000132c0: 2075 6e6c 6573 7320 6465 6669 6e65 6420 unless defined \n+000132d0: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir\n+000132e0: 5b24 695d 3b0a 0a09 6d79 2024 6465 764c [$i];...my $devL\n+000132f0: 6973 7420 3d20 2463 6865 636b 4465 7669 ist = $checkDevi\n+00013300: 6365 735b 2469 5d3b 0a09 6d79 2024 6465 ces[$i];..my $de\n+00013310: 7644 6972 203d 2024 6368 6563 6b44 6576 vDir = $checkDev\n+00013320: 6963 6573 4469 725b 2469 5d3b 0a09 6d79 icesDir[$i];..my\n+00013330: 2024 6c61 7374 4465 7644 6972 203d 2024 $lastDevDir = $\n+00013340: 6368 6563 6b44 6576 6963 6573 4469 725b checkDevicesDir[\n+00013350: 2469 5d5b 305d 3b0a 096d 7920 246a 3b0a $i][0];..my $j;.\n+00013360: 0966 6f72 6561 6368 2024 6a20 2830 2e2e .foreach $j (0..\n+00013370: 4024 6465 764c 6973 742d 3129 0a09 7b0a @$devList-1)..{.\n+00013380: 0920 2020 206d 7920 2464 6576 203d 2024 . my $dev = $\n+00013390: 2464 6576 4c69 7374 5b24 6a5d 3b0a 0920 $devList[$j];.. \n+000133a0: 2020 2070 7573 6820 4063 686b 4465 7669 push @chkDevi\n+000133b0: 6365 732c 2024 6465 763b 0a09 2020 2020 ces, $dev;.. \n+000133c0: 246c 6173 7444 6576 4469 7220 3d20 2024 $lastDevDir = $\n+000133d0: 2464 6576 4469 725b 246a 5d20 6966 2040 $devDir[$j] if @\n+000133e0: 2464 6576 4469 7220 2d20 3120 3e3d 2024 $devDir - 1 >= $\n+000133f0: 6a3b 0a09 2020 2020 7075 7368 2040 6368 j;.. push @ch\n+00013400: 6b44 6576 6963 6573 4469 722c 2024 6c61 kDevicesDir, $la\n+00013410: 7374 4465 7644 6972 3b0a 0920 2020 2070 stDevDir;.. p\n+00013420: 7573 6820 4063 686b 4465 7669 6365 7342 ush @chkDevicesB\n+00013430: 532c 2024 6273 3b0a 0920 2020 2070 7573 S, $bs;.. pus\n+00013440: 6820 4063 686b 4465 7669 6365 7343 6f6d h @chkDevicesCom\n+00013450: 7072 2c20 2463 6865 636b 4465 7669 6365 pr, $checkDevice\n+00013460: 7343 6f6d 7072 5b24 695d 3b0a 0920 2020 sCompr[$i];.. \n+00013470: 2070 7573 6820 4063 686b 4465 7669 6365 push @chkDevice\n+00013480: 7350 6172 616c 6c65 6c2c 2024 6368 6563 sParallel, $chec\n+00013490: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel\n+000134a0: 5b24 695d 3b0a 097d 0a20 2020 207d 0a20 [$i];..}. }. \n+000134b0: 2020 2028 4063 6865 636b 4465 7669 6365 (@checkDevice\n+000134c0: 7329 203d 2028 4063 686b 4465 7669 6365 s) = (@chkDevice\n+000134d0: 7329 3b20 2020 2023 2068 6572 6520 7765 s); # here we\n+000134e0: 2068 6176 6520 6f6e 6c79 2075 7365 6420 have only used \n+000134f0: 656e 7472 6965 730a 2020 2020 2840 6368 entries. (@ch\n+00013500: 6563 6b44 6576 6963 6573 4469 7229 203d eckDevicesDir) =\n+00013510: 2028 4063 686b 4465 7669 6365 7344 6972 (@chkDevicesDir\n+00013520: 293b 0a20 2020 2028 4063 6865 636b 4465 );. (@checkDe\n+00013530: 7669 6365 7342 5329 203d 2028 4063 686b vicesBS) = (@chk\n+00013540: 4465 7669 6365 7342 5329 3b0a 2020 2020 DevicesBS);. \n+00013550: 2840 6368 6563 6b44 6576 6963 6573 436f (@checkDevicesCo\n+00013560: 6d70 7229 203d 2028 4063 686b 4465 7669 mpr) = (@chkDevi\n+00013570: 6365 7343 6f6d 7072 293b 0a20 2020 2028 cesCompr);. (\n+00013580: 4063 6865 636b 4465 7669 6365 7350 6172 @checkDevicesPar\n+00013590: 616c 6c65 6c29 203d 2028 4063 686b 4465 allel) = (@chkDe\n+000135a0: 7669 6365 7350 6172 616c 6c65 6c29 3b0a vicesParallel);.\n+000135b0: 0a20 2020 2069 6620 2828 4063 6865 636b . if ((@check\n+000135c0: 426c 6f63 6b73 5275 6c65 206f 7220 4063 BlocksRule or @c\n+000135d0: 6865 636b 4465 7669 6365 7329 2061 6e64 heckDevices) and\n+000135e0: 0a09 2463 6f6d 7072 6573 735b 305d 2065 ..$compress[0] e\n+000135f0: 7120 2762 7a69 7032 2729 0a20 2020 207b q 'bzip2'). {\n+00013600: 0a09 6576 616c 2022 7573 6520 494f 3a3a ..eval \"use IO::\n+00013610: 436f 6d70 7265 7373 3a3a 427a 6970 3220 Compress::Bzip2 \n+00013620: 7177 2862 7a69 7032 2922 3b0a 0969 6620 qw(bzip2)\";..if \n+00013630: 2824 4029 0a09 7b0a 0920 2020 2024 7072 ($@)..{.. $pr\n+00013640: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00013650: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n+00013660: 272d 7374 7227 203d 3e20 5b22 706c 6561 '-str' => [\"plea\n+00013670: 7365 2069 6e73 7461 6c6c 2049 4f3a 3a43 se install IO::C\n+00013680: 6f6d 7072 6573 733a 3a42 7a69 7032 2066 ompress::Bzip2 f\n+00013690: 726f 6d20 2220 2e0a 0909 0909 2020 2020 rom \" ...... \n+000136a0: 2022 4350 414e 2066 6f72 2062 6574 7465 \"CPAN for bette\n+000136b0: 7220 7065 7266 6f72 6d61 6e63 6522 5d29 r performance\"])\n+000136c0: 3b0a 097d 0a09 656c 7365 0a09 7b0a 0920 ;..}..else..{.. \n+000136d0: 2020 2024 6d61 696e 3a3a 494f 436f 6d70 $main::IOComp\n+000136e0: 7265 7373 4469 7265 6374 203d 2031 3b0a ressDirect = 1;.\n+000136f0: 097d 0a20 2020 207d 0a7d 0a0a 2470 724c .}. }.}..$prL\n+00013700: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00013710: 2720 3d3e 2027 4127 2c0a 0920 2020 2020 ' => 'A',.. \n+00013720: 2027 2d73 7472 2720 3d3e 205b 2262 6163 '-str' => [\"bac\n+00013730: 6b69 6e67 2075 7020 6469 7265 6374 6f72 king up director\n+00013740: 7920 3c24 736f 7572 6365 4469 723e 2074 y <$sourceDir> t\n+00013750: 6f20 3c24 7461 7267 6574 4469 723e 225d o <$targetDir>\"]\n+00013760: 293b 0a24 7072 4c6f 672d 3e70 7269 6e74 );.$prLog->print\n+00013770: 2827 2d6b 696e 6427 203d 3e20 2756 272c ('-kind' => 'V',\n+00013780: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00013790: 3e20 5b22 2456 4552 5349 4f4e 704e 616d > [\"$VERSIONpNam\n+000137a0: 652c 2024 6d61 696e 3a3a 5354 4f52 4542 e, $main::STOREB\n+000137b0: 4143 4b55 5056 4552 5349 4f4e 2c20 2220 ACKUPVERSION, \" \n+000137c0: 2e0a 0909 0920 2262 7569 6c64 2024 5645 ..... \"build $VE\n+000137d0: 5253 494f 4e73 766e 4944 225d 293b 0a0a RSIONsvnID\"]);..\n+000137e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000137f0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0920 kind' => 'W',.. \n+00013800: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00013810: 226f 7074 696f 6e20 5c22 636f 7079 4257 \"option \\\"copyBW\n+00013820: 4c69 6d69 745c 2220 6973 2064 6570 7265 Limit\\\" is depre\n+00013830: 6361 7465 642c 2070 6c65 6173 6520 2220 cated, please \" \n+00013840: 2e0a 0909 0920 2272 656d 6f76 6520 6672 ..... \"remove fr\n+00013850: 6f6d 2079 6f75 7220 636f 6e66 6967 7572 om your configur\n+00013860: 6174 696f 6e22 5d29 0a20 2020 2069 6620 ation\"]). if \n+00013870: 6465 6669 6e65 6420 2463 6f70 7942 574c defined $copyBWL\n+00013880: 696d 6974 3b0a 0a0a 6966 2028 2470 6c75 imit;...if ($plu\n+00013890: 734c 6f67 5374 646f 7574 290a 7b0a 2020 sLogStdout).{. \n+000138a0: 2020 6d79 2024 7020 3d20 7072 696e 744c my $p = printL\n+000138b0: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' \n+000138c0: 3d3e 2024 7072 4c6f 674b 696e 642c 0a09 => $prLogKind,..\n+000138d0: 0909 2020 272d 6669 6c65 6465 7363 7269 .. '-filedescri\n+000138e0: 7074 6f72 272c 202a 5354 444f 5554 293b ptor', *STDOUT);\n+000138f0: 0a20 2020 2024 7072 4c6f 672d 3e61 6464 . $prLog->add\n+00013900: 2827 2d70 724c 6f67 7327 203d 3e20 5b24 ('-prLogs' => [$\n+00013910: 705d 293b 0a7d 0a0a 2320 4f53 2d54 7970 p]);.}..# OS-Typ\n+00013920: 2066 6573 7473 7465 6c6c 656e 2c20 756d feststellen, um\n+00013930: 2041 5247 5f4d 4158 207a 7520 7365 747a ARG_MAX zu setz\n+00013940: 656e 0a23 2044 6566 6175 6c74 2077 6972 en.# Default wir\n+00013950: 6420 766f 7273 6963 6874 7368 616c 6265 d vorsichtshalbe\n+00013960: 7220 6175 6620 3420 4b42 2067 6573 6574 r auf 4 KB geset\n+00013970: 7a74 210a 7b0a 2020 2020 6d79 2024 756e zt!.{. my $un\n+00013980: 616d 6520 3d20 666f 726b 5072 6f63 2d3e ame = forkProc->\n+00013990: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => '\n+000139a0: 756e 616d 6527 2c0a 0909 0920 2020 2020 uname',.... \n+000139b0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n+000139c0: 2022 2474 6d70 6469 722f 756e 616d 652d \"$tmpdir/uname-\n+000139d0: 222c 0a09 0909 2020 2020 2020 272d 7072 \",.... '-pr\n+000139e0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n+000139f0: 0a20 2020 2024 756e 616d 652d 3e77 6169 . $uname->wai\n+00013a00: 7428 293b 0a20 2020 206d 7920 246f 7574 t();. my $out\n+00013a10: 203d 2024 756e 616d 652d 3e67 6574 5354 = $uname->getST\n+00013a20: 444f 5554 2829 3b0a 2020 2020 6d79 2024 DOUT();. my $\n+00013a30: 6f73 203d 2027 273b 0a20 2020 2069 6620 os = '';. if \n+00013a40: 2865 7869 7374 7320 2465 7865 6350 6172 (exists $execPar\n+00013a50: 616d 4c65 6e67 7468 7b24 246f 7574 5b30 amLength{$$out[0\n+00013a60: 5d7d 290a 2020 2020 7b0a 0924 6d61 696e ]}). {..$main\n+00013a70: 3a3a 6578 6563 5061 7261 6d4c 656e 6774 ::execParamLengt\n+00013a80: 6820 3d20 2465 7865 6350 6172 616d 4c65 h = $execParamLe\n+00013a90: 6e67 7468 7b24 246f 7574 5b30 5d7d 3b0a ngth{$$out[0]};.\n+00013aa0: 0924 6f73 203d 2027 2028 2720 2e20 2424 .$os = ' (' . $$\n+00013ab0: 6f75 745b 305d 202e 2027 2927 3b0a 2020 out[0] . ')';. \n+00013ac0: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog->\n+00013ad0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00013ae0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str'\n+00013af0: 203d 3e20 5b27 7365 7474 696e 6720 4152 => ['setting AR\n+00013b00: 475f 4d41 5820 746f 2027 202e 2024 6d61 G_MAX to ' . $ma\n+00013b10: 696e 3a3a 6578 6563 5061 7261 6d4c 656e in::execParamLen\n+00013b20: 6774 6820 2e0a 0909 0920 2020 2020 246f gth ..... $o\n+00013b30: 735d 293b 0a20 2020 2024 6f75 7420 3d20 s]);. $out = \n+00013b40: 2475 6e61 6d65 2d3e 6765 7453 5444 4552 $uname->getSTDER\n+00013b50: 5228 293b 0a20 2020 2024 7072 4c6f 672d R();. $prLog-\n+00013b60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00013b70: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n+00013b80: 2720 3d3e 205b 2253 5444 4552 5220 6f66 ' => [\"STDERR of\n+00013b90: 203c 756e 616d 653e 3a22 2c20 4024 6f75 :\", @$ou\n+00013ba0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out >\n+00013bb0: 2030 293b 0a0a 2020 2020 2320 6368 6563 0);.. # chec\n+00013bc0: 6b20 6966 2065 7874 6572 6e61 6c20 7072 k if external pr\n+00013bd0: 6f67 7261 6d73 2065 7869 7374 2069 6e20 ograms exist in \n+00013be0: 7061 7468 0a20 2020 206d 7920 2840 6d69 path. my (@mi\n+00013bf0: 7373 696e 6729 203d 0a09 263a 3a63 6865 ssing) =..&::che\n+00013c00: 636b 5072 6f67 4578 6973 7473 2824 7072 ckProgExists($pr\n+00013c10: 4c6f 672c 2027 6d64 3573 756d 272c 2027 Log, 'md5sum', '\n+00013c20: 6370 272c 2027 627a 6970 3227 2c20 276d cp', 'bzip2', 'm\n+00013c30: 6b6e 6f64 272c 0a09 0909 2020 2027 6d6f knod',.... 'mo\n+00013c40: 756e 7427 2c20 2463 6f6d 7072 6573 735b unt', $compress[\n+00013c50: 305d 2c20 2475 6e63 6f6d 7072 6573 735b 0], $uncompress[\n+00013c60: 305d 293b 0a20 2020 2069 6620 2840 6d69 0]);. if (@mi\n+00013c70: 7373 696e 6729 0a20 2020 207b 0a09 2470 ssing). {..$p\n+00013c80: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00013c90: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n+00013ca0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00013cb0: 7468 6520 666f 6c6c 6f77 696e 6720 7072 the following pr\n+00013cc0: 6f67 7261 6d73 2061 7265 206e 6f74 2069 ograms are not i\n+00013cd0: 6e20 5c24 5041 5448 3a22 2c0a 0909 0909 n \\$PATH:\",.....\n+00013ce0: 2022 5c74 406d 6973 7369 6e67 222c 0a09 \"\\t@missing\",..\n+00013cf0: 0909 0920 2270 6c65 6173 6520 696e 7374 ... \"please inst\n+00013d00: 616c 6c20 6f72 2063 6865 636b 205c 2450 all or check \\$P\n+00013d10: 4154 4822 2c0a 0909 0909 2022 5c24 5041 ATH\",..... \"\\$PA\n+00013d20: 5448 2069 7320 2220 2e20 2445 4e56 7b27 TH is \" . $ENV{'\n+00013d30: 5041 5448 277d 5d2c 0a09 0920 2020 2020 PATH'}],... \n+00013d40: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);.\n+00013d50: 2020 2020 7d0a 7d0a 0a0a 2470 724c 6f67 }.}...$prLog\n+00013d60: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00013d70: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. '\n+00013d80: 2d73 7472 2720 3d3e 205b 2270 7265 7365 -str' => [\"prese\n+00013d90: 7276 6520 5065 726d 7320 6973 206e 6f74 rve Perms is not\n+00013da0: 2073 6574 225d 290a 2020 2020 6966 2024 set\"]). if $\n+00013db0: 7072 6573 6572 7665 5065 726d 7320 6571 preservePerms eq\n+00013dc0: 2027 6e6f 273b 0a24 7072 4c6f 672d 3e70 'no';.$prLog->p\n+00013dd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00013de0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n+00013df0: 7227 203d 3e20 5b22 736f 7572 6365 2064 r' => [\"source d\n+00013e00: 6972 6563 746f 7279 203c 2473 6f75 7263 irectory <$sourc\n+00013e10: 6544 6972 3e20 646f 6573 206e 6f74 2065 eDir> does not e\n+00013e20: 7869 7374 225d 2c0a 0920 2020 2020 2027 xist\"],.. '\n+00013e30: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n+00013e40: 2075 6e6c 6573 7320 282d 6420 2473 6f75 unless (-d $sou\n+00013e50: 7263 6544 6972 293b 0a24 7072 4c6f 672d rceDir);.$prLog-\n+00013e60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00013e70: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '-\n+00013e80: 7374 7227 203d 3e20 5b22 7461 7267 6574 str' => [\"target\n+00013e90: 2064 6972 6563 746f 7279 203c 2474 6172 directory <$tar\n+00013ea0: 6765 7444 6972 3e20 646f 6573 206e 6f74 getDir> does not\n+00013eb0: 2065 7869 7374 225d 2c0a 0920 2020 2020 exist\"],.. \n+00013ec0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). \n+00013ed0: 2020 2075 6e6c 6573 7320 282d 6420 2474 unless (-d $t\n+00013ee0: 6172 6765 7444 6972 293b 0a0a 0a23 0a23 argetDir);...#.#\n+00013ef0: 2069 6e69 7469 616c 6973 6520 696e 636c initialise incl\n+00013f00: 7564 652c 2065 7863 6c75 6465 2061 6e64 ude, exclude and\n+00013f10: 2063 6865 636b 426c 6f63 6b73 2072 756c checkBlocks rul\n+00013f20: 6573 0a23 0a6d 7920 2465 7863 5275 6c65 es.#.my $excRule\n+00013f30: 203d 2065 7661 6c49 6e6f 6465 5275 6c65 = evalInodeRule\n+00013f40: 2d3e 6e65 7728 272d 6c69 6e65 2720 3d3e ->new('-line' =>\n+00013f50: 2024 6578 6365 7074 5275 6c65 2c0a 0909 $exceptRule,...\n+00013f60: 0909 2027 2d6b 6579 4e61 6d65 2720 3d3e .. '-keyName' =>\n+00013f70: 2027 6578 6365 7074 5275 6c65 272c 0a09 'exceptRule',..\n+00013f80: 0909 0920 272d 6465 6275 6727 203d 3e20 ... '-debug' => \n+00013f90: 2464 6562 7567 2c0a 0909 0909 2027 2d74 $debug,..... '-t\n+00013fa0: 6d70 6469 7227 203d 3e20 2474 6d70 6469 mpdir' => $tmpdi\n+00013fb0: 722c 0a09 0909 0920 272d 7072 4c6f 6727 r,..... '-prLog'\n+00013fc0: 203d 3e20 2470 724c 6f67 293b 0a6d 7920 => $prLog);.my \n+00013fd0: 2469 6e63 5275 6c65 203d 2065 7661 6c49 $incRule = evalI\n+00013fe0: 6e6f 6465 5275 6c65 2d3e 6e65 7728 272d nodeRule->new('-\n+00013ff0: 6c69 6e65 2720 3d3e 2024 696e 636c 7564 line' => $includ\n+00014000: 6552 756c 652c 0a09 0909 0920 272d 6b65 eRule,..... '-ke\n+00014010: 794e 616d 6527 203d 3e20 2769 6e63 6c75 yName' => 'inclu\n+00014020: 6465 5275 6c65 272c 0a09 0909 0920 272d deRule',..... '-\n+00014030: 6465 6275 6727 203d 3e20 2464 6562 7567 debug' => $debug\n+00014040: 2c0a 0909 0909 2027 2d74 6d70 6469 7227 ,..... '-tmpdir'\n+00014050: 203d 3e20 2474 6d70 6469 722c 0a09 0909 => $tmpdir,....\n+00014060: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p\n+00014070: 724c 6f67 293b 0a0a 6966 2028 2463 6f6d rLog);..if ($com\n+00014080: 7072 5275 6c65 290a 7b0a 2020 2020 2463 prRule).{. $c\n+00014090: 6f6d 7072 5275 6c65 203d 2065 7661 6c49 omprRule = evalI\n+000140a0: 6e6f 6465 5275 6c65 2d3e 6e65 7728 272d nodeRule->new('-\n+000140b0: 6c69 6e65 2720 3d3e 2024 636f 6d70 7252 line' => $comprR\n+000140c0: 756c 652c 0a09 0909 0920 2020 2020 2020 ule,..... \n+000140d0: 272d 6b65 794e 616d 6527 203d 3e20 2763 '-keyName' => 'c\n+000140e0: 6f6d 7072 5275 6c65 272c 0a09 0909 0920 omprRule',..... \n+000140f0: 2020 2020 2020 272d 6465 6275 6727 203d '-debug' =\n+00014100: 3e20 2464 6562 7567 2c0a 0909 0909 2020 > $debug,..... \n+00014110: 2020 2020 2027 2d74 6d70 6469 7227 203d '-tmpdir' =\n+00014120: 3e20 2474 6d70 6469 722c 0a09 0909 0920 > $tmpdir,..... \n+00014130: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n+00014140: 3e20 2470 724c 6f67 293b 2020 0a7d 0a65 > $prLog); .}.e\n+00014150: 6c73 650a 7b0a 2020 2020 6d79 2040 7220 lse.{. my @r \n+00014160: 3d20 2829 3b0a 0a20 2020 2070 7573 6820 = ();.. push \n+00014170: 4072 2c20 225c 2473 697a 6520 3e20 246d @r, \"\\$size > $m\n+00014180: 696e 436f 6d70 7265 7373 5369 7a65 2061 inCompressSize a\n+00014190: 6e64 2220 6966 2024 6d69 6e43 6f6d 7072 nd\" if $minCompr\n+000141a0: 6573 7353 697a 6520 3e20 303b 0a0a 2020 essSize > 0;.. \n+000141b0: 2020 6d79 2024 6578 6365 7074 5375 6666 my $exceptSuff\n+000141c0: 6978 5061 7474 6572 6e20 3d0a 096a 6f69 ixPattern =..joi\n+000141d0: 6e28 275c 5a7c 272c 2040 6578 6365 7074 n('\\Z|', @except\n+000141e0: 5375 6666 6978 2920 2e20 275c 5a27 3b0a Suffix) . '\\Z';.\n+000141f0: 0a20 2020 2070 7573 6820 4072 2c20 226e . push @r, \"n\n+00014200: 6f74 205c 2466 696c 6520 3d7e 202f 2465 ot \\$file =~ /$e\n+00014210: 7863 6570 7453 7566 6669 7850 6174 7465 xceptSuffixPatte\n+00014220: 726e 2f69 2220 6966 2040 6578 6365 7074 rn/i\" if @except\n+00014230: 5375 6666 6978 3b0a 0a20 2020 2069 6620 Suffix;.. if \n+00014240: 2824 636f 6d70 7265 7373 5375 6666 6978 ($compressSuffix\n+00014250: 290a 2020 2020 7b0a 0970 7573 6820 4072 ). {..push @r\n+00014260: 2c20 2761 6e64 272c 2027 2827 3b0a 0a09 , 'and', '(';...\n+00014270: 6d79 2024 636f 6d70 7253 7566 6669 7850 my $comprSuffixP\n+00014280: 6174 7465 726e 203d 0a09 2020 2020 6a6f attern =.. jo\n+00014290: 696e 2827 5c5a 7c27 2c20 4024 636f 6d70 in('\\Z|', @$comp\n+000142a0: 7265 7373 5375 6666 6978 2920 2e20 275c ressSuffix) . '\\\n+000142b0: 5a27 3b0a 0970 7573 6820 4072 2c20 225c Z';..push @r, \"\\\n+000142c0: 2466 696c 6520 3d7e 202f 2463 6f6d 7072 $file =~ /$compr\n+000142d0: 5375 6666 6978 5061 7474 6572 6e2f 6922 SuffixPattern/i\"\n+000142e0: 3b0a 0970 7573 6820 4072 2c20 276f 7227 ;..push @r, 'or'\n+000142f0: 3b0a 0a09 7075 7368 2040 722c 2027 263a ;...push @r, '&:\n+00014300: 3a43 4f4d 5052 4553 5349 4f4e 5f43 4845 :COMPRESSION_CHE\n+00014310: 434b 2824 6669 6c65 2927 3b0a 0a09 7075 CK($file)';...pu\n+00014320: 7368 2040 722c 2027 2927 3b0a 2020 2020 sh @r, ')';. \n+00014330: 7d0a 0a20 2020 2024 636f 6d70 7252 756c }.. $comprRul\n+00014340: 6520 3d20 6576 616c 496e 6f64 6552 756c e = evalInodeRul\n+00014350: 652d 3e6e 6577 2827 2d6c 696e 6527 203d e->new('-line' =\n+00014360: 3e20 5c40 722c 0a09 0909 0920 2020 2020 > \\@r,..... \n+00014370: 2020 272d 6b65 794e 616d 6527 203d 3e20 '-keyName' => \n+00014380: 2763 6f6d 7072 5275 6c65 272c 0a09 0909 'comprRule',....\n+00014390: 0920 2020 2020 2020 272d 6465 6275 6727 . '-debug'\n+000143a0: 203d 3e20 2464 6562 7567 2c0a 0909 0909 => $debug,.....\n+000143b0: 2020 2020 2020 2027 2d74 6d70 6469 7227 '-tmpdir'\n+000143c0: 203d 3e20 2474 6d70 6469 722c 0a09 0909 => $tmpdir,....\n+000143d0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog'\n+000143e0: 203d 3e20 2470 724c 6f67 293b 0a7d 0a24 => $prLog);.}.$\n+000143f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00014400: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. \n+00014410: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00014420: 636f 6d70 7252 756c 6520 3d20 2220 2e0a comprRule = \" ..\n+00014430: 0909 0920 2463 6f6d 7072 5275 6c65 2d3e ... $comprRule->\n+00014440: 6765 744c 696e 6553 7472 696e 6728 295d getLineString()]\n+00014450: 290a 2020 2020 6966 2024 636f 6d70 7252 ). if $comprR\n+00014460: 756c 652d 3e68 6173 4c69 6e65 2829 3b0a ule->hasLine();.\n+00014470: 6d79 2024 6368 6252 756c 6520 3d20 6576 my $chbRule = ev\n+00014480: 616c 496e 6f64 6552 756c 654d 756c 7469 alInodeRuleMulti\n+00014490: 706c 652d 3e6e 6577 2827 2d6c 696e 6573 ple->new('-lines\n+000144a0: 2720 3d3e 205c 4063 6865 636b 426c 6f63 ' => \\@checkBloc\n+000144b0: 6b73 5275 6c65 2c0a 0909 0909 0920 272d ksRule,...... '-\n+000144c0: 626c 6f63 6b53 697a 6527 203d 3e20 5c40 blockSize' => \\@\n+000144d0: 6368 6563 6b42 6c6f 636b 7342 532c 0a09 checkBlocksBS,..\n+000144e0: 0909 0909 2027 2d62 6c6f 636b 436f 6d70 .... '-blockComp\n+000144f0: 7265 7373 2720 3d3e 205c 4063 6865 636b ress' => \\@check\n+00014500: 426c 6f63 6b73 436f 6d70 722c 0a09 0909 BlocksCompr,....\n+00014510: 0909 2027 2d62 6c6f 636b 5265 6164 2720 .. '-blockRead' \n+00014520: 3d3e 205c 4063 6865 636b 426c 6f63 6b73 => \\@checkBlocks\n+00014530: 5265 6164 2c0a 0909 0909 0920 272d 626c Read,...... '-bl\n+00014540: 6f63 6b50 6172 616c 6c65 6c27 203d 3e0a ockParallel' =>.\n+00014550: 0909 0909 0920 5c40 6368 6563 6b42 6c6f ..... \\@checkBlo\n+00014560: 636b 7350 6172 616c 6c65 6c2c 0a09 0909 cksParallel,....\n+00014570: 0909 2027 2d6b 6579 4e61 6d65 2720 3d3e .. '-keyName' =>\n+00014580: 2027 6368 6563 6b42 6c6f 636b 7352 756c 'checkBlocksRul\n+00014590: 6527 2c0a 0909 0909 0920 272d 6465 6275 e',...... '-debu\n+000145a0: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,...\n+000145b0: 0909 0920 272d 746d 7064 6972 2720 3d3e ... '-tmpdir' =>\n+000145c0: 2024 746d 7064 6972 2c0a 0909 0909 0920 $tmpdir,...... \n+000145d0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+000145e0: 6f67 293b 0a0a 0a6d 7920 2473 7461 7274 og);...my $start\n+000145f0: 4461 7465 203d 2064 6174 6554 6f6f 6c73 Date = dateTools\n+00014600: 2d3e 6e65 7728 293b 0a0a 230a 2320 6f74 ->new();..#.# ot\n+00014610: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries \n+00014620: 6572 6d69 7474 656c 6e20 756e 6420 696e ermitteln und in\n+00014630: 206b 6f72 7265 6b74 6572 2052 6569 6865 korrekter Reihe\n+00014640: 6e66 6f6c 6765 2073 6f72 7469 6572 656e nfolge sortieren\n+00014650: 0a23 2028 6e65 7565 7374 6520 7a75 6c65 .# (neueste zule\n+00014660: 747a 7429 2e20 4461 7320 6973 7420 7769 tzt). Das ist wi\n+00014670: 6368 7469 672c 2064 616d 6974 2063 7469 chtig, damit cti\n+00014680: 6d65 2065 7463 2e20 6569 6e65 7220 7a75 me etc. einer zu\n+00014690: 0a23 2073 6963 6865 726e 6465 6e20 4461 .# sichernden Da\n+000146a0: 7465 6920 6175 6368 2064 656e 206e 6575 tei auch den neu\n+000146b0: 6573 7465 6e20 6172 6368 6976 6965 7274 esten archiviert\n+000146c0: 656e 2044 6174 656e 2076 6572 676c 6963 en Daten verglic\n+000146d0: 6865 6e0a 2320 7769 7264 2e0a 230a 0a23 hen.# wird..#..#\n+000146e0: 2063 6f6e 7369 6465 7220 6c61 7374 206f consider last o\n+000146f0: 6620 6261 636b 7570 206f 6620 616c 6c20 f backup of all \n+00014700: 7365 7269 6573 2069 6620 6e6f 7420 7370 series if not sp\n+00014710: 6563 6966 6965 640a 6966 2028 406f 7468 ecified.if (@oth\n+00014720: 6572 4261 636b 7570 5365 7269 6573 203d erBackupSeries =\n+00014730: 3d20 3029 0a7b 0a20 2020 206d 7920 2464 = 0).{. my $d\n+00014740: 3b0a 2020 2020 666f 7265 6163 6820 2464 ;. foreach $d\n+00014750: 2028 263a 3a72 6561 6441 6c6c 4261 636b (&::readAllBack\n+00014760: 7570 5365 7269 6573 2824 6261 636b 7570 upSeries($backup\n+00014770: 4469 722c 2024 7072 4c6f 6729 290a 2020 Dir, $prLog)). \n+00014780: 2020 7b0a 0970 7573 6820 406f 7468 6572 {..push @other\n+00014790: 4261 636b 7570 5365 7269 6573 2c20 2230 BackupSeries, \"0\n+000147a0: 3a24 6422 3b0a 2020 2020 7d0a 7d0a 0a6d :$d\";. }.}..m\n+000147b0: 7920 2470 7265 7642 6163 6b75 704f 776e y $prevBackupOwn\n+000147c0: 5365 7269 6573 203d 2075 6e64 6566 3b0a Series = undef;.\n+000147d0: 6966 2028 406f 7468 6572 4261 636b 7570 if (@otherBackup\n+000147e0: 5365 7269 6573 203e 2030 290a 7b0a 2020 Series > 0).{. \n+000147f0: 2020 7075 7368 2040 6f74 6865 7242 6163 push @otherBac\n+00014800: 6b75 7053 6572 6965 732c 2022 303a 2474 kupSeries, \"0:$t\n+00014810: 6172 6765 7444 6972 223b 0a20 2020 206d argetDir\";. m\n+00014820: 7920 2840 6f62 642c 2024 6429 3b0a 0a20 y (@obd, $d);.. \n+00014830: 2020 2023 2056 6572 7a65 6963 686e 6973 # Verzeichnis\n+00014840: 7365 2065 726d 6974 7465 6c6e 0a20 2020 se ermitteln. \n+00014850: 2066 6f72 6561 6368 2024 6420 2840 6f74 foreach $d (@ot\n+00014860: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries)\n+00014870: 0a20 2020 207b 0a09 6966 2028 2464 203d . {..if ($d =\n+00014880: 7e20 2f5c 4128 616c 6c7c 5c64 2b7c 5c64 ~ /\\A(all|\\d+|\\d\n+00014890: 2b2d 5c64 2b29 3a28 2e2a 292f 290a 097b +-\\d+):(.*)/)..{\n+000148a0: 0a09 2020 2020 6d79 2024 6469 7220 3d20 .. my $dir = \n+000148b0: 2432 3b0a 2020 2020 2020 2020 2020 2020 $2;. \n+000148c0: 6d79 2024 7768 6174 203d 2024 313b 0a09 my $what = $1;..\n+000148d0: 2020 2020 2464 6972 203d 2022 2462 6163 $dir = \"$bac\n+000148e0: 6b75 7044 6972 2f24 6469 7222 2075 6e6c kupDir/$dir\" unl\n+000148f0: 6573 7320 2464 6972 203d 7e20 2f5c 415c ess $dir =~ /\\A\\\n+00014900: 2f2f 3b0a 0920 2020 206d 7920 2461 7362 //;.. my $asb\n+00014910: 6420 3d0a 0909 616c 6c53 746f 7265 4261 d =...allStoreBa\n+00014920: 636b 7570 5365 7269 6573 2d3e 6e65 7728 ckupSeries->new(\n+00014930: 272d 726f 6f74 4469 7227 203d 3e20 2464 '-rootDir' => $d\n+00014940: 6972 2c0a 0909 0909 0927 2d63 6865 636b ir,......'-check\n+00014950: 5375 6d46 696c 6527 203d 3e20 2463 6865 SumFile' => $che\n+00014960: 636b 5375 6d46 696c 652c 0a09 0909 0909 ckSumFile,......\n+00014970: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+00014980: 6f67 2c0a 0909 0909 0927 2d61 6273 5061 og,......'-absPa\n+00014990: 7468 2720 3d3e 2030 293b 0a20 2020 2020 th' => 0);. \n+000149a0: 2020 2020 2020 206d 7920 2840 6429 203d my (@d) =\n+000149b0: 2073 6f72 7420 7b20 2462 2063 6d70 2024 sort { $b cmp $\n+000149c0: 6120 7d0a 0920 2020 2024 6173 6264 2d3e a }.. $asbd->\n+000149d0: 6765 7441 6c6c 4669 6e69 7368 6564 5769 getAllFinishedWi\n+000149e0: 7468 6f75 7441 6374 4261 636b 7570 4469 thoutActBackupDi\n+000149f0: 7228 293b 0a09 2020 2020 2020 2320 6669 r();.. # fi\n+00014a00: 6c74 6572 2077 616e 7465 6420 6469 7273 lter wanted dirs\n+00014a10: 2061 6e64 2067 656e 6572 6174 6520 6162 and generate ab\n+00014a20: 736f 6c75 7465 2070 6174 680a 2020 2020 solute path. \n+00014a30: 2020 2020 2020 2020 6966 2028 2477 6861 if ($wha\n+00014a40: 7420 6571 2022 616c 6c22 290a 0920 2020 t eq \"all\").. \n+00014a50: 207b 0a20 2020 2020 2020 2020 2020 2020 {. \n+00014a60: 2020 2066 6f72 6561 6368 206d 7920 2478 foreach my $x\n+00014a70: 2028 4064 290a 0909 7b0a 2020 2020 2020 (@d)...{. \n+00014a80: 2020 2020 2020 2020 2020 2020 2020 7075 pu\n+00014a90: 7368 2040 6f62 642c 205b 2464 6972 2c20 sh @obd, [$dir, \n+00014aa0: 2478 5d3b 0a20 2020 2020 2020 2020 2020 $x];. \n+00014ab0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n+00014ac0: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n+00014ad0: 2065 6c73 650a 0920 2020 207b 0a20 2020 else.. {. \n+00014ae0: 2020 2020 2020 2020 2020 2020 206d 7920 my \n+00014af0: 2824 6672 6f6d 2c20 2474 6f29 3b0a 2020 ($from, $to);. \n+00014b00: 2020 2020 2020 2020 2020 2020 2020 6966 if\n+00014b10: 2028 2477 6861 7420 3d7e 202f 5e28 5c64 ($what =~ /^(\\d\n+00014b20: 2b29 242f 290a 0909 7b0a 2020 2020 2020 +)$/)...{. \n+00014b30: 2020 2020 2020 2020 2020 2020 2020 2466 $f\n+00014b40: 726f 6d20 3d20 2474 6f20 3d20 2431 3b0a rom = $to = $1;.\n+00014b50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00014b60: 7d0a 2020 2020 2020 2020 2020 2020 2020 }. \n+00014b70: 2020 656c 7369 6620 2824 7768 6174 203d elsif ($what =\n+00014b80: 7e20 2f5e 285c 642b 292d 285c 642b 2924 ~ /^(\\d+)-(\\d+)$\n+00014b90: 2f29 0a09 097b 0a20 2020 2020 2020 2020 /)...{. \n+00014ba0: 2020 2020 2020 2020 2020 2024 6672 6f6d $from\n+00014bb0: 203d 2024 313b 0a20 2020 2020 2020 2020 = $1;. \n+00014bc0: 2020 2020 2020 2020 2020 2024 746f 203d $to =\n+00014bd0: 2024 323b 0a20 2020 2020 2020 2020 2020 $2;. \n+00014be0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n+00014bf0: 2020 2020 2020 2066 6f72 6561 6368 206d foreach m\n+00014c00: 7920 2469 2028 2466 726f 6d20 2e2e 2024 y $i ($from .. $\n+00014c10: 746f 290a 0909 7b0a 2020 2020 2020 2020 to)...{. \n+00014c20: 2020 2020 2020 2020 2020 2020 6966 2028 if (\n+00014c30: 6578 6973 7473 2024 645b 2469 5d29 0a09 exists $d[$i])..\n+00014c40: 0920 2020 207b 0a20 2020 2020 2020 2020 . {. \n+00014c50: 2020 2020 2020 2020 2020 2020 2020 2070 p\n+00014c60: 7573 6820 406f 6264 2c20 5b24 6469 722c ush @obd, [$dir,\n+00014c70: 2024 645b 2469 5d5d 3b0a 2020 2020 2020 $d[$i]];. \n+00014c80: 2020 2020 2020 2020 2020 2020 2020 7d0a }.\n+00014c90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00014ca0: 7d0a 2020 2020 2020 2020 2020 2020 7d0a }. }.\n+00014cb0: 2020 2020 2020 2020 7d0a 2020 2020 2020 }. \n+00014cc0: 2020 656c 7365 0a09 7b0a 2020 2020 2020 else..{. \n+00014cd0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n+00014ce0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00014cf0: 4527 2c0a 2020 2020 2020 2020 2020 2020 E',. \n+00014d00: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+00014d10: 7374 7227 203d 3e20 5b22 696e 7661 6c69 str' => [\"invali\n+00014d20: 6420 7261 6e67 6520 696e 2070 6172 616d d range in param\n+00014d30: 203c 2464 3e2c 2065 7869 7469 6e67 225d <$d>, exiting\"]\n+00014d40: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+00014d50: 2020 2020 2020 2020 2020 2020 272d 6578 '-ex\n+00014d60: 6974 2720 3d3e 2031 293b 0a20 2020 2020 it' => 1);. \n+00014d70: 2020 207d 0a20 2020 207d 0a0a 2020 2020 }. }.. \n+00014d80: 2320 736f 7274 206e 6577 6573 7420 6261 # sort newest ba\n+00014d90: 636b 7570 2066 6972 7374 0a20 2020 2028 ckup first. (\n+00014da0: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri\n+00014db0: 6573 2920 3d20 2829 3b0a 2020 2020 6d79 es) = ();. my\n+00014dc0: 2028 256f 7468 6572 4261 636b 7570 5365 (%otherBackupSe\n+00014dd0: 7269 6573 2920 3d20 2829 3b0a 2020 2020 ries) = ();. \n+00014de0: 666f 7265 6163 6820 2464 2028 736f 7274 foreach $d (sort\n+00014df0: 207b 2024 622d 3e5b 315d 2063 6d70 2024 { $b->[1] cmp $\n+00014e00: 612d 3e5b 315d 207d 2040 6f62 6429 0a20 a->[1] } @obd). \n+00014e10: 2020 207b 0a09 6d79 2024 6264 203d 2024 {..my $bd = $\n+00014e20: 642d 3e5b 305d 202e 2022 2f22 202e 2024 d->[0] . \"/\" . $\n+00014e30: 642d 3e5b 315d 3b0a 0924 6264 203d 7e20 d->[1];..$bd =~ \n+00014e40: 732f 5c2f 2b2f 5c2f 2f67 3b0a 0969 6620 s/\\/+/\\//g;..if \n+00014e50: 282d 6420 2462 6420 616e 6420 6e6f 7420 (-d $bd and not \n+00014e60: 6578 6973 7473 2024 6f74 6865 7242 6163 exists $otherBac\n+00014e70: 6b75 7053 6572 6965 737b 2462 647d 290a kupSeries{$bd}).\n+00014e80: 097b 0a09 2020 2020 246f 7468 6572 4261 .{.. $otherBa\n+00014e90: 636b 7570 5365 7269 6573 7b24 6264 7d20 ckupSeries{$bd} \n+00014ea0: 3d20 313b 2020 2023 2064 6f20 6e6f 7420 = 1; # do not \n+00014eb0: 616c 6c6f 7720 646f 7562 6c65 2065 6e74 allow double ent\n+00014ec0: 7269 6573 0a09 2020 2020 7075 7368 2040 ries.. push @\n+00014ed0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n+00014ee0: 732c 2024 6264 3b0a 097d 0a20 2020 207d s, $bd;..}. }\n+00014ef0: 0a0a 2020 2020 2320 6669 6e64 2074 6865 .. # find the\n+00014f00: 2070 7265 7669 6f75 7320 656e 7472 7920 previous entry \n+00014f10: 6672 6f6d 2074 6865 2061 6374 7561 6c20 from the actual \n+00014f20: 6261 636b 7570 2073 6572 6965 730a 2020 backup series. \n+00014f30: 2020 2320 616e 6420 7365 7420 6974 2074 # and set it t\n+00014f40: 6f20 7468 6520 6265 6769 6e6e 696e 672c o the beginning,\n+00014f50: 2073 6f20 6974 2077 696c 6c20 6265 2070 so it will be p\n+00014f60: 7265 6665 7265 6420 666f 7220 6c69 6e6b refered for link\n+00014f70: 696e 670a 2020 2020 2320 7468 6572 6566 ing. # theref\n+00014f80: 6f72 6520 7765 206d 696e 696d 697a 6520 ore we minimize \n+00014f90: 7468 6520 6e75 6d62 6572 206f 6620 6d64 the number of md\n+00014fa0: 3520 7375 6d73 2074 6f20 6361 6c63 756c 5 sums to calcul\n+00014fb0: 6174 650a 2370 7269 6e74 2022 3120 6f74 ate.#print \"1 ot\n+00014fc0: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries \n+00014fd0: 3d20 5c6e 5c74 3c22 2c20 6a6f 696e 2822 = \\n\\t<\", join(\"\n+00014fe0: 3e5c 6e5c 743c 222c 2040 6f74 6865 7242 >\\n\\t<\", @otherB\n+00014ff0: 6163 6b75 7053 6572 6965 7329 2c20 223e ackupSeries), \">\n+00015000: 5c6e 223b 0a20 2020 2028 406f 6264 2920 \\n\";. (@obd) \n+00015010: 3d20 2829 3b0a 2020 2020 666f 7265 6163 = ();. foreac\n+00015020: 6820 2464 2028 406f 7468 6572 4261 636b h $d (@otherBack\n+00015030: 7570 5365 7269 6573 290a 2020 2020 7b0a upSeries). {.\n+00015040: 0924 6420 3d7e 206d 235c 4128 2e2a 292f .$d =~ m#\\A(.*)/\n+00015050: 233b 0a09 6966 2028 2431 2020 6571 2024 #;..if ($1 eq $\n+00015060: 7461 7267 6574 4469 720a 0920 2020 2061 targetDir.. a\n+00015070: 6e64 206e 6f74 2024 7072 6576 4261 636b nd not $prevBack\n+00015080: 7570 4f77 6e53 6572 6965 7329 0a09 7b0a upOwnSeries)..{.\n+00015090: 0920 2020 2024 7072 6576 4261 636b 7570 . $prevBackup\n+000150a0: 4f77 6e53 6572 6965 7320 3d20 2464 3b0a OwnSeries = $d;.\n+000150b0: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. \n+000150c0: 2070 7573 6820 406f 6264 2c20 2464 3b0a push @obd, $d;.\n+000150d0: 097d 0a20 2020 207d 0a20 2020 2028 406f .}. }. (@o\n+000150e0: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries\n+000150f0: 2920 3d20 2824 7072 6576 4261 636b 7570 ) = ($prevBackup\n+00015100: 4f77 6e53 6572 6965 732c 2040 6f62 6429 OwnSeries, @obd)\n+00015110: 2069 6620 2470 7265 7642 6163 6b75 704f if $prevBackupO\n+00015120: 776e 5365 7269 6573 3b0a 7d0a 2370 7269 wnSeries;.}.#pri\n+00015130: 6e74 2022 3220 6f74 6865 7242 6163 6b75 nt \"2 otherBacku\n+00015140: 7053 6572 6965 7320 3d20 5c6e 5c74 3c22 pSeries = \\n\\t<\"\n+00015150: 2c20 6a6f 696e 2822 3e5c 6e5c 743c 222c , join(\">\\n\\t<\",\n+00015160: 2040 6f74 6865 7242 6163 6b75 7053 6572 @otherBackupSer\n+00015170: 6965 7329 2c20 223e 5c6e 223b 0a0a 0a69 ies), \">\\n\";...i\n+00015180: 6620 2824 7665 7262 6f73 6520 616e 6420 f ($verbose and \n+00015190: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri\n+000151a0: 6573 290a 7b0a 2020 2020 6d79 2028 406f es).{. my (@o\n+000151b0: 6264 2920 3d20 2829 3b0a 2020 2020 6d79 bd) = ();. my\n+000151c0: 2024 6f3b 0a20 2020 2066 6f72 6561 6368 $o;. foreach\n+000151d0: 2024 6f20 2840 6f74 6865 7242 6163 6b75 $o (@otherBacku\n+000151e0: 7053 6572 6965 7329 0a20 2020 207b 0a09 pSeries). {..\n+000151f0: 7075 7368 2040 6f62 642c 2022 2020 2024 push @obd, \" $\n+00015200: 6f22 3b0a 2020 2020 7d0a 2020 2020 2470 o\";. }. $p\n+00015210: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00015220: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... \n+00015230: 272d 7374 7227 203d 3e20 5b22 6f74 6865 '-str' => [\"othe\n+00015240: 7242 6163 6b75 7053 6572 6965 7320 3d22 rBackupSeries =\"\n+00015250: 2c20 406f 6264 5d29 3b0a 7d0a 0a23 7072 , @obd]);.}..#pr\n+00015260: 696e 7420 2231 206f 7468 6572 4261 636b int \"1 otherBack\n+00015270: 7570 7344 6972 7320 3d20 406f 7468 6572 upsDirs = @other\n+00015280: 4261 636b 7570 5365 7269 6573 5c6e 223b BackupSeries\\n\";\n+00015290: 0a0a 6d79 2024 616c 6c4c 696e 6b73 203d ..my $allLinks =\n+000152a0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new(\n+000152b0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac\n+000152c0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... \n+000152d0: 2020 272d 6b69 6e64 2720 3d3e 2027 7265 '-kind' => 're\n+000152e0: 6375 7273 6976 6553 6561 7263 6827 2c0a cursiveSearch',.\n+000152f0: 0909 0920 2020 2020 2027 2d76 6572 626f ... '-verbo\n+00015300: 7365 2720 3d3e 2024 7665 7262 6f73 652c se' => $verbose,\n+00015310: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+00015320: 6727 203d 3e20 2470 724c 6f67 293b 0a23 g' => $prLog);.#\n+00015330: 7072 696e 7420 2232 206f 7468 6572 4261 print \"2 otherBa\n+00015340: 636b 7570 7344 6972 7320 3d20 406f 7468 ckupsDirs = @oth\n+00015350: 6572 4261 636b 7570 5365 7269 6573 5c6e erBackupSeries\\n\n+00015360: 223b 0a75 6e6c 6573 7320 2824 6c61 7465 \";.unless ($late\n+00015370: 4c69 6e6b 7329 0a7b 0a20 2020 2023 2063 Links).{. # c\n+00015380: 6865 636b 2c20 6966 2064 6972 6563 746f heck, if directo\n+00015390: 7269 6573 2077 6974 6820 6c61 7465 4c69 ries with lateLi\n+000153a0: 6e6b 7320 6172 6520 7265 6665 7265 6e63 nks are referenc\n+000153b0: 6564 2062 7920 6f74 6865 7242 6163 6b75 ed by otherBacku\n+000153c0: 7053 6572 6965 730a 2020 2020 6d79 2024 pSeries. my $\n+000153d0: 6f62 643b 0a20 2020 2066 6f72 6561 6368 obd;. foreach\n+000153e0: 2024 6f62 6420 2840 6f74 6865 7242 6163 $obd (@otherBac\n+000153f0: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). {\n+00015400: 0a23 7072 696e 7420 2263 6865 636b 696e .#print \"checkin\n+00015410: 6720 6f74 6865 7242 6163 6b75 6b70 4469 g otherBackukpDi\n+00015420: 7273 3a5c 6e22 3b0a 0924 7072 4c6f 672d rs:\\n\";..$prLog-\n+00015430: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00015440: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n+00015450: 2d73 7472 2720 3d3e 205b 2264 6972 6563 -str' => [\"direc\n+00015460: 746f 7279 203c 246f 6264 3e20 6861 7320 tory <$obd> has \n+00015470: 756e 7265 736f 6c76 6564 2022 202e 0a09 unresolved \" ...\n+00015480: 0909 0920 226c 696e 6b73 2028 6279 2070 ... \"links (by p\n+00015490: 6172 6d20 2d2d 6c61 7465 4c69 6e6b 7329 arm --lateLinks)\n+000154a0: 222c 0a09 0920 2020 2020 2020 2020 2020 \",... \n+000154b0: 2020 2020 2020 2273 7461 7274 203a 3a24 \"start ::$\n+000154c0: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat\n+000154d0: 6542 6163 6b75 705f 7072 6720 2220 2e0a eBackup_prg \" ..\n+000154e0: 0909 0909 2022 746f 2073 6574 206c 696e .... \"to set lin\n+000154f0: 6b73 222c 0a09 0920 2020 2020 2020 2020 ks\",... \n+00015500: 2020 2020 2020 2020 226f 7220 7374 6172 \"or star\n+00015510: 7420 7374 6f72 6542 6163 6b75 702e 706c t storeBackup.pl\n+00015520: 2077 6974 6820 2d2d 6c61 7465 4c69 6e6b with --lateLink\n+00015530: 7320 616e 6420 2220 2e0a 0909 0909 2022 s and \" ...... \"\n+00015540: 7265 736f 6c76 6520 6c61 7465 7222 5d2c resolve later\"],\n+00015550: 0a09 0920 2020 2020 2027 2d65 7869 7427 ... '-exit'\n+00015560: 203d 3e20 3129 0a09 2020 2020 6966 2024 => 1).. if $\n+00015570: 616c 6c4c 696e 6b73 2d3e 6368 6563 6b44 allLinks->checkD\n+00015580: 6972 2824 6f62 6429 3b0a 2020 2020 7d0a ir($obd);. }.\n+00015590: 7d0a 0a6d 7920 2461 6b74 4461 7465 203d }..my $aktDate =\n+000155a0: 2064 6174 6554 6f6f 6c73 2d3e 6e65 7728 dateTools->new(\n+000155b0: 293b 0a69 6620 2824 746f 6461 794f 7074 );.if ($todayOpt\n+000155c0: 290a 7b0a 2020 2020 6966 2028 2474 6f64 ).{. if ($tod\n+000155d0: 6179 4f70 7420 3d7e 202f 5c41 285c 647b ayOpt =~ /\\A(\\d{\n+000155e0: 347d 295c 2e28 5c64 7b32 7d29 5c2e 285c 4})\\.(\\d{2})\\.(\\\n+000155f0: 647b 327d 295f 285c 647b 327d 292e 285c d{2})_(\\d{2}).(\\\n+00015600: 647b 327d 292e 285c 647b 327d 295c 5a2f d{2}).(\\d{2})\\Z/\n+00015610: 290a 2020 2020 7b0a 0924 616b 7444 6174 ). {..$aktDat\n+00015620: 6520 3d20 6461 7465 546f 6f6c 732d 3e6e e = dateTools->n\n+00015630: 6577 2827 2d79 6561 7227 203d 3e20 2431 ew('-year' => $1\n+00015640: 2c0a 0909 0909 2020 272d 6d6f 6e74 6827 ,..... '-month'\n+00015650: 203d 3e20 2432 2c0a 0909 0909 2020 272d => $2,..... '-\n+00015660: 6461 7927 203d 3e20 2433 2c0a 0909 0909 day' => $3,.....\n+00015670: 2020 272d 686f 7572 2720 3d3e 2024 342c '-hour' => $4,\n+00015680: 0a09 0909 0920 2027 2d6d 696e 2720 3d3e ..... '-min' =>\n+00015690: 2024 352c 0a09 0909 0920 2027 2d73 6563 $5,..... '-sec\n+000156a0: 2720 3d3e 2024 3629 3b0a 0924 7072 4c6f ' => $6);..$prLo\n+000156b0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000156c0: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n+000156d0: 2027 2d73 7472 2720 3d3e 0a09 0920 2020 '-str' =>... \n+000156e0: 2020 205b 2224 746f 6461 794f 7074 2028 [\"$todayOpt (\n+000156f0: 6f70 7469 6f6e 2074 6f64 6179 2920 6973 option today) is\n+00015700: 206e 6f74 2061 2076 616c 6964 2064 6174 not a valid dat\n+00015710: 6522 5d2c 0a09 0920 2020 2020 2027 2d65 e\"],... '-e\n+00015720: 7869 7427 203d 3e20 3129 0a09 2020 2020 xit' => 1).. \n+00015730: 756e 6c65 7373 2024 616b 7444 6174 652d unless $aktDate-\n+00015740: 3e69 7356 616c 6964 2829 3b0a 0924 7072 >isValid();..$pr\n+00015750: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00015760: 6427 203d 3e20 2757 272c 0a09 0920 2020 d' => 'W',... \n+00015770: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => [\"s\n+00015780: 6574 7469 6e67 2074 6f64 6179 2074 6f20 etting today to \n+00015790: 2220 2e0a 0909 0909 2024 616b 7444 6174 \" ...... $aktDat\n+000157a0: 652d 3e67 6574 4461 7465 5469 6d65 2829 e->getDateTime()\n+000157b0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el\n+000157c0: 7365 0a20 2020 207b 0a09 2470 724c 6f67 se. {..$prLog\n+000157d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000157e0: 3d3e 2027 4527 2c0a 0909 2020 2020 2020 => 'E',... \n+000157f0: 272d 7374 7227 203d 3e20 5b22 666f 726d '-str' => [\"form\n+00015800: 6174 2065 7272 6f72 2061 7420 6f70 7469 at error at opti\n+00015810: 6f6e 2074 6f64 6179 2c20 6d75 7374 2062 on today, must b\n+00015820: 6522 2c0a 0909 0909 2022 2020 5959 5959 e\",..... \" YYYY\n+00015830: 2e4d 4d2e 4444 5f48 482e 4d4d 2e53 5322 .MM.DD_HH.MM.SS\"\n+00015840: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi\n+00015850: 7427 203d 3e20 3129 3b0a 2020 2020 7d0a t' => 1);. }.\n+00015860: 7d0a 0a24 6d61 696e 3a3a 7374 6174 203d }..$main::stat =\n+00015870: 2053 7461 7469 7374 6963 2d3e 6e65 7728 Statistic->new(\n+00015880: 272d 7374 6172 7444 6174 6527 203d 3e0a '-startDate' =>.\n+00015890: 0909 0920 2020 2020 2470 7265 636f 6d6d ... $precomm\n+000158a0: 616e 6420 3f20 2473 7461 7274 4461 7465 and ? $startDate\n+000158b0: 203a 2075 6e64 6566 2c0a 0909 0920 2020 : undef,.... \n+000158c0: 2020 272d 616b 7444 6174 6527 203d 3e20 '-aktDate' => \n+000158d0: 2461 6b74 4461 7465 2c0a 0909 0920 2020 $aktDate,.... \n+000158e0: 2020 272d 7573 6572 4772 6f75 7053 7461 '-userGroupSta\n+000158f0: 7446 696c 6527 203d 3e20 2475 7365 7247 tFile' => $userG\n+00015900: 726f 7570 5374 6174 4669 6c65 2c0a 0909 roupStatFile,...\n+00015910: 0920 2020 2020 272d 6578 6365 7074 5375 . '-exceptSu\n+00015920: 6666 6978 2720 3d3e 2024 6578 6365 7074 ffix' => $except\n+00015930: 5375 6666 6978 2c0a 0909 0920 2020 2020 Suffix,.... \n+00015940: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+00015950: 6f67 2c0a 0909 0920 2020 2020 272d 7072 og,.... '-pr\n+00015960: 6f67 7265 7373 5265 706f 7274 2720 3d3e ogressReport' =>\n+00015970: 2024 7072 6f67 7265 7373 5265 706f 7274 $progressReport\n+00015980: 2c0a 0909 0920 2020 2020 272d 7769 7468 ,.... '-with\n+00015990: 5573 6572 4772 6f75 7053 7461 7427 203d UserGroupStat' =\n+000159a0: 3e20 2477 6974 6855 7365 7247 726f 7570 > $withUserGroup\n+000159b0: 5374 6174 2c0a 0909 0920 2020 2020 272d Stat,.... '-\n+000159c0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil\n+000159d0: 6527 203d 3e20 2475 7365 7247 726f 7570 e' => $userGroup\n+000159e0: 5374 6174 4669 6c65 2c0a 0909 0920 2020 StatFile,.... \n+000159f0: 2020 272d 636f 6d70 7265 7373 2720 3d3e '-compress' =>\n+00015a00: 2024 636f 6d70 7265 7373 293b 0a0a 0a23 $compress);...#\n+00015a10: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all \n+00015a20: 6578 636c 7564 6544 6972 7320 616e 6420 excludeDirs and \n+00015a30: 696e 636c 7564 6544 6972 7320 6172 6520 includeDirs are \n+00015a40: 7265 6c61 7469 7665 2050 6174 6873 0a23 relative Paths.#\n+00015a50: 0a7b 0a20 2020 206d 7920 2465 7272 6f72 .{. my $error\n+00015a60: 203d 2030 3b0a 2020 2020 6d79 2024 643b = 0;. my $d;\n+00015a70: 0a20 2020 2066 6f72 6561 6368 2024 6420 . foreach $d \n+00015a80: 2840 2465 7863 6570 7444 6972 7329 0a20 (@$exceptDirs). \n+00015a90: 2020 207b 0a09 6966 2028 2464 203d 7e20 {..if ($d =~ \n+00015aa0: 2f5c 415c 2f2f 6f29 0a09 7b0a 0920 2020 /\\A\\//o)..{.. \n+00015ab0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00015ac0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00015ad0: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n+00015ae0: 0920 205b 2265 7863 6570 7444 6972 203c . [\"exceptDir <\n+00015af0: 2464 3e20 6973 206e 6f74 2061 2072 656c $d> is not a rel\n+00015b00: 6174 6976 6520 7061 7468 2122 5d29 3b0a ative path!\"]);.\n+00015b10: 0920 2020 2024 6572 726f 7220 3d20 313b . $error = 1;\n+00015b20: 0a09 7d0a 2020 2020 7d0a 2020 2020 666f ..}. }. fo\n+00015b30: 7265 6163 6820 2464 2028 4024 696e 636c reach $d (@$incl\n+00015b40: 7564 6544 6972 7329 0a20 2020 207b 0a09 udeDirs). {..\n+00015b50: 6966 2028 2464 203d 7e20 2f5c 415c 2f2f if ($d =~ /\\A\\//\n+00015b60: 6f29 0a09 7b0a 0920 2020 2024 7072 4c6f o)..{.. $prLo\n+00015b70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00015b80: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+00015b90: 7374 7227 203d 3e0a 0909 0920 205b 2269 str' =>.... [\"i\n+00015ba0: 6e63 6c75 6465 4469 7220 3c24 643e 2069 ncludeDir <$d> i\n+00015bb0: 7320 6e6f 7420 6120 7265 6c61 7469 7665 s not a relative\n+00015bc0: 2070 6174 6821 225d 293b 0a09 2020 2020 path!\"]);.. \n+00015bd0: 2465 7272 6f72 203d 2031 3b0a 097d 0a20 $error = 1;..}. \n+00015be0: 2020 207d 0a20 2020 2024 7072 4c6f 672d }. $prLog-\n+00015bf0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00015c00: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n+00015c10: 2720 3d3e 205b 2265 7869 7469 6e67 225d ' => [\"exiting\"]\n+00015c20: 2c0a 0909 2020 272d 6578 6974 2720 3d3e ,... '-exit' =>\n+00015c30: 2031 290a 0969 6620 2465 7272 6f72 3b0a 1)..if $error;.\n+00015c40: 7d0a 0a23 0a23 2065 7863 6570 7469 6f6e }..#.# exception\n+00015c50: 2d20 756e 6420 696e 636c 7564 652d 204c - und include- L\n+00015c60: 6973 7465 20c3 bc62 6572 7072 c3bc 6665 iste ..berpr..fe\n+00015c70: 6e20 756e 6420 6576 616c 7569 6572 656e n und evaluieren\n+00015c80: 0a23 202b 2063 6865 636b 426c 6f63 6b73 .# + checkBlocks\n+00015c90: 5275 6c65 200a 230a 6d79 2028 4065 7863 Rule .#.my (@exc\n+00015ca0: 6570 7444 6972 7329 203d 2026 6576 616c eptDirs) = &eval\n+00015cb0: 4578 6365 7074 696f 6e4c 6973 7428 2465 ExceptionList($e\n+00015cc0: 7863 6570 7444 6972 732c 2024 736f 7572 xceptDirs, $sour\n+00015cd0: 6365 4469 722c 0a09 0909 0920 2020 2765 ceDir,..... 'e\n+00015ce0: 7863 6570 7444 6972 272c 2027 6578 636c xceptDir', 'excl\n+00015cf0: 7564 696e 6727 2c20 2470 724c 6f67 293b uding', $prLog);\n+00015d00: 0a6d 7920 2840 696e 636c 7564 6544 6972 .my (@includeDir\n+00015d10: 7329 203d 2026 6576 616c 4578 6365 7074 s) = &evalExcept\n+00015d20: 696f 6e4c 6973 7428 2469 6e63 6c75 6465 ionList($include\n+00015d30: 4469 7273 2c20 2473 6f75 7263 6544 6972 Dirs, $sourceDir\n+00015d40: 2c0a 0909 0909 2020 2020 2769 6e63 6c75 ,..... 'inclu\n+00015d50: 6465 4469 7227 2c20 2769 6e63 6c75 6469 deDir', 'includi\n+00015d60: 6e67 272c 2024 7072 4c6f 6729 3b0a 2470 ng', $prLog);.$p\n+00015d70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00015d80: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. \n+00015d90: 2020 2027 2d73 7472 2720 3d3e 205b 2265 '-str' => [\"e\n+00015da0: 7863 6570 7452 756c 6520 3d20 2220 2e20 xceptRule = \" . \n+00015db0: 2465 7863 5275 6c65 2d3e 6765 744c 696e $excRule->getLin\n+00015dc0: 6553 7472 696e 6728 295d 290a 2020 2020 eString()]). \n+00015dd0: 6966 2024 6578 6365 7074 5275 6c65 3b0a if $exceptRule;.\n+00015de0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00015df0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. \n+00015e00: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00015e10: 2269 6e63 6c75 6465 5275 6c65 203d 2022 \"includeRule = \"\n+00015e20: 202e 2024 696e 6352 756c 652d 3e67 6574 . $incRule->get\n+00015e30: 4c69 6e65 5374 7269 6e67 2829 5d29 0a20 LineString()]). \n+00015e40: 2020 2069 6620 2469 6e63 6c75 6465 5275 if $includeRu\n+00015e50: 6c65 3b0a 2470 724c 6f67 2d3e 7072 696e le;.$prLog->prin\n+00015e60: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n+00015e70: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n+00015e80: 3d3e 205b 2263 6865 636b 426c 6f63 6b73 => [\"checkBlocks\n+00015e90: 5275 6c65 203d 203c 220a 0909 0920 2e20 Rule = <\".... . \n+00015ea0: 2463 6862 5275 6c65 2d3e 6765 744c 696e $chbRule->getLin\n+00015eb0: 6553 7472 696e 6728 2920 2e20 223e 225d eString() . \">\"]\n+00015ec0: 290a 2020 2020 6966 2024 6368 6252 756c ). if $chbRul\n+00015ed0: 652d 3e68 6173 4c69 6e65 2829 3b0a 7b0a e->hasLine();.{.\n+00015ee0: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f\n+00015ef0: 6f72 6561 6368 2024 6920 2830 2e2e 4063 oreach $i (0..@c\n+00015f00: 6865 636b 4465 7669 6365 732d 3129 0a20 heckDevices-1). \n+00015f10: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr\n+00015f20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00015f30: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st\n+00015f40: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [\"\n+00015f50: 7361 7669 6e67 2064 6576 6963 6573 203c saving devices <\n+00015f60: 2220 2e20 2463 6865 636b 4465 7669 6365 \" . $checkDevice\n+00015f70: 735b 2469 5d20 2e20 223e 202d 3e20 2220 s[$i] . \"> -> \" \n+00015f80: 2e0a 0909 2020 2020 2020 2024 6368 6563 .... $chec\n+00015f90: 6b44 6576 6963 6573 4469 725b 2469 5d20 kDevicesDir[$i] \n+00015fa0: 2e20 2220 2862 6c6f 636b 2073 697a 6520 . \" (block size \n+00015fb0: 3d20 2220 2e0a 0909 2020 2020 2020 2024 = \" .... $\n+00015fc0: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$\n+00015fd0: 695d 202e 2022 2c20 2220 2e0a 0909 2020 i] . \", \" .... \n+00015fe0: 2020 2020 2028 2463 6865 636b 4465 7669 ($checkDevi\n+00015ff0: 6365 7343 6f6d 7072 5b24 695d 203f 2027 cesCompr[$i] ? '\n+00016000: 2720 3a20 276e 6f20 2729 202e 0a09 0920 ' : 'no ') .... \n+00016010: 2020 2020 2027 636f 6d70 7265 7373 696f 'compressio\n+00016020: 6e29 275d 293b 0a20 2020 207d 0a7d 0a0a n)']);. }.}..\n+00016030: 0a23 0a23 20c3 bc62 6572 7072 c3bc 6665 .#.# ..berpr..fe\n+00016040: 6e2c 206f 6220 4261 636b 7570 2054 6172 n, ob Backup Tar\n+00016050: 6765 7420 696d 2042 6163 6b75 7020 536f get im Backup So\n+00016060: 7572 6365 2054 7265 6520 6c69 6567 740a urce Tree liegt.\n+00016070: 230a 6d79 2024 7461 7267 6574 496e 536f #.my $targetInSo\n+00016080: 7572 6365 203d 2030 3b0a 6966 2028 263a urce = 0;.if (&:\n+00016090: 3a69 7353 7562 4469 7228 2473 6f75 7263 :isSubDir($sourc\n+000160a0: 6544 6972 2c20 2474 6172 6765 7444 6972 eDir, $targetDir\n+000160b0: 2929 2020 2020 2320 6c69 6567 7420 6472 )) # liegt dr\n+000160c0: 696e 210a 7b0a 2020 2020 2474 6172 6765 in!.{. $targe\n+000160d0: 7449 6e53 6f75 7263 6520 3d20 313b 2020 tInSource = 1; \n+000160e0: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+000160f0: 2041 6e6e 6168 6d65 3a20 6573 2067 6962 Annahme: es gib\n+00016100: 7420 6b65 696e 6520 4175 736e 6168 6d65 t keine Ausnahme\n+00016110: 0a20 2020 2069 6620 2840 6578 6365 7074 . if (@except\n+00016120: 4469 7273 203e 2030 2920 2020 2020 2020 Dirs > 0) \n+00016130: 2020 2020 2020 2020 2020 2320 7465 7374 # test\n+00016140: 656e 2c20 6f62 2076 6965 6c6c 6569 6368 en, ob vielleich\n+00016150: 7420 696d 2076 6f6d 0a20 2020 207b 2020 t im vom. { \n+00016160: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00016170: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00016180: 2020 2320 4261 636b 7570 2061 7573 6765 # Backup ausge\n+00016190: 6e6f 6d6d 656e 656e 2054 7265 650a 096d nommenen Tree..m\n+000161a0: 7920 2465 3b0a 0966 6f72 6561 6368 2024 y $e;..foreach $\n+000161b0: 6520 2840 6578 6365 7074 4469 7273 290a e (@exceptDirs).\n+000161c0: 097b 0a09 2020 2020 6966 2028 263a 3a69 .{.. if (&::i\n+000161d0: 7353 7562 4469 7228 2465 2c20 2474 6172 sSubDir($e, $tar\n+000161e0: 6765 7444 6972 2929 0a09 2020 2020 7b0a getDir)).. {.\n+000161f0: 0909 2474 6172 6765 7449 6e53 6f75 7263 ..$targetInSourc\n+00016200: 6520 3d20 303b 2020 2020 2023 2064 6f63 e = 0; # doc\n+00016210: 6820 4175 736e 6168 6d65 2067 6566 756e h Ausnahme gefun\n+00016220: 6465 6e0a 0909 2470 724c 6f67 2d3e 7072 den...$prLog->pr\n+00016230: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00016240: 4927 2c0a 0909 0920 2020 2020 2027 2d73 I',.... '-s\n+00016250: 7472 2720 3d3e 0a09 0909 2020 2020 2020 tr' =>.... \n+00016260: 5b22 7461 7267 6574 2064 6972 6563 746f [\"target directo\n+00016270: 7279 203c 2474 6172 6765 7444 6972 3e20 ry <$targetDir> \n+00016280: 6973 2069 6e20 2220 2e0a 0909 0920 2020 is in \" ..... \n+00016290: 2020 2020 2265 7863 6570 7469 6f6e 203c \"exception <\n+000162a0: 2465 3e20 6f66 2073 6f75 7263 6520 6469 $e> of source di\n+000162b0: 7265 6374 6f72 7920 2220 2e0a 0909 0920 rectory \" ..... \n+000162c0: 2020 2020 2020 223c 2473 6f75 7263 6544 \"<$sourceD\n+000162d0: 6972 3e2c 206f 6b22 5d29 3b0a 0909 6c61 ir>, ok\"]);...la\n+000162e0: 7374 3b0a 0920 2020 207d 0a09 7d0a 2020 st;.. }..}. \n+000162f0: 2020 7d0a 2020 2020 6966 2028 2474 6172 }. if ($tar\n+00016300: 6765 7449 6e53 6f75 7263 6520 3d3d 2031 getInSource == 1\n+00016310: 2061 6e64 0a09 4069 6e63 6c75 6465 4469 and..@includeDi\n+00016320: 7273 203e 2030 2920 2020 2020 2020 2020 rs > 0) \n+00016330: 2020 2023 2063 6865 636b 2c20 6966 206e # check, if n\n+00016340: 6f74 2069 6e20 696e 636c 7564 6520 7061 ot in include pa\n+00016350: 7468 730a 2020 2020 7b0a 096d 7920 2469 ths. {..my $i\n+00016360: 3b0a 096d 7920 2474 6172 6765 7449 6e53 ;..my $targetInS\n+00016370: 6f75 7263 6520 3d20 303b 2020 2020 2020 ource = 0; \n+00016380: 2320 6173 7375 6d70 7469 6f6e 3a20 7461 # assumption: ta\n+00016390: 7267 6574 2069 7320 6e6f 7420 696e 2073 rget is not in s\n+000163a0: 6f75 7263 650a 0966 6f72 6561 6368 2024 ource..foreach $\n+000163b0: 6920 2840 696e 636c 7564 6544 6972 7329 i (@includeDirs)\n+000163c0: 0a09 7b0a 0920 2020 2069 6620 2826 3a3a ..{.. if (&::\n+000163d0: 6973 5375 6244 6972 2824 692c 2024 7461 isSubDir($i, $ta\n+000163e0: 7267 6574 4469 7229 290a 0920 2020 207b rgetDir)).. {\n+000163f0: 0a09 0924 7461 7267 6574 496e 536f 7572 ...$targetInSour\n+00016400: 6365 203d 2031 3b0a 0909 6c61 7374 3b0a ce = 1;...last;.\n+00016410: 0920 2020 207d 0a09 7d0a 2020 2020 7d0a . }..}. }.\n+00016420: 7d0a 2470 724c 6f67 2d3e 7072 696e 7428 }.$prLog->print(\n+00016430: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00016440: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00016450: 0a09 2020 2020 2020 5b22 7461 7267 6574 .. [\"target\n+00016460: 2064 6972 6563 746f 7279 203c 2474 6172 directory <$tar\n+00016470: 6765 7444 6972 3e20 6361 6e6e 6f74 2062 getDir> cannot b\n+00016480: 6520 7061 7274 206f 6620 7468 6520 2220 e part of the \" \n+00016490: 2e0a 0920 2020 2020 2020 2273 6f75 7263 ... \"sourc\n+000164a0: 6520 6469 7265 6374 6f72 7920 3c24 736f e directory <$so\n+000164b0: 7572 6365 4469 723e 222c 0a09 2020 2020 urceDir>\",.. \n+000164c0: 2020 2022 6465 6669 6e65 2061 6e20 6578 \"define an ex\n+000164d0: 6365 7074 696f 6e20 7769 7468 202d 2d65 ception with --e\n+000164e0: 7863 6570 7444 6972 7320 6f72 2063 686f xceptDirs or cho\n+000164f0: 6f73 6520 616e 6f74 6865 7220 2220 2e0a ose another \" ..\n+00016500: 0920 2020 2020 2020 2274 6172 6765 7420 . \"target \n+00016510: 6469 7265 6374 6f72 7922 5d2c 0a09 2020 directory\"],.. \n+00016520: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n+00016530: 290a 2020 2020 6966 2028 2474 6172 6765 ). if ($targe\n+00016540: 7449 6e53 6f75 7263 6529 3b0a 0a23 0a23 tInSource);..#.#\n+00016550: 2063 6865 636b 2069 6620 616c 6c20 6578 check if all ex\n+00016560: 6365 7074 4469 7273 2061 7265 2073 7562 ceptDirs are sub\n+00016570: 6469 7265 6374 6f72 6965 7320 6f66 2069 directories of i\n+00016580: 6e63 6c75 6465 4469 7273 206f 720a 2320 ncludeDirs or.# \n+00016590: 6765 6e65 7261 7465 2061 2077 6172 6e69 generate a warni\n+000165a0: 6e67 0a23 0a69 6620 2840 6578 6365 7074 ng.#.if (@except\n+000165b0: 4469 7273 2061 6e64 2040 696e 636c 7564 Dirs and @includ\n+000165c0: 6544 6972 7320 616e 6420 6e6f 7420 6578 eDirs and not ex\n+000165d0: 6973 7473 2024 7375 7070 7265 7373 5761 ists $suppressWa\n+000165e0: 726e 696e 677b 2765 7863 4469 7227 7d29 rning{'excDir'})\n+000165f0: 0a7b 0a20 2020 206d 7920 2465 3b0a 2020 .{. my $e;. \n+00016600: 2020 666f 7265 6163 6820 2465 2028 4065 foreach $e (@e\n+00016610: 7863 6570 7444 6972 7329 0a20 2020 207b xceptDirs). {\n+00016620: 0a09 6d79 2024 693b 0a09 6d79 2024 6973 ..my $i;..my $is\n+00016630: 496e 203d 2030 3b0a 0966 6f72 6561 6368 In = 0;..foreach\n+00016640: 2024 6920 2840 696e 636c 7564 6544 6972 $i (@includeDir\n+00016650: 7329 0a09 7b0a 0920 2020 2069 6620 2826 s)..{.. if (&\n+00016660: 3a3a 6973 5375 6244 6972 2824 692c 2024 ::isSubDir($i, $\n+00016670: 6529 290a 0920 2020 207b 0a09 0924 6973 e)).. {...$is\n+00016680: 496e 203d 2031 3b0a 0909 6c61 7374 3b0a In = 1;...last;.\n+00016690: 0920 2020 207d 0a09 7d0a 0924 7072 4c6f . }..}..$prLo\n+000166a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000166b0: 203d 3e20 2757 272c 0a09 0920 2020 2020 => 'W',... \n+000166c0: 2027 2d73 7472 2720 3d3e 205b 2265 7863 '-str' => [\"exc\n+000166d0: 6570 7420 6469 7220 3c24 653e 2069 7320 ept dir <$e> is \n+000166e0: 6e6f 7420 7061 7274 206f 6620 7468 6520 not part of the \n+000166f0: 6261 636b 7570 225d 290a 0920 2020 2075 backup\"]).. u\n+00016700: 6e6c 6573 7320 2469 7349 6e3b 0a20 2020 nless $isIn;. \n+00016710: 207d 0a7d 0a0a 230a 2320 6c6f 636b 2066 }.}..#.# lock f\n+00016720: 696c 6520 c3bc 6265 7270 72c3 bc66 656e ile ..berpr..fen\n+00016730: 0a23 0a3a 3a63 6865 636b 4c6f 636b 4669 .#.::checkLockFi\n+00016740: 6c65 2824 6c6f 636b 4669 6c65 2c20 2470 le($lockFile, $p\n+00016750: 724c 6f67 293b 0a0a 2320 7072 6570 6172 rLog);..# prepar\n+00016760: 6520 6578 6365 7074 5479 7065 730a 6d79 e exceptTypes.my\n+00016770: 2028 2565 7854 7970 6573 2c20 2465 7429 (%exTypes, $et)\n+00016780: 3b0a 666f 7265 6163 6820 2465 7420 2873 ;.foreach $et (s\n+00016790: 706c 6974 282f 2f2c 2024 6578 6365 7074 plit(//, $except\n+000167a0: 5479 7065 7320 7c7c 2022 2229 290a 7b0a Types || \"\")).{.\n+000167b0: 2020 2020 2465 7854 7970 6573 7b24 6574 $exTypes{$et\n+000167c0: 7d20 3d20 303b 2020 2020 2020 2020 2023 } = 0; #\n+000167d0: 2074 6869 7320 6973 2061 2066 6c61 6720 this is a flag \n+000167e0: 616e 6420 616e 6420 616c 736f 2061 2063 and and also a c\n+000167f0: 6f75 6e74 6572 0a7d 0a0a 230a 2320 7072 ounter.}..#.# pr\n+00016800: 6563 6f6d 6d61 6e64 2061 7573 66c3 bc68 ecommand ausf..h\n+00016810: 7265 6e0a 230a 6966 2028 6465 6669 6e65 ren.#.if (define\n+00016820: 6420 2470 7265 636f 6d6d 616e 6429 0a7b d $precommand).{\n+00016830: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00016840: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00016850: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00016860: 205b 2273 7461 7274 696e 6720 7072 6520 [\"starting pre \n+00016870: 636f 6d6d 616e 6420 3c40 2470 7265 636f command <@$preco\n+00016880: 6d6d 616e 643e 202e 2e2e 225d 293b 0a20 mmand> ...\"]);. \n+00016890: 2020 206d 7920 2824 7072 6543 6f6d 6d2c my ($preComm,\n+000168a0: 2040 7072 6550 6172 616d 2920 3d20 2840 @preParam) = (@\n+000168b0: 2470 7265 636f 6d6d 616e 6429 3b0a 2020 $precommand);. \n+000168c0: 2020 6d79 2024 7072 6563 6f20 3d20 666f my $preco = fo\n+000168d0: 726b 5072 6f63 2d3e 6e65 7728 272d 6578 rkProc->new('-ex\n+000168e0: 6563 2720 3d3e 2024 7072 6543 6f6d 6d2c ec' => $preComm,\n+000168f0: 0a09 0909 2020 2020 2020 272d 7061 7261 .... '-para\n+00016900: 6d27 203d 3e20 5c40 7072 6550 6172 616d m' => \\@preParam\n+00016910: 2c0a 0909 0920 2020 2020 2027 2d77 6f72 ,.... '-wor\n+00016920: 6b69 6e67 4469 7227 203d 3e20 272e 272c kingDir' => '.',\n+00016930: 0a09 0909 2020 2020 2020 272d 6f75 7452 .... '-outR\n+00016940: 616e 646f 6d27 203d 3e20 2224 746d 7064 andom' => \"$tmpd\n+00016950: 6972 2f70 7265 636f 6d6d 2d22 2c0a 0909 ir/precomm-\",...\n+00016960: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n+00016970: 3d3e 2024 7072 4c6f 6729 3b0a 2020 2020 => $prLog);. \n+00016980: 2470 7265 636f 2d3e 7761 6974 2829 3b0a $preco->wait();.\n+00016990: 2020 2020 6d79 2024 6f75 7420 3d20 2470 my $out = $p\n+000169a0: 7265 636f 2d3e 6765 7453 5444 4f55 5428 reco->getSTDOUT(\n+000169b0: 293b 0a20 2020 2024 7072 4c6f 672d 3e70 );. $prLog->p\n+000169c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+000169d0: 2757 272c 0a09 0920 2027 2d73 7472 2720 'W',... '-str' \n+000169e0: 3d3e 205b 2253 5444 4f55 5420 6f66 203c => [\"STDOUT of <\n+000169f0: 4024 7072 6563 6f6d 6d61 6e64 3e3a 222c @$precommand>:\",\n+00016a00: 2040 246f 7574 5d29 0a09 6966 2028 4024 @$out])..if (@$\n+00016a10: 6f75 7420 3e20 3029 3b0a 2020 2020 246f out > 0);. $o\n+00016a20: 7574 203d 2024 7072 6563 6f2d 3e67 6574 ut = $preco->get\n+00016a30: 5354 4445 5252 2829 3b0a 2020 2020 2470 STDERR();. $p\n+00016a40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00016a50: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n+00016a60: 272d 7374 7227 203d 3e20 5b22 5354 4445 '-str' => [\"STDE\n+00016a70: 5252 206f 6620 3c40 2470 7265 636f 6d6d RR of <@$precomm\n+00016a80: 616e 643e 3a22 2c20 4024 6f75 745d 290a and>:\", @$out]).\n+00016a90: 0969 6620 2840 246f 7574 203e 2030 293b .if (@$out > 0);\n+00016aa0: 0a0a 2020 2020 6d79 2024 7374 6174 7573 .. my $status\n+00016ab0: 203d 2024 7072 6563 6f2d 3e67 6574 2827 = $preco->get('\n+00016ac0: 2d77 6861 7427 203d 3e20 2773 7461 7475 -what' => 'statu\n+00016ad0: 7327 293b 0a20 2020 2069 6620 2824 7374 s');. if ($st\n+00016ae0: 6174 7573 203d 3d20 3029 0a20 2020 207b atus == 0). {\n+00016af0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00016b00: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+00016b10: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00016b20: 3e0a 0909 2020 2020 2020 5b22 7072 6520 >... [\"pre \n+00016b30: 636f 6d6d 616e 6420 3c40 2470 7265 636f command <@$preco\n+00016b40: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished \n+00016b50: 7769 7468 2073 7461 7475 7320 3022 5d29 with status 0\"])\n+00016b60: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00016b70: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n+00016b80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00016b90: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+00016ba0: 7374 7227 203d 3e20 5b22 7072 6520 636f str' => [\"pre co\n+00016bb0: 6d6d 616e 6420 3c40 2470 7265 636f 6d6d mmand <@$precomm\n+00016bc0: 616e 643e 2066 696e 6973 6865 6420 7769 and> finished wi\n+00016bd0: 7468 2022 202e 0a09 0909 0920 2273 7461 th \" ...... \"sta\n+00016be0: 7475 7320 2473 7461 7475 732c 2065 7869 tus $status, exi\n+00016bf0: 7469 6e67 225d 293b 0a09 756e 6c69 6e6b ting\"]);..unlink\n+00016c00: 2024 6c6f 636b 4669 6c65 2069 6620 246c $lockFile if $l\n+00016c10: 6f63 6b46 696c 653b 0a09 6578 6974 2031 ockFile;..exit 1\n+00016c20: 3b0a 2020 2020 7d0a 7d0a 0a0a 230a 2320 ;. }.}...#.# \n+00016c30: 4572 7a65 7567 656e 2064 6572 2062 656e Erzeugen der ben\n+00016c40: c3b6 7469 6774 656e 204f 626a 656b 7465 ..tigten Objekte\n+00016c50: 0a23 0a6d 7920 2461 646d 696e 4469 7273 .#.my $adminDirs\n+00016c60: 203d 2061 646d 696e 4469 7265 6374 6f72 = adminDirector\n+00016c70: 6965 732d 3e6e 6577 2827 2d74 6172 6765 ies->new('-targe\n+00016c80: 7444 6972 2720 3d3e 2024 7461 7267 6574 tDir' => $target\n+00016c90: 4469 722c 0a09 0909 0920 2020 2020 2027 Dir,..... '\n+00016ca0: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' =\n+00016cb0: 3e20 2463 6865 636b 5375 6d46 696c 652c > $checkSumFile,\n+00016cc0: 0a09 0909 0920 2020 2020 2027 2d74 6d70 ..... '-tmp\n+00016cd0: 6469 7227 203d 3e20 2474 6d70 6469 722c dir' => $tmpdir,\n+00016ce0: 0a09 0909 0920 2020 2020 2027 2d63 686d ..... '-chm\n+00016cf0: 6f64 4d44 3546 696c 6527 203d 3e20 2463 odMD5File' => $c\n+00016d00: 686d 6f64 4d44 3546 696c 652c 0a09 0909 hmodMD5File,....\n+00016d10: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n+00016d20: 3d3e 2024 7072 4c6f 672c 0a09 0909 0920 => $prLog,..... \n+00016d30: 2020 2020 2027 2d61 6b74 4461 7465 2720 '-aktDate' \n+00016d40: 3d3e 2024 616b 7444 6174 652c 0a09 0909 => $aktDate,....\n+00016d50: 0920 2020 2020 2027 2d64 6562 7567 4d6f . '-debugMo\n+00016d60: 6465 2720 3d3e 2024 6465 6275 6729 3b0a de' => $debug);.\n+00016d70: 0a6d 7920 2469 6e64 6578 4469 7220 3d20 .my $indexDir = \n+00016d80: 696e 6465 7844 6972 2d3e 6e65 7728 293b indexDir->new();\n+00016d90: 0a0a 6d79 2024 616b 7446 696c 656e 616d ..my $aktFilenam\n+00016da0: 6520 3d0a 2020 2020 616b 7446 696c 656e e =. aktFilen\n+00016db0: 616d 652d 3e6e 6577 2827 2d69 6e66 6f46 ame->new('-infoF\n+00016dc0: 696c 6527 203d 3e20 2461 646d 696e 4469 ile' => $adminDi\n+00016dd0: 7273 2d3e 6765 7441 6b74 496e 666f 4669 rs->getAktInfoFi\n+00016de0: 6c65 2829 2c0a 0909 2020 2020 2027 2d62 le(),... '-b\n+00016df0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile\n+00016e00: 2720 3d3e 0a09 0920 2020 2020 2461 646d ' =>... $adm\n+00016e10: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi\n+00016e20: 7228 2920 2e20 222f 2462 6c6f 636b 4368 r() . \"/$blockCh\n+00016e30: 6563 6b53 756d 4669 6c65 222c 0a09 0920 eckSumFile\",... \n+00016e40: 2020 2020 272d 636f 6d70 7265 7373 4d44 '-compressMD\n+00016e50: 3546 696c 6527 203d 3e20 2463 6f6d 7072 5File' => $compr\n+00016e60: 6573 734d 4435 4669 6c65 2c0a 0909 2020 essMD5File,... \n+00016e70: 2020 2027 2d73 6f75 7263 6544 6972 2720 '-sourceDir' \n+00016e80: 3d3e 2024 736f 7572 6365 4469 722c 0a09 => $sourceDir,..\n+00016e90: 0920 2020 2020 272d 666f 6c6c 6f77 4c69 . '-followLi\n+00016ea0: 6e6b 7327 203d 3e20 2466 6f6c 6c6f 774c nks' => $followL\n+00016eb0: 696e 6b73 2c0a 0909 2020 2020 2027 2d63 inks,... '-c\n+00016ec0: 6f6d 7072 6573 7327 203d 3e20 2463 6f6d ompress' => $com\n+00016ed0: 7072 6573 732c 0a09 0920 2020 2020 272d press,... '-\n+00016ee0: 756e 636f 6d70 7265 7373 2720 3d3e 2024 uncompress' => $\n+00016ef0: 756e 636f 6d70 7265 7373 2c0a 0909 2020 uncompress,... \n+00016f00: 2020 2027 2d70 6f73 7466 6978 2720 3d3e '-postfix' =>\n+00016f10: 2024 706f 7374 6669 782c 0a09 0920 2020 $postfix,... \n+00016f20: 2020 272d 636f 6d70 7252 756c 6527 203d '-comprRule' =\n+00016f30: 3e20 2463 6f6d 7072 5275 6c65 2c0a 0909 > $comprRule,...\n+00016f40: 2020 2020 2027 2d65 7863 6570 7452 756c '-exceptRul\n+00016f50: 6527 203d 3e20 2465 7863 5275 6c65 2c0a e' => $excRule,.\n+00016f60: 0909 2020 2020 2027 2d69 6e63 6c75 6465 .. '-include\n+00016f70: 5275 6c65 2720 3d3e 2024 696e 6352 756c Rule' => $incRul\n+00016f80: 652c 0a09 0920 2020 2020 272d 7772 6974 e,... '-writ\n+00016f90: 6545 7863 6c75 6465 4c6f 6727 203d 3e20 eExcludeLog' => \n+00016fa0: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog\n+00016fb0: 2c0a 0909 2020 2020 2027 2d65 7863 6570 ,... '-excep\n+00016fc0: 7454 7970 6573 2720 3d3e 2024 6578 6365 tTypes' => $exce\n+00016fd0: 7074 5479 7065 732c 0a09 0920 2020 2020 ptTypes,... \n+00016fe0: 272d 6368 6563 6b42 6c6f 636b 7352 756c '-checkBlocksRul\n+00016ff0: 6527 203d 3e20 5c40 6368 6563 6b42 6c6f e' => \\@checkBlo\n+00017000: 636b 7352 756c 652c 0a09 0920 2020 2020 cksRule,... \n+00017010: 272d 6368 6563 6b42 6c6f 636b 7342 5327 '-checkBlocksBS'\n+00017020: 203d 3e20 5c40 6368 6563 6b42 6c6f 636b => \\@checkBlock\n+00017030: 7342 532c 0a09 0920 2020 2020 272d 6368 sBS,... '-ch\n+00017040: 6563 6b42 6c6f 636b 7343 6f6d 7072 2720 eckBlocksCompr' \n+00017050: 3d3e 205c 4063 6865 636b 426c 6f63 6b73 => \\@checkBlocks\n+00017060: 436f 6d70 722c 0a09 0920 2020 2020 272d Compr,... '-\n+00017070: 6368 6563 6b42 6c6f 636b 7352 6561 6427 checkBlocksRead'\n+00017080: 203d 3e20 5c40 6368 6563 6b42 6c6f 636b => \\@checkBlock\n+00017090: 7352 6561 642c 0a09 0920 2020 2020 272d sRead,... '-\n+000170a0: 6368 6563 6b44 6576 6963 6573 2720 3d3e checkDevices' =>\n+000170b0: 205c 4063 6865 636b 4465 7669 6365 732c \\@checkDevices,\n+000170c0: 0a09 0920 2020 2020 272d 6368 6563 6b44 ... '-checkD\n+000170d0: 6576 6963 6573 4469 7227 203d 3e20 5c40 evicesDir' => \\@\n+000170e0: 6368 6563 6b44 6576 6963 6573 4469 722c checkDevicesDir,\n+000170f0: 0a09 0920 2020 2020 272d 6368 6563 6b44 ... '-checkD\n+00017100: 6576 6963 6573 4253 2720 3d3e 205c 4063 evicesBS' => \\@c\n+00017110: 6865 636b 4465 7669 6365 7342 532c 0a09 heckDevicesBS,..\n+00017120: 0920 2020 2020 272d 6368 6563 6b44 6576 . '-checkDev\n+00017130: 6963 6573 436f 6d70 7227 203d 3e20 5c40 icesCompr' => \\@\n+00017140: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp\n+00017150: 722c 0a09 0920 2020 2020 272d 6c61 7465 r,... '-late\n+00017160: 4c69 6e6b 7327 203d 3e20 246c 6174 654c Links' => $lateL\n+00017170: 696e 6b73 2c0a 0909 2020 2020 2027 2d6c inks,... '-l\n+00017180: 6f67 496e 4261 636b 7570 4469 7227 203d ogInBackupDir' =\n+00017190: 3e20 246c 6f67 496e 4261 636b 7570 4469 > $logInBackupDi\n+000171a0: 722c 0a09 0920 2020 2020 272d 636f 6d70 r,... '-comp\n+000171b0: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD\n+000171c0: 6972 2720 3d3e 2024 636f 6d70 7265 7373 ir' => $compress\n+000171d0: 4c6f 6749 6e42 6163 6b75 7044 6972 2c0a LogInBackupDir,.\n+000171e0: 0909 2020 2020 2027 2d6c 6f67 496e 4261 .. '-logInBa\n+000171f0: 636b 7570 4469 7246 696c 654e 616d 6527 ckupDirFileName'\n+00017200: 203d 3e20 246c 6f67 496e 4261 636b 7570 => $logInBackup\n+00017210: 4469 7246 696c 654e 616d 652c 0a09 0920 DirFileName,... \n+00017220: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs\n+00017230: 2720 3d3e 205c 4065 7863 6570 7444 6972 ' => \\@exceptDir\n+00017240: 732c 0a09 0920 2020 2020 272d 696e 636c s,... '-incl\n+00017250: 7564 6544 6972 7327 203d 3e20 5c40 696e udeDirs' => \\@in\n+00017260: 636c 7564 6544 6972 732c 0a09 0920 2020 cludeDirs,... \n+00017270: 2020 272d 616b 7444 6174 6527 203d 3e20 '-aktDate' => \n+00017280: 2461 6b74 4461 7465 2c0a 0909 2020 2020 $aktDate,... \n+00017290: 2027 2d63 686d 6f64 4d44 3546 696c 6527 '-chmodMD5File'\n+000172a0: 203d 3e20 2463 686d 6f64 4d44 3546 696c => $chmodMD5Fil\n+000172b0: 652c 0a09 0920 2020 2020 272d 696e 6465 e,... '-inde\n+000172c0: 7844 6972 2720 3d3e 2024 696e 6465 7844 xDir' => $indexD\n+000172d0: 6972 2c0a 0909 2020 2020 2027 2d70 724c ir,... '-prL\n+000172e0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+000172f0: 0a6d 7920 2473 6574 5265 7365 7444 6972 .my $setResetDir\n+00017300: 5469 6d65 7346 696c 6520 3d20 263a 3a75 TimesFile = &::u\n+00017310: 6e69 7146 696c 654e 616d 6528 2224 746d niqFileName(\"$tm\n+00017320: 7064 6972 2f73 746f 7265 4261 636b 7570 pdir/storeBackup\n+00017330: 2d64 6972 732e 2424 2229 3b0a 6d79 2024 -dirs.$$\");.my $\n+00017340: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes\n+00017350: 203d 0a20 2020 2073 6574 5265 7365 7444 =. setResetD\n+00017360: 6972 5469 6d65 732d 3e6e 6577 2827 2d74 irTimes->new('-t\n+00017370: 6d70 4469 7227 203d 3e20 2474 6d70 6469 mpDir' => $tmpdi\n+00017380: 722c 0a09 0909 2020 272d 736f 7572 6365 r,.... '-source\n+00017390: 4469 7227 203d 3e20 2473 6f75 7263 6544 Dir' => $sourceD\n+000173a0: 6972 2c0a 0909 0920 2027 2d74 6172 6765 ir,.... '-targe\n+000173b0: 7444 6972 2720 3d3e 2024 6164 6d69 6e44 tDir' => $adminD\n+000173c0: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir()\n+000173d0: 2c0a 0909 0920 2027 2d70 724c 6f67 2720 ,.... '-prLog' \n+000173e0: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... \n+000173f0: 272d 7372 6474 6627 203d 3e20 2473 6574 '-srdtf' => $set\n+00017400: 5265 7365 7444 6972 5469 6d65 7346 696c ResetDirTimesFil\n+00017410: 652c 0a09 0909 2020 272d 646f 4e6f 7468 e,.... '-doNoth\n+00017420: 696e 6727 203d 3e20 246c 6174 654c 696e ing' => $lateLin\n+00017430: 6b73 203f 2031 203a 2030 2c0a 0909 0920 ks ? 1 : 0,.... \n+00017440: 2027 2d72 6573 6574 4174 696d 6527 203d '-resetAtime' =\n+00017450: 3e20 2472 6573 6574 4174 696d 652c 0a09 > $resetAtime,..\n+00017460: 0909 2020 272d 7072 6573 6572 7665 5065 .. '-preservePe\n+00017470: 726d 7327 203d 3e20 2470 7265 7365 7276 rms' => $preserv\n+00017480: 6550 6572 6d73 293b 0a0a 6d79 2024 7072 ePerms);..my $pr\n+00017490: 4c6f 6732 203d 2075 6e64 6566 3b0a 6966 Log2 = undef;.if\n+000174a0: 2028 246c 6f67 496e 4261 636b 7570 4469 ($logInBackupDi\n+000174b0: 7229 2020 2020 2020 2320 6175 6368 2069 r) # auch i\n+000174c0: 6e20 4261 636b 7570 4469 7273 2068 6572 n BackupDirs her\n+000174d0: 696e 6c6f 6767 656e 0a7b 0a20 2020 2024 inloggen.{. $\n+000174e0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+000174f0: 6c65 4e61 6d65 203d 0a09 2461 646d 696e leName =..$admin\n+00017500: 4469 7273 2d3e 6765 7441 6b74 4469 7228 Dirs->getAktDir(\n+00017510: 2920 2e20 222f 246c 6f67 496e 4261 636b ) . \"/$logInBack\n+00017520: 7570 4469 7246 696c 654e 616d 6522 2c0a upDirFileName\",.\n+00017530: 2020 2020 2470 724c 6f67 3220 3d20 7072 $prLog2 = pr\n+00017540: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki\n+00017550: 6e64 2720 3d3e 2024 7072 4c6f 674b 696e nd' => $prLogKin\n+00017560: 642c 0a09 0909 2020 2020 272d 6669 6c65 d,.... '-file\n+00017570: 2720 3d3e 2024 6c6f 6749 6e42 6163 6b75 ' => $logInBacku\n+00017580: 7044 6972 4669 6c65 4e61 6d65 2c0a 0909 pDirFileName,...\n+00017590: 0920 2020 2027 2d77 6974 6854 696d 6527 . '-withTime'\n+000175a0: 203d 3e20 2779 6573 272c 0a09 0909 2020 => 'yes',.... \n+000175b0: 2020 272d 6d61 7846 696c 656c 656e 2720 '-maxFilelen' \n+000175c0: 3d3e 2031 6539 2c0a 0909 0920 2020 2027 => 1e9,.... '\n+000175d0: 2d6e 6f4f 664f 6c64 4669 6c65 7327 203d -noOfOldFiles' =\n+000175e0: 3e20 3129 3b0a 2020 2020 2470 724c 6f67 > 1);. $prLog\n+000175f0: 2d3e 6164 6428 272d 7072 4c6f 6773 2720 ->add('-prLogs' \n+00017600: 3d3e 205b 2470 724c 6f67 325d 293b 0a7d => [$prLog2]);.}\n+00017610: 0a0a 6d79 2024 6465 6c4f 6c64 203d 0a20 ..my $delOld =. \n+00017620: 2020 2064 656c 6574 654f 6c64 4261 636b deleteOldBack\n+00017630: 7570 4469 7273 2d3e 6e65 7728 272d 7461 upDirs->new('-ta\n+00017640: 7267 6574 4469 7227 203d 3e20 2474 6172 rgetDir' => $tar\n+00017650: 6765 7444 6972 2c0a 0909 0920 2020 2020 getDir,.... \n+00017660: 272d 646f 4e6f 7444 656c 6574 6527 203d '-doNotDelete' =\n+00017670: 3e20 2464 6f4e 6f74 4465 6c65 7465 2c0a > $doNotDelete,.\n+00017680: 0909 0920 2020 2020 272d 6465 6c65 7465 ... '-delete\n+00017690: 4e6f 7446 696e 6973 6865 6444 6972 7327 NotFinishedDirs'\n+000176a0: 203d 3e20 2464 656c 6574 654e 6f74 4669 => $deleteNotFi\n+000176b0: 6e69 7368 6564 4469 7273 2c0a 0909 0920 nishedDirs,.... \n+000176c0: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi\n+000176d0: 6c65 2720 3d3e 2024 6368 6563 6b53 756d le' => $checkSum\n+000176e0: 4669 6c65 2c0a 0909 0920 2020 2020 272d File,.... '-\n+000176f0: 6163 7442 6163 6b75 7044 6972 2720 3d3e actBackupDir' =>\n+00017700: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get\n+00017710: 416b 7444 6972 2829 2c0a 0909 0920 2020 AktDir(),.... \n+00017720: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n+00017730: 724c 6f67 2c0a 0909 0920 2020 2020 272d rLog,.... '-\n+00017740: 746f 6461 7927 203d 3e20 2461 6b74 4461 today' => $aktDa\n+00017750: 7465 2c0a 0909 0920 2020 2020 272d 6b65 te,.... '-ke\n+00017760: 6570 4669 7273 744f 6659 6561 7227 203d epFirstOfYear' =\n+00017770: 3e20 246b 6565 7046 6972 7374 4f66 5965 > $keepFirstOfYe\n+00017780: 6172 2c0a 0909 0920 2020 2020 272d 6b65 ar,.... '-ke\n+00017790: 6570 4c61 7374 4f66 5965 6172 2720 3d3e epLastOfYear' =>\n+000177a0: 2024 6b65 6570 4c61 7374 4f66 5965 6172 $keepLastOfYear\n+000177b0: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n+000177c0: 4669 7273 744f 664d 6f6e 7468 2720 3d3e FirstOfMonth' =>\n+000177d0: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon\n+000177e0: 7468 2c0a 0909 0920 2020 2020 272d 6b65 th,.... '-ke\n+000177f0: 6570 4c61 7374 4f66 4d6f 6e74 6827 203d epLastOfMonth' =\n+00017800: 3e20 246b 6565 704c 6173 744f 664d 6f6e > $keepLastOfMon\n+00017810: 7468 2c0a 0909 0920 2020 2020 272d 6669 th,.... '-fi\n+00017820: 7273 7444 6179 4f66 5765 656b 2720 3d3e rstDayOfWeek' =>\n+00017830: 2024 6669 7273 7444 6179 4f66 5765 656b $firstDayOfWeek\n+00017840: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n+00017850: 4669 7273 744f 6657 6565 6b27 203d 3e20 FirstOfWeek' => \n+00017860: 246b 6565 7046 6972 7374 4f66 5765 656b $keepFirstOfWeek\n+00017870: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n+00017880: 4c61 7374 4f66 5765 656b 2720 3d3e 2024 LastOfWeek' => $\n+00017890: 6b65 6570 4c61 7374 4f66 5765 656b 2c0a keepLastOfWeek,.\n+000178a0: 0909 0920 2020 2020 272d 6b65 6570 416c ... '-keepAl\n+000178b0: 6c27 203d 3e20 246b 6565 7041 6c6c 2c0a l' => $keepAll,.\n+000178c0: 0909 0920 2020 2020 272d 6b65 6570 5265 ... '-keepRe\n+000178d0: 6c61 7469 7665 2720 3d3e 2024 6b65 6570 lative' => $keep\n+000178e0: 5265 6c61 7469 7665 2c0a 0909 0920 2020 Relative,.... \n+000178f0: 2020 272d 6b65 6570 5765 656b 6461 7927 '-keepWeekday'\n+00017900: 203d 3e20 246b 6565 7057 6565 6b64 6179 => $keepWeekday\n+00017910: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n+00017920: 4475 706c 6963 6174 6527 203d 3e20 246b Duplicate' => $k\n+00017930: 6565 7044 7570 6c69 6361 7465 2c0a 0909 eepDuplicate,...\n+00017940: 0920 2020 2020 272d 6b65 6570 4d69 6e4e . '-keepMinN\n+00017950: 756d 6265 7227 203d 3e20 246b 6565 704d umber' => $keepM\n+00017960: 696e 4e75 6d62 6572 2c0a 0909 0920 2020 inNumber,.... \n+00017970: 2020 272d 6b65 6570 4d61 784e 756d 6265 '-keepMaxNumbe\n+00017980: 7227 203d 3e20 246b 6565 704d 6178 4e75 r' => $keepMaxNu\n+00017990: 6d62 6572 2c0a 0909 0920 2020 2020 272d mber,.... '-\n+000179a0: 7374 6174 4465 6c4f 6c64 4261 636b 7570 statDelOldBackup\n+000179b0: 4469 7273 2720 3d3e 2024 6d61 696e 3a3a Dirs' => $main::\n+000179c0: 7374 6174 2c0a 0909 0920 2020 2020 272d stat,.... '-\n+000179d0: 6c61 7465 4c69 6e6b 7350 6172 616d 2720 lateLinksParam' \n+000179e0: 3d3e 2024 6c61 7465 4c69 6e6b 732c 0a09 => $lateLinks,..\n+000179f0: 0909 2020 2020 2027 2d61 6c6c 4c69 6e6b .. '-allLink\n+00017a00: 7327 203d 3e20 2461 6c6c 4c69 6e6b 730a s' => $allLinks.\n+00017a10: 0909 0920 2020 2020 293b 0a24 6465 6c4f ... );.$delO\n+00017a20: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups\n+00017a30: 2829 3b0a 0a6d 7920 246f 6c64 4669 6c65 ();..my $oldFile\n+00017a40: 6e61 6d65 203d 0a20 2020 206f 6c64 4669 name =. oldFi\n+00017a50: 6c65 6e61 6d65 2d3e 6e65 7728 272d 6462 lename->new('-db\n+00017a60: 6d42 6173 654e 616d 6527 203d 3e20 2224 mBaseName' => \"$\n+00017a70: 746d 7064 6972 2f64 626d 222c 0a09 0920 tmpdir/dbm\",... \n+00017a80: 2020 2020 272d 696e 6465 7844 6972 2720 '-indexDir' \n+00017a90: 3d3e 2024 696e 6465 7844 6972 2c0a 0909 => $indexDir,...\n+00017aa0: 2020 2020 2027 2d70 726f 6772 6573 7352 '-progressR\n+00017ab0: 6570 6f72 7427 203d 3e20 2470 726f 6772 eport' => $progr\n+00017ac0: 6573 7352 6570 6f72 742c 0a09 0920 2020 essReport,... \n+00017ad0: 2020 272d 616b 7444 6972 2720 3d3e 2024 '-aktDir' => $\n+00017ae0: 6164 6d69 6e44 6972 732d 3e67 6574 416b adminDirs->getAk\n+00017af0: 7444 6972 2829 2c0a 0909 2020 2020 2027 tDir(),... '\n+00017b00: 2d6f 7468 6572 4261 636b 7570 5365 7269 -otherBackupSeri\n+00017b10: 6573 2720 3d3e 205c 406f 7468 6572 4261 es' => \\@otherBa\n+00017b20: 636b 7570 5365 7269 6573 2c0a 0909 2020 ckupSeries,... \n+00017b30: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+00017b40: 7072 4c6f 672c 0a09 0920 2020 2020 272d prLog,... '-\n+00017b50: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' =>\n+00017b60: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,.\n+00017b70: 0909 2020 2020 2027 2d64 6562 7567 4d6f .. '-debugMo\n+00017b80: 6465 2720 3d3e 2024 6465 6275 672c 0a09 de' => $debug,..\n+00017b90: 0920 2020 2020 272d 7361 7665 5241 4d27 . '-saveRAM'\n+00017ba0: 203d 3e20 2473 6176 6552 414d 2c0a 0909 => $saveRAM,...\n+00017bb0: 2020 2020 2027 2d66 6c61 6742 6c6f 636b '-flagBlock\n+00017bc0: 4465 7669 6365 2720 3d3e 2024 666c 6167 Device' => $flag\n+00017bd0: 426c 6f63 6b44 6576 6963 650a 2020 2020 BlockDevice. \n+00017be0: 293b 0a0a 2461 6b74 4669 6c65 6e61 6d65 );..$aktFilename\n+00017bf0: 2d3e 7365 7444 424d 6d64 3528 246f 6c64 ->setDBMmd5($old\n+00017c00: 4669 6c65 6e61 6d65 2d3e 6765 7444 424d Filename->getDBM\n+00017c10: 6d64 3528 2929 3b0a 0a24 7772 6974 6545 md5());..$writeE\n+00017c20: 7863 6c75 6465 4c6f 6720 3d20 2461 646d xcludeLog = $adm\n+00017c30: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi\n+00017c40: 7228 2920 2e20 222f 2e73 746f 7265 4261 r() . \"/.storeBa\n+00017c50: 636b 7570 2e6e 6f74 5361 7665 642e 627a ckup.notSaved.bz\n+00017c60: 3222 0a20 2020 2069 6620 2477 7269 7465 2\". if $write\n+00017c70: 4578 636c 7564 654c 6f67 3b0a 0a6d 7920 ExcludeLog;..my \n+00017c80: 2472 6561 6444 6972 416e 6443 6865 636b $readDirAndCheck\n+00017c90: 203d 0a20 2020 2072 6561 6444 6972 4368 =. readDirCh\n+00017ca0: 6563 6b53 697a 6554 696d 652d 3e6e 6577 eckSizeTime->new\n+00017cb0: 2827 2d61 646d 696e 4469 7273 2720 3d3e ('-adminDirs' =>\n+00017cc0: 2024 6164 6d69 6e44 6972 732c 0a09 0909 $adminDirs,....\n+00017cd0: 2020 2020 2020 272d 6f6c 6446 696c 656e '-oldFilen\n+00017ce0: 616d 6527 203d 3e20 246f 6c64 4669 6c65 ame' => $oldFile\n+00017cf0: 6e61 6d65 2c0a 0909 0920 2020 2020 2027 name,.... '\n+00017d00: 2d61 6b74 4669 6c65 6e61 6d65 2720 3d3e -aktFilename' =>\n+00017d10: 2024 616b 7446 696c 656e 616d 652c 0a09 $aktFilename,..\n+00017d20: 0909 2020 2020 2020 272d 6469 7227 203d .. '-dir' =\n+00017d30: 3e20 2473 6f75 7263 6544 6972 2c0a 0909 > $sourceDir,...\n+00017d40: 0920 2020 2020 2027 2d66 6f6c 6c6f 774c . '-followL\n+00017d50: 696e 6b73 2720 3d3e 2024 666f 6c6c 6f77 inks' => $follow\n+00017d60: 4c69 6e6b 732c 0a20 2020 2020 2020 2020 Links,. \n+00017d70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00017d80: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' \n+00017d90: 3d3e 2024 676e 7563 702c 0a09 0909 2020 => $gnucp,.... \n+00017da0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs\n+00017db0: 2720 3d3e 205b 4065 7863 6570 7444 6972 ' => [@exceptDir\n+00017dc0: 735d 2c0a 0909 0920 2020 2020 2027 2d69 s],.... '-i\n+00017dd0: 6e63 6c75 6465 4469 7273 2720 3d3e 205b ncludeDirs' => [\n+00017de0: 4069 6e63 6c75 6465 4469 7273 5d2c 0a09 @includeDirs],..\n+00017df0: 0909 2020 2020 2020 272d 7772 6974 6545 .. '-writeE\n+00017e00: 7863 6c75 6465 4c6f 6727 203d 3e20 2477 xcludeLog' => $w\n+00017e10: 7269 7465 4578 636c 7564 654c 6f67 2c0a riteExcludeLog,.\n+00017e20: 0909 0920 2020 2020 2027 2d61 6b74 4469 ... '-aktDi\n+00017e30: 7227 203d 3e20 2461 646d 696e 4469 7273 r' => $adminDirs\n+00017e40: 2d3e 6765 7441 6b74 4469 7228 292c 0a09 ->getAktDir(),..\n+00017e50: 0909 2020 2020 2020 272d 706f 7374 6669 .. '-postfi\n+00017e60: 7827 203d 3e20 2470 6f73 7466 6978 2c0a x' => $postfix,.\n+00017e70: 0909 0920 2020 2020 2027 2d65 7863 6570 ... '-excep\n+00017e80: 7452 756c 6527 203d 3e20 2465 7863 5275 tRule' => $excRu\n+00017e90: 6c65 2c0a 0909 0920 2020 2020 2027 2d69 le,.... '-i\n+00017ea0: 6e63 6c75 6465 5275 6c65 2720 3d3e 2024 ncludeRule' => $\n+00017eb0: 696e 6352 756c 652c 0a09 0909 2020 2020 incRule,.... \n+00017ec0: 2020 272d 6368 6563 6b42 6c6f 636b 7352 '-checkBlocksR\n+00017ed0: 756c 6527 203d 3e20 2463 6862 5275 6c65 ule' => $chbRule\n+00017ee0: 2c0a 0909 0920 2020 2020 2027 2d65 7854 ,.... '-exT\n+00017ef0: 7970 6573 2720 3d3e 205c 2565 7854 7970 ypes' => \\%exTyp\n+00017f00: 6573 2c0a 0909 0920 2020 2020 2027 2d72 es,.... '-r\n+00017f10: 6573 6574 4174 696d 6527 203d 3e20 2472 esetAtime' => $r\n+00017f20: 6573 6574 4174 696d 652c 0a09 0909 2020 esetAtime,.... \n+00017f30: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode'\n+00017f40: 203d 3e20 2464 6562 7567 2c0a 0909 0920 => $debug,.... \n+00017f50: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' \n+00017f60: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,....\n+00017f70: 2020 2020 2020 272d 746d 7064 6972 2720 '-tmpdir' \n+00017f80: 3d3e 2024 746d 7064 6972 2c0a 0909 0920 => $tmpdir,.... \n+00017f90: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n+00017fa0: 2024 7072 4c6f 672c 0a09 0909 2020 2020 $prLog,.... \n+00017fb0: 2020 272d 6967 6e6f 7265 5265 6164 4572 '-ignoreReadEr\n+00017fc0: 726f 7227 203d 3e20 2469 676e 6f72 6552 ror' => $ignoreR\n+00017fd0: 6561 6445 7272 6f72 2c0a 0909 0920 2020 eadError,.... \n+00017fe0: 2020 2027 2d69 676e 6f72 6554 696d 6527 '-ignoreTime'\n+00017ff0: 203d 3e20 2469 676e 6f72 6554 696d 652c => $ignoreTime,\n+00018000: 0a09 0909 2020 2020 2020 272d 7072 696e .... '-prin\n+00018010: 7444 6570 7468 2720 3d3e 2024 7072 696e tDepth' => $prin\n+00018020: 7444 6570 7468 293b 0a0a 6d79 2024 7061 tDepth);..my $pa\n+00018030: 7246 6f72 6b43 6f70 7920 3d20 7061 7261 rForkCopy = para\n+00018040: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('-\n+00018050: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => \n+00018060: 246e 6f43 6f70 792c 0a09 0909 0920 2020 $noCopy,..... \n+00018070: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr\n+00018080: 4c6f 6729 3b0a 6d79 2024 7061 7246 6f72 Log);.my $parFor\n+00018090: 6b43 6f6d 7072 203d 2070 6172 616c 6c65 kCompr = paralle\n+000180a0: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max\n+000180b0: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no\n+000180c0: 436f 6d70 7265 7373 2c0a 0909 0909 2020 Compress,..... \n+000180d0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+000180e0: 7072 4c6f 6729 3b0a 6d79 2024 7061 7246 prLog);.my $parF\n+000180f0: 6f72 6b42 6c6f 636b 203d 2070 6172 616c orkBlock = paral\n+00018100: 6c65 6c46 6f72 6b2d 3e6e 6577 2827 2d6d lelFork->new('-m\n+00018110: 6178 5061 7261 6c6c 656c 2720 3d3e 2031 axParallel' => 1\n+00018120: 2c0a 0909 0909 2020 2020 2027 2d70 724c ,..... '-prL\n+00018130: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+00018140: 0a23 2073 6967 6e61 6c20 6861 6e64 6c69 .# signal handli\n+00018150: 6e67 0a28 406d 6169 6e3a 3a63 6c65 616e ng.(@main::clean\n+00018160: 7570 2920 3d20 2020 2020 2023 204f 626a up) = # Obj\n+00018170: 656b 7465 2076 6572 66c3 bc67 6261 7220 ekte verf..gbar \n+00018180: 6d61 6368 656e 0a20 2020 2028 2470 724c machen. ($prL\n+00018190: 6f67 2c20 302c 2024 6f6c 6446 696c 656e og, 0, $oldFilen\n+000181a0: 616d 652c 2024 616b 7446 696c 656e 616d ame, $aktFilenam\n+000181b0: 652c 2024 7061 7246 6f72 6b43 6f70 792c e, $parForkCopy,\n+000181c0: 2024 7061 7246 6f72 6b43 6f6d 7072 2c20 $parForkCompr, \n+000181d0: 2474 6d70 6469 722c 0a20 2020 2020 2473 $tmpdir,. $s\n+000181e0: 6574 5265 7365 7444 6972 5469 6d65 7346 etResetDirTimesF\n+000181f0: 696c 6529 3b0a 2453 4947 7b49 4e54 7d20 ile);.$SIG{INT} \n+00018200: 3d20 5c26 636c 6561 6e75 703b 0a24 5349 = \\&cleanup;.$SI\n+00018210: 477b 5445 524d 7d20 3d20 5c26 636c 6561 G{TERM} = \\&clea\n+00018220: 6e75 703b 0a0a 0a6d 7920 2466 6966 6f43 nup;...my $fifoC\n+00018230: 6f70 7920 3d20 6669 666f 5175 6575 652d opy = fifoQueue-\n+00018240: 3e6e 6577 2827 2d6d 6178 4c65 6e67 7468 >new('-maxLength\n+00018250: 2720 3d3e 2024 7175 6575 6543 6f70 792c ' => $queueCopy,\n+00018260: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+00018270: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m\n+00018280: 7920 2466 6966 6f43 6f6d 7072 203d 2066 y $fifoCompr = f\n+00018290: 6966 6f51 7565 7565 2d3e 6e65 7728 272d ifoQueue->new('-\n+000182a0: 6d61 784c 656e 6774 6827 203d 3e20 2471 maxLength' => $q\n+000182b0: 7565 7565 436f 6d70 7265 7373 2c0a 0909 ueueCompress,...\n+000182c0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog'\n+000182d0: 203d 3e20 2470 724c 6f67 293b 0a6d 7920 => $prLog);.my \n+000182e0: 2466 6966 6f42 6c6f 636b 203d 2066 6966 $fifoBlock = fif\n+000182f0: 6f51 7565 7565 2d3e 6e65 7728 272d 6d61 oQueue->new('-ma\n+00018300: 784c 656e 6774 6827 203d 3e20 2471 7565 xLength' => $que\n+00018310: 7565 426c 6f63 6b2c 0a09 0909 2020 2020 ueBlock,.... \n+00018320: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+00018330: 7072 4c6f 6729 3b0a 0a6d 7920 2473 6368 prLog);..my $sch\n+00018340: 6564 756c 6572 203d 0a20 2020 2053 6368 eduler =. Sch\n+00018350: 6564 756c 6572 2d3e 6e65 7728 272d 616b eduler->new('-ak\n+00018360: 7446 696c 656e 616d 6527 203d 3e20 2461 tFilename' => $a\n+00018370: 6b74 4669 6c65 6e61 6d65 2c0a 0909 2020 ktFilename,... \n+00018380: 2027 2d6f 6c64 4669 6c65 6e61 6d65 2720 '-oldFilename' \n+00018390: 3d3e 2024 6f6c 6446 696c 656e 616d 652c => $oldFilename,\n+000183a0: 0a09 0920 2020 272d 666f 6c6c 6f77 4c69 ... '-followLi\n+000183b0: 6e6b 7327 203d 3e20 2466 6f6c 6c6f 774c nks' => $followL\n+000183c0: 696e 6b73 2c0a 0909 2020 2027 2d70 7265 inks,... '-pre\n+000183d0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries\n+000183e0: 2720 3d3e 2024 7072 6576 4261 636b 7570 ' => $prevBackup\n+000183f0: 4f77 6e53 6572 6965 732c 0a09 0920 2020 OwnSeries,... \n+00018400: 272d 7265 6164 4469 7241 6e64 4368 6563 '-readDirAndChec\n+00018410: 6b27 203d 3e20 2472 6561 6444 6972 416e k' => $readDirAn\n+00018420: 6443 6865 636b 2c0a 0909 2020 2027 2d73 dCheck,... '-s\n+00018430: 6574 5265 7365 7444 6972 5469 6d65 7327 etResetDirTimes'\n+00018440: 203d 3e20 2473 6574 5265 7365 7444 6972 => $setResetDir\n+00018450: 5469 6d65 732c 0a09 0920 2020 272d 7061 Times,... '-pa\n+00018460: 7246 6f72 6b43 6f70 7927 203d 3e20 2470 rForkCopy' => $p\n+00018470: 6172 466f 726b 436f 7079 2c0a 0909 2020 arForkCopy,... \n+00018480: 2027 2d66 6966 6f43 6f70 7927 203d 3e20 '-fifoCopy' => \n+00018490: 2466 6966 6f43 6f70 792c 0a09 0920 2020 $fifoCopy,... \n+000184a0: 272d 7061 7246 6f72 6b43 6f6d 7072 2720 '-parForkCompr' \n+000184b0: 3d3e 2024 7061 7246 6f72 6b43 6f6d 7072 => $parForkCompr\n+000184c0: 2c0a 0909 2020 2027 2d6e 6f43 6f6d 7072 ,... '-noCompr\n+000184d0: 6573 7327 203d 3e20 246e 6f43 6f6d 7072 ess' => $noCompr\n+000184e0: 6573 732c 0a09 0920 2020 272d 626c 6f63 ess,... '-bloc\n+000184f0: 6b43 6865 636b 5375 6d46 696c 6527 203d kCheckSumFile' =\n+00018500: 3e20 2462 6c6f 636b 4368 6563 6b53 756d > $blockCheckSum\n+00018510: 4669 6c65 2c0a 0909 2020 2027 2d70 6172 File,... '-par\n+00018520: 466f 726b 426c 6f63 6b27 203d 3e20 2470 ForkBlock' => $p\n+00018530: 6172 466f 726b 426c 6f63 6b2c 0a09 0920 arForkBlock,... \n+00018540: 2020 272d 6669 666f 426c 6f63 6b27 203d '-fifoBlock' =\n+00018550: 3e20 2466 6966 6f42 6c6f 636b 2c0a 0909 > $fifoBlock,...\n+00018560: 2020 2027 2d63 6f6d 7072 6573 7327 203d '-compress' =\n+00018570: 3e20 2463 6f6d 7072 6573 732c 0a09 0920 > $compress,... \n+00018580: 2020 272d 706f 7374 6669 7827 203d 3e20 '-postfix' => \n+00018590: 2470 6f73 7466 6978 2c0a 0909 2020 2027 $postfix,... '\n+000185a0: 2d66 6966 6f43 6f6d 7072 2720 3d3e 2024 -fifoCompr' => $\n+000185b0: 6669 666f 436f 6d70 722c 0a09 0920 2020 fifoCompr,... \n+000185c0: 272d 636f 6d70 7252 756c 6527 203d 3e20 '-comprRule' => \n+000185d0: 2463 6f6d 7072 5275 6c65 2c0a 0909 2020 $comprRule,... \n+000185e0: 2027 2d74 6172 6765 7444 6972 2720 3d3e '-targetDir' =>\n+000185f0: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get\n+00018600: 416b 7444 6972 2829 2c0a 0909 2020 2027 AktDir(),... '\n+00018610: 2d61 6b74 496e 666f 4669 6c65 2720 3d3e -aktInfoFile' =>\n+00018620: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,.\n+00018630: 0909 2020 2027 2d72 6573 6574 4174 696d .. '-resetAtim\n+00018640: 6527 203d 3e20 2472 6573 6574 4174 696d e' => $resetAtim\n+00018650: 652c 0a09 0920 2020 272d 746d 7064 6972 e,... '-tmpdir\n+00018660: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,...\n+00018670: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+00018680: 7072 4c6f 672c 0a20 2020 2020 2020 2020 prLog,. \n+00018690: 2020 2020 2020 2020 2020 272d 6370 4973 '-cpIs\n+000186a0: 476e 7527 203d 3e20 2467 6e75 6370 2c0a Gnu' => $gnucp,.\n+000186b0: 0909 2020 2027 2d6c 696e 6b53 796d 6c69 .. '-linkSymli\n+000186c0: 6e6b 7327 203d 3e20 246c 696e 6b53 796d nks' => $linkSym\n+000186d0: 6c69 6e6b 732c 0a09 0920 2020 272d 6c61 links,... '-la\n+000186e0: 7465 4c69 6e6b 7327 203d 3e20 246c 6174 teLinks' => $lat\n+000186f0: 654c 696e 6b73 2c0a 0909 2020 2027 2d6c eLinks,... '-l\n+00018700: 6174 6543 6f6d 7072 6573 7327 203d 3e20 ateCompress' => \n+00018710: 246c 6174 6543 6f6d 7072 6573 732c 0a09 $lateCompress,..\n+00018720: 0920 2020 272d 7375 7070 7265 7373 5761 . '-suppressWa\n+00018730: 726e 696e 6727 203d 3e20 5c25 7375 7070 rning' => \\%supp\n+00018740: 7265 7373 5761 726e 696e 672c 0a20 2020 ressWarning,. \n+00018750: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00018760: 272d 7072 6573 6572 7665 5065 726d 7327 '-preservePerms'\n+00018770: 203d 3e20 2470 7265 7365 7276 6550 6572 => $preservePer\n+00018780: 6d73 2c0a 0909 2020 2027 2d64 6562 7567 ms,... '-debug\n+00018790: 4d6f 6465 2720 3d3e 2024 6465 6275 6729 Mode' => $debug)\n+000187a0: 3b0a 0a24 6d61 696e 3a3a 7469 6e79 5761 ;..$main::tinyWa\n+000187b0: 6974 5363 6865 6475 6c65 7220 3d20 7469 itScheduler = ti\n+000187c0: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler-\n+000187d0: 3e6e 6577 2827 2d66 6972 7374 4661 7374 >new('-firstFast\n+000187e0: 2720 3d3e 2031 2c0a 0909 0909 0909 2020 ' => 1,....... \n+000187f0: 272d 6d61 7857 6169 7454 696d 6527 203d '-maxWaitTime' =\n+00018800: 3e20 2e32 2c0a 0909 0909 0909 2020 272d > .2,....... '-\n+00018810: 6e6f 4f66 5761 6974 5374 6570 7327 203d noOfWaitSteps' =\n+00018820: 3e20 3130 302c 0a09 0909 0909 2020 2020 > 100,...... \n+00018830: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n+00018840: 3e20 2470 724c 6f67 2c0a 0909 0909 0920 > $prLog,...... \n+00018850: 2020 2020 2020 2020 2027 2d64 6562 7567 '-debug\n+00018860: 2720 3d3e 2024 6465 6275 6729 3b0a 7b0a ' => $debug);.{.\n+00018870: 2020 2020 6d79 2024 693b 0a20 2020 2066 my $i;. f\n+00018880: 6f72 6561 6368 2024 6920 2830 2e2e 4063 oreach $i (0..@c\n+00018890: 6865 636b 4465 7669 6365 732d 3129 0a20 heckDevices-1). \n+000188a0: 2020 207b 0a09 2466 6966 6f42 6c6f 636b {..$fifoBlock\n+000188b0: 2d3e 6164 6428 272d 7661 6c75 6527 203d ->add('-value' =\n+000188c0: 3e20 5b27 6465 7669 6365 272c 2024 6368 > ['device', $ch\n+000188d0: 6563 6b44 6576 6963 6573 5b24 695d 2c0a eckDevices[$i],.\n+000188e0: 0909 0909 2020 2020 2024 6368 6563 6b44 .... $checkD\n+000188f0: 6576 6963 6573 4469 725b 2469 5d2c 2024 evicesDir[$i], $\n+00018900: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$\n+00018910: 695d 2c0a 0909 0909 2020 2020 2024 6368 i],..... $ch\n+00018920: 6563 6b44 6576 6963 6573 436f 6d70 725b eckDevicesCompr[\n+00018930: 2469 5d2c 0a09 0909 0920 2020 2020 2463 $i],..... $c\n+00018940: 6865 636b 4465 7669 6365 7350 6172 616c heckDevicesParal\n+00018950: 6c65 6c5b 2469 5d5d 293b 0a20 2020 207d lel[$i]]);. }\n+00018960: 0a7d 0a0a 0a24 7363 6865 6475 6c65 722d .}...$scheduler-\n+00018970: 3e6e 6f72 6d61 6c4f 7065 7261 7469 6f6e >normalOperation\n+00018980: 2829 3b20 2020 2320 6469 6520 6569 6765 (); # die eige\n+00018990: 6e74 6c69 6368 6520 5665 7261 7262 6569 ntliche Verarbei\n+000189a0: 7475 6e67 0a0a 2473 6574 5265 7365 7444 tung..$setResetD\n+000189b0: 6972 5469 6d65 732d 3e77 7269 7465 5469 irTimes->writeTi\n+000189c0: 6d65 7328 293b 2023 2073 6574 2061 7469 mes(); # set ati\n+000189d0: 6d65 2c20 6d74 696d 6520 666f 7220 6469 me, mtime for di\n+000189e0: 7265 6374 6f72 6965 730a 0a24 616b 7446 rectories..$aktF\n+000189f0: 696c 656e 616d 652d 3e63 6c6f 7365 496e ilename->closeIn\n+00018a00: 666f 4669 6c65 2829 3b0a 246f 6c64 4669 foFile();.$oldFi\n+00018a10: 6c65 6e61 6d65 2d3e 7265 6164 4442 4d46 lename->readDBMF\n+00018a20: 696c 6573 5369 7a65 2829 3b0a 246f 6c64 ilesSize();.$old\n+00018a30: 4669 6c65 6e61 6d65 2d3e 6465 6c44 424d Filename->delDBM\n+00018a40: 4669 6c65 7328 293b 2020 2020 2023 2064 Files(); # d\n+00018a50: 626d 2066 696c 6573 206c c3b6 7363 6865 bm files l..sche\n+00018a60: 6e0a 0a23 0a23 206a 6574 7a74 206e 6f63 n..#.# jetzt noc\n+00018a70: 6820 616c 7465 2042 6163 6b75 7073 206c h alte Backups l\n+00018a80: c3b6 7363 6865 6e0a 230a 2464 656c 4f6c ..schen.#.$delOl\n+00018a90: 642d 3e64 656c 6574 6542 6163 6b75 7073 d->deleteBackups\n+00018aa0: 2829 3b0a 0a0a 230a 2320 706f 7374 636f ();...#.# postco\n+00018ab0: 6d6d 616e 6420 6175 7366 c3bc 6872 656e mmand ausf..hren\n+00018ac0: 0a23 0a0a 6966 2028 6465 6669 6e65 6420 .#..if (defined \n+00018ad0: 2470 6f73 7463 6f6d 6d61 6e64 290a 7b0a $postcommand).{.\n+00018ae0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00018af0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n+00018b00: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => \n+00018b10: 5b22 7374 6172 7469 6e67 2070 6f73 7420 [\"starting post \n+00018b20: 636f 6d6d 616e 6420 3c40 2470 6f73 7463 command <@$postc\n+00018b30: 6f6d 6d61 6e64 3e20 2e2e 2e22 5d29 3b0a ommand> ...\"]);.\n+00018b40: 2020 2020 6d79 2028 2470 6f73 7443 6f6d my ($postCom\n+00018b50: 6d2c 2040 706f 7374 5061 7261 6d29 203d m, @postParam) =\n+00018b60: 2028 4024 706f 7374 636f 6d6d 616e 6429 (@$postcommand)\n+00018b70: 3b0a 2020 2020 6d79 2024 706f 7374 636f ;. my $postco\n+00018b80: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new\n+00018b90: 2827 2d65 7865 6327 203d 3e20 2470 6f73 ('-exec' => $pos\n+00018ba0: 7443 6f6d 6d2c 0a09 0909 2020 2020 2020 tComm,.... \n+00018bb0: 272d 7061 7261 6d27 203d 3e20 5c40 706f '-param' => \\@po\n+00018bc0: 7374 5061 7261 6d2c 0a09 0909 2020 2020 stParam,.... \n+00018bd0: 2020 272d 776f 726b 696e 6744 6972 2720 '-workingDir' \n+00018be0: 3d3e 2027 2e27 2c0a 0909 0920 2020 2020 => '.',.... \n+00018bf0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n+00018c00: 2022 2474 6d70 6469 722f 706f 7374 636f \"$tmpdir/postco\n+00018c10: 6d6d 2d22 2c0a 0909 0920 2020 2020 2027 mm-\",.... '\n+00018c20: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n+00018c30: 6729 3b0a 2020 2020 2470 6f73 7463 6f2d g);. $postco-\n+00018c40: 3e77 6169 7428 293b 0a20 2020 206d 7920 >wait();. my \n+00018c50: 246f 7574 203d 2024 706f 7374 636f 2d3e $out = $postco->\n+00018c60: 6765 7453 5444 4f55 5428 293b 0a20 2020 getSTDOUT();. \n+00018c70: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00018c80: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n+00018c90: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => [\"S\n+00018ca0: 5444 4f55 5420 6f66 203c 4024 706f 7374 TDOUT of <@$post\n+00018cb0: 636f 6d6d 616e 643e 3a22 2c20 4024 6f75 command>:\", @$ou\n+00018cc0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out >\n+00018cd0: 2030 293b 0a20 2020 2024 6f75 7420 3d20 0);. $out = \n+00018ce0: 2470 6f73 7463 6f2d 3e67 6574 5354 4445 $postco->getSTDE\n+00018cf0: 5252 2829 3b0a 2020 2020 2470 724c 6f67 RR();. $prLog\n+00018d00: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00018d10: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n+00018d20: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => [\"STDERR o\n+00018d30: 6620 3c40 2470 6f73 7463 6f6d 6d61 6e64 f <@$postcommand\n+00018d40: 3e3a 222c 2040 246f 7574 5d29 0a09 6966 >:\", @$out])..if\n+00018d50: 2028 4024 6f75 7420 3e20 3029 3b0a 0a20 (@$out > 0);.. \n+00018d60: 2020 206d 7920 2473 7461 7475 7320 3d20 my $status = \n+00018d70: 2470 6f73 7463 6f2d 3e67 6574 2827 2d77 $postco->get('-w\n+00018d80: 6861 7427 203d 3e20 2773 7461 7475 7327 hat' => 'status'\n+00018d90: 293b 0a20 2020 2069 6620 2824 7374 6174 );. if ($stat\n+00018da0: 7573 203d 3d20 3029 0a20 2020 207b 0a09 us == 0). {..\n+00018db0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00018dc0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00018dd0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n+00018de0: 0909 2020 2020 2020 5b22 706f 7374 2063 .. [\"post c\n+00018df0: 6f6d 6d61 6e64 203c 4024 706f 7374 636f ommand <@$postco\n+00018e00: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished \n+00018e10: 7769 7468 2073 7461 7475 7320 3022 5d29 with status 0\"])\n+00018e20: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00018e30: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n+00018e40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00018e50: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+00018e60: 7374 7227 203d 3e20 5b22 706f 7374 2063 str' => [\"post c\n+00018e70: 6f6d 6d61 6e64 203c 4024 706f 7374 636f ommand <@$postco\n+00018e80: 6d6d 616e 643e 2066 696e 6973 6865 6420 mmand> finished \n+00018e90: 2220 2e0a 0909 0909 2022 7769 7468 2073 \" ...... \"with s\n+00018ea0: 7461 7475 7320 2473 7461 7475 7322 5d29 tatus $status\"])\n+00018eb0: 3b0a 0975 6e6c 696e 6b20 246c 6f63 6b46 ;..unlink $lockF\n+00018ec0: 696c 6520 6966 2024 6c6f 636b 4669 6c65 ile if $lockFile\n+00018ed0: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. }\n+00018ee0: 0a7d 0a0a 2320 6c6f 636b 2066 696c 6520 .}..# lock file \n+00018ef0: 6cc3 b673 6368 656e 0a69 6620 2824 6c6f l..schen.if ($lo\n+00018f00: 636b 4669 6c65 2061 6e64 2024 756e 6c6f ckFile and $unlo\n+00018f10: 636b 4265 666f 7265 4465 6c29 0a7b 0a20 ckBeforeDel).{. \n+00018f20: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00018f30: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n+00018f40: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n+00018f50: 2272 656d 6f76 696e 6720 6c6f 636b 2066 \"removing lock f\n+00018f60: 696c 6520 3c24 6c6f 636b 4669 6c65 3e22 ile <$lockFile>\"\n+00018f70: 5d29 3b0a 2020 2020 756e 6c69 6e6b 2024 ]);. unlink $\n+00018f80: 6c6f 636b 4669 6c65 3b0a 2020 2020 246c lockFile;. $l\n+00018f90: 6f63 6b46 696c 6520 3d20 756e 6465 663b ockFile = undef;\n+00018fa0: 0a7d 0a0a 0a23 2047 72c3 b6c3 9f65 2076 .}...# Gr....e v\n+00018fb0: 6f6e 202e 6d64 3543 6865 636b 5375 6d2d on .md5CheckSum-\n+00018fc0: 4461 7465 6920 6e6f 6368 2066 c3bc 7220 Datei noch f..r \n+00018fd0: 5374 6174 6973 7469 6b20 6265 72c3 bc63 Statistik ber..c\n+00018fe0: 6b73 6963 6874 6967 656e 0a24 6d61 696e ksichtigen.$main\n+00018ff0: 3a3a 7374 6174 2d3e 7365 7453 697a 654d ::stat->setSizeM\n+00019000: 4435 4368 6563 6b53 756d 2824 6164 6d69 D5CheckSum($admi\n+00019010: 6e44 6972 732d 3e67 6574 416b 7449 6e66 nDirs->getAktInf\n+00019020: 6f46 696c 6528 292c 0a09 0909 0924 636f oFile(),.....$co\n+00019030: 6d70 7265 7373 4d44 3546 696c 6529 3b0a mpressMD5File);.\n+00019040: 246d 6169 6e3a 3a73 7461 742d 3e73 6574 $main::stat->set\n+00019050: 5573 6564 5369 7a65 5175 6575 6573 2824 UsedSizeQueues($\n+00019060: 6669 666f 436f 7079 2d3e 6765 744d 6178 fifoCopy->getMax\n+00019070: 5573 6564 4c65 6e67 7468 2829 2c0a 0909 UsedLength(),...\n+00019080: 0920 2020 2020 2020 2466 6966 6f43 6f6d . $fifoCom\n+00019090: 7072 2d3e 6765 744d 6178 5573 6564 4c65 pr->getMaxUsedLe\n+000190a0: 6e67 7468 2829 293b 0a24 6d61 696e 3a3a ngth());.$main::\n+000190b0: 7374 6174 2d3e 7072 696e 7428 272d 6578 stat->print('-ex\n+000190c0: 5479 7065 7327 203d 3e20 5c25 6578 5479 Types' => \\%exTy\n+000190d0: 7065 7329 3b0a 0a23 206c 6f63 6b20 6669 pes);..# lock fi\n+000190e0: 6c65 206c c3b6 7363 6865 6e0a 6966 2028 le l..schen.if (\n+000190f0: 246c 6f63 6b46 696c 6529 0a7b 0a20 2020 $lockFile).{. \n+00019100: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00019110: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n+00019120: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => [\"r\n+00019130: 656d 6f76 696e 6720 6c6f 636b 2066 696c emoving lock fil\n+00019140: 6520 3c24 6c6f 636b 4669 6c65 3e22 5d29 e <$lockFile>\"])\n+00019150: 3b0a 2020 2020 756e 6c69 6e6b 2024 6c6f ;. unlink $lo\n+00019160: 636b 4669 6c65 3b0a 7d0a 0a69 6620 2824 ckFile;.}..if ($\n+00019170: 636f 6d70 7265 7373 4c6f 6749 6e42 6163 compressLogInBac\n+00019180: 6b75 7044 6972 2920 2020 2020 2020 2020 kupDir) \n+00019190: 2020 2020 2320 6c6f 6720 6669 6c65 2069 # log file i\n+000191a0: 6d20 4261 636b 7570 4469 7220 6e6f 6368 m BackupDir noch\n+000191b0: 0a7b 2020 2020 2020 2020 2020 2020 2020 .{ \n+000191c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000191d0: 2020 2020 2020 2020 2020 2320 6b6f 6d70 # komp\n+000191e0: 7269 6d69 6572 656e 0a20 2020 2024 7072 rimieren. $pr\n+000191f0: 4c6f 672d 3e73 7562 2827 2d70 724c 6f67 Log->sub('-prLog\n+00019200: 7327 203d 3e20 5b24 7072 4c6f 6732 5d29 s' => [$prLog2])\n+00019210: 3b0a 2020 2020 6d79 2024 636f 6d70 7265 ;. my $compre\n+00019220: 7373 4c6f 6720 3d20 666f 726b 5072 6f63 ssLog = forkProc\n+00019230: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' =>\n+00019240: 2027 627a 6970 3227 2c0a 0909 0909 2020 'bzip2',..... \n+00019250: 2020 272d 7061 7261 6d27 203d 3e20 5b24 '-param' => [$\n+00019260: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+00019270: 6c65 4e61 6d65 5d2c 0a09 0909 0920 2020 leName],..... \n+00019280: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n+00019290: 2022 2474 6d70 6469 722f 636f 6d70 724c \"$tmpdir/comprL\n+000192a0: 6f67 2d22 2c0a 0909 0909 2020 2020 272d og-\",..... '-\n+000192b0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n+000192c0: 293b 0a20 2020 2024 636f 6d70 7265 7373 );. $compress\n+000192d0: 4c6f 672d 3e77 6169 7428 293b 0a7d 0a0a Log->wait();.}..\n+000192e0: 6d79 2024 656e 6320 3d20 2470 724c 6f67 my $enc = $prLog\n+000192f0: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('-\n+00019300: 6b69 6e64 2720 3d3e 2027 5727 293b 0a6d kind' => 'W');.m\n+00019310: 7920 2453 203d 2024 656e 6320 3e20 3120 y $S = $enc > 1 \n+00019320: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL\n+00019330: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00019340: 2720 3d3e 2027 5727 2c0a 0920 2020 2020 ' => 'W',.. \n+00019350: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => [\"-- \n+00019360: 2465 6e63 2057 4152 4e49 4e47 2453 204f $enc WARNING$S O\n+00019370: 4343 5552 5245 4420 4455 5249 4e47 2054 CCURRED DURING T\n+00019380: 4845 2042 4143 4b55 5021 202d 2d22 5d29 HE BACKUP! --\"])\n+00019390: 0a20 2020 2069 6620 2465 6e63 3b0a 0a24 . if $enc;..$\n+000193a0: 656e 6320 3d20 2470 724c 6f67 2d3e 656e enc = $prLog->en\n+000193b0: 636f 756e 7465 7265 6428 272d 6b69 6e64 countered('-kind\n+000193c0: 2720 3d3e 2027 4527 293b 0a24 5320 3d20 ' => 'E');.$S = \n+000193d0: 2465 6e63 203e 2031 203f 2027 5327 203a $enc > 1 ? 'S' :\n+000193e0: 2027 273b 0a24 7072 4c6f 672d 3e70 7269 '';.$prLog->pri\n+000193f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00019400: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n+00019410: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => [\"-- $enc ER\n+00019420: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D\n+00019430: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP\n+00019440: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --\"]). if $\n+00019450: 656e 633b 0a0a 2470 724c 6f67 2d3e 7072 enc;..$prLog->pr\n+00019460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00019470: 4927 2c0a 0920 2020 2020 2027 2d73 7472 I',.. '-str\n+00019480: 2720 3d3e 205b 2273 796e 6369 6e67 202e ' => [\"syncing .\n+00019490: 2e2e 225d 293b 0a73 7973 7465 6d20 222f ..\"]);.system \"/\n+000194a0: 6269 6e2f 7379 6e63 223b 0a0a 6966 2028 bin/sync\";..if (\n+000194b0: 2470 724c 6f67 2d3e 656e 636f 756e 7465 $prLog->encounte\n+000194c0: 7265 6428 272d 6b69 6e64 2720 3d3e 2022 red('-kind' => \"\n+000194d0: 4522 2929 0a7b 0a20 2020 2024 7072 4c6f E\")).{. $prLo\n+000194e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000194f0: 203d 3e20 275a 272c 0a09 0920 2027 2d73 => 'Z',... '-s\n+00019500: 7472 2720 3d3e 205b 2262 6163 6b69 6e67 tr' => [\"backing\n+00019510: 2075 7020 6469 7265 6374 6f72 7920 3c24 up directory <$\n+00019520: 736f 7572 6365 4469 723e 2074 6f20 3c22 sourceDir> to <\"\n+00019530: 202e 0a09 0909 2020 2020 2024 6164 6d69 ..... $admi\n+00019540: 6e44 6972 732d 3e67 6574 416b 7444 6972 nDirs->getAktDir\n+00019550: 2829 202e 2022 3e22 5d29 3b0a 2020 2020 () . \">\"]);. \n+00019560: 6578 6974 2031 3b0a 7d0a 656c 7365 0a7b exit 1;.}.else.{\n+00019570: 0a20 2020 2069 6620 2824 6c69 6e6b 546f . if ($linkTo\n+00019580: 5265 6365 6e74 290a 2020 2020 7b0a 0969 Recent). {..i\n+00019590: 6620 282d 6c20 2224 7461 7267 6574 4469 f (-l \"$targetDi\n+000195a0: 722f 246c 696e 6b54 6f52 6563 656e 7422 r/$linkToRecent\"\n+000195b0: 290a 097b 0a09 2020 2020 756e 6c69 6e6b )..{.. unlink\n+000195c0: 2022 2474 6172 6765 7444 6972 2f24 6c69 \"$targetDir/$li\n+000195d0: 6e6b 546f 5265 6365 6e74 223b 0a09 7d0a nkToRecent\";..}.\n+000195e0: 0965 6c73 6966 2028 2d65 2022 2474 6172 .elsif (-e \"$tar\n+000195f0: 6765 7444 6972 2f24 6c69 6e6b 546f 5265 getDir/$linkToRe\n+00019600: 6365 6e74 2229 0a09 7b0a 0920 2020 2024 cent\")..{.. $\n+00019610: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00019620: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n+00019630: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n+00019640: 6e6e 6f74 2064 656c 6574 6520 3c24 6c69 nnot delete <$li\n+00019650: 6e6b 546f 5265 6365 6e74 3e20 2220 2e0a nkToRecent> \" ..\n+00019660: 0909 0909 2020 2020 2022 286f 7074 696f .... \"(optio\n+00019670: 6e20 6c69 6e6b 546f 5265 6365 6e74 293a n linkToRecent):\n+00019680: 2022 202e 0a09 0909 0920 2020 2020 2269 \" ...... \"i\n+00019690: 7320 6e6f 7420 6120 7379 6d62 6f6c 6963 s not a symbolic\n+000196a0: 206c 696e 6b22 5d29 3b0a 0920 2020 2024 link\"]);.. $\n+000196b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+000196c0: 696e 6427 203d 3e20 275a 272c 0a09 0909 ind' => 'Z',....\n+000196d0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => [\"ba\n+000196e0: 636b 696e 6720 7570 2064 6972 6563 746f cking up directo\n+000196f0: 7279 203c 2473 6f75 7263 6544 6972 3e20 ry <$sourceDir> \n+00019700: 746f 203c 2220 2e0a 0909 0909 2020 2020 to <\" ...... \n+00019710: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get\n+00019720: 416b 7444 6972 2829 202e 2022 3e22 5d29 AktDir() . \">\"])\n+00019730: 3b0a 0920 2020 2065 7869 7420 303b 0a09 ;.. exit 0;..\n+00019740: 7d0a 0a09 6d79 2028 245f 642c 2024 6c69 }...my ($_d, $li\n+00019750: 6e6b 2920 3d20 263a 3a73 706c 6974 4669 nk) = &::splitFi\n+00019760: 6c65 4469 7228 2461 646d 696e 4469 7273 leDir($adminDirs\n+00019770: 2d3e 6765 7441 6b74 4469 7228 2929 3b0a ->getAktDir());.\n+00019780: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00019790: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n+000197a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+000197b0: 205b 2263 616e 6e6f 7420 6372 6561 7465 [\"cannot create\n+000197c0: 2073 796d 6c69 6e6b 206c 696e 6b54 6f52 symlink linkToR\n+000197d0: 6563 656e 7420 2220 2e0a 0909 0909 2022 ecent \" ...... \"\n+000197e0: 3c24 6c69 6e6b 546f 5265 6365 6e74 3e22 <$linkToRecent>\"\n+000197f0: 5d29 0a09 2020 2020 756e 6c65 7373 2073 ]).. unless s\n+00019800: 796d 6c69 6e6b 2024 6c69 6e6b 2c20 2224 ymlink $link, \"$\n+00019810: 7461 7267 6574 4469 722f 246c 696e 6b54 targetDir/$linkT\n+00019820: 6f52 6563 656e 7422 3b0a 2020 2020 7d0a oRecent\";. }.\n+00019830: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00019840: 6e74 2827 2d6b 696e 6427 203d 3e20 275a nt('-kind' => 'Z\n+00019850: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00019860: 205b 2262 6163 6b69 6e67 2075 7020 6469 [\"backing up di\n+00019870: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source\n+00019880: 4469 723e 2074 6f20 3c22 202e 0a09 0909 Dir> to <\" .....\n+00019890: 2020 2020 2024 6164 6d69 6e44 6972 732d $adminDirs-\n+000198a0: 3e67 6574 416b 7444 6972 2829 202e 2022 >getAktDir() . \"\n+000198b0: 3e22 5d29 3b0a 2020 2020 6578 6974 2030 >\"]);. exit 0\n+000198c0: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+000198d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000198e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000198f0: 2323 2323 2323 2323 0a73 7562 2063 6c65 ########.sub cle\n+00019900: 616e 7570 0a7b 0a20 2020 206d 7920 2473 anup.{. my $s\n+00019910: 6967 6e61 6d65 203d 2073 6869 6674 3b0a igname = shift;.\n+00019920: 2020 2020 6d79 2024 6578 6974 203d 2028 my $exit = (\n+00019930: 7368 6966 7428 2920 7c7c 2031 293b 0a0a shift() || 1);..\n+00019940: 2020 2020 6d79 2028 2470 724c 6f67 2c20 my ($prLog, \n+00019950: 246f 6e6c 794c 6174 654c 696e 6b43 6865 $onlyLateLinkChe\n+00019960: 636b 2c20 246f 6c64 4669 6c65 6e61 6d65 ck, $oldFilename\n+00019970: 2c20 2461 6b74 4669 6c65 6e61 6d65 2c20 , $aktFilename, \n+00019980: 2470 6172 466f 726b 436f 7079 2c0a 0924 $parForkCopy,..$\n+00019990: 7061 7246 6f72 6b43 6f6d 7072 2c20 2474 parForkCompr, $t\n+000199a0: 6d70 6469 722c 2024 7365 7452 6573 6574 mpdir, $setReset\n+000199b0: 4469 7254 696d 6573 4669 6c65 2920 3d20 DirTimesFile) = \n+000199c0: 2840 6d61 696e 3a3a 636c 6561 6e75 7029 (@main::cleanup)\n+000199d0: 3b0a 0a20 2020 2024 6d61 696e 3a3a 656e ;.. $main::en\n+000199e0: 644f 6653 746f 7265 4261 636b 7570 203d dOfStoreBackup =\n+000199f0: 2031 3b0a 0a20 2020 2069 6620 2824 7369 1;.. if ($si\n+00019a00: 676e 616d 6529 0a20 2020 207b 0a20 2020 gname). {. \n+00019a10: 2020 2020 2024 7072 4c6f 672d 3e70 7269 $prLog->pri\n+00019a20: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00019a30: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. \n+00019a40: 2020 2020 2020 2020 2027 2d73 7472 2720 '-str' \n+00019a50: 3d3e 205b 2263 6175 6768 7420 7369 676e => [\"caught sign\n+00019a60: 616c 2024 7369 676e 616d 652c 2074 6572 al $signame, ter\n+00019a70: 6d69 6e61 7469 6e67 225d 293b 0a20 2020 minating\"]);. \n+00019a80: 207d 0a0a 2020 2020 756e 6c65 7373 2028 }.. unless (\n+00019a90: 246f 6e6c 794c 6174 654c 696e 6b43 6865 $onlyLateLinkChe\n+00019aa0: 636b 290a 2020 2020 7b0a 0923 2044 6174 ck). {..# Dat\n+00019ab0: 6569 656e 2073 6368 6c69 65c3 9f65 6e2c eien schlie..en,\n+00019ac0: 2061 7566 72c3 a475 6d65 6e0a 0924 616b aufr..umen..$ak\n+00019ad0: 7446 696c 656e 616d 652d 3e64 656c 496e tFilename->delIn\n+00019ae0: 666f 4669 6c65 2829 3b0a 0924 6f6c 6446 foFile();..$oldF\n+00019af0: 696c 656e 616d 652d 3e64 656c 4442 4d46 ilename->delDBMF\n+00019b00: 696c 6573 2829 3b20 2020 2020 2320 6462 iles(); # db\n+00019b10: 6d20 6669 6c65 7320 6cc3 b673 6368 656e m files l..schen\n+00019b20: 0a09 756e 6c69 6e6b 2024 7365 7452 6573 ..unlink $setRes\n+00019b30: 6574 4469 7254 696d 6573 4669 6c65 3b0a etDirTimesFile;.\n+00019b40: 0a09 2320 6c61 7566 656e 6465 2050 726f ..# laufende Pro\n+00019b50: 7a65 7373 6520 6162 7363 6869 65c3 9f65 zesse abschie..e\n+00019b60: 6e0a 0924 7061 7246 6f72 6b43 6f70 792d n..$parForkCopy-\n+00019b70: 3e73 6967 6e61 6c28 272d 7661 6c75 6527 >signal('-value'\n+00019b80: 203d 3e20 3229 3b0a 0924 7061 7246 6f72 => 2);..$parFor\n+00019b90: 6b43 6f6d 7072 2d3e 7369 676e 616c 2827 kCompr->signal('\n+00019ba0: 2d76 616c 7565 2720 3d3e 2032 293b 0a0a -value' => 2);..\n+00019bb0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00019bc0: 2d6b 696e 6427 203d 3e20 275a 272c 0a09 -kind' => 'Z',..\n+00019bd0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00019be0: 205b 2262 6163 6b69 6e67 2075 7020 6469 [\"backing up di\n+00019bf0: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source\n+00019c00: 4469 723e 225d 293b 0a20 2020 207d 0a0a Dir>\"]);. }..\n+00019c10: 2020 2020 6578 6974 2024 6578 6974 3b0a exit $exit;.\n+00019c20: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+00019c30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00019c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00019c50: 2323 2323 2323 0a23 0a23 2065 7863 6570 ######.#.# excep\n+00019c60: 7469 6f6e 2d4c 6973 7465 20c3 bc62 6572 tion-Liste ..ber\n+00019c70: 7072 c3bc 6665 6e20 756e 6420 6576 616c pr..fen und eval\n+00019c80: 7569 6572 656e 0a23 0a73 7562 2065 7661 uieren.#.sub eva\n+00019c90: 6c45 7863 6570 7469 6f6e 4c69 7374 0a7b lExceptionList.{\n+00019ca0: 0a20 2020 206d 7920 2465 7863 6570 7444 . my $exceptD\n+00019cb0: 6972 7320 3d20 7368 6966 743b 2020 2023 irs = shift; #\n+00019cc0: 2050 6f69 6e74 6572 2061 7566 204c 6973 Pointer auf Lis\n+00019cd0: 7465 206d 6974 2041 7573 6e61 686d 652d te mit Ausnahme-\n+00019ce0: 4469 7265 6374 6f72 6965 730a 2020 2020 Directories. \n+00019cf0: 6d79 2024 736f 7572 6365 4469 7220 3d20 my $sourceDir = \n+00019d00: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e\n+00019d10: 7863 6570 7444 6972 203d 2073 6869 6674 xceptDir = shift\n+00019d20: 3b0a 2020 2020 6d79 2024 6578 636c 7564 ;. my $exclud\n+00019d30: 696e 6720 3d20 7368 6966 743b 0a20 2020 ing = shift;. \n+00019d40: 206d 7920 2470 724c 6f67 203d 2073 6869 my $prLog = shi\n+00019d50: 6674 3b0a 0a20 2020 206d 7920 2465 3b0a ft;.. my $e;.\n+00019d60: 2020 2020 6d79 2024 666c 6167 203d 2030 my $flag = 0\n+00019d70: 3b0a 2020 2020 6d79 2028 4061 6c6c 4578 ;. my (@allEx\n+00019d80: 6365 7074 4469 7273 293b 0a20 2020 206d ceptDirs);. m\n+00019d90: 7920 246b 696e 6420 3d20 2463 6f6e 7445 y $kind = $contE\n+00019da0: 7863 6570 7444 6972 7345 7272 203f 2027 xceptDirsErr ? '\n+00019db0: 5727 203a 2027 4527 3b0a 0a20 2020 2066 W' : 'E';.. f\n+00019dc0: 6f72 6561 6368 2024 6520 2840 2465 7863 oreach $e (@$exc\n+00019dd0: 6570 7444 6972 7329 0a20 2020 207b 0a09 eptDirs). {..\n+00019de0: 6d79 2024 5f65 203d 2022 2473 6f75 7263 my $_e = \"$sourc\n+00019df0: 6544 6972 2f24 6522 3b0a 0924 5f65 203d eDir/$e\";..$_e =\n+00019e00: 7e20 732f 285c 7329 2f5c 5c24 312f 673b ~ s/(\\s)/\\\\$1/g;\n+00019e10: 0a09 6d79 2028 4061 2920 3d20 2824 5f65 ..my (@a) = ($_e\n+00019e20: 293b 0a09 6d79 2028 4065 2920 3d20 3c40 );..my (@e) = <@\n+00019e30: 613e 3b20 2020 2020 2020 2023 2077 696c a>; # wil\n+00019e40: 6463 6172 6473 2061 7566 6cc3 b673 656e dcards aufl..sen\n+00019e50: 2c20 7265 6368 7473 206d 7573 7320 4172 , rechts muss Ar\n+00019e60: 7261 7920 7374 6568 656e 0a09 756e 6c65 ray stehen..unle\n+00019e70: 7373 2028 4065 2920 2020 2020 2020 2020 ss (@e) \n+00019e80: 2020 2023 2074 6869 7320 6861 7070 656e # this happen\n+00019e90: 7320 6966 2070 6174 6820 646f 6573 206e s if path does n\n+00019ea0: 6f74 2065 7869 7374 0a09 7b0a 0920 2020 ot exist..{.. \n+00019eb0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00019ec0: 2d6b 696e 6427 203d 3e20 246b 696e 642c -kind' => $kind,\n+00019ed0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n+00019ee0: 0909 0920 205b 223c 2473 6f75 7263 6544 ... [\"<$sourceD\n+00019ef0: 6972 2f24 653e 3a20 7061 7468 206f 7220 ir/$e>: path or \n+00019f00: 7061 7474 6572 6e20 6f66 2024 6578 6365 pattern of $exce\n+00019f10: 7074 4469 7220 2220 2e0a 0909 0920 2020 ptDir \" ..... \n+00019f20: 2264 6f65 7320 6e6f 7420 6578 6973 7422 \"does not exist\"\n+00019f30: 5d29 3b0a 0920 2020 2024 666c 6167 203d ]);.. $flag =\n+00019f40: 2031 3b0a 097d 0a09 2840 6129 203d 2028 1;..}..(@a) = (\n+00019f50: 293b 2020 2020 2020 2020 2020 2020 2023 ); #\n+00019f60: 2077 6972 6420 6a65 747a 7420 7a75 6d20 wird jetzt zum \n+00019f70: 4175 6673 616d 6d65 6c6e 2076 6572 7765 Aufsammeln verwe\n+00019f80: 6e64 6574 0a09 6d79 2024 6531 3b0a 0966 ndet..my $e1;..f\n+00019f90: 6f72 6561 6368 2024 6531 2028 4065 290a oreach $e1 (@e).\n+00019fa0: 097b 0a09 2020 2020 6e65 7874 2075 6e6c .{.. next unl\n+00019fb0: 6573 7320 2d6c 2024 6531 206f 7220 2d64 ess -l $e1 or -d\n+00019fc0: 2024 6531 3b0a 0a09 2020 2020 6d79 2024 $e1;... my $\n+00019fd0: 6120 3d20 263a 3a61 6273 6f6c 7574 6550 a = &::absoluteP\n+00019fe0: 6174 6828 2465 3129 3b0a 0920 2020 2069 ath($e1);.. i\n+00019ff0: 6620 2824 6129 0a09 2020 2020 7b0a 0909 f ($a).. {...\n+0001a000: 7075 7368 2040 612c 2024 613b 0a09 2020 push @a, $a;.. \n+0001a010: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. \n+0001a020: 2020 207b 0a09 0924 666c 6167 203d 2031 {...$flag = 1\n+0001a030: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin\n+0001a040: 7428 272d 6b69 6e64 2720 3d3e 2024 6b69 t('-kind' => $ki\n+0001a050: 6e64 2c0a 0909 0920 2020 2020 2027 2d73 nd,.... '-s\n+0001a060: 7472 2720 3d3e 205b 2224 6578 6365 7074 tr' => [\"$except\n+0001a070: 4469 7220 3c24 6531 3e20 646f 6573 206e Dir <$e1> does n\n+0001a080: 6f74 2065 7869 7374 225d 290a 0909 2020 ot exist\"])... \n+0001a090: 2020 6966 2024 7072 4c6f 673b 0a20 2020 if $prLog;. \n+0001a0a0: 2020 2020 2020 2020 2020 2020 206e 6578 nex\n+0001a0b0: 743b 0a09 2020 2020 7d0a 097d 0a09 756e t;.. }..}..un\n+0001a0c0: 6c65 7373 2028 4061 290a 097b 0a09 2020 less (@a)..{.. \n+0001a0d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+0001a0e0: 272d 6b69 6e64 2720 3d3e 2024 6b69 6e64 '-kind' => $kind\n+0001a0f0: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n+0001a100: 205b 226e 6f20 6469 7265 6374 6f72 7920 [\"no directory \n+0001a110: 7265 7375 6c74 696e 6720 6672 6f6d 2022 resulting from \"\n+0001a120: 202e 0a09 0909 0920 2020 2020 2270 6174 ...... \"pat\n+0001a130: 7465 726e 203c 2465 3e22 5d29 3b0a 0920 tern <$e>\"]);.. \n+0001a140: 2020 2024 666c 6167 203d 2031 3b0a 2020 $flag = 1;. \n+0001a150: 2020 2020 2020 2020 2020 6e65 7874 3b0a next;.\n+0001a160: 097d 0a09 7075 7368 2040 616c 6c45 7863 .}..push @allExc\n+0001a170: 6570 7444 6972 732c 2040 613b 0a09 6966 eptDirs, @a;..if\n+0001a180: 2028 4065 203d 3d20 3120 616e 6420 2461 (@e == 1 and $a\n+0001a190: 5b30 5d20 6571 2024 6529 0a09 7b0a 0920 [0] eq $e)..{.. \n+0001a1a0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+0001a1b0: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n+0001a1c0: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n+0001a1d0: 5b22 2465 7863 6c75 6469 6e67 203c 2461 [\"$excluding <$a\n+0001a1e0: 5b30 5d3e 225d 290a 0909 6966 2024 7072 [0]>\"])...if $pr\n+0001a1f0: 4c6f 673b 0a09 7d0a 0965 6c73 6966 2028 Log;..}..elsif (\n+0001a200: 4061 2021 3d20 3029 0a09 7b0a 0920 2020 @a != 0)..{.. \n+0001a210: 206d 7920 2840 702c 2024 7029 3b0a 0920 my (@p, $p);.. \n+0001a220: 2020 2066 6f72 6561 6368 2024 7020 2840 foreach $p (@\n+0001a230: 6129 0a09 2020 2020 7b0a 0909 7075 7368 a).. {...push\n+0001a240: 2040 702c 2022 2020 2020 2465 7863 6c75 @p, \" $exclu\n+0001a250: 6469 6e67 203c 2470 3e22 3b0a 0920 2020 ding <$p>\";.. \n+0001a260: 207d 0a09 2020 2020 2470 724c 6f67 2d3e }.. $prLog->\n+0001a270: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+0001a280: 2027 4927 2c0a 0909 0920 2027 2d73 7472 'I',.... '-str\n+0001a290: 2720 3d3e 205b 2224 6578 636c 7564 696e ' => [\"$excludin\n+0001a2a0: 6720 3c24 653e 3a22 2c20 4070 5d29 0a09 g <$e>:\", @p])..\n+0001a2b0: 0969 6620 2470 724c 6f67 3b0a 097d 0a20 .if $prLog;..}. \n+0001a2c0: 2020 207d 0a20 2020 2069 6620 2824 666c }. if ($fl\n+0001a2d0: 6167 2061 6e64 206e 6f74 2024 636f 6e74 ag and not $cont\n+0001a2e0: 4578 6365 7074 4469 7273 4572 7229 0a20 ExceptDirsErr). \n+0001a2f0: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr\n+0001a300: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+0001a310: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n+0001a320: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => [\"exiting\"\n+0001a330: 5d29 0a09 2020 2020 6966 2024 7072 4c6f ]).. if $prLo\n+0001a340: 673b 0a09 6578 6974 2031 3b0a 2020 2020 g;..exit 1;. \n+0001a350: 7d0a 2020 2020 7265 7475 726e 2028 4061 }. return (@a\n+0001a360: 6c6c 4578 6365 7074 4469 7273 293b 0a7d llExceptDirs);.}\n+0001a370: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+0001a380: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001a390: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+0001a3a0: 6361 6c63 426c 6f63 6b4d 4435 5375 6d73 calcBlockMD5Sums\n+0001a3b0: 0a7b 0a20 2020 206d 7920 2473 6f75 7263 .{. my $sourc\n+0001a3c0: 6544 6972 203d 2073 6869 6674 3b0a 2020 eDir = shift;. \n+0001a3d0: 2020 6d79 2024 7461 7267 6574 4469 7220 my $targetDir \n+0001a3e0: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n+0001a3f0: 2472 656c 5061 7468 203d 2073 6869 6674 $relPath = shift\n+0001a400: 3b20 2020 2020 2020 2020 2023 2072 656c ; # rel\n+0001a410: 6174 6976 6520 7061 7468 2069 6e20 6261 ative path in ba\n+0001a420: 636b 7570 2069 6e63 6c2e 2066 696c 650a ckup incl. file.\n+0001a430: 2020 2020 6d79 2024 626c 6f63 6b53 697a my $blockSiz\n+0001a440: 6520 3d20 7368 6966 743b 0a20 2020 206d e = shift;. m\n+0001a450: 7920 2463 6f6d 7072 6573 7342 6c6f 636b y $compressBlock\n+0001a460: 203d 2073 6869 6674 3b20 2020 2023 2027 = shift; # '\n+0001a470: 6327 206f 6465 7220 2775 2720 2863 6f6d c' oder 'u' (com\n+0001a480: 7072 6573 732c 2075 6e63 6f6d 7072 6573 press, uncompres\n+0001a490: 7329 0a20 2020 206d 7920 2462 6c6f 636b s). my $block\n+0001a4a0: 5265 6164 203d 2073 6869 6674 3b20 2020 Read = shift; \n+0001a4b0: 2020 2020 2023 2070 6f69 6e74 6572 2074 # pointer t\n+0001a4c0: 6f20 6c69 7374 0a20 2020 206d 7920 2463 o list. my $c\n+0001a4d0: 6f6d 7072 6573 7343 6f6d 6d61 6e64 203d ompressCommand =\n+0001a4e0: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $\n+0001a4f0: 636f 6d70 7265 7373 4f70 7469 6f6e 7320 compressOptions \n+0001a500: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n+0001a510: 2470 6f73 7466 6978 203d 2073 6869 6674 $postfix = shift\n+0001a520: 3b0a 2020 2020 6d79 2024 6f6c 6446 696c ;. my $oldFil\n+0001a530: 656e 616d 6520 3d20 7368 6966 743b 2020 ename = shift; \n+0001a540: 2020 2020 2320 706f 696e 7465 7220 746f # pointer to\n+0001a550: 206f 626a 6563 740a 2020 2020 6d79 2024 object. my $\n+0001a560: 6c61 7465 4c69 6e6b 7320 3d20 7368 6966 lateLinks = shif\n+0001a570: 743b 0a20 2020 206d 7920 246c 6174 6543 t;. my $lateC\n+0001a580: 6f6d 7072 6573 7320 3d20 7368 6966 743b ompress = shift;\n+0001a590: 0a20 2020 206d 7920 246e 6f43 6f6d 7072 . my $noCompr\n+0001a5a0: 6573 7320 3d20 7368 6966 743b 0a20 2020 ess = shift;. \n+0001a5b0: 206d 7920 2470 724c 6f67 203d 2073 6869 my $prLog = shi\n+0001a5c0: 6674 3b0a 2020 2020 6d79 2024 746d 7066 ft;. my $tmpf\n+0001a5d0: 696c 6520 3d20 7368 6966 743b 0a20 2020 ile = shift;. \n+0001a5e0: 206d 7920 2462 6c6f 636b 4368 6563 6b53 my $blockCheckS\n+0001a5f0: 756d 4669 6c65 203d 2073 6869 6674 3b0a umFile = shift;.\n+0001a600: 2020 2020 6d79 2024 6374 696d 6520 3d20 my $ctime = \n+0001a610: 7368 6966 743b 0a20 2020 206d 7920 246d shift;. my $m\n+0001a620: 7469 6d65 203d 2073 6869 6674 3b0a 0a23 time = shift;..#\n+0001a630: 7072 696e 7420 2263 616c 634d 4435 426c print \"calcMD5Bl\n+0001a640: 6f63 6b53 756d 735c 6e22 3b0a 2370 7269 ockSums\\n\";.#pri\n+0001a650: 6e74 2022 5c74 736f 7572 6365 4469 7220 nt \"\\tsourceDir \n+0001a660: 3d20 3c24 736f 7572 6365 4469 723e 5c6e = <$sourceDir>\\n\n+0001a670: 223b 0a23 7072 696e 7420 225c 7474 6172 \";.#print \"\\ttar\n+0001a680: 6765 7444 6972 203d 203c 2474 6172 6765 getDir = <$targe\n+0001a690: 7444 6972 3e5c 6e22 3b0a 2370 7269 6e74 tDir>\\n\";.#print\n+0001a6a0: 2022 5c74 7265 6c50 6174 6820 3d20 3c24 \"\\trelPath = <$\n+0001a6b0: 7265 6c50 6174 683e 5c6e 223b 0a23 7072 relPath>\\n\";.#pr\n+0001a6c0: 696e 7420 225c 7462 6c6f 636b 5369 7a65 int \"\\tblockSize\n+0001a6d0: 203d 203c 2462 6c6f 636b 5369 7a65 3e5c = <$blockSize>\\\n+0001a6e0: 6e22 3b0a 2370 7269 6e74 2022 5c74 746d n\";.#print \"\\ttm\n+0001a6f0: 7066 696c 6520 3d20 3c24 746d 7066 696c pfile = <$tmpfil\n+0001a700: 653e 5c6e 223b 0a23 7072 696e 7420 225c e>\\n\";.#print \"\\\n+0001a710: 7463 6f6d 7072 6573 7342 6c6f 636b 203d tcompressBlock =\n+0001a720: 203c 2463 6f6d 7072 6573 7342 6c6f 636b <$compressBlock\n+0001a730: 3e5c 6e22 3b0a 2370 7269 6e74 2022 5c74 >\\n\";.#print \"\\t\n+0001a740: 6c61 7465 436f 6d70 7265 7373 203d 203c lateCompress = <\n+0001a750: 246c 6174 6543 6f6d 7072 6573 733e 5c6e $lateCompress>\\n\n+0001a760: 223b 0a0a 2020 2020 2430 203d 2022 7065 \";.. $0 = \"pe\n+0001a770: 726c 6d64 3562 6c6f 636b 2024 7265 6c50 rlmd5block $relP\n+0001a780: 6174 6822 3b0a 0a20 2020 2023 2065 7870 ath\";.. # exp\n+0001a790: 6c61 6e61 7469 6f6e 733a 0a20 2020 2023 lanations:. #\n+0001a7a0: 2320 246c 6174 654c 696e 6b73 0a20 2020 # $lateLinks. \n+0001a7b0: 2023 2320 2069 6620 6465 6669 6e65 642c ## if defined,\n+0001a7c0: 2077 7269 7465 206c 6174 654c 696e 6b73 write lateLinks\n+0001a7d0: 0a20 2020 2023 2320 246c 6174 6543 6f6d . ## $lateCom\n+0001a7e0: 7072 6573 730a 2020 2020 2323 2020 6672 press. ## fr\n+0001a7f0: 6f6d 206f 7074 696f 6e0a 2020 2020 2323 om option. ##\n+0001a800: 2024 6469 7265 6374 0a20 2020 2023 2320 $direct. ## \n+0001a810: 203d 3d20 3020 2d3e 2066 6f72 6b20 666f == 0 -> fork fo\n+0001a820: 7220 636f 6d70 7265 7373 696f 6e20 2f20 r compression / \n+0001a830: 3d3d 2031 202d 3e20 636f 6d70 7265 7373 == 1 -> compress\n+0001a840: 2069 6e20 7065 726c 0a0a 2020 2020 246c in perl.. $l\n+0001a850: 6174 6543 6f6d 7072 6573 7320 3d20 756e ateCompress = un\n+0001a860: 6465 6620 6966 2024 636f 6d70 7265 7373 def if $compress\n+0001a870: 426c 6f63 6b20 6571 2027 7527 3b20 2023 Block eq 'u'; #\n+0001a880: 206d 7573 7420 6e6f 7420 6265 2063 6f6d must not be com\n+0001a890: 7072 6573 7365 640a 0a20 2020 206d 7920 pressed.. my \n+0001a8a0: 2824 6e6f 5761 726e 696e 6773 2c20 246e ($noWarnings, $n\n+0001a8b0: 6f45 7272 6f72 7329 203d 2028 302c 2030 oErrors) = (0, 0\n+0001a8c0: 293b 0a0a 2020 2020 6d79 2024 6d6b 6469 );.. my $mkdi\n+0001a8d0: 724c 6174 654c 696e 6b73 4669 6c65 5061 rLateLinksFilePa\n+0001a8e0: 7468 203d 2075 6e64 6566 3b0a 2020 2020 th = undef;. \n+0001a8f0: 6c6f 6361 6c20 282a 4649 4c45 2c20 2a4f local (*FILE, *O\n+0001a900: 5554 293b 0a20 2020 206d 7920 2466 696c UT);. my $fil\n+0001a910: 6549 6e20 3d20 756e 6465 663b 2020 2020 eIn = undef; \n+0001a920: 2320 7573 6564 2074 6f20 7265 6164 2076 # used to read v\n+0001a930: 6961 2070 6970 6520 2866 696c 7465 7229 ia pipe (filter)\n+0001a940: 0a20 2020 2069 6620 2840 2462 6c6f 636b . if (@$block\n+0001a950: 5265 6164 2920 2020 2320 2462 6c6f 636b Read) # $block\n+0001a960: 5265 6164 203d 2070 6f69 6e74 6572 2074 Read = pointer t\n+0001a970: 6f20 7072 6f67 7261 6d20 746f 2070 6970 o program to pip\n+0001a980: 6520 696e 2062 6c6f 636b 2074 6f20 7265 e in block to re\n+0001a990: 6164 0a20 2020 207b 0a09 6d79 2028 2470 ad. {..my ($p\n+0001a9a0: 726f 672c 2040 7061 7229 203d 2028 4024 rog, @par) = (@$\n+0001a9b0: 626c 6f63 6b52 6561 6429 3b0a 096d 7920 blockRead);..my \n+0001a9c0: 2840 7029 3b0a 0969 6620 2824 6374 696d (@p);..if ($ctim\n+0001a9d0: 6520 3d3d 2030 2920 2020 2020 2020 2020 e == 0) \n+0001a9e0: 2020 2020 2020 2320 6465 7669 6365 0a09 # device..\n+0001a9f0: 7b0a 0920 2020 2028 4070 2920 3d20 2827 {.. (@p) = ('\n+0001aa00: 2d73 7464 6572 7227 203d 3e20 272f 6465 -stderr' => '/de\n+0001aa10: 762f 6e75 6c6c 2729 3b0a 097d 0a09 656c v/null');..}..el\n+0001aa20: 7365 2020 2020 2320 626c 6f63 6b65 6420 se # blocked \n+0001aa30: 6669 6c65 0a09 7b0a 0920 2020 2028 4070 file..{.. (@p\n+0001aa40: 2920 3d20 2827 2d6f 7574 5261 6e64 6f6d ) = ('-outRandom\n+0001aa50: 2720 3d3e 2027 2f74 6d70 2f73 7462 7550 ' => '/tmp/stbuP\n+0001aa60: 6970 6546 726f 6d31 302d 2729 3b0a 097d ipeFrom10-');..}\n+0001aa70: 0a09 2466 696c 6549 6e20 3d20 7069 7065 ..$fileIn = pipe\n+0001aa80: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('-\n+0001aa90: 6578 6563 2720 3d3e 2024 7072 6f67 2c0a exec' => $prog,.\n+0001aaa0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n+0001aab0: 203d 3e20 5c40 7061 722c 0a09 0909 0920 => \\@par,..... \n+0001aac0: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $\n+0001aad0: 736f 7572 6365 4469 722c 0a09 0909 0920 sourceDir,..... \n+0001aae0: 2020 2040 702c 0a09 0909 0920 2020 2027 @p,..... '\n+0001aaf0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n+0001ab00: 6729 3b0a 0a20 2020 207d 0a20 2020 2065 g);.. }. e\n+0001ab10: 6c73 650a 2020 2020 7b0a 0975 6e6c 6573 lse. {..unles\n+0001ab20: 7320 2873 7973 6f70 656e 2846 494c 452c s (sysopen(FILE,\n+0001ab30: 2024 736f 7572 6365 4469 722c 204f 5f52 $sourceDir, O_R\n+0001ab40: 444f 4e4c 5929 290a 097b 0a09 2020 2020 DONLY))..{.. \n+0001ab50: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0001ab60: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+0001ab70: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => [\"c\n+0001ab80: 616e 6e6f 7420 6f70 656e 203c 2473 6f75 annot open <$sou\n+0001ab90: 7263 6544 6972 3e22 5d2c 0a09 0909 2020 rceDir>\"],.... \n+0001aba0: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL\n+0001abb0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 293b E__, __LINE__]);\n+0001abc0: 0a09 2020 2020 2b2b 246e 6f45 7272 6f72 .. ++$noError\n+0001abd0: 733b 0a09 2020 2020 7265 7475 726e 2030 s;.. return 0\n+0001abe0: 3b0a 097d 0a20 2020 207d 0a0a 2020 2020 ;..}. }.. \n+0001abf0: 6d79 2024 6d64 3541 6c6c 203d 2044 6967 my $md5All = Dig\n+0001ac00: 6573 743a 3a4d 4435 2d3e 6e65 7728 293b est::MD5->new();\n+0001ac10: 0a20 2020 206d 7920 2462 6c6f 636b 4e6f . my $blockNo\n+0001ac20: 203d 2030 3b0a 2020 2020 6d79 2024 6275 = 0;. my $bu\n+0001ac30: 6666 6572 3b0a 2020 2020 6d79 2028 406e ffer;. my (@n\n+0001ac40: 6577 4d44 356c 696e 6529 203d 2028 293b ewMD5line) = ();\n+0001ac50: 0a20 2020 206d 7920 2824 7374 6174 5369 . my ($statSi\n+0001ac60: 7a65 4f72 6967 2c20 2473 7461 7453 697a zeOrig, $statSiz\n+0001ac70: 654e 6577 2c20 2473 7461 744e 6f46 6f72 eNew, $statNoFor\n+0001ac80: 6b73 4350 2c20 2473 7461 744e 6f46 6f72 ksCP, $statNoFor\n+0001ac90: 6b73 436f 6d70 7265 7373 2c0a 0924 7374 ksCompress,..$st\n+0001aca0: 6174 4e6f 4c61 7465 4c69 6e6b 732c 2024 atNoLateLinks, $\n+0001acb0: 6e29 203d 2028 302c 2030 2c20 302c 2030 n) = (0, 0, 0, 0\n+0001acc0: 2c20 302c 2030 293b 0a0a 2020 2020 6d79 , 0, 0);.. my\n+0001acd0: 2024 7061 7261 6c46 6f72 6b20 3d20 7061 $paralFork = pa\n+0001ace0: 7261 6c6c 656c 466f 726b 2d3e 6e65 7728 rallelFork->new(\n+0001acf0: 272d 6d61 7850 6172 616c 6c65 6c27 203d '-maxParallel' =\n+0001ad00: 3e20 246e 6f43 6f6d 7072 6573 732c 0a09 > $noCompress,..\n+0001ad10: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog\n+0001ad20: 2720 3d3e 2024 7072 4c6f 6729 3b0a 2020 ' => $prLog);. \n+0001ad30: 2020 6d79 2024 7469 6e79 5363 6865 6420 my $tinySched \n+0001ad40: 3d20 7469 6e79 5761 6974 5363 6865 6475 = tinyWaitSchedu\n+0001ad50: 6c65 722d 3e6e 6577 2827 2d70 724c 6f67 ler->new('-prLog\n+0001ad60: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a20 ' => $prLog);.. \n+0001ad70: 2020 206d 7920 2464 6972 6563 7420 3d20 my $direct = \n+0001ad80: 303b 2020 2020 2320 3d3d 2031 202d 3e20 0; # == 1 -> \n+0001ad90: 646f 206e 6f74 2066 6f72 6b20 666f 7220 do not fork for \n+0001ada0: 636f 6d70 7265 7373 696f 6e0a 2020 2020 compression. \n+0001adb0: 2464 6972 6563 7420 3d20 3120 6966 2024 $direct = 1 if $\n+0001adc0: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq\n+0001add0: 2027 7527 3b0a 2020 2020 2464 6972 6563 'u';. $direc\n+0001ade0: 7420 3d20 3120 6966 2024 6d61 696e 3a3a t = 1 if $main::\n+0001adf0: 494f 436f 6d70 7265 7373 4469 7265 6374 IOCompressDirect\n+0001ae00: 0a09 616e 6420 2462 6c6f 636b 5369 7a65 ..and $blockSize\n+0001ae10: 203c 2024 6d61 696e 3a3a 6d69 6e43 6f70 < $main::minCop\n+0001ae20: 7957 6974 6846 6f72 6b0a 0961 6e64 2024 yWithFork..and $\n+0001ae30: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq\n+0001ae40: 2027 6327 3b0a 2370 7269 6e74 2022 6469 'c';.#print \"di\n+0001ae50: 7265 6374 203d 203c 2464 6972 6563 743e rect = <$direct>\n+0001ae60: 5c6e 223b 0a0a 2020 2020 6d79 2024 6a6f \\n\";.. my $jo\n+0001ae70: 6254 6f44 6f20 3d20 313b 0a20 2020 206d bToDo = 1;. m\n+0001ae80: 7920 2470 6172 466f 726b 546f 446f 203d y $parForkToDo =\n+0001ae90: 2030 3b0a 0a20 2020 2075 6e6c 6573 7320 0;.. unless \n+0001aea0: 286f 7065 6e28 4f55 542c 2022 3e22 2c20 (open(OUT, \">\", \n+0001aeb0: 2474 6d70 6669 6c65 2929 0a20 2020 207b $tmpfile)). {\n+0001aec0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+0001aed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+0001aee0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+0001aef0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > [\"cannot open \n+0001af00: 7465 6d70 6f72 6172 7920 6669 6c65 203c temporary file <\n+0001af10: 2474 6d70 6669 6c65 3e22 5d29 3b0a 092b $tmpfile>\"]);..+\n+0001af20: 2b24 6e6f 4572 726f 7273 3b0a 0972 6574 +$noErrors;..ret\n+0001af30: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; \n+0001af40: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+0001af50: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. \n+0001af60: 2020 7768 696c 6520 2824 6a6f 6254 6f44 while ($jobToD\n+0001af70: 6f20 3e20 3020 6f72 2024 7061 7246 6f72 o > 0 or $parFor\n+0001af80: 6b54 6f44 6f20 3e20 3029 0a20 2020 207b kToDo > 0). {\n+0001af90: 0a23 7072 696e 7420 222d 2d2d 206a 6f62 .#print \"--- job\n+0001afa0: 546f 446f 3d24 6a6f 6254 6f44 6f20 2d2d ToDo=$jobToDo --\n+0001afb0: 2070 6172 466f 726b 546f 446f 3d24 7061 parForkToDo=$pa\n+0001afc0: 7246 6f72 6b54 6f44 6f20 2d2d 2d5c 6e22 rForkToDo ---\\n\"\n+0001afd0: 3b0a 0923 2323 2323 2323 2323 2323 2323 ;..#############\n+0001afe0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001aff0: 0a09 6d79 2024 6f6c 6420 3d20 2470 6172 ..my $old = $par\n+0001b000: 616c 466f 726b 2d3e 6368 6563 6b4f 6e65 alFork->checkOne\n+0001b010: 2829 3b0a 0969 6620 2824 6f6c 6429 0a09 ();..if ($old)..\n+0001b020: 7b0a 0920 2020 206d 7920 2824 6469 6765 {.. my ($dige\n+0001b030: 7374 2c20 2466 696c 652c 2024 706f 7374 st, $file, $post\n+0001b040: 6669 7829 203d 2040 7b24 6f6c 642d 3e67 fix) = @{$old->g\n+0001b050: 6574 2827 2d77 6861 7427 203d 3e20 2769 et('-what' => 'i\n+0001b060: 6e66 6f27 297d 3b0a 0920 2020 2024 7374 nfo')};.. $st\n+0001b070: 6174 5369 7a65 4e65 7720 2b3d 2028 7374 atSizeNew += (st\n+0001b080: 6174 2822 2474 6172 6765 7444 6972 2f24 at(\"$targetDir/$\n+0001b090: 6669 6c65 2470 6f73 7466 6978 2229 295b file$postfix\"))[\n+0001b0a0: 375d 3b0a 2370 7269 6e74 2022 2d31 2d20 7];.#print \"-1- \n+0001b0b0: 6d64 3520 2466 696c 6520 2470 6f73 7466 md5 $file $postf\n+0001b0c0: 6978 5c6e 223b 0a09 7d0a 0a09 2323 2323 ix\\n\";..}...####\n+0001b0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001b0e0: 2323 2323 2323 2323 230a 2370 7269 6e74 #########.#print\n+0001b0f0: 2022 6a6f 6254 6f44 6f20 3d20 3c24 6a6f \"jobToDo = <$jo\n+0001b100: 6254 6f44 6f3e 2c20 6672 6565 456e 7472 bToDo>, freeEntr\n+0001b110: 6965 7320 3d20 3c22 2c20 2470 6172 616c ies = <\", $paral\n+0001b120: 466f 726b 2d3e 6765 744e 6f46 7265 6545 Fork->getNoFreeE\n+0001b130: 6e74 7269 6573 2829 2c20 223e 5c6e 223b ntries(), \">\\n\";\n+0001b140: 0a09 6966 2028 246a 6f62 546f 446f 203e ..if ($jobToDo >\n+0001b150: 2030 2061 6e64 2024 7061 7261 6c46 6f72 0 and $paralFor\n+0001b160: 6b2d 3e67 6574 4e6f 4672 6565 456e 7472 k->getNoFreeEntr\n+0001b170: 6965 7328 2920 3e20 3029 0a09 7b0a 0920 ies() > 0)..{.. \n+0001b180: 2020 2069 6620 2824 6669 6c65 496e 290a if ($fileIn).\n+0001b190: 0920 2020 207b 0a09 0924 6e20 3d20 2466 . {...$n = $f\n+0001b1a0: 696c 6549 6e2d 3e73 7973 7265 6164 285c ileIn->sysread(\\\n+0001b1b0: 2462 7566 6665 722c 2024 626c 6f63 6b53 $buffer, $blockS\n+0001b1c0: 697a 6529 3b0a 0920 2020 207d 0a09 2020 ize);.. }.. \n+0001b1d0: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {...\n+0001b1e0: 246e 203d 2073 7973 7265 6164 2846 494c $n = sysread(FIL\n+0001b1f0: 452c 2024 6275 6666 6572 2c20 2462 6c6f E, $buffer, $blo\n+0001b200: 636b 5369 7a65 293b 0a09 2020 2020 7d0a ckSize);.. }.\n+0001b210: 0a09 2020 2020 6966 2028 246e 290a 0920 .. if ($n).. \n+0001b220: 2020 207b 0a09 0924 7374 6174 5369 7a65 {...$statSize\n+0001b230: 4f72 6967 202b 3d20 246e 3b0a 0909 2462 Orig += $n;...$b\n+0001b240: 6c6f 636b 4e6f 2b2b 3b0a 0909 6d79 2024 lockNo++;...my $\n+0001b250: 626c 6f63 6b4e 616d 6520 3d20 7370 7269 blockName = spri\n+0001b260: 6e74 6620 2225 3031 3064 222c 2024 626c ntf \"%010d\", $bl\n+0001b270: 6f63 6b4e 6f3b 0a09 096d 7920 2462 6c6f ockNo;...my $blo\n+0001b280: 636b 4669 6c65 203d 2022 2472 656c 5061 ckFile = \"$relPa\n+0001b290: 7468 2f24 626c 6f63 6b4e 616d 6522 3b0a th/$blockName\";.\n+0001b2a0: 0909 6d79 2024 6469 6765 7374 203d 206d ..my $digest = m\n+0001b2b0: 6435 5f68 6578 2824 6275 6666 6572 293b d5_hex($buffer);\n+0001b2c0: 0a09 0924 6d64 3541 6c6c 2d3e 6164 6428 ...$md5All->add(\n+0001b2d0: 2462 7566 6665 7229 3b0a 2370 7269 6e74 $buffer);.#print\n+0001b2e0: 2022 2d32 2d20 2462 6c6f 636b 4e61 6d65 \"-2- $blockName\n+0001b2f0: 202d 3e20 6469 6765 7374 203d 2024 6469 -> digest = $di\n+0001b300: 6765 7374 2028 246e 2062 7974 6573 295c gest ($n bytes)\\\n+0001b310: 6e22 3b0a 0909 6d79 2028 2465 7869 7374 n\";...my ($exist\n+0001b320: 696e 6746 696c 652c 2024 636f 6d70 722c ingFile, $compr,\n+0001b330: 2024 6e31 293b 0a09 0969 6620 2824 6e31 $n1);...if ($n1\n+0001b340: 203d 2028 2824 636f 6d70 722c 2024 6578 = (($compr, $ex\n+0001b350: 6973 7469 6e67 4669 6c65 2920 3d0a 0909 istingFile) =...\n+0001b360: 0920 2020 246f 6c64 4669 6c65 6e61 6d65 . $oldFilename\n+0001b370: 2d3e 6765 7442 6c6f 636b 4669 6c65 6e61 ->getBlockFilena\n+0001b380: 6d65 436f 6d70 7228 2464 6967 6573 7429 meCompr($digest)\n+0001b390: 2929 0a09 097b 2020 2020 2020 2020 2020 ))...{ \n+0001b3a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001b3b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0001b3c0: 2320 626c 6f63 6b20 6578 6973 7473 0a09 # block exists..\n+0001b3d0: 0920 2020 2024 626c 6f63 6b46 696c 6520 . $blockFile \n+0001b3e0: 2e3d 2024 706f 7374 6669 7820 6966 2024 .= $postfix if $\n+0001b3f0: 636f 6d70 7220 6571 2027 6327 3b0a 0a09 compr eq 'c';...\n+0001b400: 0920 2020 2070 7573 6820 406e 6577 4d44 . push @newMD\n+0001b410: 356c 696e 652c 2022 2464 6967 6573 7420 5line, \"$digest \n+0001b420: 2463 6f6d 7072 2024 626c 6f63 6b46 696c $compr $blockFil\n+0001b430: 6522 3b0a 2370 7269 6e74 2022 2d31 302d e\";.#print \"-10-\n+0001b440: 2028 2464 6967 6573 7429 206c 696e 6b20 ($digest) link \n+0001b450: 2d3e 2024 6578 6973 7469 6e67 4669 6c65 -> $existingFile\n+0001b460: 202d 3e20 2474 6172 6765 7444 6972 2f24 -> $targetDir/$\n+0001b470: 626c 6f63 6b46 696c 655c 6e22 3b0a 0909 blockFile\\n\";...\n+0001b480: 2020 2020 6966 2028 246c 6174 654c 696e if ($lateLin\n+0001b490: 6b73 290a 0909 2020 2020 7b0a 0909 0969 ks)... {....i\n+0001b4a0: 6620 286e 6f74 2024 6d6b 6469 724c 6174 f (not $mkdirLat\n+0001b4b0: 654c 696e 6b73 4669 6c65 5061 7468 290a eLinksFilePath).\n+0001b4c0: 0909 097b 0a09 0909 2020 2020 263a 3a6d ...{.... &::m\n+0001b4d0: 616b 6546 696c 6550 6174 6828 2224 7461 akeFilePath(\"$ta\n+0001b4e0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi\n+0001b4f0: 6c65 222c 2024 7072 4c6f 6729 3b0a 0909 le\", $prLog);...\n+0001b500: 0920 2020 2024 6d6b 6469 724c 6174 654c . $mkdirLateL\n+0001b510: 696e 6b73 4669 6c65 5061 7468 203d 2031 inksFilePath = 1\n+0001b520: 3b0a 0909 097d 0a09 0909 7072 696e 7420 ;....}....print \n+0001b530: 4f55 5420 226c 696e 6b20 2464 6967 6573 OUT \"link $diges\n+0001b540: 745c 6e24 6578 6973 7469 6e67 4669 6c65 t\\n$existingFile\n+0001b550: 5c6e 2474 6172 6765 7444 6972 2f24 626c \\n$targetDir/$bl\n+0001b560: 6f63 6b46 696c 655c 6e22 3b0a 0909 092b ockFile\\n\";....+\n+0001b570: 2b24 7374 6174 4e6f 4c61 7465 4c69 6e6b +$statNoLateLink\n+0001b580: 733b 0a09 0920 2020 207d 0a09 0920 2020 s;... }... \n+0001b590: 2065 6c73 650a 0909 2020 2020 7b0a 0909 else... {...\n+0001b5a0: 0975 6e6c 6573 7320 2826 3a3a 7761 6974 .unless (&::wait\n+0001b5b0: 466f 7246 696c 6528 2465 7869 7374 696e ForFile($existin\n+0001b5c0: 6746 696c 6529 206f 720a 0909 0909 6c69 gFile) or.....li\n+0001b5d0: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile\n+0001b5e0: 2c20 2224 7461 7267 6574 4469 722f 2462 , \"$targetDir/$b\n+0001b5f0: 6c6f 636b 4669 6c65 2229 0a09 0909 7b0a lockFile\")....{.\n+0001b600: 0909 0920 2020 203a 3a63 6f70 794f 6e65 ... ::copyOne\n+0001b610: 426c 6f63 6b28 2462 7566 6665 722c 2022 Block($buffer, \"\n+0001b620: 2474 6172 6765 7444 6972 2f24 7265 6c50 $targetDir/$relP\n+0001b630: 6174 682f 2462 6c6f 636b 4e61 6d65 222c ath/$blockName\",\n+0001b640: 0a09 0909 0909 2020 2024 7072 4c6f 6729 ...... $prLog)\n+0001b650: 3b0a 0909 0920 2020 2024 7374 6174 5369 ;.... $statSi\n+0001b660: 7a65 4e65 7720 2b3d 2028 7374 6174 2822 zeNew += (stat(\"\n+0001b670: 2474 6172 6765 7444 6972 2f24 7265 6c50 $targetDir/$relP\n+0001b680: 6174 682f 2462 6c6f 636b 4e61 6d65 2229 ath/$blockName\")\n+0001b690: 295b 375d 3b0a 0a09 0909 2020 2020 246f )[7];..... $o\n+0001b6a0: 6c64 4669 6c65 6e61 6d65 2d3e 7365 7442 ldFilename->setB\n+0001b6b0: 6c6f 636b 4669 6c65 6e61 6d65 436f 6d70 lockFilenameComp\n+0001b6c0: 7228 2464 6967 6573 742c 0a09 0909 0909 r($digest,......\n+0001b6d0: 0909 0922 2474 6172 6765 7444 6972 2f24 ...\"$targetDir/$\n+0001b6e0: 626c 6f63 6b46 696c 6522 2c0a 0909 0909 blockFile\",.....\n+0001b6f0: 0909 0909 2463 6f6d 7072 6573 7342 6c6f ....$compressBlo\n+0001b700: 636b 293b 0a09 0909 7d0a 0909 2020 2020 ck);....}... \n+0001b710: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else \n+0001b720: 2020 2020 2320 626c 6f63 6b20 6973 206e # block is n\n+0001b730: 6577 0a09 097b 0a23 7072 696e 7420 222d ew...{.#print \"-\n+0001b740: 3131 2d20 6e65 7720 626c 6f63 6b5c 6e22 11- new block\\n\"\n+0001b750: 3b0a 0909 2020 2020 6966 2028 246c 6174 ;... if ($lat\n+0001b760: 654c 696e 6b73 2061 6e64 206e 6f74 2024 eLinks and not $\n+0001b770: 6d6b 6469 724c 6174 654c 696e 6b73 4669 mkdirLateLinksFi\n+0001b780: 6c65 5061 7468 290a 0909 2020 2020 7b0a lePath)... {.\n+0001b790: 0909 0926 3a3a 6d61 6b65 4669 6c65 5061 ...&::makeFilePa\n+0001b7a0: 7468 2822 2474 6172 6765 7444 6972 2f24 th(\"$targetDir/$\n+0001b7b0: 626c 6f63 6b46 696c 6522 2c20 2470 724c blockFile\", $prL\n+0001b7c0: 6f67 293b 0a09 0909 246d 6b64 6972 4c61 og);....$mkdirLa\n+0001b7d0: 7465 4c69 6e6b 7346 696c 6550 6174 6820 teLinksFilePath \n+0001b7e0: 3d20 313b 0a09 0920 2020 207d 0a0a 0909 = 1;... }....\n+0001b7f0: 2020 2020 6d79 2024 7066 203d 2024 636f my $pf = $co\n+0001b800: 6d70 7265 7373 426c 6f63 6b20 6571 2027 mpressBlock eq '\n+0001b810: 6327 203f 2024 706f 7374 6669 7820 3a20 c' ? $postfix : \n+0001b820: 2727 3b0a 0909 2020 2020 246f 6c64 4669 '';... $oldFi\n+0001b830: 6c65 6e61 6d65 2d3e 7365 7442 6c6f 636b lename->setBlock\n+0001b840: 4669 6c65 6e61 6d65 436f 6d70 7228 2464 FilenameCompr($d\n+0001b850: 6967 6573 742c 0a09 0909 0909 0909 2224 igest,........\"$\n+0001b860: 7461 7267 6574 4469 722f 2462 6c6f 636b targetDir/$block\n+0001b870: 4669 6c65 2470 6622 2c0a 0909 0909 0909 File$pf\",.......\n+0001b880: 0924 636f 6d70 7265 7373 426c 6f63 6b29 .$compressBlock)\n+0001b890: 3b0a 0909 2020 2020 6966 2028 246c 6174 ;... if ($lat\n+0001b8a0: 6543 6f6d 7072 6573 7329 0a09 0920 2020 eCompress)... \n+0001b8b0: 207b 0a23 7072 696e 7420 222d 3132 2d20 {.#print \"-12- \n+0001b8c0: 6c61 7465 2063 6f6d 7072 6573 735c 6e22 late compress\\n\"\n+0001b8d0: 3b0a 0909 0969 6620 2824 6469 7265 6374 ;....if ($direct\n+0001b8e0: 290a 0909 097b 0a09 0909 2020 2020 3a3a )....{.... ::\n+0001b8f0: 636f 7079 4f6e 6542 6c6f 636b 2824 6275 copyOneBlock($bu\n+0001b900: 6666 6572 2c20 2224 7461 7267 6574 4469 ffer, \"$targetDi\n+0001b910: 722f 2472 656c 5061 7468 2f24 626c 6f63 r/$relPath/$bloc\n+0001b920: 6b4e 616d 6522 2c0a 0909 0909 0920 2020 kName\",...... \n+0001b930: 2470 724c 6f67 293b 0a09 0909 2020 2020 $prLog);.... \n+0001b940: 2473 7461 7453 697a 654e 6577 202b 3d20 $statSizeNew += \n+0001b950: 2873 7461 7428 2224 7461 7267 6574 4469 (stat(\"$targetDi\n+0001b960: 722f 2472 656c 5061 7468 2f24 626c 6f63 r/$relPath/$bloc\n+0001b970: 6b4e 616d 6522 2929 5b37 5d3b 0a09 0909 kName\"))[7];....\n+0001b980: 7d0a 0909 0965 6c73 650a 0909 097b 0a09 }....else....{..\n+0001b990: 0909 2020 2020 2470 6172 616c 466f 726b .. $paralFork\n+0001b9a0: 2d3e 6164 645f 6e6f 626c 6f63 6b28 272d ->add_noblock('-\n+0001b9b0: 6675 6e63 7469 6f6e 2720 3d3e 205c 2663 function' => \\&c\n+0001b9c0: 6f70 794f 6e65 426c 6f63 6b2c 0a09 0909 opyOneBlock,....\n+0001b9d0: 0909 0920 2020 2027 2d66 756e 6350 6172 ... '-funcPar\n+0001b9e0: 2720 3d3e 205b 2462 7566 6665 722c 0a09 ' => [$buffer,..\n+0001b9f0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... \"$targ\n+0001ba00: 6574 4469 722f 2472 656c 5061 7468 2f24 etDir/$relPath/$\n+0001ba10: 626c 6f63 6b4e 616d 6522 2c0a 0909 0909 blockName\",.....\n+0001ba20: 0909 0909 2020 2024 7072 4c6f 675d 2c0a .... $prLog],.\n+0001ba30: 0909 0909 0909 2020 2020 272d 696e 666f ...... '-info\n+0001ba40: 2720 3d3e 205b 2464 6967 6573 742c 0a09 ' => [$digest,..\n+0001ba50: 0909 0909 0909 2022 2472 656c 5061 7468 ...... \"$relPath\n+0001ba60: 2f24 626c 6f63 6b4e 616d 6522 2c0a 0909 /$blockName\",...\n+0001ba70: 0909 0909 0909 2727 5d29 3b0a 0909 0920 ......'']);.... \n+0001ba80: 2020 202b 2b24 7374 6174 4e6f 466f 726b ++$statNoFork\n+0001ba90: 7343 503b 0a09 0909 7d0a 0909 0970 7269 sCP;....}....pri\n+0001baa0: 6e74 204f 5554 2022 636f 6d70 7265 7373 nt OUT \"compress\n+0001bab0: 2024 6469 6765 7374 5c6e 2220 2e0a 0909 $digest\\n\" ....\n+0001bac0: 0920 2020 2022 2474 6172 6765 7444 6972 . \"$targetDir\n+0001bad0: 2f24 7265 6c50 6174 682f 2462 6c6f 636b /$relPath/$block\n+0001bae0: 4e61 6d65 5c6e 223b 0a09 0909 7075 7368 Name\\n\";....push\n+0001baf0: 2040 6e65 774d 4435 6c69 6e65 2c0a 0909 @newMD5line,...\n+0001bb00: 0920 2020 2022 2464 6967 6573 7420 2463 . \"$digest $c\n+0001bb10: 6f6d 7072 6573 7342 6c6f 636b 2024 7265 ompressBlock $re\n+0001bb20: 6c50 6174 682f 2462 6c6f 636b 4e61 6d65 lPath/$blockName\n+0001bb30: 2470 6622 3b0a 0909 2020 2020 7d0a 0909 $pf\";... }...\n+0001bb40: 2020 2020 656c 7365 0a09 0920 2020 207b else... {\n+0001bb50: 0a09 0909 6966 2028 2463 6f6d 7072 6573 ....if ($compres\n+0001bb60: 7342 6c6f 636b 2065 7120 2763 2729 0a09 sBlock eq 'c')..\n+0001bb70: 0909 7b0a 2370 7269 6e74 2022 2d31 332d ..{.#print \"-13-\n+0001bb80: 2063 6f6d 7072 6573 7342 6c6f 636b 203d compressBlock =\n+0001bb90: 2063 2c20 706f 7374 6669 7820 3d20 2470 c, postfix = $p\n+0001bba0: 6f73 7466 6978 5c6e 223b 0a09 0909 2020 ostfix\\n\";.... \n+0001bbb0: 2020 6966 2028 2464 6972 6563 7429 0a09 if ($direct)..\n+0001bbc0: 0909 2020 2020 7b0a 0909 0909 6d79 2024 .. {.....my $\n+0001bbd0: 627a 203d 206e 6577 2049 4f3a 3a43 6f6d bz = new IO::Com\n+0001bbe0: 7072 6573 733a 3a42 7a69 7032 280a 0909 press::Bzip2(...\n+0001bbf0: 0909 2020 2020 2224 7461 7267 6574 4469 .. \"$targetDi\n+0001bc00: 722f 2462 6c6f 636b 4669 6c65 2470 6f73 r/$blockFile$pos\n+0001bc10: 7466 6978 222c 0a09 0909 0920 2020 2042 tfix\",..... B\n+0001bc20: 6c6f 636b 5369 7a65 3130 304b 203d 3e20 lockSize100K => \n+0001bc30: 3929 3b0a 0909 0909 2462 7a2d 3e73 7973 9);.....$bz->sys\n+0001bc40: 7772 6974 6528 2462 7566 6665 7229 3b0a write($buffer);.\n+0001bc50: 0909 0909 2462 7a2d 3e66 6c75 7368 2829 ....$bz->flush()\n+0001bc60: 3b0a 0909 0909 2462 7a2d 3e65 6f66 2829 ;.....$bz->eof()\n+0001bc70: 3b0a 0a09 0909 0924 7374 6174 5369 7a65 ;......$statSize\n+0001bc80: 4e65 7720 2b3d 0a09 0909 0920 2020 2028 New +=..... (\n+0001bc90: 7374 6174 2822 2474 6172 6765 7444 6972 stat(\"$targetDir\n+0001bca0: 2f24 626c 6f63 6b46 696c 6524 706f 7374 /$blockFile$post\n+0001bcb0: 6669 7822 2929 5b37 5d3b 0a09 0909 2020 fix\"))[7];.... \n+0001bcc0: 2020 7d0a 0909 0920 2020 2065 6c73 650a }.... else.\n+0001bcd0: 0909 0920 2020 207b 0a09 0909 0924 7061 ... {.....$pa\n+0001bce0: 7261 6c46 6f72 6b2d 3e61 6464 5f6e 6f62 ralFork->add_nob\n+0001bcf0: 6c6f 636b 280a 0909 0909 2020 2020 272d lock(..... '-\n+0001bd00: 6675 6e63 7469 6f6e 2720 3d3e 205c 2663 function' => \\&c\n+0001bd10: 6f6d 7072 6573 734f 6e65 426c 6f63 6b2c ompressOneBlock,\n+0001bd20: 0a09 0909 0920 2020 2027 2d66 756e 6350 ..... '-funcP\n+0001bd30: 6172 2720 3d3e 0a09 0909 0920 2020 205b ar' =>..... [\n+0001bd40: 2462 7566 6665 722c 0a09 0909 0920 2020 $buffer,..... \n+0001bd50: 2020 2224 7461 7267 6574 4469 722f 2462 \"$targetDir/$b\n+0001bd60: 6c6f 636b 4669 6c65 2470 6f73 7466 6978 lockFile$postfix\n+0001bd70: 222c 0a09 0909 0920 2020 2020 2463 6f6d \",..... $com\n+0001bd80: 7072 6573 7343 6f6d 6d61 6e64 2c0a 0909 pressCommand,...\n+0001bd90: 0909 2020 2020 2024 636f 6d70 7265 7373 .. $compress\n+0001bda0: 4f70 7469 6f6e 732c 0a09 0909 0920 2020 Options,..... \n+0001bdb0: 2020 2470 724c 6f67 5d2c 0a09 0909 0920 $prLog],..... \n+0001bdc0: 2020 2027 2d69 6e66 6f27 203d 3e20 5b24 '-info' => [$\n+0001bdd0: 6469 6765 7374 2c0a 0909 0909 0909 2224 digest,.......\"$\n+0001bde0: 7265 6c50 6174 682f 2462 6c6f 636b 4e61 relPath/$blockNa\n+0001bdf0: 6d65 222c 0a09 0909 0909 0924 706f 7374 me\",.......$post\n+0001be00: 6669 785d 293b 0a09 0909 092b 2b24 7374 fix]);.....++$st\n+0001be10: 6174 4e6f 466f 726b 7343 6f6d 7072 6573 atNoForksCompres\n+0001be20: 733b 0a09 0909 2020 2020 7d0a 0909 0920 s;.... }.... \n+0001be30: 2020 2070 7573 6820 406e 6577 4d44 356c push @newMD5l\n+0001be40: 696e 652c 0a09 0909 0922 2464 6967 6573 ine,.....\"$diges\n+0001be50: 7420 2463 6f6d 7072 6573 7342 6c6f 636b t $compressBlock\n+0001be60: 2024 7265 6c50 6174 682f 2462 6c6f 636b $relPath/$block\n+0001be70: 4e61 6d65 2470 6f73 7466 6978 223b 0a09 Name$postfix\";..\n+0001be80: 0909 7d0a 0909 0965 6c73 650a 0909 097b ..}....else....{\n+0001be90: 0a23 7072 696e 7420 222d 3134 2d20 636f .#print \"-14- co\n+0001bea0: 6d70 7265 7373 426c 6f63 6b20 3d20 755c mpressBlock = u\\\n+0001beb0: 6e22 3b0a 0909 0920 2020 2069 6620 2824 n\";.... if ($\n+0001bec0: 6469 7265 6374 290a 0909 0920 2020 207b direct).... {\n+0001bed0: 0a09 0909 093a 3a63 6f70 794f 6e65 426c .....::copyOneBl\n+0001bee0: 6f63 6b28 2462 7566 6665 722c 2022 2474 ock($buffer, \"$t\n+0001bef0: 6172 6765 7444 6972 2f24 626c 6f63 6b46 argetDir/$blockF\n+0001bf00: 696c 6522 2c0a 0909 0909 0920 2020 2020 ile\",...... \n+0001bf10: 2020 2470 724c 6f67 293b 0a09 0909 0924 $prLog);.....$\n+0001bf20: 7374 6174 5369 7a65 4e65 7720 2b3d 2028 statSizeNew += (\n+0001bf30: 7374 6174 2822 2474 6172 6765 7444 6972 stat(\"$targetDir\n+0001bf40: 2f24 626c 6f63 6b46 696c 6522 2929 5b37 /$blockFile\"))[7\n+0001bf50: 5d3b 0a09 0909 2020 2020 7d0a 0909 0920 ];.... }.... \n+0001bf60: 2020 2065 6c73 650a 0909 0920 2020 207b else.... {\n+0001bf70: 0a09 0909 0924 7061 7261 6c46 6f72 6b2d .....$paralFork-\n+0001bf80: 3e61 6464 5f6e 6f62 6c6f 636b 2827 2d66 >add_noblock('-f\n+0001bf90: 756e 6374 696f 6e27 203d 3e20 5c26 636f unction' => \\&co\n+0001bfa0: 7079 4f6e 6542 6c6f 636b 2c0a 0909 0909 pyOneBlock,.....\n+0001bfb0: 0909 0927 2d66 756e 6350 6172 2720 3d3e ...'-funcPar' =>\n+0001bfc0: 0a09 0909 0909 0909 5b24 6275 6666 6572 ........[$buffer\n+0001bfd0: 2c0a 0909 0909 0909 0920 2224 7461 7267 ,........ \"$targ\n+0001bfe0: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile\n+0001bff0: 222c 0a09 0909 0909 0909 2024 7072 4c6f \",........ $prLo\n+0001c000: 675d 2c0a 0909 0909 0909 0927 2d69 6e66 g],........'-inf\n+0001c010: 6f27 203d 3e20 5b24 6469 6765 7374 2c0a o' => [$digest,.\n+0001c020: 0909 0909 0909 0920 2020 2020 2020 2224 ....... \"$\n+0001c030: 7265 6c50 6174 682f 2462 6c6f 636b 4e61 relPath/$blockNa\n+0001c040: 6d65 222c 0a09 0909 0909 0909 0920 2020 me\",......... \n+0001c050: 2027 275d 293b 0a09 0909 2020 2020 2b2b '']);.... ++\n+0001c060: 2473 7461 744e 6f46 6f72 6b73 4350 3b0a $statNoForksCP;.\n+0001c070: 0909 0920 2020 207d 0a09 0909 2020 2020 ... }.... \n+0001c080: 7075 7368 2040 6e65 774d 4435 6c69 6e65 push @newMD5line\n+0001c090: 2c0a 0909 0909 2224 6469 6765 7374 2024 ,.....\"$digest $\n+0001c0a0: 636f 6d70 7265 7373 426c 6f63 6b20 2472 compressBlock $r\n+0001c0b0: 656c 5061 7468 2f24 626c 6f63 6b4e 616d elPath/$blockNam\n+0001c0c0: 6522 3b0a 0909 097d 0a09 0920 2020 207d e\";....}... }\n+0001c0d0: 0a23 7072 696e 7420 222d 3135 2d20 6d64 .#print \"-15- md\n+0001c0e0: 3520 2472 656c 5061 7468 2f24 626c 6f63 5 $relPath/$bloc\n+0001c0f0: 6b4e 616d 655c 6e22 3b0a 0909 7d0a 0909 kName\\n\";...}...\n+0001c100: 2474 696e 7953 6368 6564 2d3e 7265 7365 $tinySched->rese\n+0001c110: 7428 293b 0a09 2020 2020 7d0a 0920 2020 t();.. }.. \n+0001c120: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$\n+0001c130: 6a6f 6254 6f44 6f20 3d20 303b 0a09 2020 jobToDo = 0;.. \n+0001c140: 2020 7d0a 097d 0a0a 0923 2323 2323 2323 }..}...#######\n+0001c150: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001c160: 2323 2323 2323 0a09 2474 696e 7953 6368 ######..$tinySch\n+0001c170: 6564 2d3e 7761 6974 2829 3b0a 0a09 2470 ed->wait();...$p\n+0001c180: 6172 466f 726b 546f 446f 203d 2024 7061 arForkToDo = $pa\n+0001c190: 7261 6c46 6f72 6b2d 3e67 6574 4e6f 5573 ralFork->getNoUs\n+0001c1a0: 6564 456e 7472 6965 7328 293b 0a20 2020 edEntries();. \n+0001c1b0: 207d 0a0a 2020 2020 6966 2028 2466 696c }.. if ($fil\n+0001c1c0: 6549 6e29 0a20 2020 207b 0a09 6d79 2024 eIn). {..my $\n+0001c1d0: 6f75 7420 3d20 2466 696c 6549 6e2d 3e67 out = $fileIn->g\n+0001c1e0: 6574 5354 4445 5252 2829 3b0a 0969 6620 etSTDERR();..if \n+0001c1f0: 2840 246f 7574 290a 097b 0a09 2020 2020 (@$out)..{.. \n+0001c200: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0001c210: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+0001c220: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => [\"r\n+0001c230: 6561 6469 6e67 2066 726f 6d20 2473 6f75 eading from $sou\n+0001c240: 7263 6544 6972 2067 656e 6572 6174 6564 rceDir generated\n+0001c250: 222c 0a09 0909 0920 2020 2020 4024 6f75 \",..... @$ou\n+0001c260: 745d 293b 0a09 2020 2020 2b2b 246e 6f45 t]);.. ++$noE\n+0001c270: 7272 6f72 733b 0a09 2020 2020 7265 7475 rrors;.. retu\n+0001c280: 726e 2030 3b0a 097d 0a09 2466 696c 6549 rn 0;..}..$fileI\n+0001c290: 6e2d 3e63 6c6f 7365 2829 3b0a 0924 6669 n->close();..$fi\n+0001c2a0: 6c65 496e 203d 2075 6e64 6566 3b0a 2020 leIn = undef;. \n+0001c2b0: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+0001c2c0: 207b 0a09 636c 6f73 6528 4649 4c45 293b {..close(FILE);\n+0001c2d0: 0a20 2020 207d 0a0a 0a20 2020 2069 6620 . }... if \n+0001c2e0: 2824 6374 696d 6520 213d 2030 2920 2020 ($ctime != 0) \n+0001c2f0: 2023 206e 6f74 2061 2064 6576 6963 650a # not a device.\n+0001c300: 2020 2020 7b0a 0975 6e6c 6573 7320 282d {..unless (-\n+0001c310: 6520 2473 6f75 7263 6544 6972 290a 097b e $sourceDir)..{\n+0001c320: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+0001c330: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+0001c340: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n+0001c350: 3d3e 205b 223c 2473 6f75 7263 6544 6972 => [\"<$sourceDir\n+0001c360: 3e20 6465 6c65 7465 6420 6475 7269 6e67 > deleted during\n+0001c370: 2062 6163 6b75 7022 5d29 0a09 0975 6e6c backup\"])...unl\n+0001c380: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp\n+0001c390: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n+0001c3a0: 6543 6861 6e67 6527 7d3b 0a09 2020 2020 eChange'};.. \n+0001c3b0: 2b2b 246e 6f45 7272 6f72 733b 0a09 7d0a ++$noErrors;..}.\n+0001c3c0: 0965 6c73 650a 097b 0a09 2020 2020 6d79 .else..{.. my\n+0001c3d0: 2028 2461 6374 4d74 696d 652c 2024 6163 ($actMtime, $ac\n+0001c3e0: 7443 7469 6d65 2920 3d20 2873 7461 7428 tCtime) = (stat(\n+0001c3f0: 2473 6f75 7263 6544 6972 2929 5b39 2c31 $sourceDir))[9,1\n+0001c400: 305d 3b0a 0920 2020 2069 6620 2824 6163 0];.. if ($ac\n+0001c410: 744d 7469 6d65 2021 3d20 246d 7469 6d65 tMtime != $mtime\n+0001c420: 206f 7220 2461 6374 4374 696d 6520 213d or $actCtime !=\n+0001c430: 2024 6374 696d 6529 0a09 2020 2020 7b0a $ctime).. {.\n+0001c440: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+0001c450: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+0001c460: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+0001c470: 3d3e 205b 223c 2473 6f75 7263 6544 6972 => [\"<$sourceDir\n+0001c480: 3e20 6368 616e 6765 6420 6475 7269 6e67 > changed during\n+0001c490: 2062 6163 6b75 7022 5d29 0a09 0920 2020 backup\"])... \n+0001c4a0: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $\n+0001c4b0: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{\n+0001c4c0: 2766 696c 6543 6861 6e67 6527 7d3b 0a09 'fileChange'};..\n+0001c4d0: 092b 2b24 6e6f 5761 726e 696e 6773 3b0a .++$noWarnings;.\n+0001c4e0: 0920 2020 207d 0a09 7d0a 2020 2020 7d0a . }..}. }.\n+0001c4f0: 0a20 2020 2069 6620 286e 6f74 2024 6c61 . if (not $la\n+0001c500: 7465 4c69 6e6b 7320 6f72 2024 6d6b 6469 teLinks or $mkdi\n+0001c510: 724c 6174 654c 696e 6b73 4669 6c65 5061 rLateLinksFilePa\n+0001c520: 7468 290a 2020 2020 7b0a 096d 7920 2463 th). {..my $c\n+0001c530: 7366 203d 2022 2474 6172 6765 7444 6972 sf = \"$targetDir\n+0001c540: 2f24 7265 6c50 6174 682f 2462 6c6f 636b /$relPath/$block\n+0001c550: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2\n+0001c560: 223b 0a09 6d79 2024 6373 6657 7269 7465 \";..my $csfWrite\n+0001c570: 203d 2070 6970 6554 6f46 6f72 6b2d 3e6e = pipeToFork->n\n+0001c580: 6577 2827 2d65 7865 6327 203d 3e20 2762 ew('-exec' => 'b\n+0001c590: 7a69 7032 272c 0a09 0909 0920 2020 2020 zip2',..... \n+0001c5a0: 2020 272d 7374 646f 7574 2720 3d3e 2024 '-stdout' => $\n+0001c5b0: 6373 662c 0a09 0909 0920 2020 2020 2020 csf,..... \n+0001c5c0: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => \n+0001c5d0: 272f 746d 702f 7374 6275 5069 7065 546f '/tmp/stbuPipeTo\n+0001c5e0: 3130 2d27 2c0a 0909 0909 2020 2020 2020 10-',..... \n+0001c5f0: 2027 2d64 656c 5374 646f 7574 2720 3d3e '-delStdout' =>\n+0001c600: 2027 6e6f 272c 0a09 0909 0920 2020 2020 'no',..... \n+0001c610: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n+0001c620: 724c 6f67 293b 0a09 2b2b 2473 7461 744e rLog);..++$statN\n+0001c630: 6f46 6f72 6b73 436f 6d70 7265 7373 3b0a oForksCompress;.\n+0001c640: 0a09 6d79 2028 246c 696e 6529 3b0a 0966 ..my ($line);..f\n+0001c650: 6f72 6561 6368 2024 6c69 6e65 2028 406e oreach $line (@n\n+0001c660: 6577 4d44 356c 696e 6529 0a09 7b0a 0920 ewMD5line)..{.. \n+0001c670: 2020 2023 2077 7269 7465 2074 6f20 7465 # write to te\n+0001c680: 6d70 6f72 6172 7920 6669 6c65 0a09 2020 mporary file.. \n+0001c690: 2020 7072 696e 7420 4f55 5420 2224 6c69 print OUT \"$li\n+0001c6a0: 6e65 5c6e 223b 0a09 2020 2020 2377 7269 ne\\n\";.. #wri\n+0001c6b0: 7465 2074 6f20 626c 6f63 6b20 6c6f 6361 te to block loca\n+0001c6c0: 6c20 2e6d 6435 4368 6563 6b53 756d 0a09 l .md5CheckSum..\n+0001c6d0: 2020 2020 2463 7366 5772 6974 652d 3e70 $csfWrite->p\n+0001c6e0: 7269 6e74 2822 246c 696e 655c 6e22 293b rint(\"$line\\n\");\n+0001c6f0: 0a09 7d0a 0a09 2463 7366 5772 6974 652d ..}...$csfWrite-\n+0001c700: 3e77 6169 7428 293b 0a09 6d79 2024 6f75 >wait();..my $ou\n+0001c710: 7420 3d20 2463 7366 5772 6974 652d 3e67 t = $csfWrite->g\n+0001c720: 6574 5354 4445 5252 2829 3b0a 0969 6620 etSTDERR();..if \n+0001c730: 2840 246f 7574 290a 097b 0a09 2020 2020 (@$out)..{.. \n+0001c740: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0001c750: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+0001c760: 0920 2027 2d73 7472 2720 3d3e 205b 2262 . '-str' => [\"b\n+0001c770: 7a69 7032 2072 6570 6f72 7473 2065 7272 zip2 reports err\n+0001c780: 6f72 733a 222c 0a09 0909 0920 2020 2020 ors:\",..... \n+0001c790: 4024 6f75 745d 293b 0a09 2020 2020 7265 @$out]);.. re\n+0001c7a0: 7475 726e 2030 3b0a 097d 0a09 2463 7366 turn 0;..}..$csf\n+0001c7b0: 5772 6974 652d 3e63 6c6f 7365 2829 3b0a Write->close();.\n+0001c7c0: 2020 2020 7d0a 0a20 2020 2023 2027 6d64 }.. # 'md\n+0001c7d0: 3520 6f66 2077 686f 6c65 2066 696c 6527 5 of whole file'\n+0001c7e0: 2c20 2773 697a 6520 6f66 206f 7269 6727 , 'size of orig'\n+0001c7f0: 2c20 2773 697a 6520 6f66 2062 6c6f 636b , 'size of block\n+0001c800: 7327 0a20 2020 206d 7920 246d 6435 203d s'. my $md5 =\n+0001c810: 2024 6d64 3541 6c6c 2d3e 6865 7864 6967 $md5All->hexdig\n+0001c820: 6573 7428 293b 0a20 2020 2070 7269 6e74 est();. print\n+0001c830: 204f 5554 2022 616c 6c4d 4435 2024 6d64 OUT \"allMD5 $md\n+0001c840: 3520 2473 7461 7453 697a 654f 7269 6720 5 $statSizeOrig \n+0001c850: 2473 7461 7453 697a 654e 6577 2022 202e $statSizeNew \" .\n+0001c860: 0a09 2224 7374 6174 4e6f 466f 726b 7343 ..\"$statNoForksC\n+0001c870: 5020 2473 7461 744e 6f46 6f72 6b73 436f P $statNoForksCo\n+0001c880: 6d70 7265 7373 2024 626c 6f63 6b4e 6f20 mpress $blockNo \n+0001c890: 2473 7461 744e 6f4c 6174 654c 696e 6b73 $statNoLateLinks\n+0001c8a0: 2022 202e 0a09 2224 6e6f 5761 726e 696e \" ...\"$noWarnin\n+0001c8b0: 6773 2024 6e6f 4572 726f 7273 5c6e 223b gs $noErrors\\n\";\n+0001c8c0: 0a20 2020 2063 6c6f 7365 284f 5554 293b . close(OUT);\n+0001c8d0: 0a0a 2020 2020 7265 7475 726e 2030 3b0a .. return 0;.\n+0001c8e0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+0001c8f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001c900: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001c910: 2323 2323 2323 0a23 2045 727a 6575 6774 ######.# Erzeugt\n+0001c920: 2075 6e64 2076 6572 7761 6c74 6574 2044 und verwaltet D\n+0001c930: 424d 2044 6174 6569 656e 206d 6974 2049 BM Dateien mit I\n+0001c940: 6e66 6f72 6d61 7469 6f6e 656e 0a23 20c3 nformationen.# .\n+0001c950: bc62 6572 2062 6573 7465 6865 6e64 6520 .ber bestehende \n+0001c960: 4261 636b 7570 2056 6572 7a65 6963 686e Backup Verzeichn\n+0001c970: 6973 7365 0a70 6163 6b61 6765 206f 6c64 isse.package old\n+0001c980: 4669 6c65 6e61 6d65 3b0a 0a73 7562 206e Filename;..sub n\n+0001c990: 6577 0a7b 0a20 2020 206d 7920 2463 6c61 ew.{. my $cla\n+0001c9a0: 7373 203d 2073 6869 6674 3b0a 2020 2020 ss = shift;. \n+0001c9b0: 6d79 2024 7365 6c66 203d 207b 7d3b 0a0a my $self = {};..\n+0001c9c0: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params)\n+0001c9d0: 203d 2028 272d 6462 6d42 6173 654e 616d = ('-dbmBaseNam\n+0001c9e0: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde\n+0001c9f0: 662c 0a09 0920 2020 2027 2d69 6e64 6578 f,... '-index\n+0001ca00: 4469 7227 2020 2020 2020 2020 2020 3d3e Dir' =>\n+0001ca10: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+0001ca20: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' \n+0001ca30: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+0001ca40: 2020 2027 2d61 6b74 4469 7227 2020 2020 '-aktDir' \n+0001ca50: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n+0001ca60: 2c0a 0909 2020 2020 272d 6f74 6865 7242 ,... '-otherB\n+0001ca70: 6163 6b75 7053 6572 6965 7327 203d 3e20 ackupSeries' => \n+0001ca80: 5b5d 2c0a 0909 2020 2020 272d 7072 4c6f [],... '-prLo\n+0001ca90: 6727 2020 2020 2020 2020 2020 2020 203d g' =\n+0001caa0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+0001cab0: 2d63 6865 636b 5375 6d46 696c 6527 2020 -checkSumFile' \n+0001cac0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+0001cad0: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode'\n+0001cae0: 2020 2020 2020 2020 203d 3e20 276e 6f27 => 'no'\n+0001caf0: 2c0a 0909 2020 2020 272d 7361 7665 5241 ,... '-saveRA\n+0001cb00: 4d27 2020 2020 2020 2020 2020 203d 3e20 M' => \n+0001cb10: 302c 0a09 0920 2020 2027 2d66 6c61 6742 0,... '-flagB\n+0001cb20: 6c6f 636b 4465 7669 6365 2720 2020 3d3e lockDevice' =>\n+0001cb30: 2030 0a09 293b 0a0a 2020 2020 263a 3a63 0..);.. &::c\n+0001cb40: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams\n+0001cb50: 285c 2570 6172 616d 732c 205c 405f 2c20 (\\%params, \\@_, \n+0001cb60: 276f 6c64 4669 6c65 6e61 6d65 3a3a 6e65 'oldFilename::ne\n+0001cb70: 7727 2c0a 0909 0920 5b27 2d64 626d 4261 w',.... ['-dbmBa\n+0001cb80: 7365 4e61 6d65 272c 2027 2d69 6e64 6578 seName', '-index\n+0001cb90: 4469 7227 2c0a 0909 0920 2027 2d61 6b74 Dir',.... '-akt\n+0001cba0: 4469 7227 2c20 272d 6f74 6865 7242 6163 Dir', '-otherBac\n+0001cbb0: 6b75 7053 6572 6965 7327 2c0a 0909 0920 kupSeries',.... \n+0001cbc0: 2027 2d70 724c 6f67 272c 2027 2d63 6865 '-prLog', '-che\n+0001cbd0: 636b 5375 6d46 696c 6527 5d29 3b0a 2020 ckSumFile']);. \n+0001cbe0: 2020 263a 3a73 6574 5061 7261 6d73 4469 &::setParamsDi\n+0001cbf0: 7265 6374 2824 7365 6c66 2c20 5c25 7061 rect($self, \\%pa\n+0001cc00: 7261 6d73 293b 0a0a 2020 2020 6d79 2024 rams);.. my $\n+0001cc10: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n+0001cc20: 7320 3d20 2473 656c 662d 3e7b 276f 7468 s = $self->{'oth\n+0001cc30: 6572 4261 636b 7570 5365 7269 6573 277d erBackupSeries'}\n+0001cc40: 3b0a 2020 2020 6d79 2024 7072 4c6f 6720 ;. my $prLog \n+0001cc50: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog\n+0001cc60: 277d 3b0a 2020 2020 6d79 2024 666c 6167 '};. my $flag\n+0001cc70: 426c 6f63 6b44 6576 6963 6520 3d20 2473 BlockDevice = $s\n+0001cc80: 656c 662d 3e7b 2766 6c61 6742 6c6f 636b elf->{'flagBlock\n+0001cc90: 4465 7669 6365 277d 3b0a 0a20 2020 206d Device'};.. m\n+0001cca0: 7920 2825 4442 4d66 696c 656e 616d 652c y (%DBMfilename,\n+0001ccb0: 2025 4442 4d6d 6435 2c20 2544 424d 626c %DBMmd5, %DBMbl\n+0001ccc0: 6f63 6b29 3b0a 2020 2020 2473 656c 662d ock);. $self-\n+0001ccd0: 3e7b 2744 424d 6669 6c65 6e61 6d65 277d >{'DBMfilename'}\n+0001cce0: 203d 205c 2544 424d 6669 6c65 6e61 6d65 = \\%DBMfilename\n+0001ccf0: 3b0a 2020 2020 2473 656c 662d 3e7b 2744 ;. $self->{'D\n+0001cd00: 424d 6d64 3527 7d20 3d20 5c25 4442 4d6d BMmd5'} = \\%DBMm\n+0001cd10: 6435 3b0a 2020 2020 2473 656c 662d 3e7b d5;. $self->{\n+0001cd20: 2744 424d 626c 6f63 6b27 7d20 3d20 5c25 'DBMblock'} = \\%\n+0001cd30: 4442 4d62 6c6f 636b 3b0a 0a20 2020 2069 DBMblock;.. i\n+0001cd40: 6620 2824 7365 6c66 2d3e 7b27 7361 7665 f ($self->{'save\n+0001cd50: 5241 4d27 7d29 0a20 2020 207b 0a09 6d79 RAM'}). {..my\n+0001cd60: 2028 2444 424d 6669 6c65 6e61 6d65 2c20 ($DBMfilename, \n+0001cd70: 2444 424d 6d64 3529 3b0a 0924 7365 6c66 $DBMmd5);..$self\n+0001cd80: 2d3e 7b27 4442 4d66 696c 656e 616d 6553 ->{'DBMfilenameS\n+0001cd90: 7472 696e 6727 7d20 3d20 2444 424d 6669 tring'} = $DBMfi\n+0001cda0: 6c65 6e61 6d65 203d 0a09 2020 2020 263a lename =.. &:\n+0001cdb0: 3a75 6e69 7146 696c 654e 616d 6528 2473 :uniqFileName($s\n+0001cdc0: 656c 662d 3e7b 2764 626d 4261 7365 4e61 elf->{'dbmBaseNa\n+0001cdd0: 6d65 277d 202e 2022 2e66 696c 652e 2424 me'} . \".file.$$\n+0001cde0: 2e22 293b 0a09 2473 656c 662d 3e7b 2744 .\");..$self->{'D\n+0001cdf0: 424d 6d64 3553 7472 696e 6727 7d20 3d20 BMmd5String'} = \n+0001ce00: 2444 424d 6d64 3520 3d0a 0920 2020 2026 $DBMmd5 =.. &\n+0001ce10: 3a3a 756e 6971 4669 6c65 4e61 6d65 2824 ::uniqFileName($\n+0001ce20: 7365 6c66 2d3e 7b27 6462 6d42 6173 654e self->{'dbmBaseN\n+0001ce30: 616d 6527 7d20 2e20 222e 6d64 352e 2424 ame'} . \".md5.$$\n+0001ce40: 2e22 293b 0a0a 0a09 2320 7465 7374 656e .\");....# testen\n+0001ce50: 2061 7566 2061 6c74 6572 2044 6174 6569 auf alter Datei\n+0001ce60: 2075 6e64 2045 727a 6575 6765 6e20 6465 und Erzeugen de\n+0001ce70: 7220 6265 6964 656e 2064 626d 2d46 696c r beiden dbm-Fil\n+0001ce80: 6573 0a09 263a 3a63 6865 636b 4465 6c53 es..&::checkDelS\n+0001ce90: 796d 4c69 6e6b 2824 4442 4d66 696c 656e ymLink($DBMfilen\n+0001cea0: 616d 652c 2024 7072 4c6f 672c 2030 7830 ame, $prLog, 0x0\n+0001ceb0: 3129 3b0a 0969 6620 282d 6520 2444 424d 1);..if (-e $DBM\n+0001cec0: 6669 6c65 6e61 6d65 290a 097b 0a09 2020 filename)..{.. \n+0001ced0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+0001cee0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+0001cef0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n+0001cf00: 2264 656c 6574 696e 6720 3c24 4442 4d66 \"deleting <$DBMf\n+0001cf10: 696c 656e 616d 653e 225d 293b 0a09 2020 ilename>\"]);.. \n+0001cf20: 2020 756e 6c69 6e6b 2024 4442 4d66 696c unlink $DBMfil\n+0001cf30: 656e 616d 6520 6f72 0a09 0924 7072 4c6f ename or...$prLo\n+0001cf40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+0001cf50: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... \n+0001cf60: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+0001cf70: 2020 2020 205b 2263 616e 6e6f 7420 6465 [\"cannot de\n+0001cf80: 6c65 7465 203c 2444 424d 6669 6c65 6e61 lete <$DBMfilena\n+0001cf90: 6d65 3e2c 2065 7869 7469 6e67 225d 2c0a me>, exiting\"],.\n+0001cfa0: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit'\n+0001cfb0: 203d 3e20 3129 3b0a 097d 0a09 6462 6d6f => 1);..}..dbmo\n+0001cfc0: 7065 6e28 2544 424d 6669 6c65 6e61 6d65 pen(%DBMfilename\n+0001cfd0: 2c20 2444 424d 6669 6c65 6e61 6d65 2c20 , $DBMfilename, \n+0001cfe0: 3036 3030 293b 0a09 263a 3a63 6865 636b 0600);..&::check\n+0001cff0: 4465 6c53 796d 4c69 6e6b 2824 4442 4d6d DelSymLink($DBMm\n+0001d000: 6435 2c20 2470 724c 6f67 2c20 3078 3031 d5, $prLog, 0x01\n+0001d010: 293b 0a09 6966 2028 2d65 2024 4442 4d6d );..if (-e $DBMm\n+0001d020: 6435 290a 097b 0a09 2020 2020 2470 724c d5)..{.. $prL\n+0001d030: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+0001d040: 2720 3d3e 2027 5727 2c0a 0909 0920 2027 ' => 'W',.... '\n+0001d050: 2d73 7472 2720 3d3e 205b 2264 656c 6574 -str' => [\"delet\n+0001d060: 696e 6720 3c24 4442 4d66 696c 656e 616d ing <$DBMfilenam\n+0001d070: 653e 225d 293b 0a09 2020 2020 756e 6c69 e>\"]);.. unli\n+0001d080: 6e6b 2024 4442 4d6d 6435 206f 720a 0909 nk $DBMmd5 or...\n+0001d090: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0001d0a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+0001d0b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+0001d0c0: 0a09 0909 2020 2020 2020 5b22 6361 6e6e .... [\"cann\n+0001d0d0: 6f74 2064 656c 6574 6520 3c24 4442 4d66 ot delete <$DBMf\n+0001d0e0: 696c 656e 616d 653e 2c20 6578 6974 696e ilename>, exitin\n+0001d0f0: 6722 5d2c 0a09 0909 2020 2020 2020 272d g\"],.... '-\n+0001d100: 6578 6974 2720 3d3e 2031 293b 0a09 7d0a exit' => 1);..}.\n+0001d110: 0964 626d 6f70 656e 2825 4442 4d6d 6435 .dbmopen(%DBMmd5\n+0001d120: 2c20 2444 424d 6d64 352c 2030 3630 3029 , $DBMmd5, 0600)\n+0001d130: 3b0a 2020 2020 7d0a 0a20 2020 2023 204c ;. }.. # L\n+0001d140: 6973 7465 206d 6974 2061 6c6c 656e 2044 iste mit allen D\n+0001d150: 6972 6563 746f 7269 6573 2065 7273 7465 irectories erste\n+0001d160: 6c6c 656e 0a20 2020 206d 7920 2840 6261 llen. my (@ba\n+0001d170: 636b 7570 4469 7273 2920 3d20 2824 7365 ckupDirs) = ($se\n+0001d180: 6c66 2d3e 7b27 616b 7444 6972 277d 293b lf->{'aktDir'});\n+0001d190: 0a20 2020 2070 7573 6820 4062 6163 6b75 . push @backu\n+0001d1a0: 7044 6972 732c 2040 246f 7468 6572 4261 pDirs, @$otherBa\n+0001d1b0: 636b 7570 5365 7269 6573 3b0a 2020 2020 ckupSeries;. \n+0001d1c0: 2473 656c 662d 3e7b 2762 6163 6b75 7044 $self->{'backupD\n+0001d1d0: 6972 7327 7d20 3d20 5c40 6261 636b 7570 irs'} = \\@backup\n+0001d1e0: 4469 7273 3b0a 0a20 2020 206d 7920 2840 Dirs;.. my (@\n+0001d1f0: 6264 2c20 2464 6972 2c20 2569 6e6f 6465 bd, $dir, %inode\n+0001d200: 2c20 2464 6576 4469 7229 3b0a 2020 2020 , $devDir);. \n+0001d210: 6d79 2024 6465 7620 3d20 756e 6465 663b my $dev = undef;\n+0001d220: 0a20 2020 2066 6f72 6561 6368 2024 6469 . foreach $di\n+0001d230: 7220 2840 6261 636b 7570 4469 7273 290a r (@backupDirs).\n+0001d240: 2020 2020 7b0a 096d 7920 2824 5f64 6576 {..my ($_dev\n+0001d250: 2c20 245f 696e 6f64 6529 203d 2028 7374 , $_inode) = (st\n+0001d260: 6174 2824 6469 7229 295b 302c 315d 3b0a at($dir))[0,1];.\n+0001d270: 0969 6620 2824 6465 7629 2020 2020 2020 .if ($dev) \n+0001d280: 2020 2020 2020 2020 2020 2023 20c3 bc62 # ..b\n+0001d290: 6572 7072 c3bc 6665 6e2c 206f 6220 616c erpr..fen, ob al\n+0001d2a0: 6c65 2069 6d20 7365 6c62 656e 2064 6576 le im selben dev\n+0001d2b0: 6963 650a 097b 0a09 2020 2020 6966 2028 ice..{.. if (\n+0001d2c0: 2464 6576 206e 6520 245f 6465 7629 0a09 $dev ne $_dev)..\n+0001d2d0: 2020 2020 7b0a 0909 726d 6469 7220 2473 {...rmdir $s\n+0001d2e0: 656c 662d 3e7b 2761 6b74 4469 7227 7d3b elf->{'aktDir'};\n+0001d2f0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n+0001d300: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+0001d310: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n+0001d320: 203d 3e20 5b22 3c24 6465 7644 6972 3e20 => [\"<$devDir> \n+0001d330: 616e 6420 3c24 6469 723e 2061 7265 2022 and <$dir> are \"\n+0001d340: 202e 0a09 0909 0909 2022 6e6f 7420 6f6e ....... \"not on\n+0001d350: 2074 6865 2073 616d 6520 6465 7669 6365 the same device\n+0001d360: 225d 2c0a 0909 0920 2020 2020 2027 2d65 \"],.... '-e\n+0001d370: 7869 7427 203d 3e20 3129 3b0a 0920 2020 xit' => 1);.. \n+0001d380: 207d 0a09 7d0a 0965 6c73 650a 097b 0a09 }..}..else..{..\n+0001d390: 2020 2020 2464 6576 203d 2024 5f64 6576 $dev = $_dev\n+0001d3a0: 3b20 2020 2020 2020 2023 206d 6572 6b65 ; # merke\n+0001d3b0: 6e0a 0920 2020 2024 6465 7644 6972 203d n.. $devDir =\n+0001d3c0: 2024 6469 723b 0a09 7d0a 0a09 6966 2028 $dir;..}...if (\n+0001d3d0: 6578 6973 7473 2024 696e 6f64 657b 245f exists $inode{$_\n+0001d3e0: 696e 6f64 657d 290a 097b 0a09 2020 2020 inode})..{.. \n+0001d3f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0001d400: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+0001d410: 0920 2027 2d73 7472 2720 3d3e 205b 223c . '-str' => [\"<\n+0001d420: 2464 6972 3e20 6973 2074 6865 2073 616d $dir> is the sam\n+0001d430: 6520 6469 7265 6374 6f72 7920 6173 203c e directory as <\n+0001d440: 2220 2e0a 0909 0909 2020 2020 2024 696e \" ...... $in\n+0001d450: 6f64 657b 245f 696e 6f64 657d 202e 2022 ode{$_inode} . \"\n+0001d460: 3e2c 2069 676e 6f72 696e 6722 5d29 3b0a >, ignoring\"]);.\n+0001d470: 0920 2020 206e 6578 743b 0a09 7d0a 0965 . next;..}..e\n+0001d480: 6c73 650a 097b 0a09 2020 2020 2469 6e6f lse..{.. $ino\n+0001d490: 6465 7b24 5f69 6e6f 6465 7d20 3d20 2464 de{$_inode} = $d\n+0001d4a0: 6972 3b0a 097d 0a0a 0970 7573 6820 4062 ir;..}...push @b\n+0001d4b0: 642c 2024 6469 723b 0a20 2020 207d 0a20 d, $dir;. }. \n+0001d4c0: 2020 2040 6261 636b 7570 4469 7273 203d @backupDirs =\n+0001d4d0: 2040 6264 3b0a 0a23 7072 696e 7420 2262 @bd;..#print \"b\n+0001d4e0: 6163 6b75 7044 6972 7320 3d20 4062 6163 ackupDirs = @bac\n+0001d4f0: 6b75 7044 6972 735c 6e22 3b0a 2020 2020 kupDirs\\n\";. \n+0001d500: 6d79 2024 693b 0a20 2020 206d 7920 246e my $i;. my $n\n+0001d510: 6f45 6e74 7269 6573 496e 4442 4d20 3d20 oEntriesInDBM = \n+0001d520: 303b 0a20 2020 206d 7920 246e 6f45 6e74 0;. my $noEnt\n+0001d530: 7269 6573 426c 6f63 6b43 6865 636b 203d riesBlockCheck =\n+0001d540: 2030 3b0a 2020 2020 666f 7220 2824 6920 0;. for ($i \n+0001d550: 3d20 3120 3b20 2469 203c 2040 6261 636b = 1 ; $i < @back\n+0001d560: 7570 4469 7273 203b 2024 692b 2b29 0a20 upDirs ; $i++). \n+0001d570: 2020 207b 0a09 6d79 2024 6420 3d20 2462 {..my $d = $b\n+0001d580: 6163 6b75 7044 6972 735b 2469 5d3b 0a0a ackupDirs[$i];..\n+0001d590: 0969 6620 282d 6620 2224 642f 2463 6865 .if (-f \"$d/$che\n+0001d5a0: 636b 5375 6d46 696c 652e 627a 3222 206f ckSumFile.bz2\" o\n+0001d5b0: 7220 2d66 2022 2464 2f24 6368 6563 6b53 r -f \"$d/$checkS\n+0001d5c0: 756d 4669 6c65 2229 0a09 7b0a 2370 7269 umFile\")..{.#pri\n+0001d5d0: 6e74 2022 2469 202d 3e20 2464 5c6e 223b nt \"$i -> $d\\n\";\n+0001d5e0: 0a09 2020 2020 6d79 2028 2465 312c 2024 .. my ($e1, $\n+0001d5f0: 6532 2920 3d0a 0909 263a 3a62 7569 6c64 e2) =...&::build\n+0001d600: 4442 4d73 2827 2d64 626d 4b65 7949 7346 DBMs('-dbmKeyIsF\n+0001d610: 696c 656e 616d 6527 203d 3e20 5c25 4442 ilename' => \\%DB\n+0001d620: 4d66 696c 656e 616d 652c 0a09 0909 2020 Mfilename,.... \n+0001d630: 2020 2027 2d64 626d 4b65 7949 734d 4435 '-dbmKeyIsMD5\n+0001d640: 5375 6d27 203d 3e20 5c25 4442 4d6d 6435 Sum' => \\%DBMmd5\n+0001d650: 2c0a 0909 0920 2020 2020 272d 6462 6d42 ,.... '-dbmB\n+0001d660: 6c6f 636b 4368 6563 6b27 203d 3e20 5c25 lockCheck' => \\%\n+0001d670: 4442 4d62 6c6f 636b 2c0a 0909 0920 2020 DBMblock,.... \n+0001d680: 2020 272d 666c 6167 426c 6f63 6b44 6576 '-flagBlockDev\n+0001d690: 6963 6527 203d 3e20 2466 6c61 6742 6c6f ice' => $flagBlo\n+0001d6a0: 636b 4465 7669 6365 2c0a 0909 0920 2020 ckDevice,.... \n+0001d6b0: 2020 272d 696e 6465 7844 6972 2720 3d3e '-indexDir' =>\n+0001d6c0: 2024 7365 6c66 2d3e 7b27 696e 6465 7844 $self->{'indexD\n+0001d6d0: 6972 277d 2c0a 0909 0920 2020 2020 272d ir'},.... '-\n+0001d6e0: 6261 636b 7570 526f 6f74 2720 3d3e 2024 backupRoot' => $\n+0001d6f0: 642c 0a09 0909 2020 2020 2027 2d62 6163 d,.... '-bac\n+0001d700: 6b75 7044 6972 496e 6465 7827 203d 3e20 kupDirIndex' => \n+0001d710: 2469 2c0a 0909 0920 2020 2020 272d 6e6f $i,.... '-no\n+0001d720: 4261 636b 7570 4469 7227 203d 3e20 7363 BackupDir' => sc\n+0001d730: 616c 6172 2040 6261 636b 7570 4469 7273 alar @backupDirs\n+0001d740: 2c0a 0909 0920 2020 2020 272d 6368 6563 ,.... '-chec\n+0001d750: 6b53 756d 4669 6c65 2720 3d3e 2024 6368 kSumFile' => $ch\n+0001d760: 6563 6b53 756d 4669 6c65 2c0a 0909 0920 eckSumFile,.... \n+0001d770: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi\n+0001d780: 6c65 5665 7273 696f 6e27 0a09 0909 2020 leVersion'.... \n+0001d790: 2020 203d 3e20 246d 6169 6e3a 3a63 6865 => $main::che\n+0001d7a0: 636b 5375 6d46 696c 6556 6572 7369 6f6e ckSumFileVersion\n+0001d7b0: 2c0a 0909 0920 2020 2020 272d 626c 6f63 ,.... '-bloc\n+0001d7c0: 6b43 6865 636b 5375 6d46 696c 6527 203d kCheckSumFile' =\n+0001d7d0: 3e20 2462 6c6f 636b 4368 6563 6b53 756d > $blockCheckSum\n+0001d7e0: 4669 6c65 2c0a 0909 0920 2020 2020 272d File,.... '-\n+0001d7f0: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' \n+0001d800: 3d3e 2024 7072 6f67 7265 7373 5265 706f => $progressRepo\n+0001d810: 7274 2c0a 0909 0920 2020 2020 272d 7072 rt,.... '-pr\n+0001d820: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,.\n+0001d830: 0909 0920 2020 2020 272d 7361 7665 5241 ... '-saveRA\n+0001d840: 4d27 203d 3e20 2473 6176 6552 414d 2c0a M' => $saveRAM,.\n+0001d850: 0909 0920 2020 2020 272d 6462 6d42 6173 ... '-dbmBas\n+0001d860: 654e 616d 6527 203d 3e20 2224 746d 7064 eName' => \"$tmpd\n+0001d870: 6972 2f64 626d 2229 3b0a 0920 2020 2024 ir/dbm\");.. $\n+0001d880: 6e6f 456e 7472 6965 7349 6e44 424d 202b noEntriesInDBM +\n+0001d890: 3d20 2465 313b 0a09 2020 2020 246e 6f45 = $e1;.. $noE\n+0001d8a0: 6e74 7269 6573 426c 6f63 6b43 6865 636b ntriesBlockCheck\n+0001d8b0: 202b 3d20 2465 323b 0a09 7d0a 2020 2020 += $e2;..}. \n+0001d8c0: 7d0a 2020 2020 2470 724c 6f67 2d3e 7072 }. $prLog->pr\n+0001d8d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+0001d8e0: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' =\n+0001d8f0: 3e20 5b22 246e 6f45 6e74 7269 6573 496e > [\"$noEntriesIn\n+0001d900: 4442 4d20 656e 7472 6965 7320 696e 2064 DBM entries in d\n+0001d910: 626d 2066 696c 6573 222c 0a09 0909 2020 bm files\",.... \n+0001d920: 2020 2022 246e 6f45 6e74 7269 6573 426c \"$noEntriesBl\n+0001d930: 6f63 6b43 6865 636b 2065 6e74 7269 6573 ockCheck entries\n+0001d940: 2069 6e20 6462 6d20 626c 6f63 6b20 6669 in dbm block fi\n+0001d950: 6c65 7322 5d29 3b0a 0a20 2020 2062 6c65 les\"]);.. ble\n+0001d960: 7373 2024 7365 6c66 2c20 2463 6c61 7373 ss $self, $class\n+0001d970: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+0001d980: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001d990: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+0001d9a0: 7562 2067 6574 496e 6465 7844 6972 0a7b ub getIndexDir.{\n+0001d9b0: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n+0001d9c0: 7368 6966 743b 0a0a 2020 2020 7265 7475 shift;.. retu\n+0001d9d0: 726e 2024 7365 6c66 2d3e 7b27 696e 6465 rn $self->{'inde\n+0001d9e0: 7844 6972 277d 3b0a 7d0a 0a0a 2323 2323 xDir'};.}...####\n+0001d9f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001da00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001da10: 2323 2323 0a73 7562 2067 6574 4442 4d6d ####.sub getDBMm\n+0001da20: 6435 0a7b 0a20 2020 206d 7920 2473 656c d5.{. my $sel\n+0001da30: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. \n+0001da40: 7265 7475 726e 2024 7365 6c66 2d3e 7b27 return $self->{'\n+0001da50: 4442 4d6d 6435 277d 3b0a 7d0a 0a0a 2323 DBMmd5'};.}...##\n+0001da60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001da70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001da80: 2323 2323 2323 0a73 7562 2067 6574 496e ######.sub getIn\n+0001da90: 6f64 6562 6163 6b75 7043 6f6d 7072 4374 odebackupComprCt\n+0001daa0: 696d 654d 7469 6d65 5369 7a65 4d44 350a imeMtimeSizeMD5.\n+0001dab0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+0001dac0: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my \n+0001dad0: 2466 696c 656e 616d 6520 3d20 7368 6966 $filename = shif\n+0001dae0: 743b 0a0a 2020 2020 6d79 2024 4442 4d66 t;.. my $DBMf\n+0001daf0: 696c 656e 616d 6520 3d20 2473 656c 662d ilename = $self-\n+0001db00: 3e7b 2744 424d 6669 6c65 6e61 6d65 277d >{'DBMfilename'}\n+0001db10: 3b0a 2020 2020 2466 696c 656e 616d 6520 ;. $filename \n+0001db20: 3d20 2473 656c 662d 3e7b 2769 6e64 6578 = $self->{'index\n+0001db30: 4469 7227 7d2d 3e73 6574 496e 6465 7828 Dir'}->setIndex(\n+0001db40: 2466 696c 656e 616d 6529 3b0a 0a20 2020 $filename);.. \n+0001db50: 2069 6620 2865 7869 7374 7320 2424 4442 if (exists $$DB\n+0001db60: 4d66 696c 656e 616d 657b 2466 696c 656e Mfilename{$filen\n+0001db70: 616d 657d 290a 2020 2020 7b0a 0972 6574 ame}). {..ret\n+0001db80: 7572 6e20 756e 7061 636b 2827 6149 4946 urn unpack('aIIF\n+0001db90: 4833 3227 2c20 2424 4442 4d66 696c 656e H32', $$DBMfilen\n+0001dba0: 616d 657b 2466 696c 656e 616d 657d 293b ame{$filename});\n+0001dbb0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n+0001dbc0: 2020 2020 7b0a 0972 6574 7572 6e20 2829 {..return ()\n+0001dbd0: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...####\n+0001dbe0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001dbf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001dc00: 2323 2323 0a23 2072 6574 7572 6e73 2028 ####.# returns (\n+0001dc10: 2469 6e6f 6465 4261 636b 7570 2024 636f $inodeBackup $co\n+0001dc20: 6d70 7220 2462 6163 6b75 7044 6972 496e mpr $backupDirIn\n+0001dc30: 6465 7820 2462 6163 6b75 7044 6972 2024 dex $backupDir $\n+0001dc40: 6669 6c65 6e61 6d65 290a 7375 6220 6765 filename).sub ge\n+0001dc50: 7446 696c 656e 616d 650a 7b0a 2020 2020 tFilename.{. \n+0001dc60: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n+0001dc70: 3b0a 0a20 2020 206d 7920 246d 6435 7375 ;.. my $md5su\n+0001dc80: 6d20 3d20 7368 6966 743b 0a0a 2020 2020 m = shift;.. \n+0001dc90: 6d79 2024 4442 4d6d 6435 203d 2024 7365 my $DBMmd5 = $se\n+0001dca0: 6c66 2d3e 7b27 4442 4d6d 6435 277d 3b0a lf->{'DBMmd5'};.\n+0001dcb0: 0a23 7072 696e 7420 222d 322d 246d 6435 .#print \"-2-$md5\n+0001dcc0: 7375 6d20 2824 4442 4d6d 6435 295c 6e22 sum ($DBMmd5)\\n\"\n+0001dcd0: 3b0a 2020 2020 6d79 2024 6d64 3570 6163 ;. my $md5pac\n+0001dce0: 6b20 3d20 7061 636b 2827 4833 3227 2c20 k = pack('H32', \n+0001dcf0: 246d 6435 7375 6d29 3b0a 2020 2020 6966 $md5sum);. if\n+0001dd00: 2028 6578 6973 7473 2024 2444 424d 6d64 (exists $$DBMmd\n+0001dd10: 357b 246d 6435 7061 636b 7d29 0a20 2020 5{$md5pack}). \n+0001dd20: 207b 0a23 7072 696e 7420 225c 7467 6566 {.#print \"\\tgef\n+0001dd30: 756e 6465 6e5c 6e22 3b0a 096d 7920 2840 unden\\n\";..my (@\n+0001dd40: 7229 203d 2075 6e70 6163 6b28 2746 6153 r) = unpack('FaS\n+0001dd50: 612a 272c 2024 2444 424d 6d64 357b 246d a*', $$DBMmd5{$m\n+0001dd60: 6435 7061 636b 7d29 3b0a 096d 7920 2462 d5pack});..my $b\n+0001dd70: 6163 6b75 7044 6972 7320 3d20 2473 656c ackupDirs = $sel\n+0001dd80: 662d 3e7b 2762 6163 6b75 7044 6972 7327 f->{'backupDirs'\n+0001dd90: 7d3b 0a09 6d79 2024 6620 3d20 2473 656c };..my $f = $sel\n+0001dda0: 662d 3e7b 2769 6e64 6578 4469 7227 7d2d f->{'indexDir'}-\n+0001ddb0: 3e72 6570 6c61 6365 496e 6465 7828 2472 >replaceIndex($r\n+0001ddc0: 5b33 5d29 3b0a 0972 6574 7572 6e20 2840 [3]);..return (@\n+0001ddd0: 725b 302e 2e32 5d2c 2024 2462 6163 6b75 r[0..2], $$backu\n+0001dde0: 7044 6972 735b 2472 5b32 5d5d 2c20 2466 pDirs[$r[2]], $f\n+0001ddf0: 293b 0a20 2020 207d 0a20 2020 2072 6574 );. }. ret\n+0001de00: 7572 6e20 2829 3b0a 7d0a 0a0a 2323 2323 urn ();.}...####\n+0001de10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001de20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001de30: 2323 2323 0a73 7562 2067 6574 426c 6f63 ####.sub getBloc\n+0001de40: 6b46 696c 656e 616d 6543 6f6d 7072 0a7b kFilenameCompr.{\n+0001de50: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n+0001de60: 7368 6966 743b 0a20 2020 206d 7920 246d shift;. my $m\n+0001de70: 6435 7375 6d20 3d20 7368 6966 743b 0a0a d5sum = shift;..\n+0001de80: 2020 2020 6d79 2024 4442 4d62 6c6f 636b my $DBMblock\n+0001de90: 203d 2024 7365 6c66 2d3e 7b27 4442 4d62 = $self->{'DBMb\n+0001dea0: 6c6f 636b 277d 3b0a 2020 2020 6966 2028 lock'};. if (\n+0001deb0: 6578 6973 7473 2024 2444 424d 626c 6f63 exists $$DBMbloc\n+0001dec0: 6b7b 246d 6435 7375 6d7d 290a 2020 2020 k{$md5sum}). \n+0001ded0: 7b0a 096d 7920 2824 636f 6d70 722c 2024 {..my ($compr, $\n+0001dee0: 6629 203d 2028 7370 6c69 7428 2f5c 732f f) = (split(/\\s/\n+0001def0: 2c20 2424 4442 4d62 6c6f 636b 7b24 6d64 , $$DBMblock{$md\n+0001df00: 3573 756d 7d2c 2032 2929 3b0a 096d 7920 5sum}, 2));..my \n+0001df10: 2466 616c 6c20 3d20 2473 656c 662d 3e7b $fall = $self->{\n+0001df20: 2769 6e64 6578 4469 7227 7d2d 3e72 6570 'indexDir'}->rep\n+0001df30: 6c61 6365 496e 6465 7828 2466 293b 0a09 laceIndex($f);..\n+0001df40: 7265 7475 726e 2028 2463 6f6d 7072 2c20 return ($compr, \n+0001df50: 2466 616c 6c29 3b0a 2020 2020 7d0a 2020 $fall);. }. \n+0001df60: 2020 7265 7475 726e 2028 293b 0a7d 0a0a return ();.}..\n+0001df70: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+0001df80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001df90: 2323 2323 2323 2323 230a 7375 6220 7365 #########.sub se\n+0001dfa0: 7442 6c6f 636b 4669 6c65 6e61 6d65 436f tBlockFilenameCo\n+0001dfb0: 6d70 720a 7b0a 2020 2020 6d79 2024 7365 mpr.{. my $se\n+0001dfc0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. \n+0001dfd0: 206d 7920 246d 6435 7375 6d20 3d20 7368 my $md5sum = sh\n+0001dfe0: 6966 743b 0a20 2020 206d 7920 2466 696c ift;. my $fil\n+0001dff0: 656e 616d 6520 3d20 7368 6966 743b 0a20 ename = shift;. \n+0001e000: 2020 206d 7920 2463 6f6d 7072 203d 2073 my $compr = s\n+0001e010: 6869 6674 3b0a 0a20 2020 206d 7920 2824 hift;.. my ($\n+0001e020: 6662 6173 652c 2024 666e 616d 652c 2024 fbase, $fname, $\n+0001e030: 696e 6465 7829 203d 0a09 2469 6e64 6578 index) =..$index\n+0001e040: 4469 722d 3e6e 6577 4669 6c65 2824 6669 Dir->newFile($fi\n+0001e050: 6c65 6e61 6d65 293b 0a0a 2020 2020 6d79 lename);.. my\n+0001e060: 2024 4442 4d62 6c6f 636b 203d 2024 7365 $DBMblock = $se\n+0001e070: 6c66 2d3e 7b27 4442 4d62 6c6f 636b 277d lf->{'DBMblock'}\n+0001e080: 3b0a 0a20 2020 2024 2444 424d 626c 6f63 ;.. $$DBMbloc\n+0001e090: 6b7b 246d 6435 7375 6d7d 203d 2022 2463 k{$md5sum} = \"$c\n+0001e0a0: 6f6d 7072 2024 696e 6465 782f 2466 6e61 ompr $index/$fna\n+0001e0b0: 6d65 223b 0a7d 0a0a 0a23 2323 2323 2323 me\";.}...#######\n+0001e0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e0e0: 230a 7375 6220 6465 6c65 7465 456e 7472 #.sub deleteEntr\n+0001e0f0: 790a 7b0a 2020 2020 6d79 2024 7365 6c66 y.{. my $self\n+0001e100: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m\n+0001e110: 7920 246d 6435 7375 6d20 3d20 7368 6966 y $md5sum = shif\n+0001e120: 743b 0a20 2020 206d 7920 2466 203d 2073 t;. my $f = s\n+0001e130: 6869 6674 3b0a 0a20 2020 206d 7920 2444 hift;.. my $D\n+0001e140: 424d 6d64 3520 3d20 2473 656c 662d 3e7b BMmd5 = $self->{\n+0001e150: 2744 424d 6d64 3527 7d3b 0a20 2020 206d 'DBMmd5'};. m\n+0001e160: 7920 246d 6435 7061 636b 203d 2070 6163 y $md5pack = pac\n+0001e170: 6b28 2748 3332 272c 2024 6d64 3573 756d k('H32', $md5sum\n+0001e180: 293b 0a20 2020 2064 656c 6574 6520 2424 );. delete $$\n+0001e190: 4442 4d6d 6435 7b24 6d64 3570 6163 6b7d DBMmd5{$md5pack}\n+0001e1a0: 3b0a 0a20 2020 206d 7920 2444 424d 6669 ;.. my $DBMfi\n+0001e1b0: 6c65 6e61 6d65 203d 2024 7365 6c66 2d3e lename = $self->\n+0001e1c0: 7b27 4442 4d66 696c 656e 616d 6527 7d3b {'DBMfilename'};\n+0001e1d0: 0a20 2020 2024 6620 3d20 2473 656c 662d . $f = $self-\n+0001e1e0: 3e7b 2769 6e64 6578 4469 7227 7d2d 3e73 >{'indexDir'}->s\n+0001e1f0: 6574 496e 6465 7828 2466 293b 0a20 2020 etIndex($f);. \n+0001e200: 2064 656c 6574 6520 2424 4442 4d66 696c delete $$DBMfil\n+0001e210: 656e 616d 657b 2466 7d3b 0a7d 0a0a 0a23 ename{$f};.}...#\n+0001e220: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e230: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e240: 2323 2323 2323 230a 7375 6220 7265 6164 #######.sub read\n+0001e250: 4442 4d46 696c 6573 5369 7a65 0a7b 0a20 DBMFilesSize.{. \n+0001e260: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n+0001e270: 6966 743b 0a0a 2020 2020 6966 2028 2473 ift;.. if ($s\n+0001e280: 656c 662d 3e7b 2773 6176 6552 414d 277d elf->{'saveRAM'}\n+0001e290: 290a 2020 2020 7b0a 096d 7920 2473 697a ). {..my $siz\n+0001e2a0: 6520 3d20 303b 0a09 6d79 2024 663b 0a09 e = 0;..my $f;..\n+0001e2b0: 666f 7265 6163 6820 2466 2028 2473 656c foreach $f ($sel\n+0001e2c0: 662d 3e7b 2744 424d 6669 6c65 6e61 6d65 f->{'DBMfilename\n+0001e2d0: 5374 7269 6e67 277d 2c20 2473 656c 662d String'}, $self-\n+0001e2e0: 3e7b 2744 424d 6d64 3553 7472 696e 6727 >{'DBMmd5String'\n+0001e2f0: 7d29 0a09 7b0a 0920 2020 2024 6d61 696e })..{.. $main\n+0001e300: 3a3a 7374 6174 2d3e 6164 6453 756d 4442 ::stat->addSumDB\n+0001e310: 4d46 696c 6573 2820 2873 7461 7428 2466 MFiles( (stat($f\n+0001e320: 2929 5b37 5d20 293b 0a09 7d0a 2020 2020 ))[7] );..}. \n+0001e330: 7d0a 7d0a 0a0a 2323 2323 2323 2323 2323 }.}...##########\n+0001e340: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e350: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+0001e360: 7562 2064 656c 4442 4d46 696c 6573 0a7b ub delDBMFiles.{\n+0001e370: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n+0001e380: 7368 6966 743b 0a0a 2020 2020 6966 2028 shift;.. if (\n+0001e390: 2473 656c 662d 3e7b 2773 6176 6552 414d $self->{'saveRAM\n+0001e3a0: 277d 290a 2020 2020 7b0a 0964 626d 636c '}). {..dbmcl\n+0001e3b0: 6f73 6528 257b 2473 656c 662d 3e7b 276d ose(%{$self->{'m\n+0001e3c0: 6435 277d 7d29 3b0a 0964 626d 636c 6f73 d5'}});..dbmclos\n+0001e3d0: 6528 257b 2473 656c 662d 3e7b 2766 696c e(%{$self->{'fil\n+0001e3e0: 656e 616d 6527 7d7d 293b 0a0a 096d 7920 ename'}});...my \n+0001e3f0: 2466 3120 3d20 2473 656c 662d 3e7b 2744 $f1 = $self->{'D\n+0001e400: 424d 6669 6c65 6e61 6d65 5374 7269 6e67 BMfilenameString\n+0001e410: 277d 3b0a 096d 7920 2466 3220 3d20 2473 '};..my $f2 = $s\n+0001e420: 656c 662d 3e7b 2744 424d 6d64 3553 7472 elf->{'DBMmd5Str\n+0001e430: 696e 6727 7d3b 0a0a 0924 7365 6c66 2d3e ing'};...$self->\n+0001e440: 7b27 7072 4c6f 6727 7d2d 3e70 7269 6e74 {'prLog'}->print\n+0001e450: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n+0001e460: 0a09 0909 0927 2d73 7472 2720 3d3e 205b .....'-str' => [\n+0001e470: 2275 6e6c 696e 6b20 2466 312c 2024 6632 \"unlink $f1, $f2\n+0001e480: 225d 293b 0a0a 0975 6e6c 696e 6b20 3c24 \"]);...unlink <$\n+0001e490: 6631 2a3e 3b0a 0975 6e6c 696e 6b20 3c24 f1*>;..unlink <$\n+0001e4a0: 6632 2a3e 3b0a 2020 2020 7d0a 7d0a 0a0a f2*>;. }.}...\n+0001e4b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e4c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e4d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001e4e0: 2323 0a23 2073 6368 7265 6962 7420 6e65 ##.# schreibt ne\n+0001e4f0: 7565 204d 6574 612d 496e 666f 726d 6174 ue Meta-Informat\n+0001e500: 696f 6e65 6e20 696e 2064 626d 7320 2b20 ionen in dbms + \n+0001e510: 2e6d 6435 4368 6563 6b53 756d 0a70 6163 .md5CheckSum.pac\n+0001e520: 6b61 6765 2061 6b74 4669 6c65 6e61 6d65 kage aktFilename\n+0001e530: 3b0a 0a73 7562 206e 6577 0a7b 0a20 2020 ;..sub new.{. \n+0001e540: 206d 7920 2463 6c61 7373 203d 2073 6869 my $class = shi\n+0001e550: 6674 3b0a 2020 2020 6d79 2024 7365 6c66 ft;. my $self\n+0001e560: 203d 207b 7d3b 0a0a 2020 2020 6d79 2028 = {};.. my (\n+0001e570: 2570 6172 616d 7329 203d 2028 272d 696e %params) = ('-in\n+0001e580: 666f 4669 6c65 2720 2020 2020 2020 203d foFile' =\n+0001e590: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+0001e5a0: 2d62 6c6f 636b 4368 6563 6b53 756d 4669 -blockCheckSumFi\n+0001e5b0: 6c65 2720 3d3e 2075 6e64 6566 2c0a 0909 le' => undef,...\n+0001e5c0: 2020 2020 272d 636f 6d70 7265 7373 4d44 '-compressMD\n+0001e5d0: 3546 696c 6527 203d 3e20 756e 6465 662c 5File' => undef,\n+0001e5e0: 0a09 0920 2020 2027 2d73 6f75 7263 6544 ... '-sourceD\n+0001e5f0: 6972 2720 2020 2020 2020 3d3e 2075 6e64 ir' => und\n+0001e600: 6566 2c0a 0909 2020 2020 272d 666f 6c6c ef,... '-foll\n+0001e610: 6f77 4c69 6e6b 7327 2020 2020 203d 3e20 owLinks' => \n+0001e620: 756e 6465 662c 0a09 0920 2020 2027 2d63 undef,... '-c\n+0001e630: 6f6d 7072 6573 7327 2020 2020 2020 2020 ompress' \n+0001e640: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n+0001e650: 272d 756e 636f 6d70 7265 7373 2720 2020 '-uncompress' \n+0001e660: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+0001e670: 2020 2027 2d70 6f73 7466 6978 2720 2020 '-postfix' \n+0001e680: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,.\n+0001e690: 0909 2020 2020 272d 6578 6365 7074 4469 .. '-exceptDi\n+0001e6a0: 7273 2720 2020 2020 203d 3e20 5b5d 2c0a rs' => [],.\n+0001e6b0: 0909 2020 2020 272d 696e 636c 7564 6544 .. '-includeD\n+0001e6c0: 6972 7327 2020 2020 203d 3e20 5b5d 2c0a irs' => [],.\n+0001e6d0: 0909 2020 2020 272d 636f 6d70 7252 756c .. '-comprRul\n+0001e6e0: 6527 2020 2020 2020 203d 3e20 5b5d 2c0a e' => [],.\n+0001e6f0: 0909 2020 2020 272d 6578 6365 7074 5275 .. '-exceptRu\n+0001e700: 6c65 2720 2020 2020 203d 3e20 5b5d 2c0a le' => [],.\n+0001e710: 0909 2020 2020 272d 696e 636c 7564 6552 .. '-includeR\n+0001e720: 756c 6527 2020 2020 203d 3e20 5b5d 2c0a ule' => [],.\n+0001e730: 0909 2020 2020 272d 7772 6974 6545 7863 .. '-writeExc\n+0001e740: 6c75 6465 4c6f 6727 203d 3e20 756e 6465 ludeLog' => unde\n+0001e750: 662c 0a09 0920 2020 2027 2d65 7863 6570 f,... '-excep\n+0001e760: 7454 7970 6573 2720 2020 2020 3d3e 2075 tTypes' => u\n+0001e770: 6e64 6566 2c0a 0909 2020 2020 272d 6368 ndef,... '-ch\n+0001e780: 6563 6b42 6c6f 636b 7352 756c 6527 203d eckBlocksRule' =\n+0001e790: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e7a0: 6563 6b42 6c6f 636b 7342 5327 2020 203d eckBlocksBS' =\n+0001e7b0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e7c0: 6563 6b42 6c6f 636b 7343 6f6d 7072 273d eckBlocksCompr'=\n+0001e7d0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e7e0: 6563 6b42 6c6f 636b 7352 6561 6427 203d eckBlocksRead' =\n+0001e7f0: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e800: 6563 6b44 6576 6963 6573 2720 2020 203d eckDevices' =\n+0001e810: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e820: 6563 6b44 6576 6963 6573 4469 7227 203d eckDevicesDir' =\n+0001e830: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e840: 6563 6b44 6576 6963 6573 4253 2720 203d eckDevicesBS' =\n+0001e850: 3e20 5b5d 2c0a 0909 2020 2020 272d 6368 > [],... '-ch\n+0001e860: 6563 6b44 6576 6963 6573 436f 6d70 7227 eckDevicesCompr'\n+0001e870: 203d 3e20 5b5d 2c0a 0909 2020 2020 272d => [],... '-\n+0001e880: 6c61 7465 4c69 6e6b 7327 2020 2020 2020 lateLinks' \n+0001e890: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+0001e8a0: 2027 2d6c 6f67 496e 4261 636b 7570 4469 '-logInBackupDi\n+0001e8b0: 7227 2020 3d3e 2075 6e64 6566 2c0a 0909 r' => undef,...\n+0001e8c0: 2020 2020 272d 636f 6d70 7265 7373 4c6f '-compressLo\n+0001e8d0: 6749 6e42 6163 6b75 7044 6972 2720 3d3e gInBackupDir' =>\n+0001e8e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+0001e8f0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+0001e900: 6c65 4e61 6d65 2720 3d3e 2075 6e64 6566 leName' => undef\n+0001e910: 2c0a 0909 2020 2020 272d 616b 7444 6174 ,... '-aktDat\n+0001e920: 6527 2020 2020 2020 2020 203d 3e20 756e e' => un\n+0001e930: 6465 662c 0a09 0920 2020 2027 2d70 724c def,... '-prL\n+0001e940: 6f67 2720 2020 2020 2020 2020 2020 3d3e og' =>\n+0001e950: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+0001e960: 6368 6d6f 644d 4435 4669 6c65 2720 2020 chmodMD5File' \n+0001e970: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+0001e980: 2027 2d69 6e64 6578 4469 7227 2020 2020 '-indexDir' \n+0001e990: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+0001e9a0: 2020 2020 272d 6465 6275 674d 6f64 6527 '-debugMode'\n+0001e9b0: 2020 2020 2020 203d 3e20 276e 6f27 293b => 'no');\n+0001e9c0: 0a0a 2020 2020 263a 3a63 6865 636b 4f62 .. &::checkOb\n+0001e9d0: 6a65 6374 5061 7261 6d73 285c 2570 6172 jectParams(\\%par\n+0001e9e0: 616d 732c 205c 405f 2c20 2761 6b74 4669 ams, \\@_, 'aktFi\n+0001e9f0: 6c65 6e61 6d65 3a3a 6e65 7727 2c0a 0909 lename::new',...\n+0001ea00: 0920 5b27 2d69 6e66 6f46 696c 6527 2c20 . ['-infoFile', \n+0001ea10: 272d 626c 6f63 6b43 6865 636b 5375 6d46 '-blockCheckSumF\n+0001ea20: 696c 6527 2c0a 0909 0920 2027 2d63 6f6d ile',.... '-com\n+0001ea30: 7072 6573 734d 4435 4669 6c65 272c 2027 pressMD5File', '\n+0001ea40: 2d73 6f75 7263 6544 6972 272c 2027 2d66 -sourceDir', '-f\n+0001ea50: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',....\n+0001ea60: 2020 272d 636f 6d70 7265 7373 272c 2027 '-compress', '\n+0001ea70: 2d75 6e63 6f6d 7072 6573 7327 2c20 272d -uncompress', '-\n+0001ea80: 706f 7374 6669 7827 2c0a 0909 0920 2027 postfix',.... '\n+0001ea90: 2d65 7863 6570 7444 6972 7327 2c20 272d -exceptDirs', '-\n+0001eaa0: 636f 6d70 7252 756c 6527 2c0a 0909 0920 comprRule',.... \n+0001eab0: 2027 2d69 6e63 6c75 6465 4469 7273 272c '-includeDirs',\n+0001eac0: 2027 2d65 7863 6570 7452 756c 6527 2c20 '-exceptRule', \n+0001ead0: 272d 6578 6365 7074 5479 7065 7327 2c0a '-exceptTypes',.\n+0001eae0: 0909 0920 2027 2d69 6e63 6c75 6465 5275 ... '-includeRu\n+0001eaf0: 6c65 272c 2027 2d63 6865 636b 426c 6f63 le', '-checkBloc\n+0001eb00: 6b73 5275 6c65 272c 0a09 0909 2020 272d ksRule',.... '-\n+0001eb10: 6368 6563 6b42 6c6f 636b 7342 5327 2c20 checkBlocksBS', \n+0001eb20: 272d 6368 6563 6b42 6c6f 636b 7343 6f6d '-checkBlocksCom\n+0001eb30: 7072 272c 0a09 0909 2020 272d 6368 6563 pr',.... '-chec\n+0001eb40: 6b42 6c6f 636b 7352 6561 6427 2c0a 0909 kBlocksRead',...\n+0001eb50: 0920 2027 2d63 6865 636b 4465 7669 6365 . '-checkDevice\n+0001eb60: 7342 5327 2c20 272d 6368 6563 6b44 6576 sBS', '-checkDev\n+0001eb70: 6963 6573 272c 0a09 0909 2020 272d 6368 ices',.... '-ch\n+0001eb80: 6563 6b44 6576 6963 6573 4469 7227 2c0a eckDevicesDir',.\n+0001eb90: 0909 0920 2027 2d63 6865 636b 4465 7669 ... '-checkDevi\n+0001eba0: 6365 7343 6f6d 7072 272c 2027 2d61 6b74 cesCompr', '-akt\n+0001ebb0: 4461 7465 272c 0a09 0909 2020 272d 7072 Date',.... '-pr\n+0001ebc0: 4c6f 6727 2c20 272d 6368 6d6f 644d 4435 Log', '-chmodMD5\n+0001ebd0: 4669 6c65 272c 2027 2d69 6e64 6578 4469 File', '-indexDi\n+0001ebe0: 7227 5d29 3b0a 2020 2020 263a 3a73 6574 r']);. &::set\n+0001ebf0: 5061 7261 6d73 4469 7265 6374 2824 7365 ParamsDirect($se\n+0001ec00: 6c66 2c20 5c25 7061 7261 6d73 293b 0a0a lf, \\%params);..\n+0001ec10: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n+0001ec20: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n+0001ec30: 3b0a 0a20 2020 206d 7920 2465 7863 6570 ;.. my $excep\n+0001ec40: 7452 756c 6520 3d20 2473 656c 662d 3e7b tRule = $self->{\n+0001ec50: 2765 7863 6570 7452 756c 6527 7d2d 3e68 'exceptRule'}->h\n+0001ec60: 6173 4c69 6e65 2829 203f 0a09 2227 2220 asLine() ?..\"'\" \n+0001ec70: 2e20 6a6f 696e 2822 2720 2722 2c20 407b . join(\"' '\", @{\n+0001ec80: 2473 656c 662d 3e7b 2765 7863 6570 7452 $self->{'exceptR\n+0001ec90: 756c 6527 7d2d 3e67 6574 4c69 6e65 2829 ule'}->getLine()\n+0001eca0: 7d29 202e 2022 2722 203a 2027 273b 0a20 }) . \"'\" : '';. \n+0001ecb0: 2020 206d 7920 2469 6e63 6c75 6465 5275 my $includeRu\n+0001ecc0: 6c65 203d 2024 7365 6c66 2d3e 7b27 696e le = $self->{'in\n+0001ecd0: 636c 7564 6552 756c 6527 7d2d 3e68 6173 cludeRule'}->has\n+0001ece0: 4c69 6e65 2829 203f 0a09 2227 2220 2e20 Line() ?..\"'\" . \n+0001ecf0: 6a6f 696e 2822 2720 2722 2c20 407b 2473 join(\"' '\", @{$s\n+0001ed00: 656c 662d 3e7b 2769 6e63 6c75 6465 5275 elf->{'includeRu\n+0001ed10: 6c65 277d 2d3e 6765 744c 696e 6528 297d le'}->getLine()}\n+0001ed20: 2920 2e20 2227 2220 3a20 2727 3b0a 2020 ) . \"'\" : '';. \n+0001ed30: 2020 6d79 2024 636f 6d70 7252 756c 6520 my $comprRule \n+0001ed40: 3d20 2473 656c 662d 3e7b 2763 6f6d 7072 = $self->{'compr\n+0001ed50: 5275 6c65 277d 2d3e 6861 734c 696e 6528 Rule'}->hasLine(\n+0001ed60: 2920 3f0a 0922 2722 202e 206a 6f69 6e28 ) ?..\"'\" . join(\n+0001ed70: 2227 2027 222c 2040 7b24 7365 6c66 2d3e \"' '\", @{$self->\n+0001ed80: 7b27 636f 6d70 7252 756c 6527 7d2d 3e67 {'comprRule'}->g\n+0001ed90: 6574 4c69 6e65 2829 7d29 202e 2022 2722 etLine()}) . \"'\"\n+0001eda0: 203a 2027 273b 0a20 2020 206d 7920 2465 : '';. my $e\n+0001edb0: 7863 6570 7444 6972 7320 3d20 407b 2473 xceptDirs = @{$s\n+0001edc0: 656c 662d 3e7b 2765 7863 6570 7444 6972 elf->{'exceptDir\n+0001edd0: 7327 7d7d 203f 0a09 2227 2220 2e20 6a6f s'}} ?..\"'\" . jo\n+0001ede0: 696e 2822 2720 2722 2c20 407b 2473 656c in(\"' '\", @{$sel\n+0001edf0: 662d 3e7b 2765 7863 6570 7444 6972 7327 f->{'exceptDirs'\n+0001ee00: 7d7d 2920 2e20 2227 2220 3a20 2727 3b0a }}) . \"'\" : '';.\n+0001ee10: 2020 2020 2465 7863 6570 7444 6972 7320 $exceptDirs \n+0001ee20: 3d7e 2073 2f5c 5c2f 5c5c 3543 2f6f 673b =~ s/\\\\/\\\\5C/og;\n+0001ee30: 2020 2020 2320 275c 5c27 2073 746f 7265 # '\\\\' store\n+0001ee40: 6420 6173 205c 3543 0a20 2020 2024 6578 d as \\5C. $ex\n+0001ee50: 6365 7074 4469 7273 203d 7e20 732f 5c6e ceptDirs =~ s/\\n\n+0001ee60: 2f5c 5c30 412f 736f 673b 2020 2023 2027 /\\\\0A/sog; # '\n+0001ee70: 5c6e 2720 7374 6f72 6564 2061 7320 5c30 \\n' stored as \\0\n+0001ee80: 410a 2020 2020 6d79 2024 696e 636c 7564 A. my $includ\n+0001ee90: 6544 6972 7320 3d20 407b 2473 656c 662d eDirs = @{$self-\n+0001eea0: 3e7b 2769 6e63 6c75 6465 4469 7273 277d >{'includeDirs'}\n+0001eeb0: 7d20 3f0a 0922 2722 202e 206a 6f69 6e28 } ?..\"'\" . join(\n+0001eec0: 2227 2027 222c 2040 7b24 7365 6c66 2d3e \"' '\", @{$self->\n+0001eed0: 7b27 696e 636c 7564 6544 6972 7327 7d7d {'includeDirs'}}\n+0001eee0: 2920 2e20 2227 2220 3a20 2727 3b0a 2020 ) . \"'\" : '';. \n+0001eef0: 2020 2469 6e63 6c75 6465 4469 7273 203d $includeDirs =\n+0001ef00: 7e20 732f 5c5c 2f5c 5c35 432f 6f67 3b20 ~ s/\\\\/\\\\5C/og; \n+0001ef10: 2020 2023 2027 5c5c 2720 7374 6f72 6564 # '\\\\' stored\n+0001ef20: 2061 7320 5c35 430a 2020 2020 2469 6e63 as \\5C. $inc\n+0001ef30: 6c75 6465 4469 7273 203d 7e20 732f 5c6e ludeDirs =~ s/\\n\n+0001ef40: 2f5c 5c30 412f 736f 673b 2020 2023 2027 /\\\\0A/sog; # '\n+0001ef50: 5c6e 2720 7374 6f72 6564 2061 7320 5c30 \\n' stored as \\0\n+0001ef60: 410a 2020 2020 6d79 2024 6578 6365 7074 A. my $except\n+0001ef70: 5479 7065 7320 3d20 2473 656c 662d 3e7b Types = $self->{\n+0001ef80: 2765 7863 6570 7454 7970 6573 277d 203f 'exceptTypes'} ?\n+0001ef90: 2024 7365 6c66 2d3e 7b27 6578 6365 7074 $self->{'except\n+0001efa0: 5479 7065 7327 7d20 3a20 2727 3b0a 2020 Types'} : '';. \n+0001efb0: 2020 6d79 2024 7364 203d 2024 7365 6c66 my $sd = $self\n+0001efc0: 2d3e 7b27 736f 7572 6365 4469 7227 7d3b ->{'sourceDir'};\n+0001efd0: 0a20 2020 2024 7364 203d 7e20 732f 5c5c . $sd =~ s/\\\\\n+0001efe0: 2f5c 5c35 432f 6f67 3b20 2020 2023 2027 /\\\\5C/og; # '\n+0001eff0: 5c5c 2720 7374 6f72 6564 2061 7320 5c35 \\\\' stored as \\5\n+0001f000: 430a 2020 2020 2473 6420 3d7e 2073 2f5c C. $sd =~ s/\\\n+0001f010: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\\\0A/sog; # \n+0001f020: 275c 6e27 2073 746f 7265 6420 6173 205c '\\n' stored as \\\n+0001f030: 3041 0a20 2020 2024 7364 203d 7e20 732f 0A. $sd =~ s/\n+0001f040: 5c27 2f5c 5c5c 272f 736f 673b 2020 2023 \\'/\\\\\\'/sog; #\n+0001f050: 2027 2073 746f 7265 6420 6173 205c 270a ' stored as \\'.\n+0001f060: 2020 2020 6d79 2024 6c6f 6749 6e42 6163 my $logInBac\n+0001f070: 6b75 7044 6972 4669 6c65 4e61 6d65 203d kupDirFileName =\n+0001f080: 2024 7365 6c66 2d3e 7b27 6c6f 6749 6e42 $self->{'logInB\n+0001f090: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName\n+0001f0a0: 277d 3b0a 2020 2020 246c 6f67 496e 4261 '};. $logInBa\n+0001f0b0: 636b 7570 4469 7246 696c 654e 616d 6520 ckupDirFileName \n+0001f0c0: 3d7e 2073 2f5c 5c2f 5c5c 3543 2f6f 673b =~ s/\\\\/\\\\5C/og;\n+0001f0d0: 2020 2020 2320 275c 5c27 2073 746f 7265 # '\\\\' store\n+0001f0e0: 6420 6173 205c 3543 0a20 2020 2024 6c6f d as \\5C. $lo\n+0001f0f0: 6749 6e42 6163 6b75 7044 6972 4669 6c65 gInBackupDirFile\n+0001f100: 4e61 6d65 203d 7e20 732f 5c6e 2f5c 5c30 Name =~ s/\\n/\\\\0\n+0001f110: 412f 736f 673b 2020 2023 2027 5c6e 2720 A/sog; # '\\n' \n+0001f120: 7374 6f72 6564 2061 7320 5c30 410a 2020 stored as \\0A. \n+0001f130: 2020 246c 6f67 496e 4261 636b 7570 4469 $logInBackupDi\n+0001f140: 7246 696c 654e 616d 6520 3d7e 2073 2f5c rFileName =~ s/\\\n+0001f150: 272f 5c5c 5c27 2f73 6f67 3b20 2020 2320 '/\\\\\\'/sog; # \n+0001f160: 2720 7374 6f72 6564 2061 7320 5c27 0a0a ' stored as \\'..\n+0001f170: 2020 2020 6d79 2028 4062 6c6f 636b 7352 my (@blocksR\n+0001f180: 756c 6573 2c20 2469 293b 0a20 2020 206d ules, $i);. m\n+0001f190: 7920 2463 6865 636b 426c 6f63 6b73 5275 y $checkBlocksRu\n+0001f1a0: 6c65 203d 2024 7365 6c66 2d3e 7b27 6368 le = $self->{'ch\n+0001f1b0: 6563 6b42 6c6f 636b 7352 756c 6527 7d3b eckBlocksRule'};\n+0001f1c0: 0a20 2020 206d 7920 2463 6865 636b 426c . my $checkBl\n+0001f1d0: 6f63 6b73 4253 203d 2024 7365 6c66 2d3e ocksBS = $self->\n+0001f1e0: 7b27 6368 6563 6b42 6c6f 636b 7342 5327 {'checkBlocksBS'\n+0001f1f0: 7d3b 0a20 2020 2066 6f72 6561 6368 2024 };. foreach $\n+0001f200: 6920 2830 2e2e 4024 6368 6563 6b42 6c6f i (0..@$checkBlo\n+0001f210: 636b 7352 756c 652d 3129 0a20 2020 207b cksRule-1). {\n+0001f220: 0a09 6d79 2024 6272 203d 2022 6368 6563 ..my $br = \"chec\n+0001f230: 6b42 6c6f 636b 7352 756c 6524 693d 223b kBlocksRule$i=\";\n+0001f240: 0a09 6d79 2024 6273 203d 2022 6368 6563 ..my $bs = \"chec\n+0001f250: 6b42 6c6f 636b 7342 5324 693d 223b 0a09 kBlocksBS$i=\";..\n+0001f260: 6d79 2024 6263 203d 2022 6368 6563 6b42 my $bc = \"checkB\n+0001f270: 6c6f 636b 7343 6f6d 7072 2469 3d22 3b0a locksCompr$i=\";.\n+0001f280: 096d 7920 2462 7265 6164 203d 2022 6368 .my $bread = \"ch\n+0001f290: 6563 6b42 6c6f 636b 7352 6561 6424 693d eckBlocksRead$i=\n+0001f2a0: 223b 0a0a 096d 7920 2840 6362 7229 203d \";...my (@cbr) =\n+0001f2b0: 2040 2463 6865 636b 426c 6f63 6b73 5275 @$checkBlocksRu\n+0001f2c0: 6c65 3b0a 0969 6620 2864 6566 696e 6564 le;..if (defined\n+0001f2d0: 2024 6362 725b 2469 5d29 0a09 7b0a 0920 $cbr[$i])..{.. \n+0001f2e0: 2020 2024 6272 202e 3d20 2227 2220 2e20 $br .= \"'\" . \n+0001f2f0: 6a6f 696e 2827 2027 2c20 407b 2463 6272 join(' ', @{$cbr\n+0001f300: 5b24 695d 7d29 202e 2022 2722 3b0a 0920 [$i]}) . \"'\";.. \n+0001f310: 2020 2024 6273 202e 3d20 2424 6368 6563 $bs .= $$chec\n+0001f320: 6b42 6c6f 636b 7342 535b 2469 5d3b 0a09 kBlocksBS[$i];..\n+0001f330: 2020 2020 2462 6320 2e3d 2024 6368 6563 $bc .= $chec\n+0001f340: 6b42 6c6f 636b 7343 6f6d 7072 5b24 695d kBlocksCompr[$i]\n+0001f350: 203f 2027 7965 7327 203a 2027 6e6f 273b ? 'yes' : 'no';\n+0001f360: 0a09 2020 2020 2462 7265 6164 202e 3d20 .. $bread .= \n+0001f370: 2463 6865 636b 426c 6f63 6b73 5265 6164 $checkBlocksRead\n+0001f380: 5b24 695d 0a09 093f 2022 2722 202e 206a [$i]...? \"'\" . j\n+0001f390: 6f69 6e28 2720 272c 2040 7b24 6368 6563 oin(' ', @{$chec\n+0001f3a0: 6b42 6c6f 636b 7352 6561 645b 2469 5d7d kBlocksRead[$i]}\n+0001f3b0: 2920 2e20 2227 2220 3a20 2727 3b0a 097d ) . \"'\" : '';..}\n+0001f3c0: 0a09 2462 7220 3d7e 2073 2f5c 5c2f 5c5c ..$br =~ s/\\\\/\\\\\n+0001f3d0: 3543 2f6f 673b 2020 2020 2320 275c 5c27 5C/og; # '\\\\'\n+0001f3e0: 2073 746f 7265 6420 6173 205c 3543 0a09 stored as \\5C..\n+0001f3f0: 2462 7220 3d7e 2073 2f5c 6e2f 5c5c 3041 $br =~ s/\\n/\\\\0A\n+0001f400: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\\n' s\n+0001f410: 746f 7265 6420 6173 205c 3041 0a09 7075 tored as \\0A..pu\n+0001f420: 7368 2040 626c 6f63 6b73 5275 6c65 732c sh @blocksRules,\n+0001f430: 2024 6272 2c20 2462 732c 2024 6263 2c20 $br, $bs, $bc, \n+0001f440: 2462 7265 6164 3b0a 2020 2020 7d0a 2020 $bread;. }. \n+0001f450: 2020 6d79 2028 4064 6576 6963 6573 293b my (@devices);\n+0001f460: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe\n+0001f470: 7669 6365 7320 3d20 2473 656c 662d 3e7b vices = $self->{\n+0001f480: 2763 6865 636b 4465 7669 6365 7327 7d3b 'checkDevices'};\n+0001f490: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe\n+0001f4a0: 7669 6365 7344 6972 203d 2024 7365 6c66 vicesDir = $self\n+0001f4b0: 2d3e 7b27 6368 6563 6b44 6576 6963 6573 ->{'checkDevices\n+0001f4c0: 4469 7227 7d3b 0a20 2020 206d 7920 2463 Dir'};. my $c\n+0001f4d0: 6865 636b 4465 7669 6365 7342 5320 3d20 heckDevicesBS = \n+0001f4e0: 2473 656c 662d 3e7b 2763 6865 636b 4465 $self->{'checkDe\n+0001f4f0: 7669 6365 7342 5327 7d3b 0a20 2020 206d vicesBS'};. m\n+0001f500: 7920 2463 6865 636b 4465 7669 6365 7343 y $checkDevicesC\n+0001f510: 6f6d 7072 203d 2024 7365 6c66 2d3e 7b27 ompr = $self->{'\n+0001f520: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp\n+0001f530: 7227 7d3b 0a20 2020 2066 6f72 6561 6368 r'};. foreach\n+0001f540: 2024 6920 2830 2e2e 4024 6368 6563 6b44 $i (0..@$checkD\n+0001f550: 6576 6963 6573 2d31 290a 2020 2020 7b0a evices-1). {.\n+0001f560: 0970 7573 6820 4064 6576 6963 6573 2c0a .push @devices,.\n+0001f570: 0922 6368 6563 6b44 6576 6963 6573 2469 .\"checkDevices$i\n+0001f580: 3d22 202e 2024 6368 6563 6b44 6576 6963 =\" . $checkDevic\n+0001f590: 6573 5b24 695d 2c0a 0922 6368 6563 6b44 es[$i],..\"checkD\n+0001f5a0: 6576 6963 6573 4469 7224 693d 2220 2e20 evicesDir$i=\" . \n+0001f5b0: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir\n+0001f5c0: 5b24 695d 2c0a 0922 6368 6563 6b44 6576 [$i],..\"checkDev\n+0001f5d0: 6963 6573 4253 2469 3d22 202e 2024 6368 icesBS$i=\" . $ch\n+0001f5e0: 6563 6b44 6576 6963 6573 4253 5b24 695d eckDevicesBS[$i]\n+0001f5f0: 2c0a 0922 6368 6563 6b44 6576 6963 6573 ,..\"checkDevices\n+0001f600: 436f 6d70 7224 693d 2220 2e20 2463 6865 Compr$i=\" . $che\n+0001f610: 636b 4465 7669 6365 7343 6f6d 7072 5b24 ckDevicesCompr[$\n+0001f620: 695d 3b0a 2020 2020 7d0a 2020 2020 6d79 i];. }. my\n+0001f630: 2028 4069 6e66 6f4c 696e 6573 2920 3d20 (@infoLines) = \n+0001f640: 2822 7665 7273 696f 6e3d 2220 2e20 246d (\"version=\" . $m\n+0001f650: 6169 6e3a 3a63 6865 636b 5375 6d46 696c ain::checkSumFil\n+0001f660: 6556 6572 7369 6f6e 2c0a 0909 2020 2020 eVersion,... \n+0001f670: 2020 2022 6461 7465 3d22 202e 0a09 0920 \"date=\" .... \n+0001f680: 2020 2020 2020 2473 656c 662d 3e7b 2761 $self->{'a\n+0001f690: 6b74 4461 7465 277d 2d3e 6765 7444 6174 ktDate'}->getDat\n+0001f6a0: 6554 696d 6528 272d 666f 726d 6174 2720 eTime('-format' \n+0001f6b0: 3d3e 0a09 0909 0909 0920 2020 2020 2020 =>....... \n+0001f6c0: 2725 592e 254d 2e25 4420 2568 2e25 6d2e '%Y.%M.%D %h.%m.\n+0001f6d0: 2573 2729 2c0a 0909 2020 2020 2020 2022 %s'),... \"\n+0001f6e0: 736f 7572 6365 4469 723d 2220 2e20 2227 sourceDir=\" . \"'\n+0001f6f0: 2220 2e20 2473 6420 2e20 2227 222c 0a09 \" . $sd . \"'\",..\n+0001f700: 0920 2020 2020 2020 2266 6f6c 6c6f 774c . \"followL\n+0001f710: 696e 6b73 3d22 202e 2024 7365 6c66 2d3e inks=\" . $self->\n+0001f720: 7b27 666f 6c6c 6f77 4c69 6e6b 7327 7d2c {'followLinks'},\n+0001f730: 0a09 0920 2020 2020 2020 2263 6f6d 7072 ... \"compr\n+0001f740: 6573 733d 2220 2e0a 0909 2020 2020 2020 ess=\" .... \n+0001f750: 2022 2722 202e 206a 6f69 6e28 2227 2027 \"'\" . join(\"' '\n+0001f760: 222c 2040 7b24 7365 6c66 2d3e 7b27 636f \", @{$self->{'co\n+0001f770: 6d70 7265 7373 277d 7d29 202e 2022 2722 mpress'}}) . \"'\"\n+0001f780: 2c0a 0909 2020 2020 2020 2022 756e 636f ,... \"unco\n+0001f790: 6d70 7265 7373 3d22 202e 0a09 0920 2020 mpress=\" .... \n+0001f7a0: 2020 2020 2227 2220 2e20 6a6f 696e 2822 \"'\" . join(\"\n+0001f7b0: 2720 2722 2c20 407b 2473 656c 662d 3e7b ' '\", @{$self->{\n+0001f7c0: 2775 6e63 6f6d 7072 6573 7327 7d7d 2920 'uncompress'}}) \n+0001f7d0: 2e20 2227 222c 0a09 0920 2020 2020 2020 . \"'\",... \n+0001f7e0: 2270 6f73 7466 6978 3d22 202e 2022 2722 \"postfix=\" . \"'\"\n+0001f7f0: 202e 2024 7365 6c66 2d3e 7b27 706f 7374 . $self->{'post\n+0001f800: 6669 7827 7d20 2e20 2227 222c 0a09 0920 fix'} . \"'\",... \n+0001f810: 2020 2020 2020 2263 6f6d 7072 5275 6c65 \"comprRule\n+0001f820: 3d22 202e 2024 636f 6d70 7252 756c 652c =\" . $comprRule,\n+0001f830: 0a09 0920 2020 2020 2020 2265 7863 6570 ... \"excep\n+0001f840: 7444 6972 733d 2220 2e20 2465 7863 6570 tDirs=\" . $excep\n+0001f850: 7444 6972 732c 0a09 0920 2020 2020 2020 tDirs,... \n+0001f860: 2269 6e63 6c75 6465 4469 7273 3d22 202e \"includeDirs=\" .\n+0001f870: 2024 696e 636c 7564 6544 6972 732c 0a09 $includeDirs,..\n+0001f880: 0920 2020 2020 2020 2265 7863 6570 7452 . \"exceptR\n+0001f890: 756c 653d 2220 2e20 2465 7863 6570 7452 ule=\" . $exceptR\n+0001f8a0: 756c 652c 0a09 0920 2020 2020 2020 2269 ule,... \"i\n+0001f8b0: 6e63 6c75 6465 5275 6c65 3d22 202e 2024 ncludeRule=\" . $\n+0001f8c0: 696e 636c 7564 6552 756c 652c 0a09 0920 includeRule,... \n+0001f8d0: 2020 2020 2020 2277 7269 7465 4578 636c \"writeExcl\n+0001f8e0: 7564 654c 6f67 3d22 202e 0a09 0920 2020 udeLog=\" .... \n+0001f8f0: 2020 2020 2020 2020 2824 7365 6c66 2d3e ($self->\n+0001f900: 7b27 7772 6974 6545 7863 6c75 6465 4c6f {'writeExcludeLo\n+0001f910: 6727 7d20 3f20 2779 6573 2720 3a20 276e g'} ? 'yes' : 'n\n+0001f920: 6f27 292c 0a09 0920 2020 2020 2020 2265 o'),... \"e\n+0001f930: 7863 6570 7454 7970 6573 3d22 202e 2024 xceptTypes=\" . $\n+0001f940: 6578 6365 7074 5479 7065 732c 0a09 0920 exceptTypes,... \n+0001f950: 2020 2020 2020 4062 6c6f 636b 7352 756c @blocksRul\n+0001f960: 6573 2c0a 0909 2020 2020 2020 2040 6465 es,... @de\n+0001f970: 7669 6365 732c 0a09 0920 2020 2020 2020 vices,... \n+0001f980: 2270 7265 7365 7276 6550 6572 6d73 3d22 \"preservePerms=\"\n+0001f990: 202e 2028 2470 7265 7365 7276 6550 6572 . ($preservePer\n+0001f9a0: 6d73 203f 2027 7965 7327 203a 2027 6e6f ms ? 'yes' : 'no\n+0001f9b0: 2729 2c0a 0909 2020 2020 2020 2022 6c61 '),... \"la\n+0001f9c0: 7465 4c69 6e6b 733d 222e 2028 246c 6174 teLinks=\". ($lat\n+0001f9d0: 654c 696e 6b73 203f 2027 7965 7327 203a eLinks ? 'yes' :\n+0001f9e0: 2027 6e6f 2729 2c0a 0909 2020 2020 2020 'no'),... \n+0001f9f0: 2022 6c61 7465 436f 6d70 7265 7373 3d22 \"lateCompress=\"\n+0001fa00: 202e 2028 246c 6174 6543 6f6d 7072 6573 . ($lateCompres\n+0001fa10: 7320 3f20 2779 6573 2720 3a20 276e 6f27 s ? 'yes' : 'no'\n+0001fa20: 292c 0a09 0920 2020 2020 2020 2263 7049 ),... \"cpI\n+0001fa30: 7347 6e75 3d22 2e20 2824 676e 7563 7020 sGnu=\". ($gnucp \n+0001fa40: 3f20 2779 6573 2720 3a20 276e 6f27 292c ? 'yes' : 'no'),\n+0001fa50: 0a09 0920 2020 2020 2020 226c 6f67 496e ... \"logIn\n+0001fa60: 4261 636b 7570 4469 723d 2220 2e0a 0909 BackupDir=\" ....\n+0001fa70: 2020 2020 2020 2020 2020 2028 2473 656c ($sel\n+0001fa80: 662d 3e7b 276c 6f67 496e 4261 636b 7570 f->{'logInBackup\n+0001fa90: 4469 7227 7d20 3f20 2779 6573 2720 3a20 Dir'} ? 'yes' : \n+0001faa0: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... \n+0001fab0: 2263 6f6d 7072 6573 734c 6f67 496e 4261 \"compressLogInBa\n+0001fac0: 636b 7570 4469 723d 2220 2e0a 0909 2020 ckupDir=\" .... \n+0001fad0: 2020 2020 2020 2020 2028 2473 656c 662d ($self-\n+0001fae0: 3e7b 2763 6f6d 7072 6573 734c 6f67 496e >{'compressLogIn\n+0001faf0: 4261 636b 7570 4469 7227 7d20 3f20 2779 BackupDir'} ? 'y\n+0001fb00: 6573 2720 3a20 276e 6f27 292c 0a09 0920 es' : 'no'),... \n+0001fb10: 2020 2020 2020 226c 6f67 496e 4261 636b \"logInBack\n+0001fb20: 7570 4469 7246 696c 654e 616d 653d 2220 upDirFileName=\" \n+0001fb30: 2e0a 0909 2020 2020 2020 2020 2020 2022 .... \"\n+0001fb40: 2722 202e 2024 6c6f 6749 6e42 6163 6b75 '\" . $logInBacku\n+0001fb50: 7044 6972 4669 6c65 4e61 6d65 202e 2022 pDirFileName . \"\n+0001fb60: 2722 0a09 0920 2020 2020 2020 293b 0a20 '\"... );. \n+0001fb70: 2020 206d 7920 2469 6e66 6f46 696c 6520 my $infoFile \n+0001fb80: 3d20 2473 656c 662d 3e7b 2769 6e66 6f46 = $self->{'infoF\n+0001fb90: 696c 6527 7d3b 0a0a 2020 2020 6d79 2024 ile'};.. my $\n+0001fba0: 7763 7366 203d 2077 7269 7465 4368 6563 wcsf = writeChec\n+0001fbb0: 6b53 756d 4669 6c65 2d3e 6e65 7728 272d kSumFile->new('-\n+0001fbc0: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' =>\n+0001fbd0: 2024 696e 666f 4669 6c65 2c0a 0909 0909 $infoFile,.....\n+0001fbe0: 2020 2020 2020 272d 626c 6f63 6b43 6865 '-blockChe\n+0001fbf0: 636b 5375 6d46 696c 6527 203d 3e0a 0909 ckSumFile' =>...\n+0001fc00: 0909 2020 2020 2020 2473 656c 662d 3e7b .. $self->{\n+0001fc10: 2762 6c6f 636b 4368 6563 6b53 756d 4669 'blockCheckSumFi\n+0001fc20: 6c65 277d 2c0a 0909 0909 2020 2020 2020 le'},..... \n+0001fc30: 272d 696e 666f 4c69 6e65 7327 203d 3e20 '-infoLines' => \n+0001fc40: 5c40 696e 666f 4c69 6e65 732c 0a09 0909 \\@infoLines,....\n+0001fc50: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n+0001fc60: 3d3e 2024 7072 4c6f 672c 0a09 0909 0920 => $prLog,..... \n+0001fc70: 2020 2020 2027 2d63 686d 6f64 4d44 3546 '-chmodMD5F\n+0001fc80: 696c 6527 203d 3e20 2473 656c 662d 3e7b ile' => $self->{\n+0001fc90: 2763 686d 6f64 4d44 3546 696c 6527 7d2c 'chmodMD5File'},\n+0001fca0: 0a09 0909 0920 2020 2020 2027 2d63 6f6d ..... '-com\n+0001fcb0: 7072 6573 734d 4435 4669 6c65 2720 3d3e pressMD5File' =>\n+0001fcc0: 0a09 0909 0920 2020 2020 2024 7365 6c66 ..... $self\n+0001fcd0: 2d3e 7b27 636f 6d70 7265 7373 4d44 3546 ->{'compressMD5F\n+0001fce0: 696c 6527 7d2c 0a09 0909 0920 2020 2020 ile'},..... \n+0001fcf0: 2027 2d6c 6174 654c 696e 6b73 2720 3d3e '-lateLinks' =>\n+0001fd00: 2024 6c61 7465 4c69 6e6b 7329 3b0a 2020 $lateLinks);. \n+0001fd10: 2020 2473 656c 662d 3e7b 2777 7269 7465 $self->{'write\n+0001fd20: 4368 6563 6b53 756d 4669 6c65 277d 203d CheckSumFile'} =\n+0001fd30: 2024 7763 7366 3b0a 0a20 2020 2062 6c65 $wcsf;.. ble\n+0001fd40: 7373 2024 7365 6c66 2c20 2463 6c61 7373 ss $self, $class\n+0001fd50: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+0001fd60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001fd70: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+0001fd80: 7562 2073 6574 4442 4d6d 6435 0a7b 0a20 ub setDBMmd5.{. \n+0001fd90: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n+0001fda0: 6966 743b 0a0a 2020 2020 2473 656c 662d ift;.. $self-\n+0001fdb0: 3e7b 2744 424d 6d64 3527 7d20 3d20 7368 >{'DBMmd5'} = sh\n+0001fdc0: 6966 743b 0a7d 0a0a 0a23 2323 2323 2323 ift;.}...#######\n+0001fdd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001fde0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+0001fdf0: 230a 2320 66c3 bc72 206e 6f72 6d61 6c65 #.# f..r normale\n+0001fe00: 2044 6174 6569 656e 0a73 7562 2073 746f Dateien.sub sto\n+0001fe10: 7265 0a7b 0a20 2020 206d 7920 2473 656c re.{. my $sel\n+0001fe20: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. \n+0001fe30: 6d79 2028 2570 6172 616d 7329 203d 2028 my (%params) = (\n+0001fe40: 272d 6669 6c65 6e61 6d65 2720 2020 203d '-filename' =\n+0001fe50: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+0001fe60: 2d6d 6435 7375 6d27 2020 2020 2020 3d3e -md5sum' =>\n+0001fe70: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+0001fe80: 636f 6d70 7227 2020 2020 2020 203d 3e20 compr' => \n+0001fe90: 756e 6465 662c 0a09 0920 2020 2027 2d64 undef,... '-d\n+0001fea0: 6576 2720 2020 2020 2020 2020 3d3e 2075 ev' => u\n+0001feb0: 6e64 6566 2c0a 0909 2020 2020 272d 696e ndef,... '-in\n+0001fec0: 6f64 6527 2020 2020 2020 203d 3e20 756e ode' => un\n+0001fed0: 6465 662c 0a09 0920 2020 2027 2d69 6e6f def,... '-ino\n+0001fee0: 6465 4261 636b 7570 2720 3d3e 2075 6e64 deBackup' => und\n+0001fef0: 6566 2c0a 0909 2020 2020 272d 6374 696d ef,... '-ctim\n+0001ff00: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde\n+0001ff10: 662c 0a09 0920 2020 2027 2d6d 7469 6d65 f,... '-mtime\n+0001ff20: 2720 2020 2020 2020 3d3e 2075 6e64 6566 ' => undef\n+0001ff30: 2c0a 0909 2020 2020 272d 6174 696d 6527 ,... '-atime'\n+0001ff40: 2020 2020 2020 203d 3e20 756e 6465 662c => undef,\n+0001ff50: 0a09 0920 2020 2027 2d73 697a 6527 2020 ... '-size' \n+0001ff60: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,.\n+0001ff70: 0909 2020 2020 272d 7569 6427 2020 2020 .. '-uid' \n+0001ff80: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,..\n+0001ff90: 0920 2020 2027 2d67 6964 2720 2020 2020 . '-gid' \n+0001ffa0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+0001ffb0: 2020 2020 272d 6d6f 6465 2720 2020 2020 '-mode' \n+0001ffc0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+0001ffd0: 2020 2027 2d73 746f 7265 496e 4442 4d27 '-storeInDBM'\n+0001ffe0: 2020 3d3e 2031 2020 2020 2020 2320 4465 => 1 # De\n+0001fff0: 6661 756c 743a 2073 7065 6963 6865 726e fault: speichern\n+00020000: 2c0a 0909 2020 2020 2020 2020 2020 2020 ,... \n+00020010: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00020020: 2023 2020 2020 2020 2020 3020 3d20 6e69 # 0 = ni\n+00020030: 6368 7420 7370 6569 6368 6572 6e0a 0909 cht speichern...\n+00020040: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c\n+00020050: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams\n+00020060: 285c 2570 6172 616d 732c 205c 405f 2c20 (\\%params, \\@_, \n+00020070: 2761 6b74 4669 6c65 6e61 6d65 3a3a 7374 'aktFilename::st\n+00020080: 6f72 6527 2c0a 0909 0920 5b27 2d66 696c ore',.... ['-fil\n+00020090: 656e 616d 6527 2c20 272d 6d64 3573 756d ename', '-md5sum\n+000200a0: 272c 2027 2d63 6f6d 7072 272c 2027 2d64 ', '-compr', '-d\n+000200b0: 6576 272c 2027 2d69 6e6f 6465 272c 0a09 ev', '-inode',..\n+000200c0: 0909 2020 272d 696e 6f64 6542 6163 6b75 .. '-inodeBacku\n+000200d0: 7027 2c20 272d 6374 696d 6527 2c20 272d p', '-ctime', '-\n+000200e0: 6d74 696d 6527 2c20 272d 6174 696d 6527 mtime', '-atime'\n+000200f0: 2c0a 0909 0920 2027 2d73 697a 6527 2c20 ,.... '-size', \n+00020100: 272d 7569 6427 2c20 272d 6769 6427 2c20 '-uid', '-gid', \n+00020110: 272d 6d6f 6465 275d 293b 0a20 2020 206d '-mode']);. m\n+00020120: 7920 2466 696c 656e 616d 6520 3d20 2470 y $filename = $p\n+00020130: 6172 616d 737b 272d 6669 6c65 6e61 6d65 arams{'-filename\n+00020140: 277d 3b0a 2020 2020 6d79 2024 6d64 3573 '};. my $md5s\n+00020150: 756d 203d 2024 7061 7261 6d73 7b27 2d6d um = $params{'-m\n+00020160: 6435 7375 6d27 7d3b 0a20 2020 206d 7920 d5sum'};. my \n+00020170: 2463 6f6d 7072 203d 2024 7061 7261 6d73 $compr = $params\n+00020180: 7b27 2d63 6f6d 7072 277d 3b0a 2020 2020 {'-compr'};. \n+00020190: 6d79 2024 6465 7620 3d20 2470 6172 616d my $dev = $param\n+000201a0: 737b 272d 6465 7627 7d3b 0a20 2020 206d s{'-dev'};. m\n+000201b0: 7920 2469 6e6f 6465 203d 2024 7061 7261 y $inode = $para\n+000201c0: 6d73 7b27 2d69 6e6f 6465 277d 3b0a 2020 ms{'-inode'};. \n+000201d0: 2020 6d79 2024 696e 6f64 6542 6163 6b75 my $inodeBacku\n+000201e0: 7020 3d20 2470 6172 616d 737b 272d 696e p = $params{'-in\n+000201f0: 6f64 6542 6163 6b75 7027 7d3b 0a20 2020 odeBackup'};. \n+00020200: 206d 7920 2463 7469 6d65 203d 2024 7061 my $ctime = $pa\n+00020210: 7261 6d73 7b27 2d63 7469 6d65 277d 3b0a rams{'-ctime'};.\n+00020220: 2020 2020 6d79 2024 6d74 696d 6520 3d20 my $mtime = \n+00020230: 2470 6172 616d 737b 272d 6d74 696d 6527 $params{'-mtime'\n+00020240: 7d3b 0a20 2020 206d 7920 2461 7469 6d65 };. my $atime\n+00020250: 203d 2024 7061 7261 6d73 7b27 2d61 7469 = $params{'-ati\n+00020260: 6d65 277d 3b0a 2020 2020 6d79 2024 7369 me'};. my $si\n+00020270: 7a65 203d 2024 7061 7261 6d73 7b27 2d73 ze = $params{'-s\n+00020280: 697a 6527 7d3b 0a20 2020 206d 7920 2475 ize'};. my $u\n+00020290: 6964 203d 2024 7061 7261 6d73 7b27 2d75 id = $params{'-u\n+000202a0: 6964 277d 3b0a 2020 2020 6d79 2024 6769 id'};. my $gi\n+000202b0: 6420 3d20 2470 6172 616d 737b 272d 6769 d = $params{'-gi\n+000202c0: 6427 7d3b 0a20 2020 206d 7920 246d 6f64 d'};. my $mod\n+000202d0: 6520 3d20 2470 6172 616d 737b 272d 6d6f e = $params{'-mo\n+000202e0: 6465 277d 3b0a 0a20 2020 2069 6620 2824 de'};.. if ($\n+000202f0: 7061 7261 6d73 7b27 2d73 746f 7265 496e params{'-storeIn\n+00020300: 4442 4d27 7d29 0a20 2020 207b 0a09 6d79 DBM'}). {..my\n+00020310: 2024 4442 4d6d 6435 203d 2024 7365 6c66 $DBMmd5 = $self\n+00020320: 2d3e 7b27 4442 4d6d 6435 277d 3b0a 0a09 ->{'DBMmd5'};...\n+00020330: 6d79 2024 6d64 3570 6163 6b20 3d20 7061 my $md5pack = pa\n+00020340: 636b 2827 4833 3227 2c20 246d 6435 7375 ck('H32', $md5su\n+00020350: 6d29 3b0a 096d 7920 2466 203d 2024 7365 m);..my $f = $se\n+00020360: 6c66 2d3e 7b27 696e 6465 7844 6972 277d lf->{'indexDir'}\n+00020370: 2d3e 7365 7449 6e64 6578 2824 6669 6c65 ->setIndex($file\n+00020380: 6e61 6d65 293b 0a09 2424 4442 4d6d 6435 name);..$$DBMmd5\n+00020390: 7b24 6d64 3570 6163 6b7d 203d 2070 6163 {$md5pack} = pac\n+000203a0: 6b28 2746 6153 612a 272c 2024 696e 6f64 k('FaSa*', $inod\n+000203b0: 6542 6163 6b75 702c 2024 636f 6d70 722c eBackup, $compr,\n+000203c0: 0a09 0909 0920 2030 2c20 2466 290a 0920 ..... 0, $f).. \n+000203d0: 2020 2075 6e6c 6573 7320 6578 6973 7473 unless exists\n+000203e0: 2024 2444 424d 6d64 357b 246d 6435 7061 $$DBMmd5{$md5pa\n+000203f0: 636b 7d3b 0a20 2020 207d 0920 2020 2020 ck};. }. \n+00020400: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00020410: 2020 2020 2020 2023 2024 6261 636b 7570 # $backup\n+00020420: 4469 7249 6e64 6578 2069 7374 2069 6d6d DirIndex ist imm\n+00020430: 6572 2030 0a0a 2020 2020 2473 656c 662d er 0.. $self-\n+00020440: 3e7b 2777 7269 7465 4368 6563 6b53 756d >{'writeCheckSum\n+00020450: 4669 6c65 277d 2d3e 7772 6974 6528 272d File'}->write('-\n+00020460: 6669 6c65 6e61 6d65 2720 3d3e 2024 6669 filename' => $fi\n+00020470: 6c65 6e61 6d65 2c0a 0909 0909 0927 2d6d lename,......'-m\n+00020480: 6435 7375 6d27 203d 3e20 246d 6435 7375 d5sum' => $md5su\n+00020490: 6d2c 0a09 0909 0909 272d 636f 6d70 7227 m,......'-compr'\n+000204a0: 203d 3e20 2463 6f6d 7072 2c0a 0909 0909 => $compr,.....\n+000204b0: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev,\n+000204c0: 0a09 0909 0909 272d 696e 6f64 6527 203d ......'-inode' =\n+000204d0: 3e20 2469 6e6f 6465 2c0a 0909 0909 0927 > $inode,......'\n+000204e0: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' =>\n+000204f0: 2024 696e 6f64 6542 6163 6b75 702c 0a09 $inodeBackup,..\n+00020500: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => \n+00020510: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m\n+00020520: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime,\n+00020530: 0a09 0909 0909 272d 6174 696d 6527 203d ......'-atime' =\n+00020540: 3e20 2461 7469 6d65 2c0a 0909 0909 0927 > $atime,......'\n+00020550: 2d73 697a 6527 203d 3e20 2473 697a 652c -size' => $size,\n+00020560: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => \n+00020570: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid\n+00020580: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,......\n+00020590: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode\n+000205a0: 0a09 0909 0909 293b 0a7d 0a0a 0a23 2323 ......);.}...###\n+000205b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000205c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000205d0: 2323 2323 230a 7375 6220 7374 6f72 6542 #####.sub storeB\n+000205e0: 6c6f 636b 0a7b 0a20 2020 206d 7920 2473 lock.{. my $s\n+000205f0: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. \n+00020600: 2020 6d79 2028 2570 6172 616d 7329 203d my (%params) =\n+00020610: 2028 272d 6669 6c65 6e61 6d65 2720 3d3e ('-filename' =>\n+00020620: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+00020630: 6d64 3573 756d 2720 2020 3d3e 2075 6e64 md5sum' => und\n+00020640: 6566 2c0a 0909 2020 2020 272d 636f 6d70 ef,... '-comp\n+00020650: 7227 2020 2020 3d3e 2075 6e64 6566 0a09 r' => undef..\n+00020660: 293b 0a0a 2020 2020 263a 3a63 6865 636b );.. &::check\n+00020670: 4f62 6a65 6374 5061 7261 6d73 285c 2570 ObjectParams(\\%p\n+00020680: 6172 616d 732c 205c 405f 2c20 2777 7269 arams, \\@_, 'wri\n+00020690: 7465 4368 6563 6b53 756d 4669 6c65 3a77 teCheckSumFile:w\n+000206a0: 7269 7465 426c 6f63 6b27 2c0a 0909 0920 riteBlock',.... \n+000206b0: 5b27 2d66 696c 656e 616d 6527 2c20 272d ['-filename', '-\n+000206c0: 6d64 3573 756d 272c 2027 2d63 6f6d 7072 md5sum', '-compr\n+000206d0: 275d 293b 0a0a 2020 2020 6d79 2024 6669 ']);.. my $fi\n+000206e0: 6c65 6e61 6d65 203d 2024 7061 7261 6d73 lename = $params\n+000206f0: 7b27 2d66 696c 656e 616d 6527 7d3b 0a20 {'-filename'};. \n+00020700: 2020 206d 7920 246d 6435 7375 6d20 3d20 my $md5sum = \n+00020710: 2470 6172 616d 737b 272d 6d64 3573 756d $params{'-md5sum\n+00020720: 277d 3b0a 2020 2020 6d79 2024 636f 6d70 '};. my $comp\n+00020730: 7220 3d20 2470 6172 616d 737b 272d 636f r = $params{'-co\n+00020740: 6d70 7227 7d3b 0a20 2020 2024 7365 6c66 mpr'};. $self\n+00020750: 2d3e 7b27 7772 6974 6543 6865 636b 5375 ->{'writeCheckSu\n+00020760: 6d46 696c 6527 7d2d 3e77 7269 7465 426c mFile'}->writeBl\n+00020770: 6f63 6b28 272d 6669 6c65 6e61 6d65 2720 ock('-filename' \n+00020780: 3d3e 2024 6669 6c65 6e61 6d65 2c0a 0909 => $filename,...\n+00020790: 0909 0920 2020 2020 272d 6d64 3573 756d ... '-md5sum\n+000207a0: 2720 3d3e 2024 6d64 3573 756d 2c0a 0909 ' => $md5sum,...\n+000207b0: 0909 0920 2020 2020 272d 636f 6d70 7227 ... '-compr'\n+000207c0: 203d 3e20 2463 6f6d 7072 293b 0a7d 0a0a => $compr);.}..\n+000207d0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+000207e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000207f0: 2323 2323 2323 2323 230a 7375 6220 7374 #########.sub st\n+00020800: 6f72 6544 6972 0a7b 0a20 2020 206d 7920 oreDir.{. my \n+00020810: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n+00020820: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params)\n+00020830: 203d 2028 272d 6469 7227 2020 203d 3e20 = ('-dir' => \n+00020840: 756e 6465 662c 0a09 0920 2020 2027 2d64 undef,... '-d\n+00020850: 6576 2720 2020 3d3e 2075 6e64 6566 2c0a ev' => undef,.\n+00020860: 0909 2020 2020 272d 696e 6f64 6527 203d .. '-inode' =\n+00020870: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00020880: 2d63 7469 6d65 2720 3d3e 2075 6e64 6566 -ctime' => undef\n+00020890: 2c0a 0909 2020 2020 272d 6d74 696d 6527 ,... '-mtime'\n+000208a0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+000208b0: 2027 2d61 7469 6d65 2720 3d3e 2075 6e64 '-atime' => und\n+000208c0: 6566 2c0a 0909 2020 2020 272d 7569 6427 ef,... '-uid'\n+000208d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+000208e0: 2020 2027 2d67 6964 2720 2020 3d3e 2075 '-gid' => u\n+000208f0: 6e64 6566 2c0a 0909 2020 2020 272d 6d6f ndef,... '-mo\n+00020900: 6465 2720 203d 3e20 756e 6465 660a 0909 de' => undef...\n+00020910: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c\n+00020920: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams\n+00020930: 285c 2570 6172 616d 732c 205c 405f 2c20 (\\%params, \\@_, \n+00020940: 2761 6b74 4669 6c65 6e61 6d65 3a3a 7374 'aktFilename::st\n+00020950: 6f72 6544 6972 272c 0a09 0909 205b 272d oreDir',.... ['-\n+00020960: 6469 7227 2c20 272d 6465 7627 2c20 272d dir', '-dev', '-\n+00020970: 696e 6f64 6527 2c20 272d 6374 696d 6527 inode', '-ctime'\n+00020980: 2c20 272d 6d74 696d 6527 2c0a 0909 0920 , '-mtime',.... \n+00020990: 2027 2d61 7469 6d65 272c 2027 2d75 6964 '-atime', '-uid\n+000209a0: 272c 2027 2d67 6964 272c 2027 2d6d 6f64 ', '-gid', '-mod\n+000209b0: 6527 5d29 3b0a 0a20 2020 206d 7920 2464 e']);.. my $d\n+000209c0: 6972 203d 2024 7061 7261 6d73 7b27 2d64 ir = $params{'-d\n+000209d0: 6972 277d 3b0a 2020 2020 6d79 2024 6465 ir'};. my $de\n+000209e0: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de\n+000209f0: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino\n+00020a00: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i\n+00020a10: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $\n+00020a20: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{\n+00020a30: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m\n+00020a40: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para\n+00020a50: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. \n+00020a60: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p\n+00020a70: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'};\n+00020a80: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $\n+00020a90: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};.\n+00020aa0: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p\n+00020ab0: 6172 616d 737b 272d 6769 6427 7d3b 0a20 arams{'-gid'};. \n+00020ac0: 2020 206d 7920 246d 6f64 6520 3d20 2470 my $mode = $p\n+00020ad0: 6172 616d 737b 272d 6d6f 6465 277d 3b0a arams{'-mode'};.\n+00020ae0: 0a20 2020 206d 7920 2469 6e6f 6465 4261 . my $inodeBa\n+00020af0: 636b 7570 203d 2030 3b20 2020 2023 2069 ckup = 0; # i\n+00020b00: 7272 656c 6576 616e 740a 0a20 2020 2024 rrelevant.. $\n+00020b10: 7365 6c66 2d3e 7b27 7772 6974 6543 6865 self->{'writeChe\n+00020b20: 636b 5375 6d46 696c 6527 7d2d 3e77 7269 ckSumFile'}->wri\n+00020b30: 7465 2827 2d66 696c 656e 616d 6527 203d te('-filename' =\n+00020b40: 3e20 2464 6972 2c0a 0909 0909 0927 2d6d > $dir,......'-m\n+00020b50: 6435 7375 6d27 203d 3e20 2764 6972 272c d5sum' => 'dir',\n+00020b60: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' =\n+00020b70: 3e20 302c 0a09 0909 0909 272d 6465 7627 > 0,......'-dev'\n+00020b80: 203d 3e20 2464 6576 2c0a 0909 0909 0927 => $dev,......'\n+00020b90: 2d69 6e6f 6465 2720 3d3e 2024 696e 6f64 -inode' => $inod\n+00020ba0: 652c 0a09 0909 0909 272d 696e 6f64 6542 e,......'-inodeB\n+00020bb0: 6163 6b75 7027 203d 3e20 2469 6e6f 6465 ackup' => $inode\n+00020bc0: 4261 636b 7570 2c0a 0909 0909 0927 2d63 Backup,......'-c\n+00020bd0: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime,\n+00020be0: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' =\n+00020bf0: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......'\n+00020c00: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim\n+00020c10: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' \n+00020c20: 3d3e 2030 2c0a 0909 0909 0927 2d75 6964 => 0,......'-uid\n+00020c30: 2720 3d3e 2024 7569 642c 0a09 0909 0909 ' => $uid,......\n+00020c40: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,.\n+00020c50: 0909 0909 0927 2d6d 6f64 6527 203d 3e20 .....'-mode' => \n+00020c60: 246d 6f64 650a 0909 0909 0929 3b0a 7d0a $mode......);.}.\n+00020c70: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00020c80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00020c90: 2323 2323 2323 2323 2323 0a73 7562 2073 ##########.sub s\n+00020ca0: 746f 7265 5379 6d6c 696e 6b0a 7b0a 2020 toreSymlink.{. \n+00020cb0: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi\n+00020cc0: 6674 3b0a 0a20 2020 206d 7920 2825 7061 ft;.. my (%pa\n+00020cd0: 7261 6d73 2920 3d20 2827 2d73 796d 6c69 rams) = ('-symli\n+00020ce0: 6e6b 2720 3d3e 2075 6e64 6566 2c0a 0909 nk' => undef,...\n+00020cf0: 2020 2020 272d 6465 7627 2020 203d 3e20 '-dev' => \n+00020d00: 756e 6465 662c 0a09 0920 2020 2027 2d69 undef,... '-i\n+00020d10: 6e6f 6465 2720 3d3e 2075 6e64 6566 2c0a node' => undef,.\n+00020d20: 0909 2020 2020 272d 6374 696d 6527 2020 .. '-ctime' \n+00020d30: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+00020d40: 2027 2d6d 7469 6d65 2720 2020 3d3e 2075 '-mtime' => u\n+00020d50: 6e64 6566 2c0a 0909 2020 2020 272d 6174 ndef,... '-at\n+00020d60: 696d 6527 2020 203d 3e20 756e 6465 662c ime' => undef,\n+00020d70: 0a09 0920 2020 2027 2d75 6964 2720 2020 ... '-uid' \n+00020d80: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n+00020d90: 2020 272d 6769 6427 2020 2020 203d 3e20 '-gid' => \n+00020da0: 756e 6465 662c 0a09 0920 2020 2029 3b0a undef,... );.\n+00020db0: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj\n+00020dc0: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\\%para\n+00020dd0: 6d73 2c20 5c40 5f2c 2027 616b 7446 696c ms, \\@_, 'aktFil\n+00020de0: 656e 616d 653a 3a73 746f 7265 5379 6d6c ename::storeSyml\n+00020df0: 696e 6b27 2c0a 0909 0920 5b27 2d73 796d ink',.... ['-sym\n+00020e00: 6c69 6e6b 272c 2027 2d64 6576 272c 2027 link', '-dev', '\n+00020e10: 2d69 6e6f 6465 272c 2027 2d63 7469 6d65 -inode', '-ctime\n+00020e20: 272c 2027 2d6d 7469 6d65 272c 0a09 0909 ', '-mtime',....\n+00020e30: 2020 272d 6174 696d 6527 2c20 272d 7569 '-atime', '-ui\n+00020e40: 6427 2c20 272d 6769 6427 5d29 3b0a 0a20 d', '-gid']);.. \n+00020e50: 2020 206d 7920 2473 796d 6c69 6e6b 203d my $symlink =\n+00020e60: 2024 7061 7261 6d73 7b27 2d73 796d 6c69 $params{'-symli\n+00020e70: 6e6b 277d 3b0a 2020 2020 6d79 2024 6465 nk'};. my $de\n+00020e80: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de\n+00020e90: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino\n+00020ea0: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i\n+00020eb0: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $\n+00020ec0: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{\n+00020ed0: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m\n+00020ee0: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para\n+00020ef0: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. \n+00020f00: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p\n+00020f10: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'};\n+00020f20: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $\n+00020f30: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};.\n+00020f40: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p\n+00020f50: 6172 616d 737b 272d 6769 6427 7d3b 0a0a arams{'-gid'};..\n+00020f60: 2020 2020 6d79 2024 696e 6f64 6542 6163 my $inodeBac\n+00020f70: 6b75 7020 3d20 303b 2020 2023 2069 7272 kup = 0; # irr\n+00020f80: 656c 6576 616e 740a 0a20 2020 2024 7365 elevant.. $se\n+00020f90: 6c66 2d3e 7b27 7772 6974 6543 6865 636b lf->{'writeCheck\n+00020fa0: 5375 6d46 696c 6527 7d2d 3e77 7269 7465 SumFile'}->write\n+00020fb0: 2827 2d66 696c 656e 616d 6527 203d 3e20 ('-filename' => \n+00020fc0: 2473 796d 6c69 6e6b 2c0a 0909 0909 0927 $symlink,......'\n+00020fd0: 2d6d 6435 7375 6d27 203d 3e20 2773 796d -md5sum' => 'sym\n+00020fe0: 6c69 6e6b 272c 0a09 0909 0909 272d 636f link',......'-co\n+00020ff0: 6d70 7227 203d 3e20 302c 0a09 0909 0909 mpr' => 0,......\n+00021000: 272d 6465 7627 203d 3e20 2464 6576 2c0a '-dev' => $dev,.\n+00021010: 0909 0909 0927 2d69 6e6f 6465 2720 3d3e .....'-inode' =>\n+00021020: 2024 696e 6f64 652c 0a09 0909 0909 272d $inode,......'-\n+00021030: 696e 6f64 6542 6163 6b75 7027 203d 3e20 inodeBackup' => \n+00021040: 2469 6e6f 6465 4261 636b 7570 2c0a 0909 $inodeBackup,...\n+00021050: 0909 0927 2d63 7469 6d65 2720 3d3e 2024 ...'-ctime' => $\n+00021060: 6374 696d 652c 0a09 0909 0909 272d 6d74 ctime,......'-mt\n+00021070: 696d 6527 203d 3e20 246d 7469 6d65 2c0a ime' => $mtime,.\n+00021080: 0909 0909 0927 2d61 7469 6d65 2720 3d3e .....'-atime' =>\n+00021090: 2024 6174 696d 652c 0a09 0909 0909 272d $atime,......'-\n+000210a0: 7369 7a65 2720 3d3e 2030 2c0a 0909 0909 size' => 0,.....\n+000210b0: 0927 2d75 6964 2720 3d3e 2024 7569 642c .'-uid' => $uid,\n+000210c0: 0a09 0909 0909 272d 6769 6427 203d 3e20 ......'-gid' => \n+000210d0: 2467 6964 2c0a 0909 0909 0927 2d6d 6f64 $gid,......'-mod\n+000210e0: 6527 203d 3e20 300a 0909 0909 0929 3b0a e' => 0......);.\n+000210f0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+00021100: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021110: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n+00021120: 2073 746f 7265 4e61 6d65 6450 6970 650a storeNamedPipe.\n+00021130: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+00021140: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my \n+00021150: 2825 7061 7261 6d73 2920 3d20 2827 2d70 (%params) = ('-p\n+00021160: 6970 6527 2020 3d3e 2075 6e64 6566 2c0a ipe' => undef,.\n+00021170: 0909 2020 2020 272d 6465 7627 2020 203d .. '-dev' =\n+00021180: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00021190: 2d69 6e6f 6465 2720 3d3e 2075 6e64 6566 -inode' => undef\n+000211a0: 2c0a 0909 2020 2020 272d 6374 696d 6527 ,... '-ctime'\n+000211b0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+000211c0: 2027 2d6d 7469 6d65 2720 3d3e 2075 6e64 '-mtime' => und\n+000211d0: 6566 2c0a 0909 2020 2020 272d 6174 696d ef,... '-atim\n+000211e0: 6527 203d 3e20 756e 6465 662c 0a09 0920 e' => undef,... \n+000211f0: 2020 2027 2d75 6964 2720 2020 3d3e 2075 '-uid' => u\n+00021200: 6e64 6566 2c0a 0909 2020 2020 272d 6769 ndef,... '-gi\n+00021210: 6427 2020 203d 3e20 756e 6465 662c 0a09 d' => undef,..\n+00021220: 0920 2020 2027 2d6d 6f64 6527 2020 3d3e . '-mode' =>\n+00021230: 2075 6e64 6566 0a09 0920 2020 2029 3b0a undef... );.\n+00021240: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj\n+00021250: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\\%para\n+00021260: 6d73 2c20 5c40 5f2c 2027 616b 7446 696c ms, \\@_, 'aktFil\n+00021270: 656e 616d 653a 3a73 746f 7265 4e61 6d65 ename::storeName\n+00021280: 6450 6970 6527 2c0a 0909 0920 5b27 2d70 dPipe',.... ['-p\n+00021290: 6970 6527 2c20 272d 6374 696d 6527 2c20 ipe', '-ctime', \n+000212a0: 272d 6d74 696d 6527 2c20 272d 6174 696d '-mtime', '-atim\n+000212b0: 6527 2c0a 0909 0920 2027 2d75 6964 272c e',.... '-uid',\n+000212c0: 2027 2d67 6964 272c 2027 2d6d 6f64 6527 '-gid', '-mode'\n+000212d0: 5d29 3b0a 0a20 2020 206d 7920 2470 6970 ]);.. my $pip\n+000212e0: 6520 3d20 2470 6172 616d 737b 272d 7069 e = $params{'-pi\n+000212f0: 7065 277d 3b0a 2020 2020 6d79 2024 6465 pe'};. my $de\n+00021300: 7620 3d20 2470 6172 616d 737b 272d 6465 v = $params{'-de\n+00021310: 7627 7d3b 0a20 2020 206d 7920 2469 6e6f v'};. my $ino\n+00021320: 6465 203d 2024 7061 7261 6d73 7b27 2d69 de = $params{'-i\n+00021330: 6e6f 6465 277d 3b0a 2020 2020 6d79 2024 node'};. my $\n+00021340: 6374 696d 6520 3d20 2470 6172 616d 737b ctime = $params{\n+00021350: 272d 6374 696d 6527 7d3b 0a20 2020 206d '-ctime'};. m\n+00021360: 7920 246d 7469 6d65 203d 2024 7061 7261 y $mtime = $para\n+00021370: 6d73 7b27 2d6d 7469 6d65 277d 3b0a 2020 ms{'-mtime'};. \n+00021380: 2020 6d79 2024 6174 696d 6520 3d20 2470 my $atime = $p\n+00021390: 6172 616d 737b 272d 6174 696d 6527 7d3b arams{'-atime'};\n+000213a0: 0a20 2020 206d 7920 2475 6964 203d 2024 . my $uid = $\n+000213b0: 7061 7261 6d73 7b27 2d75 6964 277d 3b0a params{'-uid'};.\n+000213c0: 2020 2020 6d79 2024 6769 6420 3d20 2470 my $gid = $p\n+000213d0: 6172 616d 737b 272d 6769 6427 7d3b 0a20 arams{'-gid'};. \n+000213e0: 2020 206d 7920 246d 6f64 6520 3d20 2470 my $mode = $p\n+000213f0: 6172 616d 737b 272d 6d6f 6465 277d 3b0a arams{'-mode'};.\n+00021400: 0a20 2020 206d 7920 2469 6e6f 6465 4261 . my $inodeBa\n+00021410: 636b 7570 203d 2030 3b20 2020 2320 6972 ckup = 0; # ir\n+00021420: 7265 6c65 7661 6e74 0a0a 2020 2020 2473 relevant.. $s\n+00021430: 656c 662d 3e7b 2777 7269 7465 4368 6563 elf->{'writeChec\n+00021440: 6b53 756d 4669 6c65 277d 2d3e 7772 6974 kSumFile'}->writ\n+00021450: 6528 272d 6669 6c65 6e61 6d65 2720 3d3e e('-filename' =>\n+00021460: 2024 7069 7065 2c0a 0909 0909 0927 2d6d $pipe,......'-m\n+00021470: 6435 7375 6d27 203d 3e20 2770 6970 6527 d5sum' => 'pipe'\n+00021480: 2c0a 0909 0909 0927 2d63 6f6d 7072 2720 ,......'-compr' \n+00021490: 3d3e 2030 2c0a 0909 0909 0927 2d64 6576 => 0,......'-dev\n+000214a0: 2720 3d3e 2024 6465 762c 0a09 0909 0909 ' => $dev,......\n+000214b0: 272d 696e 6f64 6527 203d 3e20 2469 6e6f '-inode' => $ino\n+000214c0: 6465 2c0a 0909 0909 0927 2d69 6e6f 6465 de,......'-inode\n+000214d0: 4261 636b 7570 2720 3d3e 2024 696e 6f64 Backup' => $inod\n+000214e0: 6542 6163 6b75 702c 0a09 0909 0909 272d eBackup,......'-\n+000214f0: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n+00021500: 2c0a 0909 0909 0927 2d6d 7469 6d65 2720 ,......'-mtime' \n+00021510: 3d3e 2024 6d74 696d 652c 0a09 0909 0909 => $mtime,......\n+00021520: 272d 6174 696d 6527 203d 3e20 2461 7469 '-atime' => $ati\n+00021530: 6d65 2c0a 0909 0909 0927 2d73 697a 6527 me,......'-size'\n+00021540: 203d 3e20 302c 0a09 0909 0909 272d 7569 => 0,......'-ui\n+00021550: 6427 203d 3e20 2475 6964 2c0a 0909 0909 d' => $uid,.....\n+00021560: 0927 2d67 6964 2720 3d3e 2024 6769 642c .'-gid' => $gid,\n+00021570: 0a09 0909 0909 272d 6d6f 6465 2720 3d3e ......'-mode' =>\n+00021580: 2024 6d6f 6465 0a09 0909 0909 293b 0a7d $mode......);.}\n+00021590: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+000215a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000215b0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+000215c0: 7374 6f72 6553 7065 6369 616c 0a7b 0a20 storeSpecial.{. \n+000215d0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n+000215e0: 6966 743b 0a0a 2020 2020 6d79 2028 2570 ift;.. my (%p\n+000215f0: 6172 616d 7329 203d 2028 272d 6e61 6d65 arams) = ('-name\n+00021600: 2720 203d 3e20 756e 6465 662c 0a20 2020 ' => undef,. \n+00021610: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00021620: 2027 2d74 7970 6527 2020 3d3e 2075 6e64 '-type' => und\n+00021630: 6566 2c0a 0909 2020 2020 272d 6465 7627 ef,... '-dev'\n+00021640: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+00021650: 2020 2027 2d69 6e6f 6465 2720 3d3e 2075 '-inode' => u\n+00021660: 6e64 6566 2c0a 0909 2020 2020 272d 6374 ndef,... '-ct\n+00021670: 696d 6527 203d 3e20 756e 6465 662c 0a09 ime' => undef,..\n+00021680: 0920 2020 2027 2d6d 7469 6d65 2720 3d3e . '-mtime' =>\n+00021690: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n+000216a0: 6174 696d 6527 203d 3e20 756e 6465 662c atime' => undef,\n+000216b0: 0a09 0920 2020 2027 2d75 6964 2720 2020 ... '-uid' \n+000216c0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n+000216d0: 272d 6769 6427 2020 203d 3e20 756e 6465 '-gid' => unde\n+000216e0: 662c 0a09 0920 2020 2027 2d6d 6f64 6527 f,... '-mode'\n+000216f0: 2020 3d3e 2075 6e64 6566 0a09 0920 2020 => undef... \n+00021700: 2029 3b0a 0a20 2020 2026 3a3a 6368 6563 );.. &::chec\n+00021710: 6b4f 626a 6563 7450 6172 616d 7328 5c25 kObjectParams(\\%\n+00021720: 7061 7261 6d73 2c20 5c40 5f2c 2027 616b params, \\@_, 'ak\n+00021730: 7446 696c 656e 616d 653a 3a73 746f 7265 tFilename::store\n+00021740: 5370 6563 6961 6c27 2c0a 0909 0920 5b27 Special',.... ['\n+00021750: 2d6e 616d 6527 2c20 272d 6374 696d 6527 -name', '-ctime'\n+00021760: 2c20 272d 6d74 696d 6527 2c20 272d 6174 , '-mtime', '-at\n+00021770: 696d 6527 2c0a 0909 0920 2027 2d75 6964 ime',.... '-uid\n+00021780: 272c 2027 2d67 6964 272c 2027 2d6d 6f64 ', '-gid', '-mod\n+00021790: 6527 2c20 272d 7479 7065 275d 293b 0a0a e', '-type']);..\n+000217a0: 2020 2020 6d79 2024 6e61 6d65 203d 2024 my $name = $\n+000217b0: 7061 7261 6d73 7b27 2d6e 616d 6527 7d3b params{'-name'};\n+000217c0: 0a20 2020 206d 7920 2474 7970 6520 3d20 . my $type = \n+000217d0: 2470 6172 616d 737b 272d 7479 7065 277d $params{'-type'}\n+000217e0: 3b0a 2020 2020 6d79 2024 6465 7620 3d20 ;. my $dev = \n+000217f0: 2470 6172 616d 737b 272d 6465 7627 7d3b $params{'-dev'};\n+00021800: 0a20 2020 206d 7920 2469 6e6f 6465 203d . my $inode =\n+00021810: 2024 7061 7261 6d73 7b27 2d69 6e6f 6465 $params{'-inode\n+00021820: 277d 3b0a 2020 2020 6d79 2024 6374 696d '};. my $ctim\n+00021830: 6520 3d20 2470 6172 616d 737b 272d 6374 e = $params{'-ct\n+00021840: 696d 6527 7d3b 0a20 2020 206d 7920 246d ime'};. my $m\n+00021850: 7469 6d65 203d 2024 7061 7261 6d73 7b27 time = $params{'\n+00021860: 2d6d 7469 6d65 277d 3b0a 2020 2020 6d79 -mtime'};. my\n+00021870: 2024 6174 696d 6520 3d20 2470 6172 616d $atime = $param\n+00021880: 737b 272d 6174 696d 6527 7d3b 0a20 2020 s{'-atime'};. \n+00021890: 206d 7920 2475 6964 203d 2024 7061 7261 my $uid = $para\n+000218a0: 6d73 7b27 2d75 6964 277d 3b0a 2020 2020 ms{'-uid'};. \n+000218b0: 6d79 2024 6769 6420 3d20 2470 6172 616d my $gid = $param\n+000218c0: 737b 272d 6769 6427 7d3b 0a20 2020 206d s{'-gid'};. m\n+000218d0: 7920 246d 6f64 6520 3d20 2470 6172 616d y $mode = $param\n+000218e0: 737b 272d 6d6f 6465 277d 3b0a 0a20 2020 s{'-mode'};.. \n+000218f0: 206d 7920 2469 6e6f 6465 4261 636b 7570 my $inodeBackup\n+00021900: 203d 2030 3b20 2020 2320 6972 7265 6c65 = 0; # irrele\n+00021910: 7661 6e74 0a0a 2020 2020 2474 7970 6520 vant.. $type \n+00021920: 3d20 2273 6f63 6b65 7422 2069 6620 2474 = \"socket\" if $t\n+00021930: 7970 6520 6571 2022 5322 3b0a 2020 2020 ype eq \"S\";. \n+00021940: 2474 7970 6520 3d20 2262 6c6f 636b 6465 $type = \"blockde\n+00021950: 7622 2069 6620 2474 7970 6520 6571 2022 v\" if $type eq \"\n+00021960: 6222 3b0a 2020 2020 2474 7970 6520 3d20 b\";. $type = \n+00021970: 2263 6861 7264 6576 2220 6966 2024 7479 \"chardev\" if $ty\n+00021980: 7065 2065 7120 2263 223b 0a0a 2020 2020 pe eq \"c\";.. \n+00021990: 2473 656c 662d 3e7b 2777 7269 7465 4368 $self->{'writeCh\n+000219a0: 6563 6b53 756d 4669 6c65 277d 2d3e 7772 eckSumFile'}->wr\n+000219b0: 6974 6528 272d 6669 6c65 6e61 6d65 2720 ite('-filename' \n+000219c0: 3d3e 2024 6e61 6d65 2c0a 0909 0909 0927 => $name,......'\n+000219d0: 2d6d 6435 7375 6d27 203d 3e20 2474 7970 -md5sum' => $typ\n+000219e0: 652c 0a09 0909 0909 272d 636f 6d70 7227 e,......'-compr'\n+000219f0: 203d 3e20 2775 272c 0a09 0909 0909 272d => 'u',......'-\n+00021a00: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,...\n+00021a10: 0909 0927 2d69 6e6f 6465 2720 3d3e 2024 ...'-inode' => $\n+00021a20: 696e 6f64 652c 0a09 0909 0909 272d 696e inode,......'-in\n+00021a30: 6f64 6542 6163 6b75 7027 203d 3e20 2469 odeBackup' => $i\n+00021a40: 6e6f 6465 4261 636b 7570 2c0a 0909 0909 nodeBackup,.....\n+00021a50: 0927 2d63 7469 6d65 2720 3d3e 2024 6374 .'-ctime' => $ct\n+00021a60: 696d 652c 0a09 0909 0909 272d 6d74 696d ime,......'-mtim\n+00021a70: 6527 203d 3e20 246d 7469 6d65 2c0a 0909 e' => $mtime,...\n+00021a80: 0909 0927 2d61 7469 6d65 2720 3d3e 2024 ...'-atime' => $\n+00021a90: 6174 696d 652c 0a09 0909 0909 272d 7369 atime,......'-si\n+00021aa0: 7a65 2720 3d3e 2030 2c0a 0909 0909 0927 ze' => 0,......'\n+00021ab0: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,..\n+00021ac0: 0909 0909 272d 6769 6427 203d 3e20 2467 ....'-gid' => $g\n+00021ad0: 6964 2c0a 0909 0909 0927 2d6d 6f64 6527 id,......'-mode'\n+00021ae0: 203d 3e20 246d 6f64 650a 0909 0909 0929 => $mode......)\n+00021af0: 3b0a 7d0a 0a0a 0a23 2323 2323 2323 2323 ;.}....#########\n+00021b00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021b10: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+00021b20: 2320 666f 7220 7369 676e 616c 2068 616e # for signal han\n+00021b30: 646c 696e 670a 7375 6220 6465 6c49 6e66 dling.sub delInf\n+00021b40: 6f46 696c 650a 7b0a 2020 2020 6d79 2024 oFile.{. my $\n+00021b50: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. \n+00021b60: 2020 2075 6e6c 696e 6b20 2473 656c 662d unlink $self-\n+00021b70: 3e7b 2769 6e66 6f46 696c 6527 7d3b 0a7d >{'infoFile'};.}\n+00021b80: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+00021b90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021ba0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+00021bb0: 636c 6f73 6549 6e66 6f46 696c 650a 7b0a closeInfoFile.{.\n+00021bc0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n+00021bd0: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self\n+00021be0: 2d3e 7b27 7772 6974 6543 6865 636b 5375 ->{'writeCheckSu\n+00021bf0: 6d46 696c 6527 7d2d 3e64 6573 7472 6f79 mFile'}->destroy\n+00021c00: 2829 3b0a 7d0a 0a0a 2323 2323 2323 2323 ();.}...########\n+00021c10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021c20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021c30: 2323 2323 2323 2323 2323 0a70 6163 6b61 ##########.packa\n+00021c40: 6765 2072 6561 6444 6972 4368 6563 6b53 ge readDirCheckS\n+00021c50: 697a 6554 696d 653b 0a6f 7572 2040 4953 izeTime;.our @IS\n+00021c60: 4120 3d20 7177 2820 7265 6375 7273 6976 A = qw( recursiv\n+00021c70: 6552 6561 6444 6972 2029 3b0a 0a23 2323 eReadDir );..###\n+00021c80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021c90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00021ca0: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{.\n+00021cb0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n+00021cc0: 7368 6966 743b 0a0a 2020 2020 6d79 2028 shift;.. my (\n+00021cd0: 2570 6172 616d 7329 203d 2028 272d 6469 %params) = ('-di\n+00021ce0: 7227 2020 2020 2020 2020 2020 2020 3d3e r' =>\n+00021cf0: 2075 6e64 6566 2c20 2320 7a75 2064 7572 undef, # zu dur\n+00021d00: 6368 7375 6368 656e 6465 7320 6469 7265 chsuchendes dire\n+00021d10: 6374 6f72 790a 0909 2020 2020 272d 6164 ctory... '-ad\n+00021d20: 6d69 6e44 6972 7327 2020 2020 2020 3d3e minDirs' =>\n+00021d30: 2075 6e64 6566 2c20 2320 4f62 6a65 6b74 undef, # Objekt\n+00021d40: 206d 6974 2049 6e66 6f73 2076 6f6e 0a09 mit Infos von..\n+00021d50: 0920 2020 2020 2020 2020 2020 2020 2020 . \n+00021d60: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00021d70: 2023 2056 6572 7a65 6963 686e 6973 7365 # Verzeichnisse\n+00021d80: 6e0a 0909 2020 2020 272d 6f6c 6446 696c n... '-oldFil\n+00021d90: 656e 616d 6527 2020 2020 3d3e 2075 6e64 ename' => und\n+00021da0: 6566 2c20 2320 4f62 6a65 6b74 206d 6974 ef, # Objekt mit\n+00021db0: 2061 6c74 656e 2044 424d 7320 6574 632e alten DBMs etc.\n+00021dc0: 0a09 0920 2020 2027 2d61 6b74 4669 6c65 ... '-aktFile\n+00021dd0: 6e61 6d65 2720 2020 203d 3e20 756e 6465 name' => unde\n+00021de0: 662c 2023 204f 626a 656b 7420 66c3 bc72 f, # Objekt f..r\n+00021df0: 206e 6575 6520 4d65 7461 2049 6e66 6f73 neue Meta Infos\n+00021e00: 0a09 0920 2020 2027 2d61 6b74 4469 7227 ... '-aktDir'\n+00021e10: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde\n+00021e20: 662c 2023 207a 7520 7369 6368 6572 6e64 f, # zu sichernd\n+00021e30: 6573 2044 6972 6563 746f 7279 0a09 0920 es Directory... \n+00021e40: 2020 2027 2d66 6f6c 6c6f 774c 696e 6b73 '-followLinks\n+00021e50: 2720 2020 203d 3e20 302c 2020 2020 2023 ' => 0, #\n+00021e60: 2054 6965 6665 2c20 6269 7320 7a75 2064 Tiefe, bis zu d\n+00021e70: 6572 2073 796d 6c69 6e6b 730a 0909 2020 er symlinks... \n+00021e80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00021e90: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+00021ea0: 6765 666f 6c67 7420 7765 7264 656e 2073 gefolgt werden s\n+00021eb0: 6f6c 6c0a 0909 2020 2020 272d 6578 6365 oll... '-exce\n+00021ec0: 7074 4469 7273 2720 2020 2020 3d3e 205b ptDirs' => [\n+00021ed0: 5d2c 2020 2020 2320 4175 736e 6168 6d65 ], # Ausnahme\n+00021ee0: 7665 727a 6569 6368 6e69 7373 650a 0909 verzeichnisse...\n+00021ef0: 2020 2020 272d 696e 636c 7564 6544 6972 '-includeDir\n+00021f00: 7327 2020 2020 3d3e 205b 5d2c 2020 2020 s' => [], \n+00021f10: 2320 6f6e 6c79 2069 6e63 6c75 6465 2074 # only include t\n+00021f20: 6865 7365 2064 6972 730a 0909 2020 2020 hese dirs... \n+00021f30: 272d 706f 7374 6669 7827 2020 2020 2020 '-postfix' \n+00021f40: 2020 3d3e 2075 6e64 6566 2c20 2320 506f => undef, # Po\n+00021f50: 7374 6669 782c 2064 6572 206e 6163 6820 stfix, der nach \n+00021f60: 4b6f 6d70 722e 0a09 0920 2020 2020 2020 Kompr.... \n+00021f70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00021f80: 2020 2020 2020 2020 2023 2061 6e67 6568 # angeh\n+00021f90: c3a4 6e67 7420 7765 7264 656e 2073 6f6c ..ngt werden sol\n+00021fa0: 6c0a 0909 2020 2020 272d 696e 636c 7564 l... '-includ\n+00021fb0: 6552 756c 6527 2020 2020 3d3e 2075 6e64 eRule' => und\n+00021fc0: 6566 2c0a 0909 2020 2020 272d 6578 6365 ef,... '-exce\n+00021fd0: 7074 5275 6c65 2720 2020 2020 3d3e 2075 ptRule' => u\n+00021fe0: 6e64 6566 2c0a 0909 2020 2020 272d 6368 ndef,... '-ch\n+00021ff0: 6563 6b42 6c6f 636b 7352 756c 6527 203d eckBlocksRule' =\n+00022000: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00022010: 2d77 7269 7465 4578 636c 7564 654c 6f67 -writeExcludeLog\n+00022020: 273d 3e20 756e 6465 662c 0a09 0920 2020 '=> undef,... \n+00022030: 2027 2d65 7854 7970 6573 2720 2020 2020 '-exTypes' \n+00022040: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+00022050: 2020 2027 2d72 6573 6574 4174 696d 6527 '-resetAtime'\n+00022060: 2020 2020 203d 3e20 756e 6465 662c 0a20 => undef,. \n+00022070: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00022080: 2020 2027 2d63 7049 7347 6e75 2720 2020 '-cpIsGnu' \n+00022090: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,..\n+000220a0: 0920 2020 2027 2d64 6562 7567 4d6f 6465 . '-debugMode\n+000220b0: 2720 2020 2020 203d 3e20 756e 6465 662c ' => undef,\n+000220c0: 0a09 0920 2020 2027 2d76 6572 626f 7365 ... '-verbose\n+000220d0: 2720 2020 2020 2020 203d 3e20 756e 6465 ' => unde\n+000220e0: 662c 0a09 0920 2020 2027 2d74 6d70 6469 f,... '-tmpdi\n+000220f0: 7227 2020 2020 2020 2020 203d 3e20 756e r' => un\n+00022100: 6465 662c 0a09 0920 2020 2027 2d70 724c def,... '-prL\n+00022110: 6f67 2720 2020 2020 2020 2020 203d 3e20 og' => \n+00022120: 756e 6465 662c 0a09 0920 2020 2027 2d70 undef,... '-p\n+00022130: 724c 6f67 4572 726f 7227 2020 2020 203d rLogError' =\n+00022140: 3e20 2745 272c 0a09 0920 2020 2027 2d70 > 'E',... '-p\n+00022150: 724c 6f67 5761 726e 2720 2020 2020 203d rLogWarn' =\n+00022160: 3e20 2757 272c 0a09 0920 2020 2027 2d65 > 'W',... '-e\n+00022170: 7869 7449 6645 7272 6f72 2720 2020 203d xitIfError' =\n+00022180: 3e20 312c 2020 2020 2020 2320 4572 726f > 1, # Erro\n+00022190: 7263 6f64 6520 6265 6920 4665 686c 6572 rcode bei Fehler\n+000221a0: 0a09 0920 2020 2027 2d69 676e 6f72 6552 ... '-ignoreR\n+000221b0: 6561 6445 7272 6f72 2720 3d3e 2027 6e6f eadError' => 'no\n+000221c0: 272c 0a09 0920 2020 2027 2d69 676e 6f72 ',... '-ignor\n+000221d0: 6554 696d 6527 2020 2020 203d 3e20 276e eTime' => 'n\n+000221e0: 6f6e 6527 2c0a 0909 2020 2020 272d 7072 one',... '-pr\n+000221f0: 696e 7444 6570 7468 2720 2020 2020 3d3e intDepth' =>\n+00022200: 2075 6e64 6566 0a09 0920 2020 2029 3b0a undef... );.\n+00022210: 0a20 2020 2026 3a3a 6368 6563 6b4f 626a . &::checkObj\n+00022220: 6563 7450 6172 616d 7328 5c25 7061 7261 ectParams(\\%para\n+00022230: 6d73 2c20 5c40 5f2c 2027 7265 6164 4469 ms, \\@_, 'readDi\n+00022240: 7243 6865 636b 5369 7a65 5469 6d65 3a3a rCheckSizeTime::\n+00022250: 6e65 7727 2c0a 0909 0920 5b27 2d64 6972 new',.... ['-dir\n+00022260: 272c 2027 2d6f 6c64 4669 6c65 6e61 6d65 ', '-oldFilename\n+00022270: 272c 2027 2d61 6b74 4469 7227 2c20 272d ', '-aktDir', '-\n+00022280: 6578 5479 7065 7327 2c0a 0909 0920 2027 exTypes',.... '\n+00022290: 2d70 6f73 7466 6978 272c 2027 2d61 646d -postfix', '-adm\n+000222a0: 696e 4469 7273 272c 2027 2d70 724c 6f67 inDirs', '-prLog\n+000222b0: 272c 0a09 0909 2020 272d 7072 696e 7444 ',.... '-printD\n+000222c0: 6570 7468 275d 293b 0a0a 2020 2020 6966 epth']);.. if\n+000222d0: 2028 6465 6669 6e65 6420 2470 6172 616d (defined $param\n+000222e0: 737b 2d64 6972 7d29 0a20 2020 207b 0a09 s{-dir}). {..\n+000222f0: 2470 6172 616d 737b 272d 6469 7227 7d20 $params{'-dir'} \n+00022300: 3d7e 2073 2f5c 2f5c 2f2f 5c2f 2f67 3b20 =~ s/\\/\\//\\//g; \n+00022310: 2020 2020 2020 2023 202f 2f20 2d3e 202f # // -> /\n+00022320: 0a09 2470 6172 616d 737b 272d 6469 7227 ..$params{'-dir'\n+00022330: 7d20 3d7e 2073 2f5c 4128 2e2b 295c 2f5c } =~ s/\\A(.+)\\/\\\n+00022340: 5a2f 2431 2f3b 2020 2023 2072 656d 6f76 Z/$1/; # remov\n+00022350: 6520 7472 6169 6c69 6e67 202f 0a20 2020 e trailing /. \n+00022360: 207d 0a0a 2020 2020 6d79 2024 7365 6c66 }.. my $self\n+00022370: 203d 2072 6563 7572 7369 7665 5265 6164 = recursiveRead\n+00022380: 4469 722d 3e6e 6577 2827 2d64 6972 7327 Dir->new('-dirs'\n+00022390: 203d 3e20 5b24 7061 7261 6d73 7b27 2d64 => [$params{'-d\n+000223a0: 6972 277d 5d2c 0a09 0909 0920 2020 2020 ir'}],..... \n+000223b0: 272d 666f 6c6c 6f77 4c69 6e6b 7327 203d '-followLinks' =\n+000223c0: 3e20 2470 6172 616d 737b 272d 666f 6c6c > $params{'-foll\n+000223d0: 6f77 4c69 6e6b 7327 7d2c 0a09 0909 0920 owLinks'},..... \n+000223e0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs\n+000223f0: 2720 3d3e 2024 7061 7261 6d73 7b27 2d65 ' => $params{'-e\n+00022400: 7863 6570 7444 6972 7327 7d2c 0a09 0909 xceptDirs'},....\n+00022410: 0920 2020 2020 272d 696e 636c 7564 6544 . '-includeD\n+00022420: 6972 7327 203d 3e20 2470 6172 616d 737b irs' => $params{\n+00022430: 272d 696e 636c 7564 6544 6972 7327 7d2c '-includeDirs'},\n+00022440: 0a09 0909 0920 2020 2020 272d 7072 4c6f ..... '-prLo\n+00022450: 6727 203d 3e20 2470 6172 616d 737b 272d g' => $params{'-\n+00022460: 7072 4c6f 6727 7d2c 0a09 0909 0920 2020 prLog'},..... \n+00022470: 2020 272d 7072 4c6f 6745 7272 6f72 2720 '-prLogError' \n+00022480: 3d3e 2024 7061 7261 6d73 7b27 2d70 724c => $params{'-prL\n+00022490: 6f67 4572 726f 7227 7d2c 0a09 0909 0920 ogError'},..... \n+000224a0: 2020 2020 272d 7072 4c6f 6757 6172 6e27 '-prLogWarn'\n+000224b0: 203d 3e20 2470 6172 616d 737b 272d 7072 => $params{'-pr\n+000224c0: 4c6f 6757 6172 6e27 7d2c 0a09 0909 0920 LogWarn'},..... \n+000224d0: 2020 2020 272d 7665 7262 6f73 6527 203d '-verbose' =\n+000224e0: 3e20 2470 6172 616d 737b 272d 7665 7262 > $params{'-verb\n+000224f0: 6f73 6527 7d2c 0a09 0909 0920 2020 2020 ose'},..... \n+00022500: 272d 6578 6974 4966 4572 726f 7227 203d '-exitIfError' =\n+00022510: 3e20 2470 6172 616d 737b 272d 6578 6974 > $params{'-exit\n+00022520: 4966 4572 726f 7227 7d2c 0a09 0909 0920 IfError'},..... \n+00022530: 2020 2020 272d 7072 696e 7444 6570 7468 '-printDepth\n+00022540: 2720 3d3e 2024 7061 7261 6d73 7b27 2d70 ' => $params{'-p\n+00022550: 7269 6e74 4465 7074 6827 7d2c 0a09 0909 rintDepth'},....\n+00022560: 0920 2020 2020 272d 7072 696e 7444 6570 . '-printDep\n+00022570: 7468 5072 6c6f 674b 696e 6427 203d 3e20 thPrlogKind' => \n+00022580: 2750 270a 0909 0909 2020 2020 2029 3b0a 'P'..... );.\n+00022590: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams\n+000225a0: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \\%\n+000225b0: 7061 7261 6d73 293b 0a20 2020 2024 7365 params);. $se\n+000225c0: 6c66 2d3e 7b27 616b 7449 6e66 6f46 696c lf->{'aktInfoFil\n+000225d0: 6527 7d20 3d20 2470 6172 616d 737b 272d e'} = $params{'-\n+000225e0: 6164 6d69 6e44 6972 7327 7d2d 3e67 6574 adminDirs'}->get\n+000225f0: 416b 7449 6e66 6f46 696c 6528 293b 0a0a AktInfoFile();..\n+00022600: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5\n+00022610: 466f 726b 277d 203d 2075 6e64 6566 3b20 Fork'} = undef; \n+00022620: 2020 2020 2023 2065 7320 6cc3 a475 6674 # es l..uft\n+00022630: 206b 6569 6e20 7061 7261 6c6c 656c 6573 kein paralleles\n+00022640: 206d 6435 7375 6d0a 0a20 2020 2069 6620 md5sum.. if \n+00022650: 2824 7365 6c66 2d3e 7b27 7772 6974 6545 ($self->{'writeE\n+00022660: 7863 6c75 6465 4c6f 6727 7d29 0a20 2020 xcludeLog'}). \n+00022670: 207b 0a09 6d79 2024 7763 6c20 3d20 2473 {..my $wcl = $s\n+00022680: 656c 662d 3e7b 2777 7269 7465 4578 636c elf->{'writeExcl\n+00022690: 7564 654c 6f67 277d 3b0a 096d 7920 2465 udeLog'};..my $e\n+000226a0: 7863 6c4c 6f67 203d 2070 6970 6554 6f46 xclLog = pipeToF\n+000226b0: 6f72 6b2d 3e6e 6577 2827 2d65 7865 6327 ork->new('-exec'\n+000226c0: 203d 3e20 2762 7a69 7032 272c 0a09 0909 => 'bzip2',....\n+000226d0: 0920 2020 2020 2027 2d73 7464 6f75 7427 . '-stdout'\n+000226e0: 203d 3e20 2477 636c 2c0a 0909 0909 2020 => $wcl,..... \n+000226f0: 2020 2020 272d 6f75 7452 616e 646f 6d27 '-outRandom'\n+00022700: 203d 3e20 272f 746d 702f 7374 6275 5069 => '/tmp/stbuPi\n+00022710: 7065 546f 3131 2d27 2c0a 0909 0909 2020 peTo11-',..... \n+00022720: 2020 2020 272d 6465 6c53 7464 6f75 7427 '-delStdout'\n+00022730: 203d 3e20 276e 6f27 2c0a 0909 0909 2020 => 'no',..... \n+00022740: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n+00022750: 2470 724c 6f67 293b 0a09 2473 656c 662d $prLog);..$self-\n+00022760: 3e7b 2765 7863 6c4c 6f67 277d 203d 2024 >{'exclLog'} = $\n+00022770: 6578 636c 4c6f 673b 0a20 2020 207d 0a0a exclLog;. }..\n+00022780: 2020 2020 626c 6573 7320 2473 656c 662c bless $self,\n+00022790: 2024 636c 6173 733b 0a7d 0a0a 0a23 2323 $class;.}...###\n+000227a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000227b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000227c0: 2323 2323 230a 2320 6c69 6566 6572 7420 #####.# liefert \n+000227d0: 4261 7369 7376 6572 7a65 6963 686e 6973 Basisverzeichnis\n+000227e0: 2c20 6461 7a75 2072 656c 6174 6976 656e , dazu relativen\n+000227f0: 2044 6174 6569 6e61 6d65 6e20 756e 6420 Dateinamen und \n+00022800: 4669 6c65 7479 700a 7375 6220 6e65 7874 Filetyp.sub next\n+00022810: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n+00022820: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my\n+00022830: 2028 2466 2c20 2474 7970 6573 293b 0a20 ($f, $types);. \n+00022840: 2020 206d 7920 246e 203d 2028 2466 2c20 my $n = ($f, \n+00022850: 2474 7970 6573 2920 3d20 2473 656c 662d $types) = $self-\n+00022860: 3e72 6563 7572 7369 7665 5265 6164 4469 >recursiveReadDi\n+00022870: 723a 3a6e 6578 7428 293b 0a0a 2020 2020 r::next();.. \n+00022880: 6966 2028 2473 656c 662d 3e7b 276d 6435 if ($self->{'md5\n+00022890: 466f 726b 277d 2061 6e64 2024 6e20 3d3d Fork'} and $n ==\n+000228a0: 2030 290a 2020 2020 7b0a 2020 2020 2020 0). {. \n+000228b0: 2020 2320 4966 2074 6865 7265 2077 6572 # If there wer\n+000228c0: 6520 6e6f 2064 6972 2773 206c 6566 7420 e no dir's left \n+000228d0: 746f 2063 6865 636b 2c20 7265 6164 4469 to check, readDi\n+000228e0: 7220 6d61 7920 6e6f 7420 6861 7665 0a20 r may not have. \n+000228f0: 2020 2020 2020 2023 2062 6565 6e20 6361 # been ca\n+00022900: 6c6c 6564 2062 7920 7468 6520 6e65 7874 lled by the next\n+00022910: 2829 2063 616c 6c20 6162 6f76 652e 2057 () call above. W\n+00022920: 6520 6861 7665 2074 6f20 6361 6c6c 2069 e have to call i\n+00022930: 740a 2020 2020 2020 2020 2320 6d61 6e75 t. # manu\n+00022940: 616c 6c79 2074 6f20 6368 6563 6b20 7768 ally to check wh\n+00022950: 6574 6865 7220 7468 6520 6d64 3520 7072 ether the md5 pr\n+00022960: 6f63 6573 7320 6973 2066 696e 6973 6865 ocess is finishe\n+00022970: 6420 2861 6e64 0a20 2020 2020 2020 2023 d (and. #\n+00022980: 2069 6620 736f 2c20 7265 7472 6965 7665 if so, retrieve\n+00022990: 2074 6865 2072 6573 756c 7473 290a 0924 the results)..$\n+000229a0: 7365 6c66 2d3e 7265 6164 4469 7228 293b self->readDir();\n+000229b0: 0a09 7265 7475 726e 2028 2920 6966 2028 ..return () if (\n+000229c0: 407b 2473 656c 662d 3e7b 2766 696c 6573 @{$self->{'files\n+000229d0: 277d 7d20 3d3d 2030 293b 0a20 2020 2020 '}} == 0);. \n+000229e0: 2020 2024 6620 3d20 7368 6966 7420 407b $f = shift @{\n+000229f0: 2473 656c 662d 3e7b 2766 696c 6573 277d $self->{'files'}\n+00022a00: 7d3b 0a09 2474 7970 6573 203d 2073 6869 };..$types = shi\n+00022a10: 6674 2040 7b24 7365 6c66 2d3e 7b27 7479 ft @{$self->{'ty\n+00022a20: 7065 7327 7d7d 3b0a 2020 2020 7d0a 2020 pes'}};. }. \n+00022a30: 2020 656c 7369 6620 2824 6e20 3d3d 2030 elsif ($n == 0\n+00022a40: 290a 2020 2020 7b0a 0972 6574 7572 6e20 ). {..return \n+00022a50: 2829 3b0a 2020 2020 7d0a 0a20 2020 206d ();. }.. m\n+00022a60: 7920 246d 6435 203d 2073 6869 6674 2040 y $md5 = shift @\n+00022a70: 7b24 7365 6c66 2d3e 7b27 6d64 3527 7d7d {$self->{'md5'}}\n+00022a80: 3b0a 2020 2020 2320 2466 207a 6572 6c65 ;. # $f zerle\n+00022a90: 6765 6e20 696e 2076 6f72 6765 6765 6265 gen in vorgegebe\n+00022aa0: 6e65 6e20 5465 696c 2075 6e64 2072 656c nen Teil und rel\n+00022ab0: 6174 6976 656e 0a20 2020 206d 7920 2464 ativen. my $d\n+00022ac0: 6972 203d 2024 7365 6c66 2d3e 7b27 6469 ir = $self->{'di\n+00022ad0: 7227 7d3b 0a20 2020 206d 7920 2466 696c r'};. my $fil\n+00022ae0: 6520 3d20 263a 3a73 7562 7374 7261 6374 e = &::substract\n+00022af0: 5061 7468 2824 662c 2024 6469 7229 3b0a Path($f, $dir);.\n+00022b00: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di\n+00022b10: 722c 2024 6669 6c65 2c20 246d 6435 2c20 r, $file, $md5, \n+00022b20: 2474 7970 6573 293b 0a7d 0a0a 0a23 2323 $types);.}...###\n+00022b30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00022b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00022b50: 2323 2323 230a 2320 7769 7264 2076 6f6e #####.# wird von\n+00022b60: 2025 696e 5072 6f67 7265 7373 2069 6e20 %inProgress in \n+00022b70: 5363 6865 6475 6c65 723a 3a6e 6f72 6d61 Scheduler::norma\n+00022b80: 6c4f 7065 7261 7469 6f6e 2062 656e c3b6 lOperation ben..\n+00022b90: 7469 6774 0a73 7562 2070 7573 6862 6163 tigt.sub pushbac\n+00022ba0: 6b0a 7b0a 2020 2020 6d79 2024 7365 6c66 k.{. my $self\n+00022bb0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n+00022bc0: 2024 6c69 7374 203d 2073 6869 6674 3b20 $list = shift; \n+00022bd0: 2020 2020 2320 4c69 7374 6520 6d69 7420 # Liste mit \n+00022be0: 4c69 7374 656e 2076 6f6e 2028 2464 6972 Listen von ($dir\n+00022bf0: 2c20 2466 696c 652c 2024 6d64 352c 2024 , $file, $md5, $\n+00022c00: 7479 7065 7329 0a20 2020 206d 7920 2470 types). my $p\n+00022c10: 724c 6f67 203d 2073 6869 6674 3b0a 2020 rLog = shift;. \n+00022c20: 2020 6d79 2024 6465 6275 6720 3d20 7368 my $debug = sh\n+00022c30: 6966 743b 0a0a 2020 2020 6d79 2024 6c3b ift;.. my $l;\n+00022c40: 0a20 2020 2066 6f72 6561 6368 2024 6c20 . foreach $l \n+00022c50: 2840 246c 6973 7429 0a20 2020 207b 0a09 (@$list). {..\n+00022c60: 6d79 2028 2464 6972 2c20 2466 696c 652c my ($dir, $file,\n+00022c70: 2024 6d64 352c 2024 7479 7065 2920 3d20 $md5, $type) = \n+00022c80: 2840 246c 293b 0a09 2470 724c 6f67 2d3e (@$l);..$prLog->\n+00022c90: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00022ca0: 2027 4427 2c0a 0909 2020 2020 2020 272d 'D',... '-\n+00022cb0: 7374 7227 203d 3e20 5b22 6368 6563 6b69 str' => [\"checki\n+00022cc0: 6e67 206f 6620 6964 656e 7469 6361 6c20 ng of identical \n+00022cd0: 6669 6c65 203c 2466 696c 653e 225d 290a file <$file>\"]).\n+00022ce0: 0920 2020 2069 6620 2464 6562 7567 3b0a . if $debug;.\n+00022cf0: 0970 7573 6820 407b 2473 656c 662d 3e7b .push @{$self->{\n+00022d00: 2766 696c 6573 277d 7d2c 2022 2464 6972 'files'}}, \"$dir\n+00022d10: 2f24 6669 6c65 223b 0a09 7075 7368 2040 /$file\";..push @\n+00022d20: 7b24 7365 6c66 2d3e 7b27 6d64 3527 7d7d {$self->{'md5'}}\n+00022d30: 2c20 246d 6435 3b0a 0970 7573 6820 407b , $md5;..push @{\n+00022d40: 2473 656c 662d 3e7b 2774 7970 6573 277d $self->{'types'}\n+00022d50: 7d2c 2024 7479 7065 3b0a 2020 2020 7d0a }, $type;. }.\n+00022d60: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+00022d70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00022d80: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n+00022d90: 2072 6561 6444 6972 0a7b 0a20 2020 206d readDir.{. m\n+00022da0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00022db0: 0a0a 2020 2020 6d79 2024 7072 4c6f 6720 .. my $prLog \n+00022dc0: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog\n+00022dd0: 277d 3b0a 2020 2020 6d79 2024 706f 7374 '};. my $post\n+00022de0: 6669 7820 3d20 2473 656c 662d 3e7b 2770 fix = $self->{'p\n+00022df0: 6f73 7466 6978 277d 3b0a 2020 2020 6d79 ostfix'};. my\n+00022e00: 2024 616b 7446 696c 656e 616d 6520 3d20 $aktFilename = \n+00022e10: 2473 656c 662d 3e7b 2761 6b74 4669 6c65 $self->{'aktFile\n+00022e20: 6e61 6d65 277d 3b0a 2020 2020 6d79 2024 name'};. my $\n+00022e30: 6465 6275 674d 6f64 6520 3d20 2473 656c debugMode = $sel\n+00022e40: 662d 3e7b 2764 6562 7567 4d6f 6465 277d f->{'debugMode'}\n+00022e50: 3b0a 2020 2020 6d79 2024 7665 7262 6f73 ;. my $verbos\n+00022e60: 6520 3d20 2473 656c 662d 3e7b 2776 6572 e = $self->{'ver\n+00022e70: 626f 7365 277d 3b0a 2020 2020 6d79 2024 bose'};. my $\n+00022e80: 676e 7563 7020 3d20 2473 656c 662d 3e7b gnucp = $self->{\n+00022e90: 2763 7049 7347 6e75 277d 3b0a 0a20 2020 'cpIsGnu'};.. \n+00022ea0: 206d 7920 2465 7863 6570 7452 756c 6520 my $exceptRule \n+00022eb0: 3d20 2473 656c 662d 3e7b 2765 7863 6570 = $self->{'excep\n+00022ec0: 7452 756c 6527 7d3b 0a20 2020 206d 7920 tRule'};. my \n+00022ed0: 2469 6e63 6c75 6465 5275 6c65 203d 2024 $includeRule = $\n+00022ee0: 7365 6c66 2d3e 7b27 696e 636c 7564 6552 self->{'includeR\n+00022ef0: 756c 6527 7d3b 0a20 2020 206d 7920 2463 ule'};. my $c\n+00022f00: 6865 636b 426c 6f63 6b73 5275 6c65 203d heckBlocksRule =\n+00022f10: 2024 7365 6c66 2d3e 7b27 6368 6563 6b42 $self->{'checkB\n+00022f20: 6c6f 636b 7352 756c 6527 7d3b 0a20 2020 locksRule'};. \n+00022f30: 206d 7920 2465 7869 6e63 6c50 6174 7446 my $exinclPattF\n+00022f40: 6c61 6720 3d0a 0924 6578 6365 7074 5275 lag =..$exceptRu\n+00022f50: 6c65 2d3e 6861 734c 696e 6528 2920 2b20 le->hasLine() + \n+00022f60: 2469 6e63 6c75 6465 5275 6c65 2d3e 6861 $includeRule->ha\n+00022f70: 734c 696e 6528 293b 0a20 2020 206d 7920 sLine();. my \n+00022f80: 2465 7854 7970 6573 203d 2024 7365 6c66 $exTypes = $self\n+00022f90: 2d3e 7b27 6578 5479 7065 7327 7d3b 0a20 ->{'exTypes'};. \n+00022fa0: 2020 206d 7920 2477 7269 7465 4578 636c my $writeExcl\n+00022fb0: 7564 654c 6f67 203d 2024 7365 6c66 2d3e udeLog = $self->\n+00022fc0: 7b27 7772 6974 6545 7863 6c75 6465 4c6f {'writeExcludeLo\n+00022fd0: 6727 7d3b 0a20 2020 206d 7920 2465 7863 g'};. my $exc\n+00022fe0: 6c4c 6f67 203d 2024 7365 6c66 2d3e 7b27 lLog = $self->{'\n+00022ff0: 6578 636c 4c6f 6727 7d20 6966 2024 7772 exclLog'} if $wr\n+00023000: 6974 6545 7863 6c75 6465 4c6f 673b 0a0a iteExcludeLog;..\n+00023010: 2020 2020 6d79 2028 4066 696c 6573 2920 my (@files) \n+00023020: 3d20 2829 3b0a 2020 2020 6d79 2028 406d = ();. my (@m\n+00023030: 6435 2920 3d20 2829 3b0a 2020 2020 6d79 d5) = ();. my\n+00023040: 2028 4074 7970 6573 2920 3d20 2829 3b0a (@types) = ();.\n+00023050: 0a20 2020 206d 7920 246f 6c64 4669 6c65 . my $oldFile\n+00023060: 6e61 6d65 203d 2024 7365 6c66 2d3e 7b27 name = $self->{'\n+00023070: 6f6c 6446 696c 656e 616d 6527 7d3b 0a20 oldFilename'};. \n+00023080: 2020 206d 7920 2474 6d70 6469 7220 3d20 my $tmpdir = \n+00023090: 2473 656c 662d 3e7b 2774 6d70 6469 7227 $self->{'tmpdir'\n+000230a0: 7d3b 0a20 2020 206d 7920 2469 676e 6f72 };. my $ignor\n+000230b0: 6554 696d 6520 3d20 2473 656c 662d 3e7b eTime = $self->{\n+000230c0: 2769 676e 6f72 6554 696d 6527 7d3b 0a0a 'ignoreTime'};..\n+000230d0: 0a20 2020 2023 204d 4435 206c c3a4 7566 . # MD5 l..uf\n+000230e0: 742c 2077 656e 6e20 6dc3 b667 6c69 6368 t, wenn m..glich\n+000230f0: 204d 4435 2053 756d 6d65 6e20 766f 6d20 MD5 Summen vom \n+00023100: 5061 7261 6c6c 656c 7072 6f7a 6573 7320 Parallelprozess \n+00023110: 686f 6c65 6e0a 2020 2020 6966 2028 2473 holen. if ($s\n+00023120: 656c 662d 3e7b 276d 6435 466f 726b 277d elf->{'md5Fork'}\n+00023130: 2061 6e64 0a20 2020 2020 2020 206e 6f74 and. not\n+00023140: 2024 7365 6c66 2d3e 7b27 6d64 3546 6f72 $self->{'md5For\n+00023150: 6b27 7d2d 3e70 726f 6365 7373 5275 6e73 k'}->processRuns\n+00023160: 2829 290a 2020 2020 7b0a 2020 2020 2020 ()). {. \n+00023170: 2020 6d79 2024 7374 6465 7272 203d 2024 my $stderr = $\n+00023180: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork'\n+00023190: 7d2d 3e67 6574 5354 4445 5252 2829 3b0a }->getSTDERR();.\n+000231a0: 2020 2020 2020 2020 6d79 2824 6c29 3b0a my($l);.\n+000231b0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog->\n+000231c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+000231d0: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. \n+000231e0: 2020 2020 2020 2020 2020 2020 272d 7374 '-st\n+000231f0: 7227 203d 3e0a 2020 2020 2020 2020 2020 r' =>. \n+00023200: 2020 2020 2020 2020 2020 2020 5b22 666f [\"fo\n+00023210: 726b 206f 6620 6d64 3573 756d 2067 656e rk of md5sum gen\n+00023220: 6572 6174 6564 2074 6865 2066 6f6c 6c6f erated the follo\n+00023230: 7769 6e67 2065 7272 6f72 733a 222c 0a20 wing errors:\",. \n+00023240: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00023250: 2020 2020 2020 4024 7374 6465 7272 5d29 @$stderr])\n+00023260: 0a20 2020 2020 2020 2020 2020 2069 6620 . if \n+00023270: 2840 2473 7464 6572 7220 3e20 3029 3b0a (@$stderr > 0);.\n+00023280: 2020 2020 2020 2020 6d79 2024 7374 646f my $stdo\n+00023290: 7574 203d 2024 7365 6c66 2d3e 7b27 6d64 ut = $self->{'md\n+000232a0: 3546 6f72 6b27 7d2d 3e67 6574 5354 444f 5Fork'}->getSTDO\n+000232b0: 5554 2829 3b0a 2020 2020 2020 2020 666f UT();. fo\n+000232c0: 7265 6163 6820 246c 2028 4024 7374 646f reach $l (@$stdo\n+000232d0: 7574 290a 2020 2020 2020 2020 7b0a 2020 ut). {. \n+000232e0: 2020 2020 2020 2020 2020 6966 2028 246c if ($l\n+000232f0: 203d 7e20 2f5c 415c 5c2f 2920 2023 2022 =~ /\\A\\\\/) # \"\n+00023300: 5c22 2061 6d20 5a65 696c 656e 616e 6661 \\\" am Zeilenanfa\n+00023310: 6e67 202d 3e20 6573 2077 6972 6420 6765 ng -> es wird ge\n+00023320: 7175 6f74 6574 0a20 2020 2020 2020 2020 quotet. \n+00023330: 2020 207b 0a20 2020 2020 2020 2020 2020 {. \n+00023340: 2020 2020 2024 6c20 3d7e 2073 2f5c 5c6e $l =~ s/\\\\n\n+00023350: 2f5c 6e2f 673b 2020 2023 2022 5c6e 2220 /\\n/g; # \"\\n\" \n+00023360: 696d 204e 616d 656e 2077 6972 6420 766f im Namen wird vo\n+00023370: 6e20 6d64 3573 756d 207a 750a 2020 2020 n md5sum zu. \n+00023380: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00023390: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000233a0: 2320 225c 5c6e 2220 6765 6d61 6368 742c # \"\\\\n\" gemacht,\n+000233b0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+000233c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000233d0: 2020 2020 2023 207a 7572 c3bc 636b 6b6f # zur..ckko\n+000233e0: 6e76 6572 7469 6572 656e 210a 2020 2020 nvertieren!. \n+000233f0: 2020 2020 2020 2020 2020 2020 246c 203d $l =\n+00023400: 7e20 732f 5c5c 5c5c 2f5c 5c2f 6f67 3b20 ~ s/\\\\\\\\/\\\\/og; \n+00023410: 2320 4261 636b 736c 6173 680a 2020 2020 # Backslash. \n+00023420: 2020 2020 2020 2020 2020 2020 246c 203d $l =\n+00023430: 7e20 732f 5c41 5c5c 2f2f 3b20 2020 2020 ~ s/\\A\\\\//; \n+00023440: 2320 225c 5c22 2061 6d20 5a65 696c 656e # \"\\\\\" am Zeilen\n+00023450: 616e 6661 6e67 2065 6e74 6665 726e 656e anfang entfernen\n+00023460: 0a0a 2020 2020 2020 2020 2020 2020 7d0a .. }.\n+00023470: 2020 2020 2020 2020 2020 2020 6d79 2028 my (\n+00023480: 246d 6435 2c20 2466 2920 3d20 246c 203d $md5, $f) = $l =\n+00023490: 7e20 2f5c 4128 5c77 2b29 5c73 2b28 2e2a ~ /\\A(\\w+)\\s+(.*\n+000234a0: 292f 733b 0a20 2020 2020 2020 2020 2020 )/s;. \n+000234b0: 2070 7573 6820 4066 696c 6573 2c20 2466 push @files, $f\n+000234c0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu\n+000234d0: 7368 2040 6d64 352c 2024 6d64 353b 0a20 sh @md5, $md5;. \n+000234e0: 2020 2020 2020 2020 2020 2070 7573 6820 push \n+000234f0: 4074 7970 6573 2c20 2766 273b 0a20 2020 @types, 'f';. \n+00023500: 2020 2020 207d 0a20 2020 2020 2020 2024 }. $\n+00023510: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork'\n+00023520: 7d20 3d20 756e 6465 663b 2020 2320 6a6f } = undef; # jo\n+00023530: 6220 6973 7420 6665 7274 6967 0a20 2020 b ist fertig. \n+00023540: 207d 0a0a 2020 2020 2320 4e65 7565 6e20 }.. # Neuen \n+00023550: 4d44 3520 4c61 7566 2073 7461 7274 656e MD5 Lauf starten\n+00023560: 2077 656e 6e20 6dc3 b667 6c69 6368 0a20 wenn m..glich. \n+00023570: 2020 2069 6620 286e 6f74 2024 7365 6c66 if (not $self\n+00023580: 2d3e 7b27 6d64 3546 6f72 6b27 7d29 0a20 ->{'md5Fork'}). \n+00023590: 2020 207b 0a20 2020 2020 2020 206d 7928 {. my(\n+000235a0: 4063 616c 634d 4435 2920 3d20 2829 3b0a @calcMD5) = ();.\n+000235b0: 0a09 2320 4469 7265 6374 6f72 7920 6569 ..# Directory ei\n+000235c0: 6e6c 6573 656e 0a20 2020 2020 2020 2024 nlesen. $\n+000235d0: 7365 6c66 2d3e 7265 6375 7273 6976 6552 self->recursiveR\n+000235e0: 6561 6444 6972 3a3a 7265 6164 4469 7228 eadDir::readDir(\n+000235f0: 293b 0a0a 0923 2045 696e 6765 6c65 7365 );...# Eingelese\n+00023600: 6e65 2044 6174 6569 656e 2069 6e20 2473 ne Dateien in $s\n+00023610: 656c 662d 3e7b 2766 696c 6573 277d 2066 elf->{'files'} f\n+00023620: 696c 7465 726e 0a20 2020 2020 2020 206d iltern. m\n+00023630: 7920 2824 662c 2024 742c 2024 6929 3b0a y ($f, $t, $i);.\n+00023640: 2020 2020 2020 2020 6d79 2024 6469 7220 my $dir \n+00023650: 3d20 2473 656c 662d 3e7b 2764 6972 277d = $self->{'dir'}\n+00023660: 3b20 2020 2020 2320 7a75 2064 7572 6368 ; # zu durch\n+00023670: 7375 6368 656e 6465 7320 4469 7265 6374 suchendes Direct\n+00023680: 6f72 790a 0a20 2020 2020 2020 206d 7920 ory.. my \n+00023690: 2461 6b74 4469 7220 3d20 2473 656c 662d $aktDir = $self-\n+000236a0: 3e7b 2761 6b74 4469 7227 7d3b 2020 2023 >{'aktDir'}; #\n+000236b0: 2061 6b74 7565 6c6c 6573 2042 6163 6b75 aktuelles Backu\n+000236c0: 7076 6572 7a65 6963 686e 6973 0a09 666f pverzeichnis..fo\n+000236d0: 7220 2824 6920 3d20 3020 3b20 2469 203c r ($i = 0 ; $i <\n+000236e0: 2040 7b24 7365 6c66 2d3e 7b27 6669 6c65 @{$self->{'file\n+000236f0: 7327 7d7d 203b 2024 692b 2b29 0a09 7b0a s'}} ; $i++)..{.\n+00023700: 0920 2020 2024 6620 3d20 2473 656c 662d . $f = $self-\n+00023710: 3e7b 2766 696c 6573 277d 5b24 695d 3b0a >{'files'}[$i];.\n+00023720: 0920 2020 2024 7420 3d20 2473 656c 662d . $t = $self-\n+00023730: 3e7b 2774 7970 6573 277d 5b24 695d 3b0a >{'types'}[$i];.\n+00023740: 0a09 2020 2020 6d79 2024 7265 6c46 696c .. my $relFil\n+00023750: 654e 616d 653b 0a09 2020 2020 6966 2028 eName;.. if (\n+00023760: 2464 6972 2065 7120 272f 2729 0a09 2020 $dir eq '/').. \n+00023770: 2020 7b0a 0909 2472 656c 4669 6c65 4e61 {...$relFileNa\n+00023780: 6d65 203d 2073 7562 7374 7228 2466 2c20 me = substr($f, \n+00023790: 3129 3b0a 0920 2020 207d 0a09 2020 2020 1);.. }.. \n+000237a0: 656c 7365 0a09 2020 2020 7b0a 0909 2472 else.. {...$r\n+000237b0: 656c 4669 6c65 4e61 6d65 203d 2073 7562 elFileName = sub\n+000237c0: 7374 7228 2466 2c20 6c65 6e67 7468 2824 str($f, length($\n+000237d0: 6469 7229 202b 2031 293b 0a09 2020 2020 dir) + 1);.. \n+000237e0: 7d0a 0920 2020 2024 7265 6c46 696c 654e }.. $relFileN\n+000237f0: 616d 6520 3d7e 2073 235c 412f 2b23 233b ame =~ s#\\A/+##;\n+00023800: 2020 2023 2072 656d 6f76 6520 6c65 6164 # remove lead\n+00023810: 696e 6720 2f20 6966 2065 7869 7374 730a ing / if exists.\n+00023820: 0a09 2020 2020 6966 2028 6578 6973 7473 .. if (exists\n+00023830: 2024 2465 7854 7970 6573 7b24 747d 290a $$exTypes{$t}).\n+00023840: 0920 2020 207b 0a09 092b 2b24 2465 7854 . {...++$$exT\n+00023850: 7970 6573 7b24 747d 3b0a 0909 2470 724c ypes{$t};...$prL\n+00023860: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00023870: 2720 3d3e 2027 4427 2c0a 0909 0920 2020 ' => 'D',.... \n+00023880: 2020 2027 2d73 7472 2720 3d3e 205b 2265 '-str' => [\"e\n+00023890: 7863 6570 7454 7970 6520 2474 203c 2472 xceptType $t <$r\n+000238a0: 656c 4669 6c65 4e61 6d65 3e22 5d29 0a09 elFileName>\"])..\n+000238b0: 0920 2020 2069 6620 2464 6562 7567 203e . if $debug >\n+000238c0: 2030 3b0a 0909 6e65 7874 3b0a 0920 2020 0;...next;.. \n+000238d0: 207d 0a0a 0920 2020 2069 6620 2824 7420 }... if ($t \n+000238e0: 6571 2027 5327 2061 6e64 0a20 2020 2020 eq 'S' and. \n+000238f0: 2020 2020 2020 2020 2020 206e 6f74 2024 not $\n+00023900: 676e 7563 7029 0a09 2020 2020 7b0a 0909 gnucp).. {...\n+00023910: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00023920: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00023930: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00023940: 205b 2275 6e73 7570 706f 7274 6564 2066 [\"unsupported f\n+00023950: 696c 6520 7479 7065 2027 736f 636b 6574 ile type 'socket\n+00023960: 2722 202e 0a09 0909 0909 2022 203c 2472 '\" ....... \" <$r\n+00023970: 656c 4669 6c65 4e61 6d65 3e22 5d29 3b0a elFileName>\"]);.\n+00023980: 0909 6e65 7874 3b0a 0920 2020 207d 0a09 ..next;.. }..\n+00023990: 2020 2020 6966 2028 2474 2065 7120 2762 if ($t eq 'b\n+000239a0: 2720 616e 640a 0909 6e6f 7420 2467 6e75 ' and...not $gnu\n+000239b0: 6370 290a 0920 2020 207b 0a09 0924 7072 cp).. {...$pr\n+000239c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000239d0: 6427 203d 3e20 2757 272c 0a09 0909 2020 d' => 'W',.... \n+000239e0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+000239f0: 756e 7375 7070 6f72 7465 6420 6669 6c65 unsupported file\n+00023a00: 2074 7970 6520 2762 6c6f 636b 2022 202e type 'block \" .\n+00023a10: 0a09 0909 0909 2022 7370 6563 6961 6c20 ...... \"special \n+00023a20: 6669 6c65 203c 2472 656c 4669 6c65 4e61 file <$relFileNa\n+00023a30: 6d65 3e22 5d29 3b0a 0909 6e65 7874 3b0a me>\"]);...next;.\n+00023a40: 0920 2020 207d 0a09 2020 2020 6966 2028 . }.. if (\n+00023a50: 2474 2065 7120 2763 2720 616e 640a 2020 $t eq 'c' and. \n+00023a60: 2020 2020 2020 2020 2020 2020 206e 6f74 not\n+00023a70: 2024 676e 7563 7029 0a09 2020 2020 7b0a $gnucp).. {.\n+00023a80: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00023a90: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+00023aa0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+00023ab0: 3d3e 205b 2275 6e73 7570 706f 7274 6564 => [\"unsupported\n+00023ac0: 2066 696c 6520 7479 7065 2027 6368 6172 file type 'char\n+00023ad0: 6163 7465 7220 2722 202e 0a09 0909 0909 acter '\" .......\n+00023ae0: 2022 7370 6563 6961 6c20 6669 6c65 203c \"special file <\n+00023af0: 2472 656c 4669 6c65 4e61 6d65 3e22 5d29 $relFileName>\"])\n+00023b00: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. }\n+00023b10: 0a0a 0920 2020 206d 7920 2824 6465 762c ... my ($dev,\n+00023b20: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, \n+00023b30: 2475 6964 2c20 2467 6964 2c20 2461 6374 $uid, $gid, $act\n+00023b40: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime\n+00023b50: 2c0a 0909 2461 6374 4174 696d 652c 2024 ,...$actAtime, $\n+00023b60: 6163 7453 697a 6529 203d 0a09 0920 2020 actSize) =... \n+00023b70: 2028 7374 6174 2824 6629 295b 302c 2031 (stat($f))[0, 1\n+00023b80: 2c20 322c 2034 2c20 352c 2031 302c 2039 , 2, 4, 5, 10, 9\n+00023b90: 2c20 382c 2037 5d3b 0a09 2020 2020 246d , 8, 7];.. $m\n+00023ba0: 6f64 6520 3d20 3020 756e 6c65 7373 2024 ode = 0 unless $\n+00023bb0: 6d6f 6465 3b0a 0920 2020 2024 6d6f 6465 mode;.. $mode\n+00023bc0: 2026 3d20 3037 3737 373b 0a09 2020 2020 &= 07777;.. \n+00023bd0: 2320 6368 6563 6b20 6578 6365 7074 5275 # check exceptRu\n+00023be0: 6c65 2061 6e64 2069 6e63 6c75 6465 5275 le and includeRu\n+00023bf0: 6c65 0a09 2020 2020 6966 2028 2474 206e le.. if ($t n\n+00023c00: 6520 2764 2720 616e 6420 2465 7869 6e63 e 'd' and $exinc\n+00023c10: 6c50 6174 7446 6c61 6729 0a09 2020 2020 lPattFlag).. \n+00023c20: 7b0a 0909 6966 2028 2465 7863 6570 7452 {...if ($exceptR\n+00023c30: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() =\n+00023c40: 3d20 3120 616e 640a 0909 2020 2020 2465 = 1 and... $e\n+00023c50: 7863 6570 7452 756c 652d 3e63 6865 636b xceptRule->check\n+00023c60: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam\n+00023c70: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo\n+00023c80: 6465 2c0a 0909 0909 0920 2020 2461 6374 de,...... $act\n+00023c90: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime\n+00023ca0: 2c20 2475 6964 2c0a 0909 0909 0920 2020 , $uid,...... \n+00023cb0: 2467 6964 2c20 2474 2920 3d3d 2031 290a $gid, $t) == 1).\n+00023cc0: 0909 7b0a 0909 2020 2020 2465 7863 6c4c ..{... $exclL\n+00023cd0: 6f67 2d3e 7072 696e 7428 2224 7265 6c46 og->print(\"$relF\n+00023ce0: 696c 654e 616d 655c 6e22 2920 6966 2024 ileName\\n\") if $\n+00023cf0: 7772 6974 6545 7863 6c75 6465 4c6f 673b writeExcludeLog;\n+00023d00: 0a09 0920 2020 2024 6d61 696e 3a3a 7374 ... $main::st\n+00023d10: 6174 2d3e 696e 6372 5f6e 6f45 7863 6c75 at->incr_noExclu\n+00023d20: 6465 5275 6c65 2829 3b0a 0909 2020 2020 deRule();... \n+00023d30: 6e65 7874 3b0a 0909 7d0a 0a09 0969 6620 next;...}....if \n+00023d40: 2824 696e 636c 7564 6552 756c 652d 3e68 ($includeRule->h\n+00023d50: 6173 4c69 6e65 2829 203d 3d20 3129 0a09 asLine() == 1)..\n+00023d60: 097b 0a09 0920 2020 2069 6620 2824 696e .{... if ($in\n+00023d70: 636c 7564 6552 756c 652d 3e63 6865 636b cludeRule->check\n+00023d80: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam\n+00023d90: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo\n+00023da0: 6465 2c0a 0909 0909 0920 2020 2024 6163 de,...... $ac\n+00023db0: 7443 7469 6d65 2c20 2461 6374 4d74 696d tCtime, $actMtim\n+00023dc0: 652c 2024 7569 642c 0a09 0909 0909 2020 e, $uid,...... \n+00023dd0: 2020 2467 6964 2c20 2474 2920 3d3d 2031 $gid, $t) == 1\n+00023de0: 290a 0909 2020 2020 7b0a 0909 0924 6578 )... {....$ex\n+00023df0: 636c 4c6f 672d 3e70 7269 6e74 2822 2472 clLog->print(\"$r\n+00023e00: 656c 4669 6c65 4e61 6d65 5c6e 2229 2069 elFileName\\n\") i\n+00023e10: 6620 2477 7269 7465 4578 636c 7564 654c f $writeExcludeL\n+00023e20: 6f67 3b0a 0909 0924 6d61 696e 3a3a 7374 og;....$main::st\n+00023e30: 6174 2d3e 696e 6372 5f6e 6f49 6e63 6c75 at->incr_noInclu\n+00023e40: 6465 5275 6c65 2829 3b0a 0909 2020 2020 deRule();... \n+00023e50: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... \n+00023e60: 2020 207b 0a09 0909 6e65 7874 3b0a 0909 {....next;...\n+00023e70: 2020 2020 7d0a 0909 7d0a 0920 2020 207d }...}.. }\n+00023e80: 0a0a 2020 2020 2020 2020 2020 2020 2320 .. # \n+00023e90: 4e69 6368 7420 706c 6169 6e2d 6669 6c65 Nicht plain-file\n+00023ea0: 2062 656e c3b6 7469 6774 206b 6569 6e20 ben..tigt kein \n+00023eb0: 4d44 350a 0920 2020 2069 6620 2824 7420 MD5.. if ($t \n+00023ec0: 6e65 2027 6627 290a 0920 2020 207b 0a09 ne 'f').. {..\n+00023ed0: 0970 7573 6820 4066 696c 6573 2c20 2466 .push @files, $f\n+00023ee0: 3b0a 0909 7075 7368 2040 7479 7065 732c ;...push @types,\n+00023ef0: 2024 743b 0a20 2020 2020 2020 2020 2020 $t;. \n+00023f00: 2020 2020 2070 7573 6820 406d 6435 2c20 push @md5, \n+00023f10: 756e 6465 663b 0a09 096e 6578 743b 0a09 undef;...next;..\n+00023f20: 2020 2020 7d0a 0a0a 0920 2020 2023 0a09 }.... #..\n+00023f30: 2020 2020 2320 6162 2068 6965 7220 6973 # ab hier is\n+00023f40: 7420 616c 6c65 7320 6e75 7220 6e6f 6368 t alles nur noch\n+00023f50: 2070 6c61 696e 2066 696c 6520 2869 6e20 plain file (in \n+00023f60: 666f 7220 5363 686c 6569 6665 290a 0920 for Schleife).. \n+00023f70: 2020 2023 0a09 2020 2020 6d79 2028 246f #.. my ($o\n+00023f80: 6c64 436f 6d70 722c 2024 6f6c 6443 7469 ldCompr, $oldCti\n+00023f90: 6d65 2c20 246f 6c64 4d74 696d 652c 2024 me, $oldMtime, $\n+00023fa0: 6f6c 6453 697a 652c 2024 6d64 3573 756d oldSize, $md5sum\n+00023fb0: 293b 0a09 2020 2020 6d79 2024 6e20 3d20 );.. my $n = \n+00023fc0: 2824 6f6c 6443 6f6d 7072 2c20 246f 6c64 ($oldCompr, $old\n+00023fd0: 4374 696d 652c 2024 6f6c 644d 7469 6d65 Ctime, $oldMtime\n+00023fe0: 2c20 246f 6c64 5369 7a65 2c20 246d 6435 , $oldSize, $md5\n+00023ff0: 7375 6d29 203d 0a09 0924 6f6c 6446 696c sum) =...$oldFil\n+00024000: 656e 616d 652d 3e67 6574 496e 6f64 6562 ename->getInodeb\n+00024010: 6163 6b75 7043 6f6d 7072 4374 696d 654d ackupComprCtimeM\n+00024020: 7469 6d65 5369 7a65 4d44 3528 2472 656c timeSizeMD5($rel\n+00024030: 4669 6c65 4e61 6d65 293b 0a0a 0920 2020 FileName);... \n+00024040: 2023 2063 6865 636b 2063 6865 636b 426c # check checkBl\n+00024050: 6f63 6b73 5275 6c65 0a09 2020 2020 6966 ocksRule.. if\n+00024060: 2028 2474 2065 7120 2766 2720 616e 6420 ($t eq 'f' and \n+00024070: 2463 6865 636b 426c 6f63 6b73 5275 6c65 $checkBlocksRule\n+00024080: 2d3e 6861 734c 696e 6528 2929 2023 2074 ->hasLine()) # t\n+00024090: 6869 7320 6c69 6e65 2072 6573 756c 7473 his line results\n+000240a0: 0a09 2020 2020 7b20 2020 2020 2020 2020 .. { \n+000240b0: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+000240c0: 2069 6e20 6120 7761 726e 696e 6720 6475 in a warning du\n+000240d0: 6520 746f 2061 2062 7567 2069 6e20 7065 e to a bug in pe\n+000240e0: 726c 0a09 096d 7920 2824 7275 6c65 4253 rl...my ($ruleBS\n+000240f0: 2c20 2472 756c 6543 6f6d 7072 6573 732c , $ruleCompress,\n+00024100: 2024 7275 6c65 5061 7261 6c6c 656c 2c20 $ruleParallel, \n+00024110: 2472 756c 6552 6561 6429 203d 0a09 0920 $ruleRead) =... \n+00024120: 2020 2024 6368 6563 6b42 6c6f 636b 7352 $checkBlocksR\n+00024130: 756c 652d 3e63 6865 636b 5275 6c65 2824 ule->checkRule($\n+00024140: 7265 6c46 696c 654e 616d 652c 2024 6163 relFileName, $ac\n+00024150: 7453 697a 652c 0a09 0909 0909 0924 6d6f tSize,.......$mo\n+00024160: 6465 2c20 2461 6374 4374 696d 652c 0a09 de, $actCtime,..\n+00024170: 0909 0909 0924 6163 744d 7469 6d65 2c20 .....$actMtime, \n+00024180: 2475 6964 2c0a 0909 0909 0909 2467 6964 $uid,.......$gid\n+00024190: 2c20 2474 293b 0a09 0969 6620 2824 7275 , $t);...if ($ru\n+000241a0: 6c65 4253 203e 2030 290a 0909 7b0a 0909 leBS > 0)...{...\n+000241b0: 2020 2020 2320 6d64 3520 6973 2063 616c # md5 is cal\n+000241c0: 6375 6c61 7465 6420 6c61 7465 720a 0909 culated later...\n+000241d0: 2020 2020 7075 7368 2040 6669 6c65 732c push @files,\n+000241e0: 2024 663b 0a09 0920 2020 2070 7573 6820 $f;... push \n+000241f0: 4074 7970 6573 2c20 2762 6627 3b20 2020 @types, 'bf'; \n+00024200: 2320 626c 6f63 6b20 6669 6c65 0a0a 0909 # block file....\n+00024210: 2020 2020 6966 2028 246e 203e 2030 2061 if ($n > 0 a\n+00024220: 6e64 0a09 0909 2461 6374 5369 7a65 203d nd....$actSize =\n+00024230: 3d20 246f 6c64 5369 7a65 2061 6e64 0a09 = $oldSize and..\n+00024240: 0909 2824 6163 744d 7469 6d65 203d 3d20 ..($actMtime == \n+00024250: 246f 6c64 4d74 696d 6529 2061 6e64 0a09 $oldMtime) and..\n+00024260: 0909 2824 6f6c 6443 6f6d 7072 2065 7120 ..($oldCompr eq \n+00024270: 2762 2729 290a 0909 2020 2020 7b0a 0909 'b'))... {...\n+00024280: 0923 206e 6f74 6869 6e67 2063 6861 6e67 .# nothing chang\n+00024290: 6564 0a09 0909 7075 7368 2040 6d64 352c ed....push @md5,\n+000242a0: 2024 6d64 3573 756d 3b0a 0909 2020 2020 $md5sum;... \n+000242b0: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... \n+000242c0: 2020 207b 0a09 0909 6d79 2024 6320 3d20 {....my $c = \n+000242d0: 2472 756c 6543 6f6d 7072 6573 7320 3f20 $ruleCompress ? \n+000242e0: 2763 2720 3a20 2775 273b 0a09 0909 2020 'c' : 'u';.... \n+000242f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024300: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00024310: 2063 616c 6375 6c61 7465 206e 6577 206d calculate new m\n+00024320: 6435 2073 756d 0a09 0909 7075 7368 2040 d5 sum....push @\n+00024330: 6d64 352c 205b 2472 756c 6542 532c 2024 md5, [$ruleBS, $\n+00024340: 632c 2024 7275 6c65 5061 7261 6c6c 656c c, $ruleParallel\n+00024350: 2c20 4024 7275 6c65 5265 6164 5d3b 0a09 , @$ruleRead];..\n+00024360: 0909 6966 2028 2464 6562 7567 4d6f 6465 ..if ($debugMode\n+00024370: 203e 3d20 3329 0a09 0909 7b0a 0909 0920 >= 3)....{.... \n+00024380: 2020 206d 7920 2840 7265 6173 6f6e 293b my (@reason);\n+00024390: 0a09 0909 2020 2020 7075 7368 2040 7265 .... push @re\n+000243a0: 6173 6f6e 2c20 2773 697a 6527 2069 6620 ason, 'size' if \n+000243b0: 2461 6374 5369 7a65 2021 3d20 246f 6c64 $actSize != $old\n+000243c0: 5369 7a65 3b0a 0909 0920 2020 2070 7573 Size;.... pus\n+000243d0: 6820 4072 6561 736f 6e2c 2027 6d74 696d h @reason, 'mtim\n+000243e0: 6527 2069 6620 2461 6374 4d74 696d 6520 e' if $actMtime \n+000243f0: 213d 2024 6f6c 644d 7469 6d65 3b0a 0909 != $oldMtime;...\n+00024400: 0920 2020 2070 7573 6820 4072 6561 736f . push @reaso\n+00024410: 6e2c 2027 6374 696d 6527 2069 6620 2461 n, 'ctime' if $a\n+00024420: 6374 4374 696d 6520 213d 2024 6f6c 6443 ctCtime != $oldC\n+00024430: 7469 6d65 3b0a 0909 0920 2020 2024 7072 time;.... $pr\n+00024440: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00024450: 6427 203d 3e20 2744 272c 0a09 0909 0909 d' => 'D',......\n+00024460: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => [\"md\n+00024470: 3573 756d 2028 2220 2e0a 0909 0909 0920 5sum (\" ....... \n+00024480: 206a 6f69 6e28 272c 2027 2c20 4072 6561 join(', ', @rea\n+00024490: 736f 6e29 202e 2022 2920 2466 225d 293b son) . \") $f\"]);\n+000244a0: 0a09 0909 7d0a 0909 2020 2020 7d0a 0909 ....}... }...\n+000244b0: 2020 2020 6e65 7874 3b0a 0909 7d0a 0920 next;...}.. \n+000244c0: 2020 207d 0a09 2020 2020 656c 7369 6620 }.. elsif \n+000244d0: 2824 6f6c 6443 6f6d 7072 2061 6e64 2024 ($oldCompr and $\n+000244e0: 6f6c 6443 6f6d 7072 2065 7120 2762 2729 oldCompr eq 'b')\n+000244f0: 2020 2020 2320 6620 2d3e 2062 0a09 2020 # f -> b.. \n+00024500: 2020 7b0a 0909 7075 7368 2040 7479 7065 {...push @type\n+00024510: 732c 2027 666e 6577 273b 2020 2023 2066 s, 'fnew'; # f\n+00024520: 6f72 6365 2063 6f70 7920 6f72 2063 6f6d orce copy or com\n+00024530: 7072 6573 732c 2064 6f20 6e6f 740a 0909 press, do not...\n+00024540: 7075 7368 2040 6d64 352c 2024 6d64 3573 push @md5, $md5s\n+00024550: 756d 3b20 2020 2023 206c 696e 6b20 6265 um; # link be\n+00024560: 6361 7573 6520 7072 6576 696f 7573 2062 cause previous b\n+00024570: 6163 6b75 7020 7761 730a 0909 7075 7368 ackup was...push\n+00024580: 2040 6669 6c65 732c 2024 663b 2020 2020 @files, $f; \n+00024590: 2020 2023 2062 6c6f 636b 6564 0a09 0969 # blocked...i\n+000245a0: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >=\n+000245b0: 2033 290a 0909 7b0a 0909 2020 2020 2470 3)...{... $p\n+000245c0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+000245d0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',.....\n+000245e0: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => [\"md\n+000245f0: 3573 756d 2028 626c 6f63 6b20 746f 2066 5sum (block to f\n+00024600: 696c 6529 2024 6622 5d29 3b0a 0909 7d0a ile) $f\"]);...}.\n+00024610: 0909 6e65 7874 3b0a 0920 2020 207d 0a0a ..next;.. }..\n+00024620: 0920 2020 2023 2070 6c61 696e 2066 696c . # plain fil\n+00024630: 6573 2c20 6e6f 2062 6c6f 636b 6564 2066 es, no blocked f\n+00024640: 696c 6573 0a09 2020 2020 6966 2028 246e iles.. if ($n\n+00024650: 203d 3d20 3029 2020 2020 2320 6e69 6368 == 0) # nich\n+00024660: 7420 696d 2048 6173 6820 6765 6675 6e64 t im Hash gefund\n+00024670: 656e 2028 6175 7320 4461 7465 6920 2e6d en (aus Datei .m\n+00024680: 6435 4368 6563 6b53 756d 730a 0920 2020 d5CheckSums.. \n+00024690: 207b 2020 2020 2020 2020 2020 2020 2020 { \n+000246a0: 2023 202d 3e20 6ec3 a468 6572 2075 6e74 # -> n..her unt\n+000246b0: 6572 7375 6368 656e 210a 2020 2020 2020 ersuchen!. \n+000246c0: 2020 2020 2020 2020 2020 2470 724c 6f67 $prLog\n+000246d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000246e0: 3d3e 2027 4927 2c0a 2020 2020 2020 2020 => 'I',. \n+000246f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024700: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n+00024710: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024720: 2020 2020 2020 2020 2020 2020 2020 5b22 [\"\n+00024730: 4368 6563 6b69 6e67 2024 7265 6c46 696c Checking $relFil\n+00024740: 654e 616d 6520 5b6e 6577 5d22 5d29 2069 eName [new]\"]) i\n+00024750: 6620 2476 6572 626f 7365 3b0a 0909 7075 f $verbose;...pu\n+00024760: 7368 2040 6361 6c63 4d44 352c 2024 663b sh @calcMD5, $f;\n+00024770: 0a09 0969 6620 2824 6465 6275 674d 6f64 ...if ($debugMod\n+00024780: 6520 3e3d 2033 290a 0909 7b0a 0909 2020 e >= 3)...{... \n+00024790: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+000247a0: 272d 6b69 6e64 2720 3d3e 2027 4427 2c0a '-kind' => 'D',.\n+000247b0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n+000247c0: 5b22 6d64 3573 756d 2028 6e65 7720 6669 [\"md5sum (new fi\n+000247d0: 6c65 2920 2466 225d 293b 0a09 097d 0a09 le) $f\"]);...}..\n+000247e0: 096e 6578 743b 0a09 2020 2020 7d0a 0a09 .next;.. }...\n+000247f0: 2020 2020 6966 2028 2469 676e 6f72 6554 if ($ignoreT\n+00024800: 696d 6520 6e65 2027 6d74 696d 6527 2061 ime ne 'mtime' a\n+00024810: 6e64 2028 2461 6374 4d74 696d 6520 213d nd ($actMtime !=\n+00024820: 2024 6f6c 644d 7469 6d65 2929 0a09 2020 $oldMtime)).. \n+00024830: 2020 7b0a 2020 2020 2020 2020 2020 2020 {. \n+00024840: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00024850: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n+00024860: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+00024870: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024880: 272d 7374 7227 203d 3e0a 2020 2020 2020 '-str' =>. \n+00024890: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000248a0: 2020 2020 2020 2020 5b22 4368 6563 6b69 [\"Checki\n+000248b0: 6e67 2024 7265 6c46 696c 654e 616d 6520 ng $relFileName \n+000248c0: 5b6d 7469 6d65 3a20 246f 6c64 4d74 696d [mtime: $oldMtim\n+000248d0: 6520 2d3e 2024 6163 744d 7469 6d65 5d22 e -> $actMtime]\"\n+000248e0: 5d29 0a09 0920 2020 2069 6620 2476 6572 ])... if $ver\n+000248f0: 626f 7365 3b0a 0909 7075 7368 2040 6361 bose;...push @ca\n+00024900: 6c63 4d44 352c 2024 663b 0a09 0969 6620 lcMD5, $f;...if \n+00024910: 2824 6465 6275 674d 6f64 6520 3e3d 2033 ($debugMode >= 3\n+00024920: 290a 0909 7b0a 0909 2020 2020 2470 724c )...{... $prL\n+00024930: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00024940: 2720 3d3e 2027 4427 2c0a 0909 0909 2020 ' => 'D',..... \n+00024950: 272d 7374 7227 203d 3e20 5b22 6d64 3573 '-str' => [\"md5s\n+00024960: 756d 2028 6d74 696d 6529 2024 6622 5d29 um (mtime) $f\"])\n+00024970: 3b0a 0909 7d0a 0909 6e65 7874 3b0a 0920 ;...}...next;.. \n+00024980: 2020 207d 0a0a 2020 2020 2020 2020 2020 }.. \n+00024990: 2020 656c 7369 6620 2824 6163 7453 697a elsif ($actSiz\n+000249a0: 6520 213d 2024 6f6c 6453 697a 6529 0a09 e != $oldSize)..\n+000249b0: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. \n+000249c0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n+000249d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000249e0: 4927 2c0a 2020 2020 2020 2020 2020 2020 I',. \n+000249f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024a00: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. \n+00024a10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024a20: 2020 2020 2020 2020 2020 5b22 7369 7a65 [\"size\n+00024a30: 206f 6620 2472 656c 4669 6c65 4e61 6d65 of $relFileName\n+00024a40: 2063 6861 6e67 6564 2066 726f 6d20 246f changed from $o\n+00024a50: 6c64 5369 7a65 2074 6f20 2220 2e0a 0909 ldSize to \" ....\n+00024a60: 0920 2020 2020 2020 2224 6163 7453 697a . \"$actSiz\n+00024a70: 652c 2062 7574 206d 7469 6d65 2064 6964 e, but mtime did\n+00024a80: 6e27 7420 6368 616e 6765 2e22 5d29 3b0a n't change.\"]);.\n+00024a90: 0909 7075 7368 2040 6361 6c63 4d44 352c ..push @calcMD5,\n+00024aa0: 2024 663b 0a09 0969 6620 2824 6465 6275 $f;...if ($debu\n+00024ab0: 674d 6f64 6520 3e3d 2033 290a 0909 7b0a gMode >= 3)...{.\n+00024ac0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+00024ad0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00024ae0: 4427 2c0a 0909 0909 2020 272d 7374 7227 D',..... '-str'\n+00024af0: 203d 3e20 5b22 6d64 3573 756d 2028 7369 => [\"md5sum (si\n+00024b00: 7a65 2920 2466 225d 293b 0a09 097d 0a09 ze) $f\"]);...}..\n+00024b10: 096e 6578 743b 0a09 2020 2020 7d0a 0a09 .next;.. }...\n+00024b20: 2020 2020 656c 7369 6620 2824 6967 6e6f elsif ($igno\n+00024b30: 7265 5469 6d65 206e 6520 2763 7469 6d65 reTime ne 'ctime\n+00024b40: 2720 616e 6420 2824 6163 7443 7469 6d65 ' and ($actCtime\n+00024b50: 2021 3d20 246f 6c64 4374 696d 6529 290a != $oldCtime)).\n+00024b60: 0920 2020 207b 0a20 2020 2020 2020 2020 . {. \n+00024b70: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p\n+00024b80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00024b90: 2749 272c 0a20 2020 2020 2020 2020 2020 'I',. \n+00024ba0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024bb0: 2020 2027 2d73 7472 2720 3d3e 0a20 2020 '-str' =>. \n+00024bc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00024bd0: 2020 2020 2020 2020 2020 205b 2243 6865 [\"Che\n+00024be0: 636b 696e 6720 2472 656c 4669 6c65 4e61 cking $relFileNa\n+00024bf0: 6d65 205b 6374 696d 653a 2024 6f6c 6443 me [ctime: $oldC\n+00024c00: 7469 6d65 202d 3e20 2461 6374 4374 696d time -> $actCtim\n+00024c10: 655d 225d 290a 0909 2020 2020 6966 2024 e]\"])... if $\n+00024c20: 7665 7262 6f73 653b 0a09 0970 7573 6820 verbose;...push \n+00024c30: 4063 616c 634d 4435 2c20 2466 3b0a 0909 @calcMD5, $f;...\n+00024c40: 6966 2028 2464 6562 7567 4d6f 6465 203e if ($debugMode >\n+00024c50: 3d20 3329 0a09 097b 0a09 0920 2020 2024 = 3)...{... $\n+00024c60: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00024c70: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',....\n+00024c80: 0920 2027 2d73 7472 2720 3d3e 205b 226d . '-str' => [\"m\n+00024c90: 6435 7375 6d20 2863 7469 6d65 2920 2466 d5sum (ctime) $f\n+00024ca0: 225d 293b 0a09 097d 0a09 096e 6578 743b \"]);...}...next;\n+00024cb0: 0a09 2020 2020 7d0a 0a0a 0920 2020 2023 .. }.... #\n+00024cc0: 0a09 2020 2020 2320 c3bc 6272 6967 3a20 .. # ..brig: \n+00024cd0: 706c 6169 6e20 6669 6c65 732c 2064 6965 plain files, die\n+00024ce0: 2073 6963 6820 6765 6765 6ec3 bc62 6572 sich gegen..ber\n+00024cf0: 2064 656d 206c 6574 7a74 656e 2042 6163 dem letzten Bac\n+00024d00: 6b75 700a 0920 2020 2023 206e 6963 6874 kup.. # nicht\n+00024d10: 2076 6572 c3a4 6e64 6572 7420 6861 6265 ver..ndert habe\n+00024d20: 6e0a 0920 2020 2023 0a0a 2020 2020 2020 n.. #.. \n+00024d30: 2020 2020 2020 2320 6d69 7420 6d64 3520 # mit md5 \n+00024d40: 5375 6d6d 6520 c3bc 6265 7220 6462 6d28 Summe ..ber dbm(\n+00024d50: 6d64 3529 2067 6568 656e 2c20 6461 6475 md5) gehen, dadu\n+00024d60: 7263 680a 2020 2020 2020 2020 2020 2020 rch. \n+00024d70: 2320 446f 7070 656c 7465 2076 6572 6d65 # Doppelte verme\n+00024d80: 6964 656e 0a20 2020 2020 2020 2020 2020 iden. \n+00024d90: 2070 7573 6820 4066 696c 6573 2c20 2466 push @files, $f\n+00024da0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu\n+00024db0: 7368 2040 6d64 352c 2024 6d64 3573 756d sh @md5, $md5sum\n+00024dc0: 3b0a 2020 2020 2020 2020 2020 2020 7075 ;. pu\n+00024dd0: 7368 2040 7479 7065 732c 2027 6627 3b0a sh @types, 'f';.\n+00024de0: 097d 0a0a 0a20 2020 2020 2020 2023 2050 .}... # P\n+00024df0: 6172 616c 6c65 6c70 726f 7a65 7373 2073 arallelprozess s\n+00024e00: 7461 7274 656e 2c0a 2020 2020 2020 2020 tarten,. \n+00024e10: 2320 4d44 3520 5375 6d6d 656e 2066 c3bc # MD5 Summen f..\n+00024e20: 7220 4063 616c 634d 4435 2062 6572 6563 r @calcMD5 berec\n+00024e30: 686e 656e 0a20 2020 2020 2020 2069 6620 hnen. if \n+00024e40: 2840 6361 6c63 4d44 3520 3e20 3029 0a20 (@calcMD5 > 0). \n+00024e50: 2020 2020 2020 207b 0a20 2020 2020 2020 {. \n+00024e60: 2020 2020 2024 7365 6c66 2d3e 7b27 6d64 $self->{'md\n+00024e70: 3546 6f72 6b27 7d20 3d20 666f 726b 4d44 5Fork'} = forkMD\n+00024e80: 352d 3e6e 6577 2827 2d70 6172 616d 2720 5->new('-param' \n+00024e90: 3d3e 205b 4063 616c 634d 4435 5d2c 0a09 => [@calcMD5],..\n+00024ea0: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+00024eb0: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,...\n+00024ec0: 0909 0920 2020 2020 2027 2d74 6d70 6469 ... '-tmpdi\n+00024ed0: 7227 203d 3e20 2474 6d70 6469 722c 0a09 r' => $tmpdir,..\n+00024ee0: 0909 0909 2020 2020 2020 272d 7265 7365 .... '-rese\n+00024ef0: 7441 7469 6d65 2720 3d3e 0a09 0909 0909 tAtime' =>......\n+00024f00: 2020 2020 2020 2473 656c 662d 3e7b 2772 $self->{'r\n+00024f10: 6573 6574 4174 696d 6527 7d29 3b0a 2020 esetAtime'});. \n+00024f20: 2020 2020 2020 7d0a 2020 2020 7d0a 0a20 }. }.. \n+00024f30: 2020 2023 2046 616c 6c73 206e 6f63 6820 # Falls noch \n+00024f40: 6569 6e20 5061 7261 6c6c 656c 7072 6f7a ein Parallelproz\n+00024f50: 6573 7320 6cc3 a475 6674 2c20 7369 6368 ess l..uft, sich\n+00024f60: 6572 7374 656c 6c65 6e20 6461 7373 2072 erstellen dass r\n+00024f70: 6561 6444 6972 0a20 2020 2023 2065 726e eadDir. # ern\n+00024f80: 6575 7420 6175 6667 6572 7566 656e 2077 eut aufgerufen w\n+00024f90: 6972 6420 6175 6368 2077 656e 6e20 6573 ird auch wenn es\n+00024fa0: 206a 6574 7a74 206e 6963 6874 7320 7a75 jetzt nichts zu\n+00024fb0: 72c3 bc63 6b67 6567 6562 656e 0a20 2020 r..ckgegeben. \n+00024fc0: 2023 2068 6174 2e0a 2020 2020 6966 2028 # hat.. if (\n+00024fd0: 4066 696c 6573 203d 3d20 3020 616e 6420 @files == 0 and \n+00024fe0: 2473 656c 662d 3e7b 276d 6435 466f 726b $self->{'md5Fork\n+00024ff0: 277d 290a 2020 2020 7b0a 2020 2020 2020 '}). {. \n+00025000: 2020 7075 7368 2040 6669 6c65 732c 2075 push @files, u\n+00025010: 6e64 6566 3b0a 2020 2020 2020 2020 7075 ndef;. pu\n+00025020: 7368 2040 6d64 352c 2075 6e64 6566 3b0a sh @md5, undef;.\n+00025030: 2020 2020 2020 2020 7075 7368 2040 7479 push @ty\n+00025040: 7065 732c 2027 7265 7065 6174 273b 0a20 pes, 'repeat';. \n+00025050: 2020 207d 0a0a 2020 2020 2473 656c 662d }.. $self-\n+00025060: 3e7b 2766 696c 6573 277d 203d 205c 4066 >{'files'} = \\@f\n+00025070: 696c 6573 3b0a 2020 2020 2473 656c 662d iles;. $self-\n+00025080: 3e7b 276d 6435 277d 203d 205c 406d 6435 >{'md5'} = \\@md5\n+00025090: 3b0a 2020 2020 2473 656c 662d 3e7b 2774 ;. $self->{'t\n+000250a0: 7970 6573 277d 203d 205c 4074 7970 6573 ypes'} = \\@types\n+000250b0: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+000250c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000250d0: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+000250e0: 7562 2044 4553 5452 4f59 0a7b 0a20 2020 ub DESTROY.{. \n+000250f0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n+00025100: 743b 0a0a 2020 2020 6d79 2024 7763 6c20 t;.. my $wcl \n+00025110: 3d20 2473 656c 662d 3e7b 2777 7269 7465 = $self->{'write\n+00025120: 4578 636c 7564 654c 6f67 277d 3b0a 0a20 ExcludeLog'};.. \n+00025130: 2020 2069 6620 2824 7763 6c20 616e 6420 if ($wcl and \n+00025140: 246d 6169 6e3a 3a65 6e64 4f66 5374 6f72 $main::endOfStor\n+00025150: 6542 6163 6b75 7029 0a20 2020 207b 0a23 eBackup). {.#\n+00025160: 096c 6f63 616c 202a 4558 434c 5f4c 4f47 .local *EXCL_LOG\n+00025170: 203d 2024 7365 6c66 2d3e 7b27 4558 434c = $self->{'EXCL\n+00025180: 5f4c 4f47 277d 3b0a 2309 636c 6f73 6528 _LOG'};.#.close(\n+00025190: 4558 434c 5f4c 4f47 2920 6f72 0a23 0920 EXCL_LOG) or.#. \n+000251a0: 2020 2024 7365 6c66 2d3e 7b27 7072 4c6f $self->{'prLo\n+000251b0: 6727 7d2d 3e70 7269 6e74 2827 2d6b 696e g'}->print('-kin\n+000251c0: 6427 203d 3e20 2745 272c 0a23 0909 0909 d' => 'E',.#....\n+000251d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+000251e0: 6361 6e6e 6f74 2063 6c6f 7365 203c 2477 cannot close <$w\n+000251f0: 636c 3e22 5d2c 0a23 0909 0909 2020 2020 cl>\"],.#.... \n+00025200: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);..\n+00025210: 6d79 2024 6578 636c 4c6f 6720 3d20 2473 my $exclLog = $s\n+00025220: 656c 662d 3e7b 2765 7863 6c4c 6f67 277d elf->{'exclLog'}\n+00025230: 3b0a 0924 6578 636c 4c6f 672d 3e77 6169 ;..$exclLog->wai\n+00025240: 7428 293b 0a09 6d79 2024 6f75 7420 3d20 t();..my $out = \n+00025250: 2465 7863 6c4c 6f67 2d3e 6765 7453 5444 $exclLog->getSTD\n+00025260: 4552 5228 293b 0a09 6966 2028 4024 6f75 ERR();..if (@$ou\n+00025270: 7429 0a09 7b0a 0920 2020 2024 7072 4c6f t)..{.. $prLo\n+00025280: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00025290: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+000252a0: 7374 7227 203d 3e20 5b22 627a 6970 3220 str' => [\"bzip2 \n+000252b0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:\"\n+000252c0: 2c0a 0909 0909 2020 2020 2040 246f 7574 ,..... @$out\n+000252d0: 5d29 3b0a 0920 2020 2065 7869 7420 313b ]);.. exit 1;\n+000252e0: 0a09 7d0a 0924 6578 636c 4c6f 672d 3e63 ..}..$exclLog->c\n+000252f0: 6c6f 7365 2829 3b0a 2020 2020 7d0a 7d0a lose();. }.}.\n+00025300: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00025310: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025320: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025330: 2323 2323 0a23 2073 7465 6c6c 7420 6665 ####.# stellt fe\n+00025340: 7374 2c20 7765 6c63 6865 7320 6461 7320 st, welches das \n+00025350: 6e65 7565 2044 6972 6563 746f 7279 2069 neue Directory i\n+00025360: 7374 2c20 6cc3 b673 6368 7420 616c 7465 st, l..scht alte\n+00025370: 0a70 6163 6b61 6765 2061 646d 696e 4469 .package adminDi\n+00025380: 7265 6374 6f72 6965 733b 0a75 7365 2043 rectories;.use C\n+00025390: 6172 703b 0a0a 7375 6220 6e65 770a 7b0a arp;..sub new.{.\n+000253a0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n+000253b0: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s\n+000253c0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m\n+000253d0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = ('\n+000253e0: 2d74 6172 6765 7444 6972 2720 2020 203d -targetDir' =\n+000253f0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00025400: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' =\n+00025410: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00025420: 2d74 6d70 6469 7227 2020 2020 2020 203d -tmpdir' =\n+00025430: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00025440: 2d63 686d 6f64 4d44 3546 696c 6527 203d -chmodMD5File' =\n+00025450: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00025460: 2d70 724c 6f67 2720 2020 2020 2020 203d -prLog' =\n+00025470: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00025480: 2d61 6b74 4461 7465 2720 2020 2020 203d -aktDate' =\n+00025490: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+000254a0: 2d64 6562 7567 4d6f 6465 2720 2020 203d -debugMode' =\n+000254b0: 3e20 300a 0909 2020 2020 293b 0a0a 2020 > 0... );.. \n+000254c0: 2020 263a 3a63 6865 636b 4f62 6a65 6374 &::checkObject\n+000254d0: 5061 7261 6d73 285c 2570 6172 616d 732c Params(\\%params,\n+000254e0: 205c 405f 2c20 2761 646d 696e 4469 7265 \\@_, 'adminDire\n+000254f0: 6374 6f72 6965 733a 3a6e 6577 272c 0a09 ctories::new',..\n+00025500: 0909 205b 272d 7461 7267 6574 4469 7227 .. ['-targetDir'\n+00025510: 2c20 272d 6368 6563 6b53 756d 4669 6c65 , '-checkSumFile\n+00025520: 272c 2027 2d63 686d 6f64 4d44 3546 696c ', '-chmodMD5Fil\n+00025530: 6527 2c0a 0909 0920 2027 2d74 6d70 6469 e',.... '-tmpdi\n+00025540: 7227 2c20 272d 7072 4c6f 6727 5d29 3b0a r', '-prLog']);.\n+00025550: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams\n+00025560: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \\%\n+00025570: 7061 7261 6d73 293b 0a0a 2320 7765 6974 params);..# weit\n+00025580: 6572 6520 5661 7269 6162 6c65 6e3a 0a23 ere Variablen:.#\n+00025590: 2027 616b 7444 6174 6527 2c20 2762 6173 'aktDate', 'bas\n+000255a0: 6544 6972 272c 2027 616b 7444 6972 272c eDir', 'aktDir',\n+000255b0: 2027 7072 6576 4469 7227 2c20 276f 6c64 'prevDir', 'old\n+000255c0: 4469 7273 270a 0a20 2020 206d 7920 2474 Dirs'.. my $t\n+000255d0: 6172 6765 7444 6972 203d 2024 7365 6c66 argetDir = $self\n+000255e0: 2d3e 7b27 7461 7267 6574 4469 7227 7d3b ->{'targetDir'};\n+000255f0: 0a20 2020 206d 7920 2463 686d 6f64 4d44 . my $chmodMD\n+00025600: 3546 696c 6520 3d20 2473 656c 662d 3e7b 5File = $self->{\n+00025610: 2763 686d 6f64 4d44 3546 696c 6527 7d3b 'chmodMD5File'};\n+00025620: 0a20 2020 206d 7920 2470 724c 6f67 203d . my $prLog =\n+00025630: 2024 7365 6c66 2d3e 7b27 7072 4c6f 6727 $self->{'prLog'\n+00025640: 7d3b 0a0a 2020 2020 6d79 2024 616b 7444 };.. my $aktD\n+00025650: 6174 6520 3d20 2473 656c 662d 3e7b 2761 ate = $self->{'a\n+00025660: 6b74 4461 7465 277d 3b0a 2020 2020 2473 ktDate'};. $s\n+00025670: 656c 662d 3e7b 2762 6173 6544 6972 277d elf->{'baseDir'}\n+00025680: 203d 2024 7461 7267 6574 4469 723b 0a20 = $targetDir;. \n+00025690: 2020 206d 7920 2461 6b74 4469 7220 3d20 my $aktDir = \n+000256a0: 2473 656c 662d 3e7b 2761 6b74 4469 7227 $self->{'aktDir'\n+000256b0: 7d20 3d20 2474 6172 6765 7444 6972 202e } = $targetDir .\n+000256c0: 2027 2f27 202e 0a09 2461 6b74 4461 7465 '/' ...$aktDate\n+000256d0: 2d3e 6765 7444 6174 6554 696d 6528 272d ->getDateTime('-\n+000256e0: 666f 726d 6174 2720 3d3e 2027 2559 2e25 format' => '%Y.%\n+000256f0: 4d2e 2544 5f25 682e 256d 2e25 7327 293b M.%D_%h.%m.%s');\n+00025700: 0a0a 2020 2020 6d79 2024 6173 6264 203d .. my $asbd =\n+00025710: 2061 6c6c 5374 6f72 6542 6163 6b75 7053 allStoreBackupS\n+00025720: 6572 6965 732d 3e6e 6577 2827 2d72 6f6f eries->new('-roo\n+00025730: 7444 6972 2720 3d3e 2024 7461 7267 6574 tDir' => $target\n+00025740: 4469 722c 0a09 0909 0909 2027 2d63 6865 Dir,...... '-che\n+00025750: 636b 5375 6d46 696c 6527 203d 3e20 2463 ckSumFile' => $c\n+00025760: 6865 636b 5375 6d46 696c 652c 0a09 0909 heckSumFile,....\n+00025770: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $\n+00025780: 7072 4c6f 6729 3b0a 2020 2020 2473 656c prLog);. $sel\n+00025790: 662d 3e7b 2770 7265 7644 6972 277d 203d f->{'prevDir'} =\n+000257a0: 2024 6173 6264 2d3e 6765 7446 696e 6973 $asbd->getFinis\n+000257b0: 6865 6450 7265 7628 293b 0a0a 2320 4e65 hedPrev();..# Ne\n+000257c0: 7565 7320 5665 727a 6569 6368 6e69 7320 ues Verzeichnis \n+000257d0: 616e 6c65 6765 6e0a 2020 2020 2470 724c anlegen. $prL\n+000257e0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000257f0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '-\n+00025800: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n+00025810: 2063 7265 6174 6520 3c24 616b 7444 6972 create <$aktDir\n+00025820: 3e2c 2065 7869 7469 6e67 225d 2c0a 0909 >, exiting\"],...\n+00025830: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n+00025840: 0975 6e6c 6573 7320 286d 6b64 6972 2024 .unless (mkdir $\n+00025850: 616b 7444 6972 293b 0a20 2020 2063 686d aktDir);. chm\n+00025860: 6f64 2030 3735 352c 2024 616b 7444 6972 od 0755, $aktDir\n+00025870: 3b0a 2020 2020 6d79 2024 6368 6d6f 6444 ;. my $chmodD\n+00025880: 6972 203d 2024 6368 6d6f 644d 4435 4669 ir = $chmodMD5Fi\n+00025890: 6c65 3b0a 2020 2020 2463 686d 6f64 4469 le;. $chmodDi\n+000258a0: 7220 7c3d 2030 3130 3020 6966 2024 6368 r |= 0100 if $ch\n+000258b0: 6d6f 6444 6972 2026 2030 3430 303b 0a20 modDir & 0400;. \n+000258c0: 2020 2024 6368 6d6f 6444 6972 207c 3d20 $chmodDir |= \n+000258d0: 3030 3130 2069 6620 2463 686d 6f64 4469 0010 if $chmodDi\n+000258e0: 7220 2620 3030 3430 3b0a 2020 2020 2463 r & 0040;. $c\n+000258f0: 686d 6f64 4469 7220 7c3d 2030 3030 3120 hmodDir |= 0001 \n+00025900: 6966 2024 6368 6d6f 6444 6972 2026 2030 if $chmodDir & 0\n+00025910: 3030 343b 0a20 2020 206d 6b64 6972 2022 004;. mkdir \"\n+00025920: 2461 6b74 4469 722f 2e73 746f 7265 4261 $aktDir/.storeBa\n+00025930: 636b 7570 4c69 6e6b 7322 2c20 2463 686d ckupLinks\", $chm\n+00025940: 6f64 4469 723b 0a0a 2020 2020 6d79 2024 odDir;.. my $\n+00025950: 6465 6275 674d 6f64 6520 3d20 2473 656c debugMode = $sel\n+00025960: 662d 3e7b 2764 6562 7567 4d6f 6465 277d f->{'debugMode'}\n+00025970: 3b0a 2020 2020 6966 2028 2464 6562 7567 ;. if ($debug\n+00025980: 4d6f 6465 203e 2030 290a 2020 2020 7b0a Mode > 0). {.\n+00025990: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+000259a0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n+000259b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+000259c0: 205b 226e 6577 2064 6972 6563 746f 7279 [\"new directory\n+000259d0: 2069 7320 3c24 616b 7444 6972 3e22 2c0a is <$aktDir>\",.\n+000259e0: 0909 0909 2024 7365 6c66 2d3e 7b27 7072 .... $self->{'pr\n+000259f0: 6576 4469 7227 7d20 3f0a 0909 0909 2022 evDir'} ?..... \"\n+00025a00: 7072 6576 696f 7573 2064 6972 6563 746f previous directo\n+00025a10: 7279 2069 7320 3c22 202e 0a09 0909 0920 ry is <\" ...... \n+00025a20: 2473 656c 662d 3e7b 2770 7265 7644 6972 $self->{'prevDir\n+00025a30: 277d 202e 2022 3e22 203a 0a09 0909 0920 '} . \">\" :..... \n+00025a40: 276e 6f20 7072 6576 696f 7573 2064 6972 'no previous dir\n+00025a50: 6563 746f 7279 2c20 6669 7273 7420 7573 ectory, first us\n+00025a60: 6527 5d29 3b0a 2020 2020 7d0a 0a20 2020 e']);. }.. \n+00025a70: 206d 7920 2840 6f6c 6444 6972 7329 203d my (@oldDirs) =\n+00025a80: 2024 6173 6264 2d3e 6765 7441 6c6c 4469 $asbd->getAllDi\n+00025a90: 7273 2829 3b0a 2020 2020 2473 656c 662d rs();. $self-\n+00025aa0: 3e7b 276f 6c64 4469 7273 277d 203d 205c >{'oldDirs'} = \\\n+00025ab0: 406f 6c64 4469 7273 3b0a 0a20 2020 2062 @oldDirs;.. b\n+00025ac0: 6c65 7373 2024 7365 6c66 2c20 2463 6c61 less $self, $cla\n+00025ad0: 7373 3b0a 7d0a 0a0a 2323 2323 2323 2323 ss;.}...########\n+00025ae0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025af0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025b00: 0a23 2073 696e 6420 736f 7274 6965 7274 .# sind sortiert\n+00025b10: 3a20 c3a4 6c74 6573 7465 7320 7a75 6572 : ..ltestes zuer\n+00025b20: 7374 0a73 7562 2067 6574 4f6c 6444 6972 st.sub getOldDir\n+00025b30: 730a 7b0a 2020 2020 6d79 2024 7365 6c66 s.{. my $self\n+00025b40: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r\n+00025b50: 6574 7572 6e20 2473 656c 662d 3e7b 276f eturn $self->{'o\n+00025b60: 6c64 4469 7273 277d 3b0a 7d0a 0a0a 2323 ldDirs'};.}...##\n+00025b70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025b80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025b90: 2323 2323 2323 0a73 7562 2067 6574 416b ######.sub getAk\n+00025ba0: 7444 6972 0a7b 0a20 2020 206d 7920 2473 tDir.{. my $s\n+00025bb0: 656c 6620 3d20 7368 6966 743b 0a20 2020 elf = shift;. \n+00025bc0: 2072 6574 7572 6e20 2473 656c 662d 3e7b return $self->{\n+00025bd0: 2761 6b74 4469 7227 7d3b 2020 2020 2020 'aktDir'}; \n+00025be0: 2023 2053 7472 696e 670a 7d0a 0a0a 2323 # String.}...##\n+00025bf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025c00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025c10: 2323 2323 2323 0a73 7562 2067 6574 416b ######.sub getAk\n+00025c20: 7449 6e66 6f46 696c 650a 7b0a 2020 2020 tInfoFile.{. \n+00025c30: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n+00025c40: 3b0a 0a20 2020 206d 7920 2461 6b74 4469 ;.. my $aktDi\n+00025c50: 7220 3d20 2473 656c 662d 3e7b 2761 6b74 r = $self->{'akt\n+00025c60: 4469 7227 7d3b 0a20 2020 2069 6620 2824 Dir'};. if ($\n+00025c70: 616b 7444 6972 290a 2020 2020 7b0a 0972 aktDir). {..r\n+00025c80: 6574 7572 6e20 2461 6b74 4469 7220 2e20 eturn $aktDir . \n+00025c90: 272f 2720 2e20 2473 656c 662d 3e7b 2763 '/' . $self->{'c\n+00025ca0: 6865 636b 5375 6d46 696c 6527 7d3b 0a20 heckSumFile'};. \n+00025cb0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n+00025cc0: 2020 7b0a 0972 6574 7572 6e20 756e 6465 {..return unde\n+00025cd0: 663b 0a20 2020 207d 0a7d 0a0a 0a23 2323 f;. }.}...###\n+00025ce0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025cf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025d00: 2323 2323 230a 7375 6220 6765 7450 7265 #####.sub getPre\n+00025d10: 7644 6972 0a7b 0a20 2020 2063 6172 7020 vDir.{. carp \n+00025d20: 2244 6570 7265 6361 7465 6421 2057 6879 \"Deprecated! Why\n+00025d30: 2073 686f 756c 6420 7468 6973 2062 6520 should this be \n+00025d40: 6e65 6363 6573 7361 7279 3f22 3b0a 2020 neccessary?\";. \n+00025d50: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi\n+00025d60: 6674 3b0a 2020 2020 7265 7475 726e 2024 ft;. return $\n+00025d70: 7365 6c66 2d3e 7b27 7072 6576 4469 7227 self->{'prevDir'\n+00025d80: 7d3b 2020 2020 2020 2023 2053 7472 696e }; # Strin\n+00025d90: 670a 7d0a 0a0a 2323 2323 2323 2323 2323 g.}...##########\n+00025da0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025db0: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+00025dc0: 7562 2067 6574 4f6c 6449 6e66 6f46 696c ub getOldInfoFil\n+00025dd0: 650a 7b0a 2020 2020 6361 7270 2022 4465 e.{. carp \"De\n+00025de0: 7072 6563 6174 6564 2120 5768 7920 7368 precated! Why sh\n+00025df0: 6f75 6c64 2074 6869 7320 6265 206e 6563 ould this be nec\n+00025e00: 6365 7373 6172 793f 223b 0a20 2020 206d cessary?\";. m\n+00025e10: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00025e20: 0a0a 2020 2020 6d79 2024 7072 6576 4469 .. my $prevDi\n+00025e30: 7220 3d20 2473 656c 662d 3e7b 2770 7265 r = $self->{'pre\n+00025e40: 7644 6972 277d 3b0a 2020 2020 6966 2028 vDir'};. if (\n+00025e50: 2470 7265 7644 6972 290a 2020 2020 7b0a $prevDir). {.\n+00025e60: 0972 6574 7572 6e20 2470 7265 7644 6972 .return $prevDir\n+00025e70: 202e 2027 2f27 202e 2024 7365 6c66 2d3e . '/' . $self->\n+00025e80: 7b27 6368 6563 6b53 756d 4669 6c65 277d {'checkSumFile'}\n+00025e90: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00025ea0: 0a20 2020 207b 0a09 7265 7475 726e 2075 . {..return u\n+00025eb0: 6e64 6566 3b0a 2020 2020 7d0a 7d0a 0a0a ndef;. }.}...\n+00025ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025ee0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00025ef0: 2323 0a23 2053 706c 6974 7465 7420 6469 ##.# Splittet di\n+00025f00: 6520 5061 7261 6d65 7465 726c 6973 7465 e Parameterliste\n+00025f10: 2028 6661 6c6c 7320 7a75 206c 616e 6729 (falls zu lang)\n+00025f20: 2061 7566 0a23 2053 7465 6c6c 7420 6e61 auf.# Stellt na\n+00025f30: 6368 2061 75c3 9f65 6e20 6569 6e20 496e ch au..en ein In\n+00025f40: 7465 7266 6163 6520 616e 616c 6f67 2066 terface analog f\n+00025f50: 6f72 6b50 726f 6320 7a75 7220 5665 7266 orkProc zur Verf\n+00025f60: c3bc 6775 6e67 0a23 2028 6cc3 a475 6674 ..gung.# (l..uft\n+00025f70: 2069 6d20 4869 6e74 6572 6772 756e 6420 im Hintergrund \n+00025f80: 616c 7320 666f 726b 2f65 7865 6329 0a23 als fork/exec).#\n+00025f90: 2041 7262 6569 7465 7420 2a61 6c6c 652a Arbeitet *alle*\n+00025fa0: 2061 622c 2065 7273 7420 6461 6e6e 2077 ab, erst dann w\n+00025fb0: 6972 6420 4572 6765 626e 6973 2067 656c ird Ergebnis gel\n+00025fc0: 6965 6665 7274 0a70 6163 6b61 6765 2066 iefert.package f\n+00025fd0: 6f72 6b4d 4435 3b0a 0a73 7562 206e 6577 orkMD5;..sub new\n+00025fe0: 0a7b 0a20 2020 206d 7920 2463 6c61 7373 .{. my $class\n+00025ff0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n+00026000: 2024 7365 6c66 203d 207b 7d3b 0a0a 2020 $self = {};.. \n+00026010: 2020 6d79 2028 2570 6172 616d 7329 203d my (%params) =\n+00026020: 2028 272d 7061 7261 6d27 2020 2020 2020 ('-param' \n+00026030: 3d3e 205b 5d2c 0a09 0920 2020 2027 2d70 => [],... '-p\n+00026040: 724c 6f67 2720 2020 2020 203d 3e20 756e rLog' => un\n+00026050: 6465 662c 0a09 0920 2020 2027 2d74 6d70 def,... '-tmp\n+00026060: 6469 7227 2020 2020 203d 3e20 756e 6465 dir' => unde\n+00026070: 662c 0a09 0920 2020 2027 2d72 6573 6574 f,... '-reset\n+00026080: 4174 696d 6527 203d 3e20 756e 6465 660a Atime' => undef.\n+00026090: 0909 2020 2020 293b 0a0a 2020 2020 263a .. );.. &:\n+000260a0: 3a63 6865 636b 4f62 6a65 6374 5061 7261 :checkObjectPara\n+000260b0: 6d73 285c 2570 6172 616d 732c 205c 405f ms(\\%params, \\@_\n+000260c0: 2c20 2766 6f72 6b4d 4435 3a3a 6e65 7727 , 'forkMD5::new'\n+000260d0: 2c0a 0909 0920 5b27 2d70 724c 6f67 272c ,.... ['-prLog',\n+000260e0: 2027 2d74 6d70 6469 7227 5d29 3b0a 2020 '-tmpdir']);. \n+000260f0: 2020 263a 3a73 6574 5061 7261 6d73 4469 &::setParamsDi\n+00026100: 7265 6374 2824 7365 6c66 2c20 5c25 7061 rect($self, \\%pa\n+00026110: 7261 6d73 293b 0a0a 0a20 2020 2028 407b rams);... (@{\n+00026120: 2473 656c 662d 3e7b 2772 6573 756c 7453 $self->{'resultS\n+00026130: 5444 4552 5227 7d7d 2920 3d20 2829 3b0a TDERR'}}) = ();.\n+00026140: 2020 2020 2840 7b24 7365 6c66 2d3e 7b27 (@{$self->{'\n+00026150: 7265 7375 6c74 5354 444f 5554 277d 7d29 resultSTDOUT'}})\n+00026160: 203d 2028 293b 0a0a 2020 2020 626c 6573 = ();.. bles\n+00026170: 7320 2473 656c 662c 2024 636c 6173 733b s $self, $class;\n+00026180: 0a0a 2020 2020 2320 6361 6368 6520 6174 .. # cache at\n+00026190: 696d 6520 616e 6420 6d74 696d 6520 696e ime and mtime in\n+000261a0: 206f 626a 6563 740a 2020 2020 6d79 2028 object. my (\n+000261b0: 4061 7469 6d65 2c20 406d 7469 6d65 2c20 @atime, @mtime, \n+000261c0: 2470 293b 0a20 2020 2066 6f72 6561 6368 $p);. foreach\n+000261d0: 2024 7020 2840 7b24 7365 6c66 2d3e 7b27 $p (@{$self->{'\n+000261e0: 7061 7261 6d27 7d7d 290a 2020 2020 7b0a param'}}). {.\n+000261f0: 096d 7920 2824 6174 696d 652c 2024 6d74 .my ($atime, $mt\n+00026200: 696d 6529 203d 2028 7374 6174 2824 7029 ime) = (stat($p)\n+00026210: 295b 382c 2039 5d3b 0a09 7075 7368 2040 )[8, 9];..push @\n+00026220: 6174 696d 652c 2024 6174 696d 653b 0a09 atime, $atime;..\n+00026230: 7075 7368 2040 6d74 696d 652c 2024 6d74 push @mtime, $mt\n+00026240: 696d 653b 0a20 2020 207d 0a0a 2020 2020 ime;. }.. \n+00026250: 2320 7374 6f72 6520 696e 666f 726d 6174 # store informat\n+00026260: 696f 6e20 746f 2072 6573 746f 7265 2061 ion to restore a\n+00026270: 7469 6d65 2028 616e 6420 6d74 696d 6529 time (and mtime)\n+00026280: 0a20 2020 2040 7b24 7365 6c66 2d3e 7b27 . @{$self->{'\n+00026290: 616c 6c50 6172 616d 277d 7d20 3d20 407b allParam'}} = @{\n+000262a0: 2473 656c 662d 3e7b 2770 6172 616d 277d $self->{'param'}\n+000262b0: 7d3b 0a20 2020 2024 7365 6c66 2d3e 7b27 };. $self->{'\n+000262c0: 6174 696d 6527 7d20 3d20 5c40 6174 696d atime'} = \\@atim\n+000262d0: 653b 0a20 2020 2024 7365 6c66 2d3e 7b27 e;. $self->{'\n+000262e0: 6d74 696d 6527 7d20 3d20 5c40 6d74 696d mtime'} = \\@mtim\n+000262f0: 653b 0a0a 2020 2020 2473 656c 662d 3e5f e;.. $self->_\n+00026300: 7374 6172 744a 6f62 2829 3b0a 0a20 2020 startJob();.. \n+00026310: 2072 6574 7572 6e20 2473 656c 663b 0a7d return $self;.}\n+00026320: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+00026330: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026340: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+00026350: 5f73 7461 7274 4a6f 620a 7b0a 2020 2020 _startJob.{. \n+00026360: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n+00026370: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n+00026380: 666f 726b 277d 203d 2075 6e64 6566 3b0a fork'} = undef;.\n+00026390: 0a20 2020 206d 7920 2470 724c 6f67 203d . my $prLog =\n+000263a0: 2024 7365 6c66 2d3e 7b27 7072 4c6f 6727 $self->{'prLog'\n+000263b0: 7d3b 0a0a 2020 2020 646f 0a20 2020 207b };.. do. {\n+000263c0: 0a09 6d79 2024 6c20 3d20 303b 2020 2020 ..my $l = 0; \n+000263d0: 2020 2320 616b 6b75 6d75 6c69 6572 7465 # akkumulierte\n+000263e0: 204c c3a4 6e67 6520 6465 7220 5061 7261 L..nge der Para\n+000263f0: 6d74 6572 2069 6e20 4279 7465 0a09 6d79 mter in Byte..my\n+00026400: 2024 693b 0a09 6d79 2024 7061 7261 6d20 $i;..my $param \n+00026410: 3d20 2473 656c 662d 3e7b 2770 6172 616d = $self->{'param\n+00026420: 277d 3b20 2020 2023 2050 6f69 6e74 6572 '}; # Pointer\n+00026430: 2061 7566 2050 6172 616d 6574 6572 2056 auf Parameter V\n+00026440: 656b 746f 720a 0a09 666f 7220 2824 6920 ektor...for ($i \n+00026450: 3d20 3020 3b20 2469 203c 2040 2470 6172 = 0 ; $i < @$par\n+00026460: 616d 203b 2024 692b 2b29 0a09 7b0a 0920 am ; $i++)..{.. \n+00026470: 2020 206d 7920 246c 3120 3d20 3120 2b20 my $l1 = 1 + \n+00026480: 6c65 6e67 7468 2024 2470 6172 616d 5b24 length $$param[$\n+00026490: 695d 3b20 2020 2023 2031 2042 7974 6520 i]; # 1 Byte \n+000264a0: 66c3 bc72 2027 5c30 2720 696e 2043 0a09 f..r '\\0' in C..\n+000264b0: 2020 2020 6966 2028 246c 202b 2024 6c31 if ($l + $l1\n+000264c0: 203e 2024 6d61 696e 3a3a 6578 6563 5061 > $main::execPa\n+000264d0: 7261 6d4c 656e 6774 6829 0a09 2020 2020 ramLength).. \n+000264e0: 7b0a 0909 6c61 7374 3b0a 0920 2020 207d {...last;.. }\n+000264f0: 0a09 2020 2020 246c 202b 3d20 246c 313b .. $l += $l1;\n+00026500: 0a09 7d0a 0a09 6966 2028 2469 203d 3d20 ..}...if ($i == \n+00026510: 3029 2020 2020 2020 2320 6465 7220 6572 0) # der er\n+00026520: 7374 6520 7061 c39f 7420 c3bc 6265 7268 ste pa..t ..berh\n+00026530: 6175 7074 206e 6963 6874 2072 6569 6e0a aupt nicht rein.\n+00026540: 097b 2020 2020 2020 2020 2020 2020 2020 .{ \n+00026550: 2020 2023 2028 6973 7420 616c 6c65 696e # (ist allein\n+00026560: 6520 7363 686f 6e20 7a75 206c 616e 6729 e schon zu lang)\n+00026570: 0a09 2020 2020 6d79 2024 616b 7450 6172 .. my $aktPar\n+00026580: 203d 2073 6869 6674 2040 7b24 7365 6c66 = shift @{$self\n+00026590: 2d3e 7b27 7061 7261 6d27 7d7d 3b20 2020 ->{'param'}}; \n+000265a0: 2320 6572 7465 6e20 2277 6567 7765 7266 # erten \"wegwerf\n+000265b0: 656e 220a 0920 2020 2024 7072 4c6f 672d en\".. $prLog-\n+000265c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+000265d0: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n+000265e0: 7227 203d 3e20 5b22 7061 7261 6d65 7465 r' => [\"paramete\n+000265f0: 7220 746f 206c 6f6e 673a 2063 616e 6e6f r to long: canno\n+00026600: 7420 6578 6563 2022 202e 0a09 0909 0920 t exec \" ...... \n+00026610: 2020 2020 226d 6435 7375 6d20 2461 6b74 \"md5sum $akt\n+00026620: 5061 7222 5d29 3b0a 0920 2020 2072 6574 Par\"]);.. ret\n+00026630: 7572 6e20 6966 2040 7b24 7365 6c66 2d3e urn if @{$self->\n+00026640: 7b27 7061 7261 6d27 7d7d 203d 3d20 303b {'param'}} == 0;\n+00026650: 0a09 7d0a 0965 6c73 6520 2020 2020 2020 ..}..else \n+00026660: 2020 2320 6f6b 2c20 6469 6520 6dc3 b667 # ok, die m..g\n+00026670: 6c69 6368 656e 2061 7573 2064 656d 2067 lichen aus dem g\n+00026680: 726f c39f 656e 2056 656b 746f 7220 7261 ro..en Vektor ra\n+00026690: 7573 686f 6c65 6e0a 097b 0a09 2020 2020 usholen..{.. \n+000266a0: 6d79 2028 4061 6b74 5061 7229 203d 2073 my (@aktPar) = s\n+000266b0: 706c 6963 6528 407b 2473 656c 662d 3e7b plice(@{$self->{\n+000266c0: 2770 6172 616d 277d 7d2c 2030 2c20 2469 'param'}}, 0, $i\n+000266d0: 293b 0a09 2020 2020 246d 6169 6e3a 3a73 );.. $main::s\n+000266e0: 7461 742d 3e69 6e63 725f 6e6f 466f 726b tat->incr_noFork\n+000266f0: 734d 4435 2829 3b0a 0920 2020 2024 6d61 sMD5();.. $ma\n+00026700: 696e 3a3a 7374 6174 2d3e 6164 645f 6e6f in::stat->add_no\n+00026710: 4d44 3565 6446 696c 6573 2873 6361 6c61 MD5edFiles(scala\n+00026720: 7220 4061 6b74 5061 7229 3b0a 0920 2020 r @aktPar);.. \n+00026730: 2024 7365 6c66 2d3e 7b27 666f 726b 277d $self->{'fork'}\n+00026740: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new\n+00026750: 2827 2d65 7865 6327 203d 3e20 276d 6435 ('-exec' => 'md5\n+00026760: 7375 6d27 2c0a 0909 0909 0920 2020 2027 sum',...... '\n+00026770: 2d70 6172 616d 2720 3d3e 205b 4061 6b74 -param' => [@akt\n+00026780: 5061 725d 2c0a 0909 0909 0920 2020 2027 Par],...... '\n+00026790: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n+000267a0: 672c 0a09 0909 0909 2020 2020 272d 776f g,...... '-wo\n+000267b0: 726b 696e 6744 6972 2720 3d3e 2027 2e27 rkingDir' => '.'\n+000267c0: 2c0a 0909 0909 0920 2020 2027 2d6f 7574 ,...... '-out\n+000267d0: 5261 6e64 6f6d 2720 3d3e 0a09 0909 0909 Random' =>......\n+000267e0: 2020 2020 2473 656c 662d 3e7b 2774 6d70 $self->{'tmp\n+000267f0: 6469 7227 7d20 2e20 272f 666f 726b 2d6d dir'} . '/fork-m\n+00026800: 6435 2d27 293b 0a09 2020 2020 2320 416e d5-');.. # An\n+00026810: 7a61 686c 2042 7974 6573 2062 6572 6563 zahl Bytes berec\n+00026820: 686e 656e 0a09 2020 2020 6d79 2024 7375 hnen.. my $su\n+00026830: 6d20 3d20 303b 0a09 2020 2020 6d79 2024 m = 0;.. my $\n+00026840: 703b 0a09 2020 2020 666f 7265 6163 6820 p;.. foreach \n+00026850: 2470 2028 4061 6b74 5061 7229 0a09 2020 $p (@aktPar).. \n+00026860: 2020 7b0a 0909 2473 756d 202b 3d20 2873 {...$sum += (s\n+00026870: 7461 7428 2470 2929 5b37 5d3b 0a09 2020 tat($p))[7];.. \n+00026880: 2020 7d0a 0920 2020 2024 6d61 696e 3a3a }.. $main::\n+00026890: 7374 6174 2d3e 6164 6453 756d 4d44 3553 stat->addSumMD5S\n+000268a0: 756d 2824 7375 6d29 0a09 0969 6620 2824 um($sum)...if ($\n+000268b0: 7375 6d29 3b0a 0920 2020 2072 6574 7572 sum);.. retur\n+000268c0: 6e3b 0a09 7d0a 0a20 2020 207d 2077 6869 n;..}.. } whi\n+000268d0: 6c65 2028 2473 656c 662d 3e7b 2766 6f72 le ($self->{'for\n+000268e0: 6b27 7d20 3d3d 2075 6e64 6566 293b 0a7d k'} == undef);.}\n+000268f0: 0a0a 0a0a 2323 2323 2323 2323 2323 2323 ....############\n+00026900: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026910: 2323 2323 2323 2323 2323 2323 0a23 2072 ############.# r\n+00026920: 6574 7572 6e73 2031 2069 6620 7072 6f63 eturns 1 if proc\n+00026930: 6573 7320 7374 696c 6c20 7275 6e6e 696e ess still runnin\n+00026940: 670a 2320 7265 7475 726e 7320 3020 6966 g.# returns 0 if\n+00026950: 2070 726f 6365 7373 2069 7320 6e6f 7420 process is not \n+00026960: 7275 6e6e 696e 670a 7375 6220 7072 6f63 running.sub proc\n+00026970: 6573 7352 756e 730a 7b0a 2020 2020 6d79 essRuns.{. my\n+00026980: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+00026990: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self->\n+000269a0: 7b27 666f 726b 277d 2920 2020 2023 2050 {'fork'}) # P\n+000269b0: 726f 7a65 7373 206e 6f63 6820 6e69 6368 rozess noch nich\n+000269c0: 7420 6175 7367 6577 6572 7465 740a 2020 t ausgewertet. \n+000269d0: 2020 7b0a 0969 6620 2824 7365 6c66 2d3e {..if ($self->\n+000269e0: 7b27 666f 726b 277d 2d3e 7072 6f63 6573 {'fork'}->proces\n+000269f0: 7352 756e 7328 2929 2020 2320 4a6f 6220 sRuns()) # Job \n+00026a00: 6cc3 a475 6674 206e 6f63 680a 097b 0a09 l..uft noch..{..\n+00026a10: 2020 2020 7265 7475 726e 2031 3b0a 097d return 1;..}\n+00026a20: 0a09 656c 7365 2020 2020 2020 2020 2020 ..else \n+00026a30: 2020 2020 2020 2020 2020 2320 4a6f 6220 # Job \n+00026a40: 6973 7420 6665 7274 6967 0a09 7b0a 0920 ist fertig..{.. \n+00026a50: 2020 2070 7573 6820 407b 2473 656c 662d push @{$self-\n+00026a60: 3e7b 2772 6573 756c 7453 5444 4552 5227 >{'resultSTDERR'\n+00026a70: 7d7d 2c20 407b 2473 656c 662d 3e7b 2766 }}, @{$self->{'f\n+00026a80: 6f72 6b27 7d2d 3e67 6574 5354 4445 5252 ork'}->getSTDERR\n+00026a90: 2829 7d3b 0a09 2020 2020 7075 7368 2040 ()};.. push @\n+00026aa0: 7b24 7365 6c66 2d3e 7b27 7265 7375 6c74 {$self->{'result\n+00026ab0: 5354 444f 5554 277d 7d2c 2040 7b24 7365 STDOUT'}}, @{$se\n+00026ac0: 6c66 2d3e 7b27 666f 726b 277d 2d3e 6765 lf->{'fork'}->ge\n+00026ad0: 7453 5444 4f55 5428 297d 3b0a 0a09 2020 tSTDOUT()};... \n+00026ae0: 2020 6966 2028 407b 2473 656c 662d 3e7b if (@{$self->{\n+00026af0: 2770 6172 616d 277d 7d20 3e20 3029 2020 'param'}} > 0) \n+00026b00: 2020 2023 206e 6f63 6820 7761 7320 c3bc # noch was ..\n+00026b10: 6272 6967 0a09 2020 2020 7b0a 0909 2473 brig.. {...$s\n+00026b20: 656c 662d 3e5f 7374 6172 744a 6f62 2829 elf->_startJob()\n+00026b30: 3b0a 0909 7265 7475 726e 2031 3b0a 0920 ;...return 1;.. \n+00026b40: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n+00026b50: 2020 2020 7b0a 0909 7265 7475 726e 2030 {...return 0\n+00026b60: 3b20 2020 2020 2020 2020 2020 2020 2020 ; \n+00026b70: 2020 2020 2320 6665 7274 6967 210a 0920 # fertig!.. \n+00026b80: 2020 207d 0a09 7d0a 2020 2020 7d0a 2020 }..}. }. \n+00026b90: 2020 656c 7365 0a20 2020 207b 0a09 7265 else. {..re\n+00026ba0: 7475 726e 2030 3b0a 2020 2020 7d0a 7d0a turn 0;. }.}.\n+00026bb0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00026bc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026bd0: 2323 2323 2323 2323 2323 0a73 7562 2067 ##########.sub g\n+00026be0: 6574 5354 4445 5252 0a7b 0a20 2020 206d etSTDERR.{. m\n+00026bf0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00026c00: 0a0a 2020 2020 7265 7475 726e 2024 7365 .. return $se\n+00026c10: 6c66 2d3e 7b27 7265 7375 6c74 5354 4445 lf->{'resultSTDE\n+00026c20: 5252 277d 3b0a 7d0a 0a0a 2323 2323 2323 RR'};.}...######\n+00026c30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026c50: 2323 0a73 7562 2067 6574 5354 444f 5554 ##.sub getSTDOUT\n+00026c60: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n+00026c70: 3d20 7368 6966 743b 0a0a 2020 2020 7265 = shift;.. re\n+00026c80: 7475 726e 2024 7365 6c66 2d3e 7b27 7265 turn $self->{'re\n+00026c90: 7375 6c74 5354 444f 5554 277d 3b0a 7d0a sultSTDOUT'};.}.\n+00026ca0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00026cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026cc0: 2323 2323 2323 2323 2323 0a73 7562 2044 ##########.sub D\n+00026cd0: 4553 5452 4f59 0a7b 0a20 2020 206d 7920 ESTROY.{. my \n+00026ce0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n+00026cf0: 2020 2020 6d79 2024 6174 696d 6520 3d20 my $atime = \n+00026d00: 2473 656c 662d 3e7b 2761 7469 6d65 277d $self->{'atime'}\n+00026d10: 3b0a 2020 2020 6d79 2024 6d74 696d 6520 ;. my $mtime \n+00026d20: 3d20 2473 656c 662d 3e7b 276d 7469 6d65 = $self->{'mtime\n+00026d30: 277d 3b0a 2020 2020 6d79 2024 7061 7261 '};. my $para\n+00026d40: 6d20 3d20 2473 656c 662d 3e7b 2761 6c6c m = $self->{'all\n+00026d50: 5061 7261 6d27 7d3b 0a20 2020 206d 7920 Param'};. my \n+00026d60: 2469 3b0a 2020 2020 666f 7220 2824 6920 $i;. for ($i \n+00026d70: 3d20 3020 3b20 2469 203c 2040 2470 6172 = 0 ; $i < @$par\n+00026d80: 616d 203b 2024 692b 2b29 0a20 2020 207b am ; $i++). {\n+00026d90: 0a09 7574 696d 6520 2424 6174 696d 655b ..utime $$atime[\n+00026da0: 2469 5d2c 2024 246d 7469 6d65 5b24 695d $i], $$mtime[$i]\n+00026db0: 2c20 2424 7061 7261 6d5b 2469 5d0a 0920 , $$param[$i].. \n+00026dc0: 2020 2069 6620 2473 656c 662d 3e7b 2772 if $self->{'r\n+00026dd0: 6573 6574 4174 696d 6527 7d3b 0a20 2020 esetAtime'};. \n+00026de0: 207d 0a7d 0a0a 2323 2323 2323 2323 2323 }.}..##########\n+00026df0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026e00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00026e10: 2323 2323 2323 2323 0a70 6163 6b61 6765 ########.package\n+00026e20: 2053 6368 6564 756c 6572 3b0a 0a75 7365 Scheduler;..use\n+00026e30: 2049 4f3a 3a46 696c 653b 0a75 7365 2073 IO::File;.use s\n+00026e40: 7472 6963 743b 0a75 7365 2077 6172 6e69 trict;.use warni\n+00026e50: 6e67 733b 0a0a 7375 6220 6e65 770a 7b0a ngs;..sub new.{.\n+00026e60: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n+00026e70: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $\n+00026e80: 7365 6c66 203d 207b 7d3b 0a0a 2020 2020 self = {};.. \n+00026e90: 6d79 2028 2570 6172 616d 7329 203d 2028 my (%params) = (\n+00026ea0: 272d 616b 7446 696c 656e 616d 6527 2020 '-aktFilename' \n+00026eb0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+00026ec0: 2020 2020 272d 6f6c 6446 696c 656e 616d '-oldFilenam\n+00026ed0: 6527 2020 2020 2020 3d3e 2075 6e64 6566 e' => undef\n+00026ee0: 2c0a 0909 2020 2020 272d 666f 6c6c 6f77 ,... '-follow\n+00026ef0: 4c69 6e6b 7327 2020 2020 2020 3d3e 2075 Links' => u\n+00026f00: 6e64 6566 2c0a 0909 2020 2020 272d 7072 ndef,... '-pr\n+00026f10: 6576 4261 636b 7570 4f77 6e53 6572 6965 evBackupOwnSerie\n+00026f20: 7327 203d 3e20 756e 6465 662c 0a09 0920 s' => undef,... \n+00026f30: 2020 2027 2d72 6561 6444 6972 416e 6443 '-readDirAndC\n+00026f40: 6865 636b 2720 203d 3e20 756e 6465 662c heck' => undef,\n+00026f50: 0a09 0920 2020 2027 2d73 6574 5265 7365 ... '-setRese\n+00026f60: 7444 6972 5469 6d65 7327 203d 3e20 756e tDirTimes' => un\n+00026f70: 6465 662c 0a09 0920 2020 2027 2d70 6172 def,... '-par\n+00026f80: 466f 726b 436f 7079 2720 2020 2020 203d ForkCopy' =\n+00026f90: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00026fa0: 2d66 6966 6f43 6f70 7927 2020 2020 2020 -fifoCopy' \n+00026fb0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+00026fc0: 2020 2027 2d70 6172 466f 726b 436f 6d70 '-parForkComp\n+00026fd0: 7227 2020 2020 203d 3e20 756e 6465 662c r' => undef,\n+00026fe0: 0a09 0920 2020 2027 2d6e 6f43 6f6d 7072 ... '-noCompr\n+00026ff0: 6573 7327 2020 2020 2020 203d 3e20 756e ess' => un\n+00027000: 6465 662c 0a09 0920 2020 2027 2d66 6966 def,... '-fif\n+00027010: 6f43 6f6d 7072 2720 2020 2020 2020 203d oCompr' =\n+00027020: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+00027030: 2d62 6c6f 636b 4368 6563 6b53 756d 4669 -blockCheckSumFi\n+00027040: 6c65 273d 3e20 756e 6465 662c 0a09 0920 le'=> undef,... \n+00027050: 2020 2027 2d70 6172 466f 726b 426c 6f63 '-parForkBloc\n+00027060: 6b27 2020 2020 203d 3e20 756e 6465 662c k' => undef,\n+00027070: 0a09 0920 2020 2027 2d66 6966 6f42 6c6f ... '-fifoBlo\n+00027080: 636b 2720 2020 2020 2020 203d 3e20 756e ck' => un\n+00027090: 6465 662c 0a09 0920 2020 2027 2d63 6f6d def,... '-com\n+000270a0: 7072 6573 7327 2020 2020 2020 2020 203d press' =\n+000270b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n+000270c0: 2d6c 6174 654c 696e 6b73 2720 2020 2020 -lateLinks' \n+000270d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+000270e0: 2020 2027 2d6c 6174 6543 6f6d 7072 6573 '-lateCompres\n+000270f0: 7327 2020 2020 203d 3e20 756e 6465 662c s' => undef,\n+00027100: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00027110: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' \n+00027120: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde\n+00027130: 662c 0a09 0920 2020 2027 2d6c 696e 6b53 f,... '-linkS\n+00027140: 796d 6c69 6e6b 7327 2020 2020 203d 3e20 ymlinks' => \n+00027150: 756e 6465 662c 0a09 0920 2020 2027 2d73 undef,... '-s\n+00027160: 7570 7072 6573 7357 6172 6e69 6e67 2720 uppressWarning' \n+00027170: 203d 3e20 756e 6465 662c 0a20 2020 2020 => undef,. \n+00027180: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+00027190: 2d70 7265 7365 7276 6550 6572 6d73 2720 -preservePerms' \n+000271a0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+000271b0: 2020 2027 2d63 6f6d 7072 5275 6c65 2720 '-comprRule' \n+000271c0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+000271d0: 2020 2020 272d 706f 7374 6669 7827 2020 '-postfix' \n+000271e0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n+000271f0: 2c0a 0909 2020 2020 272d 7461 7267 6574 ,... '-target\n+00027200: 4469 7227 2020 2020 2020 2020 3d3e 2075 Dir' => u\n+00027210: 6e64 6566 2c0a 0909 2020 2020 272d 616b ndef,... '-ak\n+00027220: 7449 6e66 6f46 696c 6527 2020 2020 2020 tInfoFile' \n+00027230: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n+00027240: 272d 7265 7365 7441 7469 6d65 2720 2020 '-resetAtime' \n+00027250: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n+00027260: 2020 2020 272d 746d 7064 6972 2720 2020 '-tmpdir' \n+00027270: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n+00027280: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog'\n+00027290: 2020 2020 2020 2020 2020 2020 3d3e 2075 => u\n+000272a0: 6e64 6566 2c0a 0909 2020 2020 272d 6465 ndef,... '-de\n+000272b0: 6275 674d 6f64 6527 2020 2020 2020 2020 bugMode' \n+000272c0: 3d3e 2030 0a09 0920 2020 2029 3b0a 0a20 => 0... );.. \n+000272d0: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec\n+000272e0: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\\%params\n+000272f0: 2c20 5c40 5f2c 2027 5363 6865 6475 6c65 , \\@_, 'Schedule\n+00027300: 723a 3a6e 6577 272c 0a09 0909 205b 272d r::new',.... ['-\n+00027310: 616b 7446 696c 656e 616d 6527 2c20 272d aktFilename', '-\n+00027320: 6f6c 6446 696c 656e 616d 6527 2c20 272d oldFilename', '-\n+00027330: 666f 6c6c 6f77 4c69 6e6b 7327 2c0a 0909 followLinks',...\n+00027340: 0920 2027 2d70 7265 7642 6163 6b75 704f . '-prevBackupO\n+00027350: 776e 5365 7269 6573 272c 2027 2d72 6561 wnSeries', '-rea\n+00027360: 6444 6972 416e 6443 6865 636b 272c 0a09 dDirAndCheck',..\n+00027370: 0909 2020 272d 7365 7452 6573 6574 4469 .. '-setResetDi\n+00027380: 7254 696d 6573 272c 2027 2d70 6172 466f rTimes', '-parFo\n+00027390: 726b 436f 7079 272c 2027 2d66 6966 6f43 rkCopy', '-fifoC\n+000273a0: 6f70 7927 2c0a 0909 0920 2027 2d70 6172 opy',.... '-par\n+000273b0: 466f 726b 436f 6d70 7227 2c20 272d 6669 ForkCompr', '-fi\n+000273c0: 666f 436f 6d70 7227 2c20 272d 7375 7070 foCompr', '-supp\n+000273d0: 7265 7373 5761 726e 696e 6727 2c0a 0909 ressWarning',...\n+000273e0: 0920 2027 2d63 6f6d 7072 5275 6c65 272c . '-comprRule',\n+000273f0: 2027 2d63 6f6d 7072 6573 7327 2c20 272d '-compress', '-\n+00027400: 706f 7374 6669 7827 2c0a 0909 0920 2027 postfix',.... '\n+00027410: 2d63 6f6d 7072 6573 7327 2c20 272d 706f -compress', '-po\n+00027420: 7374 6669 7827 2c0a 0909 0920 2027 2d74 stfix',.... '-t\n+00027430: 6172 6765 7444 6972 272c 2027 2d61 6b74 argetDir', '-akt\n+00027440: 496e 666f 4669 6c65 272c 2027 2d72 6573 InfoFile', '-res\n+00027450: 6574 4174 696d 6527 2c0a 0909 0920 2027 etAtime',.... '\n+00027460: 2d70 724c 6f67 272c 2027 2d6c 6174 654c -prLog', '-lateL\n+00027470: 696e 6b73 272c 2027 2d6c 6174 6543 6f6d inks', '-lateCom\n+00027480: 7072 6573 7327 5d29 3b0a 2020 2020 263a press']);. &:\n+00027490: 3a73 6574 5061 7261 6d73 4469 7265 6374 :setParamsDirect\n+000274a0: 2824 7365 6c66 2c20 5c25 7061 7261 6d73 ($self, \\%params\n+000274b0: 293b 0a0a 2020 2020 6d79 2028 2463 6f6d );.. my ($com\n+000274c0: 7072 6573 7343 6f6d 6d61 6e64 2c20 406f pressCommand, @o\n+000274d0: 7074 696f 6e73 2920 3d20 407b 2470 6172 ptions) = @{$par\n+000274e0: 616d 737b 272d 636f 6d70 7265 7373 277d ams{'-compress'}\n+000274f0: 7d3b 0a20 2020 2024 7365 6c66 2d3e 7b27 };. $self->{'\n+00027500: 636f 6d70 7265 7373 436f 6d6d 616e 6427 compressCommand'\n+00027510: 7d20 3d20 2463 6f6d 7072 6573 7343 6f6d } = $compressCom\n+00027520: 6d61 6e64 3b0a 2020 2020 2473 656c 662d mand;. $self-\n+00027530: 3e7b 2763 6f6d 7072 6573 734f 7074 696f >{'compressOptio\n+00027540: 6e73 277d 203d 205c 406f 7074 696f 6e73 ns'} = \\@options\n+00027550: 3b0a 0a20 2020 2062 6c65 7373 2024 7365 ;.. bless $se\n+00027560: 6c66 2c20 2463 6c61 7373 3b0a 7d0a 0a0a lf, $class;.}...\n+00027570: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00027580: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00027590: 2323 2323 2323 2323 0a23 2049 6465 653a ########.# Idee:\n+000275a0: 0a23 2020 2020 c39c 6265 7277 6163 6875 .# ..berwachu\n+000275b0: 6e67 2064 6572 2066 6f72 6b73 2069 6e20 ng der forks in \n+000275c0: 7061 7246 6f72 6b43 6f70 7920 756e 6420 parForkCopy und \n+000275d0: 7061 7246 6f72 6b43 6f6d 7072 0a23 2020 parForkCompr.# \n+000275e0: 2020 5765 6e6e 2064 6965 7365 206d 6974 Wenn diese mit\n+000275f0: 206e 6575 656e 2044 6174 656e 2067 6566 neuen Daten gef\n+00027600: c3bc 7474 6572 7420 7775 7264 656e 2c20 ..ttert wurden, \n+00027610: 4175 6666 c3bc 6c6c 656e 0a23 2020 2020 Auff..llen.# \n+00027620: 766f 6e20 6669 666f 436f 7079 2075 6e64 von fifoCopy und\n+00027630: 2066 6966 6f43 6f6d 7072 20c3 bc62 6572 fifoCompr ..ber\n+00027640: 2072 6561 6444 6972 416e 6443 6865 636b readDirAndCheck\n+00027650: 0a73 7562 206e 6f72 6d61 6c4f 7065 7261 .sub normalOpera\n+00027660: 7469 6f6e 0a7b 0a20 2020 206d 7920 2473 tion.{. my $s\n+00027670: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. \n+00027680: 2020 6d79 2024 616b 7446 696c 656e 616d my $aktFilenam\n+00027690: 6520 3d20 2473 656c 662d 3e7b 2761 6b74 e = $self->{'akt\n+000276a0: 4669 6c65 6e61 6d65 277d 3b0a 2020 2020 Filename'};. \n+000276b0: 6d79 2024 6f6c 6446 696c 656e 616d 6520 my $oldFilename \n+000276c0: 3d20 2473 656c 662d 3e7b 276f 6c64 4669 = $self->{'oldFi\n+000276d0: 6c65 6e61 6d65 277d 3b0a 2020 2020 6d79 lename'};. my\n+000276e0: 2024 666f 6c6c 6f77 4c69 6e6b 7320 3d20 $followLinks = \n+000276f0: 2473 656c 662d 3e7b 2766 6f6c 6c6f 774c $self->{'followL\n+00027700: 696e 6b73 277d 3b0a 2020 2020 6d79 2024 inks'};. my $\n+00027710: 7072 6576 4261 636b 7570 4f77 6e53 6572 prevBackupOwnSer\n+00027720: 6965 7320 3d20 2473 656c 662d 3e7b 2770 ies = $self->{'p\n+00027730: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri\n+00027740: 6573 277d 3b0a 2020 2020 6d79 2024 7265 es'};. my $re\n+00027750: 6164 4469 7241 6e64 4368 6563 6b20 3d20 adDirAndCheck = \n+00027760: 2473 656c 662d 3e7b 2772 6561 6444 6972 $self->{'readDir\n+00027770: 416e 6443 6865 636b 277d 3b0a 2020 2020 AndCheck'};. \n+00027780: 6d79 2024 7365 7452 6573 6574 4469 7254 my $setResetDirT\n+00027790: 696d 6573 203d 2024 7365 6c66 2d3e 7b27 imes = $self->{'\n+000277a0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes\n+000277b0: 277d 3b0a 2020 2020 6d79 2024 7061 7246 '};. my $parF\n+000277c0: 6f72 6b43 6f70 7920 3d20 2473 656c 662d orkCopy = $self-\n+000277d0: 3e7b 2770 6172 466f 726b 436f 7079 277d >{'parForkCopy'}\n+000277e0: 3b0a 2020 2020 6d79 2024 6669 666f 436f ;. my $fifoCo\n+000277f0: 7079 203d 2024 7365 6c66 2d3e 7b27 6669 py = $self->{'fi\n+00027800: 666f 436f 7079 277d 3b0a 2020 2020 6d79 foCopy'};. my\n+00027810: 2024 7061 7246 6f72 6b43 6f6d 7072 203d $parForkCompr =\n+00027820: 2024 7365 6c66 2d3e 7b27 7061 7246 6f72 $self->{'parFor\n+00027830: 6b43 6f6d 7072 277d 3b0a 2020 2020 6d79 kCompr'};. my\n+00027840: 2024 6669 666f 436f 6d70 7220 3d20 2473 $fifoCompr = $s\n+00027850: 656c 662d 3e7b 2766 6966 6f43 6f6d 7072 elf->{'fifoCompr\n+00027860: 277d 3b0a 2020 2020 6d79 2024 626c 6f63 '};. my $bloc\n+00027870: 6b43 6865 636b 5375 6d46 696c 6520 3d20 kCheckSumFile = \n+00027880: 2473 656c 662d 3e7b 2762 6c6f 636b 4368 $self->{'blockCh\n+00027890: 6563 6b53 756d 4669 6c65 277d 3b0a 2020 eckSumFile'};. \n+000278a0: 2020 6d79 2024 7061 7246 6f72 6b42 6c6f my $parForkBlo\n+000278b0: 636b 203d 2024 7365 6c66 2d3e 7b27 7061 ck = $self->{'pa\n+000278c0: 7246 6f72 6b42 6c6f 636b 277d 3b0a 2020 rForkBlock'};. \n+000278d0: 2020 6d79 2024 6669 666f 426c 6f63 6b20 my $fifoBlock \n+000278e0: 3d20 2473 656c 662d 3e7b 2766 6966 6f42 = $self->{'fifoB\n+000278f0: 6c6f 636b 277d 3b0a 2020 2020 6d79 2024 lock'};. my $\n+00027900: 636f 6d70 7265 7373 203d 206a 6f69 6e28 compress = join(\n+00027910: 2720 272c 2040 7b24 7365 6c66 2d3e 7b27 ' ', @{$self->{'\n+00027920: 636f 6d70 7265 7373 277d 7d29 3b0a 2020 compress'}});. \n+00027930: 2020 6d79 2024 636f 6d70 7265 7373 436f my $compressCo\n+00027940: 6d6d 616e 6420 3d20 2473 656c 662d 3e7b mmand = $self->{\n+00027950: 2763 6f6d 7072 6573 7343 6f6d 6d61 6e64 'compressCommand\n+00027960: 277d 3b0a 2020 2020 6d79 2024 636f 6d70 '};. my $comp\n+00027970: 7265 7373 4f70 7469 6f6e 7320 3d20 2473 ressOptions = $s\n+00027980: 656c 662d 3e7b 2763 6f6d 7072 6573 734f elf->{'compressO\n+00027990: 7074 696f 6e73 277d 3b0a 2020 2020 6d79 ptions'};. my\n+000279a0: 2024 706f 7374 6669 7820 3d20 2473 656c $postfix = $sel\n+000279b0: 662d 3e7b 2770 6f73 7466 6978 277d 3b0a f->{'postfix'};.\n+000279c0: 2020 2020 6d79 2024 636f 6d70 7252 756c my $comprRul\n+000279d0: 6520 3d20 2473 656c 662d 3e7b 2763 6f6d e = $self->{'com\n+000279e0: 7072 5275 6c65 277d 3b0a 2020 2020 6d79 prRule'};. my\n+000279f0: 2024 7461 7267 6574 4469 7220 3d20 2473 $targetDir = $s\n+00027a00: 656c 662d 3e7b 2774 6172 6765 7444 6972 elf->{'targetDir\n+00027a10: 277d 3b0a 2020 2020 6d79 2024 616b 7449 '};. my $aktI\n+00027a20: 6e66 6f46 696c 6520 3d20 2473 656c 662d nfoFile = $self-\n+00027a30: 3e7b 2761 6b74 496e 666f 4669 6c65 277d >{'aktInfoFile'}\n+00027a40: 3b0a 2020 2020 6d79 2024 7265 7365 7441 ;. my $resetA\n+00027a50: 7469 6d65 203d 2024 7365 6c66 2d3e 7b27 time = $self->{'\n+00027a60: 7265 7365 7441 7469 6d65 277d 3b0a 2020 resetAtime'};. \n+00027a70: 2020 6d79 2024 746d 7064 6972 203d 2024 my $tmpdir = $\n+00027a80: 7365 6c66 2d3e 7b27 746d 7064 6972 277d self->{'tmpdir'}\n+00027a90: 3b0a 2020 2020 6d79 2024 7072 4c6f 6720 ;. my $prLog \n+00027aa0: 3d20 2473 656c 662d 3e7b 2770 724c 6f67 = $self->{'prLog\n+00027ab0: 277d 3b0a 2020 2020 6d79 2024 6465 6275 '};. my $debu\n+00027ac0: 674d 6f64 6520 3d20 2473 656c 662d 3e7b gMode = $self->{\n+00027ad0: 2764 6562 7567 4d6f 6465 277d 3b0a 2020 'debugMode'};. \n+00027ae0: 2020 6d79 2024 676e 7563 7020 3d20 2473 my $gnucp = $s\n+00027af0: 656c 662d 3e7b 2763 7049 7347 6e75 277d elf->{'cpIsGnu'}\n+00027b00: 3b0a 2020 2020 6d79 2024 6c69 6e6b 5379 ;. my $linkSy\n+00027b10: 6d6c 696e 6b73 203d 2024 7365 6c66 2d3e mlinks = $self->\n+00027b20: 7b27 6c69 6e6b 5379 6d6c 696e 6b73 277d {'linkSymlinks'}\n+00027b30: 3b0a 2020 2020 6d79 2024 6c61 7465 436f ;. my $lateCo\n+00027b40: 6d70 7265 7373 203d 2024 7365 6c66 2d3e mpress = $self->\n+00027b50: 7b27 6c61 7465 436f 6d70 7265 7373 277d {'lateCompress'}\n+00027b60: 3b0a 2020 2020 6d79 2024 6c61 7465 4c69 ;. my $lateLi\n+00027b70: 6e6b 7320 3d20 2473 656c 662d 3e7b 276c nks = $self->{'l\n+00027b80: 6174 654c 696e 6b73 277d 3b0a 2020 2020 ateLinks'};. \n+00027b90: 6d79 2024 7375 7070 7265 7373 5761 726e my $suppressWarn\n+00027ba0: 696e 6720 3d20 2473 656c 662d 3e7b 2773 ing = $self->{'s\n+00027bb0: 7570 7072 6573 7357 6172 6e69 6e67 277d uppressWarning'}\n+00027bc0: 3b0a 0a20 2020 2023 2053 6963 6865 7265 ;.. # Sichere\n+00027bd0: 2050 6572 6d69 7373 696f 6e73 2073 6574 Permissions set\n+00027be0: 7a65 6e0a 2020 2020 756d 6173 6b28 3030 zen. umask(00\n+00027bf0: 3737 293b 0a0a 2020 2020 6d79 2028 2561 77);.. my (%a\n+00027c00: 6c6c 4261 636b 7570 4469 7273 2920 3d20 llBackupDirs) = \n+00027c10: 2829 3b0a 200a 2020 2020 6d79 2024 6c61 ();. . my $la\n+00027c20: 7465 4c69 6e6b 4669 6c65 203d 2022 2474 teLinkFile = \"$t\n+00027c30: 6172 6765 7444 6972 2f2e 7374 6f72 6542 argetDir/.storeB\n+00027c40: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF\n+00027c50: 696c 652e 627a 3222 3b0a 2020 2020 6d79 ile.bz2\";. my\n+00027c60: 2024 7772 4c61 7465 4c69 6e6b 3b0a 0a20 $wrLateLink;.. \n+00027c70: 2020 2069 6620 2824 6c61 7465 4c69 6e6b if ($lateLink\n+00027c80: 7329 0a20 2020 207b 0a09 6d79 2024 7320 s). {..my $s \n+00027c90: 3d20 246c 6174 6543 6f6d 7072 6573 7320 = $lateCompress \n+00027ca0: 3f0a 0920 2020 2022 6c61 7465 4c69 6e6b ?.. \"lateLink\n+00027cb0: 7320 616e 6420 6c61 7465 436f 6d70 7265 s and lateCompre\n+00027cc0: 7373 2061 7265 2220 3a20 226c 6174 654c ss are\" : \"lateL\n+00027cd0: 696e 6b73 2069 7322 3b0a 0924 7072 4c6f inks is\";..$prLo\n+00027ce0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00027cf0: 203d 3e20 2749 272c 0a09 0920 2020 2020 => 'I',... \n+00027d00: 2027 2d73 7472 2720 3d3e 205b 2224 7320 '-str' => [\"$s \n+00027d10: 7377 6974 6368 6564 206f 6e22 5d29 3b0a switched on\"]);.\n+00027d20: 0a09 2477 724c 6174 654c 696e 6b20 3d20 ..$wrLateLink = \n+00027d30: 7069 7065 546f 466f 726b 2d3e 6e65 7728 pipeToFork->new(\n+00027d40: 272d 6578 6563 2720 3d3e 2027 627a 6970 '-exec' => 'bzip\n+00027d50: 3227 2c0a 0909 0909 2020 2020 2020 272d 2',..... '-\n+00027d60: 7374 646f 7574 2720 3d3e 2024 6c61 7465 stdout' => $late\n+00027d70: 4c69 6e6b 4669 6c65 2c0a 0909 0909 2020 LinkFile,..... \n+00027d80: 2020 2020 272d 6f75 7452 616e 646f 6d27 '-outRandom'\n+00027d90: 203d 3e20 272f 746d 702f 7374 6275 5069 => '/tmp/stbuPi\n+00027da0: 7065 546f 3132 2d27 2c0a 0909 0909 2020 peTo12-',..... \n+00027db0: 2020 2020 272d 6465 6c53 7464 6f75 7427 '-delStdout'\n+00027dc0: 203d 3e20 276e 6f27 2c0a 0909 0909 2020 => 'no',..... \n+00027dd0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n+00027de0: 2470 724c 6f67 293b 0a0a 0924 7772 4c61 $prLog);...$wrLa\n+00027df0: 7465 4c69 6e6b 2d3e 7072 696e 7428 2223 teLink->print(\"#\n+00027e00: 206c 696e 6b20 6d64 3573 756d 5c6e 235c link md5sum\\n#\\\n+00027e10: 7465 7869 7374 696e 6746 696c 655c 6e23 texistingFile\\n#\n+00027e20: 5c74 6e65 774c 696e 6b5c 6e22 2c0a 0909 \\tnewLink\\n\",...\n+00027e30: 2020 2022 2320 636f 6d70 7265 7373 206d \"# compress m\n+00027e40: 6435 7375 6d5c 6e23 5c74 6669 6c65 546f d5sum\\n#\\tfileTo\n+00027e50: 436f 6d70 7265 7373 5c6e 2320 6469 7220 Compress\\n# dir \n+00027e60: 6469 724e 616d 655c 6e22 2c0a 0909 2020 dirName\\n\",... \n+00027e70: 2022 2320 7379 6d6c 696e 6b20 6669 6c65 \"# symlink file\n+00027e80: 5c6e 235c 7474 6172 6765 745c 6e22 2c0a \\n#\\ttarget\\n\",.\n+00027e90: 0909 2020 2022 2320 6c69 6e6b 5379 6d6c .. \"# linkSyml\n+00027ea0: 696e 6b20 6c69 6e6b 5c6e 235c 7465 7869 ink link\\n#\\texi\n+00027eb0: 7374 696e 6746 696c 655c 6e23 5c74 6e65 stingFile\\n#\\tne\n+00027ec0: 774c 696e 6b5c 6e22 293b 0a20 2020 207d wLink\\n\");. }\n+00027ed0: 0a0a 2020 2020 6d79 2024 7072 6573 6572 .. my $preser\n+00027ee0: 7665 5065 726d 7320 3d20 2473 656c 662d vePerms = $self-\n+00027ef0: 3e7b 2770 7265 7365 7276 6550 6572 6d73 >{'preservePerms\n+00027f00: 277d 3b0a 0a20 2020 206d 7920 2466 696c '};.. my $fil\n+00027f10: 6573 4c65 6674 203d 2031 3b0a 2020 2020 esLeft = 1;. \n+00027f20: 6d79 2028 2569 6e50 726f 6772 6573 7329 my (%inProgress)\n+00027f30: 203d 2028 293b 2023 2024 696e 5072 6f67 = (); # $inProg\n+00027f40: 7265 7373 7b24 6d64 357d 203d 205b 5b24 ress{$md5} = [[$\n+00027f50: 6469 722c 2024 6669 6c65 2c20 246d 6435 dir, $file, $md5\n+00027f60: 2c20 2474 7970 6573 5d2c 0a20 2020 2020 , $types],. \n+00027f70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00027f80: 2020 2020 2020 2320 2020 2020 2020 2020 # \n+00027f90: 2020 2020 2020 2020 2020 2020 205b 2464 [$d\n+00027fa0: 6972 2c20 2466 696c 652c 2024 6d64 352c ir, $file, $md5,\n+00027fb0: 2024 7479 7065 735d 2c0a 2020 2020 2020 $types],. \n+00027fc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00027fd0: 2020 2020 2023 2020 2020 2020 2020 2020 # \n+00027fe0: 2020 2020 2020 2020 2020 2020 5b24 6469 [$di\n+00027ff0: 722c 2024 6669 6c65 2c20 246d 6435 2c20 r, $file, $md5, \n+00028000: 2474 7970 6573 5d5d 0a20 2020 2020 2020 $types]]. \n+00028010: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00028020: 2020 2020 2320 5075 6666 6572 2066 c3bc # Puffer f..\n+00028030: 7220 4461 7465 6965 6e2c 2064 6965 2067 r Dateien, die g\n+00028040: 6572 6164 6520 6b6f 6d70 7269 6d69 6572 erade komprimier\n+00028050: 7420 6f64 6572 0a20 2020 2020 2020 2020 t oder. \n+00028060: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00028070: 2020 2320 6b6f 7069 6572 7420 7765 7264 # kopiert werd\n+00028080: 656e 2e20 2469 6e50 726f 6772 6573 737b en. $inProgress{\n+00028090: 246d 6435 7d20 3d20 5b5d 2062 6564 6575 $md5} = [] bedeu\n+000280a0: 7465 742c 0a20 2020 2020 2020 2020 2020 tet,. \n+000280b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000280c0: 2320 6461 c39f 2065 696e 6520 4461 7465 # da.. eine Date\n+000280d0: 6920 6d69 7420 6465 7220 6d64 352d 5375 i mit der md5-Su\n+000280e0: 6d6d 6520 696e 2042 6561 7262 6569 7475 mme in Bearbeitu\n+000280f0: 6e67 0a20 2020 2020 2020 2020 2020 2020 ng. \n+00028100: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+00028110: 6973 742c 2061 6265 7220 6b65 696e 6520 ist, aber keine \n+00028120: 676c 6569 6368 6172 7469 6765 6e20 696e gleichartigen in\n+00028130: 2064 6572 2053 6368 6c61 6e67 6520 7369 der Schlange si\n+00028140: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. \n+00028150: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+00028160: 2d3e 2056 6172 6961 626c 6520 6973 7420 -> Variable ist \n+00028170: 4d65 726b 6572 202b 2050 7566 6665 7220 Merker + Puffer \n+00028180: 7a75 676c 6569 6368 0a0a 2020 2020 6d79 zugleich.. my\n+00028190: 2024 676e 7543 6f70 7920 3d20 2763 7027 $gnuCopy = 'cp'\n+000281a0: 3b0a 2020 2020 6d79 2028 4067 6e75 436f ;. my (@gnuCo\n+000281b0: 7079 5061 7229 203d 2028 272d 6127 293b pyPar) = ('-a');\n+000281c0: 0a0a 2020 2020 6d79 2024 626c 6f63 6b50 .. my $blockP\n+000281d0: 6172 616c 6c65 6c20 3d20 303b 2020 2320 arallel = 0; # \n+000281e0: 626c 6f63 6b2a 2066 696c 6573 2061 7265 block* files are\n+000281f0: 206e 6f74 2072 6561 6420 696e 2070 6172 not read in par\n+00028200: 616c 6c65 6c20 746f 206f 7468 6572 730a allel to others.\n+00028210: 0a20 2020 2023 206d 6169 6e20 6c6f 6f70 . # main loop\n+00028220: 0a20 2020 2077 6869 6c65 2028 2466 696c . while ($fil\n+00028230: 6573 4c65 6674 206f 720a 2020 2020 2020 esLeft or. \n+00028240: 2020 2020 2024 6669 666f 436f 7079 2d3e $fifoCopy->\n+00028250: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries\n+00028260: 2829 203e 2030 206f 720a 2020 2020 2020 () > 0 or. \n+00028270: 2020 2020 2024 6669 666f 436f 6d70 722d $fifoCompr-\n+00028280: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie\n+00028290: 7328 2920 3e20 3020 6f72 0a09 2020 2024 s() > 0 or.. $\n+000282a0: 6669 666f 426c 6f63 6b2d 3e67 6574 4e6f fifoBlock->getNo\n+000282b0: 5573 6564 456e 7472 6965 7328 2920 3e20 UsedEntries() > \n+000282c0: 3020 6f72 0a20 2020 2020 2020 2020 2020 0 or. \n+000282d0: 2470 6172 466f 726b 436f 7079 2d3e 6765 $parForkCopy->ge\n+000282e0: 744e 6f55 7365 6445 6e74 7269 6573 2829 tNoUsedEntries()\n+000282f0: 203e 2030 206f 720a 2020 2020 2020 2020 > 0 or. \n+00028300: 2020 2024 7061 7246 6f72 6b43 6f6d 7072 $parForkCompr\n+00028310: 2d3e 6765 744e 6f55 7365 6445 6e74 7269 ->getNoUsedEntri\n+00028320: 6573 2829 203e 2030 206f 720a 0920 2020 es() > 0 or.. \n+00028330: 2470 6172 466f 726b 426c 6f63 6b2d 3e67 $parForkBlock->g\n+00028340: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries(\n+00028350: 2920 3e20 3029 0a20 2020 207b 0a62 6567 ) > 0). {.beg\n+00028360: 696e 4d61 696e 4c6f 6f70 4e6f 726d 616c inMainLoopNormal\n+00028370: 4f70 6572 6174 696f 6e3a 3b0a 0a09 2320 Operation:;...# \n+00028380: 5761 7274 6573 6368 6c61 6e67 656e 2066 Warteschlangen f\n+00028390: c3bc 6c6c 656e 2073 6f6c 616e 6765 2050 ..llen solange P\n+000283a0: 6c61 747a 2069 7374 2075 6e64 2062 6973 latz ist und bis\n+000283b0: 2065 696e 2046 6f72 6b0a 2020 2020 2020 ein Fork. \n+000283c0: 2020 2320 6265 656e 6465 7420 6973 7420 # beendet ist \n+000283d0: 6f64 6572 2065 696e 206e 6575 6572 2067 oder ein neuer g\n+000283e0: 6573 7461 7274 6574 2077 6572 6465 6e20 estartet werden \n+000283f0: 6b61 6e6e 2e0a 0977 6869 6c65 2028 2466 kann...while ($f\n+00028400: 696c 6573 4c65 6674 2061 6e64 0a20 2020 ilesLeft and. \n+00028410: 2020 2020 2020 2020 2020 2020 2466 6966 $fif\n+00028420: 6f43 6f70 792d 3e67 6574 4e6f 4672 6565 oCopy->getNoFree\n+00028430: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an\n+00028440: 640a 2020 2020 2020 2020 2020 2020 2020 d. \n+00028450: 2024 6669 666f 436f 6d70 722d 3e67 6574 $fifoCompr->get\n+00028460: 4e6f 4672 6565 456e 7472 6965 7328 2920 NoFreeEntries() \n+00028470: 3e20 3020 616e 640a 0920 2020 2020 2020 > 0 and.. \n+00028480: 2466 6966 6f42 6c6f 636b 2d3e 6765 744e $fifoBlock->getN\n+00028490: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() >\n+000284a0: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. \n+000284b0: 2020 2020 2020 6e6f 7420 2470 6172 466f not $parFo\n+000284c0: 726b 436f 7079 2d3e 6a6f 6246 696e 6973 rkCopy->jobFinis\n+000284d0: 6865 6428 2920 616e 640a 2020 2020 2020 hed() and. \n+000284e0: 2020 2020 2020 2020 206e 6f74 2024 7061 not $pa\n+000284f0: 7246 6f72 6b43 6f6d 7072 2d3e 6a6f 6246 rForkCompr->jobF\n+00028500: 696e 6973 6865 6428 2920 616e 640a 0920 inished() and.. \n+00028510: 2020 2020 2020 6e6f 7420 2470 6172 466f not $parFo\n+00028520: 726b 426c 6f63 6b2d 3e6a 6f62 4669 6e69 rkBlock->jobFini\n+00028530: 7368 6564 2829 2061 6e64 0a20 2020 2020 shed() and. \n+00028540: 2020 2020 2020 2020 2020 6e6f 7420 2824 not ($\n+00028550: 7061 7246 6f72 6b43 6f6d 7072 2d3e 6765 parForkCompr->ge\n+00028560: 744e 6f46 7265 6545 6e74 7269 6573 2829 tNoFreeEntries()\n+00028570: 203e 2030 2061 6e64 0a20 2020 2020 2020 > 0 and. \n+00028580: 2020 2020 2020 2020 2020 2020 2024 6669 $fi\n+00028590: 666f 436f 6d70 722d 3e67 6574 4e6f 5573 foCompr->getNoUs\n+000285a0: 6564 456e 7472 6965 7328 2920 3e20 3029 edEntries() > 0)\n+000285b0: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n+000285c0: 2020 2020 6e6f 7420 2824 7061 7246 6f72 not ($parFor\n+000285d0: 6b43 6f70 792d 3e67 6574 4e6f 4672 6565 kCopy->getNoFree\n+000285e0: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an\n+000285f0: 640a 2020 2020 2020 2020 2020 2020 2020 d. \n+00028600: 2020 2020 2020 2466 6966 6f43 6f70 792d $fifoCopy-\n+00028610: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie\n+00028620: 7328 2920 3e20 3029 2061 6e64 0a09 2020 s() > 0) and.. \n+00028630: 2020 2020 206e 6f74 2028 2470 6172 466f not ($parFo\n+00028640: 726b 426c 6f63 6b2d 3e67 6574 4e6f 4672 rkBlock->getNoFr\n+00028650: 6565 456e 7472 6965 7328 2920 3e20 3020 eeEntries() > 0 \n+00028660: 616e 640a 0909 2020 2020 2466 6966 6f42 and... $fifoB\n+00028670: 6c6f 636b 2d3e 6765 744e 6f55 7365 6445 lock->getNoUsedE\n+00028680: 6e74 7269 6573 2829 203e 2030 2929 0a20 ntries() > 0)). \n+00028690: 2020 2020 2020 207b 0a09 2020 2020 6d79 {.. my\n+000286a0: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $\n+000286b0: 6d64 352c 2024 7479 7065 293b 0a09 2020 md5, $type);.. \n+000286c0: 2020 6d79 2024 6e20 3d20 2824 6469 722c my $n = ($dir,\n+000286d0: 2024 6669 6c65 2c20 246d 6435 2c20 2474 $file, $md5, $t\n+000286e0: 7970 6529 203d 0a09 0924 7265 6164 4469 ype) =...$readDi\n+000286f0: 7241 6e64 4368 6563 6b2d 3e6e 6578 7428 rAndCheck->next(\n+00028700: 293b 0a0a 0920 2020 2069 6620 2824 6e20 );... if ($n \n+00028710: 3d3d 2030 2920 2020 2020 2020 2020 2320 == 0) # \n+00028720: 6e69 7820 6d65 6872 207a 7520 686f 6c65 nix mehr zu hole\n+00028730: 6e21 0a09 2020 2020 7b0a 0909 2466 696c n!.. {...$fil\n+00028740: 6573 4c65 6674 203d 2030 3b0a 0909 6c61 esLeft = 0;...la\n+00028750: 7374 3b0a 0920 2020 207d 0a0a 0920 2020 st;.. }... \n+00028760: 206c 6173 7420 6966 2028 2474 7970 6520 last if ($type \n+00028770: 6571 2027 7265 7065 6174 2729 3b20 2320 eq 'repeat'); # \n+00028780: 4d44 3553 756d 206c c3a4 7566 7420 6e6f MD5Sum l..uft no\n+00028790: 6368 0a0a 2370 7269 6e74 2022 2d30 2d20 ch..#print \"-0- \n+000287a0: 2464 6972 2f24 6669 6c65 202d 2074 7970 $dir/$file - typ\n+000287b0: 6520 2474 7970 655c 6e22 3b0a 0920 2020 e $type\\n\";.. \n+000287c0: 2069 6620 2824 6669 6c65 203d 7e20 2f5c if ($file =~ /\\\n+000287d0: 6e2f 2061 6e64 0a09 096e 6f74 2065 7869 n/ and...not exi\n+000287e0: 7374 7320 2473 7570 7072 6573 7357 6172 sts $suppressWar\n+000287f0: 6e69 6e67 7b27 6669 6c65 4e61 6d65 5769 ning{'fileNameWi\n+00028800: 7468 4c69 6e65 4665 6564 277d 290a 0920 thLineFeed'}).. \n+00028810: 2020 207b 0a09 096d 7920 2466 203d 2024 {...my $f = $\n+00028820: 6669 6c65 3b0a 0909 2466 203d 7e20 732f file;...$f =~ s/\n+00028830: 5c6e 2f5c 5c6e 2f67 3b0a 0909 2470 724c \\n/\\\\n/g;...$prL\n+00028840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00028850: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... \n+00028860: 2020 2027 2d73 7472 2720 3d3e 205b 223c '-str' => [\"<\n+00028870: 2464 6972 2f24 663e 2068 6173 205c 5c6e $dir/$f> has \\\\n\n+00028880: 2069 6e20 7468 6520 6669 6c65 206e 616d in the file nam\n+00028890: 6522 5d29 0a09 2020 2020 7d0a 0a20 2020 e\"]).. }.. \n+000288a0: 2020 2020 2020 2020 2023 204f 6b2c 2077 # Ok, w\n+000288b0: 6972 2068 6162 656e 2077 6173 207a 7520 ir haben was zu \n+000288c0: 6265 6172 6265 6974 656e 0a20 2020 2020 bearbeiten. \n+000288d0: 2020 2020 2020 2024 6d61 696e 3a3a 7469 $main::ti\n+000288e0: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler-\n+000288f0: 3e72 6573 6574 2829 3b0a 0a09 2020 2020 >reset();... \n+00028900: 2320 5265 6368 7465 2065 7463 2e20 6465 # Rechte etc. de\n+00028910: 7220 4f72 6967 696e 616c 6461 7465 6920 r Originaldatei \n+00028920: 6c65 7365 6e0a 0920 2020 206d 7920 2824 lesen.. my ($\n+00028930: 6465 762c 2024 696e 6f64 652c 2024 6d6f dev, $inode, $mo\n+00028940: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, \n+00028950: 2473 697a 652c 2024 6174 696d 652c 0a09 $size, $atime,..\n+00028960: 0924 6d74 696d 652c 2024 6374 696d 6529 .$mtime, $ctime)\n+00028970: 3b0a 0920 2020 206d 7920 245f 6465 7074 ;.. my $_dept\n+00028980: 6820 3d20 2d31 3b0a 0a09 2020 2020 6966 h = -1;... if\n+00028990: 2028 6e6f 7420 2d6c 2022 2464 6972 2f24 (not -l \"$dir/$\n+000289a0: 6669 6c65 2220 616e 6420 6e6f 7420 2d65 file\" and not -e\n+000289b0: 2022 2464 6972 2f24 6669 6c65 2229 0a09 \"$dir/$file\")..\n+000289c0: 2020 2020 7b0a 0909 2470 724c 6f67 2d3e {...$prLog->\n+000289d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+000289e0: 2027 5727 2c0a 0909 0920 2020 2020 2027 'W',.... '\n+000289f0: 2d73 7472 2720 3d3e 205b 223c 2464 6972 -str' => [\"<$dir\n+00028a00: 2f24 6669 6c65 3e20 7265 6d6f 7665 6420 /$file> removed \n+00028a10: 6475 7269 6e67 2062 6163 6b75 7022 5d29 during backup\"])\n+00028a20: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. }\n+00028a30: 0a0a 0920 2020 2028 2464 6576 2c20 2469 ... ($dev, $i\n+00028a40: 6e6f 6465 2c20 246d 6f64 652c 2024 7569 node, $mode, $ui\n+00028a50: 642c 2024 6769 642c 2024 7369 7a65 2c20 d, $gid, $size, \n+00028a60: 2461 7469 6d65 2c0a 0920 2020 2020 246d $atime,.. $m\n+00028a70: 7469 6d65 2c20 2463 7469 6d65 2920 3d0a time, $ctime) =.\n+00028a80: 0909 2028 7374 6174 2822 2464 6972 2f24 .. (stat(\"$dir/$\n+00028a90: 6669 6c65 2229 295b 302c 312c 322c 342c file\"))[0,1,2,4,\n+00028aa0: 352c 372c 382c 392c 3130 5d3b 0a0a 0920 5,7,8,9,10];... \n+00028ab0: 2020 2069 6620 2824 7479 7065 2065 7120 if ($type eq \n+00028ac0: 2764 2729 0a09 2020 2020 7b0a 0909 6d79 'd').. {...my\n+00028ad0: 2028 4064 756d 6d79 293b 0a09 0924 5f64 (@dummy);...$_d\n+00028ae0: 6570 7468 203d 2028 4064 756d 6d79 2920 epth = (@dummy) \n+00028af0: 3d20 2466 696c 6520 3d7e 206d 232f 2367 = $file =~ m#/#g\n+00028b00: 3b0a 0909 6966 2028 245f 6465 7074 6820 ;...if ($_depth \n+00028b10: 2b20 3120 3c3d 2024 666f 6c6c 6f77 4c69 + 1 <= $followLi\n+00028b20: 6e6b 7320 616e 640a 0909 2020 2020 2d6c nks and... -l\n+00028b30: 2022 2464 6972 2f24 6669 6c65 2229 0a09 \"$dir/$file\")..\n+00028b40: 097b 0a09 0920 2020 2024 5f64 6570 7468 .{... $_depth\n+00028b50: 203d 2031 3b0a 0909 7d0a 0909 656c 7365 = 1;...}...else\n+00028b60: 0a09 097b 0a09 0920 2020 2024 5f64 6570 ...{... $_dep\n+00028b70: 7468 203d 202d 313b 0a09 097d 0a09 2020 th = -1;...}.. \n+00028b80: 2020 7d0a 0920 2020 2069 6620 2824 5f64 }.. if ($_d\n+00028b90: 6570 7468 203d 3d20 2d31 290a 0920 2020 epth == -1).. \n+00028ba0: 207b 0a09 0928 2464 6576 2c20 2469 6e6f {...($dev, $ino\n+00028bb0: 6465 2c20 246d 6f64 652c 2024 7569 642c de, $mode, $uid,\n+00028bc0: 2024 6769 642c 2024 7369 7a65 2c20 2461 $gid, $size, $a\n+00028bd0: 7469 6d65 2c0a 0909 2024 6d74 696d 652c time,... $mtime,\n+00028be0: 2024 6374 696d 6529 203d 0a09 0920 2020 $ctime) =... \n+00028bf0: 2020 286c 7374 6174 2822 2464 6972 2f24 (lstat(\"$dir/$\n+00028c00: 6669 6c65 2229 295b 302c 312c 322c 342c file\"))[0,1,2,4,\n+00028c10: 352c 372c 382c 392c 3130 5d3b 0a09 2020 5,7,8,9,10];.. \n+00028c20: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n+00028c30: 6966 2028 6e6f 7420 6465 6669 6e65 6420 if (not defined \n+00028c40: 2464 6576 290a 0920 2020 207b 0a09 0924 $dev).. {...$\n+00028c50: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00028c60: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n+00028c70: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00028c80: 5b22 6361 6e6e 6f74 2073 7461 7420 3c24 [\"cannot stat <$\n+00028c90: 6669 6c65 3e3a 2024 2122 5d29 3b0a 2020 file>: $!\"]);. \n+00028ca0: 2020 2020 2020 2020 2020 2020 2020 6e65 ne\n+00028cb0: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. \n+00028cc0: 7d0a 2020 2020 2020 2020 2020 2020 246d }. $m\n+00028cd0: 6f64 6520 263d 2030 3737 3737 3b0a 0a09 ode &= 07777;...\n+00028ce0: 2020 2020 6966 2028 2466 696c 6520 6571 if ($file eq\n+00028cf0: 2024 616b 7449 6e66 6f46 696c 6520 6f72 $aktInfoFile or\n+00028d00: 2024 6669 6c65 2065 7120 2224 616b 7449 $file eq \"$aktI\n+00028d10: 6e66 6f46 696c 652e 627a 3222 290a 0920 nfoFile.bz2\").. \n+00028d20: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n+00028d30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00028d40: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n+00028d50: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n+00028d60: 2068 616e 646c 6520 3c24 6669 6c65 3e2c handle <$file>,\n+00028d70: 2022 202e 0a09 0909 0909 2022 636f 6c6c \" ....... \"coll\n+00028d80: 6973 696f 6e20 7769 7468 2069 6e66 6f20 ision with info \n+00028d90: 6669 6c65 225d 293b 0a09 096e 6578 743b file\"]);...next;\n+00028da0: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if\n+00028db0: 2028 2474 7970 6520 6571 2027 6427 2920 ($type eq 'd') \n+00028dc0: 2020 2020 2020 2020 2020 2023 2064 6972 # dir\n+00028dd0: 6563 746f 7279 2061 6e6c 6567 656e 0a09 ectory anlegen..\n+00028de0: 2020 2020 7b0a 0909 6966 2028 246c 6174 {...if ($lat\n+00028df0: 654c 696e 6b73 290a 0909 7b0a 0909 2020 eLinks)...{... \n+00028e00: 2020 6d79 2024 6c61 7465 4469 7220 3d20 my $lateDir = \n+00028e10: 2466 696c 653b 0a09 0920 2020 2024 6c61 $file;... $la\n+00028e20: 7465 4469 7220 3d7e 2073 2f5c 6e2f 5c30 teDir =~ s/\\n/\\0\n+00028e30: 2f6f 673b 0a09 0920 2020 2024 7772 4c61 /og;... $wrLa\n+00028e40: 7465 4c69 6e6b 2d3e 7072 696e 7428 2264 teLink->print(\"d\n+00028e50: 6972 2024 6c61 7465 4469 725c 6e22 293b ir $lateDir\\n\");\n+00028e60: 0a09 097d 0a09 0965 6c73 650a 0909 7b0a ...}...else...{.\n+00028e70: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+00028e80: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00028e90: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str'\n+00028ea0: 203d 3e0a 0909 0909 2020 5b22 6361 6e6e =>..... [\"cann\n+00028eb0: 6f74 2063 7265 6174 6520 6469 7265 6374 ot create direct\n+00028ec0: 6f72 7920 3c24 7461 7267 6574 4469 722f ory <$targetDir/\n+00028ed0: 2466 696c 653e 225d 2c0a 0909 0909 2020 $file>\"],..... \n+00028ee0: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)...\n+00028ef0: 0975 6e6c 6573 7320 6d6b 6469 7220 2224 .unless mkdir \"$\n+00028f00: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n+00028f10: 2c20 3037 3030 3b0a 0a09 0920 2020 2069 , 0700;.... i\n+00028f20: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm\n+00028f30: 7329 0a09 0920 2020 207b 0a09 0909 6368 s)... {....ch\n+00028f40: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n+00028f50: 2224 7461 7267 6574 4469 722f 2466 696c \"$targetDir/$fil\n+00028f60: 6522 3b0a 0909 0924 7365 7452 6573 6574 e\";....$setReset\n+00028f70: 4469 7254 696d 6573 2d3e 6164 6444 6972 DirTimes->addDir\n+00028f80: 2824 6669 6c65 2c20 2461 7469 6d65 2c20 ($file, $atime, \n+00028f90: 246d 7469 6d65 2c20 246d 6f64 6529 3b0a $mtime, $mode);.\n+00028fa0: 0909 2020 2020 7d0a 0909 2020 2020 2470 .. }... $p\n+00028fb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00028fc0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',.....\n+00028fd0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n+00028fe0: 2020 5b22 6372 6561 7465 6420 6469 7265 [\"created dire\n+00028ff0: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi\n+00029000: 722f 2466 696c 6522 5d29 0a09 0909 6966 r/$file\"])....if\n+00029010: 2028 2464 6562 7567 4d6f 6465 203e 2030 ($debugMode > 0\n+00029020: 293b 0a09 097d 0a0a 0909 246d 6169 6e3a );...}....$main:\n+00029030: 3a73 7461 742d 3e69 6e63 725f 6e6f 4469 :stat->incr_noDi\n+00029040: 7273 2824 7569 642c 2024 6769 6429 3b0a rs($uid, $gid);.\n+00029050: 0a09 0924 616b 7446 696c 656e 616d 652d ...$aktFilename-\n+00029060: 3e73 746f 7265 4469 7228 272d 6469 7227 >storeDir('-dir'\n+00029070: 203d 3e20 2466 696c 652c 0a09 0909 0920 => $file,..... \n+00029080: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => \n+00029090: 2464 6576 2c0a 0909 0909 2020 2020 2020 $dev,..... \n+000290a0: 2027 2d69 6e6f 6465 2720 3d3e 2024 696e '-inode' => $in\n+000290b0: 6f64 652c 0a09 0909 0920 2020 2020 2020 ode,..... \n+000290c0: 272d 6374 696d 6527 203d 3e20 2463 7469 '-ctime' => $cti\n+000290d0: 6d65 2c0a 0909 0909 2020 2020 2020 2027 me,..... '\n+000290e0: 2d6d 7469 6d65 2720 3d3e 2024 6d74 696d -mtime' => $mtim\n+000290f0: 652c 0a09 0909 0920 2020 2020 2020 272d e,..... '-\n+00029100: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime\n+00029110: 2c0a 0909 0909 2020 2020 2020 2027 2d75 ,..... '-u\n+00029120: 6964 2720 3d3e 2024 7569 642c 0a09 0909 id' => $uid,....\n+00029130: 0920 2020 2020 2020 272d 6769 6427 203d . '-gid' =\n+00029140: 3e20 2467 6964 2c0a 0909 0909 2020 2020 > $gid,..... \n+00029150: 2020 2027 2d6d 6f64 6527 203d 3e20 246d '-mode' => $m\n+00029160: 6f64 6529 3b0a 0909 6e65 7874 3b0a 0920 ode);...next;.. \n+00029170: 2020 207d 0a0a 0920 2020 2069 6620 2824 }... if ($\n+00029180: 7479 7065 2065 7120 276c 2729 2020 2020 type eq 'l') \n+00029190: 2020 2020 2020 2020 2320 7379 6d62 6f6c # symbol\n+000291a0: 6963 206c 696e 6b0a 0920 2020 207b 0a09 ic link.. {..\n+000291b0: 096d 7920 246c 203d 2072 6561 646c 696e .my $l = readlin\n+000291c0: 6b20 2224 6469 722f 2466 696c 6522 3b0a k \"$dir/$file\";.\n+000291d0: 0a09 0969 6620 2824 6c69 6e6b 5379 6d6c ...if ($linkSyml\n+000291e0: 696e 6b73 290a 0909 7b0a 0909 2020 2020 inks)...{... \n+000291f0: 6966 2028 2470 7265 7642 6163 6b75 704f if ($prevBackupO\n+00029200: 776e 5365 7269 6573 2061 6e64 0a09 0909 wnSeries and....\n+00029210: 2d6c 2022 2470 7265 7642 6163 6b75 704f -l \"$prevBackupO\n+00029220: 776e 5365 7269 6573 2f24 6669 6c65 2229 wnSeries/$file\")\n+00029230: 0a09 0920 2020 207b 0a09 0909 6d79 2024 ... {....my $\n+00029240: 6c5f 7072 6576 203d 2072 6561 646c 696e l_prev = readlin\n+00029250: 6b20 2224 7072 6576 4261 636b 7570 4f77 k \"$prevBackupOw\n+00029260: 6e53 6572 6965 732f 2466 696c 6522 3b0a nSeries/$file\";.\n+00029270: 0a09 0909 6966 2028 246c 2065 7120 246c ....if ($l eq $l\n+00029280: 5f70 7265 7629 0a09 0909 7b0a 0909 0920 _prev)....{.... \n+00029290: 2020 2069 6620 2824 6c61 7465 4c69 6e6b if ($lateLink\n+000292a0: 7329 0a09 0909 2020 2020 7b0a 0909 0909 s).... {.....\n+000292b0: 6d79 2024 5f6f 6c64 203d 2022 2470 7265 my $_old = \"$pre\n+000292c0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries\n+000292d0: 2f24 6669 6c65 223b 0a09 0909 0924 5f6f /$file\";.....$_o\n+000292e0: 6c64 203d 203a 3a72 656c 5061 7468 2824 ld = ::relPath($\n+000292f0: 7461 7267 6574 4469 722c 2024 5f6f 6c64 targetDir, $_old\n+00029300: 293b 0a09 0909 0924 5f6f 6c64 203d 7e20 );.....$_old =~ \n+00029310: 732f 5c6e 2f5c 302f 6f67 3b0a 0909 0909 s/\\n/\\0/og;.....\n+00029320: 6d79 2024 5f6e 6577 203d 2024 6669 6c65 my $_new = $file\n+00029330: 3b0a 0909 0909 245f 6e65 7720 3d7e 2073 ;.....$_new =~ s\n+00029340: 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 0924 /\\n/\\0/og;.....$\n+00029350: 7772 4c61 7465 4c69 6e6b 2d3e 7072 696e wrLateLink->prin\n+00029360: 7428 0a09 0909 0920 2020 2022 6c69 6e6b t(..... \"link\n+00029370: 5379 6d6c 696e 6b20 246c 5c6e 245f 6f6c Symlink $l\\n$_ol\n+00029380: 645c 6e24 5f6e 6577 5c6e 2229 3b0a 0909 d\\n$_new\\n\");...\n+00029390: 0909 2673 746f 7265 5379 6d4c 696e 6b49 ..&storeSymLinkI\n+000293a0: 6e66 6f73 2824 7569 642c 2024 6769 642c nfos($uid, $gid,\n+000293b0: 2024 7461 7267 6574 4469 722c 0a09 0909 $targetDir,....\n+000293c0: 0909 0920 2020 2466 696c 652c 2024 6465 ... $file, $de\n+000293d0: 762c 2024 696e 6f64 652c 0a09 0909 0909 v, $inode,......\n+000293e0: 0920 2020 2463 7469 6d65 2c20 246d 7469 . $ctime, $mti\n+000293f0: 6d65 2c20 2461 7469 6d65 2c0a 0909 0909 me, $atime,.....\n+00029400: 0909 2020 2024 616b 7446 696c 656e 616d .. $aktFilenam\n+00029410: 652c 2024 6465 6275 674d 6f64 652c 0a09 e, $debugMode,..\n+00029420: 0909 0909 0920 2020 2470 724c 6f67 293b ..... $prLog);\n+00029430: 0a09 0909 096e 6578 743b 0a09 0909 2020 .....next;.... \n+00029440: 2020 7d0a 0909 0920 2020 2024 7072 4c6f }.... $prLo\n+00029450: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00029460: 203d 3e20 2744 272c 0a09 0909 0909 2020 => 'D',...... \n+00029470: 272d 7374 7227 203d 3e0a 0909 0909 0920 '-str' =>...... \n+00029480: 205b 226c 696e 6b20 2470 7265 7642 6163 [\"link $prevBac\n+00029490: 6b75 704f 776e 5365 7269 6573 2f24 6669 kupOwnSeries/$fi\n+000294a0: 6c65 2220 2e0a 0909 0909 0920 2022 2474 le\" ....... \"$t\n+000294b0: 6172 6765 7444 6972 2f24 6669 6c65 225d argetDir/$file\"]\n+000294c0: 290a 0909 0909 6966 2024 6465 6275 674d ).....if $debugM\n+000294d0: 6f64 6520 3e3d 2032 3b0a 0909 0920 2020 ode >= 2;.... \n+000294e0: 2069 6620 286c 696e 6b20 2224 7072 6576 if (link \"$prev\n+000294f0: 4261 636b 7570 4f77 6e53 6572 6965 732f BackupOwnSeries/\n+00029500: 2466 696c 6522 2c0a 0909 0909 2224 7461 $file\",.....\"$ta\n+00029510: 7267 6574 4469 722f 2466 696c 6522 290a rgetDir/$file\").\n+00029520: 0909 0920 2020 207b 0a09 0909 0926 6368 ... {.....&ch\n+00029530: 616e 6765 5379 6d6c 696e 6b50 6572 6d73 angeSymlinkPerms\n+00029540: 2824 7569 642c 2024 6769 642c 2024 7461 ($uid, $gid, $ta\n+00029550: 7267 6574 4469 722c 0a09 0909 0909 0920 rgetDir,....... \n+00029560: 2020 2024 6669 6c65 2c20 2474 6d70 6469 $file, $tmpdi\n+00029570: 722c 2024 7072 4c6f 6729 0a09 0909 0920 r, $prLog)..... \n+00029580: 2020 2069 6620 2824 7072 6573 6572 7665 if ($preserve\n+00029590: 5065 726d 7329 3b0a 0909 0909 2673 746f Perms);.....&sto\n+000295a0: 7265 5379 6d4c 696e 6b49 6e66 6f73 2824 reSymLinkInfos($\n+000295b0: 7569 642c 2024 6769 642c 2024 7461 7267 uid, $gid, $targ\n+000295c0: 6574 4469 722c 0a09 0909 0909 0920 2020 etDir,....... \n+000295d0: 2466 696c 652c 2024 6465 762c 2024 696e $file, $dev, $in\n+000295e0: 6f64 652c 0a09 0909 0909 0920 2020 2463 ode,....... $c\n+000295f0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a\n+00029600: 7469 6d65 2c0a 0909 0909 0909 2020 2024 time,....... $\n+00029610: 616b 7446 696c 656e 616d 652c 2024 6465 aktFilename, $de\n+00029620: 6275 674d 6f64 652c 0a09 0909 0909 0920 bugMode,....... \n+00029630: 2020 2470 724c 6f67 293b 0a09 0909 096e $prLog);.....n\n+00029640: 6578 743b 0a0a 0909 0920 2020 207d 0a09 ext;..... }..\n+00029650: 0909 7d0a 0909 2020 2020 7d0a 0909 7d0a ..}... }...}.\n+00029660: 0909 6966 2028 246c 6174 654c 696e 6b73 ..if ($lateLinks\n+00029670: 290a 0909 7b0a 0909 2020 2020 6d79 2024 )...{... my $\n+00029680: 5f66 696c 6520 3d20 2224 6669 6c65 223b _file = \"$file\";\n+00029690: 0a09 0920 2020 2024 5f66 696c 6520 3d7e ... $_file =~\n+000296a0: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0920 s/\\n/\\0/og;... \n+000296b0: 2020 206d 7920 245f 6c20 3d20 246c 3b0a my $_l = $l;.\n+000296c0: 0909 2020 2020 246c 203d 7e20 732f 5c6e .. $l =~ s/\\n\n+000296d0: 2f5c 302f 6f67 3b0a 0909 2020 2020 2477 /\\0/og;... $w\n+000296e0: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print\n+000296f0: 2822 7379 6d6c 696e 6b20 245f 6669 6c65 (\"symlink $_file\n+00029700: 5c6e 246c 5c6e 2229 3b0a 0909 7d0a 0909 \\n$l\\n\");...}...\n+00029710: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $\n+00029720: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00029730: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+00029740: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => [\"c\n+00029750: 616e 6e6f 7420 6372 6561 7465 2073 796d annot create sym\n+00029760: 6c69 6e6b 2066 726f 6d20 2220 2e0a 0909 link from \" ....\n+00029770: 0909 0920 2020 2020 223c 2474 6172 6765 ... \"<$targe\n+00029780: 7444 6972 2f24 6669 6c65 3e20 2d3e 2024 tDir/$file> -> $\n+00029790: 6c22 5d2c 0a09 0909 0920 2027 2d65 7869 l\"],..... '-exi\n+000297a0: 7427 203d 3e20 3129 0a09 0909 756e 6c65 t' => 1)....unle\n+000297b0: 7373 2073 796d 6c69 6e6b 2024 6c2c 2022 ss symlink $l, \"\n+000297c0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+000297d0: 223b 0a0a 0909 2020 2020 6966 2028 2470 \";.... if ($p\n+000297e0: 7265 7365 7276 6550 6572 6d73 290a 0909 reservePerms)...\n+000297f0: 2020 2020 7b0a 0909 0926 6368 616e 6765 {....&change\n+00029800: 5379 6d6c 696e 6b50 6572 6d73 2824 7569 SymlinkPerms($ui\n+00029810: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target\n+00029820: 4469 722c 0a09 0909 2020 2020 2466 696c Dir,.... $fil\n+00029830: 652c 2024 746d 7064 6972 2c20 2470 724c e, $tmpdir, $prL\n+00029840: 6f67 293b 0a09 0920 2020 207d 0a09 097d og);... }...}\n+00029850: 0a0a 0909 2673 746f 7265 5379 6d4c 696e ....&storeSymLin\n+00029860: 6b49 6e66 6f73 2824 7569 642c 2024 6769 kInfos($uid, $gi\n+00029870: 642c 2024 7461 7267 6574 4469 722c 2024 d, $targetDir, $\n+00029880: 6669 6c65 2c20 2464 6576 2c0a 0909 0909 file, $dev,.....\n+00029890: 2020 2024 696e 6f64 652c 2024 6374 696d $inode, $ctim\n+000298a0: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim\n+000298b0: 652c 0a09 0909 0920 2020 2461 6b74 4669 e,..... $aktFi\n+000298c0: 6c65 6e61 6d65 2c20 2464 6562 7567 4d6f lename, $debugMo\n+000298d0: 6465 2c20 2470 724c 6f67 293b 0a09 096e de, $prLog);...n\n+000298e0: 6578 743b 0a09 2020 2020 7d0a 0a09 2020 ext;.. }... \n+000298f0: 2020 6966 2028 2474 7970 6520 6571 2027 if ($type eq '\n+00029900: 7027 290a 0920 2020 207b 0a09 096d 7920 p').. {...my \n+00029910: 2824 6374 696d 652c 2024 6d74 696d 652c ($ctime, $mtime,\n+00029920: 2024 6174 696d 6529 203d 0a09 0920 2020 $atime) =... \n+00029930: 2028 7374 6174 2822 2464 6972 2f24 6669 (stat(\"$dir/$fi\n+00029940: 6c65 2229 295b 3130 2c20 392c 2038 5d3b le\"))[10, 9, 8];\n+00029950: 0a0a 0909 263a 3a6d 616b 6546 696c 6550 ....&::makeFileP\n+00029960: 6174 6828 2224 7461 7267 6574 4469 722f ath(\"$targetDir/\n+00029970: 2466 696c 6522 2c20 2470 724c 6f67 2920 $file\", $prLog) \n+00029980: 6966 2024 6c61 7465 4c69 6e6b 733b 0a0a if $lateLinks;..\n+00029990: 0909 6d79 2024 6d6b 6e6f 6420 3d20 666f ..my $mknod = fo\n+000299a0: 726b 5072 6f63 2d3e 6e65 7728 272d 6578 rkProc->new('-ex\n+000299b0: 6563 2720 3d3e 2027 6d6b 6e6f 6427 2c0a ec' => 'mknod',.\n+000299c0: 0909 0909 0920 2027 2d70 6172 616d 2720 ..... '-param' \n+000299d0: 3d3e 205b 2224 7461 7267 6574 4469 722f => [\"$targetDir/\n+000299e0: 2466 696c 6522 2c20 2770 275d 2c0a 0909 $file\", 'p'],...\n+000299f0: 0909 0920 2027 2d6f 7574 5261 6e64 6f6d ... '-outRandom\n+00029a00: 2720 3d3e 2022 2474 6d70 6469 722f 6d6b ' => \"$tmpdir/mk\n+00029a10: 6e6f 642d 222c 0a09 0909 0909 2020 272d nod-\",...... '-\n+00029a20: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n+00029a30: 293b 0a09 0924 6d6b 6e6f 642d 3e77 6169 );...$mknod->wai\n+00029a40: 7428 293b 0a09 096d 7920 246f 7574 203d t();...my $out =\n+00029a50: 2024 6d6b 6e6f 642d 3e67 6574 5354 444f $mknod->getSTDO\n+00029a60: 5554 2829 3b0a 0909 2470 724c 6f67 2d3e UT();...$prLog->\n+00029a70: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00029a80: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... '\n+00029a90: 2d73 7472 2720 3d3e 0a09 0909 2020 2020 -str' =>.... \n+00029aa0: 2020 5b22 5354 444f 5554 206f 6620 3c6d [\"STDOUT of :\", @$ou\n+00029ad0: 745d 290a 0909 2020 2020 6966 2028 4024 t])... if (@$\n+00029ae0: 6f75 7420 3e20 3029 3b0a 0909 246f 7574 out > 0);...$out\n+00029af0: 203d 2024 6d6b 6e6f 642d 3e67 6574 5354 = $mknod->getST\n+00029b00: 4445 5252 2829 3b0a 0909 2470 724c 6f67 DERR();...$prLog\n+00029b10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00029b20: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n+00029b30: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... \n+00029b40: 2020 2020 5b22 5354 4445 5252 206f 6620 [\"STDERR of \n+00029b50: 3c6d 6b6e 6f64 2024 7461 7267 6574 4469 :\", @$o\n+00029b70: 7574 5d29 0a09 0920 2020 2069 6620 2840 ut])... if (@\n+00029b80: 246f 7574 203e 2030 293b 0a0a 0909 6966 $out > 0);....if\n+00029b90: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms\n+00029ba0: 290a 0909 7b0a 0909 2020 2020 6368 6f77 )...{... chow\n+00029bb0: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, \"$\n+00029bc0: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n+00029bd0: 3b0a 0909 2020 2020 6368 6d6f 6420 246d ;... chmod $m\n+00029be0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, \"$targetDir\n+00029bf0: 2f24 6669 6c65 223b 0a09 0920 2020 2075 /$file\";... u\n+00029c00: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt\n+00029c10: 696d 652c 2022 2464 6972 2f24 6669 6c65 ime, \"$dir/$file\n+00029c20: 2220 6966 2024 7265 7365 7441 7469 6d65 \" if $resetAtime\n+00029c30: 3b3b 0a09 0920 2020 2075 7469 6d65 2024 ;;... utime $\n+00029c40: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, \"\n+00029c50: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+00029c60: 223b 0a09 097d 0a09 0924 6d61 696e 3a3a \";...}...$main::\n+00029c70: 7374 6174 2d3e 696e 6372 5f6e 6f4e 616d stat->incr_noNam\n+00029c80: 6564 5069 7065 7328 2475 6964 2c20 2467 edPipes($uid, $g\n+00029c90: 6964 293b 0a09 0924 7072 4c6f 672d 3e70 id);...$prLog->p\n+00029ca0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00029cb0: 2744 272c 0a09 0909 2020 2020 2020 272d 'D',.... '-\n+00029cc0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n+00029cd0: 205b 2263 7265 6174 6564 206e 616d 6564 [\"created named\n+00029ce0: 2070 6970 6520 3c24 7461 7267 6574 4469 pipe <$targetDi\n+00029cf0: 722f 2466 696c 6522 5d29 0a09 0920 2020 r/$file\"])... \n+00029d00: 2069 6620 2824 6465 6275 674d 6f64 6520 if ($debugMode \n+00029d10: 3e3d 2032 293b 0a09 0924 616b 7446 696c >= 2);...$aktFil\n+00029d20: 656e 616d 652d 3e73 746f 7265 4e61 6d65 ename->storeName\n+00029d30: 6450 6970 6528 272d 7069 7065 2720 3d3e dPipe('-pipe' =>\n+00029d40: 2024 6669 6c65 2c0a 0909 0909 0920 2020 $file,...... \n+00029d50: 2020 272d 6465 7627 203d 3e20 2464 6576 '-dev' => $dev\n+00029d60: 2c0a 0909 0909 0920 2020 2020 272d 696e ,...... '-in\n+00029d70: 6f64 6527 203d 3e20 2469 6e6f 6465 2c0a ode' => $inode,.\n+00029d80: 0909 0909 0920 2020 2020 272d 6374 696d ..... '-ctim\n+00029d90: 6527 203d 3e20 2463 7469 6d65 2c0a 0909 e' => $ctime,...\n+00029da0: 0909 0920 2020 2020 272d 6d74 696d 6527 ... '-mtime'\n+00029db0: 203d 3e20 246d 7469 6d65 2c0a 0909 0909 => $mtime,.....\n+00029dc0: 0920 2020 2020 272d 6174 696d 6527 203d . '-atime' =\n+00029dd0: 3e20 2461 7469 6d65 2c0a 0909 0909 0920 > $atime,...... \n+00029de0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u\n+00029df0: 6964 2c0a 0909 0909 0920 2020 2020 272d id,...... '-\n+00029e00: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,...\n+00029e10: 0909 0920 2020 2020 272d 6d6f 6465 2720 ... '-mode' \n+00029e20: 3d3e 2024 6d6f 6465 293b 0a09 096e 6578 => $mode);...nex\n+00029e30: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... \n+00029e40: 6966 2028 2474 7970 6520 6571 2027 5327 if ($type eq 'S'\n+00029e50: 206f 720a 2020 2020 2020 2020 2020 2020 or. \n+00029e60: 2020 2020 2474 7970 6520 6571 2027 6227 $type eq 'b'\n+00029e70: 206f 720a 2020 2020 2020 2020 2020 2020 or. \n+00029e80: 2020 2020 2474 7970 6520 6571 2027 6327 $type eq 'c'\n+00029e90: 290a 0920 2020 207b 0a20 2020 2020 2020 ).. {. \n+00029ea0: 2020 2020 2020 2020 2024 676e 7563 7020 $gnucp \n+00029eb0: 6f72 0a09 0920 2020 2024 7072 4c6f 672d or... $prLog-\n+00029ec0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00029ed0: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s\n+00029ee0: 7472 2720 3d3e 0a09 0909 0920 205b 226e tr' =>..... [\"n\n+00029ef0: 6f20 676e 7563 703a 2069 6e74 6572 6e61 o gnucp: interna\n+00029f00: 6c20 6572 726f 723a 2022 202e 0a09 0909 l error: \" .....\n+00029f10: 0920 2020 2263 616e 6e6f 7420 7361 7665 . \"cannot save\n+00029f20: 2066 696c 6520 7479 6573 2053 6263 7022 file tyes Sbcp\"\n+00029f30: 5d2c 0a09 0909 0920 2027 2d65 7869 7427 ],..... '-exit'\n+00029f40: 203d 3e20 3129 3b0a 0a09 0926 3a3a 6d61 => 1);....&::ma\n+00029f50: 6b65 4669 6c65 5061 7468 2822 2474 6172 keFilePath(\"$tar\n+00029f60: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file\", $\n+00029f70: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL\n+00029f80: 696e 6b73 3b0a 0a09 096d 7920 2463 7020 inks;....my $cp \n+00029f90: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new(\n+00029fa0: 272d 6578 6563 2720 3d3e 2024 676e 7543 '-exec' => $gnuC\n+00029fb0: 6f70 792c 0a20 2020 2020 2020 2020 2020 opy,. \n+00029fc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00029fd0: 2020 2020 2020 2020 2020 2020 272d 7061 '-pa\n+00029fe0: 7261 6d27 203d 3e20 5b40 676e 7543 6f70 ram' => [@gnuCop\n+00029ff0: 7950 6172 2c20 2224 6469 722f 2466 696c yPar, \"$dir/$fil\n+0002a000: 6522 2c0a 0909 0909 0920 2020 2020 2020 e\",...... \n+0002a010: 2020 2020 2022 2474 6172 6765 7444 6972 \"$targetDir\n+0002a020: 2f24 6669 6c65 225d 2c0a 2020 2020 2020 /$file\"],. \n+0002a030: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a040: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a050: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n+0002a060: 2022 2474 6d70 6469 722f 676e 7563 702d \"$tmpdir/gnucp-\n+0002a070: 222c 0a20 2020 2020 2020 2020 2020 2020 \",. \n+0002a080: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a090: 2020 2020 2020 2020 2020 272d 7072 4c6f '-prLo\n+0002a0a0: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n+0002a0b0: 0924 6370 2d3e 7761 6974 2829 3b0a 0909 .$cp->wait();...\n+0002a0c0: 6d79 2024 6f75 7420 3d20 2463 702d 3e67 my $out = $cp->g\n+0002a0d0: 6574 5354 444f 5554 2829 3b0a 0909 2470 etSTDOUT();...$p\n+0002a0e0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+0002a0f0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+0002a100: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>..\n+0002a110: 0909 2020 2020 2020 5b22 5354 444f 5554 .. [\"STDOUT\n+0002a120: 206f 6620 3c24 676e 7543 6f70 7920 4067 of <$gnuCopy @g\n+0002a130: 6e75 436f 7079 5061 7220 3c24 6469 722f nuCopyPar <$dir/\n+0002a140: 2466 696c 653e 2022 202e 0a09 0909 2020 $file> \" ..... \n+0002a150: 2020 2020 2022 3c24 7461 7267 6574 4469 \"<$targetDi\n+0002a160: 722f 2466 696c 653e 3a22 2c20 4024 6f75 r/$file>:\", @$ou\n+0002a170: 745d 290a 0909 2020 2020 6966 2028 4024 t])... if (@$\n+0002a180: 6f75 7420 3e20 3029 3b0a 0909 246f 7574 out > 0);...$out\n+0002a190: 203d 2024 6370 2d3e 6765 7453 5444 4552 = $cp->getSTDER\n+0002a1a0: 5228 293b 0a09 0924 7072 4c6f 672d 3e70 R();...$prLog->p\n+0002a1b0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+0002a1c0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n+0002a1d0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n+0002a1e0: 205b 2253 5444 4552 5220 6f66 203c 2467 [\"STDERR of <$g\n+0002a1f0: 6e75 436f 7079 2040 676e 7543 6f70 7950 nuCopy @gnuCopyP\n+0002a200: 6172 203c 2464 6972 2f24 6669 6c65 3e22 ar <$dir/$file>\"\n+0002a210: 202e 0a09 0909 2020 2020 2020 2022 3c24 ..... \"<$\n+0002a220: 7461 7267 6574 4469 722f 2464 6972 3e3a targetDir/$dir>:\n+0002a230: 222c 2040 246f 7574 5d29 0a09 0920 2020 \", @$out])... \n+0002a240: 2069 6620 2840 246f 7574 203e 2030 293b if (@$out > 0);\n+0002a250: 0a0a 2020 2020 2020 2020 2020 2020 2020 .. \n+0002a260: 2020 6966 2028 2470 7265 7365 7276 6550 if ($preserveP\n+0002a270: 6572 6d73 290a 0909 7b0a 2020 2020 2020 erms)...{. \n+0002a280: 2020 2020 2020 2020 2020 2020 2020 6368 ch\n+0002a290: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n+0002a2a0: 2224 7461 7267 6574 4469 722f 2466 696c \"$targetDir/$fil\n+0002a2b0: 6522 3b0a 2020 2020 2020 2020 2020 2020 e\";. \n+0002a2c0: 2020 2020 2020 2020 6368 6d6f 6420 246d chmod $m\n+0002a2d0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, \"$targetDir\n+0002a2e0: 2f24 6669 6c65 223b 0a20 2020 2020 2020 /$file\";. \n+0002a2f0: 2020 2020 2020 2020 2020 2020 2075 7469 uti\n+0002a300: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim\n+0002a310: 652c 2022 2464 6972 2f24 6669 6c65 2220 e, \"$dir/$file\" \n+0002a320: 6966 2024 7265 7365 7441 7469 6d65 3b3b if $resetAtime;;\n+0002a330: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002a340: 2020 2020 2075 7469 6d65 2024 6174 696d utime $atim\n+0002a350: 652c 2024 6d74 696d 652c 2022 2474 6172 e, $mtime, \"$tar\n+0002a360: 6765 7444 6972 2f24 6669 6c65 223b 0a20 getDir/$file\";. \n+0002a370: 2020 2020 2020 2020 2020 2020 2020 207d }\n+0002a380: 0a0a 0909 246d 6169 6e3a 3a73 7461 742d ....$main::stat-\n+0002a390: 3e69 6e63 725f 6e6f 536f 636b 6574 7328 >incr_noSockets(\n+0002a3a0: 2475 6964 2c20 2467 6964 2920 6966 2024 $uid, $gid) if $\n+0002a3b0: 7479 7065 2065 7120 2253 223b 0a09 0924 type eq \"S\";...$\n+0002a3c0: 6d61 696e 3a3a 7374 6174 2d3e 696e 6372 main::stat->incr\n+0002a3d0: 5f6e 6f42 6c6f 636b 4465 7628 2475 6964 _noBlockDev($uid\n+0002a3e0: 2c20 2467 6964 2920 6966 2024 7479 7065 , $gid) if $type\n+0002a3f0: 2065 7120 2262 223b 0a09 0924 6d61 696e eq \"b\";...$main\n+0002a400: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f43 ::stat->incr_noC\n+0002a410: 6861 7244 6576 2824 7569 642c 2024 6769 harDev($uid, $gi\n+0002a420: 6429 2069 6620 2474 7970 6520 6571 2022 d) if $type eq \"\n+0002a430: 6322 3b0a 0a09 0924 7072 4c6f 672d 3e70 c\";....$prLog->p\n+0002a440: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+0002a450: 2744 272c 0a09 0909 2020 2020 2020 272d 'D',.... '-\n+0002a460: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n+0002a470: 205b 2263 7265 6174 6564 2073 7065 6369 [\"created speci\n+0002a480: 616c 2066 696c 6520 2824 7479 7065 2920 al file ($type) \n+0002a490: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil\n+0002a4a0: 6522 5d29 0a09 0920 2020 2069 6620 2824 e\"])... if ($\n+0002a4b0: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2);\n+0002a4c0: 0a0a 0909 2461 6b74 4669 6c65 6e61 6d65 ....$aktFilename\n+0002a4d0: 2d3e 7374 6f72 6553 7065 6369 616c 2827 ->storeSpecial('\n+0002a4e0: 2d6e 616d 6527 203d 3e20 2466 696c 652c -name' => $file,\n+0002a4f0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002a500: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a510: 2020 2020 2020 2020 2020 2020 272d 7479 '-ty\n+0002a520: 7065 2720 3d3e 2024 7479 7065 2c0a 2020 pe' => $type,. \n+0002a530: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a540: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a550: 2020 2020 2020 2020 2027 2d64 6576 2720 '-dev' \n+0002a560: 3d3e 2024 6465 762c 0a20 2020 2020 2020 => $dev,. \n+0002a570: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a580: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a590: 2020 2020 272d 696e 6f64 6527 203d 3e20 '-inode' => \n+0002a5a0: 2469 6e6f 6465 2c0a 2020 2020 2020 2020 $inode,. \n+0002a5b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a5c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a5d0: 2020 2027 2d63 7469 6d65 2720 3d3e 2024 '-ctime' => $\n+0002a5e0: 6374 696d 652c 0a20 2020 2020 2020 2020 ctime,. \n+0002a5f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a600: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a610: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m\n+0002a620: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. \n+0002a630: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a640: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a650: 2027 2d61 7469 6d65 2720 3d3e 2024 6174 '-atime' => $at\n+0002a660: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. \n+0002a670: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a680: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a690: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,.\n+0002a6a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a6b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a6c0: 2020 2020 2020 2020 2020 2027 2d67 6964 '-gid\n+0002a6d0: 2720 3d3e 2024 6769 642c 0a20 2020 2020 ' => $gid,. \n+0002a6e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a6f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002a700: 2020 2020 2020 272d 6d6f 6465 2720 3d3e '-mode' =>\n+0002a710: 2024 6d6f 6465 293b 0a09 096e 6578 743b $mode);...next;\n+0002a720: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if\n+0002a730: 2028 2474 7970 6520 6571 2027 6266 2729 ($type eq 'bf')\n+0002a740: 2020 2020 2320 626c 6f63 6b20 6669 6c65 # block file\n+0002a750: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print \"\n+0002a760: 2d30 2e31 2d20 626c 6f63 6b46 696c 653a -0.1- blockFile:\n+0002a770: 203c 2474 6172 6765 7444 6972 3e3c 2466 <$targetDir><$f\n+0002a780: 696c 653e 203c 246d 6435 3e5c 6e22 3b0a ile> <$md5>\\n\";.\n+0002a790: 0909 246d 6169 6e3a 3a73 7461 742d 3e69 ..$main::stat->i\n+0002a7a0: 6e63 725f 6e6f 426c 6f63 6b65 6446 696c ncr_noBlockedFil\n+0002a7b0: 6573 2829 3b0a 0909 6966 2028 7265 6628 es();...if (ref(\n+0002a7c0: 246d 6435 2920 6571 2027 4152 5241 5927 $md5) eq 'ARRAY'\n+0002a7d0: 290a 0909 7b0a 0909 2020 2020 6d79 2028 )...{... my (\n+0002a7e0: 2472 756c 6542 532c 2024 7275 6c65 436f $ruleBS, $ruleCo\n+0002a7f0: 6d70 7265 7373 2c20 2470 6172 616c 6c65 mpress, $paralle\n+0002a800: 6c2c 2040 7275 6c65 5265 6164 290a 0909 l, @ruleRead)...\n+0002a810: 093d 2040 246d 6435 3b0a 0909 2020 2020 .= @$md5;... \n+0002a820: 2462 6c6f 636b 5061 7261 6c6c 656c 203d $blockParallel =\n+0002a830: 2024 7061 7261 6c6c 656c 3b0a 0909 2020 $parallel;... \n+0002a840: 2020 2466 6966 6f42 6c6f 636b 2d3e 6164 $fifoBlock->ad\n+0002a850: 6428 272d 7661 6c75 6527 203d 3e0a 0909 d('-value' =>...\n+0002a860: 0909 2020 2020 5b27 6669 6c65 272c 2024 .. ['file', $\n+0002a870: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid\n+0002a880: 2c20 2467 6964 2c0a 0909 0909 2020 2020 , $gid,..... \n+0002a890: 2024 6d6f 6465 2c20 2464 6576 2c20 2469 $mode, $dev, $i\n+0002a8a0: 6e6f 6465 2c20 2463 7469 6d65 2c20 246d node, $ctime, $m\n+0002a8b0: 7469 6d65 2c0a 0909 0909 2020 2020 2024 time,..... $\n+0002a8c0: 6174 696d 652c 2024 7369 7a65 2c20 2472 atime, $size, $r\n+0002a8d0: 756c 6542 532c 2024 7275 6c65 436f 6d70 uleBS, $ruleComp\n+0002a8e0: 7265 7373 2c0a 0909 0909 2020 2020 5c40 ress,..... \\@\n+0002a8f0: 7275 6c65 5265 6164 5d29 3b0a 0909 7d0a ruleRead]);...}.\n+0002a900: 0909 656c 7365 2020 2320 6e6f 7468 696e ..else # nothin\n+0002a910: 6720 6861 7320 6368 616e 6765 640a 0909 g has changed...\n+0002a920: 7b0a 0909 2020 2020 263a 3a6d 616b 6546 {... &::makeF\n+0002a930: 696c 6550 6174 6828 2224 7461 7267 6574 ilePath(\"$target\n+0002a940: 4469 722f 2466 696c 6522 2c20 2470 724c Dir/$file\", $prL\n+0002a950: 6f67 2920 6966 2024 6c61 7465 4c69 6e6b og) if $lateLink\n+0002a960: 733b 0a0a 0909 2020 2020 6d6b 6469 7220 s;.... mkdir \n+0002a970: 2224 7461 7267 6574 4469 722f 2466 696c \"$targetDir/$fil\n+0002a980: 6522 2c20 3037 3030 206f 720a 0909 0924 e\", 0700 or....$\n+0002a990: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+0002a9a0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+0002a9b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+0002a9c0: 0a09 0909 0920 2020 2020 205b 2263 616e ..... [\"can\n+0002a9d0: 6e6f 7420 6d6b 6469 7220 3c24 7461 7267 not mkdir <$targ\n+0002a9e0: 6574 4469 722f 2466 696c 653e 225d 2c0a etDir/$file>\"],.\n+0002a9f0: 0909 0909 2020 2020 2020 272d 6578 6974 .... '-exit\n+0002aa00: 2720 3d3e 2031 293b 0a09 0920 2020 2024 ' => 1);... $\n+0002aa10: 6d61 696e 3a3a 7374 6174 2d3e 696e 6372 main::stat->incr\n+0002aa20: 5f6e 6f44 6972 7328 2475 6964 2c20 2467 _noDirs($uid, $g\n+0002aa30: 6964 293b 0a0a 0909 2020 2020 6d79 2028 id);.... my (\n+0002aa40: 2478 2c20 2462 6163 6b75 7044 6972 293b $x, $backupDir);\n+0002aa50: 0a09 0920 2020 2028 2478 2c20 2478 2c20 ... ($x, $x, \n+0002aa60: 2478 2c20 2462 6163 6b75 7044 6972 2c20 $x, $backupDir, \n+0002aa70: 2478 2920 3d0a 0909 0924 6f6c 6446 696c $x) =....$oldFil\n+0002aa80: 656e 616d 652d 3e67 6574 4669 6c65 6e61 ename->getFilena\n+0002aa90: 6d65 2824 6d64 3529 3b0a 0a09 0920 2020 me($md5);.... \n+0002aaa0: 2069 6620 2824 6c61 7465 4c69 6e6b 7329 if ($lateLinks)\n+0002aab0: 0a09 0920 2020 207b 0a09 0909 6d79 2024 ... {....my $\n+0002aac0: 6672 6f6d 203d 2022 2462 6163 6b75 7044 from = \"$backupD\n+0002aad0: 6972 2f24 6669 6c65 223b 0a09 0909 6d79 ir/$file\";....my\n+0002aae0: 2024 746f 203d 2022 2474 6172 6765 7444 $to = \"$targetD\n+0002aaf0: 6972 2f24 6669 6c65 223b 0a09 0909 2470 ir/$file\";....$p\n+0002ab00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+0002ab10: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n+0002ab20: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n+0002ab30: 0909 0909 2020 2020 2020 5b22 6361 6e6e .... [\"cann\n+0002ab40: 6f74 206c 696e 6b20 3c24 6672 6f6d 2f24 ot link <$from/$\n+0002ab50: 626c 6f63 6b43 6865 636b 5375 6d46 696c blockCheckSumFil\n+0002ab60: 652e 627a 323e 222e 0a09 0909 0920 2020 e.bz2>\"...... \n+0002ab70: 2020 2022 203c 2474 6f2f 2462 6c6f 636b \" <$to/$block\n+0002ab80: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2\n+0002ab90: 3e22 5d2c 0a09 0909 0920 2020 2020 2027 >\"],..... '\n+0002aba0: 2d65 7869 7427 203d 3e20 3129 0a09 0909 -exit' => 1)....\n+0002abb0: 2020 2020 756e 6c65 7373 2028 6c69 6e6b unless (link\n+0002abc0: 2022 2466 726f 6d2f 2462 6c6f 636b 4368 \"$from/$blockCh\n+0002abd0: 6563 6b53 756d 4669 6c65 2e62 7a32 222c eckSumFile.bz2\",\n+0002abe0: 0a09 0909 0920 2020 2022 2474 6f2f 2462 ..... \"$to/$b\n+0002abf0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile\n+0002ac00: 2e62 7a32 2229 3b0a 0a09 0909 2466 726f .bz2\");.....$fro\n+0002ac10: 6d20 3d20 3a3a 7265 6c50 6174 6828 2474 m = ::relPath($t\n+0002ac20: 6172 6765 7444 6972 2c20 2466 726f 6d29 argetDir, $from)\n+0002ac30: 3b0a 0909 0924 6672 6f6d 203d 7e20 732f ;....$from =~ s/\n+0002ac40: 5c6e 2f5c 302f 6f67 3b0a 0909 0924 746f \\n/\\0/og;....$to\n+0002ac50: 203d 203a 3a72 656c 5061 7468 2824 7461 = ::relPath($ta\n+0002ac60: 7267 6574 4469 722c 2024 746f 293b 0a09 rgetDir, $to);..\n+0002ac70: 0909 2474 6f20 3d7e 2073 2f5c 6e2f 5c30 ..$to =~ s/\\n/\\0\n+0002ac80: 2f6f 673b 0a09 0909 2477 724c 6174 654c /og;....$wrLateL\n+0002ac90: 696e 6b2d 3e70 7269 6e74 2822 6c69 6e6b ink->print(\"link\n+0002aca0: 626c 6f63 6b5c 6e24 6672 6f6d 5c6e 2474 block\\n$from\\n$t\n+0002acb0: 6f5c 6e22 293b 0a09 0909 246d 6169 6e3a o\\n\");....$main:\n+0002acc0: 3a73 7461 742d 3e69 6e63 725f 6e6f 4c61 :stat->incr_noLa\n+0002acd0: 7465 4c69 6e6b 7328 2475 6964 2c20 2467 teLinks($uid, $g\n+0002ace0: 6964 293b 0a09 0920 2020 207d 0a09 0920 id);... }... \n+0002acf0: 2020 2065 6c73 650a 0909 2020 2020 7b0a else... {.\n+0002ad00: 2370 7269 6e74 2022 2d30 2e32 2068 6172 #print \"-0.2 har\n+0002ad10: 6420 6c69 6e6b 2024 6261 636b 7570 4469 d link $backupDi\n+0002ad20: 722f 2466 696c 6520 2474 6172 6765 7444 r/$file $targetD\n+0002ad30: 6972 2f24 6669 6c65 5c6e 223b 0a09 0909 ir/$file\\n\";....\n+0002ad40: 263a 3a68 6172 644c 696e 6b44 6972 2822 &::hardLinkDir(\"\n+0002ad50: 2462 6163 6b75 7044 6972 2f24 6669 6c65 $backupDir/$file\n+0002ad60: 222c 0a09 0909 0920 2020 2020 2020 2224 \",..... \"$\n+0002ad70: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n+0002ad80: 2c20 272e 2a27 2c20 2470 724c 6f67 293b , '.*', $prLog);\n+0002ad90: 0a09 0909 6d79 2024 626c 6f63 6b4d 4435 ....my $blockMD5\n+0002ada0: 4669 6c65 203d 2022 2474 6172 6765 7444 File = \"$targetD\n+0002adb0: 6972 2f24 6669 6c65 2f24 626c 6f63 6b43 ir/$file/$blockC\n+0002adc0: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2\"\n+0002add0: 3b0a 0909 096d 7920 2462 6c6f 636b 203d ;....my $block =\n+0002ade0: 2070 6970 6546 726f 6d46 6f72 6b2d 3e6e pipeFromFork->n\n+0002adf0: 6577 2827 2d65 7865 6327 203d 3e20 2762 ew('-exec' => 'b\n+0002ae00: 7a69 7032 272c 0a09 0909 0909 0920 2020 zip2',....... \n+0002ae10: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [\n+0002ae20: 272d 6427 5d2c 0a09 0909 0909 0920 2020 '-d'],....... \n+0002ae30: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $\n+0002ae40: 626c 6f63 6b4d 4435 4669 6c65 2c0a 0909 blockMD5File,...\n+0002ae50: 0909 0909 2020 2020 2020 272d 6f75 7452 .... '-outR\n+0002ae60: 616e 646f 6d27 203d 3e0a 0909 0909 0909 andom' =>.......\n+0002ae70: 2020 2020 2020 272f 746d 702f 7374 6275 '/tmp/stbu\n+0002ae80: 5069 7065 4672 6f6d 3131 2d27 2c0a 0909 PipeFrom11-',...\n+0002ae90: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+0002aea0: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n+0002aeb0: 0909 6d79 2024 6c3b 0a09 0909 7768 696c ..my $l;....whil\n+0002aec0: 6520 2824 6c20 3d20 2462 6c6f 636b 2d3e e ($l = $block->\n+0002aed0: 7265 6164 2829 290a 0909 097b 0a09 0909 read())....{....\n+0002aee0: 2020 2020 6368 6f70 2024 6c3b 0a09 0909 chop $l;....\n+0002aef0: 2020 2020 6d79 2028 2462 6c6f 636b 4d44 my ($blockMD\n+0002af00: 352c 2024 636f 6d70 722c 2024 626c 6f63 5, $compr, $bloc\n+0002af10: 6b46 696c 656e 616d 6529 0a09 0909 093d kFilename).....=\n+0002af20: 2073 706c 6974 282f 5c73 2f2c 2024 6c2c split(/\\s/, $l,\n+0002af30: 2033 293b 0a09 0909 2020 2020 2461 6b74 3);.... $akt\n+0002af40: 4669 6c65 6e61 6d65 2d3e 7374 6f72 6542 Filename->storeB\n+0002af50: 6c6f 636b 2827 2d66 696c 656e 616d 6527 lock('-filename'\n+0002af60: 203d 3e20 2462 6c6f 636b 4669 6c65 6e61 => $blockFilena\n+0002af70: 6d65 2c0a 0909 0909 0909 2020 2020 2027 me,....... '\n+0002af80: 2d6d 6435 7375 6d27 203d 3e20 2462 6c6f -md5sum' => $blo\n+0002af90: 636b 4d44 352c 0a09 0909 0909 0920 2020 ckMD5,....... \n+0002afa0: 2020 272d 636f 6d70 7227 203d 3e20 2463 '-compr' => $c\n+0002afb0: 6f6d 7072 293b 0a23 7072 696e 7420 2262 ompr);.#print \"b\n+0002afc0: 6c6f 636b 4d44 3520 3d20 2462 6c6f 636b lockMD5 = $block\n+0002afd0: 4d44 352c 2063 6f6d 7072 203d 2024 636f MD5, compr = $co\n+0002afe0: 6d70 722c 2062 6c6f 636b 4669 6c65 6e61 mpr, blockFilena\n+0002aff0: 6d65 203d 2024 626c 6f63 6b46 696c 656e me = $blockFilen\n+0002b000: 616d 655c 6e22 3b0a 0909 097d 0a09 0909 ame\\n\";....}....\n+0002b010: 6d79 2024 6f75 7420 3d20 2462 6c6f 636b my $out = $block\n+0002b020: 2d3e 6765 7453 5444 4552 5228 293b 0a09 ->getSTDERR();..\n+0002b030: 0909 6966 2028 4024 6f75 7429 0a09 0909 ..if (@$out)....\n+0002b040: 7b0a 0909 0920 2020 2024 7072 4c6f 672d {.... $prLog-\n+0002b050: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+0002b060: 3e20 2745 272c 0a09 0909 0909 2020 272d > 'E',...... '-\n+0002b070: 7374 7227 203d 3e0a 0909 0909 0920 205b str' =>...... [\n+0002b080: 2272 6561 6469 6e67 2066 726f 6d20 2462 \"reading from $b\n+0002b090: 6c6f 636b 4d44 3546 696c 6520 6765 6e65 lockMD5File gene\n+0002b0a0: 7261 7465 6422 2c0a 0909 0909 0920 2020 rated\",...... \n+0002b0b0: 4024 6f75 745d 293b 0a09 0909 2020 2020 @$out]);.... \n+0002b0c0: 7265 7475 726e 2030 3b0a 0909 097d 0a09 return 0;....}..\n+0002b0d0: 0909 2462 6c6f 636b 2d3e 636c 6f73 6528 ..$block->close(\n+0002b0e0: 293b 0a0a 0909 0969 6620 2824 7072 6573 );.....if ($pres\n+0002b0f0: 6572 7665 5065 726d 7329 0a09 0909 7b0a ervePerms)....{.\n+0002b100: 0909 0920 2020 2063 686f 776e 2024 7569 ... chown $ui\n+0002b110: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, \"$targe\n+0002b120: 7444 6972 2f24 6669 6c65 223b 0a09 0909 tDir/$file\";....\n+0002b130: 2020 2020 6d79 2024 6d20 3d20 246d 6f64 my $m = $mod\n+0002b140: 653b 0a09 0909 2020 2020 246d 2026 3d20 e;.... $m &= \n+0002b150: 3037 3737 3b20 2020 2023 2073 7472 6970 0777; # strip\n+0002b160: 2073 7065 6369 616c 2070 6572 6d69 7373 special permiss\n+0002b170: 696f 6e73 0a09 0909 2020 2020 246d 207c ions.... $m |\n+0002b180: 3d20 3031 3131 3b20 2020 2023 2061 6464 = 0111; # add\n+0002b190: 2064 6972 6563 746f 7279 2070 6572 6d69 directory permi\n+0002b1a0: 7373 696f 6e73 0a09 0909 2020 2020 6368 ssions.... ch\n+0002b1b0: 6d6f 6420 246d 2c20 2224 7461 7267 6574 mod $m, \"$target\n+0002b1c0: 4469 722f 2466 696c 6522 3b0a 0909 0920 Dir/$file\";.... \n+0002b1d0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime,\n+0002b1e0: 2024 6d74 696d 652c 2022 4469 722f 2466 $mtime, \"Dir/$f\n+0002b1f0: 696c 6522 2069 6620 2472 6573 6574 4174 ile\" if $resetAt\n+0002b200: 696d 653b 3b0a 0909 0920 2020 2075 7469 ime;;.... uti\n+0002b210: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim\n+0002b220: 652c 2022 2474 6172 6765 7444 6972 2f24 e, \"$targetDir/$\n+0002b230: 6669 6c65 223b 0a09 0909 7d0a 0909 2020 file\";....}... \n+0002b240: 2020 7d0a 0a09 0920 2020 2024 616b 7446 }.... $aktF\n+0002b250: 696c 656e 616d 652d 3e73 746f 7265 2827 ilename->store('\n+0002b260: 2d66 696c 656e 616d 6527 203d 3e20 2466 -filename' => $f\n+0002b270: 696c 652c 2320 7370 6569 6368 6572 7420 ile,# speichert \n+0002b280: 696e 2064 626d 0a09 0909 0909 272d 6d64 in dbm......'-md\n+0002b290: 3573 756d 2720 3d3e 2024 6d64 352c 2020 5sum' => $md5, \n+0002b2a0: 2023 202e 6d64 3573 756d 2d44 6174 6569 # .md5sum-Datei\n+0002b2b0: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' =\n+0002b2c0: 3e20 2762 272c 0a09 0909 0909 272d 6465 > 'b',......'-de\n+0002b2d0: 7627 203d 3e20 2464 6576 2c0a 0909 0909 v' => $dev,.....\n+0002b2e0: 0927 2d69 6e6f 6465 2720 3d3e 2024 696e .'-inode' => $in\n+0002b2f0: 6f64 652c 0a09 0909 0909 272d 696e 6f64 ode,......'-inod\n+0002b300: 6542 6163 6b75 7027 203d 3e20 302c 0a09 eBackup' => 0,..\n+0002b310: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => \n+0002b320: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m\n+0002b330: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime,\n+0002b340: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' =\n+0002b350: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......'\n+0002b360: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim\n+0002b370: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' \n+0002b380: 3d3e 2024 7369 7a65 2c0a 0909 0909 0927 => $size,......'\n+0002b390: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,..\n+0002b3a0: 0909 0909 272d 6769 6427 203d 3e20 2467 ....'-gid' => $g\n+0002b3b0: 6964 2c0a 0909 0909 0927 2d6d 6f64 6527 id,......'-mode'\n+0002b3c0: 203d 3e20 246d 6f64 6529 3b0a 0909 7d0a => $mode);...}.\n+0002b3d0: 0909 6e65 7874 3b0a 0a09 2020 2020 7d0a ..next;... }.\n+0002b3e0: 0a09 2020 2020 230a 0920 2020 2023 2028 .. #.. # (\n+0002b3f0: 2474 7970 6520 6571 2027 6627 2920 2d3e $type eq 'f') ->\n+0002b400: 206e 6f72 6d61 6c20 6669 6c65 0a09 2020 normal file.. \n+0002b410: 2020 230a 0920 2020 2024 6d61 696e 3a3a #.. $main::\n+0002b420: 7374 6174 2d3e 6164 6453 756d 4f72 6967 stat->addSumOrig\n+0002b430: 4669 6c65 7328 2473 697a 652c 2024 7569 Files($size, $ui\n+0002b440: 642c 2024 6769 6429 3b0a 0a09 2020 2020 d, $gid);... \n+0002b450: 6d79 2028 2463 6f6d 7072 4f6c 642c 2024 my ($comprOld, $\n+0002b460: 6c69 6e6b 4669 6c65 2c20 246e 6577 4669 linkFile, $newFi\n+0002b470: 6c65 2c20 246f 6c64 4669 6c65 293b 0a09 le, $oldFile);..\n+0002b480: 2020 2020 6d79 2028 2469 6e6f 6465 4261 my ($inodeBa\n+0002b490: 636b 7570 2c20 2462 6163 6b75 7044 6972 ckup, $backupDir\n+0002b4a0: 496e 6465 782c 2024 6261 636b 7570 4469 Index, $backupDi\n+0002b4b0: 7229 3b0a 0920 2020 206d 7920 2469 6e74 r);.. my $int\n+0002b4c0: 6572 6e61 6c4f 6c64 3b0a 0920 2020 2069 ernalOld;.. i\n+0002b4d0: 6620 2824 7479 7065 2065 7120 2766 6e65 f ($type eq 'fne\n+0002b4e0: 7727 2920 2020 2020 2320 7072 6576 696f w') # previo\n+0002b4f0: 7573 2062 6163 6b75 7020 7769 7468 2074 us backup with t\n+0002b500: 6869 730a 0920 2020 207b 2020 2020 2020 his.. { \n+0002b510: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002b520: 2020 2320 6669 6c65 2077 6173 2062 6c6f # file was blo\n+0002b530: 636b 6564 2c20 736f 2066 6f72 6365 0a09 cked, so force..\n+0002b540: 0924 6c69 6e6b 4669 6c65 203d 2075 6e64 .$linkFile = und\n+0002b550: 6566 3b20 2020 2320 636f 6d70 7265 7373 ef; # compress\n+0002b560: 206f 7220 636f 7079 0a09 2020 2020 7d0a or copy.. }.\n+0002b570: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. {\n+0002b580: 0a09 0923 206a 6574 7a74 2069 6e20 4442 ...# jetzt in DB\n+0002b590: 4d2d 4669 6c65 7320 6e61 6368 7365 6865 M-Files nachsehe\n+0002b5a0: 6e20 756e 6420 6c69 6e6b 656e 0a09 0969 n und linken...i\n+0002b5b0: 6620 2828 2824 696e 6f64 6542 6163 6b75 f ((($inodeBacku\n+0002b5c0: 702c 2024 636f 6d70 724f 6c64 2c20 2462 p, $comprOld, $b\n+0002b5d0: 6163 6b75 7044 6972 496e 6465 782c 0a09 ackupDirIndex,..\n+0002b5e0: 0920 2020 2020 2024 6261 636b 7570 4469 . $backupDi\n+0002b5f0: 722c 2024 6c69 6e6b 4669 6c65 2920 3d0a r, $linkFile) =.\n+0002b600: 0909 2020 2020 2024 6f6c 6446 696c 656e .. $oldFilen\n+0002b610: 616d 652d 3e67 6574 4669 6c65 6e61 6d65 ame->getFilename\n+0002b620: 2824 6d64 3529 2920 3d3d 2035 290a 0909 ($md5)) == 5)...\n+0002b630: 7b0a 0909 2020 2020 246e 6577 4669 6c65 {... $newFile\n+0002b640: 203d 2022 2474 6172 6765 7444 6972 2f24 = \"$targetDir/$\n+0002b650: 6669 6c65 223b 0a09 0920 2020 2024 6f6c file\";... $ol\n+0002b660: 6446 696c 6520 3d20 2224 6261 636b 7570 dFile = \"$backup\n+0002b670: 4469 722f 246c 696e 6b46 696c 6522 3b0a Dir/$linkFile\";.\n+0002b680: 0909 2020 2020 2469 6e74 6572 6e61 6c4f .. $internalO\n+0002b690: 6c64 203d 2028 2462 6163 6b75 7044 6972 ld = ($backupDir\n+0002b6a0: 496e 6465 7820 3d3d 2030 2920 3f0a 0909 Index == 0) ?...\n+0002b6b0: 0927 696e 7465 726e 616c 2720 3a20 276f .'internal' : 'o\n+0002b6c0: 6c64 273b 0a23 7072 696e 7420 222d 312d ld';.#print \"-1-\n+0002b6d0: 2024 6e65 7746 696c 6520 246f 6c64 4669 $newFile $oldFi\n+0002b6e0: 6c65 5c6e 223b 0a09 0920 2020 206d 7920 le\\n\";... my \n+0002b6f0: 2824 782c 2024 6f6c 6453 697a 6529 3b0a ($x, $oldSize);.\n+0002b700: 0909 2020 2020 6966 2028 2462 6163 6b75 .. if ($backu\n+0002b710: 7044 6972 496e 6465 7820 3d3d 2030 2920 pDirIndex == 0) \n+0002b720: 2023 2066 6972 7374 206f 6363 7572 7265 # first occurre\n+0002b730: 6e63 650a 0909 2020 2020 7b20 2020 2020 nce... { \n+0002b740: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002b750: 2020 2020 2023 2069 6e20 736f 7572 6365 # in source\n+0002b760: 4469 720a 0909 0969 6620 282d 6520 2224 Dir....if (-e \"$\n+0002b770: 736f 7572 6365 4469 722f 246c 696e 6b46 sourceDir/$linkF\n+0002b780: 696c 6522 290a 0909 097b 0a09 0909 2020 ile\")....{.... \n+0002b790: 2020 246f 6c64 5369 7a65 203d 2028 7374 $oldSize = (st\n+0002b7a0: 6174 2822 2473 6f75 7263 6544 6972 2f24 at(\"$sourceDir/$\n+0002b7b0: 6c69 6e6b 4669 6c65 2229 295b 375d 3b0a linkFile\"))[7];.\n+0002b7c0: 0909 097d 0a09 0909 656c 7365 0a09 0909 ...}....else....\n+0002b7d0: 7b0a 0909 0920 2020 2024 6f6c 6453 697a {.... $oldSiz\n+0002b7e0: 6520 3d20 2d31 3b0a 0909 097d 0a09 0920 e = -1;....}... \n+0002b7f0: 2020 207d 0a09 0920 2020 2065 6c73 650a }... else.\n+0002b800: 0909 2020 2020 7b0a 0909 0928 2478 2c20 .. {....($x, \n+0002b810: 2478 2c20 2478 2c20 246f 6c64 5369 7a65 $x, $x, $oldSize\n+0002b820: 2c20 2478 2920 3d0a 0909 0920 2020 2024 , $x) =.... $\n+0002b830: 6f6c 6446 696c 656e 616d 652d 3e67 6574 oldFilename->get\n+0002b840: 496e 6f64 6562 6163 6b75 7043 6f6d 7072 InodebackupCompr\n+0002b850: 4374 696d 654d 7469 6d65 5369 7a65 4d44 CtimeMtimeSizeMD\n+0002b860: 3528 246c 696e 6b46 696c 6529 3b0a 0909 5($linkFile);...\n+0002b870: 2020 2020 7d0a 0909 2020 2020 6966 2028 }... if (\n+0002b880: 246f 6c64 5369 7a65 2021 3d20 2473 697a $oldSize != $siz\n+0002b890: 6520 616e 6420 246f 6c64 5369 7a65 203e e and $oldSize >\n+0002b8a0: 202d 3129 0a09 0920 2020 207b 0a09 0909 -1)... {....\n+0002b8b0: 6d79 2024 636f 6d6d 656e 7420 3d20 2463 my $comment = $c\n+0002b8c0: 6f6d 7072 4f6c 6420 6571 2027 7527 3f20 omprOld eq 'u'? \n+0002b8d0: 2727 203a 0a09 0909 2020 2020 2720 2877 '' :.... ' (w\n+0002b8e0: 6974 6820 756e 636f 6d70 7265 7373 6564 ith uncompressed\n+0002b8f0: 2066 696c 6573 2066 726f 6d20 6261 636b files from back\n+0002b900: 7570 2927 3b0a 0909 0924 7072 4c6f 672d up)';....$prLog-\n+0002b910: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+0002b920: 3e20 2757 272c 0a09 0909 0920 2020 2020 > 'W',..... \n+0002b930: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n+0002b940: 2020 2020 205b 2270 6f73 7369 626c 6520 [\"possible \n+0002b950: 6861 7368 2063 6f6c 6c69 7369 6f6e 2062 hash collision b\n+0002b960: 6574 7765 656e 222c 0a09 0909 0920 2020 etween\",..... \n+0002b970: 2020 2022 3c24 6f6c 6446 696c 653e 2028 \"<$oldFile> (\n+0002b980: 7369 7a65 203d 2024 6f6c 6453 697a 6529 size = $oldSize)\n+0002b990: 2061 6e64 222c 0a09 0909 0920 2020 2020 and\",..... \n+0002b9a0: 2022 3c24 6e65 7746 696c 653e 2028 7369 \"<$newFile> (si\n+0002b9b0: 7a65 203d 2024 7369 7a65 2922 2c0a 0909 ze = $size)\",...\n+0002b9c0: 0909 2020 2020 2020 2022 6e6f 7420 6c69 .. \"not li\n+0002b9d0: 6e6b 6564 2c20 6368 6563 6b20 6d64 3520 nked, check md5 \n+0002b9e0: 7375 6d73 2463 6f6d 6d65 6e74 225d 290a sums$comment\"]).\n+0002b9f0: 0909 0920 2020 2075 6e6c 6573 7320 6578 ... unless ex\n+0002ba00: 6973 7473 2024 7375 7070 7265 7373 5761 ists $suppressWa\n+0002ba10: 726e 696e 677b 2768 6173 6843 6f6c 6c69 rning{'hashColli\n+0002ba20: 7369 6f6e 277d 3b0a 0909 0924 6c69 6e6b sion'};....$link\n+0002ba30: 4669 6c65 203d 2075 6e64 6566 3b20 2020 File = undef; \n+0002ba40: 2320 646f 206e 6f74 206c 696e 6b0a 0909 # do not link...\n+0002ba50: 2020 2020 7d0a 0909 7d0a 0909 656c 7365 }...}...else\n+0002ba60: 2020 2020 2020 2020 2020 2020 2023 2044 # D\n+0002ba70: 6174 6569 2069 7374 206e 6f63 6820 6e69 atei ist noch ni\n+0002ba80: 6368 7420 6265 6b61 6e6e 740a 0909 7b0a cht bekannt...{.\n+0002ba90: 0909 2020 2020 246c 696e 6b46 696c 6520 .. $linkFile \n+0002baa0: 3d20 756e 6465 663b 0a09 097d 0a09 2020 = undef;...}.. \n+0002bab0: 2020 7d0a 0a23 7072 696e 7420 222d 2d2d }..#print \"---\n+0002bac0: 2d2d 2d2d 2d2d 2d2d 2d2d 2024 6469 722f ---------- $dir/\n+0002bad0: 2466 696c 6524 706f 7374 6669 785c 6e22 $file$postfix\\n\"\n+0002bae0: 3b0a 2020 2020 2020 2020 2020 2020 6966 ;. if\n+0002baf0: 2028 246c 696e 6b46 696c 6520 616e 640a ($linkFile and.\n+0002bb00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002bb10: 2463 6f6d 7072 4f6c 6420 6571 2027 6327 $comprOld eq 'c'\n+0002bb20: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n+0002bb30: 2020 2020 202d 6520 2224 6469 722f 2466 -e \"$dir/$f\n+0002bb40: 696c 6524 706f 7374 6669 7822 290a 0920 ile$postfix\").. \n+0002bb50: 2020 207b 0a20 2020 2020 2020 2020 2020 {. \n+0002bb60: 2020 2020 2024 6c69 6e6b 4669 6c65 203d $linkFile =\n+0002bb70: 2075 6e64 6566 3b0a 2370 7269 6e74 2022 undef;.#print \"\n+0002bb80: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d20 666f ------------- fo\n+0002bb90: 756e 6420 7468 6174 2066 696c 655c 6e22 und that file\\n\"\n+0002bba0: 3b0a 2020 2020 2020 2020 2020 2020 7d0a ;. }.\n+0002bbb0: 0a23 7072 696e 7420 222d 322d 5c6e 223b .#print \"-2-\\n\";\n+0002bbc0: 0a09 2020 2020 6966 2028 246c 696e 6b46 .. if ($linkF\n+0002bbd0: 696c 6529 0a09 2020 2020 7b0a 2370 7269 ile).. {.#pri\n+0002bbe0: 6e74 2022 2d33 2d5c 6e22 3b0a 2020 2020 nt \"-3-\\n\";. \n+0002bbf0: 2020 2020 2020 2020 2020 2020 2320 416c # Al\n+0002bc00: 7465 2044 6174 6569 206b 6f6d 7072 696d te Datei komprim\n+0002bc10: 6965 7274 0a09 0969 6620 2824 636f 6d70 iert...if ($comp\n+0002bc20: 724f 6c64 2065 7120 2763 2729 0a09 097b rOld eq 'c')...{\n+0002bc30: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002bc40: 2020 2020 2024 6e65 7746 696c 6520 2e3d $newFile .=\n+0002bc50: 2024 706f 7374 6669 783b 0a20 2020 2020 $postfix;. \n+0002bc60: 2020 2020 2020 2020 2020 2020 2020 2024 $\n+0002bc70: 6f6c 6446 696c 6520 2e3d 2024 706f 7374 oldFile .= $post\n+0002bc80: 6669 783b 0a09 097d 0a0a 0a20 2020 2020 fix;...}... \n+0002bc90: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo\n+0002bca0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+0002bcb0: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. \n+0002bcc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002bcd0: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' =>\n+0002bce0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002bcf0: 2020 2020 2020 2020 2020 2020 2020 205b [\n+0002bd00: 226c 696e 6b20 246f 6c64 4669 6c65 2024 \"link $oldFile $\n+0002bd10: 6e65 7746 696c 6522 5d29 0a20 2020 2020 newFile\"]). \n+0002bd20: 2020 2020 2020 2020 2020 2020 2020 2069 i\n+0002bd30: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >=\n+0002bd40: 2032 293b 0a0a 2020 2020 2020 2020 2020 2);.. \n+0002bd50: 2020 2020 2020 2320 4368 6563 6b20 6578 # Check ex\n+0002bd60: 6973 7465 6e63 652c 206c 6174 654c 696e istence, lateLin\n+0002bd70: 6b73 206e 6f74 2073 6574 2061 6e64 206f ks not set and o\n+0002bd80: 6c64 4669 6c65 2064 6f65 7320 6e6f 7420 ldFile does not \n+0002bd90: 6578 6973 740a 2020 2020 2020 2020 2020 exist. \n+0002bda0: 2020 2020 2020 756e 6c65 7373 2028 246c unless ($l\n+0002bdb0: 6174 654c 696e 6b73 206f 7220 246f 6c64 ateLinks or $old\n+0002bdc0: 4669 6c65 290a 0909 7b0a 0909 2020 2020 File)...{... \n+0002bdd0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0002bde0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+0002bdf0: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n+0002be00: 0909 2020 5b22 2877 6974 6820 6f6c 6429 .. [\"(with old)\n+0002be10: 2063 616e 6e6f 7420 6c69 6e6b 2028 7669 cannot link (vi\n+0002be20: 6120 6d64 3529 2022 202e 0a09 0909 0920 a md5) \" ...... \n+0002be30: 2020 223c 246f 6c64 4669 6c65 3e20 3c24 \"<$oldFile> <$\n+0002be40: 6e65 7746 696c 653e 225d 290a 0909 0969 newFile>\"])....i\n+0002be50: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >=\n+0002be60: 2031 293b 0a09 0920 2020 2024 6c69 6e6b 1);... $link\n+0002be70: 4669 6c65 203d 2075 6e64 6566 3b0a 0909 File = undef;...\n+0002be80: 2020 2020 246f 6c64 4669 6c65 6e61 6d65 $oldFilename\n+0002be90: 2d3e 6465 6c65 7465 456e 7472 7928 246d ->deleteEntry($m\n+0002bea0: 6435 2c20 2020 2023 2069 6e20 5a75 6b75 d5, # in Zuku\n+0002beb0: 6e66 7420 6e69 6368 7420 6d65 6872 0a09 nft nicht mehr..\n+0002bec0: 0909 0909 2020 2020 2020 2466 696c 6529 .... $file)\n+0002bed0: 3b20 2023 206d 6974 2064 6965 7365 7220 ; # mit dieser \n+0002bee0: 4461 7465 6920 6c69 6e6b 656e 0a20 2020 Datei linken. \n+0002bef0: 2020 2020 2020 2020 2020 2020 207d 0a0a }..\n+0002bf00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002bf10: 2320 496e 2044 6174 6569 2073 6368 7265 # In Datei schre\n+0002bf20: 6962 656e 0a20 2020 2020 2020 2020 2020 iben. \n+0002bf30: 2020 2020 2069 6620 2824 6c61 7465 4c69 if ($lateLi\n+0002bf40: 6e6b 7329 0a09 097b 0a09 0920 2020 202b nks)...{... +\n+0002bf50: 2b24 616c 6c42 6163 6b75 7044 6972 737b +$allBackupDirs{\n+0002bf60: 2462 6163 6b75 7044 6972 7d0a 0909 2020 $backupDir}... \n+0002bf70: 2020 2020 2020 6966 2024 6261 636b 7570 if $backup\n+0002bf80: 4469 7220 6e65 2024 7461 7267 6574 4469 Dir ne $targetDi\n+0002bf90: 723b 0a09 0920 2020 206d 7920 2465 7869 r;... my $exi\n+0002bfa0: 7374 696e 6746 696c 6520 3d20 3a3a 7265 stingFile = ::re\n+0002bfb0: 6c50 6174 6828 2474 6172 6765 7444 6972 lPath($targetDir\n+0002bfc0: 2c20 246f 6c64 4669 6c65 293b 0a09 0920 , $oldFile);... \n+0002bfd0: 2020 206d 7920 246e 6577 4c69 6e6b 203d my $newLink =\n+0002bfe0: 203a 3a72 656c 5061 7468 2824 7461 7267 ::relPath($targ\n+0002bff0: 6574 4469 722c 2024 6e65 7746 696c 6529 etDir, $newFile)\n+0002c000: 3b0a 0a09 0920 2020 2024 6578 6973 7469 ;.... $existi\n+0002c010: 6e67 4669 6c65 203d 7e20 732f 5c6e 2f5c ngFile =~ s/\\n/\\\n+0002c020: 302f 6f67 3b0a 0909 2020 2020 246e 6577 0/og;... $new\n+0002c030: 4c69 6e6b 203d 7e20 732f 5c6e 2f5c 302f Link =~ s/\\n/\\0/\n+0002c040: 6f67 3b0a 0909 2020 2020 2477 724c 6174 og;... $wrLat\n+0002c050: 654c 696e 6b2d 3e70 7269 6e74 2822 6c69 eLink->print(\"li\n+0002c060: 6e6b 2024 6d64 355c 6e24 6578 6973 7469 nk $md5\\n$existi\n+0002c070: 6e67 4669 6c65 5c6e 246e 6577 4c69 6e6b ngFile\\n$newLink\n+0002c080: 5c6e 2229 3b0a 0a09 0920 2020 2024 6d61 \\n\");.... $ma\n+0002c090: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n+0002c0a0: 6f4c 6174 654c 696e 6b73 2824 7569 642c oLateLinks($uid,\n+0002c0b0: 2024 6769 6429 3b0a 0a20 2020 2020 2020 $gid);.. \n+0002c0c0: 2020 2020 2020 2020 2020 2020 2023 2053 # S\n+0002c0d0: 6368 7265 6962 656e 2064 6572 2049 6e66 chreiben der Inf\n+0002c0e0: 6f72 6d61 7469 6f6e 656e 0a20 2020 2020 ormationen. \n+0002c0f0: 2020 2020 2020 2020 2020 2020 2020 2024 $\n+0002c100: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto\n+0002c110: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' =\n+0002c120: 3e20 2466 696c 652c 0a20 2020 2020 2020 > $file,. \n+0002c130: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c140: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c150: 2027 2d6d 6435 7375 6d27 203d 3e20 246d '-md5sum' => $m\n+0002c160: 6435 2c0a 0909 0909 0927 2d63 6f6d 7072 d5,......'-compr\n+0002c170: 2720 3d3e 2024 636f 6d70 724f 6c64 2c0a ' => $comprOld,.\n+0002c180: 0909 0909 0927 2d64 6576 2720 3d3e 2024 .....'-dev' => $\n+0002c190: 6465 762c 0a09 0909 0909 272d 696e 6f64 dev,......'-inod\n+0002c1a0: 6527 203d 3e20 2469 6e6f 6465 2c0a 0909 e' => $inode,...\n+0002c1b0: 0909 0927 2d69 6e6f 6465 4261 636b 7570 ...'-inodeBackup\n+0002c1c0: 2720 3d3e 2024 696e 6f64 6542 6163 6b75 ' => $inodeBacku\n+0002c1d0: 702c 0a09 0909 0909 272d 6374 696d 6527 p,......'-ctime'\n+0002c1e0: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,.....\n+0002c1f0: 0927 2d6d 7469 6d65 2720 3d3e 2024 6d74 .'-mtime' => $mt\n+0002c200: 696d 652c 0a09 0909 0909 272d 6174 696d ime,......'-atim\n+0002c210: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,...\n+0002c220: 0909 0927 2d73 697a 6527 203d 3e20 2473 ...'-size' => $s\n+0002c230: 697a 652c 0a09 0909 0909 272d 7569 6427 ize,......'-uid'\n+0002c240: 203d 3e20 2475 6964 2c0a 0909 0909 0927 => $uid,......'\n+0002c250: 2d67 6964 2720 3d3e 2024 6769 642c 0a09 -gid' => $gid,..\n+0002c260: 0909 0909 272d 6d6f 6465 2720 3d3e 2024 ....'-mode' => $\n+0002c270: 6d6f 6465 2c0a 0909 0909 0927 2d73 746f mode,......'-sto\n+0002c280: 7265 496e 4442 4d27 203d 3e20 3020 2023 reInDBM' => 0 #\n+0002c290: 2069 6e20 6462 6d20 7369 6e6e 6c6f 730a in dbm sinnlos.\n+0002c2a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c2b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c2c0: 2020 2020 2020 2029 3b0a 2020 2020 2020 );. \n+0002c2d0: 2020 2020 2020 2020 2020 7d0a 0909 656c }...el\n+0002c2e0: 7365 2020 2320 4f64 6572 2064 6972 656b se # Oder direk\n+0002c2f0: 7420 6c69 6e6b 656e 0a09 097b 0a09 0920 t linken...{... \n+0002c300: 2020 2069 6620 286c 696e 6b20 246f 6c64 if (link $old\n+0002c310: 4669 6c65 2c20 246e 6577 4669 6c65 290a File, $newFile).\n+0002c320: 0909 2020 2020 7b0a 0909 0969 6620 2824 .. {....if ($\n+0002c330: 7072 6573 6572 7665 5065 726d 7329 0a09 preservePerms)..\n+0002c340: 0909 7b0a 0909 0920 2020 2063 686f 776e ..{.... chown\n+0002c350: 2024 7569 642c 2024 6769 642c 2024 6e65 $uid, $gid, $ne\n+0002c360: 7746 696c 653b 0a09 0909 2020 2020 6368 wFile;.... ch\n+0002c370: 6d6f 6420 246d 6f64 652c 2024 6e65 7746 mod $mode, $newF\n+0002c380: 696c 653b 0a09 0909 7d0a 0a09 0909 2320 ile;....}.....# \n+0002c390: 5363 6872 6569 6265 6e20 6465 7220 496e Schreiben der In\n+0002c3a0: 666f 726d 6174 696f 6e65 6e0a 0909 0924 formationen....$\n+0002c3b0: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto\n+0002c3c0: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' =\n+0002c3d0: 3e20 2466 696c 652c 0a09 0909 0909 2020 > $file,...... \n+0002c3e0: 2020 272d 6d64 3573 756d 2720 3d3e 2024 '-md5sum' => $\n+0002c3f0: 6d64 352c 0a09 0909 0909 2020 2020 272d md5,...... '-\n+0002c400: 636f 6d70 7227 203d 3e20 2463 6f6d 7072 compr' => $compr\n+0002c410: 4f6c 642c 0a09 0909 0909 2020 2020 272d Old,...... '-\n+0002c420: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,...\n+0002c430: 0909 0920 2020 2027 2d69 6e6f 6465 2720 ... '-inode' \n+0002c440: 3d3e 2024 696e 6f64 652c 0a09 0909 0909 => $inode,......\n+0002c450: 2020 2020 272d 696e 6f64 6542 6163 6b75 '-inodeBacku\n+0002c460: 7027 203d 3e20 2469 6e6f 6465 4261 636b p' => $inodeBack\n+0002c470: 7570 2c0a 0909 0909 0920 2020 2027 2d63 up,...... '-c\n+0002c480: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime,\n+0002c490: 0a09 0909 0909 2020 2020 272d 6d74 696d ...... '-mtim\n+0002c4a0: 6527 203d 3e20 246d 7469 6d65 2c0a 0909 e' => $mtime,...\n+0002c4b0: 0909 0920 2020 2027 2d61 7469 6d65 2720 ... '-atime' \n+0002c4c0: 3d3e 2024 6174 696d 652c 0a09 0909 0909 => $atime,......\n+0002c4d0: 2020 2020 272d 7369 7a65 2720 3d3e 2024 '-size' => $\n+0002c4e0: 7369 7a65 2c0a 0909 0909 0920 2020 2027 size,...... '\n+0002c4f0: 2d75 6964 2720 3d3e 2024 7569 642c 0a09 -uid' => $uid,..\n+0002c500: 0909 0909 2020 2020 272d 6769 6427 203d .... '-gid' =\n+0002c510: 3e20 2467 6964 2c0a 0909 0909 0920 2020 > $gid,...... \n+0002c520: 2027 2d6d 6f64 6527 203d 3e20 246d 6f64 '-mode' => $mod\n+0002c530: 652c 0a09 0909 0909 2020 2020 272d 7374 e,...... '-st\n+0002c540: 6f72 6549 6e44 424d 2720 3d3e 2030 2020 oreInDBM' => 0 \n+0002c550: 2320 696e 2064 626d 2073 696e 6e6c 6f73 # in dbm sinnlos\n+0002c560: 0a09 0909 2020 2020 293b 0a09 0909 6966 .... );....if\n+0002c570: 2028 2463 6f6d 7072 4f6c 6420 6571 2027 ($comprOld eq '\n+0002c580: 7527 290a 0909 097b 0a09 0909 2020 2020 u')....{.... \n+0002c590: 246d 6169 6e3a 3a73 7461 742d 3e61 6464 $main::stat->add\n+0002c5a0: 5375 6d55 6e63 6861 6e67 6564 436f 7079 SumUnchangedCopy\n+0002c5b0: 2824 7369 7a65 293b 0a09 0909 7d0a 0909 ($size);....}...\n+0002c5c0: 0965 6c73 6520 2020 2320 2463 6f6d 7072 .else # $compr\n+0002c5d0: 4f6c 6420 6571 2027 6327 0a09 0909 7b0a Old eq 'c'....{.\n+0002c5e0: 0909 0920 2020 2024 6d61 696e 3a3a 7374 ... $main::st\n+0002c5f0: 6174 2d3e 6164 6453 756d 556e 6368 616e at->addSumUnchan\n+0002c600: 6765 6443 6f6d 7072 2824 7369 7a65 293b gedCompr($size);\n+0002c610: 0a09 0909 7d0a 0909 2020 2020 7d0a 0909 ....}... }...\n+0002c620: 2020 2020 656c 7365 0a09 0920 2020 207b else... {\n+0002c630: 0a09 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin\n+0002c640: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n+0002c650: 2c0a 0909 0909 2020 2020 2020 272d 7374 ,..... '-st\n+0002c660: 7227 203d 3e0a 0909 0909 2020 2020 2020 r' =>..... \n+0002c670: 5b22 2877 6974 6820 6f6c 6429 2063 616e [\"(with old) can\n+0002c680: 6e6f 7420 6c69 6e6b 2028 7669 6120 6d64 not link (via md\n+0002c690: 3529 2022 202e 0a09 0909 0920 2020 2020 5) \" ...... \n+0002c6a0: 2020 223c 246f 6c64 4669 6c65 3e20 3c24 \"<$oldFile> <$\n+0002c6b0: 6e65 7746 696c 653e 225d 290a 0909 0920 newFile>\"]).... \n+0002c6c0: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod\n+0002c6d0: 6520 3e3d 2031 293b 0a09 0909 246c 696e e >= 1);....$lin\n+0002c6e0: 6b46 696c 6520 3d20 756e 6465 663b 2020 kFile = undef; \n+0002c6f0: 2020 2020 2020 2023 203d 3e20 6b6f 7069 # => kopi\n+0002c700: 6572 656e 206f 6465 7220 6b6f 6d70 7269 eren oder kompri\n+0002c710: 6d69 6572 656e 0a09 0909 246f 6c64 4669 mieren....$oldFi\n+0002c720: 6c65 6e61 6d65 2d3e 6465 6c65 7465 456e lename->deleteEn\n+0002c730: 7472 7928 246d 6435 2c20 2020 2023 2069 try($md5, # i\n+0002c740: 6e20 5a75 6b75 6e66 7420 6e69 6368 7420 n Zukunft nicht \n+0002c750: 6d65 6872 0a09 0909 0909 0920 2024 6669 mehr....... $fi\n+0002c760: 6c65 293b 2020 2320 6d69 7420 6469 6573 le); # mit dies\n+0002c770: 6572 2044 6174 6569 206c 696e 6b65 6e0a er Datei linken.\n+0002c780: 0909 2020 2020 7d0a 0909 7d0a 0a20 2020 .. }...}.. \n+0002c790: 2020 2020 2020 2020 2020 2020 2023 2053 # S\n+0002c7a0: 7461 7473 206e 7572 2077 656e 6e20 7769 tats nur wenn wi\n+0002c7b0: 726b 6c69 6368 2067 656c 696e 6b74 0a20 rklich gelinkt. \n+0002c7c0: 2020 2020 2020 2020 2020 2020 2020 2069 i\n+0002c7d0: 6620 2864 6566 696e 6564 2024 6c69 6e6b f (defined $link\n+0002c7e0: 4669 6c65 290a 0909 7b0a 2020 2020 2020 File)...{. \n+0002c7f0: 2020 2020 2020 2020 2020 2020 2020 6966 if\n+0002c800: 2028 2463 6f6d 7072 4f6c 6420 6571 2027 ($comprOld eq '\n+0002c810: 7527 290a 0909 2020 2020 7b0a 2020 2020 u')... {. \n+0002c820: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c830: 2020 2020 6966 2028 2469 6e74 6572 6e61 if ($interna\n+0002c840: 6c4f 6c64 2065 7120 2769 6e74 6572 6e61 lOld eq 'interna\n+0002c850: 6c27 290a 0909 097b 0a20 2020 2020 2020 l')....{. \n+0002c860: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c870: 2020 2020 2024 6d61 696e 3a3a 7374 6174 $main::stat\n+0002c880: 2d3e 6164 6453 756d 4c69 6e6b 6564 496e ->addSumLinkedIn\n+0002c890: 7465 726e 616c 436f 7079 2824 7369 7a65 ternalCopy($size\n+0002c8a0: 293b 0a20 2020 2020 2020 2020 2020 2020 );. \n+0002c8b0: 2020 2020 2020 2020 2020 207d 0a20 2020 }. \n+0002c8c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c8d0: 2020 2020 2065 6c73 650a 0909 097b 0a20 else....{. \n+0002c8e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c8f0: 2020 2020 2020 2020 2020 2024 6d61 696e $main\n+0002c900: 3a3a 7374 6174 2d3e 6164 6453 756d 4c69 ::stat->addSumLi\n+0002c910: 6e6b 6564 4f6c 6443 6f70 7928 2473 697a nkedOldCopy($siz\n+0002c920: 6529 3b0a 2020 2020 2020 2020 2020 2020 e);. \n+0002c930: 2020 2020 2020 2020 2020 2020 7d0a 2020 }. \n+0002c940: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002c950: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n+0002c960: 2020 2020 2020 2020 656c 7365 0a09 0920 else... \n+0002c970: 2020 207b 0a20 2020 2020 2020 2020 2020 {. \n+0002c980: 2020 2020 2020 2020 2020 2020 2069 6620 if \n+0002c990: 2824 696e 7465 726e 616c 4f6c 6420 6571 ($internalOld eq\n+0002c9a0: 2027 696e 7465 726e 616c 2729 0a09 0909 'internal')....\n+0002c9b0: 7b0a 2020 2020 2020 2020 2020 2020 2020 {. \n+0002c9c0: 2020 2020 2020 2020 2020 2020 2020 246d $m\n+0002c9d0: 6169 6e3a 3a73 7461 742d 3e61 6464 5375 ain::stat->addSu\n+0002c9e0: 6d4c 696e 6b65 6449 6e74 6572 6e61 6c43 mLinkedInternalC\n+0002c9f0: 6f6d 7072 2824 7369 7a65 293b 0a20 2020 ompr($size);. \n+0002ca00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002ca10: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n+0002ca20: 2020 2020 2020 2020 2020 2020 2020 2065 e\n+0002ca30: 6c73 650a 0909 097b 0a20 2020 2020 2020 lse....{. \n+0002ca40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002ca50: 2020 2020 2024 6d61 696e 3a3a 7374 6174 $main::stat\n+0002ca60: 2d3e 6164 6453 756d 4c69 6e6b 6564 4f6c ->addSumLinkedOl\n+0002ca70: 6443 6f6d 7072 2824 7369 7a65 293b 0a20 dCompr($size);. \n+0002ca80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002ca90: 2020 2020 2020 207d 0a20 2020 2020 2020 }. \n+0002caa0: 2020 2020 2020 2020 2020 2020 207d 0a20 }. \n+0002cab0: 2020 2020 2020 2020 2020 2020 2020 207d }\n+0002cac0: 0a09 2020 2020 7d0a 0a20 2020 2020 2020 .. }.. \n+0002cad0: 2020 2020 2023 2065 7869 7374 6965 7274 # existiert\n+0002cae0: 206e 6f63 6820 6e69 6368 742c 2063 6f70 noch nicht, cop\n+0002caf0: 7920 6f64 6572 2063 6f6d 7072 6573 730a y oder compress.\n+0002cb00: 2370 7269 6e74 2022 2d20 3420 2d5c 6e22 #print \"- 4 -\\n\"\n+0002cb10: 3b0a 0920 2020 2069 6620 286e 6f74 2064 ;.. if (not d\n+0002cb20: 6566 696e 6564 2024 6c69 6e6b 4669 6c65 efined $linkFile\n+0002cb30: 290a 0920 2020 207b 0a09 0926 3a3a 6d61 ).. {...&::ma\n+0002cb40: 6b65 4669 6c65 5061 7468 2822 2474 6172 keFilePath(\"$tar\n+0002cb50: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file\", $\n+0002cb60: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL\n+0002cb70: 696e 6b73 3b0a 0a23 7072 696e 7420 222d inks;..#print \"-\n+0002cb80: 2035 202d 5c6e 223b 0a09 0969 6620 2865 5 -\\n\";...if (e\n+0002cb90: 7869 7374 7320 2469 6e50 726f 6772 6573 xists $inProgres\n+0002cba0: 737b 246d 6435 7d29 2023 2041 7566 204b s{$md5}) # Auf K\n+0002cbb0: 6f6d 7072 6573 7369 6f6e 2f4b 6f70 6965 ompression/Kopie\n+0002cbc0: 2077 6172 7465 6e0a 0909 7b0a 2370 7269 warten...{.#pri\n+0002cbd0: 6e74 2022 2d20 3620 2d5c 6e22 3b0a 0909 nt \"- 6 -\\n\";...\n+0002cbe0: 2020 2020 7075 7368 2040 7b24 696e 5072 push @{$inPr\n+0002cbf0: 6f67 7265 7373 7b24 6d64 357d 7d2c 205b ogress{$md5}}, [\n+0002cc00: 2464 6972 2c20 2466 696c 652c 2024 6d64 $dir, $file, $md\n+0002cc10: 352c 2027 6627 5d3b 0a09 0920 2020 2024 5, 'f'];... $\n+0002cc20: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+0002cc30: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',....\n+0002cc40: 0920 2027 2d73 7472 2720 3d3e 205b 2266 . '-str' => [\"f\n+0002cc50: 6f75 6e64 2069 6465 6e74 6963 616c 2066 ound identical f\n+0002cc60: 696c 6520 3c24 6669 6c65 3e22 5d29 0a09 ile <$file>\"])..\n+0002cc70: 0909 6966 2024 6465 6275 674d 6f64 6520 ..if $debugMode \n+0002cc80: 3e3d 2033 3b0a 0909 2020 2020 6e65 7874 >= 3;... next\n+0002cc90: 3b0a 0909 7d0a 0a20 2020 2020 2020 2020 ;...}.. \n+0002cca0: 2020 2020 2020 2024 696e 5072 6f67 7265 $inProgre\n+0002ccb0: 7373 7b24 6d64 357d 203d 205b 5d3b 2020 ss{$md5} = []; \n+0002ccc0: 2023 206d 6572 6b65 6e2c 2077 6972 6420 # merken, wird \n+0002ccd0: 6b6f 7069 6572 742f 6b6f 6d70 7269 6d69 kopiert/komprimi\n+0002cce0: 6572 740a 0a23 7072 696e 7420 222d 2037 ert..#print \"- 7\n+0002ccf0: 202d 5c6e 223b 0a09 096e 6f20 7761 726e -\\n\";...no warn\n+0002cd00: 696e 6773 2027 6e65 776c 696e 6527 3b0a ings 'newline';.\n+0002cd10: 0909 6966 2028 2824 636f 6d70 7252 756c ..if (($comprRul\n+0002cd20: 652d 3e68 6173 4c69 6e65 2829 203d 3d20 e->hasLine() == \n+0002cd30: 3120 616e 640a 0909 2020 2020 2024 636f 1 and... $co\n+0002cd40: 6d70 7252 756c 652d 3e63 6865 636b 5275 mprRule->checkRu\n+0002cd50: 6c65 2824 6669 6c65 2c20 2473 697a 652c le($file, $size,\n+0002cd60: 2024 6d6f 6465 2c20 2463 7469 6d65 2c20 $mode, $ctime, \n+0002cd70: 246d 7469 6d65 2c0a 0909 0909 0920 2020 $mtime,...... \n+0002cd80: 2020 2024 7569 642c 2024 6769 642c 2024 $uid, $gid, $\n+0002cd90: 7479 7065 2920 3d3d 2031 290a 0909 2020 type) == 1)... \n+0002cda0: 2020 6f72 202d 6520 2224 6469 722f 2466 or -e \"$dir/$f\n+0002cdb0: 696c 6524 706f 7374 6669 7822 2920 2320 ile$postfix\") # \n+0002cdc0: 4461 7465 6920 6861 7420 6e69 6368 7420 Datei hat nicht \n+0002cdd0: 2e62 7a32 2c20 6573 0a09 097b 2020 2020 .bz2, es...{ \n+0002cde0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002cdf0: 2020 2020 2020 2020 2020 2023 2065 7869 # exi\n+0002ce00: 7374 6965 7274 2061 6265 7220 4461 7465 stiert aber Date\n+0002ce10: 6920 6d69 7420 2e62 7a32 0a09 0920 2020 i mit .bz2... \n+0002ce20: 2069 6620 282d 6520 2224 6469 722f 2466 if (-e \"$dir/$f\n+0002ce30: 696c 6524 706f 7374 6669 7822 290a 0909 ile$postfix\")...\n+0002ce40: 2020 2020 7b0a 2370 7269 6e74 2022 2d20 {.#print \"- \n+0002ce50: 3820 2d5c 6e22 3b0a 0909 0924 6669 666f 8 -\\n\";....$fifo\n+0002ce60: 436f 7079 2d3e 6164 6428 272d 7661 6c75 Copy->add('-valu\n+0002ce70: 6527 203d 3e0a 0909 0909 2020 2020 2020 e' =>..... \n+0002ce80: 205b 2464 6972 2c20 2466 696c 652c 2024 [$dir, $file, $\n+0002ce90: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode\n+0002cea0: 2c0a 0909 0909 0924 6d64 352c 2027 636f ,......$md5, 'co\n+0002ceb0: 7079 275d 293b 0a09 0920 2020 207d 0a09 py']);... }..\n+0002cec0: 0920 2020 2065 6c73 6966 2028 246c 6174 . elsif ($lat\n+0002ced0: 6543 6f6d 7072 6573 7329 0a09 0920 2020 eCompress)... \n+0002cee0: 207b 0a23 7072 696e 7420 222d 2039 202d {.#print \"- 9 -\n+0002cef0: 5c6e 223b 0a09 0909 2466 6966 6f43 6f70 \\n\";....$fifoCop\n+0002cf00: 792d 3e61 6464 2827 2d76 616c 7565 2720 y->add('-value' \n+0002cf10: 3d3e 0a09 0909 0920 2020 2020 2020 5b24 =>..... [$\n+0002cf20: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid\n+0002cf30: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,..\n+0002cf40: 0909 0909 246d 6435 2c20 2763 6f6d 7072 ....$md5, 'compr\n+0002cf50: 275d 293b 0a09 0920 2020 207d 0a09 0920 ']);... }... \n+0002cf60: 2020 2065 6c73 6520 2020 2320 636f 6d70 else # comp\n+0002cf70: 7265 7373 2066 696c 650a 0909 2020 2020 ress file... \n+0002cf80: 7b0a 2370 7269 6e74 2022 2d20 3130 202d {.#print \"- 10 -\n+0002cf90: 5c6e 223b 0a09 0909 2466 6966 6f43 6f6d \\n\";....$fifoCom\n+0002cfa0: 7072 2d3e 6164 6428 272d 7661 6c75 6527 pr->add('-value'\n+0002cfb0: 203d 3e0a 0909 0909 095b 2464 6972 2c20 =>......[$dir, \n+0002cfc0: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi\n+0002cfd0: 642c 2024 6d6f 6465 2c0a 0909 0909 0920 d, $mode,...... \n+0002cfe0: 246d 6435 2c20 2763 6f6d 7072 275d 293b $md5, 'compr']);\n+0002cff0: 0a09 0920 2020 207d 0a09 097d 0a09 0965 ... }...}...e\n+0002d000: 6c73 6520 2020 2020 2020 2320 636f 7079 lse # copy\n+0002d010: 2066 696c 650a 0909 7b0a 2370 7269 6e74 file...{.#print\n+0002d020: 2022 2d20 3131 202d 5c6e 223b 0a09 0920 \"- 11 -\\n\";... \n+0002d030: 2020 2024 6669 666f 436f 7079 2d3e 6164 $fifoCopy->ad\n+0002d040: 6428 272d 7661 6c75 6527 203d 3e0a 0909 d('-value' =>...\n+0002d050: 0909 2020 205b 2464 6972 2c20 2466 696c .. [$dir, $fil\n+0002d060: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $\n+0002d070: 6d6f 6465 2c0a 0909 0909 2020 2020 246d mode,..... $m\n+0002d080: 6435 2c20 2763 6f70 7927 5d29 3b0a 2020 d5, 'copy']);. \n+0002d090: 2020 2020 2020 2020 2020 2020 2020 7d0a }.\n+0002d0a0: 0920 2020 207d 0a09 7d20 2320 456e 6465 . }..} # Ende\n+0002d0b0: 2053 6368 6c65 6966 6520 5761 7274 6573 Schleife Wartes\n+0002d0c0: 6368 6c61 6765 6e20 66c3 bc6c 6c65 6e0a chlagen f..llen.\n+0002d0d0: 0a20 2020 2020 2020 2023 2041 6c74 6520 . # Alte \n+0002d0e0: 4b6f 7069 6572 2d4a 6f62 7320 6162 686f Kopier-Jobs abho\n+0002d0f0: 6c65 6e0a 2020 2020 2020 2020 666f 7265 len. fore\n+0002d100: 6163 6820 6d79 2024 6920 2824 7061 7246 ach my $i ($parF\n+0002d110: 6f72 6b43 6f70 792d 3e63 6865 636b 416c orkCopy->checkAl\n+0002d120: 6c28 2929 0a20 2020 2020 2020 207b 0a20 l()). {. \n+0002d130: 2020 2020 2020 2020 2020 2023 2057 6520 # We \n+0002d140: 6469 6420 736f 6d65 7468 696e 670a 2020 did something. \n+0002d150: 2020 2020 2020 2020 2020 246d 6169 6e3a $main:\n+0002d160: 3a74 696e 7957 6169 7453 6368 6564 756c :tinyWaitSchedul\n+0002d170: 6572 2d3e 7265 7365 7428 293b 0a0a 2020 er->reset();.. \n+0002d180: 2020 2020 2020 2020 2020 6d79 2024 7374 my $st\n+0002d190: 6465 7272 203d 2024 692d 3e67 6574 5354 derr = $i->getST\n+0002d1a0: 4445 5252 2829 3b0a 2020 2020 2020 2020 DERR();. \n+0002d1b0: 2020 2020 6d79 2028 2464 6576 2c20 2469 my ($dev, $i\n+0002d1c0: 6e6f 6465 2c20 2464 6972 2c20 2466 696c node, $dir, $fil\n+0002d1d0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $\n+0002d1e0: 6d6f 6465 2c20 246d 6435 2c0a 2020 2020 mode, $md5,. \n+0002d1f0: 2020 2020 2020 2020 2020 2020 2463 7469 $cti\n+0002d200: 6d65 2c20 246d 7469 6d65 2c20 2461 7469 me, $mtime, $ati\n+0002d210: 6d65 2c20 2473 697a 652c 2024 636f 6d70 me, $size, $comp\n+0002d220: 722c 2024 746d 704d 4435 4669 6c65 2920 r, $tmpMD5File) \n+0002d230: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. \n+0002d240: 2020 2020 2020 407b 2469 2d3e 6765 7428 @{$i->get(\n+0002d250: 272d 7768 6174 2720 3d3e 2027 696e 666f '-what' => 'info\n+0002d260: 2729 7d3b 0a0a 0920 2020 2069 6620 2826 ')};... if (&\n+0002d270: 3a3a 7761 6974 466f 7246 696c 6528 2224 ::waitForFile(\"$\n+0002d280: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n+0002d290: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL\n+0002d2a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+0002d2b0: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n+0002d2c0: 2020 2027 2d73 7472 2720 3d3e 205b 223c '-str' => [\"<\n+0002d2d0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+0002d2e0: 3e20 7761 7320 6e6f 7420 6372 6561 7465 > was not create\n+0002d2f0: 6422 5d29 3b0a 0909 6e65 7874 3b0a 0920 d\"]);...next;.. \n+0002d300: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n+0002d310: 2069 6620 2824 7072 6573 6572 7665 5065 if ($preservePe\n+0002d320: 726d 7320 616e 6420 6e6f 7420 246c 6174 rms and not $lat\n+0002d330: 654c 696e 6b73 290a 0920 2020 207b 0a20 eLinks).. {. \n+0002d340: 2020 2020 2020 2020 2020 2020 2020 2063 c\n+0002d350: 686f 776e 2024 7569 642c 2024 6769 642c hown $uid, $gid,\n+0002d360: 2022 2474 6172 6765 7444 6972 2f24 6669 \"$targetDir/$fi\n+0002d370: 6c65 223b 0a20 2020 2020 2020 2020 2020 le\";. \n+0002d380: 2020 2020 2063 686d 6f64 2024 6d6f 6465 chmod $mode\n+0002d390: 2c20 2224 7461 7267 6574 4469 722f 2466 , \"$targetDir/$f\n+0002d3a0: 696c 6522 3b0a 2020 2020 2020 2020 2020 ile\";. \n+0002d3b0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati\n+0002d3c0: 6d65 2c20 246d 7469 6d65 2c20 2224 6469 me, $mtime, \"$di\n+0002d3d0: 722f 2466 696c 6522 2069 6620 2472 6573 r/$file\" if $res\n+0002d3e0: 6574 4174 696d 653b 0a20 2020 2020 2020 etAtime;. \n+0002d3f0: 2020 2020 2020 2020 2075 7469 6d65 2024 utime $\n+0002d400: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, \"\n+0002d410: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+0002d420: 223b 0a20 2020 2020 2020 2020 2020 207d \";. }\n+0002d430: 0a0a 2020 2020 2020 2020 2020 2020 6d79 .. my\n+0002d440: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = \n+0002d450: 2873 7461 7428 2224 7461 7267 6574 4469 (stat(\"$targetDi\n+0002d460: 722f 2466 696c 6522 2929 5b31 5d3b 0a09 r/$file\"))[1];..\n+0002d470: 2020 2020 2469 6e6f 6465 4261 636b 7570 $inodeBackup\n+0002d480: 203d 2030 2075 6e6c 6573 7320 2469 6e6f = 0 unless $ino\n+0002d490: 6465 4261 636b 7570 3b20 2020 2320 6966 deBackup; # if\n+0002d4a0: 2074 696d 696e 6720 6973 7375 652c 0a09 timing issue,..\n+0002d4b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002d4c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002d4d0: 2020 2020 2020 2020 2020 2020 2320 7661 # va\n+0002d4e0: 6c75 6520 6973 206e 6f74 2075 7365 6420 lue is not used \n+0002d4f0: 6174 2061 6c6c 0a0a 2020 2020 2020 2020 at all.. \n+0002d500: 2020 2020 6966 2028 4024 7374 6465 7272 if (@$stderr\n+0002d510: 203e 2030 290a 2020 2020 2020 2020 2020 > 0). \n+0002d520: 2020 7b0a 0909 756e 6c65 7373 2028 2d65 {...unless (-e\n+0002d530: 2022 2464 6972 2f24 6669 6c65 2229 2023 \"$dir/$file\") #\n+0002d540: 2066 696c 6520 7761 7320 6465 6c65 7465 file was delete\n+0002d550: 6420 6475 7269 6e67 2063 6f70 7969 6e67 d during copying\n+0002d560: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo\n+0002d570: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+0002d580: 203d 3e20 2757 272c 0a09 0909 0920 2027 => 'W',..... '\n+0002d590: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n+0002d5a0: 2266 696c 6520 3c24 6469 722f 2466 696c \"file <$dir/$fil\n+0002d5b0: 653e 2064 656c 6574 6564 2064 7572 696e e> deleted durin\n+0002d5c0: 6720 6261 636b 7570 225d 293b 0a09 097d g backup\"]);...}\n+0002d5d0: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... \n+0002d5e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+0002d5f0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+0002d600: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n+0002d610: 0909 0909 2020 5b22 636f 7079 696e 6720 .... [\"copying \n+0002d620: 3c24 6469 722f 2466 696c 653e 202d 3e20 <$dir/$file> -> \n+0002d630: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil\n+0002d640: 653e 2220 2e0a 0909 0909 2020 2022 2067 e>\" ...... \" g\n+0002d650: 656e 6572 6174 6564 2074 6865 2066 6f6c enerated the fol\n+0002d660: 6c6f 7769 6e67 2065 7272 6f72 206d 6573 lowing error mes\n+0002d670: 7361 6765 733a 222c 0a09 0909 0920 2020 sages:\",..... \n+0002d680: 4024 7374 6465 7272 5d29 3b0a 0909 7d0a @$stderr]);...}.\n+0002d690: 0909 756e 6c69 6e6b 2022 2474 6172 6765 ..unlink \"$targe\n+0002d6a0: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file\";. \n+0002d6b0: 2020 2020 2020 2020 2020 2020 206e 6578 nex\n+0002d6c0: 743b 0a20 2020 2020 2020 2020 2020 207d t;. }\n+0002d6d0: 0a0a 0920 2020 206c 6f63 616c 202a 544d ... local *TM\n+0002d6e0: 504d 4435 3b0a 0920 2020 2075 6e6c 6573 PMD5;.. unles\n+0002d6f0: 7320 2826 3a3a 7761 6974 466f 7246 696c s (&::waitForFil\n+0002d700: 6528 2474 6d70 4d44 3546 696c 6529 206f e($tmpMD5File) o\n+0002d710: 720a 0909 2020 2020 6f70 656e 2854 4d50 r... open(TMP\n+0002d720: 4d44 352c 2024 746d 704d 4435 4669 6c65 MD5, $tmpMD5File\n+0002d730: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL\n+0002d740: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+0002d750: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n+0002d760: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+0002d770: 616e 6e6f 7420 7265 6164 2072 6563 616c annot read recal\n+0002d780: 6365 6420 6d64 3573 756d 2022 202e 0a09 ced md5sum \" ...\n+0002d790: 0909 0909 2022 6f66 203c 2474 6172 6765 .... \"of <$targe\n+0002d7a0: 7444 6972 2f24 6669 6c65 3e22 202e 0a09 tDir/$file>\" ...\n+0002d7b0: 0909 0909 2022 3b20 6669 6c65 2069 7320 .... \"; file is \n+0002d7c0: 6e6f 7420 6261 636b 6564 2075 7022 5d29 not backed up\"])\n+0002d7d0: 3b0a 0909 6e65 7874 3b0a 0920 2020 207d ;...next;.. }\n+0002d7e0: 0a09 2020 2020 6d79 2024 6c61 7374 4d44 .. my $lastMD\n+0002d7f0: 3520 3d20 3c54 4d50 4d44 353e 3b0a 0920 5 = ;.. \n+0002d800: 2020 2063 686f 6d70 2024 6c61 7374 4d44 chomp $lastMD\n+0002d810: 353b 0a09 2020 2020 6d79 2024 6c61 7374 5;.. my $last\n+0002d820: 5369 7a65 203d 203c 544d 504d 4435 3e3b Size = ;\n+0002d830: 0a09 2020 2020 6368 6f6d 7020 246c 6173 .. chomp $las\n+0002d840: 7453 697a 653b 0a09 2020 2020 636c 6f73 tSize;.. clos\n+0002d850: 6528 544d 504d 4435 293b 0a09 2020 2020 e(TMPMD5);.. \n+0002d860: 756e 6c69 6e6b 2024 746d 704d 4435 4669 unlink $tmpMD5Fi\n+0002d870: 6c65 3b0a 0a09 2020 2020 246d 6169 6e3a le;... $main:\n+0002d880: 3a73 7461 742d 3e61 6464 5f6e 6f4d 4435 :stat->add_noMD5\n+0002d890: 6564 4669 6c65 7328 3129 3b0a 0920 2020 edFiles(1);.. \n+0002d8a0: 2075 6e6c 6573 7320 2824 6c61 7374 4d44 unless ($lastMD\n+0002d8b0: 3529 0a09 2020 2020 7b0a 0909 2470 724c 5).. {...$prL\n+0002d8c0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+0002d8d0: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... \n+0002d8e0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>....\n+0002d8f0: 2020 2020 2020 5b22 6669 6c65 203c 2464 [\"file <$d\n+0002d900: 6972 2f24 6669 6c65 3e20 6465 6c65 7465 ir/$file> delete\n+0002d910: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup\"\n+0002d920: 5d29 0a09 0920 2020 2075 6e6c 6573 7320 ])... unless \n+0002d930: 6578 6973 7473 2024 7375 7070 7265 7373 exists $suppress\n+0002d940: 5761 726e 696e 677b 2766 696c 6543 6861 Warning{'fileCha\n+0002d950: 6e67 6527 7d3b 0a09 096e 6578 743b 0a09 nge'};...next;..\n+0002d960: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($\n+0002d970: 6c61 7374 4d44 3520 6e65 2024 6d64 3520 lastMD5 ne $md5 \n+0002d980: 6f72 2024 6c61 7374 5369 7a65 2021 3d20 or $lastSize != \n+0002d990: 2473 697a 6529 0a09 2020 2020 7b0a 0909 $size).. {...\n+0002d9a0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+0002d9b0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+0002d9c0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+0002d9d0: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... [\"file\n+0002d9e0: 203c 2464 6972 2f24 6669 6c65 3e20 6368 <$dir/$file> ch\n+0002d9f0: 616e 6765 6420 6475 7269 6e67 2062 6163 anged during bac\n+0002da00: 6b75 7022 5d29 0a09 0920 2020 2075 6e6c kup\"])... unl\n+0002da10: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp\n+0002da20: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n+0002da30: 6543 6861 6e67 6527 7d3b 0a09 0924 6d64 eChange'};...$md\n+0002da40: 3520 3d20 246c 6173 744d 4435 3b0a 0909 5 = $lastMD5;...\n+0002da50: 2473 697a 6520 3d20 246c 6173 7453 697a $size = $lastSiz\n+0002da60: 653b 0a09 2020 2020 7d0a 0a20 2020 2020 e;.. }.. \n+0002da70: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p\n+0002da80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+0002da90: 2744 272c 0a20 2020 2020 2020 2020 2020 'D',. \n+0002daa0: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+0002dab0: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. \n+0002dac0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dad0: 2020 205b 2266 696e 6973 6865 6420 636f [\"finished co\n+0002dae0: 7079 203c 2464 6972 2f24 6669 6c65 3e20 py <$dir/$file> \n+0002daf0: 2220 2e0a 2020 2020 2020 2020 2020 2020 \" .. \n+0002db00: 2020 2020 2020 2020 2020 2020 2020 2022 \"\n+0002db10: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil\n+0002db20: 653e 225d 290a 2020 2020 2020 2020 2020 e>\"]). \n+0002db30: 2020 2020 2020 6966 2028 2464 6562 7567 if ($debug\n+0002db40: 4d6f 6465 203e 3d20 3229 3b0a 0a20 2020 Mode >= 2);.. \n+0002db50: 2020 2020 2020 2020 2024 6d61 696e 3a3a $main::\n+0002db60: 7374 6174 2d3e 696e 6372 5f6e 6f46 6f72 stat->incr_noFor\n+0002db70: 6b73 4350 2829 3b0a 2020 2020 2020 2020 ksCP();. \n+0002db80: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat-\n+0002db90: 3e61 6464 5375 6d4e 6577 436f 7079 2824 >addSumNewCopy($\n+0002dba0: 7369 7a65 293b 0a0a 2020 2020 2020 2020 size);.. \n+0002dbb0: 2020 2020 2461 6b74 4669 6c65 6e61 6d65 $aktFilename\n+0002dbc0: 2d3e 7374 6f72 6528 272d 6669 6c65 6e61 ->store('-filena\n+0002dbd0: 6d65 2720 3d3e 2024 6669 6c65 2c20 2023 me' => $file, #\n+0002dbe0: 2073 7065 6963 6865 7274 2069 6e20 6462 speichert in db\n+0002dbf0: 6d0a 2020 2020 2020 2020 2020 2020 2020 m. \n+0002dc00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dc10: 2020 272d 6d64 3573 756d 2720 3d3e 2024 '-md5sum' => $\n+0002dc20: 6d64 352c 2020 2020 2023 202e 6d64 3573 md5, # .md5s\n+0002dc30: 756d 2d44 6174 6569 0a20 2020 2020 2020 um-Datei. \n+0002dc40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dc50: 2020 2020 2020 2020 2027 2d63 6f6d 7072 '-compr\n+0002dc60: 2720 3d3e 2024 636f 6d70 722c 0a20 2020 ' => $compr,. \n+0002dc70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dc80: 2020 2020 2020 2020 2020 2020 2027 2d64 '-d\n+0002dc90: 6576 2720 3d3e 2024 6465 762c 0a20 2020 ev' => $dev,. \n+0002dca0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dcb0: 2020 2020 2020 2020 2020 2020 2027 2d69 '-i\n+0002dcc0: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode,\n+0002dcd0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002dce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dcf0: 2027 2d69 6e6f 6465 4261 636b 7570 2720 '-inodeBackup' \n+0002dd00: 3d3e 2024 696e 6f64 6542 6163 6b75 702c => $inodeBackup,\n+0002dd10: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002dd20: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dd30: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct\n+0002dd40: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. \n+0002dd50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dd60: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' =>\n+0002dd70: 2024 6d74 696d 652c 0a20 2020 2020 2020 $mtime,. \n+0002dd80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002dd90: 2020 2020 2020 2020 2027 2d61 7469 6d65 '-atime\n+0002dda0: 2720 3d3e 2024 6174 696d 652c 0a20 2020 ' => $atime,. \n+0002ddb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002ddc0: 2020 2020 2020 2020 2020 2020 2027 2d73 '-s\n+0002ddd0: 697a 6527 203d 3e20 2473 697a 652c 0a20 ize' => $size,. \n+0002dde0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002ddf0: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+0002de00: 2d75 6964 2720 3d3e 2024 7569 642c 0a20 -uid' => $uid,. \n+0002de10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002de20: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+0002de30: 2d67 6964 2720 3d3e 2024 6769 642c 0a20 -gid' => $gid,. \n+0002de40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002de50: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+0002de60: 2d6d 6f64 6527 203d 3e20 246d 6f64 6529 -mode' => $mode)\n+0002de70: 3b0a 0a0a 2020 2020 2020 2020 2020 2020 ;... \n+0002de80: 6966 2028 6578 6973 7473 2024 696e 5072 if (exists $inPr\n+0002de90: 6f67 7265 7373 7b24 6d64 357d 2061 6e64 ogress{$md5} and\n+0002dea0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002deb0: 2040 7b24 696e 5072 6f67 7265 7373 7b24 @{$inProgress{$\n+0002dec0: 6d64 357d 7d20 3e20 3029 2020 2320 6765 md5}} > 0) # ge\n+0002ded0: 7075 6666 6572 7465 2046 696c 6573 206d pufferte Files m\n+0002dee0: 6974 0a20 2020 2020 2020 2020 2020 207b it. {\n+0002def0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002df00: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+0002df10: 676c 6569 6368 6572 206d 6435 2053 756d gleicher md5 Sum\n+0002df20: 6d65 2062 6561 7262 6569 7465 6e0a 2020 me bearbeiten. \n+0002df30: 2020 2020 2020 2020 2020 2020 2020 2466 $f\n+0002df40: 696c 6573 4c65 6674 203d 2031 3b0a 2020 ilesLeft = 1;. \n+0002df50: 2020 2020 2020 2020 2020 2020 2020 2472 $r\n+0002df60: 6561 6444 6972 416e 6443 6865 636b 2d3e eadDirAndCheck->\n+0002df70: 7075 7368 6261 636b 2824 696e 5072 6f67 pushback($inProg\n+0002df80: 7265 7373 7b24 6d64 357d 2c20 2470 724c ress{$md5}, $prL\n+0002df90: 6f67 2c0a 0909 2020 2020 2464 6562 7567 og,... $debug\n+0002dfa0: 4d6f 6465 203e 3d20 3320 3f20 3120 3a20 Mode >= 3 ? 1 : \n+0002dfb0: 3029 3b0a 2020 2020 2020 2020 2020 2020 0);. \n+0002dfc0: 7d0a 2020 2020 2020 2020 2020 2020 6465 }. de\n+0002dfd0: 6c65 7465 2024 696e 5072 6f67 7265 7373 lete $inProgress\n+0002dfe0: 7b24 6d64 357d 3b0a 2020 2020 2020 2020 {$md5};. \n+0002dff0: 7d0a 0a09 2320 6e65 7565 2042 6c6f 636b }...# neue Block\n+0002e000: 2d6d 6435 204a 6f62 7320 6569 6e68 c3a4 -md5 Jobs einh..\n+0002e010: 6765 6e0a 0977 6869 6c65 2028 2470 6172 gen..while ($par\n+0002e020: 466f 726b 426c 6f63 6b2d 3e67 6574 4e6f ForkBlock->getNo\n+0002e030: 4672 6565 456e 7472 6965 7328 2920 3e20 FreeEntries() > \n+0002e040: 3020 616e 640a 0920 2020 2020 2020 2466 0 and.. $f\n+0002e050: 6966 6f42 6c6f 636b 2d3e 6765 744e 6f55 ifoBlock->getNoU\n+0002e060: 7365 6445 6e74 7269 6573 2829 203e 2030 sedEntries() > 0\n+0002e070: 290a 097b 0a20 2020 2020 2020 2020 2020 )..{. \n+0002e080: 2023 2057 6520 6469 6420 736f 6d65 7468 # We did someth\n+0002e090: 696e 670a 2020 2020 2020 2020 2020 2020 ing. \n+0002e0a0: 246d 6169 6e3a 3a74 696e 7957 6169 7453 $main::tinyWaitS\n+0002e0b0: 6368 6564 756c 6572 2d3e 7265 7365 7428 cheduler->reset(\n+0002e0c0: 293b 0a0a 0920 2020 206d 7920 2824 6465 );... my ($de\n+0002e0d0: 7666 696c 652c 2040 7061 7261 6d29 203d vfile, @param) =\n+0002e0e0: 2040 7b24 6669 666f 426c 6f63 6b2d 3e67 @{$fifoBlock->g\n+0002e0f0: 6574 2829 7d3b 0a0a 0920 2020 2023 2061 et()};... # a\n+0002e100: 6c6c 6520 6d64 3520 5375 6d6d 656e 2062 lle md5 Summen b\n+0002e110: 6572 6563 686e 656e 2c0a 2370 7269 6e74 erechnen,.#print\n+0002e120: 2022 2d31 312d 2063 6865 636b 426c 6f63 \"-11- checkBloc\n+0002e130: 6b2c 2066 6966 6f42 6c6f 636b 2d3e 6765 k, fifoBlock->ge\n+0002e140: 743a 2024 6465 7666 696c 655c 6e22 3b0a t: $devfile\\n\";.\n+0002e150: 0920 2020 206d 7920 2474 6d70 4e61 6d65 . my $tmpName\n+0002e160: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa\n+0002e170: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me(\"$tmpdir/stor\n+0002e180: 6542 6163 6b75 702d 626c 6f63 6b2e 2229 eBackup-block.\")\n+0002e190: 3b0a 2370 7269 6e74 2022 2d31 322d 5c6e ;.#print \"-12-\\n\n+0002e1a0: 223b 0a09 2020 2020 6966 2028 2464 6576 \";.. if ($dev\n+0002e1b0: 6669 6c65 2065 7120 2766 696c 6527 290a file eq 'file').\n+0002e1c0: 0920 2020 207b 0a09 096d 7920 2824 6469 . {...my ($di\n+0002e1d0: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, \n+0002e1e0: 2467 6964 2c20 246d 6f64 652c 2024 6465 $gid, $mode, $de\n+0002e1f0: 762c 0a09 0920 2020 2024 696e 6f64 652c v,... $inode,\n+0002e200: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n+0002e210: 2024 6174 696d 652c 2024 7369 7a65 2c20 $atime, $size, \n+0002e220: 2463 6865 636b 426c 6f63 6b73 4253 2c0a $checkBlocksBS,.\n+0002e230: 0909 2020 2020 2463 6f6d 7072 6573 7342 .. $compressB\n+0002e240: 6c6f 636b 2c20 2462 6c6f 636b 5265 6164 lock, $blockRead\n+0002e250: 2920 3d20 2840 7061 7261 6d29 3b0a 0a09 ) = (@param);...\n+0002e260: 0975 6e6c 6573 7320 2824 6c61 7465 4c69 .unless ($lateLi\n+0002e270: 6e6b 7329 0a09 097b 0a09 0920 2020 206d nks)...{... m\n+0002e280: 6b64 6972 2022 2474 6172 6765 7444 6972 kdir \"$targetDir\n+0002e290: 2f24 6669 6c65 2220 6f72 0a09 0909 2470 /$file\" or....$p\n+0002e2a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+0002e2b0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n+0002e2c0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+0002e2d0: 5b22 6361 6e6e 6f74 206d 6b64 6972 203c [\"cannot mkdir <\n+0002e2e0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+0002e2f0: 3e22 5d2c 0a09 0909 0920 2020 2020 2027 >\"],..... '\n+0002e300: 2d65 7869 7427 203d 3e20 3129 3b0a 0909 -exit' => 1);...\n+0002e310: 7d0a 0a09 0924 7061 7246 6f72 6b42 6c6f }....$parForkBlo\n+0002e320: 636b 2d3e 6164 645f 6e6f 626c 6f63 6b28 ck->add_noblock(\n+0002e330: 272d 6675 6e63 7469 6f6e 2720 3d3e 205c '-function' => \\\n+0002e340: 263a 3a63 616c 6342 6c6f 636b 4d44 3553 &::calcBlockMD5S\n+0002e350: 756d 732c 0a09 0909 0909 2020 2027 2d66 ums,...... '-f\n+0002e360: 756e 6350 6172 2720 3d3e 205b 2224 6469 uncPar' => [\"$di\n+0002e370: 722f 2466 696c 6522 2c20 2474 6172 6765 r/$file\", $targe\n+0002e380: 7444 6972 2c0a 0909 0909 0909 0920 2024 tDir,........ $\n+0002e390: 6669 6c65 2c20 2463 6865 636b 426c 6f63 file, $checkBloc\n+0002e3a0: 6b73 4253 2c0a 0909 0909 0909 0920 2024 ksBS,........ $\n+0002e3b0: 636f 6d70 7265 7373 426c 6f63 6b2c 0a09 compressBlock,..\n+0002e3c0: 0909 0909 0909 2020 2462 6c6f 636b 5265 ...... $blockRe\n+0002e3d0: 6164 2c0a 0909 0909 0909 0920 2024 636f ad,........ $co\n+0002e3e0: 6d70 7265 7373 436f 6d6d 616e 642c 0a09 mpressCommand,..\n+0002e3f0: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres\n+0002e400: 734f 7074 696f 6e73 2c0a 0909 0909 0909 sOptions,.......\n+0002e410: 0920 2024 706f 7374 6669 782c 0a09 0909 . $postfix,....\n+0002e420: 0909 0909 2020 246f 6c64 4669 6c65 6e61 .... $oldFilena\n+0002e430: 6d65 2c20 246c 6174 654c 696e 6b73 2c0a me, $lateLinks,.\n+0002e440: 0909 0909 0909 0920 2024 6c61 7465 436f ....... $lateCo\n+0002e450: 6d70 7265 7373 2c0a 0909 0909 0909 0920 mpress,........ \n+0002e460: 2024 6e6f 436f 6d70 7265 7373 2c20 2470 $noCompress, $p\n+0002e470: 724c 6f67 2c0a 0909 0909 0909 0920 2024 rLog,........ $\n+0002e480: 746d 704e 616d 652c 0a09 0909 0909 0909 tmpName,........\n+0002e490: 2020 2462 6c6f 636b 4368 6563 6b53 756d $blockCheckSum\n+0002e4a0: 4669 6c65 2c0a 0909 0909 0909 0920 2024 File,........ $\n+0002e4b0: 6374 696d 652c 2024 6d74 696d 655d 2c0a ctime, $mtime],.\n+0002e4c0: 0909 0909 0920 2020 272d 696e 666f 2720 ..... '-info' \n+0002e4d0: 3d3e 205b 2464 6576 2c20 2469 6e6f 6465 => [$dev, $inode\n+0002e4e0: 2c20 2464 6972 2c0a 0909 0909 0909 2020 , $dir,....... \n+0002e4f0: 2020 2020 2024 6669 6c65 2c20 2475 6964 $file, $uid\n+0002e500: 2c20 2467 6964 2c0a 0909 0909 0909 2020 , $gid,....... \n+0002e510: 2020 2020 2024 6d6f 6465 2c0a 0909 0909 $mode,.....\n+0002e520: 0909 2020 2020 2020 2024 6374 696d 652c .. $ctime,\n+0002e530: 2024 6d74 696d 652c 0a09 0909 0909 0920 $mtime,....... \n+0002e540: 2020 2020 2020 2461 7469 6d65 2c20 2473 $atime, $s\n+0002e550: 697a 652c 0a09 0909 0909 0920 2020 2020 ize,....... \n+0002e560: 2020 2463 6f6d 7072 6573 7342 6c6f 636b $compressBlock\n+0002e570: 2c0a 0909 0909 0909 2020 2020 2020 2024 ,....... $\n+0002e580: 746d 704e 616d 655d 293b 0a09 0924 7072 tmpName]);...$pr\n+0002e590: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+0002e5a0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n+0002e5b0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+0002e5c0: 7361 7669 6e67 2062 6c6f 636b 6564 2066 saving blocked f\n+0002e5d0: 696c 6520 3c24 6669 6c65 3e20 2822 202e ile <$file> (\" .\n+0002e5e0: 0a09 0909 2020 2020 2020 2826 3a3a 6875 .... (&::hu\n+0002e5f0: 6d61 6e52 6561 6461 626c 6528 2473 697a manReadable($siz\n+0002e600: 6529 295b 305d 202e 2027 2927 5d29 3b0a e))[0] . ')']);.\n+0002e610: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi\n+0002e620: 6620 2824 6465 7666 696c 6520 6571 2027 f ($devfile eq '\n+0002e630: 6465 7669 6365 2729 0a09 2020 2020 7b0a device').. {.\n+0002e640: 0909 6d79 2028 2464 6576 6963 652c 2024 ..my ($device, $\n+0002e650: 7265 6c44 6972 2c20 2462 6c6f 636b 5369 relDir, $blockSi\n+0002e660: 7a65 2c20 2463 6f6d 7072 6573 7342 6c6f ze, $compressBlo\n+0002e670: 636b 2c20 2470 6172 616c 6c65 6c29 0a09 ck, $parallel)..\n+0002e680: 0920 2020 203d 2028 4070 6172 616d 293b . = (@param);\n+0002e690: 0a09 0924 626c 6f63 6b50 6172 616c 6c65 ...$blockParalle\n+0002e6a0: 6c20 3d20 2470 6172 616c 6c65 6c3b 0a09 l = $parallel;..\n+0002e6b0: 096d 7920 2472 656c 4469 7232 203d 2024 .my $relDir2 = $\n+0002e6c0: 6465 7669 6365 3b0a 0909 2472 656c 4469 device;...$relDi\n+0002e6d0: 7232 203d 7e20 732f 5c2f 2f5f 2f67 3b0a r2 =~ s/\\//_/g;.\n+0002e6e0: 0909 2472 656c 4469 7232 203d 7e20 732f ..$relDir2 =~ s/\n+0002e6f0: 5c41 5f2a 282e 2a29 5f2a 5c5a 2f24 312f \\A_*(.*)_*\\Z/$1/\n+0002e700: 3b0a 0a09 0926 3a3a 6d61 6b65 4469 7250 ;....&::makeDirP\n+0002e710: 6174 6828 2224 7461 7267 6574 4469 722f ath(\"$targetDir/\n+0002e720: 2472 656c 4469 722f 2472 656c 4469 7232 $relDir/$relDir2\n+0002e730: 222c 2024 7072 4c6f 6729 3b0a 0a09 0924 \", $prLog);....$\n+0002e740: 7061 7246 6f72 6b42 6c6f 636b 2d3e 6164 parForkBlock->ad\n+0002e750: 645f 6e6f 626c 6f63 6b28 272d 6675 6e63 d_noblock('-func\n+0002e760: 7469 6f6e 2720 3d3e 205c 263a 3a63 616c tion' => \\&::cal\n+0002e770: 6342 6c6f 636b 4d44 3553 756d 732c 0a09 cBlockMD5Sums,..\n+0002e780: 0909 0909 2020 2027 2d66 756e 6350 6172 .... '-funcPar\n+0002e790: 2720 3d3e 205b 2464 6576 6963 652c 2024 ' => [$device, $\n+0002e7a0: 7461 7267 6574 4469 722c 0a09 0909 0909 targetDir,......\n+0002e7b0: 0909 2020 2224 7265 6c44 6972 2f24 7265 .. \"$relDir/$re\n+0002e7c0: 6c44 6972 3222 2c0a 0909 0909 0909 0920 lDir2\",........ \n+0002e7d0: 2024 626c 6f63 6b53 697a 652c 0a09 0909 $blockSize,....\n+0002e7e0: 0909 2020 2463 6f6d 7072 6573 7342 6c6f .. $compressBlo\n+0002e7f0: 636b 203f 2027 6327 203a 2027 7527 2c0a ck ? 'c' : 'u',.\n+0002e800: 0909 0909 0920 205b 2764 6427 2c20 2262 ..... ['dd', \"b\n+0002e810: 733d 2462 6c6f 636b 5369 7a65 225d 2c0a s=$blockSize\"],.\n+0002e820: 0909 0909 0909 0920 2024 636f 6d70 7265 ....... $compre\n+0002e830: 7373 436f 6d6d 616e 642c 0a09 0909 0909 ssCommand,......\n+0002e840: 0909 2020 2463 6f6d 7072 6573 734f 7074 .. $compressOpt\n+0002e850: 696f 6e73 2c0a 0909 0909 0909 0920 2024 ions,........ $\n+0002e860: 706f 7374 6669 782c 0a09 0909 0909 0909 postfix,........\n+0002e870: 2020 246f 6c64 4669 6c65 6e61 6d65 2c20 $oldFilename, \n+0002e880: 246c 6174 654c 696e 6b73 2c0a 0909 0909 $lateLinks,.....\n+0002e890: 0909 0920 2024 6c61 7465 436f 6d70 7265 ... $lateCompre\n+0002e8a0: 7373 2c0a 0909 0909 0909 0920 2024 6e6f ss,........ $no\n+0002e8b0: 436f 6d70 7265 7373 2c20 2470 724c 6f67 Compress, $prLog\n+0002e8c0: 2c0a 0909 0909 0909 0920 2024 746d 704e ,........ $tmpN\n+0002e8d0: 616d 652c 0a09 0909 0909 0909 2020 2462 ame,........ $b\n+0002e8e0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile\n+0002e8f0: 2c0a 0909 0909 0909 0920 2030 2c20 305d ,........ 0, 0]\n+0002e900: 2c0a 0909 0909 0920 2020 272d 696e 666f ,...... '-info\n+0002e910: 2720 3d3e 205b 2744 4556 4943 4527 2c20 ' => ['DEVICE', \n+0002e920: 302c 2024 6465 7669 6365 2c0a 0909 0909 0, $device,.....\n+0002e930: 0909 2020 2020 2020 2024 7265 6c44 6972 .. $relDir\n+0002e940: 2c20 302c 2030 2c0a 0909 0909 0909 2020 , 0, 0,....... \n+0002e950: 2020 2020 2030 3630 302c 0a09 0909 0909 0600,......\n+0002e960: 0920 2020 2020 2020 302c 2030 2c0a 0909 . 0, 0,...\n+0002e970: 0909 0909 2020 2020 2020 2030 2c20 302c .... 0, 0,\n+0002e980: 0a09 0909 0909 0920 2020 2020 2020 2463 ....... $c\n+0002e990: 6f6d 7072 6573 7342 6c6f 636b 203f 2027 ompressBlock ? '\n+0002e9a0: 6327 203a 2027 7527 2c0a 0909 0909 0909 c' : 'u',.......\n+0002e9b0: 2020 2020 2020 2024 746d 704e 616d 655d $tmpName]\n+0002e9c0: 293b 0a09 0924 7072 4c6f 672d 3e70 7269 );...$prLog->pri\n+0002e9d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+0002e9e0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+0002e9f0: 7227 203d 3e20 5b22 7361 7669 6e67 2064 r' => [\"saving d\n+0002ea00: 6576 6963 6520 3c24 6465 7669 6365 3e22 evice <$device>\"\n+0002ea10: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. \n+0002ea20: 656c 7365 0a09 2020 2020 7b0a 0909 2470 else.. {...$p\n+0002ea30: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+0002ea40: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+0002ea50: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+0002ea60: 2261 7373 6572 7469 6f6e 203c 2464 6576 \"assertion <$dev\n+0002ea70: 6669 6c65 3e20 4070 6172 616d 225d 2c0a file> @param\"],.\n+0002ea80: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit'\n+0002ea90: 203d 3e20 3129 3b0a 0920 2020 207d 0a23 => 1);.. }.#\n+0002eaa0: 7072 696e 7420 222d 3133 2d5c 6e22 3b0a print \"-13-\\n\";.\n+0002eab0: 097d 0a23 7072 696e 7420 222d 3134 2d5c .}.#print \"-14-\\\n+0002eac0: 6e22 3b0a 0a20 2020 2020 2020 2023 206e n\";.. # n\n+0002ead0: 6575 6520 4b6f 7069 6572 2d4a 6f62 7320 eue Kopier-Jobs \n+0002eae0: 6569 6e68 c3a4 6e67 656e 0a20 2020 2020 einh..ngen. \n+0002eaf0: 2020 2077 6869 6c65 2028 2470 6172 466f while ($parFo\n+0002eb00: 726b 436f 7079 2d3e 6765 744e 6f46 7265 rkCopy->getNoFre\n+0002eb10: 6545 6e74 7269 6573 2829 203e 2030 2061 eEntries() > 0 a\n+0002eb20: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. \n+0002eb30: 2020 2466 6966 6f43 6f70 792d 3e67 6574 $fifoCopy->get\n+0002eb40: 4e6f 5573 6564 456e 7472 6965 7328 2920 NoUsedEntries() \n+0002eb50: 3e20 3029 0a20 2020 2020 2020 207b 0a20 > 0). {. \n+0002eb60: 2020 2020 2020 2020 2020 2023 2057 6520 # We \n+0002eb70: 6469 6420 736f 6d65 7468 696e 670a 2020 did something. \n+0002eb80: 2020 2020 2020 2020 2020 246d 6169 6e3a $main:\n+0002eb90: 3a74 696e 7957 6169 7453 6368 6564 756c :tinyWaitSchedul\n+0002eba0: 6572 2d3e 7265 7365 7428 293b 0a0a 2020 er->reset();.. \n+0002ebb0: 2020 2020 2020 2020 2020 6d79 2028 2464 my ($d\n+0002ebc0: 6972 2c20 2466 696c 652c 2024 7569 642c ir, $file, $uid,\n+0002ebd0: 2024 6769 642c 2024 6d6f 6465 2c20 246d $gid, $mode, $m\n+0002ebe0: 6435 2c20 2463 6f70 7943 6f6d 7072 2920 d5, $copyCompr) \n+0002ebf0: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. \n+0002ec00: 2020 407b 2466 6966 6f43 6f70 792d 3e67 @{$fifoCopy->g\n+0002ec10: 6574 2829 7d3b 2020 2020 2320 636f 7079 et()}; # copy\n+0002ec20: 436f 6d70 7220 6973 2066 6f72 206c 6174 Compr is for lat\n+0002ec30: 6543 6f6d 7072 6573 7369 6f6e 0a09 2020 eCompression.. \n+0002ec40: 2020 756e 6c65 7373 2028 2d65 2022 2464 unless (-e \"$d\n+0002ec50: 6972 2f24 6669 6c65 2229 2020 2020 2320 ir/$file\") # \n+0002ec60: 6669 6c65 2077 6173 2064 656c 6574 6564 file was deleted\n+0002ec70: 2064 7572 696e 6720 7761 6974 2069 6e20 during wait in \n+0002ec80: 7175 6575 650a 0920 2020 207b 0a09 0924 queue.. {...$\n+0002ec90: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+0002eca0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n+0002ecb0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n+0002ecc0: 0909 0920 2020 2020 205b 2266 696c 6520 ... [\"file \n+0002ecd0: 3c24 6469 722f 2466 696c 653e 2064 656c <$dir/$file> del\n+0002ece0: 6574 6564 2064 7572 696e 6720 6261 636b eted during back\n+0002ecf0: 7570 225d 293b 0a09 096e 6578 743b 0a09 up\"]);...next;..\n+0002ed00: 2020 2020 7d0a 2370 7269 6e74 2022 2d31 }.#print \"-1\n+0002ed10: 352d 2466 696c 655c 6e22 3b0a 2020 2020 5-$file\\n\";. \n+0002ed20: 2020 2020 2020 2020 6d79 2028 2464 6576 my ($dev\n+0002ed30: 2c20 2469 6e6f 6465 2c20 2463 7469 6d65 , $inode, $ctime\n+0002ed40: 2c20 246d 7469 6d65 2c20 2461 7469 6d65 , $mtime, $atime\n+0002ed50: 2c20 2473 697a 6529 203d 0a20 2020 2020 , $size) =. \n+0002ed60: 2020 2020 2020 2020 2020 2028 6c73 7461 (lsta\n+0002ed70: 7428 2224 6469 722f 2466 696c 6522 2929 t(\"$dir/$file\"))\n+0002ed80: 5b30 2c20 312c 2031 302c 2039 2c20 382c [0, 1, 10, 9, 8,\n+0002ed90: 2037 5d3b 0a20 2020 2020 2020 2020 2020 7];. \n+0002eda0: 2024 6d6f 6465 2026 3d20 3037 3737 373b $mode &= 07777;\n+0002edb0: 0a0a 0920 2020 206d 7920 2463 6f6d 7072 ... my $compr\n+0002edc0: 203d 2027 7527 3b0a 2370 7269 6e74 2022 = 'u';.#print \"\n+0002edd0: 636f 7079 436f 6d70 7220 3d20 3c24 636f copyCompr = <$co\n+0002ede0: 7079 436f 6d70 723e 5c6e 223b 0a09 2020 pyCompr>\\n\";.. \n+0002edf0: 2020 6966 2028 2463 6f70 7943 6f6d 7072 if ($copyCompr\n+0002ee00: 2065 7120 2763 6f6d 7072 2729 0a09 2020 eq 'compr').. \n+0002ee10: 2020 7b0a 2370 7269 6e74 2022 2d31 362d {.#print \"-16-\n+0002ee20: 5c6e 223b 0a09 0924 636f 6d70 7220 3d20 \\n\";...$compr = \n+0002ee30: 2763 273b 0a09 0923 2027 636f 6d70 7265 'c';...# 'compre\n+0002ee40: 7373 2720 7265 6665 7273 2074 6f20 656e ss' refers to en\n+0002ee50: 7472 7920 696e 202e 6d64 3543 6865 636b try in .md5Check\n+0002ee60: 5375 6d73 2e69 6e66 6f0a 0909 6d79 2024 Sums.info...my $\n+0002ee70: 6578 6973 7469 6e67 4669 6c65 203d 2024 existingFile = $\n+0002ee80: 6669 6c65 3b0a 0909 2465 7869 7374 696e file;...$existin\n+0002ee90: 6746 696c 6520 3d7e 2073 2f5c 6e2f 5c30 gFile =~ s/\\n/\\0\n+0002eea0: 2f6f 673b 0a09 0924 7772 4c61 7465 4c69 /og;...$wrLateLi\n+0002eeb0: 6e6b 2d3e 7072 696e 7428 2263 6f6d 7072 nk->print(\"compr\n+0002eec0: 6573 7320 246d 6435 5c6e 2465 7869 7374 ess $md5\\n$exist\n+0002eed0: 696e 6746 696c 655c 6e22 293b 0a09 2020 ingFile\\n\");.. \n+0002eee0: 2020 7d0a 0a20 2020 2020 2020 2020 2020 }.. \n+0002eef0: 2069 6620 2824 7369 7a65 203c 3d20 246d if ($size <= $m\n+0002ef00: 6169 6e3a 3a6d 696e 436f 7079 5769 7468 ain::minCopyWith\n+0002ef10: 466f 726b 2920 2320 6469 7265 6b74 206b Fork) # direkt k\n+0002ef20: 6f70 6965 7265 6e20 286f 686e 6520 666f opieren (ohne fo\n+0002ef30: 726b 290a 2020 2020 2020 2020 2020 2020 rk). \n+0002ef40: 7b0a 2370 7269 6e74 2022 2d31 372d 5c6e {.#print \"-17-\\n\n+0002ef50: 223b 0a20 2020 2020 2020 2020 2020 2020 \";. \n+0002ef60: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+0002ef70: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D',\n+0002ef80: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002ef90: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+0002efa0: 2d73 7472 2720 3d3e 205b 2263 6f70 7920 -str' => [\"copy \n+0002efb0: 2464 6972 2f24 6669 6c65 2024 7461 7267 $dir/$file $targ\n+0002efc0: 6574 4469 722f 2466 696c 6522 5d29 0a20 etDir/$file\"]). \n+0002efd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002efe0: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod\n+0002eff0: 6520 3e3d 2032 293b 0a0a 2020 2020 2020 e >= 2);.. \n+0002f000: 2020 2020 2020 2020 2020 756e 6c65 7373 unless\n+0002f010: 2028 3a3a 636f 7079 4669 6c65 2822 2464 (::copyFile(\"$d\n+0002f020: 6972 2f24 6669 6c65 222c 2022 2474 6172 ir/$file\", \"$tar\n+0002f030: 6765 7444 6972 2f24 6669 6c65 2229 290a getDir/$file\")).\n+0002f040: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f050: 7b0a 2020 2020 2020 2020 2020 2020 2020 {. \n+0002f060: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n+0002f070: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+0002f080: 4527 2c0a 2020 2020 2020 2020 2020 2020 E',. \n+0002f090: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f0a0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+0002f0b0: 5b22 636f 756c 6420 6e6f 7420 636f 7079 [\"could not copy\n+0002f0c0: 2024 6469 722f 2466 696c 6520 2220 2e0a $dir/$file \" ..\n+0002f0d0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... \"$targ\n+0002f0e0: 6574 4469 722f 2466 696c 6522 5d29 3b0a etDir/$file\"]);.\n+0002f0f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f100: 2020 2020 6e65 7874 3b0a 2020 2020 2020 next;. \n+0002f110: 2020 2020 2020 2020 2020 7d0a 0a09 096d }....m\n+0002f120: 7920 246c 6173 744d 4435 203d 2026 3a3a y $lastMD5 = &::\n+0002f130: 6361 6c63 4d44 3528 2224 6469 722f 2466 calcMD5(\"$dir/$f\n+0002f140: 696c 6522 293b 0a09 0969 6620 2824 6465 ile\");...if ($de\n+0002f150: 6275 674d 6f64 6520 3e3d 2033 290a 0909 bugMode >= 3)...\n+0002f160: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog->\n+0002f170: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+0002f180: 2027 4427 2c0a 0909 0909 2020 272d 7374 'D',..... '-st\n+0002f190: 7227 203d 3e20 5b22 6d64 3573 756d 2028 r' => [\"md5sum (\n+0002f1a0: 7265 6361 6c63 2920 2464 6972 2f24 6669 recalc) $dir/$fi\n+0002f1b0: 6c65 225d 293b 0a09 097d 0a09 0924 6d61 le\"]);...}...$ma\n+0002f1c0: 696e 3a3a 7374 6174 2d3e 6164 645f 6e6f in::stat->add_no\n+0002f1d0: 4d44 3565 6446 696c 6573 2831 293b 0a09 MD5edFiles(1);..\n+0002f1e0: 0975 6e6c 6573 7320 2824 6c61 7374 4d44 .unless ($lastMD\n+0002f1f0: 3529 0a09 097b 0a09 0920 2020 2024 7072 5)...{... $pr\n+0002f200: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+0002f210: 6427 203d 3e20 2757 272c 0a09 0909 0920 d' => 'W',..... \n+0002f220: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n+0002f230: 205b 2266 696c 6520 3c24 6469 722f 2466 [\"file <$dir/$f\n+0002f240: 696c 653e 2064 656c 6574 6564 2064 7572 ile> deleted dur\n+0002f250: 696e 6720 6261 636b 7570 225d 290a 0909 ing backup\"])...\n+0002f260: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $\n+0002f270: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{\n+0002f280: 2766 696c 6543 6861 6e67 6527 7d3b 0a0a 'fileChange'};..\n+0002f290: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}.\n+0002f2a0: 0909 6966 2028 246c 6173 744d 4435 206e ..if ($lastMD5 n\n+0002f2b0: 6520 246d 6435 290a 0909 7b0a 0909 2020 e $md5)...{... \n+0002f2c0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+0002f2d0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+0002f2e0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n+0002f2f0: 0909 0909 2020 5b22 6669 6c65 203c 2464 .... [\"file <$d\n+0002f300: 6972 2f24 6669 6c65 3e20 6368 616e 6765 ir/$file> change\n+0002f310: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup\"\n+0002f320: 5d29 0a09 0909 756e 6c65 7373 2065 7869 ])....unless exi\n+0002f330: 7374 7320 2473 7570 7072 6573 7357 6172 sts $suppressWar\n+0002f340: 6e69 6e67 7b27 6669 6c65 4368 616e 6765 ning{'fileChange\n+0002f350: 277d 3b0a 0a09 0920 2020 2024 6d64 3520 '};.... $md5 \n+0002f360: 3d20 2767 2720 7820 3332 3b0a 0909 7d0a = 'g' x 32;...}.\n+0002f370: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002f380: 2069 6620 2824 7072 6573 6572 7665 5065 if ($preservePe\n+0002f390: 726d 7320 616e 6420 6e6f 7420 246c 6174 rms and not $lat\n+0002f3a0: 654c 696e 6b73 290a 0909 7b0a 2020 2020 eLinks)...{. \n+0002f3b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f3c0: 6368 6f77 6e20 2475 6964 2c20 2467 6964 chown $uid, $gid\n+0002f3d0: 2c20 2224 7461 7267 6574 4469 722f 2466 , \"$targetDir/$f\n+0002f3e0: 696c 6522 3b0a 2020 2020 2020 2020 2020 ile\";. \n+0002f3f0: 2020 2020 2020 2020 2020 6368 6d6f 6420 chmod \n+0002f400: 246d 6f64 652c 2022 2474 6172 6765 7444 $mode, \"$targetD\n+0002f410: 6972 2f24 6669 6c65 223b 0a20 2020 2020 ir/$file\";. \n+0002f420: 2020 2020 2020 2020 2020 2020 2020 2075 u\n+0002f430: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt\n+0002f440: 696d 652c 2022 2464 6972 2f24 6669 6c65 ime, \"$dir/$file\n+0002f450: 2220 6966 2024 7265 7365 7441 7469 6d65 \" if $resetAtime\n+0002f460: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n+0002f470: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati\n+0002f480: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, \"$ta\n+0002f490: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file\";.\n+0002f4a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f4b0: 7d0a 0a20 2020 2020 2020 2020 2020 2020 }.. \n+0002f4c0: 2020 206d 7920 2469 6e6f 6465 4261 636b my $inodeBack\n+0002f4d0: 7570 203d 2028 7374 6174 2822 2474 6172 up = (stat(\"$tar\n+0002f4e0: 6765 7444 6972 2f24 6669 6c65 2229 295b getDir/$file\"))[\n+0002f4f0: 315d 3b0a 0909 2469 6e6f 6465 4261 636b 1];...$inodeBack\n+0002f500: 7570 203d 2030 2075 6e6c 6573 7320 2469 up = 0 unless $i\n+0002f510: 6e6f 6465 4261 636b 7570 3b20 2020 2320 nodeBackup; # \n+0002f520: 6966 2074 696d 696e 6720 6973 7375 652c if timing issue,\n+0002f530: 0a09 2020 2020 2020 2020 2020 2020 2020 .. \n+0002f540: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f550: 2020 2020 2020 2020 2020 2020 2020 2320 # \n+0002f560: 7661 6c75 6520 6973 206e 6f74 2075 7365 value is not use\n+0002f570: 6420 6174 2061 6c6c 0a20 2020 2020 2020 d at all. \n+0002f580: 2020 2020 2020 2020 2024 616b 7446 696c $aktFil\n+0002f590: 656e 616d 652d 3e73 746f 7265 2827 2d66 ename->store('-f\n+0002f5a0: 696c 656e 616d 6527 203d 3e20 2466 696c ilename' => $fil\n+0002f5b0: 652c 2020 2320 7370 6569 6368 6572 7420 e, # speichert \n+0002f5c0: 696e 2064 626d 0a20 2020 2020 2020 2020 in dbm. \n+0002f5d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f5e0: 2020 2020 2020 2020 2020 2027 2d6d 6435 '-md5\n+0002f5f0: 7375 6d27 203d 3e20 246d 6435 2c20 2020 sum' => $md5, \n+0002f600: 2020 2320 2e6d 6435 7375 6d2d 4461 7465 # .md5sum-Date\n+0002f610: 690a 2020 2020 2020 2020 2020 2020 2020 i. \n+0002f620: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f630: 2020 2020 2020 272d 636f 6d70 7227 203d '-compr' =\n+0002f640: 3e20 2463 6f6d 7072 2c0a 2020 2020 2020 > $compr,. \n+0002f650: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f660: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+0002f670: 6465 7627 203d 3e20 2464 6576 2c0a 2020 dev' => $dev,. \n+0002f680: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f690: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f6a0: 2020 272d 696e 6f64 6527 203d 3e20 2469 '-inode' => $i\n+0002f6b0: 6e6f 6465 2c0a 2020 2020 2020 2020 2020 node,. \n+0002f6c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f6d0: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod\n+0002f6e0: 6542 6163 6b75 7027 203d 3e20 2469 6e6f eBackup' => $ino\n+0002f6f0: 6465 4261 636b 7570 2c0a 2020 2020 2020 deBackup,. \n+0002f700: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f710: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+0002f720: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n+0002f730: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+0002f740: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f750: 2020 2020 2020 272d 6d74 696d 6527 203d '-mtime' =\n+0002f760: 3e20 246d 7469 6d65 2c0a 2020 2020 2020 > $mtime,. \n+0002f770: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f780: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+0002f790: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime\n+0002f7a0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+0002f7b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f7c0: 2020 2020 2020 272d 7369 7a65 2720 3d3e '-size' =>\n+0002f7d0: 2024 7369 7a65 2c0a 2020 2020 2020 2020 $size,. \n+0002f7e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f7f0: 2020 2020 2020 2020 2020 2020 272d 7569 '-ui\n+0002f800: 6427 203d 3e20 2475 6964 2c0a 2020 2020 d' => $uid,. \n+0002f810: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f820: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f830: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,.\n+0002f840: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f850: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f860: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $\n+0002f870: 6d6f 6465 293b 0a0a 2020 2020 2020 2020 mode);.. \n+0002f880: 2020 2020 2020 2020 246d 6169 6e3a 3a73 $main::s\n+0002f890: 7461 742d 3e61 6464 5375 6d4e 6577 436f tat->addSumNewCo\n+0002f8a0: 7079 2824 7369 7a65 293b 0a0a 2020 2020 py($size);.. \n+0002f8b0: 2020 2020 2020 2020 2020 2020 6966 2028 if (\n+0002f8c0: 6578 6973 7473 2024 696e 5072 6f67 7265 exists $inProgre\n+0002f8d0: 7373 7b24 6d64 357d 2061 6e64 0a20 2020 ss{$md5} and. \n+0002f8e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f8f0: 2040 7b24 696e 5072 6f67 7265 7373 7b24 @{$inProgress{$\n+0002f900: 6d64 357d 7d20 3e20 3029 2020 2320 6765 md5}} > 0) # ge\n+0002f910: 7075 6666 6572 7465 2046 696c 6573 206d pufferte Files m\n+0002f920: 6974 0a20 2020 2020 2020 2020 2020 2020 it. \n+0002f930: 2020 207b 2020 2020 2020 2020 2020 2020 { \n+0002f940: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002f950: 2020 2320 676c 6569 6368 6572 206d 6435 # gleicher md5\n+0002f960: 2053 756d 6d65 2062 6561 7262 6569 7465 Summe bearbeite\n+0002f970: 6e0a 2020 2020 2020 2020 2020 2020 2020 n. \n+0002f980: 2020 2020 2020 2466 696c 6573 4c65 6674 $filesLeft\n+0002f990: 203d 2031 3b0a 2020 2020 2020 2020 2020 = 1;. \n+0002f9a0: 2020 2020 2020 2020 2020 2472 6561 6444 $readD\n+0002f9b0: 6972 416e 6443 6865 636b 2d3e 7075 7368 irAndCheck->push\n+0002f9c0: 6261 636b 2824 696e 5072 6f67 7265 7373 back($inProgress\n+0002f9d0: 7b24 6d64 357d 2c20 2470 724c 6f67 2c0a {$md5}, $prLog,.\n+0002f9e0: 0909 0924 6465 6275 674d 6f64 6520 3e3d ...$debugMode >=\n+0002f9f0: 2033 203f 2031 203a 2030 293b 0a20 2020 3 ? 1 : 0);. \n+0002fa00: 2020 2020 2020 2020 2020 2020 207d 0a20 }. \n+0002fa10: 2020 2020 2020 2020 2020 2020 2020 2064 d\n+0002fa20: 656c 6574 6520 2469 6e50 726f 6772 6573 elete $inProgres\n+0002fa30: 737b 246d 6435 7d3b 0a20 2020 2020 2020 s{$md5};. \n+0002fa40: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n+0002fa50: 2020 2065 6c73 6520 2020 2020 2020 2020 else \n+0002fa60: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fa70: 2320 6d69 7420 666f 726b 2f63 702c 7273 # mit fork/cp,rs\n+0002fa80: 796e 6320 6b6f 7069 6572 656e 0a20 2020 ync kopieren. \n+0002fa90: 2020 2020 2020 2020 207b 0a20 2020 2020 {. \n+0002faa0: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo\n+0002fab0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+0002fac0: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. \n+0002fad0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fae0: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' =>\n+0002faf0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+0002fb00: 2020 2020 2020 2020 2020 2020 2020 205b [\n+0002fb10: 2263 6f70 7920 2464 6972 2f24 6669 6c65 \"copy $dir/$file\n+0002fb20: 2024 7461 7267 6574 4469 722f 2466 696c $targetDir/$fil\n+0002fb30: 6522 5d29 0a20 2020 2020 2020 2020 2020 e\"]). \n+0002fb40: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de\n+0002fb50: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);..\n+0002fb60: 0909 6d79 2024 746d 704d 4435 4669 6c65 ..my $tmpMD5File\n+0002fb70: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa\n+0002fb80: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me(\"$tmpdir/stor\n+0002fb90: 6542 6163 6b75 702d 6d64 352e 2229 3b0a eBackup-md5.\");.\n+0002fba0: 0909 2470 6172 466f 726b 436f 7079 2d3e ..$parForkCopy->\n+0002fbb0: 6164 645f 6e6f 626c 6f63 6b28 272d 6578 add_noblock('-ex\n+0002fbc0: 6563 2720 3d3e 2024 6d61 696e 3a3a 7374 ec' => $main::st\n+0002fbd0: 6275 4d64 3563 702c 0a09 0909 0909 2020 buMd5cp,...... \n+0002fbe0: 272d 7061 7261 6d27 203d 3e0a 0909 0909 '-param' =>.....\n+0002fbf0: 0920 205b 2224 6469 722f 2466 696c 6522 . [\"$dir/$file\"\n+0002fc00: 2c0a 0909 0909 0920 2022 2474 6172 6765 ,...... \"$targe\n+0002fc10: 7444 6972 2f24 6669 6c65 222c 2024 746d tDir/$file\", $tm\n+0002fc20: 704d 4435 4669 6c65 5d2c 0a20 2020 2020 pMD5File],. \n+0002fc30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fc40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fc50: 2020 2020 2027 2d77 6f72 6b69 6e67 4469 '-workingDi\n+0002fc60: 7227 203d 3e20 272e 272c 0a20 2020 2020 r' => '.',. \n+0002fc70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fc80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fc90: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom\n+0002fca0: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => \"$tmpdir/st\n+0002fcb0: 6465 7272 222c 0a20 2020 2020 2020 2020 derr\",. \n+0002fcc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fcd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fce0: 2027 2d69 6e66 6f27 203d 3e0a 2020 2020 '-info' =>. \n+0002fcf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fd00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fd10: 2020 2020 2020 5b24 6465 762c 2024 696e [$dev, $in\n+0002fd20: 6f64 652c 2024 6469 722c 2024 6669 6c65 ode, $dir, $file\n+0002fd30: 2c20 2475 6964 2c0a 2020 2020 2020 2020 , $uid,. \n+0002fd40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fd50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fd60: 2020 2024 6769 642c 2024 6d6f 6465 2c20 $gid, $mode, \n+0002fd70: 246d 6435 2c20 2463 7469 6d65 2c20 246d $md5, $ctime, $m\n+0002fd80: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. \n+0002fd90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fda0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+0002fdb0: 2024 6174 696d 652c 2024 7369 7a65 2c20 $atime, $size, \n+0002fdc0: 2463 6f6d 7072 2c20 2474 6d70 4d44 3546 $compr, $tmpMD5F\n+0002fdd0: 696c 655d 290a 0909 2020 2020 6f72 2064 ile])... or d\n+0002fde0: 6965 2022 4d75 7374 206e 6f74 2068 6170 ie \"Must not hap\n+0002fdf0: 7065 6e20 2863 6f70 7929 223b 0a20 2020 pen (copy)\";. \n+0002fe00: 2020 2020 2020 2020 207d 0a20 2020 2020 }. \n+0002fe10: 2020 207d 0a0a 0a20 2020 2020 2020 2023 }... #\n+0002fe20: 204b 6f6d 7072 696d 6965 7220 4a6f 6273 Komprimier Jobs\n+0002fe30: 2061 6268 6f6c 656e 0a20 2020 2020 2020 abholen. \n+0002fe40: 2066 6f72 6561 6368 206d 7920 2469 2028 foreach my $i (\n+0002fe50: 2470 6172 466f 726b 436f 6d70 722d 3e63 $parForkCompr->c\n+0002fe60: 6865 636b 416c 6c28 2929 0a20 2020 2020 heckAll()). \n+0002fe70: 2020 207b 0a20 2020 2020 2020 2020 2020 {. \n+0002fe80: 2023 2057 6520 6469 6420 736f 6d65 7468 # We did someth\n+0002fe90: 696e 670a 2020 2020 2020 2020 2020 2020 ing. \n+0002fea0: 246d 6169 6e3a 3a74 696e 7957 6169 7453 $main::tinyWaitS\n+0002feb0: 6368 6564 756c 6572 2d3e 7265 7365 7428 cheduler->reset(\n+0002fec0: 293b 0a0a 2020 2020 2020 2020 2020 2020 );.. \n+0002fed0: 6d79 2024 7374 6465 7272 203d 2024 692d my $stderr = $i-\n+0002fee0: 3e67 6574 5354 4445 5252 2829 3b0a 2020 >getSTDERR();. \n+0002fef0: 2020 2020 2020 2020 2020 6d79 2028 2464 my ($d\n+0002ff00: 6576 2c20 2469 6e6f 6465 2c20 2464 6972 ev, $inode, $dir\n+0002ff10: 2c20 2466 696c 652c 2024 7569 642c 2024 , $file, $uid, $\n+0002ff20: 6769 642c 2024 6d6f 6465 2c20 246d 6435 gid, $mode, $md5\n+0002ff30: 2c0a 0909 2463 7469 6d65 2c20 246d 7469 ,...$ctime, $mti\n+0002ff40: 6d65 2c20 2461 7469 6d65 2c20 2473 697a me, $atime, $siz\n+0002ff50: 652c 2024 746d 704d 4435 4669 6c65 2920 e, $tmpMD5File) \n+0002ff60: 3d0a 0909 2020 2020 407b 2469 2d3e 6765 =... @{$i->ge\n+0002ff70: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in\n+0002ff80: 666f 2729 7d3b 0a0a 0920 2020 2069 6620 fo')};... if \n+0002ff90: 2826 3a3a 7761 6974 466f 7246 696c 6528 (&::waitForFile(\n+0002ffa0: 2224 7461 7267 6574 4469 722f 2466 696c \"$targetDir/$fil\n+0002ffb0: 6524 706f 7374 6669 7822 2929 0a09 2020 e$postfix\")).. \n+0002ffc0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+0002ffd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+0002ffe0: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n+0002fff0: 7472 2720 3d3e 205b 223c 2474 6172 6765 tr' => [\"<$targe\n+00030000: 7444 6972 2f24 6669 6c65 2470 6f73 7466 tDir/$file$postf\n+00030010: 6978 3e20 2220 2e0a 0909 0909 0920 2277 ix> \" ....... \"w\n+00030020: 6173 206e 6f74 2063 7265 6174 6564 225d as not created\"]\n+00030030: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. \n+00030040: 7d0a 0a20 2020 2020 2020 2020 2020 2069 }.. i\n+00030050: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm\n+00030060: 7320 616e 6420 6e6f 7420 246c 6174 654c s and not $lateL\n+00030070: 696e 6b73 290a 0920 2020 207b 0a20 2020 inks).. {. \n+00030080: 2020 2020 2020 2020 2020 2020 2063 686f cho\n+00030090: 776e 2024 7569 642c 2024 6769 642c 2022 wn $uid, $gid, \"\n+000300a0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n+000300b0: 2470 6f73 7466 6978 223b 0a20 2020 2020 $postfix\";. \n+000300c0: 2020 2020 2020 2020 2020 2063 686d 6f64 chmod\n+000300d0: 2024 6d6f 6465 2c20 2224 7461 7267 6574 $mode, \"$target\n+000300e0: 4469 722f 2466 696c 6524 706f 7374 6669 Dir/$file$postfi\n+000300f0: 7822 3b0a 2020 2020 2020 2020 2020 2020 x\";. \n+00030100: 2020 2020 7574 696d 6520 2461 7469 6d65 utime $atime\n+00030110: 2c20 246d 7469 6d65 2c20 2224 6469 722f , $mtime, \"$dir/\n+00030120: 2466 696c 6522 2069 6620 2472 6573 6574 $file\" if $reset\n+00030130: 4174 696d 653b 0a20 2020 2020 2020 2020 Atime;. \n+00030140: 2020 2020 2020 2075 7469 6d65 2024 6174 utime $at\n+00030150: 696d 652c 2024 6d74 696d 652c 2022 2474 ime, $mtime, \"$t\n+00030160: 6172 6765 7444 6972 2f24 6669 6c65 2470 argetDir/$file$p\n+00030170: 6f73 7466 6978 223b 0a20 2020 2020 2020 ostfix\";. \n+00030180: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n+00030190: 2020 206d 7920 2469 6e6f 6465 4261 636b my $inodeBack\n+000301a0: 7570 203d 2028 7374 6174 2822 2474 6172 up = (stat(\"$tar\n+000301b0: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos\n+000301c0: 7466 6978 2229 295b 315d 3b0a 0920 2020 tfix\"))[1];.. \n+000301d0: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = \n+000301e0: 3020 756e 6c65 7373 2024 696e 6f64 6542 0 unless $inodeB\n+000301f0: 6163 6b75 703b 2020 2023 2069 6620 7469 ackup; # if ti\n+00030200: 6d69 6e67 2069 7373 7565 2c0a 0920 2020 ming issue,.. \n+00030210: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030220: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030230: 2020 2020 2020 2020 2023 2076 616c 7565 # value\n+00030240: 2069 7320 6e6f 7420 7573 6564 2061 7420 is not used at \n+00030250: 616c 6c0a 0a20 2020 2020 2020 2020 2020 all.. \n+00030260: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > \n+00030270: 3029 0a20 2020 2020 2020 2020 2020 207b 0). {\n+00030280: 0a09 0975 6e6c 6573 7320 282d 6520 2224 ...unless (-e \"$\n+00030290: 6469 722f 2466 696c 6522 2920 2320 6669 dir/$file\") # fi\n+000302a0: 6c65 2077 6173 2064 656c 6574 6564 2064 le was deleted d\n+000302b0: 7572 696e 6720 636f 6d70 7265 7373 696f uring compressio\n+000302c0: 6e0a 0909 7b0a 0909 2020 2020 2470 724c n...{... $prL\n+000302d0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000302e0: 2720 3d3e 2027 5727 2c0a 0909 0909 2020 ' => 'W',..... \n+000302f0: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... \n+00030300: 5b22 6669 6c65 203c 2464 6972 2f24 6669 [\"file <$dir/$fi\n+00030310: 6c65 3e20 6465 6c65 7465 6420 6475 7269 le> deleted duri\n+00030320: 6e67 2062 6163 6b75 7022 5d29 3b0a 0909 ng backup\"]);...\n+00030330: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... \n+00030340: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00030350: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00030360: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n+00030370: 0a09 0909 0920 205b 2263 6f6d 7072 6573 ..... [\"compres\n+00030380: 7369 6e67 203c 2464 6972 2f24 6669 6c65 sing <$dir/$file\n+00030390: 3e20 2d3e 2022 202e 0a09 0909 0920 2020 > -> \" ...... \n+000303a0: 223c 2474 6172 6765 7444 6972 2f24 6669 \"<$targetDir/$fi\n+000303b0: 6c65 2470 6f73 7466 6978 3e22 202e 0a09 le$postfix>\" ...\n+000303c0: 0909 0920 2020 2220 6765 6e65 7261 7465 ... \" generate\n+000303d0: 6420 7468 6520 666f 6c6c 6f77 696e 6720 d the following \n+000303e0: 6572 726f 7220 6d65 7373 6167 6573 3a22 error messages:\"\n+000303f0: 2c0a 0909 0909 2020 2040 2473 7464 6572 ,..... @$stder\n+00030400: 725d 293b 0a09 097d 0a09 0975 6e6c 696e r]);...}...unlin\n+00030410: 6b20 2224 7461 7267 6574 4469 722f 2466 k \"$targetDir/$f\n+00030420: 696c 6524 706f 7374 6669 7822 3b0a 2020 ile$postfix\";. \n+00030430: 2020 2020 2020 2020 2020 2020 2020 6e65 ne\n+00030440: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. \n+00030450: 7d0a 0a09 2020 2020 6c6f 6361 6c20 2a54 }... local *T\n+00030460: 4d50 4d44 353b 0a09 2020 2020 756e 6c65 MPMD5;.. unle\n+00030470: 7373 2028 263a 3a77 6169 7446 6f72 4669 ss (&::waitForFi\n+00030480: 6c65 2824 746d 704d 4435 4669 6c65 2920 le($tmpMD5File) \n+00030490: 6f72 0a09 0920 2020 206f 7065 6e28 544d or... open(TM\n+000304a0: 504d 4435 2c20 2474 6d70 4d44 3546 696c PMD5, $tmpMD5Fil\n+000304b0: 6529 290a 0920 2020 207b 0a09 0924 7072 e)).. {...$pr\n+000304c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000304d0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n+000304e0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+000304f0: 6361 6e6e 6f74 2072 6561 6420 7265 6361 cannot read reca\n+00030500: 6c63 6564 206d 6435 7375 6d20 2220 2e0a lced md5sum \" ..\n+00030510: 0909 0909 0920 226f 6620 3c24 7461 7267 ..... \"of <$targ\n+00030520: 6574 4469 722f 2466 696c 653e 2220 2e0a etDir/$file>\" ..\n+00030530: 0909 0920 2020 2020 2022 3b20 6669 6c65 ... \"; file\n+00030540: 2069 7320 6e6f 7420 6261 636b 6564 2075 is not backed u\n+00030550: 7022 5d29 3b0a 0909 6e65 7874 3b0a 0920 p\"]);...next;.. \n+00030560: 2020 207d 0a09 2020 2020 6d79 2024 6c61 }.. my $la\n+00030570: 7374 4d44 3520 3d20 3c54 4d50 4d44 353e stMD5 = \n+00030580: 3b0a 0920 2020 2063 686f 6d70 2024 6c61 ;.. chomp $la\n+00030590: 7374 4d44 353b 0a09 2020 2020 6d79 2024 stMD5;.. my $\n+000305a0: 6c61 7374 5369 7a65 203d 203c 544d 504d lastSize = ;.. chomp \n+000305c0: 246c 6173 7453 697a 653b 0a09 2020 2020 $lastSize;.. \n+000305d0: 636c 6f73 6528 544d 504d 4435 293b 0a09 close(TMPMD5);..\n+000305e0: 2020 2020 756e 6c69 6e6b 2024 746d 704d unlink $tmpM\n+000305f0: 4435 4669 6c65 3b0a 0a09 2020 2020 246d D5File;... $m\n+00030600: 6169 6e3a 3a73 7461 742d 3e61 6464 5f6e ain::stat->add_n\n+00030610: 6f4d 4435 6564 4669 6c65 7328 3129 3b0a oMD5edFiles(1);.\n+00030620: 0920 2020 2075 6e6c 6573 7320 2824 6c61 . unless ($la\n+00030630: 7374 4d44 3529 0a09 2020 2020 7b0a 0909 stMD5).. {...\n+00030640: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00030650: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00030660: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00030670: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... [\"file\n+00030680: 203c 2464 6972 2f24 6669 6c65 3e20 6465 <$dir/$file> de\n+00030690: 6c65 7465 6420 6475 7269 6e67 2062 6163 leted during bac\n+000306a0: 6b75 7022 5d29 0a09 0920 2020 2075 6e6c kup\"])... unl\n+000306b0: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp\n+000306c0: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n+000306d0: 6543 6861 6e67 6527 7d3b 0a0a 0909 6e65 eChange'};....ne\n+000306e0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. \n+000306f0: 6966 2028 246c 6173 744d 4435 206e 6520 if ($lastMD5 ne \n+00030700: 246d 6435 206f 7220 246c 6173 7453 697a $md5 or $lastSiz\n+00030710: 6520 213d 2024 7369 7a65 290a 0920 2020 e != $size).. \n+00030720: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n+00030730: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W\n+00030740: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+00030750: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n+00030760: 2266 696c 6520 3c24 6469 722f 2466 696c \"file <$dir/$fil\n+00030770: 653e 2063 6861 6e67 6564 2064 7572 696e e> changed durin\n+00030780: 6720 6261 636b 7570 225d 290a 0909 2020 g backup\"])... \n+00030790: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists \n+000307a0: 2473 7570 7072 6573 7357 6172 6e69 6e67 $suppressWarning\n+000307b0: 7b27 6669 6c65 4368 616e 6765 277d 3b0a {'fileChange'};.\n+000307c0: 0909 246d 6435 203d 2024 6c61 7374 4d44 ..$md5 = $lastMD\n+000307d0: 353b 0a09 0924 7369 7a65 203d 2024 6c61 5;...$size = $la\n+000307e0: 7374 5369 7a65 3b0a 0920 2020 207d 0a0a stSize;.. }..\n+000307f0: 2020 2020 2020 2020 2020 2020 2470 724c $prL\n+00030800: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00030810: 2720 3d3e 2027 4427 2c0a 2020 2020 2020 ' => 'D',. \n+00030820: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030830: 2020 2020 272d 7374 7227 203d 3e0a 2020 '-str' =>. \n+00030840: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030850: 2020 2020 2020 2020 5b22 6669 6e69 7368 [\"finish\n+00030860: 6564 2024 636f 6d70 7265 7373 203c 2464 ed $compress <$d\n+00030870: 6972 2f24 6669 6c65 3e20 2220 2e0a 2020 ir/$file> \" .. \n+00030880: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030890: 2020 2020 2020 2020 2022 3c24 7461 7267 \"<$targ\n+000308a0: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post\n+000308b0: 6669 783e 225d 290a 2020 2020 2020 2020 fix>\"]). \n+000308c0: 2020 2020 2020 2020 6966 2028 2464 6562 if ($deb\n+000308d0: 7567 4d6f 6465 203e 3d20 3229 3b0a 0a20 ugMode >= 2);.. \n+000308e0: 2020 2020 2020 2020 2020 2024 6d61 696e $main\n+000308f0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF\n+00030900: 6f72 6b73 436f 6d70 7265 7373 2829 3b0a orksCompress();.\n+00030910: 0920 2020 206d 7920 2463 6f6d 7072 5369 . my $comprSi\n+00030920: 7a65 203d 2028 7374 6174 2822 2474 6172 ze = (stat(\"$tar\n+00030930: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos\n+00030940: 7466 6978 2229 295b 375d 3b0a 2020 2020 tfix\"))[7];. \n+00030950: 2020 2020 2020 2020 246d 6169 6e3a 3a73 $main::s\n+00030960: 7461 742d 3e61 6464 5375 6d4e 6577 436f tat->addSumNewCo\n+00030970: 6d70 7228 2463 6f6d 7072 5369 7a65 2c20 mpr($comprSize, \n+00030980: 2473 697a 6529 3b0a 0a23 7072 696e 7420 $size);..#print \n+00030990: 222d 2032 3220 2d20 6669 6c65 203d 203c \"- 22 - file = <\n+000309a0: 2466 696c 653e 5c6e 223b 0a20 2020 2020 $file>\\n\";. \n+000309b0: 2020 2020 2020 2024 616b 7446 696c 656e $aktFilen\n+000309c0: 616d 652d 3e73 746f 7265 2827 2d66 696c ame->store('-fil\n+000309d0: 656e 616d 6527 203d 3e20 2466 696c 652c ename' => $file,\n+000309e0: 2020 2320 7370 6569 6368 6572 7420 696e # speichert in\n+000309f0: 2064 626d 0a20 2020 2020 2020 2020 2020 dbm. \n+00030a00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030a10: 2020 2020 2027 2d6d 6435 7375 6d27 203d '-md5sum' =\n+00030a20: 3e20 246d 6435 2c20 2020 2020 2320 2e6d > $md5, # .m\n+00030a30: 6435 7375 6d2d 4461 7465 690a 2020 2020 d5sum-Datei. \n+00030a40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030a50: 2020 2020 2020 2020 2020 2020 272d 636f '-co\n+00030a60: 6d70 7227 203d 3e20 2763 272c 0a20 2020 mpr' => 'c',. \n+00030a70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030a80: 2020 2020 2020 2020 2020 2020 2027 2d64 '-d\n+00030a90: 6576 2720 3d3e 2024 6465 762c 0a20 2020 ev' => $dev,. \n+00030aa0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030ab0: 2020 2020 2020 2020 2020 2020 2027 2d69 '-i\n+00030ac0: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode,\n+00030ad0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00030ae0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030af0: 2027 2d69 6e6f 6465 4261 636b 7570 2720 '-inodeBackup' \n+00030b00: 3d3e 2024 696e 6f64 6542 6163 6b75 702c => $inodeBackup,\n+00030b10: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00030b20: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030b30: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct\n+00030b40: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. \n+00030b50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030b60: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' =>\n+00030b70: 2024 6d74 696d 652c 0a20 2020 2020 2020 $mtime,. \n+00030b80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030b90: 2020 2020 2020 2020 2027 2d6d 7469 6d65 '-mtime\n+00030ba0: 2720 3d3e 2024 6d74 696d 652c 0a20 2020 ' => $mtime,. \n+00030bb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030bc0: 2020 2020 2020 2020 2020 2020 2027 2d61 '-a\n+00030bd0: 7469 6d65 2720 3d3e 2024 6174 696d 652c time' => $atime,\n+00030be0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00030bf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030c00: 2027 2d73 697a 6527 203d 3e20 2473 697a '-size' => $siz\n+00030c10: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. \n+00030c20: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030c30: 2020 2027 2d75 6964 2720 3d3e 2024 7569 '-uid' => $ui\n+00030c40: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. \n+00030c50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030c60: 2020 2027 2d67 6964 2720 3d3e 2024 6769 '-gid' => $gi\n+00030c70: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. \n+00030c80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030c90: 2020 2027 2d6d 6f64 6527 203d 3e20 246d '-mode' => $m\n+00030ca0: 6f64 6529 3b0a 0a20 2020 2020 2020 2020 ode);.. \n+00030cb0: 2020 2069 6620 2865 7869 7374 7320 2469 if (exists $i\n+00030cc0: 6e50 726f 6772 6573 737b 246d 6435 7d20 nProgress{$md5} \n+00030cd0: 616e 640a 2020 2020 2020 2020 2020 2020 and. \n+00030ce0: 2020 2020 407b 2469 6e50 726f 6772 6573 @{$inProgres\n+00030cf0: 737b 246d 6435 7d7d 203e 2030 2920 2023 s{$md5}} > 0) #\n+00030d00: 2067 6570 7566 6665 7274 6520 4669 6c65 gepufferte File\n+00030d10: 7320 6d69 740a 2020 2020 2020 2020 2020 s mit. \n+00030d20: 2020 7b20 2020 2020 2020 2020 2020 2020 { \n+00030d30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00030d40: 2023 2067 6c65 6963 6865 7220 6d64 3520 # gleicher md5 \n+00030d50: 5375 6d6d 6520 6265 6172 6265 6974 656e Summe bearbeiten\n+00030d60: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00030d70: 2024 6669 6c65 734c 6566 7420 3d20 313b $filesLeft = 1;\n+00030d80: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00030d90: 2024 7265 6164 4469 7241 6e64 4368 6563 $readDirAndChec\n+00030da0: 6b2d 3e70 7573 6862 6163 6b28 2469 6e50 k->pushback($inP\n+00030db0: 726f 6772 6573 737b 246d 6435 7d2c 2024 rogress{$md5}, $\n+00030dc0: 7072 4c6f 672c 0a09 0920 2020 2024 6465 prLog,... $de\n+00030dd0: 6275 674d 6f64 6520 3e3d 2033 203f 2031 bugMode >= 3 ? 1\n+00030de0: 203a 2030 293b 0a20 2020 2020 2020 2020 : 0);. \n+00030df0: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n+00030e00: 2064 656c 6574 6520 2469 6e50 726f 6772 delete $inProgr\n+00030e10: 6573 737b 246d 6435 7d3b 0a20 2020 2020 ess{$md5};. \n+00030e20: 2020 207d 0a0a 2020 2020 2020 2020 2320 }.. # \n+00030e30: 426c 6f63 6b2d 6d64 3520 4a6f 6273 2061 Block-md5 Jobs a\n+00030e40: 6268 6f6c 656e 0a09 7768 696c 6520 2831 bholen..while (1\n+00030e50: 290a 2020 2020 2020 2020 7b0a 0920 2020 ). {.. \n+00030e60: 206d 7920 2469 3b0a 0920 2020 2069 6620 my $i;.. if \n+00030e70: 2824 626c 6f63 6b50 6172 616c 6c65 6c29 ($blockParallel)\n+00030e80: 0a09 2020 2020 7b0a 0909 2469 203d 2024 .. {...$i = $\n+00030e90: 7061 7246 6f72 6b42 6c6f 636b 2d3e 6368 parForkBlock->ch\n+00030ea0: 6563 6b4f 6e65 2829 3b0a 0920 2020 207d eckOne();.. }\n+00030eb0: 0a09 2020 2020 656c 7365 0a09 2020 2020 .. else.. \n+00030ec0: 7b0a 0909 2469 203d 2024 7061 7246 6f72 {...$i = $parFor\n+00030ed0: 6b42 6c6f 636b 2d3e 7761 6974 466f 7241 kBlock->waitForA\n+00030ee0: 6c6c 4a6f 6273 2829 3b0a 0920 2020 207d llJobs();.. }\n+00030ef0: 0a09 2020 2020 6c61 7374 2075 6e6c 6573 .. last unles\n+00030f00: 7320 2469 3b0a 0a20 2020 2020 2020 2020 s $i;.. \n+00030f10: 2020 2023 2057 6520 6469 6420 736f 6d65 # We did some\n+00030f20: 7468 696e 670a 0920 2020 2024 6d61 696e thing.. $main\n+00030f30: 3a3a 7469 6e79 5761 6974 5363 6865 6475 ::tinyWaitSchedu\n+00030f40: 6c65 722d 3e72 6573 6574 2829 3b0a 0a09 ler->reset();...\n+00030f50: 2020 2020 6d79 2028 2464 6576 2c20 2469 my ($dev, $i\n+00030f60: 6e6f 6465 2c20 2464 6972 2c20 2466 696c node, $dir, $fil\n+00030f70: 652c 2024 7569 642c 2024 6769 642c 0a09 e, $uid, $gid,..\n+00030f80: 0924 6d6f 6465 2c20 2463 7469 6d65 2c20 .$mode, $ctime, \n+00030f90: 246d 7469 6d65 2c20 2461 7469 6d65 2c20 $mtime, $atime, \n+00030fa0: 2473 697a 652c 2024 636f 6d70 7265 7373 $size, $compress\n+00030fb0: 426c 6f63 6b2c 0a09 0924 746d 704e 616d Block,...$tmpNam\n+00030fc0: 6529 203d 0a09 0920 2020 2040 7b24 692d e) =... @{$i-\n+00030fd0: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => \n+00030fe0: 2769 6e66 6f27 297d 3b0a 0a09 2020 2020 'info')};... \n+00030ff0: 756e 6c65 7373 2028 2d72 2024 746d 704e unless (-r $tmpN\n+00031000: 616d 6529 0a09 2020 2020 7b0a 0909 2320 ame).. {...# \n+00031010: 6d65 7373 6167 6520 6973 2069 6d70 6f72 message is impor\n+00031020: 7461 6e74 2074 6f20 696e 6372 656d 656e tant to incremen\n+00031030: 7420 4552 524f 5220 636f 756e 7465 7220 t ERROR counter \n+00031040: 696e 2070 724c 6f67 0a09 0923 2045 7272 in prLog...# Err\n+00031050: 6f72 206d 6573 7361 6765 2069 6e20 6361 or message in ca\n+00031060: 6c63 426c 6f63 6b4d 4435 5375 6d73 2069 lcBlockMD5Sums i\n+00031070: 7320 6361 6c6c 6564 2069 6e20 666f 726b s called in fork\n+00031080: 210a 0909 2470 724c 6f67 2d3e 7072 696e !...$prLog->prin\n+00031090: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+000310a0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n+000310b0: 2720 3d3e 205b 2273 6b69 7070 696e 6720 ' => [\"skipping \n+000310c0: 626c 6f63 6b65 6420 6669 6c65 225d 293b blocked file\"]);\n+000310d0: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }.\n+000310e0: 0920 2020 2020 2020 2020 2020 2020 2020 . \n+000310f0: 2020 2020 2020 2020 2020 2020 2020 200a .\n+00031100: 0920 2020 206c 6f63 616c 202a 424c 4f43 . local *BLOC\n+00031110: 4b3b 0a09 2020 2020 756e 6c65 7373 2028 K;.. unless (\n+00031120: 263a 3a77 6169 7446 6f72 4669 6c65 2824 &::waitForFile($\n+00031130: 746d 704e 616d 6529 206f 720a 0909 2020 tmpName) or... \n+00031140: 2020 6f70 656e 2842 4c4f 434b 2c20 223c open(BLOCK, \"<\n+00031150: 2024 746d 704e 616d 6522 2929 0a09 2020 $tmpName\")).. \n+00031160: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+00031170: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00031180: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n+00031190: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n+000311a0: 6f70 656e 203c 2474 6d70 4e61 6d65 3e22 open <$tmpName>\"\n+000311b0: 5d2c 0a09 0909 2020 2020 2020 272d 6164 ],.... '-ad\n+000311c0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__,\n+000311d0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... \n+000311e0: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+000311f0: 3129 3b0a 0920 2020 207d 0a09 2020 2020 1);.. }.. \n+00031200: 6d79 2028 2473 7461 7453 6f75 7263 6553 my ($statSourceS\n+00031210: 697a 652c 2024 7374 6174 5374 6275 5369 ize, $statStbuSi\n+00031220: 7a65 2c20 2473 7461 744e 6f46 6f72 6b73 ze, $statNoForks\n+00031230: 4350 2c20 2473 7461 744e 6f46 6f72 6b73 CP, $statNoForks\n+00031240: 436f 6d70 7265 7373 2c0a 0909 2473 7461 Compress,...$sta\n+00031250: 744e 6f42 6c6f 636b 732c 2024 7374 6174 tNoBlocks, $stat\n+00031260: 4e6f 4c61 7465 4c69 6e6b 732c 2024 616c NoLateLinks, $al\n+00031270: 6c4d 4435 2c20 2462 6c6f 636b 4d44 352c lMD5, $blockMD5,\n+00031280: 0a09 0924 626c 6f63 6b46 696c 656e 616d ...$blockFilenam\n+00031290: 652c 2024 6c2c 2024 6e6f 5761 726e 696e e, $l, $noWarnin\n+000312a0: 6773 2c20 246e 6f45 7272 6f72 7329 3b0a gs, $noErrors);.\n+000312b0: 0a09 2020 2020 7768 696c 6520 2824 6c20 .. while ($l \n+000312c0: 3d20 3c42 4c4f 434b 3e29 0a09 2020 2020 = ).. \n+000312d0: 7b0a 0909 6368 6f70 2024 6c3b 0a09 096d {...chop $l;...m\n+000312e0: 7920 2466 6972 7374 3b0a 0909 2824 6669 y $first;...($fi\n+000312f0: 7273 742c 2024 6c29 203d 2073 706c 6974 rst, $l) = split\n+00031300: 282f 5c73 2f2c 2024 6c2c 2032 293b 0a09 (/\\s/, $l, 2);..\n+00031310: 0969 6620 2824 6669 7273 7420 6571 2027 .if ($first eq '\n+00031320: 616c 6c4d 4435 2729 0a09 097b 0a09 0920 allMD5')...{... \n+00031330: 2020 2028 2461 6c6c 4d44 352c 2024 7374 ($allMD5, $st\n+00031340: 6174 536f 7572 6365 5369 7a65 2c20 2473 atSourceSize, $s\n+00031350: 7461 7453 7462 7553 697a 652c 2024 7374 tatStbuSize, $st\n+00031360: 6174 4e6f 466f 726b 7343 502c 0a09 0920 atNoForksCP,... \n+00031370: 2020 2020 2473 7461 744e 6f46 6f72 6b73 $statNoForks\n+00031380: 436f 6d70 7265 7373 2c20 2473 7461 744e Compress, $statN\n+00031390: 6f42 6c6f 636b 732c 2024 7374 6174 4e6f oBlocks, $statNo\n+000313a0: 4c61 7465 4c69 6e6b 732c 0a09 0920 2020 LateLinks,... \n+000313b0: 2020 246e 6f57 6172 6e69 6e67 732c 2024 $noWarnings, $\n+000313c0: 6e6f 4572 726f 7273 2920 3d0a 0909 0920 noErrors) =.... \n+000313d0: 7370 6c69 7428 2f5c 732f 2c20 246c 293b split(/\\s/, $l);\n+000313e0: 0a23 7072 696e 7420 2273 6574 7469 6e67 .#print \"setting\n+000313f0: 2061 6c6c 4d44 355c 6e22 3b0a 0909 7d0a allMD5\\n\";...}.\n+00031400: 0909 656c 7369 6620 2824 6669 7273 7420 ..elsif ($first \n+00031410: 6571 2027 6c69 6e6b 2729 0a09 097b 0a09 eq 'link')...{..\n+00031420: 0920 2020 2024 7772 4c61 7465 4c69 6e6b . $wrLateLink\n+00031430: 2d3e 7072 696e 7428 2224 6669 7273 7420 ->print(\"$first \n+00031440: 246c 5c6e 2229 3b20 2020 2020 2320 276c $l\\n\"); # 'l\n+00031450: 696e 6b20 6d64 3527 0a09 0920 2020 206d ink md5'... m\n+00031460: 7920 2465 7869 7374 696e 6746 696c 6520 y $existingFile \n+00031470: 3d20 3c42 4c4f 434b 3e3b 0a09 0920 2020 = ;... \n+00031480: 2063 686f 7020 2465 7869 7374 696e 6746 chop $existingF\n+00031490: 696c 653b 0a09 0920 2020 2024 7072 4c6f ile;... $prLo\n+000314a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000314b0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n+000314c0: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n+000314d0: 2266 696c 6520 3c24 746d 704e 616d 653e \"file <$tmpName>\n+000314e0: 2065 6e64 7320 756e 6578 7065 6374 6564 ends unexpected\n+000314f0: 2061 7420 6c69 6e65 2024 2e22 5d2c 0a09 at line $.\"],..\n+00031500: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n+00031510: 3129 0a09 0909 756e 6c65 7373 2024 6578 1)....unless $ex\n+00031520: 6973 7469 6e67 4669 6c65 3b0a 0909 2020 istingFile;... \n+00031530: 2020 2465 7869 7374 696e 6746 696c 6520 $existingFile \n+00031540: 3d20 3a3a 7265 6c50 6174 6828 2474 6172 = ::relPath($tar\n+00031550: 6765 7444 6972 2c20 2465 7869 7374 696e getDir, $existin\n+00031560: 6746 696c 6529 3b0a 0909 2020 2020 2465 gFile);... $e\n+00031570: 7869 7374 696e 6746 696c 6520 3d7e 2073 xistingFile =~ s\n+00031580: 2f5c 6e2f 5c30 2f6f 673b 0a09 0920 2020 /\\n/\\0/og;... \n+00031590: 2024 7772 4c61 7465 4c69 6e6b 2d3e 7072 $wrLateLink->pr\n+000315a0: 696e 7428 2224 6578 6973 7469 6e67 4669 int(\"$existingFi\n+000315b0: 6c65 5c6e 2229 3b0a 0909 2020 2020 6d79 le\\n\");... my\n+000315c0: 2024 6e65 774c 696e 6b20 3d20 3c42 4c4f $newLink = ;... chop \n+000315e0: 246e 6577 4c69 6e6b 3b0a 0909 2020 2020 $newLink;... \n+000315f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00031600: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00031610: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n+00031620: 0909 2020 5b22 6669 6c65 203c 2474 6d70 .. [\"file <$tmp\n+00031630: 4e61 6d65 3e20 656e 6473 2075 6e65 7870 Name> ends unexp\n+00031640: 6563 7465 6420 6174 206c 696e 6520 242e ected at line $.\n+00031650: 225d 2c0a 0909 0909 2020 272d 6578 6974 \"],..... '-exit\n+00031660: 2720 3d3e 2031 290a 0909 0975 6e6c 6573 ' => 1)....unles\n+00031670: 7320 246e 6577 4c69 6e6b 3b0a 0909 2020 s $newLink;... \n+00031680: 2020 246e 6577 4c69 6e6b 203d 203a 3a72 $newLink = ::r\n+00031690: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi\n+000316a0: 722c 2024 6e65 774c 696e 6b29 3b0a 0909 r, $newLink);...\n+000316b0: 2020 2020 246e 6577 4c69 6e6b 203d 7e20 $newLink =~ \n+000316c0: 732f 5c6e 2f5c 302f 6f67 3b0a 0909 2020 s/\\n/\\0/og;... \n+000316d0: 2020 2477 724c 6174 654c 696e 6b2d 3e70 $wrLateLink->p\n+000316e0: 7269 6e74 2822 246e 6577 4c69 6e6b 5c6e rint(\"$newLink\\n\n+000316f0: 2229 3b0a 2370 7269 6e74 2022 626c 6f63 \");.#print \"bloc\n+00031700: 6b6c 6174 656c 696e 6b73 3a20 2466 6972 klatelinks: $fir\n+00031710: 7374 2024 6c2c 2024 6578 6973 7469 6e67 st $l, $existing\n+00031720: 4669 6c65 202d 3e20 246e 6577 4c69 6e6b File -> $newLink\n+00031730: 5c6e 223b 0a09 097d 0a09 0965 6c73 6966 \\n\";...}...elsif\n+00031740: 2028 2466 6972 7374 2065 7120 2763 6f6d ($first eq 'com\n+00031750: 7072 6573 7327 290a 0909 7b0a 0909 2020 press')...{... \n+00031760: 2020 2477 724c 6174 654c 696e 6b2d 3e70 $wrLateLink->p\n+00031770: 7269 6e74 2822 2466 6972 7374 2024 6c5c rint(\"$first $l\\\n+00031780: 6e22 293b 2020 2023 2027 636f 6d70 7265 n\"); # 'compre\n+00031790: 7373 206d 6435 270a 0909 2020 2020 6d79 ss md5'... my\n+000317a0: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile =\n+000317b0: 203c 424c 4f43 4b3e 3b0a 0909 2020 2020 ;... \n+000317c0: 6368 6f70 2024 6578 6973 7469 6e67 4669 chop $existingFi\n+000317d0: 6c65 3b0a 0909 2020 2020 2470 724c 6f67 le;... $prLog\n+000317e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000317f0: 3d3e 2027 4527 2c0a 0909 0909 2020 272d => 'E',..... '-\n+00031800: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n+00031810: 6669 6c65 203c 2474 6d70 4e61 6d65 3e20 file <$tmpName> \n+00031820: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected \n+00031830: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $.\"],...\n+00031840: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n+00031850: 290a 0909 0975 6e6c 6573 7320 2465 7869 )....unless $exi\n+00031860: 7374 696e 6746 696c 653b 0a09 0920 2020 stingFile;... \n+00031870: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile =\n+00031880: 203a 3a72 656c 5061 7468 2824 7461 7267 ::relPath($targ\n+00031890: 6574 4469 722c 2024 6578 6973 7469 6e67 etDir, $existing\n+000318a0: 4669 6c65 293b 0a09 0920 2020 2024 6578 File);... $ex\n+000318b0: 6973 7469 6e67 4669 6c65 203d 7e20 732f istingFile =~ s/\n+000318c0: 5c6e 2f5c 302f 6f67 3b0a 0909 2020 2020 \\n/\\0/og;... \n+000318d0: 2477 724c 6174 654c 696e 6b2d 3e70 7269 $wrLateLink->pri\n+000318e0: 6e74 2822 2465 7869 7374 696e 6746 696c nt(\"$existingFil\n+000318f0: 655c 6e22 293b 0a09 097d 0a09 0965 6c73 e\\n\");...}...els\n+00031900: 650a 0909 7b0a 0909 2020 2020 6d79 2024 e...{... my $\n+00031910: 636f 6d70 723b 0a09 0920 2020 2028 2462 compr;... ($b\n+00031920: 6c6f 636b 4d44 352c 2024 636f 6d70 722c lockMD5, $compr,\n+00031930: 2024 626c 6f63 6b46 696c 656e 616d 6529 $blockFilename)\n+00031940: 203d 0a09 0909 2824 6669 7273 742c 2073 =....($first, s\n+00031950: 706c 6974 282f 5c73 2f2c 2024 6c2c 2032 plit(/\\s/, $l, 2\n+00031960: 2929 3b0a 0909 2020 2020 246f 6c64 4669 ));... $oldFi\n+00031970: 6c65 6e61 6d65 2d3e 7365 7442 6c6f 636b lename->setBlock\n+00031980: 4669 6c65 6e61 6d65 436f 6d70 7228 2462 FilenameCompr($b\n+00031990: 6c6f 636b 4d44 352c 0a09 0909 0909 0920 lockMD5,....... \n+000319a0: 2020 2224 7461 7267 6574 4469 722f 2462 \"$targetDir/$b\n+000319b0: 6c6f 636b 4669 6c65 6e61 6d65 222c 0a09 lockFilename\",..\n+000319c0: 0909 0909 0909 2463 6f6d 7072 293b 0a09 ......$compr);..\n+000319d0: 0920 2020 2024 616b 7446 696c 656e 616d . $aktFilenam\n+000319e0: 652d 3e73 746f 7265 426c 6f63 6b28 272d e->storeBlock('-\n+000319f0: 6669 6c65 6e61 6d65 2720 3d3e 2462 6c6f filename' =>$blo\n+00031a00: 636b 4669 6c65 6e61 6d65 2c0a 0909 0909 ckFilename,.....\n+00031a10: 0920 2020 2020 272d 6d64 3573 756d 2720 . '-md5sum' \n+00031a20: 3d3e 2024 626c 6f63 6b4d 4435 2c0a 0909 => $blockMD5,...\n+00031a30: 0909 0920 2020 2020 272d 636f 6d70 7227 ... '-compr'\n+00031a40: 203d 3e20 2463 6f6d 7072 293b 0a23 7072 => $compr);.#pr\n+00031a50: 696e 7420 2262 6c6f 636b 4d44 3520 3d20 int \"blockMD5 = \n+00031a60: 2462 6c6f 636b 4d44 352c 2062 6c6f 636b $blockMD5, block\n+00031a70: 4669 6c65 6e61 6d65 203d 2024 626c 6f63 Filename = $bloc\n+00031a80: 6b46 696c 656e 616d 655c 6e22 3b0a 0909 kFilename\\n\";...\n+00031a90: 7d0a 0920 2020 207d 0a23 7072 696e 7420 }.. }.#print \n+00031aa0: 2261 6c6c 4d44 3520 3d20 2461 6c6c 4d44 \"allMD5 = $allMD\n+00031ab0: 352c 2073 7461 7453 6f75 7263 6553 697a 5, statSourceSiz\n+00031ac0: 6520 3d20 2473 7461 7453 6f75 7263 6553 e = $statSourceS\n+00031ad0: 697a 652c 2073 7461 7453 7462 7553 697a ize, statStbuSiz\n+00031ae0: 6520 3d20 2473 7461 7453 7462 7553 697a e = $statStbuSiz\n+00031af0: 655c 6e22 202e 0a23 2020 2020 2273 7461 e\\n\" ..# \"sta\n+00031b00: 744e 6f46 6f72 6b73 4350 203d 2024 7374 tNoForksCP = $st\n+00031b10: 6174 4e6f 466f 726b 7343 502c 2073 7461 atNoForksCP, sta\n+00031b20: 744e 6f46 6f72 6b73 436f 6d70 7265 7373 tNoForksCompress\n+00031b30: 203d 2024 7374 6174 4e6f 466f 726b 7343 = $statNoForksC\n+00031b40: 6f6d 7072 6573 735c 6e22 202e 0a23 2020 ompress\\n\" ..# \n+00031b50: 2020 2273 7461 744e 6f42 6c6f 636b 7320 \"statNoBlocks \n+00031b60: 3d20 2473 7461 744e 6f42 6c6f 636b 732c = $statNoBlocks,\n+00031b70: 2073 7461 744e 6f4c 6174 654c 696e 6b73 statNoLateLinks\n+00031b80: 203d 2024 7374 6174 4e6f 4c61 7465 4c69 = $statNoLateLi\n+00031b90: 6e6b 735c 6e22 202e 0a23 2020 2020 226e nks\\n\" ..# \"n\n+00031ba0: 6f57 6172 6e69 6e67 7320 3d20 246e 6f57 oWarnings = $noW\n+00031bb0: 6172 6e69 6e67 732c 206e 6f45 7272 6f72 arnings, noError\n+00031bc0: 7320 3d20 246e 6f45 7272 6f72 735c 6e22 s = $noErrors\\n\"\n+00031bd0: 3b0a 0920 2020 2063 6c6f 7365 2842 4c4f ;.. close(BLO\n+00031be0: 434b 293b 0a09 2020 2020 756e 6c69 6e6b CK);.. unlink\n+00031bf0: 2024 746d 704e 616d 653b 0a0a 0920 2020 $tmpName;... \n+00031c00: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad\n+00031c10: 6453 756d 4f72 6967 4669 6c65 7328 2473 dSumOrigFiles($s\n+00031c20: 7461 7453 6f75 7263 6553 697a 652c 2024 tatSourceSize, $\n+00031c30: 7569 642c 2024 6769 6429 3b0a 0920 2020 uid, $gid);.. \n+00031c40: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad\n+00031c50: 6453 756d 4d44 3553 756d 2824 7374 6174 dSumMD5Sum($stat\n+00031c60: 536f 7572 6365 5369 7a65 293b 0a09 2020 SourceSize);.. \n+00031c70: 2020 246d 6169 6e3a 3a73 7461 742d 3e69 $main::stat->i\n+00031c80: 6e63 725f 6e6f 4c61 7465 4c69 6e6b 7328 ncr_noLateLinks(\n+00031c90: 2475 6964 2c20 2467 6964 2c20 2473 7461 $uid, $gid, $sta\n+00031ca0: 744e 6f4c 6174 654c 696e 6b73 293b 0a09 tNoLateLinks);..\n+00031cb0: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat-\n+00031cc0: 3e69 6e63 725f 6e6f 466f 726b 7343 5028 >incr_noForksCP(\n+00031cd0: 2473 7461 744e 6f46 6f72 6b73 4350 293b $statNoForksCP);\n+00031ce0: 0a09 2020 2020 246d 6169 6e3a 3a73 7461 .. $main::sta\n+00031cf0: 742d 3e69 6e63 725f 6e6f 466f 726b 7343 t->incr_noForksC\n+00031d00: 6f6d 7072 6573 7328 2473 7461 744e 6f46 ompress($statNoF\n+00031d10: 6f72 6b73 436f 6d70 7265 7373 293b 0a09 orksCompress);..\n+00031d20: 2020 2020 2470 724c 6f67 2d3e 6164 6445 $prLog->addE\n+00031d30: 6e63 6f75 6e74 6572 2827 2d6b 696e 6427 ncounter('-kind'\n+00031d40: 203d 3e20 2745 272c 0a09 0909 0920 272d => 'E',..... '-\n+00031d50: 6164 6427 203d 3e20 246e 6f45 7272 6f72 add' => $noError\n+00031d60: 7329 3b0a 0920 2020 2024 7072 4c6f 672d s);.. $prLog-\n+00031d70: 3e61 6464 456e 636f 756e 7465 7228 272d >addEncounter('-\n+00031d80: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00031d90: 0909 2027 2d61 6464 2720 3d3e 2024 6e6f .. '-add' => $no\n+00031da0: 5761 726e 696e 6773 293b 0a0a 0920 2020 Warnings);... \n+00031db0: 2069 6620 2824 636f 6d70 7265 7373 426c if ($compressBl\n+00031dc0: 6f63 6b20 6571 2027 7527 206f 7220 246c ock eq 'u' or $l\n+00031dd0: 6174 6543 6f6d 7072 6573 7329 0a09 2020 ateCompress).. \n+00031de0: 2020 7b0a 0909 246d 6169 6e3a 3a73 7461 {...$main::sta\n+00031df0: 742d 3e61 6464 5375 6d4e 6577 436f 7079 t->addSumNewCopy\n+00031e00: 2824 7374 6174 5374 6275 5369 7a65 293b ($statStbuSize);\n+00031e10: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00031e20: 650a 0920 2020 207b 0a09 0924 6d61 696e e.. {...$main\n+00031e30: 3a3a 7374 6174 2d3e 6164 6453 756d 4e65 ::stat->addSumNe\n+00031e40: 7743 6f6d 7072 2824 7374 6174 5374 6275 wCompr($statStbu\n+00031e50: 5369 7a65 2c20 2473 7461 7453 6f75 7263 Size, $statSourc\n+00031e60: 6553 697a 6529 3b0a 0920 2020 207d 0a09 eSize);.. }..\n+00031e70: 2020 2020 246d 6169 6e3a 3a73 7461 742d $main::stat-\n+00031e80: 3e61 6464 5f6e 6f4d 4435 6564 4669 6c65 >add_noMD5edFile\n+00031e90: 7328 2473 7461 744e 6f42 6c6f 636b 7320 s($statNoBlocks \n+00031ea0: 2b20 3129 3b0a 0920 2020 2024 6d61 696e + 1);.. $main\n+00031eb0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF\n+00031ec0: 6f72 6b73 4d44 3528 293b 0a0a 0920 2020 orksMD5();... \n+00031ed0: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s\n+00031ee0: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename'\n+00031ef0: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp\n+00031f00: 6569 6368 6572 7420 696e 2064 626d 0a09 eichert in dbm..\n+00031f10: 0909 0927 2d6d 6435 7375 6d27 203d 3e20 ...'-md5sum' => \n+00031f20: 2461 6c6c 4d44 352c 2020 2320 2e6d 6435 $allMD5, # .md5\n+00031f30: 7375 6d2d 4461 7465 690a 0909 0909 272d sum-Datei.....'-\n+00031f40: 636f 6d70 7227 203d 3e20 2762 272c 0a09 compr' => 'b',..\n+00031f50: 0909 0927 2d64 6576 2720 3d3e 2024 6465 ...'-dev' => $de\n+00031f60: 762c 0a09 0909 0927 2d69 6e6f 6465 2720 v,.....'-inode' \n+00031f70: 3d3e 2024 696e 6f64 652c 0a09 0909 0927 => $inode,.....'\n+00031f80: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' =>\n+00031f90: 2030 2c0a 0909 0909 272d 6374 696d 6527 0,.....'-ctime'\n+00031fa0: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,.....\n+00031fb0: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti\n+00031fc0: 6d65 2c0a 0909 0909 272d 6d74 696d 6527 me,.....'-mtime'\n+00031fd0: 203d 3e20 246d 7469 6d65 2c0a 0909 0909 => $mtime,.....\n+00031fe0: 272d 6174 696d 6527 203d 3e20 2461 7469 '-atime' => $ati\n+00031ff0: 6d65 2c0a 0909 0909 272d 7369 7a65 2720 me,.....'-size' \n+00032000: 3d3e 2024 7369 7a65 2c0a 0909 0909 272d => $size,.....'-\n+00032010: 7569 6427 203d 3e20 2475 6964 2c0a 0909 uid' => $uid,...\n+00032020: 0909 272d 6769 6427 203d 3e20 2467 6964 ..'-gid' => $gid\n+00032030: 2c0a 0909 0909 272d 6d6f 6465 2720 3d3e ,.....'-mode' =>\n+00032040: 2024 6d6f 6465 293b 0a09 7d0a 2020 2020 $mode);..}. \n+00032050: 0a20 2020 2020 2020 2023 206e 6575 6520 . # neue \n+00032060: 4b6f 6d70 7269 6d69 6572 2d4a 6f62 7320 Komprimier-Jobs \n+00032070: 6569 6e68 c3a4 6e67 656e 0a20 2020 2020 einh..ngen. \n+00032080: 2020 2077 6869 6c65 2028 2470 6172 466f while ($parFo\n+00032090: 726b 436f 6d70 722d 3e67 6574 4e6f 4672 rkCompr->getNoFr\n+000320a0: 6565 456e 7472 6965 7328 2920 3e20 3020 eeEntries() > 0 \n+000320b0: 616e 640a 2020 2020 2020 2020 2020 2020 and. \n+000320c0: 2020 2024 6669 666f 436f 6d70 722d 3e67 $fifoCompr->g\n+000320d0: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries(\n+000320e0: 2920 3e20 3029 0a20 2020 2020 2020 207b ) > 0). {\n+000320f0: 0a20 2020 2020 2020 2020 2020 2023 2057 . # W\n+00032100: 6520 6469 6420 736f 6d65 7468 696e 670a e did something.\n+00032110: 2020 2020 2020 2020 2020 2020 246d 6169 $mai\n+00032120: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched\n+00032130: 756c 6572 2d3e 7265 7365 7428 293b 0a0a uler->reset();..\n+00032140: 2020 2020 2020 2020 2020 2020 6d79 2028 my (\n+00032150: 2464 6972 2c20 2466 696c 652c 2024 7569 $dir, $file, $ui\n+00032160: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, \n+00032170: 246d 6435 2920 3d0a 2020 2020 2020 2020 $md5) =. \n+00032180: 2020 2020 2020 2020 407b 2466 6966 6f43 @{$fifoC\n+00032190: 6f6d 7072 2d3e 6765 7428 297d 3b0a 0920 ompr->get()};.. \n+000321a0: 2020 2075 6e6c 6573 7320 282d 6520 2224 unless (-e \"$\n+000321b0: 6469 722f 2466 696c 6522 2920 2020 2023 dir/$file\") #\n+000321c0: 2066 696c 6520 7761 7320 6465 6c65 7465 file was delete\n+000321d0: 6420 6475 7269 6e67 2077 6169 7420 696e d during wait in\n+000321e0: 2071 7565 7565 0a09 2020 2020 7b0a 0909 queue.. {...\n+000321f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00032200: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00032210: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00032220: 0a09 0909 2020 2020 2020 5b22 6669 6c65 .... [\"file\n+00032230: 203c 2464 6972 2f24 6669 6c65 3e20 6465 <$dir/$file> de\n+00032240: 6c65 7465 6420 6475 7269 6e67 2062 6163 leted during bac\n+00032250: 6b75 7022 5d29 3b0a 0909 6e65 7874 3b0a kup\"]);...next;.\n+00032260: 0920 2020 207d 0a20 2020 2020 2020 2020 . }. \n+00032270: 2020 206d 7920 2824 6465 762c 2024 696e my ($dev, $in\n+00032280: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt\n+00032290: 696d 652c 2024 6174 696d 652c 2024 7369 ime, $atime, $si\n+000322a0: 7a65 2920 3d0a 2020 2020 2020 2020 2020 ze) =. \n+000322b0: 2020 2020 2020 2873 7461 7428 2224 6469 (stat(\"$di\n+000322c0: 722f 2466 696c 6522 2929 5b30 2c20 312c r/$file\"))[0, 1,\n+000322d0: 2031 302c 2039 2c20 382c 2037 5d3b 0a20 10, 9, 8, 7];. \n+000322e0: 2020 2020 2020 2020 2020 2024 6d6f 6465 $mode\n+000322f0: 2026 3d20 3037 3737 373b 0a0a 2020 2020 &= 07777;.. \n+00032300: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog->\n+00032310: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00032320: 2027 4427 2c0a 2020 2020 2020 2020 2020 'D',. \n+00032330: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032340: 272d 7374 7227 203d 3e20 5b22 2463 6f6d '-str' => [\"$com\n+00032350: 7072 6573 7320 3c20 2464 6972 2f24 6669 press < $dir/$fi\n+00032360: 6c65 203e 2022 202e 0a20 2020 2020 2020 le > \" .. \n+00032370: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032380: 2020 2020 2020 2020 2020 2020 2020 2224 \"$\n+00032390: 7461 7267 6574 4469 722f 2466 696c 6524 targetDir/$file$\n+000323a0: 706f 7374 6669 7822 5d29 0a20 2020 2020 postfix\"]). \n+000323b0: 2020 2020 2020 2020 2020 2069 6620 2824 if ($\n+000323c0: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2);\n+000323d0: 0a0a 0920 2020 206d 7920 2474 6d70 4d44 ... my $tmpMD\n+000323e0: 3546 696c 6520 3d20 263a 3a75 6e69 7146 5File = &::uniqF\n+000323f0: 696c 654e 616d 6528 2224 746d 7064 6972 ileName(\"$tmpdir\n+00032400: 2f73 746f 7265 4261 636b 7570 2d6d 6435 /storeBackup-md5\n+00032410: 2e22 293b 0a09 2020 2020 2470 6172 466f .\");.. $parFo\n+00032420: 726b 436f 6d70 722d 3e61 6464 5f6e 6f62 rkCompr->add_nob\n+00032430: 6c6f 636b 2827 2d65 7865 6327 203d 3e20 lock('-exec' => \n+00032440: 246d 6169 6e3a 3a73 7462 754d 6435 4578 $main::stbuMd5Ex\n+00032450: 6563 2c0a 2020 2020 2020 2020 2020 2020 ec,. \n+00032460: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032470: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [\n+00032480: 2463 6f6d 7072 6573 7343 6f6d 6d61 6e64 $compressCommand\n+00032490: 2c20 2224 6469 722f 2466 696c 6522 2c0a , \"$dir/$file\",.\n+000324a0: 0909 0920 2020 2020 2020 2224 7461 7267 ... \"$targ\n+000324b0: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post\n+000324c0: 6669 7822 2c0a 0909 0920 2020 2020 2020 fix\",.... \n+000324d0: 2474 6d70 4d44 3546 696c 652c 0a09 0909 $tmpMD5File,....\n+000324e0: 2020 2020 2020 2040 2463 6f6d 7072 6573 @$compres\n+000324f0: 734f 7074 696f 6e73 5d2c 0a20 2020 2020 sOptions],. \n+00032500: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032510: 2020 2020 2020 2020 2020 272d 776f 726b '-work\n+00032520: 696e 6744 6972 2720 3d3e 2027 2e27 2c0a ingDir' => '.',.\n+00032530: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032540: 2020 2020 2020 2020 2020 2020 2020 2027 '\n+00032550: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2022 -outRandom' => \"\n+00032560: 2474 6d70 6469 722f 7374 6465 7272 222c $tmpdir/stderr\",\n+00032570: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00032580: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032590: 272d 696e 666f 2720 3d3e 0a20 2020 2020 '-info' =>. \n+000325a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000325b0: 2020 2020 2020 2020 2020 5b24 6465 762c [$dev,\n+000325c0: 2024 696e 6f64 652c 2024 6469 722c 2024 $inode, $dir, $\n+000325d0: 6669 6c65 2c20 2475 6964 2c20 2467 6964 file, $uid, $gid\n+000325e0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+000325f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032600: 2020 246d 6f64 652c 2024 6d64 352c 2024 $mode, $md5, $\n+00032610: 6374 696d 652c 2024 6d74 696d 652c 0a20 ctime, $mtime,. \n+00032620: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00032630: 2020 2020 2020 2020 2020 2020 2020 2024 $\n+00032640: 6174 696d 652c 2024 7369 7a65 2c20 2474 atime, $size, $t\n+00032650: 6d70 4d44 3546 696c 655d 290a 0909 6f72 mpMD5File])...or\n+00032660: 2064 6965 2022 6d75 7374 206e 6f74 2068 die \"must not h\n+00032670: 6170 7065 6e20 2863 6f6d 7072 2922 3b0a appen (compr)\";.\n+00032680: 0a0a 2020 2020 2020 2020 7d0a 0a20 2020 .. }.. \n+00032690: 2020 2020 2023 2057 6169 7420 696e 2063 # Wait in c\n+000326a0: 6173 6520 7765 2064 6964 206e 6f74 6869 ase we did nothi\n+000326b0: 6e67 2069 6e20 7468 6973 206c 6f6f 7020 ng in this loop \n+000326c0: 7275 6e0a 2020 2020 2020 2020 246d 6169 run. $mai\n+000326d0: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched\n+000326e0: 756c 6572 2d3e 7761 6974 2829 3b0a 2020 uler->wait();. \n+000326f0: 2020 7d0a 0a20 2020 2069 6620 2825 696e }.. if (%in\n+00032700: 5072 6f67 7265 7373 290a 2020 2020 7b0a Progress). {.\n+00032710: 096d 7920 246d 6435 3b0a 0924 7072 4c6f .my $md5;..$prLo\n+00032720: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00032730: 203d 3e20 2744 272c 0a09 0920 2020 2020 => 'D',... \n+00032740: 2027 2d73 7472 2720 3d3e 205b 2272 6570 '-str' => [\"rep\n+00032750: 6561 7420 6368 6563 6b69 6e67 206f 6620 eat checking of \n+00032760: 6964 656e 7469 6361 6c20 6669 6c65 7322 identical files\"\n+00032770: 5d29 0a09 2020 2020 6966 2024 6465 6275 ]).. if $debu\n+00032780: 674d 6f64 6520 3e3d 2033 3b0a 0966 6f72 gMode >= 3;..for\n+00032790: 6561 6368 2024 6d64 3520 286b 6579 7320 each $md5 (keys \n+000327a0: 2569 6e50 726f 6772 6573 7329 0a09 7b0a %inProgress)..{.\n+000327b0: 0920 2020 2024 7265 6164 4469 7241 6e64 . $readDirAnd\n+000327c0: 4368 6563 6b2d 3e70 7573 6862 6163 6b28 Check->pushback(\n+000327d0: 2469 6e50 726f 6772 6573 737b 246d 6435 $inProgress{$md5\n+000327e0: 7d2c 2024 7072 4c6f 672c 0a09 0924 6465 }, $prLog,...$de\n+000327f0: 6275 674d 6f64 6520 3e3d 2033 203f 2031 bugMode >= 3 ? 1\n+00032800: 203a 2030 293b 0a09 7d0a 0928 2569 6e50 : 0);..}..(%inP\n+00032810: 726f 6772 6573 7329 203d 2028 293b 0a09 rogress) = ();..\n+00032820: 6e6f 2077 6172 6e69 6e67 7320 2764 6570 no warnings 'dep\n+00032830: 7265 6361 7465 6427 3b0a 0967 6f74 6f20 recated';..goto \n+00032840: 6265 6769 6e4d 6169 6e4c 6f6f 704e 6f72 beginMainLoopNor\n+00032850: 6d61 6c4f 7065 7261 7469 6f6e 3b0a 2020 malOperation;. \n+00032860: 2020 7d0a 2020 2020 246d 6169 6e3a 3a73 }. $main::s\n+00032870: 7461 742d 3e70 7269 6e74 5072 6f67 7265 tat->printProgre\n+00032880: 7373 5265 706f 7274 2829 3b0a 0a20 2020 ssReport();.. \n+00032890: 2069 6620 2824 6c61 7465 4c69 6e6b 7329 if ($lateLinks)\n+000328a0: 0a20 2020 207b 0a09 2477 724c 6174 654c . {..$wrLateL\n+000328b0: 696e 6b2d 3e77 6169 7428 293b 0a09 6d79 ink->wait();..my\n+000328c0: 2024 6f75 7420 3d20 2477 724c 6174 654c $out = $wrLateL\n+000328d0: 696e 6b2d 3e67 6574 5354 4445 5252 2829 ink->getSTDERR()\n+000328e0: 3b0a 0969 6620 2840 246f 7574 290a 097b ;..if (@$out)..{\n+000328f0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+00032900: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00032910: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n+00032920: 3d3e 205b 2277 7269 7469 6e67 206c 6174 => [\"writing lat\n+00032930: 654c 696e 6b73 2066 696c 6520 7265 706f eLinks file repo\n+00032940: 7274 7320 6572 726f 7273 3a22 2c0a 0909 rts errors:\",...\n+00032950: 0909 2020 2020 2040 246f 7574 5d29 3b0a .. @$out]);.\n+00032960: 0920 2020 2065 7869 7420 313b 0a09 7d0a . exit 1;..}.\n+00032970: 0924 7772 4c61 7465 4c69 6e6b 2d3e 636c .$wrLateLink->cl\n+00032980: 6f73 6528 293b 0a0a 0969 6620 2873 6361 ose();...if (sca\n+00032990: 6c61 7228 2561 6c6c 4261 636b 7570 4469 lar(%allBackupDi\n+000329a0: 7273 2929 0a09 7b0a 0920 2020 2023 2067 rs))..{.. # g\n+000329b0: 656e 6572 6174 6520 696e 666f 726d 6174 enerate informat\n+000329c0: 696f 6e20 7468 6174 2072 6566 6572 656e ion that referen\n+000329d0: 6365 7320 6861 7665 2074 6f20 6265 2072 ces have to be r\n+000329e0: 6573 6f6c 7665 640a 0920 2020 206d 7920 esolved.. my \n+000329f0: 2474 6f20 3d20 2224 7461 7267 6574 4469 $to = \"$targetDi\n+00032a00: 722f 2e73 746f 7265 4261 636b 7570 4c69 r/.storeBackupLi\n+00032a10: 6e6b 732f 6c69 6e6b 546f 223b 0a09 2020 nks/linkTo\";.. \n+00032a20: 2020 6c6f 6361 6c20 2a54 4f3b 0a09 2020 local *TO;.. \n+00032a30: 2020 6f70 656e 2854 4f2c 2022 3e22 2c20 open(TO, \">\", \n+00032a40: 2474 6f29 206f 720a 0909 2470 724c 6f67 $to) or...$prLog\n+00032a50: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00032a60: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n+00032a70: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n+00032a80: 6e6f 7420 6f70 656e 203c 2474 6f3e 225d not open <$to>\"]\n+00032a90: 2c0a 0909 0920 2020 2020 2027 2d61 6464 ,.... '-add\n+00032aa0: 2720 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 ' => [__FILE__, \n+00032ab0: 5f5f 4c49 4e45 5f5f 5d2c 0a09 0909 2020 __LINE__],.... \n+00032ac0: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n+00032ad0: 293b 0a0a 0920 2020 206d 7920 2461 6264 );... my $abd\n+00032ae0: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $\n+00032af0: 6162 6420 2825 616c 6c42 6163 6b75 7044 abd (%allBackupD\n+00032b00: 6972 7329 0a09 2020 2020 7b0a 0909 6d79 irs).. {...my\n+00032b10: 2024 7265 6c70 6174 6820 3d20 3a3a 7265 $relpath = ::re\n+00032b20: 6c50 6174 6828 2474 6172 6765 7444 6972 lPath($targetDir\n+00032b30: 2c20 2461 6264 293b 0a09 096e 6578 7420 , $abd);...next \n+00032b40: 6966 2024 7265 6c70 6174 6820 6571 2027 if $relpath eq '\n+00032b50: 2e27 3b0a 0909 7072 696e 7420 544f 2022 .';...print TO \"\n+00032b60: 2472 656c 7061 7468 5c6e 2220 6f72 0a09 $relpath\\n\" or..\n+00032b70: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00032b80: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00032b90: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' \n+00032ba0: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => [\"cannot writ\n+00032bb0: 6520 746f 203c 2474 6f3e 225d 2c0a 0909 e to <$to>\"],...\n+00032bc0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n+00032bd0: 293b 0a0a 0909 6e65 7874 2069 6620 2470 );....next if $p\n+00032be0: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere\n+00032bf0: 6428 272d 6b69 6e64 2720 3d3e 2027 4527 d('-kind' => 'E'\n+00032c00: 293b 0a0a 0909 6d79 2024 6920 3d20 303b );....my $i = 0;\n+00032c10: 0a09 096c 6f63 616c 202a 4652 4f4d 3b0a ...local *FROM;.\n+00032c20: 0909 6d79 2024 6672 6f6d 203d 2022 2461 ..my $from = \"$a\n+00032c30: 6264 2f2e 7374 6f72 6542 6163 6b75 704c bd/.storeBackupL\n+00032c40: 696e 6b73 2f6c 696e 6b46 726f 6d22 3b0a inks/linkFrom\";.\n+00032c50: 0909 2469 2b2b 2077 6869 6c65 202d 6520 ..$i++ while -e \n+00032c60: 2224 6672 6f6d 2469 223b 0a09 096f 7065 \"$from$i\";...ope\n+00032c70: 6e28 4652 4f4d 2c20 223e 222c 2022 2466 n(FROM, \">\", \"$f\n+00032c80: 726f 6d24 6922 2920 6f72 0a09 0920 2020 rom$i\") or... \n+00032c90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00032ca0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00032cb0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n+00032cc0: 2263 616e 6e6f 7420 7772 6974 6520 746f \"cannot write to\n+00032cd0: 203c 2466 726f 6d24 693e 225d 2c0a 0909 <$from$i>\"],...\n+00032ce0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n+00032cf0: 293b 0a09 0924 7265 6c70 6174 6820 3d20 );...$relpath = \n+00032d00: 3a3a 7265 6c50 6174 6828 2461 6264 2c20 ::relPath($abd, \n+00032d10: 2474 6172 6765 7444 6972 293b 0a09 096e $targetDir);...n\n+00032d20: 6578 7420 6966 2024 7265 6c70 6174 6820 ext if $relpath \n+00032d30: 6571 2027 2e27 3b0a 0909 7072 696e 7420 eq '.';...print \n+00032d40: 4652 4f4d 2022 2472 656c 7061 7468 5c6e FROM \"$relpath\\n\n+00032d50: 2220 6f72 0a09 0920 2020 2024 7072 4c6f \" or... $prLo\n+00032d60: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00032d70: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n+00032d80: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => [\"canno\n+00032d90: 7420 7772 6974 6520 746f 203c 2466 726f t write to <$fro\n+00032da0: 6d24 693e 225d 2c0a 0909 0909 2020 272d m$i>\"],..... '-\n+00032db0: 6578 6974 2720 3d3e 2031 293b 0a09 0963 exit' => 1);...c\n+00032dc0: 6c6f 7365 2846 524f 4d29 206f 720a 0909 lose(FROM) or...\n+00032dd0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00032de0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00032df0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' =\n+00032e00: 3e20 5b22 6361 6e6e 6f74 2063 6c6f 7365 > [\"cannot close\n+00032e10: 203c 2466 726f 6d24 693e 225d 2c0a 0909 <$from$i>\"],...\n+00032e20: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n+00032e30: 293b 0a09 2020 2020 7d0a 0920 2020 2063 );.. }.. c\n+00032e40: 6c6f 7365 2854 4f29 206f 720a 0909 2470 lose(TO) or...$p\n+00032e50: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00032e60: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+00032e70: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00032e80: 2263 616e 6e6f 7420 636c 6f73 6520 3c24 \"cannot close <$\n+00032e90: 746f 3e22 5d2c 0a09 0909 2020 2020 2020 to>\"],.... \n+00032ea0: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);..\n+00032eb0: 7d0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 }. }.}...####\n+00032ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00032ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00032ee0: 2323 2323 0a23 2068 656c 7065 7220 7375 ####.# helper su\n+00032ef0: 6272 6f75 7469 6e65 7320 696e 2070 6163 broutines in pac\n+00032f00: 6b61 6765 2073 6368 6564 756c 6572 0a73 kage scheduler.s\n+00032f10: 7562 2063 6861 6e67 6553 796d 6c69 6e6b ub changeSymlink\n+00032f20: 5065 726d 730a 7b0a 2020 2020 6d79 2028 Perms.{. my (\n+00032f30: 2475 6964 2c20 2467 6964 2c20 2474 6172 $uid, $gid, $tar\n+00032f40: 6765 7444 6972 2c20 2466 696c 652c 2024 getDir, $file, $\n+00032f50: 746d 7064 6972 2c20 2470 724c 6f67 2920 tmpdir, $prLog) \n+00032f60: 3d20 2840 5f29 3b0a 2020 2020 2320 536f = (@_);. # So\n+00032f70: 6d65 204f 5320 2865 672e 204c 696e 7578 me OS (eg. Linux\n+00032f80: 2920 646f 206e 6f74 2063 6861 6e67 6520 ) do not change \n+00032f90: 7468 6520 7379 6d6c 696e 6b20 6974 7365 the symlink itse\n+00032fa0: 6c66 0a20 2020 2023 2077 6865 6e20 6361 lf. # when ca\n+00032fb0: 6c6c 696e 6720 7468 6520 7379 7374 656d lling the system\n+00032fc0: 2063 616c 6c20 6368 6d6f 642e 2054 6865 call chmod. The\n+00032fd0: 7920 6368 616e 6765 2074 6865 206f 776e y change the own\n+00032fe0: 6572 7368 6970 0a20 2020 2023 206f 6620 ership. # of \n+00032ff0: 7468 6520 6669 6c65 2072 6566 6572 7265 the file referre\n+00033000: 6420 746f 2062 7920 7468 6520 7379 6d70 d to by the symp\n+00033010: 6f6c 6963 206c 696e 6b2e 0a20 2020 2023 olic link.. #\n+00033020: 2054 6865 7265 666f 7265 2c20 6c63 686f Therefore, lcho\n+00033030: 776e 2068 6173 2074 6f20 6265 2075 7365 wn has to be use\n+00033040: 640a 2020 2020 6d79 2024 6368 6f77 6e20 d. my $chown \n+00033050: 3d0a 0966 6f72 6b50 726f 632d 3e6e 6577 =..forkProc->new\n+00033060: 2827 2d65 7865 6327 203d 3e20 2763 686f ('-exec' => 'cho\n+00033070: 776e 272c 0a09 0920 2020 2020 2027 2d70 wn',... '-p\n+00033080: 6172 616d 2720 3d3e 205b 272d 6827 2c20 aram' => ['-h', \n+00033090: 2224 7569 643a 2467 6964 222c 0a09 0909 \"$uid:$gid\",....\n+000330a0: 0920 2020 2224 7461 7267 6574 4469 722f . \"$targetDir/\n+000330b0: 2466 696c 6522 5d2c 0a09 0920 2020 2020 $file\"],... \n+000330c0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n+000330d0: 2022 2474 6d70 6469 722f 6368 6f77 6e2d \"$tmpdir/chown-\n+000330e0: 222c 0a09 0920 2020 2020 2027 2d70 724c \",... '-prL\n+000330f0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+00033100: 2020 2020 2463 686f 776e 2d3e 7761 6974 $chown->wait\n+00033110: 2829 3b0a 0a23 0909 0975 7469 6d65 2024 ();..#...utime $\n+00033120: 6174 696d 652c 2024 6d74 696d 652c 2022 atime, $mtime, \"\n+00033130: 2464 6972 2f24 6669 6c65 2220 6966 2024 $dir/$file\" if $\n+00033140: 7265 7365 7441 7469 6d65 3b0a 2309 0909 resetAtime;.#...\n+00033150: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m\n+00033160: 7469 6d65 2c20 2224 7461 7267 6574 4469 time, \"$targetDi\n+00033170: 722f 2466 696c 6522 3b0a 2309 0909 5e5e r/$file\";.#...^^\n+00033180: 2075 7469 6d65 2063 6861 6e67 6573 206f utime changes o\n+00033190: 7269 6769 6e61 6c20 6669 6c65 210a 7d0a riginal file!.}.\n+000331a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+000331b0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+000331c0: 7375 6220 7374 6f72 6553 796d 4c69 6e6b sub storeSymLink\n+000331d0: 496e 666f 730a 7b0a 2020 2020 6d79 2028 Infos.{. my (\n+000331e0: 2475 6964 2c20 2467 6964 2c20 2474 6172 $uid, $gid, $tar\n+000331f0: 6765 7444 6972 2c20 2466 696c 652c 2024 getDir, $file, $\n+00033200: 6465 762c 2024 696e 6f64 652c 2024 6374 dev, $inode, $ct\n+00033210: 696d 652c 2024 6d74 696d 652c 0a09 2461 ime, $mtime,..$a\n+00033220: 7469 6d65 2c20 2461 6b74 4669 6c65 6e61 time, $aktFilena\n+00033230: 6d65 2c20 2464 6562 7567 4d6f 6465 2c20 me, $debugMode, \n+00033240: 2470 724c 6f67 2920 3d20 2840 5f29 3b0a $prLog) = (@_);.\n+00033250: 0a20 2020 2024 6d61 696e 3a3a 7374 6174 . $main::stat\n+00033260: 2d3e 696e 6372 5f6e 6f53 796d 4c69 6e6b ->incr_noSymLink\n+00033270: 7328 2475 6964 2c20 2467 6964 293b 0a20 s($uid, $gid);. \n+00033280: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00033290: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D',\n+000332a0: 0a09 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n+000332b0: 0920 205b 2263 7265 6174 6564 2073 796d . [\"created sym\n+000332c0: 626f 6c69 6320 6c69 6e6b 203c 2474 6172 bolic link <$tar\n+000332d0: 6765 7444 6972 2f24 6669 6c65 225d 290a getDir/$file\"]).\n+000332e0: 0969 6620 2824 6465 6275 674d 6f64 6520 .if ($debugMode \n+000332f0: 3e3d 2032 293b 0a0a 2020 2020 2461 6b74 >= 2);.. $akt\n+00033300: 4669 6c65 6e61 6d65 2d3e 7374 6f72 6553 Filename->storeS\n+00033310: 796d 6c69 6e6b 2827 2d73 796d 6c69 6e6b ymlink('-symlink\n+00033320: 2720 3d3e 2024 6669 6c65 2c0a 0909 0920 ' => $file,.... \n+00033330: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => \n+00033340: 2464 6576 2c0a 0909 0920 2020 2020 2020 $dev,.... \n+00033350: 272d 696e 6f64 6527 203d 3e20 2469 6e6f '-inode' => $ino\n+00033360: 6465 2c0a 0909 0920 2020 2020 2020 272d de,.... '-\n+00033370: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n+00033380: 2c0a 0909 0920 2020 2020 2020 272d 6d74 ,.... '-mt\n+00033390: 696d 6527 203d 3e20 246d 7469 6d65 2c0a ime' => $mtime,.\n+000333a0: 0909 0920 2020 2020 2020 272d 6174 696d ... '-atim\n+000333b0: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,...\n+000333c0: 0920 2020 2020 2020 272d 7569 6427 203d . '-uid' =\n+000333d0: 3e20 2475 6964 2c0a 0909 0920 2020 2020 > $uid,.... \n+000333e0: 2020 272d 6769 6427 203d 3e20 2467 6964 '-gid' => $gid\n+000333f0: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...#########\n+00033400: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00033410: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00033420: 2323 2323 2323 2323 230a 7061 636b 6167 #########.packag\n+00033430: 6520 5374 6174 6973 7469 633b 0a6f 7572 e Statistic;.our\n+00033440: 2040 4953 4120 3d20 7177 2820 7374 6174 @ISA = qw( stat\n+00033450: 6973 7469 6344 656c 6574 654f 6c64 4261 isticDeleteOldBa\n+00033460: 636b 7570 4469 7273 2029 3b0a 0a23 2323 ckupDirs );..###\n+00033470: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00033480: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00033490: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{.\n+000334a0: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n+000334b0: 7368 6966 743b 0a0a 2020 2020 6d79 2028 shift;.. my (\n+000334c0: 2570 6172 616d 7329 203d 2028 272d 7374 %params) = ('-st\n+000334d0: 6172 7444 6174 6527 2020 2020 2020 2020 artDate' \n+000334e0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n+000334f0: 2027 2d61 6b74 4461 7465 2720 2020 2020 '-aktDate' \n+00033500: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,.\n+00033510: 0909 2020 2020 272d 7573 6572 4772 6f75 .. '-userGrou\n+00033520: 7053 7461 7446 696c 6527 203d 3e20 756e pStatFile' => un\n+00033530: 6465 662c 2020 2020 2023 2046 6c61 670a def, # Flag.\n+00033540: 0909 2020 2020 272d 6578 6365 7074 5375 .. '-exceptSu\n+00033550: 6666 6978 2720 2020 2020 203d 3e20 756e ffix' => un\n+00033560: 6465 662c 2020 2020 2023 2046 696c 656e def, # Filen\n+00033570: 616d 6520 2869 6620 7365 7429 0a09 0920 ame (if set)... \n+00033580: 2020 2027 2d70 724c 6f67 2720 2020 2020 '-prLog' \n+00033590: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n+000335a0: 2c0a 0909 2020 2020 272d 7072 6f67 7265 ,... '-progre\n+000335b0: 7373 5265 706f 7274 2720 2020 203d 3e20 ssReport' => \n+000335c0: 756e 6465 662c 0a09 0920 2020 2027 2d77 undef,... '-w\n+000335d0: 6974 6855 7365 7247 726f 7570 5374 6174 ithUserGroupStat\n+000335e0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... \n+000335f0: 2020 272d 7573 6572 4772 6f75 7053 7461 '-userGroupSta\n+00033600: 7446 696c 6527 203d 3e20 756e 6465 662c tFile' => undef,\n+00033610: 0a09 0920 2020 2027 2d63 6f6d 7072 6573 ... '-compres\n+00033620: 7327 2020 2020 2020 2020 2020 3d3e 2075 s' => u\n+00033630: 6e64 6566 0a09 0920 2020 2029 3b0a 0a20 ndef... );.. \n+00033640: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec\n+00033650: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\\%params\n+00033660: 2c20 5c40 5f2c 2027 5374 6174 6973 7469 , \\@_, 'Statisti\n+00033670: 633a 3a6e 6577 272c 0a09 0909 205b 272d c::new',.... ['-\n+00033680: 7072 4c6f 6727 2c20 272d 7072 6f67 7265 prLog', '-progre\n+00033690: 7373 5265 706f 7274 272c 0a09 0909 2020 ssReport',.... \n+000336a0: 272d 7769 7468 5573 6572 4772 6f75 7053 '-withUserGroupS\n+000336b0: 7461 7427 2c20 272d 7573 6572 4772 6f75 tat', '-userGrou\n+000336c0: 7053 7461 7446 696c 6527 2c0a 0909 0920 pStatFile',.... \n+000336d0: 2027 2d63 6f6d 7072 6573 7327 5d29 3b0a '-compress']);.\n+000336e0: 2020 2020 6d79 2024 7365 6c66 203d 0a09 my $self =..\n+000336f0: 7374 6174 6973 7469 6344 656c 6574 654f statisticDeleteO\n+00033700: 6c64 4261 636b 7570 4469 7273 2d3e 6e65 ldBackupDirs->ne\n+00033710: 7728 272d 7072 4c6f 6727 203d 3e20 2470 w('-prLog' => $p\n+00033720: 6172 616d 737b 272d 7072 4c6f 6727 7d2c arams{'-prLog'},\n+00033730: 0a09 0909 0909 2020 272d 6b69 6e64 2720 ...... '-kind' \n+00033740: 3d3e 2027 5327 293b 0a0a 2020 2020 263a => 'S');.. &:\n+00033750: 3a73 6574 5061 7261 6d73 4469 7265 6374 :setParamsDirect\n+00033760: 2824 7365 6c66 2c20 5c25 7061 7261 6d73 ($self, \\%params\n+00033770: 293b 0a0a 2020 2020 2473 656c 662d 3e7b );.. $self->{\n+00033780: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'}\n+00033790: 203d 2028 2473 656c 662d 3e7b 2777 6974 = ($self->{'wit\n+000337a0: 6855 7365 7247 726f 7570 5374 6174 277d hUserGroupStat'}\n+000337b0: 206f 720a 0909 0909 2473 656c 662d 3e7b or.....$self->{\n+000337c0: 2775 7365 7247 726f 7570 5374 6174 4669 'userGroupStatFi\n+000337d0: 6c65 277d 2920 3f20 3120 3a20 756e 6465 le'}) ? 1 : unde\n+000337e0: 663b 0a0a 2020 2020 6966 2028 2473 656c f;.. if ($sel\n+000337f0: 662d 3e7b 2775 7365 7247 726f 7570 466c f->{'userGroupFl\n+00033800: 6167 277d 290a 2020 2020 7b0a 096d 7920 ag'}). {..my \n+00033810: 2825 7569 6453 7461 7449 6e6f 6465 7329 (%uidStatInodes)\n+00033820: 203d 2028 293b 0a09 6d79 2028 2575 6964 = ();..my (%uid\n+00033830: 5374 6174 5369 7a65 2920 3d20 2829 3b0a StatSize) = ();.\n+00033840: 096d 7920 2825 6769 6453 7461 7449 6e6f .my (%gidStatIno\n+00033850: 6465 7329 203d 2028 293b 0a09 6d79 2028 des) = ();..my (\n+00033860: 2567 6964 5374 6174 5369 7a65 2920 3d20 %gidStatSize) = \n+00033870: 2829 3b0a 0924 7365 6c66 2d3e 7b27 7569 ();..$self->{'ui\n+00033880: 6453 7461 7449 6e6f 6465 7327 7d20 3d20 dStatInodes'} = \n+00033890: 5c25 7569 6453 7461 7449 6e6f 6465 733b \\%uidStatInodes;\n+000338a0: 0a09 2473 656c 662d 3e7b 2775 6964 5374 ..$self->{'uidSt\n+000338b0: 6174 5369 7a65 277d 203d 205c 2575 6964 atSize'} = \\%uid\n+000338c0: 5374 6174 5369 7a65 3b0a 0924 7365 6c66 StatSize;..$self\n+000338d0: 2d3e 7b27 6769 6453 7461 7449 6e6f 6465 ->{'gidStatInode\n+000338e0: 7327 7d20 3d20 5c25 6769 6453 7461 7449 s'} = \\%gidStatI\n+000338f0: 6e6f 6465 733b 0a09 2473 656c 662d 3e7b nodes;..$self->{\n+00033900: 2767 6964 5374 6174 5369 7a65 277d 203d 'gidStatSize'} =\n+00033910: 205c 2567 6964 5374 6174 5369 7a65 3b0a \\%gidStatSize;.\n+00033920: 2020 2020 7d0a 0a20 2020 206d 7920 2825 }.. my (%\n+00033930: 7569 6453 6f75 7263 6529 203d 2028 293b uidSource) = ();\n+00033940: 2020 2020 2020 2023 2048 6173 6820 6d69 # Hash mi\n+00033950: 7420 6b65 7920 3d20 7569 642c 2076 616c t key = uid, val\n+00033960: 7565 203d 2073 697a 650a 2020 2020 6d79 ue = size. my\n+00033970: 2028 2567 6964 536f 7572 6365 2920 3d20 (%gidSource) = \n+00033980: 2829 3b20 2020 2020 2020 2320 4861 7368 (); # Hash\n+00033990: 206d 6974 206b 6579 203d 2067 6964 2c20 mit key = gid, \n+000339a0: 7661 6c75 6520 3d20 7369 7a65 0a20 2020 value = size. \n+000339b0: 206d 7920 2825 7569 6442 6163 6b75 7029 my (%uidBackup)\n+000339c0: 203d 2028 293b 2020 2020 2020 2023 2048 = (); # H\n+000339d0: 6173 6820 6d69 7420 6b65 7920 3d20 7569 ash mit key = ui\n+000339e0: 642c 2076 616c 7565 203d 2073 697a 650a d, value = size.\n+000339f0: 2020 2020 6d79 2028 2567 6964 4261 636b my (%gidBack\n+00033a00: 7570 2920 3d20 2829 3b20 2020 2020 2020 up) = (); \n+00033a10: 2320 4861 7368 206d 6974 206b 6579 203d # Hash mit key =\n+00033a20: 2067 6964 2c20 7661 6c75 6520 3d20 7369 gid, value = si\n+00033a30: 7a65 0a20 2020 2024 7365 6c66 2d3e 7b27 ze. $self->{'\n+00033a40: 7569 6453 6f75 7263 6527 7d20 3d20 5c25 uidSource'} = \\%\n+00033a50: 7569 6453 6f75 7263 653b 0a20 2020 2024 uidSource;. $\n+00033a60: 7365 6c66 2d3e 7b27 6769 6453 6f75 7263 self->{'gidSourc\n+00033a70: 6527 7d20 3d20 5c25 6769 6453 6f75 7263 e'} = \\%gidSourc\n+00033a80: 653b 0a20 2020 2024 7365 6c66 2d3e 7b27 e;. $self->{'\n+00033a90: 7569 6442 6163 6b75 7027 7d20 3d20 5c25 uidBackup'} = \\%\n+00033aa0: 7569 6442 6163 6b75 703b 0a20 2020 2024 uidBackup;. $\n+00033ab0: 7365 6c66 2d3e 7b27 6769 6442 6163 6b75 self->{'gidBacku\n+00033ac0: 7027 7d20 3d20 5c25 6769 6442 6163 6b75 p'} = \\%gidBacku\n+00033ad0: 703b 0a0a 2020 2020 2473 656c 662d 3e7b p;.. $self->{\n+00033ae0: 276e 6f44 6972 7327 7d20 3d20 303b 2020 'noDirs'} = 0; \n+00033af0: 2020 2020 2320 6e75 6d62 6572 206f 6620 # number of \n+00033b00: 6469 7265 6374 6f72 6965 7320 696e 2062 directories in b\n+00033b10: 6163 6b75 700a 2020 2020 2473 656c 662d ackup. $self-\n+00033b20: 3e7b 276e 6f46 696c 6573 277d 203d 2030 >{'noFiles'} = 0\n+00033b30: 3b20 2020 2020 2320 6f76 6572 616c 6c20 ; # overall \n+00033b40: 6e75 6d62 6572 206f 6620 6669 6c65 7320 number of files \n+00033b50: 696e 2062 6163 6b75 700a 2020 2020 2473 in backup. $s\n+00033b60: 656c 662d 3e7b 276e 6f53 796d 4c69 6e6b elf->{'noSymLink\n+00033b70: 7327 7d20 3d20 303b 2020 2320 6e75 6d62 s'} = 0; # numb\n+00033b80: 6572 206f 6620 7379 6d62 6f6c 6963 206c er of symbolic l\n+00033b90: 696e 6b73 2069 6e20 6261 636b 7570 0a20 inks in backup. \n+00033ba0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 4c61 $self->{'noLa\n+00033bb0: 7465 4c69 6e6b 7327 7d20 3d20 303b 2023 teLinks'} = 0; #\n+00033bc0: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files\n+00033bd0: 2077 6974 6820 6c61 7465 4c69 6e6b 7320 with lateLinks \n+00033be0: 696e 0a20 2020 2020 2020 2020 2020 2020 in. \n+00033bf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033c00: 2020 2023 2062 6163 6b75 702c 2065 6163 # backup, eac\n+00033c10: 6820 626c 6f63 6b65 6420 6669 6c65 2066 h blocked file f\n+00033c20: 7261 676d 656e 740a 2020 2020 2020 2020 ragment. \n+00033c30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033c40: 2020 2020 2020 2020 2320 696e 6372 6561 # increa\n+00033c50: 7365 7320 7468 6973 206e 756d 6265 720a ses this number.\n+00033c60: 2020 2020 2473 656c 662d 3e7b 276e 6f4e $self->{'noN\n+00033c70: 616d 6564 5069 7065 7327 7d20 3d20 303b amedPipes'} = 0;\n+00033c80: 2320 6e75 6d62 6572 206f 6620 6e61 6d65 # number of name\n+00033c90: 6420 7069 7065 7320 696e 2062 6163 6b75 d pipes in backu\n+00033ca0: 700a 2020 2020 2473 656c 662d 3e7b 276e p. $self->{'n\n+00033cb0: 6f53 6f63 6b65 7473 277d 203d 2030 3b20 oSockets'} = 0; \n+00033cc0: 2020 2320 6e75 6d62 6572 206f 6620 736f # number of so\n+00033cd0: 636b 6574 7320 696e 2062 6163 6b75 700a ckets in backup.\n+00033ce0: 2020 2020 2473 656c 662d 3e7b 276e 6f43 $self->{'noC\n+00033cf0: 6861 7244 6576 277d 203d 2030 3b20 2020 harDev'} = 0; \n+00033d00: 2320 6e75 6d62 6572 206f 6620 6368 6172 # number of char\n+00033d10: 6163 7465 7220 6465 7669 6365 7320 696e acter devices in\n+00033d20: 2062 6163 6b75 700a 2020 2020 2473 656c backup. $sel\n+00033d30: 662d 3e7b 276e 6f42 6c6f 636b 4465 7627 f->{'noBlockDev'\n+00033d40: 7d20 3d20 303b 2020 2320 6e75 6d62 6572 } = 0; # number\n+00033d50: 206f 6620 626c 6f63 6b20 6465 7669 6365 of block device\n+00033d60: 7320 696e 2062 6163 6b75 700a 2020 2020 s in backup. \n+00033d70: 2473 656c 662d 3e7b 276e 6f4d 4435 6564 $self->{'noMD5ed\n+00033d80: 4669 6c65 7327 7d20 3d20 303b 2320 6e75 Files'} = 0;# nu\n+00033d90: 6d62 6572 206f 6620 6669 6c65 7320 7768 mber of files wh\n+00033da0: 6572 6520 616e 206d 6435 2073 756d 2077 ere an md5 sum w\n+00033db0: 6173 0a20 2020 2020 2020 2020 2020 2020 as. \n+00033dc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033dd0: 2020 2023 2063 616c 6375 6c61 7465 642c # calculated,\n+00033de0: 2065 6163 6820 626c 6f63 6b65 6420 6669 each blocked fi\n+00033df0: 6c65 2066 7261 676d 656e 740a 2020 2020 le fragment. \n+00033e00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033e10: 2020 2020 2020 2020 2020 2020 2320 696e # in\n+00033e20: 6372 6561 7365 7320 7468 6973 206e 756d creases this num\n+00033e30: 6265 720a 2020 2020 2473 656c 662d 3e7b ber. $self->{\n+00033e40: 276e 6f49 6e74 6572 6e61 6c4c 696e 6b65 'noInternalLinke\n+00033e50: 6446 696c 6573 277d 203d 2030 3b23 206e dFiles'} = 0;# n\n+00033e60: 756d 6265 7220 6f66 2066 696c 6573 2077 umber of files w\n+00033e70: 6869 6368 2077 6572 6520 6c69 6e6b 6564 hich were linked\n+00033e80: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00033e90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033ea0: 2023 2069 6e73 6964 6520 7468 6520 6a75 # inside the ju\n+00033eb0: 7374 2072 756e 6e69 6e67 2062 6163 6b75 st running backu\n+00033ec0: 700a 2020 2020 2473 656c 662d 3e7b 276e p. $self->{'n\n+00033ed0: 6f4f 6c64 4c69 6e6b 6564 4669 6c65 7327 oOldLinkedFiles'\n+00033ee0: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o\n+00033ef0: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we\n+00033f00: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. \n+00033f10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033f20: 2020 2020 2020 2020 2020 2320 746f 206f # to o\n+00033f30: 7468 6572 2062 6163 6b75 7073 0a20 2020 ther backups. \n+00033f40: 2024 7365 6c66 2d3e 7b27 756e 6368 616e $self->{'unchan\n+00033f50: 6765 6446 696c 6573 277d 203d 2030 3b23 gedFiles'} = 0;#\n+00033f60: 2073 697a 6520 6f66 2066 696c 6573 2c20 size of files, \n+00033f70: 7768 6572 6520 7369 7a65 2061 6e64 0a20 where size and. \n+00033f80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033f90: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00033fa0: 2074 696d 6573 7461 6d70 2077 6572 6520 timestamp were \n+00033fb0: 6e6f 7420 6368 616e 6765 6420 7369 6e63 not changed sinc\n+00033fc0: 6520 7468 650a 2020 2020 2020 2020 2020 e the. \n+00033fd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00033fe0: 2020 2020 2020 2320 6c61 7374 2062 6163 # last bac\n+00033ff0: 6b75 702c 2074 6865 7920 7765 7265 2064 kup, they were d\n+00034000: 6972 6563 746c 7920 6c69 6e6b 6564 0a20 irectly linked. \n+00034010: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034020: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00034030: 2061 6e64 2074 6865 206d 6435 2073 756d and the md5 sum\n+00034040: 2077 6173 206e 6f74 2063 616c 6375 6c61 was not calcula\n+00034050: 7465 6420 6167 6169 6e0a 2020 2020 2473 ted again. $s\n+00034060: 656c 662d 3e7b 276e 6f43 6f70 6965 6446 elf->{'noCopiedF\n+00034070: 696c 6573 277d 203d 2030 3b23 206e 756d iles'} = 0;# num\n+00034080: 6265 7220 6f66 2066 696c 6573 2077 6869 ber of files whi\n+00034090: 6368 2077 6572 6520 636f 7069 6564 0a20 ch were copied. \n+000340a0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 436f $self->{'noCo\n+000340b0: 6d70 7265 7373 6564 4669 6c65 7327 7d20 mpressedFiles'} \n+000340c0: 3d20 303b 2320 6e75 6d62 6572 206f 6620 = 0;# number of \n+000340d0: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were\n+000340e0: 2063 6f6d 7072 6573 7365 640a 2020 2020 compressed. \n+000340f0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks\n+00034100: 4d44 3527 7d20 3d20 303b 2020 2320 6e75 MD5'} = 0; # nu\n+00034110: 6d62 6572 206f 6620 666f 726b 7320 746f mber of forks to\n+00034120: 2063 616c 636c 7561 7465 6420 616e 206d calcluated an m\n+00034130: 6435 0a20 2020 2024 7365 6c66 2d3e 7b27 d5. $self->{'\n+00034140: 6e6f 466f 726b 7343 5027 7d20 3d20 303b noForksCP'} = 0;\n+00034150: 2020 2023 206e 756d 6265 7220 6f66 2066 # number of f\n+00034160: 6f72 6b73 2074 6f20 636f 7079 2061 2066 orks to copy a f\n+00034170: 696c 650a 2020 2020 2473 656c 662d 3e7b ile. $self->{\n+00034180: 276e 6f46 6f72 6b73 436f 6d70 7265 7373 'noForksCompress\n+00034190: 277d 203d 2030 3b23 206e 756d 6265 7220 '} = 0;# number \n+000341a0: 6f66 2066 6f72 6b73 2074 6f20 636f 6d70 of forks to comp\n+000341b0: 7265 7373 2061 2066 696c 650a 2020 2020 ress a file. \n+000341c0: 2473 656c 662d 3e7b 276e 6f45 7863 6c75 $self->{'noExclu\n+000341d0: 6465 5275 6c65 277d 203d 2030 3b23 206e deRule'} = 0;# n\n+000341e0: 756d 6265 7220 6f66 2066 696c 6573 2065 umber of files e\n+000341f0: 7863 6c75 6465 6420 6265 6361 7573 6520 xcluded because \n+00034200: 6f66 0a20 2020 2020 2020 2020 2020 2020 of. \n+00034210: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034220: 2020 2023 2065 7863 6c75 6465 2072 756c # exclude rul\n+00034230: 650a 2020 2020 2473 656c 662d 3e7b 276e e. $self->{'n\n+00034240: 6f49 6e63 6c75 6465 5275 6c65 277d 203d oIncludeRule'} =\n+00034250: 2030 3b23 206e 756d 6265 7220 6f66 2066 0;# number of f\n+00034260: 696c 6573 2069 6e63 6c75 6465 6420 6265 iles included be\n+00034270: 6361 7573 6520 6f66 0a20 2020 2020 2020 cause of. \n+00034280: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034290: 2020 2020 2020 2020 2023 2069 6e63 6c75 # inclu\n+000342a0: 6465 2072 756c 650a 2020 2020 2473 656c de rule. $sel\n+000342b0: 662d 3e7b 276e 6f42 6c6f 636b 6564 4669 f->{'noBlockedFi\n+000342c0: 6c65 7327 7d20 3d20 303b 2320 6e75 6d62 les'} = 0;# numb\n+000342d0: 6572 206f 6620 6669 6c65 7320 7472 6561 er of files trea\n+000342e0: 7465 6420 6173 2062 6c6f 636b 6564 0a20 ted as blocked. \n+000342f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034300: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00034310: 2066 696c 6573 2028 6265 6361 7573 6520 files (because \n+00034320: 6f66 2062 6c6f 636b 6564 2072 756c 6573 of blocked rules\n+00034330: 290a 2020 2020 2473 656c 662d 3e7b 276e ). $self->{'n\n+00034340: 6f43 6f6d 7072 4368 6563 6b43 6f6d 7072 oComprCheckCompr\n+00034350: 277d 203d 2030 3b23 206e 756d 6265 7220 '} = 0;# number \n+00034360: 6f66 2066 696c 6573 2063 6f6d 7072 6573 of files compres\n+00034370: 7365 6420 6265 6361 7573 650a 2020 2020 sed because. \n+00034380: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034390: 2020 2020 2020 2020 2020 2020 2320 6f66 # of\n+000343a0: 2043 4f4d 5052 4553 5349 4f4e 5f43 4845 COMPRESSION_CHE\n+000343b0: 434b 2072 756c 650a 2020 2020 2473 656c CK rule. $sel\n+000343c0: 662d 3e7b 276e 6f43 6f6d 7072 4368 6563 f->{'noComprChec\n+000343d0: 6b43 7027 7d20 3d20 303b 2320 6e75 6d62 kCp'} = 0;# numb\n+000343e0: 6572 206f 6620 6669 6c65 7320 636f 7069 er of files copi\n+000343f0: 6564 2062 6563 6175 7365 0a20 2020 2020 ed because. \n+00034400: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034410: 2020 2020 2020 2020 2020 2023 206f 6620 # of \n+00034420: 434f 4d50 5245 5353 494f 4e5f 4348 4543 COMPRESSION_CHEC\n+00034430: 4b20 7275 6c65 0a0a 2020 2020 2320 6469 K rule.. # di\n+00034440: 736b 2073 7061 6365 2072 656c 6174 6564 sk space related\n+00034450: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+00034460: 6d4f 7269 6746 696c 6573 277d 203d 2030 mOrigFiles'} = 0\n+00034470: 3b23 2073 697a 6520 6f66 2066 696c 6573 ;# size of files\n+00034480: 2069 6e20 736f 7572 6365 2064 6972 0a20 in source dir. \n+00034490: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4d $self->{'sumM\n+000344a0: 4435 5375 6d27 7d20 3d20 303b 2020 2023 D5Sum'} = 0; #\n+000344b0: 206e 756d 6265 7220 6f66 2062 7974 6573 number of bytes\n+000344c0: 2066 6f72 2077 6869 6368 2061 6e20 6d64 for which an md\n+000344d0: 3520 7375 6d0a 2020 2020 2020 2020 2020 5 sum. \n+000344e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000344f0: 2020 2020 2020 2320 7761 7320 6361 6c63 # was calc\n+00034500: 756c 6174 6564 0a20 2020 2024 7365 6c66 ulated. $self\n+00034510: 2d3e 7b27 7375 6d4c 696e 6b65 6449 6e74 ->{'sumLinkedInt\n+00034520: 6572 6e61 6c43 6f70 7927 7d20 3d20 303b ernalCopy'} = 0;\n+00034530: 2320 7369 7a65 206f 6620 6669 6c65 7320 # size of files \n+00034540: 7768 6963 6820 7765 7265 206c 696e 6b65 which were linke\n+00034550: 640a 2020 2020 2020 2020 2020 2020 2020 d. \n+00034560: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034570: 2020 2320 696e 7369 6465 2074 6865 206a # inside the j\n+00034580: 7573 7420 7275 6e6e 696e 6720 6261 636b ust running back\n+00034590: 7570 0a20 2020 2024 7365 6c66 2d3e 7b27 up. $self->{'\n+000345a0: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna\n+000345b0: 6c43 6f6d 7072 277d 203d 2030 3b23 2073 lCompr'} = 0;# s\n+000345c0: 697a 6520 6f66 2066 696c 6573 2077 6869 ize of files whi\n+000345d0: 6368 2077 6572 6520 6c69 6e6b 6564 0a20 ch were linked. \n+000345e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000345f0: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00034600: 2074 6f20 6f74 6865 7220 6261 636b 7570 to other backup\n+00034610: 730a 2020 2020 2473 656c 662d 3e7b 2773 s. $self->{'s\n+00034620: 756d 4c69 6e6b 6564 4f6c 6443 6f70 7927 umLinkedOldCopy'\n+00034630: 7d20 3d20 303b 2320 7369 7a65 206f 6620 } = 0;# size of \n+00034640: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were\n+00034650: 206c 696e 6b65 6420 746f 0a20 2020 2020 linked to. \n+00034660: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034670: 2020 2020 2020 2020 2020 2023 206f 7468 # oth\n+00034680: 6572 2028 6f6c 6429 2062 6163 6b75 7073 er (old) backups\n+00034690: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+000346a0: 6d4c 696e 6b65 644f 6c64 436f 6d70 7227 mLinkedOldCompr'\n+000346b0: 7d20 3d20 303b 2320 7369 7a65 206f 6620 } = 0;# size of \n+000346c0: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were\n+000346d0: 206c 696e 6b65 6420 746f 0a20 2020 2020 linked to. \n+000346e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000346f0: 2020 2020 2020 2020 2020 2023 206f 7468 # oth\n+00034700: 6572 2028 6f6c 6429 2062 6163 6b75 7073 er (old) backups\n+00034710: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+00034720: 6d55 6e63 6861 6e67 6564 436f 7079 277d mUnchangedCopy'}\n+00034730: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f\n+00034740: 696c 6573 2c20 7768 6572 6520 7369 7a65 iles, where size\n+00034750: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n+00034760: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034770: 2020 2020 2023 2074 696d 6573 7461 6d70 # timestamp\n+00034780: 2077 6572 6520 6e6f 7420 6368 616e 6765 were not change\n+00034790: 6420 7369 6e63 6520 7468 650a 2020 2020 d since the. \n+000347a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000347b0: 2020 2020 2020 2020 2020 2020 2320 6c61 # la\n+000347c0: 7374 2062 6163 6b75 702c 2074 6865 7920 st backup, they \n+000347d0: 7765 7265 2064 6972 6563 746c 7920 6c69 were directly li\n+000347e0: 6e6b 6564 0a20 2020 2020 2020 2020 2020 nked. \n+000347f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034800: 2020 2020 2023 2061 6e64 2074 6865 206d # and the m\n+00034810: 6435 2073 756d 2077 6173 206e 6f74 2063 d5 sum was not c\n+00034820: 616c 6375 6c61 7465 6420 6167 6169 6e0a alculated again.\n+00034830: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum\n+00034840: 556e 6368 616e 6765 6443 6f6d 7072 277d UnchangedCompr'}\n+00034850: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f\n+00034860: 696c 6573 2c20 7768 6572 6520 7369 7a65 iles, where size\n+00034870: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n+00034880: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034890: 2020 2020 2023 2074 696d 6573 7461 6d70 # timestamp\n+000348a0: 2077 6572 6520 6e6f 7420 6368 616e 6765 were not change\n+000348b0: 6420 7369 6e63 6520 7468 650a 2020 2020 d since the. \n+000348c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000348d0: 2020 2020 2020 2020 2020 2020 2320 6c61 # la\n+000348e0: 7374 2062 6163 6b75 702c 2074 6865 7920 st backup, they \n+000348f0: 7765 7265 2064 6972 6563 746c 7920 6c69 were directly li\n+00034900: 6e6b 6564 0a20 2020 2020 2020 2020 2020 nked. \n+00034910: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034920: 2020 2020 2023 2061 6e64 2074 6865 206d # and the m\n+00034930: 6435 2073 756d 2077 6173 206e 6f74 2063 d5 sum was not c\n+00034940: 616c 6375 6c61 7465 6420 6167 6169 6e0a alculated again.\n+00034950: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum\n+00034960: 4e65 7743 6f70 7927 7d20 3d20 303b 2020 NewCopy'} = 0; \n+00034970: 2320 7375 6d20 6f66 206e 6577 6c79 2063 # sum of newly c\n+00034980: 6f70 7969 6564 2066 696c 6573 2069 6e74 opyied files int\n+00034990: 6f20 7468 650a 2020 2020 2020 2020 2020 o the. \n+000349a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000349b0: 2020 2020 2020 2320 6261 636b 7570 0a20 # backup. \n+000349c0: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4e $self->{'sumN\n+000349d0: 6577 436f 6d70 7227 7d20 3d20 303b 2023 ewCompr'} = 0; #\n+000349e0: 2073 756d 206f 6620 6e65 776c 7920 636f sum of newly co\n+000349f0: 6d70 7265 7373 6564 2066 696c 6573 2069 mpressed files i\n+00034a00: 6e74 6f0a 2020 2020 2020 2020 2020 2020 nto. \n+00034a10: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034a20: 2020 2020 2320 7468 6520 6261 636b 7570 # the backup\n+00034a30: 2028 636f 6d70 7265 7373 6564 2073 697a (compressed siz\n+00034a40: 6529 0a20 2020 2024 7365 6c66 2d3e 7b27 e). $self->{'\n+00034a50: 7375 6d4e 6577 436f 6d70 724f 7269 6753 sumNewComprOrigS\n+00034a60: 697a 6527 7d20 3d20 303b 2320 7375 6d20 ize'} = 0;# sum \n+00034a70: 6f66 206e 6577 7920 636f 6d70 7265 7373 of newy compress\n+00034a80: 6564 2066 696c 6573 0a20 2020 2020 2020 ed files. \n+00034a90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00034aa0: 2020 2020 2020 2020 2023 2069 6e74 6f20 # into \n+00034ab0: 7468 6520 6261 636b 7570 2028 756e 636f the backup (unco\n+00034ac0: 6d70 7265 7373 6564 2073 697a 6529 0a0a mpressed size)..\n+00034ad0: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5\n+00034ae0: 4368 6563 6b53 756d 277d 203d 2030 3b0a CheckSum'} = 0;.\n+00034af0: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum\n+00034b00: 4442 4d46 696c 6573 277d 203d 2030 3b0a DBMFiles'} = 0;.\n+00034b10: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self\n+00034b20: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...##\n+00034b30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034b50: 2323 2323 2323 0a73 7562 2069 6e63 725f ######.sub incr_\n+00034b60: 6e6f 4465 6c65 7465 644f 6c64 4469 7273 noDeletedOldDirs\n+00034b70: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n+00034b80: 3d20 7368 6966 743b 0a0a 2020 2020 2473 = shift;.. $s\n+00034b90: 656c 662d 3e73 7461 7469 7374 6963 4465 elf->statisticDe\n+00034ba0: 6c65 7465 4f6c 6442 6163 6b75 7044 6972 leteOldBackupDir\n+00034bb0: 733a 3a69 6e63 725f 6e6f 4465 6c65 7465 s::incr_noDelete\n+00034bc0: 644f 6c64 4469 7273 2829 3b0a 7d0a 0a0a dOldDirs();.}...\n+00034bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034be0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034bf0: 2323 2323 2323 2323 0a73 7562 2069 6e63 ########.sub inc\n+00034c00: 725f 6e6f 4469 7273 0a7b 0a20 2020 206d r_noDirs.{. m\n+00034c10: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00034c20: 0a20 2020 206d 7920 2824 7569 642c 2024 . my ($uid, $\n+00034c30: 6769 6429 203d 2040 5f3b 0a0a 2020 2020 gid) = @_;.. \n+00034c40: 2b2b 2473 656c 662d 3e7b 276e 6f44 6972 ++$self->{'noDir\n+00034c50: 7327 7d3b 0a0a 2020 2020 6966 2028 2473 s'};.. if ($s\n+00034c60: 656c 662d 3e7b 2775 7365 7247 726f 7570 elf->{'userGroup\n+00034c70: 466c 6167 277d 290a 2020 2020 7b0a 092b Flag'}). {..+\n+00034c80: 2b24 7365 6c66 2d3e 7b27 7569 6453 7461 +$self->{'uidSta\n+00034c90: 7449 6e6f 6465 7327 7d2d 3e7b 2475 6964 tInodes'}->{$uid\n+00034ca0: 7d3b 0a09 2b2b 2473 656c 662d 3e7b 2767 };..++$self->{'g\n+00034cb0: 6964 5374 6174 496e 6f64 6573 277d 2d3e idStatInodes'}->\n+00034cc0: 7b24 6769 647d 3b0a 2020 2020 7d0a 7d0a {$gid};. }.}.\n+00034cd0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00034ce0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034cf0: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a\n+00034d00: 6464 5f6e 6f4d 4435 6564 4669 6c65 730a dd_noMD5edFiles.\n+00034d10: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+00034d20: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se\n+00034d30: 6c66 2d3e 7b27 6e6f 4d44 3565 6446 696c lf->{'noMD5edFil\n+00034d40: 6573 277d 202b 3d20 7368 6966 743b 0a7d es'} += shift;.}\n+00034d50: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+00034d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034d70: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+00034d80: 696e 6372 5f6e 6f53 796d 4c69 6e6b 730a incr_noSymLinks.\n+00034d90: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+00034da0: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my (\n+00034db0: 2475 6964 2c20 2467 6964 2920 3d20 405f $uid, $gid) = @_\n+00034dc0: 3b0a 0a20 2020 202b 2b24 7365 6c66 2d3e ;.. ++$self->\n+00034dd0: 7b27 6e6f 5379 6d4c 696e 6b73 277d 3b0a {'noSymLinks'};.\n+00034de0: 2020 2020 2473 656c 662d 3e61 6464 5375 $self->addSu\n+00034df0: 6d4f 7269 6746 696c 6573 2830 2c20 2475 mOrigFiles(0, $u\n+00034e00: 6964 2c20 2467 6964 293b 0a7d 0a0a 2323 id, $gid);.}..##\n+00034e10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034e20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034e30: 2323 2323 2323 0a73 7562 2069 6e63 725f ######.sub incr_\n+00034e40: 6e6f 4c61 7465 4c69 6e6b 730a 7b0a 2020 noLateLinks.{. \n+00034e50: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi\n+00034e60: 6674 3b0a 2020 2020 6d79 2028 2475 6964 ft;. my ($uid\n+00034e70: 2c20 2467 6964 2c20 246e 2920 3d20 405f , $gid, $n) = @_\n+00034e80: 3b0a 2020 2020 246e 203d 2031 2075 6e6c ;. $n = 1 unl\n+00034e90: 6573 7320 6465 6669 6e65 6420 246e 3b0a ess defined $n;.\n+00034ea0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no\n+00034eb0: 4c61 7465 4c69 6e6b 7327 7d20 2b3d 2024 LateLinks'} += $\n+00034ec0: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...#########\n+00034ed0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034ee0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+00034ef0: 7375 6220 696e 6372 5f6e 6f4e 616d 6564 sub incr_noNamed\n+00034f00: 5069 7065 730a 7b0a 2020 2020 6d79 2024 Pipes.{. my $\n+00034f10: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n+00034f20: 2020 6d79 2028 2475 6964 2c20 2467 6964 my ($uid, $gid\n+00034f30: 2920 3d20 405f 3b0a 0a20 2020 202b 2b24 ) = @_;.. ++$\n+00034f40: 7365 6c66 2d3e 7b27 6e6f 4e61 6d65 6450 self->{'noNamedP\n+00034f50: 6970 6573 277d 3b0a 2020 2020 2473 656c ipes'};. $sel\n+00034f60: 662d 3e61 6464 5375 6d4f 7269 6746 696c f->addSumOrigFil\n+00034f70: 6573 2830 2c20 2475 6964 2c20 2467 6964 es(0, $uid, $gid\n+00034f80: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...#########\n+00034f90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00034fa0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+00034fb0: 7375 6220 696e 6372 5f6e 6f53 6f63 6b65 sub incr_noSocke\n+00034fc0: 7473 0a7b 0a20 2020 206d 7920 2473 656c ts.{. my $sel\n+00034fd0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m\n+00034fe0: 7920 2824 7569 642c 2024 6769 6429 203d y ($uid, $gid) =\n+00034ff0: 2040 5f3b 0a0a 2020 2020 2b2b 2473 656c @_;.. ++$sel\n+00035000: 662d 3e7b 276e 6f53 6f63 6b65 7473 277d f->{'noSockets'}\n+00035010: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add\n+00035020: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, \n+00035030: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}..\n+00035040: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+00035050: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035060: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in\n+00035070: 6372 5f6e 6f43 6861 7244 6576 0a7b 0a20 cr_noCharDev.{. \n+00035080: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n+00035090: 6966 743b 0a20 2020 206d 7920 2824 7569 ift;. my ($ui\n+000350a0: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;..\n+000350b0: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n\n+000350c0: 6f43 6861 7244 6576 277d 3b0a 2020 2020 oCharDev'};. \n+000350d0: 2473 656c 662d 3e61 6464 5375 6d4f 7269 $self->addSumOri\n+000350e0: 6746 696c 6573 2830 2c20 2475 6964 2c20 gFiles(0, $uid, \n+000350f0: 2467 6964 293b 0a7d 0a0a 0a23 2323 2323 $gid);.}...#####\n+00035100: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035110: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035120: 2323 230a 7375 6220 696e 6372 5f6e 6f42 ###.sub incr_noB\n+00035130: 6c6f 636b 4465 760a 7b0a 2020 2020 6d79 lockDev.{. my\n+00035140: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+00035150: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g\n+00035160: 6964 2920 3d20 405f 3b0a 0a20 2020 202b id) = @_;.. +\n+00035170: 2b24 7365 6c66 2d3e 7b27 6e6f 426c 6f63 +$self->{'noBloc\n+00035180: 6b44 6576 277d 3b0a 2020 2020 2473 656c kDev'};. $sel\n+00035190: 662d 3e61 6464 5375 6d4f 7269 6746 696c f->addSumOrigFil\n+000351a0: 6573 2830 2c20 2475 6964 2c20 2467 6964 es(0, $uid, $gid\n+000351b0: 293b 0a7d 0a0a 0a23 2323 2323 2323 2323 );.}...#########\n+000351c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000351d0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+000351e0: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks\n+000351f0: 4d44 350a 7b0a 2020 2020 6d79 2024 7365 MD5.{. my $se\n+00035200: 6c66 203d 2073 6869 6674 3b0a 2020 2020 lf = shift;. \n+00035210: 2b2b 2473 656c 662d 3e7b 276e 6f46 6f72 ++$self->{'noFor\n+00035220: 6b73 4d44 3527 7d3b 0a7d 0a0a 0a23 2323 ksMD5'};.}...###\n+00035230: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035240: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035250: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n\n+00035260: 6f46 6f72 6b73 4350 0a7b 0a20 2020 206d oForksCP.{. m\n+00035270: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00035280: 0a20 2020 206d 7920 246e 203d 2073 6869 . my $n = shi\n+00035290: 6674 3b0a 2020 2020 246e 203d 2031 2075 ft;. $n = 1 u\n+000352a0: 6e6c 6573 7320 6465 6669 6e65 6420 246e nless defined $n\n+000352b0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n+000352c0: 6e6f 466f 726b 7343 5027 7d20 2b3d 2024 noForksCP'} += $\n+000352d0: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...#########\n+000352e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000352f0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+00035300: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks\n+00035310: 436f 6d70 7265 7373 0a7b 0a20 2020 206d Compress.{. m\n+00035320: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00035330: 0a20 2020 206d 7920 246e 203d 2073 6869 . my $n = shi\n+00035340: 6674 3b0a 2020 2020 246e 203d 2031 2075 ft;. $n = 1 u\n+00035350: 6e6c 6573 7320 6465 6669 6e65 6420 246e nless defined $n\n+00035360: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n+00035370: 6e6f 466f 726b 7343 6f6d 7072 6573 7327 noForksCompress'\n+00035380: 7d20 2b3d 2024 6e3b 0a7d 0a0a 0a23 2323 } += $n;.}...###\n+00035390: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000353a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000353b0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n\n+000353c0: 6f45 7863 6c75 6465 5275 6c65 0a7b 0a20 oExcludeRule.{. \n+000353d0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n+000353e0: 6966 743b 0a20 2020 202b 2b24 7365 6c66 ift;. ++$self\n+000353f0: 2d3e 7b27 6e6f 4578 636c 7564 6552 756c ->{'noExcludeRul\n+00035400: 6527 7d3b 0a7d 0a0a 0a23 2323 2323 2323 e'};.}...#######\n+00035410: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035420: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035430: 230a 7375 6220 696e 6372 5f6e 6f49 6e63 #.sub incr_noInc\n+00035440: 6c75 6465 5275 6c65 0a7b 0a20 2020 206d ludeRule.{. m\n+00035450: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00035460: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{'\n+00035470: 6e6f 496e 636c 7564 6552 756c 6527 7d3b noIncludeRule'};\n+00035480: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n+00035490: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000354a0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n+000354b0: 6220 696e 6372 5f6e 6f42 6c6f 636b 6564 b incr_noBlocked\n+000354c0: 4669 6c65 730a 7b0a 2020 2020 6d79 2024 Files.{. my $\n+000354d0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n+000354e0: 2020 2b2b 2473 656c 662d 3e7b 276e 6f42 ++$self->{'noB\n+000354f0: 6c6f 636b 6564 4669 6c65 7327 7d3b 0a7d lockedFiles'};.}\n+00035500: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n+00035510: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035520: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n+00035530: 696e 6372 5f6e 6f43 6f6d 7072 4368 6563 incr_noComprChec\n+00035540: 6b43 6f6d 7072 0a7b 0a20 2020 206d 7920 kCompr.{. my \n+00035550: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. \n+00035560: 2020 202b 2b24 7365 6c66 2d3e 7b27 6e6f ++$self->{'no\n+00035570: 436f 6d70 7243 6865 636b 436f 6d70 7227 ComprCheckCompr'\n+00035580: 7d3b 0a7d 0a0a 0a23 2323 2323 2323 2323 };.}...#########\n+00035590: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000355a0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+000355b0: 7375 6220 696e 6372 5f6e 6f43 6f6d 7072 sub incr_noCompr\n+000355c0: 4368 6563 6b43 700a 7b0a 2020 2020 6d79 CheckCp.{. my\n+000355d0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+000355e0: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n\n+000355f0: 6f43 6f6d 7072 4368 6563 6b43 7027 7d3b oComprCheckCp'};\n+00035600: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n+00035610: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035620: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n+00035630: 6220 6164 6446 7265 6564 5370 6163 650a b addFreedSpace.\n+00035640: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+00035650: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se\n+00035660: 6c66 2d3e 7374 6174 6973 7469 6344 656c lf->statisticDel\n+00035670: 6574 654f 6c64 4261 636b 7570 4469 7273 eteOldBackupDirs\n+00035680: 3a3a 6164 6446 7265 6564 5370 6163 6528 ::addFreedSpace(\n+00035690: 405f 293b 0a7d 0a0a 0a23 2323 2323 2323 @_);.}...#######\n+000356a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000356b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000356c0: 230a 7375 6220 6164 6453 756d 4f72 6967 #.sub addSumOrig\n+000356d0: 4669 6c65 7320 2020 2020 2020 2320 696e Files # in\n+000356e0: 2062 7974 650a 7b0a 2020 2020 6d79 2024 byte.{. my $\n+000356f0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n+00035700: 2020 6d79 2028 2473 697a 652c 2024 7569 my ($size, $ui\n+00035710: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;..\n+00035720: 2020 2020 2473 656c 662d 3e7b 2773 756d $self->{'sum\n+00035730: 4f72 6967 4669 6c65 7327 7d20 2b3d 2024 OrigFiles'} += $\n+00035740: 7369 7a65 3b0a 0a20 2020 202b 2b24 7365 size;.. ++$se\n+00035750: 6c66 2d3e 7b27 6e6f 4669 6c65 7327 7d3b lf->{'noFiles'};\n+00035760: 0a20 2020 2024 7365 6c66 2d3e 7072 696e . $self->prin\n+00035770: 7450 726f 6772 6573 7352 6570 6f72 7428 tProgressReport(\n+00035780: 290a 0969 6620 2824 7365 6c66 2d3e 7b27 )..if ($self->{'\n+00035790: 7072 6f67 7265 7373 5265 706f 7274 277d progressReport'}\n+000357a0: 2061 6e64 0a09 2020 2020 2473 656c 662d and.. $self-\n+000357b0: 3e7b 276e 6f46 696c 6573 277d 2025 2024 >{'noFiles'} % $\n+000357c0: 7365 6c66 2d3e 7b27 7072 6f67 7265 7373 self->{'progress\n+000357d0: 5265 706f 7274 277d 203d 3d20 3029 3b0a Report'} == 0);.\n+000357e0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self->\n+000357f0: 7b27 7573 6572 4772 6f75 7046 6c61 6727 {'userGroupFlag'\n+00035800: 7d29 0a20 2020 207b 0a0a 092b 2b24 7365 }). {...++$se\n+00035810: 6c66 2d3e 7b27 7569 6453 7461 7449 6e6f lf->{'uidStatIno\n+00035820: 6465 7327 7d2d 3e7b 2475 6964 7d3b 0a09 des'}->{$uid};..\n+00035830: 2b2b 2473 656c 662d 3e7b 2767 6964 5374 ++$self->{'gidSt\n+00035840: 6174 496e 6f64 6573 277d 2d3e 7b24 6769 atInodes'}->{$gi\n+00035850: 647d 3b0a 0924 7365 6c66 2d3e 7b27 7569 d};..$self->{'ui\n+00035860: 6453 7461 7453 697a 6527 7d2d 3e7b 2475 dStatSize'}->{$u\n+00035870: 6964 7d20 2b3d 2024 7369 7a65 3b0a 0924 id} += $size;..$\n+00035880: 7365 6c66 2d3e 7b27 6769 6453 7461 7453 self->{'gidStatS\n+00035890: 697a 6527 7d2d 3e7b 2467 6964 7d20 2b3d ize'}->{$gid} +=\n+000358a0: 2024 7369 7a65 3b0a 2020 2020 7d0a 7d0a $size;. }.}.\n+000358b0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+000358c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000358d0: 2323 2323 2323 2323 2323 0a73 7562 2070 ##########.sub p\n+000358e0: 7269 6e74 5072 6f67 7265 7373 5265 706f rintProgressRepo\n+000358f0: 7274 0a7b 0a20 2020 206d 7920 2473 656c rt.{. my $sel\n+00035900: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. \n+00035910: 6966 2028 2473 656c 662d 3e7b 2770 726f if ($self->{'pro\n+00035920: 6772 6573 7352 6570 6f72 7427 7d20 3e20 gressReport'} > \n+00035930: 3029 0a20 2020 207b 0a09 6d79 2024 7320 0). {..my $s \n+00035940: 3d20 2473 656c 662d 3e7b 2773 756d 4e65 = $self->{'sumNe\n+00035950: 7743 6f6d 7072 277d 202b 2024 7365 6c66 wCompr'} + $self\n+00035960: 2d3e 7b27 7375 6d4e 6577 436f 7079 277d ->{'sumNewCopy'}\n+00035970: 3b0a 0924 7365 6c66 2d3e 7b27 7072 4c6f ;..$self->{'prLo\n+00035980: 6727 7d2d 3e70 7269 6e74 2827 2d6b 696e g'}->print('-kin\n+00035990: 6427 203d 3e20 2750 272c 0a09 0909 0927 d' => 'P',.....'\n+000359a0: 2d73 7472 2720 3d3e 0a09 0909 095b 2473 -str' =>.....[$s\n+000359b0: 656c 662d 3e7b 276e 6f46 696c 6573 277d elf->{'noFiles'}\n+000359c0: 202e 2027 2066 696c 6573 2070 726f 6365 . ' files proce\n+000359d0: 7373 6564 2028 2720 2e0a 0909 0909 2028 ssed (' ...... (\n+000359e0: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable\n+000359f0: 2824 7365 6c66 2d3e 7b27 7375 6d4f 7269 ($self->{'sumOri\n+00035a00: 6746 696c 6573 277d 2929 5b30 5d20 2e0a gFiles'}))[0] ..\n+00035a10: 0909 0909 2027 2c20 2720 2e0a 0909 0909 .... ', ' ......\n+00035a20: 2028 263a 3a68 756d 616e 5265 6164 6162 (&::humanReadab\n+00035a30: 6c65 2824 7329 295b 305d 202e 2027 2920 le($s))[0] . ') \n+00035a40: 2827 202e 0a09 0909 0920 2473 656c 662d (' ...... $self-\n+00035a50: 3e7b 2773 756d 4f72 6967 4669 6c65 7327 >{'sumOrigFiles'\n+00035a60: 7d20 2e20 272c 2027 202e 2024 7320 2e20 } . ', ' . $s . \n+00035a70: 2729 275d 293b 0a20 2020 207d 0a7d 0a0a ')']);. }.}..\n+00035a80: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+00035a90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035aa0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad\n+00035ab0: 6453 756d 4d44 3553 756d 2020 2020 2020 dSumMD5Sum \n+00035ac0: 2023 2069 6e20 6279 7465 0a7b 0a20 2020 # in byte.{. \n+00035ad0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n+00035ae0: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{\n+00035af0: 2773 756d 4d44 3553 756d 277d 202b 3d20 'sumMD5Sum'} += \n+00035b00: 7368 6966 743b 0a7d 0a0a 0a23 2323 2323 shift;.}...#####\n+00035b10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035b20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035b30: 2323 230a 7375 6220 6164 6453 756d 4c69 ###.sub addSumLi\n+00035b40: 6e6b 6564 496e 7465 726e 616c 436f 7079 nkedInternalCopy\n+00035b50: 2020 2023 2062 7974 650a 7b0a 2020 2020 # byte.{. \n+00035b60: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n+00035b70: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n+00035b80: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna\n+00035b90: 6c43 6f70 7927 7d20 2b3d 2073 6869 6674 lCopy'} += shift\n+00035ba0: 3b0a 2020 2020 2b2b 2473 656c 662d 3e7b ;. ++$self->{\n+00035bb0: 276e 6f49 6e74 6572 6e61 6c4c 696e 6b65 'noInternalLinke\n+00035bc0: 6446 696c 6573 277d 3b0a 7d0a 0a0a 2323 dFiles'};.}...##\n+00035bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035be0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035bf0: 2323 2323 2323 0a73 7562 2061 6464 5375 ######.sub addSu\n+00035c00: 6d4c 696e 6b65 6449 6e74 6572 6e61 6c43 mLinkedInternalC\n+00035c10: 6f6d 7072 2020 2023 2062 7974 650a 7b0a ompr # byte.{.\n+00035c20: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n+00035c30: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self\n+00035c40: 2d3e 7b27 7375 6d4c 696e 6b65 6449 6e74 ->{'sumLinkedInt\n+00035c50: 6572 6e61 6c43 6f6d 7072 277d 202b 3d20 ernalCompr'} += \n+00035c60: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se\n+00035c70: 6c66 2d3e 7b27 6e6f 496e 7465 726e 616c lf->{'noInternal\n+00035c80: 4c69 6e6b 6564 4669 6c65 7327 7d3b 0a7d LinkedFiles'};.}\n+00035c90: 0a0a 0a0a 2323 2323 2323 2323 2323 2323 ....############\n+00035ca0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035cb0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n+00035cc0: 2061 6464 5375 6d4c 696e 6b65 644f 6c64 addSumLinkedOld\n+00035cd0: 436f 7079 2020 2023 2062 7974 650a 7b0a Copy # byte.{.\n+00035ce0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n+00035cf0: 6869 6674 3b0a 0a20 2020 2024 7365 6c66 hift;.. $self\n+00035d00: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld\n+00035d10: 436f 7079 277d 202b 3d20 7368 6966 743b Copy'} += shift;\n+00035d20: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{'\n+00035d30: 6e6f 4f6c 644c 696e 6b65 6446 696c 6573 noOldLinkedFiles\n+00035d40: 277d 3b0a 7d0a 0a0a 2323 2323 2323 2323 '};.}...########\n+00035d50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035d70: 0a73 7562 2061 6464 5375 6d4c 696e 6b65 .sub addSumLinke\n+00035d80: 644f 6c64 436f 6d70 7220 2020 2320 6279 dOldCompr # by\n+00035d90: 7465 0a7b 0a20 2020 206d 7920 2473 656c te.{. my $sel\n+00035da0: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. \n+00035db0: 2473 656c 662d 3e7b 2773 756d 4c69 6e6b $self->{'sumLink\n+00035dc0: 6564 4f6c 6443 6f6d 7072 277d 202b 3d20 edOldCompr'} += \n+00035dd0: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se\n+00035de0: 6c66 2d3e 7b27 6e6f 4f6c 644c 696e 6b65 lf->{'noOldLinke\n+00035df0: 6446 696c 6573 277d 3b0a 7d0a 0a0a 2323 dFiles'};.}...##\n+00035e00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035e10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035e20: 2323 2323 2323 0a73 7562 2061 6464 5375 ######.sub addSu\n+00035e30: 6d55 6e63 6861 6e67 6564 436f 7079 2020 mUnchangedCopy \n+00035e40: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my\n+00035e50: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+00035e60: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+00035e70: 6d55 6e63 6861 6e67 6564 436f 7079 277d mUnchangedCopy'}\n+00035e80: 202b 3d20 7368 6966 743b 0a20 2020 202b += shift;. +\n+00035e90: 2b24 7365 6c66 2d3e 7b27 756e 6368 616e +$self->{'unchan\n+00035ea0: 6765 6446 696c 6573 277d 3b0a 7d0a 0a0a gedFiles'};.}...\n+00035eb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035ec0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035ed0: 2323 2323 2323 2323 0a73 7562 2061 6464 ########.sub add\n+00035ee0: 5375 6d55 6e63 6861 6e67 6564 436f 6d70 SumUnchangedComp\n+00035ef0: 7220 2020 2320 6279 7465 0a7b 0a20 2020 r # byte.{. \n+00035f00: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n+00035f10: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{\n+00035f20: 2773 756d 556e 6368 616e 6765 6443 6f6d 'sumUnchangedCom\n+00035f30: 7072 277d 202b 3d20 7368 6966 743b 0a20 pr'} += shift;. \n+00035f40: 2020 202b 2b24 7365 6c66 2d3e 7b27 756e ++$self->{'un\n+00035f50: 6368 616e 6765 6446 696c 6573 277d 3b0a changedFiles'};.\n+00035f60: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+00035f70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00035f80: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n+00035f90: 2061 6464 5375 6d4e 6577 436f 7079 2020 addSumNewCopy \n+00035fa0: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my\n+00035fb0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+00035fc0: 2020 2020 6d79 2024 6120 3d20 7368 6966 my $a = shif\n+00035fd0: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{\n+00035fe0: 2773 756d 4e65 7743 6f70 7927 7d20 2b3d 'sumNewCopy'} +=\n+00035ff0: 2024 6120 3f20 2461 203a 2030 3b0a 2020 $a ? $a : 0;. \n+00036000: 2020 2b2b 2473 656c 662d 3e7b 276e 6f43 ++$self->{'noC\n+00036010: 6f70 6965 6446 696c 6573 277d 3b0a 7d0a opiedFiles'};.}.\n+00036020: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00036030: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00036040: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a\n+00036050: 6464 5375 6d4e 6577 436f 6d70 7220 2020 ddSumNewCompr \n+00036060: 2320 6279 7465 0a7b 0a20 2020 206d 7920 # byte.{. my \n+00036070: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. \n+00036080: 2020 206d 7920 2461 3120 3d20 7368 6966 my $a1 = shif\n+00036090: 743b 0a20 2020 206d 7920 2461 3220 3d20 t;. my $a2 = \n+000360a0: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel\n+000360b0: 662d 3e7b 2773 756d 4e65 7743 6f6d 7072 f->{'sumNewCompr\n+000360c0: 277d 202b 3d20 2461 3120 3f20 2461 3120 '} += $a1 ? $a1 \n+000360d0: 3a20 303b 0a20 2020 2024 7365 6c66 2d3e : 0;. $self->\n+000360e0: 7b27 7375 6d4e 6577 436f 6d70 724f 7269 {'sumNewComprOri\n+000360f0: 6753 697a 6527 7d20 2b3d 2024 6132 203f gSize'} += $a2 ?\n+00036100: 2024 6132 203a 2030 3b0a 2020 2020 2b2b $a2 : 0;. ++\n+00036110: 2473 656c 662d 3e7b 276e 6f43 6f6d 7072 $self->{'noCompr\n+00036120: 6573 7365 6446 696c 6573 277d 3b0a 7d0a essedFiles'};.}.\n+00036130: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n+00036140: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00036150: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a\n+00036160: 6464 5375 6d44 424d 4669 6c65 7320 2020 ddSumDBMFiles \n+00036170: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my\n+00036180: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n+00036190: 0a20 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+000361a0: 6d44 424d 4669 6c65 7327 7d20 2b3d 2073 mDBMFiles'} += s\n+000361b0: 6869 6674 3b0a 7d0a 0a0a 2323 2323 2323 hift;.}...######\n+000361c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000361d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000361e0: 2323 0a73 7562 2073 6574 5369 7a65 4d44 ##.sub setSizeMD\n+000361f0: 3543 6865 636b 5375 6d0a 7b0a 2020 2020 5CheckSum.{. \n+00036200: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n+00036210: 3b0a 2020 2020 6d79 2024 6d64 3543 6865 ;. my $md5Che\n+00036220: 636b 5375 6d20 3d20 7368 6966 743b 0a20 ckSum = shift;. \n+00036230: 2020 206d 7920 2463 6f6d 7072 6573 734d my $compressM\n+00036240: 4435 4669 6c65 203d 2073 6869 6674 3b0a D5File = shift;.\n+00036250: 0a20 2020 2069 6620 2824 636f 6d70 7265 . if ($compre\n+00036260: 7373 4d44 3546 696c 6520 6571 2027 7965 ssMD5File eq 'ye\n+00036270: 7327 290a 2020 2020 7b0a 0924 7365 6c66 s'). {..$self\n+00036280: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum'\n+00036290: 7d20 3d20 2873 7461 7428 2224 6d64 3543 } = (stat(\"$md5C\n+000362a0: 6865 636b 5375 6d2e 627a 3222 2929 5b37 heckSum.bz2\"))[7\n+000362b0: 5d3b 0a20 2020 207d 0a20 2020 2065 6c73 ];. }. els\n+000362c0: 650a 2020 2020 7b0a 0924 7365 6c66 2d3e e. {..$self->\n+000362d0: 7b27 6d64 3543 6865 636b 5375 6d27 7d20 {'md5CheckSum'} \n+000362e0: 3d20 2873 7461 7428 246d 6435 4368 6563 = (stat($md5Chec\n+000362f0: 6b53 756d 2929 5b37 5d3b 0a20 2020 207d kSum))[7];. }\n+00036300: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n+00036310: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00036320: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n+00036330: 6220 7365 7455 7365 6453 697a 6551 7565 b setUsedSizeQue\n+00036340: 7565 730a 7b0a 2020 2020 6d79 2024 7365 ues.{. my $se\n+00036350: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. \n+00036360: 2024 7365 6c66 2d3e 7b27 6d61 7855 7365 $self->{'maxUse\n+00036370: 6443 6f70 7951 7565 7565 277d 203d 2073 dCopyQueue'} = s\n+00036380: 6869 6674 3b0a 2020 2020 2473 656c 662d hift;. $self-\n+00036390: 3e7b 276d 6178 5573 6564 436f 6d70 7251 >{'maxUsedComprQ\n+000363a0: 7565 7565 277d 203d 2073 6869 6674 3b0a ueue'} = shift;.\n+000363b0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+000363c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000363d0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n+000363e0: 2070 7269 6e74 0a7b 0a20 2020 206d 7920 print.{. my \n+000363f0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n+00036400: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params)\n+00036410: 203d 2028 272d 6578 5479 7065 7327 203d = ('-exTypes' =\n+00036420: 3e20 5b5d 0a09 0920 2020 2029 3b0a 0a20 > []... );.. \n+00036430: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec\n+00036440: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\\%params\n+00036450: 2c20 5c40 5f2c 2027 5374 6174 6973 7469 , \\@_, 'Statisti\n+00036460: 633a 3a70 7269 6e74 272c 205b 272d 6578 c::print', ['-ex\n+00036470: 5479 7065 7327 5d29 3b0a 0a20 2020 206d Types']);.. m\n+00036480: 7920 2465 7854 7970 6573 203d 2024 7061 y $exTypes = $pa\n+00036490: 7261 6d73 7b27 2d65 7854 7970 6573 277d rams{'-exTypes'}\n+000364a0: 3b0a 2020 2020 6d79 2028 4065 7854 7970 ;. my (@exTyp\n+000364b0: 6573 2c20 2465 7429 3b0a 2020 2020 6d79 es, $et);. my\n+000364c0: 2025 6578 5479 7065 734c 696e 6573 203d %exTypesLines =\n+000364d0: 2028 2753 2720 3d3e 2027 736f 636b 6574 ('S' => 'socket\n+000364e0: 272c 0a09 0909 2762 2720 3d3e 2027 626c ',....'b' => 'bl\n+000364f0: 6f63 6b20 7370 6563 6961 6c27 2c0a 0909 ock special',...\n+00036500: 0927 6327 203d 3e20 2763 6861 7220 7370 .'c' => 'char sp\n+00036510: 6563 6961 6c27 2c0a 0909 0927 6627 203d ecial',....'f' =\n+00036520: 3e20 2770 6c61 696e 2066 696c 6527 2c0a > 'plain file',.\n+00036530: 0909 0927 7027 203d 3e20 276e 616d 6564 ...'p' => 'named\n+00036540: 2070 6970 6527 2c0a 0909 0927 6c27 203d pipe',....'l' =\n+00036550: 3e20 2773 796d 626f 6c69 6320 6c69 6e6b > 'symbolic link\n+00036560: 2729 3b0a 2020 2020 666f 7265 6163 6820 ');. foreach \n+00036570: 2465 7420 286b 6579 7320 2524 6578 5479 $et (keys %$exTy\n+00036580: 7065 7329 0a20 2020 207b 0a09 7075 7368 pes). {..push\n+00036590: 2040 6578 5479 7065 732c 2073 7072 696e @exTypes, sprin\n+000365a0: 7466 2822 2533 3373 222c 2022 6578 636c tf(\"%33s\", \"excl\n+000365b0: 7564 6564 2022 202e 0a09 0909 2020 2020 uded \" ..... \n+000365c0: 2020 2024 6578 5479 7065 734c 696e 6573 $exTypesLines\n+000365d0: 7b24 6574 7d20 2e0a 0909 0920 2020 2020 {$et} ..... \n+000365e0: 2020 2273 2028 2465 7429 203d 2022 2920 \"s ($et) = \") \n+000365f0: 2e20 2424 6578 5479 7065 737b 2465 747d . $$exTypes{$et}\n+00036600: 3b0a 2020 2020 7d0a 0a20 2020 206d 7920 ;. }.. my \n+00036610: 2840 6c29 3b0a 2020 2020 6d79 2028 2475 (@l);. my ($u\n+00036620: 7365 722c 2473 7973 7465 6d2c 2463 7573 ser,$system,$cus\n+00036630: 6572 2c24 6373 7973 7465 6d29 203d 2074 er,$csystem) = t\n+00036640: 696d 6573 3b0a 2020 2020 6d79 2028 2474 imes;. my ($t\n+00036650: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = \"-------\n+00036660: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+----\n+00036670: 2d2d 2d2d 2d2d 223b 0a20 2020 2070 7573 ------\";. pus\n+00036680: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf(\"%\n+00036690: 2d37 737c 2531 3073 7c25 3130 7322 2c20 -7s|%10s|%10s\", \n+000366a0: 2220 5b73 6563 5d22 2c20 2275 7365 7222 \" [sec]\", \"user\"\n+000366b0: 2c20 2273 7973 7465 6d22 293b 0a20 2020 , \"system\");. \n+000366c0: 2070 7573 6820 406c 2c20 2224 7472 656e push @l, \"$tren\n+000366d0: 6e22 3b0a 2020 2020 7075 7368 2040 6c2c n\";. push @l,\n+000366e0: 2073 7072 696e 7466 2822 252d 3773 7c25 sprintf(\"%-7s|%\n+000366f0: 3130 2e32 667c 2531 302e 3266 222c 2022 10.2f|%10.2f\", \"\n+00036700: 7072 6f63 6573 7322 2c20 2475 7365 722c process\", $user,\n+00036710: 2024 7379 7374 656d 293b 0a20 2020 2070 $system);. p\n+00036720: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf(\n+00036730: 2225 2d37 737c 2531 302e 3266 7c25 3130 \"%-7s|%10.2f|%10\n+00036740: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f\", \"childs\", \n+00036750: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem\n+00036760: 293b 0a20 2020 2070 7573 6820 406c 2c20 );. push @l, \n+00036770: 2224 7472 656e 6e22 3b0a 2020 2020 6d79 \"$trenn\";. my\n+00036780: 2028 2475 2c20 2473 2920 3d20 2824 6375 ($u, $s) = ($cu\n+00036790: 7365 7220 2b20 2475 7365 722c 2024 6373 ser + $user, $cs\n+000367a0: 7973 7465 6d20 2b20 2473 7973 7465 6d29 ystem + $system)\n+000367b0: 3b0a 2020 2020 2475 203d 202e 3120 6966 ;. $u = .1 if\n+000367c0: 2024 7520 2b20 2473 203d 3d20 303b 2020 $u + $s == 0; \n+000367d0: 2020 2020 2023 2061 766f 6964 2064 6976 # avoid div\n+000367e0: 6973 696f 6e20 6279 207a 6572 6f0a 2020 ision by zero. \n+000367f0: 2020 6d79 2024 7573 5f73 7472 203d 2026 my $us_str = &\n+00036800: 6461 7465 546f 6f6c 733a 3a76 616c 546f dateTools::valTo\n+00036810: 5374 7228 272d 7365 6327 203d 3e20 696e Str('-sec' => in\n+00036820: 7428 2475 202b 2024 7320 2b20 2e35 2929 t($u + $s + .5))\n+00036830: 3b0a 2020 2020 7075 7368 2040 6c2c 2073 ;. push @l, s\n+00036840: 7072 696e 7466 2822 252d 3773 7c25 3130 printf(\"%-7s|%10\n+00036850: 2e32 667c 2531 302e 3266 203d 3e20 252e .2f|%10.2f => %.\n+00036860: 3266 2028 2475 735f 7374 7229 222c 2022 2f ($us_str)\", \"\n+00036870: 7375 6d22 2c0a 0909 2020 2020 2024 752c sum\",... $u,\n+00036880: 2024 732c 2024 7520 2b20 2473 293b 0a0a $s, $u + $s);..\n+00036890: 2020 2020 6d79 2024 7374 6172 7444 6174 my $startDat\n+000368a0: 6520 3d20 2473 656c 662d 3e7b 2773 7461 e = $self->{'sta\n+000368b0: 7274 4461 7465 277d 3b0a 2020 2020 6d79 rtDate'};. my\n+000368c0: 2028 4073 7461 7274 4461 7465 2920 3d20 (@startDate) = \n+000368d0: 2829 3b0a 2020 2020 6966 2028 2473 7461 ();. if ($sta\n+000368e0: 7274 4461 7465 290a 2020 2020 7b0a 0970 rtDate). {..p\n+000368f0: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, \n+00036900: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec\n+00036910: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration \n+00036920: 3d20 2720 2e0a 0920 2020 2024 7374 6172 = ' ... $star\n+00036930: 7444 6174 652d 3e64 656c 7461 496e 5374 tDate->deltaInSt\n+00036940: 7228 272d 7365 636f 6e64 4461 7465 2720 r('-secondDate' \n+00036950: 3d3e 2024 7365 6c66 2d3e 7b27 616b 7444 => $self->{'aktD\n+00036960: 6174 6527 7d29 3b0a 2020 2020 7d0a 0a20 ate'});. }.. \n+00036970: 2020 206d 7920 2464 456e 6420 3d20 6461 my $dEnd = da\n+00036980: 7465 546f 6f6c 732d 3e6e 6577 2829 3b0a teTools->new();.\n+00036990: 2020 2020 6d79 2024 6261 636b 7570 4475 my $backupDu\n+000369a0: 7261 7469 6f6e 203d 0a09 2473 656c 662d ration =..$self-\n+000369b0: 3e7b 2761 6b74 4461 7465 277d 2d3e 6465 >{'aktDate'}->de\n+000369c0: 6c74 6149 6e53 6563 7328 272d 7365 636f ltaInSecs('-seco\n+000369d0: 6e64 4461 7465 2720 3d3e 2024 6445 6e64 ndDate' => $dEnd\n+000369e0: 293b 0a20 2020 2024 6261 636b 7570 4475 );. $backupDu\n+000369f0: 7261 7469 6f6e 203d 2031 2069 6620 2824 ration = 1 if ($\n+00036a00: 6261 636b 7570 4475 7261 7469 6f6e 203d backupDuration =\n+00036a10: 3d20 3029 3b20 2020 2320 4d69 6e69 6d61 = 0); # Minima\n+00036a20: 6c65 7220 5765 7274 0a0a 2020 2020 6d79 ler Wert.. my\n+00036a30: 2024 7375 6d54 6172 6765 7441 6c6c 203d $sumTargetAll =\n+00036a40: 0a09 2473 656c 662d 3e7b 2773 756d 4c69 ..$self->{'sumLi\n+00036a50: 6e6b 6564 496e 7465 726e 616c 436f 7079 nkedInternalCopy\n+00036a60: 277d 202b 0a09 2473 656c 662d 3e7b 2773 '} +..$self->{'s\n+00036a70: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal\n+00036a80: 436f 6d70 7227 7d20 2b0a 0924 7365 6c66 Compr'} +..$self\n+00036a90: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld\n+00036aa0: 436f 7079 277d 202b 0a09 2473 656c 662d Copy'} +..$self-\n+00036ab0: 3e7b 2773 756d 4c69 6e6b 6564 4f6c 6443 >{'sumLinkedOldC\n+00036ac0: 6f6d 7072 277d 202b 0a09 2473 656c 662d ompr'} +..$self-\n+00036ad0: 3e7b 2773 756d 4e65 7743 6f70 7927 7d20 >{'sumNewCopy'} \n+00036ae0: 2b0a 0924 7365 6c66 2d3e 7b27 7375 6d4e +..$self->{'sumN\n+00036af0: 6577 436f 6d70 7227 7d3b 0a0a 2020 2020 ewCompr'};.. \n+00036b00: 6d79 2024 7375 6d54 6172 6765 744e 6577 my $sumTargetNew\n+00036b10: 203d 2024 7365 6c66 2d3e 7b27 7375 6d4e = $self->{'sumN\n+00036b20: 6577 436f 7079 277d 202b 2024 7365 6c66 ewCopy'} + $self\n+00036b30: 2d3e 7b27 7375 6d4e 6577 436f 6d70 7227 ->{'sumNewCompr'\n+00036b40: 7d3b 0a0a 2020 2020 6d79 2024 6e65 7755 };.. my $newU\n+00036b50: 7365 6453 7061 6365 203d 2024 7375 6d54 sedSpace = $sumT\n+00036b60: 6172 6765 744e 6577 202b 2024 7365 6c66 argetNew + $self\n+00036b70: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum'\n+00036b80: 7d20 2d0a 0924 7365 6c66 2d3e 7b27 6279 } -..$self->{'by\n+00036b90: 7465 7327 7d3b 0a20 2020 206d 7920 246e tes'};. my $n\n+00036ba0: 6577 5573 6564 5370 6163 6548 756d 616e ewUsedSpaceHuman\n+00036bb0: 3b0a 2020 2020 6966 2028 246e 6577 5573 ;. if ($newUs\n+00036bc0: 6564 5370 6163 6520 3e3d 2030 290a 2020 edSpace >= 0). \n+00036bd0: 2020 7b0a 0928 246e 6577 5573 6564 5370 {..($newUsedSp\n+00036be0: 6163 6548 756d 616e 2920 3d20 263a 3a68 aceHuman) = &::h\n+00036bf0: 756d 616e 5265 6164 6162 6c65 2824 6e65 umanReadable($ne\n+00036c00: 7755 7365 6453 7061 6365 293b 0a20 2020 wUsedSpace);. \n+00036c10: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n+00036c20: 7b0a 0928 246e 6577 5573 6564 5370 6163 {..($newUsedSpac\n+00036c30: 6548 756d 616e 2920 3d20 263a 3a68 756d eHuman) = &::hum\n+00036c40: 616e 5265 6164 6162 6c65 282d 2024 6e65 anReadable(- $ne\n+00036c50: 7755 7365 6453 7061 6365 293b 0a09 246e wUsedSpace);..$n\n+00036c60: 6577 5573 6564 5370 6163 6548 756d 616e ewUsedSpaceHuman\n+00036c70: 203d 2022 2d24 6e65 7755 7365 6453 7061 = \"-$newUsedSpa\n+00036c80: 6365 4875 6d61 6e22 3b0a 2020 2020 7d0a ceHuman\";. }.\n+00036c90: 0a20 2020 206d 7920 2840 7567 5f6c 6f67 . my (@ug_log\n+00036ca0: 2920 3d20 2829 3b0a 2020 2020 6d79 2028 ) = ();. my (\n+00036cb0: 4075 675f 6669 6c65 2920 3d20 2829 3b0a @ug_file) = ();.\n+00036cc0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{\n+00036cd0: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'}\n+00036ce0: 290a 2020 2020 7b0a 096d 7920 246b 3b0a ). {..my $k;.\n+00036cf0: 096d 7920 2475 6964 5374 6174 496e 6f64 .my $uidStatInod\n+00036d00: 6573 203d 2024 7365 6c66 2d3e 7b27 7569 es = $self->{'ui\n+00036d10: 6453 7461 7449 6e6f 6465 7327 7d3b 0a09 dStatInodes'};..\n+00036d20: 666f 7265 6163 6820 246b 2028 736f 7274 foreach $k (sort\n+00036d30: 207b 2461 203c 3d3e 2024 627d 206b 6579 {$a <=> $b} key\n+00036d40: 7320 2524 7569 6453 7461 7449 6e6f 6465 s %$uidStatInode\n+00036d50: 7329 0a09 7b0a 0920 2020 206d 7920 246e s)..{.. my $n\n+00036d60: 616d 6520 3d20 6765 7470 7775 6964 2824 ame = getpwuid($\n+00036d70: 6b29 3b0a 0920 2020 2024 6e61 6d65 203d k);.. $name =\n+00036d80: 2027 2d27 2075 6e6c 6573 7320 246e 616d '-' unless $nam\n+00036d90: 653b 0a09 2020 2020 7075 7368 2040 7567 e;.. push @ug\n+00036da0: 5f6c 6f67 2c20 7370 7269 6e74 6628 2255 _log, sprintf(\"U\n+00036db0: 5345 5220 494e 4f44 4520 2025 3664 202d SER INODE %6d -\n+00036dc0: 2025 3973 203d 2025 6c75 222c 0a09 0909 %9s = %lu\",....\n+00036dd0: 0920 2020 246b 2c20 246e 616d 652c 2024 . $k, $name, $\n+00036de0: 2475 6964 5374 6174 496e 6f64 6573 7b24 $uidStatInodes{$\n+00036df0: 6b7d 293b 0a09 2020 2020 7075 7368 2040 k});.. push @\n+00036e00: 7567 5f66 696c 652c 2022 5553 4552 5f49 ug_file, \"USER_I\n+00036e10: 4e4f 4445 2024 6b20 246e 616d 6520 2220 NODE $k $name \" \n+00036e20: 2e20 2424 7569 6453 7461 7449 6e6f 6465 . $$uidStatInode\n+00036e30: 737b 246b 7d3b 0a09 7d0a 096d 7920 2475 s{$k};..}..my $u\n+00036e40: 6964 5374 6174 5369 7a65 203d 2024 7365 idStatSize = $se\n+00036e50: 6c66 2d3e 7b27 7569 6453 7461 7453 697a lf->{'uidStatSiz\n+00036e60: 6527 7d3b 0a09 666f 7265 6163 6820 246b e'};..foreach $k\n+00036e70: 2028 736f 7274 207b 2461 203c 3d3e 2024 (sort {$a <=> $\n+00036e80: 627d 206b 6579 7320 2524 7569 6453 7461 b} keys %$uidSta\n+00036e90: 7453 697a 6529 0a09 7b0a 0920 2020 206d tSize)..{.. m\n+00036ea0: 7920 246e 616d 6520 3d20 6765 7470 7775 y $name = getpwu\n+00036eb0: 6964 2824 6b29 3b0a 0920 2020 2024 6e61 id($k);.. $na\n+00036ec0: 6d65 203d 2027 2d27 2075 6e6c 6573 7320 me = '-' unless \n+00036ed0: 246e 616d 653b 0a09 2020 2020 7075 7368 $name;.. push\n+00036ee0: 2040 7567 5f6c 6f67 2c20 7370 7269 6e74 @ug_log, sprint\n+00036ef0: 6628 2255 5345 5220 5349 5a45 2020 2025 f(\"USER SIZE %\n+00036f00: 3664 202d 2025 3973 203d 2025 7320 2825 6d - %9s = %s (%\n+00036f10: 6c75 2922 2c0a 0909 0909 2020 246b 2c20 lu)\",..... $k, \n+00036f20: 246e 616d 652c 0a09 0909 0920 2028 263a $name,..... (&:\n+00036f30: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($\n+00036f40: 2475 6964 5374 6174 5369 7a65 7b24 6b7d $uidStatSize{$k}\n+00036f50: 2929 5b30 5d2c 0a09 0909 0920 2024 2475 ))[0],..... $$u\n+00036f60: 6964 5374 6174 5369 7a65 7b24 6b7d 293b idStatSize{$k});\n+00036f70: 0a09 2020 2020 7075 7368 2040 7567 5f66 .. push @ug_f\n+00036f80: 696c 652c 2022 5553 4552 5f53 495a 4520 ile, \"USER_SIZE \n+00036f90: 246b 2024 6e61 6d65 2022 202e 2024 2475 $k $name \" . $$u\n+00036fa0: 6964 5374 6174 5369 7a65 7b24 6b7d 3b0a idStatSize{$k};.\n+00036fb0: 097d 0a0a 096d 7920 2467 6964 5374 6174 .}...my $gidStat\n+00036fc0: 496e 6f64 6573 203d 2024 7365 6c66 2d3e Inodes = $self->\n+00036fd0: 7b27 6769 6453 7461 7449 6e6f 6465 7327 {'gidStatInodes'\n+00036fe0: 7d3b 0a09 666f 7265 6163 6820 246b 2028 };..foreach $k (\n+00036ff0: 736f 7274 207b 2461 203c 3d3e 2024 627d sort {$a <=> $b}\n+00037000: 206b 6579 7320 2524 6769 6453 7461 7449 keys %$gidStatI\n+00037010: 6e6f 6465 7329 0a09 7b0a 0920 2020 206d nodes)..{.. m\n+00037020: 7920 2467 726f 7570 203d 2067 6574 6772 y $group = getgr\n+00037030: 6769 6428 246b 293b 0a09 2020 2020 2467 gid($k);.. $g\n+00037040: 726f 7570 203d 2027 2d27 2075 6e6c 6573 roup = '-' unles\n+00037050: 7320 2467 726f 7570 3b0a 0920 2020 2070 s $group;.. p\n+00037060: 7573 6820 4075 675f 6c6f 672c 2073 7072 ush @ug_log, spr\n+00037070: 696e 7466 2822 4752 4f55 5020 494e 4f44 intf(\"GROUP INOD\n+00037080: 4520 2536 6420 2d20 2539 7320 3d20 256c E %6d - %9s = %l\n+00037090: 7522 2c0a 0909 0909 2020 2024 6b2c 2024 u\",..... $k, $\n+000370a0: 6772 6f75 702c 2024 2467 6964 5374 6174 group, $$gidStat\n+000370b0: 496e 6f64 6573 7b24 6b7d 293b 0a09 2020 Inodes{$k});.. \n+000370c0: 2020 7075 7368 2040 7567 5f66 696c 652c push @ug_file,\n+000370d0: 2022 4752 4f55 505f 494e 4f44 4520 246b \"GROUP_INODE $k\n+000370e0: 2024 6772 6f75 7020 2220 2e20 2424 6769 $group \" . $$gi\n+000370f0: 6453 7461 7449 6e6f 6465 737b 246b 7d3b dStatInodes{$k};\n+00037100: 0a09 7d0a 096d 7920 2467 6964 5374 6174 ..}..my $gidStat\n+00037110: 5369 7a65 203d 2024 7365 6c66 2d3e 7b27 Size = $self->{'\n+00037120: 6769 6453 7461 7453 697a 6527 7d3b 0a09 gidStatSize'};..\n+00037130: 666f 7265 6163 6820 246b 2028 736f 7274 foreach $k (sort\n+00037140: 207b 2461 203c 3d3e 2024 627d 206b 6579 {$a <=> $b} key\n+00037150: 7320 2524 6769 6453 7461 7453 697a 6529 s %$gidStatSize)\n+00037160: 0a09 7b0a 0920 2020 206d 7920 2467 726f ..{.. my $gro\n+00037170: 7570 203d 2067 6574 6772 6769 6428 246b up = getgrgid($k\n+00037180: 293b 0a09 2020 2020 2467 726f 7570 203d );.. $group =\n+00037190: 2027 2d27 2075 6e6c 6573 7320 2467 726f '-' unless $gro\n+000371a0: 7570 3b0a 0920 2020 2070 7573 6820 4075 up;.. push @u\n+000371b0: 675f 6c6f 672c 2073 7072 696e 7466 2822 g_log, sprintf(\"\n+000371c0: 4752 4f55 5020 5349 5a45 2020 2536 6420 GROUP SIZE %6d \n+000371d0: 2d20 2539 7320 3d20 2573 2028 256c 7529 - %9s = %s (%lu)\n+000371e0: 222c 0a09 0909 0920 2024 6b2c 2024 6772 \",..... $k, $gr\n+000371f0: 6f75 702c 0a09 0909 0920 2028 263a 3a68 oup,..... (&::h\n+00037200: 756d 616e 5265 6164 6162 6c65 2824 2467 umanReadable($$g\n+00037210: 6964 5374 6174 5369 7a65 7b24 6b7d 2929 idStatSize{$k}))\n+00037220: 5b30 5d2c 0a09 0909 0920 2024 2467 6964 [0],..... $$gid\n+00037230: 5374 6174 5369 7a65 7b24 6b7d 293b 0a09 StatSize{$k});..\n+00037240: 2020 2020 7075 7368 2040 7567 5f66 696c push @ug_fil\n+00037250: 652c 2022 4752 4f55 505f 5349 5a45 2024 e, \"GROUP_SIZE $\n+00037260: 6b20 2467 726f 7570 2022 202e 2024 2467 k $group \" . $$g\n+00037270: 6964 5374 6174 5369 7a65 7b24 6b7d 3b0a idStatSize{$k};.\n+00037280: 097d 0a0a 2309 7072 696e 7420 2223 2323 .}..#.print \"###\n+00037290: 2323 2323 2323 2323 2323 2323 2323 5c6e ##############\\n\n+000372a0: 223b 0a23 0970 7269 6e74 206a 6f69 6e28 \";.#.print join(\n+000372b0: 225c 6e22 2c20 4075 675f 6c6f 6729 2c20 \"\\n\", @ug_log), \n+000372c0: 225c 6e22 3b0a 2309 7072 696e 7420 2223 \"\\n\";.#.print \"#\n+000372d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000372e0: 5c6e 223b 0a23 0970 7269 6e74 206a 6f69 \\n\";.#.print joi\n+000372f0: 6e28 225c 6e22 2c20 4075 675f 6669 6c65 n(\"\\n\", @ug_file\n+00037300: 292c 2022 5c6e 223b 0a0a 096d 7920 2466 ), \"\\n\";...my $f\n+00037310: 696c 6520 3d20 2473 656c 662d 3e7b 2775 ile = $self->{'u\n+00037320: 7365 7247 726f 7570 5374 6174 4669 6c65 serGroupStatFile\n+00037330: 277d 3b0a 0969 6620 2824 6669 6c65 290a '};..if ($file).\n+00037340: 097b 0a09 2020 2020 6c6f 6361 6c20 2a46 .{.. local *F\n+00037350: 494c 453b 0a09 2020 2020 263a 3a63 6865 ILE;.. &::che\n+00037360: 636b 4465 6c53 796d 4c69 6e6b 2824 6669 ckDelSymLink($fi\n+00037370: 6c65 2c20 2470 724c 6f67 2c20 3078 3031 le, $prLog, 0x01\n+00037380: 293b 0a09 2020 2020 756e 6c65 7373 2028 );.. unless (\n+00037390: 6f70 656e 2846 494c 452c 2022 3e20 2466 open(FILE, \"> $f\n+000373a0: 696c 6522 2929 0a09 2020 2020 7b0a 0909 ile\")).. {...\n+000373b0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000373c0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+000373d0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+000373e0: 205b 2263 616e 6e6f 7420 7772 6974 6520 [\"cannot write \n+000373f0: 7374 6174 6973 7469 6320 746f 203c 2466 statistic to <$f\n+00037400: 696c 653e 225d 293b 0a09 0967 6f74 6f20 ile>\"]);...goto \n+00037410: 656e 6455 6964 4769 643b 0a09 2020 2020 endUidGid;.. \n+00037420: 7d0a 0920 2020 2070 7269 6e74 2046 494c }.. print FIL\n+00037430: 4520 6a6f 696e 2822 5c6e 222c 2040 7567 E join(\"\\n\", @ug\n+00037440: 5f66 696c 6529 2c20 225c 6e22 3b0a 0920 _file), \"\\n\";.. \n+00037450: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);.\n+00037460: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00037470: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00037480: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n+00037490: 3e20 5b22 7072 696e 7465 6420 7573 6572 > [\"printed user\n+000374a0: 4772 6f75 7053 7461 7446 696c 6520 3c24 GroupStatFile <$\n+000374b0: 6669 6c65 3e22 5d29 3b0a 097d 0a20 2020 file>\"]);..}. \n+000374c0: 2020 2065 6e64 5569 6447 6964 3a3b 0a20 endUidGid:;. \n+000374d0: 2020 207d 0a0a 2020 2020 6d79 2028 4063 }.. my (@c\n+000374e0: 6f6d 7072 4368 6563 6b29 203d 2028 293b omprCheck) = ();\n+000374f0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self->\n+00037500: 7b27 6e6f 436f 6d70 7243 6865 636b 436f {'noComprCheckCo\n+00037510: 6d70 7227 7d20 2b20 2473 656c 662d 3e7b mpr'} + $self->{\n+00037520: 276e 6f43 6f6d 7072 4368 6563 6b43 7027 'noComprCheckCp'\n+00037530: 7d20 3e20 3029 0a20 2020 207b 0a09 7075 } > 0). {..pu\n+00037540: 7368 2040 636f 6d70 7243 6865 636b 2c0a sh @comprCheck,.\n+00037550: 0927 636f 6d70 7220 6475 6520 746f 2043 .'compr due to C\n+00037560: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK\n+00037570: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{'\n+00037580: 6e6f 436f 6d70 7243 6865 636b 436f 6d70 noComprCheckComp\n+00037590: 7227 7d2c 0a09 2720 2020 6370 2064 7565 r'},..' cp due\n+000375a0: 2074 6f20 434f 4d50 5245 5353 494f 4e5f to COMPRESSION_\n+000375b0: 4348 4543 4b20 3d20 2720 2e20 2473 656c CHECK = ' . $sel\n+000375c0: 662d 3e7b 276e 6f43 6f6d 7072 4368 6563 f->{'noComprChec\n+000375d0: 6b43 7027 7d3b 0a20 2020 207d 0a0a 2020 kCp'};. }.. \n+000375e0: 2020 2473 656c 662d 3e7b 2770 724c 6f67 $self->{'prLog\n+000375f0: 277d 2d3e 0a09 7072 696e 7428 272d 6b69 '}->..print('-ki\n+00037600: 6e64 2720 3d3e 2027 5327 2c0a 0920 2020 nd' => 'S',.. \n+00037610: 2020 2027 2d73 7472 2720 3d3e 0a09 2020 '-str' =>.. \n+00037620: 2020 2020 5b40 6c2c 0a09 2020 2020 2020 [@l,.. \n+00037630: 2040 7567 5f6c 6f67 2c0a 0920 2020 2020 @ug_log,.. \n+00037640: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n+00037650: 2020 2020 2020 6469 7265 6374 6f72 6965 directorie\n+00037660: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{\n+00037670: 276e 6f44 6972 7327 7d2c 0a09 2020 2020 'noDirs'},.. \n+00037680: 2020 2027 2020 2020 2020 2020 2020 2020 ' \n+00037690: 2020 2020 2020 2020 2020 2020 2066 696c fil\n+000376a0: 6573 203d 2027 202e 2024 7365 6c66 2d3e es = ' . $self->\n+000376b0: 7b27 6e6f 4669 6c65 7327 7d2c 0a09 2020 {'noFiles'},.. \n+000376c0: 2020 2020 2027 2020 2020 2020 2020 2020 ' \n+000376d0: 2020 2020 2020 7379 6d62 6f6c 6963 206c symbolic l\n+000376e0: 696e 6b73 203d 2027 202e 2024 7365 6c66 inks = ' . $self\n+000376f0: 2d3e 7b27 6e6f 5379 6d4c 696e 6b73 277d ->{'noSymLinks'}\n+00037700: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n+00037710: 2020 2020 2020 2020 2020 2020 2020 206c l\n+00037720: 6174 6520 6c69 6e6b 7320 3d20 2720 2e20 ate links = ' . \n+00037730: 2473 656c 662d 3e7b 276e 6f4c 6174 654c $self->{'noLateL\n+00037740: 696e 6b73 277d 2c0a 0920 2020 2020 2020 inks'},.. \n+00037750: 2720 2020 2020 2020 2020 2020 2020 2020 ' \n+00037760: 2020 2020 6e61 6d65 6420 7069 7065 7320 named pipes \n+00037770: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n+00037780: 6f4e 616d 6564 5069 7065 7327 7d2c 0a09 oNamedPipes'},..\n+00037790: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n+000377a0: 2020 2020 2020 2020 2020 2020 2020 2073 s\n+000377b0: 6f63 6b65 7473 203d 2027 202e 2024 7365 ockets = ' . $se\n+000377c0: 6c66 2d3e 7b27 6e6f 536f 636b 6574 7327 lf->{'noSockets'\n+000377d0: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' \n+000377e0: 2020 2020 2020 2020 2020 2020 2062 6c6f blo\n+000377f0: 636b 2064 6576 6963 6573 203d 2027 202e ck devices = ' .\n+00037800: 2024 7365 6c66 2d3e 7b27 6e6f 426c 6f63 $self->{'noBloc\n+00037810: 6b44 6576 277d 2c0a 0920 2020 2020 2020 kDev'},.. \n+00037820: 2720 2020 2020 2020 2020 2020 2020 6368 ' ch\n+00037830: 6172 6163 7465 7220 6465 7669 6365 7320 aracter devices \n+00037840: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n+00037850: 6f43 6861 7244 6576 277d 2c0a 0920 2020 oCharDev'},.. \n+00037860: 2020 2020 2720 2020 2020 6e65 7720 696e ' new in\n+00037870: 7465 726e 616c 206c 696e 6b65 6420 6669 ternal linked fi\n+00037880: 6c65 7320 3d20 2720 2e0a 0920 2020 2020 les = ' ... \n+00037890: 2020 2020 2020 2473 656c 662d 3e7b 276e $self->{'n\n+000378a0: 6f49 6e74 6572 6e61 6c4c 696e 6b65 6446 oInternalLinkedF\n+000378b0: 696c 6573 277d 2c0a 0920 2020 2020 2020 iles'},.. \n+000378c0: 2720 2020 2020 2020 2020 2020 2020 206f ' o\n+000378d0: 6c64 206c 696e 6b65 6420 6669 6c65 7320 ld linked files \n+000378e0: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n+000378f0: 6f4f 6c64 4c69 6e6b 6564 4669 6c65 7327 oOldLinkedFiles'\n+00037900: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' \n+00037910: 2020 2020 2020 2020 2020 2075 6e63 6861 uncha\n+00037920: 6e67 6564 2066 696c 6573 203d 2027 202e nged files = ' .\n+00037930: 2024 7365 6c66 2d3e 7b27 756e 6368 616e $self->{'unchan\n+00037940: 6765 6446 696c 6573 277d 2c0a 0920 2020 gedFiles'},.. \n+00037950: 2020 2020 2720 2020 2020 2020 2020 2020 ' \n+00037960: 2020 2020 2020 2063 6f70 6965 6420 6669 copied fi\n+00037970: 6c65 7320 3d20 2720 2e20 2473 656c 662d les = ' . $self-\n+00037980: 3e7b 276e 6f43 6f70 6965 6446 696c 6573 >{'noCopiedFiles\n+00037990: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' \n+000379a0: 2020 2020 2020 2020 2020 2063 6f6d 7072 compr\n+000379b0: 6573 7365 6420 6669 6c65 7320 3d20 2720 essed files = ' \n+000379c0: 2e20 2473 656c 662d 3e7b 276e 6f43 6f6d . $self->{'noCom\n+000379d0: 7072 6573 7365 6446 696c 6573 277d 2c0a pressedFiles'},.\n+000379e0: 0920 2020 2020 2020 2720 2020 2020 2020 . ' \n+000379f0: 2020 2020 2020 2020 2020 626c 6f63 6b65 blocke\n+00037a00: 6420 6669 6c65 7320 3d20 2720 2e20 2473 d files = ' . $s\n+00037a10: 656c 662d 3e7b 276e 6f42 6c6f 636b 6564 elf->{'noBlocked\n+00037a20: 4669 6c65 7327 7d2c 0a09 2020 2020 2020 Files'},.. \n+00037a30: 2027 2020 2065 7863 6c75 6465 6420 6669 ' excluded fi\n+00037a40: 6c65 7320 6265 6361 7573 6520 7275 6c65 les because rule\n+00037a50: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{'\n+00037a60: 6e6f 4578 636c 7564 6552 756c 6527 7d2c noExcludeRule'},\n+00037a70: 0a09 2020 2020 2020 2027 2020 2069 6e63 .. ' inc\n+00037a80: 6c75 6465 6420 6669 6c65 7320 6265 6361 luded files beca\n+00037a90: 7573 6520 7275 6c65 203d 2027 202e 2024 use rule = ' . $\n+00037aa0: 7365 6c66 2d3e 7b27 6e6f 496e 636c 7564 self->{'noInclud\n+00037ab0: 6552 756c 6527 7d2c 0a09 2020 2020 2020 eRule'},.. \n+00037ac0: 2040 636f 6d70 7243 6865 636b 2c0a 0920 @comprCheck,.. \n+00037ad0: 2020 2020 2020 4065 7854 7970 6573 2c0a @exTypes,.\n+00037ae0: 0920 2020 2020 2020 2720 2020 2020 2020 . ' \n+00037af0: 206d 6178 2073 697a 6520 6f66 2063 6f70 max size of cop\n+00037b00: 7920 7175 6575 6520 3d20 2720 2e20 2473 y queue = ' . $s\n+00037b10: 656c 662d 3e7b 276d 6178 5573 6564 436f elf->{'maxUsedCo\n+00037b20: 7079 5175 6575 6527 7d2c 0a09 2020 2020 pyQueue'},.. \n+00037b30: 2020 2027 206d 6178 2073 697a 6520 6f66 ' max size of\n+00037b40: 2063 6f6d 7072 6573 7369 6f6e 2071 7565 compression que\n+00037b50: 7565 203d 2027 202e 2024 7365 6c66 2d3e ue = ' . $self->\n+00037b60: 7b27 6d61 7855 7365 6443 6f6d 7072 5175 {'maxUsedComprQu\n+00037b70: 6575 6527 7d2c 0a0a 0920 2020 2020 2020 eue'},... \n+00037b80: 2720 2020 2020 2020 2020 2020 6361 6c63 ' calc\n+00037b90: 756c 6174 6564 206d 6435 2073 756d 7320 ulated md5 sums \n+00037ba0: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n+00037bb0: 6f4d 4435 6564 4669 6c65 7327 7d2c 0a09 oMD5edFiles'},..\n+00037bc0: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n+00037bd0: 2020 2020 2020 2020 2020 2066 6f72 6b73 forks\n+00037be0: 2074 6f74 616c 203d 2027 202e 2028 2473 total = ' . ($s\n+00037bf0: 656c 662d 3e7b 276e 6f46 6f72 6b73 4d44 elf->{'noForksMD\n+00037c00: 3527 7d20 2b0a 0909 0909 0909 2020 2024 5'} +....... $\n+00037c10: 7365 6c66 2d3e 7b27 6e6f 466f 726b 7343 self->{'noForksC\n+00037c20: 5027 7d20 2b0a 0909 0909 0909 2020 2024 P'} +....... $\n+00037c30: 7365 6c66 2d3e 7b27 6e6f 466f 726b 7343 self->{'noForksC\n+00037c40: 6f6d 7072 6573 7327 7d20 2b0a 0909 0909 ompress'} +.....\n+00037c50: 0909 2020 2024 7365 6c66 2d3e 7b27 6e6f .. $self->{'no\n+00037c60: 4e61 6d65 6450 6970 6573 277d 292c 0a09 NamedPipes'}),..\n+00037c70: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n+00037c80: 2020 2020 2020 2020 2020 2020 2066 6f72 for\n+00037c90: 6b73 206d 6435 203d 2027 202e 2024 7365 ks md5 = ' . $se\n+00037ca0: 6c66 2d3e 7b27 6e6f 466f 726b 734d 4435 lf->{'noForksMD5\n+00037cb0: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' \n+00037cc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00037cd0: 2066 6f72 6b73 2063 6f70 7920 3d20 2720 forks copy = ' \n+00037ce0: 2e20 2473 656c 662d 3e7b 276e 6f46 6f72 . $self->{'noFor\n+00037cf0: 6b73 4350 277d 2c0a 0920 2020 2020 2020 ksCP'},.. \n+00037d00: 7370 7269 6e74 6628 2225 3333 7322 2c20 sprintf(\"%33s\", \n+00037d10: 2266 6f72 6b73 2022 202e 206a 6f69 6e28 \"forks \" . join(\n+00037d20: 2720 272c 2040 7b24 7365 6c66 2d3e 7b27 ' ', @{$self->{'\n+00037d30: 636f 6d70 7265 7373 277d 7d29 0a09 0920 compress'}})... \n+00037d40: 2020 2020 2020 2e20 2220 3d20 2229 202e . \" = \") .\n+00037d50: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n+00037d60: 7343 6f6d 7072 6573 7327 7d2c 0a0a 0920 sCompress'},... \n+00037d70: 2020 2020 2020 2720 2020 2020 2020 2020 ' \n+00037d80: 2020 2020 2020 2020 7375 6d20 6f66 2073 sum of s\n+00037d90: 6f75 7263 6520 3d20 2720 2e0a 0920 2020 ource = ' ... \n+00037da0: 2020 2020 2020 2020 2826 3a3a 6875 6d61 (&::huma\n+00037db0: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self-\n+00037dc0: 3e7b 2773 756d 4f72 6967 4669 6c65 7327 >{'sumOrigFiles'\n+00037dd0: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... \n+00037de0: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel\n+00037df0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile\n+00037e00: 7327 7d20 2e20 2729 272c 0a09 2020 2020 s'} . ')',.. \n+00037e10: 2020 2027 2020 2020 2020 2020 2020 2020 ' \n+00037e20: 2073 756d 206f 6620 7461 7267 6574 2061 sum of target a\n+00037e30: 6c6c 203d 2027 202e 0a09 2020 2020 2020 ll = ' ... \n+00037e40: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe\n+00037e50: 6164 6162 6c65 2824 7375 6d54 6172 6765 adable($sumTarge\n+00037e60: 7441 6c6c 2929 5b30 5d20 2e20 2220 2824 tAll))[0] . \" ($\n+00037e70: 7375 6d54 6172 6765 7441 6c6c 2922 2c0a sumTargetAll)\",.\n+00037e80: 0920 2020 2020 2020 2720 2020 2020 2020 . ' \n+00037e90: 2020 2020 2020 7375 6d20 6f66 2074 6172 sum of tar\n+00037ea0: 6765 7420 616c 6c20 3d20 2720 2e20 7370 get all = ' . sp\n+00037eb0: 7269 6e74 6628 2225 2e32 6625 2522 2c0a rintf(\"%.2f%%\",.\n+00037ec0: 0909 2020 2026 7065 7263 656e 7428 2473 .. &percent($s\n+00037ed0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi\n+00037ee0: 6c65 7327 7d2c 2024 7375 6d54 6172 6765 les'}, $sumTarge\n+00037ef0: 7441 6c6c 2929 2c0a 0920 2020 2020 2020 tAll)),.. \n+00037f00: 2720 2020 2020 2020 2020 2020 2020 7375 ' su\n+00037f10: 6d20 6f66 2074 6172 6765 7420 6e65 7720 m of target new \n+00037f20: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... \n+00037f30: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada\n+00037f40: 626c 6528 2473 756d 5461 7267 6574 4e65 ble($sumTargetNe\n+00037f50: 7729 295b 305d 202e 2022 2028 2473 756d w))[0] . \" ($sum\n+00037f60: 5461 7267 6574 4e65 7729 222c 0a09 2020 TargetNew)\",.. \n+00037f70: 2020 2020 2027 2020 2020 2020 2020 2020 ' \n+00037f80: 2020 2073 756d 206f 6620 7461 7267 6574 sum of target\n+00037f90: 206e 6577 203d 2027 202e 2020 7370 7269 new = ' . spri\n+00037fa0: 6e74 6628 2225 2e32 6625 2522 2c0a 0909 ntf(\"%.2f%%\",...\n+00037fb0: 2020 2026 7065 7263 656e 7428 2473 656c &percent($sel\n+00037fc0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile\n+00037fd0: 7327 7d2c 2024 7375 6d54 6172 6765 744e s'}, $sumTargetN\n+00037fe0: 6577 2929 2c0a 0920 2020 2020 2020 2720 ew)),.. ' \n+00037ff0: 2020 2020 2020 2020 2020 2073 756d 206f sum o\n+00038000: 6620 6d64 3565 6420 6669 6c65 7320 3d20 f md5ed files = \n+00038010: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... \n+00038020: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl\n+00038030: 6528 2473 656c 662d 3e7b 2773 756d 4d44 e($self->{'sumMD\n+00038040: 3553 756d 277d 2929 5b30 5d20 2e0a 0920 5Sum'}))[0] ... \n+00038050: 2020 2020 2020 2020 2020 2720 2827 202e ' (' .\n+00038060: 2024 7365 6c66 2d3e 7b27 7375 6d4d 4435 $self->{'sumMD5\n+00038070: 5375 6d27 7d20 2e20 2729 272c 0a09 2020 Sum'} . ')',.. \n+00038080: 2020 2020 2027 2020 2020 2020 2020 2020 ' \n+00038090: 2020 7375 6d20 6f66 206d 6435 6564 2066 sum of md5ed f\n+000380a0: 696c 6573 203d 2027 202e 2073 7072 696e iles = ' . sprin\n+000380b0: 7466 2822 252e 3266 2525 222c 0a09 0920 tf(\"%.2f%%\",... \n+000380c0: 2020 2670 6572 6365 6e74 2824 7365 6c66 &percent($self\n+000380d0: 2d3e 7b27 7375 6d4f 7269 6746 696c 6573 ->{'sumOrigFiles\n+000380e0: 277d 2c0a 0909 0920 2020 2024 7365 6c66 '},.... $self\n+000380f0: 2d3e 7b27 7375 6d4d 4435 5375 6d27 7d29 ->{'sumMD5Sum'})\n+00038100: 292c 0a09 2020 2020 2020 2027 2020 2020 ),.. ' \n+00038110: 7375 6d20 696e 7465 726e 616c 206c 696e sum internal lin\n+00038120: 6b65 6420 2863 6f70 7929 203d 2027 202e ked (copy) = ' .\n+00038130: 0a09 2020 2020 2020 2020 2020 2028 263a .. (&:\n+00038140: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($\n+00038150: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke\n+00038160: 6449 6e74 6572 6e61 6c43 6f70 7927 7d29 dInternalCopy'})\n+00038170: 295b 305d 202e 0a09 2020 2020 2020 2020 )[0] ... \n+00038180: 2020 2027 2028 2720 2e20 2473 656c 662d ' (' . $self-\n+00038190: 3e7b 2773 756d 4c69 6e6b 6564 496e 7465 >{'sumLinkedInte\n+000381a0: 726e 616c 436f 7079 277d 202e 2027 2927 rnalCopy'} . ')'\n+000381b0: 2c0a 0920 2020 2020 2020 2720 2020 7375 ,.. ' su\n+000381c0: 6d20 696e 7465 726e 616c 206c 696e 6b65 m internal linke\n+000381d0: 6420 2863 6f6d 7072 2920 3d20 2720 2e0a d (compr) = ' ..\n+000381e0: 0920 2020 2020 2020 2020 2020 2826 3a3a . (&::\n+000381f0: 6875 6d61 6e52 6561 6461 626c 6528 2473 humanReadable($s\n+00038200: 656c 662d 3e7b 2773 756d 4c69 6e6b 6564 elf->{'sumLinked\n+00038210: 496e 7465 726e 616c 436f 6d70 7227 7d29 InternalCompr'})\n+00038220: 295b 305d 202e 0a09 2020 2020 2020 2020 )[0] ... \n+00038230: 2020 2027 2028 2720 2e20 2473 656c 662d ' (' . $self-\n+00038240: 3e7b 2773 756d 4c69 6e6b 6564 496e 7465 >{'sumLinkedInte\n+00038250: 726e 616c 436f 6d70 7227 7d20 2e20 2729 rnalCompr'} . ')\n+00038260: 272c 0a09 2020 2020 2020 2027 2020 2020 ',.. ' \n+00038270: 2020 2020 2073 756d 206f 6c64 206c 696e sum old lin\n+00038280: 6b65 6420 2863 6f70 7929 203d 2027 202e ked (copy) = ' .\n+00038290: 0a09 2020 2020 2020 2020 2020 2028 263a .. (&:\n+000382a0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($\n+000382b0: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke\n+000382c0: 644f 6c64 436f 7079 277d 2929 5b30 5d20 dOldCopy'}))[0] \n+000382d0: 2e0a 0920 2020 2020 2020 2020 2020 2720 ... ' \n+000382e0: 2827 202e 2024 7365 6c66 2d3e 7b27 7375 (' . $self->{'su\n+000382f0: 6d4c 696e 6b65 644f 6c64 436f 7079 277d mLinkedOldCopy'}\n+00038300: 202e 2027 2927 2c0a 0920 2020 2020 2020 . ')',.. \n+00038310: 2720 2020 2020 2020 2073 756d 206f 6c64 ' sum old\n+00038320: 206c 696e 6b65 6420 2863 6f6d 7072 2920 linked (compr) \n+00038330: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... \n+00038340: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada\n+00038350: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum\n+00038360: 4c69 6e6b 6564 4f6c 6443 6f6d 7072 277d LinkedOldCompr'}\n+00038370: 2929 5b30 5d20 2e0a 0920 2020 2020 2020 ))[0] ... \n+00038380: 2020 2020 2720 2827 202e 2024 7365 6c66 ' (' . $self\n+00038390: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld\n+000383a0: 436f 6d70 7227 7d20 2e20 2729 272c 0a09 Compr'} . ')',..\n+000383b0: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n+000383c0: 2020 7375 6d20 756e 6368 616e 6765 6420 sum unchanged \n+000383d0: 2863 6f70 7929 203d 2027 202e 0a09 2020 (copy) = ' ... \n+000383e0: 2020 2020 2020 2020 2028 263a 3a68 756d (&::hum\n+000383f0: 616e 5265 6164 6162 6c65 2824 7365 6c66 anReadable($self\n+00038400: 2d3e 7b27 7375 6d55 6e63 6861 6e67 6564 ->{'sumUnchanged\n+00038410: 436f 7079 277d 2929 5b30 5d20 2e0a 0920 Copy'}))[0] ... \n+00038420: 2020 2020 2020 2020 2020 2720 2827 202e ' (' .\n+00038430: 2024 7365 6c66 2d3e 7b27 7375 6d55 6e63 $self->{'sumUnc\n+00038440: 6861 6e67 6564 436f 7079 277d 202e 2027 hangedCopy'} . '\n+00038450: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' \n+00038460: 2020 2020 2020 7375 6d20 756e 6368 616e sum unchan\n+00038470: 6765 6420 2863 6f6d 7072 2920 3d20 2720 ged (compr) = ' \n+00038480: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (&\n+00038490: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable(\n+000384a0: 2473 656c 662d 3e7b 2773 756d 556e 6368 $self->{'sumUnch\n+000384b0: 616e 6765 6443 6f6d 7072 277d 2929 5b30 angedCompr'}))[0\n+000384c0: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... \n+000384d0: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{'\n+000384e0: 7375 6d55 6e63 6861 6e67 6564 436f 6d70 sumUnchangedComp\n+000384f0: 7227 7d20 2e20 2729 272c 0a09 2020 2020 r'} . ')',.. \n+00038500: 2020 2027 2020 2020 2020 2020 2020 2020 ' \n+00038510: 2020 2020 7375 6d20 6e65 7720 2863 6f70 sum new (cop\n+00038520: 7929 203d 2027 202e 0a09 2020 2020 2020 y) = ' ... \n+00038530: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe\n+00038540: 6164 6162 6c65 2824 7365 6c66 2d3e 7b27 adable($self->{'\n+00038550: 7375 6d4e 6577 436f 7079 277d 2929 5b30 sumNewCopy'}))[0\n+00038560: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... \n+00038570: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{'\n+00038580: 7375 6d4e 6577 436f 7079 277d 202e 2027 sumNewCopy'} . '\n+00038590: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' \n+000385a0: 2020 2020 2020 2020 2020 2020 7375 6d20 sum \n+000385b0: 6e65 7720 2863 6f6d 7072 2920 3d20 2720 new (compr) = ' \n+000385c0: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (&\n+000385d0: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable(\n+000385e0: 2473 656c 662d 3e7b 2773 756d 4e65 7743 $self->{'sumNewC\n+000385f0: 6f6d 7072 277d 2929 5b30 5d20 2e0a 0920 ompr'}))[0] ... \n+00038600: 2020 2020 2020 2020 2020 2720 2827 202e ' (' .\n+00038610: 2024 7365 6c66 2d3e 7b27 7375 6d4e 6577 $self->{'sumNew\n+00038620: 436f 6d70 7227 7d20 2e20 2729 272c 0a09 Compr'} . ')',..\n+00038630: 2020 2020 2020 2027 2020 2020 7375 6d20 ' sum \n+00038640: 6e65 7720 2863 6f6d 7072 292c 206f 7269 new (compr), ori\n+00038650: 6720 7369 7a65 203d 2027 202e 0a09 2020 g size = ' ... \n+00038660: 2020 2020 2020 2020 2028 263a 3a68 756d (&::hum\n+00038670: 616e 5265 6164 6162 6c65 2824 7365 6c66 anReadable($self\n+00038680: 2d3e 7b27 7375 6d4e 6577 436f 6d70 724f ->{'sumNewComprO\n+00038690: 7269 6753 697a 6527 7d29 295b 305d 202e rigSize'}))[0] .\n+000386a0: 0a09 2020 2020 2020 2020 2020 2027 2028 .. ' (\n+000386b0: 2720 2e20 2473 656c 662d 3e7b 2773 756d ' . $self->{'sum\n+000386c0: 4e65 7743 6f6d 7072 4f72 6967 5369 7a65 NewComprOrigSize\n+000386d0: 277d 202e 2027 2927 2c0a 0920 2020 2020 '} . ')',.. \n+000386e0: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n+000386f0: 2020 2073 756d 206e 6577 202f 206f 7269 sum new / ori\n+00038700: 6720 3d20 2720 2e20 7370 7269 6e74 6628 g = ' . sprintf(\n+00038710: 2225 2e32 6625 2522 2c0a 0920 2020 2020 \"%.2f%%\",.. \n+00038720: 2020 2020 2020 2670 6572 6365 6e74 2824 &percent($\n+00038730: 7365 6c66 2d3e 7b27 7375 6d4e 6577 436f self->{'sumNewCo\n+00038740: 6d70 724f 7269 6753 697a 6527 7d0a 0909 mprOrigSize'}...\n+00038750: 0920 2020 202b 2024 7365 6c66 2d3e 7b27 . + $self->{'\n+00038760: 7375 6d4e 6577 436f 7079 277d 2c0a 0909 sumNewCopy'},...\n+00038770: 0920 2020 2024 7365 6c66 2d3e 7b27 7375 . $self->{'su\n+00038780: 6d4e 6577 436f 6d70 7227 7d0a 0909 0920 mNewCompr'}.... \n+00038790: 2020 202b 2024 7365 6c66 2d3e 7b27 7375 + $self->{'su\n+000387a0: 6d4e 6577 436f 7079 277d 2929 2c0a 0920 mNewCopy'})),.. \n+000387b0: 2020 2020 2020 2720 2020 2020 2073 697a ' siz\n+000387c0: 6520 6f66 206d 6435 4368 6563 6b53 756d e of md5CheckSum\n+000387d0: 2066 696c 6520 3d20 2720 2e0a 0920 2020 file = ' ... \n+000387e0: 2020 2020 2020 2020 2826 3a3a 6875 6d61 (&::huma\n+000387f0: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self-\n+00038800: 3e7b 276d 6435 4368 6563 6b53 756d 277d >{'md5CheckSum'}\n+00038810: 2929 5b30 5d20 2e0a 0920 2020 2020 2020 ))[0] ... \n+00038820: 2020 2020 2720 2827 202e 2024 7365 6c66 ' (' . $self\n+00038830: 2d3e 7b27 6d64 3543 6865 636b 5375 6d27 ->{'md5CheckSum'\n+00038840: 7d20 2e20 2729 272c 0a09 2020 2020 2020 } . ')',.. \n+00038850: 2027 2020 2020 7369 7a65 206f 6620 7465 ' size of te\n+00038860: 6d70 6f72 6172 7920 6462 2066 696c 6573 mporary db files\n+00038870: 203d 2027 202e 0a09 2020 2020 2020 2020 = ' ... \n+00038880: 2020 2028 263a 3a68 756d 616e 5265 6164 (&::humanRead\n+00038890: 6162 6c65 2824 7365 6c66 2d3e 7b27 7375 able($self->{'su\n+000388a0: 6d44 424d 4669 6c65 7327 7d29 295b 305d mDBMFiles'}))[0]\n+000388b0: 202e 0a09 2020 2020 2020 2020 2020 2027 ... '\n+000388c0: 2028 2720 2e20 2473 656c 662d 3e7b 2773 (' . $self->{'s\n+000388d0: 756d 4442 4d46 696c 6573 277d 202e 2027 umDBMFiles'} . '\n+000388e0: 2927 2c0a 0920 2020 2020 2020 4073 7461 )',.. @sta\n+000388f0: 7274 4461 7465 2c0a 0920 2020 2020 2020 rtDate,.. \n+00038900: 2720 2020 2020 2020 2020 2020 6465 6c65 ' dele\n+00038910: 7465 6420 6f6c 6420 6261 636b 7570 7320 ted old backups \n+00038920: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n+00038930: 6f44 656c 6574 6564 4f6c 6444 6972 7327 oDeletedOldDirs'\n+00038940: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' \n+00038950: 2020 2020 2020 2064 656c 6574 6564 2064 deleted d\n+00038960: 6972 6563 746f 7269 6573 203d 2027 202e irectories = ' .\n+00038970: 2024 7365 6c66 2d3e 7b27 6469 7273 277d $self->{'dirs'}\n+00038980: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n+00038990: 2020 2020 2020 2020 2020 2020 6465 6c65 dele\n+000389a0: 7465 6420 6669 6c65 7320 3d20 2720 2e20 ted files = ' . \n+000389b0: 2473 656c 662d 3e7b 2766 696c 6573 277d $self->{'files'}\n+000389c0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n+000389d0: 2020 2020 2028 6f6e 6c79 2920 7265 6d6f (only) remo\n+000389e0: 7665 6420 6c69 6e6b 7320 3d20 2720 2e20 ved links = ' . \n+000389f0: 2473 656c 662d 3e7b 276c 696e 6b73 277d $self->{'links'}\n+00038a00: 2c0a 0920 2020 2020 2020 2766 7265 6564 ,.. 'freed\n+00038a10: 2073 7061 6365 2069 6e20 6f6c 6420 6469 space in old di\n+00038a20: 7265 6374 6f72 6965 7320 3d20 2720 2e0a rectories = ' ..\n+00038a30: 0920 2020 2020 2020 2826 3a3a 6875 6d61 . (&::huma\n+00038a40: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self-\n+00038a50: 3e7b 2762 7974 6573 277d 2929 5b30 5d20 >{'bytes'}))[0] \n+00038a60: 2e20 2720 2827 202e 0a09 2020 2020 2020 . ' (' ... \n+00038a70: 2024 7365 6c66 2d3e 7b27 6279 7465 7327 $self->{'bytes'\n+00038a80: 7d20 2e20 2729 272c 0a09 2020 2020 2020 } . ')',.. \n+00038a90: 2022 2020 2020 2020 6164 642e 2075 7365 \" add. use\n+00038aa0: 6420 7370 6163 6520 696e 2066 696c 6573 d space in files\n+00038ab0: 203d 2024 6e65 7755 7365 6453 7061 6365 = $newUsedSpace\n+00038ac0: 4875 6d61 6e20 2824 6e65 7755 7365 6453 Human ($newUsedS\n+00038ad0: 7061 6365 2922 2c0a 0920 2020 2020 2020 pace)\",.. \n+00038ae0: 2720 2020 2020 2020 2020 2020 2020 2020 ' \n+00038af0: 6261 636b 7570 2064 7572 6174 696f 6e20 backup duration \n+00038b00: 3d20 2720 2e0a 0920 2020 2020 2020 6461 = ' ... da\n+00038b10: 7465 546f 6f6c 733a 3a76 616c 546f 5374 teTools::valToSt\n+00038b20: 7228 272d 7365 6327 203d 3e20 2462 6163 r('-sec' => $bac\n+00038b30: 6b75 7044 7572 6174 696f 6e29 2c0a 0920 kupDuration),.. \n+00038b40: 2020 2020 2020 276f 7665 7220 616c 6c20 'over all \n+00038b50: 6669 6c65 732f 7365 6320 2872 6561 6c20 files/sec (real \n+00038b60: 7469 6d65 2920 3d20 2720 2e0a 0920 2020 time) = ' ... \n+00038b70: 2020 2020 2020 2020 7370 7269 6e74 6628 sprintf(\n+00038b80: 2225 2e32 6622 2c20 2473 656c 662d 3e7b \"%.2f\", $self->{\n+00038b90: 276e 6f46 696c 6573 277d 202f 2024 6261 'noFiles'} / $ba\n+00038ba0: 636b 7570 4475 7261 7469 6f6e 292c 0a09 ckupDuration),..\n+00038bb0: 2020 2020 2020 2027 206f 7665 7220 616c ' over al\n+00038bc0: 6c20 6669 6c65 732f 7365 6320 2843 5055 l files/sec (CPU\n+00038bd0: 2074 696d 6529 203d 2027 202e 0a09 2020 time) = ' ... \n+00038be0: 2020 2020 2020 2020 2073 7072 696e 7466 sprintf\n+00038bf0: 2822 252e 3266 222c 2024 7365 6c66 2d3e (\"%.2f\", $self->\n+00038c00: 7b27 6e6f 4669 6c65 7327 7d20 2f20 2824 {'noFiles'} / ($\n+00038c10: 7520 2b20 2473 2929 2c0a 0920 2020 2020 u + $s)),.. \n+00038c20: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n+00038c30: 2020 2020 2020 2020 4350 5520 7573 6167 CPU usag\n+00038c40: 6520 3d20 2720 2e0a 0920 2020 2020 2020 e = ' ... \n+00038c50: 2020 2020 7370 7269 6e74 6628 2225 2e32 sprintf(\"%.2\n+00038c60: 6625 2522 2c20 2824 7520 2b20 2473 2920 f%%\", ($u + $s) \n+00038c70: 2f20 2462 6163 6b75 7044 7572 6174 696f / $backupDuratio\n+00038c80: 6e20 2a20 3130 3029 0a09 2020 2020 2020 n * 100).. \n+00038c90: 205d 293b 0a0a 7d0a 0a0a 2323 2323 2323 ]);..}...######\n+00038ca0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038cc0: 2323 0a73 7562 2070 6572 6365 6e74 0a7b ##.sub percent.{\n+00038cd0: 0a20 2020 206d 7920 2824 6261 7365 2c20 . my ($base, \n+00038ce0: 2472 656c 2920 3d20 405f 3b0a 0a20 2020 $rel) = @_;.. \n+00038cf0: 2069 6620 2824 6261 7365 203d 3d20 3029 if ($base == 0)\n+00038d00: 0a20 2020 207b 0a09 7265 7475 726e 2030 . {..return 0\n+00038d10: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00038d20: 0a20 2020 207b 0a09 7265 7475 726e 2031 . {..return 1\n+00038d30: 3030 202d 2028 2462 6173 6520 2d20 2472 00 - ($base - $r\n+00038d40: 656c 2920 2a20 3130 3020 2f20 2462 6173 el) * 100 / $bas\n+00038d50: 653b 0a20 2020 207d 0a7d 0a0a 0a0a 2323 e;. }.}....##\n+00038d60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038d70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038d80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038d90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038da0: 2323 2323 0a23 2073 746f 7265 7320 4461 ####.# stores Da\n+00038db0: 7465 7320 616e 6420 5469 6d65 7320 6f66 tes and Times of\n+00038dc0: 2061 6c6c 2064 6972 6563 746f 7269 6573 all directories\n+00038dd0: 2069 6e20 6120 6669 6c65 0a23 2061 6674 in a file.# aft\n+00038de0: 6572 2062 6163 6b75 7020 7468 6973 2066 er backup this f\n+00038df0: 696c 6520 6973 2072 6561 6420 616e 6420 ile is read and \n+00038e00: 6469 7265 6374 6f72 7920 6174 696d 6520 directory atime \n+00038e10: 616e 6420 6d74 696d 6520 6172 6520 7365 and mtime are se\n+00038e20: 740a 7061 636b 6167 6520 7365 7452 6573 t.package setRes\n+00038e30: 6574 4469 7254 696d 6573 3b0a 0a23 2323 etDirTimes;..###\n+00038e40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038e50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00038e60: 2323 2323 230a 7375 6220 6e65 770a 7b0a #####.sub new.{.\n+00038e70: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n+00038e80: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s\n+00038e90: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m\n+00038ea0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = ('\n+00038eb0: 2d74 6d70 4469 7227 2020 2020 3d3e 2075 -tmpDir' => u\n+00038ec0: 6e64 6566 2c0a 0909 2020 2020 272d 736f ndef,... '-so\n+00038ed0: 7572 6365 4469 7227 203d 3e20 756e 6465 urceDir' => unde\n+00038ee0: 662c 0a09 0920 2020 2027 2d74 6172 6765 f,... '-targe\n+00038ef0: 7444 6972 2720 3d3e 2075 6e64 6566 2c0a tDir' => undef,.\n+00038f00: 0909 2020 2020 272d 7072 4c6f 6727 2020 .. '-prLog' \n+00038f10: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n+00038f20: 2020 2027 2d73 7264 7466 2720 2020 2020 '-srdtf' \n+00038f30: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n+00038f40: 272d 646f 4e6f 7468 696e 6727 203d 3e20 '-doNothing' => \n+00038f50: 302c 0a09 0920 2020 2027 2d72 6573 6574 0,... '-reset\n+00038f60: 4174 696d 6527 203d 3e20 302c 0a09 0920 Atime' => 0,... \n+00038f70: 2020 2027 2d70 7265 7365 7276 6550 6572 '-preservePer\n+00038f80: 6d73 2720 3d3e 2075 6e64 6566 0a09 0920 ms' => undef... \n+00038f90: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch\n+00038fa0: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams(\n+00038fb0: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \\%params, \\@_, '\n+00038fc0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes\n+00038fd0: 3a3a 6e65 7727 2c0a 0909 0920 5b27 2d74 ::new',.... ['-t\n+00038fe0: 6d70 4469 7227 2c20 272d 736f 7572 6365 mpDir', '-source\n+00038ff0: 4469 7227 2c20 272d 7461 7267 6574 4469 Dir', '-targetDi\n+00039000: 7227 2c20 272d 7072 4c6f 6727 2c0a 0909 r', '-prLog',...\n+00039010: 0920 2027 2d73 7264 7466 275d 293b 0a0a . '-srdtf']);..\n+00039020: 2020 2020 263a 3a73 6574 5061 7261 6d73 &::setParams\n+00039030: 4469 7265 6374 2824 7365 6c66 2c20 5c25 Direct($self, \\%\n+00039040: 7061 7261 6d73 293b 0a0a 2020 2020 756e params);.. un\n+00039050: 6c65 7373 2028 2473 656c 662d 3e7b 2764 less ($self->{'d\n+00039060: 6f4e 6f74 6869 6e67 277d 290a 2020 2020 oNothing'}). \n+00039070: 7b0a 096d 7920 2474 6d70 6669 6c65 203d {..my $tmpfile =\n+00039080: 2026 3a3a 756e 6971 4669 6c65 4e61 6d65 &::uniqFileName\n+00039090: 2822 2474 6d70 6469 722f 7374 6f72 6542 (\"$tmpdir/storeB\n+000390a0: 6163 6b75 702d 6469 7273 2e22 293b 0a09 ackup-dirs.\");..\n+000390b0: 2473 656c 662d 3e7b 2774 6d70 6669 6c65 $self->{'tmpfile\n+000390c0: 277d 203d 2024 746d 7066 696c 653b 0a09 '} = $tmpfile;..\n+000390d0: 6c6f 6361 6c20 2a46 494c 453b 0a09 263a local *FILE;..&:\n+000390e0: 3a63 6865 636b 4465 6c53 796d 4c69 6e6b :checkDelSymLink\n+000390f0: 2824 746d 7066 696c 652c 2024 7072 4c6f ($tmpfile, $prLo\n+00039100: 672c 2030 7830 3129 3b0a 096f 7065 6e28 g, 0x01);..open(\n+00039110: 4649 4c45 2c20 223e 2024 746d 7066 696c FILE, \"> $tmpfil\n+00039120: 6522 2920 6f72 0a09 2020 2020 2470 724c e\") or.. $prL\n+00039130: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00039140: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n+00039150: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => [\"canno\n+00039160: 7420 6f70 656e 203c 2474 6d70 6669 6c65 t open <$tmpfile\n+00039170: 3e2c 2065 7869 7469 6e67 225d 2c0a 0909 >, exiting\"],...\n+00039180: 0920 2027 2d61 6464 2720 3d3e 205b 5f5f . '-add' => [__\n+00039190: 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 5f5f FILE__, __LINE__\n+000391a0: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' \n+000391b0: 3d3e 2031 293b 0a09 6368 6d6f 6420 3036 => 1);..chmod 06\n+000391c0: 3030 2c20 2474 6d70 6669 6c65 3b0a 0924 00, $tmpfile;..$\n+000391d0: 7365 6c66 2d3e 7b27 4649 4c45 277d 203d self->{'FILE'} =\n+000391e0: 202a 4649 4c45 3b0a 2020 2020 7d0a 0a20 *FILE;. }.. \n+000391f0: 2020 2062 6c65 7373 2024 7365 6c66 2c20 bless $self, \n+00039200: 2463 6c61 7373 3b0a 7d0a 0a0a 2323 2323 $class;.}...####\n+00039210: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00039220: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00039230: 2323 2323 0a73 7562 2061 6464 4469 720a ####.sub addDir.\n+00039240: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n+00039250: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my (\n+00039260: 2472 656c 4669 6c65 2c20 2461 7469 6d65 $relFile, $atime\n+00039270: 2c20 246d 7469 6d65 2c20 246d 6f64 6529 , $mtime, $mode)\n+00039280: 203d 2040 5f3b 0a0a 2020 2020 7265 7475 = @_;.. retu\n+00039290: 726e 2069 6620 2473 656c 662d 3e7b 2764 rn if $self->{'d\n+000392a0: 6f4e 6f74 6869 6e67 277d 3b0a 0a20 2020 oNothing'};.. \n+000392b0: 206c 6f63 616c 202a 4649 4c45 203d 2024 local *FILE = $\n+000392c0: 7365 6c66 2d3e 7b27 4649 4c45 277d 3b0a self->{'FILE'};.\n+000392d0: 2020 2020 2472 656c 4669 6c65 203d 7e20 $relFile =~ \n+000392e0: 732f 5c6e 2f5c 302f 6f67 3b0a 2020 2020 s/\\n/\\0/og;. \n+000392f0: 7072 696e 7420 4649 4c45 2022 2461 7469 print FILE \"$ati\n+00039300: 6d65 2024 6d74 696d 6520 246d 6f64 6520 me $mtime $mode \n+00039310: 2472 656c 4669 6c65 5c6e 223b 0a7d 0a0a $relFile\\n\";.}..\n+00039320: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n+00039330: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00039340: 2323 2323 2323 2323 230a 7375 6220 7772 #########.sub wr\n+00039350: 6974 6554 696d 6573 0a7b 0a20 2020 206d iteTimes.{. m\n+00039360: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n+00039370: 0a0a 2020 2020 7265 7475 726e 2069 6620 .. return if \n+00039380: 2473 656c 662d 3e7b 2764 6f4e 6f74 6869 $self->{'doNothi\n+00039390: 6e67 277d 3b0a 0a20 2020 206d 7920 2473 ng'};.. my $s\n+000393a0: 6f75 7263 6544 6972 203d 2024 7365 6c66 ourceDir = $self\n+000393b0: 2d3e 7b27 736f 7572 6365 4469 7227 7d3b ->{'sourceDir'};\n+000393c0: 0a20 2020 206d 7920 2474 6172 6765 7444 . my $targetD\n+000393d0: 6972 203d 2024 7365 6c66 2d3e 7b27 7461 ir = $self->{'ta\n+000393e0: 7267 6574 4469 7227 7d3b 0a20 2020 206c rgetDir'};. l\n+000393f0: 6f63 616c 202a 4649 4c45 203d 2024 7365 ocal *FILE = $se\n+00039400: 6c66 2d3e 7b27 4649 4c45 277d 3b0a 2020 lf->{'FILE'};. \n+00039410: 2020 6d79 2024 7072 4c6f 6720 3d20 2473 my $prLog = $s\n+00039420: 656c 662d 3e7b 2770 724c 6f67 277d 3b0a elf->{'prLog'};.\n+00039430: 2020 2020 6d79 2024 746d 7066 696c 6520 my $tmpfile \n+00039440: 3d20 2473 656c 662d 3e7b 2774 6d70 6669 = $self->{'tmpfi\n+00039450: 6c65 277d 3b0a 0a20 2020 2063 6c6f 7365 le'};.. close\n+00039460: 2846 494c 4529 206f 720a 0924 7072 4c6f (FILE) or..$prLo\n+00039470: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00039480: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n+00039490: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n+000394a0: 6e6f 7420 636c 6f73 6520 3c24 746d 7066 not close <$tmpf\n+000394b0: 696c 653e 225d 293b 0a0a 2020 2020 6966 ile>\"]);.. if\n+000394c0: 2028 2473 656c 662d 3e7b 2770 7265 7365 ($self->{'prese\n+000394d0: 7276 6550 6572 6d73 277d 290a 2020 2020 rvePerms'}). \n+000394e0: 7b0a 0975 6e6c 6573 7320 286f 7065 6e28 {..unless (open(\n+000394f0: 4649 4c45 2c20 223c 2024 746d 7066 696c FILE, \"< $tmpfil\n+00039500: 6522 2929 0a09 7b0a 0920 2020 2024 7072 e\"))..{.. $pr\n+00039510: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00039520: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n+00039530: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => [\"cann\n+00039540: 6f74 2072 6561 6420 3c24 746d 7066 696c ot read <$tmpfil\n+00039550: 653e 2c20 6361 6e6e 6f74 2073 6574 2061 e>, cannot set a\n+00039560: 7469 6d65 2022 202e 0a09 0909 0920 2020 time \" ...... \n+00039570: 2020 2261 6e64 206d 7469 6d65 2066 6f72 \"and mtime for\n+00039580: 2064 6972 6563 746f 7269 6573 225d 293b directories\"]);\n+00039590: 0a09 2020 2020 7265 7475 726e 3b0a 097d .. return;..}\n+000395a0: 0a0a 0975 6e6c 6573 7320 2865 6f66 2046 ...unless (eof F\n+000395b0: 494c 4529 0a09 7b0a 0920 2020 2024 7072 ILE)..{.. $pr\n+000395c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000395d0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n+000395e0: 272d 7374 7227 203d 3e20 5b22 7365 7474 '-str' => [\"sett\n+000395f0: 696e 6720 6174 696d 652c 206d 7469 6d65 ing atime, mtime\n+00039600: 206f 6620 6469 7265 6374 6f72 6965 7320 of directories \n+00039610: 2e2e 2e22 5d29 3b0a 097d 0a0a 096d 7920 ...\"]);..}...my \n+00039620: 246c 696e 653b 0a09 7768 696c 6520 2824 $line;..while ($\n+00039630: 6c69 6e65 203d 203c 4649 4c45 3e29 0a09 line = )..\n+00039640: 7b0a 0920 2020 2063 686f 7020 246c 696e {.. chop $lin\n+00039650: 653b 0a09 2020 2020 6d79 2028 2461 7469 e;.. my ($ati\n+00039660: 6d65 2c20 246d 7469 6d65 2c20 246d 6f64 me, $mtime, $mod\n+00039670: 652c 2024 7265 6c46 696c 6529 203d 2073 e, $relFile) = s\n+00039680: 706c 6974 282f 5c73 2f2c 2024 6c69 6e65 plit(/\\s/, $line\n+00039690: 2c20 3429 3b0a 0920 2020 2024 7265 6c46 , 4);.. $relF\n+000396a0: 696c 6520 3d7e 2073 2f5c 302f 5c6e 2f6f ile =~ s/\\0/\\n/o\n+000396b0: 673b 0a09 2020 2020 6368 6d6f 6420 246d g;.. chmod $m\n+000396c0: 6f64 652c 2022 2474 6172 6765 7444 6972 ode, \"$targetDir\n+000396d0: 2f24 7265 6c46 696c 6522 3b0a 0920 2020 /$relFile\";.. \n+000396e0: 2075 7469 6d65 2024 6174 696d 652c 2024 utime $atime, $\n+000396f0: 6d74 696d 652c 2022 2473 6f75 7263 6544 mtime, \"$sourceD\n+00039700: 6972 2f24 7265 6c46 696c 6522 2069 6620 ir/$relFile\" if \n+00039710: 2473 656c 662d 3e7b 2772 6573 6574 4174 $self->{'resetAt\n+00039720: 696d 6527 7d3b 0a09 2020 2020 7574 696d ime'};.. utim\n+00039730: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n+00039740: 2c20 2224 7461 7267 6574 4469 722f 2472 , \"$targetDir/$r\n+00039750: 656c 4669 6c65 223b 0a09 7d0a 0a09 636c elFile\";..}...cl\n+00039760: 6f73 6528 4649 4c45 293b 0a20 2020 207d ose(FILE);. }\n+00039770: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n+00039780: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00039790: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n+000397a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+000397b0: 205b 2264 6972 6563 746f 7279 2070 6572 [\"directory per\n+000397c0: 6d69 7373 696f 6e73 206e 6f74 2073 6574 missions not set\n+000397d0: 2062 6563 6175 7365 2022 202e 0a09 0909 because \" .....\n+000397e0: 0920 2270 7265 7365 7276 6550 6572 6d73 . \"preservePerms\n+000397f0: 206e 6f74 2073 6574 225d 293b 0a20 2020 not set\"]);. \n+00039800: 207d 0a20 2020 2075 6e6c 696e 6b20 2474 }. unlink $t\n+00039810: 6d70 6669 6c65 3b0a 7d0a mpfile;.}.\n"}, {"source1": "./usr/bin/storeBackupCheckBackup", "source2": "./usr/bin/storeBackupCheckBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1700 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7043 6865 636b 4261 636b 7570 0a pCheckBackup.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201\n+00000040: 3229 0a23 2020 2020 2020 2020 2020 2020 2).# \n+00000050: 2020 2020 2068 6a63 6c61 6573 4077 6562 hjclaes@web\n+00000060: 2e64 650a 2320 2020 0a23 2020 2054 6869 .de.# .# Thi\n+00000070: 7320 7072 6f67 7261 6d20 6973 2066 7265 s program is fre\n+00000080: 6520 736f 6674 7761 7265 3a20 796f 7520 e software: you \n+00000090: 6361 6e20 7265 6469 7374 7269 6275 7465 can redistribute\n+000000a0: 2069 7420 616e 642f 6f72 206d 6f64 6966 it and/or modif\n+000000b0: 790a 2320 2020 6974 2075 6e64 6572 2074 y.# it under t\n+000000c0: 6865 2074 6572 6d73 206f 6620 7468 6520 he terms of the \n+000000d0: 474e 5520 4765 6e65 7261 6c20 5075 626c GNU General Publ\n+000000e0: 6963 204c 6963 656e 7365 2061 7320 7075 ic License as pu\n+000000f0: 626c 6973 6865 6420 6279 0a23 2020 2074 blished by.# t\n+00000100: 6865 2046 7265 6520 536f 6674 7761 7265 he Free Software\n+00000110: 2046 6f75 6e64 6174 696f 6e2c 2065 6974 Foundation, eit\n+00000120: 6865 7220 7665 7273 696f 6e20 3320 6f66 her version 3 of\n+00000130: 2074 6865 204c 6963 656e 7365 2c20 6f72 the License, or\n+00000140: 0a23 2020 2028 6174 2079 6f75 7220 6f70 .# (at your op\n+00000150: 7469 6f6e 2920 616e 7920 6c61 7465 7220 tion) any later \n+00000160: 7665 7273 696f 6e2e 0a0a 2320 2020 5468 version...# Th\n+00000170: 6973 2070 726f 6772 616d 2069 7320 6469 is program is di\n+00000180: 7374 7269 6275 7465 6420 696e 2074 6865 stributed in the\n+00000190: 2068 6f70 6520 7468 6174 2069 7420 7769 hope that it wi\n+000001a0: 6c6c 2062 6520 7573 6566 756c 2c0a 2320 ll be useful,.# \n+000001b0: 2020 6275 7420 5749 5448 4f55 5420 414e but WITHOUT AN\n+000001c0: 5920 5741 5252 414e 5459 3b20 7769 7468 Y WARRANTY; with\n+000001d0: 6f75 7420 6576 656e 2074 6865 2069 6d70 out even the imp\n+000001e0: 6c69 6564 2077 6172 7261 6e74 7920 6f66 lied warranty of\n+000001f0: 0a23 2020 204d 4552 4348 414e 5441 4249 .# MERCHANTABI\n+00000200: 4c49 5459 206f 7220 4649 544e 4553 5320 LITY or FITNESS \n+00000210: 464f 5220 4120 5041 5254 4943 554c 4152 FOR A PARTICULAR\n+00000220: 2050 5552 504f 5345 2e20 2053 6565 2074 PURPOSE. See t\n+00000230: 6865 0a23 2020 2047 4e55 2047 656e 6572 he.# GNU Gener\n+00000240: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens\n+00000250: 6520 666f 7220 6d6f 7265 2064 6574 6169 e for more detai\n+00000260: 6c73 2e0a 230a 2320 2020 596f 7520 7368 ls..#.# You sh\n+00000270: 6f75 6c64 2068 6176 6520 7265 6365 6976 ould have receiv\n+00000280: 6564 2061 2063 6f70 7920 6f66 2074 6865 ed a copy of the\n+00000290: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub\n+000002a0: 6c69 6320 4c69 6365 6e73 650a 2320 2020 lic License.# \n+000002b0: 616c 6f6e 6720 7769 7468 2074 6869 7320 along with this \n+000002c0: 7072 6f67 7261 6d2e 2020 4966 206e 6f74 program. If not\n+000002d0: 2c20 7365 6520 3c68 7474 703a 2f2f 7777 , see ..#...my $VE\n+00000300: 5253 494f 4e20 3d20 2724 4964 2420 273b RSION = '$Id$ ';\n+00000310: 0a70 7573 6820 4056 4552 5349 4f4e 2c20 .push @VERSION, \n+00000320: 2456 4552 5349 4f4e 3b0a 6d79 2028 2456 $VERSION;.my ($V\n+00000330: 4552 5349 4f4e 704e 616d 652c 2024 5645 ERSIONpName, $VE\n+00000340: 5253 494f 4e73 766e 4944 2920 3d20 2456 RSIONsvnID) = $V\n+00000350: 4552 5349 4f4e 203d 7e20 2f49 643a 5c73 ERSION =~ /Id:\\s\n+00000360: 2b28 5c53 2b29 5c73 2b28 5c64 2b29 2f3b +(\\S+)\\s+(\\d+)/;\n+00000370: 0a24 6d61 696e 3a3a 5354 4f52 4542 4143 .$main::STOREBAC\n+00000380: 4b55 5056 4552 5349 4f4e 203d 2075 6e64 KUPVERSION = und\n+00000390: 6566 3b0a 0a0a 7573 6520 7374 7269 6374 ef;...use strict\n+000003a0: 3b0a 7573 6520 7761 726e 696e 6773 3b0a ;.use warnings;.\n+000003b0: 0a0a 7573 6520 4469 6765 7374 3a3a 4d44 ..use Digest::MD\n+000003c0: 3520 7177 286d 6435 5f68 6578 293b 0a75 5 qw(md5_hex);.u\n+000003d0: 7365 2046 636e 746c 2071 7728 4f5f 5244 se Fcntl qw(O_RD\n+000003e0: 5752 204f 5f43 5245 4154 293b 0a75 7365 WR O_CREAT);.use\n+000003f0: 2046 696c 653a 3a43 6f70 793b 0a75 7365 File::Copy;.use\n+00000400: 2050 4f53 4958 3b0a 0a0a 7375 6220 6c69 POSIX;...sub li\n+00000410: 6250 6174 680a 7b0a 2020 2020 6d79 2024 bPath.{. my $\n+00000420: 6669 6c65 203d 2073 6869 6674 3b0a 0a20 file = shift;.. \n+00000430: 2020 206d 7920 2464 6972 3b0a 0a20 2020 my $dir;.. \n+00000440: 2023 2046 616c 6c73 2044 6174 6569 2073 # Falls Datei s\n+00000450: 656c 6273 7420 6569 6e20 7379 6d6c 696e elbst ein symlin\n+00000460: 6b20 6973 742c 2073 6f6c 616e 6765 2066 k ist, solange f\n+00000470: 6f6c 6765 6e2c 2062 6973 2061 7566 6765 olgen, bis aufge\n+00000480: 6cf6 7374 0a20 2020 2069 6620 282d 6620 l.st. if (-f \n+00000490: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh\n+000004a0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file)..\n+000004b0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link \n+000004c0: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file\n+000004d0: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub\n+000004e0: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1)\n+000004f0: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne \"/\").. {.\n+00000500: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\\\n+00000510: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 /]+$/$link/;.. \n+00000520: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. \n+00000530: 2020 207b 0a09 0924 6669 6c65 203d 2024 {...$file = $\n+00000540: 6c69 6e6b 3b0a 0920 2020 207d 0a09 7d0a link;.. }..}.\n+00000550: 0a09 2824 6469 722c 2024 6669 6c65 2920 ..($dir, $file) \n+00000560: 3d20 2673 706c 6974 4669 6c65 4469 7228 = &splitFileDir(\n+00000570: 2466 696c 6529 3b0a 0924 6669 6c65 203d $file);..$file =\n+00000580: 2022 2f24 6669 6c65 223b 0a20 2020 207d \"/$file\";. }\n+00000590: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n+000005a0: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR \"<\n+000005b0: 2466 696c 653e 2064 6f65 7320 6e6f 7420 $file> does not \n+000005c0: 6578 6973 7421 5c6e 223b 0a09 6578 6974 exist!\\n\";..exit\n+000005d0: 2031 3b0a 2020 2020 7d0a 0a20 2020 2024 1;. }.. $\n+000005e0: 6469 7220 2e3d 2022 2f2e 2e2f 6c69 6222 dir .= \"/../lib\"\n+000005f0: 3b20 2020 2020 2020 2020 2020 2320 5066 ; # Pf\n+00000600: 6164 207a 7520 6465 6e20 4269 626c 696f ad zu den Biblio\n+00000610: 7468 656b 656e 0a20 2020 206d 7920 246f theken. my $o\n+00000620: 6c64 4469 7220 3d20 602f 6269 6e2f 7077 ldDir = `/bin/pw\n+00000630: 6460 3b0a 2020 2020 6368 6f6d 7020 246f d`;. chomp $o\n+00000640: 6c64 4469 723b 0a20 2020 2069 6620 2863 ldDir;. if (c\n+00000650: 6864 6972 2024 6469 7229 0a20 2020 207b hdir $dir). {\n+00000660: 0a09 6d79 2024 6162 7344 6972 203d 2060 ..my $absDir = `\n+00000670: 2f62 696e 2f70 7764 603b 0a09 6368 6f70 /bin/pwd`;..chop\n+00000680: 2024 6162 7344 6972 3b0a 0963 6864 6972 $absDir;..chdir\n+00000690: 2024 6f6c 6444 6972 3b0a 0a09 7265 7475 $oldDir;...retu\n+000006a0: 726e 2028 2673 706c 6974 4669 6c65 4469 rn (&splitFileDi\n+000006b0: 7228 2224 6162 7344 6972 2466 696c 6522 r(\"$absDir$file\"\n+000006c0: 2929 3b0a 2020 2020 7d0a 2020 2020 656c ));. }. el\n+000006d0: 7365 0a20 2020 207b 0a09 7072 696e 7420 se. {..print \n+000006e0: 5354 4445 5252 2022 3c24 6469 723e 2064 STDERR \"<$dir> d\n+000006f0: 6f65 7320 6e6f 7420 6578 6973 742c 2065 oes not exist, e\n+00000700: 7869 7469 6e67 5c6e 223b 0a20 2020 207d xiting\\n\";. }\n+00000710: 0a7d 0a73 7562 2073 706c 6974 4669 6c65 .}.sub splitFile\n+00000720: 4469 720a 7b0a 2020 2020 6d79 2024 6e61 Dir.{. my $na\n+00000730: 6d65 203d 2073 6869 6674 3b0a 0a20 2020 me = shift;.. \n+00000740: 2072 6574 7572 6e20 2827 2e27 2c20 246e return ('.', $n\n+00000750: 616d 6529 2075 6e6c 6573 7320 2824 6e61 ame) unless ($na\n+00000760: 6d65 203d 7e2f 5c2f 2f29 3b20 2020 2023 me =~/\\//); #\n+00000770: 206e 7572 2065 696e 6661 6368 6572 2044 nur einfacher D\n+00000780: 6174 6569 6e61 6d65 0a0a 2020 2020 6d79 ateiname.. my\n+00000790: 2028 2464 6972 2c20 2466 696c 6529 203d ($dir, $file) =\n+000007a0: 2024 6e61 6d65 203d 7e20 2f5e 282e 2a29 $name =~ /^(.*)\n+000007b0: 5c2f 282e 2a29 242f 733b 0a20 2020 2024 \\/(.*)$/s;. $\n+000007c0: 6469 7220 3d20 272f 2720 6966 2028 2464 dir = '/' if ($d\n+000007d0: 6972 2065 7120 2727 293b 2020 2020 2020 ir eq ''); \n+000007e0: 2020 2020 2020 2020 2020 2020 2023 2067 # g\n+000007f0: 696c 742c 2066 616c 6c73 207a 2e42 2e20 ilt, falls z.B. \n+00000800: 2f66 696c 656e 616d 650a 2020 2020 7265 /filename. re\n+00000810: 7475 726e 2028 2464 6972 2c20 2466 696c turn ($dir, $fil\n+00000820: 6529 3b0a 7d0a 6d79 2028 2472 6571 2c20 e);.}.my ($req, \n+00000830: 2470 726f 6729 203d 2026 6c69 6250 6174 $prog) = &libPat\n+00000840: 6828 2430 293b 0a70 7573 6820 4049 4e43 h($0);.push @INC\n+00000850: 2c20 2224 7265 7122 3b0a 0a72 6571 7569 , \"$req\";..requi\n+00000860: 7265 2027 6368 6563 6b50 6172 616d 322e re 'checkParam2.\n+00000870: 706c 273b 0a72 6571 7569 7265 2027 6368 pl';.require 'ch\n+00000880: 6563 6b4f 626a 5061 722e 706c 273b 0a72 eckObjPar.pl';.r\n+00000890: 6571 7569 7265 2027 7072 4c6f 672e 706c equire 'prLog.pl\n+000008a0: 273b 0a72 6571 7569 7265 2027 7665 7273 ';.require 'vers\n+000008b0: 696f 6e2e 706c 273b 0a72 6571 7569 7265 ion.pl';.require\n+000008c0: 2027 6669 6c65 4469 722e 706c 273b 0a72 'fileDir.pl';.r\n+000008d0: 6571 7569 7265 2027 666f 726b 5072 6f63 equire 'forkProc\n+000008e0: 2e70 6c27 3b0a 7265 7175 6972 6520 2768 .pl';.require 'h\n+000008f0: 756d 616e 5265 6164 2e70 6c27 3b0a 7265 umanRead.pl';.re\n+00000900: 7175 6972 6520 2764 6174 6554 6f6f 6c73 quire 'dateTools\n+00000910: 2e70 6c27 3b0a 7265 7175 6972 6520 2765 .pl';.require 'e\n+00000920: 7661 6c54 6f6f 6c73 2e70 6c27 3b0a 7265 valTools.pl';.re\n+00000930: 7175 6972 6520 2773 746f 7265 4261 636b quire 'storeBack\n+00000940: 7570 4c69 622e 706c 273b 0a0a 6d79 2024 upLib.pl';..my $\n+00000950: 6368 6563 6b53 756d 4669 6c65 203d 2027 checkSumFile = '\n+00000960: 2e6d 6435 4368 6563 6b53 756d 7327 3b0a .md5CheckSums';.\n+00000970: 0a3d 6865 6164 3120 4e41 4d45 0a0a 7374 .=head1 NAME..st\n+00000980: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa\n+00000990: 636b 7570 2e70 6c20 2d20 6368 6563 6b73 ckup.pl - checks\n+000009a0: 2069 6620 6120 6669 6c65 2069 6e20 7468 if a file in th\n+000009b0: 6520 6261 636b 7570 2069 7320 6d69 7373 e backup is miss\n+000009c0: 696e 6720 6f72 2063 6f72 7275 7074 6564 ing or corrupted\n+000009d0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI\n+000009e0: 530a 0a09 7374 6f72 6542 6163 6b75 7043 S...storeBackupC\n+000009f0: 6865 636b 4261 636b 7570 2e70 6c20 2d63 heckBackup.pl -c\n+00000a00: 2062 6163 6b75 7044 6972 205b 2d76 206c backupDir [-v l\n+00000a10: 6576 656c 5d20 5b2d 7020 6e75 6d62 6572 evel] [-p number\n+00000a20: 5d20 5b2d 695d 0a0a 3d68 6561 6431 2044 ] [-i]..=head1 D\n+00000a30: 4553 4352 4950 5449 4f4e 0a0a 5468 6973 ESCRIPTION..This\n+00000a40: 2070 726f 6772 616d 2063 616c 6375 6c61 program calcula\n+00000a50: 7465 7320 6d64 3520 7375 6d73 2066 726f tes md5 sums fro\n+00000a60: 6d20 7468 6520 6669 6c65 7320 696e 2074 m the files in t\n+00000a70: 6865 2062 6163 6b75 7020 616e 6420 636f he backup and co\n+00000a80: 6d70 6172 6573 0a74 6865 6d20 7769 7468 mpares.them with\n+00000a90: 206d 6435 2073 756d 7320 7374 6f72 6564 md5 sums stored\n+00000aa0: 2062 7920 7374 6f72 6542 6163 6b75 702e by storeBackup.\n+00000ab0: 706c 2e0a 4974 2073 6f20 7769 6c6c 2072 pl..It so will r\n+00000ac0: 6563 6f67 6e69 7a65 2c20 6966 2061 2066 ecognize, if a f\n+00000ad0: 696c 6520 696e 2074 6865 2062 6163 6b75 ile in the backu\n+00000ae0: 7020 6973 206d 6973 7369 6e67 206f 7220 p is missing or \n+00000af0: 6375 7272 7570 7465 642e 0a49 7420 6f6e currupted..It on\n+00000b00: 6c79 2063 6865 636b 7320 706c 6169 6e20 ly checks plain \n+00000b10: 6669 6c65 732c 206e 6f74 2073 7065 6369 files, not speci\n+00000b20: 616c 2066 696c 6573 206f 7220 7379 6d62 al files or symb\n+00000b30: 6f6c 6963 206c 696e 6b73 2e0a 0a3d 6865 olic links...=he\n+00000b40: 6164 3120 4f50 5449 4f4e 530a 0a3d 6f76 ad1 OPTIONS..=ov\n+00000b50: 6572 2038 0a0a 3d69 7465 6d20 423c 2d2d er 8..=item B<--\n+00000b60: 7072 696e 743e 0a0a 2020 2020 7072 696e print>.. prin\n+00000b70: 7420 636f 6e66 6967 7572 6174 696f 6e20 t configuration \n+00000b80: 7061 7261 6d65 7465 7273 2061 6e64 2073 parameters and s\n+00000b90: 746f 700a 0a3d 6974 656d 2042 3c2d 2d63 top..=item B<--c\n+00000ba0: 6865 636b 4469 723e 2c20 423c 2d63 3e0a heckDir>, B<-c>.\n+00000bb0: 0a20 2020 2062 6163 6b75 7020 6f72 2074 . backup or t\n+00000bc0: 6f70 206f 6620 6261 636b 7570 7320 746f op of backups to\n+00000bd0: 2063 6865 636b 0a0a 3d69 7465 6d20 423c check..=item B<\n+00000be0: 2d2d 6261 636b 7570 526f 6f74 3e2c 2042 --backupRoot>, B\n+00000bf0: 3c2d 623e 0a0a 2020 2020 726f 6f74 206f <-b>.. root o\n+00000c00: 6620 7374 6f72 6542 6163 6b75 7020 7472 f storeBackup tr\n+00000c10: 6565 2c20 6e6f 726d 616c 6c79 206e 6f74 ee, normally not\n+00000c20: 206e 6565 6465 640a 0a3d 6974 656d 2042 needed..=item B\n+00000c30: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<-\n+00000c40: 763e 0a0a 2020 2020 6765 6e65 7261 7465 v>.. generate\n+00000c50: 2073 7461 7469 7374 6963 730a 0a3d 6974 statistics..=it\n+00000c60: 656d 2042 3c2d 2d70 6172 4a6f 6273 3e2c em B<--parJobs>,\n+00000c70: 2042 3c2d 703e 0a0a 2020 2020 6e75 6d62 B<-p>.. numb\n+00000c80: 6572 206f 6620 7061 7261 6c6c 656c 206a er of parallel j\n+00000c90: 6f62 732c 2064 6566 6175 6c74 203d 2063 obs, default = c\n+00000ca0: 686f 7365 6e20 6175 746f 6d61 7469 6361 hosen automatica\n+00000cb0: 6c6c 790a 0a3d 6974 656d 2042 3c2d 693e lly..=item B<-i>\n+00000cc0: 2c20 3c2d 2d69 6e63 6c75 6465 5265 6e61 , <--includeRena\n+00000cd0: 6d65 6442 6163 6b75 7073 3e0a 0a20 2020 medBackups>.. \n+00000ce0: 2069 6e63 6c75 6465 2072 656e 616d 6564 include renamed\n+00000cf0: 2062 6163 6b75 7073 2069 6e74 6f20 7468 backups into th\n+00000d00: 6520 6368 6563 6b0a 2020 2020 7265 6e61 e check. rena\n+00000d10: 6d65 6420 6261 636b 7570 7320 6d75 7374 med backups must\n+00000d20: 2066 6f6c 6c6f 7720 7468 6520 636f 6e76 follow the conv\n+00000d30: 656e 7469 6f6e 203c 6261 636b 7570 4469 ention -..\n+00000d50: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO\n+00000d60: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig\n+00000d70: 6874 2028 6329 2032 3030 382d 3230 3132 ht (c) 2008-2012\n+00000d80: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef \n+00000d90: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM\n+00000da0: 4529 0a50 7562 6c69 7368 6564 2075 6e64 E).Published und\n+00000db0: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener\n+00000dc0: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens\n+00000dd0: 6520 7633 206f 7220 616e 7920 6c61 7465 e v3 or any late\n+00000de0: 7220 7665 7273 696f 6e0a 0a3d 6375 740a r version..=cut.\n+00000df0: 0a6d 7920 2448 656c 7020 3d20 6a6f 696e .my $Help = join\n+00000e00: 2827 272c 2067 7265 7028 212f 5e5c 732a ('', grep(!/^\\s*\n+00000e10: 242f 2c20 6070 6f64 3274 6578 7420 2430 $/, `pod2text $0\n+00000e20: 6029 293b 0a24 4865 6c70 203d 2022 6361 `));.$Help = \"ca\n+00000e30: 6e6e 6f74 2066 696e 6420 706f 6432 7465 nnot find pod2te\n+00000e40: 7874 2c20 7365 6520 646f 6375 6d65 6e74 xt, see document\n+00000e50: 6174 696f 6e20 666f 7220 6465 7461 696c ation for detail\n+00000e60: 735c 6e22 0a20 2020 2075 6e6c 6573 7320 s\\n\". unless \n+00000e70: 2448 656c 703b 0a0a 2670 7269 6e74 5665 $Help;..&printVe\n+00000e80: 7273 696f 6e73 285c 4041 5247 562c 2027 rsions(\\@ARGV, '\n+00000e90: 2d56 2729 3b0a 0a6d 7920 2443 6865 636b -V');..my $Check\n+00000ea0: 5061 7220 3d0a 2020 2020 4368 6563 6b50 Par =. CheckP\n+00000eb0: 6172 616d 2d3e 6e65 7728 272d 616c 6c6f aram->new('-allo\n+00000ec0: 774c 6973 7473 2720 3d3e 2027 6e6f 272c wLists' => 'no',\n+00000ed0: 0a09 0920 2020 2027 2d6c 6973 7427 203d ... '-list' =\n+00000ee0: 3e20 5b4f 7074 696f 6e2d 3e6e 6577 2827 > [Option->new('\n+00000ef0: 2d6e 616d 6527 203d 3e20 2763 6865 636b -name' => 'check\n+00000f00: 4261 636b 7570 272c 0a09 0909 0909 2020 Backup',...... \n+00000f10: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00000f20: 3e20 272d 6327 2c0a 0909 0909 0920 2020 > '-c',...... \n+00000f30: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+00000f40: 272d 2d63 6865 636b 4261 636b 7570 272c '--checkBackup',\n+00000f50: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n+00000f60: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n+00000f70: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+00000f80: 6e61 6d65 2720 3d3e 2027 7665 7262 6f73 name' => 'verbos\n+00000f90: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+00000fa0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d76 l_option' => '-v\n+00000fb0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00000fc0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7665 _alias' => '--ve\n+00000fd0: 7262 6f73 6527 292c 0a09 0909 094f 7074 rbose'),.....Opt\n+00000fe0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00000ff0: 203d 3e20 2770 6172 4a6f 6273 272c 0a09 => 'parJobs',..\n+00001000: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+00001010: 696f 6e27 203d 3e20 272d 7027 2c0a 0909 ion' => '-p',...\n+00001020: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n+00001030: 7327 203d 3e20 272d 2d70 6172 4a6f 6273 s' => '--parJobs\n+00001040: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+00001050: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',..\n+00001060: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n+00001070: 6e27 203d 3e20 275c 415b 312d 395d 5c64 n' => '\\A[1-9]\\d\n+00001080: 2a5c 5a27 292c 0a09 0909 094f 7074 696f *\\Z'),.....Optio\n+00001090: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+000010a0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',......\n+000010b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+000010c0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),.\n+000010d0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+000010e0: 272d 6e61 6d65 2720 3d3e 2027 696e 636c '-name' => 'incl\n+000010f0: 7564 6552 656e 616d 6564 4261 636b 7570 udeRenamedBackup\n+00001100: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n+00001110: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d69 l_option' => '-i\n+00001120: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001130: 5f61 6c69 6173 2720 3d3e 0a09 0909 0909 _alias' =>......\n+00001140: 2020 2020 272d 2d69 6e63 6c75 6465 5265 '--includeRe\n+00001150: 6e61 6d65 6442 6163 6b75 7073 2729 0a09 namedBackups')..\n+00001160: 0920 2020 205d 0a20 2020 2029 3b0a 0a0a . ]. );...\n+00001170: 2443 6865 636b 5061 722d 3e63 6865 636b $CheckPar->check\n+00001180: 2827 2d61 7267 7627 203d 3e20 5c40 4152 ('-argv' => \\@AR\n+00001190: 4756 2c0a 2020 2020 2020 2020 2020 2020 GV,. \n+000011a0: 2020 2020 2027 2d68 656c 7027 203d 3e20 '-help' => \n+000011b0: 2448 656c 700a 2020 2020 2020 2020 2020 $Help. \n+000011c0: 2020 2020 2020 2029 3b0a 0a23 2041 7573 );..# Aus\n+000011d0: 7765 7274 756e 6720 6465 7220 5061 7261 wertung der Para\n+000011e0: 6d65 7465 720a 6d79 2024 7072 696e 7420 meter.my $print \n+000011f0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00001200: 4f70 7457 6974 686f 7574 5061 7228 2770 OptWithoutPar('p\n+00001210: 7269 6e74 2729 3b0a 6d79 2024 6261 636b rint');.my $back\n+00001220: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa\n+00001230: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00001240: 2827 6368 6563 6b42 6163 6b75 7027 293b ('checkBackup');\n+00001250: 0a6d 7920 2470 6172 4a6f 6273 203d 2024 .my $parJobs = $\n+00001260: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001270: 5769 7468 5061 7228 2770 6172 4a6f 6273 WithPar('parJobs\n+00001280: 2729 3b0a 6d79 2024 7665 7262 6f73 6520 ');.my $verbose \n+00001290: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000012a0: 4f70 7457 6974 686f 7574 5061 7228 2776 OptWithoutPar('v\n+000012b0: 6572 626f 7365 2729 3b0a 6d79 2024 696e erbose');.my $in\n+000012c0: 636c 7564 6552 656e 616d 6564 4261 636b cludeRenamedBack\n+000012d0: 7570 7320 3d0a 2020 2020 2443 6865 636b ups =. $Check\n+000012e0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n+000012f0: 7574 5061 7228 2769 6e63 6c75 6465 5265 utPar('includeRe\n+00001300: 6e61 6d65 6442 6163 6b75 7073 2729 3b0a namedBackups');.\n+00001310: 0a0a 756e 6c65 7373 2028 2470 6172 4a6f ..unless ($parJo\n+00001320: 6273 290a 7b0a 2020 2020 6c6f 6361 6c20 bs).{. local \n+00001330: 2a46 494c 453b 0a20 2020 2069 6620 286f *FILE;. if (o\n+00001340: 7065 6e28 4649 4c45 2c20 222f 7072 6f63 pen(FILE, \"/proc\n+00001350: 2f63 7075 696e 666f 2229 290a 2020 2020 /cpuinfo\")). \n+00001360: 7b0a 096d 7920 246c 3b0a 0924 7061 724a {..my $l;..$parJ\n+00001370: 6f62 7320 3d20 313b 0a09 7768 696c 6520 obs = 1;..while \n+00001380: 2824 6c20 3d20 3c46 494c 453e 290a 097b ($l = )..{\n+00001390: 0a09 2020 2020 2470 6172 4a6f 6273 2b2b .. $parJobs++\n+000013a0: 2069 6620 246c 203d 7e20 2f70 726f 6365 if $l =~ /proce\n+000013b0: 7373 6f72 2f3b 0a09 7d0a 0963 6c6f 7365 ssor/;..}..close\n+000013c0: 2846 494c 4529 3b0a 0924 7061 724a 6f62 (FILE);..$parJob\n+000013d0: 7320 2a3d 2033 3b0a 2020 2020 7d0a 2020 s *= 3;. }. \n+000013e0: 2020 2470 6172 4a6f 6273 203d 2033 2069 $parJobs = 3 i\n+000013f0: 6620 2470 6172 4a6f 6273 203c 2033 3b0a f $parJobs < 3;.\n+00001400: 7d0a 0a0a 0a69 6620 2824 7072 696e 7429 }....if ($print)\n+00001410: 0a7b 0a20 2020 2024 4368 6563 6b50 6172 .{. $CheckPar\n+00001420: 2d3e 7072 696e 7428 293b 0a20 2020 2065 ->print();. e\n+00001430: 7869 7420 303b 0a7d 0a0a 6d79 2024 7072 xit 0;.}..my $pr\n+00001440: 4c20 3d20 7072 696e 744c 6f67 2d3e 6e65 L = printLog->ne\n+00001450: 7728 272d 6b69 6e64 2720 3d3e 205b 2749 w('-kind' => ['I\n+00001460: 3a49 4e46 4f27 2c20 2757 3a57 4152 4e49 :INFO', 'W:WARNI\n+00001470: 4e47 272c 2027 453a 4552 524f 5227 2c0a NG', 'E:ERROR',.\n+00001480: 0909 0909 2020 2020 2753 3a53 5441 5449 .... 'S:STATI\n+00001490: 5354 4943 272c 2027 443a 4445 4255 4727 STIC', 'D:DEBUG'\n+000014a0: 2c20 2756 3a56 4552 5349 4f4e 275d 293b , 'V:VERSION']);\n+000014b0: 0a6d 7920 2470 724c 6f67 203d 2070 7269 .my $prLog = pri\n+000014c0: 6e74 4c6f 674d 756c 7469 706c 652d 3e6e ntLogMultiple->n\n+000014d0: 6577 2827 2d70 724c 6f67 7327 203d 3e20 ew('-prLogs' => \n+000014e0: 5b24 7072 4c5d 293b 0a0a 0a24 6261 636b [$prL]);...$back\n+000014f0: 7570 4469 7220 3d7e 2073 2f5c 2f2b 5c5a upDir =~ s/\\/+\\Z\n+00001500: 2f2f 3b20 2020 2020 2023 2072 656d 6f76 //; # remov\n+00001510: 6520 2f20 6174 2074 6865 2065 6e64 0a24 e / at the end.$\n+00001520: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00001530: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n+00001540: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00001550: 6d69 7373 696e 6720 7061 7261 6d65 7465 missing paramete\n+00001560: 7220 6261 636b 7570 4469 725c 6e24 4865 r backupDir\\n$He\n+00001570: 6c70 225d 2c0a 0920 2020 2020 2027 2d65 lp\"],.. '-e\n+00001580: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u\n+00001590: 6e6c 6573 7320 6465 6669 6e65 6420 2462 nless defined $b\n+000015a0: 6163 6b75 7044 6972 3b0a 2470 724c 6f67 ackupDir;.$prLog\n+000015b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000015c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. '\n+000015d0: 2d73 7472 2720 3d3e 205b 2262 6163 6b75 -str' => [\"backu\n+000015e0: 7044 6972 2064 6972 6563 746f 7279 203c pDir directory <\n+000015f0: 2462 6163 6b75 7044 6972 3e20 646f 6573 $backupDir> does\n+00001600: 206e 6f74 2065 7869 7374 2022 202e 0a09 not exist \" ...\n+00001610: 2020 2020 2020 226f 7220 6973 206e 6f74 \"or is not\n+00001620: 2061 6363 6573 6962 6c65 225d 2c0a 0920 accesible\"],.. \n+00001630: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+00001640: 3129 0a20 2020 2075 6e6c 6573 7320 2d72 1). unless -r\n+00001650: 2024 6261 636b 7570 4469 723b 0a0a 6966 $backupDir;..if\n+00001660: 2028 2d6c 2024 6261 636b 7570 4469 7229 (-l $backupDir)\n+00001670: 0a7b 0a20 2020 206d 7920 246e 6577 4c69 .{. my $newLi\n+00001680: 6e6b 203d 203a 3a61 6273 6f6c 7574 6550 nk = ::absoluteP\n+00001690: 6174 6828 2462 6163 6b75 7044 6972 293b ath($backupDir);\n+000016a0: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+000016b0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+000016c0: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+000016d0: 0a09 0920 205b 2272 6570 6c61 6369 6e67 ... [\"replacing\n+000016e0: 2073 796d 6c69 6e6b 203c 2462 6163 6b75 symlink <$backu\n+000016f0: 7044 6972 3e20 7769 7468 203c 246e 6577 pDir> with <$new\n+00001700: 4c69 6e6b 3e22 5d29 3b0a 2020 2020 2462 Link>\"]);. $b\n+00001710: 6163 6b75 7044 6972 203d 2024 6e65 774c ackupDir = $newL\n+00001720: 696e 6b3b 0a7d 0a0a 0a6d 7920 2461 6c6c ink;.}...my $all\n+00001730: 4c69 6e6b 7320 3d20 6c61 7465 4c69 6e6b Links = lateLink\n+00001740: 732d 3e6e 6577 2827 2d64 6972 7327 203d s->new('-dirs' =\n+00001750: 3e20 5b24 6261 636b 7570 4469 725d 2c0a > [$backupDir],.\n+00001760: 0909 0920 2020 2020 2027 2d6b 696e 6427 ... '-kind'\n+00001770: 203d 3e20 2772 6563 7572 7369 7665 5365 => 'recursiveSe\n+00001780: 6172 6368 272c 0a09 0909 2020 2020 2020 arch',.... \n+00001790: 272d 7665 7262 6f73 6527 203d 3e20 302c '-verbose' => 0,\n+000017a0: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+000017b0: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,...\n+000017c0: 0920 2020 2020 2027 2d69 6e63 6c75 6465 . '-include\n+000017d0: 5265 6e61 6d65 6442 6163 6b75 7044 6972 RenamedBackupDir\n+000017e0: 7327 203d 3e0a 0909 0920 2020 2020 2024 s' =>.... $\n+000017f0: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa\n+00001800: 636b 7570 7329 3b0a 0a6d 7920 2461 6c6c ckups);..my $all\n+00001810: 5374 6275 4469 7273 203d 2024 616c 6c4c StbuDirs = $allL\n+00001820: 696e 6b73 2d3e 6765 7441 6c6c 5374 6f72 inks->getAllStor\n+00001830: 6542 6163 6b75 7044 6972 7328 293b 0a0a eBackupDirs();..\n+00001840: 0a23 2066 696c 7465 7220 7468 6520 7265 .# filter the re\n+00001850: 6c65 7661 6e74 2062 6163 6b75 7073 0a6d levant backups.m\n+00001860: 7920 2840 6469 7273 546f 4368 6563 6b29 y (@dirsToCheck)\n+00001870: 203d 2073 6f72 7420 7b20 2461 2063 6d70 = sort { $a cmp\n+00001880: 2024 6220 7d20 4024 616c 6c53 7462 7544 $b } @$allStbuD\n+00001890: 6972 733b 0a0a 0a24 7072 4c6f 672d 3e70 irs;...$prLog->p\n+000018a0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+000018b0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n+000018c0: 7227 203d 3e20 5b22 6e6f 7468 696e 6720 r' => [\"nothing \n+000018d0: 746f 2073 6561 7263 682c 206e 6f20 6261 to search, no ba\n+000018e0: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories\n+000018f0: 2073 7065 6369 6669 6564 225d 2c0a 0920 specified\"],.. \n+00001900: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+00001910: 3129 0a20 2020 2075 6e6c 6573 7320 4064 1). unless @d\n+00001920: 6972 7354 6f43 6865 636b 3b0a 0a7b 0a20 irsToCheck;..{. \n+00001930: 2020 206d 7920 2840 6f75 742c 2040 642c my (@out, @d,\n+00001940: 2024 6429 3b0a 2020 2020 2840 6429 203d $d);. (@d) =\n+00001950: 2028 4064 6972 7354 6f43 6865 636b 293b (@dirsToCheck);\n+00001960: 0a20 2020 2028 4064 6972 7354 6f43 6865 . (@dirsToChe\n+00001970: 636b 2920 3d20 2829 3b0a 2020 2020 666f ck) = ();. fo\n+00001980: 7265 6163 6820 2464 2028 4064 290a 2020 reach $d (@d). \n+00001990: 2020 7b0a 0975 6e6c 6573 7320 282d 7220 {..unless (-r \n+000019a0: 2224 642f 2463 6865 636b 5375 6d46 696c \"$d/$checkSumFil\n+000019b0: 6522 206f 720a 0909 2d72 2022 2464 2f24 e\" or...-r \"$d/$\n+000019c0: 6368 6563 6b53 756d 4669 6c65 2e62 7a32 checkSumFile.bz2\n+000019d0: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f \")..{.. $prLo\n+000019e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000019f0: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+00001a00: 7374 7227 203d 3e20 5b22 6e6f 2072 6561 str' => [\"no rea\n+00001a10: 6461 626c 6520 3c24 6368 6563 6b53 756d dable <$checkSum\n+00001a20: 4669 6c65 3e20 696e 2022 202e 0a09 0909 File> in \" .....\n+00001a30: 0920 2020 2020 223c 2464 3e20 2e2e 2e20 . \"<$d> ... \n+00001a40: 736b 6970 7069 6e67 225d 293b 0a09 2020 skipping\"]);.. \n+00001a50: 2020 6e65 7874 3b0a 097d 0a09 6966 2028 next;..}..if (\n+00001a60: 2d65 2022 2464 2f24 6368 6563 6b53 756d -e \"$d/$checkSum\n+00001a70: 4669 6c65 2e6e 6f74 4669 6e69 7368 6564 File.notFinished\n+00001a80: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f \")..{.. $prLo\n+00001a90: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00001aa0: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+00001ab0: 7374 7227 203d 3e20 5b22 6261 636b 7570 str' => [\"backup\n+00001ac0: 203c 2464 3e20 6e6f 7420 6669 6e69 7368 <$d> not finish\n+00001ad0: 6564 2220 2e0a 0909 0909 2020 2020 2022 ed\" ...... \"\n+00001ae0: 202e 2e2e 2073 6b69 7070 696e 6722 5d29 ... skipping\"])\n+00001af0: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}.\n+00001b00: 0969 6620 282d 6520 2224 642f 2e73 746f .if (-e \"$d/.sto\n+00001b10: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li\n+00001b20: 6e6b 4669 6c65 2e62 7a32 2229 0a09 7b0a nkFile.bz2\")..{.\n+00001b30: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00001b40: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00001b50: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n+00001b60: 3e0a 0909 0920 205b 2262 6163 6b75 7020 >.... [\"backup \n+00001b70: 3c24 643e 206e 6565 6473 2072 756e 206f <$d> needs run o\n+00001b80: 6620 2220 2e0a 0909 0920 2020 227e 2f73 f \" ..... \"~/s\n+00001b90: 766e 2f73 7462 752f 6269 6e2f 7374 6f72 vn/stbu/bin/stor\n+00001ba0: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac\n+00001bb0: 6b75 702e 706c 2220 2e0a 0909 0920 2020 kup.pl\" ..... \n+00001bc0: 2220 2e2e 2e20 736b 6970 7069 6e67 225d \" ... skipping\"]\n+00001bd0: 293b 0a09 2020 2020 6e65 7874 3b0a 097d );.. next;..}\n+00001be0: 0a0a 0970 7573 6820 406f 7574 2c20 2220 ...push @out, \" \n+00001bf0: 2024 6422 3b0a 0970 7573 6820 4064 6972 $d\";..push @dir\n+00001c00: 7354 6f43 6865 636b 2c20 2464 3b0a 2020 sToCheck, $d;. \n+00001c10: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog->\n+00001c20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00001c30: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str'\n+00001c40: 203d 3e20 5b22 6261 636b 7570 2064 6972 => [\"backup dir\n+00001c50: 6563 746f 7269 6573 2074 6f20 6368 6563 ectories to chec\n+00001c60: 6b22 2c20 406f 7574 5d29 3b0a 7d0a 0a6d k\", @out]);.}..m\n+00001c70: 7920 2470 6172 466f 726b 203d 2070 6172 y $parFork = par\n+00001c80: 616c 6c65 6c46 6f72 6b2d 3e6e 6577 2827 allelFork->new('\n+00001c90: 2d6d 6178 5061 7261 6c6c 656c 2720 3d3e -maxParallel' =>\n+00001ca0: 2024 7061 724a 6f62 732c 0a09 0909 0927 $parJobs,.....'\n+00001cb0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n+00001cc0: 6729 3b0a 6d79 2024 7469 6e79 5363 6865 g);.my $tinySche\n+00001cd0: 6420 3d20 7469 6e79 5761 6974 5363 6865 d = tinyWaitSche\n+00001ce0: 6475 6c65 722d 3e6e 6577 2827 2d70 724c duler->new('-prL\n+00001cf0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+00001d00: 0a6d 7920 2472 6373 6620 3d20 756e 6465 .my $rcsf = unde\n+00001d10: 663b 0a6d 7920 2824 6d65 7461 2c20 2470 f;.my ($meta, $p\n+00001d20: 6f73 7466 6978 2c20 2475 6e63 6f6d 7072 ostfix, $uncompr\n+00001d30: 2c20 4075 6e63 6f6d 7072 5061 7229 3b0a , @uncomprPar);.\n+00001d40: 6d79 2024 6469 7254 6f43 6865 636b 203d my $dirToCheck =\n+00001d50: 2075 6e64 6566 3b0a 6d79 2024 6a6f 6254 undef;.my $jobT\n+00001d60: 6f44 6f20 3d20 313b 0a6d 7920 2470 6172 oDo = 1;.my $par\n+00001d70: 466f 726b 546f 446f 203d 2030 3b0a 2320 ForkToDo = 0;.# \n+00001d80: 7374 6174 6973 7469 6361 6c20 6461 7461 statistical data\n+00001d90: 2070 6572 2062 6163 6b75 703a 0a6d 7920 per backup:.my \n+00001da0: 2463 6865 636b 6564 4669 6c65 7320 3d20 $checkedFiles = \n+00001db0: 303b 0a6d 7920 2463 6865 636b 6564 4669 0;.my $checkedFi\n+00001dc0: 6c65 7353 697a 6520 3d20 303b 2023 2075 lesSize = 0; # u\n+00001dd0: 7365 7320 7369 7a65 206f 6620 6461 7461 ses size of data\n+00001de0: 2069 6e20 6261 636b 7570 2028 6567 2e20 in backup (eg. \n+00001df0: 636f 6d70 7265 7373 6564 290a 6d79 2024 compressed).my $\n+00001e00: 6c69 6e6b 6564 4669 6c65 7320 3d20 303b linkedFiles = 0;\n+00001e10: 0a6d 7920 246c 696e 6b65 6446 696c 6573 .my $linkedFiles\n+00001e20: 5369 7a65 203d 2030 3b20 2023 2075 7365 Size = 0; # use\n+00001e30: 7320 7369 7a65 206f 6620 6461 7461 2069 s size of data i\n+00001e40: 6e20 6261 636b 7570 2028 6567 2e20 636f n backup (eg. co\n+00001e50: 6d70 7265 7373 6564 290a 2320 7375 6d73 mpressed).# sums\n+00001e60: 206f 6620 7374 6174 6973 7469 6361 6c20 of statistical \n+00001e70: 6461 7461 3a0a 6d79 2024 6368 6563 6b65 data:.my $checke\n+00001e80: 6446 696c 6573 416c 6c20 3d20 303b 0a6d dFilesAll = 0;.m\n+00001e90: 7920 2463 6865 636b 6564 4669 6c65 7353 y $checkedFilesS\n+00001ea0: 697a 6541 6c6c 203d 2030 3b0a 6d79 2024 izeAll = 0;.my $\n+00001eb0: 6c69 6e6b 6564 4669 6c65 7341 6c6c 203d linkedFilesAll =\n+00001ec0: 2030 3b0a 6d79 2024 6c69 6e6b 6564 4669 0;.my $linkedFi\n+00001ed0: 6c65 7353 697a 6541 6c6c 203d 2030 3b0a lesSizeAll = 0;.\n+00001ee0: 0a23 2025 7573 6564 496e 6f64 6573 0a23 .# %usedInodes.#\n+00001ef0: 2320 6966 2069 6e6f 6465 2077 6173 2063 # if inode was c\n+00001f00: 6865 636b 6564 2c20 7468 6520 696e 6f64 hecked, the inod\n+00001f10: 6520 6973 2075 7365 6420 6173 206b 6579 e is used as key\n+00001f20: 2c20 7661 6c75 6520 7365 7420 746f 2031 , value set to 1\n+00001f30: 0a23 2320 6966 206d 6435 7375 6d20 6368 .## if md5sum ch\n+00001f40: 6563 6b20 6f66 2066 696c 6520 6861 7320 eck of file has \n+00001f50: 6469 6666 6572 656e 7420 7661 6c75 6520 different value \n+00001f60: 7468 6174 2073 746f 7265 6420 696e 202e that stored in .\n+00001f70: 6d64 3543 6865 636b 5375 6d73 2c0a 2323 md5CheckSums,.##\n+00001f80: 2069 6e6f 6465 2069 7320 6d61 726b 6564 inode is marked\n+00001f90: 2061 7320 2763 6f72 7275 7074 2720 616e as 'corrupt' an\n+00001fa0: 6420 6465 6c65 7465 6420 6672 6f6d 2074 d deleted from t\n+00001fb0: 6861 7420 7461 626c 6520 2873 6f20 616c hat table (so al\n+00001fc0: 6c20 6166 6665 6374 6564 0a23 2320 6669 l affected.## fi\n+00001fd0: 6c65 7320 6172 6520 7265 706f 7274 6564 les are reported\n+00001fe0: 290a 2320 2566 696c 6573 4672 6f6d 4d44 ).# %filesFromMD\n+00001ff0: 3543 6865 636b 5375 6d46 696c 650a 2323 5CheckSumFile.##\n+00002000: 206b 6579 203d 2072 656c 6174 6976 2066 key = relativ f\n+00002010: 696c 656e 616d 650a 2323 2076 616c 7565 ilename.## value\n+00002020: 2070 7265 2d73 6574 2074 6f20 312c 2074 pre-set to 1, t\n+00002030: 6865 6e20 6368 616e 6765 6420 746f 2032 hen changed to 2\n+00002040: 2069 6620 6669 6c65 2069 7320 6e6f 7420 if file is not \n+00002050: 6120 626c 6f63 6b65 6420 6669 6c65 0a23 a blocked file.#\n+00002060: 2320 7375 6220 6368 6563 6b41 6c6c 4669 # sub checkAllFi\n+00002070: 6c65 7320 6368 6563 6b73 2c20 6966 2061 les checks, if a\n+00002080: 6c6c 2066 696c 6573 2069 6e20 7468 6520 ll files in the \n+00002090: 6261 636b 7570 2061 7265 2069 6e20 7468 backup are in th\n+000020a0: 6973 2068 6173 680a 2320 2575 7365 6442 is hash.# %usedB\n+000020b0: 6c6f 636b 496e 6f64 6573 0a23 2320 7374 lockInodes.## st\n+000020c0: 6f72 6573 2069 6e6f 6465 7320 616c 7265 ores inodes alre\n+000020d0: 6164 7920 7573 6564 2069 6e20 626c 6f63 ady used in bloc\n+000020e0: 6b73 0a6d 7920 2825 7573 6564 496e 6f64 ks.my (%usedInod\n+000020f0: 6573 2c20 2566 696c 6573 4672 6f6d 4d44 es, %filesFromMD\n+00002100: 3543 6865 636b 5375 6d46 696c 652c 2024 5CheckSumFile, $\n+00002110: 7072 6576 4469 7254 6f43 6865 636b 2c0a prevDirToCheck,.\n+00002120: 2020 2020 2575 7365 6442 6c6f 636b 496e %usedBlockIn\n+00002130: 6f64 6573 293b 0a0a 7768 696c 6520 2864 odes);..while (d\n+00002140: 6566 696e 6564 2824 7263 7366 2920 6f72 efined($rcsf) or\n+00002150: 2024 6a6f 6254 6f44 6f20 3e20 3020 6f72 $jobToDo > 0 or\n+00002160: 2024 7061 7246 6f72 6b54 6f44 6f20 3e20 $parForkToDo > \n+00002170: 3029 0a7b 0a23 7072 696e 7420 222d 2d6f 0).{.#print \"--o\n+00002180: 2d2d 302d 2d6a 6f62 546f 446f 3d24 6a6f --0--jobToDo=$jo\n+00002190: 6254 6f44 6f2d 7061 7246 6f72 6b54 6f44 bToDo-parForkToD\n+000021a0: 6f3d 2470 6172 466f 726b 546f 446f 2d5c o=$parForkToDo-\\\n+000021b0: 6e22 3b0a 2020 2020 2323 2323 2323 2323 n\";. ########\n+000021c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000021d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000021e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000021f0: 2323 2323 0a20 2020 206d 7920 246f 6c64 ####. my $old\n+00002200: 203d 2024 7061 7246 6f72 6b2d 3e63 6865 = $parFork->che\n+00002210: 636b 4f6e 6528 293b 0a20 2020 2069 6620 ckOne();. if \n+00002220: 2824 6f6c 6429 0a20 2020 207b 0a09 6d79 ($old). {..my\n+00002230: 2028 2474 6d70 4e2c 2024 666e 2920 3d20 ($tmpN, $fn) = \n+00002240: 407b 246f 6c64 2d3e 6765 7428 272d 7768 @{$old->get('-wh\n+00002250: 6174 2720 3d3e 2027 696e 666f 2729 7d3b at' => 'info')};\n+00002260: 0a23 7072 696e 7420 222d 2d6f 2d2d 312d .#print \"--o--1-\n+00002270: 2466 6e2d 5c6e 223b 0a09 6c6f 6361 6c20 $fn-\\n\";..local \n+00002280: 2a49 4e3b 0a09 756e 6c65 7373 2028 263a *IN;..unless (&:\n+00002290: 3a77 6169 7446 6f72 4669 6c65 2824 746d :waitForFile($tm\n+000022a0: 704e 2920 6f72 0a09 096f 7065 6e28 494e pN) or...open(IN\n+000022b0: 2c20 223c 2024 746d 704e 2229 290a 097b , \"< $tmpN\"))..{\n+000022c0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+000022d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000022e0: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n+000022f0: 3d3e 205b 2263 616e 6e6f 7420 6f70 656e => [\"cannot open\n+00002300: 2074 656d 706f 7261 7279 2069 6e66 6f72 temporary infor\n+00002310: 6d61 7469 6f6e 2066 696c 6520 2220 2e0a mation file \" ..\n+00002320: 0909 0909 2020 2020 2022 3c24 746d 704e .... \"<$tmpN\n+00002330: 3e20 6f66 203c 2466 6e3e 225d 293b 0a09 > of <$fn>\"]);..\n+00002340: 2020 2020 6e65 7874 3b0a 097d 0a23 7072 next;..}.#pr\n+00002350: 696e 7420 222d 2d6f 2d2d 322d 5c6e 223b int \"--o--2-\\n\";\n+00002360: 0a09 6d79 2024 6c3b 0a09 7768 696c 6520 ..my $l;..while \n+00002370: 2824 6c20 3d20 3c49 4e3e 290a 097b 0a09 ($l = )..{..\n+00002380: 2020 2020 6368 6f70 2024 6c3b 0a23 7072 chop $l;.#pr\n+00002390: 696e 7420 222d 2d6f 2d2d 332d 2d24 6c5c int \"--o--3--$l\\\n+000023a0: 6e22 3b0a 0920 2020 206d 7920 2824 7768 n\";.. my ($wh\n+000023b0: 6174 2c20 406c 2920 3d20 7370 6c69 7428 at, @l) = split(\n+000023c0: 2f5c 732f 2c20 246c 2c20 3229 3b0a 0920 /\\s/, $l, 2);.. \n+000023d0: 2020 2069 6620 2824 7768 6174 2065 7120 if ($what eq \n+000023e0: 2763 6f72 7275 7074 2729 0a09 2020 2020 'corrupt').. \n+000023f0: 7b0a 0909 6465 6c65 7465 2024 7573 6564 {...delete $used\n+00002400: 496e 6f64 6573 7b24 6c5b 305d 7d3b 0a09 Inodes{$l[0]};..\n+00002410: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00002420: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00002430: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00002440: 3e0a 0909 0920 2020 2020 205b 226d 6435 >.... [\"md5\n+00002450: 2073 756d 206d 6973 6d61 7463 6820 666f sum mismatch fo\n+00002460: 7220 3c24 666e 3e22 5d29 3b0a 0920 2020 r <$fn>\"]);.. \n+00002470: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($\n+00002480: 7768 6174 2065 7120 2765 7272 6f72 7327 what eq 'errors'\n+00002490: 290a 0920 2020 207b 0a09 0924 7072 4c6f ).. {...$prLo\n+000024a0: 672d 3e61 6464 456e 636f 756e 7465 7228 g->addEncounter(\n+000024b0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+000024c0: 0909 0909 2020 2020 2027 2d61 6464 2720 .... '-add' \n+000024d0: 3d3e 2024 6c5b 305d 293b 0a09 2020 2020 => $l[0]);.. \n+000024e0: 7d0a 0920 2020 2065 6c73 6966 2028 2477 }.. elsif ($w\n+000024f0: 6861 7420 6571 2027 6368 6563 6b65 6446 hat eq 'checkedF\n+00002500: 696c 6573 2729 0a09 2020 2020 7b0a 0909 iles').. {...\n+00002510: 2463 6865 636b 6564 4669 6c65 7320 2b3d $checkedFiles +=\n+00002520: 2024 6c5b 305d 3b0a 0920 2020 207d 0a09 $l[0];.. }..\n+00002530: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what\n+00002540: 2065 7120 2763 6865 636b 6564 4669 6c65 eq 'checkedFile\n+00002550: 7353 697a 6527 290a 0920 2020 207b 0a09 sSize').. {..\n+00002560: 0924 6368 6563 6b65 6446 696c 6573 5369 .$checkedFilesSi\n+00002570: 7a65 202b 3d20 246c 5b30 5d3b 0a09 2020 ze += $l[0];.. \n+00002580: 2020 7d0a 0920 2020 2065 6c73 6966 2028 }.. elsif (\n+00002590: 2477 6861 7420 6571 2027 6c69 6e6b 6564 $what eq 'linked\n+000025a0: 4669 6c65 7327 290a 0920 2020 207b 0a09 Files').. {..\n+000025b0: 0924 6c69 6e6b 6564 4669 6c65 7320 2b3d .$linkedFiles +=\n+000025c0: 2024 6c5b 305d 3b0a 0920 2020 207d 0a09 $l[0];.. }..\n+000025d0: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what\n+000025e0: 2065 7120 276c 696e 6b65 6446 696c 6573 eq 'linkedFiles\n+000025f0: 5369 7a65 2729 0a09 2020 2020 7b0a 0909 Size').. {...\n+00002600: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize\n+00002610: 202b 3d20 246c 5b30 5d3b 0a09 2020 2020 += $l[0];.. \n+00002620: 7d0a 0920 2020 2065 6c73 6966 2028 2477 }.. elsif ($w\n+00002630: 6861 7420 6571 2027 6361 6c63 6564 496e hat eq 'calcedIn\n+00002640: 6f64 6573 2729 0a09 2020 2020 7b0a 0909 odes').. {...\n+00002650: 7768 696c 6520 2824 6c20 3d20 3c49 4e3e while ($l = \n+00002660: 290a 0909 7b0a 0909 2020 2020 6368 6f70 )...{... chop\n+00002670: 2024 6c3b 0a09 0920 2020 2024 7573 6564 $l;... $used\n+00002680: 426c 6f63 6b49 6e6f 6465 737b 246c 7d20 BlockInodes{$l} \n+00002690: 3d20 313b 0a09 097d 0a09 096c 6173 743b = 1;...}...last;\n+000026a0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+000026b0: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo\n+000026c0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000026d0: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... \n+000026e0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+000026f0: 2020 2020 205b 2275 6e6b 6e6f 776e 2063 [\"unknown c\n+00002700: 6f6d 6d61 6e64 203c 2477 6861 743e 2069 ommand <$what> i\n+00002710: 6e20 696e 666f 726d 6174 696f 6e20 6669 n information fi\n+00002720: 6c65 2022 202e 0a09 0909 2020 2020 2020 le \" ..... \n+00002730: 2022 3c24 746d 704e 3e20 6f66 2024 666e \"<$tmpN> of $fn\n+00002740: 225d 293b 0a09 2020 2020 7d0a 097d 0a0a \"]);.. }..}..\n+00002750: 0963 6c6f 7365 2849 4e29 3b0a 0975 6e6c .close(IN);..unl\n+00002760: 696e 6b20 2474 6d70 4e3b 0a20 2020 207d ink $tmpN;. }\n+00002770: 0a23 7072 696e 7420 222d 2d6f 2d2d 342d .#print \"--o--4-\n+00002780: 5c6e 223b 0a0a 2020 2020 2323 2323 2323 \\n\";.. ######\n+00002790: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027c0: 2323 2323 2323 0a20 2020 2024 6a6f 6254 ######. $jobT\n+000027d0: 6f44 6f20 3d20 4064 6972 7354 6f43 6865 oDo = @dirsToChe\n+000027e0: 636b 3b0a 2020 2020 6966 2028 2824 7263 ck;. if (($rc\n+000027f0: 7366 206f 7220 246a 6f62 546f 446f 203e sf or $jobToDo >\n+00002800: 2030 2920 616e 6420 2470 6172 466f 726b 0) and $parFork\n+00002810: 2d3e 6765 744e 6f46 7265 6545 6e74 7269 ->getNoFreeEntri\n+00002820: 6573 2829 203e 2030 290a 2020 2020 7b0a es() > 0). {.\n+00002830: 2370 7269 6e74 2022 2d2d 2d2d 302d 2d2d #print \"----0---\n+00002840: 2d6f 7065 6e20 2464 6972 546f 4368 6563 -open $dirToChec\n+00002850: 6b2f 2463 6865 636b 5375 6d46 696c 655c k/$checkSumFile\\\n+00002860: 6e22 3b0a 2370 7269 6e74 2022 2d2d 2d6a n\";.#print \"---j\n+00002870: 6f62 546f 446f 203d 2024 6a6f 6254 6f44 obToDo = $jobToD\n+00002880: 6f2c 2066 7265 6545 6e74 7269 6573 3d22 o, freeEntries=\"\n+00002890: 2c20 2470 6172 466f 726b 2d3e 6765 744e , $parFork->getN\n+000028a0: 6f46 7265 6545 6e74 7269 6573 2829 2c20 oFreeEntries(), \n+000028b0: 222c 2075 7365 6445 6e74 7269 6573 3d22 \", usedEntries=\"\n+000028c0: 2c20 2470 6172 466f 726b 2d3e 6765 744e , $parFork->getN\n+000028d0: 6f55 7365 6445 6e74 7269 6573 2829 2c20 oUsedEntries(), \n+000028e0: 225c 6e22 3b0a 0a09 756e 6c65 7373 2028 \"\\n\";...unless (\n+000028f0: 2472 6373 6629 0a09 7b0a 2370 7269 6e74 $rcsf)..{.#print\n+00002900: 2022 2d2d 2d30 2e30 352d 2d2d 5c6e 223b \"---0.05---\\n\";\n+00002910: 0a09 2020 2020 2320 5761 6974 2075 6e74 .. # Wait unt\n+00002920: 696c 2061 6c6c 2066 696c 6573 206f 6620 il all files of \n+00002930: 7468 6520 7072 6576 696f 7573 2061 6374 the previous act\n+00002940: 7561 6c20 6261 636b 7570 0a09 2020 2020 ual backup.. \n+00002950: 2320 6172 6520 6361 6c63 756c 6174 6564 # are calculated\n+00002960: 2e20 446f 2074 6869 7320 736f 200a 0920 . Do this so .. \n+00002970: 2020 2069 6620 2824 7061 7246 6f72 6b2d if ($parFork-\n+00002980: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie\n+00002990: 7328 2920 213d 2030 290a 0920 2020 207b s() != 0).. {\n+000029a0: 0a09 0924 7469 6e79 5363 6865 642d 3e77 ...$tinySched->w\n+000029b0: 6169 7428 293b 0a09 096e 6578 743b 0a09 ait();...next;..\n+000029c0: 2020 2020 7d0a 0920 2020 2023 206f 6b2c }.. # ok,\n+000029d0: 2061 6c6c 2066 696c 6573 206f 6620 6f6c all files of ol\n+000029e0: 6420 6261 636b 7570 2061 7265 2066 696e d backup are fin\n+000029f0: 6973 6865 642c 0a09 2020 2020 2320 6e6f ished,.. # no\n+00002a00: 7720 6265 6769 6e20 7769 7468 2074 6865 w begin with the\n+00002a10: 206e 6578 7420 6f6e 650a 0920 2020 2069 next one.. i\n+00002a20: 6620 2824 7665 7262 6f73 6529 0a09 2020 f ($verbose).. \n+00002a30: 2020 7b0a 0909 2670 7269 6e74 5374 6174 {...&printStat\n+00002a40: 2824 7072 4c6f 672c 2027 272c 2024 6368 ($prLog, '', $ch\n+00002a50: 6563 6b65 6446 696c 6573 2c20 2463 6865 eckedFiles, $che\n+00002a60: 636b 6564 4669 6c65 7353 697a 652c 0a09 ckedFilesSize,..\n+00002a70: 0909 2020 2024 6c69 6e6b 6564 4669 6c65 .. $linkedFile\n+00002a80: 732c 2024 6c69 6e6b 6564 4669 6c65 7353 s, $linkedFilesS\n+00002a90: 697a 6529 0a09 0920 2020 2069 6620 2463 ize)... if $c\n+00002aa0: 6865 636b 6564 4669 6c65 7353 697a 6520 heckedFilesSize \n+00002ab0: 2b20 246c 696e 6b65 6446 696c 6573 5369 + $linkedFilesSi\n+00002ac0: 7a65 203e 2030 3b0a 0909 2020 2020 2020 ze > 0;... \n+00002ad0: 2020 2320 6176 6f69 6420 6669 7273 7420 # avoid first \n+00002ae0: 7072 696e 746f 7574 2062 6566 6f72 6520 printout before \n+00002af0: 616e 7920 6368 6563 6b73 0a09 2020 2020 any checks.. \n+00002b00: 7d0a 0920 2020 2024 6368 6563 6b65 6446 }.. $checkedF\n+00002b10: 696c 6573 416c 6c20 2b3d 2024 6368 6563 ilesAll += $chec\n+00002b20: 6b65 6446 696c 6573 3b0a 0920 2020 2024 kedFiles;.. $\n+00002b30: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize\n+00002b40: 416c 6c20 2b3d 2024 6368 6563 6b65 6446 All += $checkedF\n+00002b50: 696c 6573 5369 7a65 3b0a 0920 2020 2024 ilesSize;.. $\n+00002b60: 6c69 6e6b 6564 4669 6c65 7341 6c6c 202b linkedFilesAll +\n+00002b70: 3d20 246c 696e 6b65 6446 696c 6573 3b0a = $linkedFiles;.\n+00002b80: 0920 2020 2024 6c69 6e6b 6564 4669 6c65 . $linkedFile\n+00002b90: 7353 697a 6541 6c6c 202b 3d20 246c 696e sSizeAll += $lin\n+00002ba0: 6b65 6446 696c 6573 5369 7a65 3b0a 0a09 kedFilesSize;...\n+00002bb0: 2020 2020 2463 6865 636b 6564 4669 6c65 $checkedFile\n+00002bc0: 7320 3d20 303b 0a09 2020 2020 2463 6865 s = 0;.. $che\n+00002bd0: 636b 6564 4669 6c65 7353 697a 6520 3d20 ckedFilesSize = \n+00002be0: 303b 0a09 2020 2020 246c 696e 6b65 6446 0;.. $linkedF\n+00002bf0: 696c 6573 203d 2030 3b0a 0920 2020 2024 iles = 0;.. $\n+00002c00: 6c69 6e6b 6564 4669 6c65 7353 697a 6520 linkedFilesSize \n+00002c10: 3d20 303b 0a0a 2370 7269 6e74 2022 2d2d = 0;..#print \"--\n+00002c20: 2d30 2e31 2d2d 2d5c 6e22 3b0a 0920 2020 -0.1---\\n\";.. \n+00002c30: 2024 7072 6576 4469 7254 6f43 6865 636b $prevDirToCheck\n+00002c40: 203d 2024 6469 7254 6f43 6865 636b 3b0a = $dirToCheck;.\n+00002c50: 0920 2020 2024 6469 7254 6f43 6865 636b . $dirToCheck\n+00002c60: 203d 2073 6869 6674 2040 6469 7273 546f = shift @dirsTo\n+00002c70: 4368 6563 6b3b 0a09 2020 2020 6c61 7374 Check;.. last\n+00002c80: 2075 6e6c 6573 7320 2464 6972 546f 4368 unless $dirToCh\n+00002c90: 6563 6b3b 0a0a 2370 7269 6e74 2022 2d2d eck;..#print \"--\n+00002ca0: 2d30 2e32 2d2d 2d5c 6e22 3b0a 0a09 2020 -0.2---\\n\";... \n+00002cb0: 2020 2663 6865 636b 416c 6c46 696c 6573 &checkAllFiles\n+00002cc0: 2824 7072 6576 4469 7254 6f43 6865 636b ($prevDirToCheck\n+00002cd0: 2c20 5c25 6669 6c65 7346 726f 6d4d 4435 , \\%filesFromMD5\n+00002ce0: 4368 6563 6b53 756d 4669 6c65 2c0a 0909 CheckSumFile,...\n+00002cf0: 0920 2020 2470 724c 6f67 290a 0909 6966 . $prLog)...if\n+00002d00: 2025 6669 6c65 7346 726f 6d4d 4435 4368 %filesFromMD5Ch\n+00002d10: 6563 6b53 756d 4669 6c65 3b0a 0920 2020 eckSumFile;.. \n+00002d20: 2025 6669 6c65 7346 726f 6d4d 4435 4368 %filesFromMD5Ch\n+00002d30: 6563 6b53 756d 4669 6c65 203d 2028 293b eckSumFile = ();\n+00002d40: 0a0a 0920 2020 2024 7263 7366 203d 2072 ... $rcsf = r\n+00002d50: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile-\n+00002d60: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF\n+00002d70: 696c 6527 203d 3e0a 0909 0909 0920 2022 ile' =>...... \"\n+00002d80: 2464 6972 546f 4368 6563 6b2f 2463 6865 $dirToCheck/$che\n+00002d90: 636b 5375 6d46 696c 6522 2c0a 0909 0909 ckSumFile\",.....\n+00002da0: 0920 2027 2d70 724c 6f67 2720 3d3e 2024 . '-prLog' => $\n+00002db0: 7072 4c6f 6729 3b0a 0920 2020 2024 706f prLog);.. $po\n+00002dc0: 7374 6669 7820 3d20 2472 6373 662d 3e67 stfix = $rcsf->g\n+00002dd0: 6574 496e 666f 5769 7468 5061 7228 2770 etInfoWithPar('p\n+00002de0: 6f73 7466 6978 2729 3b0a 0920 2020 206d ostfix');.. m\n+00002df0: 7920 2477 7269 7465 4578 636c 7564 654c y $writeExcludeL\n+00002e00: 6f67 203d 2024 7263 7366 2d3e 6765 7449 og = $rcsf->getI\n+00002e10: 6e66 6f57 6974 6850 6172 2827 7772 6974 nfoWithPar('writ\n+00002e20: 6545 7863 6c75 6465 4c6f 6727 293b 0a09 eExcludeLog');..\n+00002e30: 2020 2020 6d79 2024 6c6f 6749 6e42 6163 my $logInBac\n+00002e40: 6b75 7044 6972 203d 2024 7263 7366 2d3e kupDir = $rcsf->\n+00002e50: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar('\n+00002e60: 6c6f 6749 6e42 6163 6b75 7044 6972 2729 logInBackupDir')\n+00002e70: 3b0a 0920 2020 206d 7920 2463 6f6d 7072 ;.. my $compr\n+00002e80: 6573 734c 6f67 496e 4261 636b 7570 4469 essLogInBackupDi\n+00002e90: 7220 3d0a 0909 2472 6373 662d 3e67 6574 r =...$rcsf->get\n+00002ea0: 496e 666f 5769 7468 5061 7228 2763 6f6d InfoWithPar('com\n+00002eb0: 7072 6573 734c 6f67 496e 4261 636b 7570 pressLogInBackup\n+00002ec0: 4469 7227 293b 0a09 2020 2020 6d79 2024 Dir');.. my $\n+00002ed0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+00002ee0: 6c65 4e61 6d65 203d 0a09 0924 7263 7366 leName =...$rcsf\n+00002ef0: 2d3e 6765 7449 6e66 6f57 6974 6850 6172 ->getInfoWithPar\n+00002f00: 2827 6c6f 6749 6e42 6163 6b75 7044 6972 ('logInBackupDir\n+00002f10: 4669 6c65 4e61 6d65 2729 3b0a 0920 2020 FileName');.. \n+00002f20: 2024 6c6f 6749 6e42 6163 6b75 7044 6972 $logInBackupDir\n+00002f30: 4669 6c65 4e61 6d65 202e 3d20 272e 627a FileName .= '.bz\n+00002f40: 3227 0a09 0969 6620 2463 6f6d 7072 6573 2'...if $compres\n+00002f50: 734c 6f67 496e 4261 636b 7570 4469 7220 sLogInBackupDir \n+00002f60: 6571 2027 7965 7327 3b0a 0920 2020 2020 eq 'yes';.. \n+00002f70: 2824 756e 636f 6d70 722c 2040 756e 636f ($uncompr, @unco\n+00002f80: 6d70 7250 6172 2920 3d20 407b 2472 6373 mprPar) = @{$rcs\n+00002f90: 662d 3e67 6574 496e 666f 5769 7468 5061 f->getInfoWithPa\n+00002fa0: 7228 2775 6e63 6f6d 7072 6573 7327 297d r('uncompress')}\n+00002fb0: 3b0a 0a09 2020 2020 2466 696c 6573 4672 ;... $filesFr\n+00002fc0: 6f6d 4d44 3543 6865 636b 5375 6d46 696c omMD5CheckSumFil\n+00002fd0: 657b 272e 6d64 3542 6c6f 636b 4368 6563 e{'.md5BlockChec\n+00002fe0: 6b53 756d 732e 627a 3227 7d20 3d20 313b kSums.bz2'} = 1;\n+00002ff0: 0a09 2020 2020 2466 696c 6573 4672 6f6d .. $filesFrom\n+00003000: 4d44 3543 6865 636b 5375 6d46 696c 657b MD5CheckSumFile{\n+00003010: 272e 6d64 3543 6865 636b 5375 6d73 2e62 '.md5CheckSums.b\n+00003020: 7a32 277d 203d 2031 3b0a 0920 2020 2024 z2'} = 1;.. $\n+00003030: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec\n+00003040: 6b53 756d 4669 6c65 7b27 2e6d 6435 4368 kSumFile{'.md5Ch\n+00003050: 6563 6b53 756d 7327 7d20 3d20 313b 0a09 eckSums'} = 1;..\n+00003060: 2020 2020 2466 696c 6573 4672 6f6d 4d44 $filesFromMD\n+00003070: 3543 6865 636b 5375 6d46 696c 657b 272e 5CheckSumFile{'.\n+00003080: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf\n+00003090: 6f27 7d20 3d20 313b 0a09 2020 2020 2466 o'} = 1;.. $f\n+000030a0: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check\n+000030b0: 5375 6d46 696c 657b 272e 7374 6f72 6542 SumFile{'.storeB\n+000030c0: 6163 6b75 704c 696e 6b73 277d 203d 2031 ackupLinks'} = 1\n+000030d0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro\n+000030e0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile\n+000030f0: 7b27 2e73 746f 7265 4261 636b 7570 2e6e {'.storeBackup.n\n+00003100: 6f74 5361 7665 642e 627a 3227 7d20 3d20 otSaved.bz2'} = \n+00003110: 310a 0909 6966 2024 7772 6974 6545 7863 1...if $writeExc\n+00003120: 6c75 6465 4c6f 6720 6571 2027 7965 7327 ludeLog eq 'yes'\n+00003130: 3b0a 0920 2020 2069 6620 2824 6c6f 6749 ;.. if ($logI\n+00003140: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y\n+00003150: 6573 2729 0a09 2020 2020 7b0a 0909 6966 es').. {...if\n+00003160: 2028 246c 6f67 496e 4261 636b 7570 4469 ($logInBackupDi\n+00003170: 7246 696c 654e 616d 6529 0a09 097b 0a09 rFileName)...{..\n+00003180: 0920 2020 2024 6669 6c65 7346 726f 6d4d . $filesFromM\n+00003190: 4435 4368 6563 6b53 756d 4669 6c65 7b24 D5CheckSumFile{$\n+000031a0: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n+000031b0: 6c65 4e61 6d65 7d20 3d20 313b 0a09 097d leName} = 1;...}\n+000031c0: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... \n+000031d0: 2020 2466 696c 6573 4672 6f6d 4d44 3543 $filesFromMD5C\n+000031e0: 6865 636b 5375 6d46 696c 657b 272e 7374 heckSumFile{'.st\n+000031f0: 6f72 6542 6163 6b75 702e 6c6f 6727 7d20 oreBackup.log'} \n+00003200: 3d20 313b 0a09 0920 2020 2024 6669 6c65 = 1;... $file\n+00003210: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum\n+00003220: 4669 6c65 7b27 2e73 746f 7265 4261 636b File{'.storeBack\n+00003230: 7570 2e6e 6f74 5361 7665 642e 627a 3227 up.notSaved.bz2'\n+00003240: 7d20 3d20 313b 0a0a 0909 2020 2020 2466 } = 1;.... $f\n+00003250: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check\n+00003260: 5375 6d46 696c 657b 272e 7374 6f72 6542 SumFile{'.storeB\n+00003270: 6163 6b75 702e 6c6f 672e 627a 3227 7d20 ackup.log.bz2'} \n+00003280: 3d20 310a 0909 0969 6620 2463 6f6d 7072 = 1....if $compr\n+00003290: 6573 734c 6f67 496e 4261 636b 7570 4469 essLogInBackupDi\n+000032a0: 7220 6571 2027 7965 7327 3b0a 0909 7d0a r eq 'yes';...}.\n+000032b0: 0920 2020 207d 0a0a 0920 2020 2024 7072 . }... $pr\n+000032c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000032d0: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n+000032e0: 272d 7374 7227 203d 3e20 5b22 2d2d 2063 '-str' => [\"-- c\n+000032f0: 6865 636b 696e 6720 3c24 6469 7254 6f43 hecking <$dirToC\n+00003300: 6865 636b 3e20 2e2e 2e22 5d29 3b0a 2309 heck> ...\"]);.#.\n+00003310: 0969 6620 2476 6572 626f 7365 3b0a 097d .if $verbose;..}\n+00003320: 0a09 6d79 2028 246d 6435 7375 6d2c 2024 ..my ($md5sum, $\n+00003330: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode\n+00003340: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, \n+00003350: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, \n+00003360: 2461 7469 6d65 2c0a 0920 2020 2024 7369 $atime,.. $si\n+00003370: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, \n+00003380: 246d 6f64 652c 2024 6629 3b0a 0969 6620 $mode, $f);..if \n+00003390: 2828 2824 6d64 3573 756d 2c20 2463 6f6d ((($md5sum, $com\n+000033a0: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $\n+000033b0: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct\n+000033c0: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at\n+000033d0: 696d 652c 0a09 0920 2473 697a 652c 2024 ime,... $size, $\n+000033e0: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode\n+000033f0: 2c20 2466 2920 3d20 2472 6373 662d 3e6e , $f) = $rcsf->n\n+00003400: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0).\n+00003410: 097b 0a09 2020 2020 2466 202e 3d20 2470 .{.. $f .= $p\n+00003420: 6f73 7466 6978 2069 6620 2463 6f6d 7072 ostfix if $compr\n+00003430: 2065 7120 2763 273b 0a09 2020 2020 2466 eq 'c';.. $f\n+00003440: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check\n+00003450: 5375 6d46 696c 657b 2466 7d20 3d20 313b SumFile{$f} = 1;\n+00003460: 0a23 7072 696e 7420 226e 6577 2066 696c .#print \"new fil\n+00003470: 6520 3c24 663e 5c6e 223b 0a23 7072 696e e <$f>\\n\";.#prin\n+00003480: 7420 2220 2020 2024 6469 7254 6f43 6865 t \" $dirToChe\n+00003490: 636b 2f24 6368 6563 6b53 756d 4669 6c65 ck/$checkSumFile\n+000034a0: 5c6e 223b 0a09 2020 2020 6d79 2024 6669 \\n\";.. my $fi\n+000034b0: 6c65 6e61 6d65 203d 2022 2464 6972 546f lename = \"$dirTo\n+000034c0: 4368 6563 6b2f 2466 223b 0a09 2020 2020 Check/$f\";.. \n+000034d0: 6966 2028 6c65 6e67 7468 2824 6d64 3573 if (length($md5s\n+000034e0: 756d 2920 3d3d 2033 3229 0a09 2020 2020 um) == 32).. \n+000034f0: 7b0a 2370 7269 6e74 2022 2d31 2d24 636f {.#print \"-1-$co\n+00003500: 6d70 722d 5c6e 223b 0a09 0969 6620 2824 mpr-\\n\";...if ($\n+00003510: 636f 6d70 7220 6e65 2027 6227 290a 0909 compr ne 'b')...\n+00003520: 7b0a 0909 2020 2020 2466 696c 6573 4672 {... $filesFr\n+00003530: 6f6d 4d44 3543 6865 636b 5375 6d46 696c omMD5CheckSumFil\n+00003540: 657b 2466 7d20 3d20 323b 2023 206e 6f74 e{$f} = 2; # not\n+00003550: 2061 2062 6c6f 636b 6564 2066 696c 650a a blocked file.\n+00003560: 0909 2020 2020 6d79 2028 2469 6e6f 6465 .. my ($inode\n+00003570: 2c20 2473 697a 6542 6163 6b75 7029 203d , $sizeBackup) =\n+00003580: 2028 7374 6174 2824 6669 6c65 6e61 6d65 (stat($filename\n+00003590: 2929 5b31 2c37 5d3b 0a23 7072 696e 7420 ))[1,7];.#print \n+000035a0: 222d 322d 2069 6e6f 6465 203d 2024 696e \"-2- inode = $in\n+000035b0: 6f64 652c 2024 665c 6e22 3b0a 0909 2020 ode, $f\\n\";... \n+000035c0: 2020 6966 2028 2469 6e6f 6465 290a 0909 if ($inode)...\n+000035d0: 2020 2020 7b0a 2370 7269 6e74 2022 2d32 {.#print \"-2\n+000035e0: 2e35 2d20 696e 6f64 6573 203d 2022 2c20 .5- inodes = \", \n+000035f0: 6a6f 696e 2827 2027 2c20 6b65 7973 2025 join(' ', keys %\n+00003600: 7573 6564 496e 6f64 6573 292c 2022 5c6e usedInodes), \"\\n\n+00003610: 223b 0a09 0909 6966 2028 6578 6973 7473 \";....if (exists\n+00003620: 2024 7573 6564 496e 6f64 6573 7b24 696e $usedInodes{$in\n+00003630: 6f64 657d 290a 0909 097b 0a23 7072 696e ode})....{.#prin\n+00003640: 7420 222d 332d 5c6e 223b 0a09 0909 2020 t \"-3-\\n\";.... \n+00003650: 2020 2b2b 246c 696e 6b65 6446 696c 6573 ++$linkedFiles\n+00003660: 3b0a 0909 0920 2020 2024 6c69 6e6b 6564 ;.... $linked\n+00003670: 4669 6c65 7353 697a 6520 2b3d 2024 7369 FilesSize += $si\n+00003680: 7a65 4261 636b 7570 3b0a 0909 0920 2020 zeBackup;.... \n+00003690: 206e 6578 743b 0a09 0909 7d0a 0909 0924 next;....}....$\n+000036a0: 7573 6564 496e 6f64 6573 7b24 696e 6f64 usedInodes{$inod\n+000036b0: 657d 203d 2031 3b0a 0909 2020 2020 7d0a e} = 1;... }.\n+000036c0: 0909 7d0a 2370 7269 6e74 2022 2d33 2e35 ..}.#print \"-3.5\n+000036d0: 2d66 696c 6573 4672 6f6d 4d44 3543 6865 -filesFromMD5Che\n+000036e0: 636b 5375 6d46 696c 655c 7b24 665c 7d3d ckSumFile\\{$f\\}=\n+000036f0: 222c 2024 6669 6c65 7346 726f 6d4d 4435 \", $filesFromMD5\n+00003700: 4368 6563 6b53 756d 4669 6c65 7b24 667d CheckSumFile{$f}\n+00003710: 2c20 222d 5c6e 223b 0a09 0975 6e6c 6573 , \"-\\n\";...unles\n+00003720: 7320 282d 6520 2466 696c 656e 616d 6529 s (-e $filename)\n+00003730: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo\n+00003740: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00003750: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n+00003760: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => [\"file \n+00003770: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m\n+00003780: 6973 7369 6e67 225d 293b 0a23 7072 696e issing\"]);.#prin\n+00003790: 7420 222d 342d 5c6e 223b 0a09 0920 2020 t \"-4-\\n\";... \n+000037a0: 206e 6578 743b 0a09 097d 0a09 0969 6620 next;...}...if \n+000037b0: 2869 6e64 6578 2827 7563 6227 2c20 2463 (index('ucb', $c\n+000037c0: 6f6d 7072 2920 3c20 3029 0a09 097b 0a09 ompr) < 0)...{..\n+000037d0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+000037e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+000037f0: 272c 0a09 0909 0920 2027 2d70 7269 6e74 ',..... '-print\n+00003800: 2720 3d3e 0a09 0909 0920 205b 2275 6e6b ' =>..... [\"unk\n+00003810: 6e6f 776e 2076 616c 7565 2063 6f6d 7072 nown value compr\n+00003820: 203d 3c24 636f 6d70 723e 2061 7420 3c22 =<$compr> at <\"\n+00003830: 202e 0a09 0909 0920 2020 2224 6469 7254 ...... \"$dirT\n+00003840: 6f43 6865 636b 2f24 6368 6563 6b53 756d oCheck/$checkSum\n+00003850: 4669 6c65 3e2c 2066 696c 656e 616d 6520 File>, filename \n+00003860: 3d20 3c24 663e 225d 293b 0a23 7072 696e = <$f>\"]);.#prin\n+00003870: 7420 222d 352d 5c6e 223b 0a09 0920 2020 t \"-5-\\n\";... \n+00003880: 206e 6578 743b 0a09 097d 0a0a 2370 7269 next;...}..#pri\n+00003890: 6e74 2022 2d36 2d5c 6e22 3b0a 0909 6d79 nt \"-6-\\n\";...my\n+000038a0: 2024 746d 704e 616d 6520 3d20 263a 3a75 $tmpName = &::u\n+000038b0: 6e69 7146 696c 654e 616d 6528 222f 746d niqFileName(\"/tm\n+000038c0: 702f 7374 6f72 6542 6163 6b75 702d 626c p/storeBackup-bl\n+000038d0: 6f63 6b2e 2229 3b0a 0909 2470 6172 466f ock.\");...$parFo\n+000038e0: 726b 2d3e 6164 645f 6e6f 626c 6f63 6b28 rk->add_noblock(\n+000038f0: 272d 6675 6e63 7469 6f6e 2720 3d3e 205c '-function' => \\\n+00003900: 2663 6865 636b 4d44 352c 0a09 0909 0920 &checkMD5,..... \n+00003910: 2020 2020 2027 2d66 756e 6350 6172 2720 '-funcPar' \n+00003920: 3d3e 0a09 0909 0920 2020 2020 205b 2464 =>..... [$d\n+00003930: 6972 546f 4368 6563 6b2c 2024 6669 6c65 irToCheck, $file\n+00003940: 6e61 6d65 2c20 246d 6435 7375 6d2c 2024 name, $md5sum, $\n+00003950: 636f 6d70 722c 0a09 0909 0920 2020 2020 compr,..... \n+00003960: 2020 2470 6f73 7466 6978 2c20 2475 6e63 $postfix, $unc\n+00003970: 6f6d 7072 2c20 5c40 756e 636f 6d70 7250 ompr, \\@uncomprP\n+00003980: 6172 2c0a 0909 0909 2020 2020 2020 205c ar,..... \\\n+00003990: 2575 7365 6442 6c6f 636b 496e 6f64 6573 %usedBlockInodes\n+000039a0: 2c0a 0909 0909 2020 2020 2020 2031 302a ,..... 10*\n+000039b0: 3130 3234 2a2a 322c 2024 746d 704e 616d 1024**2, $tmpNam\n+000039c0: 652c 2024 7072 4c6f 675d 2c0a 0909 0909 e, $prLog],.....\n+000039d0: 2020 2020 2020 272d 696e 666f 2720 3d3e '-info' =>\n+000039e0: 205b 2474 6d70 4e61 6d65 2c20 2466 696c [$tmpName, $fil\n+000039f0: 656e 616d 655d 293b 0a09 2020 2020 7d0a ename]);.. }.\n+00003a00: 0920 2020 2065 6c73 6966 2028 246d 6435 . elsif ($md5\n+00003a10: 7375 6d20 6571 2027 6469 7227 290a 0920 sum eq 'dir').. \n+00003a20: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n+00003a30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00003a40: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n+00003a50: 7374 7227 203d 3e20 5b22 6469 7265 6374 str' => [\"direct\n+00003a60: 6f72 7920 3c24 6669 6c65 6e61 6d65 3e20 ory <$filename> \n+00003a70: 6973 206d 6973 7369 6e67 225d 290a 0909 is missing\"])...\n+00003a80: 2020 2020 756e 6c65 7373 202d 6520 2466 unless -e $f\n+00003a90: 696c 656e 616d 653b 0a09 0924 7072 4c6f ilename;...$prLo\n+00003aa0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00003ab0: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... \n+00003ac0: 2020 272d 7374 7227 203d 3e20 5b22 3c24 '-str' => [\"<$\n+00003ad0: 6669 6c65 6e61 6d65 3e20 6973 206e 6f74 filename> is not\n+00003ae0: 2061 2064 6972 6563 746f 7279 2122 5d29 a directory!\"])\n+00003af0: 0a09 0920 2020 2075 6e6c 6573 7320 2d64 ... unless -d\n+00003b00: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. \n+00003b10: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($\n+00003b20: 6d64 3573 756d 2065 7120 2773 796d 6c69 md5sum eq 'symli\n+00003b30: 6e6b 2729 0a09 2020 2020 7b0a 0909 2470 nk').. {...$p\n+00003b40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00003b50: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+00003b60: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>..\n+00003b70: 0909 2020 2020 2020 5b22 3c24 6669 6c65 .. [\"<$file\n+00003b80: 6e61 6d65 3e20 6973 206d 6973 7369 6e67 name> is missing\n+00003b90: 206f 7220 6e6f 7420 6120 7379 6d6c 6e6b or not a symlnk\n+00003ba0: 2122 5d29 0a09 0920 2020 2075 6e6c 6573 !\"])... unles\n+00003bb0: 7320 2d6c 2024 6669 6c65 6e61 6d65 3b0a s -l $filename;.\n+00003bc0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi\n+00003bd0: 6620 2824 6d64 3573 756d 2065 7120 2770 f ($md5sum eq 'p\n+00003be0: 6970 6527 290a 0920 2020 207b 0a09 0924 ipe').. {...$\n+00003bf0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00003c00: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+00003c10: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00003c20: 5b22 6e61 6d65 6420 7069 7065 203c 2466 [\"named pipe <$f\n+00003c30: 696c 656e 616d 6520 6973 206d 6973 7369 ilename is missi\n+00003c40: 6e67 3e22 5d29 0a09 0920 2020 2075 6e6c ng>\"])... unl\n+00003c50: 6573 7320 2d65 2024 6669 6c65 6e61 6d65 ess -e $filename\n+00003c60: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin\n+00003c70: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00003c80: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n+00003c90: 2720 3d3e 205b 223c 2466 696c 656e 616d ' => [\"<$filenam\n+00003ca0: 653e 2069 7320 6e6f 7420 6120 6e61 6d65 e> is not a name\n+00003cb0: 6420 7069 7065 2122 5d29 0a09 0920 2020 d pipe!\"])... \n+00003cc0: 2075 6e6c 6573 7320 2d70 2024 6669 6c65 unless -p $file\n+00003cd0: 6e61 6d65 3b0a 0920 2020 207d 0a09 2020 name;.. }.. \n+00003ce0: 2020 656c 7369 6620 2824 6d64 3573 756d elsif ($md5sum\n+00003cf0: 2065 7120 2770 6970 6527 290a 0920 2020 eq 'pipe').. \n+00003d00: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n+00003d10: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00003d20: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+00003d30: 7227 203d 3e20 5b22 6e61 6d65 6420 7069 r' => [\"named pi\n+00003d40: 7065 203c 2466 696c 656e 616d 6520 6973 pe <$filename is\n+00003d50: 206d 6973 7369 6e67 3e22 5d29 0a09 0920 missing>\"])... \n+00003d60: 2020 2075 6e6c 6573 7320 2d65 2024 6669 unless -e $fi\n+00003d70: 6c65 6e61 6d65 3b0a 0909 2470 724c 6f67 lename;...$prLog\n+00003d80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00003d90: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n+00003da0: 2027 2d73 7472 2720 3d3e 205b 223c 2466 '-str' => [\"<$f\n+00003db0: 696c 656e 616d 653e 2069 7320 6e6f 7420 ilename> is not \n+00003dc0: 6120 6e61 6d65 6420 7069 7065 2122 5d29 a named pipe!\"])\n+00003dd0: 0a09 0920 2020 2075 6e6c 6573 7320 2d70 ... unless -p\n+00003de0: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. \n+00003df0: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($\n+00003e00: 6d64 3573 756d 2065 7120 2773 6f63 6b65 md5sum eq 'socke\n+00003e10: 7427 290a 0920 2020 207b 0a09 0924 7072 t').. {...$pr\n+00003e20: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00003e30: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n+00003e40: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00003e50: 736f 636b 6574 203c 2466 696c 656e 616d socket <$filenam\n+00003e60: 653e 2069 7320 6d69 7373 696e 6722 5d29 e> is missing\"])\n+00003e70: 0a09 0920 2020 2075 6e6c 6573 7320 2d65 ... unless -e\n+00003e80: 2024 6669 6c65 6e61 6d65 3b0a 0909 2470 $filename;...$p\n+00003e90: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00003ea0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+00003eb0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00003ec0: 223c 2466 696c 656e 616d 653e 2069 7320 \"<$filename> is \n+00003ed0: 6e6f 7420 6120 736f 636b 6574 2122 5d29 not a socket!\"])\n+00003ee0: 0a09 0920 2020 2075 6e6c 6573 7320 2d53 ... unless -S\n+00003ef0: 2024 6669 6c65 6e61 6d65 3b0a 0920 2020 $filename;.. \n+00003f00: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($\n+00003f10: 6d64 3573 756d 2065 7120 2762 6c6f 636b md5sum eq 'block\n+00003f20: 6465 7627 290a 0920 2020 207b 0a09 0924 dev').. {...$\n+00003f30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00003f40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+00003f50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00003f60: 5b22 626c 6f63 6b20 6465 7669 6365 203c [\"block device <\n+00003f70: 2466 696c 656e 616d 653e 2069 7320 6d69 $filename> is mi\n+00003f80: 7373 696e 6722 5d29 0a09 0920 2020 2075 ssing\"])... u\n+00003f90: 6e6c 6573 7320 2d65 2024 6669 6c65 6e61 nless -e $filena\n+00003fa0: 6d65 3b0a 0909 2470 724c 6f67 2d3e 7072 me;...$prLog->pr\n+00003fb0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00003fc0: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n+00003fd0: 7472 2720 3d3e 205b 223c 2466 696c 656e tr' => [\"<$filen\n+00003fe0: 616d 653e 2069 7320 6e6f 7420 6120 626c ame> is not a bl\n+00003ff0: 6f63 6b20 6465 7669 6365 2122 5d29 0a09 ock device!\"])..\n+00004000: 0920 2020 2075 6e6c 6573 7320 2d62 2024 . unless -b $\n+00004010: 6669 6c65 6e61 6d65 3b0a 0920 2020 207d filename;.. }\n+00004020: 0a09 2020 2020 656c 7369 6620 2824 6d64 .. elsif ($md\n+00004030: 3573 756d 2065 7120 2763 6861 7264 6576 5sum eq 'chardev\n+00004040: 2729 0a09 2020 2020 7b0a 0909 2470 724c ').. {...$prL\n+00004050: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00004060: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n+00004070: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+00004080: 6861 7220 6465 7669 6365 203c 2466 696c har device <$fil\n+00004090: 656e 616d 653e 2069 7320 6d69 7373 696e ename> is missin\n+000040a0: 6722 5d29 0a09 0920 2020 2075 6e6c 6573 g\"])... unles\n+000040b0: 7320 2d65 2024 6669 6c65 6e61 6d65 3b0a s -e $filename;.\n+000040c0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+000040d0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+000040e0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+000040f0: 3d3e 205b 223c 2466 696c 656e 616d 653e => [\"<$filename>\n+00004100: 2069 7320 6e6f 7420 6120 6368 6172 2064 is not a char d\n+00004110: 6576 6963 6521 225d 290a 0909 2020 2020 evice!\"])... \n+00004120: 756e 6c65 7373 202d 6320 2466 696c 656e unless -c $filen\n+00004130: 616d 653b 0a09 2020 2020 7d0a 0a23 7072 ame;.. }..#pr\n+00004140: 696e 7420 222d 3130 2d24 665c 6e22 3b0a int \"-10-$f\\n\";.\n+00004150: 0920 2020 2024 7469 6e79 5363 6865 642d . $tinySched-\n+00004160: 3e72 6573 6574 2829 3b0a 097d 0a09 656c >reset();..}..el\n+00004170: 7365 0a09 7b0a 2370 7269 6e74 2022 2d31 se..{.#print \"-1\n+00004180: 312d 2072 6373 6620 3d20 756e 6465 665c 1- rcsf = undef\\\n+00004190: 6e22 3b0a 0920 2020 2024 7263 7366 203d n\";.. $rcsf =\n+000041a0: 2075 6e64 6566 3b0a 097d 0a23 7072 696e undef;..}.#prin\n+000041b0: 7420 222d 3130 2d5c 6e22 3b0a 2020 2020 t \"-10-\\n\";. \n+000041c0: 7d0a 0a20 2020 2023 2323 2323 2323 2323 }.. #########\n+000041d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000041e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000041f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00004200: 2323 230a 2020 2020 2474 696e 7953 6368 ###. $tinySch\n+00004210: 6564 2d3e 7761 6974 2829 3b0a 0a20 2020 ed->wait();.. \n+00004220: 2024 7061 7246 6f72 6b54 6f44 6f20 3d20 $parForkToDo = \n+00004230: 2470 6172 466f 726b 2d3e 6765 744e 6f55 $parFork->getNoU\n+00004240: 7365 6445 6e74 7269 6573 2829 3b0a 2370 sedEntries();.#p\n+00004250: 7269 6e74 2022 3220 7061 7246 6f72 6b54 rint \"2 parForkT\n+00004260: 6f44 6f20 3d20 2470 6172 466f 726b 546f oDo = $parForkTo\n+00004270: 446f 5c6e 223b 0a7d 2020 2020 2023 2065 Do\\n\";.} # e\n+00004280: 6e64 206f 6620 676c 6f62 616c 2077 6869 nd of global whi\n+00004290: 6c65 206c 6f6f 7020 6f76 6572 2061 6c6c le loop over all\n+000042a0: 206a 6f62 730a 0a23 7072 696e 7420 222d jobs..#print \"-\n+000042b0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d45 4e44 -------------END\n+000042c0: 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 3b0a 2309 ---------\\n\";.#.\n+000042d0: 2020 2020 6d79 2024 666d 3b0a 2309 2020 my $fm;.#. \n+000042e0: 2020 666f 7265 6163 6820 2466 6d20 286b foreach $fm (k\n+000042f0: 6579 7320 2566 696c 6573 4672 6f6d 4d44 eys %filesFromMD\n+00004300: 3543 6865 636b 5375 6d46 696c 6529 0a23 5CheckSumFile).#\n+00004310: 0920 2020 207b 0a23 7072 696e 7420 2223 . {.#print \"#\n+00004320: 2323 2464 6972 546f 4368 6563 6b23 2324 ##$dirToCheck##$\n+00004330: 666d 2323 2322 2c0a 2309 0924 6669 6c65 fm###\",.#..$file\n+00004340: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum\n+00004350: 4669 6c65 7b24 666d 7d2c 2022 2323 235c File{$fm}, \"###\\\n+00004360: 6e22 3b0a 2309 2020 2020 7d0a 0a23 2663 n\";.#. }..#&c\n+00004370: 6865 636b 416c 6c46 696c 6573 2824 6469 heckAllFiles($di\n+00004380: 7254 6f43 6865 636b 2c20 5c25 6669 6c65 rToCheck, \\%file\n+00004390: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum\n+000043a0: 4669 6c65 2c0a 2309 2020 2020 2020 2024 File,.#. $\n+000043b0: 7072 4c6f 6729 0a23 2020 2020 6966 2025 prLog).# if %\n+000043c0: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec\n+000043d0: 6b53 756d 4669 6c65 3b0a 0a69 6620 2824 kSumFile;..if ($\n+000043e0: 7665 7262 6f73 6529 0a7b 0a20 2020 2026 verbose).{. &\n+000043f0: 7072 696e 7453 7461 7428 2470 724c 6f67 printStat($prLog\n+00004400: 2c20 2727 2c20 2463 6865 636b 6564 4669 , '', $checkedFi\n+00004410: 6c65 732c 2024 6368 6563 6b65 6446 696c les, $checkedFil\n+00004420: 6573 5369 7a65 2c0a 0920 2020 2020 2020 esSize,.. \n+00004430: 246c 696e 6b65 6446 696c 6573 2c20 246c $linkedFiles, $l\n+00004440: 696e 6b65 6446 696c 6573 5369 7a65 293b inkedFilesSize);\n+00004450: 0a0a 2020 2020 2463 6865 636b 6564 4669 .. $checkedFi\n+00004460: 6c65 7341 6c6c 202b 3d20 2463 6865 636b lesAll += $check\n+00004470: 6564 4669 6c65 733b 0a20 2020 2024 6368 edFiles;. $ch\n+00004480: 6563 6b65 6446 696c 6573 5369 7a65 416c eckedFilesSizeAl\n+00004490: 6c20 2b3d 2024 6368 6563 6b65 6446 696c l += $checkedFil\n+000044a0: 6573 5369 7a65 3b0a 2020 2020 246c 696e esSize;. $lin\n+000044b0: 6b65 6446 696c 6573 416c 6c20 2b3d 2024 kedFilesAll += $\n+000044c0: 6c69 6e6b 6564 4669 6c65 733b 0a20 2020 linkedFiles;. \n+000044d0: 2024 6c69 6e6b 6564 4669 6c65 7353 697a $linkedFilesSiz\n+000044e0: 6541 6c6c 202b 3d20 246c 696e 6b65 6446 eAll += $linkedF\n+000044f0: 696c 6573 5369 7a65 3b0a 2020 2020 2670 ilesSize;. &p\n+00004500: 7269 6e74 5374 6174 2824 7072 4c6f 672c rintStat($prLog,\n+00004510: 2027 6f76 6572 616c 6c27 2c20 2463 6865 'overall', $che\n+00004520: 636b 6564 4669 6c65 7341 6c6c 2c20 2463 ckedFilesAll, $c\n+00004530: 6865 636b 6564 4669 6c65 7353 697a 6541 heckedFilesSizeA\n+00004540: 6c6c 2c0a 0920 2020 2020 2020 246c 696e ll,.. $lin\n+00004550: 6b65 6446 696c 6573 416c 6c2c 2024 6c69 kedFilesAll, $li\n+00004560: 6e6b 6564 4669 6c65 7353 697a 6541 6c6c nkedFilesSizeAll\n+00004570: 293b 0a7d 0a0a 6d79 2024 656e 6320 3d20 );.}..my $enc = \n+00004580: 2470 724c 6f67 2d3e 656e 636f 756e 7465 $prLog->encounte\n+00004590: 7265 6428 272d 6b69 6e64 2720 3d3e 2027 red('-kind' => '\n+000045a0: 5727 293b 0a6d 7920 2453 203d 2024 656e W');.my $S = $en\n+000045b0: 6320 3e20 3120 3f20 2753 2720 3a20 2727 c > 1 ? 'S' : ''\n+000045c0: 3b0a 6966 2028 2465 6e63 290a 7b0a 2020 ;.if ($enc).{. \n+000045d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+000045e0: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+000045f0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00004600: 2d2d 2024 656e 6320 5741 524e 494e 4724 -- $enc WARNING$\n+00004610: 5320 4f43 4355 5252 4544 2044 5552 494e S OCCURRED DURIN\n+00004620: 4720 5448 4520 4348 4543 4b21 202d 2d22 G THE CHECK! --\"\n+00004630: 5d29 0a7d 0a65 6c73 650a 7b0a 2020 2020 ]).}.else.{. \n+00004640: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00004650: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00004660: 2020 272d 7374 7227 203d 3e20 5b22 2d2d '-str' => [\"--\n+00004670: 206e 6f20 5741 524e 494e 4753 204f 4343 no WARNINGS OCC\n+00004680: 5552 5245 4420 4455 5249 4e47 2054 4845 URRED DURING THE\n+00004690: 2043 4845 434b 2120 2d2d 225d 293b 0a7d CHECK! --\"]);.}\n+000046a0: 0a0a 2465 6e63 203d 2024 7072 4c6f 672d ..$enc = $prLog-\n+000046b0: 3e65 6e63 6f75 6e74 6572 6564 2827 2d6b >encountered('-k\n+000046c0: 696e 6427 203d 3e20 2745 2729 3b0a 2453 ind' => 'E');.$S\n+000046d0: 203d 2024 656e 6320 3e20 3120 3f20 2753 = $enc > 1 ? 'S\n+000046e0: 2720 3a20 2727 3b0a 6966 2028 2465 6e63 ' : '';.if ($enc\n+000046f0: 290a 7b0a 2020 2020 2470 724c 6f67 2d3e ).{. $prLog->\n+00004700: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00004710: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str'\n+00004720: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => [\"-- $enc ER\n+00004730: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D\n+00004740: 5552 494e 4720 5448 4520 4348 4543 4b21 URING THE CHECK!\n+00004750: 202d 2d22 5d29 3b0a 7d0a 656c 7365 0a7b --\"]);.}.else.{\n+00004760: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00004770: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00004780: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00004790: 205b 222d 2d20 6e6f 2045 5252 4f52 5320 [\"-- no ERRORS \n+000047a0: 4f43 4355 5252 4544 2044 5552 494e 4720 OCCURRED DURING \n+000047b0: 5448 4520 4348 4543 4b21 202d 2d22 5d29 THE CHECK! --\"])\n+000047c0: 3b0a 7d0a 0a0a 6966 2028 2470 724c 6f67 ;.}...if ($prLog\n+000047d0: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('-\n+000047e0: 6b69 6e64 2720 3d3e 2022 4522 2929 0a7b kind' => \"E\")).{\n+000047f0: 0a20 2020 2065 7869 7420 313b 0a7d 0a65 . exit 1;.}.e\n+00004800: 6c73 650a 7b0a 2020 2020 6578 6974 2030 lse.{. exit 0\n+00004810: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+00004820: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00004830: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00004840: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00004850: 2323 0a23 2063 6865 636b 7320 6361 6c63 ##.# checks calc\n+00004860: 756c 6174 6564 206d 6435 2073 756d 2061 ulated md5 sum a\n+00004870: 6761 696e 7374 2073 746f 7265 6420 6f6e gainst stored on\n+00004880: 6528 7329 0a23 2074 6869 7320 6675 6e63 e(s).# this func\n+00004890: 7469 6f6e 2069 7320 6361 6c6c 6564 2066 tion is called f\n+000048a0: 6f72 2061 6c6c 2066 696c 6573 2028 626c or all files (bl\n+000048b0: 6f63 6b65 6420 616e 6420 6e6f 6e2d 626c ocked and non-bl\n+000048c0: 6f63 6b65 640a 7375 6220 6368 6563 6b4d ocked.sub checkM\n+000048d0: 4435 0a7b 0a20 2020 206d 7920 2824 6469 D5.{. my ($di\n+000048e0: 7254 6f43 6865 636b 2c20 2466 2c20 246d rToCheck, $f, $m\n+000048f0: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $\n+00004900: 706f 7374 6669 782c 2024 756e 636f 6d70 postfix, $uncomp\n+00004910: 722c 2024 756e 636f 6d70 7250 6172 2c0a r, $uncomprPar,.\n+00004920: 0924 7573 6564 426c 6f63 6b49 6e6f 6465 .$usedBlockInode\n+00004930: 732c 2024 626c 6f63 6b53 697a 652c 2024 s, $blockSize, $\n+00004940: 746d 704e 616d 652c 2024 7072 4c6f 6729 tmpName, $prLog)\n+00004950: 203d 2040 5f3b 0a0a 2020 2020 6d79 2028 = @_;.. my (\n+00004960: 2569 6e6f 6465 326d 6435 293b 2020 2023 %inode2md5); #\n+00004970: 2073 746f 7265 2063 616c 6375 6c61 7465 store calculate\n+00004980: 6420 6d64 3520 7375 6d20 6f66 206e 6577 d md5 sum of new\n+00004990: 2069 6e6f 6465 730a 0a20 2020 2023 2073 inodes.. # s\n+000049a0: 7461 7469 7374 6963 616c 2064 6174 6120 tatistical data \n+000049b0: 7065 7220 6368 6563 6b4d 4435 0a20 2020 per checkMD5. \n+000049c0: 206d 7920 2463 6865 636b 6564 4669 6c65 my $checkedFile\n+000049d0: 7320 3d20 303b 0a20 2020 206d 7920 2463 s = 0;. my $c\n+000049e0: 6865 636b 6564 4669 6c65 7353 697a 6520 heckedFilesSize \n+000049f0: 3d20 303b 0a20 2020 206d 7920 246c 696e = 0;. my $lin\n+00004a00: 6b65 6446 696c 6573 203d 2030 3b0a 2020 kedFiles = 0;. \n+00004a10: 2020 6d79 2024 6c69 6e6b 6564 4669 6c65 my $linkedFile\n+00004a20: 7353 697a 6520 3d20 303b 0a0a 2020 2020 sSize = 0;.. \n+00004a30: 6c6f 6361 6c20 2a4f 5554 3b0a 2020 2020 local *OUT;. \n+00004a40: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, \"> $tm\n+00004a50: 704e 616d 6522 2920 6f72 0a09 2470 724c pName\") or..$prL\n+00004a60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00004a70: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... \n+00004a80: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n+00004a90: 6e6e 6f74 206f 7065 6e20 3c24 746d 704e nnot open <$tmpN\n+00004aa0: 616d 653e 225d 2c0a 0909 2020 2020 2020 ame>\"],... \n+00004ab0: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL\n+00004ac0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 2c0a E__, __LINE__],.\n+00004ad0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n+00004ae0: 3d3e 2031 293b 0a0a 2370 7269 6e74 2022 => 1);..#print \"\n+00004af0: 6368 6563 6b4d 4435 202d 2d2d 2d2d 2d2d checkMD5 -------\n+00004b00: 2d2d 2d2d 2d2d 2466 2d2d 2d2d 2d2d 2d2d ------$f--------\n+00004b10: 2d2d 2c20 246d 6435 7375 6d2c 2022 2c20 --, $md5sum, \", \n+00004b20: 6c65 6e67 7468 2824 6d64 3573 756d 292c length($md5sum),\n+00004b30: 2022 2c20 636f 6d70 723d 2463 6f6d 7072 \", compr=$compr\n+00004b40: 5c6e 223b 0a20 2020 206d 7920 246e 7245 \\n\";. my $nrE\n+00004b50: 7272 6f72 7320 3d20 303b 0a20 2020 2069 rrors = 0;. i\n+00004b60: 6620 286c 656e 6774 6828 246d 6435 7375 f (length($md5su\n+00004b70: 6d29 203d 3d20 3332 290a 2020 2020 7b0a m) == 32). {.\n+00004b80: 0969 6620 2824 636f 6d70 7220 6571 2027 .if ($compr eq '\n+00004b90: 7527 206f 7220 2463 6f6d 7072 2065 7120 u' or $compr eq \n+00004ba0: 2763 2729 0a09 7b0a 0920 2020 206d 7920 'c')..{.. my \n+00004bb0: 246d 6435 416c 6c20 3d20 4469 6765 7374 $md5All = Digest\n+00004bc0: 3a3a 4d44 352d 3e6e 6577 2829 3b0a 0920 ::MD5->new();.. \n+00004bd0: 2020 206c 6f63 616c 202a 4649 4c45 3b0a local *FILE;.\n+00004be0: 0920 2020 206d 7920 2466 696c 6549 6e20 . my $fileIn \n+00004bf0: 3d20 756e 6465 663b 0a09 2020 2020 756e = undef;.. un\n+00004c00: 6c65 7373 2028 2d65 2024 6629 0a09 2020 less (-e $f).. \n+00004c10: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+00004c20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00004c30: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n+00004c40: 7472 2720 3d3e 205b 2266 696c 6520 3c24 tr' => [\"file <$\n+00004c50: 663e 2069 7320 6d69 7373 696e 6722 5d29 f> is missing\"])\n+00004c60: 3b0a 0909 2b2b 246e 7245 7272 6f72 733b ;...++$nrErrors;\n+00004c70: 0a09 0970 7269 6e74 204f 5554 2022 6572 ...print OUT \"er\n+00004c80: 726f 7273 2024 6e72 4572 726f 7273 5c6e rors $nrErrors\\n\n+00004c90: 223b 0a09 0972 6574 7572 6e20 313b 0a09 \";...return 1;..\n+00004ca0: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($\n+00004cb0: 636f 6d70 7220 6571 2027 7527 290a 0920 compr eq 'u').. \n+00004cc0: 2020 207b 0a09 0975 6e6c 6573 7320 2873 {...unless (s\n+00004cd0: 7973 6f70 656e 2846 494c 452c 2024 662c ysopen(FILE, $f,\n+00004ce0: 204f 5f52 444f 4e4c 5929 290a 0909 7b0a O_RDONLY))...{.\n+00004cf0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+00004d00: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00004d10: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str'\n+00004d20: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => [\"cannot ope\n+00004d30: 6e20 3c24 663e 225d 2c0a 0909 0909 2020 n <$f>\"],..... \n+00004d40: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL\n+00004d50: 455f 5f2c 205f 5f4c 494e 455f 5f5d 293b E__, __LINE__]);\n+00004d60: 0a09 0920 2020 202b 2b24 6e72 4572 726f ... ++$nrErro\n+00004d70: 7273 3b0a 0909 2020 2020 7072 696e 7420 rs;... print \n+00004d80: 4f55 5420 2265 7272 6f72 7320 246e 7245 OUT \"errors $nrE\n+00004d90: 7272 6f72 735c 6e22 3b0a 0909 2020 2020 rrors\\n\";... \n+00004da0: 7265 7475 726e 2031 3b0a 0909 7d0a 0920 return 1;...}.. \n+00004db0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n+00004dc0: 2020 2020 7b0a 0909 2466 696c 6549 6e20 {...$fileIn \n+00004dd0: 3d0a 0909 2020 2020 7069 7065 4672 6f6d =... pipeFrom\n+00004de0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec\n+00004df0: 2720 3d3e 2024 756e 636f 6d70 722c 0a09 ' => $uncompr,..\n+00004e00: 0909 0920 2020 2020 2027 2d70 6172 616d ... '-param\n+00004e10: 2720 3d3e 205c 4075 6e63 6f6d 7072 5061 ' => \\@uncomprPa\n+00004e20: 722c 0a09 0909 0920 2020 2020 2027 2d73 r,..... '-s\n+00004e30: 7464 696e 2720 3d3e 2024 662c 0a09 0909 tdin' => $f,....\n+00004e40: 0920 2020 2020 2027 2d6f 7574 5261 6e64 . '-outRand\n+00004e50: 6f6d 2720 3d3e 2027 2f74 6d70 2f73 7462 om' => '/tmp/stb\n+00004e60: 7550 6970 6546 726f 6d31 302d 272c 0a09 uPipeFrom10-',..\n+00004e70: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog\n+00004e80: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0920 ' => $prLog);.. \n+00004e90: 2020 207d 0a0a 0920 2020 206d 7920 2824 }... my ($\n+00004ea0: 696e 6f64 652c 2024 7369 7a65 2920 3d20 inode, $size) = \n+00004eb0: 2873 7461 7428 2466 2929 5b31 2c37 5d3b (stat($f))[1,7];\n+00004ec0: 0a09 2020 2020 2b2b 2463 6865 636b 6564 .. ++$checked\n+00004ed0: 4669 6c65 733b 0a09 2020 2020 2463 6865 Files;.. $che\n+00004ee0: 636b 6564 4669 6c65 7353 697a 6520 2b3d ckedFilesSize +=\n+00004ef0: 2024 7369 7a65 3b0a 0920 2020 206d 7920 $size;.. my \n+00004f00: 2462 7566 6665 723b 0a09 2020 2020 7768 $buffer;.. wh\n+00004f10: 696c 6520 2824 6669 6c65 496e 203f 2024 ile ($fileIn ? $\n+00004f20: 6669 6c65 496e 2d3e 7379 7372 6561 6428 fileIn->sysread(\n+00004f30: 5c24 6275 6666 6572 2c20 2462 6c6f 636b \\$buffer, $block\n+00004f40: 5369 7a65 2920 3a0a 0909 2020 2073 7973 Size) :... sys\n+00004f50: 7265 6164 2846 494c 452c 2024 6275 6666 read(FILE, $buff\n+00004f60: 6572 2c20 2462 6c6f 636b 5369 7a65 2929 er, $blockSize))\n+00004f70: 0a09 2020 2020 7b0a 0909 246d 6435 416c .. {...$md5Al\n+00004f80: 6c2d 3e61 6464 2824 6275 6666 6572 293b l->add($buffer);\n+00004f90: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if\n+00004fa0: 2028 246d 6435 7375 6d20 6e65 2024 6d64 ($md5sum ne $md\n+00004fb0: 3541 6c6c 2d3e 6865 7864 6967 6573 7428 5All->hexdigest(\n+00004fc0: 2929 0a09 2020 2020 7b0a 0909 7072 696e )).. {...prin\n+00004fd0: 7420 4f55 5420 2263 6f72 7275 7074 2024 t OUT \"corrupt $\n+00004fe0: 696e 6f64 6520 2466 5c6e 223b 0a09 2020 inode $f\\n\";.. \n+00004ff0: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. \n+00005000: 2020 207b 0a09 0923 2072 6561 6479 0a09 {...# ready..\n+00005010: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($\n+00005020: 6669 6c65 496e 290a 0920 2020 207b 0a09 fileIn).. {..\n+00005030: 0924 6669 6c65 496e 2d3e 636c 6f73 6528 .$fileIn->close(\n+00005040: 293b 0a09 0924 6669 6c65 496e 203d 2075 );...$fileIn = u\n+00005050: 6e64 6566 3b0a 0920 2020 207d 0a09 2020 ndef;.. }.. \n+00005060: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {...\n+00005070: 636c 6f73 6528 4649 4c45 293b 0a09 2020 close(FILE);.. \n+00005080: 2020 7d0a 097d 2020 2020 2020 2020 2020 }..} \n+00005090: 2020 2020 2020 2020 2020 2020 2023 2069 # i\n+000050a0: 6620 2824 636f 6d70 7220 6571 2027 7527 f ($compr eq 'u'\n+000050b0: 206f 7220 2463 6f6d 7072 2065 7120 2763 or $compr eq 'c\n+000050c0: 2729 0a09 656c 7369 6620 2824 636f 6d70 ')..elsif ($comp\n+000050d0: 7220 6571 2027 6227 290a 097b 0a23 7072 r eq 'b')..{.#pr\n+000050e0: 696e 7420 2273 7461 7274 2063 6865 636b int \"start check\n+000050f0: 696e 6720 626c 6f63 6b65 6420 6669 6c65 ing blocked file\n+00005100: 2024 665c 6e22 3b0a 0920 2020 2023 2072 $f\\n\";.. # r\n+00005110: 6561 6420 616c 6c20 6669 6c65 7320 696e ead all files in\n+00005120: 2064 6972 6563 746f 7279 0a09 2020 2020 directory.. \n+00005130: 6c6f 6361 6c20 2a44 4952 3b0a 0920 2020 local *DIR;.. \n+00005140: 2075 6e6c 6573 7320 286f 7065 6e64 6972 unless (opendir\n+00005150: 2844 4952 2c20 2466 2929 0a09 2020 2020 (DIR, $f)).. \n+00005160: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin\n+00005170: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00005180: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n+00005190: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => [\"cannot op\n+000051a0: 656e 203c 2466 3e22 5d2c 0a09 0909 2020 en <$f>\"],.... \n+000051b0: 2020 2020 272d 6164 6427 203d 3e20 5b5f '-add' => [_\n+000051c0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_\n+000051d0: 5f5d 293b 0a09 092b 2b24 6e72 4572 726f _]);...++$nrErro\n+000051e0: 7273 3b0a 0909 7072 696e 7420 4f55 5420 rs;...print OUT \n+000051f0: 2265 7272 6f72 7320 246e 7245 7272 6f72 \"errors $nrError\n+00005200: 735c 6e22 3b0a 0909 7265 7475 726e 2031 s\\n\";...return 1\n+00005210: 3b0a 0920 2020 207d 0a09 2020 2020 6d79 ;.. }.. my\n+00005220: 2028 2465 6e74 7279 2c20 4065 6e74 7269 ($entry, @entri\n+00005230: 6573 293b 0a09 2020 2020 7768 696c 6520 es);.. while \n+00005240: 2824 656e 7472 7920 3d20 7265 6164 6469 ($entry = readdi\n+00005250: 7220 4449 5229 2020 2320 6f6e 6520 656e r DIR) # one en\n+00005260: 7472 7920 7065 7220 696e 6f64 650a 0920 try per inode.. \n+00005270: 2020 207b 0a09 096e 6578 7420 756e 6c65 {...next unle\n+00005280: 7373 2024 656e 7472 7920 3d7e 202f 5c41 ss $entry =~ /\\A\n+00005290: 5c64 2f3b 0a09 090a 0909 7075 7368 2040 \\d/;......push @\n+000052a0: 656e 7472 6965 732c 2024 656e 7472 793b entries, $entry;\n+000052b0: 0a09 2020 2020 7d0a 0920 2020 2063 6c6f .. }.. clo\n+000052c0: 7365 2844 4952 293b 0a09 2020 2020 6d79 se(DIR);.. my\n+000052d0: 2024 6669 6c65 496e 203d 0a09 0970 6970 $fileIn =...pip\n+000052e0: 6546 726f 6d46 6f72 6b2d 3e6e 6577 2827 eFromFork->new('\n+000052f0: 2d65 7865 6327 203d 3e20 2762 7a69 7032 -exec' => 'bzip2\n+00005300: 272c 0a09 0909 0920 2027 2d70 6172 616d ',..... '-param\n+00005310: 2720 3d3e 205b 272d 6427 5d2c 0a09 0909 ' => ['-d'],....\n+00005320: 0920 2027 2d73 7464 696e 2720 3d3e 2022 . '-stdin' => \"\n+00005330: 2466 2f2e 6d64 3542 6c6f 636b 4368 6563 $f/.md5BlockChec\n+00005340: 6b53 756d 732e 627a 3222 2c0a 0909 0909 kSums.bz2\",.....\n+00005350: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' =\n+00005360: 3e20 272f 746d 702f 7374 6275 5069 7065 > '/tmp/stbuPipe\n+00005370: 4672 6f6d 3131 2d27 2c0a 0909 0909 2020 From11-',..... \n+00005380: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+00005390: 6f67 293b 0a0a 0920 2020 206d 7920 246c og);... my $l\n+000053a0: 3b0a 0920 2020 2077 6869 6c65 2028 246c ;.. while ($l\n+000053b0: 203d 2024 6669 6c65 496e 2d3e 7265 6164 = $fileIn->read\n+000053c0: 2829 290a 0920 2020 207b 0a09 0963 686f ()).. {...cho\n+000053d0: 6d70 2024 6c3b 0a09 096d 7920 2824 6c5f mp $l;...my ($l_\n+000053e0: 6d64 352c 2024 6c5f 636f 6d70 722c 2024 md5, $l_compr, $\n+000053f0: 6c5f 662c 2024 6e29 3b0a 0909 246e 203d l_f, $n);...$n =\n+00005400: 2028 246c 5f6d 6435 2c20 246c 5f63 6f6d ($l_md5, $l_com\n+00005410: 7072 2c20 246c 5f66 2920 3d20 7370 6c69 pr, $l_f) = spli\n+00005420: 7428 2f5c 732f 2c20 246c 2c20 3329 3b0a t(/\\s/, $l, 3);.\n+00005430: 0909 6966 2028 246e 2021 3d20 3329 0a09 ..if ($n != 3)..\n+00005440: 097b 0a09 0920 2020 202b 2b24 6e72 4572 .{... ++$nrEr\n+00005450: 726f 7273 3b0a 0909 2020 2020 7072 696e rors;... prin\n+00005460: 7420 4f55 5420 2265 7272 6f72 7320 246e t OUT \"errors $n\n+00005470: 7245 7272 6f72 735c 6e22 3b0a 0909 2020 rErrors\\n\";... \n+00005480: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00005490: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+000054a0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n+000054b0: 0909 0909 2020 5b22 7374 7261 6e67 6520 .... [\"strange \n+000054c0: 6c69 6e65 2069 6e20 3c24 662f 2e6d 6435 line in <$f/.md5\n+000054d0: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b\n+000054e0: 7a32 3e20 2220 2e0a 0909 0909 2020 2022 z2> \" ...... \"\n+000054f0: 696e 206c 696e 6520 2220 2e20 2466 696c in line \" . $fil\n+00005500: 6549 6e2d 3e67 6574 2827 2d77 6861 7427 eIn->get('-what'\n+00005510: 203d 3e20 276c 696e 654e 7227 2920 2e0a => 'lineNr') ..\n+00005520: 0909 0909 2020 2022 3a22 2c20 225c 743c .... \":\", \"\\t<\n+00005530: 246c 3e22 5d2c 0a09 0909 0920 2027 2d65 $l>\"],..... '-e\n+00005540: 7869 7427 203d 3e20 3129 0a09 097d 0a09 xit' => 1)...}..\n+00005550: 0969 6620 282d 6520 2224 6469 7254 6f43 .if (-e \"$dirToC\n+00005560: 6865 636b 2f24 6c5f 6622 290a 0909 7b0a heck/$l_f\")...{.\n+00005570: 0909 2020 2020 6d79 2024 696e 6f64 6520 .. my $inode \n+00005580: 3d20 2873 7461 7428 2224 6469 7254 6f43 = (stat(\"$dirToC\n+00005590: 6865 636b 2f24 6c5f 6622 2929 5b31 5d3b heck/$l_f\"))[1];\n+000055a0: 0a09 0920 2020 2024 696e 6f64 6532 6d64 ... $inode2md\n+000055b0: 357b 2469 6e6f 6465 7d20 3d20 246c 5f6d 5{$inode} = $l_m\n+000055c0: 6435 3b0a 2370 7269 6e74 2022 246c 5f66 d5;.#print \"$l_f\n+000055d0: 3a20 2469 6e6f 6465 202d 3e20 246c 5f6d : $inode -> $l_m\n+000055e0: 6435 5c6e 223b 0a09 097d 0a09 0965 6c73 d5\\n\";...}...els\n+000055f0: 650a 0909 7b0a 0909 2020 2020 2470 724c e...{... $prL\n+00005600: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00005610: 2720 3d3e 2027 4527 2c0a 0909 0909 2020 ' => 'E',..... \n+00005620: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => [\"file\n+00005630: 203c 246c 5f66 3e20 6973 206d 6973 7369 <$l_f> is missi\n+00005640: 6e67 225d 293b 0a09 097d 0a09 2020 2020 ng\"]);...}.. \n+00005650: 7d0a 0920 2020 2024 6669 6c65 496e 2d3e }.. $fileIn->\n+00005660: 636c 6f73 6528 293b 0a09 2020 2020 2466 close();.. $f\n+00005670: 696c 6549 6e20 3d20 756e 6465 663b 0a0a ileIn = undef;..\n+00005680: 0920 2020 206d 7920 246d 6435 416c 6c20 . my $md5All \n+00005690: 3d20 4469 6765 7374 3a3a 4d44 352d 3e6e = Digest::MD5->n\n+000056a0: 6577 2829 3b0a 0920 2020 2066 6f72 6561 ew();.. forea\n+000056b0: 6368 2024 656e 7472 7920 2873 6f72 7420 ch $entry (sort \n+000056c0: 4065 6e74 7269 6573 2920 2023 206c 6f6f @entries) # loo\n+000056d0: 7020 6f76 6572 2061 6c6c 2066 696c 6573 p over all files\n+000056e0: 2069 6e20 6261 636b 7570 0a09 2020 2020 in backup.. \n+000056f0: 7b0a 0909 6d79 2028 2469 6e6f 6465 2c20 {...my ($inode, \n+00005700: 2473 697a 6529 203d 2028 7374 6174 2822 $size) = (stat(\"\n+00005710: 2466 2f24 656e 7472 7922 2929 5b31 2c37 $f/$entry\"))[1,7\n+00005720: 5d3b 0a0a 0909 6d79 2024 6361 6c63 4d44 ];....my $calcMD\n+00005730: 3520 3d20 303b 0a09 0969 6620 2865 7869 5 = 0;...if (exi\n+00005740: 7374 7320 2424 7573 6564 426c 6f63 6b49 sts $$usedBlockI\n+00005750: 6e6f 6465 737b 2469 6e6f 6465 7d29 0a09 nodes{$inode})..\n+00005760: 097b 0a23 7072 696e 7420 2269 6e6f 6465 .{.#print \"inode\n+00005770: 2061 6c72 6561 6479 2063 616c 6375 6c61 already calcula\n+00005780: 7465 643a 2024 696e 6f64 655c 6e22 3b0a ted: $inode\\n\";.\n+00005790: 0909 2020 2020 2b2b 246c 696e 6b65 6446 .. ++$linkedF\n+000057a0: 696c 6573 3b0a 0909 2020 2020 246c 696e iles;... $lin\n+000057b0: 6b65 6446 696c 6573 5369 7a65 202b 3d20 kedFilesSize += \n+000057c0: 2473 697a 653b 0a09 097d 0a09 0965 6c73 $size;...}...els\n+000057d0: 650a 0909 7b0a 0909 2020 2020 2b2b 2463 e...{... ++$c\n+000057e0: 6865 636b 6564 4669 6c65 733b 0a09 0920 heckedFiles;... \n+000057f0: 2020 2024 6368 6563 6b65 6446 696c 6573 $checkedFiles\n+00005800: 5369 7a65 202b 3d20 2473 697a 653b 0a09 Size += $size;..\n+00005810: 0920 2020 2024 6361 6c63 4d44 3520 3d20 . $calcMD5 = \n+00005820: 313b 0a09 097d 0a09 0924 2475 7365 6442 1;...}...$$usedB\n+00005830: 6c6f 636b 496e 6f64 6573 7b24 696e 6f64 lockInodes{$inod\n+00005840: 657d 203d 2024 696e 6f64 653b 0a0a 0909 e} = $inode;....\n+00005850: 6c6f 6361 6c20 2a46 524f 4d3b 0a09 096d local *FROM;...m\n+00005860: 7920 2466 696c 6549 6e20 3d20 756e 6465 y $fileIn = unde\n+00005870: 663b 0a09 0969 6620 2824 656e 7472 7920 f;...if ($entry \n+00005880: 3d7e 202f 2470 6f73 7466 6978 5c5a 2f29 =~ /$postfix\\Z/)\n+00005890: 2020 2020 2320 636f 6d70 7265 7373 6564 # compressed\n+000058a0: 2062 6c6f 636b 0a09 097b 0a09 0920 2020 block...{... \n+000058b0: 2024 6669 6c65 496e 203d 0a09 0909 7069 $fileIn =....pi\n+000058c0: 7065 4672 6f6d 466f 726b 2d3e 6e65 7728 peFromFork->new(\n+000058d0: 272d 6578 6563 2720 3d3e 2024 756e 636f '-exec' => $unco\n+000058e0: 6d70 722c 0a09 0909 0909 2020 272d 7061 mpr,...... '-pa\n+000058f0: 7261 6d27 203d 3e20 5c40 756e 636f 6d70 ram' => \\@uncomp\n+00005900: 7250 6172 2c0a 0909 0909 0920 2027 2d73 rPar,...... '-s\n+00005910: 7464 696e 2720 3d3e 2022 2466 2f24 656e tdin' => \"$f/$en\n+00005920: 7472 7922 2c0a 0909 0909 0920 2027 2d6f try\",...... '-o\n+00005930: 7574 5261 6e64 6f6d 2720 3d3e 2027 2f74 utRandom' => '/t\n+00005940: 6d70 2f73 7462 7550 6970 6546 726f 6d31 mp/stbuPipeFrom1\n+00005950: 322d 272c 0a09 0909 0909 2020 272d 7072 2-',...... '-pr\n+00005960: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n+00005970: 0a09 097d 0a09 0965 6c73 6520 2020 2020 ...}...else \n+00005980: 2020 2020 2020 2320 626c 6f63 6b20 6e6f # block no\n+00005990: 7420 636f 6d70 7265 7373 6564 0a09 097b t compressed...{\n+000059a0: 0a09 0920 2020 2075 6e6c 6573 7320 2873 ... unless (s\n+000059b0: 7973 6f70 656e 2846 524f 4d2c 2022 2466 ysopen(FROM, \"$f\n+000059c0: 2f24 656e 7472 7922 2c20 4f5f 5244 4f4e /$entry\", O_RDON\n+000059d0: 4c59 2929 0a09 0920 2020 207b 0a09 0909 LY))... {....\n+000059e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000059f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00005a00: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00005a10: 3e20 5b22 6361 6e6e 6f74 2072 6561 6420 > [\"cannot read \n+00005a20: 3c24 662f 2465 6e74 7279 3e22 5d29 3b0a <$f/$entry>\"]);.\n+00005a30: 0909 092b 2b24 6e72 4572 726f 7273 3b0a ...++$nrErrors;.\n+00005a40: 0909 0970 7269 6e74 204f 5554 2022 6572 ...print OUT \"er\n+00005a50: 726f 7273 2024 6e72 4572 726f 7273 5c6e rors $nrErrors\\n\n+00005a60: 223b 0a09 0909 7265 7475 726e 2031 3b0a \";....return 1;.\n+00005a70: 0909 2020 2020 7d0a 0909 7d0a 0909 6d79 .. }...}...my\n+00005a80: 2024 6275 6666 6572 3b0a 0909 6d79 2024 $buffer;...my $\n+00005a90: 6d64 3542 6c6f 636b 203d 2044 6967 6573 md5Block = Diges\n+00005aa0: 743a 3a4d 4435 2d3e 6e65 7728 2920 6966 t::MD5->new() if\n+00005ab0: 2024 6361 6c63 4d44 353b 0a09 0977 6869 $calcMD5;...whi\n+00005ac0: 6c65 2028 2466 696c 6549 6e20 3f20 2473 le ($fileIn ? $s\n+00005ad0: 697a 6520 3d20 2466 696c 6549 6e2d 3e73 ize = $fileIn->s\n+00005ae0: 7973 7265 6164 285c 2462 7566 6665 722c ysread(\\$buffer,\n+00005af0: 2024 626c 6f63 6b53 697a 6529 203a 0a09 $blockSize) :..\n+00005b00: 0920 2020 2020 2020 7379 7372 6561 6428 . sysread(\n+00005b10: 4652 4f4d 2c20 2462 7566 6665 722c 2024 FROM, $buffer, $\n+00005b20: 626c 6f63 6b53 697a 6529 290a 0909 7b0a blockSize))...{.\n+00005b30: 0909 2020 2020 246d 6435 416c 6c2d 3e61 .. $md5All->a\n+00005b40: 6464 2824 6275 6666 6572 293b 0a09 0920 dd($buffer);... \n+00005b50: 2020 2024 6d64 3542 6c6f 636b 2d3e 6164 $md5Block->ad\n+00005b60: 6428 2462 7566 6665 7229 2069 6620 2463 d($buffer) if $c\n+00005b70: 616c 634d 4435 3b0a 0909 7d0a 0909 6966 alcMD5;...}...if\n+00005b80: 2028 2466 696c 6549 6e29 0a09 097b 0a09 ($fileIn)...{..\n+00005b90: 0920 2020 2024 6669 6c65 496e 2d3e 636c . $fileIn->cl\n+00005ba0: 6f73 6528 293b 0a09 0920 2020 2024 6669 ose();... $fi\n+00005bb0: 6c65 496e 203d 2075 6e64 6566 3b0a 0909 leIn = undef;...\n+00005bc0: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... \n+00005bd0: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);.\n+00005be0: 0909 7d0a 0a09 096d 7920 2464 6967 6573 ..}....my $diges\n+00005bf0: 7420 3d20 246d 6435 426c 6f63 6b2d 3e68 t = $md5Block->h\n+00005c00: 6578 6469 6765 7374 2829 2069 6620 2463 exdigest() if $c\n+00005c10: 616c 634d 4435 3b0a 2370 7269 6e74 2022 alcMD5;.#print \"\n+00005c20: 2466 2f24 656e 7472 793a 5c6e 223b 0a23 $f/$entry:\\n\";.#\n+00005c30: 7072 696e 7420 225c 7424 6469 6765 7374 print \"\\t$digest\n+00005c40: 203d 2064 6967 6573 745c 6e22 3b0a 2370 = digest\\n\";.#p\n+00005c50: 7269 6e74 2022 5c74 222c 2024 696e 6f64 rint \"\\t\", $inod\n+00005c60: 6532 6d64 357b 2469 6e6f 6465 7d2c 2022 e2md5{$inode}, \"\n+00005c70: 203d 2069 6e6f 6465 2028 2469 6e6f 6465 = inode ($inode\n+00005c80: 295c 2069 6620 2463 616c 634d 4435 3b6e )\\ if $calcMD5;n\n+00005c90: 223b 0a09 0969 6620 286e 6f74 2065 7869 \";...if (not exi\n+00005ca0: 7374 7320 2469 6e6f 6465 326d 6435 7b24 sts $inode2md5{$\n+00005cb0: 696e 6f64 657d 290a 0909 7b0a 0909 2020 inode})...{... \n+00005cc0: 2020 2b2b 246e 7245 7272 6f72 733b 0a09 ++$nrErrors;..\n+00005cd0: 0920 2020 2070 7269 6e74 204f 5554 2022 . print OUT \"\n+00005ce0: 6572 726f 7273 2024 6e72 4572 726f 7273 errors $nrErrors\n+00005cf0: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \\n\";... $prLo\n+00005d00: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00005d10: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n+00005d20: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n+00005d30: 223c 2466 2f24 656e 7472 793e 2069 7320 \"<$f/$entry> is \n+00005d40: 6d69 7373 696e 6720 696e 2022 202e 0a09 missing in \" ...\n+00005d50: 0909 0920 2020 223c 2466 2f2e 6d64 3542 ... \"<$f/.md5B\n+00005d60: 6c6f 636b 4368 6563 6b53 756d 732e 627a lockCheckSums.bz\n+00005d70: 323e 225d 293b 0a09 097d 0a09 0965 6c73 2>\"]);...}...els\n+00005d80: 6966 2028 2463 616c 634d 4435 2061 6e64 if ($calcMD5 and\n+00005d90: 2024 6469 6765 7374 206e 6520 2469 6e6f $digest ne $ino\n+00005da0: 6465 326d 6435 7b24 696e 6f64 657d 290a de2md5{$inode}).\n+00005db0: 0909 7b0a 0909 2020 2020 2b2b 246e 7245 ..{... ++$nrE\n+00005dc0: 7272 6f72 733b 0a09 0920 2020 2070 7269 rrors;... pri\n+00005dd0: 6e74 204f 5554 2022 6572 726f 7273 2024 nt OUT \"errors $\n+00005de0: 6e72 4572 726f 7273 5c6e 223b 0a09 0920 nrErrors\\n\";... \n+00005df0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00005e00: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00005e10: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n+00005e20: 0a09 0909 0920 205b 2263 616c 6375 6c61 ..... [\"calcula\n+00005e30: 7465 6420 6d64 3520 7375 6d20 6f66 203c ted md5 sum of <\n+00005e40: 2466 2f24 656e 7472 793e 2069 7320 2220 $f/$entry> is \" \n+00005e50: 2e0a 0909 0909 2020 2022 6469 6666 6572 ...... \"differ\n+00005e60: 656e 7420 6672 6f6d 2074 6865 206f 6e65 ent from the one\n+00005e70: 2069 6e20 2220 2e0a 0909 0909 2020 2022 in \" ...... \"\n+00005e80: 3c24 662f 2e6d 6435 426c 6f63 6b43 6865 <$f/.md5BlockChe\n+00005e90: 636b 5375 6d73 2e62 7a32 3e22 5d29 3b0a ckSums.bz2>\"]);.\n+00005ea0: 0909 7d0a 0920 2020 207d 0a0a 0920 2020 ..}.. }... \n+00005eb0: 2069 6620 2824 6d64 3573 756d 206e 6520 if ($md5sum ne \n+00005ec0: 246d 6435 416c 6c2d 3e68 6578 6469 6765 $md5All->hexdige\n+00005ed0: 7374 2829 290a 0920 2020 207b 0a09 096d st()).. {...m\n+00005ee0: 7920 2469 6e6f 6465 203d 2028 7374 6174 y $inode = (stat\n+00005ef0: 2824 6629 295b 315d 3b0a 0909 7072 696e ($f))[1];...prin\n+00005f00: 7420 4f55 5420 2263 6f72 7275 7074 2024 t OUT \"corrupt $\n+00005f10: 696e 6f64 6522 3b0a 0920 2020 207d 0a09 inode\";.. }..\n+00005f20: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {.\n+00005f30: 2370 7269 6e74 2022 656e 6420 6368 6563 #print \"end chec\n+00005f40: 6b69 6e67 2062 6c6f 636b 6564 2066 696c king blocked fil\n+00005f50: 6520 2466 5c6e 223b 0a09 0923 2072 6561 e $f\\n\";...# rea\n+00005f60: 6479 0a09 2020 2020 7d0a 2370 7269 6e74 dy.. }.#print\n+00005f70: 2022 6368 6563 6b65 6420 3c24 663e 5c6e \"checked <$f>\\n\n+00005f80: 223b 0a09 7d0a 2020 2020 7d0a 0a20 2020 \";..}. }.. \n+00005f90: 2070 7269 6e74 204f 5554 2022 6572 726f print OUT \"erro\n+00005fa0: 7273 2024 6e72 4572 726f 7273 5c6e 223b rs $nrErrors\\n\";\n+00005fb0: 0a20 2020 2070 7269 6e74 204f 5554 2022 . print OUT \"\n+00005fc0: 6368 6563 6b65 6446 696c 6573 2024 6368 checkedFiles $ch\n+00005fd0: 6563 6b65 6446 696c 6573 5c6e 223b 0a20 eckedFiles\\n\";. \n+00005fe0: 2020 2070 7269 6e74 204f 5554 2022 6368 print OUT \"ch\n+00005ff0: 6563 6b65 6446 696c 6573 5369 7a65 2024 eckedFilesSize $\n+00006000: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize\n+00006010: 5c6e 223b 0a20 2020 2070 7269 6e74 204f \\n\";. print O\n+00006020: 5554 2022 6c69 6e6b 6564 4669 6c65 7320 UT \"linkedFiles \n+00006030: 246c 696e 6b65 6446 696c 6573 5c6e 223b $linkedFiles\\n\";\n+00006040: 0a20 2020 2070 7269 6e74 204f 5554 2022 . print OUT \"\n+00006050: 6c69 6e6b 6564 4669 6c65 7353 697a 6520 linkedFilesSize \n+00006060: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize\n+00006070: 5c6e 223b 0a0a 2020 2020 7072 696e 7420 \\n\";.. print \n+00006080: 4f55 5420 2263 616c 6365 6449 6e6f 6465 OUT \"calcedInode\n+00006090: 735c 6e22 3b0a 2020 2020 6d79 2024 693b s\\n\";. my $i;\n+000060a0: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i \n+000060b0: 286b 6579 7320 2569 6e6f 6465 326d 6435 (keys %inode2md5\n+000060c0: 290a 2020 2020 7b0a 0970 7269 6e74 204f ). {..print O\n+000060d0: 5554 2022 2469 5c6e 223b 0a20 2020 207d UT \"$i\\n\";. }\n+000060e0: 0a0a 2020 2020 636c 6f73 6528 4f55 5429 .. close(OUT)\n+000060f0: 3b0a 2020 2020 7265 7475 726e 2030 3b0a ;. return 0;.\n+00006100: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n+00006110: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006120: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006130: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006140: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all \n+00006150: 6669 6c65 7320 696e 2024 6469 7220 6172 files in $dir ar\n+00006160: 6520 696e 2074 6865 2068 6173 680a 2320 e in the hash.# \n+00006170: 616e 6420 6966 2066 696c 6573 2069 6e20 and if files in \n+00006180: 2464 6972 2061 7265 206d 6973 7369 6e67 $dir are missing\n+00006190: 2069 6e20 7468 6520 6861 7368 0a73 7562 in the hash.sub\n+000061a0: 2063 6865 636b 416c 6c46 696c 6573 0a7b checkAllFiles.{\n+000061b0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $\n+000061c0: 7265 6c46 696c 6573 2c20 2470 724c 6f67 relFiles, $prLog\n+000061d0: 2920 3d20 405f 3b0a 0a23 7072 696e 7420 ) = @_;..#print \n+000061e0: 222d 312d 206b 6579 7320 7265 6c46 696c \"-1- keys relFil\n+000061f0: 6573 3d5c 6e5c 7422 2c20 6a6f 696e 2822 es=\\n\\t\", join(\"\n+00006200: 5c6e 5c74 222c 2073 6f72 7420 6b65 7973 \\n\\t\", sort keys\n+00006210: 2025 2472 656c 4669 6c65 7329 2c20 225c %$relFiles), \"\\\n+00006220: 6e22 3b0a 2020 2020 265f 6368 6563 6b41 n\";. &_checkA\n+00006230: 6c6c 4669 6c65 7328 6c65 6e67 7468 2824 llFiles(length($\n+00006240: 6469 7229 2b31 2c20 2464 6972 2c20 2472 dir)+1, $dir, $r\n+00006250: 656c 4669 6c65 732c 2024 7072 4c6f 6729 elFiles, $prLog)\n+00006260: 3b0a 7d0a 0a0a 2323 2323 2323 2323 2323 ;.}...##########\n+00006270: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006280: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006290: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000062a0: 2323 0a73 7562 205f 6368 6563 6b41 6c6c ##.sub _checkAll\n+000062b0: 4669 6c65 730a 7b0a 2020 2020 6d79 2028 Files.{. my (\n+000062c0: 246c 656e 6774 682c 2024 6469 722c 2024 $length, $dir, $\n+000062d0: 7265 6c46 696c 6573 2c20 2470 724c 6f67 relFiles, $prLog\n+000062e0: 2920 3d20 405f 3b0a 0a23 7072 696e 7420 ) = @_;..#print \n+000062f0: 222d 322d 205f 6368 6563 6b41 6c6c 4669 \"-2- _checkAllFi\n+00006300: 6c65 733a 2024 6c65 6e67 7468 2c20 2464 les: $length, $d\n+00006310: 6972 5c6e 223b 0a0a 2020 2020 6d79 2024 ir\\n\";.. my $\n+00006320: 7265 6c20 3d20 756e 6465 663b 0a20 2020 rel = undef;. \n+00006330: 2069 6620 286c 656e 6774 6828 2464 6972 if (length($dir\n+00006340: 2920 3e20 246c 656e 6774 6829 0a20 2020 ) > $length). \n+00006350: 207b 0a09 2472 656c 203d 2073 7562 7374 {..$rel = subst\n+00006360: 7228 2464 6972 2c20 246c 656e 6774 6829 r($dir, $length)\n+00006370: 3b0a 2370 7269 6e74 2022 5c74 2d33 2d20 ;.#print \"\\t-3- \n+00006380: 7365 7431 2072 656c 203c 2472 656c 3e5c set1 rel <$rel>\\\n+00006390: 6e22 3b0a 2020 2020 7d0a 2020 2020 6966 n\";. }. if\n+000063a0: 2028 2472 656c 290a 2020 2020 7b0a 2370 ($rel). {.#p\n+000063b0: 7269 6e74 2022 5c74 2d34 2d20 6368 6563 rint \"\\t-4- chec\n+000063c0: 6b31 2d3e 203c 2472 656c 3e5c 6e22 3b0a k1-> <$rel>\\n\";.\n+000063d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+000063e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+000063f0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00006400: 205b 223c 2472 656c 3e20 6973 206e 6f74 [\"<$rel> is not\n+00006410: 206c 6973 7465 6420 696e 202e 6d64 3543 listed in .md5C\n+00006420: 6865 636b 5375 6d20 2831 2922 5d29 0a09 heckSum (1)\"])..\n+00006430: 2020 2020 756e 6c65 7373 2065 7869 7374 unless exist\n+00006440: 7320 2424 7265 6c46 696c 6573 7b24 7265 s $$relFiles{$re\n+00006450: 6c7d 3b0a 2020 2020 7d0a 0a20 2020 206c l};. }.. l\n+00006460: 6f63 616c 202a 4449 523b 0a20 2020 2075 ocal *DIR;. u\n+00006470: 6e6c 6573 7320 286f 7065 6e64 6972 2844 nless (opendir(D\n+00006480: 4952 2c20 2464 6972 2929 0a20 2020 207b IR, $dir)). {\n+00006490: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+000064a0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+000064b0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+000064c0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e64 > [\"cannot opend\n+000064d0: 6972 203c 2464 6972 3e22 5d29 3b0a 0972 ir <$dir>\"]);..r\n+000064e0: 6574 7572 6e3b 0a20 2020 207d 0a20 2020 eturn;. }. \n+000064f0: 206d 7920 2465 3b0a 2020 2020 7768 696c my $e;. whil\n+00006500: 6520 2824 6520 3d20 7265 6164 6469 7220 e ($e = readdir \n+00006510: 4449 5229 0a20 2020 207b 0a09 6e65 7874 DIR). {..next\n+00006520: 2069 6620 2824 6520 6571 2027 2e27 206f if ($e eq '.' o\n+00006530: 7220 2465 2065 7120 272e 2e27 293b 0a09 r $e eq '..');..\n+00006540: 6d79 2024 6465 203d 2022 2464 6972 2f24 my $de = \"$dir/$\n+00006550: 6522 3b0a 2370 7269 6e74 2022 5c74 2d35 e\";.#print \"\\t-5\n+00006560: 2d20 6465 203c 2464 653e 5c6e 223b 0a0a - de <$de>\\n\";..\n+00006570: 2320 646f 6e27 7420 6361 7265 2061 626f # don't care abo\n+00006580: 7574 2062 6c6f 636b 6564 2066 696c 6573 ut blocked files\n+00006590: 2c20 7468 6579 2061 7265 2061 6c72 6561 , they are alrea\n+000065a0: 6479 2063 6865 636b 0a23 2069 6e20 7375 dy check.# in su\n+000065b0: 6220 6368 6563 6b4d 4435 0a0a 0924 7265 b checkMD5...$re\n+000065c0: 6c20 3d20 7375 6273 7472 2824 6465 2c20 l = substr($de, \n+000065d0: 246c 656e 6774 6829 3b0a 2370 7269 6e74 $length);.#print\n+000065e0: 2022 5c74 2d31 302d 2073 6574 3220 7265 \"\\t-10- set2 re\n+000065f0: 6c20 3c24 7265 6c3e 5c6e 223b 0a09 2470 l <$rel>\\n\";..$p\n+00006600: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00006610: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n+00006620: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00006630: 3c24 7265 6c3e 2069 7320 6e6f 7420 6c69 <$rel> is not li\n+00006640: 7374 6564 2069 6e20 2e6d 6435 4368 6563 sted in .md5Chec\n+00006650: 6b53 756d 2028 3229 225d 290a 0920 2020 kSum (2)\"]).. \n+00006660: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $\n+00006670: 2472 656c 4669 6c65 737b 2472 656c 7d3b $relFiles{$rel};\n+00006680: 0a20 2020 207d 0a20 2020 2063 6c6f 7365 . }. close\n+00006690: 6469 7228 4449 5229 206f 720a 0924 7072 dir(DIR) or..$pr\n+000066a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000066b0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... \n+000066c0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+000066d0: 616e 6e6f 7420 636c 6f73 6564 6972 203c annot closedir <\n+000066e0: 2464 6972 3e22 5d29 3b0a 7d0a 0a0a 2323 $dir>\"]);.}...##\n+000066f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006700: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006710: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00006720: 0a23 2070 6163 6b61 6765 2070 7269 6e74 .# package print\n+00006730: 4c6f 674d 756c 7469 706c 6520 6e65 6564 LogMultiple need\n+00006740: 7320 7468 6973 2066 756e 6374 696f 6e0a s this function.\n+00006750: 7375 6220 636c 6561 6e75 700a 7b0a 2020 sub cleanup.{. \n+00006760: 2020 6d79 2024 7369 676e 616d 6520 3d20 my $signame = \n+00006770: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e\n+00006780: 7869 7420 3d20 2873 6869 6674 2829 207c xit = (shift() |\n+00006790: 7c20 3129 3b0a 0a20 2020 2065 7869 7420 | 1);.. exit \n+000067a0: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...#####\n+000067b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000067c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000067d0: 2323 2323 2323 2323 2323 2323 230a 2320 #############.# \n+000067e0: 7072 696e 7420 7374 6174 6973 7469 6361 print statistica\n+000067f0: 6c20 6461 7461 0a73 7562 2070 7269 6e74 l data.sub print\n+00006800: 5374 6174 0a7b 0a20 2020 206d 7920 2824 Stat.{. my ($\n+00006810: 7072 4c6f 672c 2024 7465 7874 2c20 2463 prLog, $text, $c\n+00006820: 6865 636b 6564 4669 6c65 732c 2024 6368 heckedFiles, $ch\n+00006830: 6563 6b65 6446 696c 6573 5369 7a65 2c0a eckedFilesSize,.\n+00006840: 0924 6c69 6e6b 6564 4669 6c65 732c 2024 .$linkedFiles, $\n+00006850: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize)\n+00006860: 203d 2028 405f 293b 0a0a 2020 2020 6d79 = (@_);.. my\n+00006870: 2024 6368 6563 6b50 203d 2030 3b0a 0a20 $checkP = 0;.. \n+00006880: 2020 2024 6368 6563 6b50 203d 2069 6e74 $checkP = int\n+00006890: 2824 6368 6563 6b65 6446 696c 6573 5369 ($checkedFilesSi\n+000068a0: 7a65 202a 2031 3030 3030 202f 0a09 0920 ze * 10000 /... \n+000068b0: 2028 2463 6865 636b 6564 4669 6c65 7353 ($checkedFilesS\n+000068c0: 697a 6520 2b20 246c 696e 6b65 6446 696c ize + $linkedFil\n+000068d0: 6573 5369 7a65 2920 2b2e 3529 202f 2031 esSize) +.5) / 1\n+000068e0: 3030 0a09 0920 2069 6620 2824 6368 6563 00... if ($chec\n+000068f0: 6b65 6446 696c 6573 5369 7a65 202b 2024 kedFilesSize + $\n+00006900: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize)\n+00006910: 203e 2030 3b0a 0a20 2020 2024 7072 4c6f > 0;.. $prLo\n+00006920: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00006930: 203d 3e20 2753 272c 0a09 0920 2027 2d73 => 'S',... '-s\n+00006940: 7472 2720 3d3e 205b 2224 7465 7874 2063 tr' => [\"$text c\n+00006950: 6865 636b 6564 2024 6368 6563 6b65 6446 hecked $checkedF\n+00006960: 696c 6573 2066 696c 6573 2028 2220 2e0a iles files (\" ..\n+00006970: 0909 0920 2020 2020 2826 3a3a 6875 6d61 ... (&::huma\n+00006980: 6e52 6561 6461 626c 6528 2463 6865 636b nReadable($check\n+00006990: 6564 4669 6c65 7353 697a 6529 295b 305d edFilesSize))[0]\n+000069a0: 202e 0a09 0909 2020 2020 2022 2920 2822 ..... \") (\"\n+000069b0: 202e 2024 6368 6563 6b50 202e 2022 2529 . $checkP . \"%)\n+000069c0: 222c 0a09 0909 2020 2020 2022 2474 6578 \",.... \"$tex\n+000069d0: 7420 6c69 6e6b 6564 2066 696c 6573 2077 t linked files w\n+000069e0: 6572 6520 246c 696e 6b65 6446 696c 6573 ere $linkedFiles\n+000069f0: 2028 2220 2e20 0a09 0909 2020 2020 2028 (\" . .... (\n+00006a00: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable\n+00006a10: 2824 6c69 6e6b 6564 4669 6c65 7353 697a ($linkedFilesSiz\n+00006a20: 6529 295b 305d 202e 2022 2922 5d29 3b0a e))[0] . \")\"]);.\n+00006a30: 7d0a 0a }..\n"}, {"source1": "./usr/bin/storeBackupConvertBackup", "source2": "./usr/bin/storeBackupConvertBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,688 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7043 6f6e 7665 7274 4261 636b 7570 0a pConvertBackup.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 322c 3230 3034 2c32 3031 3229 0a23 2020 2,2004,2012).# \n+00000050: 2020 2020 2020 2020 2020 2020 2020 2068 h\n+00000060: 6a63 6c61 6573 4077 6562 2e64 650a 2320 jclaes@web.de.# \n+00000070: 2020 0a23 2020 2054 6869 7320 7072 6f67 .# This prog\n+00000080: 7261 6d20 6973 2066 7265 6520 736f 6674 ram is free soft\n+00000090: 7761 7265 3a20 796f 7520 6361 6e20 7265 ware: you can re\n+000000a0: 6469 7374 7269 6275 7465 2069 7420 616e distribute it an\n+000000b0: 642f 6f72 206d 6f64 6966 790a 2320 2020 d/or modify.# \n+000000c0: 6974 2075 6e64 6572 2074 6865 2074 6572 it under the ter\n+000000d0: 6d73 206f 6620 7468 6520 474e 5520 4765 ms of the GNU Ge\n+000000e0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n+000000f0: 656e 7365 2061 7320 7075 626c 6973 6865 ense as publishe\n+00000100: 6420 6279 0a23 2020 2074 6865 2046 7265 d by.# the Fre\n+00000110: 6520 536f 6674 7761 7265 2046 6f75 6e64 e Software Found\n+00000120: 6174 696f 6e2c 2065 6974 6865 7220 7665 ation, either ve\n+00000130: 7273 696f 6e20 3320 6f66 2074 6865 204c rsion 3 of the L\n+00000140: 6963 656e 7365 2c20 6f72 0a23 2020 2028 icense, or.# (\n+00000150: 6174 2079 6f75 7220 6f70 7469 6f6e 2920 at your option) \n+00000160: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio\n+00000170: 6e2e 0a0a 2320 2020 5468 6973 2070 726f n...# This pro\n+00000180: 6772 616d 2069 7320 6469 7374 7269 6275 gram is distribu\n+00000190: 7465 6420 696e 2074 6865 2068 6f70 6520 ted in the hope \n+000001a0: 7468 6174 2069 7420 7769 6c6c 2062 6520 that it will be \n+000001b0: 7573 6566 756c 2c0a 2320 2020 6275 7420 useful,.# but \n+000001c0: 5749 5448 4f55 5420 414e 5920 5741 5252 WITHOUT ANY WARR\n+000001d0: 414e 5459 3b20 7769 7468 6f75 7420 6576 ANTY; without ev\n+000001e0: 656e 2074 6865 2069 6d70 6c69 6564 2077 en the implied w\n+000001f0: 6172 7261 6e74 7920 6f66 0a23 2020 204d arranty of.# M\n+00000200: 4552 4348 414e 5441 4249 4c49 5459 206f ERCHANTABILITY o\n+00000210: 7220 4649 544e 4553 5320 464f 5220 4120 r FITNESS FOR A \n+00000220: 5041 5254 4943 554c 4152 2050 5552 504f PARTICULAR PURPO\n+00000230: 5345 2e20 2053 6565 2074 6865 0a23 2020 SE. See the.# \n+00000240: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub\n+00000250: 6c69 6320 4c69 6365 6e73 6520 666f 7220 lic License for \n+00000260: 6d6f 7265 2064 6574 6169 6c73 2e0a 230a more details..#.\n+00000270: 2320 2020 596f 7520 7368 6f75 6c64 2068 # You should h\n+00000280: 6176 6520 7265 6365 6976 6564 2061 2063 ave received a c\n+00000290: 6f70 7920 6f66 2074 6865 2047 4e55 2047 opy of the GNU G\n+000002a0: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li\n+000002b0: 6365 6e73 650a 2320 2020 616c 6f6e 6720 cense.# along \n+000002c0: 7769 7468 2074 6869 7320 7072 6f67 7261 with this progra\n+000002d0: 6d2e 2020 4966 206e 6f74 2c20 7365 6520 m. If not, see \n+000002e0: 3c68 7474 703a 2f2f 7777 772e 676e 752e ..\n+00000300: 230a 0a6d 7920 2456 4552 5349 4f4e 203d #..my $VERSION =\n+00000310: 2027 2449 643a 2073 746f 7265 4261 636b '$Id: storeBack\n+00000320: 7570 436f 6e76 6572 7442 6163 6b75 702e upConvertBackup.\n+00000330: 706c 2033 3632 2032 3031 322d 3031 2d32 pl 362 2012-01-2\n+00000340: 3820 3232 3a31 313a 3133 5a20 686a 6320 8 22:11:13Z hjc \n+00000350: 2420 273b 0a70 7573 6820 4056 4552 5349 $ ';.push @VERSI\n+00000360: 4f4e 2c20 2456 4552 5349 4f4e 3b0a 0a0a ON, $VERSION;...\n+00000370: 7573 6520 494f 3a3a 4861 6e64 6c65 3b0a use IO::Handle;.\n+00000380: 7573 6520 7374 7269 6374 3b0a 0a73 7562 use strict;..sub\n+00000390: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m\n+000003a0: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift;\n+000003b0: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;..\n+000003c0: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date\n+000003d0: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym\n+000003e0: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang\n+000003f0: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au\n+00000400: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if (\n+00000410: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {.\n+00000420: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file\n+00000430: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li\n+00000440: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f\n+00000450: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if (\n+00000460: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0,\n+00000470: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne \"/\").. \n+00000480: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/\n+00000490: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\\/]+$/$link/;.\n+000004a0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n+000004b0: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file \n+000004c0: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }.\n+000004d0: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil\n+000004e0: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD\n+000004f0: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil\n+00000500: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = \"/$file\";. \n+00000510: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+00000520: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR\n+00000530: 2022 3c24 6669 6c65 3e20 646f 6573 206e \"<$file> does n\n+00000540: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\\n\";..e\n+00000550: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. \n+00000560: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= \"/../l\n+00000570: 6962 223b 2020 2020 2020 2020 2020 2023 ib\"; #\n+00000580: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib\n+00000590: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my\n+000005a0: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin\n+000005b0: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp\n+000005c0: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if\n+000005d0: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). \n+000005e0: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir \n+000005f0: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c\n+00000600: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch\n+00000610: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r\n+00000620: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil\n+00000630: 6544 6972 2822 2461 6273 4469 7224 6669 eDir(\"$absDir$fi\n+00000640: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le\"));. }. \n+00000650: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri\n+00000660: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR \"<$dir\n+00000670: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist\n+00000680: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\\n\";. \n+00000690: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF\n+000006a0: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my \n+000006b0: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;..\n+000006c0: 2020 2020 7265 7475 726e 2028 272e 272c return ('.',\n+000006d0: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless (\n+000006e0: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\\//); \n+000006f0: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache\n+00000700: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. \n+00000710: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file\n+00000720: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^(\n+00000730: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\\/(.*)$/s;. \n+00000740: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if \n+00000750: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); \n+00000760: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000770: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z.\n+00000780: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. \n+00000790: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $\n+000007a0: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re\n+000007b0: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib\n+000007c0: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @\n+000007d0: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, \"$req\";..re\n+000007e0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p\n+000007f0: 6c27 3b0a 0a6d 7920 246d 6435 4368 6563 l';..my $md5Chec\n+00000800: 6b53 756d 7320 3d20 272e 6d64 3543 6865 kSums = '.md5Che\n+00000810: 636b 5375 6d73 273b 0a0a 3d68 6561 6431 ckSums';..=head1\n+00000820: 204e 414d 450a 0a73 746f 7265 4261 636b NAME..storeBack\n+00000830: 7570 436f 6e76 6572 7442 6163 6b75 702e upConvertBackup.\n+00000840: 706c 202d 2063 6f6e 7665 7274 7320 6f6c pl - converts ol\n+00000850: 6420 6261 636b 7570 7320 6372 6561 7465 d backups create\n+00000860: 6420 7769 7468 2073 746f 7265 4261 636b d with storeBack\n+00000870: 7570 2e70 6c20 746f 2074 6865 206e 6577 up.pl to the new\n+00000880: 6573 7420 7665 7273 696f 6e2c 0a0a 3d68 est version,..=h\n+00000890: 6561 6431 2053 594e 4f50 5349 530a 0a73 ead1 SYNOPSIS..s\n+000008a0: 746f 7265 4261 636b 7570 436f 6e76 6572 toreBackupConver\n+000008b0: 7442 6163 6b75 702e 706c 2073 746f 7265 tBackup.pl store\n+000008c0: 4261 636b 7570 2d64 6972 0a0a 3d68 6561 Backup-dir..=hea\n+000008d0: 6431 2044 4553 4352 4950 5449 4f4e 0a0a d1 DESCRIPTION..\n+000008e0: 5468 6973 2070 726f 6772 616d 2063 6f6e This program con\n+000008f0: 7665 7274 7320 6f6c 6420 6261 636b 7570 verts old backup\n+00000900: 7320 6372 6561 7465 6420 7769 7468 2073 s created with s\n+00000910: 746f 7265 4261 636b 7570 2e70 6c20 746f toreBackup.pl to\n+00000920: 2074 6865 206e 6577 6573 7420 7665 7273 the newest vers\n+00000930: 696f 6e2c 0a63 7572 7265 6e74 6c79 2076 ion,.currently v\n+00000940: 6572 7369 6f6e 2031 2e33 2e0a 796f 7520 ersion 1.3..you \n+00000950: 6361 6e20 7365 6520 7468 6520 7665 7273 can see the vers\n+00000960: 696f 6e20 6279 2074 7970 696e 673a 0a0a ion by typing:..\n+00000970: 6865 6164 202d 3120 3c20 2e2e 2e3c 7374 head -1 < .../da\n+00000990: 7465 5f74 696d 652f 2e6d 6435 4368 6563 te_time/.md5Chec\n+000009a0: 6b53 756d 732e 696e 666f 0a0a 6f72 2069 kSums.info..or i\n+000009b0: 6620 7468 6174 2066 696c 6520 646f 6573 f that file does\n+000009c0: 206e 6f74 2065 7869 7374 3a0a 0a62 7a69 not exist:..bzi\n+000009d0: 7032 202d 6420 3c20 2e2e 2e3c 7374 6f72 p2 -d < .../date\n+000009f0: 5f74 696d 652f 2e6d 6435 4368 6563 6b53 _time/.md5CheckS\n+00000a00: 756d 732e 627a 3220 7c20 6865 6164 202d ums.bz2 | head -\n+00000a10: 310a 0a28 6966 2079 6f75 2064 6f20 6e6f 1..(if you do no\n+00000a20: 7420 7365 6520 2723 2323 7665 7273 696f t see '###versio\n+00000a30: 6e3d 2e2e 2e27 2c20 6974 2069 7320 7665 n=...', it is ve\n+00000a40: 7273 696f 6e20 312e 300a 0a3d 6865 6164 rsion 1.0..=head\n+00000a50: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop\n+00000a60: 7972 6967 6874 2028 6329 2032 3030 322d yright (c) 2002-\n+00000a70: 3230 3038 2062 7920 4865 696e 7a2d 4a6f 2008 by Heinz-Jo\n+00000a80: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R\n+00000a90: 4541 444d 4529 0a50 7562 6c69 7368 6564 EADME).Published\n+00000aa0: 2075 6e64 6572 2074 6865 2047 4e55 2047 under the GNU G\n+00000ab0: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li\n+00000ac0: 6365 6e73 6520 7633 206f 7220 616e 7920 cense v3 or any \n+00000ad0: 6c61 7465 7220 7665 7273 696f 6e0a 0a3d later version..=\n+00000ae0: 6375 740a 0a6d 7920 2448 656c 7020 3d20 cut..my $Help = \n+00000af0: 6a6f 696e 2827 272c 2067 7265 7028 212f join('', grep(!/\n+00000b00: 5e5c 732a 242f 2c20 6070 6f64 3274 6578 ^\\s*$/, `pod2tex\n+00000b10: 7420 2430 6029 293b 0a24 4865 6c70 203d t $0`));.$Help =\n+00000b20: 2022 6361 6e6e 6f74 2066 696e 6420 706f \"cannot find po\n+00000b30: 6432 7465 7874 2c20 7365 6520 646f 6375 d2text, see docu\n+00000b40: 6d65 6e74 6174 696f 6e20 666f 7220 6465 mentation for de\n+00000b50: 7461 696c 735c 6e22 0a20 2020 2075 6e6c tails\\n\". unl\n+00000b60: 6573 7320 2448 656c 703b 0a0a 2670 7269 ess $Help;..&pri\n+00000b70: 6e74 5665 7273 696f 6e73 285c 4041 5247 ntVersions(\\@ARG\n+00000b80: 562c 2027 2d56 2729 3b0a 0a64 6965 2024 V, '-V');..die $\n+00000b90: 4865 6c70 2069 6620 2840 4152 4756 2021 Help if (@ARGV !\n+00000ba0: 3d20 3129 3b0a 0a6d 7920 2464 6972 203d = 1);..my $dir =\n+00000bb0: 2073 6869 6674 2040 4152 4756 3b0a 6469 shift @ARGV;.di\n+00000bc0: 6520 2264 6972 6563 746f 7279 203c 2464 e \"directory <$d\n+00000bd0: 6972 3e20 646f 6573 206e 6f74 2065 7869 ir> does not exi\n+00000be0: 7374 2220 756e 6c65 7373 2028 2d64 2024 st\" unless (-d $\n+00000bf0: 6469 7229 3b0a 0a6f 7065 6e64 6972 2844 dir);..opendir(D\n+00000c00: 4952 2c20 2464 6972 2920 6f72 0a20 2020 IR, $dir) or. \n+00000c10: 2064 6965 2022 6361 6e6e 6f74 206f 7065 die \"cannot ope\n+00000c20: 6e20 3c24 6469 723e 223b 0a6d 7920 2824 n <$dir>\";.my ($\n+00000c30: 656e 7472 792c 2040 656e 7472 6965 7329 entry, @entries)\n+00000c40: 3b0a 7768 696c 6520 2824 656e 7472 7920 ;.while ($entry \n+00000c50: 3d20 7265 6164 6469 7220 4449 5229 0a7b = readdir DIR).{\n+00000c60: 0a20 2020 206d 7920 2465 203d 2022 2464 . my $e = \"$d\n+00000c70: 6972 2f24 656e 7472 7922 3b0a 2020 2020 ir/$entry\";. \n+00000c80: 6e65 7874 2069 6620 282d 6c20 2465 2061 next if (-l $e a\n+00000c90: 6e64 206e 6f74 202d 6420 2465 293b 0a20 nd not -d $e);. \n+00000ca0: 2020 2070 7573 6820 4065 6e74 7269 6573 push @entries\n+00000cb0: 2c20 2465 6e74 7279 3b0a 7d0a 636c 6f73 , $entry;.}.clos\n+00000cc0: 6564 6972 2844 4952 293b 0a0a 6d79 2024 edir(DIR);..my $\n+00000cd0: 666c 6167 203d 2030 3b0a 6d79 2024 6920 flag = 0;.my $i \n+00000ce0: 3d20 313b 0a66 6f72 6561 6368 2024 656e = 1;.foreach $en\n+00000cf0: 7472 7920 2873 6f72 7420 4065 6e74 7269 try (sort @entri\n+00000d00: 6573 290a 7b0a 2020 2020 6e65 7874 2075 es).{. next u\n+00000d10: 6e6c 6573 7320 2465 6e74 7279 203d 7e0a nless $entry =~.\n+00000d20: 092f 5c41 285c 647b 347d 295c 2e28 5c64 ./\\A(\\d{4})\\.(\\d\n+00000d30: 7b32 7d29 5c2e 285c 647b 327d 295f 285c {2})\\.(\\d{2})_(\\\n+00000d40: 647b 327d 295c 2e28 5c64 7b32 7d29 5c2e d{2})\\.(\\d{2})\\.\n+00000d50: 285c 647b 327d 295c 5a2f 6f3b 0a0a 2020 (\\d{2})\\Z/o;.. \n+00000d60: 2020 2466 6c61 6720 3d20 313b 2020 2023 $flag = 1; #\n+00000d70: 2069 7267 656e 6465 696e 2064 6972 6563 irgendein direc\n+00000d80: 746f 7279 2067 6566 756e 6465 6e0a 0a20 tory gefunden.. \n+00000d90: 2020 206d 7920 2465 203d 2022 2464 6972 my $e = \"$dir\n+00000da0: 2f24 656e 7472 7922 3b0a 2020 2020 6d79 /$entry\";. my\n+00000db0: 2024 636f 6d70 7265 7373 203d 2030 3b0a $compress = 0;.\n+00000dc0: 0a61 6761 696e 466f 724e 6578 7456 6572 .againForNextVer\n+00000dd0: 7369 6f6e 3a0a 2020 2020 6966 2028 2d66 sion:. if (-f\n+00000de0: 2022 2465 2f24 6d64 3543 6865 636b 5375 \"$e/$md5CheckSu\n+00000df0: 6d73 2e69 6e66 6f22 2920 2320 6162 2056 ms.info\") # ab V\n+00000e00: 6572 7369 6f6e 2031 2e32 0a20 2020 207b ersion 1.2. {\n+00000e10: 0a09 6966 2028 2d66 2022 2465 2f24 6d64 ..if (-f \"$e/$md\n+00000e20: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2\")\n+00000e30: 2020 2320 6b6f 6d70 7269 6d69 6572 7465 # komprimierte\n+00000e40: 2056 6572 7369 6f6e 206c 6965 6774 2076 Version liegt v\n+00000e50: 6f72 2c20 6e65 686d 656e 0a09 7b0a 0920 or, nehmen..{.. \n+00000e60: 2020 2024 636f 6d70 7265 7373 203d 2031 $compress = 1\n+00000e70: 3b0a 097d 0a09 656c 7369 6620 282d 6620 ;..}..elsif (-f \n+00000e80: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n+00000e90: 7322 290a 097b 0a09 2020 2020 2463 6f6d s\")..{.. $com\n+00000ea0: 7072 6573 7320 3d20 303b 0a09 7d0a 0965 press = 0;..}..e\n+00000eb0: 6c73 650a 097b 0a09 2020 2020 7072 696e lse..{.. prin\n+00000ec0: 7420 2263 616e 6e6f 7420 6f70 656e 203c t \"cannot open <\n+00000ed0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00000ee0: 5c5b 2e62 7a32 5c5d 3e5c 6e22 3b0a 0920 \\[.bz2\\]>\\n\";.. \n+00000ef0: 2020 206e 6578 743b 0a09 7d0a 0a09 6f70 next;..}...op\n+00000f00: 656e 2849 4e46 4f2c 2022 2465 2f24 6d64 en(INFO, \"$e/$md\n+00000f10: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info\"\n+00000f20: 2920 6f72 0a09 2020 2020 6469 6520 2263 ) or.. die \"c\n+00000f30: 616e 6e6f 7420 6f70 656e 203c 2465 2f24 annot open <$e/$\n+00000f40: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf\n+00000f50: 6f22 3b0a 096d 7920 2476 3b0a 096d 7920 o\";..my $v;..my \n+00000f60: 246c 203d 203c 494e 464f 3e3b 0a09 6368 $l = ;..ch\n+00000f70: 6f70 2024 6c3b 0a09 6966 2028 246c 203d op $l;..if ($l =\n+00000f80: 7e20 2f5e 7665 7273 696f 6e3d 285c 532b ~ /^version=(\\S+\n+00000f90: 292f 290a 097b 0a09 2020 2020 2476 203d )/)..{.. $v =\n+00000fa0: 2024 313b 0a09 7d0a 0965 6c73 650a 097b $1;..}..else..{\n+00000fb0: 0a09 2020 2020 7072 696e 7420 2263 616e .. print \"can\n+00000fc0: 6e6f 7420 6669 6e64 2076 6572 7369 6f6e not find version\n+00000fd0: 2069 6e66 6f72 6d61 7469 6f6e 2069 6e20 information in \n+00000fe0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00000ff0: 2e69 6e66 6f5c 6e22 3b0a 0920 2020 206e .info\\n\";.. n\n+00001000: 6578 743b 0a09 7d0a 0969 6620 2824 7620 ext;..}..if ($v \n+00001010: 6571 2027 312e 3327 290a 097b 0a09 2020 eq '1.3')..{.. \n+00001020: 2020 7072 696e 7420 2224 656e 7472 793a print \"$entry:\n+00001030: 2076 6572 7369 6f6e 203c 2476 3e20 3d3e version <$v> =>\n+00001040: 206f 6b2e 5c6e 223b 0a09 7d0a 0965 6c73 ok.\\n\";..}..els\n+00001050: 6966 2028 2476 2065 7120 2731 2e32 2729 if ($v eq '1.2')\n+00001060: 0a09 7b0a 0920 2020 2070 7269 6e74 2022 ..{.. print \"\n+00001070: 2465 6e74 7279 3a20 7665 7273 696f 6e20 $entry: version \n+00001080: 3c24 763e 2063 6f6e 7665 7274 696e 6720 <$v> converting \n+00001090: 746f 2031 2e33 202e 2e2e 223b 0a09 2020 to 1.3 ...\";.. \n+000010a0: 2020 5354 444f 5554 2d3e 6175 746f 666c STDOUT->autofl\n+000010b0: 7573 6828 3129 3b0a 0920 2020 206d 7920 ush(1);.. my \n+000010c0: 2824 7569 642c 2024 6769 642c 2024 6d6f ($uid, $gid, $mo\n+000010d0: 6465 293b 0a09 2020 2020 6966 2028 2463 de);.. if ($c\n+000010e0: 6f6d 7072 6573 7320 3d3d 2031 290a 0920 ompress == 1).. \n+000010f0: 2020 207b 0a09 0928 2475 6964 2c20 2467 {...($uid, $g\n+00001100: 6964 2c20 246d 6f64 6529 203d 2028 7374 id, $mode) = (st\n+00001110: 6174 2822 2465 2f24 6d64 3543 6865 636b at(\"$e/$md5Check\n+00001120: 5375 6d73 2e62 7a32 2229 295b 342c 2035 Sums.bz2\"))[4, 5\n+00001130: 2c20 325d 3b0a 0909 756e 6c69 6e6b 2022 , 2];...unlink \"\n+00001140: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00001150: 2e6e 6577 2e62 7a32 222c 2022 2465 2f24 .new.bz2\", \"$e/$\n+00001160: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf\n+00001170: 6f22 3b0a 0909 6f70 656e 2846 494c 452c o\";...open(FILE,\n+00001180: 2022 627a 6970 3220 2d64 203c 205c 2724 \"bzip2 -d < \\'$\n+00001190: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n+000011a0: 627a 325c 2720 7c22 2920 6f72 0a09 0920 bz2\\' |\") or... \n+000011b0: 2020 2064 6965 2022 6361 6e6e 6f74 206f die \"cannot o\n+000011c0: 7065 6e20 2465 2f24 6d64 3543 6865 636b pen $e/$md5Check\n+000011d0: 5375 6d73 2e62 7a32 223b 0a09 096f 7065 Sums.bz2\";...ope\n+000011e0: 6e28 4e45 572c 2022 7c20 627a 6970 3220 n(NEW, \"| bzip2 \n+000011f0: 3e20 5c27 2465 2f24 6d64 3543 6865 636b > \\'$e/$md5Check\n+00001200: 5375 6d73 2e6e 6577 2e62 7a32 5c27 2229 Sums.new.bz2\\'\")\n+00001210: 206f 720a 0909 2020 2020 6469 6520 2263 or... die \"c\n+00001220: 616e 6e6f 7420 627a 6970 3220 3e20 2465 annot bzip2 > $e\n+00001230: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n\n+00001240: 6577 2e62 7a32 223b 0a09 2020 2020 7d0a ew.bz2\";.. }.\n+00001250: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. {\n+00001260: 0a09 0928 2475 6964 2c20 2467 6964 2c20 ...($uid, $gid, \n+00001270: 246d 6f64 6529 203d 2028 7374 6174 2822 $mode) = (stat(\"\n+00001280: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00001290: 2229 295b 342c 2035 2c20 325d 3b0a 0909 \"))[4, 5, 2];...\n+000012a0: 756e 6c69 6e6b 2022 2465 2f24 6d64 3543 unlink \"$e/$md5C\n+000012b0: 6865 636b 5375 6d73 2e6e 6577 222c 2022 heckSums.new\", \"\n+000012c0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+000012d0: 2e69 6e66 6f22 3b0a 0909 6f70 656e 2846 .info\";...open(F\n+000012e0: 494c 452c 2022 3c20 2465 2f24 6d64 3543 ILE, \"< $e/$md5C\n+000012f0: 6865 636b 5375 6d73 2229 206f 720a 0909 heckSums\") or...\n+00001300: 2020 2020 6469 6520 2263 616e 6e6f 7420 die \"cannot \n+00001310: 6f70 656e 2024 652f 246d 6435 4368 6563 open $e/$md5Chec\n+00001320: 6b53 756d 7322 3b0a 0909 6f70 656e 284e kSums\";...open(N\n+00001330: 4557 2c20 223e 2024 652f 246d 6435 4368 EW, \"> $e/$md5Ch\n+00001340: 6563 6b53 756d 732e 6e65 7722 2920 6f72 eckSums.new\") or\n+00001350: 0a09 0920 2020 2064 6965 2022 6361 6e6e ... die \"cann\n+00001360: 6f74 2077 7269 7465 2024 652f 246d 6435 ot write $e/$md5\n+00001370: 4368 6563 6b53 756d 732e 6e65 7722 3b0a CheckSums.new\";.\n+00001380: 0920 2020 207d 0a09 2020 2020 246d 6f64 . }.. $mod\n+00001390: 6520 263d 2030 3737 3737 3b0a 0920 2020 e &= 07777;.. \n+000013a0: 2024 6c20 3d20 3c46 494c 453e 3b20 2020 $l = ; \n+000013b0: 2020 2320 6572 7374 6520 5a65 696c 6520 # erste Zeile \n+000013c0: fc62 6572 6c65 7365 6e0a 0920 2020 2070 .berlesen.. p\n+000013d0: 7269 6e74 204e 4557 2022 2320 636f 6e74 rint NEW \"# cont\n+000013e0: 656e 7473 2f6d 6435 2063 6f6d 7072 2064 ents/md5 compr d\n+000013f0: 6576 2d69 6e6f 6465 2069 6e6f 6465 4261 ev-inode inodeBa\n+00001400: 636b 7570 2063 7469 6d65 206d 7469 6d65 ckup ctime mtime\n+00001410: 2061 7469 6d65 2073 697a 6520 7569 6420 atime size uid \n+00001420: 6769 6420 6d6f 6465 2066 696c 656e 616d gid mode filenam\n+00001430: 655c 6e22 3b0a 0a09 2020 2020 6f70 656e e\\n\";... open\n+00001440: 2849 4e46 4f5f 4e45 572c 2022 3e20 2465 (INFO_NEW, \"> $e\n+00001450: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i\n+00001460: 6e66 6f2e 6e65 7722 2920 6f72 0a09 0964 nfo.new\") or...d\n+00001470: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie \"cannot write\n+00001480: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum\n+00001490: 732e 696e 666f 2e6e 6577 223b 0a0a 0920 s.info.new\";... \n+000014a0: 2020 2077 6869 6c65 2028 246c 203d 203c while ($l = <\n+000014b0: 4649 4c45 3e29 0a09 2020 2020 7b0a 0909 FILE>).. {...\n+000014c0: 6368 6f70 2024 6c3b 0a09 096d 7920 2824 chop $l;...my ($\n+000014d0: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n+000014e0: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n+000014f0: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n+00001500: 2024 6d74 696d 652c 2024 7369 7a65 2c0a $mtime, $size,.\n+00001510: 0909 2020 2020 2475 6964 2c20 2467 6964 .. $uid, $gid\n+00001520: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena\n+00001530: 6d65 293b 0a09 096d 7920 2464 203d 2027 me);...my $d = '\n+00001540: 5b5c 642d 5d27 3b20 2020 2020 2023 205c [\\d-]'; # \\\n+00001550: 6420 756e 6420 4d69 6e75 737a 6569 6368 d und Minuszeich\n+00001560: 656e 0a09 096d 7920 246e 203d 2028 246d en...my $n = ($m\n+00001570: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $\n+00001580: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode\n+00001590: 4261 636b 7570 2c20 2463 7469 6d65 2c0a Backup, $ctime,.\n+000015a0: 0909 0920 246d 7469 6d65 2c20 2473 697a ... $mtime, $siz\n+000015b0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $\n+000015c0: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename)\n+000015d0: 203d 0a09 0909 2020 2020 2024 6c20 3d7e =.... $l =~\n+000015e0: 202f 5e28 5c77 2b29 5c73 2b28 5c77 2b29 /^(\\w+)\\s+(\\w+)\n+000015f0: 5c73 2b28 5c53 2b29 5c73 2b28 2464 2b29 \\s+(\\S+)\\s+($d+)\n+00001600: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \\s+($d+)\\s+($d+)\n+00001610: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \\s+($d+)\\s+($d+)\n+00001620: 5c73 2b28 2464 2b29 5c73 2b28 2464 2b29 \\s+($d+)\\s+($d+)\n+00001630: 5c73 2b28 2e2a 292f 6f3b 0a09 0969 6620 \\s+(.*)/o;...if \n+00001640: 2824 6e20 213d 2031 3129 0a09 097b 0a09 ($n != 11)...{..\n+00001650: 0920 2020 2070 7269 6e74 2022 6361 6e6e . print \"cann\n+00001660: 6f74 2072 6561 6420 6c69 6e65 3a20 3c24 ot read line: <$\n+00001670: 6c3e 5c6e 223b 0a09 097d 0a0a 0909 6d79 l>\\n\";...}....my\n+00001680: 2024 6174 696d 6520 3d20 246d 7469 6d65 $atime = $mtime\n+00001690: 3b0a 0909 7072 696e 7420 4e45 5720 2224 ;...print NEW \"$\n+000016a0: 6d64 3573 756d 2024 636f 6d70 7220 2464 md5sum $compr $d\n+000016b0: 6576 496e 6f64 6520 2469 6e6f 6465 4261 evInode $inodeBa\n+000016c0: 636b 7570 2024 6374 696d 6520 2220 2e0a ckup $ctime \" ..\n+000016d0: 0909 2020 2020 2224 6d74 696d 6520 2461 .. \"$mtime $a\n+000016e0: 7469 6d65 2024 7369 7a65 2024 7569 6420 time $size $uid \n+000016f0: 2467 6964 2024 6d6f 6465 2024 6669 6c65 $gid $mode $file\n+00001700: 6e61 6d65 5c6e 223b 0a09 2020 2020 7d0a name\\n\";.. }.\n+00001710: 0920 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE)\n+00001720: 3b0a 0920 2020 2063 6c6f 7365 284e 4557 ;.. close(NEW\n+00001730: 293b 0a09 2020 2020 7072 696e 7420 494e );.. print IN\n+00001740: 464f 5f4e 4557 2022 7665 7273 696f 6e3d FO_NEW \"version=\n+00001750: 312e 335c 6e22 3b0a 0920 2020 206d 7920 1.3\\n\";.. my \n+00001760: 2840 6c29 203d 203c 494e 464f 3e3b 0a09 (@l) = ;..\n+00001770: 2020 2020 7072 696e 7420 494e 464f 5f4e print INFO_N\n+00001780: 4557 2022 406c 223b 0a09 2020 2020 636c EW \"@l\";.. cl\n+00001790: 6f73 6528 494e 464f 5f4e 4557 293b 0a09 ose(INFO_NEW);..\n+000017a0: 2020 2020 7072 696e 7420 225c 6e22 3b0a print \"\\n\";.\n+000017b0: 0920 2020 2069 6620 2824 636f 6d70 7265 . if ($compre\n+000017c0: 7373 203d 3d20 3129 0a09 2020 2020 7b0a ss == 1).. {.\n+000017d0: 0909 756e 6c69 6e6b 2022 2465 2f24 6d64 ..unlink \"$e/$md\n+000017e0: 3543 6865 636b 5375 6d73 2e62 7a32 223b 5CheckSums.bz2\";\n+000017f0: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename \"$e/$m\n+00001800: 6435 4368 6563 6b53 756d 732e 6e65 772e d5CheckSums.new.\n+00001810: 627a 3222 2c20 2224 652f 246d 6435 4368 bz2\", \"$e/$md5Ch\n+00001820: 6563 6b53 756d 732e 627a 3222 3b0a 0909 eckSums.bz2\";...\n+00001830: 6368 6f77 6e20 2475 6964 2c20 2467 6964 chown $uid, $gid\n+00001840: 2c20 2224 652f 246d 6435 4368 6563 6b53 , \"$e/$md5CheckS\n+00001850: 756d 732e 627a 3222 3b0a 0909 6368 6d6f ums.bz2\";...chmo\n+00001860: 6420 246d 6f64 652c 2022 2465 2f24 6d64 d $mode, \"$e/$md\n+00001870: 3543 6865 636b 5375 6d73 2e62 7a32 223b 5CheckSums.bz2\";\n+00001880: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00001890: 650a 0920 2020 207b 0a09 0975 6e6c 696e e.. {...unlin\n+000018a0: 6b20 2224 652f 246d 6435 4368 6563 6b53 k \"$e/$md5CheckS\n+000018b0: 756d 7322 3b0a 0909 7265 6e61 6d65 2022 ums\";...rename \"\n+000018c0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+000018d0: 2e6e 6577 222c 2022 2465 2f24 6d64 3543 .new\", \"$e/$md5C\n+000018e0: 6865 636b 5375 6d73 223b 0a09 0963 686f heckSums\";...cho\n+000018f0: 776e 2024 7569 642c 2024 6769 642c 2022 wn $uid, $gid, \"\n+00001900: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00001910: 223b 0a09 0963 686d 6f64 2024 6d6f 6465 \";...chmod $mode\n+00001920: 2c20 2224 652f 246d 6435 4368 6563 6b53 , \"$e/$md5CheckS\n+00001930: 756d 7322 3b0a 0920 2020 207d 0a09 2020 ums\";.. }.. \n+00001940: 2020 6d6b 6469 7220 2224 652f 2e73 746f mkdir \"$e/.sto\n+00001950: 7265 4261 636b 7570 4c69 6e6b 7322 2c20 reBackupLinks\", \n+00001960: 3037 3737 3b0a 0920 2020 2075 6e6c 696e 0777;.. unlin\n+00001970: 6b20 2224 652f 246d 6435 4368 6563 6b53 k \"$e/$md5CheckS\n+00001980: 756d 732e 696e 666f 223b 0a09 2020 2020 ums.info\";.. \n+00001990: 7265 6e61 6d65 2022 2465 2f24 6d64 3543 rename \"$e/$md5C\n+000019a0: 6865 636b 5375 6d73 2e69 6e66 6f2e 6e65 heckSums.info.ne\n+000019b0: 7722 2c20 2224 652f 246d 6435 4368 6563 w\", \"$e/$md5Chec\n+000019c0: 6b53 756d 732e 696e 666f 223b 0a09 7d0a kSums.info\";..}.\n+000019d0: 0965 6c73 650a 097b 0a09 2020 2020 7072 .else..{.. pr\n+000019e0: 696e 7420 2224 656e 7472 793a 2075 6e73 int \"$entry: uns\n+000019f0: 7570 706f 7274 6564 2076 6572 7369 6f6e upported version\n+00001a00: 203c 2476 3e5c 6e22 3b0a 097d 0a09 636c <$v>\\n\";..}..cl\n+00001a10: 6f73 6528 494e 464f 293b 0a20 2020 207d ose(INFO);. }\n+00001a20: 0a20 2020 2065 6c73 6520 2020 2020 2020 . else \n+00001a30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001a40: 2020 2020 2023 2056 6572 7369 6f6e 2031 # Version 1\n+00001a50: 2e30 2075 6e64 2031 2e31 0a20 2020 207b .0 und 1.1. {\n+00001a60: 0a09 6966 2028 2d66 2022 2465 2f24 6d64 ..if (-f \"$e/$md\n+00001a70: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2\")\n+00001a80: 2020 2320 6b6f 6d70 7269 6d69 6572 7465 # komprimierte\n+00001a90: 2056 6572 7369 6f6e 206c 6965 6774 2076 Version liegt v\n+00001aa0: 6f72 2c20 6e65 686d 656e 0a09 7b0a 0920 or, nehmen..{.. \n+00001ab0: 2020 206f 7065 6e28 4649 4c45 2c20 2262 open(FILE, \"b\n+00001ac0: 7a69 7032 202d 6420 3c20 5c27 2465 2f24 zip2 -d < \\'$e/$\n+00001ad0: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2\n+00001ae0: 5c27 207c 2229 3b0a 0920 2020 2024 636f \\' |\");.. $co\n+00001af0: 6d70 7265 7373 203d 2031 3b0a 097d 0a09 mpress = 1;..}..\n+00001b00: 656c 7369 6620 282d 6620 2465 2f24 6d64 elsif (-f $e/$md\n+00001b10: 3543 6865 636b 5375 6d73 290a 097b 0a09 5CheckSums)..{..\n+00001b20: 2020 2020 6f70 656e 2846 494c 452c 2022 open(FILE, \"\n+00001b30: 3c20 2465 2f24 6d64 3543 6865 636b 5375 < $e/$md5CheckSu\n+00001b40: 6d73 2229 3b0a 097d 0a09 656c 7365 0a09 ms\");..}..else..\n+00001b50: 7b0a 0920 2020 2070 7269 6e74 2022 6361 {.. print \"ca\n+00001b60: 6e6e 6f74 206f 7065 6e20 3c24 652f 246d nnot open <$e/$m\n+00001b70: 6435 4368 6563 6b53 756d 735c 5b2e 627a d5CheckSums\\[.bz\n+00001b80: 325c 5d3e 5c6e 223b 0a09 2020 2020 6e65 2\\]>\\n\";.. ne\n+00001b90: 7874 3b0a 097d 0a09 6d79 2024 763b 0a09 xt;..}..my $v;..\n+00001ba0: 6d79 2024 6c20 3d20 3c46 494c 453e 3b0a my $l = ;.\n+00001bb0: 0963 686f 7020 246c 3b0a 0969 6620 2824 .chop $l;..if ($\n+00001bc0: 6c20 3d7e 202f 5e23 2323 7665 7273 696f l =~ /^###versio\n+00001bd0: 6e3d 282e 2a29 2f29 0a09 7b0a 0920 2020 n=(.*)/)..{.. \n+00001be0: 2024 7620 3d20 2431 3b0a 097d 0a09 656c $v = $1;..}..el\n+00001bf0: 7365 0a09 7b0a 0920 2020 2024 7620 3d20 se..{.. $v = \n+00001c00: 2731 2e30 273b 0a09 7d0a 0a09 6966 2028 '1.0';..}...if (\n+00001c10: 2476 2065 7120 2731 2e30 2729 0a09 7b0a $v eq '1.0')..{.\n+00001c20: 0920 2020 2070 7269 6e74 2022 2465 6e74 . print \"$ent\n+00001c30: 7279 3a20 7665 7273 696f 6e20 3c24 763e ry: version <$v>\n+00001c40: 2063 6f6e 7665 7274 696e 6720 746f 2031 converting to 1\n+00001c50: 2e31 202e 2e2e 223b 0a09 2020 2020 5354 .1 ...\";.. ST\n+00001c60: 444f 5554 2d3e 6175 746f 666c 7573 6828 DOUT->autoflush(\n+00001c70: 3129 3b0a 0920 2020 2069 6620 2824 636f 1);.. if ($co\n+00001c80: 6d70 7265 7373 203d 3d20 3129 0a09 2020 mpress == 1).. \n+00001c90: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink \"$e\n+00001ca0: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n\n+00001cb0: 6577 2e62 7a32 223b 0a09 096f 7065 6e28 ew.bz2\";...open(\n+00001cc0: 4e45 572c 2022 7c20 627a 6970 3220 3e20 NEW, \"| bzip2 > \n+00001cd0: 5c27 2465 2f24 6d64 3543 6865 636b 5375 \\'$e/$md5CheckSu\n+00001ce0: 6d73 2e6e 6577 2e62 7a32 5c27 2229 206f ms.new.bz2\\'\") o\n+00001cf0: 720a 0909 2020 2020 6469 6520 2263 616e r... die \"can\n+00001d00: 6e6f 7420 627a 6970 3220 3e20 2465 2f24 not bzip2 > $e/$\n+00001d10: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new\n+00001d20: 2e62 7a32 223b 0a09 2020 2020 7d0a 0920 .bz2\";.. }.. \n+00001d30: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n+00001d40: 0975 6e6c 696e 6b20 2224 652f 246d 6435 .unlink \"$e/$md5\n+00001d50: 4368 6563 6b53 756d 732e 6e65 7722 3b0a CheckSums.new\";.\n+00001d60: 0909 6f70 656e 284e 4557 2c20 223e 2024 ..open(NEW, \"> $\n+00001d70: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n+00001d80: 6e65 7722 2920 6f72 0a09 0920 2020 2064 new\") or... d\n+00001d90: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie \"cannot write\n+00001da0: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum\n+00001db0: 732e 6e65 7722 3b0a 0920 2020 207d 0a09 s.new\";.. }..\n+00001dc0: 2020 2020 7072 696e 7420 4e45 5720 2223 print NEW \"#\n+00001dd0: 2323 7665 7273 696f 6e3d 312e 315c 6e22 ##version=1.1\\n\"\n+00001de0: 3b0a 0920 2020 2070 7269 6e74 204e 4557 ;.. print NEW\n+00001df0: 2022 2323 2365 7863 6570 7444 6972 7353 \"###exceptDirsS\n+00001e00: 6570 3d2c 5c6e 223b 0a09 2020 2020 7072 ep=,\\n\";.. pr\n+00001e10: 696e 7420 4e45 5720 2223 2323 6578 6365 int NEW \"###exce\n+00001e20: 7074 4469 7273 3d5c 6e22 3b0a 0a09 2020 ptDirs=\\n\";... \n+00001e30: 2020 6d79 2024 6920 3d20 303b 2020 2020 my $i = 0; \n+00001e40: 2320 5ae4 686c 6572 2c20 6465 7220 696e # Z.hler, der in\n+00001e50: 6f64 6573 2073 696d 756c 6965 7274 0a09 odes simuliert..\n+00001e60: 2020 2020 7768 696c 6520 2824 6c20 3d20 while ($l = \n+00001e70: 3c46 494c 453e 290a 0920 2020 207b 0a09 ).. {..\n+00001e80: 0969 6620 2824 6c20 3d7e 202f 5e23 2323 .if ($l =~ /^###\n+00001e90: 2f29 0a09 097b 0a09 0920 2020 2070 7269 /)...{... pri\n+00001ea0: 6e74 204e 4557 2024 6c3b 0a09 0920 2020 nt NEW $l;... \n+00001eb0: 206e 6578 743b 0a09 097d 0a0a 0909 2469 next;...}....$i\n+00001ec0: 2b2b 3b0a 0909 6368 6f70 2024 6c3b 0a09 ++;...chop $l;..\n+00001ed0: 096d 7920 2824 6d64 3573 756d 2c20 2463 .my ($md5sum, $c\n+00001ee0: 6f6d 7072 2c20 2463 7469 6d65 2c20 246d ompr, $ctime, $m\n+00001ef0: 7469 6d65 2c20 2473 697a 652c 2024 7569 time, $size, $ui\n+00001f00: 642c 2024 6769 642c 0a09 0920 2020 2024 d, $gid,... $\n+00001f10: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename)\n+00001f20: 3b0a 0909 6d79 2024 6420 3d20 275b 5c64 ;...my $d = '[\\d\n+00001f30: 2d5d 273b 2020 2020 2020 2320 5c64 2075 -]'; # \\d u\n+00001f40: 6e64 204d 696e 7573 7a65 6963 6865 6e0a nd Minuszeichen.\n+00001f50: 0909 6d79 2024 6e20 3d20 2824 6d64 3573 ..my $n = ($md5s\n+00001f60: 756d 2c20 2463 6f6d 7072 2c20 2463 7469 um, $compr, $cti\n+00001f70: 6d65 2c20 246d 7469 6d65 2c20 2473 697a me, $mtime, $siz\n+00001f80: 652c 2024 7569 642c 0a09 0909 2024 6769 e, $uid,.... $gi\n+00001f90: 642c 2024 6d6f 6465 2c20 2466 696c 656e d, $mode, $filen\n+00001fa0: 616d 6529 203d 0a09 0924 6c20 3d7e 202f ame) =...$l =~ /\n+00001fb0: 5e28 5c77 2b29 5c73 2b28 5c77 2b29 5c73 ^(\\w+)\\s+(\\w+)\\s\n+00001fc0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n+00001fd0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n+00001fe0: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n+00001ff0: 2b28 2e2a 292f 6f3b 0a09 0970 7269 6e74 +(.*)/o;...print\n+00002000: 204e 4557 0a09 0920 2020 2022 246d 6435 NEW... \"$md5\n+00002010: 7375 6d20 2463 6f6d 7072 2031 2d24 6920 sum $compr 1-$i \n+00002020: 2463 7469 6d65 2024 6d74 696d 6520 2473 $ctime $mtime $s\n+00002030: 697a 6520 2475 6964 2024 6769 6420 246d ize $uid $gid $m\n+00002040: 6f64 6520 2466 696c 656e 616d 655c 6e22 ode $filename\\n\"\n+00002050: 3b0a 0920 2020 207d 0a09 2020 2020 636c ;.. }.. cl\n+00002060: 6f73 6528 4e45 5729 3b0a 0920 2020 2069 ose(NEW);.. i\n+00002070: 6620 2824 636f 6d70 7265 7373 203d 3d20 f ($compress == \n+00002080: 3129 0a09 2020 2020 7b0a 0909 756e 6c69 1).. {...unli\n+00002090: 6e6b 2022 2465 2f24 6d64 3543 6865 636b nk \"$e/$md5Check\n+000020a0: 5375 6d73 2e62 7a32 223b 0a09 0972 656e Sums.bz2\";...ren\n+000020b0: 616d 6520 2224 652f 246d 6435 4368 6563 ame \"$e/$md5Chec\n+000020c0: 6b53 756d 732e 6e65 772e 627a 3222 2c20 kSums.new.bz2\", \n+000020d0: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n+000020e0: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2\";...chmod \n+000020f0: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, \"$e/$md5Ch\n+00002100: 6563 6b53 756d 732e 627a 3222 3b0a 0920 eckSums.bz2\";.. \n+00002110: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n+00002120: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink \"\n+00002130: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+00002140: 223b 0a09 0972 656e 616d 6520 2224 652f \";...rename \"$e/\n+00002150: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne\n+00002160: 7722 2c20 2224 652f 246d 6435 4368 6563 w\", \"$e/$md5Chec\n+00002170: 6b53 756d 7322 3b0a 0909 6368 6d6f 6420 kSums\";...chmod \n+00002180: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, \"$e/$md5Ch\n+00002190: 6563 6b53 756d 7322 3b0a 0920 2020 207d eckSums\";.. }\n+000021a0: 0a09 2020 2020 7072 696e 7420 2220 6f6b .. print \" ok\n+000021b0: 5c6e 223b 0a0a 0920 2020 2067 6f74 6f20 \\n\";... goto \n+000021c0: 6167 6169 6e46 6f72 4e65 7874 5665 7273 againForNextVers\n+000021d0: 696f 6e3b 0a09 7d0a 0965 6c73 6966 2028 ion;..}..elsif (\n+000021e0: 2476 2065 7120 2731 2e31 2729 0a09 7b0a $v eq '1.1')..{.\n+000021f0: 0920 2020 2070 7269 6e74 2022 2465 6e74 . print \"$ent\n+00002200: 7279 3a20 7665 7273 696f 6e20 3c24 763e ry: version <$v>\n+00002210: 2063 6f6e 7665 7274 696e 6720 746f 2031 converting to 1\n+00002220: 2e32 202e 2e2e 223b 0a09 2020 2020 5354 .2 ...\";.. ST\n+00002230: 444f 5554 2d3e 6175 746f 666c 7573 6828 DOUT->autoflush(\n+00002240: 3129 3b0a 0920 2020 2069 6620 2824 636f 1);.. if ($co\n+00002250: 6d70 7265 7373 203d 3d20 3129 0a09 2020 mpress == 1).. \n+00002260: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink \"$e\n+00002270: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n\n+00002280: 6577 2e62 7a32 222c 2022 2465 2f24 6d64 ew.bz2\", \"$e/$md\n+00002290: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info\"\n+000022a0: 3b0a 0909 6f70 656e 284e 4557 2c20 227c ;...open(NEW, \"|\n+000022b0: 2062 7a69 7032 203e 205c 2724 652f 246d bzip2 > \\'$e/$m\n+000022c0: 6435 4368 6563 6b53 756d 732e 6e65 772e d5CheckSums.new.\n+000022d0: 627a 325c 2722 2920 6f72 0a09 0920 2020 bz2\\'\") or... \n+000022e0: 2064 6965 2022 6361 6e6e 6f74 2062 7a69 die \"cannot bzi\n+000022f0: 7032 203e 2024 652f 246d 6435 4368 6563 p2 > $e/$md5Chec\n+00002300: 6b53 756d 732e 6e65 772e 627a 3222 3b0a kSums.new.bz2\";.\n+00002310: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n+00002320: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink\n+00002330: 2022 2465 2f24 6d64 3543 6865 636b 5375 \"$e/$md5CheckSu\n+00002340: 6d73 2e6e 6577 222c 2022 2465 2f24 6d64 ms.new\", \"$e/$md\n+00002350: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info\"\n+00002360: 3b0a 0909 6f70 656e 284e 4557 2c20 223e ;...open(NEW, \">\n+00002370: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum\n+00002380: 732e 6e65 7722 2920 6f72 0a09 0920 2020 s.new\") or... \n+00002390: 2064 6965 2022 6361 6e6e 6f74 2077 7269 die \"cannot wri\n+000023a0: 7465 2024 652f 246d 6435 4368 6563 6b53 te $e/$md5CheckS\n+000023b0: 756d 732e 6e65 7722 3b0a 0920 2020 207d ums.new\";.. }\n+000023c0: 0a09 2020 2020 6f70 656e 2849 4e46 4f2c .. open(INFO,\n+000023d0: 2022 3e20 2465 2f24 6d64 3543 6865 636b \"> $e/$md5Check\n+000023e0: 5375 6d73 2e69 6e66 6f22 2920 6f72 0a09 Sums.info\") or..\n+000023f0: 0964 6965 2022 6361 6e6e 6f74 2077 7269 .die \"cannot wri\n+00002400: 7465 2024 652f 246d 6435 4368 6563 6b53 te $e/$md5CheckS\n+00002410: 756d 732e 696e 666f 223b 0a0a 0920 2020 ums.info\";... \n+00002420: 2070 7269 6e74 2049 4e46 4f20 2276 6572 print INFO \"ver\n+00002430: 7369 6f6e 3d31 2e32 5c6e 223b 0a0a 0920 sion=1.2\\n\";... \n+00002440: 2020 206d 7920 2470 6f73 7466 6978 3b0a my $postfix;.\n+00002450: 0920 2020 2077 6869 6c65 2028 246c 203d . while ($l =\n+00002460: 203c 4649 4c45 3e29 0a09 2020 2020 7b0a ).. {.\n+00002470: 0909 6966 2028 246c 203d 7e20 2f5e 2323 ..if ($l =~ /^##\n+00002480: 2320 2f29 2020 2023 2053 7061 6c74 656e # /) # Spalten\n+00002490: 7665 727a 6569 6368 6e69 730a 0909 7b0a verzeichnis...{.\n+000024a0: 0909 2020 2020 7072 696e 7420 4e45 5720 .. print NEW \n+000024b0: 2223 2063 6f6e 7465 6e74 732f 6d64 3520 \"# contents/md5 \n+000024c0: 636f 6d70 7220 6465 762d 696e 6f64 6520 compr dev-inode \n+000024d0: 696e 6f64 6542 6163 6b75 7020 2220 2e0a inodeBackup \" ..\n+000024e0: 0909 0922 6374 696d 6520 6d74 696d 6520 ...\"ctime mtime \n+000024f0: 7369 7a65 2075 6964 2067 6964 206d 6f64 size uid gid mod\n+00002500: 6520 6669 6c65 6e61 6d65 5c6e 223b 0a09 e filename\\n\";..\n+00002510: 0920 2020 206e 6578 743b 0a09 097d 0a09 . next;...}..\n+00002520: 0965 6c73 6966 2028 246c 203d 7e20 2f5e .elsif ($l =~ /^\n+00002530: 2323 2328 2e2a 3f29 3d28 2e2a 292f 290a ###(.*?)=(.*)/).\n+00002540: 0909 7b0a 0909 2020 2020 7072 696e 7420 ..{... print \n+00002550: 494e 464f 2022 2431 3d24 325c 6e22 3b0a INFO \"$1=$2\\n\";.\n+00002560: 0909 2020 2020 2470 6f73 7466 6978 203d .. $postfix =\n+00002570: 2024 3220 6966 2028 2431 2065 7120 2770 $2 if ($1 eq 'p\n+00002580: 6f73 7466 6978 2729 3b0a 0909 2020 2020 ostfix');... \n+00002590: 6e65 7874 3b0a 0909 7d0a 0a09 0963 686f next;...}....cho\n+000025a0: 7020 246c 3b0a 0909 6d79 2028 246d 6435 p $l;...my ($md5\n+000025b0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de\n+000025c0: 7649 6e6f 6465 2c20 2463 7469 6d65 2c20 vInode, $ctime, \n+000025d0: 246d 7469 6d65 2c20 2473 697a 652c 2024 $mtime, $size, $\n+000025e0: 7569 642c 2024 6769 642c 0a09 0920 2020 uid, $gid,... \n+000025f0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam\n+00002600: 6529 3b0a 0909 6d79 2024 6420 3d20 275b e);...my $d = '[\n+00002610: 5c64 2d5d 273b 2020 2020 2020 2320 5c64 \\d-]'; # \\d\n+00002620: 2075 6e64 204d 696e 7573 7a65 6963 6865 und Minuszeiche\n+00002630: 6e0a 0909 6d79 2024 6e20 3d20 2824 6d64 n...my $n = ($md\n+00002640: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d\n+00002650: 6576 496e 6f64 652c 2024 6374 696d 652c evInode, $ctime,\n+00002660: 2024 6d74 696d 652c 2024 7369 7a65 2c20 $mtime, $size, \n+00002670: 2475 6964 2c0a 0909 0920 2467 6964 2c20 $uid,.... $gid, \n+00002680: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename\n+00002690: 2920 3d0a 0909 246c 203d 7e20 2f5e 285c ) =...$l =~ /^(\\\n+000026a0: 772b 295c 732b 285c 772b 295c 732b 285c w+)\\s+(\\w+)\\s+(\\\n+000026b0: 532b 295c 732b 2824 642b 295c 732b 2824 S+)\\s+($d+)\\s+($\n+000026c0: 642b 295c 732b 2824 642b 295c 732b 2824 d+)\\s+($d+)\\s+($\n+000026d0: 642b 295c 732b 2824 642b 295c 732b 2824 d+)\\s+($d+)\\s+($\n+000026e0: 642b 295c 732b 282e 2a29 2f6f 3b0a 0909 d+)\\s+(.*)/o;...\n+000026f0: 2320 496e 6f64 6520 696d 2042 6163 6b75 # Inode im Backu\n+00002700: 7020 6572 6d69 7474 656c 6e0a 0909 6d79 p ermitteln...my\n+00002710: 2024 696e 6f64 6542 6163 6b75 703b 0a09 $inodeBackup;..\n+00002720: 096d 7920 2466 203d 2022 2465 2f24 6669 .my $f = \"$e/$fi\n+00002730: 6c65 6e61 6d65 223b 0a09 0924 6620 3d7e lename\";...$f =~\n+00002740: 2073 2f5c 5c30 412f 5c6e 2f6f 673b 2020 s/\\\\0A/\\n/og; \n+00002750: 2020 2320 275c 6e27 2077 6965 6465 7268 # '\\n' wiederh\n+00002760: 6572 7374 656c 6c65 6e0a 0909 2466 203d erstellen...$f =\n+00002770: 7e20 732f 5c5c 3543 2f5c 5c2f 6f67 3b20 ~ s/\\\\5C/\\\\/og; \n+00002780: 2020 2023 2027 5c5c 2720 7769 6564 6572 # '\\\\' wieder\n+00002790: 6865 7273 7465 6c6c 656e 0a0a 0909 2466 herstellen....$f\n+000027a0: 202e 3d20 2470 6f73 7466 6978 2069 6620 .= $postfix if \n+000027b0: 2824 636f 6d70 7220 6571 2027 6327 293b ($compr eq 'c');\n+000027c0: 0a09 0969 6620 2824 6d64 3573 756d 2065 ...if ($md5sum e\n+000027d0: 7120 2773 796d 6c69 6e6b 2729 0a09 097b q 'symlink')...{\n+000027e0: 0a09 0920 2020 2024 696e 6f64 6542 6163 ... $inodeBac\n+000027f0: 6b75 7020 3d20 286c 7374 6174 2824 6629 kup = (lstat($f)\n+00002800: 295b 315d 3b0a 0909 7d0a 0909 656c 7365 )[1];...}...else\n+00002810: 0a09 097b 0a09 0920 2020 2024 696e 6f64 ...{... $inod\n+00002820: 6542 6163 6b75 7020 3d20 2873 7461 7428 eBackup = (stat(\n+00002830: 2466 2929 5b31 5d3b 0a09 097d 0a0a 0909 $f))[1];...}....\n+00002840: 7072 696e 7420 4e45 570a 0909 2020 2020 print NEW... \n+00002850: 2224 6d64 3573 756d 2024 636f 6d70 7220 \"$md5sum $compr \n+00002860: 2464 6576 496e 6f64 6520 2469 6e6f 6465 $devInode $inode\n+00002870: 4261 636b 7570 2024 6374 696d 6520 246d Backup $ctime $m\n+00002880: 7469 6d65 2022 202e 0a09 0920 2020 2020 time \" .... \n+00002890: 2020 2224 7369 7a65 2024 7569 6420 2467 \"$size $uid $g\n+000028a0: 6964 2024 6d6f 6465 2024 6669 6c65 6e61 id $mode $filena\n+000028b0: 6d65 5c6e 223b 0a09 2020 2020 7d0a 0920 me\\n\";.. }.. \n+000028c0: 2020 2063 6c6f 7365 284e 4557 293b 0a09 close(NEW);..\n+000028d0: 2020 2020 636c 6f73 6528 494e 464f 293b close(INFO);\n+000028e0: 0a09 2020 2020 6368 6d6f 6420 3036 3030 .. chmod 0600\n+000028f0: 2c20 2224 6524 6d64 3543 6865 636b 5375 , \"$e$md5CheckSu\n+00002900: 6d73 2e69 6e66 6f22 3b0a 0920 2020 2069 ms.info\";.. i\n+00002910: 6620 2824 636f 6d70 7265 7373 203d 3d20 f ($compress == \n+00002920: 3129 0a09 2020 2020 7b0a 0909 756e 6c69 1).. {...unli\n+00002930: 6e6b 2022 2465 2f24 6d64 3543 6865 636b nk \"$e/$md5Check\n+00002940: 5375 6d73 2e62 7a32 223b 0a09 0972 656e Sums.bz2\";...ren\n+00002950: 616d 6520 2224 652f 246d 6435 4368 6563 ame \"$e/$md5Chec\n+00002960: 6b53 756d 732e 6e65 772e 627a 3222 2c20 kSums.new.bz2\", \n+00002970: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n+00002980: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2\";...chmod \n+00002990: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, \"$e/$md5Ch\n+000029a0: 6563 6b53 756d 732e 627a 3222 3b0a 0920 eckSums.bz2\";.. \n+000029b0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n+000029c0: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink \"\n+000029d0: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n+000029e0: 223b 0a09 0972 656e 616d 6520 2224 652f \";...rename \"$e/\n+000029f0: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne\n+00002a00: 7722 2c20 2224 652f 246d 6435 4368 6563 w\", \"$e/$md5Chec\n+00002a10: 6b53 756d 7322 3b0a 0909 6368 6d6f 6420 kSums\";...chmod \n+00002a20: 3036 3030 2c20 2224 652f 246d 6435 4368 0600, \"$e/$md5Ch\n+00002a30: 6563 6b53 756d 7322 3b0a 0920 2020 207d eckSums\";.. }\n+00002a40: 0a09 2020 2020 7072 696e 7420 2220 6f6b .. print \" ok\n+00002a50: 5c6e 223b 0a09 2020 2020 636c 6f73 6528 \\n\";.. close(\n+00002a60: 4649 4c45 293b 0a09 7d0a 0965 6c73 650a FILE);..}..else.\n+00002a70: 097b 0a09 2020 2020 7072 696e 7420 2224 .{.. print \"$\n+00002a80: 656e 7472 793a 2075 6e73 7570 706f 7274 entry: unsupport\n+00002a90: 6564 2076 6572 7369 6f6e 203c 2476 3e5c ed version <$v>\\\n+00002aa0: 6e22 3b0a 097d 0a20 2020 207d 0a7d 0a0a n\";..}. }.}..\n+00002ab0: 0a70 7269 6e74 2022 4552 524f 523a 206e .print \"ERROR: n\n+00002ac0: 6f20 6261 636b 7570 2064 6972 6563 746f o backup directo\n+00002ad0: 7269 6573 2066 6f75 6e64 5c6e 220a 2020 ries found\\n\". \n+00002ae0: 2020 756e 6c65 7373 2028 2466 6c61 6729 unless ($flag)\n+00002af0: 3b0a 0a ;..\n"}, {"source1": "./usr/bin/storeBackupDel", "source2": "./usr/bin/storeBackupDel", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1298 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7044 656c 0a pDel.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 332d 3230 3132 290a 2320 2020 2020 2020 3-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T\n+00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f\n+00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo\n+00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu\n+000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod\n+000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under\n+000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th\n+000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n+000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as \n+000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# \n+00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa\n+00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e\n+00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 \n+00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, \n+00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your \n+00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late\n+00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# \n+00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is \n+00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t\n+00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it \n+000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,.\n+000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT \n+000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi\n+000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i\n+000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty \n+000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA\n+00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES\n+00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL\n+00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See\n+00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen\n+00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det\n+00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You \n+00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece\n+00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t\n+00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P\n+000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# \n+000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi\n+000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n\n+000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...my $\n+00000300: 5645 5253 494f 4e20 3d20 2724 4964 3a20 VERSION = '$Id: \n+00000310: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p\n+00000320: 6c20 3336 3220 3230 3132 2d30 312d 3238 l 362 2012-01-28\n+00000330: 2032 323a 3131 3a31 335a 2068 6a63 2024 22:11:13Z hjc $\n+00000340: 2027 3b0a 7075 7368 2040 5645 5253 494f ';.push @VERSIO\n+00000350: 4e2c 2024 5645 5253 494f 4e3b 0a6d 7920 N, $VERSION;.my \n+00000360: 2824 5645 5253 494f 4e70 4e61 6d65 2c20 ($VERSIONpName, \n+00000370: 2456 4552 5349 4f4e 7376 6e49 4429 203d $VERSIONsvnID) =\n+00000380: 2024 5645 5253 494f 4e20 3d7e 202f 4964 $VERSION =~ /Id\n+00000390: 3a5c 732b 285c 532b 295c 732b 285c 642b :\\s+(\\S+)\\s+(\\d+\n+000003a0: 292f 3b0a 246d 6169 6e3a 3a53 544f 5245 )/;.$main::STORE\n+000003b0: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = \n+000003c0: 756e 6465 663b 0a0a 0a75 7365 2073 7472 undef;...use str\n+000003d0: 6963 743b 0a0a 7573 6520 4663 6e74 6c20 ict;..use Fcntl \n+000003e0: 7177 284f 5f52 4457 5220 4f5f 4352 4541 qw(O_RDWR O_CREA\n+000003f0: 5429 3b0a 7573 6520 4669 6c65 3a3a 436f T);.use File::Co\n+00000400: 7079 3b0a 7573 6520 504f 5349 583b 0a0a py;.use POSIX;..\n+00000410: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. \n+00000420: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi\n+00000430: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir\n+00000440: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D\n+00000450: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein \n+00000460: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol\n+00000470: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis\n+00000480: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i\n+00000490: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). \n+000004a0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f\n+000004b0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my \n+000004c0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink\n+000004d0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i\n+000004e0: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link,\n+000004f0: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne \"/\")..\n+00000500: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~\n+00000510: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\\/]+$/$link\n+00000520: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e\n+00000530: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi\n+00000540: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. \n+00000550: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $\n+00000560: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi\n+00000570: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$\n+00000580: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = \"/$file\";\n+00000590: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n+000005a0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD\n+000005b0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR \"<$file> doe\n+000005c0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\\n\";\n+000005d0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }.\n+000005e0: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= \"/.\n+000005f0: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib\"; \n+00000600: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den \n+00000610: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. \n+00000620: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/\n+00000630: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch\n+00000640: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. \n+00000650: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir)\n+00000660: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD\n+00000670: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`;\n+00000680: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;.\n+00000690: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;.\n+000006a0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split\n+000006b0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir(\"$absDir\n+000006c0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file\"));. }.\n+000006d0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n+000006e0: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR \"<$\n+000006f0: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex\n+00000700: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\\n\";\n+00000710: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl\n+00000720: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. \n+00000730: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift\n+00000740: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return ('\n+00000750: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles\n+00000760: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\\//)\n+00000770: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa\n+00000780: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname..\n+00000790: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f\n+000007a0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ \n+000007b0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\\/(.*)$/s;\n+000007c0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' \n+000007d0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq '');\n+000007e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000007f0: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls\n+00000800: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename.\n+00000810: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir\n+00000820: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my (\n+00000830: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = &\n+00000840: 6c69 6250 6174 6828 2430 293b 0a28 4049 libPath($0);.(@I\n+00000850: 4e43 2920 3d20 2824 7265 712c 2040 494e NC) = ($req, @IN\n+00000860: 4329 3b0a 0a72 6571 7569 7265 2027 7374 C);..require 'st\n+00000870: 6f72 6542 6163 6b75 704c 6962 2e70 6c27 oreBackupLib.pl'\n+00000880: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check\n+00000890: 5061 7261 6d32 2e70 6c27 3b0a 7265 7175 Param2.pl';.requ\n+000008a0: 6972 6520 2763 6865 636b 4f62 6a50 6172 ire 'checkObjPar\n+000008b0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p\n+000008c0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir\n+000008d0: 6520 2776 6572 7369 6f6e 2e70 6c27 3b0a e 'version.pl';.\n+000008e0: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo\n+000008f0: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require \n+00000900: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re\n+00000910: 7175 6972 6520 2768 756d 616e 5265 6164 quire 'humanRead\n+00000920: 2e70 6c27 3b0a 0a6d 7920 246c 6f63 6b46 .pl';..my $lockF\n+00000930: 696c 6520 3d20 272f 746d 702f 7374 6f72 ile = '/tmp/stor\n+00000940: 6542 6163 6b75 702e 6c6f 636b 273b 2020 eBackup.lock'; \n+00000950: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value\n+00000960: 0a6d 7920 246b 6565 7041 6c6c 203d 2027 .my $keepAll = '\n+00000970: 3330 6427 3b0a 6d79 2024 6b65 6570 4475 30d';.my $keepDu\n+00000980: 706c 6963 6174 6520 3d20 2737 6427 3b0a plicate = '7d';.\n+00000990: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile\n+000009a0: 203d 2027 2e6d 6435 4368 6563 6b53 756d = '.md5CheckSum\n+000009b0: 7327 3b0a 6d79 2024 6368 6d6f 644d 4435 s';.my $chmodMD5\n+000009c0: 4669 6c65 203d 2027 3036 3030 273b 0a0a File = '0600';..\n+000009d0: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto\n+000009e0: 7265 4261 636b 7570 4465 6c2e 706c 202d reBackupDel.pl -\n+000009f0: 2074 6869 7320 7072 6f67 7261 6d20 6465 this program de\n+00000a00: 6c65 7465 7320 6261 636b 7570 7320 6372 letes backups cr\n+00000a10: 6561 7465 6420 6279 2073 746f 7265 4261 eated by storeBa\n+00000a20: 636b 7570 0a0a 3d68 6561 6431 2053 594e ckup..=head1 SYN\n+00000a30: 4f50 5349 530a 0a09 7374 6f72 6542 6163 OPSIS...storeBac\n+00000a40: 6b75 7044 656c 2e70 6c20 5b2d 6620 636f kupDel.pl [-f co\n+00000a50: 6e66 6967 4669 6c65 5d20 5b2d 2d70 7269 nfigFile] [--pri\n+00000a60: 6e74 5d0a 095b 2d62 2062 6163 6b75 7044 nt]..[-b backupD\n+00000a70: 6972 6563 746f 7279 5d20 5b2d 5320 7365 irectory] [-S se\n+00000a80: 7269 6573 5d20 5b2d 2d64 6f4e 6f74 4465 ries] [--doNotDe\n+00000a90: 6c65 7465 5d0a 095b 2d2d 6465 6c65 7465 lete]..[--delete\n+00000aa0: 4e6f 7446 696e 6973 6865 6444 6972 735d NotFinishedDirs]\n+00000ab0: 205b 2d4c 206c 6f63 6b46 696c 655d 0a09 [-L lockFile]..\n+00000ac0: 5b2d 2d6b 6565 7041 6c6c 2074 696d 6550 [--keepAll timeP\n+00000ad0: 6572 696f 645d 205b 2d2d 6b65 6570 5765 eriod] [--keepWe\n+00000ae0: 656b 6461 7920 656e 7472 795d 205b 2d2d ekday entry] [--\n+00000af0: 6b65 6570 4669 7273 744f 6659 6561 725d keepFirstOfYear]\n+00000b00: 0a09 5b2d 2d6b 6565 704c 6173 744f 6659 ..[--keepLastOfY\n+00000b10: 6561 725d 205b 2d2d 6b65 6570 4669 7273 ear] [--keepFirs\n+00000b20: 744f 664d 6f6e 7468 5d20 5b2d 2d6b 6565 tOfMonth] [--kee\n+00000b30: 704c 6173 744f 664d 6f6e 7468 5d0a 095b pLastOfMonth]..[\n+00000b40: 2d2d 6b65 6570 4669 7273 744f 6657 6565 --keepFirstOfWee\n+00000b50: 6b5d 205b 2d2d 6b65 6570 4c61 7374 4f66 k] [--keepLastOf\n+00000b60: 5765 656b 5d0a 095b 2d2d 6b65 6570 4475 Week]..[--keepDu\n+00000b70: 706c 6963 6174 655d 205b 2d2d 6b65 6570 plicate] [--keep\n+00000b80: 4d69 6e4e 756d 6265 725d 205b 2d2d 6b65 MinNumber] [--ke\n+00000b90: 6570 4d61 784e 756d 6265 725d 0a09 5b2d epMaxNumber]..[-\n+00000ba0: 6c20 6c6f 6746 696c 650a 0920 5b2d 2d70 l logFile.. [--p\n+00000bb0: 6c75 734c 6f67 5374 646f 7574 5d20 5b2d lusLogStdout] [-\n+00000bc0: 2d73 7570 7072 6573 7354 696d 655d 205b -suppressTime] [\n+00000bd0: 2d6d 206d 6178 4669 6c65 6c65 6e5d 0a09 -m maxFilelen]..\n+00000be0: 205b 5b2d 6e20 6e6f 4f66 4f6c 6446 696c [[-n noOfOldFil\n+00000bf0: 6573 5d20 7c20 5b2d 2d73 6176 654c 6f67 es] | [--saveLog\n+00000c00: 735d 0a09 205b 2d2d 636f 6d70 7265 7373 s].. [--compress\n+00000c10: 5769 7468 2063 6f6d 7072 6573 7370 726f With compresspro\n+00000c20: 675d 5d0a 0a3d 6865 6164 3120 5741 524e g]]..=head1 WARN\n+00000c30: 494e 470a 0a20 2021 2121 2055 5341 4745 ING.. !!! USAGE\n+00000c40: 2049 4e20 5041 5241 4c4c 454c 2057 4954 IN PARALLEL WIT\n+00000c50: 4820 7374 6f72 6542 6163 6b75 702e 706c H storeBackup.pl\n+00000c60: 2043 414e 2044 4553 5452 4f59 2059 4f55 CAN DESTROY YOU\n+00000c70: 5220 4241 434b 5550 5320 2121 210a 0a3d R BACKUPS !!!..=\n+00000c80: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..=\n+00000c90: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B<\n+00000ca0: 2d2d 6669 6c65 3e2c 2042 3c2d 663e 0a0a --file>, B<-f>..\n+00000cb0: 2020 2020 636f 6e66 6967 7572 6174 696f configuratio\n+00000cc0: 6e20 6669 6c65 2028 696e 7374 6561 6420 n file (instead \n+00000cd0: 6f66 2070 6172 616d 6574 6572 7329 0a0a of parameters)..\n+00000ce0: 3d69 7465 6d20 423c 2d2d 7072 696e 743e =item B<--print>\n+00000cf0: 0a0a 2020 2020 7072 696e 7420 636f 6e66 .. print conf\n+00000d00: 6967 7572 6174 696f 6e20 7265 6164 2066 iguration read f\n+00000d10: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio\n+00000d20: 6e20 6669 6c65 2061 6e64 2073 746f 700a n file and stop.\n+00000d30: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu\n+00000d40: 7044 6972 3e2c 2042 3c2d 623e 0a0a 2020 pDir>, B<-b>.. \n+00000d50: 2020 746f 7020 6c65 7665 6c20 6469 7265 top level dire\n+00000d60: 6374 6f72 7920 6f66 2061 6c6c 2062 6163 ctory of all bac\n+00000d70: 6b75 7073 2028 6d75 7374 2065 7869 7374 kups (must exist\n+00000d80: 290a 0a3d 6974 656d 2042 3c2d 2d73 6572 )..=item B<--ser\n+00000d90: 6965 733e 2c20 423c 2d53 3e0a 0a20 2020 ies>, B<-S>.. \n+00000da0: 2064 6972 6563 746f 7279 206f 6620 6261 directory of ba\n+00000db0: 636b 7570 2073 6572 6965 730a 2020 2020 ckup series. \n+00000dc0: 7361 6d65 2070 6172 616d 6574 6572 2061 same parameter a\n+00000dd0: 7320 696e 2073 746f 7265 4261 636b 7570 s in storeBackup\n+00000de0: 202f 2072 656c 6174 6976 6520 7061 7468 / relative path\n+00000df0: 0a20 2020 2066 726f 6d20 6261 636b 7570 . from backup\n+00000e00: 4469 722c 2064 6566 6175 6c74 2069 7320 Dir, default is \n+00000e10: 2764 6566 6175 6c74 270a 0a3d 6974 656d 'default'..=item\n+00000e20: 2042 3c2d 2d6c 6f63 6b46 696c 653e 2c20 B<--lockFile>, \n+00000e30: 423c 2d4c 3e0a 0a20 2020 206c 6f63 6b20 B<-L>.. lock \n+00000e40: 6669 6c65 2c20 6966 2065 7869 7374 732c file, if exists,\n+00000e50: 206e 6577 2069 6e73 7461 6e63 6573 2077 new instances w\n+00000e60: 696c 6c20 6669 6e69 7368 2069 660a 2020 ill finish if. \n+00000e70: 2020 616e 206f 6c64 2069 7320 616c 7265 an old is alre\n+00000e80: 6164 7920 7275 6e6e 696e 672c 2064 6566 ady running, def\n+00000e90: 6175 6c74 2069 7320 246c 6f63 6b46 696c ault is $lockFil\n+00000ea0: 650a 0a3d 6974 656d 2042 3c2d 2d64 6f4e e..=item B<--doN\n+00000eb0: 6f74 4465 6c65 7465 3e0a 0a20 2020 2074 otDelete>.. t\n+00000ec0: 6573 7420 6f6e 6c79 2c20 646f 206e 6f74 est only, do not\n+00000ed0: 2064 656c 6574 6520 616e 7920 6261 636b delete any back\n+00000ee0: 7570 0a0a 3d69 7465 6d20 423c 2d2d 6465 up..=item B<--de\n+00000ef0: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD\n+00000f00: 6972 733e 0a0a 2020 2020 6465 6c65 7465 irs>.. delete\n+00000f10: 206f 6c64 2062 6163 6b75 7073 2077 6869 old backups whi\n+00000f20: 6368 2077 6865 7265 206e 6f74 2066 696e ch where not fin\n+00000f30: 6973 6865 640a 2020 2020 7468 6973 2077 ished. this w\n+00000f40: 696c 6c20 6e6f 7420 6861 7070 656e 2069 ill not happen i\n+00000f50: 6620 646f 4e6f 7444 656c 6574 6520 6973 f doNotDelete is\n+00000f60: 2073 6574 0a0a 3d69 7465 6d20 423c 2d2d set..=item B<--\n+00000f70: 6b65 6570 416c 6c3e 0a0a 2020 2020 6b65 keepAll>.. ke\n+00000f80: 6570 2062 6163 6b75 7073 2077 6869 6368 ep backups which\n+00000f90: 2061 7265 206e 6f74 206f 6c64 6572 2074 are not older t\n+00000fa0: 6861 6e20 7468 6520 7370 6563 6966 6965 han the specifie\n+00000fb0: 6420 616d 6f75 6e74 0a20 2020 206f 6620 d amount. of \n+00000fc0: 7469 6d65 2e20 5468 6973 2069 7320 6c69 time. This is li\n+00000fd0: 6b65 2061 2064 6566 6175 6c74 2076 616c ke a default val\n+00000fe0: 7565 2066 6f72 2061 6c6c 2064 6179 7320 ue for all days \n+00000ff0: 696e 0a20 2020 202d 2d6b 6565 7057 6565 in. --keepWee\n+00001000: 6b64 6179 2e20 4265 6769 6e73 2064 656c kday. Begins del\n+00001010: 6574 696e 6720 6174 2074 6865 2065 6e64 eting at the end\n+00001020: 206f 6620 7468 6520 7363 7269 7074 0a20 of the script. \n+00001030: 2020 2074 6865 2074 696d 6520 7261 6e67 the time rang\n+00001040: 6520 6861 7320 746f 2062 6520 7370 6563 e has to be spec\n+00001050: 6966 6965 6420 696e 2066 6f72 6d61 7420 ified in format \n+00001060: 2764 686d 7327 2c20 652e 672e 0a20 2020 'dhms', e.g.. \n+00001070: 2031 3064 3468 206d 6561 6e73 2031 3020 10d4h means 10 \n+00001080: 6461 7973 2061 6e64 2034 2068 6f75 7273 days and 4 hours\n+00001090: 0a20 2020 2064 6566 6175 6c74 203d 2024 . default = $\n+000010a0: 6b65 6570 416c 6c3b 0a0a 3d69 7465 6d20 keepAll;..=item \n+000010b0: 423c 2d2d 6b65 6570 5765 656b 6461 793e B<--keepWeekday>\n+000010c0: 0a0a 0909 2020 2020 6b65 6570 2062 6163 .... keep bac\n+000010d0: 6b75 7073 2066 6f72 2074 6865 2073 7065 kups for the spe\n+000010e0: 6369 6669 6564 2064 6179 7320 666f 7220 cified days for \n+000010f0: 7468 6520 7370 6563 6966 6965 640a 0909 the specified...\n+00001100: 2020 2020 616d 6f75 6e74 206f 6620 7469 amount of ti\n+00001110: 6d65 2e20 4f76 6572 7772 6974 6573 2074 me. Overwrites t\n+00001120: 6865 2064 6566 6175 6c74 2076 616c 7565 he default value\n+00001130: 7320 6368 6f73 656e 2069 6e0a 0909 2020 s chosen in... \n+00001140: 2020 2d2d 6b65 6570 416c 6c2e 2027 4d6f --keepAll. 'Mo\n+00001150: 6e2c 5765 643a 3430 6420 5361 743a 3630 n,Wed:40d Sat:60\n+00001160: 6431 306d 2720 6d65 616e 733a 0a09 0909 d10m' means:....\n+00001170: 6b65 6570 2062 6163 6b75 7073 206f 6620 keep backups of \n+00001180: 4d6f 6e20 616e 6420 5765 6420 3430 6461 Mon and Wed 40da\n+00001190: 7973 202b 2035 6d69 6e73 0a09 0909 6b65 ys + 5mins....ke\n+000011a0: 6570 2062 6163 6b75 7073 206f 6620 5361 ep backups of Sa\n+000011b0: 7420 3630 6461 7973 202b 2031 306d 696e t 60days + 10min\n+000011c0: 730a 0909 096b 6565 7020 6261 636b 7570 s....keep backup\n+000011d0: 7320 6f66 2074 6865 2072 6573 7420 6f66 s of the rest of\n+000011e0: 2074 6865 2064 6179 7320 6c69 6b65 2073 the days like s\n+000011f0: 7063 6966 6965 6420 696e 0a09 0909 092d pcified in.....-\n+00001200: 2d6b 6565 7041 6c6c 2028 6465 6661 756c -keepAll (defaul\n+00001210: 7420 246b 6565 7041 6c6c 290a 0909 2020 t $keepAll)... \n+00001220: 2020 6966 2079 6f75 2061 6c73 6f20 7573 if you also us\n+00001230: 6520 7468 6520 2761 7263 6869 7665 2066 e the 'archive f\n+00001240: 6c61 6727 2069 7420 6d65 616e 7320 746f lag' it means to\n+00001250: 206e 6f74 0a09 0920 2020 2064 656c 6574 not... delet\n+00001260: 6520 7468 6520 6166 6665 6374 6564 2064 e the affected d\n+00001270: 6972 6563 746f 7269 6573 2076 6961 202d irectories via -\n+00001280: 2d6b 6565 704d 6178 4e75 6d62 6572 3a0a -keepMaxNumber:.\n+00001290: 0909 2020 2020 2020 2061 3130 6434 6820 .. a10d4h \n+000012a0: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an\n+000012b0: 6420 3420 686f 7572 7320 616e 6420 2761 d 4 hours and 'a\n+000012c0: 7263 6869 7665 2066 6c61 6727 0a09 0920 rchive flag'... \n+000012d0: 2020 2065 2e67 2e20 274d 6f6e 2c57 6564 e.g. 'Mon,Wed\n+000012e0: 3a61 3430 6420 5361 743a 3630 6431 306d :a40d Sat:60d10m\n+000012f0: 2720 6d65 616e 733a 0a09 0909 6b65 6570 ' means:....keep\n+00001300: 2062 6163 6b75 7073 206f 6620 4d6f 6e20 backups of Mon \n+00001310: 616e 6420 5765 6420 3430 6461 7973 202b and Wed 40days +\n+00001320: 2035 6d69 6e73 202b 2027 6172 6368 6976 5mins + 'archiv\n+00001330: 6527 0a09 0909 6b65 6570 2062 6163 6b75 e'....keep backu\n+00001340: 7073 206f 6620 5361 7420 3630 6461 7973 ps of Sat 60days\n+00001350: 202b 2031 306d 696e 730a 0909 096b 6565 + 10mins....kee\n+00001360: 7020 6261 636b 7570 7320 6f66 2074 6865 p backups of the\n+00001370: 2072 6573 7420 6f66 2074 6865 2064 6179 rest of the day\n+00001380: 7320 6c69 6b65 2073 7065 6369 6669 6564 s like specified\n+00001390: 2069 6e0a 0909 0909 2d2d 6b65 6570 416c in.....--keepAl\n+000013a0: 6c20 2864 6566 6175 6c74 2024 6b65 6570 l (default $keep\n+000013b0: 416c 6c29 0a0a 3d69 7465 6d20 423c 2d2d All)..=item B<--\n+000013c0: 6b65 6570 4669 7273 744f 6659 6561 723e keepFirstOfYear>\n+000013d0: 0a0a 2020 2020 646f 206e 6f74 2064 656c .. do not del\n+000013e0: 6574 6520 7468 6520 6669 7273 7420 6261 ete the first ba\n+000013f0: 636b 7570 206f 6620 6120 7965 6172 0a20 ckup of a year. \n+00001400: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim\n+00001410: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos\n+00001420: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f\n+00001430: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<--\n+00001440: 6b65 6570 4c61 7374 4f66 5965 6172 3e0a keepLastOfYear>.\n+00001450: 0a20 2020 2064 6f20 6e6f 7420 6465 6c65 . do not dele\n+00001460: 7465 2074 6865 206c 6173 7420 6261 636b te the last back\n+00001470: 7570 206f 6620 6120 7965 6172 0a20 2020 up of a year. \n+00001480: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP\n+00001490: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi\n+000014a0: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla\n+000014b0: 6727 0a0a 3d69 7465 6d20 423c 2d2d 6b65 g'..=item B<--ke\n+000014c0: 6570 4669 7273 744f 664d 6f6e 7468 3e0a epFirstOfMonth>.\n+000014d0: 0a20 2020 2064 6f20 6e6f 7420 6465 6c65 . do not dele\n+000014e0: 7465 2074 6865 2066 6972 7374 2062 6163 te the first bac\n+000014f0: 6b75 7020 6f66 2061 206d 6f6e 7468 0a20 kup of a month. \n+00001500: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim\n+00001510: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos\n+00001520: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f\n+00001530: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<--\n+00001540: 6b65 6570 4c61 7374 4f66 4d6f 6e74 683e keepLastOfMonth>\n+00001550: 0a0a 2020 2020 646f 206e 6f74 2064 656c .. do not del\n+00001560: 6574 6520 7468 6520 6c61 7374 2062 6163 ete the last bac\n+00001570: 6b75 7020 6f66 2061 206d 6f6e 7468 0a20 kup of a month. \n+00001580: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim\n+00001590: 6550 6572 696f 6420 7769 7468 2070 6f73 ePeriod with pos\n+000015a0: 7369 626c 6520 2761 7263 6869 7665 2066 sible 'archive f\n+000015b0: 6c61 6727 0a0a 3d69 7465 6d20 423c 2d2d lag'..=item B<--\n+000015c0: 6669 7273 7444 6179 4f66 5765 656b 3e0a firstDayOfWeek>.\n+000015d0: 0a20 2020 2064 6566 6175 6c74 3a20 2753 . default: 'S\n+000015e0: 756e 272e 2054 6869 7320 7661 6c75 6520 un'. This value \n+000015f0: 6973 2075 7365 6420 666f 7220 6361 6c63 is used for calc\n+00001600: 756c 6174 696e 670a 2020 2020 2d2d 6b65 ulating. --ke\n+00001610: 6570 4669 7273 744f 6657 6565 6b20 616e epFirstOfWeek an\n+00001620: 6420 2d2d 6b65 6570 4c61 7374 4f66 5765 d --keepLastOfWe\n+00001630: 656b 0a0a 3d69 7465 6d20 423c 2d2d 6b65 ek..=item B<--ke\n+00001640: 6570 4669 7273 744f 6657 6565 6b3e 0a0a epFirstOfWeek>..\n+00001650: 2020 2020 646f 206e 6f74 2064 656c 6574 do not delet\n+00001660: 6520 7468 6520 6669 7273 7420 6261 636b e the first back\n+00001670: 7570 206f 6620 6120 7765 656b 0a20 2020 up of a week. \n+00001680: 2066 6f72 6d61 7420 6973 2074 696d 6550 format is timeP\n+00001690: 6572 696f 6420 7769 7468 2070 6f73 7369 eriod with possi\n+000016a0: 626c 6520 2761 7263 6869 7665 2066 6c61 ble 'archive fla\n+000016b0: 6727 0a0a 3d69 7465 6d20 423c 2d2d 6b65 g'..=item B<--ke\n+000016c0: 6570 4c61 7374 4f66 5765 656b 3e0a 0a20 epLastOfWeek>.. \n+000016d0: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete\n+000016e0: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup\n+000016f0: 206f 6620 6120 7765 656b 0a20 2020 2066 of a week. f\n+00001700: 6f72 6d61 7420 6973 2074 696d 6550 6572 ormat is timePer\n+00001710: 696f 6420 7769 7468 2070 6f73 7369 626c iod with possibl\n+00001720: 6520 2761 7263 6869 7665 2066 6c61 6727 e 'archive flag'\n+00001730: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep\n+00001740: 4475 706c 6963 6174 653e 0a0a 2020 2020 Duplicate>.. \n+00001750: 6b65 6570 206d 756c 7469 706c 6520 6261 keep multiple ba\n+00001760: 636b 7570 7320 6f66 206f 6e65 2064 6179 ckups of one day\n+00001770: 2075 7020 746f 2074 696d 6550 6572 696f up to timePerio\n+00001780: 640a 2020 2020 666f 726d 6174 2069 7320 d. format is \n+00001790: 7469 6d65 5065 7269 6f64 2c20 2761 7263 timePeriod, 'arc\n+000017a0: 6869 7665 2066 6c61 6727 2069 7320 6e6f hive flag' is no\n+000017b0: 7420 706f 7373 6962 6c65 0a20 2020 2064 t possible. d\n+000017c0: 6566 6175 6c74 203d 2024 6b65 6570 4475 efault = $keepDu\n+000017d0: 706c 6963 6174 653b 0a0a 3d69 7465 6d20 plicate;..=item \n+000017e0: 423c 2d2d 6b65 6570 4d69 6e4e 756d 6265 B<--keepMinNumbe\n+000017f0: 723e 0a0a 2020 2020 4b65 6570 2074 6861 r>.. Keep tha\n+00001800: 7420 6d69 6d69 6e75 6d20 6f66 2062 6163 t miminum of bac\n+00001810: 6b75 7073 2e20 4d75 6c74 6970 6c65 2062 kups. Multiple b\n+00001820: 6163 6b75 7073 206f 6620 6f6e 650a 2020 ackups of one. \n+00001830: 2020 6461 7920 6172 6520 636f 756e 7465 day are counte\n+00001840: 6420 6173 206f 6e65 2062 6163 6b75 702e d as one backup.\n+00001850: 2044 6566 6175 6c74 2069 7320 3130 2e0a Default is 10..\n+00001860: 0a3d 6974 656d 2042 3c2d 2d6b 6565 704d .=item B<--keepM\n+00001870: 6178 4e75 6d62 6572 3e0a 0a20 2020 2054 axNumber>.. T\n+00001880: 7279 2074 6f20 6b65 6570 206f 6e6c 7920 ry to keep only \n+00001890: 7468 6174 206d 6178 696d 756d 206f 6620 that maximum of \n+000018a0: 6261 636b 7570 732e 2049 6620 796f 7520 backups. If you \n+000018b0: 6861 7665 0a20 2020 206d 6f72 6520 6261 have. more ba\n+000018c0: 636b 7570 732c 2074 6865 2066 6f6c 6c6f ckups, the follo\n+000018d0: 7769 6e67 2073 6571 7565 6e63 6520 6f66 wing sequence of\n+000018e0: 2064 656c 6574 696e 6720 7769 6c6c 0a20 deleting will. \n+000018f0: 2020 2068 6170 7065 6e3a 0a09 2020 2020 happen:.. \n+00001900: 2d20 6465 6c65 7465 2061 6c6c 2064 7570 - delete all dup\n+00001910: 6c69 6361 7465 7320 6f66 2061 2064 6179 licates of a day\n+00001920: 2c20 6265 6769 6e6e 696e 6720 7769 7468 , beginning with\n+00001930: 2074 6865 0a20 2020 2020 2020 2020 2020 the. \n+00001940: 2020 206f 6c64 206f 6e63 652c 2065 7863 old once, exc\n+00001950: 6570 7420 7468 6520 6f6c 6465 7374 206f ept the oldest o\n+00001960: 6620 6576 6572 7920 6461 790a 0920 2020 f every day.. \n+00001970: 202d 2069 6620 7468 6973 2069 7320 6e6f - if this is no\n+00001980: 7420 656e 6f75 6768 2c20 6465 6c65 7465 t enough, delete\n+00001990: 2074 6865 2072 6573 7420 6f66 2074 6865 the rest of the\n+000019a0: 2062 6163 6b75 7073 0a09 2020 2020 2020 backups.. \n+000019b0: 6265 6769 6e6e 696e 6720 7769 7468 2074 beginning with t\n+000019c0: 6865 206f 6c64 6573 742c 2062 7574 202a he oldest, but *\n+000019d0: 6e65 7665 722a 2061 2062 6163 6b75 7020 never* a backup \n+000019e0: 7769 7468 0a09 2020 2020 2020 7468 6520 with.. the \n+000019f0: 2761 7263 6869 7665 2066 6c61 6727 206f 'archive flag' o\n+00001a00: 7220 7468 6520 6c61 7374 2062 6163 6b75 r the last backu\n+00001a10: 700a 0a3d 6974 656d 2042 3c2d 2d6b 6565 p..=item B<--kee\n+00001a20: 7052 656c 6174 6976 653e 2c20 423c 2d52 pRelative>, B<-R\n+00001a30: 3e0a 0a20 2020 2041 6c74 6572 6e61 7469 >.. Alternati\n+00001a40: 7665 2064 656c 6574 696f 6e20 7363 6865 ve deletion sche\n+00001a50: 6d65 2e20 4966 2079 6f75 2075 7365 2074 me. If you use t\n+00001a60: 6869 7320 6f70 7469 6f6e 2c20 616c 6c20 his option, all \n+00001a70: 6f74 6865 720a 2020 2020 6b65 6570 206f other. keep o\n+00001a80: 7074 696f 6e73 2061 7265 2069 676e 6f72 ptions are ignor\n+00001a90: 6564 2e20 5072 6573 6572 7665 7320 6261 ed. Preserves ba\n+00001aa0: 636b 7570 7320 6465 7065 6e64 696e 670a ckups depending.\n+00001ab0: 2020 2020 6f6e 2074 6865 6972 202a 7265 on their *re\n+00001ac0: 6c61 7469 7665 2a20 6167 652e 2045 7861 lative* age. Exa\n+00001ad0: 6d70 6c65 3a0a 2020 2020 2d52 2027 3164 mple:. -R '1d\n+00001ae0: 2037 6420 326d 2033 6d27 0a20 2020 2020 7d 2m 3m'. \n+00001af0: 2020 2077 696c 6c20 2874 7279 2074 6f29 will (try to)\n+00001b00: 2065 6e73 7572 6520 7468 6174 2074 6865 ensure that the\n+00001b10: 7265 2069 7320 616c 7761 7973 0a09 2d20 re is always..- \n+00001b20: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe\n+00001b30: 656e 2031 2064 6179 2061 6e64 2037 2064 en 1 day and 7 d\n+00001b40: 6179 7320 6f6c 640a 092d 204f 6e65 2062 ays old..- One b\n+00001b50: 6163 6b75 7020 6265 7477 6565 6e20 3520 ackup between 5 \n+00001b60: 6461 7973 2061 6e64 2032 206d 6f6e 7468 days and 2 month\n+00001b70: 7320 6f6c 640a 092d 204f 6e65 2062 6163 s old..- One bac\n+00001b80: 6b75 7020 6265 7477 6565 6e20 3220 6d6f kup between 2 mo\n+00001b90: 6e74 6873 2061 6e64 2033 206d 6f6e 7468 nths and 3 month\n+00001ba0: 7320 6f6c 640a 0949 6620 7468 6572 6520 s old..If there \n+00001bb0: 6973 206e 6f20 6261 636b 7570 2066 6f72 is no backup for\n+00001bc0: 2061 2073 7065 6369 6669 6564 2074 696d a specified tim\n+00001bd0: 6573 7061 6e0a 0928 652e 672e 2062 6563 espan..(e.g. bec\n+00001be0: 6175 7365 2074 6865 206c 6173 7420 6261 ause the last ba\n+00001bf0: 636b 7570 2077 6173 2064 6f6e 6520 6d6f ckup was done mo\n+00001c00: 7265 2074 6861 6e20 3220 7765 656b 730a re than 2 weeks.\n+00001c10: 0961 676f 2920 7468 6520 6e65 7874 206f .ago) the next o\n+00001c20: 6c64 6572 2062 6163 6b75 7020 7769 6c6c lder backup will\n+00001c30: 2062 6520 7573 6564 2066 6f72 2074 6869 be used for thi\n+00001c40: 7320 7469 6d65 7370 616e 2e0a 0a3d 6974 s timespan...=it\n+00001c50: 656d 2042 3c2d 2d6c 6f67 4669 6c65 3e2c em B<--logFile>,\n+00001c60: 2042 3c2d 6c3e 0a0a 2020 2020 6c6f 6720 B<-l>.. log \n+00001c70: 6669 6c65 2028 6465 6661 756c 7420 6973 file (default is\n+00001c80: 2053 5444 4f55 5429 0a0a 3d69 7465 6d20 STDOUT)..=item \n+00001c90: 423c 2d2d 706c 7573 4c6f 6753 7464 6f75 B<--plusLogStdou\n+00001ca0: 743e 0a0a 2020 2020 6966 2079 6f75 2073 t>.. if you s\n+00001cb0: 7065 6369 6679 2061 206c 6f67 2066 696c pecify a log fil\n+00001cc0: 6520 7769 7468 202d 2d6c 6f67 4669 6c65 e with --logFile\n+00001cd0: 2079 6f75 2063 616e 0a20 2020 2061 6464 you can. add\n+00001ce0: 6974 696f 6e61 6c6c 7920 7072 696e 7420 itionally print \n+00001cf0: 7468 6520 6f75 7470 7574 2074 6f20 5354 the output to ST\n+00001d00: 444f 5554 2077 6974 6820 7468 6973 2066 DOUT with this f\n+00001d10: 6c61 670a 0a3d 6974 656d 2042 3c2d 2d73 lag..=item B<--s\n+00001d20: 7570 7072 6573 7354 696d 653e 0a0a 2020 uppressTime>.. \n+00001d30: 2020 7375 7070 7265 7373 206f 7574 7075 suppress outpu\n+00001d40: 7420 6f66 2074 696d 6520 696e 206c 6f67 t of time in log\n+00001d50: 6669 6c65 0a0a 3d69 7465 6d20 423c 2d2d file..=item B<--\n+00001d60: 6d61 7846 696c 656c 656e 3e2c 2042 3c2d maxFilelen>, B<-\n+00001d70: 6d3e 0a0a 2020 2020 6d61 7869 6d61 6c20 m>.. maximal \n+00001d80: 6c65 6e67 7468 206f 6620 6669 6c65 2c20 length of file, \n+00001d90: 6465 6661 756c 7420 3d20 3165 360a 0a3d default = 1e6..=\n+00001da0: 6974 656d 2042 3c2d 2d6e 6f4f 664f 6c64 item B<--noOfOld\n+00001db0: 4669 6c65 733e 2c20 423c 2d6e 3e0a 0a20 Files>, B<-n>.. \n+00001dc0: 2020 206e 756d 6265 7220 6f66 206f 6c64 number of old\n+00001dd0: 206c 6f67 2066 696c 6573 2c20 6465 6661 log files, defa\n+00001de0: 756c 7420 3d20 350a 0a3d 6974 656d 2042 ult = 5..=item B\n+00001df0: 3c2d 2d73 6176 654c 6f67 733e 0a0a 2020 <--saveLogs>.. \n+00001e00: 2020 7361 7665 206c 6f67 2066 696c 6573 save log files\n+00001e10: 2077 6974 6820 6461 7465 2061 6e64 2074 with date and t\n+00001e20: 696d 6520 696e 7374 6561 6420 6f66 2064 ime instead of d\n+00001e30: 656c 6574 696e 6720 7468 650a 2020 2020 eleting the. \n+00001e40: 6f6c 6420 2877 6974 6820 5b2d 6e6f 4f6c old (with [-noOl\n+00001e50: 6446 696c 6573 5d29 0a0a 3d69 7465 6d20 dFiles])..=item \n+00001e60: 423c 2d2d 636f 6d70 7265 7373 5769 7468 B<--compressWith\n+00001e70: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress \n+00001e80: 7361 7665 6420 6c6f 6720 6669 6c65 7320 saved log files \n+00001e90: 2865 2e67 2e20 7769 7468 2027 677a 6970 (e.g. with 'gzip\n+00001ea0: 202d 3927 290a 2020 2020 6465 6661 756c -9'). defaul\n+00001eb0: 7420 6973 2027 627a 6970 3227 0a0a 3d62 t is 'bzip2'..=b\n+00001ec0: 6163 6b0a 0a3d 6865 6164 3120 434f 5059 ack..=head1 COPY\n+00001ed0: 5249 4748 540a 0a43 6f70 7972 6967 6874 RIGHT..Copyright\n+00001ee0: 2028 6329 2032 3030 332d 3230 3038 2062 (c) 2003-2008 b\n+00001ef0: 7920 4865 696e 7a2d 4a6f 7365 6620 436c y Heinz-Josef Cl\n+00001f00: 6165 7320 2873 6565 2052 4541 444d 4529 aes (see README)\n+00001f10: 2e0a 5075 626c 6973 6865 6420 756e 6465 ..Published unde\n+00001f20: 7220 7468 6520 474e 5520 4765 6e65 7261 r the GNU Genera\n+00001f30: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+00001f40: 2076 3320 6f72 2061 6e79 206c 6174 6572 v3 or any later\n+00001f50: 2076 6572 7369 6f6e 0a0a 3d63 7574 0a0a version..=cut..\n+00001f60: 6d79 2024 4865 6c70 203d 206a 6f69 6e28 my $Help = join(\n+00001f70: 2727 2c20 6772 6570 2821 2f5e 5c73 2a24 '', grep(!/^\\s*$\n+00001f80: 2f2c 2060 706f 6432 7465 7874 2024 3060 /, `pod2text $0`\n+00001f90: 2929 3b0a 2448 656c 7020 3d20 2263 616e ));.$Help = \"can\n+00001fa0: 6e6f 7420 6669 6e64 2070 6f64 3274 6578 not find pod2tex\n+00001fb0: 742c 2073 6565 2064 6f63 756d 656e 7461 t, see documenta\n+00001fc0: 7469 6f6e 2066 6f72 2064 6574 6169 6c73 tion for details\n+00001fd0: 5c6e 220a 2020 2020 756e 6c65 7373 2024 \\n\". unless $\n+00001fe0: 4865 6c70 3b0a 0a26 7072 696e 7456 6572 Help;..&printVer\n+00001ff0: 7369 6f6e 7328 5c40 4152 4756 2c20 272d sions(\\@ARGV, '-\n+00002000: 5627 293b 0a0a 6d79 2024 7374 6172 7444 V');..my $startD\n+00002010: 6174 6520 3d20 6461 7465 546f 6f6c 732d ate = dateTools-\n+00002020: 3e6e 6577 2829 3b0a 0a6d 7920 2443 6865 >new();..my $Che\n+00002030: 636b 5061 7220 3d0a 2020 2020 4368 6563 ckPar =. Chec\n+00002040: 6b50 6172 616d 2d3e 6e65 7728 272d 616c kParam->new('-al\n+00002050: 6c6f 774c 6973 7473 2720 3d3e 2027 6e6f lowLists' => 'no\n+00002060: 272c 0a09 0920 2020 2027 2d63 6f6e 6669 ',... '-confi\n+00002070: 6746 696c 6527 203d 3e20 272d 6627 2c0a gFile' => '-f',.\n+00002080: 0909 2020 2020 272d 6c69 7374 2720 3d3e .. '-list' =>\n+00002090: 205b 4f70 7469 6f6e 2d3e 6e65 7728 272d [Option->new('-\n+000020a0: 6e61 6d65 2720 3d3e 2027 636f 6e66 6967 name' => 'config\n+000020b0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n+000020c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+000020d0: 272d 6627 2c0a 0909 0909 0920 2020 2027 '-f',...... '\n+000020e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+000020f0: 2d66 696c 6527 2c0a 0909 0909 0920 2020 -file',...... \n+00002100: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n+00002110: 7327 292c 0a20 2020 2020 2020 2020 2020 s'),. \n+00002120: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002130: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n+00002140: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri\n+00002150: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '-\n+00002160: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+00002170: 2d70 7269 6e74 2729 2c0a 2020 2020 2020 -print'),. \n+00002180: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002190: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+000021a0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+000021b0: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',...\n+000021c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+000021d0: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',....\n+000021e0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+000021f0: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi\n+00002200: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n+00002210: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu\n+00002220: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n+00002230: 272d 6d75 7374 5f62 6527 203d 3e20 2779 '-must_be' => 'y\n+00002240: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n+00002250: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n+00002260: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+00002270: 7728 272d 6e61 6d65 2720 3d3e 2027 7365 w('-name' => 'se\n+00002280: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... \n+00002290: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+000022a0: 272d 5327 2c0a 0909 0909 0920 2020 2027 '-S',...... '\n+000022b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+000022c0: 2d73 6572 6965 7327 2c0a 0909 0909 0920 -series',...... \n+000022d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+000022e0: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... \n+000022f0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n+00002300: 2027 6465 6661 756c 7427 292c 0a09 0909 'default'),....\n+00002310: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+00002320: 616d 6527 203d 3e20 276c 6f63 6b46 696c ame' => 'lockFil\n+00002330: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+00002340: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d4c l_option' => '-L\n+00002350: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00002360: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6c6f _alias' => '--lo\n+00002370: 636b 4669 6c65 272c 0a09 0909 0909 2020 ckFile',...... \n+00002380: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+00002390: 6c6f 636b 4669 6c65 272c 0a09 0909 0909 lockFile',......\n+000023a0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' =\n+000023b0: 3e20 246c 6f63 6b46 696c 6529 2c0a 0909 > $lockFile),...\n+000023c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+000023d0: 6e61 6d65 2720 3d3e 2027 646f 4e6f 7444 name' => 'doNotD\n+000023e0: 656c 6574 6527 2c0a 0909 0909 0920 2020 elete',...... \n+000023f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+00002400: 2027 2d2d 646f 4e6f 7444 656c 6574 6527 '--doNotDelete'\n+00002410: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n+00002420: 6b65 7927 203d 3e20 2764 6f4e 6f74 4465 key' => 'doNotDe\n+00002430: 6c65 7465 272c 0a09 0909 0909 2020 2020 lete',...... \n+00002440: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n+00002450: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n+00002460: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+00002470: 7728 272d 6e61 6d65 2720 3d3e 2027 6465 w('-name' => 'de\n+00002480: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD\n+00002490: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... '\n+000024a0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+000024b0: 2d2d 6465 6c65 7465 4e6f 7446 696e 6973 --deleteNotFinis\n+000024c0: 6865 6444 6972 7327 2c0a 0909 0909 0920 hedDirs',...... \n+000024d0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+000024e0: 2764 656c 6574 654e 6f74 4669 6e69 7368 'deleteNotFinish\n+000024f0: 6564 4469 7273 272c 0a09 0909 0909 2020 edDirs',...... \n+00002500: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet'\n+00002510: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no'\n+00002520: 5d29 2c0a 0909 0909 4f70 7469 6f6e 2d3e ]),.....Option->\n+00002530: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00002540: 6b65 6570 416c 6c27 2c0a 0909 0909 0920 keepAll',...... \n+00002550: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+00002560: 3d3e 2027 2d2d 6b65 6570 416c 6c27 2c0a => '--keepAll',.\n+00002570: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+00002580: 7927 203d 3e20 276b 6565 7041 6c6c 272c y' => 'keepAll',\n+00002590: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n+000025a0: 756c 7427 203d 3e20 246b 6565 7041 6c6c ult' => $keepAll\n+000025b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+000025c0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n+000025d0: 6565 7057 6565 6b64 6179 272c 0a09 0909 eepWeekday',....\n+000025e0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+000025f0: 6e27 203d 3e20 272d 2d6b 6565 7057 6565 n' => '--keepWee\n+00002600: 6b64 6179 272c 0a09 0909 0909 2020 2020 kday',...... \n+00002610: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke\n+00002620: 6570 5765 656b 6461 7927 2c0a 0909 0909 epWeekday',.....\n+00002630: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n+00002640: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n+00002650: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+00002660: 616d 6527 203d 3e20 276b 6565 7046 6972 ame' => 'keepFir\n+00002670: 7374 4f66 5965 6172 272c 0a09 0909 0909 stOfYear',......\n+00002680: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00002690: 203d 3e20 272d 2d6b 6565 7046 6972 7374 => '--keepFirst\n+000026a0: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... \n+000026b0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+000026c0: 6b65 6570 4669 7273 744f 6659 6561 7227 keepFirstOfYear'\n+000026d0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n+000026e0: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),..\n+000026f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+00002700: 2d6e 616d 6527 203d 3e20 276b 6565 704c -name' => 'keepL\n+00002710: 6173 744f 6659 6561 7227 2c0a 0909 0909 astOfYear',.....\n+00002720: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+00002730: 2720 3d3e 2027 2d2d 6b65 6570 4c61 7374 ' => '--keepLast\n+00002740: 4f66 5965 6172 272c 0a09 0909 0909 2020 OfYear',...... \n+00002750: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+00002760: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear',\n+00002770: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n+00002780: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n+00002790: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+000027a0: 6e61 6d65 2720 3d3e 2027 6b65 6570 4669 name' => 'keepFi\n+000027b0: 7273 744f 664d 6f6e 7468 272c 0a09 0909 rstOfMonth',....\n+000027c0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+000027d0: 6e27 203d 3e20 272d 2d6b 6565 7046 6972 n' => '--keepFir\n+000027e0: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',.....\n+000027f0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+00002800: 3e20 276b 6565 7046 6972 7374 4f66 4d6f > 'keepFirstOfMo\n+00002810: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... '\n+00002820: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n+00002830: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00002840: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n+00002850: 6565 704c 6173 744f 664d 6f6e 7468 272c eepLastOfMonth',\n+00002860: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00002870: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n+00002880: 704c 6173 744f 664d 6f6e 7468 272c 0a09 pLastOfMonth',..\n+00002890: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+000028a0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf\n+000028b0: 4d6f 6e74 6827 2c0a 0909 0909 0920 2020 Month',...... \n+000028c0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n+000028d0: 7327 292c 0a20 2020 2020 2020 2020 2020 s'),. \n+000028e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000028f0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n+00002900: 2827 2d6e 616d 6527 203d 3e20 2766 6972 ('-name' => 'fir\n+00002910: 7374 4461 794f 6657 6565 6b27 2c0a 0909 stDayOfWeek',...\n+00002920: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00002930: 6f6e 2720 3d3e 2027 2d2d 6669 7273 7444 on' => '--firstD\n+00002940: 6179 4f66 5765 656b 272c 0a09 0909 0909 ayOfWeek',......\n+00002950: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+00002960: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek\n+00002970: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n+00002980: 6661 756c 7427 203d 3e20 2753 756e 2729 fault' => 'Sun')\n+00002990: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+000029a0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke\n+000029b0: 6570 4669 7273 744f 6657 6565 6b27 2c0a epFirstOfWeek',.\n+000029c0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+000029d0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n+000029e0: 4669 7273 744f 6657 6565 6b27 2c0a 0909 FirstOfWeek',...\n+000029f0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+00002a00: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf\n+00002a10: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... \n+00002a20: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+00002a30: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n+00002a40: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00002a50: 6b65 6570 4c61 7374 4f66 5765 656b 272c keepLastOfWeek',\n+00002a60: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00002a70: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n+00002a80: 704c 6173 744f 6657 6565 6b27 2c0a 0909 pLastOfWeek',...\n+00002a90: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+00002aa0: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW\n+00002ab0: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... '\n+00002ac0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n+00002ad0: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. \n+00002ae0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002af0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n+00002b00: 2d6e 616d 6527 203d 3e20 276b 6565 7044 -name' => 'keepD\n+00002b10: 7570 6c69 6361 7465 272c 0a09 0909 0909 uplicate',......\n+00002b20: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00002b30: 203d 3e20 272d 2d6b 6565 7044 7570 6c69 => '--keepDupli\n+00002b40: 6361 7465 272c 0a09 0909 0909 2020 2020 cate',...... \n+00002b50: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke\n+00002b60: 6570 4475 706c 6963 6174 6527 2c0a 0909 epDuplicate',...\n+00002b70: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+00002b80: 2720 3d3e 2024 6b65 6570 4475 706c 6963 ' => $keepDuplic\n+00002b90: 6174 6529 2c0a 2020 2020 2020 2020 2020 ate),. \n+00002ba0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002bb0: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne\n+00002bc0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke\n+00002bd0: 6570 4d69 6e4e 756d 6265 7227 2c0a 0909 epMinNumber',...\n+00002be0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00002bf0: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 4d69 on' => '--keepMi\n+00002c00: 6e4e 756d 6265 7227 2c0a 0909 0909 0920 nNumber',...... \n+00002c10: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+00002c20: 276b 6565 704d 696e 4e75 6d62 6572 272c 'keepMinNumber',\n+00002c30: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n+00002c40: 756c 7427 203d 3e20 3130 2c0a 0909 0909 ult' => 10,.....\n+00002c50: 0920 2020 2027 2d70 6174 7465 726e 2720 . '-pattern' \n+00002c60: 3d3e 2027 5c41 5c64 2b5c 5a27 292c 0a20 => '\\A\\d+\\Z'),. \n+00002c70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002c80: 2020 2020 2020 2020 2020 2020 2020 204f O\n+00002c90: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00002ca0: 6527 203d 3e20 276b 6565 704d 6178 4e75 e' => 'keepMaxNu\n+00002cb0: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... \n+00002cc0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+00002cd0: 272d 2d6b 6565 704d 6178 4e75 6d62 6572 '--keepMaxNumber\n+00002ce0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+00002cf0: 5f6b 6579 2720 3d3e 2027 6b65 6570 4d61 _key' => 'keepMa\n+00002d00: 784e 756d 6265 7227 2c0a 0909 0909 0920 xNumber',...... \n+00002d10: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n+00002d20: 2030 2c0a 0909 0909 0920 2020 2027 2d70 0,...... '-p\n+00002d30: 6174 7465 726e 2720 3d3e 2027 5c41 5c64 attern' => '\\A\\d\n+00002d40: 2b5c 5a27 292c 0a20 2020 2020 2020 2020 +\\Z'),. \n+00002d50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002d60: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n\n+00002d70: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n+00002d80: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',...\n+00002d90: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00002da0: 6f6e 2720 3d3e 2027 2d2d 6b65 6570 5265 on' => '--keepRe\n+00002db0: 6c61 7469 7665 272c 0a09 0909 0909 2020 lative',...... \n+00002dc0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+00002dd0: 6b65 6570 5265 6c61 7469 7665 272c 0a09 keepRelative',..\n+00002de0: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE\n+00002df0: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',..\n+00002e00: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n+00002e10: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n+00002e20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+00002e30: 6d65 2720 3d3e 2027 6c6f 6746 696c 6527 me' => 'logFile'\n+00002e40: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00002e50: 6f70 7469 6f6e 2720 3d3e 2027 2d6c 272c option' => '-l',\n+00002e60: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+00002e70: 6c69 6173 2720 3d3e 2027 2d2d 6c6f 6746 lias' => '--logF\n+00002e80: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n+00002e90: 2d63 665f 6b65 7927 203d 3e20 276c 6f67 -cf_key' => 'log\n+00002ea0: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n+00002eb0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+00002ec0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n+00002ed0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00002ee0: 706c 7573 4c6f 6753 7464 6f75 7427 2c0a plusLogStdout',.\n+00002ef0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00002f00: 7469 6f6e 2720 3d3e 2027 2d2d 706c 7573 tion' => '--plus\n+00002f10: 4c6f 6753 7464 6f75 7427 2c0a 0909 0909 LogStdout',.....\n+00002f20: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+00002f30: 3e20 2770 6c75 734c 6f67 5374 646f 7574 > 'plusLogStdout\n+00002f40: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+00002f50: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => ['\n+00002f60: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),...\n+00002f70: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+00002f80: 6e61 6d65 2720 3d3e 2027 7375 7070 7265 name' => 'suppre\n+00002f90: 7373 5469 6d65 272c 0a09 0909 0909 2020 ssTime',...... \n+00002fa0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00002fb0: 3e20 272d 2d73 7570 7072 6573 7354 696d > '--suppressTim\n+00002fc0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+00002fd0: 665f 6b65 7927 203d 3e20 2773 7570 7072 f_key' => 'suppr\n+00002fe0: 6573 7354 696d 6527 2c0a 0909 0909 0920 essTime',...... \n+00002ff0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' =>\n+00003000: 2022 5b6c 6f67 4669 6c65 5d22 2c0a 0909 \"[logFile]\",...\n+00003010: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp\n+00003020: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes',\n+00003030: 2027 6e6f 275d 292c 0a09 0909 094f 7074 'no']),.....Opt\n+00003040: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00003050: 203d 3e20 276d 6178 4669 6c65 6c65 6e27 => 'maxFilelen'\n+00003060: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00003070: 6f70 7469 6f6e 2720 3d3e 2027 2d6d 272c option' => '-m',\n+00003080: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+00003090: 6c69 6173 2720 3d3e 2027 2d2d 6d61 7846 lias' => '--maxF\n+000030a0: 696c 656c 656e 272c 0a09 0909 0909 2020 ilelen',...... \n+000030b0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+000030c0: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',....\n+000030d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n+000030e0: 203d 3e20 3165 362c 0a09 0909 0909 2020 => 1e6,...... \n+000030f0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n+00003100: 275c 415b 655c 645d 2b5c 5a27 2c0a 0909 '\\A[e\\d]+\\Z',...\n+00003110: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if\n+00003120: 2720 3d3e 2022 5b6c 6f67 4669 6c65 5d22 ' => \"[logFile]\"\n+00003130: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00003140: 6577 2827 2d6e 616d 6527 203d 3e20 276e ew('-name' => 'n\n+00003150: 6f4f 664f 6c64 4669 6c65 7327 2c0a 0909 oOfOldFiles',...\n+00003160: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00003170: 6f6e 2720 3d3e 2027 2d6e 272c 0a09 0909 on' => '-n',....\n+00003180: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+00003190: 2720 3d3e 2027 2d2d 6e6f 4f66 4f6c 6446 ' => '--noOfOldF\n+000031a0: 696c 6573 272c 0a09 0909 0909 2020 2020 iles',...... \n+000031b0: 272d 6366 5f6b 6579 2720 3d3e 2027 6e6f '-cf_key' => 'no\n+000031c0: 4f66 4f6c 6446 696c 6573 272c 0a09 0909 OfOldFiles',....\n+000031d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n+000031e0: 203d 3e20 2735 272c 0a09 0909 0909 2020 => '5',...... \n+000031f0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n+00003200: 275c 415c 642b 5c5a 272c 0a09 0909 0909 '\\A\\d+\\Z',......\n+00003210: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n+00003220: 3e22 5b6c 6f67 4669 6c65 5d22 292c 0a20 >\"[logFile]\"),. \n+00003230: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003240: 2020 2020 2020 2020 2020 2020 2020 204f O\n+00003250: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00003260: 6527 203d 3e20 2773 6176 654c 6f67 7327 e' => 'saveLogs'\n+00003270: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00003280: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7361 option' => '--sa\n+00003290: 7665 4c6f 6773 272c 0a09 0909 0909 2020 veLogs',...... \n+000032a0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+000032b0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',......\n+000032c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n+000032d0: 3e20 225b 6c6f 6746 696c 655d 222c 0a09 > \"[logFile]\",..\n+000032e0: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO\n+000032f0: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes'\n+00003300: 2c20 276e 6f27 5d29 2c0a 2020 2020 2020 , 'no']),. \n+00003310: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003320: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+00003330: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00003340: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith',\n+00003350: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00003360: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com\n+00003370: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',.....\n+00003380: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+00003390: 3e20 2763 6f6d 7072 6573 7357 6974 6827 > 'compressWith'\n+000033a0: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo\n+000033b0: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes'\n+000033c0: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n+000033d0: 6175 6c74 2720 3d3e 2027 627a 6970 3227 ault' => 'bzip2'\n+000033e0: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl\n+000033f0: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>\"[logFil\n+00003400: 655d 2229 2c0a 2320 6869 6464 656e 206f e]\"),.# hidden o\n+00003410: 7074 696f 6e73 0a09 0909 094f 7074 696f ptions.....Optio\n+00003420: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00003430: 3e20 2770 7269 6e74 416c 6c27 2c0a 0909 > 'printAll',...\n+00003440: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00003450: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7441 on' => '--printA\n+00003460: 6c6c 272c 0a09 0909 0909 2020 2020 272d ll',...... '-\n+00003470: 6869 6464 656e 2720 3d3e 2027 7965 7327 hidden' => 'yes'\n+00003480: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00003490: 6577 2827 2d6e 616d 6527 203d 3e20 2774 ew('-name' => 't\n+000034a0: 6f64 6179 4f70 7427 2c0a 0909 0909 0920 odayOpt',...... \n+000034b0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+000034c0: 3d3e 2027 2d2d 746f 6461 7927 2c0a 0909 => '--today',...\n+000034d0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+000034e0: 203d 3e20 2774 6f64 6179 272c 0a09 0909 => 'today',....\n+000034f0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' \n+00003500: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... \n+00003510: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n+00003520: 7965 7327 290a 0909 0909 5d0a 0909 2020 yes').....]... \n+00003530: 2020 293b 0a0a 2443 6865 636b 5061 722d );..$CheckPar-\n+00003540: 3e63 6865 636b 2827 2d61 7267 7627 203d >check('-argv' =\n+00003550: 3e20 5c40 4152 4756 2c0a 2020 2020 2020 > \\@ARGV,. \n+00003560: 2020 2020 2020 2020 2020 2027 2d68 656c '-hel\n+00003570: 7027 203d 3e20 2448 656c 702c 0a20 2020 p' => $Help,. \n+00003580: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+00003590: 6967 6e6f 7265 4164 6469 7469 6f6e 616c ignoreAdditional\n+000035a0: 4b65 7973 2720 3d3e 2031 0a20 2020 2020 Keys' => 1. \n+000035b0: 2020 2020 2020 2020 2020 2020 293b 0a0a );..\n+000035c0: 2320 4175 7377 6572 7475 6e67 2064 6572 # Auswertung der\n+000035d0: 2050 6172 616d 6574 6572 0a6d 7920 2463 Parameter.my $c\n+000035e0: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che\n+000035f0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00003600: 6850 6172 2827 636f 6e66 6967 4669 6c65 hPar('configFile\n+00003610: 2729 3b0a 6d79 2024 7072 696e 7420 3d20 ');.my $print = \n+00003620: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00003630: 7457 6974 686f 7574 5061 7228 2770 7269 tWithoutPar('pri\n+00003640: 6e74 2729 3b0a 0a6d 7920 2462 6163 6b75 nt');..my $backu\n+00003650: 7044 6972 203d 2024 4368 6563 6b50 6172 pDir = $CheckPar\n+00003660: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00003670: 2762 6163 6b75 7044 6972 2729 3b0a 6d79 'backupDir');.my\n+00003680: 2024 7365 7269 6573 203d 2024 4368 6563 $series = $Chec\n+00003690: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+000036a0: 5061 7228 2773 6572 6965 7327 293b 0a0a Par('series');..\n+000036b0: 6d79 2024 6c6f 636b 4669 6c65 203d 2024 my $lockFile = $\n+000036c0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+000036d0: 5769 7468 5061 7228 276c 6f63 6b46 696c WithPar('lockFil\n+000036e0: 6527 293b 0a6d 7920 2464 6f4e 6f74 4465 e');.my $doNotDe\n+000036f0: 6c65 7465 203d 2024 4368 6563 6b50 6172 lete = $CheckPar\n+00003700: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00003710: 6172 2827 646f 4e6f 7444 656c 6574 6527 ar('doNotDelete'\n+00003720: 293b 0a6d 7920 2464 656c 6574 654e 6f74 );.my $deleteNot\n+00003730: 4669 6e69 7368 6564 4469 7273 203d 2024 FinishedDirs = $\n+00003740: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00003750: 5769 7468 6f75 7450 6172 2827 6465 6c65 WithoutPar('dele\n+00003760: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir\n+00003770: 7327 293b 0a24 6b65 6570 416c 6c20 3d20 s');.$keepAll = \n+00003780: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00003790: 7457 6974 6850 6172 2827 6b65 6570 416c tWithPar('keepAl\n+000037a0: 6c27 293b 0a6d 7920 246b 6565 7057 6565 l');.my $keepWee\n+000037b0: 6b64 6179 203d 2024 4368 6563 6b50 6172 kday = $CheckPar\n+000037c0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+000037d0: 276b 6565 7057 6565 6b64 6179 2729 3b0a 'keepWeekday');.\n+000037e0: 246b 6565 7057 6565 6b64 6179 203d 2022 $keepWeekday = \"\n+000037f0: 4024 6b65 6570 5765 656b 6461 7922 2069 @$keepWeekday\" i\n+00003800: 6620 6465 6669 6e65 6420 246b 6565 7057 f defined $keepW\n+00003810: 6565 6b64 6179 3b0a 6d79 2024 6b65 6570 eekday;.my $keep\n+00003820: 4669 7273 744f 6659 6561 7220 3d20 2443 FirstOfYear = $C\n+00003830: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00003840: 6974 6850 6172 2827 6b65 6570 4669 7273 ithPar('keepFirs\n+00003850: 744f 6659 6561 7227 293b 0a6d 7920 246b tOfYear');.my $k\n+00003860: 6565 704c 6173 744f 6659 6561 7220 3d20 eepLastOfYear = \n+00003870: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00003880: 7457 6974 6850 6172 2827 6b65 6570 4c61 tWithPar('keepLa\n+00003890: 7374 4f66 5965 6172 2729 3b0a 6d79 2024 stOfYear');.my $\n+000038a0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n+000038b0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000038c0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee\n+000038d0: 7046 6972 7374 4f66 4d6f 6e74 6827 293b pFirstOfMonth');\n+000038e0: 0a6d 7920 246b 6565 704c 6173 744f 664d .my $keepLastOfM\n+000038f0: 6f6e 7468 203d 2024 4368 6563 6b50 6172 onth = $CheckPar\n+00003900: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00003910: 276b 6565 704c 6173 744f 664d 6f6e 7468 'keepLastOfMonth\n+00003920: 2729 3b0a 6d79 2024 6669 7273 7444 6179 ');.my $firstDay\n+00003930: 4f66 5765 656b 203d 2024 4368 6563 6b50 OfWeek = $CheckP\n+00003940: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00003950: 7228 2766 6972 7374 4461 794f 6657 6565 r('firstDayOfWee\n+00003960: 6b27 293b 0a6d 7920 246b 6565 7046 6972 k');.my $keepFir\n+00003970: 7374 4f66 5765 656b 203d 2024 4368 6563 stOfWeek = $Chec\n+00003980: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00003990: 5061 7228 276b 6565 7046 6972 7374 4f66 Par('keepFirstOf\n+000039a0: 5765 656b 2729 3b0a 6d79 2024 6b65 6570 Week');.my $keep\n+000039b0: 4c61 7374 4f66 5765 656b 203d 2024 4368 LastOfWeek = $Ch\n+000039c0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+000039d0: 7468 5061 7228 276b 6565 704c 6173 744f thPar('keepLastO\n+000039e0: 6657 6565 6b27 293b 0a24 6b65 6570 4475 fWeek');.$keepDu\n+000039f0: 706c 6963 6174 6520 3d20 2443 6865 636b plicate = $Check\n+00003a00: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00003a10: 6172 2827 6b65 6570 4475 706c 6963 6174 ar('keepDuplicat\n+00003a20: 6527 293b 0a6d 7920 246b 6565 704d 696e e');.my $keepMin\n+00003a30: 4e75 6d62 6572 203d 2024 4368 6563 6b50 Number = $CheckP\n+00003a40: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00003a50: 7228 276b 6565 704d 696e 4e75 6d62 6572 r('keepMinNumber\n+00003a60: 2729 3b0a 6d79 2024 6b65 6570 4d61 784e ');.my $keepMaxN\n+00003a70: 756d 6265 7220 3d20 2443 6865 636b 5061 umber = $CheckPa\n+00003a80: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00003a90: 2827 6b65 6570 4d61 784e 756d 6265 7227 ('keepMaxNumber'\n+00003aa0: 293b 0a6d 7920 246b 6565 7052 656c 6174 );.my $keepRelat\n+00003ab0: 6976 6520 3d20 2443 6865 636b 5061 722d ive = $CheckPar-\n+00003ac0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00003ad0: 6b65 6570 5265 6c61 7469 7665 2729 3b0a keepRelative');.\n+00003ae0: 6d79 2024 6c6f 6746 696c 6520 3d20 2443 my $logFile = $C\n+00003af0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00003b00: 6974 6850 6172 2827 6c6f 6746 696c 6527 ithPar('logFile'\n+00003b10: 293b 0a6d 7920 2470 6c75 734c 6f67 5374 );.my $plusLogSt\n+00003b20: 646f 7574 203d 2024 4368 6563 6b50 6172 dout = $CheckPar\n+00003b30: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00003b40: 6172 2827 706c 7573 4c6f 6753 7464 6f75 ar('plusLogStdou\n+00003b50: 7427 293b 0a6d 7920 2477 6974 6854 696d t');.my $withTim\n+00003b60: 6520 3d20 6e6f 7420 2443 6865 636b 5061 e = not $CheckPa\n+00003b70: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n+00003b80: 5061 7228 2773 7570 7072 6573 7354 696d Par('suppressTim\n+00003b90: 6527 293b 0a24 7769 7468 5469 6d65 203d e');.$withTime =\n+00003ba0: 2024 7769 7468 5469 6d65 203f 2027 7965 $withTime ? 'ye\n+00003bb0: 7327 203a 2027 6e6f 273b 0a6d 7920 246d s' : 'no';.my $m\n+00003bc0: 6178 4669 6c65 6c65 6e20 3d20 2443 6865 axFilelen = $Che\n+00003bd0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00003be0: 6850 6172 2827 6d61 7846 696c 656c 656e hPar('maxFilelen\n+00003bf0: 2729 3b0a 6d79 2024 6e6f 4f66 4f6c 6446 ');.my $noOfOldF\n+00003c00: 696c 6573 203d 2024 4368 6563 6b50 6172 iles = $CheckPar\n+00003c10: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00003c20: 276e 6f4f 664f 6c64 4669 6c65 7327 293b 'noOfOldFiles');\n+00003c30: 0a6d 7920 2473 6176 654c 6f67 7320 3d20 .my $saveLogs = \n+00003c40: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00003c50: 7457 6974 686f 7574 5061 7228 2773 6176 tWithoutPar('sav\n+00003c60: 654c 6f67 7327 2920 3f20 2779 6573 2720 eLogs') ? 'yes' \n+00003c70: 3a20 276e 6f27 3b0a 6d79 2024 636f 6d70 : 'no';.my $comp\n+00003c80: 7265 7373 5769 7468 203d 2024 4368 6563 ressWith = $Chec\n+00003c90: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00003ca0: 5061 7228 2763 6f6d 7072 6573 7357 6974 Par('compressWit\n+00003cb0: 6827 293b 0a0a 6d79 2024 7072 696e 7441 h');..my $printA\n+00003cc0: 6c6c 203d 2024 4368 6563 6b50 6172 2d3e ll = $CheckPar->\n+00003cd0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n+00003ce0: 2827 7072 696e 7441 6c6c 2729 3b0a 2470 ('printAll');.$p\n+00003cf0: 7269 6e74 203d 2031 2069 6620 2470 7269 rint = 1 if $pri\n+00003d00: 6e74 416c 6c3b 0a6d 7920 2474 6f64 6179 ntAll;.my $today\n+00003d10: 4f70 7420 3d20 2443 6865 636b 5061 722d Opt = $CheckPar-\n+00003d20: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n+00003d30: 746f 6461 794f 7074 2729 3b20 2023 2066 todayOpt'); # f\n+00003d40: 6f72 6d61 7420 6c69 6b65 0a20 2020 2020 ormat like. \n+00003d50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003d60: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003d70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003d80: 2023 2062 6163 6b75 7020 6469 7220 6e61 # backup dir na\n+00003d90: 6d65 0a0a 6966 2028 2470 7269 6e74 290a me..if ($print).\n+00003da0: 7b0a 2020 2020 2443 6865 636b 5061 722d {. $CheckPar-\n+00003db0: 3e70 7269 6e74 2827 2d73 686f 7748 6964 >print('-showHid\n+00003dc0: 6465 6e27 203d 3e20 2470 7269 6e74 416c den' => $printAl\n+00003dd0: 6c29 3b0a 2020 2020 6578 6974 2030 3b0a l);. exit 0;.\n+00003de0: 7d0a 0a6d 7920 2470 724c 6f67 3b0a 6d79 }..my $prLog;.my\n+00003df0: 2028 406b 696e 6429 203d 2028 2749 3a49 (@kind) = ('I:I\n+00003e00: 4e46 4f27 2c20 2757 3a57 4152 4e49 4e47 NFO', 'W:WARNING\n+00003e10: 272c 2027 453a 4552 524f 5227 2c20 2753 ', 'E:ERROR', 'S\n+00003e20: 3a53 5441 5449 5354 4943 272c 0a09 2020 :STATISTIC',.. \n+00003e30: 2020 2020 2744 3a44 4542 5547 272c 2027 'D:DEBUG', '\n+00003e40: 563a 5645 5253 494f 4e27 293b 0a0a 6966 V:VERSION');..if\n+00003e50: 2028 246c 6f67 4669 6c65 290a 7b0a 2020 ($logFile).{. \n+00003e60: 2020 2470 724c 6f67 203d 2070 7269 6e74 $prLog = print\n+00003e70: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind'\n+00003e80: 203d 3e20 5c40 6b69 6e64 2c0a 0909 0920 => \\@kind,.... \n+00003e90: 2020 272d 6669 6c65 2720 3d3e 2024 6c6f '-file' => $lo\n+00003ea0: 6746 696c 652c 0a09 0909 2020 272d 7769 gFile,.... '-wi\n+00003eb0: 7468 5469 6d65 2720 3d3e 2024 7769 7468 thTime' => $with\n+00003ec0: 5469 6d65 2c0a 0909 0920 2027 2d6d 6178 Time,.... '-max\n+00003ed0: 4669 6c65 6c65 6e27 203d 3e20 246d 6178 Filelen' => $max\n+00003ee0: 4669 6c65 6c65 6e2c 0a09 0909 2020 272d Filelen,.... '-\n+00003ef0: 6e6f 4f66 4f6c 6446 696c 6573 2720 3d3e noOfOldFiles' =>\n+00003f00: 2024 6e6f 4f66 4f6c 6446 696c 6573 293b $noOfOldFiles);\n+00003f10: 0a7d 0a65 6c73 650a 7b0a 2020 2020 2470 .}.else.{. $p\n+00003f20: 724c 6f67 203d 2070 7269 6e74 4c6f 672d rLog = printLog-\n+00003f30: 3e6e 6577 2827 2d6b 696e 6427 203d 3e20 >new('-kind' => \n+00003f40: 5c40 6b69 6e64 293b 0a7d 0a0a 2470 724c \\@kind);.}..$prL\n+00003f50: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00003f60: 2720 3d3e 2027 5627 2c0a 0920 2020 2020 ' => 'V',.. \n+00003f70: 2027 2d73 7472 2720 3d3e 205b 2224 5645 '-str' => [\"$VE\n+00003f80: 5253 494f 4e70 4e61 6d65 2c20 246d 6169 RSIONpName, $mai\n+00003f90: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n+00003fa0: 5253 494f 4e2c 2022 202e 0a09 0909 2022 RSION, \" ..... \"\n+00003fb0: 6275 696c 6420 2456 4552 5349 4f4e 7376 build $VERSIONsv\n+00003fc0: 6e49 4422 5d29 3b0a 0a24 7072 4c6f 672d nID\"]);..$prLog-\n+00003fd0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00003fe0: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '-\n+00003ff0: 7374 7227 203d 3e20 5b22 6261 636b 7570 str' => [\"backup\n+00004000: 4469 7220 6469 7265 6374 6f72 7920 3c24 Dir directory <$\n+00004010: 6261 636b 7570 4469 723e 2064 6f65 7320 backupDir> does \n+00004020: 6e6f 7420 6578 6973 745c 6e24 4865 6c70 not exist\\n$Help\n+00004030: 225d 2c0a 0920 2020 2020 2027 2d65 7869 \"],.. '-exi\n+00004040: 7427 203d 3e20 3129 0a20 2020 2075 6e6c t' => 1). unl\n+00004050: 6573 7320 2d65 2024 6261 636b 7570 4469 ess -e $backupDi\n+00004060: 723b 0a0a 6d79 2024 7461 7267 6574 4469 r;..my $targetDi\n+00004070: 7220 3d20 2224 6261 636b 7570 4469 722f r = \"$backupDir/\n+00004080: 2473 6572 6965 7322 3b0a 2470 724c 6f67 $series\";.$prLog\n+00004090: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000040a0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. '\n+000040b0: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => [\"canno\n+000040c0: 7420 7772 6974 6520 746f 2074 6172 6765 t write to targe\n+000040d0: 7420 6469 7265 6374 6f72 7920 3c24 7461 t directory <$ta\n+000040e0: 7267 6574 4469 723e 225d 2c0a 0920 2020 rgetDir>\"],.. \n+000040f0: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n+00004100: 0a20 2020 2075 6e6c 6573 7320 282d 7720 . unless (-w \n+00004110: 2474 6172 6765 7444 6972 293b 0a24 7461 $targetDir);.$ta\n+00004120: 7267 6574 4469 7220 3d20 3a3a 6162 736f rgetDir = ::abso\n+00004130: 6c75 7465 5061 7468 2824 7461 7267 6574 lutePath($target\n+00004140: 4469 7229 3b0a 0a0a 6d79 2024 616c 6c4c Dir);...my $allL\n+00004150: 696e 6b73 203d 206c 6174 654c 696e 6b73 inks = lateLinks\n+00004160: 2d3e 6e65 7728 272d 6469 7273 2720 3d3e ->new('-dirs' =>\n+00004170: 205b 2474 6172 6765 7444 6972 5d2c 0a09 [$targetDir],..\n+00004180: 0909 2020 2020 2020 272d 6b69 6e64 2720 .. '-kind' \n+00004190: 3d3e 2027 7265 6375 7273 6976 6553 6561 => 'recursiveSea\n+000041a0: 7263 6827 2c0a 0909 0920 2020 2020 2027 rch',.... '\n+000041b0: 2d76 6572 626f 7365 2720 3d3e 2030 2c0a -verbose' => 0,.\n+000041c0: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog\n+000041d0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a0a ' => $prLog);...\n+000041e0: 230a 2320 6c6f 636b 2066 696c 6520 fc62 #.# lock file .b\n+000041f0: 6572 7072 fc66 656e 0a23 0a69 6620 2824 erpr.fen.#.if ($\n+00004200: 6c6f 636b 4669 6c65 290a 7b0a 2020 2020 lockFile).{. \n+00004210: 6966 2028 2d66 2024 6c6f 636b 4669 6c65 if (-f $lockFile\n+00004220: 290a 2020 2020 7b0a 096f 7065 6e28 4649 ). {..open(FI\n+00004230: 4c45 2c20 223c 2024 6c6f 636b 4669 6c65 LE, \"< $lockFile\n+00004240: 2229 206f 720a 0920 2020 2024 7072 4c6f \") or.. $prLo\n+00004250: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00004260: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+00004270: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n+00004280: 2072 6561 6420 6c6f 636b 2066 696c 6520 read lock file \n+00004290: 3c24 6c6f 636b 4669 6c65 3e22 5d2c 0a09 <$lockFile>\"],..\n+000042a0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n+000042b0: 293b 0a09 6d79 2024 7069 6420 3d20 3c46 );..my $pid = ;..chop $pid\n+000042d0: 3b0a 0963 6c6f 7365 2846 494c 4529 3b0a ;..close(FILE);.\n+000042e0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+000042f0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00004300: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00004310: 205b 2273 7472 616e 6765 2066 6f72 6d61 [\"strange forma\n+00004320: 7420 696e 206c 6f63 6b20 6669 6c65 203c t in lock file <\n+00004330: 246c 6f63 6b46 696c 653e 2c20 2220 2e0a $lockFile>, \" ..\n+00004340: 0909 0909 2022 6c69 6e65 2069 7320 3c24 .... \"line is <$\n+00004350: 7069 643e 225d 2c0a 0909 2020 2020 2020 pid>\"],... \n+00004360: 272d 6578 6974 2720 3d3e 2031 290a 0920 '-exit' => 1).. \n+00004370: 2020 2075 6e6c 6573 7320 2824 7069 6420 unless ($pid \n+00004380: 3d7e 202f 5c41 5c64 2b5c 5a2f 6f29 3b0a =~ /\\A\\d+\\Z/o);.\n+00004390: 0969 6620 286b 696c 6c28 302c 2024 7069 .if (kill(0, $pi\n+000043a0: 6429 203d 3d20 3129 2020 2023 2061 6c74 d) == 1) # alt\n+000043b0: 6520 496e 7374 616e 7a20 6ce4 7566 7420 e Instanz l.uft \n+000043c0: 6e6f 6368 0a09 7b0a 0920 2020 2024 7072 noch..{.. $pr\n+000043d0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000043e0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n+000043f0: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => [\"cann\n+00004400: 6f74 2073 7461 7274 2c20 6f6c 6420 696e ot start, old in\n+00004410: 7374 616e 6365 2077 6974 6820 7069 6420 stance with pid \n+00004420: 2220 2e0a 0909 0909 2020 2020 2022 3c24 \" ...... \"<$\n+00004430: 7069 643e 2069 7320 616c 7265 6164 7920 pid> is already \n+00004440: 7275 6e6e 696e 6722 5d2c 0a09 0909 2020 running\"],.... \n+00004450: 272d 6578 6974 2720 3d3e 2031 293b 0a09 '-exit' => 1);..\n+00004460: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. \n+00004470: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00004480: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00004490: 0920 2027 2d73 7472 2720 3d3e 205b 2272 . '-str' => [\"r\n+000044a0: 656d 6f76 696e 6720 6f6c 6420 6c6f 636b emoving old lock\n+000044b0: 2066 696c 6520 6f66 2070 726f 6365 7373 file of process\n+000044c0: 203c 2470 6964 3e22 5d0a 0909 0920 2029 <$pid>\"].... )\n+000044d0: 3b0a 097d 0a20 2020 207d 0a0a 2020 2020 ;..}. }.. \n+000044e0: 6f70 656e 2846 494c 452c 2022 3e20 246c open(FILE, \"> $l\n+000044f0: 6f63 6b46 696c 6522 2920 6f72 0a09 2470 ockFile\") or..$p\n+00004500: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00004510: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n+00004520: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00004530: 6361 6e6e 6f74 2063 7265 6174 6520 6c6f cannot create lo\n+00004540: 636b 2066 696c 6520 3c24 6c6f 636b 4669 ck file <$lockFi\n+00004550: 6c65 3e22 5d2c 0a09 0920 2020 2020 2027 le>\"],... '\n+00004560: 2d65 7869 7427 203d 3e20 3129 3b0a 2020 -exit' => 1);. \n+00004570: 2020 7072 696e 7420 4649 4c45 2022 2424 print FILE \"$$\n+00004580: 5c6e 223b 0a20 2020 2063 6c6f 7365 2846 \\n\";. close(F\n+00004590: 494c 4529 3b0a 7d0a 0a6d 7920 2473 7461 ILE);.}..my $sta\n+000045a0: 7444 656c 4f6c 6442 6163 6b75 7044 6972 tDelOldBackupDir\n+000045b0: 7320 3d0a 2020 2020 7374 6174 6973 7469 s =. statisti\n+000045c0: 6344 656c 6574 654f 6c64 4261 636b 7570 cDeleteOldBackup\n+000045d0: 4469 7273 2d3e 6e65 7728 272d 7072 4c6f Dirs->new('-prLo\n+000045e0: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m\n+000045f0: 7920 2474 6f64 6179 203d 2064 6174 6554 y $today = dateT\n+00004600: 6f6f 6c73 2d3e 6e65 7728 293b 0a69 6620 ools->new();.if \n+00004610: 2824 746f 6461 794f 7074 290a 7b0a 2020 ($todayOpt).{. \n+00004620: 2020 6966 2028 2474 6f64 6179 4f70 7420 if ($todayOpt \n+00004630: 3d7e 202f 5c41 285c 647b 347d 295c 2e28 =~ /\\A(\\d{4})\\.(\n+00004640: 5c64 7b32 7d29 5c2e 285c 647b 327d 295f \\d{2})\\.(\\d{2})_\n+00004650: 285c 647b 327d 292e 285c 647b 327d 292e (\\d{2}).(\\d{2}).\n+00004660: 285c 647b 327d 295c 5a2f 290a 2020 2020 (\\d{2})\\Z/). \n+00004670: 7b0a 0924 746f 6461 7920 3d20 6461 7465 {..$today = date\n+00004680: 546f 6f6c 732d 3e6e 6577 2827 2d79 6561 Tools->new('-yea\n+00004690: 7227 203d 3e20 2431 2c0a 0909 0909 272d r' => $1,.....'-\n+000046a0: 6d6f 6e74 6827 203d 3e20 2432 2c0a 0909 month' => $2,...\n+000046b0: 0909 272d 6461 7927 203d 3e20 2433 2c0a ..'-day' => $3,.\n+000046c0: 0909 0909 272d 686f 7572 2720 3d3e 2024 ....'-hour' => $\n+000046d0: 342c 0a09 0909 0927 2d6d 696e 2720 3d3e 4,.....'-min' =>\n+000046e0: 2024 352c 0a09 0909 0927 2d73 6563 2720 $5,.....'-sec' \n+000046f0: 3d3e 2024 3629 3b0a 0924 7072 4c6f 672d => $6);..$prLog-\n+00004700: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00004710: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n+00004720: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n+00004730: 205b 2224 746f 6461 794f 7074 2028 6f70 [\"$todayOpt (op\n+00004740: 7469 6f6e 2074 6f64 6179 2920 6973 206e tion today) is n\n+00004750: 6f74 2061 2076 616c 6964 2064 6174 6522 ot a valid date\"\n+00004760: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi\n+00004770: 7427 203d 3e20 3129 0a09 2020 2020 756e t' => 1).. un\n+00004780: 6c65 7373 2024 746f 6461 792d 3e69 7356 less $today->isV\n+00004790: 616c 6964 2829 3b0a 0924 7072 4c6f 672d alid();..$prLog-\n+000047a0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+000047b0: 3e20 2757 272c 0a09 0920 2020 2020 2027 > 'W',... '\n+000047c0: 2d73 7472 2720 3d3e 205b 2273 6574 7469 -str' => [\"setti\n+000047d0: 6e67 2074 6f64 6179 2074 6f20 2220 2e0a ng today to \" ..\n+000047e0: 0909 0909 2024 746f 6461 792d 3e67 6574 .... $today->get\n+000047f0: 4461 7465 5469 6d65 2829 5d29 3b0a 2020 DateTime()]);. \n+00004800: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+00004810: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin\n+00004820: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00004830: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n+00004840: 203d 3e20 5b22 666f 726d 6174 2065 7272 => [\"format err\n+00004850: 6f72 2061 7420 6f70 7469 6f6e 2074 6f64 or at option tod\n+00004860: 6179 2c20 6d75 7374 2062 6522 2c0a 0909 ay, must be\",...\n+00004870: 0909 2022 2020 5959 5959 2e4d 4d2e 4444 .. \" YYYY.MM.DD\n+00004880: 5f48 482e 4d4d 2e53 5322 5d2c 0a09 0920 _HH.MM.SS\"],... \n+00004890: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+000048a0: 3129 3b0a 2020 2020 7d0a 7d0a 0a6d 7920 1);. }.}..my \n+000048b0: 2464 656c 4f6c 6420 3d0a 2020 2020 6465 $delOld =. de\n+000048c0: 6c65 7465 4f6c 6442 6163 6b75 7044 6972 leteOldBackupDir\n+000048d0: 732d 3e6e 6577 2827 2d74 6172 6765 7444 s->new('-targetD\n+000048e0: 6972 2720 3d3e 2024 7461 7267 6574 4469 ir' => $targetDi\n+000048f0: 722c 0a09 0909 2020 2020 2027 2d64 6f4e r,.... '-doN\n+00004900: 6f74 4465 6c65 7465 2720 3d3e 2024 646f otDelete' => $do\n+00004910: 4e6f 7444 656c 6574 652c 0a09 0909 2020 NotDelete,.... \n+00004920: 2020 2027 2d64 656c 6574 654e 6f74 4669 '-deleteNotFi\n+00004930: 6e69 7368 6564 4469 7273 2720 3d3e 2024 nishedDirs' => $\n+00004940: 6465 6c65 7465 4e6f 7446 696e 6973 6865 deleteNotFinishe\n+00004950: 6444 6972 732c 0a09 0909 2020 2020 2027 dDirs,.... '\n+00004960: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' =\n+00004970: 3e20 2463 6865 636b 5375 6d46 696c 652c > $checkSumFile,\n+00004980: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog\n+00004990: 2720 3d3e 2024 7072 4c6f 672c 0a09 0909 ' => $prLog,....\n+000049a0: 2020 2020 2027 2d74 6f64 6179 2720 3d3e '-today' =>\n+000049b0: 2024 746f 6461 792c 0a09 0909 2020 2020 $today,.... \n+000049c0: 2027 2d6b 6565 7046 6972 7374 4f66 5965 '-keepFirstOfYe\n+000049d0: 6172 2720 3d3e 2024 6b65 6570 4669 7273 ar' => $keepFirs\n+000049e0: 744f 6659 6561 722c 0a09 0909 2020 2020 tOfYear,.... \n+000049f0: 2027 2d6b 6565 704c 6173 744f 6659 6561 '-keepLastOfYea\n+00004a00: 7227 203d 3e20 246b 6565 704c 6173 744f r' => $keepLastO\n+00004a10: 6659 6561 722c 0a09 0909 2020 2020 2027 fYear,.... '\n+00004a20: 2d6b 6565 7046 6972 7374 4f66 4d6f 6e74 -keepFirstOfMont\n+00004a30: 6827 203d 3e20 246b 6565 7046 6972 7374 h' => $keepFirst\n+00004a40: 4f66 4d6f 6e74 682c 0a09 0909 2020 2020 OfMonth,.... \n+00004a50: 2027 2d6b 6565 704c 6173 744f 664d 6f6e '-keepLastOfMon\n+00004a60: 7468 2720 3d3e 2024 6b65 6570 4c61 7374 th' => $keepLast\n+00004a70: 4f66 4d6f 6e74 682c 0a09 0909 2020 2020 OfMonth,.... \n+00004a80: 2027 2d66 6972 7374 4461 794f 6657 6565 '-firstDayOfWee\n+00004a90: 6b27 203d 3e20 2466 6972 7374 4461 794f k' => $firstDayO\n+00004aa0: 6657 6565 6b2c 0a09 0909 2020 2020 2027 fWeek,.... '\n+00004ab0: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek\n+00004ac0: 2720 3d3e 2024 6b65 6570 4669 7273 744f ' => $keepFirstO\n+00004ad0: 6657 6565 6b2c 0a09 0909 2020 2020 2027 fWeek,.... '\n+00004ae0: 2d6b 6565 704c 6173 744f 6657 6565 6b27 -keepLastOfWeek'\n+00004af0: 203d 3e20 246b 6565 704c 6173 744f 6657 => $keepLastOfW\n+00004b00: 6565 6b2c 0a09 0909 2020 2020 2027 2d6b eek,.... '-k\n+00004b10: 6565 7041 6c6c 2720 3d3e 2024 6b65 6570 eepAll' => $keep\n+00004b20: 416c 6c2c 0a09 0909 2020 2020 2027 2d6b All,.... '-k\n+00004b30: 6565 7052 656c 6174 6976 6527 203d 3e20 eepRelative' => \n+00004b40: 246b 6565 7052 656c 6174 6976 652c 0a09 $keepRelative,..\n+00004b50: 0909 2020 2020 2027 2d6b 6565 7057 6565 .. '-keepWee\n+00004b60: 6b64 6179 2720 3d3e 2024 6b65 6570 5765 kday' => $keepWe\n+00004b70: 656b 6461 792c 0a09 0909 2020 2020 2027 ekday,.... '\n+00004b80: 2d6b 6565 7044 7570 6c69 6361 7465 2720 -keepDuplicate' \n+00004b90: 3d3e 2024 6b65 6570 4475 706c 6963 6174 => $keepDuplicat\n+00004ba0: 652c 0a09 0909 2020 2020 2027 2d6b 6565 e,.... '-kee\n+00004bb0: 704d 696e 4e75 6d62 6572 2720 3d3e 2024 pMinNumber' => $\n+00004bc0: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,..\n+00004bd0: 0909 2020 2020 2027 2d6b 6565 704d 6178 .. '-keepMax\n+00004be0: 4e75 6d62 6572 2720 3d3e 2024 6b65 6570 Number' => $keep\n+00004bf0: 4d61 784e 756d 6265 722c 0a09 0909 2020 MaxNumber,.... \n+00004c00: 2020 2027 2d73 7461 7444 656c 4f6c 6442 '-statDelOldB\n+00004c10: 6163 6b75 7044 6972 7327 203d 3e20 2473 ackupDirs' => $s\n+00004c20: 7461 7444 656c 4f6c 6442 6163 6b75 7044 tatDelOldBackupD\n+00004c30: 6972 732c 0a09 0909 2020 2020 2027 2d6c irs,.... '-l\n+00004c40: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' =\n+00004c50: 3e20 756e 6465 662c 0a09 0909 2020 2020 > undef,.... \n+00004c60: 2027 2d61 6c6c 4c69 6e6b 7327 203d 3e20 '-allLinks' => \n+00004c70: 2461 6c6c 4c69 6e6b 730a 0909 0920 2020 $allLinks.... \n+00004c80: 2020 293b 0a0a 2464 656c 4f6c 642d 3e63 );..$delOld->c\n+00004c90: 6865 636b 4261 636b 7570 7328 293b 0a0a heckBackups();..\n+00004ca0: 2464 656c 4f6c 642d 3e64 656c 6574 6542 $delOld->deleteB\n+00004cb0: 6163 6b75 7073 2829 3b0a 2473 7461 7444 ackups();.$statD\n+00004cc0: 656c 4f6c 6442 6163 6b75 7044 6972 732d elOldBackupDirs-\n+00004cd0: 3e70 7269 6e74 2829 3b0a 0a23 2053 7461 >print();..# Sta\n+00004ce0: 7469 7374 696b 20fc 6265 7220 4461 7565 tistik .ber Daue\n+00004cf0: 7220 756e 6420 4350 552d 5665 7262 7261 r und CPU-Verbra\n+00004d00: 7563 680a 0a6d 7920 2840 6c29 3b0a 6d79 uch..my (@l);.my\n+00004d10: 2028 2475 7365 722c 2473 7973 7465 6d2c ($user,$system,\n+00004d20: 2463 7573 6572 2c24 6373 7973 7465 6d29 $cuser,$csystem)\n+00004d30: 203d 2074 696d 6573 3b0a 6d79 2028 2474 = times;.my ($t\n+00004d40: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = \"-------\n+00004d50: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+----\n+00004d60: 2d2d 2d2d 2d2d 223b 0a70 7573 6820 406c ------\";.push @l\n+00004d70: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf(\"%-7s|\n+00004d80: 2531 3073 7c25 3130 7322 2c20 2220 5b73 %10s|%10s\", \" [s\n+00004d90: 6563 5d22 2c20 2275 7365 7222 2c20 2273 ec]\", \"user\", \"s\n+00004da0: 7973 7465 6d22 293b 0a70 7573 6820 406c ystem\");.push @l\n+00004db0: 2c20 2224 7472 656e 6e22 3b0a 7075 7368 , \"$trenn\";.push\n+00004dc0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf(\"%-\n+00004dd0: 3773 7c25 3130 2e32 667c 2531 302e 3266 7s|%10.2f|%10.2f\n+00004de0: 222c 2022 7072 6f63 6573 7322 2c20 2475 \", \"process\", $u\n+00004df0: 7365 722c 2024 7379 7374 656d 293b 0a70 ser, $system);.p\n+00004e00: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf(\n+00004e10: 2225 2d37 737c 2531 302e 3266 7c25 3130 \"%-7s|%10.2f|%10\n+00004e20: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f\", \"childs\", \n+00004e30: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem\n+00004e40: 293b 0a70 7573 6820 406c 2c20 2224 7472 );.push @l, \"$tr\n+00004e50: 656e 6e22 3b0a 6d79 2028 2475 2c20 2473 enn\";.my ($u, $s\n+00004e60: 2920 3d20 2824 6375 7365 7220 2b20 2475 ) = ($cuser + $u\n+00004e70: 7365 722c 2024 6373 7973 7465 6d20 2b20 ser, $csystem + \n+00004e80: 2473 7973 7465 6d29 3b0a 7075 7368 2040 $system);.push @\n+00004e90: 6c2c 2073 7072 696e 7466 2822 252d 3773 l, sprintf(\"%-7s\n+00004ea0: 7c25 3130 2e32 667c 2531 302e 3266 203d |%10.2f|%10.2f =\n+00004eb0: 3e20 252e 3266 222c 2022 7375 6d22 2c20 > %.2f\", \"sum\", \n+00004ec0: 2475 2c20 2473 2c20 2475 202b 2024 7329 $u, $s, $u + $s)\n+00004ed0: 3b0a 0a6d 7920 2840 7374 6172 7444 6174 ;..my (@startDat\n+00004ee0: 6529 203d 2028 293b 0a69 6620 2824 7374 e) = ();.if ($st\n+00004ef0: 6172 7444 6174 6529 0a7b 0a20 2020 2070 artDate).{. p\n+00004f00: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, \n+00004f10: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec\n+00004f20: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration \n+00004f30: 3d20 2720 2e0a 0924 7374 6172 7444 6174 = ' ...$startDat\n+00004f40: 652d 3e64 656c 7461 496e 5374 7228 272d e->deltaInStr('-\n+00004f50: 7365 636f 6e64 4461 7465 2720 3d3e 2024 secondDate' => $\n+00004f60: 7374 6172 7444 6174 6529 3b0a 7d0a 0a6d startDate);.}..m\n+00004f70: 7920 2464 456e 6420 3d20 6461 7465 546f y $dEnd = dateTo\n+00004f80: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $\n+00004f90: 6475 7261 7469 6f6e 203d 2024 7374 6172 duration = $star\n+00004fa0: 7444 6174 652d 3e64 656c 7461 496e 5365 tDate->deltaInSe\n+00004fb0: 6373 2827 2d73 6563 6f6e 6444 6174 6527 cs('-secondDate'\n+00004fc0: 203d 3e20 2464 456e 6429 3b0a 2464 7572 => $dEnd);.$dur\n+00004fd0: 6174 696f 6e20 3d20 3120 6966 2028 2464 ation = 1 if ($d\n+00004fe0: 7572 6174 696f 6e20 3d3d 2030 293b 2020 uration == 0); \n+00004ff0: 2023 204d 696e 696d 616c 6572 2057 6572 # Minimaler Wer\n+00005000: 740a 0a24 7072 4c6f 672d 3e70 7269 6e74 t..$prLog->print\n+00005010: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S',\n+00005020: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00005030: 3e0a 0920 2020 2020 205b 2720 2020 2020 >.. [' \n+00005040: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00005050: 2064 7572 6174 696f 6e20 3d20 2720 2e0a duration = ' ..\n+00005060: 0920 2020 2020 2020 6461 7465 546f 6f6c . dateTool\n+00005070: 733a 3a76 616c 546f 5374 7228 272d 7365 s::valToStr('-se\n+00005080: 6327 203d 3e20 2464 7572 6174 696f 6e29 c' => $duration)\n+00005090: 2c0a 0920 2020 2020 2020 406c 0a09 2020 ,.. @l.. \n+000050a0: 2020 2020 205d 293b 0a0a 2470 724c 6f67 ]);..$prLog\n+000050b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000050c0: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. '\n+000050d0: 2d73 7472 2720 3d3e 205b 2272 656d 6f76 -str' => [\"remov\n+000050e0: 696e 6720 6c6f 636b 2066 696c 6520 3c24 ing lock file <$\n+000050f0: 6c6f 636b 4669 6c65 3e22 5d29 3b0a 756e lockFile>\"]);.un\n+00005100: 6c69 6e6b 2024 6c6f 636b 4669 6c65 3b0a link $lockFile;.\n+00005110: 0a65 7869 7420 303b 0a .exit 0;.\n"}, {"source1": "./usr/bin/storeBackupMount", "source2": "./usr/bin/storeBackupMount", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,899 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 704d 6f75 6e74 0a pMount.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 342d 3230 3132 290a 2320 2020 2020 2020 4-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# \n+00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i\n+00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software:\n+00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr\n+000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or \n+000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un\n+000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of\n+000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n+000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n+000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by.\n+00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof\n+00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation\n+00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version\n+00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens\n+00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo\n+00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l\n+00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...#\n+00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program \n+00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i\n+00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that \n+000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu\n+000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO\n+000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY;\n+000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th\n+000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran\n+000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA\n+00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT\n+00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI\n+00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. \n+00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU \n+00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n+00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more \n+00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y\n+00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r\n+00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o\n+00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera\n+000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with \n+000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I\n+000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m\n+00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I\n+00000310: 643a 2073 746f 7265 4261 636b 7570 4d6f d: storeBackupMo\n+00000320: 756e 742e 706c 2033 3634 2032 3031 322d unt.pl 364 2012-\n+00000330: 3032 2d31 3220 3134 3a31 343a 3434 5a20 02-12 14:14:44Z \n+00000340: 686a 6320 2420 273b 0a6f 7572 2040 5645 hjc $ ';.our @VE\n+00000350: 5253 494f 4e3b 0a70 7573 6820 4056 4552 RSION;.push @VER\n+00000360: 5349 4f4e 2c20 2456 4552 5349 4f4e 3b0a SION, $VERSION;.\n+00000370: 6d79 2028 2456 4552 5349 4f4e 704e 616d my ($VERSIONpNam\n+00000380: 652c 2024 5645 5253 494f 4e73 766e 4944 e, $VERSIONsvnID\n+00000390: 2920 3d20 2456 4552 5349 4f4e 203d 7e20 ) = $VERSION =~ \n+000003a0: 2f49 643a 5c73 2b28 5c53 2b29 5c73 2b28 /Id:\\s+(\\S+)\\s+(\n+000003b0: 5c64 2b29 2f3b 0a24 6d61 696e 3a3a 5354 \\d+)/;.$main::ST\n+000003c0: 4f52 4542 4143 4b55 5056 4552 5349 4f4e OREBACKUPVERSION\n+000003d0: 203d 2075 6e64 6566 3b0a 0a75 7365 2073 = undef;..use s\n+000003e0: 7472 6963 743b 0a75 7365 204e 6574 3a3a trict;.use Net::\n+000003f0: 5069 6e67 3b0a 7573 6520 504f 5349 583b Ping;.use POSIX;\n+00000400: 0a0a 0a73 7562 206c 6962 5061 7468 0a7b ...sub libPath.{\n+00000410: 0a20 2020 206d 7920 2466 696c 6520 3d20 . my $file = \n+00000420: 7368 6966 743b 0a0a 2020 2020 6d79 2024 shift;.. my $\n+00000430: 6469 723b 0a0a 2020 2020 2320 4661 6c6c dir;.. # Fall\n+00000440: 7320 4461 7465 6920 7365 6c62 7374 2065 s Datei selbst e\n+00000450: 696e 2073 796d 6c69 6e6b 2069 7374 2c20 in symlink ist, \n+00000460: 736f 6c61 6e67 6520 666f 6c67 656e 2c20 solange folgen, \n+00000470: 6269 7320 6175 6667 656c f673 740a 2020 bis aufgel.st. \n+00000480: 2020 6966 2028 2d66 2024 6669 6c65 290a if (-f $file).\n+00000490: 2020 2020 7b0a 0977 6869 6c65 2028 2d6c {..while (-l\n+000004a0: 2024 6669 6c65 290a 097b 0a09 2020 2020 $file)..{.. \n+000004b0: 6d79 2024 6c69 6e6b 203d 2072 6561 646c my $link = readl\n+000004c0: 696e 6b28 2466 696c 6529 3b0a 0a09 2020 ink($file);... \n+000004d0: 2020 6966 2028 7375 6273 7472 2824 6c69 if (substr($li\n+000004e0: 6e6b 2c20 302c 2031 2920 6e65 2022 2f22 nk, 0, 1) ne \"/\"\n+000004f0: 290a 0920 2020 207b 0a09 0924 6669 6c65 ).. {...$file\n+00000500: 203d 7e20 732f 5b5e 5c2f 5d2b 242f 246c =~ s/[^\\/]+$/$l\n+00000510: 696e 6b2f 3b0a 0920 2020 207d 0a09 2020 ink/;.. }.. \n+00000520: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {...\n+00000530: 2466 696c 6520 3d20 246c 696e 6b3b 0a09 $file = $link;..\n+00000540: 2020 2020 7d0a 097d 0a0a 0928 2464 6972 }..}...($dir\n+00000550: 2c20 2466 696c 6529 203d 2026 7370 6c69 , $file) = &spli\n+00000560: 7446 696c 6544 6972 2824 6669 6c65 293b tFileDir($file);\n+00000570: 0a09 2466 696c 6520 3d20 222f 2466 696c ..$file = \"/$fil\n+00000580: 6522 3b0a 2020 2020 7d0a 2020 2020 656c e\";. }. el\n+00000590: 7365 0a20 2020 207b 0a09 7072 696e 7420 se. {..print \n+000005a0: 5354 4445 5252 2022 3c24 6669 6c65 3e20 STDERR \"<$file> \n+000005b0: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, \n+000005c0: 6578 6974 696e 6721 5c6e 223b 0a20 2020 exiting!\\n\";. \n+000005d0: 2020 2020 2050 4f53 4958 3a3a 5f65 7869 POSIX::_exi\n+000005e0: 7420 323b 0a20 2020 207d 0a0a 2020 2020 t 2;. }.. \n+000005f0: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= \"/../lib\n+00000600: 223b 2020 2020 2020 2020 2020 2023 2050 \"; # P\n+00000610: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli\n+00000620: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $\n+00000630: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p\n+00000640: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $\n+00000650: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if (\n+00000660: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). \n+00000670: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = \n+00000680: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho\n+00000690: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi\n+000006a0: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret\n+000006b0: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD\n+000006c0: 6972 2822 2461 6273 4469 7224 6669 6c65 ir(\"$absDir$file\n+000006d0: 2229 293b 0a20 2020 207d 0a20 2020 2065 \"));. }. e\n+000006e0: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print\n+000006f0: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR \"<$dir> \n+00000700: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, \n+00000710: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\\n\";. \n+00000720: 2020 2020 504f 5349 583a 3a5f 6578 6974 POSIX::_exit\n+00000730: 2032 3b0a 2020 2020 7d0a 7d0a 7375 6220 2;. }.}.sub \n+00000740: 7370 6c69 7446 696c 6544 6972 0a7b 0a20 splitFileDir.{. \n+00000750: 2020 206d 7920 246e 616d 6520 3d20 7368 my $name = sh\n+00000760: 6966 743b 0a0a 2020 2020 7265 7475 726e ift;.. return\n+00000770: 2028 272e 272c 2024 6e61 6d65 2920 756e ('.', $name) un\n+00000780: 6c65 7373 2028 246e 616d 6520 3d7e 2f5c less ($name =~/\\\n+00000790: 2f2f 293b 2020 2020 2320 6e75 7220 6569 //); # nur ei\n+000007a0: 6e66 6163 6865 7220 4461 7465 696e 616d nfacher Dateinam\n+000007b0: 650a 0a20 2020 206d 7920 2824 6469 722c e.. my ($dir,\n+000007c0: 2024 6669 6c65 2920 3d20 246e 616d 6520 $file) = $name \n+000007d0: 3d7e 202f 5e28 2e2a 295c 2f28 2e2a 2924 =~ /^(.*)\\/(.*)$\n+000007e0: 2f73 3b0a 2020 2020 2464 6972 203d 2027 /s;. $dir = '\n+000007f0: 2f27 2069 6620 2824 6469 7220 6571 2027 /' if ($dir eq '\n+00000800: 2729 3b20 2020 2020 2020 2020 2020 2020 '); \n+00000810: 2020 2020 2020 2320 6769 6c74 2c20 6661 # gilt, fa\n+00000820: 6c6c 7320 7a2e 422e 202f 6669 6c65 6e61 lls z.B. /filena\n+00000830: 6d65 0a20 2020 2072 6574 7572 6e20 2824 me. return ($\n+00000840: 6469 722c 2024 6669 6c65 293b 0a7d 0a6d dir, $file);.}.m\n+00000850: 7920 2824 7265 712c 2024 7072 6f67 2920 y ($req, $prog) \n+00000860: 3d20 266c 6962 5061 7468 2824 3029 3b0a = &libPath($0);.\n+00000870: 2840 494e 4329 203d 2028 2472 6571 2c20 (@INC) = ($req, \n+00000880: 4049 4e43 293b 0a0a 7265 7175 6972 6520 @INC);..require \n+00000890: 2763 6865 636b 5061 7261 6d32 2e70 6c27 'checkParam2.pl'\n+000008a0: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check\n+000008b0: 4f62 6a50 6172 2e70 6c27 3b0a 7265 7175 ObjPar.pl';.requ\n+000008c0: 6972 6520 2770 724c 6f67 2e70 6c27 3b0a ire 'prLog.pl';.\n+000008d0: 7265 7175 6972 6520 2766 6f72 6b50 726f require 'forkPro\n+000008e0: 632e 706c 273b 0a72 6571 7569 7265 2027 c.pl';.require '\n+000008f0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p\n+00000900: 6c27 3b0a 7265 7175 6972 6520 2764 6174 l';.require 'dat\n+00000910: 6554 6f6f 6c73 2e70 6c27 3b0a 7265 7175 eTools.pl';.requ\n+00000920: 6972 6520 2776 6572 7369 6f6e 2e70 6c27 ire 'version.pl'\n+00000930: 3b0a 7265 7175 6972 6520 2774 6169 6c2e ;.require 'tail.\n+00000940: 706c 273b 0a0a 246d 6169 6e3a 3a65 7869 pl';..$main::exi\n+00000950: 7420 3d20 303b 2020 2020 2020 2020 2020 t = 0; \n+00000960: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000970: 2020 2020 2023 2065 7869 7420 7374 6174 # exit stat\n+00000980: 7573 0a0a 3d68 6561 6431 204e 414d 450a us..=head1 NAME.\n+00000990: 0a73 746f 7265 4261 636b 7570 4d6f 756e .storeBackupMoun\n+000009a0: 742e 706c 202d 2072 756e 7320 7374 6f72 t.pl - runs stor\n+000009b0: 6542 6163 6b75 7020 6261 636b 696e 6720 eBackup backing \n+000009c0: 7570 2074 6f20 616e 206e 6673 206d 6f75 up to an nfs mou\n+000009d0: 6e74 0a0a 3d68 6561 6431 2053 594e 4f50 nt..=head1 SYNOP\n+000009e0: 5349 530a 0a09 7374 6f72 6542 6163 6b75 SIS...storeBacku\n+000009f0: 704d 6f75 6e74 2e70 6c20 2d63 2063 6f6e pMount.pl -c con\n+00000a00: 6669 6746 696c 6520 5b2d 7320 7365 7276 figFile [-s serv\n+00000a10: 6572 5d20 5b2d 6c20 6c6f 6746 696c 655d er] [-l logFile]\n+00000a20: 205b 2d64 5d0a 095b 2d70 2070 6174 6854 [-d]..[-p pathT\n+00000a30: 6f53 746f 7265 4261 636b 7570 5d20 5b2d oStoreBackup] [-\n+00000a40: 6b20 6b69 6c6c 5469 6d65 5d20 5b2d 6d5d k killTime] [-m]\n+00000a50: 206d 6f75 6e74 506f 696e 7473 2e2e 2e0a mountPoints....\n+00000a60: 0a3d 6865 6164 3120 4445 5343 5249 5054 .=head1 DESCRIPT\n+00000a70: 494f 4e0a 0a54 6869 7320 7363 7269 7074 ION..This script\n+00000a80: 2064 6f65 7320 7468 6520 666f 6c6c 6f77 does the follow\n+00000a90: 696e 673a 0a0a 3d6f 7665 7220 340a 0a3d ing:..=over 4..=\n+00000aa0: 6974 656d 202d 2063 6865 636b 7320 616e item - checks an\n+00000ab0: 206e 6673 2073 6572 7665 7220 7769 7468 nfs server with\n+00000ac0: 2070 696e 670a 0a3d 6974 656d 202d 206d ping..=item - m\n+00000ad0: 6f75 6e74 7320 7468 6174 2073 6572 7665 ounts that serve\n+00000ae0: 7220 7669 6120 6120 6c69 7374 206f 6620 r via a list of \n+00000af0: 6d6f 756e 7420 706f 696e 7473 0a0a 3d69 mount points..=i\n+00000b00: 7465 6d20 2d20 7374 6172 7473 2073 746f tem - starts sto\n+00000b10: 7265 4261 636b 7570 2028 7769 7468 2061 reBackup (with a\n+00000b20: 2063 6f6e 6669 6720 6669 6c65 290a 0a3d config file)..=\n+00000b30: 6974 656d 202d 2075 6d6f 756e 7473 2074 item - umounts t\n+00000b40: 6861 7420 7365 7276 6572 0a0a 3d62 6163 hat server..=bac\n+00000b50: 6b0a 0a3d 6865 6164 3120 4f50 5449 4f4e k..=head1 OPTION\n+00000b60: 530a 0a3d 6f76 6572 2038 0a0a 3d69 7465 S..=over 8..=ite\n+00000b70: 6d20 423c 2d2d 7365 7276 6572 3e2c 2042 m B<--server>, B\n+00000b80: 3c2d 733e 0a0a 2020 2020 6e61 6d65 206f <-s>.. name o\n+00000b90: 7220 6970 2061 6464 7265 7373 206f 6620 r ip address of \n+00000ba0: 7468 6520 6e66 7320 7365 7276 6572 0a20 the nfs server. \n+00000bb0: 2020 2064 6566 6175 6c74 2069 7320 6c6f default is lo\n+00000bc0: 6361 6c68 6f73 740a 0a3d 6974 656d 2042 calhost..=item B\n+00000bd0: 3c2d 2d63 6f6e 6669 6746 696c 653e 2c20 <--configFile>, \n+00000be0: 423c 2d63 3e0a 0a20 2020 2063 6f6e 6669 B<-c>.. confi\n+00000bf0: 6775 7261 7469 6f6e 2066 696c 6520 666f guration file fo\n+00000c00: 7220 7374 6f72 6542 6163 6b75 702e 0a20 r storeBackup.. \n+00000c10: 2020 2069 6620 6f70 7469 6f6e 2027 6c6f if option 'lo\n+00000c20: 6746 696c 6527 2069 7320 7365 7420 696e gFile' is set in\n+00000c30: 2074 6865 2063 6f6e 6669 6772 6174 696f the configratio\n+00000c40: 6e20 6669 6c65 2c0a 2020 2020 7468 6174 n file,. that\n+00000c50: 206c 6f67 2066 696c 6520 6973 2072 6561 log file is rea\n+00000c60: 6420 6f6e 6c69 6e65 2c20 6966 2069 7420 d online, if it \n+00000c70: 6973 2064 6966 6665 7265 6e74 2066 726f is different fro\n+00000c80: 6d20 2d6c 0a0a 3d69 7465 6d20 423c 2d2d m -l..=item B<--\n+00000c90: 6c6f 6746 696c 653e 2c20 423c 2d6c 3e0a logFile>, B<-l>.\n+00000ca0: 0a20 2020 206c 6f67 4669 6c65 2066 6f72 . logFile for\n+00000cb0: 2074 6869 7320 7072 6f63 6573 732e 0a20 this process.. \n+00000cc0: 2020 2064 6566 6175 6c74 2069 7320 5354 default is ST\n+00000cd0: 444f 5554 2e0a 2020 2020 796f 7520 6361 DOUT.. you ca\n+00000ce0: 6e20 6c6f 6720 696e 746f 2074 6865 2073 n log into the s\n+00000cf0: 616d 6520 6c6f 6766 696c 6520 6173 2073 ame logfile as s\n+00000d00: 746f 7265 4261 636b 7570 0a0a 3d69 7465 toreBackup..=ite\n+00000d10: 6d20 423c 2d2d 6465 6275 673e 2c20 423c m B<--debug>, B<\n+00000d20: 2d64 3e0a 0a20 2020 2067 656e 6572 6174 -d>.. generat\n+00000d30: 6520 736f 6d65 2064 6562 7567 206d 6573 e some debug mes\n+00000d40: 7361 6765 730a 0a3d 6974 656d 2042 3c2d sages..=item B<-\n+00000d50: 2d70 6174 6853 7462 753e 2c20 423c 2d70 -pathStbu>, B<-p\n+00000d60: 3e0a 0a20 2020 2070 6174 6820 746f 2073 >.. path to s\n+00000d70: 746f 7265 4261 636b 7570 2e70 6c0a 0a3d toreBackup.pl..=\n+00000d80: 6974 656d 2042 3c2d 2d6b 696c 6c54 696d item B<--killTim\n+00000d90: 653e 2042 3c2d 6b3e 0a0a 2020 2020 7469 e> B<-k>.. ti\n+00000da0: 6d65 2075 6e74 696c 2073 746f 7265 4261 me until storeBa\n+00000db0: 636b 7570 2e70 6c20 7769 6c6c 2062 6520 ckup.pl will be \n+00000dc0: 6b69 6c6c 6564 2e0a 2020 2020 6465 6661 killed.. defa\n+00000dd0: 756c 7420 6973 2033 3635 2064 6179 732e ult is 365 days.\n+00000de0: 0a20 2020 2074 6865 2074 696d 6520 7261 . the time ra\n+00000df0: 6e67 6520 6861 7320 746f 2062 6520 7370 nge has to be sp\n+00000e00: 6563 6966 6965 6420 696e 2066 6f72 6d61 ecified in forma\n+00000e10: 7420 2764 686d 7327 2c20 652e 672e 0a20 t 'dhms', e.g.. \n+00000e20: 2020 2031 3064 3468 206d 6561 6e73 2031 10d4h means 1\n+00000e30: 3020 6461 7973 2061 6e64 2034 2068 6f75 0 days and 4 hou\n+00000e40: 7273 0a0a 3d69 7465 6d20 423c 2d2d 6b65 rs..=item B<--ke\n+00000e50: 6570 4578 6973 7469 6e67 4d6f 756e 7473 epExistingMounts\n+00000e60: 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 6966 >, B<-m>.. if\n+00000e70: 2061 206d 6f75 6e74 2061 6c72 6561 6479 a mount already\n+00000e80: 2065 7869 7374 732c 2064 6f20 6e6f 7420 exists, do not \n+00000e90: 756d 6f75 6e74 2061 6674 6572 0a20 2020 umount after. \n+00000ea0: 2072 756e 6e69 6e67 2073 746f 7265 4261 running storeBa\n+00000eb0: 636b 7570 0a0a 3d69 7465 6d20 463c 6d6f ckup..=item F.. \n+00000ed0: 4c69 7374 206f 6620 6d6f 756e 7420 706f List of mount po\n+00000ee0: 696e 7473 206e 6565 6465 6420 746f 2070 ints needed to p\n+00000ef0: 6572 666f 726d 2074 6865 2062 6163 6b75 erform the backu\n+00000f00: 702e 0a20 2020 2054 6869 7320 6d75 7374 p.. This must\n+00000f10: 2062 6520 6120 6c69 7374 206f 6620 7061 be a list of pa\n+00000f20: 7468 7320 7768 6963 6820 6861 7665 2074 ths which have t\n+00000f30: 6f20 6265 0a20 2020 2064 6566 696e 6564 o be. defined\n+00000f40: 2069 6e20 2f65 7463 2f66 7374 6162 2e0a in /etc/fstab..\n+00000f50: 2020 2020 2d0a 2020 2020 6966 2079 6f75 -. if you\n+00000f60: 2061 6464 2027 726f 2c27 206f 7220 2772 add 'ro,' or 'r\n+00000f70: 772c 2720 746f 2074 6865 2062 6567 696e w,' to the begin\n+00000f80: 6e69 6e67 206f 6620 6120 6d6f 756e 740a ning of a mount.\n+00000f90: 2020 2020 706f 696e 742c 2079 6f75 2063 point, you c\n+00000fa0: 616e 206f 7665 7277 7269 7465 2074 6861 an overwrite tha\n+00000fb0: 7420 6f70 7469 6f6e 2073 6574 2069 6e20 t option set in \n+00000fc0: 2f65 7463 2f66 7374 6162 0a0a 2020 2020 /etc/fstab.. \n+00000fd0: 6578 616d 706c 653a 0a20 2020 2072 6f2c example:. ro,\n+00000fe0: 2f66 696c 6573 5379 7374 656d 546f 5265 /filesSystemToRe\n+00000ff0: 6164 0a20 2020 2020 2020 7769 6c6c 206d ad. will m\n+00001000: 6f75 6e74 202f 6669 6c65 5379 7374 656d ount /fileSystem\n+00001010: 546f 5265 6164 2072 6561 6420 6f6e 6c79 ToRead read only\n+00001020: 2c20 6576 656e 2069 6620 7468 650a 2020 , even if the. \n+00001030: 2020 2020 2063 6f72 7265 7370 6f6e 6469 correspondi\n+00001040: 6e67 2065 6e74 7279 2069 6e20 2f65 7463 ng entry in /etc\n+00001050: 2f66 7374 6162 206d 6f75 6e74 7320 6974 /fstab mounts it\n+00001060: 2072 6561 6420 7772 6974 650a 0a20 2020 read write.. \n+00001070: 206f 6e6c 7920 726f 6f74 2069 7320 616c only root is al\n+00001080: 6c6f 7765 6420 746f 2075 7365 2074 6869 lowed to use thi\n+00001090: 7320 6665 6174 7572 6521 0a0a 3d62 6163 s feature!..=bac\n+000010a0: 6b0a 0a3d 6865 6164 3120 4558 4954 2053 k..=head1 EXIT S\n+000010b0: 5441 5455 530a 0a3d 6f76 6572 2034 0a0a TATUS..=over 4..\n+000010c0: 3d69 7465 6d20 3020 2d3e 2065 7665 7279 =item 0 -> every\n+000010d0: 7468 696e 6720 6973 206f 6b0a 0a3d 6974 thing is ok..=it\n+000010e0: 656d 2031 202d 3e20 6572 726f 7220 6672 em 1 -> error fr\n+000010f0: 6f6d 2073 746f 7265 4261 636b 7570 0a0a om storeBackup..\n+00001100: 3d69 7465 6d20 3220 2d3e 2065 7272 6f72 =item 2 -> error\n+00001110: 2066 726f 6d20 7374 6f72 6542 6163 6b75 from storeBacku\n+00001120: 704d 6f75 6e74 0a0a 3d69 7465 6d20 3320 pMount..=item 3 \n+00001130: 2d3e 2065 7272 6f72 2066 726f 6d20 626f -> error from bo\n+00001140: 7468 2070 726f 6772 616d 730a 0a3d 6261 th programs..=ba\n+00001150: 636b 0a0a 3d68 6561 6431 2043 4f50 5952 ck..=head1 COPYR\n+00001160: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright \n+00001170: 2863 2920 3230 3034 2d32 3030 382c 3230 (c) 2004-2008,20\n+00001180: 3132 2062 7920 4865 696e 7a2d 4a6f 7365 12 by Heinz-Jose\n+00001190: 6620 436c 6165 7320 2873 6565 2052 4541 f Claes (see REA\n+000011a0: 444d 4529 2e0a 5075 626c 6973 6865 6420 DME)..Published \n+000011b0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge\n+000011c0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n+000011d0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l\n+000011e0: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c\n+000011f0: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j\n+00001200: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^\n+00001210: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \\s*$/, `pod2text\n+00001220: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = \n+00001230: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 \"cannot find pod\n+00001240: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum\n+00001250: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det\n+00001260: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\\n\". unle\n+00001270: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin\n+00001280: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\\@ARGV\n+00001290: 2c20 272d 5627 293b 0a0a 6d79 2024 4368 , '-V');..my $Ch\n+000012a0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che\n+000012b0: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a\n+000012c0: 6c6c 6f77 4c69 7374 7327 203d 3e20 2779 llowLists' => 'y\n+000012d0: 6573 272c 0a09 0920 2020 2027 2d6c 6973 es',... '-lis\n+000012e0: 7427 203d 3e20 5b4f 7074 696f 6e2d 3e6e t' => [Option->n\n+000012f0: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's\n+00001300: 6572 7665 7227 2c0a 0909 0909 0920 2020 erver',...... \n+00001310: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+00001320: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... \n+00001330: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+00001340: 2d2d 7365 7276 6572 272c 0a09 0909 0909 --server',......\n+00001350: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n+00001360: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n+00001370: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+00001380: 3d3e 2027 636f 6e66 6967 4669 6c65 272c => 'configFile',\n+00001390: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+000013a0: 7074 696f 6e27 203d 3e20 272d 6327 2c0a ption' => '-c',.\n+000013b0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n+000013c0: 6961 7327 203d 3e20 272d 2d63 6f6e 6669 ias' => '--confi\n+000013d0: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n+000013e0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n+000013f0: 7327 2c0a 0909 0909 0920 2020 2027 2d6d s',...... '-m\n+00001400: 7573 745f 6265 2720 3d3e 2027 7965 7327 ust_be' => 'yes'\n+00001410: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00001420: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l\n+00001430: 6f67 4669 6c65 272c 0a09 0909 0909 2020 ogFile',...... \n+00001440: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00001450: 3e20 272d 6c27 2c0a 0909 0909 0920 2020 > '-l',...... \n+00001460: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+00001470: 272d 2d6c 6f67 4669 6c65 272c 0a09 0909 '--logFile',....\n+00001480: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n+00001490: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n+000014a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+000014b0: 2720 3d3e 2027 6465 6275 6727 2c0a 0909 ' => 'debug',...\n+000014c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+000014d0: 6f6e 2720 3d3e 2027 2d64 272c 0a09 0909 on' => '-d',....\n+000014e0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+000014f0: 2720 3d3e 2027 2d2d 6465 6275 6727 292c ' => '--debug'),\n+00001500: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n+00001510: 2827 2d6e 616d 6527 203d 3e20 2770 6174 ('-name' => 'pat\n+00001520: 6853 7462 7527 2c0a 0909 0909 0920 2020 hStbu',...... \n+00001530: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+00001540: 2027 2d70 272c 0a09 0909 0909 2020 2020 '-p',...... \n+00001550: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+00001560: 2d2d 7061 7468 5374 6275 272c 0a09 0909 --pathStbu',....\n+00001570: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n+00001580: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n+00001590: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+000015a0: 2720 3d3e 2027 6b69 6c6c 5469 6d65 272c ' => 'killTime',\n+000015b0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+000015c0: 7074 696f 6e27 203d 3e20 272d 6b27 2c0a ption' => '-k',.\n+000015d0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n+000015e0: 6961 7327 203d 3e20 272d 2d6b 696c 6c54 ias' => '--killT\n+000015f0: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... '\n+00001600: 2d64 6566 6175 6c74 2720 3d3e 2027 3336 -default' => '36\n+00001610: 3564 2729 2c0a 0909 0909 4f70 7469 6f6e 5d'),.....Option\n+00001620: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001630: 2027 6b65 6570 4578 6973 7469 6e67 4d6f 'keepExistingMo\n+00001640: 756e 7473 272c 0a09 0909 0909 2020 2020 unts',...... \n+00001650: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+00001660: 272d 6d27 2c0a 0909 0909 0920 2020 2027 '-m',...... '\n+00001670: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+00001680: 2d6b 6565 7045 7869 7374 696e 674d 6f75 -keepExistingMou\n+00001690: 6e74 7327 290a 0909 0909 5d29 3b0a 0a24 nts').....]);..$\n+000016a0: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check(\n+000016b0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \\@ARG\n+000016c0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. \n+000016d0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $\n+000016e0: 4865 6c70 0a20 2020 2020 2020 2020 2020 Help. \n+000016f0: 2020 2020 2020 293b 0a0a 6d79 2024 7365 );..my $se\n+00001700: 7276 6572 203d 2024 4368 6563 6b50 6172 rver = $CheckPar\n+00001710: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00001720: 2773 6572 7665 7227 293b 0a6d 7920 2463 'server');.my $c\n+00001730: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che\n+00001740: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00001750: 6850 6172 2827 636f 6e66 6967 4669 6c65 hPar('configFile\n+00001760: 2729 3b0a 6d79 2024 6c6f 6746 696c 6520 ');.my $logFile \n+00001770: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00001780: 4f70 7457 6974 6850 6172 2827 6c6f 6746 OptWithPar('logF\n+00001790: 696c 6527 293b 0a6d 7920 2464 6562 7567 ile');.my $debug\n+000017a0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000017b0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n+000017c0: 6465 6275 6727 293b 0a6d 7920 2470 6174 debug');.my $pat\n+000017d0: 6853 7462 7520 3d20 2443 6865 636b 5061 hStbu = $CheckPa\n+000017e0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+000017f0: 2827 7061 7468 5374 6275 2729 3b0a 6d79 ('pathStbu');.my\n+00001800: 2024 6b74 203d 2024 4368 6563 6b50 6172 $kt = $CheckPar\n+00001810: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00001820: 276b 696c 6c54 696d 6527 293b 0a6d 7920 'killTime');.my \n+00001830: 246b 6565 7045 7869 7374 696e 674d 6f75 $keepExistingMou\n+00001840: 6e74 7320 3d20 2443 6865 636b 5061 722d nts = $CheckPar-\n+00001850: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+00001860: 7228 276b 6565 7045 7869 7374 696e 674d r('keepExistingM\n+00001870: 6f75 6e74 7327 293b 0a6d 7920 2840 6d6f ounts');.my (@mo\n+00001880: 756e 7450 6f69 6e74 7329 203d 2024 4368 untPoints) = $Ch\n+00001890: 6563 6b50 6172 2d3e 6765 744c 6973 7450 eckPar->getListP\n+000018a0: 6172 2829 3b0a 0a6d 7920 2470 724c 6f67 ar();..my $prLog\n+000018b0: 3b0a 6d79 2028 2470 724c 6f67 4b69 6e64 ;.my ($prLogKind\n+000018c0: 2920 3d20 5b27 413a 4245 4749 4e27 2c0a ) = ['A:BEGIN',.\n+000018d0: 0909 2020 2027 5a3a 454e 4427 2c0a 0909 .. 'Z:END',...\n+000018e0: 2020 2027 563a 5645 5253 494f 4e27 2c0a 'V:VERSION',.\n+000018f0: 0909 2020 2027 493a 494e 464f 272c 0a09 .. 'I:INFO',..\n+00001900: 0920 2020 2744 3a44 4542 5547 272c 0a09 . 'D:DEBUG',..\n+00001910: 0920 2020 2757 3a57 4152 4e49 4e47 272c . 'W:WARNING',\n+00001920: 0a09 0920 2020 2745 3a45 5252 4f52 275d ... 'E:ERROR']\n+00001930: 3b0a 6966 2028 246c 6f67 4669 6c65 290a ;.if ($logFile).\n+00001940: 7b0a 2020 2020 2470 724c 6f67 203d 2070 {. $prLog = p\n+00001950: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d66 rintLog->new('-f\n+00001960: 696c 6527 203d 3e20 246c 6f67 4669 6c65 ile' => $logFile\n+00001970: 2c0a 0909 0920 2020 272d 6d75 6c74 6970 ,.... '-multip\n+00001980: 7269 6e74 2720 3d3e 2027 7965 7327 2c0a rint' => 'yes',.\n+00001990: 0909 0920 2020 272d 6b69 6e64 2720 3d3e ... '-kind' =>\n+000019a0: 2024 7072 4c6f 674b 696e 6429 3b0a 7d0a $prLogKind);.}.\n+000019b0: 656c 7365 0a7b 0a20 2020 2024 7072 4c6f else.{. $prLo\n+000019c0: 6720 3d20 7072 696e 744c 6f67 2d3e 6e65 g = printLog->ne\n+000019d0: 7728 272d 6b69 6e64 2720 3d3e 2024 7072 w('-kind' => $pr\n+000019e0: 4c6f 674b 696e 6429 3b0a 7d0a 0a24 7072 LogKind);.}..$pr\n+000019f0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00001a00: 6427 203d 3e20 2741 272c 0a09 2020 2020 d' => 'A',.. \n+00001a10: 2020 272d 7374 7227 203d 3e20 5b22 7374 '-str' => [\"st\n+00001a20: 6172 7469 6e67 2073 746f 7265 4261 636b arting storeBack\n+00001a30: 7570 202d 6620 2463 6f6e 6669 6746 696c up -f $configFil\n+00001a40: 6522 5d29 3b0a 2470 724c 6f67 2d3e 7072 e\"]);.$prLog->pr\n+00001a50: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00001a60: 5627 2c0a 0920 2020 2020 2027 2d73 7472 V',.. '-str\n+00001a70: 2720 3d3e 205b 2224 5645 5253 494f 4e70 ' => [\"$VERSIONp\n+00001a80: 4e61 6d65 2c20 246d 6169 6e3a 3a53 544f Name, $main::STO\n+00001a90: 5245 4241 434b 5550 5645 5253 494f 4e2c REBACKUPVERSION,\n+00001aa0: 2022 202e 0a09 0909 2022 6275 696c 6420 \" ..... \"build \n+00001ab0: 2456 4552 5349 4f4e 7376 6e49 4422 5d29 $VERSIONsvnID\"])\n+00001ac0: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print(\n+00001ad0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00001ae0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00001af0: 205b 2263 616e 6e6f 7420 6f70 656e 2063 [\"cannot open c\n+00001b00: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n+00001b10: 6520 3c24 636f 6e66 6967 4669 6c65 3e22 e <$configFile>\"\n+00001b20: 5d2c 0a09 2020 2020 2020 272d 6578 6974 ],.. '-exit\n+00001b30: 2720 3d3e 2031 290a 2020 2020 756e 6c65 ' => 1). unle\n+00001b40: 7373 202d 7220 2463 6f6e 6669 6746 696c ss -r $configFil\n+00001b50: 653b 0a0a 0a23 206b 696c 6c54 696d 6520 e;...# killTime \n+00001b60: 696e 2073 6563 6f6e 6473 3a0a 6d79 2024 in seconds:.my $\n+00001b70: 6b69 6c6c 5469 6d65 203d 2026 6461 7465 killTime = &date\n+00001b80: 546f 6f6c 733a 3a73 7472 546f 5365 6328 Tools::strToSec(\n+00001b90: 272d 7374 7227 203d 3e20 246b 7429 3b0a '-str' => $kt);.\n+00001ba0: 756e 6c65 7373 2028 6465 6669 6e65 6420 unless (defined \n+00001bb0: 246b 696c 6c54 696d 6529 0a7b 0a20 2020 $killTime).{. \n+00001bc0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00001bd0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00001be0: 0920 2027 2d73 7472 2720 3d3e 205b 2277 . '-str' => [\"w\n+00001bf0: 726f 6e67 2066 6f72 6d61 7420 6f66 2070 rong format of p\n+00001c00: 6172 616d 6574 6572 202d 2d6b 696c 6c54 arameter --killT\n+00001c10: 696d 653a 203c 246b 743e 225d 293b 0a20 ime: <$kt>\"]);. \n+00001c20: 2020 2077 6169 743b 0a20 2020 2050 4f53 wait;. POS\n+00001c30: 4958 3a3a 5f65 7869 7420 323b 0a7d 0a0a IX::_exit 2;.}..\n+00001c40: 230a 2320 7265 6164 2063 6f6e 6669 6720 #.# read config \n+00001c50: 6669 6c65 206f 6620 7374 6f72 6542 6163 file of storeBac\n+00001c60: 6b75 702e 706c 0a23 0a6d 7920 2473 7462 kup.pl.#.my $stb\n+00001c70: 754c 6f67 4669 6c65 203d 2075 6e64 6566 uLogFile = undef\n+00001c80: 3b0a 7b0a 2020 2020 6d79 2024 4368 6563 ;.{. my $Chec\n+00001c90: 6b53 7462 7543 6f6e 6620 3d0a 0943 6865 kStbuConf =..Che\n+00001ca0: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a\n+00001cb0: 6c6c 6f77 4c69 7374 7327 203d 3e20 276e llowLists' => 'n\n+00001cc0: 6f27 2c0a 0909 0927 2d63 6f6e 6669 6746 o',....'-configF\n+00001cd0: 696c 6527 203d 3e20 272d 6627 2c0a 0909 ile' => '-f',...\n+00001ce0: 0927 2d6c 6973 7427 203d 3e20 5b4f 7074 .'-list' => [Opt\n+00001cf0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00001d00: 203d 3e20 2763 6f6e 6669 6746 696c 6527 => 'configFile'\n+00001d10: 2c0a 0909 0909 0909 272d 636c 5f6f 7074 ,.......'-cl_opt\n+00001d20: 696f 6e27 203d 3e20 272d 6627 2c0a 0909 ion' => '-f',...\n+00001d30: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => \n+00001d40: 2779 6573 2729 2c0a 0909 0909 2020 2020 'yes'),..... \n+00001d50: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+00001d60: 6d65 2720 3d3e 2027 6c6f 6746 696c 6527 me' => 'logFile'\n+00001d70: 2c0a 0909 0909 0909 272d 6366 5f6b 6579 ,.......'-cf_key\n+00001d80: 2720 3d3e 2027 6c6f 6746 696c 6527 2c0a ' => 'logFile',.\n+00001d90: 0909 0909 0909 272d 7061 7261 6d27 203d ......'-param' =\n+00001da0: 3e20 2779 6573 2729 0a09 0909 5d29 3b0a > 'yes')....]);.\n+00001db0: 2020 2020 2443 6865 636b 5374 6275 436f $CheckStbuCo\n+00001dc0: 6e66 2d3e 6368 6563 6b28 272d 6172 6776 nf->check('-argv\n+00001dd0: 2720 3d3e 205b 272d 6627 203d 3e20 2463 ' => ['-f' => $c\n+00001de0: 6f6e 6669 6746 696c 655d 2c0a 0909 0920 onfigFile],.... \n+00001df0: 2027 2d68 656c 7027 203d 3e0a 0909 0920 '-help' =>.... \n+00001e00: 2022 6361 6e6e 6f74 2072 6561 6420 636f \"cannot read co\n+00001e10: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file\n+00001e20: 203c 2463 6f6e 6669 6746 696c 653e 5c6e <$configFile>\\n\n+00001e30: 222c 0a09 0909 2020 272d 6967 6e6f 7265 \",.... '-ignore\n+00001e40: 4164 6469 7469 6f6e 616c 4b65 7973 2720 AdditionalKeys' \n+00001e50: 3d3e 2031 293b 0a20 2020 2024 7374 6275 => 1);. $stbu\n+00001e60: 4c6f 6746 696c 6520 3d20 2443 6865 636b LogFile = $Check\n+00001e70: 5374 6275 436f 6e66 2d3e 6765 744f 7074 StbuConf->getOpt\n+00001e80: 5769 7468 5061 7228 276c 6f67 4669 6c65 WithPar('logFile\n+00001e90: 2729 3b0a 0a20 2020 2024 6c6f 6746 696c ');.. $logFil\n+00001ea0: 6520 3d20 3a3a 6162 736f 6c75 7465 5061 e = ::absolutePa\n+00001eb0: 7468 2824 6c6f 6746 696c 6529 2069 6620 th($logFile) if \n+00001ec0: 246c 6f67 4669 6c65 3b0a 2020 2020 6d79 $logFile;. my\n+00001ed0: 2024 5f6c 6f67 4669 6c65 203d 2024 6c6f $_logFile = $lo\n+00001ee0: 6746 696c 6520 3f20 246c 6f67 4669 6c65 gFile ? $logFile\n+00001ef0: 203a 2022 7374 646f 7574 223b 0a20 2020 : \"stdout\";. \n+00001f00: 2024 7374 6275 4c6f 6746 696c 6520 3d20 $stbuLogFile = \n+00001f10: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($\n+00001f20: 7374 6275 4c6f 6746 696c 6529 2069 6620 stbuLogFile) if \n+00001f30: 2824 6c6f 6746 696c 6529 3b0a 2020 2020 ($logFile);. \n+00001f40: 6d79 2024 5f73 7462 754c 6f67 4669 6c65 my $_stbuLogFile\n+00001f50: 203d 2024 7374 6275 4c6f 6746 696c 6520 = $stbuLogFile \n+00001f60: 3f20 2473 7462 754c 6f67 4669 6c65 203a ? $stbuLogFile :\n+00001f70: 2022 7374 646f 7574 223b 0a20 2020 2024 \"stdout\";. $\n+00001f80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00001f90: 696e 6427 203d 3e20 2744 272c 0a09 0920 ind' => 'D',... \n+00001fa0: 2027 2d73 7472 2720 3d3e 0a09 0920 205b '-str' =>... [\n+00001fb0: 226c 6f67 4669 6c65 2066 6f72 2024 7072 \"logFile for $pr\n+00001fc0: 6f67 2069 7320 7365 7420 746f 203c 245f og is set to <$_\n+00001fd0: 6c6f 6746 696c 653e 222c 0a09 0920 2020 logFile>\",... \n+00001fe0: 226c 6f67 4669 6c65 2069 6e20 3c24 636f \"logFile in <$co\n+00001ff0: 6e66 6967 4669 6c65 3e20 6973 2073 6574 nfigFile> is set\n+00002000: 2074 6f20 3c24 5f73 7462 754c 6f67 4669 to <$_stbuLogFi\n+00002010: 6c65 3e22 5d29 0a09 6966 2024 6465 6275 le>\"])..if $debu\n+00002020: 673b 0a20 2020 2069 6620 286e 6f74 2024 g;. if (not $\n+00002030: 7374 6275 4c6f 6746 696c 6520 6f72 2024 stbuLogFile or $\n+00002040: 7374 6275 4c6f 6746 696c 6520 6571 2024 stbuLogFile eq $\n+00002050: 6c6f 6746 696c 6529 0a20 2020 207b 0a09 logFile). {..\n+00002060: 2473 7462 754c 6f67 4669 6c65 203d 2075 $stbuLogFile = u\n+00002070: 6e64 6566 3b20 2023 2064 6f20 6e6f 7420 ndef; # do not \n+00002080: 7265 6164 206c 6f67 2066 696c 6520 6672 read log file fr\n+00002090: 6f6d 2073 746f 7265 4261 636b 7570 2e70 om storeBackup.p\n+000020a0: 6c0a 2020 2020 7d0a 2020 2020 656c 7365 l. }. else\n+000020b0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n+000020c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+000020d0: 2027 4427 2c0a 0909 2020 2020 2020 272d 'D',... '-\n+000020e0: 7374 7227 203d 3e20 5b22 636f 7079 696e str' => [\"copyin\n+000020f0: 6720 6c6f 6720 6672 6f6d 2073 746f 7265 g log from store\n+00002100: 4261 636b 7570 2e70 6c20 746f 206d 7920 Backup.pl to my \n+00002110: 6c6f 6722 5d29 3b0a 2020 2020 7d0a 7d0a log\"]);. }.}.\n+00002120: 0a23 0a23 2074 6573 7420 7069 6e67 2074 .#.# test ping t\n+00002130: 6f20 7365 7276 6572 0a23 0a69 6620 2824 o server.#.if ($\n+00002140: 7365 7276 6572 290a 7b0a 2020 2020 6d79 server).{. my\n+00002150: 2024 7020 3d20 4e65 743a 3a50 696e 672d $p = Net::Ping-\n+00002160: 3e6e 6577 2827 7463 7027 2c20 3529 3b20 >new('tcp', 5); \n+00002170: 2320 7761 6974 2061 206d 6178 696d 756d # wait a maximum\n+00002180: 206f 6620 3520 7365 636f 6e64 7320 666f of 5 seconds fo\n+00002190: 7220 7265 7370 6f6e 7365 0a20 2020 206d r response. m\n+000021a0: 7920 2472 6574 203d 2024 702d 3e70 696e y $ret = $p->pin\n+000021b0: 6728 2473 6572 7665 7229 3b0a 2020 2020 g($server);. \n+000021c0: 6966 2028 2472 6574 203d 3d20 3129 0a20 if ($ret == 1). \n+000021d0: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr\n+000021e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000021f0: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st\n+00002200: 7227 203d 3e20 5b22 686f 7374 203c 2473 r' => [\"host <$s\n+00002210: 6572 7665 723e 2072 6561 6368 6162 6c65 erver> reachable\n+00002220: 2076 6961 2074 6370 2d70 696e 6722 5d29 via tcp-ping\"])\n+00002230: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n+00002240: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e\n+00002250: 7869 7420 7c3d 2032 3b0a 0924 7072 4c6f xit |= 2;..$prLo\n+00002260: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00002270: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n+00002280: 2027 2d73 7472 2720 3d3e 205b 2268 6f73 '-str' => [\"hos\n+00002290: 7420 3c24 7365 7276 6572 3e20 6e6f 7420 t <$server> not \n+000022a0: 7265 6163 6861 626c 6520 7669 6120 7463 reachable via tc\n+000022b0: 702d 7069 6e67 225d 293b 0a09 7761 6974 p-ping\"]);..wait\n+000022c0: 3b0a 0950 4f53 4958 3a3a 5f65 7869 7420 ;..POSIX::_exit \n+000022d0: 246d 6169 6e3a 3a65 7869 743b 0a20 2020 $main::exit;. \n+000022e0: 207d 0a7d 0a0a 230a 2320 6368 6563 6b69 }.}..#.# checki\n+000022f0: 6e67 2066 6f72 2061 6c72 6561 6479 206d ng for already m\n+00002300: 6f75 6e74 6564 2066 696c 6573 7973 7465 ounted filesyste\n+00002310: 6d73 0a23 0a6d 7920 2840 614d 2920 3d20 ms.#.my (@aM) = \n+00002320: 606d 6f75 6e74 603b 0a6d 7920 2825 616c `mount`;.my (%al\n+00002330: 7265 6164 794d 6f75 6e74 6564 2c20 246d readyMounted, $m\n+00002340: 293b 0a66 6f72 6561 6368 2024 6d20 2840 );.foreach $m (@\n+00002350: 614d 290a 7b0a 2020 2020 246d 203d 7e20 aM).{. $m =~ \n+00002360: 2f28 2e2b 3f29 206f 6e20 282e 2a29 2074 /(.+?) on (.*) t\n+00002370: 7970 6520 2f3b 0a20 2020 2024 616c 7265 ype /;. $alre\n+00002380: 6164 794d 6f75 6e74 6564 7b24 327d 203d adyMounted{$2} =\n+00002390: 2031 3b0a 7d0a 0a23 0a23 206d 6f75 6e74 1;.}..#.# mount\n+000023a0: 696e 6720 7468 6520 6669 6c65 2073 7973 ing the file sys\n+000023b0: 7465 6d73 0a23 0a6d 7920 2840 6d6f 756e tems.#.my (@moun\n+000023c0: 7465 6429 203d 2028 293b 0a6d 7920 2465 ted) = ();.my $e\n+000023d0: 7272 6f72 203d 2030 3b0a 666f 7265 6163 rror = 0;.foreac\n+000023e0: 6820 246d 2028 406d 6f75 6e74 506f 696e h $m (@mountPoin\n+000023f0: 7473 290a 7b0a 2020 2020 6d79 2028 406f ts).{. my (@o\n+00002400: 7074 2920 3d20 2829 3b0a 2020 2020 6966 pt) = ();. if\n+00002410: 2028 246d 203d 7e20 2f5c 4128 725b 6f77 ($m =~ /\\A(r[ow\n+00002420: 5d29 2c28 2e2a 292f 290a 2020 2020 7b0a ]),(.*)/). {.\n+00002430: 0928 406f 7074 2920 3d20 2827 2d6f 272c .(@opt) = ('-o',\n+00002440: 2024 3129 3b0a 0924 6d20 3d20 2432 3b0a $1);..$m = $2;.\n+00002450: 2020 2020 7d0a 0a20 2020 2069 6620 2865 }.. if (e\n+00002460: 7869 7374 7320 2461 6c72 6561 6479 4d6f xists $alreadyMo\n+00002470: 756e 7465 647b 246d 7d29 0a20 2020 207b unted{$m}). {\n+00002480: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00002490: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+000024a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+000024b0: 3e20 5b22 3c24 6d3e 2069 7320 616c 7265 > [\"<$m> is alre\n+000024c0: 6164 7920 6d6f 756e 7465 6422 5d29 3b0a ady mounted\"]);.\n+000024d0: 096e 6578 743b 0a20 2020 207d 0a0a 2020 .next;. }.. \n+000024e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+000024f0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+00002500: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00002510: 7472 7969 6e67 2074 6f20 6d6f 756e 7420 trying to mount \n+00002520: 406f 7074 2024 6d22 5d29 3b0a 2020 2020 @opt $m\"]);. \n+00002530: 6d79 2024 6670 203d 2066 6f72 6b50 726f my $fp = forkPro\n+00002540: 632d 3e6e 6577 2827 2d65 7865 6327 203d c->new('-exec' =\n+00002550: 3e20 276d 6f75 6e74 272c 0a09 0909 2020 > 'mount',.... \n+00002560: 2027 2d70 6172 616d 2720 3d3e 205b 406f '-param' => [@o\n+00002570: 7074 2c20 246d 5d2c 0a09 0909 2020 2027 pt, $m],.... '\n+00002580: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2027 -outRandom' => '\n+00002590: 2f74 6d70 2f64 6f53 746f 7265 4261 636b /tmp/doStoreBack\n+000025a0: 7570 2d66 6f72 6b4d 6f75 6e74 2d27 2c0a up-forkMount-',.\n+000025b0: 0909 0920 2020 272d 7072 4c6f 6727 203d ... '-prLog' =\n+000025c0: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. \n+000025d0: 2320 7761 6974 2066 6f72 2061 206d 6178 # wait for a max\n+000025e0: 696d 756d 206f 6620 3130 2073 6563 6f6e imum of 10 secon\n+000025f0: 6473 0a20 2020 2066 6f72 6561 6368 2028 ds. foreach (\n+00002600: 312e 2e31 3029 0a20 2020 207b 0a09 736c 1..10). {..sl\n+00002610: 6565 7020 313b 0a09 6966 2028 2466 702d eep 1;..if ($fp-\n+00002620: 3e70 726f 6365 7373 5275 6e73 2829 203d >processRuns() =\n+00002630: 3d20 3029 0a09 7b0a 0920 2020 206c 6173 = 0)..{.. las\n+00002640: 743b 0a09 7d0a 0965 6c73 650a 097b 0a09 t;..}..else..{..\n+00002650: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00002660: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D'\n+00002670: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n+00002680: 205b 2277 6169 7469 6e67 2066 6f72 206d [\"waiting for m\n+00002690: 6f75 6e74 2063 6f6d 6d61 6e64 202e 2e2e ount command ...\n+000026a0: 225d 290a 0909 6966 2024 6465 6275 673b \"])...if $debug;\n+000026b0: 0a09 7d0a 2020 2020 7d0a 2020 2020 6d79 ..}. }. my\n+000026c0: 2024 6f75 7431 203d 2024 6670 2d3e 6765 $out1 = $fp->ge\n+000026d0: 7453 5444 4f55 5428 293b 0a20 2020 206d tSTDOUT();. m\n+000026e0: 7920 246f 7574 3220 3d20 2466 702d 3e67 y $out2 = $fp->g\n+000026f0: 6574 5354 4445 5252 2829 3b0a 2020 2020 etSTDERR();. \n+00002700: 2466 702d 3e44 4553 5452 4f59 2829 3b0a $fp->DESTROY();.\n+00002710: 2020 2020 6966 2028 2466 702d 3e67 6574 if ($fp->get\n+00002720: 2827 2d77 6861 7427 203d 3e20 2773 7461 ('-what' => 'sta\n+00002730: 7475 7327 2920 213d 2030 2020 2020 2320 tus') != 0 # \n+00002740: 6d6f 756e 7420 6e6f 7420 7375 6363 6573 mount not succes\n+00002750: 7366 756c 6c0a 096f 7220 4024 6f75 7432 sfull..or @$out2\n+00002760: 203e 2030 290a 2020 2020 7b0a 0924 6d61 > 0). {..$ma\n+00002770: 696e 3a3a 6578 6974 207c 3d20 323b 0a09 in::exit |= 2;..\n+00002780: 2465 7272 6f72 203d 2031 3b0a 0924 7072 $error = 1;..$pr\n+00002790: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+000027a0: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... \n+000027b0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+000027c0: 6f75 6c64 206e 6f74 206d 6f75 6e74 2040 ould not mount @\n+000027d0: 6f70 7420 246d 225d 293b 0a09 2466 702d opt $m\"]);..$fp-\n+000027e0: 3e73 6967 6e61 6c28 272d 7661 6c75 6527 >signal('-value'\n+000027f0: 203d 3e20 3929 3b0a 0a09 2675 6d6f 756e => 9);...&umoun\n+00002800: 7428 5c40 6d6f 756e 7465 642c 2024 6b65 t(\\@mounted, $ke\n+00002810: 6570 4578 6973 7469 6e67 4d6f 756e 7473 epExistingMounts\n+00002820: 2c20 5c25 616c 7265 6164 794d 6f75 6e74 , \\%alreadyMount\n+00002830: 6564 2c20 2464 6562 7567 293b 0a0a 0924 ed, $debug);...$\n+00002840: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00002850: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n+00002860: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00002870: 2265 7869 7469 6e67 225d 293b 0a09 7761 \"exiting\"]);..wa\n+00002880: 6974 3b0a 0950 4f53 4958 3a3a 5f65 7869 it;..POSIX::_exi\n+00002890: 7420 246d 6169 6e3a 3a65 7869 743b 0a20 t $main::exit;. \n+000028a0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n+000028b0: 2020 7b0a 0970 7573 6820 406d 6f75 6e74 {..push @mount\n+000028c0: 6564 2c20 246d 3b0a 0924 7072 4c6f 672d ed, $m;..$prLog-\n+000028d0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+000028e0: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n+000028f0: 2d73 7472 2720 3d3e 205b 223c 6d6f 756e -str' => [\" successful\n+00002910: 6c22 5d29 3b0a 2020 2020 7d0a 0a20 2020 l\"]);. }.. \n+00002920: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00002930: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n+00002940: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => [\"S\n+00002950: 5444 4f55 5420 6f66 203c 6d6f 756e 7420 TDOUT of :\", @$out1]).\n+00002970: 0969 6620 2840 246f 7574 3120 3e20 3029 .if (@$out1 > 0)\n+00002980: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n+00002990: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000029a0: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' =\n+000029b0: 3e20 5b22 5354 4445 5252 206f 6620 3c6d > [\"STDERR of :\", @$ou\n+000029d0: 7432 5d29 0a09 6966 2028 4024 6f75 7432 t2])..if (@$out2\n+000029e0: 203e 2030 293b 0a0a 2020 2020 6966 2028 > 0);.. if (\n+000029f0: 4024 6f75 7432 290a 2020 2020 7b0a 0924 @$out2). {..$\n+00002a00: 6d61 696e 3a3a 6578 6974 207c 3d20 323b main::exit |= 2;\n+00002a10: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00002a20: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00002a30: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00002a40: 3e20 5b22 6578 6974 696e 6722 5d29 3b0a > [\"exiting\"]);.\n+00002a50: 0977 6169 743b 0a09 504f 5349 583a 3a5f .wait;..POSIX::_\n+00002a60: 6578 6974 2024 6d61 696e 3a3a 6578 6974 exit $main::exit\n+00002a70: 3b0a 2020 2020 7d0a 7d0a 6966 2028 2465 ;. }.}.if ($e\n+00002a80: 7272 6f72 203d 3d20 3129 0a7b 0a20 2020 rror == 1).{. \n+00002a90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00002aa0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00002ab0: 0920 2027 2d73 7472 2720 3d3e 205b 2265 . '-str' => [\"e\n+00002ac0: 7869 7469 6e67 225d 293b 0a20 2020 2077 xiting\"]);. w\n+00002ad0: 6169 743b 0a20 2020 2050 4f53 4958 3a3a ait;. POSIX::\n+00002ae0: 5f65 7869 7420 246d 6169 6e3a 3a65 7869 _exit $main::exi\n+00002af0: 743b 0a7d 0a0a 230a 2320 7374 6172 7469 t;.}..#.# starti\n+00002b00: 6e67 2073 746f 7265 4261 636b 7570 0a23 ng storeBackup.#\n+00002b10: 0a6d 7920 2473 746f 7265 4261 636b 7570 .my $storeBackup\n+00002b20: 203d 2024 7061 7468 5374 6275 203f 2022 = $pathStbu ? \"\n+00002b30: 2470 6174 6853 7462 752f 7374 6f72 6542 $pathStbu/storeB\n+00002b40: 6163 6b75 702e 706c 2220 3a20 2773 746f ackup.pl\" : 'sto\n+00002b50: 7265 4261 636b 7570 2e70 6c27 3b0a 0a6d reBackup.pl';..m\n+00002b60: 7920 2474 6169 6c53 7462 754c 6f67 4669 y $tailStbuLogFi\n+00002b70: 6c65 203d 2075 6e64 6566 3b0a 6966 2028 le = undef;.if (\n+00002b80: 2473 7462 754c 6f67 4669 6c65 290a 7b0a $stbuLogFile).{.\n+00002b90: 2020 2020 2474 6169 6c53 7462 754c 6f67 $tailStbuLog\n+00002ba0: 4669 6c65 203d 2074 6169 6c4f 6e65 4669 File = tailOneFi\n+00002bb0: 6c65 2d3e 6e65 7728 272d 6669 6c65 6e61 le->new('-filena\n+00002bc0: 6d65 2720 3d3e 2024 7374 6275 4c6f 6746 me' => $stbuLogF\n+00002bd0: 696c 652c 0a09 0909 0909 2027 2d70 6f73 ile,...... '-pos\n+00002be0: 6974 696f 6e27 203d 3e20 2765 6e64 272c ition' => 'end',\n+00002bf0: 0a09 0909 0909 2027 2d6d 6178 6c69 6e65 ...... '-maxline\n+00002c00: 7327 203d 3e20 3130 3029 3b0a 2370 7269 s' => 100);.#pri\n+00002c10: 6e74 2022 7461 696c 4f6e 6546 696c 6521 nt \"tailOneFile!\n+00002c20: 5c6e 223b 0a7d 0a0a 6d79 2024 7374 6275 \\n\";.}..my $stbu\n+00002c30: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new\n+00002c40: 2827 2d65 7865 6327 203d 3e20 2473 746f ('-exec' => $sto\n+00002c50: 7265 4261 636b 7570 2c0a 0909 0920 272d reBackup,.... '-\n+00002c60: 7061 7261 6d27 203d 3e20 5b27 2d66 272c param' => ['-f',\n+00002c70: 2024 636f 6e66 6967 4669 6c65 5d2c 0a09 $configFile],..\n+00002c80: 0909 2027 2d6f 7574 5261 6e64 6f6d 2720 .. '-outRandom' \n+00002c90: 3d3e 2027 2f74 6d70 2f64 6f53 746f 7265 => '/tmp/doStore\n+00002ca0: 4261 636b 7570 2d73 7462 752d 272c 0a09 Backup-stbu-',..\n+00002cb0: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $\n+00002cc0: 7072 4c6f 6729 3b0a 2470 724c 6f67 2d3e prLog);.$prLog->\n+00002cd0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00002ce0: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s\n+00002cf0: 7472 2720 3d3e 205b 2273 7461 7274 6564 tr' => [\"started\n+00002d00: 203c 2473 746f 7265 4261 636b 7570 202d <$storeBackup -\n+00002d10: 6620 2463 6f6e 6669 6746 696c 653e 2c20 f $configFile>, \n+00002d20: 7069 643d 2220 2e0a 0909 0920 2473 7462 pid=\" ..... $stb\n+00002d30: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' =\n+00002d40: 3e20 2770 6964 2729 5d29 3b0a 0a24 6b69 > 'pid')]);..$ki\n+00002d50: 6c6c 5469 6d65 203d 2033 3630 302a 3234 llTime = 3600*24\n+00002d60: 2a33 3635 3b20 2020 2320 7365 7420 746f *365; # set to\n+00002d70: 206f 6e65 2079 6561 720a 6966 2028 246b one year.if ($k\n+00002d80: 696c 6c54 696d 6529 0a7b 0a20 2020 206d illTime).{. m\n+00002d90: 7920 2472 6561 6479 203d 2030 3b0a 2020 y $ready = 0;. \n+00002da0: 2020 666f 7265 6163 6820 2831 2e2e 246b foreach (1..$k\n+00002db0: 696c 6c54 696d 6529 0a20 2020 207b 0a09 illTime). {..\n+00002dc0: 6966 2028 2473 7462 754c 6f67 4669 6c65 if ($stbuLogFile\n+00002dd0: 290a 097b 0a09 2020 2020 6d79 2028 246c )..{.. my ($l\n+00002de0: 2c20 2465 2920 3d20 2474 6169 6c53 7462 , $e) = $tailStb\n+00002df0: 754c 6f67 4669 6c65 2d3e 7265 6164 2829 uLogFile->read()\n+00002e00: 3b0a 0920 2020 2063 686f 7020 4024 6c3b ;.. chop @$l;\n+00002e10: 0a09 2020 2020 2470 724c 6f67 2d3e 5f5f .. $prLog->__\n+00002e20: 7265 616c 6c79 5072 696e 7428 246c 2920 reallyPrint($l) \n+00002e30: 6966 2028 4024 6c20 3e20 3029 3b0a 0920 if (@$l > 0);.. \n+00002e40: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00002e50: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00002e60: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n+00002e70: 5b24 655d 2920 6966 2024 653b 0a09 7d0a [$e]) if $e;..}.\n+00002e80: 0973 6c65 6570 2031 3b0a 0969 6620 2824 .sleep 1;..if ($\n+00002e90: 7374 6275 2d3e 7072 6f63 6573 7352 756e stbu->processRun\n+00002ea0: 7328 2920 3d3d 2030 290a 097b 0a09 2020 s() == 0)..{.. \n+00002eb0: 2020 2472 6561 6479 203d 2031 3b0a 0920 $ready = 1;.. \n+00002ec0: 2020 206c 6173 743b 0a09 7d0a 2020 2020 last;..}. \n+00002ed0: 7d0a 2020 2020 6966 2028 2472 6561 6479 }. if ($ready\n+00002ee0: 203d 3d20 3029 2020 2020 2020 2320 6475 == 0) # du\n+00002ef0: 7261 7469 6f6e 2074 6f6f 206c 6f6e 670a ration too long.\n+00002f00: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n+00002f10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00002f20: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n+00002f30: 7472 2720 3d3e 205b 2274 696d 6520 6c69 tr' => [\"time li\n+00002f40: 6d69 7420 3c24 6b74 3e20 6578 6365 6564 mit <$kt> exceed\n+00002f50: 6564 2066 6f72 2022 202e 0a09 0909 0920 ed for \" ...... \n+00002f60: 223c 7374 6f72 6542 6163 6b75 7020 2d66 \"\"])\n+00002f80: 3b0a 0924 7374 6275 2d3e 7369 676e 616c ;..$stbu->signal\n+00002f90: 2827 2d76 616c 7565 2720 3d3e 2032 293b ('-value' => 2);\n+00002fa0: 2020 2020 2023 2053 4947 494e 540a 0924 # SIGINT..$\n+00002fb0: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1;\n+00002fc0: 0a09 736c 6565 7020 3130 3b20 2020 2020 ..sleep 10; \n+00002fd0: 2020 2020 2023 2074 696d 6520 666f 7220 # time for \n+00002fe0: 7374 6f72 6542 6163 6b75 7020 746f 2066 storeBackup to f\n+00002ff0: 696e 6973 680a 2020 2020 7d0a 7d0a 0a69 inish. }.}..i\n+00003000: 6620 2824 7374 6275 4c6f 6746 696c 6529 f ($stbuLogFile)\n+00003010: 0a7b 0a20 2020 206d 7920 2824 6c2c 2024 .{. my ($l, $\n+00003020: 6529 3b0a 2020 2020 646f 0a20 2020 207b e);. do. {\n+00003030: 0a09 2824 6c2c 2024 6529 203d 2024 7461 ..($l, $e) = $ta\n+00003040: 696c 5374 6275 4c6f 6746 696c 652d 3e72 ilStbuLogFile->r\n+00003050: 6561 6428 293b 0a09 6368 6f70 2040 246c ead();..chop @$l\n+00003060: 3b0a 0924 7072 4c6f 672d 3e5f 5f72 6561 ;..$prLog->__rea\n+00003070: 6c6c 7950 7269 6e74 2824 6c29 2069 6620 llyPrint($l) if \n+00003080: 2840 246c 203e 2030 293b 0a09 2470 724c (@$l > 0);..$prL\n+00003090: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000030a0: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... \n+000030b0: 2020 272d 7374 7227 203d 3e20 5b24 655d '-str' => [$e]\n+000030c0: 2920 6966 2024 653b 0a20 2020 207d 2077 ) if $e;. } w\n+000030d0: 6869 6c65 2028 4024 6c29 3b0a 7d0a 0a69 hile (@$l);.}..i\n+000030e0: 6620 2824 7374 6275 2d3e 6765 7428 272d f ($stbu->get('-\n+000030f0: 7768 6174 2720 3d3e 2027 7374 6174 7573 what' => 'status\n+00003100: 2729 2021 3d20 3029 0a7b 0a20 2020 2024 ') != 0).{. $\n+00003110: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1;\n+00003120: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00003130: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00003140: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00003150: 205b 2273 746f 7265 4261 636b 7570 2065 [\"storeBackup e\n+00003160: 7869 7420 7374 6174 7573 2021 3d20 3022 xit status != 0\"\n+00003170: 5d29 3b0a 7d0a 0a75 6e6c 6573 7320 2824 ]);.}..unless ($\n+00003180: 7374 6275 4c6f 6746 696c 6529 0a7b 0a20 stbuLogFile).{. \n+00003190: 2020 206d 7920 246f 7574 3120 3d20 2473 my $out1 = $s\n+000031a0: 7462 752d 3e67 6574 5354 444f 5554 2829 tbu->getSTDOUT()\n+000031b0: 3b0a 2020 2020 2470 724c 6f67 2d3e 5f5f ;. $prLog->__\n+000031c0: 7265 616c 6c79 5072 696e 7428 246f 7574 reallyPrint($out\n+000031d0: 3129 2069 6620 2840 246f 7574 3120 3e20 1) if (@$out1 > \n+000031e0: 3029 3b0a 7d0a 0a6d 7920 246f 7574 3220 0);.}..my $out2 \n+000031f0: 3d20 2473 7462 752d 3e67 6574 5354 4445 = $stbu->getSTDE\n+00003200: 5252 2829 3b0a 6966 2028 4024 6f75 7432 RR();.if (@$out2\n+00003210: 203e 2030 290a 7b0a 2020 2020 246d 6169 > 0).{. $mai\n+00003220: 6e3a 3a65 7869 7420 7c3d 2031 3b0a 2020 n::exit |= 1;. \n+00003230: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00003240: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00003250: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00003260: 5354 4445 5252 206f 6620 3c73 746f 7265 STDERR of :\",.... \n+00003290: 2020 4024 6f75 7432 5d29 3b0a 7d0a 2473 @$out2]);.}.$s\n+000032a0: 7462 752d 3e44 4553 5452 4f59 2829 3b0a tbu->DESTROY();.\n+000032b0: 0a73 6c65 6570 2032 3b0a 0a26 756d 6f75 .sleep 2;..&umou\n+000032c0: 6e74 285c 406d 6f75 6e74 6564 2c20 246b nt(\\@mounted, $k\n+000032d0: 6565 7045 7869 7374 696e 674d 6f75 6e74 eepExistingMount\n+000032e0: 732c 205c 2561 6c72 6561 6479 4d6f 756e s, \\%alreadyMoun\n+000032f0: 7465 642c 2024 6465 6275 6729 3b0a 0a24 ted, $debug);..$\n+00003300: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00003310: 696e 6427 203d 3e20 275a 272c 0a09 2020 ind' => 'Z',.. \n+00003320: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00003330: 6669 6e69 7368 6564 2073 746f 7265 4261 finished storeBa\n+00003340: 636b 7570 202d 6620 2463 6f6e 6669 6746 ckup -f $configF\n+00003350: 696c 6522 5d29 3b0a 0a77 6169 743b 0a50 ile\"]);..wait;.P\n+00003360: 4f53 4958 3a3a 5f65 7869 7420 246d 6169 OSIX::_exit $mai\n+00003370: 6e3a 3a65 7869 743b 0a0a 2323 2323 2323 n::exit;..######\n+00003380: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003390: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000033a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000033b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000033c0: 0a73 7562 2075 6d6f 756e 740a 7b0a 2020 .sub umount.{. \n+000033d0: 2020 6d79 2028 246d 6f75 6e74 6564 2c20 my ($mounted, \n+000033e0: 246b 6565 7045 7869 7374 696e 674d 6f75 $keepExistingMou\n+000033f0: 6e74 732c 2024 616c 7265 6164 794d 6f75 nts, $alreadyMou\n+00003400: 6e74 6564 2c20 2464 6562 7567 2920 3d20 nted, $debug) = \n+00003410: 405f 3b0a 0a20 2020 2066 6f72 6561 6368 @_;.. foreach\n+00003420: 2024 6d20 2872 6576 6572 7365 2040 246d $m (reverse @$m\n+00003430: 6f75 6e74 6564 290a 2020 2020 7b0a 0969 ounted). {..i\n+00003440: 6620 2865 7869 7374 7320 2461 6c72 6561 f (exists $alrea\n+00003450: 6479 4d6f 756e 7465 647b 246d 7d29 0a09 dyMounted{$m})..\n+00003460: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p\n+00003470: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00003480: 2749 272c 0a09 0909 2020 272d 7374 7227 'I',.... '-str'\n+00003490: 203d 3e0a 0909 0920 205b 2264 6f20 6e6f =>.... [\"do no\n+000034a0: 7420 756d 6f75 6e74 203c 246d 3e2c 2077 t umount <$m>, w\n+000034b0: 6173 2061 6c72 6561 6479 206d 6f75 6e74 as already mount\n+000034c0: 6564 225d 293b 0a09 2020 2020 6e65 7874 ed\"]);.. next\n+000034d0: 3b0a 097d 0a09 2470 724c 6f67 2d3e 7072 ;..}..$prLog->pr\n+000034e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000034f0: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st\n+00003500: 7227 203d 3e20 5b22 7472 7969 6e67 2074 r' => [\"trying t\n+00003510: 6f20 3c75 6d6f 756e 7420 246d 3e22 5d29 o \"])\n+00003520: 3b0a 0973 6c65 6570 2035 3b0a 096d 7920 ;..sleep 5;..my \n+00003530: 2475 6d20 3d20 666f 726b 5072 6f63 2d3e $um = forkProc->\n+00003540: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => '\n+00003550: 756d 6f75 6e74 272c 0a09 0909 2020 2020 umount',.... \n+00003560: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [\n+00003570: 246d 5d2c 0a09 0909 2020 2020 2020 2027 $m],.... '\n+00003580: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>..\n+00003590: 0909 2020 2020 2020 2027 2f74 6d70 2f64 .. '/tmp/d\n+000035a0: 6f53 746f 7265 4261 636b 7570 2d66 6f72 oStoreBackup-for\n+000035b0: 6b4d 6f75 6e74 2d27 2c0a 0909 0920 2020 kMount-',.... \n+000035c0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n+000035d0: 2470 724c 6f67 293b 0a0a 0923 2077 6169 $prLog);...# wai\n+000035e0: 7420 666f 7220 6120 6d61 7869 6d75 6d20 t for a maximum \n+000035f0: 6f66 2036 3020 7365 636f 6e64 730a 0966 of 60 seconds..f\n+00003600: 6f72 6561 6368 2028 312e 2e36 3029 0a09 oreach (1..60)..\n+00003610: 7b0a 0920 2020 2073 6c65 6570 2031 3b0a {.. sleep 1;.\n+00003620: 0920 2020 2069 6620 2824 756d 2d3e 7072 . if ($um->pr\n+00003630: 6f63 6573 7352 756e 7328 2920 3d3d 2030 ocessRuns() == 0\n+00003640: 290a 0920 2020 207b 0a09 096c 6173 743b ).. {...last;\n+00003650: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00003660: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo\n+00003670: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00003680: 203d 3e20 2744 272c 0a09 0909 2020 2020 => 'D',.... \n+00003690: 2020 272d 7374 7227 203d 3e20 5b22 7761 '-str' => [\"wa\n+000036a0: 6974 696e 6720 666f 7220 756d 6f75 6e74 iting for umount\n+000036b0: 2063 6f6d 6d61 6e64 202e 2e2e 225d 290a command ...\"]).\n+000036c0: 0909 2020 2020 6966 2024 6465 6275 673b .. if $debug;\n+000036d0: 0a09 2020 2020 7d0a 097d 0a09 2475 6d2d .. }..}..$um-\n+000036e0: 3e44 4553 5452 4f59 2829 3b0a 0969 6620 >DESTROY();..if \n+000036f0: 2824 756d 2d3e 6765 7428 272d 7768 6174 ($um->get('-what\n+00003700: 2720 3d3e 2027 7374 6174 7573 2729 2021 ' => 'status') !\n+00003710: 3d20 3029 2020 2020 2320 756d 6f75 6e74 = 0) # umount\n+00003720: 206e 6f74 2073 7563 6365 7373 6675 6c6c not successfull\n+00003730: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog-\n+00003740: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00003750: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n+00003760: 7227 203d 3e20 5b22 636f 756c 6420 6e6f r' => [\"could no\n+00003770: 7420 3c75 6d6f 756e 7420 246d 3e22 5d29 t \"])\n+00003780: 3b0a 0920 2020 2024 756d 2d3e 7369 676e ;.. $um->sign\n+00003790: 616c 2827 2d76 616c 7565 2720 3d3e 2039 al('-value' => 9\n+000037a0: 293b 0a09 2020 2020 246d 6169 6e3a 3a65 );.. $main::e\n+000037b0: 7869 7420 7c3d 2032 3b0a 097d 0a09 656c xit |= 2;..}..el\n+000037c0: 7365 0a09 7b0a 0920 2020 2024 7072 4c6f se..{.. $prLo\n+000037d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+000037e0: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '-\n+000037f0: 7374 7227 203d 3e20 5b22 3c75 6d6f 756e str' => [\" $m successful\n+00003810: 6c22 5d29 3b0a 097d 0a20 2020 207d 0a7d l\"]);..}. }.}\n+00003820: 0a .\n"}, {"source1": "./usr/bin/storeBackupRecover", "source2": "./usr/bin/storeBackupRecover", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1468 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7052 6563 6f76 6572 0a pRecover.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# \n+00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i\n+00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software:\n+00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr\n+000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or \n+000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un\n+000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of\n+000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n+000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n+000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by.\n+00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof\n+00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation\n+00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version\n+00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens\n+00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo\n+00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l\n+00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...#\n+00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program \n+00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i\n+00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that \n+000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu\n+000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO\n+000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY;\n+000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th\n+000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran\n+000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA\n+00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT\n+00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI\n+00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. \n+00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU \n+00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n+00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more \n+00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y\n+00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r\n+00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o\n+00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera\n+000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with \n+000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I\n+000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m\n+00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I\n+00000310: 643a 2073 746f 7265 4261 636b 7570 5265 d: storeBackupRe\n+00000320: 636f 7665 722e 706c 2033 3634 2032 3031 cover.pl 364 201\n+00000330: 322d 3032 2d31 3220 3134 3a31 343a 3434 2-02-12 14:14:44\n+00000340: 5a20 686a 6320 2420 273b 0a70 7573 6820 Z hjc $ ';.push \n+00000350: 4056 4552 5349 4f4e 2c20 2456 4552 5349 @VERSION, $VERSI\n+00000360: 4f4e 3b0a 6d79 2028 2456 4552 5349 4f4e ON;.my ($VERSION\n+00000370: 704e 616d 652c 2024 5645 5253 494f 4e73 pName, $VERSIONs\n+00000380: 766e 4944 2920 3d20 2456 4552 5349 4f4e vnID) = $VERSION\n+00000390: 203d 7e20 2f49 643a 5c73 2b28 5c53 2b29 =~ /Id:\\s+(\\S+)\n+000003a0: 5c73 2b28 5c64 2b29 2f3b 0a24 6d61 696e \\s+(\\d+)/;.$main\n+000003b0: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER\n+000003c0: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;...\n+000003d0: 7573 6520 7374 7269 6374 3b0a 7573 6520 use strict;.use \n+000003e0: 4442 5f46 696c 653b 2020 2020 2020 2020 DB_File; \n+000003f0: 2020 2023 2042 6572 6b65 6c65 7920 4442 # Berkeley DB\n+00000400: 2076 6572 7369 6f6e 2031 0a0a 0a73 7562 version 1...sub\n+00000410: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m\n+00000420: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift;\n+00000430: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;..\n+00000440: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date\n+00000450: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym\n+00000460: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang\n+00000470: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au\n+00000480: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if (\n+00000490: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {.\n+000004a0: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file\n+000004b0: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li\n+000004c0: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f\n+000004d0: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if (\n+000004e0: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0,\n+000004f0: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne \"/\").. \n+00000500: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/\n+00000510: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\\/]+$/$link/;.\n+00000520: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n+00000530: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file \n+00000540: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }.\n+00000550: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil\n+00000560: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD\n+00000570: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil\n+00000580: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = \"/$file\";. \n+00000590: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+000005a0: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR\n+000005b0: 2022 3c24 6669 6c65 3e20 646f 6573 206e \"<$file> does n\n+000005c0: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\\n\";..e\n+000005d0: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. \n+000005e0: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= \"/../l\n+000005f0: 6962 223b 2020 2020 2020 2020 2020 2023 ib\"; #\n+00000600: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib\n+00000610: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my\n+00000620: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin\n+00000630: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp\n+00000640: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if\n+00000650: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). \n+00000660: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir \n+00000670: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c\n+00000680: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch\n+00000690: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r\n+000006a0: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil\n+000006b0: 6544 6972 2822 2461 6273 4469 7224 6669 eDir(\"$absDir$fi\n+000006c0: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le\"));. }. \n+000006d0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri\n+000006e0: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR \"<$dir\n+000006f0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist\n+00000700: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\\n\";. \n+00000710: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF\n+00000720: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my \n+00000730: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;..\n+00000740: 2020 2020 7265 7475 726e 2028 272e 272c return ('.',\n+00000750: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless (\n+00000760: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\\//); \n+00000770: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache\n+00000780: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. \n+00000790: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file\n+000007a0: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^(\n+000007b0: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\\/(.*)$/s;. \n+000007c0: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if \n+000007d0: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); \n+000007e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000007f0: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z.\n+00000800: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. \n+00000810: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $\n+00000820: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re\n+00000830: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib\n+00000840: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @\n+00000850: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, \"$req\";..re\n+00000860: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara\n+00000870: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require \n+00000880: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl'\n+00000890: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog\n+000008a0: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v\n+000008b0: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ\n+000008c0: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl'\n+000008d0: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP\n+000008e0: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require\n+000008f0: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib\n+00000900: 2e70 6c27 3b0a 0a0a 6d79 2024 6d64 3543 .pl';...my $md5C\n+00000910: 6865 636b 5375 6d56 6572 7369 6f6e 203d heckSumVersion =\n+00000920: 2027 312e 3127 3b0a 6d79 2024 6e6f 5265 '1.1';.my $noRe\n+00000930: 7374 6f72 6550 6172 616c 6c65 6c20 3d20 storeParallel = \n+00000940: 3132 3b0a 6d79 2024 6368 6563 6b53 756d 12;.my $checkSum\n+00000950: 4669 6c65 203d 2027 2e6d 6435 4368 6563 File = '.md5Chec\n+00000960: 6b53 756d 7327 3b0a 0a6d 7920 2474 6d70 kSums';..my $tmp\n+00000970: 6469 7220 3d20 272f 746d 7027 3b20 2020 dir = '/tmp'; \n+00000980: 2020 2020 2020 2020 2020 2023 2064 6566 # def\n+00000990: 6175 6c74 2076 616c 7565 0a24 746d 7064 ault value.$tmpd\n+000009a0: 6972 203d 2024 454e 567b 2754 4d50 4449 ir = $ENV{'TMPDI\n+000009b0: 5227 7d20 6966 2064 6566 696e 6564 2024 R'} if defined $\n+000009c0: 454e 567b 2754 4d50 4449 5227 7d3b 0a0a ENV{'TMPDIR'};..\n+000009d0: 3d68 6561 6431 204e 414d 450a 0a73 746f =head1 NAME..sto\n+000009e0: 7265 4261 636b 7570 5265 636f 7665 722e reBackupRecover.\n+000009f0: 706c 202d 2072 6563 6f76 6572 7320 6669 pl - recovers fi\n+00000a00: 6c65 7320 7361 7665 6420 7769 7468 2073 les saved with s\n+00000a10: 746f 7265 4261 636b 7570 2e70 6c2e 0a0a toreBackup.pl...\n+00000a20: 3d68 6561 6431 2053 594e 4f50 5349 530a =head1 SYNOPSIS.\n+00000a30: 0a09 7374 6f72 6542 6163 6b75 7052 6563 ..storeBackupRec\n+00000a40: 6f76 6572 2e70 6c20 2d72 2072 6573 746f over.pl -r resto\n+00000a50: 7265 205b 2d62 2072 6f6f 745d 202d 7420 re [-b root] -t \n+00000a60: 7461 7267 6574 4469 7220 5b2d 2d66 6c61 targetDir [--fla\n+00000a70: 745d 0a09 095b 2d6f 5d20 5b2d 2d74 6d70 t]...[-o] [--tmp\n+00000a80: 6469 725d 205b 2d2d 6e6f 4861 7264 4c69 dir] [--noHardLi\n+00000a90: 6e6b 735d 205b 2d70 206e 756d 6265 725d nks] [-p number]\n+00000aa0: 205b 2d76 5d20 5b2d 6e5d 0a09 095b 2d2d [-v] [-n]...[--\n+00000ab0: 6370 4973 476e 755d 205b 2d2d 6e6f 476e cpIsGnu] [--noGn\n+00000ac0: 7543 705d 0a0a 3d68 6561 6431 204f 5054 uCp]..=head1 OPT\n+00000ad0: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..=\n+00000ae0: 6974 656d 2042 3c2d 2d72 6573 746f 7265 item B<--restore\n+00000af0: 5472 6565 3e2c 2042 3c2d 723e 0a0a 2020 Tree>, B<-r>.. \n+00000b00: 2020 6669 6c65 206f 7220 2870 6172 7420 file or (part \n+00000b10: 6f66 2920 7468 6520 7472 6565 2074 6f20 of) the tree to \n+00000b20: 7265 7374 6f72 650a 2020 2020 7768 656e restore. when\n+00000b30: 2072 6573 746f 7269 6e67 2061 2066 696c restoring a fil\n+00000b40: 652c 2074 6865 2066 696c 6520 6e61 6d65 e, the file name\n+00000b50: 2069 6e20 7468 6520 6261 636b 7570 2068 in the backup h\n+00000b60: 6173 0a20 2020 2074 6f20 6265 2075 7365 as. to be use\n+00000b70: 6420 2865 672e 2077 6974 6820 636f 6d70 d (eg. with comp\n+00000b80: 7265 7373 696f 6e20 7375 6666 6978 290a ression suffix).\n+00000b90: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu\n+00000ba0: 7052 6f6f 743e 2c20 423c 2d62 3e0a 0a20 pRoot>, B<-b>.. \n+00000bb0: 2020 2072 6f6f 7420 6f66 2073 746f 7265 root of store\n+00000bc0: 4261 636b 7570 2074 7265 652c 206e 6f72 Backup tree, nor\n+00000bd0: 6d61 6c6c 7920 6e6f 7420 6e65 6564 6564 mally not needed\n+00000be0: 0a0a 3d69 7465 6d20 423c 2d2d 7461 7267 ..=item B<--targ\n+00000bf0: 6574 4469 723e 2c20 423c 2d74 3e0a 0a20 etDir>, B<-t>.. \n+00000c00: 2020 2064 6972 6563 746f 7279 2066 6f72 directory for\n+00000c10: 2075 6e70 6163 6b69 6e67 0a0a 3d69 7465 unpacking..=ite\n+00000c20: 6d20 423c 2d2d 666c 6174 3e0a 0a20 2020 m B<--flat>.. \n+00000c30: 2064 6f20 6e6f 7420 6372 6561 7465 2073 do not create s\n+00000c40: 7562 6469 7265 6374 6f72 6965 730a 0a3d ubdirectories..=\n+00000c50: 6974 656d 2042 3c2d 2d6f 7665 7277 7269 item B<--overwri\n+00000c60: 7465 3e2c 2042 3c2d 6f3e 0a0a 2020 2020 te>, B<-o>.. \n+00000c70: 6f76 6572 7772 6974 6520 6578 6973 7469 overwrite existi\n+00000c80: 6e67 2066 696c 6573 0a0a 3d69 7465 6d20 ng files..=item \n+00000c90: 423c 2d2d 746d 7064 6972 3e2c 2042 3c2d B<--tmpdir>, B<-\n+00000ca0: 543e 0a0a 2020 2020 6469 7265 6374 6f72 T>.. director\n+00000cb0: 7920 666f 7220 7465 6d70 6f72 6172 7920 y for temporary \n+00000cc0: 6669 6c65 2c20 6465 6661 756c 7420 6973 file, default is\n+00000cd0: 203c 2474 6d70 6469 723e 0a0a 3d69 7465 <$tmpdir>..=ite\n+00000ce0: 6d20 423c 2d2d 6e6f 4861 7264 4c69 6e6b m B<--noHardLink\n+00000cf0: 733e 0a0a 2020 2020 646f 206e 6f74 2072 s>.. do not r\n+00000d00: 6563 6f6e 7374 7275 6374 2068 6172 6420 econstruct hard \n+00000d10: 6c69 6e6b 7320 696e 2072 6573 746f 7265 links in restore\n+00000d20: 2074 7265 650a 0a3d 6974 656d 2042 3c2d tree..=item B<-\n+00000d30: 2d6e 6f52 6573 746f 7265 5061 7261 6c6c -noRestoreParall\n+00000d40: 656c 3e2c 2042 3c2d 703e 0a0a 2020 2020 el>, B<-p>.. \n+00000d50: 6d61 7820 6e6f 206f 6620 7061 7261 6c65 max no of parale\n+00000d60: 6c6c 2070 726f 6772 616d 7320 746f 2075 ll programs to u\n+00000d70: 6e70 6163 6b2c 2064 6566 6175 6c74 2069 npack, default i\n+00000d80: 7320 3132 0a20 2020 2072 6564 7563 6520 s 12. reduce \n+00000d90: 7468 6973 206e 756d 6265 7220 6966 2079 this number if y\n+00000da0: 6f75 2061 7265 2072 6573 746f 7269 6e67 ou are restoring\n+00000db0: 2062 6c6f 636b 6564 2066 696c 6573 0a20 blocked files. \n+00000dc0: 2020 2061 6e64 2074 6865 2073 7973 7465 and the syste\n+00000dd0: 6d20 6861 7320 696e 7375 6666 6963 6965 m has insufficie\n+00000de0: 6e74 2052 414d 0a0a 3d69 7465 6d20 423c nt RAM..=item B<\n+00000df0: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v\n+00000e00: 3e0a 0a20 2020 2070 7269 6e74 2076 6572 >.. print ver\n+00000e10: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..=\n+00000e20: 6974 656d 2042 3c2d 2d6e 6f52 6573 746f item B<--noResto\n+00000e30: 7265 643e 2c20 423c 2d6e 3e0a 0a20 2020 red>, B<-n>.. \n+00000e40: 2070 7269 6e74 206e 756d 6265 7220 6f66 print number of\n+00000e50: 2072 6573 746f 7265 6420 6469 7273 2c20 restored dirs, \n+00000e60: 6861 7264 6c69 6e6b 732c 2073 796d 6c69 hardlinks, symli\n+00000e70: 6e6b 732c 2066 696c 6573 2c20 2e2e 2e0a nks, files, ....\n+00000e80: 0a3d 6974 656d 2042 3c2d 2d6e 6f47 6e75 .=item B<--noGnu\n+00000e90: 4370 3e0a 0a20 2020 206f 7665 7277 7269 Cp>.. overwri\n+00000ea0: 7465 2069 6e66 6f72 6d61 7469 6f6e 2069 te information i\n+00000eb0: 6e20 6261 636b 7570 3a20 796f 7520 646f n backup: you do\n+00000ec0: 206e 6f74 2068 6176 6520 676e 7563 700a not have gnucp.\n+00000ed0: 2020 2020 696e 7374 616c 6c65 640a 2020 installed. \n+00000ee0: 2020 286f 6e6c 7920 7265 6c65 7661 6e74 (only relevant\n+00000ef0: 2066 6f72 2073 6f63 6b65 7473 2c20 626c for sockets, bl\n+00000f00: 6f63 6b20 616e 6420 6368 6172 6163 7465 ock and characte\n+00000f10: 7220 6465 7669 6365 7329 0a0a 3d62 6163 r devices)..=bac\n+00000f20: 6b0a 0a3d 6865 6164 3120 434f 5059 5249 k..=head1 COPYRI\n+00000f30: 4748 540a 0a43 6f70 7972 6967 6874 2028 GHT..Copyright (\n+00000f40: 6329 2032 3030 322d 3230 3039 2c32 3031 c) 2002-2009,201\n+00000f50: 3220 6279 2048 6569 6e7a 2d4a 6f73 6566 2 by Heinz-Josef\n+00000f60: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ\n+00000f70: 4d45 292e 0a50 7562 6c69 7368 6564 2075 ME)..Published u\n+00000f80: 6e64 6572 2074 6865 2047 4e55 2047 656e nder the GNU Gen\n+00000f90: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00000fa0: 6e73 6520 7633 206f 7220 616e 7920 6c61 nse v3 or any la\n+00000fb0: 7465 7220 7665 7273 696f 6e0a 0a3d 6375 ter version..=cu\n+00000fc0: 740a 0a6d 7920 2448 656c 7020 3d20 6a6f t..my $Help = jo\n+00000fd0: 696e 2827 272c 2067 7265 7028 212f 5e5c in('', grep(!/^\\\n+00000fe0: 732a 242f 2c20 6070 6f64 3274 6578 7420 s*$/, `pod2text \n+00000ff0: 2430 6029 293b 0a24 4865 6c70 203d 2022 $0`));.$Help = \"\n+00001000: 6361 6e6e 6f74 2066 696e 6420 706f 6432 cannot find pod2\n+00001010: 7465 7874 2c20 7365 6520 646f 6375 6d65 text, see docume\n+00001020: 6e74 6174 696f 6e20 666f 7220 6465 7461 ntation for deta\n+00001030: 696c 735c 6e22 0a20 2020 2075 6e6c 6573 ils\\n\". unles\n+00001040: 7320 2448 656c 703b 0a0a 2670 7269 6e74 s $Help;..&print\n+00001050: 5665 7273 696f 6e73 285c 4041 5247 562c Versions(\\@ARGV,\n+00001060: 2027 2d56 2729 3b0a 0a6d 7920 2443 6865 '-V');..my $Che\n+00001070: 636b 5061 7220 3d0a 2020 2020 4368 6563 ckPar =. Chec\n+00001080: 6b50 6172 616d 2d3e 6e65 7728 272d 616c kParam->new('-al\n+00001090: 6c6f 774c 6973 7473 2720 3d3e 2027 6e6f lowLists' => 'no\n+000010a0: 272c 0a09 0920 2020 2027 2d6c 6973 7427 ',... '-list'\n+000010b0: 203d 3e20 5b4f 7074 696f 6e2d 3e6e 6577 => [Option->new\n+000010c0: 2827 2d6e 616d 6527 203d 3e20 2772 6573 ('-name' => 'res\n+000010d0: 746f 7265 5472 6565 272c 0a09 0909 0909 toreTree',......\n+000010e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+000010f0: 203d 3e20 272d 7227 2c0a 0909 0909 0920 => '-r',...... \n+00001100: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+00001110: 3e20 272d 2d72 6573 746f 7265 5472 6565 > '--restoreTree\n+00001120: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+00001130: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',..\n+00001140: 0909 0909 2020 2020 272d 6d75 7374 5f62 .... '-must_b\n+00001150: 6527 203d 3e20 2779 6573 2729 2c0a 0909 e' => 'yes'),...\n+00001160: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+00001170: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup\n+00001180: 526f 6f74 272c 0a09 0909 0909 2020 2020 Root',...... \n+00001190: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+000011a0: 272d 6227 2c0a 0909 0909 0920 2020 2027 '-b',...... '\n+000011b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+000011c0: 2d62 6163 6b75 7052 6f6f 7427 2c0a 0909 -backupRoot',...\n+000011d0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n+000011e0: 2720 3d3e 2027 2729 2c0a 0909 0909 4f70 ' => ''),.....Op\n+000011f0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+00001200: 2720 3d3e 2027 7461 7267 6574 4469 7227 ' => 'targetDir'\n+00001210: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001220: 6f70 7469 6f6e 2720 3d3e 2027 2d74 272c option' => '-t',\n+00001230: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+00001240: 6c69 6173 2720 3d3e 2027 2d2d 7461 7267 lias' => '--targ\n+00001250: 6574 4469 7227 2c0a 0909 0909 0920 2020 etDir',...... \n+00001260: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n+00001270: 7327 2c0a 0909 0909 0920 2020 2027 2d6d s',...... '-m\n+00001280: 7573 745f 6265 2720 3d3e 2027 7965 7327 ust_be' => 'yes'\n+00001290: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+000012a0: 6577 2827 2d6e 616d 6527 203d 3e20 2766 ew('-name' => 'f\n+000012b0: 6c61 7427 2c0a 0909 0909 0920 2020 2027 lat',...... '\n+000012c0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+000012d0: 2d2d 666c 6174 2729 2c0a 0909 0909 4f70 --flat'),.....Op\n+000012e0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+000012f0: 2720 3d3e 2027 6f76 6572 7772 6974 6527 ' => 'overwrite'\n+00001300: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001310: 6f70 7469 6f6e 2720 3d3e 2027 2d6f 272c option' => '-o',\n+00001320: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+00001330: 6c69 6173 2720 3d3e 2027 2d2d 6f76 6572 lias' => '--over\n+00001340: 7772 6974 6527 292c 0a09 0909 094f 7074 write'),.....Opt\n+00001350: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00001360: 203d 3e20 2774 6d70 4469 7227 2c0a 0909 => 'tmpDir',...\n+00001370: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n+00001380: 6f6e 2720 3d3e 2027 2d54 272c 0a09 0909 on' => '-T',....\n+00001390: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n+000013a0: 2720 3d3e 2027 2d2d 746d 7064 6972 272c ' => '--tmpdir',\n+000013b0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n+000013c0: 756c 7427 203d 3e20 2474 6d70 6469 7229 ult' => $tmpdir)\n+000013d0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+000013e0: 7728 272d 6e61 6d65 2720 3d3e 2027 6e6f w('-name' => 'no\n+000013f0: 4861 7264 4c69 6e6b 7327 2c0a 0909 0909 HardLinks',.....\n+00001400: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+00001410: 2720 3d3e 2027 2d2d 6e6f 4861 7264 4c69 ' => '--noHardLi\n+00001420: 6e6b 7327 292c 0a09 0909 094f 7074 696f nks'),.....Optio\n+00001430: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001440: 3e20 276e 6f52 6573 746f 7265 5061 7261 > 'noRestorePara\n+00001450: 6c6c 656c 272c 0a09 0909 0909 2020 2020 llel',...... \n+00001460: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+00001470: 272d 7027 2c0a 0909 0909 0920 2020 2027 '-p',...... '\n+00001480: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+00001490: 2d6e 6f52 6573 746f 7265 5061 7261 6c6c -noRestoreParall\n+000014a0: 656c 272c 0a09 0909 0909 2020 2020 272d el',...... '-\n+000014b0: 7061 7474 6572 6e27 203d 3e20 275c 415c pattern' => '\\A\\\n+000014c0: 642b 5c5a 272c 0a09 0909 0909 2020 2020 d+\\Z',...... \n+000014d0: 272d 6465 6661 756c 7427 203d 3e20 246e '-default' => $n\n+000014e0: 6f52 6573 746f 7265 5061 7261 6c6c 656c oRestoreParallel\n+000014f0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00001500: 6577 2827 2d6e 616d 6527 203d 3e20 2776 ew('-name' => 'v\n+00001510: 6572 626f 7365 272c 0a09 0909 0909 2020 erbose',...... \n+00001520: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00001530: 3e20 272d 7627 2c0a 0909 0909 0920 2020 > '-v',...... \n+00001540: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+00001550: 272d 2d76 6572 626f 7365 2729 2c0a 0909 '--verbose'),...\n+00001560: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n+00001570: 6e61 6d65 2720 3d3e 2027 6e6f 5265 7374 name' => 'noRest\n+00001580: 6f72 6564 272c 0a09 0909 0909 2020 2020 ored',...... \n+00001590: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n+000015a0: 272d 6e27 2c0a 0909 0909 0920 2020 2027 '-n',...... '\n+000015b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n+000015c0: 2d6e 6f52 6573 746f 7265 6427 292c 0a09 -noRestored'),..\n+000015d0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+000015e0: 2d6e 616d 6527 203d 3e20 276e 6f47 6e75 -name' => 'noGnu\n+000015f0: 4370 272c 0a09 0909 0909 2020 2020 272d Cp',...... '-\n+00001600: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+00001610: 2d6e 6f47 6e75 4370 2729 0a09 0909 095d -noGnuCp').....]\n+00001620: 0a09 0920 2020 2029 3b0a 0a24 4368 6563 ... );..$Chec\n+00001630: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar\n+00001640: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \\@ARGV,. \n+00001650: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001660: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help\n+00001670: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00001680: 2020 293b 0a0a 2320 4175 7377 6572 7475 );..# Auswertu\n+00001690: 6e67 2064 6572 2050 6172 616d 6574 6572 ng der Parameter\n+000016a0: 0a6d 7920 2472 6573 746f 7265 5472 6565 .my $restoreTree\n+000016b0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000016c0: 744f 7074 5769 7468 5061 7228 2772 6573 tOptWithPar('res\n+000016d0: 746f 7265 5472 6565 2729 3b0a 6d79 2024 toreTree');.my $\n+000016e0: 6261 636b 7570 526f 6f74 203d 2024 4368 backupRoot = $Ch\n+000016f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00001700: 7468 5061 7228 2762 6163 6b75 7052 6f6f thPar('backupRoo\n+00001710: 7427 293b 0a6d 7920 2474 6172 6765 7444 t');.my $targetD\n+00001720: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar->\n+00001730: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t\n+00001740: 6172 6765 7444 6972 2729 3b0a 6d79 2024 argetDir');.my $\n+00001750: 666c 6174 203d 2024 4368 6563 6b50 6172 flat = $CheckPar\n+00001760: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00001770: 6172 2827 666c 6174 2729 3b0a 6d79 2024 ar('flat');.my $\n+00001780: 6f76 6572 7772 6974 6520 3d20 2443 6865 overwrite = $Che\n+00001790: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+000017a0: 686f 7574 5061 7228 276f 7665 7277 7269 houtPar('overwri\n+000017b0: 7465 2729 3b0a 2474 6d70 6469 7220 3d20 te');.$tmpdir = \n+000017c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000017d0: 7457 6974 6850 6172 2827 746d 7044 6972 tWithPar('tmpDir\n+000017e0: 2729 3b0a 6d79 2024 6e6f 4861 7264 4c69 ');.my $noHardLi\n+000017f0: 6e6b 7320 3d20 2443 6865 636b 5061 722d nks = $CheckPar-\n+00001800: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+00001810: 7228 276e 6f48 6172 644c 696e 6b73 2729 r('noHardLinks')\n+00001820: 3b0a 6d79 2024 6e6f 5265 7374 6f72 6550 ;.my $noRestoreP\n+00001830: 6172 616c 6c65 6c20 3d20 2443 6865 636b arallel = $Check\n+00001840: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00001850: 6172 2827 6e6f 5265 7374 6f72 6550 6172 ar('noRestorePar\n+00001860: 616c 6c65 6c27 293b 0a6d 7920 2476 6572 allel');.my $ver\n+00001870: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar\n+00001880: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00001890: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m\n+000018a0: 7920 246e 6f52 6573 746f 7265 6420 3d20 y $noRestored = \n+000018b0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+000018c0: 7457 6974 686f 7574 5061 7228 276e 6f52 tWithoutPar('noR\n+000018d0: 6573 746f 7265 6427 293b 0a6d 7920 246e estored');.my $n\n+000018e0: 6f47 6e75 4370 203d 2024 4368 6563 6b50 oGnuCp = $CheckP\n+000018f0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+00001900: 7450 6172 2827 6e6f 476e 7543 7027 293b tPar('noGnuCp');\n+00001910: 0a0a 0a6d 7920 2470 724c 6f67 203d 2070 ...my $prLog = p\n+00001920: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k\n+00001930: 696e 6427 203d 3e20 5b27 493a 494e 464f ind' => ['I:INFO\n+00001940: 272c 2027 573a 5741 524e 494e 4727 2c20 ', 'W:WARNING', \n+00001950: 2745 3a45 5252 4f52 272c 0a09 0909 0920 'E:ERROR',..... \n+00001960: 2020 2020 2027 533a 5354 4154 4953 5449 'S:STATISTI\n+00001970: 4327 2c20 2744 3a44 4542 5547 272c 2027 C', 'D:DEBUG', '\n+00001980: 563a 5645 5253 494f 4e27 5d29 3b0a 0a24 V:VERSION']);..$\n+00001990: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+000019a0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n+000019b0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+000019c0: 7461 7267 6574 2064 6972 6563 746f 7279 target directory\n+000019d0: 203c 2474 6172 6765 7444 6972 3e20 646f <$targetDir> do\n+000019e0: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist\"],.\n+000019f0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n+00001a00: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless \n+00001a10: 282d 6420 2474 6172 6765 7444 6972 293b (-d $targetDir);\n+00001a20: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00001a30: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',.\n+00001a40: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00001a50: 205b 2224 5645 5253 494f 4e70 4e61 6d65 [\"$VERSIONpName\n+00001a60: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA\n+00001a70: 434b 5550 5645 5253 494f 4e2c 2022 202e CKUPVERSION, \" .\n+00001a80: 0a09 0909 2022 6275 696c 6420 2456 4552 .... \"build $VER\n+00001a90: 5349 4f4e 7376 6e49 4422 5d29 0a20 2020 SIONsvnID\"]). \n+00001aa0: 2069 6620 2476 6572 626f 7365 3b0a 0a6d if $verbose;..m\n+00001ab0: 7920 2472 7420 3d20 2472 6573 746f 7265 y $rt = $restore\n+00001ac0: 5472 6565 3b0a 6d79 2024 7265 7374 6f72 Tree;.my $restor\n+00001ad0: 6554 7265 6520 3d20 2661 6273 6f6c 7574 eTree = &absolut\n+00001ae0: 6550 6174 6828 2472 6573 746f 7265 5472 ePath($restoreTr\n+00001af0: 6565 293b 0a24 7265 7374 6f72 6554 7265 ee);.$restoreTre\n+00001b00: 6520 3d20 2431 2069 6620 2472 6573 746f e = $1 if $resto\n+00001b10: 7265 5472 6565 203d 7e20 2f28 2e2a 295c reTree =~ /(.*)\\\n+00001b20: 2f24 2f3b 2020 2320 7265 6d6f 7665 2074 /$/; # remove t\n+00001b30: 7261 696c 696e 6720 272f 270a 0a23 0a23 railing '/'..#.#\n+00001b40: 206d 6435 4368 6563 6b53 756d 202d 2044 md5CheckSum - D\n+00001b50: 6174 6569 2066 696e 6465 6e0a 2470 724c atei finden.$prL\n+00001b60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00001b70: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. \n+00001b80: 2027 2d73 7472 2720 3d3e 205b 2264 6972 '-str' => [\"dir\n+00001b90: 6563 746f 7279 206f 7220 6669 6c65 203c ectory or file <\n+00001ba0: 2472 743e 2064 6f65 7320 6e6f 7420 6578 $rt> does not ex\n+00001bb0: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist\"],.. '-\n+00001bc0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n+00001bd0: 756e 6c65 7373 2028 2d65 2024 7274 293b unless (-e $rt);\n+00001be0: 0a6d 7920 2469 7346 696c 6520 3d20 3120 .my $isFile = 1 \n+00001bf0: 6966 2028 2d66 2024 7274 293b 0a0a 6966 if (-f $rt);..if\n+00001c00: 2028 2462 6163 6b75 7052 6f6f 7429 0a7b ($backupRoot).{\n+00001c10: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00001c20: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00001c30: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00001c40: 205b 2264 6972 6563 746f 7279 203c 2462 [\"directory <$b\n+00001c50: 6163 6b75 7052 6f6f 743e 2064 6f65 7320 ackupRoot> does \n+00001c60: 6e6f 7420 6578 6974 225d 2c0a 0909 2020 not exit\"],... \n+00001c70: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u\n+00001c80: 6e6c 6573 7320 282d 6420 2462 6163 6b75 nless (-d $backu\n+00001c90: 7052 6f6f 7429 3b0a 2020 2020 2462 6163 pRoot);. $bac\n+00001ca0: 6b75 7052 6f6f 7420 3d20 2661 6273 6f6c kupRoot = &absol\n+00001cb0: 7574 6550 6174 6828 2462 6163 6b75 7052 utePath($backupR\n+00001cc0: 6f6f 7429 3b0a 7d0a 656c 7365 0a7b 0a20 oot);.}.else.{. \n+00001cd0: 2020 206d 7920 2464 6972 203d 2024 7265 my $dir = $re\n+00001ce0: 7374 6f72 6554 7265 653b 0a20 2020 2024 storeTree;. $\n+00001cf0: 6469 7220 3d7e 2073 2f28 5c2f 5c2e 292a dir =~ s/(\\/\\.)*\n+00001d00: 242f 2f3b 2020 2020 2020 2320 7265 6d6f $//; # remo\n+00001d10: 7665 2074 7261 696c 696e 6720 2f2e 0a0a ve trailing /...\n+00001d20: 2020 2020 2462 6163 6b75 7052 6f6f 7420 $backupRoot \n+00001d30: 3d20 756e 6465 663b 0a20 2020 2064 6f0a = undef;. do.\n+00001d40: 2020 2020 7b0a 0924 6469 7220 3d7e 2073 {..$dir =~ s\n+00001d50: 2f5c 2f5c 2e5c 2f2f 5c2f 2f67 3b20 2020 /\\/\\.\\//\\//g; \n+00001d60: 2320 7375 6273 7469 7475 7465 202f 2e2f # substitute /./\n+00001d70: 202d 3e20 2f0a 0a09 2320 6665 7374 7374 -> /...# festst\n+00001d80: 656c 6c65 6e2c 206f 6220 6569 6e65 202e ellen, ob eine .\n+00001d90: 6d64 3573 756d 2044 6174 6569 2076 6f72 md5sum Datei vor\n+00001da0: 6861 6e64 656e 2069 7374 0a09 6966 2028 handen ist..if (\n+00001db0: 2d66 2022 2464 6972 2f24 6368 6563 6b53 -f \"$dir/$checkS\n+00001dc0: 756d 4669 6c65 2220 6f72 202d 6620 2224 umFile\" or -f \"$\n+00001dd0: 6469 722f 2463 6865 636b 5375 6d46 696c dir/$checkSumFil\n+00001de0: 652e 627a 3222 290a 097b 0a09 2020 2020 e.bz2\")..{.. \n+00001df0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00001e00: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00001e10: 0920 2027 2d73 7472 2720 3d3e 205b 2266 . '-str' => [\"f\n+00001e20: 6f75 6e64 2069 6e66 6f20 6669 6c65 203c ound info file <\n+00001e30: 2463 6865 636b 5375 6d46 696c 653e 2069 $checkSumFile> i\n+00001e40: 6e20 2220 2e0a 0909 0909 2020 2020 2022 n \" ...... \"\n+00001e50: 6469 7265 6374 6f72 7920 3c24 6469 723e directory <$dir>\n+00001e60: 225d 290a 0909 6966 2028 2476 6572 626f \"])...if ($verbo\n+00001e70: 7365 293b 0a09 2020 2020 2470 724c 6f67 se);.. $prLog\n+00001e80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00001e90: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n+00001ea0: 7472 2720 3d3e 0a09 0909 2020 5b22 666f tr' =>.... [\"fo\n+00001eb0: 756e 6420 696e 666f 2066 696c 6520 3c24 und info file <$\n+00001ec0: 6368 6563 6b53 756d 4669 6c65 3e20 6120 checkSumFile> a \n+00001ed0: 7365 636f 6e64 2074 696d 6520 696e 2022 second time in \"\n+00001ee0: 202e 0a09 0909 2020 2022 3c24 6469 723e ..... \"<$dir>\n+00001ef0: 2c20 6669 7273 7420 7469 6d65 2066 6f75 , first time fou\n+00001f00: 6e64 2069 6e20 3c24 6261 636b 7570 526f nd in <$backupRo\n+00001f10: 6f74 3e22 5d2c 0a09 0909 2020 272d 6578 ot>\"],.... '-ex\n+00001f20: 6974 2720 3d3e 2031 290a 0909 6966 2028 it' => 1)...if (\n+00001f30: 2462 6163 6b75 7052 6f6f 7429 3b0a 0a09 $backupRoot);...\n+00001f40: 2020 2020 2462 6163 6b75 7052 6f6f 7420 $backupRoot \n+00001f50: 3d20 2464 6972 3b0a 097d 0a0a 0928 2464 = $dir;..}...($d\n+00001f60: 6972 2c20 245f 2920 3d20 2673 706c 6974 ir, $_) = &split\n+00001f70: 4669 6c65 4469 7228 2464 6972 293b 0a20 FileDir($dir);. \n+00001f80: 2020 207d 2077 6869 6c65 2028 2464 6972 } while ($dir\n+00001f90: 206e 6520 272f 2729 3b0a 0a0a 2020 2020 ne '/');... \n+00001fa0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00001fb0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00001fc0: 2020 272d 7374 7227 203d 3e20 5b22 6469 '-str' => [\"di\n+00001fd0: 6420 6e6f 7420 6669 6e64 2069 6e66 6f20 d not find info \n+00001fe0: 6669 6c65 203c 2463 6865 636b 5375 6d46 file <$checkSumF\n+00001ff0: 696c 653e 225d 2c0a 0909 2020 272d 6578 ile>\"],... '-ex\n+00002000: 6974 2720 3d3e 2031 290a 0975 6e6c 6573 it' => 1)..unles\n+00002010: 7320 2824 6261 636b 7570 526f 6f74 293b s ($backupRoot);\n+00002020: 0a7d 0a0a 2324 7265 7374 6f72 6554 7265 .}..#$restoreTre\n+00002030: 6520 3d7e 2073 2f24 6261 636b 7570 526f e =~ s/$backupRo\n+00002040: 6f74 5c2f 2a2f 2f3b 0a24 7265 7374 6f72 ot\\/*//;.$restor\n+00002050: 6554 7265 6520 3d20 7375 6273 7472 2824 eTree = substr($\n+00002060: 7265 7374 6f72 6554 7265 652c 206c 656e restoreTree, len\n+00002070: 6774 6828 2462 6163 6b75 7052 6f6f 7429 gth($backupRoot)\n+00002080: 202b 2031 293b 0a0a 0a23 205e 5e5e 0a23 + 1);...# ^^^.#\n+00002090: 2024 6261 636b 7570 526f 6f74 2062 6569 $backupRoot bei\n+000020a0: 6e68 616c 7465 7420 6a65 747a 7420 6465 nhaltet jetzt de\n+000020b0: 6e20 5066 6164 207a 756d 2041 7263 6869 n Pfad zum Archi\n+000020c0: 760a 2320 2472 6573 746f 7265 5472 6565 v.# $restoreTree\n+000020d0: 2062 6569 6e68 616c 7465 7420 6a65 747a beinhaltet jetz\n+000020e0: 7420 6465 6e20 7265 6c61 7469 7665 6e20 t den relativen \n+000020f0: 5066 6164 2069 6e6e 6572 6861 6c62 2064 Pfad innerhalb d\n+00002100: 6573 2041 7263 6869 7673 0a0a 2470 724c es Archivs..$prL\n+00002110: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00002120: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. \n+00002130: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n+00002140: 6e6f 7420 7265 7374 6f72 6520 3c24 6261 not restore <$ba\n+00002150: 636b 7570 526f 6f74 3e20 6265 6361 7573 ckupRoot> becaus\n+00002160: 6520 6f66 2075 6e72 6573 6f6c 7665 6420 e of unresolved \n+00002170: 6c69 6e6b 7322 2c0a 0920 2020 2020 2022 links\",.. \"\n+00002180: 7275 6e20 7374 6f72 6542 6163 6b75 7055 run storeBackupU\n+00002190: 7064 6174 6542 6163 6b75 702e 706c 2074 pdateBackup.pl t\n+000021a0: 6f20 7265 736f 6c76 6522 5d2c 0a09 2020 o resolve\"],.. \n+000021b0: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n+000021c0: 290a 2020 2020 6966 202d 6520 2224 6261 ). if -e \"$ba\n+000021d0: 636b 7570 526f 6f74 2f2e 7374 6f72 6542 ckupRoot/.storeB\n+000021e0: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF\n+000021f0: 696c 652e 627a 3222 3b0a 0a6d 7920 2825 ile.bz2\";..my (%\n+00002200: 7365 7450 6572 6d44 6972 7329 3b0a 756e setPermDirs);.un\n+00002210: 6c65 7373 2028 2466 6c61 7429 0a7b 0a20 less ($flat).{. \n+00002220: 2020 2023 2053 7562 7472 6565 2075 6e74 # Subtree unt\n+00002230: 6572 2064 656d 205a 6965 6c64 6972 6563 er dem Zieldirec\n+00002240: 746f 7279 2065 727a 6575 6765 6e0a 2020 tory erzeugen. \n+00002250: 2020 263a 3a6d 616b 6546 696c 6550 6174 &::makeFilePat\n+00002260: 6828 2224 7461 7267 6574 4469 722f 2472 h(\"$targetDir/$r\n+00002270: 6573 746f 7265 5472 6565 222c 2024 7072 estoreTree\", $pr\n+00002280: 4c6f 6729 3b0a 0a20 2020 206d 7920 2840 Log);.. my (@\n+00002290: 6429 203d 2073 706c 6974 282f 5c2f 2b2f d) = split(/\\/+/\n+000022a0: 2c20 2472 6573 746f 7265 5472 6565 293b , $restoreTree);\n+000022b0: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. \n+000022c0: 666f 7220 2824 6920 3d20 3020 3b20 2469 for ($i = 0 ; $i\n+000022d0: 203c 2040 6420 3b20 2469 2b2b 290a 2020 < @d ; $i++). \n+000022e0: 2020 7b0a 0924 7365 7450 6572 6d44 6972 {..$setPermDir\n+000022f0: 737b 6a6f 696e 2827 2f27 2c20 4064 5b30 s{join('/', @d[0\n+00002300: 2e2e 2469 5d29 7d20 3d20 313b 0a20 2020 ..$i])} = 1;. \n+00002310: 207d 0a7d 0a0a 230a 2320 4a65 7a74 2049 }.}..#.# Jezt I\n+00002320: 6e66 6f66 696c 6520 6569 6e6c 6573 656e nfofile einlesen\n+00002330: 2075 6e64 2064 6965 2067 6577 fc6e 7363 und die gew.nsc\n+00002340: 6874 656e 2044 6174 6569 656e 2061 7573 hten Dateien aus\n+00002350: 736f 7274 6965 7265 6e0a 230a 0a6d 7920 sortieren.#..my \n+00002360: 2472 6373 6620 3d20 7265 6164 4368 6563 $rcsf = readChec\n+00002370: 6b53 756d 4669 6c65 2d3e 6e65 7728 272d kSumFile->new('-\n+00002380: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' =>\n+00002390: 0a09 0909 0920 2224 6261 636b 7570 526f ..... \"$backupRo\n+000023a0: 6f74 2f24 6368 6563 6b53 756d 4669 6c65 ot/$checkSumFile\n+000023b0: 222c 0a09 0909 0920 272d 7072 4c6f 6727 \",..... '-prLog'\n+000023c0: 203d 3e20 2470 724c 6f67 293b 0a0a 6d79 => $prLog);..my\n+000023d0: 2024 666f 726b 203d 2070 6172 616c 6c65 $fork = paralle\n+000023e0: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max\n+000023f0: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no\n+00002400: 5265 7374 6f72 6550 6172 616c 6c65 6c2c RestoreParallel,\n+00002410: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog\n+00002420: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a23 ' => $prLog);..#\n+00002430: 6d79 2024 6d65 7461 203d 2024 7263 7366 my $meta = $rcsf\n+00002440: 2d3e 6765 744d 6574 6156 616c 4669 656c ->getMetaValFiel\n+00002450: 6428 293b 0a0a 236d 7920 2824 756e 636f d();..#my ($unco\n+00002460: 6d70 722c 2040 756e 636f 6d70 7250 6172 mpr, @uncomprPar\n+00002470: 2920 3d20 407b 2424 6d65 7461 7b27 756e ) = @{$$meta{'un\n+00002480: 636f 6d70 7265 7373 277d 7d3b 0a6d 7920 compress'}};.my \n+00002490: 2824 756e 636f 6d70 722c 2040 756e 636f ($uncompr, @unco\n+000024a0: 6d70 7250 6172 2920 3d20 407b 2472 6373 mprPar) = @{$rcs\n+000024b0: 662d 3e67 6574 496e 666f 5769 7468 5061 f->getInfoWithPa\n+000024c0: 7228 2775 6e63 6f6d 7072 6573 7327 297d r('uncompress')}\n+000024d0: 3b0a 236d 7920 2824 6370 2c20 4063 7050 ;.#my ($cp, @cpP\n+000024e0: 6172 2920 3d20 2827 6370 272c 2027 2d64 ar) = ('cp', '-d\n+000024f0: 5052 2729 3b0a 6d79 2028 2463 702c 2040 PR');.my ($cp, @\n+00002500: 6370 5061 7229 203d 2028 2763 7027 2c20 cpPar) = ('cp', \n+00002510: 272d 6450 5227 293b 0a23 6d79 2024 706f '-dPR');.#my $po\n+00002520: 7374 6669 7820 3d20 2824 246d 6574 617b stfix = ($$meta{\n+00002530: 2770 6f73 7466 6978 277d 292d 3e5b 305d 'postfix'})->[0]\n+00002540: 3b0a 6d79 2024 706f 7374 6669 7820 3d20 ;.my $postfix = \n+00002550: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi\n+00002560: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix')\n+00002570: 3b0a 236d 7920 2467 6e75 6370 203d 2028 ;.#my $gnucp = (\n+00002580: 2424 6d65 7461 7b27 6370 4973 476e 7527 $$meta{'cpIsGnu'\n+00002590: 7d29 2d3e 5b30 5d3b 0a6d 7920 2467 6e75 })->[0];.my $gnu\n+000025a0: 6370 203d 2024 7263 7366 2d3e 6765 7449 cp = $rcsf->getI\n+000025b0: 6e66 6f57 6974 6850 6172 2827 6370 4973 nfoWithPar('cpIs\n+000025c0: 476e 7527 293b 0a24 676e 7563 7020 3d20 Gnu');.$gnucp = \n+000025d0: 2824 676e 7563 7020 6571 2027 7965 7327 ($gnucp eq 'yes'\n+000025e0: 2920 3f20 3120 3a20 303b 0a24 676e 7563 ) ? 1 : 0;.$gnuc\n+000025f0: 7020 3d20 3020 6966 2024 6e6f 476e 7543 p = 0 if $noGnuC\n+00002600: 703b 0a0a 246d 6169 6e3a 3a49 4f43 6f6d p;..$main::IOCom\n+00002610: 7072 6573 7344 6972 6563 7420 3d20 303b pressDirect = 0;\n+00002620: 0a69 6620 2824 756e 636f 6d70 7220 6571 .if ($uncompr eq\n+00002630: 2027 627a 6970 3227 206f 7220 2475 6e63 'bzip2' or $unc\n+00002640: 6f6d 7072 2065 7120 2762 756e 7a69 7032 ompr eq 'bunzip2\n+00002650: 2729 0a7b 0a20 2020 2065 7661 6c20 2275 ').{. eval \"u\n+00002660: 7365 2049 4f3a 3a55 6e63 6f6d 7072 6573 se IO::Uncompres\n+00002670: 733a 3a42 756e 7a69 7032 2071 7728 6275 s::Bunzip2 qw(bu\n+00002680: 6e7a 6970 3229 223b 0a20 2020 2069 6620 nzip2)\";. if \n+00002690: 2824 4029 0a20 2020 207b 0a09 2470 724c ($@). {..$prL\n+000026a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000026b0: 2720 3d3e 2027 4927 2c0a 0909 2020 2020 ' => 'I',... \n+000026c0: 2020 272d 7374 7227 203d 3e20 5b22 706c '-str' => [\"pl\n+000026d0: 6561 7365 2069 6e73 7461 6c6c 2049 4f3a ease install IO:\n+000026e0: 3a55 6e63 6f6d 7072 6573 733a 3a42 756e :Uncompress::Bun\n+000026f0: 7a69 7032 2066 726f 6d20 2220 2e0a 0909 zip2 from \" ....\n+00002700: 0909 2022 4350 414e 2066 6f72 2062 6574 .. \"CPAN for bet\n+00002710: 7465 7220 7065 7266 6f72 6d61 6e63 6522 ter performance\"\n+00002720: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el\n+00002730: 7365 0a20 2020 207b 0a09 246d 6169 6e3a se. {..$main:\n+00002740: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec\n+00002750: 7420 3d20 313b 0a20 2020 207d 0a7d 0a0a t = 1;. }.}..\n+00002760: 2320 6462 6d2d 4669 6c65 20f6 6666 6e65 # dbm-File .ffne\n+00002770: 6e0a 6d79 2025 4442 4d48 6172 644c 696e n.my %DBMHardLin\n+00002780: 6b3b 2020 2020 2020 2020 2320 6b65 793a k; # key:\n+00002790: 2064 6576 2d69 6e6f 6465 2028 6f64 6572 dev-inode (oder\n+000027a0: 2075 6e64 6566 292c 2076 616c 7565 3a20 undef), value: \n+000027b0: 6669 6c65 6e61 6d65 0a6d 7920 2568 6173 filename.my %has\n+000027c0: 546f 4265 4c69 6e6b 6564 203d 2028 293b ToBeLinked = ();\n+000027d0: 2023 2068 6965 7220 7765 7264 656e 2064 # hier werden d\n+000027e0: 6965 207a 7520 6c69 6e6b 656e 6465 6e20 ie zu linkenden \n+000027f0: 4461 7465 6965 6e20 6765 7361 6d6d 656c Dateien gesammel\n+00002800: 742c 0a20 2020 2020 2020 2020 2020 2020 t,. \n+00002810: 2020 2020 2020 2020 2020 2023 2062 6973 # bis\n+00002820: 2064 6965 2052 6566 6572 656e 7a64 6174 die Referenzdat\n+00002830: 6569 2076 6f6c 6c73 74e4 6e64 6967 207a ei vollst.ndig z\n+00002840: 7572 fc63 6b67 6573 6963 6865 7274 2069 ur.ckgesichert i\n+00002850: 7374 0a75 6e6c 6573 7320 2824 6e6f 4861 st.unless ($noHa\n+00002860: 7264 4c69 6e6b 7329 0a7b 0a20 2020 2064 rdLinks).{. d\n+00002870: 626d 6f70 656e 2825 4442 4d48 6172 644c bmopen(%DBMHardL\n+00002880: 696e 6b2c 2022 2474 6d70 6469 722f 7374 ink, \"$tmpdir/st\n+00002890: 6272 6563 6f76 6572 2e24 2422 2c20 3036 brecover.$$\", 06\n+000028a0: 3030 293b 0a7d 0a0a 6d79 2024 6e6f 4669 00);.}..my $noFi\n+000028b0: 6c65 7343 6f70 7920 3d20 303b 0a6d 7920 lesCopy = 0;.my \n+000028c0: 246e 6f46 696c 6573 436f 6d70 7220 3d20 $noFilesCompr = \n+000028d0: 303b 0a6d 7920 246e 6f46 696c 6573 426c 0;.my $noFilesBl\n+000028e0: 6f63 6b65 6420 3d20 303b 0a6d 7920 246e ocked = 0;.my $n\n+000028f0: 6f53 796d 4c69 6e6b 7320 3d20 303b 0a6d oSymLinks = 0;.m\n+00002900: 7920 246e 6f4e 616d 6564 5069 7065 7320 y $noNamedPipes \n+00002910: 3d20 303b 0a6d 7920 246e 6f53 6f63 6b65 = 0;.my $noSocke\n+00002920: 7473 203d 2030 3b0a 6d79 2024 6e6f 426c ts = 0;.my $noBl\n+00002930: 6f63 6b44 6576 7320 3d20 303b 0a6d 7920 ockDevs = 0;.my \n+00002940: 246e 6f43 6861 7244 6576 7320 3d20 303b $noCharDevs = 0;\n+00002950: 0a6d 7920 246e 6f44 6972 7320 3d20 303b .my $noDirs = 0;\n+00002960: 0a6d 7920 2468 6172 644c 696e 6b73 203d .my $hardLinks =\n+00002970: 2030 3b0a 0a24 7265 7374 6f72 6554 7265 0;..$restoreTre\n+00002980: 6520 3d20 2727 2069 6620 2472 6573 746f e = '' if $resto\n+00002990: 7265 5472 6565 2065 7120 272e 273b 0a6d reTree eq '.';.m\n+000029a0: 7920 246c 7265 7374 6f72 6554 7265 6520 y $lrestoreTree \n+000029b0: 3d20 6c65 6e67 7468 2824 7265 7374 6f72 = length($restor\n+000029c0: 6554 7265 6529 3b0a 0a6d 7920 2474 6d70 eTree);..my $tmp\n+000029d0: 4469 7246 696c 6520 3d20 263a 3a75 6e69 DirFile = &::uni\n+000029e0: 7146 696c 654e 616d 6528 2224 746d 7064 qFileName(\"$tmpd\n+000029f0: 6972 2f73 7462 7552 6563 2e22 293b 0a26 ir/stbuRec.\");.&\n+00002a00: 3a3a 6368 6563 6b44 656c 5379 6d4c 696e ::checkDelSymLin\n+00002a10: 6b28 2474 6d70 4469 7246 696c 652c 2024 k($tmpDirFile, $\n+00002a20: 7072 4c6f 672c 2030 7830 3129 3b0a 6c6f prLog, 0x01);.lo\n+00002a30: 6361 6c20 2a44 4952 4649 4c45 3b0a 6f70 cal *DIRFILE;.op\n+00002a40: 656e 2844 4952 4649 4c45 2c20 223e 2024 en(DIRFILE, \"> $\n+00002a50: 746d 7044 6972 4669 6c65 2229 206f 720a tmpDirFile\") or.\n+00002a60: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00002a70: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00002a80: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => \n+00002a90: 5b22 6361 6e6e 6f74 206f 7065 6e20 3c24 [\"cannot open <$\n+00002aa0: 746d 7044 6972 4669 6c65 3e2c 2065 7869 tmpDirFile>, exi\n+00002ab0: 7469 6e67 225d 2c0a 0909 2020 272d 6164 ting\"],... '-ad\n+00002ac0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__,\n+00002ad0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 2020 __LINE__],... \n+00002ae0: 272d 6578 6974 2720 3d3e 2031 293b 0a63 '-exit' => 1);.c\n+00002af0: 686d 6f64 2030 3630 302c 2024 746d 7044 hmod 0600, $tmpD\n+00002b00: 6972 4669 6c65 3b0a 0a6d 7920 2824 6d64 irFile;..my ($md\n+00002b10: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d\n+00002b20: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB\n+00002b30: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $\n+00002b40: 6d74 696d 652c 2024 6174 696d 652c 0a20 mtime, $atime,. \n+00002b50: 2020 2024 7369 7a65 2c20 2475 6964 2c20 $size, $uid, \n+00002b60: 2467 6964 2c20 246d 6f64 652c 2024 6669 $gid, $mode, $fi\n+00002b70: 6c65 6e61 6d65 293b 0a23 7072 696e 7420 lename);.#print \n+00002b80: 2272 6573 746f 7265 5472 6565 203d 203c \"restoreTree = <\n+00002b90: 2472 6573 746f 7265 5472 6565 3e5c 6e22 $restoreTree>\\n\"\n+00002ba0: 3b0a 2370 7269 6e74 2022 6c72 6573 746f ;.#print \"lresto\n+00002bb0: 7265 5472 6565 203d 203c 246c 7265 7374 reTree = <$lrest\n+00002bc0: 6f72 6554 7265 653e 5c6e 223b 0a23 7072 oreTree>\\n\";.#pr\n+00002bd0: 696e 7420 2269 7346 696c 6520 3d20 3c24 int \"isFile = <$\n+00002be0: 6973 4669 6c65 3e5c 6e22 3b0a 7768 696c isFile>\\n\";.whil\n+00002bf0: 6520 2828 2824 6d64 3573 756d 2c20 2463 e ((($md5sum, $c\n+00002c00: 6f6d 7072 2c20 2464 6576 496e 6f64 652c ompr, $devInode,\n+00002c10: 2024 696e 6f64 6542 6163 6b75 702c 2024 $inodeBackup, $\n+00002c20: 6374 696d 652c 2024 6d74 696d 652c 2024 ctime, $mtime, $\n+00002c30: 6174 696d 652c 0a09 2024 7369 7a65 2c20 atime,.. $size, \n+00002c40: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod\n+00002c50: 652c 2024 6669 6c65 6e61 6d65 2920 3d20 e, $filename) = \n+00002c60: 2472 6373 662d 3e6e 6578 744c 696e 6528 $rcsf->nextLine(\n+00002c70: 2929 203e 2030 290a 7b0a 2020 2020 6d79 )) > 0).{. my\n+00002c80: 2024 6620 3d20 2466 696c 656e 616d 653b $f = $filename;\n+00002c90: 0a20 2020 2069 6620 2865 7869 7374 7328 . if (exists(\n+00002ca0: 2473 6574 5065 726d 4469 7273 7b24 667d $setPermDirs{$f}\n+00002cb0: 2929 0a20 2020 207b 0a09 6368 6f77 6e20 )). {..chown \n+00002cc0: 2475 6964 2c20 2467 6964 2c20 2224 7461 $uid, $gid, \"$ta\n+00002cd0: 7267 6574 4469 722f 2466 223b 0a09 6368 rgetDir/$f\";..ch\n+00002ce0: 6d6f 6420 246d 6f64 652c 2022 2474 6172 mod $mode, \"$tar\n+00002cf0: 6765 7444 6972 2f24 6622 3b0a 0975 7469 getDir/$f\";..uti\n+00002d00: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim\n+00002d10: 652c 2022 2474 6172 6765 7444 6972 2f24 e, \"$targetDir/$\n+00002d20: 6622 3b0a 2020 2020 7d0a 2020 2020 6966 f\";. }. if\n+00002d30: 2028 2469 7346 696c 6520 616e 6420 6c65 ($isFile and le\n+00002d40: 6e67 7468 2824 6d64 3573 756d 2920 3d3d ngth($md5sum) ==\n+00002d50: 2033 3229 0a20 2020 207b 0a09 2466 202e 32). {..$f .\n+00002d60: 3d20 2470 6f73 7466 6978 2069 6620 2824 = $postfix if ($\n+00002d70: 636f 6d70 7220 6571 2027 6327 293b 0a20 compr eq 'c');. \n+00002d80: 2020 207d 0a23 7072 696e 7420 2266 726f }.#print \"fro\n+00002d90: 6d20 2e6d 6435 4368 6563 6b53 756d 733a m .md5CheckSums:\n+00002da0: 203c 2466 3e20 3c24 7265 7374 6f72 6554 <$f> <$restoreT\n+00002db0: 7265 653e 2024 6c72 6573 746f 7265 5472 ree> $lrestoreTr\n+00002dc0: 6565 5c6e 223b 0a20 2020 2069 6620 2824 ee\\n\";. if ($\n+00002dd0: 7265 7374 6f72 6554 7265 6520 6571 2027 restoreTree eq '\n+00002de0: 270a 096f 7220 2224 7265 7374 6f72 6554 '..or \"$restoreT\n+00002df0: 7265 652f 2220 6571 2073 7562 7374 7228 ree/\" eq substr(\n+00002e00: 2224 662f 222c 2030 2c20 246c 7265 7374 \"$f/\", 0, $lrest\n+00002e10: 6f72 6554 7265 6520 2b20 3129 0a09 6f72 oreTree + 1)..or\n+00002e20: 2028 2469 7346 696c 6520 616e 6420 2472 ($isFile and $r\n+00002e30: 6573 746f 7265 5472 6565 2065 7120 2466 estoreTree eq $f\n+00002e40: 2929 0a20 2020 207b 0a23 7072 696e 7420 )). {.#print \n+00002e50: 222d 2d2d 3e20 7265 7374 6f72 6521 5c6e \"---> restore!\\n\n+00002e60: 223b 0a09 6d79 2024 7461 7267 6574 4669 \";..my $targetFi\n+00002e70: 6c65 3b0a 0969 6620 2824 666c 6174 290a le;..if ($flat).\n+00002e80: 097b 0a09 2020 2020 2824 5f2c 2024 7461 .{.. ($_, $ta\n+00002e90: 7267 6574 4669 6c65 2920 3d20 2673 706c rgetFile) = &spl\n+00002ea0: 6974 4669 6c65 4469 7228 2466 696c 656e itFileDir($filen\n+00002eb0: 616d 6529 3b0a 0920 2020 2024 7461 7267 ame);.. $targ\n+00002ec0: 6574 4669 6c65 203d 2022 2474 6172 6765 etFile = \"$targe\n+00002ed0: 7444 6972 2f24 7461 7267 6574 4669 6c65 tDir/$targetFile\n+00002ee0: 223b 0a09 7d0a 0965 6c73 650a 097b 0a09 \";..}..else..{..\n+00002ef0: 2020 2020 2474 6172 6765 7446 696c 6520 $targetFile \n+00002f00: 3d20 2224 7461 7267 6574 4469 722f 2466 = \"$targetDir/$f\n+00002f10: 696c 656e 616d 6522 3b0a 097d 0a0a 096d ilename\";..}...m\n+00002f20: 7920 2475 7365 476e 7543 7020 3d20 2467 y $useGnuCp = $g\n+00002f30: 6e75 6370 2061 6e64 2028 246d 6435 7375 nucp and ($md5su\n+00002f40: 6d20 6571 2027 736f 636b 6574 2720 6f72 m eq 'socket' or\n+00002f50: 0a09 0909 0920 2020 246d 6435 7375 6d20 ..... $md5sum \n+00002f60: 6571 2027 626c 6f63 6b64 6576 2720 6f72 eq 'blockdev' or\n+00002f70: 0a09 0909 0920 2020 246d 6435 7375 6d20 ..... $md5sum \n+00002f80: 6571 2027 6368 6172 6465 7627 293b 0a0a eq 'chardev');..\n+00002f90: 0969 6620 2824 6d64 3573 756d 2065 7120 .if ($md5sum eq \n+00002fa0: 2764 6972 2729 0a09 7b0a 0920 2020 2069 'dir')..{.. i\n+00002fb0: 6620 286e 6f74 2024 666c 6174 2061 6e64 f (not $flat and\n+00002fc0: 206e 6f74 202d 6520 2474 6172 6765 7446 not -e $targetF\n+00002fd0: 696c 6529 0a09 2020 2020 7b0a 0909 2b2b ile).. {...++\n+00002fe0: 246e 6f44 6972 733b 0a09 0924 7072 4c6f $noDirs;...$prLo\n+00002ff0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00003000: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... \n+00003010: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+00003020: 2020 2020 205b 2263 616e 6e6f 7420 6372 [\"cannot cr\n+00003030: 6561 7465 2064 6972 6563 746f 7279 203c eate directory <\n+00003040: 2474 6172 6765 7446 696c 653e 225d 2c0a $targetFile>\"],.\n+00003050: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit'\n+00003060: 203d 3e20 3129 0a09 0920 2020 2075 6e6c => 1)... unl\n+00003070: 6573 7320 6d6b 6469 7220 2474 6172 6765 ess mkdir $targe\n+00003080: 7446 696c 653b 0a09 0963 686f 776e 2024 tFile;...chown $\n+00003090: 7569 642c 2024 6769 642c 2024 7461 7267 uid, $gid, $targ\n+000030a0: 6574 4669 6c65 3b0a 2309 0963 686d 6f64 etFile;.#..chmod\n+000030b0: 2024 6d6f 6465 2c20 2474 6172 6765 7446 $mode, $targetF\n+000030c0: 696c 653b 0a23 0909 7574 696d 6520 2461 ile;.#..utime $a\n+000030d0: 7469 6d65 2c20 246d 7469 6d65 2c20 2474 time, $mtime, $t\n+000030e0: 6172 6765 7446 696c 653b 0a0a 0909 6d79 argetFile;....my\n+000030f0: 2024 7772 203d 2024 7461 7267 6574 4669 $wr = $targetFi\n+00003100: 6c65 3b0a 0909 2477 7220 3d7e 2073 2f5c le;...$wr =~ s/\\\n+00003110: 6e2f 5c30 2f6f 673b 0a09 0970 7269 6e74 n/\\0/og;...print\n+00003120: 2044 4952 4649 4c45 2022 2461 7469 6d65 DIRFILE \"$atime\n+00003130: 2024 6d74 696d 6520 246d 6f64 6520 2477 $mtime $mode $w\n+00003140: 725c 6e22 3b0a 0a09 0924 7072 4c6f 672d r\\n\";....$prLog-\n+00003150: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00003160: 3e20 2749 272c 0a09 0909 2020 2020 2020 > 'I',.... \n+00003170: 272d 7374 7227 203d 3e20 5b22 6d6b 6469 '-str' => [\"mkdi\n+00003180: 7220 2474 6172 6765 7446 696c 6522 5d29 r $targetFile\"])\n+00003190: 0a09 0920 2020 2069 6620 2824 7665 7262 ... if ($verb\n+000031a0: 6f73 6529 3b0a 0920 2020 207d 0a09 7d0a ose);.. }..}.\n+000031b0: 0965 6c73 6966 2028 246d 6435 7375 6d20 .elsif ($md5sum \n+000031c0: 6571 2027 7379 6d6c 696e 6b27 290a 097b eq 'symlink')..{\n+000031d0: 0a09 2020 2020 756e 6c65 7373 2028 246e .. unless ($n\n+000031e0: 6f48 6172 644c 696e 6b73 290a 0920 2020 oHardLinks).. \n+000031f0: 207b 0a09 0969 6620 2865 7869 7374 7328 {...if (exists(\n+00003200: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de\n+00003210: 7649 6e6f 6465 7d29 2920 2020 2320 6d75 vInode})) # mu\n+00003220: 7373 206e 7572 2067 656c 696e 6b74 2077 ss nur gelinkt w\n+00003230: 6572 6465 6e0a 0909 7b0a 0909 2020 2020 erden...{... \n+00003240: 6966 2028 6c69 6e6b 2024 4442 4d48 6172 if (link $DBMHar\n+00003250: 644c 696e 6b7b 2464 6576 496e 6f64 657d dLink{$devInode}\n+00003260: 2c20 2474 6172 6765 7446 696c 6529 0a09 , $targetFile)..\n+00003270: 0920 2020 207b 0a09 0909 2470 724c 6f67 . {....$prLog\n+00003280: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00003290: 3d3e 2027 4927 2c0a 0909 0909 2020 2020 => 'I',..... \n+000032a0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n+000032b0: 2020 2020 2020 5b22 6c69 6e6b 2022 202e [\"link \" .\n+000032c0: 2024 4442 4d48 6172 644c 696e 6b7b 2464 $DBMHardLink{$d\n+000032d0: 6576 496e 6f64 657d 202e 0a09 0909 0920 evInode} ...... \n+000032e0: 2020 2020 2020 2220 2474 6172 6765 7446 \" $targetF\n+000032f0: 696c 6522 5d29 0a09 0909 2020 2020 6966 ile\"]).... if\n+00003300: 2024 7665 7262 6f73 653b 0a23 0909 0975 $verbose;.#...u\n+00003310: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt\n+00003320: 696d 652c 2024 663b 0a09 0909 2b2b 2468 ime, $f;....++$h\n+00003330: 6172 644c 696e 6b73 3b0a 0909 2020 2020 ardLinks;... \n+00003340: 7d0a 0909 2020 2020 656c 7365 0a09 0920 }... else... \n+00003350: 2020 207b 0a09 0909 2470 724c 6f67 2d3e {....$prLog->\n+00003360: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00003370: 2027 4527 2c0a 0909 0909 2020 2020 2020 'E',..... \n+00003380: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... \n+00003390: 2020 2020 5b22 6661 696c 6564 3a20 6c69 [\"failed: li\n+000033a0: 6e6b 2022 202e 0a09 0909 0920 2020 2020 nk \" ...... \n+000033b0: 2020 2444 424d 4861 7264 4c69 6e6b 7b24 $DBMHardLink{$\n+000033c0: 6465 7649 6e6f 6465 7d20 2e0a 0909 0909 devInode} ......\n+000033d0: 2020 2020 2020 2022 2024 7461 7267 6574 \" $target\n+000033e0: 4669 6c65 225d 293b 0a09 0920 2020 207d File\"]);... }\n+000033f0: 0a09 0920 2020 2067 6f74 6f20 636f 6e74 ... goto cont\n+00003400: 4c6f 6f70 3b0a 0909 7d0a 0909 656c 7365 Loop;...}...else\n+00003410: 0a09 097b 0a09 0920 2020 2024 4442 4d48 ...{... $DBMH\n+00003420: 6172 644c 696e 6b7b 2464 6576 496e 6f64 ardLink{$devInod\n+00003430: 657d 203d 2024 7461 7267 6574 4669 6c65 e} = $targetFile\n+00003440: 3b0a 0909 7d0a 0920 2020 207d 0a09 2020 ;...}.. }.. \n+00003450: 2020 6d79 2024 6c69 6e6b 546f 203d 2072 my $linkTo = r\n+00003460: 6561 646c 696e 6b20 2224 6261 636b 7570 eadlink \"$backup\n+00003470: 526f 6f74 2f24 6669 6c65 6e61 6d65 223b Root/$filename\";\n+00003480: 0a09 2020 2020 6966 2028 6e6f 7420 246f .. if (not $o\n+00003490: 7665 7277 7269 7465 2061 6e64 202d 6520 verwrite and -e \n+000034a0: 2474 6172 6765 7446 696c 6529 0a09 2020 $targetFile).. \n+000034b0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+000034c0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000034d0: 5727 2c0a 0909 0920 2020 2020 2027 2d73 W',.... '-s\n+000034e0: 7472 2720 3d3e 205b 2274 6172 6765 7420 tr' => [\"target \n+000034f0: 2474 6172 6765 7446 696c 6520 616c 7265 $targetFile alre\n+00003500: 6164 7920 6578 6973 7473 3a22 2c0a 0909 ady exists:\",...\n+00003510: 0909 0920 225c 746c 6e20 2d73 2024 6c69 ... \"\\tln -s $li\n+00003520: 6e6b 546f 2024 7461 7267 6574 4669 6c65 nkTo $targetFile\n+00003530: 225d 293b 0a09 2020 2020 7d0a 0920 2020 \"]);.. }.. \n+00003540: 2065 6c73 650a 0920 2020 207b 0a09 092b else.. {...+\n+00003550: 2b24 6e6f 5379 6d4c 696e 6b73 3b0a 0909 +$noSymLinks;...\n+00003560: 7379 6d6c 696e 6b20 246c 696e 6b54 6f2c symlink $linkTo,\n+00003570: 2024 7461 7267 6574 4669 6c65 3b0a 0a09 $targetFile;...\n+00003580: 0923 2062 6569 2065 696e 6967 656e 2042 .# bei einigen B\n+00003590: 6574 7269 6562 7373 7973 7465 6d20 287a etriebssystem (z\n+000035a0: 2e42 2e20 4c69 6e75 7829 2077 6972 6420 .B. Linux) wird \n+000035b0: 6265 6920 4175 6672 7566 0a09 0923 2064 bei Aufruf...# d\n+000035c0: 6573 2053 7973 7465 6d63 616c 6c73 2063 es Systemcalls c\n+000035d0: 686d 6f64 2062 6569 2073 796d 6c69 6e6b hmod bei symlink\n+000035e0: 7320 6e69 6368 7420 6465 7220 5379 6d6c s nicht der Syml\n+000035f0: 696e 6b20 7365 6c62 7374 0a09 0923 2067 ink selbst...# g\n+00003600: 6561 656e 6465 7274 2c20 736f 6e64 6572 eaendert, sonder\n+00003610: 6e20 6469 6520 4461 7465 692c 2061 7566 n die Datei, auf\n+00003620: 2064 6965 2065 7220 7665 7277 6569 7374 die er verweist\n+00003630: 2e0a 0909 2320 2864 616e 6e20 6d75 7373 ....# (dann muss\n+00003640: 206c 6368 6f77 6e20 6765 6e6f 6d6d 656e lchown genommen\n+00003650: 2077 6572 6465 6e20 2d3e 2049 6e6b 6f6d werden -> Inkom\n+00003660: 7061 7469 6269 6c69 7461 6574 656e 213f patibilitaeten!?\n+00003670: 290a 0909 6d79 2024 6368 6f77 6e20 3d20 )...my $chown = \n+00003680: 666f 726b 5072 6f63 2d3e 6e65 7728 272d forkProc->new('-\n+00003690: 6578 6563 2720 3d3e 2027 6368 6f77 6e27 exec' => 'chown'\n+000036a0: 2c0a 0909 0909 0920 2027 2d70 6172 616d ,...... '-param\n+000036b0: 2720 3d3e 205b 272d 6827 2c20 2224 7569 ' => ['-h', \"$ui\n+000036c0: 643a 2467 6964 222c 0a09 0909 0909 0920 d:$gid\",....... \n+000036d0: 2020 2020 2020 2224 7461 7267 6574 4669 \"$targetFi\n+000036e0: 6c65 225d 2c0a 0909 0909 0920 2027 2d6f le\"],...... '-o\n+000036f0: 7574 5261 6e64 6f6d 2720 3d3e 2022 2474 utRandom' => \"$t\n+00003700: 6d70 6469 722f 6368 6f77 6e2d 222c 0a09 mpdir/chown-\",..\n+00003710: 0909 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' =\n+00003720: 3e20 2470 724c 6f67 293b 0a09 0924 6368 > $prLog);...$ch\n+00003730: 6f77 6e2d 3e77 6169 7428 293b 0a23 0909 own->wait();.#..\n+00003740: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m\n+00003750: 7469 6d65 2c20 2474 6172 6765 7446 696c time, $targetFil\n+00003760: 653b 0a09 0924 7072 4c6f 672d 3e70 7269 e;...$prLog->pri\n+00003770: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00003780: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+00003790: 7227 203d 3e20 5b22 6c6e 202d 7320 246c r' => [\"ln -s $l\n+000037a0: 696e 6b54 6f20 2474 6172 6765 7446 696c inkTo $targetFil\n+000037b0: 6522 5d29 0a09 0920 2020 2069 6620 2824 e\"])... if ($\n+000037c0: 7665 7262 6f73 6529 3b0a 0920 2020 207d verbose);.. }\n+000037d0: 0a09 7d0a 0965 6c73 6966 2028 246d 6435 ..}..elsif ($md5\n+000037e0: 7375 6d20 6571 2027 7069 7065 2729 0a09 sum eq 'pipe')..\n+000037f0: 7b0a 0920 2020 206d 7920 246d 6b6e 6f64 {.. my $mknod\n+00003800: 203d 2066 6f72 6b50 726f 632d 3e6e 6577 = forkProc->new\n+00003810: 2827 2d65 7865 6327 203d 3e20 276d 6b6e ('-exec' => 'mkn\n+00003820: 6f64 272c 0a09 0909 0920 2020 2020 2027 od',..... '\n+00003830: 2d70 6172 616d 2720 3d3e 205b 2224 7461 -param' => [\"$ta\n+00003840: 7267 6574 4669 6c65 222c 2027 7027 5d2c rgetFile\", 'p'],\n+00003850: 0a09 0909 0920 2020 2020 2027 2d6f 7574 ..... '-out\n+00003860: 5261 6e64 6f6d 2720 3d3e 2022 2474 6d70 Random' => \"$tmp\n+00003870: 6469 722f 6d6b 6e6f 642d 222c 0a09 0909 dir/mknod-\",....\n+00003880: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n+00003890: 3d3e 2024 7072 4c6f 6729 3b0a 0920 2020 => $prLog);.. \n+000038a0: 2024 6d6b 6e6f 642d 3e77 6169 7428 293b $mknod->wait();\n+000038b0: 0a09 2020 2020 6d79 2024 6f75 7420 3d20 .. my $out = \n+000038c0: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU\n+000038d0: 5428 293b 0a09 2020 2020 2470 724c 6f67 T();.. $prLog\n+000038e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000038f0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n+00003900: 7472 2720 3d3e 0a09 0909 2020 5b22 5354 tr' =>.... [\"ST\n+00003910: 444f 5554 206f 6620 3c6d 6b6e 6f64 2024 DOUT of :\",\n+00003930: 2040 246f 7574 5d29 0a09 0969 6620 2840 @$out])...if (@\n+00003940: 246f 7574 203e 2030 293b 0a09 2020 2020 $out > 0);.. \n+00003950: 246f 7574 203d 2024 6d6b 6e6f 642d 3e67 $out = $mknod->g\n+00003960: 6574 5354 4445 5252 2829 3b0a 0920 2020 etSTDERR();.. \n+00003970: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00003980: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00003990: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n+000039a0: 0920 205b 2253 5444 4552 5220 6f66 203c . [\"STDERR of <\n+000039b0: 6d6b 6e6f 6420 2474 6172 6765 7446 696c mknod $targetFil\n+000039c0: 6520 703e 3a22 2c20 4024 6f75 745d 290a e p>:\", @$out]).\n+000039d0: 0909 6966 2028 4024 6f75 7420 3e20 3029 ..if (@$out > 0)\n+000039e0: 3b0a 0920 2020 2063 686f 776e 2024 7569 ;.. chown $ui\n+000039f0: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target\n+00003a00: 4669 6c65 3b0a 0920 2020 2063 686d 6f64 File;.. chmod\n+00003a10: 2024 6d6f 6465 2c20 2474 6172 6765 7446 $mode, $targetF\n+00003a20: 696c 653b 0a09 2020 2020 7574 696d 6520 ile;.. utime \n+00003a30: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, \n+00003a40: 2474 6172 6765 7446 696c 653b 0a09 7d0a $targetFile;..}.\n+00003a50: 0965 6c73 6966 2028 6c65 6e67 7468 2824 .elsif (length($\n+00003a60: 6d64 3573 756d 2920 3d3d 2033 3220 6f72 md5sum) == 32 or\n+00003a70: 2020 2020 2023 206e 6f72 6d61 6c20 6669 # normal fi\n+00003a80: 6c65 0a09 2020 2020 2020 2024 7573 6547 le.. $useG\n+00003a90: 6e75 4370 2920 2020 2020 2020 2020 2020 nuCp) \n+00003aa0: 2020 2020 2020 2020 2320 7370 6563 6961 # specia\n+00003ab0: 6c20 6669 6c65 0a09 7b0a 2320 4964 6565 l file..{.# Idee\n+00003ac0: 207a 7572 204c f673 756e 6720 6465 7320 zur L.sung des \n+00003ad0: 7061 7261 6c6c 656c 6974 e474 732d 5072 parallelit.ts-Pr\n+00003ae0: 6f6c 656d 7320 6265 696d 205a 7572 fc63 olems beim Zur.c\n+00003af0: 6b73 6963 6865 726e 0a23 2069 6e20 5665 ksichern.# in Ve\n+00003b00: 7262 696e 6475 6e67 206d 6974 2064 656d rbindung mit dem\n+00003b10: 2053 6574 7a65 6e20 6465 7220 6861 7264 Setzen der hard\n+00003b20: 206c 696e 6b73 3a0a 2320 6572 7374 6520 links:.# erste \n+00003b30: 4461 7465 693a 0a23 2064 6576 2d69 6e6f Datei:.# dev-ino\n+00003b40: 6465 203d 3e20 272e 2720 696e 2064 626d de => '.' in dbm\n+00003b50: 2d66 696c 6520 2825 4442 4d48 6172 644c -file (%DBMHardL\n+00003b60: 696e 6b29 0a23 2066 6f72 6b2d 3e61 6464 ink).# fork->add\n+00003b70: 5f62 6c6f 636b 0a23 2077 656e 6e20 6665 _block.# wenn fe\n+00003b80: 7274 6967 2c20 6461 6e6e 2064 6576 2d69 rtig, dann dev-i\n+00003b90: 6e6f 6465 203d 3e20 6669 6c65 6e61 6d65 node => filename\n+00003ba0: 2069 6e20 6462 6d2d 6669 6c65 0a23 0a23 in dbm-file.#.#\n+00003bb0: 207a 7765 6974 6520 4461 7465 6920 2868 zweite Datei (h\n+00003bc0: 6172 6420 6c69 6e6b 290a 2320 6e61 6368 ard link).# nach\n+00003bd0: 7365 6865 6e20 696e 2064 626d 2d66 696c sehen in dbm-fil\n+00003be0: 650a 2320 7765 6e6e 2027 2e27 202d 3e20 e.# wenn '.' -> \n+00003bf0: 696e 2057 6172 7465 7363 686c 616e 6765 in Warteschlange\n+00003c00: 2068 e46e 6765 6e20 2868 6173 6829 0a23 h.ngen (hash).#\n+00003c10: 2077 656e 6e20 6669 6c65 6e61 6d65 202d wenn filename -\n+00003c20: 3e20 6c69 6e6b 656e 0a23 2075 6e74 656e > linken.# unten\n+00003c30: 2069 6d6d 6572 2057 6172 7465 7363 686c immer Warteschl\n+00003c40: 616e 6765 2069 6e20 6462 6d2d 6669 6c65 ange in dbm-file\n+00003c50: 20fc 6265 7270 72fc 6665 6e0a 0920 2020 .berpr.fen.. \n+00003c60: 206d 7920 2824 6f6c 642c 2024 6e65 7729 my ($old, $new)\n+00003c70: 203d 2028 756e 6465 662c 2075 6e64 6566 = (undef, undef\n+00003c80: 293b 0a0a 0920 2020 2075 6e6c 6573 7320 );... unless \n+00003c90: 2824 6e6f 4861 7264 4c69 6e6b 7329 2023 ($noHardLinks) #\n+00003ca0: 2048 6172 6420 4c69 6e6b 20fc 6265 7270 Hard Link .berp\n+00003cb0: 72fc 6665 6e0a 0920 2020 207b 0a09 0969 r.fen.. {...i\n+00003cc0: 6620 2865 7869 7374 7328 2444 424d 4861 f (exists($DBMHa\n+00003cd0: 7264 4c69 6e6b 7b24 6465 7649 6e6f 6465 rdLink{$devInode\n+00003ce0: 7d29 2920 2020 2320 6d75 7373 206e 7572 })) # muss nur\n+00003cf0: 2067 656c 696e 6b74 2077 6572 6465 6e0a gelinkt werden.\n+00003d00: 0909 7b0a 0909 2020 2020 2468 6173 546f ..{... $hasTo\n+00003d10: 4265 4c69 6e6b 6564 7b24 7461 7267 6574 BeLinked{$target\n+00003d20: 4669 6c65 7d20 3d20 5b24 6465 7649 6e6f File} = [$devIno\n+00003d30: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, \n+00003d40: 246d 6f64 652c 0a09 0909 0909 0920 2020 $mode,....... \n+00003d50: 2461 7469 6d65 2c20 246d 7469 6d65 5d3b $atime, $mtime];\n+00003d60: 0a09 0920 2020 2024 6861 7264 4c69 6e6b ... $hardLink\n+00003d70: 732b 2b3b 0a09 0920 2020 2067 6f74 6f20 s++;... goto \n+00003d80: 636f 6e74 4c6f 6f70 3b0a 0909 7d0a 0909 contLoop;...}...\n+00003d90: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $\n+00003da0: 4442 4d48 6172 644c 696e 6b7b 2464 6576 DBMHardLink{$dev\n+00003db0: 496e 6f64 657d 203d 2027 2e27 3b20 2020 Inode} = '.'; \n+00003dc0: 2320 6973 7420 696e 2042 6561 7262 6569 # ist in Bearbei\n+00003dd0: 7475 6e67 0a09 097d 0a09 2020 2020 7d0a tung...}.. }.\n+00003de0: 0920 2020 2069 6620 2824 636f 6d70 7220 . if ($compr \n+00003df0: 6571 2027 7527 2920 2020 2023 2077 6173 eq 'u') # was\n+00003e00: 206e 6f74 2063 6f6d 7072 6573 7365 642c not compressed,\n+00003e10: 2061 6c73 6f20 7661 6c69 6420 666f 7220 also valid for \n+00003e20: 736f 636b 6574 2c0a 0920 2020 207b 2020 socket,.. { \n+00003e30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003e40: 2020 2023 2062 6c6f 636b 6465 762c 2063 # blockdev, c\n+00003e50: 6861 7264 6576 0a09 0969 6620 286e 6f74 hardev...if (not\n+00003e60: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and \n+00003e70: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile).\n+00003e80: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog\n+00003e90: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00003ea0: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n+00003eb0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n+00003ec0: 7461 7267 6574 2024 7461 7267 6574 4669 target $targetFi\n+00003ed0: 6c65 2061 6c72 6561 6479 2065 7869 7374 le already exist\n+00003ee0: 733a 222c 0a09 0909 0920 2020 225c 7424 s:\",..... \"\\t$\n+00003ef0: 6370 2040 6370 5061 7220 2462 6163 6b75 cp @cpPar $backu\n+00003f00: 7052 6f6f 742f 2466 696c 656e 616d 6520 pRoot/$filename \n+00003f10: 2220 2e0a 0909 0909 2020 2022 2474 6172 \" ...... \"$tar\n+00003f20: 6765 7446 696c 6522 5d29 3b0a 0909 7d0a getFile\"]);...}.\n+00003f30: 0909 656c 7365 0a09 097b 0a09 0920 2020 ..else...{... \n+00003f40: 2024 6e6f 4669 6c65 7343 6f70 792b 2b20 $noFilesCopy++ \n+00003f50: 756e 6c65 7373 2024 7573 6547 6e75 4370 unless $useGnuCp\n+00003f60: 3b0a 0909 2020 2020 246e 6f53 6f63 6b65 ;... $noSocke\n+00003f70: 7473 2b2b 2069 6620 246d 6435 7375 6d20 ts++ if $md5sum \n+00003f80: 6571 2027 736f 636b 6574 273b 0a09 0920 eq 'socket';... \n+00003f90: 2020 2024 6e6f 426c 6f63 6b44 6576 732b $noBlockDevs+\n+00003fa0: 2b20 6966 2024 6d64 3573 756d 2065 7120 + if $md5sum eq \n+00003fb0: 2762 6c6f 636b 6465 7627 3b0a 0909 2020 'blockdev';... \n+00003fc0: 2020 246e 6f43 6861 7244 6576 732b 2b20 $noCharDevs++ \n+00003fd0: 6966 2024 6d64 3573 756d 2065 7120 2763 if $md5sum eq 'c\n+00003fe0: 6861 7264 6576 273b 0a0a 0909 2020 2020 hardev';.... \n+00003ff0: 2824 6f6c 642c 2024 6e65 7729 203d 0a09 ($old, $new) =..\n+00004000: 0909 2466 6f72 6b2d 3e61 6464 5f62 6c6f ..$fork->add_blo\n+00004010: 636b 2827 2d65 7865 6327 203d 3e20 2463 ck('-exec' => $c\n+00004020: 702c 0a09 0909 0920 2020 272d 7061 7261 p,..... '-para\n+00004030: 6d27 203d 3e20 5b40 6370 5061 722c 2022 m' => [@cpPar, \"\n+00004040: 2462 6163 6b75 7052 6f6f 742f 2466 696c $backupRoot/$fil\n+00004050: 656e 616d 6522 2c0a 0909 0909 0909 2224 ename\",.......\"$\n+00004060: 7461 7267 6574 4669 6c65 225d 2c0a 0909 targetFile\"],...\n+00004070: 0909 2020 2027 2d6f 7574 5261 6e64 6f6d .. '-outRandom\n+00004080: 2720 3d3e 2022 2474 6d70 6469 722f 7265 ' => \"$tmpdir/re\n+00004090: 636f 7665 722d 222c 0a09 0909 0920 2020 cover-\",..... \n+000040a0: 272d 696e 666f 2720 3d3e 205b 2474 6172 '-info' => [$tar\n+000040b0: 6765 7446 696c 652c 2024 7569 642c 2024 getFile, $uid, $\n+000040c0: 6769 642c 2024 6d6f 6465 2c0a 0909 0909 gid, $mode,.....\n+000040d0: 0920 2020 2020 2020 2461 7469 6d65 2c20 . $atime, \n+000040e0: 246d 7469 6d65 2c20 2464 6576 496e 6f64 $mtime, $devInod\n+000040f0: 655d 293b 0a09 0920 2020 2024 7072 4c6f e]);... $prLo\n+00004100: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00004110: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... '\n+00004120: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n+00004130: 2263 7020 2462 6163 6b75 7052 6f6f 742f \"cp $backupRoot/\n+00004140: 2466 696c 656e 616d 6520 2474 6172 6765 $filename $targe\n+00004150: 7446 696c 6522 5d29 0a09 0909 6966 2028 tFile\"])....if (\n+00004160: 2476 6572 626f 7365 293b 0a09 097d 0a09 $verbose);...}..\n+00004170: 2020 2020 7d0a 0920 2020 2065 6c73 6966 }.. elsif\n+00004180: 2028 2463 6f6d 7072 2065 7120 2763 2729 ($compr eq 'c')\n+00004190: 2020 2020 2020 2020 2020 2320 7761 7220 # war \n+000041a0: 6b6f 6d70 7269 6d69 6572 740a 0920 2020 komprimiert.. \n+000041b0: 207b 0a09 0969 6620 286e 6f74 2024 6f76 {...if (not $ov\n+000041c0: 6572 7772 6974 6520 616e 6420 2d65 2024 erwrite and -e $\n+000041d0: 7461 7267 6574 4669 6c65 290a 0909 7b0a targetFile)...{.\n+000041e0: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+000041f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00004200: 5727 2c0a 0909 0909 2020 272d 7374 7227 W',..... '-str'\n+00004210: 203d 3e0a 0909 0909 2020 5b22 7461 7267 =>..... [\"targ\n+00004220: 6574 2024 7461 7267 6574 4669 6c65 2061 et $targetFile a\n+00004230: 6c72 6561 6479 2065 7869 7374 733a 222c lready exists:\",\n+00004240: 0a09 0909 0920 2020 225c 7424 756e 636f ..... \"\\t$unco\n+00004250: 6d70 7220 4075 6e63 6f6d 7072 5061 7220 mpr @uncomprPar \n+00004260: 2220 2e0a 0909 0909 2020 2022 3c20 2462 \" ...... \"< $b\n+00004270: 6163 6b75 7052 6f6f 742f 2466 696c 656e ackupRoot/$filen\n+00004280: 616d 6524 706f 7374 6669 7820 2220 2e0a ame$postfix \" ..\n+00004290: 0909 0909 2020 2022 3e20 2474 6172 6765 .... \"> $targe\n+000042a0: 7446 696c 6522 5d29 3b0a 0909 7d0a 0909 tFile\"]);...}...\n+000042b0: 656c 7365 0a09 097b 0a09 0920 2020 202b else...{... +\n+000042c0: 2b24 6e6f 4669 6c65 7343 6f6d 7072 3b0a +$noFilesCompr;.\n+000042d0: 0909 2020 2020 2824 6f6c 642c 2024 6e65 .. ($old, $ne\n+000042e0: 7729 203d 0a09 0909 2466 6f72 6b2d 3e61 w) =....$fork->a\n+000042f0: 6464 5f62 6c6f 636b 2827 2d65 7865 6327 dd_block('-exec'\n+00004300: 203d 3e20 2475 6e63 6f6d 7072 2c0a 0909 => $uncompr,...\n+00004310: 0909 2020 2027 2d70 6172 616d 2720 3d3e .. '-param' =>\n+00004320: 205c 4075 6e63 6f6d 7072 5061 722c 0a09 \\@uncomprPar,..\n+00004330: 0909 0920 2020 272d 7374 6469 6e27 203d ... '-stdin' =\n+00004340: 3e20 2224 6261 636b 7570 526f 6f74 2f24 > \"$backupRoot/$\n+00004350: 6669 6c65 6e61 6d65 2470 6f73 7466 6978 filename$postfix\n+00004360: 222c 0a09 0909 0920 2020 272d 7374 646f \",..... '-stdo\n+00004370: 7574 2720 3d3e 2022 2474 6172 6765 7446 ut' => \"$targetF\n+00004380: 696c 6522 2c0a 0909 0909 2020 2027 2d64 ile\",..... '-d\n+00004390: 656c 5374 646f 7574 2720 3d3e 2027 6e6f elStdout' => 'no\n+000043a0: 272c 0a09 0909 0920 2020 272d 6f75 7452 ',..... '-outR\n+000043b0: 616e 646f 6d27 203d 3e20 2224 746d 7064 andom' => \"$tmpd\n+000043c0: 6972 2f72 6563 6f76 6572 2d22 2c0a 0909 ir/recover-\",...\n+000043d0: 0909 2020 2027 2d69 6e66 6f27 203d 3e20 .. '-info' => \n+000043e0: 5b24 7461 7267 6574 4669 6c65 2c20 2475 [$targetFile, $u\n+000043f0: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode,\n+00004400: 0a09 0909 0909 2020 2020 2020 2024 6174 ...... $at\n+00004410: 696d 652c 2024 6d74 696d 652c 2024 6465 ime, $mtime, $de\n+00004420: 7649 6e6f 6465 5d29 3b0a 0909 2020 2020 vInode]);... \n+00004430: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00004440: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00004450: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00004460: 2475 6e63 6f6d 7072 2040 756e 636f 6d70 $uncompr @uncomp\n+00004470: 7250 6172 203c 2022 202e 0a09 0909 0909 rPar < \" .......\n+00004480: 2020 2020 2022 2462 6163 6b75 7052 6f6f \"$backupRoo\n+00004490: 742f 2466 696c 656e 616d 6524 706f 7374 t/$filename$post\n+000044a0: 6669 7820 3e20 2220 2e0a 0909 0909 0920 fix > \" ....... \n+000044b0: 2020 2020 2224 7461 7267 6574 4669 6c65 \"$targetFile\n+000044c0: 225d 290a 0909 0969 6620 2824 7665 7262 \"])....if ($verb\n+000044d0: 6f73 6529 3b0a 0909 7d0a 0920 2020 207d ose);...}.. }\n+000044e0: 0a09 2020 2020 656c 7369 6620 2824 636f .. elsif ($co\n+000044f0: 6d70 7220 6571 2027 6227 2920 2020 2020 mpr eq 'b') \n+00004500: 2020 2320 626c 6f63 6b65 6420 6669 6c65 # blocked file\n+00004510: 0a09 2020 2020 7b0a 0909 2b2b 246e 6f46 .. {...++$noF\n+00004520: 696c 6573 426c 6f63 6b65 643b 0a09 0928 ilesBlocked;...(\n+00004530: 246f 6c64 2c20 246e 6577 2920 3d0a 0909 $old, $new) =...\n+00004540: 2020 2020 2466 6f72 6b2d 3e61 6464 5f62 $fork->add_b\n+00004550: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function'\n+00004560: 203d 3e20 5c26 756e 636f 6d70 7265 7373 => \\&uncompress\n+00004570: 4361 7442 6c6f 636b 2c0a 0909 0909 2020 CatBlock,..... \n+00004580: 2020 2027 2d66 756e 6350 6172 2720 3d3e '-funcPar' =>\n+00004590: 205b 2224 6261 636b 7570 526f 6f74 2f24 [\"$backupRoot/$\n+000045a0: 6669 6c65 6e61 6d65 222c 0a09 0909 0920 filename\",..... \n+000045b0: 2020 2020 2474 6172 6765 7446 696c 652c $targetFile,\n+000045c0: 2027 5c41 5c64 2e2a 272c 2024 756e 636f '\\A\\d.*', $unco\n+000045d0: 6d70 722c 205c 4075 6e63 6f6d 7072 5061 mpr, \\@uncomprPa\n+000045e0: 722c 0a09 0909 0920 2020 2020 2470 6f73 r,..... $pos\n+000045f0: 7466 6978 2c20 2470 724c 6f67 5d2c 0a09 tfix, $prLog],..\n+00004600: 0909 0920 2020 2020 272d 696e 666f 2720 ... '-info' \n+00004610: 3d3e 205b 2474 6172 6765 7446 696c 652c => [$targetFile,\n+00004620: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo\n+00004630: 6465 2c0a 0909 0909 0909 2024 6174 696d de,....... $atim\n+00004640: 652c 2024 6d74 696d 652c 2024 6465 7649 e, $mtime, $devI\n+00004650: 6e6f 6465 5d29 3b0a 0909 2470 724c 6f67 node]);...$prLog\n+00004660: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00004670: 3d3e 2027 4927 2c0a 0909 0920 2020 2020 => 'I',.... \n+00004680: 2027 2d73 7472 2720 3d3e 205b 2263 7020 '-str' => [\"cp \n+00004690: 2862 6c6f 636b 6564 2920 2220 2e0a 0909 (blocked) \" ....\n+000046a0: 0909 0920 2020 2020 2224 6261 636b 7570 ... \"$backup\n+000046b0: 526f 6f74 2f24 6669 6c65 6e61 6d65 2470 Root/$filename$p\n+000046c0: 6f73 7466 6978 2022 202e 0a09 0909 0909 ostfix \" .......\n+000046d0: 2020 2020 2022 2474 6172 6765 7446 696c \"$targetFil\n+000046e0: 6522 5d29 0a09 0909 6966 2028 2476 6572 e\"])....if ($ver\n+000046f0: 626f 7365 293b 0a09 2020 2020 7d0a 0920 bose);.. }.. \n+00004700: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n+00004710: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+00004720: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00004730: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00004740: 3e0a 0909 0920 2020 2020 205b 2275 6e6b >.... [\"unk\n+00004750: 6e6f 7720 636f 6d70 7220 666c 6167 203c now compr flag <\n+00004760: 2463 6f6d 7072 3e20 696e 202e 6d64 3543 $compr> in .md5C\n+00004770: 6865 636b 5375 6d73 2022 202e 0a09 0909 heckSums \" .....\n+00004780: 2020 2020 2020 2022 666f 7220 6669 6c65 \"for file\n+00004790: 203c 2462 6163 6b75 7052 6f6f 742f 2466 <$backupRoot/$f\n+000047a0: 696c 656e 616d 653e 225d 293b 0a09 2020 ilename>\"]);.. \n+000047b0: 2020 7d0a 0920 2020 2069 6620 2824 6f6c }.. if ($ol\n+000047c0: 6429 0a09 2020 2020 7b0a 0909 6d79 2028 d).. {...my (\n+000047d0: 2466 2c20 246f 5569 642c 2024 6f47 6964 $f, $oUid, $oGid\n+000047e0: 2c20 246f 4d6f 6465 2c20 246f 4174 696d , $oMode, $oAtim\n+000047f0: 652c 2024 6f4d 7469 6d65 2c20 246f 4465 e, $oMtime, $oDe\n+00004800: 7649 6e6f 6465 2920 3d0a 0909 2020 2020 vInode) =... \n+00004810: 407b 246f 6c64 2d3e 6765 7428 272d 7768 @{$old->get('-wh\n+00004820: 6174 2720 3d3e 2027 696e 666f 2729 7d3b at' => 'info')};\n+00004830: 0a09 0975 6e6c 6573 7320 2824 6e6f 4861 ...unless ($noHa\n+00004840: 7264 4c69 6e6b 7329 0a09 097b 2020 2020 rdLinks)...{ \n+00004850: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00004860: 2020 2020 2020 2020 2020 2020 2023 2046 # F\n+00004870: 696c 6520 696e 2044 424d 2076 6572 6d65 ile in DBM verme\n+00004880: 726b 656e 0a09 0920 2020 2024 4442 4d48 rken... $DBMH\n+00004890: 6172 644c 696e 6b7b 246f 4465 7649 6e6f ardLink{$oDevIno\n+000048a0: 6465 7d20 3d20 2466 3b0a 0909 7d0a 0909 de} = $f;...}...\n+000048b0: 6368 6f77 6e20 246f 5569 642c 2024 6f47 chown $oUid, $oG\n+000048c0: 6964 2c20 2466 3b0a 0909 6368 6d6f 6420 id, $f;...chmod \n+000048d0: 246f 4d6f 6465 2c20 2466 3b0a 0909 7574 $oMode, $f;...ut\n+000048e0: 696d 6520 246f 4174 696d 652c 2024 6f4d ime $oAtime, $oM\n+000048f0: 7469 6d65 2c20 2466 3b0a 0920 2020 207d time, $f;.. }\n+00004900: 0a0a 0920 2020 2067 6f74 6f20 6669 6e69 ... goto fini\n+00004910: 7368 2069 6620 2469 7346 696c 653b 2020 sh if $isFile; \n+00004920: 2020 2320 6175 6668 f672 656e 2c20 6973 # aufh.ren, is\n+00004930: 7420 6e75 7220 5f65 696e 655f 2044 6174 t nur _eine_ Dat\n+00004940: 6569 0a09 7d0a 0965 6c73 6520 2020 2023 ei..}..else #\n+00004950: 2075 6e6b 6e6f 776e 2074 7970 650a 097b unknown type..{\n+00004960: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+00004970: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00004980: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n+00004990: 3d3e 0a09 0909 2020 5b22 756e 6b6e 6f77 =>.... [\"unknow\n+000049a0: 6e20 656e 7472 7920 3c24 6d64 3573 756d n entry <$md5sum\n+000049b0: 3e20 666f 7220 6669 6c65 203c 2466 696c > for file <$fil\n+000049c0: 656e 616d 653e 3a22 5d29 3b0a 097d 0a20 ename>:\"]);..}. \n+000049d0: 2020 207d 0a0a 636f 6e74 4c6f 6f70 3a3b }..contLoop:;\n+000049e0: 0a23 206e 6163 6873 6568 656e 2c20 6f62 .# nachsehen, ob\n+000049f0: 206f 6666 656e 6520 4c69 6e6b 7320 6765 offene Links ge\n+00004a00: 7365 747a 7420 7765 7264 656e 206b f66e setzt werden k.n\n+00004a10: 6e65 6e0a 2020 2020 2673 6574 4861 7264 nen. &setHard\n+00004a20: 4c69 6e6b 7328 5c25 6861 7354 6f42 654c Links(\\%hasToBeL\n+00004a30: 696e 6b65 642c 205c 2544 424d 4861 7264 inked, \\%DBMHard\n+00004a40: 4c69 6e6b 2c20 2470 724c 6f67 2c20 2476 Link, $prLog, $v\n+00004a50: 6572 626f 7365 290a 0975 6e6c 6573 7320 erbose)..unless \n+00004a60: 246e 6f48 6172 644c 696e 6b73 3b0a 0a7d $noHardLinks;..}\n+00004a70: 0a0a 6669 6e69 7368 3a3b 0a0a 6d79 2024 ..finish:;..my $\n+00004a80: 6a6f 623b 0a77 6869 6c65 2028 246a 6f62 job;.while ($job\n+00004a90: 203d 2024 666f 726b 2d3e 7761 6974 466f = $fork->waitFo\n+00004aa0: 7241 6c6c 4a6f 6273 2829 290a 7b0a 2020 rAllJobs()).{. \n+00004ab0: 2020 6d79 2028 2466 2c20 246f 5569 642c my ($f, $oUid,\n+00004ac0: 2024 6f47 6964 2c20 246f 4d6f 6465 2c20 $oGid, $oMode, \n+00004ad0: 246f 4174 696d 652c 2024 6f4d 7469 6d65 $oAtime, $oMtime\n+00004ae0: 2c20 246f 4465 7649 6e6f 6465 2920 3d0a , $oDevInode) =.\n+00004af0: 0940 7b24 6a6f 622d 3e67 6574 2827 2d77 .@{$job->get('-w\n+00004b00: 6861 7427 203d 3e20 2769 6e66 6f27 297d hat' => 'info')}\n+00004b10: 3b0a 2020 2020 756e 6c65 7373 2028 246e ;. unless ($n\n+00004b20: 6f48 6172 644c 696e 6b73 290a 2020 2020 oHardLinks). \n+00004b30: 7b20 2020 2020 2020 2020 2020 2020 2020 { \n+00004b40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00004b50: 2020 2320 4669 6c65 2069 6e20 4442 4d20 # File in DBM \n+00004b60: 7665 726d 6572 6b65 6e0a 0924 4442 4d48 vermerken..$DBMH\n+00004b70: 6172 644c 696e 6b7b 246f 4465 7649 6e6f ardLink{$oDevIno\n+00004b80: 6465 7d20 3d20 2466 3b0a 2020 2020 7d0a de} = $f;. }.\n+00004b90: 2020 2020 6368 6f77 6e20 246f 5569 642c chown $oUid,\n+00004ba0: 2024 6f47 6964 2c20 2466 3b0a 2020 2020 $oGid, $f;. \n+00004bb0: 6368 6d6f 6420 246f 4d6f 6465 2c20 2466 chmod $oMode, $f\n+00004bc0: 3b0a 2020 2020 7574 696d 6520 246f 4174 ;. utime $oAt\n+00004bd0: 696d 652c 2024 6f4d 7469 6d65 2c20 2466 ime, $oMtime, $f\n+00004be0: 0a7d 0a0a 756e 6c65 7373 2028 246e 6f48 .}..unless ($noH\n+00004bf0: 6172 644c 696e 6b73 290a 7b0a 2020 2020 ardLinks).{. \n+00004c00: 2673 6574 4861 7264 4c69 6e6b 7328 5c25 &setHardLinks(\\%\n+00004c10: 6861 7354 6f42 654c 696e 6b65 642c 205c hasToBeLinked, \\\n+00004c20: 2544 424d 4861 7264 4c69 6e6b 2c20 2470 %DBMHardLink, $p\n+00004c30: 724c 6f67 2c20 2476 6572 626f 7365 293b rLog, $verbose);\n+00004c40: 0a20 2020 2064 626d 636c 6f73 6528 2544 . dbmclose(%D\n+00004c50: 424d 4861 7264 4c69 6e6b 293b 0a20 2020 BMHardLink);. \n+00004c60: 2075 6e6c 696e 6b20 2224 746d 7064 6972 unlink \"$tmpdir\n+00004c70: 2f73 7462 7265 636f 7665 722e 2424 223b /stbrecover.$$\";\n+00004c80: 0a7d 0a0a 2320 7365 7420 6174 696d 652c .}..# set atime,\n+00004c90: 206d 7469 6d65 2c20 6d6f 6465 206f 6620 mtime, mode of \n+00004ca0: 6469 7265 6374 6f72 6965 730a 636c 6f73 directories.clos\n+00004cb0: 6528 4449 5246 494c 4529 3b0a 756e 6c65 e(DIRFILE);.unle\n+00004cc0: 7373 2028 6f70 656e 2844 4952 4649 4c45 ss (open(DIRFILE\n+00004cd0: 2c20 223c 2024 746d 7044 6972 4669 6c65 , \"< $tmpDirFile\n+00004ce0: 2229 290a 7b0a 2020 2020 2470 724c 6f67 \")).{. $prLog\n+00004cf0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00004d00: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n+00004d10: 7227 203d 3e20 5b22 6361 6e6e 6f74 2072 r' => [\"cannot r\n+00004d20: 6561 6420 3c24 746d 7044 6972 4669 6c65 ead <$tmpDirFile\n+00004d30: 3e2c 2063 616e 6e6f 7420 7365 7420 2220 >, cannot set \" \n+00004d40: 2e0a 0909 0920 2020 2020 2261 7469 6d65 ..... \"atime\n+00004d50: 2061 6e64 206d 7469 6d65 2066 6f72 2064 and mtime for d\n+00004d60: 6972 6563 746f 7269 6573 225d 293b 0a7d irectories\"]);.}\n+00004d70: 0a65 6c73 650a 7b0a 2020 2020 2470 724c .else.{. $prL\n+00004d80: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00004d90: 2720 3d3e 2027 4927 2c0a 0909 2020 272d ' => 'I',... '-\n+00004da0: 7374 7227 203d 3e20 5b22 7365 7474 696e str' => [\"settin\n+00004db0: 6720 6174 696d 652c 206d 7469 6d65 206f g atime, mtime o\n+00004dc0: 6620 6469 7265 6374 6f72 6965 7320 2e2e f directories ..\n+00004dd0: 2e22 5d29 0a09 6966 2024 7665 7262 6f73 .\"])..if $verbos\n+00004de0: 653b 0a0a 2020 2020 6d79 2024 6c69 6e65 e;.. my $line\n+00004df0: 3b0a 2020 2020 7768 696c 6520 2824 6c69 ;. while ($li\n+00004e00: 6e65 203d 203c 4449 5246 494c 453e 290a ne = ).\n+00004e10: 2020 2020 7b0a 0963 686f 7020 246c 696e {..chop $lin\n+00004e20: 653b 0a09 6d79 2028 2461 7469 6d65 2c20 e;..my ($atime, \n+00004e30: 246d 7469 6d65 2c20 246d 6f64 652c 2024 $mtime, $mode, $\n+00004e40: 6466 2920 3d20 7370 6c69 7428 2f5c 732f df) = split(/\\s/\n+00004e50: 2c20 246c 696e 652c 2034 293b 0a09 2464 , $line, 4);..$d\n+00004e60: 6620 3d7e 2073 2f5c 302f 5c6e 2f6f 673b f =~ s/\\0/\\n/og;\n+00004e70: 0a09 6368 6d6f 6420 246d 6f64 652c 2024 ..chmod $mode, $\n+00004e80: 6466 3b0a 0975 7469 6d65 2024 6174 696d df;..utime $atim\n+00004e90: 652c 2024 6d74 696d 652c 2024 6466 3b0a e, $mtime, $df;.\n+00004ea0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $\n+00004eb0: 6d74 696d 652c 2024 6466 3b0a 2020 2020 mtime, $df;. \n+00004ec0: 7d0a 2020 2020 636c 6f73 6528 4449 5246 }. close(DIRF\n+00004ed0: 494c 4529 3b0a 7d0a 756e 6c69 6e6b 2024 ILE);.}.unlink $\n+00004ee0: 746d 7044 6972 4669 6c65 3b0a 0a24 7072 tmpDirFile;..$pr\n+00004ef0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00004f00: 6427 203d 3e20 2749 272c 0a09 2020 2020 d' => 'I',.. \n+00004f10: 2020 272d 7374 7227 203d 3e0a 0920 2020 '-str' =>.. \n+00004f20: 2020 205b 6a6f 696e 2827 2c20 272c 0a09 [join(', ',..\n+00004f30: 0920 2020 2028 246e 6f44 6972 7320 3f20 . ($noDirs ? \n+00004f40: 2224 6e6f 4469 7273 2064 6972 7322 203a \"$noDirs dirs\" :\n+00004f50: 2028 2929 2c0a 0909 2020 2020 2824 6861 ()),... ($ha\n+00004f60: 7264 4c69 6e6b 7320 3f20 2224 6861 7264 rdLinks ? \"$hard\n+00004f70: 4c69 6e6b 7320 6861 7264 6c69 6e6b 7322 Links hardlinks\"\n+00004f80: 203a 2028 2929 2c0a 0909 2020 2020 2824 : ()),... ($\n+00004f90: 6e6f 5379 6d4c 696e 6b73 203f 2022 246e noSymLinks ? \"$n\n+00004fa0: 6f53 796d 4c69 6e6b 7320 7379 6d6c 696e oSymLinks symlin\n+00004fb0: 6b73 2220 3a20 2829 292c 0a09 0920 2020 ks\" : ()),... \n+00004fc0: 2028 246e 6f4e 616d 6564 5069 7065 7320 ($noNamedPipes \n+00004fd0: 3f20 2224 6e6f 4e61 6d65 6450 6970 6573 ? \"$noNamedPipes\n+00004fe0: 206e 616d 6564 2070 6970 6573 2220 3a20 named pipes\" : \n+00004ff0: 2829 292c 0a09 0920 2020 2028 246e 6f53 ()),... ($noS\n+00005000: 6f63 6b65 7473 203f 2022 246e 6f53 6f63 ockets ? \"$noSoc\n+00005010: 6b65 7473 2073 6f63 6b65 7473 2220 3a20 kets sockets\" : \n+00005020: 2829 292c 0a09 0920 2020 2028 246e 6f42 ()),... ($noB\n+00005030: 6c6f 636b 4465 7673 203f 2022 246e 6f42 lockDevs ? \"$noB\n+00005040: 6c6f 636b 4465 7673 2062 6c6f 636b 2064 lockDevs block d\n+00005050: 6576 7322 203a 2028 2929 2c0a 0909 2020 evs\" : ()),... \n+00005060: 2020 2824 6e6f 4368 6172 4465 7673 203f ($noCharDevs ?\n+00005070: 2022 246e 6f43 6861 7244 6576 7320 6368 \"$noCharDevs ch\n+00005080: 6172 2064 6576 7322 203a 2028 2929 2c0a ar devs\" : ()),.\n+00005090: 0909 2020 2020 2824 6e6f 4669 6c65 7343 .. ($noFilesC\n+000050a0: 6f70 7920 3f20 2224 6e6f 4669 6c65 7343 opy ? \"$noFilesC\n+000050b0: 6f70 7920 636f 7069 6564 2220 3a20 2829 opy copied\" : ()\n+000050c0: 292c 0a09 0920 2020 2028 246e 6f46 696c ),... ($noFil\n+000050d0: 6573 436f 6d70 7220 3f20 2224 6e6f 4669 esCompr ? \"$noFi\n+000050e0: 6c65 7343 6f6d 7072 2075 6e63 6f6d 7072 lesCompr uncompr\n+000050f0: 6573 7365 6422 203a 2028 2929 2c0a 0909 essed\" : ()),...\n+00005100: 2020 2020 2824 6e6f 4669 6c65 7342 6c6f ($noFilesBlo\n+00005110: 636b 6564 203f 2022 246e 6f46 696c 6573 cked ? \"$noFiles\n+00005120: 426c 6f63 6b65 6420 6361 7420 626c 6f63 Blocked cat bloc\n+00005130: 6b65 6420 6669 6c65 7322 203a 2028 2929 ked files\" : ())\n+00005140: 295d 0a20 2020 2029 0a20 2020 2069 6620 )]. ). if \n+00005150: 2824 6e6f 5265 7374 6f72 6564 293b 0a0a ($noRestored);..\n+00005160: 6578 6974 2030 3b0a 0a0a 2323 2323 2323 exit 0;...######\n+00005170: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00005180: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00005190: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000051a0: 2323 2323 2323 0a73 7562 2073 6574 4861 ######.sub setHa\n+000051b0: 7264 4c69 6e6b 730a 7b0a 2020 2020 6d79 rdLinks.{. my\n+000051c0: 2028 2468 6173 546f 4265 4c69 6e6b 6564 ($hasToBeLinked\n+000051d0: 2c20 2444 424d 4861 7264 4c69 6e6b 2c20 , $DBMHardLink, \n+000051e0: 2470 724c 6f67 2c20 2476 6572 626f 7365 $prLog, $verbose\n+000051f0: 2920 3d20 405f 3b0a 0a20 2020 206d 7920 ) = @_;.. my \n+00005200: 2466 3b0a 2020 2020 666f 7265 6163 6820 $f;. foreach \n+00005210: 2466 2028 6b65 7973 2025 2468 6173 546f $f (keys %$hasTo\n+00005220: 4265 4c69 6e6b 6564 290a 2020 2020 7b0a BeLinked). {.\n+00005230: 096d 7920 2824 6469 2c20 2475 6964 2c20 .my ($di, $uid, \n+00005240: 2467 6964 2c20 246d 6f64 652c 2024 6174 $gid, $mode, $at\n+00005250: 696d 652c 2024 6d74 696d 6529 203d 2040 ime, $mtime) = @\n+00005260: 7b24 2468 6173 546f 4265 4c69 6e6b 6564 {$$hasToBeLinked\n+00005270: 7b24 667d 7d3b 0a09 6966 2028 6578 6973 {$f}};..if (exis\n+00005280: 7473 2824 2444 424d 4861 7264 4c69 6e6b ts($$DBMHardLink\n+00005290: 7b24 6469 7d29 2061 6e64 2024 2444 424d {$di}) and $$DBM\n+000052a0: 4861 7264 4c69 6e6b 7b24 6469 7d20 6e65 HardLink{$di} ne\n+000052b0: 2027 2e27 290a 097b 0a09 2020 2020 6d79 '.')..{.. my\n+000052c0: 2024 6f6c 6446 203d 2024 2444 424d 4861 $oldF = $$DBMHa\n+000052d0: 7264 4c69 6e6b 7b24 6469 7d3b 0a09 2020 rdLink{$di};.. \n+000052e0: 2020 6966 2028 2d65 2024 6629 0a09 2020 if (-e $f).. \n+000052f0: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+00005300: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00005310: 5727 2c0a 0909 0920 2020 2020 2027 2d73 W',.... '-s\n+00005320: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n+00005330: 6c69 6e6b 203c 2466 3e20 746f 2069 7473 link <$f> to its\n+00005340: 656c 6622 5d29 3b0a 0920 2020 207d 0a09 elf\"]);.. }..\n+00005350: 2020 2020 656c 7365 0a09 2020 2020 7b09 else.. {.\n+00005360: 090a 0909 6966 2028 6c69 6e6b 2024 6f6c ....if (link $ol\n+00005370: 6446 2c20 2466 290a 0909 7b0a 0909 2020 dF, $f)...{... \n+00005380: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00005390: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+000053a0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n+000053b0: 5b22 6c69 6e6b 2024 6f6c 6446 2024 6622 [\"link $oldF $f\"\n+000053c0: 5d29 0a09 0909 6966 2028 2476 6572 626f ])....if ($verbo\n+000053d0: 7365 293b 0a09 0920 2020 2063 686f 776e se);... chown\n+000053e0: 2024 7569 642c 2024 6769 642c 2024 663b $uid, $gid, $f;\n+000053f0: 0a09 0920 2020 2063 686d 6f64 2024 6d6f ... chmod $mo\n+00005400: 6465 2c20 2466 3b0a 0909 2020 2020 7574 de, $f;... ut\n+00005410: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti\n+00005420: 6d65 2c20 2466 3b0a 0909 7d0a 0909 656c me, $f;...}...el\n+00005430: 7365 0a09 097b 0a09 0920 2020 2024 7072 se...{... $pr\n+00005440: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00005450: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n+00005460: 2027 2d73 7472 2720 3d3e 205b 2266 6169 '-str' => [\"fai\n+00005470: 6c65 643a 206c 696e 6b20 246f 6c64 4620 led: link $oldF \n+00005480: 2466 225d 293b 0a09 097d 0a09 2020 2020 $f\"]);...}.. \n+00005490: 7d0a 0920 2020 2064 656c 6574 6520 2424 }.. delete $$\n+000054a0: 6861 7354 6f42 654c 696e 6b65 647b 2466 hasToBeLinked{$f\n+000054b0: 7d3b 0a09 7d0a 2020 2020 7d0a 7d0a 0a0a };..}. }.}...\n+000054c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000054d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000054e0: 2323 2323 2323 2323 0a73 7562 2075 6e63 ########.sub unc\n+000054f0: 6f6d 7072 6573 7343 6174 426c 6f63 6b0a ompressCatBlock.\n+00005500: 7b0a 2020 2020 6d79 2024 6672 6f6d 4469 {. my $fromDi\n+00005510: 7220 3d20 7368 6966 743b 0a20 2020 206d r = shift;. m\n+00005520: 7920 2474 6f46 696c 6520 3d20 7368 6966 y $toFile = shif\n+00005530: 743b 0a20 2020 206d 7920 246d 6173 6b20 t;. my $mask \n+00005540: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n+00005550: 2475 6d63 6f6d 7072 203d 2073 6869 6674 $umcompr = shift\n+00005560: 3b0a 2020 2020 6d79 2024 756e 636f 6d70 ;. my $uncomp\n+00005570: 7250 6172 203d 2073 6869 6674 3b0a 2020 rPar = shift;. \n+00005580: 2020 6d79 2024 706f 7374 6669 7820 3d20 my $postfix = \n+00005590: 7368 6966 743b 0a20 2020 206d 7920 2470 shift;. my $p\n+000055a0: 724c 6f67 203d 2073 6869 6674 3b0a 0a20 rLog = shift;.. \n+000055b0: 2020 206c 6f63 616c 202a 4449 523b 0a20 local *DIR;. \n+000055c0: 2020 2075 6e6c 6573 7320 286f 7065 6e64 unless (opend\n+000055d0: 6972 2844 4952 2c20 2466 726f 6d44 6972 ir(DIR, $fromDir\n+000055e0: 2929 0a20 2020 207b 0a09 2470 724c 6f67 )). {..$prLog\n+000055f0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00005600: 3d3e 2027 4527 2c0a 0909 2020 2020 2020 => 'E',... \n+00005610: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => [\"cann\n+00005620: 6f74 206f 7065 6e20 3c24 6672 6f6d 4469 ot open <$fromDi\n+00005630: 723e 225d 293b 0a09 7265 7475 726e 2031 r>\"]);..return 1\n+00005640: 3b0a 2020 2020 7d0a 2020 2020 6d79 2028 ;. }. my (\n+00005650: 2465 6e74 7279 2c20 4065 6e74 7269 6573 $entry, @entries\n+00005660: 293b 0a20 2020 2077 6869 6c65 2028 2465 );. while ($e\n+00005670: 6e74 7279 203d 2072 6561 6464 6972 2044 ntry = readdir D\n+00005680: 4952 290a 2020 2020 7b0a 096e 6578 7420 IR). {..next \n+00005690: 756e 6c65 7373 2024 656e 7472 7920 3d7e unless $entry =~\n+000056a0: 202f 246d 6173 6b2f 3b0a 0a09 7075 7368 /$mask/;...push\n+000056b0: 2040 656e 7472 6965 732c 2024 656e 7472 @entries, $entr\n+000056c0: 793b 0a20 2020 207d 0a20 2020 2063 6c6f y;. }. clo\n+000056d0: 7365 2844 4952 293b 0a0a 2020 2020 6c6f se(DIR);.. lo\n+000056e0: 6361 6c20 2a54 4f3b 0a20 2020 2075 6e6c cal *TO;. unl\n+000056f0: 6573 7320 2873 7973 6f70 656e 2854 4f2c ess (sysopen(TO,\n+00005700: 2024 746f 4669 6c65 2c20 4f5f 4352 4541 $toFile, O_CREA\n+00005710: 5420 7c20 4f5f 5752 4f4e 4c59 2929 0a20 T | O_WRONLY)). \n+00005720: 2020 207b 0a09 2470 724c 6f67 2d3e 7072 {..$prLog->pr\n+00005730: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00005740: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n+00005750: 7227 203d 3e20 5b22 6361 6e6e 6f74 2077 r' => [\"cannot w\n+00005760: 7269 7465 2074 6f20 3c24 746f 4669 6c65 rite to <$toFile\n+00005770: 3e22 5d29 3b0a 2020 2020 7d0a 0a20 2020 >\"]);. }.. \n+00005780: 2066 6f72 6561 6368 2024 656e 7472 7920 foreach $entry \n+00005790: 2873 6f72 7420 4065 6e74 7269 6573 290a (sort @entries).\n+000057a0: 2020 2020 7b0a 096d 7920 2462 7566 6665 {..my $buffe\n+000057b0: 723b 0a09 6c6f 6361 6c20 2a46 524f 4d3b r;..local *FROM;\n+000057c0: 0a09 6d79 2024 6669 6c65 496e 203d 2075 ..my $fileIn = u\n+000057d0: 6e64 6566 3b0a 0969 6620 2824 656e 7472 ndef;..if ($entr\n+000057e0: 7920 3d7e 202f 2470 6f73 7466 6978 5c5a y =~ /$postfix\\Z\n+000057f0: 2f29 2020 2020 2320 636f 6d70 7265 7373 /) # compress\n+00005800: 6564 2062 6c6f 636b 0a09 7b0a 0920 2020 ed block..{.. \n+00005810: 2069 6620 2824 6d61 696e 3a3a 494f 436f if ($main::IOCo\n+00005820: 6d70 7265 7373 4469 7265 6374 290a 0920 mpressDirect).. \n+00005830: 2020 207b 0a09 096d 7920 2469 6e70 7574 {...my $input\n+00005840: 203d 2022 2466 726f 6d44 6972 2f24 656e = \"$fromDir/$en\n+00005850: 7472 7922 3b0a 0909 6d79 2024 7563 203d try\";...my $uc =\n+00005860: 206e 6577 2049 4f3a 3a55 6e63 6f6d 7072 new IO::Uncompr\n+00005870: 6573 733a 3a42 756e 7a69 7032 2024 696e ess::Bunzip2 $in\n+00005880: 7075 743b 0a09 0977 6869 6c65 2028 2475 put;...while ($u\n+00005890: 632d 3e72 6561 6428 2462 7566 6665 722c c->read($buffer,\n+000058a0: 2031 302a 3130 3234 2a2a 3229 290a 0909 10*1024**2))...\n+000058b0: 7b0a 0909 2020 2020 7379 7377 7269 7465 {... syswrite\n+000058c0: 2854 4f2c 2024 6275 6666 6572 293b 0a09 (TO, $buffer);..\n+000058d0: 097d 0a09 096e 6578 743b 0a09 2020 2020 .}...next;.. \n+000058e0: 7d0a 0a09 2020 2020 2466 696c 6549 6e20 }... $fileIn \n+000058f0: 3d0a 0909 7069 7065 4672 6f6d 466f 726b =...pipeFromFork\n+00005900: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' =>\n+00005910: 2024 756e 636f 6d70 722c 0a09 0909 0920 $uncompr,..... \n+00005920: 2027 2d70 6172 616d 2720 3d3e 205c 4075 '-param' => \\@u\n+00005930: 6e63 6f6d 7072 5061 722c 0a09 0909 0920 ncomprPar,..... \n+00005940: 2027 2d73 7464 696e 2720 3d3e 2022 2466 '-stdin' => \"$f\n+00005950: 726f 6d44 6972 2f24 656e 7472 7922 2c0a romDir/$entry\",.\n+00005960: 0909 0909 2020 272d 6f75 7452 616e 646f .... '-outRando\n+00005970: 6d27 203d 3e20 272f 746d 702f 7374 6275 m' => '/tmp/stbu\n+00005980: 5069 7065 4672 6f6d 3131 2d27 2c0a 0909 PipeFrom11-',...\n+00005990: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => \n+000059a0: 2470 724c 6f67 293b 0a09 2020 2020 7768 $prLog);.. wh\n+000059b0: 696c 6520 2824 6669 6c65 496e 2d3e 7379 ile ($fileIn->sy\n+000059c0: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\\$buffer, \n+000059d0: 3130 2a31 3032 342a 2a32 2929 0a09 2020 10*1024**2)).. \n+000059e0: 2020 7b0a 0909 7379 7377 7269 7465 2854 {...syswrite(T\n+000059f0: 4f2c 2024 6275 6666 6572 293b 0a09 2020 O, $buffer);.. \n+00005a00: 2020 7d0a 097d 0a09 656c 7365 2020 2020 }..}..else \n+00005a10: 2020 2020 2020 2023 2062 6c6f 636b 206e # block n\n+00005a20: 6f74 2063 6f6d 7072 6573 7365 640a 097b ot compressed..{\n+00005a30: 0a09 2020 2020 756e 6c65 7373 2028 7379 .. unless (sy\n+00005a40: 736f 7065 6e28 4652 4f4d 2c20 2224 6672 sopen(FROM, \"$fr\n+00005a50: 6f6d 4469 722f 2465 6e74 7279 222c 204f omDir/$entry\", O\n+00005a60: 5f52 444f 4e4c 5929 290a 0920 2020 207b _RDONLY)).. {\n+00005a70: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n+00005a80: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00005a90: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n+00005aa0: 203d 3e20 5b22 6361 6e6e 6f74 2072 6561 => [\"cannot rea\n+00005ab0: 6420 3c24 6672 6f6d 4469 722f 2465 6e74 d <$fromDir/$ent\n+00005ac0: 7279 3e22 5d29 3b0a 0909 7265 7475 726e ry>\"]);...return\n+00005ad0: 2031 3b0a 0920 2020 207d 0a09 2020 2020 1;.. }.. \n+00005ae0: 7768 696c 6520 2873 7973 7265 6164 2846 while (sysread(F\n+00005af0: 524f 4d2c 2024 6275 6666 6572 2c20 3130 ROM, $buffer, 10\n+00005b00: 2a31 3032 342a 2a32 2929 0a09 2020 2020 *1024**2)).. \n+00005b10: 7b0a 0909 7379 7377 7269 7465 2854 4f2c {...syswrite(TO,\n+00005b20: 2024 6275 6666 6572 293b 0a09 2020 2020 $buffer);.. \n+00005b30: 7d0a 097d 0a0a 0969 6620 2824 6669 6c65 }..}...if ($file\n+00005b40: 496e 290a 097b 0a09 2020 2020 2466 696c In)..{.. $fil\n+00005b50: 6549 6e2d 3e63 6c6f 7365 2829 3b0a 0920 eIn->close();.. \n+00005b60: 2020 2024 6669 6c65 496e 203d 2075 6e64 $fileIn = und\n+00005b70: 6566 3b0a 097d 0a09 656c 7365 0a09 7b0a ef;..}..else..{.\n+00005b80: 0920 2020 2063 6c6f 7365 2846 524f 4d29 . close(FROM)\n+00005b90: 3b0a 097d 0a20 2020 207d 0a20 2020 2063 ;..}. }. c\n+00005ba0: 6c6f 7365 2854 4f29 3b0a 2020 2020 7265 lose(TO);. re\n+00005bb0: 7475 726e 2030 3b0a 7d0a turn 0;.}.\n"}, {"source1": "./usr/bin/storeBackupSearch", "source2": "./usr/bin/storeBackupSearch", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1089 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7053 6561 7263 680a pSearch.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 382d 3230 3132 290a 2320 2020 2020 2020 8-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# \n+00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i\n+00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software:\n+00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr\n+000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or \n+000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un\n+000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of\n+000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n+000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n+000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by.\n+00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof\n+00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation\n+00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version\n+00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens\n+00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo\n+00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l\n+00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...#\n+00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program \n+00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i\n+00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that \n+000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu\n+000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO\n+000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY;\n+000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th\n+000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran\n+000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA\n+00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT\n+00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI\n+00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. \n+00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU \n+00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n+00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more \n+00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y\n+00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r\n+00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o\n+00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera\n+000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with \n+000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I\n+000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m\n+00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I\n+00000310: 643a 2073 746f 7265 4261 636b 7570 5365 d: storeBackupSe\n+00000320: 6172 6368 2e70 6c20 3334 3120 3230 3038 arch.pl 341 2008\n+00000330: 2d30 372d 3331 2031 333a 3133 3a31 375a -07-31 13:13:17Z\n+00000340: 2068 6a63 2024 2027 3b0a 7075 7368 2040 hjc $ ';.push @\n+00000350: 5645 5253 494f 4e2c 2024 5645 5253 494f VERSION, $VERSIO\n+00000360: 4e3b 0a6d 7920 2824 5645 5253 494f 4e70 N;.my ($VERSIONp\n+00000370: 4e61 6d65 2c20 2456 4552 5349 4f4e 7376 Name, $VERSIONsv\n+00000380: 6e49 4429 203d 2024 5645 5253 494f 4e20 nID) = $VERSION \n+00000390: 3d7e 202f 4964 3a5c 732b 285c 532b 295c =~ /Id:\\s+(\\S+)\\\n+000003a0: 732b 285c 642b 292f 3b0a 246d 6169 6e3a s+(\\d+)/;.$main:\n+000003b0: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS\n+000003c0: 494f 4e20 3d20 756e 6465 663b 0a0a 0a75 ION = undef;...u\n+000003d0: 7365 2073 7472 6963 743b 0a0a 0a73 7562 se strict;...sub\n+000003e0: 206c 6962 5061 7468 0a7b 0a20 2020 206d libPath.{. m\n+000003f0: 7920 2466 696c 6520 3d20 7368 6966 743b y $file = shift;\n+00000400: 0a0a 2020 2020 6d79 2024 6469 723b 0a0a .. my $dir;..\n+00000410: 2020 2020 2320 4661 6c6c 7320 4461 7465 # Falls Date\n+00000420: 6920 7365 6c62 7374 2065 696e 2073 796d i selbst ein sym\n+00000430: 6c69 6e6b 2069 7374 2c20 736f 6c61 6e67 link ist, solang\n+00000440: 6520 666f 6c67 656e 2c20 6269 7320 6175 e folgen, bis au\n+00000450: 6667 656c f673 740a 2020 2020 6966 2028 fgel.st. if (\n+00000460: 2d66 2024 6669 6c65 290a 2020 2020 7b0a -f $file). {.\n+00000470: 0977 6869 6c65 2028 2d6c 2024 6669 6c65 .while (-l $file\n+00000480: 290a 097b 0a09 2020 2020 6d79 2024 6c69 )..{.. my $li\n+00000490: 6e6b 203d 2072 6561 646c 696e 6b28 2466 nk = readlink($f\n+000004a0: 696c 6529 3b0a 0a09 2020 2020 6966 2028 ile);... if (\n+000004b0: 7375 6273 7472 2824 6c69 6e6b 2c20 302c substr($link, 0,\n+000004c0: 2031 2920 6e65 2022 2f22 290a 0920 2020 1) ne \"/\").. \n+000004d0: 207b 0a09 0924 6669 6c65 203d 7e20 732f {...$file =~ s/\n+000004e0: 5b5e 5c2f 5d2b 242f 246c 696e 6b2f 3b0a [^\\/]+$/$link/;.\n+000004f0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n+00000500: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file \n+00000510: 3d20 246c 696e 6b3b 0a09 2020 2020 7d0a = $link;.. }.\n+00000520: 097d 0a0a 0928 2464 6972 2c20 2466 696c .}...($dir, $fil\n+00000530: 6529 203d 2026 7370 6c69 7446 696c 6544 e) = &splitFileD\n+00000540: 6972 2824 6669 6c65 293b 0a09 2466 696c ir($file);..$fil\n+00000550: 6520 3d20 222f 2466 696c 6522 3b0a 2020 e = \"/$file\";. \n+00000560: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n+00000570: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR\n+00000580: 2022 3c24 6669 6c65 3e20 646f 6573 206e \"<$file> does n\n+00000590: 6f74 2065 7869 7374 215c 6e22 3b0a 0965 ot exist!\\n\";..e\n+000005a0: 7869 7420 313b 0a20 2020 207d 0a0a 2020 xit 1;. }.. \n+000005b0: 2020 2464 6972 202e 3d20 222f 2e2e 2f6c $dir .= \"/../l\n+000005c0: 6962 223b 2020 2020 2020 2020 2020 2023 ib\"; #\n+000005d0: 2050 6661 6420 7a75 2064 656e 2042 6962 Pfad zu den Bib\n+000005e0: 6c69 6f74 6865 6b65 6e0a 2020 2020 6d79 liotheken. my\n+000005f0: 2024 6f6c 6444 6972 203d 2060 2f62 696e $oldDir = `/bin\n+00000600: 2f70 7764 603b 0a20 2020 2063 686f 6d70 /pwd`;. chomp\n+00000610: 2024 6f6c 6444 6972 3b0a 2020 2020 6966 $oldDir;. if\n+00000620: 2028 6368 6469 7220 2464 6972 290a 2020 (chdir $dir). \n+00000630: 2020 7b0a 096d 7920 2461 6273 4469 7220 {..my $absDir \n+00000640: 3d20 602f 6269 6e2f 7077 6460 3b0a 0963 = `/bin/pwd`;..c\n+00000650: 686f 7020 2461 6273 4469 723b 0a09 6368 hop $absDir;..ch\n+00000660: 6469 7220 246f 6c64 4469 723b 0a0a 0972 dir $oldDir;...r\n+00000670: 6574 7572 6e20 2826 7370 6c69 7446 696c eturn (&splitFil\n+00000680: 6544 6972 2822 2461 6273 4469 7224 6669 eDir(\"$absDir$fi\n+00000690: 6c65 2229 293b 0a20 2020 207d 0a20 2020 le\"));. }. \n+000006a0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri\n+000006b0: 6e74 2053 5444 4552 5220 223c 2464 6972 nt STDERR \"<$dir\n+000006c0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist\n+000006d0: 2c20 6578 6974 696e 675c 6e22 3b0a 2020 , exiting\\n\";. \n+000006e0: 2020 7d0a 7d0a 7375 6220 7370 6c69 7446 }.}.sub splitF\n+000006f0: 696c 6544 6972 0a7b 0a20 2020 206d 7920 ileDir.{. my \n+00000700: 246e 616d 6520 3d20 7368 6966 743b 0a0a $name = shift;..\n+00000710: 2020 2020 7265 7475 726e 2028 272e 272c return ('.',\n+00000720: 2024 6e61 6d65 2920 756e 6c65 7373 2028 $name) unless (\n+00000730: 246e 616d 6520 3d7e 2f5c 2f2f 293b 2020 $name =~/\\//); \n+00000740: 2020 2320 6e75 7220 6569 6e66 6163 6865 # nur einfache\n+00000750: 7220 4461 7465 696e 616d 650a 0a20 2020 r Dateiname.. \n+00000760: 206d 7920 2824 6469 722c 2024 6669 6c65 my ($dir, $file\n+00000770: 2920 3d20 246e 616d 6520 3d7e 202f 5e28 ) = $name =~ /^(\n+00000780: 2e2a 295c 2f28 2e2a 2924 2f73 3b0a 2020 .*)\\/(.*)$/s;. \n+00000790: 2020 2464 6972 203d 2027 2f27 2069 6620 $dir = '/' if \n+000007a0: 2824 6469 7220 6571 2027 2729 3b20 2020 ($dir eq ''); \n+000007b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000007c0: 2320 6769 6c74 2c20 6661 6c6c 7320 7a2e # gilt, falls z.\n+000007d0: 422e 202f 6669 6c65 6e61 6d65 0a20 2020 B. /filename. \n+000007e0: 2072 6574 7572 6e20 2824 6469 722c 2024 return ($dir, $\n+000007f0: 6669 6c65 293b 0a7d 0a6d 7920 2824 7265 file);.}.my ($re\n+00000800: 712c 2024 7072 6f67 2920 3d20 266c 6962 q, $prog) = &lib\n+00000810: 5061 7468 2824 3029 3b0a 7075 7368 2040 Path($0);.push @\n+00000820: 494e 432c 2022 2472 6571 223b 0a0a 7265 INC, \"$req\";..re\n+00000830: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara\n+00000840: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require \n+00000850: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl'\n+00000860: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog\n+00000870: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v\n+00000880: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ\n+00000890: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl'\n+000008a0: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP\n+000008b0: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require\n+000008c0: 2027 6875 6d61 6e52 6561 642e 706c 273b 'humanRead.pl';\n+000008d0: 0a72 6571 7569 7265 2027 6461 7465 546f .require 'dateTo\n+000008e0: 6f6c 732e 706c 273b 0a72 6571 7569 7265 ols.pl';.require\n+000008f0: 2027 6576 616c 546f 6f6c 732e 706c 273b 'evalTools.pl';\n+00000900: 0a72 6571 7569 7265 2027 7374 6f72 6542 .require 'storeB\n+00000910: 6163 6b75 704c 6962 2e70 6c27 3b0a 0a6d ackupLib.pl';..m\n+00000920: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile \n+00000930: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums\n+00000940: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME.\n+00000950: 0a73 746f 7265 4261 636b 7570 5365 6172 .storeBackupSear\n+00000960: 6368 2e70 6c20 2d20 6c6f 6361 7465 7320 ch.pl - locates \n+00000970: 6469 6666 6572 656e 7420 7665 7273 696f different versio\n+00000980: 6e73 206f 6620 6120 6669 6c65 2073 6176 ns of a file sav\n+00000990: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac\n+000009a0: 6b75 702e 706c 2e0a 0a3d 6865 6164 3120 kup.pl...=head1 \n+000009b0: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store\n+000009c0: 4261 636b 7570 5365 6172 6368 2e70 6c20 BackupSearch.pl \n+000009d0: 2d67 2063 6f6e 6669 6746 696c 650a 0a09 -g configFile...\n+000009e0: 7374 6f72 6542 6163 6b75 7053 6561 7263 storeBackupSearc\n+000009f0: 682e 706c 202d 6220 6261 636b 7570 4469 h.pl -b backupDi\n+00000a00: 7244 6972 205b 2d66 2063 6f6e 6669 6746 rDir [-f configF\n+00000a10: 696c 655d 0a09 2020 2020 2020 5b2d 7320 ile].. [-s \n+00000a20: 7275 6c65 5d20 205b 2d2d 6162 7350 6174 rule] [--absPat\n+00000a30: 685d 205b 2d77 2066 696c 655d 205b 2d2d h] [-w file] [--\n+00000a40: 7061 724a 6f62 7320 6e75 6d62 6572 5d0a parJobs number].\n+00000a50: 0920 2020 2020 205b 2d64 206c 6576 656c . [-d level\n+00000a60: 5d20 5b2d 2d6f 6e63 655d 205b 2d2d 7072 ] [--once] [--pr\n+00000a70: 696e 745d 205b 6261 636b 7570 526f 6f74 int] [backupRoot\n+00000a80: 202e 202e 202e 5d0a 0a3d 6865 6164 3120 . . .]..=head1 \n+00000a90: 4445 5343 5249 5054 494f 4e0a 0a59 6f75 DESCRIPTION..You\n+00000aa0: 206e 6565 6420 736f 6d65 2062 6173 6963 need some basic\n+00000ab0: 2075 6e64 6572 7374 616e 6469 6e67 206f understanding o\n+00000ac0: 6620 6c69 6e75 7820 616e 6420 7065 726c f linux and perl\n+00000ad0: 2074 6f20 7573 6520 6974 2e0a 0a3d 6865 to use it...=he\n+00000ae0: 6164 3120 4f50 5449 4f4e 530a 0a3d 6f76 ad1 OPTIONS..=ov\n+00000af0: 6572 2038 0a0a 3d69 7465 6d20 423c 2d2d er 8..=item B<--\n+00000b00: 6765 6e65 7261 7465 3e2c 2042 3c2d 673e generate>, B<-g>\n+00000b10: 0a0a 2020 2020 6765 6e65 7261 7465 2061 .. generate a\n+00000b20: 2063 6f6e 6669 6720 6669 6c65 0a0a 3d69 config file..=i\n+00000b30: 7465 6d20 423c 2d2d 7072 696e 743e 0a0a tem B<--print>..\n+00000b40: 2020 2020 7072 696e 7420 636f 6e66 6967 print config\n+00000b50: 7572 6174 696f 6e20 7265 6164 2066 726f uration read fro\n+00000b60: 6d20 636f 6e66 6967 7572 6174 696f 6e20 m configuration \n+00000b70: 6669 6c65 2061 6e64 2073 746f 700a 0a3d file and stop..=\n+00000b80: 6974 656d 2042 3c2d 2d63 6f6e 6669 6746 item B<--configF\n+00000b90: 696c 653e 2c20 423c 2d66 3e0a 0a20 2020 ile>, B<-f>.. \n+00000ba0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f\n+00000bb0: 696c 6520 2869 6e73 7465 6164 206f 6620 ile (instead of \n+00000bc0: 6f72 0a20 2020 2061 6464 6974 696f 6e61 or. additiona\n+00000bd0: 6c6c 7920 746f 2070 6172 616d 6574 6572 lly to parameter\n+00000be0: 7329 0a0a 3d69 7465 6d20 423c 2d2d 6261 s)..=item B<--ba\n+00000bf0: 636b 7570 4469 723e 2046 3c62 6163 6b75 ckupDir> F, B<-b> \n+00000c10: 463c 6261 636b 7570 4469 7244 6972 3e0a F.\n+00000c20: 0a09 0920 2020 2074 6f70 206c 6576 656c ... top level\n+00000c30: 2064 6972 6563 746f 7279 206f 6620 616c directory of al\n+00000c40: 6c20 6261 636b 7570 730a 0a3d 6974 656d l backups..=item\n+00000c50: 2042 3c2d 2d73 6561 7263 6852 756c 653e B<--searchRule>\n+00000c60: 2c20 423c 2d73 3e0a 0a09 0920 2020 2072 , B<-s>.... r\n+00000c70: 756c 6520 666f 7220 7365 6172 6368 696e ule for searchin\n+00000c80: 670a 0909 2020 2020 7365 6520 5245 4144 g... see READ\n+00000c90: 4d45 3a20 2769 6e63 6c75 6469 6e67 202f ME: 'including /\n+00000ca0: 2065 7863 6c75 6469 6e67 2066 696c 6573 excluding files\n+00000cb0: 2061 6e64 2064 6972 6563 746f 7269 6573 and directories\n+00000cc0: 270a 0a3d 6974 656d 2042 3c2d 2d61 6273 '..=item B<--abs\n+00000cd0: 5061 7468 3e2c 2042 3c2d 613e 0a0a 2020 Path>, B<-a>.. \n+00000ce0: 2020 7772 6974 6520 7265 7375 6c74 2077 write result w\n+00000cf0: 6974 6820 6162 736f 6c75 7465 2070 6174 ith absolute pat\n+00000d00: 6820 6e61 6d65 730a 0a3d 6974 656d 2042 h names..=item B\n+00000d10: 3c2d 2d77 7269 7465 546f 4669 6c65 3e2c <--writeToFile>,\n+00000d20: 2042 3c2d 773e 0a0a 2020 2020 7772 6974 B<-w>.. writ\n+00000d30: 6520 7365 6172 6368 2072 6573 756c 7420 e search result \n+00000d40: 616c 736f 2074 6f20 6669 6c65 0a0a 3d69 also to file..=i\n+00000d50: 7465 6d20 423c 2d2d 7061 724a 6f62 733e tem B<--parJobs>\n+00000d60: 2c20 423c 2d70 3e0a 0a20 2020 206e 756d , B<-p>.. num\n+00000d70: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel \n+00000d80: 6a6f 6273 2c20 6465 6661 756c 7420 3d20 jobs, default = \n+00000d90: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic\n+00000da0: 616c 6c79 0a0a 3d69 7465 6d20 423c 2d2d ally..=item B<--\n+00000db0: 6465 6275 673e 2c20 423c 2d64 3e0a 0a20 debug>, B<-d>.. \n+00000dc0: 2020 2064 6562 7567 206c 6576 656c 2c20 debug level, \n+00000dd0: 706f 7373 6962 6c65 2076 616c 7565 7320 possible values \n+00000de0: 6172 6520 302c 2031 2c20 322c 2064 6566 are 0, 1, 2, def\n+00000df0: 6175 6c74 203d 2030 0a0a 3d69 7465 6d20 ault = 0..=item \n+00000e00: 423c 2d2d 6f6e 6365 3e2c 2042 3c2d 6f3e B<--once>, B<-o>\n+00000e10: 0a0a 2020 2020 7368 6f77 2065 7665 7279 .. show every\n+00000e20: 2066 696c 6520 666f 756e 6420 6f6e 6c79 file found only\n+00000e30: 206f 6e63 6520 2864 6570 656e 6469 6e67 once (depending\n+00000e40: 206f 6e20 6d64 3520 7375 6d29 0a0a 3d69 on md5 sum)..=i\n+00000e50: 7465 6d20 6261 636b 7570 526f 6f74 0a0a tem backupRoot..\n+00000e60: 2020 2020 526f 6f74 2064 6972 6563 746f Root directo\n+00000e70: 7269 6573 206f 6620 6261 636b 7570 7320 ries of backups \n+00000e80: 7768 6572 6520 746f 2073 6561 7263 6820 where to search \n+00000e90: 7265 6c61 7469 7665 0a20 2020 2074 6f20 relative. to \n+00000ea0: 6261 636b 7570 4469 722e 2049 6620 6e6f backupDir. If no\n+00000eb0: 2064 6972 6563 746f 7269 6573 2061 7265 directories are\n+00000ec0: 2073 7065 6369 6669 6564 2c20 616c 6c0a specified, all.\n+00000ed0: 2020 2020 6261 636b 7570 7320 6265 6c6f backups belo\n+00000ee0: 7720 6261 636b 7570 4469 7220 6172 6520 w backupDir are \n+00000ef0: 6368 6f73 656e 2e0a 0a3d 6261 636b 0a0a chosen...=back..\n+00000f00: 3d68 6561 6431 2043 4f50 5952 4947 4854 =head1 COPYRIGHT\n+00000f10: 0a0a 436f 7079 7269 6768 7420 2863 2920 ..Copyright (c) \n+00000f20: 3230 3038 2d32 3030 3920 6279 2048 6569 2008-2009 by Hei\n+00000f30: 6e7a 2d4a 6f73 6566 2043 6c61 6573 2028 nz-Josef Claes (\n+00000f40: 7365 6520 5245 4144 4d45 292e 0a50 7562 see README)..Pub\n+00000f50: 6c69 7368 6564 2075 6e64 6572 2074 6865 lished under the\n+00000f60: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub\n+00000f70: 6c69 6320 4c69 6365 6e73 6520 7633 206f lic License v3 o\n+00000f80: 7220 616e 7920 6c61 7465 7220 7665 7273 r any later vers\n+00000f90: 696f 6e0a 0a3d 6375 740a 0a6d 7920 2448 ion..=cut..my $H\n+00000fa0: 656c 7020 3d20 6a6f 696e 2827 272c 2067 elp = join('', g\n+00000fb0: 7265 7028 212f 5e5c 732a 242f 2c20 6070 rep(!/^\\s*$/, `p\n+00000fc0: 6f64 3274 6578 7420 2430 6029 293b 0a24 od2text $0`));.$\n+00000fd0: 4865 6c70 203d 2022 6361 6e6e 6f74 2066 Help = \"cannot f\n+00000fe0: 696e 6420 706f 6432 7465 7874 2c20 7365 ind pod2text, se\n+00000ff0: 6520 646f 6375 6d65 6e74 6174 696f 6e20 e documentation \n+00001000: 666f 7220 6465 7461 696c 735c 6e22 0a20 for details\\n\". \n+00001010: 2020 2075 6e6c 6573 7320 2448 656c 703b unless $Help;\n+00001020: 0a0a 6d79 2024 7465 6d70 6c61 7465 436f ..my $templateCo\n+00001030: 6e66 6967 4669 6c65 203d 203c 3c45 4f43 nfigFile = < &::SIZE(\"3M\")'\n+000015b0: 2061 6e64 2027 5c24 7569 6420 6571 2022 and '\\$uid eq \"\n+000015c0: 686a 6322 2720 2920 6f72 0a23 2020 2020 hjc\"' ) or.# \n+000015d0: 2820 275c 246d 7469 6d65 203e 2026 3a3a ( '\\$mtime > &::\n+000015e0: 4441 5445 2822 3364 3468 2229 2720 616e DATE(\"3d4h\")' an\n+000015f0: 6420 6e6f 7420 275c 2466 696c 6520 3d7e d not '\\$file =~\n+00001600: 206d 232f 746d 702f 2327 2029 270a 3b73 m#/tmp/#' )'.;s\n+00001610: 6561 7263 6852 756c 653d 0a0a 2320 726f earchRule=..# ro\n+00001620: 6f74 2064 6972 6563 746f 7279 206f 6620 ot directory of \n+00001630: 6261 636b 7570 2072 656c 6174 6976 6520 backup relative \n+00001640: 746f 2062 6163 6b75 7044 6972 2064 6972 to backupDir dir\n+00001650: 6563 746f 7279 0a3b 6261 636b 7570 526f ectory.;backupRo\n+00001660: 6f74 3d0a 0a23 2077 7269 7465 2072 6573 ot=..# write res\n+00001670: 756c 7420 7769 7468 2061 6273 6f6c 7574 ult with absolut\n+00001680: 6520 7061 7468 206e 616d 6573 0a23 2064 e path names.# d\n+00001690: 6566 6175 6c74 2069 7320 276e 6f27 2c20 efault is 'no', \n+000016a0: 706f 7373 6962 6c65 2076 616c 7565 7320 possible values \n+000016b0: 6172 6520 2779 6573 2720 616e 6420 276e are 'yes' and 'n\n+000016c0: 6f27 0a3b 6162 7350 6174 680a 0a23 2077 o'.;absPath..# w\n+000016d0: 7269 7465 2073 6561 7263 6820 7265 7375 rite search resu\n+000016e0: 6c74 2061 6c73 6f20 746f 2066 696c 650a lt also to file.\n+000016f0: 3b77 7269 7465 546f 4669 6c65 3d0a 0a23 ;writeToFile=..#\n+00001700: 206e 756d 6265 7220 6f66 2070 6172 616c number of paral\n+00001710: 6c65 6c20 6a6f 6273 2c20 6465 6661 756c lel jobs, defaul\n+00001720: 7420 3d20 6368 6f73 656e 2061 7574 6f6d t = chosen autom\n+00001730: 6174 6963 616c 6c79 0a3b 7061 724a 6f62 atically.;parJob\n+00001740: 733d 0a0a 2320 6465 6275 6720 6c65 7665 s=..# debug leve\n+00001750: 6c2c 2070 6f73 7369 626c 6520 7661 6c75 l, possible valu\n+00001760: 6573 2061 7265 2030 2c20 312c 2032 2c20 es are 0, 1, 2, \n+00001770: 6465 6661 756c 7420 3d20 300a 3b64 6562 default = 0.;deb\n+00001780: 7567 3d0a 0a23 2073 686f 7720 6576 6572 ug=..# show ever\n+00001790: 7920 666f 756e 6420 6669 6c65 206f 6e6c y found file onl\n+000017a0: 7920 6f6e 6365 2028 6465 7065 6e64 696e y once (dependin\n+000017b0: 6720 6f6e 206d 6435 2073 756d 290a 2320 g on md5 sum).# \n+000017c0: 6465 6661 756c 7420 6973 2027 6e6f 272c default is 'no',\n+000017d0: 2070 6f73 7369 626c 6520 7661 6c75 6573 possible values\n+000017e0: 2061 7265 2027 7965 7327 2061 6e64 2027 are 'yes' and '\n+000017f0: 6e6f 270a 3b6f 6e63 653d 0a45 4f43 0a20 no'.;once=.EOC. \n+00001800: 2020 203b 0a0a 0a26 7072 696e 7456 6572 ;...&printVer\n+00001810: 7369 6f6e 7328 5c40 4152 4756 2c20 272d sions(\\@ARGV, '-\n+00001820: 5627 293b 0a0a 6d79 2024 4368 6563 6b50 V');..my $CheckP\n+00001830: 6172 203d 0a20 2020 2043 6865 636b 5061 ar =. CheckPa\n+00001840: 7261 6d2d 3e6e 6577 2827 2d63 6f6e 6669 ram->new('-confi\n+00001850: 6746 696c 6527 203d 3e20 272d 6627 2c0a gFile' => '-f',.\n+00001860: 0909 2020 2020 272d 616c 6c6f 774c 6973 .. '-allowLis\n+00001870: 7473 2720 3d3e 2027 7965 7327 2c0a 0909 ts' => 'yes',...\n+00001880: 2020 2020 272d 6c69 7374 4d61 7070 696e '-listMappin\n+00001890: 6727 203d 3e20 2762 6163 6b75 7052 6f6f g' => 'backupRoo\n+000018a0: 7427 2c0a 0909 2020 2020 272d 6c69 7374 t',... '-list\n+000018b0: 2720 3d3e 205b 4f70 7469 6f6e 2d3e 6e65 ' => [Option->ne\n+000018c0: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co\n+000018d0: 6e66 6967 4669 6c65 272c 0a09 0909 0909 nfigFile',......\n+000018e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+000018f0: 203d 3e20 272d 6627 2c0a 0909 0909 0920 => '-f',...... \n+00001900: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+00001910: 3e20 272d 2d63 6f6e 6669 6746 696c 6527 > '--configFile'\n+00001920: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n+00001930: 616d 2720 3d3e 2027 7965 7327 292c 0a20 am' => 'yes'),. \n+00001940: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001950: 2020 2020 2020 2020 2020 2020 2020 204f O\n+00001960: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00001970: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate'\n+00001980: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001990: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g',\n+000019a0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+000019b0: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene\n+000019c0: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... \n+000019d0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+000019e0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+000019f0: 6c79 5f69 6627 203d 3e0a 276e 6f74 205b ly_if' =>.'not [\n+00001a00: 636f 6e66 6967 4669 6c65 5d20 616e 6420 configFile] and \n+00001a10: 6e6f 7420 5b62 6163 6b75 7044 6972 5d20 not [backupDir] \n+00001a20: 616e 6420 6e6f 7420 5b62 6163 6b75 7052 and not [backupR\n+00001a30: 6f6f 745d 2061 6e64 206e 6f74 205b 7365 oot] and not [se\n+00001a40: 6172 6368 5275 6c65 5d27 292c 0a20 2020 archRule]'),. \n+00001a50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001a60: 2020 2020 2020 2020 2020 2020 204f 7074 Opt\n+00001a70: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00001a80: 203d 3e20 2762 6163 6b75 7044 6972 272c => 'backupDir',\n+00001a90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00001aa0: 7074 696f 6e27 203d 3e20 272d 6227 2c0a ption' => '-b',.\n+00001ab0: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n+00001ac0: 6961 7327 203d 3e20 272d 2d62 6163 6b75 ias' => '--backu\n+00001ad0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n+00001ae0: 272d 6366 5f6b 6579 2720 3d3e 2027 6261 '-cf_key' => 'ba\n+00001af0: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... \n+00001b00: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n+00001b10: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n+00001b20: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001b30: 3e20 2773 6561 7263 6852 756c 6527 2c0a > 'searchRule',.\n+00001b40: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00001b50: 7469 6f6e 2720 3d3e 2027 2d73 272c 0a09 tion' => '-s',..\n+00001b60: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+00001b70: 6173 2720 3d3e 2027 2d2d 7365 6172 6368 as' => '--search\n+00001b80: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... \n+00001b90: 272d 6366 5f6b 6579 2720 3d3e 2027 7365 '-cf_key' => 'se\n+00001ba0: 6172 6368 5275 6c65 272c 0a09 0909 0909 archRule',......\n+00001bb0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n+00001bc0: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n+00001bd0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => \n+00001be0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n+00001bf0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+00001c00: 3d3e 2027 7772 6974 6541 6273 5061 7468 => 'writeAbsPath\n+00001c10: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001c20: 5f6f 7074 696f 6e27 203d 3e20 272d 6127 _option' => '-a'\n+00001c30: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001c40: 616c 6961 7327 203d 3e20 272d 2d61 6273 alias' => '--abs\n+00001c50: 5061 7468 272c 0a09 0909 0909 2020 2020 Path',...... \n+00001c60: 272d 6366 5f6b 6579 2720 3d3e 2027 6162 '-cf_key' => 'ab\n+00001c70: 7350 6174 6827 2c0a 0909 0909 0920 2020 sPath',...... \n+00001c80: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n+00001c90: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n+00001ca0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00001cb0: 6577 2827 2d6e 616d 6527 203d 3e20 2777 ew('-name' => 'w\n+00001cc0: 7269 7465 546f 4669 6c65 272c 0a09 0909 riteToFile',....\n+00001cd0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001ce0: 6e27 203d 3e20 272d 7727 2c0a 0909 0909 n' => '-w',.....\n+00001cf0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+00001d00: 203d 3e20 272d 2d77 7269 7465 546f 4669 => '--writeToFi\n+00001d10: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '-\n+00001d20: 6366 5f6b 6579 2720 3d3e 2027 7772 6974 cf_key' => 'writ\n+00001d30: 6554 6f46 696c 6527 2c0a 0909 0909 0920 eToFile',...... \n+00001d40: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n+00001d50: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n+00001d60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001d70: 3e20 2770 6172 4a6f 6273 272c 0a09 0909 > 'parJobs',....\n+00001d80: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001d90: 6e27 203d 3e20 272d 7027 2c0a 0909 0909 n' => '-p',.....\n+00001da0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+00001db0: 203d 3e20 272d 2d70 6172 4a6f 6273 272c => '--parJobs',\n+00001dc0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+00001dd0: 6579 2720 3d3e 2027 7061 724a 6f62 7327 ey' => 'parJobs'\n+00001de0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n+00001df0: 616d 2720 3d3e 2027 7965 7327 2c0a 0909 am' => 'yes',...\n+00001e00: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern\n+00001e10: 2720 3d3e 2027 5c41 5b31 2d39 5d5c 642a ' => '\\A[1-9]\\d*\n+00001e20: 5c5a 2729 2c0a 0909 0909 4f70 7469 6f6e \\Z'),.....Option\n+00001e30: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001e40: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... \n+00001e50: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+00001e60: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... \n+00001e70: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n+00001e80: 2027 2d2d 6465 6275 6727 2c0a 0909 0909 '--debug',.....\n+00001e90: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+00001ea0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',......\n+00001eb0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' =\n+00001ec0: 3e20 302c 0a09 0909 0909 2020 2020 272d > 0,...... '-\n+00001ed0: 7061 7474 6572 6e27 203d 3e20 275c 415b pattern' => '\\A[\n+00001ee0: 3031 325d 5c5a 2729 2c0a 0909 0909 4f70 012]\\Z'),.....Op\n+00001ef0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+00001f00: 2720 3d3e 2027 6f6e 6365 272c 0a09 0909 ' => 'once',....\n+00001f10: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001f20: 6e27 203d 3e20 272d 6f27 2c0a 0909 0909 n' => '-o',.....\n+00001f30: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+00001f40: 203d 3e20 272d 2d6f 6e63 6527 2c0a 0909 => '--once',...\n+00001f50: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+00001f60: 203d 3e20 276f 6e63 6527 2c0a 0909 0909 => 'once',.....\n+00001f70: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n+00001f80: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n+00001f90: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio\n+00001fa0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001fb0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',......\n+00001fc0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001fd0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),.\n+00001fe0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+00001ff0: 272d 6e61 6d65 2720 3d3e 2027 6261 636b '-name' => 'back\n+00002000: 7570 526f 6f74 272c 0a09 0909 0909 2020 upRoot',...... \n+00002010: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+00002020: 6261 636b 7570 526f 6f74 272c 0a09 0909 backupRoot',....\n+00002030: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n+00002040: 3e20 2779 6573 2729 2c0a 2320 6869 6464 > 'yes'),.# hidd\n+00002050: 656e 206f 7074 696f 6e73 0a09 0909 094f en options.....O\n+00002060: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00002070: 6527 203d 3e20 2770 7269 6e74 416c 6c27 e' => 'printAll'\n+00002080: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00002090: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr\n+000020a0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... \n+000020b0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => '\n+000020c0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n+000020d0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+000020e0: 3e20 2772 6561 644e 6f4c 696e 6573 272c > 'readNoLines',\n+000020f0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00002100: 7074 696f 6e27 203d 3e20 272d 2d72 6561 ption' => '--rea\n+00002110: 644e 6f4c 696e 6573 272c 0a09 0909 0909 dNoLines',......\n+00002120: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n+00002130: 2027 7265 6164 4e6f 4c69 6e65 7327 2c0a 'readNoLines',.\n+00002140: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde\n+00002150: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',....\n+00002160: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n+00002170: 203d 3e20 3230 3030 3029 0a09 0920 2020 => 20000)... \n+00002180: 205d 0a20 2020 2029 3b0a 0a0a 2443 6865 ]. );...$Che\n+00002190: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a\n+000021a0: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \\@ARGV,.\n+000021b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000021c0: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel\n+000021d0: 700a 2020 2020 2020 2020 2020 2020 2020 p. \n+000021e0: 2020 2029 3b0a 0a23 2041 7573 7765 7274 );..# Auswert\n+000021f0: 756e 6720 6465 7220 5061 7261 6d65 7465 ung der Paramete\n+00002200: 720a 6d79 2024 636f 6e66 6967 4669 6c65 r.my $configFile\n+00002210: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00002220: 744f 7074 5769 7468 5061 7228 2763 6f6e tOptWithPar('con\n+00002230: 6669 6746 696c 6527 293b 0a6d 7920 2467 figFile');.my $g\n+00002240: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil\n+00002250: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n+00002260: 6574 4f70 7457 6974 6850 6172 2827 6765 etOptWithPar('ge\n+00002270: 6e65 7261 7465 2729 3b0a 6d79 2024 7072 nerate');.my $pr\n+00002280: 696e 7420 3d20 2443 6865 636b 5061 722d int = $CheckPar-\n+00002290: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+000022a0: 7228 2770 7269 6e74 2729 3b0a 6d79 2024 r('print');.my $\n+000022b0: 6261 636b 7570 4469 7220 3d20 2443 6865 backupDir = $Che\n+000022c0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+000022d0: 6850 6172 2827 6261 636b 7570 4469 7227 hPar('backupDir'\n+000022e0: 293b 0a6d 7920 2477 7269 7465 546f 4669 );.my $writeToFi\n+000022f0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar->\n+00002300: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w\n+00002310: 7269 7465 546f 4669 6c65 2729 3b0a 6d79 riteToFile');.my\n+00002320: 2024 7365 6172 6368 5275 6c65 203d 2024 $searchRule = $\n+00002330: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00002340: 5769 7468 5061 7228 2773 6561 7263 6852 WithPar('searchR\n+00002350: 756c 6527 293b 2020 2020 2320 7665 6374 ule'); # vect\n+00002360: 6f72 0a6d 7920 2477 7269 7465 4162 7350 or.my $writeAbsP\n+00002370: 6174 6820 3d20 2443 6865 636b 5061 722d ath = $CheckPar-\n+00002380: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n+00002390: 7228 2777 7269 7465 4162 7350 6174 6827 r('writeAbsPath'\n+000023a0: 293b 0a6d 7920 2470 6172 4a6f 6273 203d );.my $parJobs =\n+000023b0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+000023c0: 7074 5769 7468 5061 7228 2770 6172 4a6f ptWithPar('parJo\n+000023d0: 6273 2729 3b0a 6d79 2024 6465 6275 6720 bs');.my $debug \n+000023e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000023f0: 4f70 7457 6974 6850 6172 2827 6465 6275 OptWithPar('debu\n+00002400: 6727 293b 0a6d 7920 246f 6e63 6520 3d20 g');.my $once = \n+00002410: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00002420: 7457 6974 686f 7574 5061 7228 276f 6e63 tWithoutPar('onc\n+00002430: 6527 293b 0a6d 7920 2840 6261 636b 7570 e');.my (@backup\n+00002440: 526f 6f74 2920 3d20 2443 6865 636b 5061 Root) = $CheckPa\n+00002450: 722d 3e67 6574 4c69 7374 5061 7228 293b r->getListPar();\n+00002460: 0a0a 6d79 2024 7072 696e 7441 6c6c 203d ..my $printAll =\n+00002470: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00002480: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr\n+00002490: 696e 7441 6c6c 2729 3b0a 2470 7269 6e74 intAll');.$print\n+000024a0: 203d 2031 2069 6620 2470 7269 6e74 416c = 1 if $printAl\n+000024b0: 6c3b 0a6d 7920 2472 6561 644e 6f4c 696e l;.my $readNoLin\n+000024c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n+000024d0: 6765 744f 7074 5769 7468 5061 7228 2772 getOptWithPar('r\n+000024e0: 6561 644e 6f4c 696e 6573 2729 3b0a 0a75 eadNoLines');..u\n+000024f0: 6e6c 6573 7320 2824 7061 724a 6f62 7329 nless ($parJobs)\n+00002500: 0a7b 0a20 2020 206c 6f63 616c 202a 4649 .{. local *FI\n+00002510: 4c45 3b0a 2020 2020 6966 2028 6f70 656e LE;. if (open\n+00002520: 2846 494c 452c 2022 2f70 726f 632f 6370 (FILE, \"/proc/cp\n+00002530: 7569 6e66 6f22 2929 0a20 2020 207b 0a09 uinfo\")). {..\n+00002540: 6d79 2024 6c3b 0a09 2470 6172 4a6f 6273 my $l;..$parJobs\n+00002550: 203d 2031 3b0a 0977 6869 6c65 2028 246c = 1;..while ($l\n+00002560: 203d 203c 4649 4c45 3e29 0a09 7b0a 0920 = )..{.. \n+00002570: 2020 2024 7061 724a 6f62 732b 2b20 6966 $parJobs++ if\n+00002580: 2024 6c20 3d7e 202f 7072 6f63 6573 736f $l =~ /processo\n+00002590: 722f 3b0a 097d 0a09 636c 6f73 6528 4649 r/;..}..close(FI\n+000025a0: 4c45 293b 0a20 2020 207d 0a20 2020 2024 LE);. }. $\n+000025b0: 7061 724a 6f62 7320 3d20 3220 6966 2024 parJobs = 2 if $\n+000025c0: 7061 724a 6f62 7320 3c20 323b 0a7d 0a0a parJobs < 2;.}..\n+000025d0: 6966 2028 2467 656e 6572 6174 6543 6f6e if ($generateCon\n+000025e0: 6669 6746 696c 6529 0a7b 0a20 2020 206d figFile).{. m\n+000025f0: 7920 2461 6e73 7765 7220 3d20 2779 6573 y $answer = 'yes\n+00002600: 273b 0a20 2020 2069 6620 282d 6520 2467 ';. if (-e $g\n+00002610: 656e 6572 6174 6543 6f6e 6669 6746 696c enerateConfigFil\n+00002620: 6529 0a20 2020 207b 0a09 646f 0a09 7b0a e). {..do..{.\n+00002630: 0920 2020 2070 7269 6e74 2022 3c24 6765 . print \"<$ge\n+00002640: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile\n+00002650: 3e20 616c 7265 6164 7920 6578 6973 7473 > already exists\n+00002660: 2e20 4f76 6572 7772 6974 653f 5c6e 222c . Overwrite?\\n\",\n+00002670: 0a09 2020 2020 2279 6573 202f 206e 6f20 .. \"yes / no \n+00002680: 2d3e 2022 3b0a 0920 2020 2024 616e 7377 -> \";.. $answ\n+00002690: 6572 203d 203c 5354 4449 4e3e 3b0a 0920 er = ;.. \n+000026a0: 2020 2063 686f 6d70 2024 616e 7377 6572 chomp $answer\n+000026b0: 3b0a 097d 2077 6869 6c65 2028 2461 6e73 ;..} while ($ans\n+000026c0: 7765 7220 6e65 2027 7965 7327 2061 6e64 wer ne 'yes' and\n+000026d0: 2024 616e 7377 6572 206e 6520 276e 6f27 $answer ne 'no'\n+000026e0: 293b 0a20 2020 207d 0a20 2020 2065 7869 );. }. exi\n+000026f0: 7420 3020 6966 2024 616e 7377 6572 2065 t 0 if $answer e\n+00002700: 7120 276e 6f27 3b0a 0a20 2020 206c 6f63 q 'no';.. loc\n+00002710: 616c 202a 4649 4c45 3b0a 2020 2020 6f70 al *FILE;. op\n+00002720: 656e 2846 494c 452c 2022 3e20 2467 656e en(FILE, \"> $gen\n+00002730: 6572 6174 6543 6f6e 6669 6746 696c 6522 erateConfigFile\"\n+00002740: 2920 6f72 0a09 6469 6520 2263 6f75 6c64 ) or..die \"could\n+00002750: 206e 6f74 2077 7269 7465 2074 6f20 3c24 not write to <$\n+00002760: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi\n+00002770: 6c65 3e22 3b0a 2020 2020 7072 696e 7420 le>\";. print \n+00002780: 4649 4c45 2024 7465 6d70 6c61 7465 436f FILE $templateCo\n+00002790: 6e66 6967 4669 6c65 3b0a 2020 2020 636c nfigFile;. cl\n+000027a0: 6f73 6528 4649 4c45 293b 0a20 2020 2065 ose(FILE);. e\n+000027b0: 7869 7420 303b 0a7d 0a0a 0a69 6620 2824 xit 0;.}...if ($\n+000027c0: 7072 696e 7429 0a7b 0a20 2020 2024 4368 print).{. $Ch\n+000027d0: 6563 6b50 6172 2d3e 7072 696e 7428 272d eckPar->print('-\n+000027e0: 7368 6f77 4869 6464 656e 2720 3d3e 2024 showHidden' => $\n+000027f0: 7072 696e 7441 6c6c 293b 0a7d 0a0a 6d79 printAll);.}..my\n+00002800: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL\n+00002810: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' \n+00002820: 3d3e 205b 2749 3a49 4e46 4f27 2c20 2757 => ['I:INFO', 'W\n+00002830: 3a57 4152 4e49 4e47 272c 2027 453a 4552 :WARNING', 'E:ER\n+00002840: 524f 5227 2c0a 0909 0909 2020 2020 2020 ROR',..... \n+00002850: 2753 3a53 5441 5449 5354 4943 272c 2027 'S:STATISTIC', '\n+00002860: 443a 4445 4255 4727 2c20 2756 3a56 4552 D:DEBUG', 'V:VER\n+00002870: 5349 4f4e 275d 293b 0a0a 2470 724c 6f67 SION']);..$prLog\n+00002880: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00002890: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. '\n+000028a0: 2d73 7472 2720 3d3e 205b 2224 5645 5253 -str' => [\"$VERS\n+000028b0: 494f 4e70 4e61 6d65 2c20 246d 6169 6e3a IONpName, $main:\n+000028c0: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS\n+000028d0: 494f 4e2c 2022 202e 0a09 0909 2022 6275 ION, \" ..... \"bu\n+000028e0: 696c 6420 2456 4552 5349 4f4e 7376 6e49 ild $VERSIONsvnI\n+000028f0: 4422 5d29 3b0a 0a24 7072 4c6f 672d 3e70 D\"]);..$prLog->p\n+00002900: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00002910: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n+00002920: 7227 203d 3e20 5b22 6d69 7373 696e 6720 r' => [\"missing \n+00002930: 7061 7261 6d65 7465 7273 2062 6163 6b75 parameters backu\n+00002940: 7044 6972 2061 6e64 2073 6561 7263 6852 pDir and searchR\n+00002950: 756c 655c 6e24 4865 6c70 225d 2c0a 0920 ule\\n$Help\"],.. \n+00002960: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n+00002970: 3129 0a20 2020 2075 6e6c 6573 7320 6465 1). unless de\n+00002980: 6669 6e65 6420 2462 6163 6b75 7044 6972 fined $backupDir\n+00002990: 2061 6e64 2064 6566 696e 6564 2024 7365 and defined $se\n+000029a0: 6172 6368 5275 6c65 3b0a 2470 724c 6f67 archRule;.$prLog\n+000029b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000029c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. '\n+000029d0: 2d73 7472 2720 3d3e 205b 226d 6973 7369 -str' => [\"missi\n+000029e0: 6e67 2070 6172 616d 6574 6572 2062 6163 ng parameter bac\n+000029f0: 6b75 7044 6972 5c6e 2448 656c 7022 5d2c kupDir\\n$Help\"],\n+00002a00: 0a09 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n+00002a10: 3d3e 2031 290a 2020 2020 756e 6c65 7373 => 1). unless\n+00002a20: 2064 6566 696e 6564 2024 6261 636b 7570 defined $backup\n+00002a30: 4469 723b 0a24 7072 4c6f 672d 3e70 7269 Dir;.$prLog->pri\n+00002a40: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00002a50: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n+00002a60: 203d 3e20 5b22 6261 636b 7570 4469 7220 => [\"backupDir \n+00002a70: 6469 7265 6374 6f72 7920 3c24 6261 636b directory <$back\n+00002a80: 7570 4469 723e 2064 6f65 7320 6e6f 7420 upDir> does not \n+00002a90: 6578 6973 7420 2220 2e0a 0920 2020 2020 exist \" ... \n+00002aa0: 2022 6f72 2069 7320 6e6f 7420 6163 6365 \"or is not acce\n+00002ab0: 7369 626c 6522 5d2c 0a09 2020 2020 2020 sible\"],.. \n+00002ac0: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). \n+00002ad0: 2020 756e 6c65 7373 202d 7220 2462 6163 unless -r $bac\n+00002ae0: 6b75 7044 6972 3b0a 2470 724c 6f67 2d3e kupDir;.$prLog->\n+00002af0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00002b00: 2027 4527 2c0a 0920 2020 2020 2027 2d73 'E',.. '-s\n+00002b10: 7472 2720 3d3e 205b 226d 6973 7369 6e67 tr' => [\"missing\n+00002b20: 2070 6172 616d 6574 6572 2073 6561 7263 parameter searc\n+00002b30: 6852 756c 655c 6e24 4865 6c70 225d 2c0a hRule\\n$Help\"],.\n+00002b40: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n+00002b50: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless \n+00002b60: 6465 6669 6e65 6420 2473 6561 7263 6852 defined $searchR\n+00002b70: 756c 653b 0a0a 0a6d 7920 2473 5275 6c65 ule;...my $sRule\n+00002b80: 203d 2065 7661 6c49 6e6f 6465 5275 6c65 = evalInodeRule\n+00002b90: 2d3e 6e65 7728 272d 6c69 6e65 2720 3d3e ->new('-line' =>\n+00002ba0: 2024 7365 6172 6368 5275 6c65 2c0a 0909 $searchRule,...\n+00002bb0: 0920 2020 2020 2020 272d 6b65 794e 616d . '-keyNam\n+00002bc0: 6527 203d 3e20 2773 6561 7263 6827 2c0a e' => 'search',.\n+00002bd0: 0909 0920 2020 2020 2020 272d 6465 6275 ... '-debu\n+00002be0: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,...\n+00002bf0: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog'\n+00002c00: 203d 3e20 2470 724c 6f67 293b 0a0a 2470 => $prLog);..$p\n+00002c10: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00002c20: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. \n+00002c30: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => [\"s\n+00002c40: 6561 7263 6869 6e67 2077 6974 6820 7275 earching with ru\n+00002c50: 6c65 222c 2027 2020 2720 2e0a 0909 0920 le\", ' ' ..... \n+00002c60: 6a6f 696e 2827 2027 2c20 407b 2473 5275 join(' ', @{$sRu\n+00002c70: 6c65 2d3e 6765 744c 696e 6528 297d 295d le->getLine()})]\n+00002c80: 293b 0a0a 6966 2028 2470 7269 6e74 290a );..if ($print).\n+00002c90: 7b0a 2020 2020 6578 6974 2030 3b0a 7d0a {. exit 0;.}.\n+00002ca0: 0a0a 6d79 2024 616c 6c4c 696e 6b73 203d ..my $allLinks =\n+00002cb0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new(\n+00002cc0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac\n+00002cd0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... \n+00002ce0: 2020 272d 6b69 6e64 2720 3d3e 2027 7265 '-kind' => 're\n+00002cf0: 6375 7273 6976 6553 6561 7263 6827 2c0a cursiveSearch',.\n+00002d00: 0909 0920 2020 2020 2027 2d76 6572 626f ... '-verbo\n+00002d10: 7365 2720 3d3e 2030 2c0a 0909 0920 2020 se' => 0,.... \n+00002d20: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+00002d30: 7072 4c6f 6729 3b0a 0a6d 7920 2461 6c6c prLog);..my $all\n+00002d40: 5374 6275 4469 7273 203d 2024 616c 6c4c StbuDirs = $allL\n+00002d50: 696e 6b73 2d3e 6765 7441 6c6c 5374 6f72 inks->getAllStor\n+00002d60: 6542 6163 6b75 7044 6972 7328 293b 0a0a eBackupDirs();..\n+00002d70: 0a23 2066 696c 7465 7220 7468 6520 7265 .# filter the re\n+00002d80: 6c65 7661 6e74 2062 6163 6b75 7073 0a6d levant backups.m\n+00002d90: 7920 2840 6469 7273 546f 5365 6172 6368 y (@dirsToSearch\n+00002da0: 2920 3d20 2829 3b0a 6966 2028 4062 6163 ) = ();.if (@bac\n+00002db0: 6b75 7052 6f6f 7429 0a7b 0a20 2020 206d kupRoot).{. m\n+00002dc0: 7920 2464 3b0a 2020 2020 666f 7265 6163 y $d;. foreac\n+00002dd0: 6820 2464 2028 4062 6163 6b75 7052 6f6f h $d (@backupRoo\n+00002de0: 7429 0a20 2020 207b 0a09 756e 6c65 7373 t). {..unless\n+00002df0: 2028 2464 203d 7e20 6d23 5c41 2f23 290a ($d =~ m#\\A/#).\n+00002e00: 097b 0a09 2020 2020 2464 203d 2022 2462 .{.. $d = \"$b\n+00002e10: 6163 6b75 7044 6972 2f24 6422 3b0a 097d ackupDir/$d\";..}\n+00002e20: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00002e30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00002e40: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00002e50: 3e20 5b22 6469 7265 6374 6f72 7920 3c24 > [\"directory <$\n+00002e60: 643e 2064 6f65 7320 6e6f 7420 6578 6973 d> does not exis\n+00002e70: 7420 2220 2e0a 0909 0909 2022 6f72 2069 t \" ...... \"or i\n+00002e80: 7320 6e6f 7420 6163 6365 7369 626c 6522 s not accesible\"\n+00002e90: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi\n+00002ea0: 7427 203d 3e20 3129 0a09 2020 2020 756e t' => 1).. un\n+00002eb0: 6c65 7373 202d 7220 2464 3b0a 0924 6420 less -r $d;..$d \n+00002ec0: 3d20 263a 3a61 6273 6f6c 7574 6550 6174 = &::absolutePat\n+00002ed0: 6828 2464 293b 0a09 2470 724c 6f67 2d3e h($d);..$prLog->\n+00002ee0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00002ef0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+00002f00: 7374 7227 203d 3e20 5b22 6469 7265 6374 str' => [\"direct\n+00002f10: 6f72 7920 3c24 643e 2069 7320 6e6f 7420 ory <$d> is not \n+00002f20: 6120 7375 6264 6972 6563 746f 7279 2022 a subdirectory \"\n+00002f30: 202e 0a09 0909 0920 226f 6620 6261 636b ...... \"of back\n+00002f40: 7570 4469 7220 3c24 6261 636b 7570 4469 upDir <$backupDi\n+00002f50: 723e 225d 2c0a 0909 2020 2020 2020 272d r>\"],... '-\n+00002f60: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n+00002f70: 2075 6e6c 6573 7320 2464 203d 7e20 2f5c unless $d =~ /\\\n+00002f80: 4124 6261 636b 7570 4469 722f 3b0a 0a09 A$backupDir/;...\n+00002f90: 2320 6e6f 7720 6765 7420 616c 6c20 6469 # now get all di\n+00002fa0: 7273 2066 726f 6d20 4024 616c 6c53 7462 rs from @$allStb\n+00002fb0: 7544 6972 7320 6265 6c6f 7720 2464 0a09 uDirs below $d..\n+00002fc0: 6d79 2024 613b 0a09 666f 7265 6163 6820 my $a;..foreach \n+00002fd0: 2461 2028 4024 616c 6c53 7462 7544 6972 $a (@$allStbuDir\n+00002fe0: 7329 0a09 7b0a 0920 2020 2070 7573 6820 s)..{.. push \n+00002ff0: 4064 6972 7354 6f53 6561 7263 682c 2024 @dirsToSearch, $\n+00003000: 610a 0909 6966 2024 6120 3d7e 202f 5c41 a...if $a =~ /\\A\n+00003010: 2464 5c2f 2f73 206f 7220 2461 203d 7e20 $d\\//s or $a =~ \n+00003020: 2f5c 4124 645c 7a2f 733b 0a09 7d0a 2020 /\\A$d\\z/s;..}. \n+00003030: 2020 7d0a 2020 2020 2840 6469 7273 546f }. (@dirsTo\n+00003040: 5365 6172 6368 2920 3d20 736f 7274 207b Search) = sort {\n+00003050: 2024 6120 636d 7020 2462 207d 2040 6469 $a cmp $b } @di\n+00003060: 7273 546f 5365 6172 6368 3b0a 7d0a 656c rsToSearch;.}.el\n+00003070: 7365 0a7b 0a20 2020 2028 4064 6972 7354 se.{. (@dirsT\n+00003080: 6f53 6561 7263 6829 203d 2073 6f72 7420 oSearch) = sort \n+00003090: 7b20 2461 2063 6d70 2024 6220 7d20 4024 { $a cmp $b } @$\n+000030a0: 616c 6c53 7462 7544 6972 733b 0a7d 0a0a allStbuDirs;.}..\n+000030b0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n+000030c0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+000030d0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+000030e0: 5b22 6e6f 7468 696e 6720 746f 2073 6561 [\"nothing to sea\n+000030f0: 7263 682c 206e 6f20 6261 636b 7570 2064 rch, no backup d\n+00003100: 6972 6563 746f 7269 6573 2073 7065 6369 irectories speci\n+00003110: 6669 6564 225d 2c0a 0920 2020 2020 2027 fied\"],.. '\n+00003120: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n+00003130: 2075 6e6c 6573 7320 4064 6972 7354 6f53 unless @dirsToS\n+00003140: 6561 7263 683b 0a0a 7b0a 2020 2020 6d79 earch;..{. my\n+00003150: 2028 406f 7574 2c20 2464 293b 0a20 2020 (@out, $d);. \n+00003160: 2066 6f72 6561 6368 2024 6420 2840 6469 foreach $d (@di\n+00003170: 7273 546f 5365 6172 6368 290a 2020 2020 rsToSearch). \n+00003180: 7b0a 0970 7573 6820 406f 7574 2c20 2220 {..push @out, \" \n+00003190: 2024 6422 3b0a 2020 2020 7d0a 2020 2020 $d\";. }. \n+000031a0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000031b0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+000031c0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => [\"ba\n+000031d0: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories\n+000031e0: 2074 6f20 7365 6172 6368 222c 2040 6f75 to search\", @ou\n+000031f0: 745d 293b 0a7d 0a0a 0a6d 7920 2470 6172 t]);.}...my $par\n+00003200: 466f 726b 203d 2070 6172 616c 6c65 6c46 Fork = parallelF\n+00003210: 6f72 6b2d 3e6e 6577 2827 2d6d 6178 5061 ork->new('-maxPa\n+00003220: 7261 6c6c 656c 2720 3d3e 2024 7061 724a rallel' => $parJ\n+00003230: 6f62 732c 0a09 0909 0927 2d70 724c 6f67 obs,.....'-prLog\n+00003240: 2720 3d3e 2024 7072 4c6f 6729 3b0a 6d79 ' => $prLog);.my\n+00003250: 2024 7469 6e79 5363 6865 6420 3d20 7469 $tinySched = ti\n+00003260: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler-\n+00003270: 3e6e 6577 2827 2d70 724c 6f67 2720 3d3e >new('-prLog' =>\n+00003280: 2024 7072 4c6f 6729 3b0a 0a23 0a23 2073 $prLog);..#.# s\n+00003290: 6561 7263 6820 7468 726f 7567 6820 616c earch through al\n+000032a0: 6c20 6469 7265 6374 6f72 6965 7320 696e l directories in\n+000032b0: 2040 6469 7273 546f 5365 6172 6368 0a23 @dirsToSearch.#\n+000032c0: 0a6c 6f63 616c 202a 4649 4c45 3b0a 6f70 .local *FILE;.op\n+000032d0: 656e 2846 494c 452c 2022 3e20 2477 7269 en(FILE, \"> $wri\n+000032e0: 7465 546f 4669 6c65 2229 206f 720a 2020 teToFile\") or. \n+000032f0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00003300: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00003310: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00003320: 6361 6e6e 6f74 206f 7065 6e20 3c24 7772 cannot open <$wr\n+00003330: 6974 6554 6f46 696c 653e 2066 6f72 2077 iteToFile> for w\n+00003340: 7269 7469 6e67 225d 2c0a 0909 2020 272d riting\"],... '-\n+00003350: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n+00003360: 6966 2024 7772 6974 6554 6f46 696c 653b if $writeToFile;\n+00003370: 0a6d 7920 2824 6469 7254 6f53 6561 7263 .my ($dirToSearc\n+00003380: 682c 2025 6f6e 6365 2c20 246e 652c 2024 h, %once, $ne, $\n+00003390: 6e62 2c20 2473 293b 0a66 6f72 6561 6368 nb, $s);.foreach\n+000033a0: 2024 6469 7254 6f53 6561 7263 6820 2840 $dirToSearch (@\n+000033b0: 6469 7273 546f 5365 6172 6368 290a 7b0a dirsToSearch).{.\n+000033c0: 2020 2020 756e 6c65 7373 2028 2d72 2022 unless (-r \"\n+000033d0: 2464 6972 546f 5365 6172 6368 2f24 6368 $dirToSearch/$ch\n+000033e0: 6563 6b53 756d 4669 6c65 2220 6f72 0a09 eckSumFile\" or..\n+000033f0: 2020 2020 2d72 2022 2464 6972 546f 5365 -r \"$dirToSe\n+00003400: 6172 6368 2f24 6368 6563 6b53 756d 4669 arch/$checkSumFi\n+00003410: 6c65 2e62 7a32 2229 0a20 2020 207b 0a09 le.bz2\"). {..\n+00003420: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00003430: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00003440: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00003450: 5b22 6e6f 2072 6561 6461 626c 6520 3c24 [\"no readable <$\n+00003460: 6368 6563 6b53 756d 4669 6c65 3e20 696e checkSumFile> in\n+00003470: 2022 202e 0a09 0909 0920 223c 2464 6972 \" ...... \"<$dir\n+00003480: 546f 5365 6172 6368 3e20 2e2e 2e20 736b ToSearch> ... sk\n+00003490: 6970 7069 6e67 225d 293b 0a09 6e65 7874 ipping\"]);..next\n+000034a0: 3b0a 2020 2020 7d0a 2020 2020 6966 2028 ;. }. if (\n+000034b0: 2d66 2022 2464 6972 546f 5365 6172 6368 -f \"$dirToSearch\n+000034c0: 2f24 6368 6563 6b53 756d 4669 6c65 2e6e /$checkSumFile.n\n+000034d0: 6f74 4669 6e69 7368 6564 2229 0a20 2020 otFinished\"). \n+000034e0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin\n+000034f0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00003500: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n+00003510: 203d 3e20 5b22 6261 636b 7570 203c 2464 => [\"backup <$d\n+00003520: 6972 546f 5365 6172 6368 3e20 6e6f 7420 irToSearch> not \n+00003530: 6669 6e69 7368 6564 2220 2e0a 0909 0909 finished\" ......\n+00003540: 2022 202e 2e2e 2073 6b69 7070 696e 6722 \" ... skipping\"\n+00003550: 5d29 3b0a 096e 6578 743b 0a20 2020 207d ]);..next;. }\n+00003560: 0a0a 2020 2020 246e 622b 2b3b 0a0a 2020 .. $nb++;.. \n+00003570: 2020 2473 203d 2022 3d3d 3d20 7365 6172 $s = \"=== sear\n+00003580: 6368 696e 6720 696e 203c 2464 6972 546f ching in <$dirTo\n+00003590: 5365 6172 6368 3e3a 5c6e 223b 0a20 2020 Search>:\\n\";. \n+000035a0: 200a 2020 2020 7072 696e 7420 2473 3b0a . print $s;.\n+000035b0: 2020 2020 7072 696e 7420 4649 4c45 2024 print FILE $\n+000035c0: 7320 6966 2024 7772 6974 6554 6f46 696c s if $writeToFil\n+000035d0: 6520 616e 6420 6e6f 7420 2477 7269 7465 e and not $write\n+000035e0: 4162 7350 6174 683b 0a0a 2020 2020 6d79 AbsPath;.. my\n+000035f0: 2024 7263 7366 203d 0a09 7265 6164 4368 $rcsf =..readCh\n+00003600: 6563 6b53 756d 4669 6c65 2d3e 6e65 7728 eckSumFile->new(\n+00003610: 272d 6368 6563 6b53 756d 4669 6c65 2720 '-checkSumFile' \n+00003620: 3d3e 2022 2464 6972 546f 5365 6172 6368 => \"$dirToSearch\n+00003630: 2f24 6368 6563 6b53 756d 4669 6c65 222c /$checkSumFile\",\n+00003640: 0a09 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n+00003650: 6727 203d 3e20 2470 724c 6f67 293b 0a23 g' => $prLog);.#\n+00003660: 2020 2020 6d79 2024 6d65 7461 203d 2024 my $meta = $\n+00003670: 7263 7366 2d3e 6765 744d 6574 6156 616c rcsf->getMetaVal\n+00003680: 4669 656c 6428 293b 0a23 2020 2020 6d79 Field();.# my\n+00003690: 2024 706f 7374 6669 7820 3d20 2824 246d $postfix = ($$m\n+000036a0: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})-\n+000036b0: 3e5b 305d 3b20 2020 2023 2070 6f73 7466 >[0]; # postf\n+000036c0: 6978 2066 6f72 2063 6f6d 7072 6573 7369 ix for compressi\n+000036d0: 6f6e 0a20 2020 206d 7920 2470 6f73 7466 on. my $postf\n+000036e0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI\n+000036f0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post\n+00003700: 6669 7827 293b 0a0a 2020 2020 6d79 2024 fix');.. my $\n+00003710: 6a6f 6254 6f44 6f20 3d20 313b 0a20 2020 jobToDo = 1;. \n+00003720: 206d 7920 2470 6172 466f 726b 546f 446f my $parForkToDo\n+00003730: 203d 2031 3b0a 2020 2020 7768 696c 6520 = 1;. while \n+00003740: 2824 6a6f 6254 6f44 6f20 3e20 3020 6f72 ($jobToDo > 0 or\n+00003750: 2024 7061 7246 6f72 6b54 6f44 6f20 3e20 $parForkToDo > \n+00003760: 3029 0a20 2020 207b 0a09 230a 0923 2063 0). {..#..# c\n+00003770: 6865 636b 2066 6f72 206a 6f62 7320 646f heck for jobs do\n+00003780: 6e65 0a09 230a 096d 7920 246f 6c64 203d ne..#..my $old =\n+00003790: 2024 7061 7246 6f72 6b2d 3e63 6865 636b $parFork->check\n+000037a0: 4f6e 6528 293b 0a09 6966 2028 246f 6c64 One();..if ($old\n+000037b0: 290a 097b 0a09 2020 2020 6d79 2024 746d )..{.. my $tm\n+000037c0: 704e 616d 6520 3d20 246f 6c64 2d3e 6765 pName = $old->ge\n+000037d0: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in\n+000037e0: 666f 2729 3b0a 0920 2020 206c 6f63 616c fo');.. local\n+000037f0: 202a 494e 3b0a 0920 2020 206f 7065 6e28 *IN;.. open(\n+00003800: 494e 2c20 2474 6d70 4e61 6d65 2920 6f72 IN, $tmpName) or\n+00003810: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n+00003820: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00003830: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n+00003840: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => [\"cannot ope\n+00003850: 6e20 7465 6d70 6f72 6172 7920 6669 6c65 n temporary file\n+00003860: 203c 2474 6d70 4e61 6d65 3e22 5d2c 0a09 <$tmpName>\"],..\n+00003870: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n+00003880: 3d3e 2031 293b 0a09 2020 2020 6d79 2024 => 1);.. my $\n+00003890: 6c3b 0a09 2020 2020 7768 696c 6520 2824 l;.. while ($\n+000038a0: 6c20 3d20 3c49 4e3e 290a 0920 2020 207b l = ).. {\n+000038b0: 0a09 0963 686f 7020 246c 3b0a 0909 6d79 ...chop $l;...my\n+000038c0: 2028 246d 6435 7375 6d2c 2024 7369 7a65 ($md5sum, $size\n+000038d0: 2c20 246d 6f64 652c 2024 6374 696d 652c , $mode, $ctime,\n+000038e0: 2024 6d74 696d 652c 2024 7569 642c 2024 $mtime, $uid, $\n+000038f0: 6769 642c 0a09 0920 2020 2024 6669 6c65 gid,... $file\n+00003900: 6e61 6d65 2920 3d20 7370 6c69 7428 2f5c name) = split(/\\\n+00003910: 732b 2f2c 2024 6c2c 2038 293b 0a0a 0909 s+/, $l, 8);....\n+00003920: 6966 2028 246f 6e63 6529 0a09 097b 0a09 if ($once)...{..\n+00003930: 0920 2020 206e 6578 7420 6966 2065 7869 . next if exi\n+00003940: 7374 7320 246f 6e63 657b 246d 6435 7375 sts $once{$md5su\n+00003950: 6d7d 3b0a 0909 2020 2020 246f 6e63 657b m};... $once{\n+00003960: 246d 6435 7375 6d7d 203d 2031 3b0a 0909 $md5sum} = 1;...\n+00003970: 7d0a 0a09 0924 6669 6c65 6e61 6d65 203d }....$filename =\n+00003980: 7e20 732f 5c5c 3041 2f5c 6e2f 6f67 3b20 ~ s/\\\\0A/\\n/og; \n+00003990: 2020 2023 2072 6573 746f 7265 2027 5c6e # restore '\\n\n+000039a0: 270a 0909 2466 696c 656e 616d 6520 3d7e '...$filename =~\n+000039b0: 2073 2f5c 5c35 432f 5c5c 2f6f 673b 2020 s/\\\\5C/\\\\/og; \n+000039c0: 2020 2320 7265 7374 6f72 6520 275c 5c27 # restore '\\\\'\n+000039d0: 0a0a 0909 6966 2028 2477 7269 7465 4162 ....if ($writeAb\n+000039e0: 7350 6174 6829 0a09 097b 0a09 0920 2020 sPath)...{... \n+000039f0: 2024 7320 3d20 2224 6469 7254 6f53 6561 $s = \"$dirToSea\n+00003a00: 7263 682f 2466 696c 656e 616d 655c 6e22 rch/$filename\\n\"\n+00003a10: 3b0a 0909 7d0a 0909 656c 7365 0a09 097b ;...}...else...{\n+00003a20: 0a09 0920 2020 2024 7320 3d20 2224 6669 ... $s = \"$fi\n+00003a30: 6c65 6e61 6d65 5c6e 223b 0a09 097d 0a0a lename\\n\";...}..\n+00003a40: 0909 7072 696e 7420 2473 3b0a 0909 7072 ..print $s;...pr\n+00003a50: 696e 7420 4649 4c45 2024 7320 6966 2024 int FILE $s if $\n+00003a60: 7772 6974 6554 6f46 696c 653b 0a09 2020 writeToFile;.. \n+00003a70: 2020 7d0a 0920 2020 2063 6c6f 7365 2849 }.. close(I\n+00003a80: 4e29 3b0a 0920 2020 2075 6e6c 696e 6b20 N);.. unlink \n+00003a90: 2474 6d70 4e61 6d65 3b0a 097d 0a0a 0923 $tmpName;..}...#\n+00003aa0: 0a09 2320 7374 6172 7420 6120 6e65 7720 ..# start a new \n+00003ab0: 6a6f 620a 0923 0a09 6966 2028 246a 6f62 job..#..if ($job\n+00003ac0: 546f 446f 203e 2030 2061 6e64 2024 7061 ToDo > 0 and $pa\n+00003ad0: 7246 6f72 6b2d 3e67 6574 4e6f 4672 6565 rFork->getNoFree\n+00003ae0: 456e 7472 6965 7328 2920 3e20 3029 0a09 Entries() > 0)..\n+00003af0: 7b0a 0920 2020 206d 7920 2840 6c69 6e65 {.. my (@line\n+00003b00: 4275 6666 6572 2c20 2469 293b 0a09 2020 Buffer, $i);.. \n+00003b10: 2020 6d79 2024 646f 6e65 203d 2030 3b0a my $done = 0;.\n+00003b20: 0920 2020 2023 2072 6561 6420 2472 6561 . # read $rea\n+00003b30: 644e 6f4c 696e 6573 206c 696e 6573 0a09 dNoLines lines..\n+00003b40: 2020 2020 666f 7220 2824 646f 6e65 203d for ($done =\n+00003b50: 2024 6920 3d20 3020 3b20 2469 203c 2024 $i = 0 ; $i < $\n+00003b60: 7265 6164 4e6f 4c69 6e65 7320 3b20 2469 readNoLines ; $i\n+00003b70: 2b2b 290a 0920 2020 207b 0a09 096d 7920 ++).. {...my \n+00003b80: 246c 203d 2024 7263 7366 2d3e 6e65 7874 $l = $rcsf->next\n+00003b90: 4269 6e4c 696e 6528 293b 0a09 0975 6e6c BinLine();...unl\n+00003ba0: 6573 7320 2824 6c29 0a09 097b 0a09 0920 ess ($l)...{... \n+00003bb0: 2020 2024 646f 6e65 203d 2031 3b0a 0909 $done = 1;...\n+00003bc0: 2020 2020 6c61 7374 3b0a 0909 7d0a 0909 last;...}...\n+00003bd0: 246e 652b 2b3b 0a09 0970 7573 6820 406c $ne++;...push @l\n+00003be0: 696e 6542 7566 6665 722c 2024 6c3b 0a09 ineBuffer, $l;..\n+00003bf0: 2020 2020 7d0a 0920 2020 2024 6a6f 6254 }.. $jobT\n+00003c00: 6f44 6f20 3d20 406c 696e 6542 7566 6665 oDo = @lineBuffe\n+00003c10: 723b 0a09 2020 2020 6d79 2024 746d 704e r;.. my $tmpN\n+00003c20: 616d 6520 3d20 263a 3a75 6e69 7146 696c ame = &::uniqFil\n+00003c30: 654e 616d 6528 222f 746d 702f 7374 6f72 eName(\"/tmp/stor\n+00003c40: 6542 6163 6b75 7053 6561 7263 682d 2229 eBackupSearch-\")\n+00003c50: 3b0a 0a09 2020 2020 6966 2028 246a 6f62 ;... if ($job\n+00003c60: 546f 446f 290a 0920 2020 207b 0a09 0924 ToDo).. {...$\n+00003c70: 7061 7246 6f72 6b2d 3e61 6464 5f6e 6f62 parFork->add_nob\n+00003c80: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function'\n+00003c90: 203d 3e20 5c26 6368 6563 6b52 756c 652c => \\&checkRule,\n+00003ca0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun\n+00003cb0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... \n+00003cc0: 2020 205b 2473 5275 6c65 2c20 5c40 6c69 [$sRule, \\@li\n+00003cd0: 6e65 4275 6666 6572 2c20 2470 724c 6f67 neBuffer, $prLog\n+00003ce0: 2c20 2463 6865 636b 5375 6d46 696c 652c , $checkSumFile,\n+00003cf0: 0a09 0909 0920 2020 2020 2020 2474 6d70 ..... $tmp\n+00003d00: 4e61 6d65 5d2c 0a09 0909 0920 2020 2020 Name],..... \n+00003d10: 2027 2d69 6e66 6f27 203d 3e20 2474 6d70 '-info' => $tmp\n+00003d20: 4e61 6d65 293b 0a09 0924 7469 6e79 5363 Name);...$tinySc\n+00003d30: 6865 642d 3e72 6573 6574 2829 3b0a 0920 hed->reset();.. \n+00003d40: 2020 207d 0a09 7d0a 0a09 230a 0923 2077 }..}...#..# w\n+00003d50: 6169 7420 0a09 230a 0924 7469 6e79 5363 ait ..#..$tinySc\n+00003d60: 6865 642d 3e77 6169 7428 293b 0a0a 0924 hed->wait();...$\n+00003d70: 7061 7246 6f72 6b54 6f44 6f20 3d20 2470 parForkToDo = $p\n+00003d80: 6172 466f 726b 2d3e 6765 744e 6f55 7365 arFork->getNoUse\n+00003d90: 6445 6e74 7269 6573 2829 3b0a 2020 2020 dEntries();. \n+00003da0: 7d0a 7d0a 636c 6f73 6528 4649 4c45 2920 }.}.close(FILE) \n+00003db0: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p\n+00003dc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00003dd0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n+00003de0: 3d3e 205b 2263 616e 6e6f 7420 636c 6f73 => [\"cannot clos\n+00003df0: 6520 3c24 7772 6974 6554 6f46 696c 653e e <$writeToFile>\n+00003e00: 225d 2c0a 0909 2020 272d 6578 6974 2720 \"],... '-exit' \n+00003e10: 3d3e 2031 290a 2020 2020 6966 2024 7772 => 1). if $wr\n+00003e20: 6974 6554 6f46 696c 653b 0a0a 6d79 2024 iteToFile;..my $\n+00003e30: 7320 3d20 2727 3b0a 2473 203d 2022 2c20 s = '';.$s = \", \n+00003e40: 736b 6970 7065 6420 2220 2e20 7363 616c skipped \" . scal\n+00003e50: 6172 2040 6469 7273 546f 5365 6172 6368 ar @dirsToSearch\n+00003e60: 202d 2024 6e62 202e 2022 2062 6163 6b75 - $nb . \" backu\n+00003e70: 7028 7329 220a 2020 2020 6966 2040 6469 p(s)\". if @di\n+00003e80: 7273 546f 5365 6172 6368 203e 2024 6e62 rsToSearch > $nb\n+00003e90: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print(\n+00003ea0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+00003eb0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n+00003ec0: 205b 2263 6865 636b 6564 2024 6e65 2065 [\"checked $ne e\n+00003ed0: 6e74 7269 6573 2069 6e20 246e 6220 6261 ntries in $nb ba\n+00003ee0: 636b 7570 7324 7322 5d29 3b0a 0a65 7869 ckups$s\"]);..exi\n+00003ef0: 7420 303b 0a0a 0a0a 2323 2323 2323 2323 t 0;....########\n+00003f00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003f10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003f20: 0a73 7562 2063 6865 636b 5275 6c65 0a7b .sub checkRule.{\n+00003f30: 0a20 2020 206d 7920 2473 5275 6c65 203d . my $sRule =\n+00003f40: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $\n+00003f50: 6c69 7374 4f66 4669 6c65 7320 3d20 7368 listOfFiles = sh\n+00003f60: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL\n+00003f70: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. \n+00003f80: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile\n+00003f90: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n+00003fa0: 2024 746d 7066 696c 6520 3d20 7368 6966 $tmpfile = shif\n+00003fb0: 743b 0a0a 2020 2020 6c6f 6361 6c20 2a4f t;.. local *O\n+00003fc0: 5554 3b0a 2020 2020 756e 6c65 7373 2028 UT;. unless (\n+00003fd0: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, \"> $tm\n+00003fe0: 7066 696c 6522 2929 0a20 2020 207b 0a09 pfile\")). {..\n+00003ff0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00004000: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00004010: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00004020: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 [\"cannot open te\n+00004030: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t\n+00004040: 6d70 6669 6c65 3e22 5d29 3b0a 0972 6574 mpfile>\"]);..ret\n+00004050: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; \n+00004060: 2020 2020 2020 2020 2020 2020 2020 2023 #\n+00004070: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. \n+00004080: 2020 6d79 2028 246c 293b 0a20 2020 206d my ($l);. m\n+00004090: 7920 2825 7479 7065 2920 3d20 2827 6469 y (%type) = ('di\n+000040a0: 7227 203d 3e20 2764 272c 0a09 0920 2027 r' => 'd',... '\n+000040b0: 7379 6d6c 696e 6b27 203d 3e20 276c 272c symlink' => 'l',\n+000040c0: 0a09 0920 2027 7069 7065 2720 3d3e 2027 ... 'pipe' => '\n+000040d0: 7027 2c0a 0909 2020 2773 6f63 6b65 7427 p',... 'socket'\n+000040e0: 203d 3e20 2773 272c 0a09 0920 2027 626c => 's',... 'bl\n+000040f0: 6f63 6b64 6576 2720 3d3e 2027 6227 2c0a ockdev' => 'b',.\n+00004100: 0909 2020 2763 6861 7264 6576 2720 3d3e .. 'chardev' =>\n+00004110: 2027 6327 293b 0a20 2020 206d 7920 2824 'c');. my ($\n+00004120: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n+00004130: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n+00004140: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n+00004150: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime,\n+00004160: 0a09 2473 697a 652c 2024 7569 642c 2024 ..$size, $uid, $\n+00004170: 6769 642c 2024 6d6f 6465 2c20 2466 696c gid, $mode, $fil\n+00004180: 656e 616d 6529 3b0a 2020 2020 666f 7265 ename);. fore\n+00004190: 6163 6820 246c 2028 4024 6c69 7374 4f66 ach $l (@$listOf\n+000041a0: 4669 6c65 7329 0a20 2020 207b 0a09 6d79 Files). {..my\n+000041b0: 2028 4072 6574 2920 3d20 7265 6164 4368 (@ret) = readCh\n+000041c0: 6563 6b53 756d 4669 6c65 3a3a 6576 616c eckSumFile::eval\n+000041d0: 4269 6e4c 696e 6528 246c 2c20 2470 724c BinLine($l, $prL\n+000041e0: 6f67 2c20 2463 6865 636b 5375 6d46 696c og, $checkSumFil\n+000041f0: 6529 3b0a 096e 6578 7420 6966 2040 7265 e);..next if @re\n+00004200: 7420 213d 2031 323b 0a09 2824 6d64 3573 t != 12;..($md5s\n+00004210: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev\n+00004220: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac\n+00004230: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt\n+00004240: 696d 652c 2024 6174 696d 652c 0a09 2024 ime, $atime,.. $\n+00004250: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid\n+00004260: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena\n+00004270: 6d65 2920 3d20 4072 6574 3b0a 0a09 6d79 me) = @ret;...my\n+00004280: 2024 7479 7065 203d 2027 6627 3b0a 0924 $type = 'f';..$\n+00004290: 7479 7065 203d 2024 7479 7065 7b24 6d64 type = $type{$md\n+000042a0: 3573 756d 7d20 0969 6620 6578 6973 7473 5sum} .if exists\n+000042b0: 2024 7479 7065 7b24 6d64 3573 756d 7d3b $type{$md5sum};\n+000042c0: 0a09 6966 2028 2473 5275 6c65 2d3e 6368 ..if ($sRule->ch\n+000042d0: 6563 6b52 756c 6528 2466 696c 656e 616d eckRule($filenam\n+000042e0: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode,\n+000042f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n+00004300: 2024 7569 642c 0a09 0909 2020 2020 2020 $uid,.... \n+00004310: 2467 6964 2c20 2474 7970 6529 203d 3d20 $gid, $type) == \n+00004320: 3129 0a09 7b0a 0920 2020 2024 6669 6c65 1)..{.. $file\n+00004330: 6e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 name =~ s/\\\\/\\\\5\n+00004340: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\\\' \n+00004350: 7374 6f72 6564 2061 7320 5c35 430a 0920 stored as \\5C.. \n+00004360: 2020 2024 6669 6c65 6e61 6d65 203d 7e20 $filename =~ \n+00004370: 732f 5c6e 2f5c 5c30 412f 736f 673b 2020 s/\\n/\\\\0A/sog; \n+00004380: 2023 2027 5c6e 2720 7374 6f72 6564 2061 # '\\n' stored a\n+00004390: 7320 5c30 410a 0a09 2020 2020 7072 696e s \\0A... prin\n+000043a0: 7420 4f55 5420 2224 6d64 3573 756d 2024 t OUT \"$md5sum $\n+000043b0: 7369 7a65 2024 6d6f 6465 2024 6374 696d size $mode $ctim\n+000043c0: 6520 246d 7469 6d65 2024 7569 6420 2467 e $mtime $uid $g\n+000043d0: 6964 2024 6669 6c65 6e61 6d65 5c6e 223b id $filename\\n\";\n+000043e0: 0a09 7d0a 2020 2020 7d0a 0a20 2020 2063 ..}. }.. c\n+000043f0: 6c6f 7365 284f 5554 293b 0a0a 2020 2020 lose(OUT);.. \n+00004400: 7265 7475 726e 2030 3b0a 7d0a return 0;.}.\n"}, {"source1": "./usr/bin/storeBackupUpdateBackup", "source2": "./usr/bin/storeBackupUpdateBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1886 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7055 7064 6174 6542 6163 6b75 700a pUpdateBackup.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 382d 3230 3132 290a 2320 2020 2020 2020 8-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T\n+00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f\n+00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo\n+00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu\n+000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod\n+000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under\n+000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th\n+000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n+000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as \n+000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# \n+00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa\n+00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e\n+00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 \n+00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, \n+00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your \n+00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late\n+00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# \n+00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is \n+00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t\n+00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it \n+000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,.\n+000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT \n+000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi\n+000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i\n+000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty \n+000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA\n+00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES\n+00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL\n+00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See\n+00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen\n+00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice\n+00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det\n+00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You \n+00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece\n+00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t\n+00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P\n+000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# \n+000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi\n+000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n\n+000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...use \n+00000300: 504f 5349 583b 0a75 7365 2073 7472 6963 POSIX;.use stric\n+00000310: 743b 0a75 7365 2077 6172 6e69 6e67 733b t;.use warnings;\n+00000320: 0a0a 7573 6520 4663 6e74 6c20 7177 284f ..use Fcntl qw(O\n+00000330: 5f52 4457 5220 4f5f 4352 4541 5429 3b0a _RDWR O_CREAT);.\n+00000340: 7573 6520 504f 5349 583b 0a0a 6d79 2024 use POSIX;..my $\n+00000350: 5645 5253 494f 4e20 3d20 2724 4964 3a20 VERSION = '$Id: \n+00000360: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat\n+00000370: 6542 6163 6b75 702e 706c 2033 3434 2032 eBackup.pl 344 2\n+00000380: 3030 382d 3038 2d32 3620 3130 3a34 373a 008-08-26 10:47:\n+00000390: 3233 5a20 686a 6320 2420 273b 0a6f 7572 23Z hjc $ ';.our\n+000003a0: 2040 5645 5253 494f 4e3b 0a70 7573 6820 @VERSION;.push \n+000003b0: 4056 4552 5349 4f4e 2c20 2456 4552 5349 @VERSION, $VERSI\n+000003c0: 4f4e 3b0a 6d79 2028 2456 4552 5349 4f4e ON;.my ($VERSION\n+000003d0: 704e 616d 652c 2024 5645 5253 494f 4e73 pName, $VERSIONs\n+000003e0: 766e 4944 2920 3d20 2456 4552 5349 4f4e vnID) = $VERSION\n+000003f0: 203d 7e20 2f49 643a 5c73 2b28 5c53 2b29 =~ /Id:\\s+(\\S+)\n+00000400: 5c73 2b28 5c64 2b29 2f3b 0a24 6d61 696e \\s+(\\d+)/;.$main\n+00000410: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER\n+00000420: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;...\n+00000430: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. \n+00000440: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi\n+00000450: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir\n+00000460: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D\n+00000470: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein \n+00000480: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol\n+00000490: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis\n+000004a0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i\n+000004b0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). \n+000004c0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f\n+000004d0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my \n+000004e0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink\n+000004f0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i\n+00000500: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link,\n+00000510: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne \"/\")..\n+00000520: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~\n+00000530: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\\/]+$/$link\n+00000540: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e\n+00000550: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi\n+00000560: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. \n+00000570: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $\n+00000580: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi\n+00000590: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$\n+000005a0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = \"/$file\";\n+000005b0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n+000005c0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD\n+000005d0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR \"<$file> doe\n+000005e0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\\n\";\n+000005f0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }.\n+00000600: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= \"/.\n+00000610: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib\"; \n+00000620: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den \n+00000630: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. \n+00000640: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/\n+00000650: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch\n+00000660: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. \n+00000670: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir)\n+00000680: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD\n+00000690: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`;\n+000006a0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;.\n+000006b0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;.\n+000006c0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split\n+000006d0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir(\"$absDir\n+000006e0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file\"));. }.\n+000006f0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n+00000700: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR \"<$\n+00000710: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex\n+00000720: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\\n\";\n+00000730: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl\n+00000740: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. \n+00000750: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift\n+00000760: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return ('\n+00000770: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles\n+00000780: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\\//)\n+00000790: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa\n+000007a0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname..\n+000007b0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f\n+000007c0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ \n+000007d0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\\/(.*)$/s;\n+000007e0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' \n+000007f0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq '');\n+00000800: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000810: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls\n+00000820: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename.\n+00000830: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir\n+00000840: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my (\n+00000850: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = &\n+00000860: 6c69 6250 6174 6828 2430 293b 0a28 4049 libPath($0);.(@I\n+00000870: 4e43 2920 3d20 2824 7265 712c 2040 494e NC) = ($req, @IN\n+00000880: 4329 3b0a 0a72 6571 7569 7265 2027 7374 C);..require 'st\n+00000890: 6f72 6542 6163 6b75 704c 6962 2e70 6c27 oreBackupLib.pl'\n+000008a0: 3b0a 7265 7175 6972 6520 2763 6865 636b ;.require 'check\n+000008b0: 5061 7261 6d32 2e70 6c27 3b0a 7265 7175 Param2.pl';.requ\n+000008c0: 6972 6520 2763 6865 636b 4f62 6a50 6172 ire 'checkObjPar\n+000008d0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p\n+000008e0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir\n+000008f0: 6520 2776 6572 7369 6f6e 2e70 6c27 3b0a e 'version.pl';.\n+00000900: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo\n+00000910: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require \n+00000920: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re\n+00000930: 7175 6972 6520 2768 756d 616e 5265 6164 quire 'humanRead\n+00000940: 2e70 6c27 3b0a 0a6d 7920 246c 6f63 6b46 .pl';..my $lockF\n+00000950: 696c 6520 3d20 272f 746d 702f 7374 6f72 ile = '/tmp/stor\n+00000960: 6542 6163 6b75 702e 6c6f 636b 273b 2020 eBackup.lock'; \n+00000970: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value\n+00000980: 0a6d 7920 2463 6865 636b 5375 6d46 696c .my $checkSumFil\n+00000990: 6520 3d20 272e 6d64 3543 6865 636b 5375 e = '.md5CheckSu\n+000009a0: 6d73 273b 0a6d 7920 2462 6c6f 636b 4368 ms';.my $blockCh\n+000009b0: 6563 6b53 756d 4669 6c65 203d 2027 2e6d eckSumFile = '.m\n+000009c0: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n+000009d0: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME.\n+000009e0: 0a73 746f 7265 4261 636b 7570 5570 6461 .storeBackupUpda\n+000009f0: 7465 4261 636b 7570 2e70 6c20 2d20 7570 teBackup.pl - up\n+00000a00: 6461 7465 7320 2f20 6669 6e61 6c69 7a65 dates / finalize\n+00000a10: 7320 6261 636b 7570 7320 6372 6561 7465 s backups create\n+00000a20: 6420 6279 2073 746f 7265 4261 636b 7570 d by storeBackup\n+00000a30: 2e70 6c20 7769 7468 206f 7074 696f 6e20 .pl with option \n+00000a40: 2d2d 6c61 7465 4c69 6e6b 2c20 2d2d 6c61 --lateLink, --la\n+00000a50: 7465 436f 6d70 7265 7373 0a0a 3d68 6561 teCompress..=hea\n+00000a60: 6431 2053 594e 4f50 5349 530a 0a09 7374 d1 SYNOPSIS...st\n+00000a70: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB\n+00000a80: 6163 6b75 702e 706c 202d 6220 6261 636b ackup.pl -b back\n+00000a90: 7570 4469 7265 6374 6f72 7920 5b2d 2d61 upDirectory [--a\n+00000aa0: 7574 6f72 6570 6169 725d 0a09 2020 2020 utorepair].. \n+00000ab0: 2020 5b2d 2d70 7269 6e74 5d20 5b2d 2d76 [--print] [--v\n+00000ac0: 6572 626f 7365 5d20 5b2d 2d64 6562 7567 erbose] [--debug\n+00000ad0: 5d20 5b2d 2d6c 6f63 6b46 696c 655d 205b ] [--lockFile] [\n+00000ae0: 2d2d 6e6f 436f 6d70 7265 7373 5d0a 0920 --noCompress].. \n+00000af0: 2020 2020 205b 2d2d 7072 6f67 7265 7373 [--progress\n+00000b00: 5265 706f 7274 206e 756d 6265 725d 205b Report number] [\n+00000b10: 2d2d 6368 6563 6b4f 6e6c 795d 0a09 2020 --checkOnly].. \n+00000b20: 2020 2020 5b2d 2d6c 6f67 4669 6c65 0a09 [--logFile..\n+00000b30: 2020 2020 2020 205b 2d2d 7375 7070 7265 [--suppre\n+00000b40: 7373 5469 6d65 5d20 5b2d 6d20 6d61 7846 ssTime] [-m maxF\n+00000b50: 696c 656c 656e 5d0a 0920 2020 2020 2020 ilelen].. \n+00000b60: 5b5b 2d6e 206e 6f4f 664f 6c64 4669 6c65 [[-n noOfOldFile\n+00000b70: 735d 207c 205b 2d2d 7361 7665 4c6f 6773 s] | [--saveLogs\n+00000b80: 5d5d 0a09 2020 2020 2020 205b 2d2d 636f ]].. [--co\n+00000b90: 6d70 7265 7373 5769 7468 2063 6f6d 7072 mpressWith compr\n+00000ba0: 6573 7370 726f 675d 5d20 0a0a 0973 746f essprog]] ...sto\n+00000bb0: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa\n+00000bc0: 636b 7570 2e70 6c20 2d2d 696e 7465 7261 ckup.pl --intera\n+00000bd0: 6374 6976 6520 2d2d 6261 636b 7570 4469 ctive --backupDi\n+00000be0: 7220 746f 704c 6576 6c44 6972 0a09 2020 r topLevlDir.. \n+00000bf0: 2020 2020 5b2d 2d61 7574 6f72 6570 6169 [--autorepai\n+00000c00: 725d 205b 2d2d 7072 696e 745d 0a0a 3d68 r] [--print]..=h\n+00000c10: 6561 6431 2057 4152 4e49 4e47 0a0a 2020 ead1 WARNING.. \n+00000c20: 2121 2120 5553 4147 4520 494e 2050 4152 !!! USAGE IN PAR\n+00000c30: 414c 4c45 4c20 5749 5448 2073 746f 7265 ALLEL WITH store\n+00000c40: 4261 636b 7570 2e70 6c20 4341 4e20 4445 Backup.pl CAN DE\n+00000c50: 5354 524f 5920 594f 5552 2042 4143 4b55 STROY YOUR BACKU\n+00000c60: 5053 2021 2121 0a0a 3d68 6561 6431 204f PS !!!..=head1 O\n+00000c70: 5054 494f 4e53 0a0a 3d6f 7665 7220 380a PTIONS..=over 8.\n+00000c80: 0a3d 6974 656d 2042 3c2d 2d69 6e74 6572 .=item B<--inter\n+00000c90: 6163 7469 7665 3e2c 2042 3c2d 693e 0a0a active>, B<-i>..\n+00000ca0: 2020 2020 696e 7465 7261 6374 6976 6520 interactive \n+00000cb0: 6d6f 6465 2066 6f72 2072 6570 6172 696e mode for reparin\n+00000cc0: 6720 2f20 6465 6c65 7469 6e67 2063 7572 g / deleting cur\n+00000cd0: 7275 7074 6564 0a20 2020 2062 6163 6b75 rupted. backu\n+00000ce0: 7073 2063 7265 6174 6564 2077 6974 6820 ps created with \n+00000cf0: 6f70 7469 6f6e 2027 2d2d 6c61 7465 4c69 option '--lateLi\n+00000d00: 6e6b 7327 0a0a 3d69 7465 6d20 423c 2d2d nks'..=item B<--\n+00000d10: 6261 636b 7570 4469 723e 2c20 423c 2d62 backupDir>, B<-b\n+00000d20: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level\n+00000d30: 2064 6972 6563 746f 7279 206f 6620 616c directory of al\n+00000d40: 6c20 6261 636b 7570 7320 286d 7573 7420 l backups (must \n+00000d50: 6578 6973 7429 0a0a 3d69 7465 6d20 423c exist)..=item B<\n+00000d60: 2d2d 6175 746f 7265 7061 6972 3e2c 2042 --autorepair>, B\n+00000d70: 3c2d 613e 0a0a 2020 2020 7265 7061 6972 <-a>.. repair\n+00000d80: 2073 696d 706c 6520 696e 636f 6e73 6973 simple inconsis\n+00000d90: 7465 6e63 6965 7320 6175 746f 6d61 7469 tencies automati\n+00000da0: 6361 6c6c 7920 7769 7468 6f75 740a 2020 cally without. \n+00000db0: 2020 7265 7175 6573 7469 6e67 2074 6865 requesting the\n+00000dc0: 2061 6374 696f 6e0a 0a3d 6974 656d 2042 action..=item B\n+00000dd0: 3c2d 2d70 7269 6e74 3e0a 0a20 2020 2070 <--print>.. p\n+00000de0: 7269 6e74 2063 6f6e 6669 6775 7261 7469 rint configurati\n+00000df0: 6f6e 2072 6561 6420 6672 6f6d 2063 6f6e on read from con\n+00000e00: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file \n+00000e10: 616e 6420 7374 6f70 0a0a 3d69 7465 6d20 and stop..=item \n+00000e20: 423c 2d2d 7665 7262 6f73 653e 2c20 423c B<--verbose>, B<\n+00000e30: 2d76 3e0a 0a20 2020 2076 6572 626f 7365 -v>.. verbose\n+00000e40: 206d 6573 7361 6765 730a 0a3d 6974 656d messages..=item\n+00000e50: 2042 3c2d 2d64 6562 7567 3e2c 2042 3c2d B<--debug>, B<-\n+00000e60: 643e 0a0a 2020 2020 6765 6e65 7261 7465 d>.. generate\n+00000e70: 2064 6574 6169 6c65 6420 696e 666f 726d detailed inform\n+00000e80: 6174 696f 6e20 6162 6f75 7420 7468 6520 ation about the \n+00000e90: 6669 6c65 730a 2020 2020 7769 7468 2074 files. with t\n+00000ea0: 6865 206c 696e 6b69 6e67 2069 6e66 6f72 he linking infor\n+00000eb0: 6d61 7469 6f6e 2069 6e20 6974 0a0a 3d69 mation in it..=i\n+00000ec0: 7465 6d20 423c 2d2d 6c6f 636b 4669 6c65 tem B<--lockFile\n+00000ed0: 3e2c 2042 3c2d 4c3e 0a0a 2020 2020 6c6f >, B<-L>.. lo\n+00000ee0: 636b 2066 696c 652c 2069 6620 6578 6973 ck file, if exis\n+00000ef0: 742c 206e 6577 2069 6e73 7461 6e63 6573 t, new instances\n+00000f00: 2077 696c 6c20 6669 6e69 7368 2069 660a will finish if.\n+00000f10: 2020 2020 616e 206f 6c64 2069 7320 616c an old is al\n+00000f20: 7265 6164 7920 7275 6e6e 696e 670a 2020 ready running. \n+00000f30: 2020 4966 2073 6574 2074 6f20 7468 6520 If set to the \n+00000f40: 7361 6d65 2066 696c 6520 6173 2069 6e20 same file as in \n+00000f50: 7374 6f72 6542 6163 6b75 7020 6974 2077 storeBackup it w\n+00000f60: 696c 6c0a 2020 2020 7072 6576 656e 7420 ill. prevent \n+00000f70: 2470 726f 6720 6672 6f6d 2072 756e 6e69 $prog from runni\n+00000f80: 6e67 2069 6e20 7061 7261 6c6c 656c 0a20 ng in parallel. \n+00000f90: 2020 2074 6f20 7374 6f72 6542 6163 6b75 to storeBacku\n+00000fa0: 702c 2064 6566 6175 6c74 2069 7320 246c p, default is $l\n+00000fb0: 6f63 6b46 696c 650a 0a3d 6974 656d 2042 ockFile..=item B\n+00000fc0: 3c2d 2d6e 6f43 6f6d 7072 6573 733e 0a0a <--noCompress>..\n+00000fd0: 2020 2020 6d61 7869 6d61 6c20 6e75 6d62 maximal numb\n+00000fe0: 6572 206f 6620 7061 7261 6c6c 656c 2063 er of parallel c\n+00000ff0: 6f6d 7072 6573 7320 6f70 6572 6174 696f ompress operatio\n+00001000: 6e73 2c0a 2020 2020 6465 6661 756c 7420 ns,. default \n+00001010: 3d20 6368 6f73 656e 2061 7574 6f6d 6174 = chosen automat\n+00001020: 6963 616c 6c79 0a0a 3d69 7465 6d20 423c ically..=item B<\n+00001030: 2d2d 6368 6563 6b4f 6e6c 793e 2042 3c2d --checkOnly> B<-\n+00001040: 633e 0a0a 2020 2020 646f 206e 6f74 2070 c>.. do not p\n+00001050: 6572 666f 726d 2061 6e79 2061 6374 696f erform any actio\n+00001060: 6e2c 206f 6e6c 7920 6368 6563 6b20 636f n, only check co\n+00001070: 6e73 6973 7465 6e63 790a 0a3d 6974 656d nsistency..=item\n+00001080: 2042 3c2d 2d70 726f 6772 6573 7352 6570 B<--progressRep\n+00001090: 6f72 743e 0a0a 2020 2020 7072 696e 7420 ort>.. print \n+000010a0: 7072 6f67 7265 7373 2072 6570 6f72 743a progress report:\n+000010b0: 0a0a 3d6f 7665 7220 340a 0a3d 6974 656d ..=over 4..=item\n+000010c0: 2061 6674 6572 2065 6163 6820 276e 756d after each 'num\n+000010d0: 6265 7227 2066 696c 6573 2077 6865 6e20 ber' files when \n+000010e0: 636f 6d70 7265 7373 696e 670a 0a3d 6974 compressing..=it\n+000010f0: 656d 2061 6674 6572 2065 6163 6820 276e em after each 'n\n+00001100: 756d 6265 7220 2a20 3130 3030 2720 6669 umber * 1000' fi\n+00001110: 6c65 7320 7768 656e 206c 696e 6b69 6e67 les when linking\n+00001120: 0a0a 3d69 7465 6d20 6166 7465 7220 6561 ..=item after ea\n+00001130: 6368 2027 6e75 6d62 6572 202a 2031 3030 ch 'number * 100\n+00001140: 3030 2720 6669 6c65 7320 7768 656e 2070 00' files when p\n+00001150: 6572 666f 726d 696e 6720 6368 6d6f 640a erforming chmod.\n+00001160: 0a3d 6261 636b 0a0a 3d69 7465 6d20 423c .=back..=item B<\n+00001170: 2d2d 6c6f 6746 696c 653e 2c20 423c 2d6c --logFile>, B<-l\n+00001180: 3e0a 0a20 2020 206c 6f67 4669 6c65 2c20 >.. logFile, \n+00001190: 4465 6661 756c 743a 2073 7464 6f75 740a Default: stdout.\n+000011a0: 0a3d 6974 656d 2042 3c2d 2d73 7570 7072 .=item B<--suppr\n+000011b0: 6573 7354 696d 653e 0a0a 2020 2020 7375 essTime>.. su\n+000011c0: 7070 7265 7373 206f 7574 7075 7420 6f66 ppress output of\n+000011d0: 2074 696d 6520 696e 206c 6f67 6669 6c65 time in logfile\n+000011e0: 0a0a 3d69 7465 6d20 423c 2d2d 6d61 7846 ..=item B<--maxF\n+000011f0: 696c 656c 656e 3e2c 2042 3c2d 6d3e 0a0a ilelen>, B<-m>..\n+00001200: 2020 2020 6d61 7869 6d61 6c20 6c65 6e67 maximal leng\n+00001210: 7468 206f 6620 6c6f 6720 6669 6c65 2c20 th of log file, \n+00001220: 6465 6661 756c 7420 3d20 3165 360a 0a3d default = 1e6..=\n+00001230: 6974 656d 2042 3c2d 2d6e 6f4f 664f 6c64 item B<--noOfOld\n+00001240: 4669 6c65 733e 2c20 423c 2d6e 3e0a 0a20 Files>, B<-n>.. \n+00001250: 2020 206e 756d 6265 7220 6f66 206f 6c64 number of old\n+00001260: 206c 6f67 2066 696c 6573 2c20 6465 6661 log files, defa\n+00001270: 756c 7420 3d20 350a 0a3d 6974 656d 2042 ult = 5..=item B\n+00001280: 3c2d 2d73 6176 654c 6f67 733e 0a0a 2020 <--saveLogs>.. \n+00001290: 2020 7361 7665 206c 6f67 2066 696c 6573 save log files\n+000012a0: 2077 6974 6820 6461 7465 2061 6e64 2074 with date and t\n+000012b0: 696d 6520 696e 7374 6561 6420 6f66 2064 ime instead of d\n+000012c0: 656c 6574 696e 6720 7468 650a 2020 2020 eleting the. \n+000012d0: 6f6c 6420 2877 6974 6820 5b2d 6e6f 4f6c old (with [-noOl\n+000012e0: 6446 696c 6573 5d29 0a0a 3d69 7465 6d20 dFiles])..=item \n+000012f0: 423c 2d2d 636f 6d70 7265 7373 5769 7468 B<--compressWith\n+00001300: 3e0a 0a20 2020 2063 6f6d 7072 6573 7320 >.. compress \n+00001310: 7361 7665 6420 6c6f 6720 6669 6c65 7320 saved log files \n+00001320: 2865 2e67 2e20 7769 7468 2027 677a 6970 (e.g. with 'gzip\n+00001330: 202d 3927 292e 0a20 2020 2064 6566 6175 -9').. defau\n+00001340: 6c74 2069 7320 2762 7a69 7032 270a 0a3d lt is 'bzip2'..=\n+00001350: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP\n+00001360: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh\n+00001370: 7420 2863 2920 3230 3038 2c32 3031 3220 t (c) 2008,2012 \n+00001380: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C\n+00001390: 6c61 6573 2e0a 5075 626c 6973 6865 6420 laes..Published \n+000013a0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge\n+000013b0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n+000013c0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l\n+000013d0: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c\n+000013e0: 7574 0a0a 6d79 2024 4865 6c70 203d 206a ut..my $Help = j\n+000013f0: 6f69 6e28 2727 2c20 6772 6570 2821 2f5e oin('', grep(!/^\n+00001400: 5c73 2a24 2f2c 2060 706f 6432 7465 7874 \\s*$/, `pod2text\n+00001410: 2024 3060 2929 3b0a 2448 656c 7020 3d20 $0`));.$Help = \n+00001420: 2263 616e 6e6f 7420 6669 6e64 2070 6f64 \"cannot find pod\n+00001430: 3274 6578 742c 2073 6565 2064 6f63 756d 2text, see docum\n+00001440: 656e 7461 7469 6f6e 2066 6f72 2064 6574 entation for det\n+00001450: 6169 6c73 5c6e 220a 2020 2020 756e 6c65 ails\\n\". unle\n+00001460: 7373 2024 4865 6c70 3b0a 0a26 7072 696e ss $Help;..&prin\n+00001470: 7456 6572 7369 6f6e 7328 5c40 4152 4756 tVersions(\\@ARGV\n+00001480: 2c20 272d 5627 293b 0a0a 6d79 2024 7374 , '-V');..my $st\n+00001490: 6172 7444 6174 6520 3d20 6461 7465 546f artDate = dateTo\n+000014a0: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $\n+000014b0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C\n+000014c0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new('\n+000014d0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio\n+000014e0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+000014f0: 3e20 2762 6163 6b75 7044 6972 272c 0a09 > 'backupDir',..\n+00001500: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+00001510: 696f 6e27 203d 3e20 272d 6227 2c0a 0909 ion' => '-b',...\n+00001520: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n+00001530: 7327 203d 3e20 272d 2d62 6163 6b75 7044 s' => '--backupD\n+00001540: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '-\n+00001550: 6d75 7374 5f62 6527 203d 3e20 2779 6573 must_be' => 'yes\n+00001560: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+00001570: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n+00001580: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+00001590: 272d 6e61 6d65 2720 3d3e 2027 6175 746f '-name' => 'auto\n+000015a0: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... \n+000015b0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+000015c0: 3e20 272d 2d61 7574 6f72 6570 6169 7227 > '--autorepair'\n+000015d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+000015e0: 616c 6961 7327 203d 3e20 272d 6127 292c alias' => '-a'),\n+000015f0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00001600: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001610: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n\n+00001620: 616d 6527 203d 3e20 2770 7269 6e74 272c ame' => 'print',\n+00001630: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00001640: 7074 696f 6e27 203d 3e20 272d 2d70 7269 ption' => '--pri\n+00001650: 6e74 2729 2c0a 0909 0909 4f70 7469 6f6e nt'),.....Option\n+00001660: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001670: 2027 696e 7465 7261 6374 6976 6527 2c0a 'interactive',.\n+00001680: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00001690: 7469 6f6e 2720 3d3e 2027 2d69 272c 0a09 tion' => '-i',..\n+000016a0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+000016b0: 6173 2720 3d3e 2027 2d2d 696e 7465 7261 as' => '--intera\n+000016c0: 6374 6976 6527 292c 0a09 0909 094f 7074 ctive'),.....Opt\n+000016d0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+000016e0: 203d 3e20 276c 6f63 6b46 696c 6527 2c0a => 'lockFile',.\n+000016f0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00001700: 7469 6f6e 2720 3d3e 2027 2d4c 272c 0a20 tion' => '-L',. \n+00001710: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001720: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001730: 2020 2020 2020 2020 2020 2027 2d63 6c5f '-cl_\n+00001740: 616c 6961 7327 203d 3e20 272d 2d6c 6f63 alias' => '--loc\n+00001750: 6b46 696c 6527 2c0a 0909 0909 0920 2020 kFile',...... \n+00001760: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => '\n+00001770: 6e6f 7420 5b69 6e74 6572 6163 7469 7665 not [interactive\n+00001780: 5d27 2c0a 2020 2020 2020 2020 2020 2020 ]',. \n+00001790: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000017a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000017b0: 272d 6465 6661 756c 7427 203d 3e20 246c '-default' => $l\n+000017c0: 6f63 6b46 696c 6529 2c0a 0909 0909 4f70 ockFile),.....Op\n+000017d0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n+000017e0: 2720 3d3e 2027 6e6f 436f 6d70 7265 7373 ' => 'noCompress\n+000017f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001800: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6e _option' => '--n\n+00001810: 6f43 6f6d 7072 6573 7327 2c0a 0909 0909 oCompress',.....\n+00001820: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n+00001830: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... \n+00001840: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => '\n+00001850: 5c41 5b31 2d39 5d5c 642a 5c5a 2729 2c0a \\A[1-9]\\d*\\Z'),.\n+00001860: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+00001870: 272d 6e61 6d65 2720 3d3e 2027 6368 6563 '-name' => 'chec\n+00001880: 6b4f 6e6c 7927 2c0a 0909 0909 0920 2020 kOnly',...... \n+00001890: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+000018a0: 2027 2d63 272c 0a09 0909 0909 2020 2020 '-c',...... \n+000018b0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+000018c0: 2d2d 6368 6563 6b4f 6e6c 7927 2c0a 0909 --checkOnly',...\n+000018d0: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if\n+000018e0: 2720 3d3e 2027 6e6f 7420 5b69 6e74 6572 ' => 'not [inter\n+000018f0: 6163 7469 7665 5d27 292c 0a09 0909 094f active]'),.....O\n+00001900: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00001910: 6527 203d 3e20 2770 726f 6772 6573 7352 e' => 'progressR\n+00001920: 6570 6f72 7427 2c0a 0909 0909 0920 2020 eport',...... \n+00001930: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+00001940: 2027 2d2d 7072 6f67 7265 7373 5265 706f '--progressRepo\n+00001950: 7274 272c 0a09 0909 0909 2020 2020 272d rt',...... '-\n+00001960: 6465 6661 756c 7427 203d 3e20 302c 0a09 default' => 0,..\n+00001970: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n+00001980: 6e27 203d 3e20 275c 415c 642b 5c5a 2729 n' => '\\A\\d+\\Z')\n+00001990: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+000019a0: 7728 272d 6e61 6d65 2720 3d3e 2027 7665 w('-name' => 've\n+000019b0: 7262 6f73 6527 2c0a 0909 0909 0920 2020 rbose',...... \n+000019c0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+000019d0: 2027 2d76 272c 0a09 0909 0909 2020 2020 '-v',...... \n+000019e0: 272d 6f6e 6c79 5f69 6627 203d 3e20 276e '-only_if' => 'n\n+000019f0: 6f74 205b 696e 7465 7261 6374 6976 655d ot [interactive]\n+00001a00: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001a10: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7665 _alias' => '--ve\n+00001a20: 7262 6f73 6527 292c 0a09 0909 094f 7074 rbose'),.....Opt\n+00001a30: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00001a40: 203d 3e20 2764 6562 7567 272c 0a09 0909 => 'debug',....\n+00001a50: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001a60: 6e27 203d 3e20 272d 2d64 6562 7567 272c n' => '--debug',\n+00001a70: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00001a80: 7074 696f 6e27 203d 3e20 272d 6427 2c0a ption' => '-d',.\n+00001a90: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n+00001aa0: 6966 2720 3d3e 2027 6e6f 7420 5b69 6e74 if' => 'not [int\n+00001ab0: 6572 6163 7469 7665 5d27 292c 0a09 0909 eractive]'),....\n+00001ac0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+00001ad0: 616d 6527 203d 3e20 276c 6f67 4669 6c65 ame' => 'logFile\n+00001ae0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001af0: 5f6f 7074 696f 6e27 203d 3e20 272d 6c27 _option' => '-l'\n+00001b00: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001b10: 616c 6961 7327 203d 3e20 272d 2d6c 6f67 alias' => '--log\n+00001b20: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n+00001b30: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+00001b40: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+00001b50: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n+00001b60: 696e 7465 7261 6374 6976 655d 2729 2c0a interactive]'),.\n+00001b70: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+00001b80: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp\n+00001b90: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',......\n+00001ba0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001bb0: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT\n+00001bc0: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio\n+00001bd0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001be0: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',.\n+00001bf0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00001c00: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',..\n+00001c10: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n+00001c20: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil\n+00001c30: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... \n+00001c40: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e\n+00001c50: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa\n+00001c60: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\\A[e\\\n+00001c70: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\\Z',. \n+00001c80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001c90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001ca0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n+00001cb0: 3e22 5b6c 6f67 4669 6c65 5d22 292c 0a09 >\"[logFile]\"),..\n+00001cc0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+00001cd0: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO\n+00001ce0: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... \n+00001cf0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n+00001d00: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... \n+00001d10: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n+00001d20: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles\n+00001d30: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n+00001d40: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',..\n+00001d50: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n+00001d60: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\\A\\d+\\Z',\n+00001d70: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00001d80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001d90: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o\n+00001da0: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>\"[logF\n+00001db0: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]\"),. \n+00001dc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001dd0: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n+00001de0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00001df0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',......\n+00001e00: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001e10: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs'\n+00001e20: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+00001e30: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001e40: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+00001e50: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no'\n+00001e60: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+00001e70: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001e80: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+00001e90: 6f6e 6c79 5f69 6627 203d 3e20 225b 6c6f only_if' => \"[lo\n+00001ea0: 6746 696c 655d 2229 2c0a 2020 2020 2020 gFile]\"),. \n+00001eb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001ec0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+00001ed0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001ee0: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith',\n+00001ef0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00001f00: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com\n+00001f10: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',.....\n+00001f20: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n+00001f30: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. \n+00001f40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001f50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001f60: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul\n+00001f70: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. \n+00001f80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001f90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001fa0: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl\n+00001fb0: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>\"[logFil\n+00001fc0: 655d 2229 0a09 0909 095d 0a09 0920 2020 e]\").....]... \n+00001fd0: 2029 3b0a 0a24 4368 6563 6b50 6172 2d3e );..$CheckPar->\n+00001fe0: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' =>\n+00001ff0: 205c 4041 5247 562c 0a20 2020 2020 2020 \\@ARGV,. \n+00002000: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help\n+00002010: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. \n+00002020: 2020 2020 2020 2020 2020 2020 293b 0a0a );..\n+00002030: 2320 4175 7377 6572 7475 6e67 2064 6572 # Auswertung der\n+00002040: 2050 6172 616d 6574 6572 0a6d 7920 2461 Parameter.my $a\n+00002050: 7574 6f72 6570 6169 7220 3d20 2443 6865 utorepair = $Che\n+00002060: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00002070: 686f 7574 5061 7228 2761 7574 6f72 6570 houtPar('autorep\n+00002080: 6169 7227 293b 0a6d 7920 2470 7269 6e74 air');.my $print\n+00002090: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+000020a0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n+000020b0: 7072 696e 7427 293b 0a6d 7920 2469 6e74 print');.my $int\n+000020c0: 6572 6163 7469 7665 203d 2024 4368 6563 eractive = $Chec\n+000020d0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+000020e0: 6f75 7450 6172 2827 696e 7465 7261 6374 outPar('interact\n+000020f0: 6976 6527 293b 0a6d 7920 2476 6572 626f ive');.my $verbo\n+00002100: 7365 203d 2024 4368 6563 6b50 6172 2d3e se = $CheckPar->\n+00002110: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n+00002120: 2827 7665 7262 6f73 6527 293b 0a6d 7920 ('verbose');.my \n+00002130: 2464 6562 7567 203d 2024 4368 6563 6b50 $debug = $CheckP\n+00002140: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+00002150: 7450 6172 2827 6465 6275 6727 293b 0a24 tPar('debug');.$\n+00002160: 6c6f 636b 4669 6c65 203d 2024 4368 6563 lockFile = $Chec\n+00002170: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00002180: 5061 7228 276c 6f63 6b46 696c 6527 293b Par('lockFile');\n+00002190: 0a6d 7920 246e 6f43 6f6d 7072 6573 7320 .my $noCompress \n+000021a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000021b0: 4f70 7457 6974 6850 6172 2827 6e6f 436f OptWithPar('noCo\n+000021c0: 6d70 7265 7373 2729 3b0a 6d79 2024 6368 mpress');.my $ch\n+000021d0: 6563 6b4f 6e6c 7920 3d20 2443 6865 636b eckOnly = $Check\n+000021e0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n+000021f0: 7574 5061 7228 2763 6865 636b 4f6e 6c79 utPar('checkOnly\n+00002200: 2729 3b0a 6d79 2024 7072 6f67 7265 7373 ');.my $progress\n+00002210: 5265 706f 7274 203d 2024 4368 6563 6b50 Report = $CheckP\n+00002220: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00002230: 7228 2770 726f 6772 6573 7352 6570 6f72 r('progressRepor\n+00002240: 7427 293b 0a6d 7920 246c 6f67 4669 6c65 t');.my $logFile\n+00002250: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00002260: 744f 7074 5769 7468 5061 7228 276c 6f67 tOptWithPar('log\n+00002270: 4669 6c65 2729 3b0a 6d79 2024 7769 7468 File');.my $with\n+00002280: 5469 6d65 203d 206e 6f74 2024 4368 6563 Time = not $Chec\n+00002290: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+000022a0: 6f75 7450 6172 2827 7375 7070 7265 7373 outPar('suppress\n+000022b0: 5469 6d65 2729 3b0a 2477 6974 6854 696d Time');.$withTim\n+000022c0: 6520 3d20 2477 6974 6854 696d 6520 3f20 e = $withTime ? \n+000022d0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my\n+000022e0: 2024 6d61 7846 696c 656c 656e 203d 2024 $maxFilelen = $\n+000022f0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00002300: 5769 7468 5061 7228 276d 6178 4669 6c65 WithPar('maxFile\n+00002310: 6c65 6e27 293b 0a6d 7920 246e 6f4f 664f len');.my $noOfO\n+00002320: 6c64 4669 6c65 7320 3d20 2443 6865 636b ldFiles = $Check\n+00002330: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00002340: 6172 2827 6e6f 4f66 4f6c 6446 696c 6573 ar('noOfOldFiles\n+00002350: 2729 3b0a 6d79 2024 7361 7665 4c6f 6773 ');.my $saveLogs\n+00002360: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00002370: 744f 7074 5769 7468 5061 7228 2773 6176 tOptWithPar('sav\n+00002380: 654c 6f67 7327 293b 0a6d 7920 2463 6f6d eLogs');.my $com\n+00002390: 7072 6573 7357 6974 6820 3d20 2443 6865 pressWith = $Che\n+000023a0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+000023b0: 6850 6172 2827 636f 6d70 7265 7373 5769 hPar('compressWi\n+000023c0: 7468 2729 3b0a 6d79 2028 4062 6163 6b75 th');.my (@backu\n+000023d0: 7044 6972 7329 203d 2024 4368 6563 6b50 pDirs) = $CheckP\n+000023e0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+000023f0: 7228 2762 6163 6b75 7044 6972 2729 3b0a r('backupDir');.\n+00002400: 0a75 6e6c 6573 7320 2824 6e6f 436f 6d70 .unless ($noComp\n+00002410: 7265 7373 290a 7b0a 2020 2020 6c6f 6361 ress).{. loca\n+00002420: 6c20 2a46 494c 453b 0a20 2020 2069 6620 l *FILE;. if \n+00002430: 286f 7065 6e28 4649 4c45 2c20 222f 7072 (open(FILE, \"/pr\n+00002440: 6f63 2f63 7075 696e 666f 2229 290a 2020 oc/cpuinfo\")). \n+00002450: 2020 7b0a 096d 7920 246c 3b0a 0924 6e6f {..my $l;..$no\n+00002460: 436f 6d70 7265 7373 203d 2031 3b0a 0977 Compress = 1;..w\n+00002470: 6869 6c65 2028 246c 203d 203c 4649 4c45 hile ($l = )..{.. $noCo\n+00002490: 6d70 7265 7373 2b2b 2069 6620 246c 203d mpress++ if $l =\n+000024a0: 7e20 2f70 726f 6365 7373 6f72 2f3b 0a09 ~ /processor/;..\n+000024b0: 7d0a 0963 6c6f 7365 2846 494c 4529 3b0a }..close(FILE);.\n+000024c0: 2020 2020 7d0a 2020 2020 246e 6f43 6f6d }. $noCom\n+000024d0: 7072 6573 7320 3d20 3220 6966 2024 6e6f press = 2 if $no\n+000024e0: 436f 6d70 7265 7373 203c 2032 3b0a 7d0a Compress < 2;.}.\n+000024f0: 0a69 6620 2824 7072 696e 7429 0a7b 0a20 .if ($print).{. \n+00002500: 2020 2024 4368 6563 6b50 6172 2d3e 7072 $CheckPar->pr\n+00002510: 696e 7428 293b 0a20 2020 2065 7869 7420 int();. exit \n+00002520: 303b 0a7d 0a0a 6966 2028 2469 6e74 6572 0;.}..if ($inter\n+00002530: 6163 7469 7665 290a 7b0a 2020 2020 2476 active).{. $v\n+00002540: 6572 626f 7365 203d 2031 3b0a 2020 2020 erbose = 1;. \n+00002550: 2464 6562 7567 203d 2031 3b0a 7d0a 0a0a $debug = 1;.}...\n+00002560: 6966 2028 2469 6e74 6572 6163 7469 7665 if ($interactive\n+00002570: 290a 7b0a 2020 2020 6d79 2024 616e 7377 ).{. my $answ\n+00002580: 6572 3b0a 2020 2020 646f 0a20 2020 207b er;. do. {\n+00002590: 0a09 7072 696e 7420 225c 6e42 6566 6f72 ..print \"\\nBefor\n+000025a0: 6520 7472 7969 6e67 2074 6f20 7265 7061 e trying to repa\n+000025b0: 6972 2061 6e79 2064 616d 6167 6573 206f ir any damages o\n+000025c0: 6620 7468 6520 6261 636b 7570 5c6e 222c f the backup\\n\",\n+000025d0: 0a09 2279 6f75 2073 686f 756c 6420 6d61 ..\"you should ma\n+000025e0: 6b65 2061 2062 6163 6b75 7020 6f66 2074 ke a backup of t\n+000025f0: 6865 2066 696c 6573 2062 6565 696e 6720 he files beeing \n+00002600: 6d61 6e69 7075 6c61 7465 6420 6279 5c6e manipulated by\\n\n+00002610: 222c 0a09 2274 6869 7320 7072 6f67 7261 \",..\"this progra\n+00002620: 6d2e 2044 6f20 7468 6973 2062 7920 6567 m. Do this by eg\n+00002630: 2e20 6578 6563 7574 696e 675c 6e22 2c0a . executing\\n\",.\n+00002640: 0922 2320 7461 7220 6366 202f 7361 7665 .\"# tar cf /save\n+00002650: 506c 6163 652e 7461 7220 3c62 6163 6b75 Place.tar /..storeB\n+00002670: 6163 6b75 704c 696e 6b73 5c6e 222c 0a09 ackupLinks\\n\",..\n+00002680: 2266 6f72 2061 6c6c 2061 6666 6563 7465 \"for all affecte\n+00002690: 6420 6261 636b 7570 2064 6972 6563 746f d backup directo\n+000026a0: 7269 6573 206f 7220 7369 6d70 6c79 2061 ries or simply a\n+000026b0: 6c6c 206f 6620 796f 7572 2062 6163 6b75 ll of your backu\n+000026c0: 7073 2e5c 6e22 2c0a 0922 636f 6e74 696e ps.\\n\",..\"contin\n+000026d0: 7565 3f5c 6e22 2c0a 0922 7965 7320 2f20 ue?\\n\",..\"yes / \n+000026e0: 6e6f 2020 2d3e 2022 3b0a 0924 616e 7377 no -> \";..$answ\n+000026f0: 6572 203d 203c 5354 4449 4e3e 3b0a 0963 er = ;..c\n+00002700: 686f 6d70 2024 616e 7377 6572 3b0a 2020 homp $answer;. \n+00002710: 2020 7d20 7768 696c 6520 2824 616e 7377 } while ($answ\n+00002720: 6572 206e 6520 2779 6573 2720 616e 6420 er ne 'yes' and \n+00002730: 2461 6e73 7765 7220 6e65 2027 6e6f 2729 $answer ne 'no')\n+00002740: 3b0a 0a20 2020 2065 7869 7420 300a 0969 ;.. exit 0..i\n+00002750: 6620 2461 6e73 7765 7220 6571 2027 6e6f f $answer eq 'no\n+00002760: 273b 0a7d 0a0a 0a6d 7920 2840 7061 7229 ';.}...my (@par)\n+00002770: 203d 2028 293b 0a69 6620 2864 6566 696e = ();.if (defin\n+00002780: 6564 2024 6c6f 6746 696c 6529 0a7b 0a20 ed $logFile).{. \n+00002790: 2020 2070 7573 6820 4070 6172 2c20 2827 push @par, ('\n+000027a0: 2d66 696c 6527 203d 3e20 246c 6f67 4669 -file' => $logFi\n+000027b0: 6c65 2c0a 0909 272d 6d75 6c74 6970 7269 le,...'-multipri\n+000027c0: 6e74 2720 3d3e 2027 7965 7327 293b 0a7d nt' => 'yes');.}\n+000027d0: 0a65 6c73 650a 7b0a 2020 2020 7075 7368 .else.{. push\n+000027e0: 2040 7061 722c 2028 272d 6669 6c65 6465 @par, ('-filede\n+000027f0: 7363 7269 7074 6f72 272c 202a 5354 444f scriptor', *STDO\n+00002800: 5554 293b 0a7d 0a0a 6d79 2028 2470 724c UT);.}..my ($prL\n+00002810: 6f67 4b69 6e64 2920 3d20 5b27 413a 4245 ogKind) = ['A:BE\n+00002820: 4749 4e27 2c0a 0909 2020 2027 5a3a 454e GIN',... 'Z:EN\n+00002830: 4427 2c0a 0909 2020 2027 563a 5645 5253 D',... 'V:VERS\n+00002840: 494f 4e27 2c0a 0909 2020 2027 493a 494e ION',... 'I:IN\n+00002850: 464f 272c 0a09 0920 2020 2757 3a57 4152 FO',... 'W:WAR\n+00002860: 4e49 4e47 272c 0a09 0920 2020 2745 3a45 NING',... 'E:E\n+00002870: 5252 4f52 272c 0a09 0920 2020 2750 3a50 RROR',... 'P:P\n+00002880: 524f 4752 4553 5327 2c0a 0909 2020 2027 ROGRESS',... '\n+00002890: 533a 5354 4154 4953 5449 4327 2c0a 0909 S:STATISTIC',...\n+000028a0: 2020 2027 443a 4445 4255 4727 5d3b 0a6d 'D:DEBUG'];.m\n+000028b0: 7920 2470 724c 6f67 203d 2070 7269 6e74 y $prLog = print\n+000028c0: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind'\n+000028d0: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,.\n+000028e0: 0909 0920 2040 7061 722c 0a09 0909 2020 ... @par,.... \n+000028f0: 272d 7769 7468 5469 6d65 2720 3d3e 2024 '-withTime' => $\n+00002900: 7769 7468 5469 6d65 2c0a 0909 0920 2027 withTime,.... '\n+00002910: 2d6d 6178 4669 6c65 6c65 6e27 203d 3e20 -maxFilelen' => \n+00002920: 246d 6178 4669 6c65 6c65 6e2c 0a09 0909 $maxFilelen,....\n+00002930: 2020 272d 6e6f 4f66 4f6c 6446 696c 6573 '-noOfOldFiles\n+00002940: 2720 3d3e 2024 6e6f 4f66 4f6c 6446 696c ' => $noOfOldFil\n+00002950: 6573 2c0a 0909 0920 2027 2d73 6176 654c es,.... '-saveL\n+00002960: 6f67 7327 203d 3e20 2473 6176 654c 6f67 ogs' => $saveLog\n+00002970: 732c 0a09 0909 2020 272d 636f 6d70 7265 s,.... '-compre\n+00002980: 7373 5769 7468 2720 3d3e 2024 636f 6d70 ssWith' => $comp\n+00002990: 7265 7373 5769 7468 293b 0a0a 2470 724c ressWith);..$prL\n+000029a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+000029b0: 2720 3d3e 2027 4127 2c0a 0920 2020 2020 ' => 'A',.. \n+000029c0: 2027 2d73 7472 2720 3d3e 205b 2263 6865 '-str' => [\"che\n+000029d0: 636b 696e 6720 7265 6665 7265 6e63 6573 cking references\n+000029e0: 2069 6e20 3c40 6261 636b 7570 4469 7273 in <@backupDirs\n+000029f0: 3e22 5d29 3b0a 2470 724c 6f67 2d3e 7072 >\"]);.$prLog->pr\n+00002a00: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00002a10: 5627 2c0a 0920 2020 2020 2027 2d73 7472 V',.. '-str\n+00002a20: 2720 3d3e 205b 2224 5645 5253 494f 4e70 ' => [\"$VERSIONp\n+00002a30: 4e61 6d65 2c20 246d 6169 6e3a 3a53 544f Name, $main::STO\n+00002a40: 5245 4241 434b 5550 5645 5253 494f 4e2c REBACKUPVERSION,\n+00002a50: 2022 202e 0a09 0909 2022 6275 696c 6420 \" ..... \"build \n+00002a60: 2456 4552 5349 4f4e 7376 6e49 4422 5d29 $VERSIONsvnID\"])\n+00002a70: 3b0a 0a3a 3a63 6865 636b 4c6f 636b 4669 ;..::checkLockFi\n+00002a80: 6c65 2824 6c6f 636b 4669 6c65 2c20 2470 le($lockFile, $p\n+00002a90: 724c 6f67 293b 0a0a 6d79 2024 616c 6c4c rLog);..my $allL\n+00002aa0: 696e 6b73 203d 206c 6174 654c 696e 6b73 inks = lateLinks\n+00002ab0: 2d3e 6e65 7728 272d 6469 7273 2720 3d3e ->new('-dirs' =>\n+00002ac0: 205c 4062 6163 6b75 7044 6972 732c 0a09 \\@backupDirs,..\n+00002ad0: 0909 2020 2020 2020 272d 6b69 6e64 2720 .. '-kind' \n+00002ae0: 3d3e 2027 7265 6375 7273 6976 6553 6561 => 'recursiveSea\n+00002af0: 7263 6827 2c0a 0909 0920 2020 2020 2027 rch',.... '\n+00002b00: 2d63 6865 636b 4c69 6e6b 4672 6f6d 436f -checkLinkFromCo\n+00002b10: 6e73 6973 7465 6e63 7927 203d 3e20 312c nsistency' => 1,\n+00002b20: 0a09 0909 2020 2020 2020 272d 7665 7262 .... '-verb\n+00002b30: 6f73 6527 203d 3e20 2476 6572 626f 7365 ose' => $verbose\n+00002b40: 2c0a 0909 0920 2020 2020 2027 2d64 6562 ,.... '-deb\n+00002b50: 7567 2720 3d3e 2024 6465 6275 672c 0a09 ug' => $debug,..\n+00002b60: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog'\n+00002b70: 203d 3e20 2470 724c 6f67 2c0a 0909 0920 => $prLog,.... \n+00002b80: 2020 2020 2027 2d69 6e74 6572 6163 7469 '-interacti\n+00002b90: 7665 2720 3d3e 2024 696e 7465 7261 6374 ve' => $interact\n+00002ba0: 6976 652c 0a09 0909 2020 2020 2020 272d ive,.... '-\n+00002bb0: 6175 746f 7265 7061 6972 2720 3d3e 2024 autorepair' => $\n+00002bc0: 6175 746f 7265 7061 6972 293b 0a0a 6966 autorepair);..if\n+00002bd0: 2028 2463 6865 636b 4f6e 6c79 290a 7b0a ($checkOnly).{.\n+00002be0: 2020 2020 756e 6c69 6e6b 2024 6c6f 636b unlink $lock\n+00002bf0: 4669 6c65 3b0a 2020 2020 6578 6974 2030 File;. exit 0\n+00002c00: 3b0a 7d0a 0a69 6620 2824 696e 7465 7261 ;.}..if ($intera\n+00002c10: 6374 6976 6529 0a7b 0a20 2020 206d 7920 ctive).{. my \n+00002c20: 2461 6e73 7765 723b 0a20 2020 2064 6f0a $answer;. do.\n+00002c30: 2020 2020 7b0a 0970 7269 6e74 2022 5c6e {..print \"\\n\n+00002c40: 636f 6e74 696e 7565 2077 6974 6820 7570 continue with up\n+00002c50: 6461 7469 6e67 2074 6865 2062 6163 6b75 dating the backu\n+00002c60: 7028 7329 3f5c 6e22 2c0a 0922 2863 6f6d p(s)?\\n\",..\"(com\n+00002c70: 7072 6573 7369 6e67 2061 6e64 2073 6574 pressing and set\n+00002c80: 7469 6e67 2068 6172 6420 6c69 6e6b 7329 ting hard links)\n+00002c90: 5c6e 222c 0a09 2279 6573 202f 206e 6f20 \\n\",..\"yes / no \n+00002ca0: 202d 3e20 223b 0a09 2461 6e73 7765 7220 -> \";..$answer \n+00002cb0: 3d20 3c53 5444 494e 3e3b 0a09 6368 6f6d = ;..chom\n+00002cc0: 7020 2461 6e73 7765 723b 0a20 2020 207d p $answer;. }\n+00002cd0: 2077 6869 6c65 2028 2461 6e73 7765 7220 while ($answer \n+00002ce0: 6e65 2027 7965 7327 2061 6e64 2024 616e ne 'yes' and $an\n+00002cf0: 7377 6572 206e 6520 276e 6f27 293b 0a0a swer ne 'no');..\n+00002d00: 2020 2020 6578 6974 2030 0a09 6966 2024 exit 0..if $\n+00002d10: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';.\n+00002d20: 7d0a 0a23 0a23 2073 6574 206c 696e 6b73 }..#.# set links\n+00002d30: 2061 6e64 2063 6f6d 7072 6573 7320 6669 and compress fi\n+00002d40: 6c65 730a 230a 6d79 2024 7570 6461 7465 les.#.my $update\n+00002d50: 4469 7246 6c61 6720 3d20 303b 0a6d 7920 DirFlag = 0;.my \n+00002d60: 2840 6c61 7465 4c69 6e6b 4469 7273 293b (@lateLinkDirs);\n+00002d70: 0a77 6869 6c65 2028 2828 406c 6174 654c .while (((@lateL\n+00002d80: 696e 6b44 6972 7329 203d 2024 616c 6c4c inkDirs) = $allL\n+00002d90: 696e 6b73 2d3e 6765 7441 6c6c 4469 7273 inks->getAllDirs\n+00002da0: 5769 7468 4c61 7465 4c69 6e6b 7328 2929 WithLateLinks())\n+00002db0: 203e 2030 290a 7b0a 2020 2020 6d79 2024 > 0).{. my $\n+00002dc0: 643b 0a20 2020 2066 6f72 6561 6368 2024 d;. foreach $\n+00002dd0: 6420 2873 6f72 7420 406c 6174 654c 696e d (sort @lateLin\n+00002de0: 6b44 6972 7329 0a20 2020 207b 0a09 6d79 kDirs). {..my\n+00002df0: 2024 6c69 6e6b 546f 4861 7368 203d 2024 $linkToHash = $\n+00002e00: 616c 6c4c 696e 6b73 2d3e 6765 744c 696e allLinks->getLin\n+00002e10: 6b54 6f48 6173 6828 293b 0a09 6d79 2024 kToHash();..my $\n+00002e20: 6c69 6e6b 4672 6f6d 4861 7368 203d 2024 linkFromHash = $\n+00002e30: 616c 6c4c 696e 6b73 2d3e 6765 744c 696e allLinks->getLin\n+00002e40: 6b46 726f 6d48 6173 6828 293b 0a0a 2320 kFromHash();..# \n+00002e50: 2020 2020 2020 7072 696e 7420 2263 6865 print \"che\n+00002e60: 636b 696e 6720 3c24 643e 5c6e 223b 0a20 cking <$d>\\n\";. \n+00002e70: 2020 2020 2020 6966 2028 2d65 2022 2464 if (-e \"$d\n+00002e80: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin\n+00002e90: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2\"\n+00002ea0: 290a 2020 2020 2020 207b 0a23 0920 2020 ). {.#. \n+00002eb0: 7072 696e 7420 225c 7424 642f 2e73 746f print \"\\t$d/.sto\n+00002ec0: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li\n+00002ed0: 6e6b 4669 6c65 2e62 7a32 2065 7869 7374 nkFile.bz2 exist\n+00002ee0: 735c 6e22 3b0a 0920 2020 6d79 2024 6c69 s\\n\";.. my $li\n+00002ef0: 6e6b 546f 4469 723b 0a09 2020 206d 7920 nkToDir;.. my \n+00002f00: 246e 6565 6473 5570 6461 7465 203d 2030 $needsUpdate = 0\n+00002f10: 3b0a 0920 2020 6d79 2024 6861 7368 203d ;.. my $hash =\n+00002f20: 2024 246c 696e 6b54 6f48 6173 687b 2464 $$linkToHash{$d\n+00002f30: 7d3b 0a09 2020 2066 6f72 6561 6368 2024 };.. foreach $\n+00002f40: 6c69 6e6b 546f 4469 7220 2873 6f72 7420 linkToDir (sort \n+00002f50: 6b65 7973 2025 2468 6173 6829 0a09 2020 keys %$hash).. \n+00002f60: 207b 0a23 0920 2020 2020 2020 7072 696e {.#. prin\n+00002f70: 7420 225c 745c 7463 6865 636b 696e 6720 t \"\\t\\tchecking \n+00002f80: 246c 696e 6b54 6f44 6972 2066 6f72 206c $linkToDir for l\n+00002f90: 696e 6b46 696c 652e 627a 323a 2022 3b0a inkFile.bz2: \";.\n+00002fa0: 0920 2020 2020 2020 6966 2028 2d65 2022 . if (-e \"\n+00002fb0: 246c 696e 6b54 6f44 6972 2f2e 7374 6f72 $linkToDir/.stor\n+00002fc0: 6542 6163 6b75 704c 696e 6b73 2f6c 696e eBackupLinks/lin\n+00002fd0: 6b46 696c 652e 627a 3222 290a 0920 2020 kFile.bz2\").. \n+00002fe0: 2020 2020 7b0a 0909 2020 2024 6e65 6564 {... $need\n+00002ff0: 7355 7064 6174 6520 3d20 313b 0a23 0909 sUpdate = 1;.#..\n+00003000: 2020 2070 7269 6e74 2022 6e65 6564 7320 print \"needs \n+00003010: 5570 6461 7465 215c 6e22 3b0a 0909 2020 Update!\\n\";... \n+00003020: 206c 6173 743b 0a09 2020 2020 2020 207d last;.. }\n+00003030: 0a09 2020 2020 2020 2065 6c73 650a 0920 .. else.. \n+00003040: 2020 2020 2020 7b0a 2309 0920 2020 7072 {.#.. pr\n+00003050: 696e 7420 226f 6b2c 2069 7320 7570 6461 int \"ok, is upda\n+00003060: 7465 645c 6e22 3b0a 0920 2020 2020 2020 ted\\n\";.. \n+00003070: 7d0a 0920 2020 7d0a 0920 2020 6966 2028 }.. }.. if (\n+00003080: 246e 6565 6473 5570 6461 7465 203d 3d20 $needsUpdate == \n+00003090: 3029 0a09 2020 207b 0a23 0920 2020 2020 0).. {.#. \n+000030a0: 2020 7072 696e 7420 2275 7064 6174 6520 print \"update \n+000030b0: 2464 5c6e 223b 0a09 2020 207d 0a09 2020 $d\\n\";.. }.. \n+000030c0: 2065 6c73 650a 0920 2020 7b0a 0920 2020 else.. {.. \n+000030d0: 2020 2020 6e65 7874 3b0a 0920 2020 7d0a next;.. }.\n+000030e0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. \n+000030f0: 656c 7365 0a20 2020 2020 2020 7b0a 0920 else. {.. \n+00003100: 2020 6e65 7874 3b0a 2020 2020 2020 207d next;. }\n+00003110: 0a0a 0924 7570 6461 7465 4469 7246 6c61 ...$updateDirFla\n+00003120: 6720 3d20 313b 0a09 3a3a 7570 6461 7465 g = 1;..::update\n+00003130: 4261 636b 7570 4469 7228 2464 2c20 246e BackupDir($d, $n\n+00003140: 6f43 6f6d 7072 6573 732c 2024 7072 6f67 oCompress, $prog\n+00003150: 7265 7373 5265 706f 7274 2c20 2470 724c ressReport, $prL\n+00003160: 6f67 2c0a 0909 0920 2024 696e 7465 7261 og,.... $intera\n+00003170: 6374 6976 6529 3b0a 0a09 2320 6465 6c65 ctive);...# dele\n+00003180: 7465 2070 726f 6365 7373 6564 2066 696c te processed fil\n+00003190: 6573 0a09 6d79 2024 6620 3d20 2224 642f es..my $f = \"$d/\n+000031a0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink\n+000031b0: 732f 6c69 6e6b 4669 6c65 2e62 7a32 223b s/linkFile.bz2\";\n+000031c0: 0a09 6966 2028 2875 6e6c 696e 6b20 2466 ..if ((unlink $f\n+000031d0: 2920 213d 2031 290a 097b 0a09 2020 2020 ) != 1)..{.. \n+000031e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+000031f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n+00003200: 0920 2027 2d73 7472 2720 3d3e 205b 2231 . '-str' => [\"1\n+00003210: 2063 616e 6e6f 7420 6465 6c65 7465 203c cannot delete <\n+00003220: 2466 3e22 5d29 3b0a 097d 0a09 656c 7365 $f>\"]);..}..else\n+00003230: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog-\n+00003240: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00003250: 3e20 2749 272c 0a09 0909 2020 272d 7374 > 'I',.... '-st\n+00003260: 7227 203d 3e20 5b22 3120 6465 6c65 7465 r' => [\"1 delete\n+00003270: 6420 3c24 663e 225d 290a 0909 6966 2024 d <$f>\"])...if $\n+00003280: 7665 7262 6f73 653b 0a09 7d0a 0a09 2466 verbose;..}...$f\n+00003290: 203d 2022 2464 2f2e 7374 6f72 6542 6163 = \"$d/.storeBac\n+000032a0: 6b75 704c 696e 6b73 2f6c 696e 6b54 6f22 kupLinks/linkTo\"\n+000032b0: 3b0a 0969 6620 282d 6520 2466 290a 097b ;..if (-e $f)..{\n+000032c0: 0a09 2020 2020 6966 2028 2875 6e6c 696e .. if ((unlin\n+000032d0: 6b20 2466 2920 213d 2031 290a 0920 2020 k $f) != 1).. \n+000032e0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n+000032f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00003300: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+00003310: 7227 203d 3e20 5b22 3220 6361 6e6e 6f74 r' => [\"2 cannot\n+00003320: 2064 656c 6574 6520 3c24 663e 225d 293b delete <$f>\"]);\n+00003330: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00003340: 650a 0920 2020 207b 0a09 0924 7072 4c6f e.. {...$prLo\n+00003350: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00003360: 203d 3e20 2749 272c 0a09 0909 2020 2020 => 'I',.... \n+00003370: 2020 272d 7374 7227 203d 3e20 5b22 3220 '-str' => [\"2 \n+00003380: 6465 6c65 7465 6420 3c24 663e 225d 290a deleted <$f>\"]).\n+00003390: 0909 2020 2020 6966 2024 7665 7262 6f73 .. if $verbos\n+000033a0: 653b 0a09 2020 2020 7d0a 097d 0a0a 2309 e;.. }..}..#.\n+000033b0: 7072 696e 7420 2264 656c 6574 6520 6c69 print \"delete li\n+000033c0: 6e6b 546f 3a5c 6e22 3b0a 2320 2020 2020 nkTo:\\n\";.# \n+000033d0: 2020 7072 696e 7420 225c 7424 643a 5c6e print \"\\t$d:\\n\n+000033e0: 223b 0a20 2020 2020 2020 206d 7920 246b \";. my $k\n+000033f0: 3b0a 096d 7920 2468 6173 6820 3d20 2424 ;..my $hash = $$\n+00003400: 6c69 6e6b 546f 4861 7368 7b24 647d 3b0a linkToHash{$d};.\n+00003410: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor\n+00003420: 7420 6b65 7973 2025 2468 6173 6829 0a09 t keys %$hash)..\n+00003430: 7b0a 0920 2020 2024 6620 3d20 2424 6861 {.. $f = $$ha\n+00003440: 7368 7b24 6b7d 3b0a 2309 2020 2020 7072 sh{$k};.#. pr\n+00003450: 696e 7420 225c 745c 7424 6b20 2d3e 2022 int \"\\t\\t$k -> \"\n+00003460: 2c20 2424 6861 7368 7b24 6b7d 2c20 225c , $$hash{$k}, \"\\\n+00003470: 6e22 3b0a 0a09 2020 2020 6966 2028 2d65 n\";... if (-e\n+00003480: 2024 6629 0a09 2020 2020 7b0a 0909 6966 $f).. {...if\n+00003490: 2028 2875 6e6c 696e 6b20 2466 2920 213d ((unlink $f) !=\n+000034a0: 2031 290a 0909 7b0a 0909 2020 2020 2470 1)...{... $p\n+000034b0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+000034c0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n+000034d0: 2020 272d 7374 7227 203d 3e20 5b22 3320 '-str' => [\"3 \n+000034e0: 6361 6e6e 6f74 2064 656c 6574 6520 3c24 cannot delete <$\n+000034f0: 663e 225d 293b 0a09 097d 0a09 0965 6c73 f>\"]);...}...els\n+00003500: 650a 0909 7b0a 0909 2020 2020 2470 724c e...{... $prL\n+00003510: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00003520: 2720 3d3e 2027 4927 2c0a 0909 0909 2020 ' => 'I',..... \n+00003530: 272d 7374 7227 203d 3e20 5b22 3320 6465 '-str' => [\"3 de\n+00003540: 6c65 7465 6420 3c24 663e 225d 290a 0909 leted <$f>\"])...\n+00003550: 0969 6620 2476 6572 626f 7365 3b0a 0909 .if $verbose;...\n+00003560: 7d0a 0920 2020 207d 0a0a 0920 2020 2024 }.. }... $\n+00003570: 6620 3d20 2424 6c69 6e6b 4672 6f6d 4861 f = $$linkFromHa\n+00003580: 7368 7b24 6b7d 7b24 647d 3b0a 2309 2020 sh{$k}{$d};.#. \n+00003590: 2020 7072 696e 7420 2264 656c 6574 6520 print \"delete \n+000035a0: 6c69 6e6b 4672 6f6d 3a20 3c24 663e 5c6e linkFrom: <$f>\\n\n+000035b0: 223b 0a09 2020 2020 6966 2028 2875 6e6c \";.. if ((unl\n+000035c0: 696e 6b20 2466 2920 213d 2031 290a 0920 ink $f) != 1).. \n+000035d0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n+000035e0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+000035f0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n+00003600: 7374 7227 203d 3e20 5b22 3320 6361 6e6e str' => [\"3 cann\n+00003610: 6f74 2064 656c 6574 6520 3c24 663e 225d ot delete <$f>\"]\n+00003620: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e\n+00003630: 6c73 650a 0920 2020 207b 0a09 0924 7072 lse.. {...$pr\n+00003640: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00003650: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n+00003660: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00003670: 3320 6465 6c65 7465 6420 3c24 663e 225d 3 deleted <$f>\"]\n+00003680: 290a 0909 2020 2020 6966 2024 7665 7262 )... if $verb\n+00003690: 6f73 653b 0a09 2020 2020 7d0a 0920 2020 ose;.. }.. \n+000036a0: 200a 097d 0a0a 2020 2020 2020 2020 676f ..}.. go\n+000036b0: 746f 206e 6578 744c 6f6f 703b 0a20 2020 to nextLoop;. \n+000036c0: 207d 0a0a 6e65 7874 4c6f 6f70 3a0a 0a20 }..nextLoop:.. \n+000036d0: 2020 2024 616c 6c4c 696e 6b73 203d 206c $allLinks = l\n+000036e0: 6174 654c 696e 6b73 2d3e 6e65 7728 272d ateLinks->new('-\n+000036f0: 6469 7273 2720 3d3e 205c 4062 6163 6b75 dirs' => \\@backu\n+00003700: 7044 6972 732c 0a09 0909 2020 2020 2020 pDirs,.... \n+00003710: 2027 2d6b 696e 6427 203d 3e20 2772 6563 '-kind' => 'rec\n+00003720: 7572 7369 7665 5365 6172 6368 272c 0a09 ursiveSearch',..\n+00003730: 0909 2020 2020 2020 2027 2d63 6865 636b .. '-check\n+00003740: 4c69 6e6b 4672 6f6d 436f 6e73 6973 7465 LinkFromConsiste\n+00003750: 6e63 7927 203d 3e20 312c 0a09 0909 2020 ncy' => 1,.... \n+00003760: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' \n+00003770: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,....\n+00003780: 2020 2020 2020 2027 2d64 6562 7567 2720 '-debug' \n+00003790: 3d3e 2024 6465 6275 672c 0a09 0909 2020 => $debug,.... \n+000037a0: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n+000037b0: 2024 7072 4c6f 672c 0a09 0909 2020 2020 $prLog,.... \n+000037c0: 2020 2027 2d69 6e74 6572 6163 7469 7665 '-interactive\n+000037d0: 2720 3d3e 2024 696e 7465 7261 6374 6976 ' => $interactiv\n+000037e0: 6529 3b0a 0a7d 0a0a 2470 724c 6f67 2d3e e);..}..$prLog->\n+000037f0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00003800: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s\n+00003810: 7472 2720 3d3e 205b 2265 7665 7279 7468 tr' => [\"everyth\n+00003820: 696e 6720 6973 2075 7064 6174 6564 2c20 ing is updated, \n+00003830: 6e6f 7468 696e 6720 746f 2064 6f22 5d29 nothing to do\"])\n+00003840: 0a20 2020 2075 6e6c 6573 7320 2475 7064 . unless $upd\n+00003850: 6174 6544 6972 466c 6167 3b0a 0a0a 2320 ateDirFlag;...# \n+00003860: 5374 6174 6973 7469 6b20 fc62 6572 2044 Statistik .ber D\n+00003870: 6175 6572 2075 6e64 2043 5055 2d56 6572 auer und CPU-Ver\n+00003880: 6272 6175 6368 0a0a 6d79 2028 406c 293b brauch..my (@l);\n+00003890: 0a6d 7920 2824 7573 6572 2c24 7379 7374 .my ($user,$syst\n+000038a0: 656d 2c24 6375 7365 722c 2463 7379 7374 em,$cuser,$csyst\n+000038b0: 656d 2920 3d20 7469 6d65 733b 0a6d 7920 em) = times;.my \n+000038c0: 2824 7472 656e 6e29 203d 2022 2d2d 2d2d ($trenn) = \"----\n+000038d0: 2d2d 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d ---+----------+-\n+000038e0: 2d2d 2d2d 2d2d 2d2d 2d22 3b0a 7075 7368 ---------\";.push\n+000038f0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf(\"%-\n+00003900: 3773 7c25 3130 737c 2531 3073 222c 2022 7s|%10s|%10s\", \"\n+00003910: 205b 7365 635d 222c 2022 7573 6572 222c [sec]\", \"user\",\n+00003920: 2022 7379 7374 656d 2229 3b0a 7075 7368 \"system\");.push\n+00003930: 2040 6c2c 2022 2474 7265 6e6e 223b 0a70 @l, \"$trenn\";.p\n+00003940: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf(\n+00003950: 2225 2d37 737c 2531 302e 3266 7c25 3130 \"%-7s|%10.2f|%10\n+00003960: 2e32 6622 2c20 2270 726f 6365 7373 222c .2f\", \"process\",\n+00003970: 2024 7573 6572 2c20 2473 7973 7465 6d29 $user, $system)\n+00003980: 3b0a 7075 7368 2040 6c2c 2073 7072 696e ;.push @l, sprin\n+00003990: 7466 2822 252d 3773 7c25 3130 2e32 667c tf(\"%-7s|%10.2f|\n+000039a0: 2531 302e 3266 222c 2022 6368 696c 6473 %10.2f\", \"childs\n+000039b0: 222c 2024 6375 7365 722c 2024 6373 7973 \", $cuser, $csys\n+000039c0: 7465 6d29 3b0a 7075 7368 2040 6c2c 2022 tem);.push @l, \"\n+000039d0: 2474 7265 6e6e 223b 0a6d 7920 2824 752c $trenn\";.my ($u,\n+000039e0: 2024 7329 203d 2028 2463 7573 6572 202b $s) = ($cuser +\n+000039f0: 2024 7573 6572 2c20 2463 7379 7374 656d $user, $csystem\n+00003a00: 202b 2024 7379 7374 656d 293b 0a70 7573 + $system);.pus\n+00003a10: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf(\"%\n+00003a20: 2d37 737c 2531 302e 3266 7c25 3130 2e32 -7s|%10.2f|%10.2\n+00003a30: 6620 3d3e 2025 2e32 6622 2c20 2273 756d f => %.2f\", \"sum\n+00003a40: 222c 2024 752c 2024 732c 2024 7520 2b20 \", $u, $s, $u + \n+00003a50: 2473 293b 0a0a 6d79 2028 4073 7461 7274 $s);..my (@start\n+00003a60: 4461 7465 2920 3d20 2829 3b0a 6966 2028 Date) = ();.if (\n+00003a70: 2473 7461 7274 4461 7465 290a 7b0a 2020 $startDate).{. \n+00003a80: 2020 7075 7368 2040 7374 6172 7444 6174 push @startDat\n+00003a90: 652c 2027 2020 2020 2020 2020 2020 2070 e, ' p\n+00003aa0: 7265 636f 6d6d 616e 6420 6475 7261 7469 recommand durati\n+00003ab0: 6f6e 203d 2027 202e 0a09 2473 7461 7274 on = ' ...$start\n+00003ac0: 4461 7465 2d3e 6465 6c74 6149 6e53 7472 Date->deltaInStr\n+00003ad0: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' =\n+00003ae0: 3e20 2473 7461 7274 4461 7465 293b 0a7d > $startDate);.}\n+00003af0: 0a0a 6d79 2024 6445 6e64 203d 2064 6174 ..my $dEnd = dat\n+00003b00: 6554 6f6f 6c73 2d3e 6e65 7728 293b 0a6d eTools->new();.m\n+00003b10: 7920 2464 7572 6174 696f 6e20 3d20 2473 y $duration = $s\n+00003b20: 7461 7274 4461 7465 2d3e 6465 6c74 6149 tartDate->deltaI\n+00003b30: 6e53 6563 7328 272d 7365 636f 6e64 4461 nSecs('-secondDa\n+00003b40: 7465 2720 3d3e 2024 6445 6e64 293b 0a24 te' => $dEnd);.$\n+00003b50: 6475 7261 7469 6f6e 203d 2031 2069 6620 duration = 1 if \n+00003b60: 2824 6475 7261 7469 6f6e 203d 3d20 3029 ($duration == 0)\n+00003b70: 3b20 2020 2320 4d69 6e69 6d61 6c65 7220 ; # Minimaler \n+00003b80: 5765 7274 0a0a 2470 724c 6f67 2d3e 7072 Wert..$prLog->pr\n+00003b90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00003ba0: 5327 2c0a 0920 2020 2020 2027 2d73 7472 S',.. '-str\n+00003bb0: 2720 3d3e 0a09 2020 2020 2020 5b27 2020 ' =>.. [' \n+00003bc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003bd0: 2020 2020 6475 7261 7469 6f6e 203d 2027 duration = '\n+00003be0: 202e 0a09 2020 2020 2020 2064 6174 6554 ... dateT\n+00003bf0: 6f6f 6c73 3a3a 7661 6c54 6f53 7472 2827 ools::valToStr('\n+00003c00: 2d73 6563 2720 3d3e 2024 6475 7261 7469 -sec' => $durati\n+00003c10: 6f6e 292c 0a09 2020 2020 2020 2040 6c0a on),.. @l.\n+00003c20: 0920 2020 2020 2020 5d29 3b0a 0a75 6e6c . ]);..unl\n+00003c30: 696e 6b20 246c 6f63 6b46 696c 653b 0a0a ink $lockFile;..\n+00003c40: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00003c50: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. \n+00003c60: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n+00003c70: 2273 796e 6369 6e67 202e 2e2e 225d 293b \"syncing ...\"]);\n+00003c80: 0a73 7973 7465 6d20 222f 6269 6e2f 7379 .system \"/bin/sy\n+00003c90: 6e63 223b 0a0a 2470 724c 6f67 2d3e 7072 nc\";..$prLog->pr\n+00003ca0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00003cb0: 5a27 2c0a 0920 2020 2020 2027 2d73 7472 Z',.. '-str\n+00003cc0: 2720 3d3e 205b 2263 6865 636b 696e 6720 ' => [\"checking \n+00003cd0: 7265 6665 7265 6e63 6573 2069 6e20 3c40 references in <@\n+00003ce0: 6261 636b 7570 4469 7273 3e22 5d29 3b0a backupDirs>\"]);.\n+00003cf0: 0a65 7869 7420 303b 0a0a 0a0a 2323 2323 .exit 0;....####\n+00003d00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003d10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003d20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00003d30: 2323 2323 2323 2323 0a73 7562 2075 7064 ########.sub upd\n+00003d40: 6174 6542 6163 6b75 7044 6972 0a7b 0a20 ateBackupDir.{. \n+00003d50: 2020 206d 7920 2464 6972 203d 2073 6869 my $dir = shi\n+00003d60: 6674 3b0a 2020 2020 6d79 2024 6e6f 436f ft;. my $noCo\n+00003d70: 6d70 7265 7373 203d 2073 6869 6674 3b0a mpress = shift;.\n+00003d80: 2020 2020 6d79 2024 7072 6f67 7265 7373 my $progress\n+00003d90: 5265 706f 7274 203d 2073 6869 6674 3b0a Report = shift;.\n+00003da0: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n+00003db0: 7368 6966 743b 0a20 2020 206d 7920 2469 shift;. my $i\n+00003dc0: 6e74 6572 6163 7469 7665 203d 2073 6869 nteractive = shi\n+00003dd0: 6674 3b0a 0a20 2020 2023 0a20 2020 2023 ft;.. #. #\n+00003de0: 2072 6561 6420 636f 6d70 7265 7373 2066 read compress f\n+00003df0: 726f 6d20 2e6d 6435 4368 6563 6b53 756d rom .md5CheckSum\n+00003e00: 2e69 6e66 6f0a 2020 2020 230a 2020 2020 .info. #. \n+00003e10: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00003e20: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n+00003e30: 2020 272d 7374 7227 203d 3e20 5b22 7570 '-str' => [\"up\n+00003e40: 6461 7469 6e67 203c 2464 6972 3e22 5d29 dating <$dir>\"])\n+00003e50: 3b0a 0a20 2020 206d 7920 2472 6373 6620 ;.. my $rcsf \n+00003e60: 3d20 7265 6164 4368 6563 6b53 756d 4669 = readCheckSumFi\n+00003e70: 6c65 2d3e 6e65 7728 272d 6368 6563 6b53 le->new('-checkS\n+00003e80: 756d 4669 6c65 2720 3d3e 0a09 0909 0920 umFile' =>..... \n+00003e90: 2020 2020 2224 6469 722f 2e6d 6435 4368 \"$dir/.md5Ch\n+00003ea0: 6563 6b53 756d 7322 2c0a 0909 0909 2020 eckSums\",..... \n+00003eb0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n+00003ec0: 7072 4c6f 6729 3b0a 0a23 2020 2020 6d79 prLog);..# my\n+00003ed0: 2024 6d65 7461 203d 2024 7263 7366 2d3e $meta = $rcsf->\n+00003ee0: 6765 744d 6574 6156 616c 4669 656c 6428 getMetaValField(\n+00003ef0: 293b 0a0a 2320 2020 206d 7920 2824 636f );..# my ($co\n+00003f00: 6d70 722c 2040 636f 6d70 7250 6172 2920 mpr, @comprPar) \n+00003f10: 3d20 407b 2424 6d65 7461 7b27 636f 6d70 = @{$$meta{'comp\n+00003f20: 7265 7373 277d 7d3b 0a23 2020 2020 6d79 ress'}};.# my\n+00003f30: 2024 636f 6d70 7250 6f73 7466 6978 203d $comprPostfix =\n+00003f40: 2028 2424 6d65 7461 7b27 706f 7374 6669 ($$meta{'postfi\n+00003f50: 7827 7d29 2d3e 5b30 5d3b 0a20 2020 206d x'})->[0];. m\n+00003f60: 7920 2824 636f 6d70 722c 2040 636f 6d70 y ($compr, @comp\n+00003f70: 7250 6172 2920 3d20 407b 2472 6373 662d rPar) = @{$rcsf-\n+00003f80: 3e67 6574 496e 666f 5769 7468 5061 7228 >getInfoWithPar(\n+00003f90: 2763 6f6d 7072 6573 7327 297d 3b0a 2020 'compress')};. \n+00003fa0: 2020 6d79 2024 636f 6d70 7250 6f73 7466 my $comprPostf\n+00003fb0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI\n+00003fc0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post\n+00003fd0: 6669 7827 293b 0a23 7072 696e 7420 2263 fix');.#print \"c\n+00003fe0: 6f6d 7072 203d 203c 2463 6f6d 7072 3e2c ompr = <$compr>,\n+00003ff0: 2063 6f6d 7072 5061 7220 3d20 3c40 636f comprPar = <@co\n+00004000: 6d70 7250 6172 3e5c 6e22 3b0a 0a20 2020 mprPar>\\n\";.. \n+00004010: 2023 0a20 2020 2023 2073 6574 206c 696e #. # set lin\n+00004020: 6b73 2061 6e64 2063 6f6d 7072 6573 730a ks and compress.\n+00004030: 2020 2020 230a 2020 2020 6d79 2028 256d #. my (%m\n+00004040: 6435 546f 4669 6c65 293b 2020 2020 2020 d5ToFile); \n+00004050: 2320 7374 6f72 6520 6d64 3573 756d 7320 # store md5sums \n+00004060: 6f66 2063 6f70 6965 6420 6669 6c65 7320 of copied files \n+00004070: 6265 6361 7573 650a 2020 2020 2020 2020 because. \n+00004080: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00004090: 2020 2320 6e75 6d62 6572 206f 6620 6c69 # number of li\n+000040a0: 6e6b 7320 6973 2065 7868 6175 7374 6564 nks is exhausted\n+000040b0: 0a20 2020 206d 7920 2466 203d 2022 2464 . my $f = \"$d\n+000040c0: 6972 2f2e 7374 6f72 6542 6163 6b75 704c ir/.storeBackupL\n+000040d0: 696e 6b73 2f6c 696e 6b46 696c 652e 627a inks/linkFile.bz\n+000040e0: 3222 3b0a 0a20 2020 2072 6574 7572 6e20 2\";.. return \n+000040f0: 756e 6c65 7373 202d 6520 2466 3b0a 0a20 unless -e $f;.. \n+00004100: 2020 2023 0a20 2020 2023 0a20 2020 2023 #. #. #\n+00004110: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00004120: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00004130: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00004140: 205b 2270 6861 7365 2031 3a20 6d6b 6469 [\"phase 1: mkdi\n+00004150: 722c 2073 796d 6c69 6e6b 2061 6e64 2063 r, symlink and c\n+00004160: 6f6d 7072 6573 7369 6e67 2066 696c 6573 ompressing files\n+00004170: 225d 293b 0a0a 2020 2020 6d79 2024 6c3b \"]);.. my $l;\n+00004180: 0a20 2020 206d 7920 2470 6172 466f 726b . my $parFork\n+00004190: 5072 6f63 203d 2070 6172 616c 6c65 6c46 Proc = parallelF\n+000041a0: 6f72 6b2d 3e6e 6577 2827 2d6d 6178 5061 ork->new('-maxPa\n+000041b0: 7261 6c6c 656c 2720 3d3e 2024 6e6f 436f rallel' => $noCo\n+000041c0: 6d70 7265 7373 2c0a 0909 0909 0927 2d70 mpress,......'-p\n+000041d0: 724c 6f67 2720 3d3e 2024 7072 4c6f 672c rLog' => $prLog,\n+000041e0: 0a09 0909 0909 272d 6669 7273 7446 6173 ......'-firstFas\n+000041f0: 7427 203d 3e20 312c 0a09 0909 0909 272d t' => 1,......'-\n+00004200: 6d61 7857 6169 7454 696d 6527 203d 3e20 maxWaitTime' => \n+00004210: 2e32 2c0a 0909 0909 0927 2d6e 6f4f 6657 .2,......'-noOfW\n+00004220: 6169 7453 7465 7073 2720 3d3e 2031 3030 aitSteps' => 100\n+00004230: 293b 0a0a 2020 2020 6d79 2024 6e6f 436f );.. my $noCo\n+00004240: 6d70 7265 7373 6564 4669 6c65 7320 3d20 mpressedFiles = \n+00004250: 303b 0a20 2020 206d 7920 246e 6f4d 6b64 0;. my $noMkd\n+00004260: 6972 203d 2030 3b0a 2020 2020 6d79 2024 ir = 0;. my $\n+00004270: 6e6f 5379 6d4c 696e 6b20 3d20 303b 0a20 noSymLink = 0;. \n+00004280: 2020 206d 7920 2824 6f6c 6453 697a 652c my ($oldSize,\n+00004290: 2024 6e65 7753 697a 6529 203d 2028 302c $newSize) = (0,\n+000042a0: 2030 293b 0a20 2020 206d 7920 246c 696e 0);. my $lin\n+000042b0: 6b46 696c 6520 3d20 7069 7065 4672 6f6d kFile = pipeFrom\n+000042c0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec\n+000042d0: 2720 3d3e 2027 627a 6970 3227 2c0a 0909 ' => 'bzip2',...\n+000042e0: 0909 2020 2020 2027 2d70 6172 616d 2720 .. '-param' \n+000042f0: 3d3e 205b 272d 6427 5d2c 0a09 0909 0920 => ['-d'],..... \n+00004300: 2020 2020 272d 7374 6469 6e27 203d 3e20 '-stdin' => \n+00004310: 2466 2c0a 0909 0909 2020 2020 2027 2d6f $f,..... '-o\n+00004320: 7574 5261 6e64 6f6d 2720 3d3e 2027 2f74 utRandom' => '/t\n+00004330: 6d70 2f73 7462 7550 6970 6546 726f 6d31 mp/stbuPipeFrom1\n+00004340: 302d 272c 0a09 0909 0920 2020 2020 272d 0-',..... '-\n+00004350: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n+00004360: 293b 0a0a 2020 2020 7768 696c 6520 2824 );.. while ($\n+00004370: 6c20 3d20 246c 696e 6b46 696c 652d 3e72 l = $linkFile->r\n+00004380: 6561 6428 2929 0a20 2020 207b 0a09 6e65 ead()). {..ne\n+00004390: 7874 2069 6620 246c 203d 7e20 2f5e 232f xt if $l =~ /^#/\n+000043a0: 3b0a 0963 686f 6d70 2024 6c3b 0a09 6d79 ;..chomp $l;..my\n+000043b0: 2028 2477 6861 742c 2024 6d64 3529 203d ($what, $md5) =\n+000043c0: 2073 706c 6974 282f 5c73 2b2f 2c20 246c split(/\\s+/, $l\n+000043d0: 2c20 3229 3b0a 0a09 6966 2028 2477 6861 , 2);...if ($wha\n+000043e0: 7420 6571 2027 6469 7227 290a 097b 0a09 t eq 'dir')..{..\n+000043f0: 2020 2020 246d 6435 203d 7e20 732f 5c30 $md5 =~ s/\\0\n+00004400: 2f5c 6e2f 6f67 3b20 2020 2023 206e 616d /\\n/og; # nam\n+00004410: 6520 6f66 2064 6972 6563 746f 7279 210a e of directory!.\n+00004420: 0920 2020 2075 6e6c 6573 7320 282d 6420 . unless (-d \n+00004430: 2224 6469 722f 246d 6435 2229 0a09 2020 \"$dir/$md5\").. \n+00004440: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n+00004450: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00004460: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n+00004470: 7472 2720 3d3e 0a09 0909 2020 2020 2020 tr' =>.... \n+00004480: 5b22 6361 6e6e 6f74 2063 7265 6174 6520 [\"cannot create \n+00004490: 6469 7265 6374 6f72 7920 3c24 6469 722f directory <$dir/\n+000044a0: 246d 6435 3e22 5d2c 0a09 0909 2020 2020 $md5>\"],.... \n+000044b0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n+000044c0: 0909 2020 2020 756e 6c65 7373 206d 6b64 .. unless mkd\n+000044d0: 6972 2022 2464 6972 2f24 6d64 3522 2c20 ir \"$dir/$md5\", \n+000044e0: 3037 3030 3b0a 0920 2020 207d 0a09 2020 0700;.. }.. \n+000044f0: 2020 246e 6f4d 6b64 6972 2b2b 3b0a 097d $noMkdir++;..}\n+00004500: 0a09 656c 7369 6620 2824 7768 6174 2065 ..elsif ($what e\n+00004510: 7120 276c 696e 6b27 206f 7220 2477 6861 q 'link' or $wha\n+00004520: 7420 6571 2027 6c69 6e6b 626c 6f63 6b27 t eq 'linkblock'\n+00004530: 206f 720a 0920 2020 2024 7768 6174 2065 or.. $what e\n+00004540: 7120 276c 696e 6b53 796d 6c69 6e6b 2729 q 'linkSymlink')\n+00004550: 0a09 7b0a 0920 2020 206d 7920 2465 7869 ..{.. my $exi\n+00004560: 7374 696e 6746 696c 6520 3d20 246c 696e stingFile = $lin\n+00004570: 6b46 696c 652d 3e72 6561 6428 293b 0a09 kFile->read();..\n+00004580: 2020 2020 2465 7869 7374 696e 6746 696c $existingFil\n+00004590: 6520 3d20 2224 6469 722f 2465 7869 7374 e = \"$dir/$exist\n+000045a0: 696e 6746 696c 6522 3b0a 0920 2020 2024 ingFile\";.. $\n+000045b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+000045c0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+000045d0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+000045e0: 205b 2266 696c 6520 3c24 663e 2065 6e64 [\"file <$f> end\n+000045f0: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at \n+00004600: 6c69 6e65 2024 2e22 5d2c 0a09 0909 2020 line $.\"],.... \n+00004610: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)...\n+00004620: 756e 6c65 7373 2024 6578 6973 7469 6e67 unless $existing\n+00004630: 4669 6c65 3b0a 0a09 2020 2020 6d79 2024 File;... my $\n+00004640: 6e65 774c 696e 6b20 3d20 246c 696e 6b46 newLink = $linkF\n+00004650: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. \n+00004660: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00004670: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n+00004680: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n+00004690: 0909 2020 5b22 6669 6c65 203c 2466 3e20 .. [\"file <$f> \n+000046a0: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected \n+000046b0: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $.\"],...\n+000046c0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n+000046d0: 0a09 0975 6e6c 6573 7320 246e 6577 4c69 ...unless $newLi\n+000046e0: 6e6b 3b0a 097d 200a 0965 6c73 6966 2028 nk;..} ..elsif (\n+000046f0: 2477 6861 7420 6571 2027 7379 6d6c 696e $what eq 'symlin\n+00004700: 6b27 290a 097b 0a09 2020 2020 246d 6435 k')..{.. $md5\n+00004710: 203d 7e20 732f 5c30 2f5c 6e2f 6f67 3b20 =~ s/\\0/\\n/og; \n+00004720: 2020 2020 2320 6669 6c65 2028 6e6f 7420 # file (not \n+00004730: 6d64 3573 756d 290a 0920 2020 2024 6d64 md5sum).. $md\n+00004740: 3520 3d20 2224 6469 722f 246d 6435 223b 5 = \"$dir/$md5\";\n+00004750: 0a09 2020 2020 6d79 2024 7461 7267 6574 .. my $target\n+00004760: 203d 2024 6c69 6e6b 4669 6c65 2d3e 7265 = $linkFile->re\n+00004770: 6164 2829 3b0a 0920 2020 2024 7072 4c6f ad();.. $prLo\n+00004780: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n+00004790: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n+000047a0: 7374 7227 203d 3e0a 0909 0920 205b 2266 str' =>.... [\"f\n+000047b0: 696c 6520 3c24 663e 2065 6e64 7320 756e ile <$f> ends un\n+000047c0: 6578 7065 6374 6564 2061 7420 6c69 6e65 expected at line\n+000047d0: 2024 2e22 5d2c 0a09 0909 2020 272d 6578 $.\"],.... '-ex\n+000047e0: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle\n+000047f0: 7373 2024 7461 7267 6574 3b0a 0920 2020 ss $target;.. \n+00004800: 2063 686f 6d70 2024 7461 7267 6574 3b0a chomp $target;.\n+00004810: 0920 2020 2024 7461 7267 6574 203d 7e20 . $target =~ \n+00004820: 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 2020 s/\\0/\\n/og;.. \n+00004830: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00004840: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00004850: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n+00004860: 0920 205b 2263 616e 6e6f 7420 6372 6561 . [\"cannot crea\n+00004870: 7465 2073 796d 6c69 6e6b 2066 726f 6d20 te symlink from \n+00004880: 3c24 6d64 353e 202d 3e20 3c24 7461 7267 <$md5> -> <$targ\n+00004890: 6574 3e22 5d29 0a09 0975 6e6c 6573 7320 et>\"])...unless \n+000048a0: 7379 6d6c 696e 6b20 2474 6172 6765 742c symlink $target,\n+000048b0: 2024 6d64 353b 0a09 2020 2020 246e 6f53 $md5;.. $noS\n+000048c0: 796d 4c69 6e6b 2b2b 3b0a 097d 0a09 656c ymLink++;..}..el\n+000048d0: 7369 6620 2824 7768 6174 2065 7120 2763 sif ($what eq 'c\n+000048e0: 6f6d 7072 6573 7327 290a 097b 0a09 2020 ompress')..{.. \n+000048f0: 2020 6d79 2024 6669 6c65 203d 2024 6c69 my $file = $li\n+00004900: 6e6b 4669 6c65 2d3e 7265 6164 2829 3b0a nkFile->read();.\n+00004910: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00004920: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00004930: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n+00004940: 3e0a 0909 0920 205b 2266 696c 6520 3c24 >.... [\"file <$\n+00004950: 663e 2065 6e64 7320 756e 6578 7065 6374 f> ends unexpect\n+00004960: 6564 2061 7420 6c69 6e65 2024 2e22 5d2c ed at line $.\"],\n+00004970: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' =>\n+00004980: 2031 290a 0909 756e 6c65 7373 2024 6669 1)...unless $fi\n+00004990: 6c65 3b0a 0920 2020 2063 686f 6d70 2024 le;.. chomp $\n+000049a0: 6669 6c65 3b0a 0a09 2020 2020 2466 696c file;... $fil\n+000049b0: 6520 3d7e 2073 2f5c 302f 5c6e 2f6f 673b e =~ s/\\0/\\n/og;\n+000049c0: 0a09 2020 2020 2466 696c 6520 3d20 2224 .. $file = \"$\n+000049d0: 6469 722f 2466 696c 6522 3b20 2020 2020 dir/$file\"; \n+000049e0: 2020 2023 2066 696c 6520 746f 2063 6f6d # file to com\n+000049f0: 7072 6573 730a 0920 2020 206d 7920 2473 press.. my $s\n+00004a00: 7420 3d20 2873 7461 7428 2466 696c 6529 t = (stat($file)\n+00004a10: 295b 375d 3b0a 0920 2020 2024 6f6c 6453 )[7];.. $oldS\n+00004a20: 697a 6520 2b3d 2024 7374 2069 6620 6465 ize += $st if de\n+00004a30: 6669 6e65 6420 2473 743b 0a09 2020 2020 fined $st;.. \n+00004a40: 6d79 2028 246f 6c64 2c20 246e 6577 2920 my ($old, $new) \n+00004a50: 3d0a 0909 2470 6172 466f 726b 5072 6f63 =...$parForkProc\n+00004a60: 2d3e 6164 645f 626c 6f63 6b28 272d 6578 ->add_block('-ex\n+00004a70: 6563 2720 3d3e 2024 636f 6d70 722c 0a09 ec' => $compr,..\n+00004a80: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => \n+00004a90: 5c40 636f 6d70 7250 6172 2c0a 0909 0909 \\@comprPar,.....\n+00004aa0: 0927 2d6f 7574 5261 6e64 6f6d 2720 3d3e .'-outRandom' =>\n+00004ab0: 2027 2f74 6d70 2f62 7a69 7032 2d27 2c0a '/tmp/bzip2-',.\n+00004ac0: 0909 0909 0927 2d73 7464 696e 2720 3d3e .....'-stdin' =>\n+00004ad0: 2024 6669 6c65 2c0a 0909 0909 0927 2d73 $file,......'-s\n+00004ae0: 7464 6f75 7427 203d 3e20 2224 6669 6c65 tdout' => \"$file\n+00004af0: 2463 6f6d 7072 506f 7374 6669 7822 2c0a $comprPostfix\",.\n+00004b00: 0909 0909 0927 2d64 656c 5374 646f 7574 .....'-delStdout\n+00004b10: 2720 3d3e 2027 6e6f 272c 0a09 0909 0909 ' => 'no',......\n+00004b20: 272d 696e 666f 2720 3d3e 2024 6669 6c65 '-info' => $file\n+00004b30: 293b 0a09 2020 2020 6966 2028 246f 6c64 );.. if ($old\n+00004b40: 290a 0920 2020 207b 0a09 0924 6e6f 436f ).. {...$noCo\n+00004b50: 6d70 7265 7373 6564 4669 6c65 732b 2b3b mpressedFiles++;\n+00004b60: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n+00004b70: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S',\n+00004b80: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n+00004b90: 203d 3e20 5b22 636f 6d70 7265 7373 6564 => [\"compressed\n+00004ba0: 2024 6e6f 436f 6d70 7265 7373 6564 4669 $noCompressedFi\n+00004bb0: 6c65 7320 6669 6c65 7322 5d29 0a09 0920 les files\"])... \n+00004bc0: 2020 2069 6620 2824 7072 6f67 7265 7373 if ($progress\n+00004bd0: 5265 706f 7274 2061 6e64 0a09 0909 246e Report and....$n\n+00004be0: 6f43 6f6d 7072 6573 7365 6446 696c 6573 oCompressedFiles\n+00004bf0: 2025 2024 7072 6f67 7265 7373 5265 706f % $progressRepo\n+00004c00: 7274 203d 3d20 3029 3b0a 0a09 096d 7920 rt == 0);....my \n+00004c10: 2466 203d 2024 6f6c 642d 3e67 6574 2827 $f = $old->get('\n+00004c20: 2d77 6861 7427 203d 3e20 2769 6e66 6f27 -what' => 'info'\n+00004c30: 293b 0a09 0926 3a3a 7761 6974 466f 7246 );...&::waitForF\n+00004c40: 696c 6528 2224 6624 636f 6d70 7250 6f73 ile(\"$f$comprPos\n+00004c50: 7466 6978 2229 3b0a 0909 246e 6577 5369 tfix\");...$newSi\n+00004c60: 7a65 202b 3d20 2873 7461 7428 2224 6624 ze += (stat(\"$f$\n+00004c70: 636f 6d70 7250 6f73 7466 6978 2229 295b comprPostfix\"))[\n+00004c80: 375d 3b0a 0909 6d79 2024 6f75 7420 3d20 7];...my $out = \n+00004c90: 246f 6c64 2d3e 6765 7453 5444 4552 5228 $old->getSTDERR(\n+00004ca0: 293b 0a09 0924 7072 4c6f 672d 3e70 7269 );...$prLog->pri\n+00004cb0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00004cc0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n+00004cd0: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => [\"STDERR o\n+00004ce0: 6620 3c24 636f 6d70 7220 4063 6f6d 7072 f <$compr @compr\n+00004cf0: 5061 7220 2220 2e0a 0909 0909 0920 223c Par \" ....... \"<\n+00004d00: 2466 203e 2466 2463 6f6d 7072 506f 7374 $f >$f$comprPost\n+00004d10: 6669 783e 3a22 2c20 4024 6f75 745d 290a fix>:\", @$out]).\n+00004d20: 0909 2020 2020 6966 2028 4024 6f75 7420 .. if (@$out \n+00004d30: 3e20 3029 3b0a 0909 2470 724c 6f67 2d3e > 0);...$prLog->\n+00004d40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00004d50: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... '\n+00004d60: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => [\"canno\n+00004d70: 7420 6465 6c65 7465 203c 2466 3e22 5d29 t delete <$f>\"])\n+00004d80: 0a09 0920 2020 2069 6620 2875 6e6c 696e ... if (unlin\n+00004d90: 6b20 2466 2920 213d 2031 3b0a 0920 2020 k $f) != 1;.. \n+00004da0: 207d 0a09 7d0a 0965 6c73 650a 097b 0a09 }..}..else..{..\n+00004db0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00004dc0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00004dd0: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n+00004de0: 205b 2269 6c6c 6567 616c 206b 6579 776f [\"illegal keywo\n+00004df0: 7264 203c 2477 6861 743e 2022 202e 0a09 rd <$what> \" ...\n+00004e00: 0909 0920 2020 2020 2261 7420 6c69 6e65 ... \"at line\n+00004e10: 2024 2e20 696e 2066 696c 6520 3c24 663e $. in file <$f>\n+00004e20: 3a22 2c0a 0909 0909 2020 2020 2022 5c74 :\",..... \"\\t\n+00004e30: 3c24 6c3e 225d 2c0a 0909 0920 2027 2d65 <$l>\"],.... '-e\n+00004e40: 7869 7427 203d 3e20 3129 3b0a 097d 0a20 xit' => 1);..}. \n+00004e50: 2020 207d 0a20 2020 2024 6c69 6e6b 4669 }. $linkFi\n+00004e60: 6c65 2d3e 7761 6974 2829 3b0a 2020 2020 le->wait();. \n+00004e70: 6d79 2024 6f75 7420 3d20 246c 696e 6b46 my $out = $linkF\n+00004e80: 696c 652d 3e67 6574 5354 4445 5252 2829 ile->getSTDERR()\n+00004e90: 3b0a 2020 2020 6966 2028 4024 6f75 7429 ;. if (@$out)\n+00004ea0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n+00004eb0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00004ec0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+00004ed0: 7374 7227 203d 3e20 5b22 7265 6164 696e str' => [\"readin\n+00004ee0: 6720 6c69 6e6b 4669 6c65 2066 696c 6520 g linkFile file \n+00004ef0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:\"\n+00004f00: 2c0a 0909 0909 2040 246f 7574 5d29 3b0a ,..... @$out]);.\n+00004f10: 0965 7869 7420 313b 0a20 2020 207d 0a20 .exit 1;. }. \n+00004f20: 2020 2024 6c69 6e6b 4669 6c65 2d3e 636c $linkFile->cl\n+00004f30: 6f73 6528 293b 0a20 2020 206d 7920 246f ose();. my $o\n+00004f40: 6c64 3b0a 2020 2020 7768 696c 6520 2824 ld;. while ($\n+00004f50: 6f6c 6420 3d20 2470 6172 466f 726b 5072 old = $parForkPr\n+00004f60: 6f63 2d3e 7761 6974 466f 7241 6c6c 4a6f oc->waitForAllJo\n+00004f70: 6273 2829 290a 2020 2020 7b0a 0924 6e6f bs()). {..$no\n+00004f80: 436f 6d70 7265 7373 6564 4669 6c65 732b CompressedFiles+\n+00004f90: 2b3b 0a09 263a 3a77 6169 7446 6f72 4669 +;..&::waitForFi\n+00004fa0: 6c65 2822 2466 2463 6f6d 7072 506f 7374 le(\"$f$comprPost\n+00004fb0: 6669 7822 293b 0a20 096d 7920 2466 203d fix\");. .my $f =\n+00004fc0: 2024 6f6c 642d 3e67 6574 2827 2d77 6861 $old->get('-wha\n+00004fd0: 7427 203d 3e20 2769 6e66 6f27 293b 0a09 t' => 'info');..\n+00004fe0: 246e 6577 5369 7a65 202b 3d20 2873 7461 $newSize += (sta\n+00004ff0: 7428 2224 6624 636f 6d70 7250 6f73 7466 t(\"$f$comprPostf\n+00005000: 6978 2229 295b 375d 3b0a 096d 7920 246f ix\"))[7];..my $o\n+00005010: 7574 203d 2024 6f6c 642d 3e67 6574 5354 ut = $old->getST\n+00005020: 4445 5252 2829 3b0a 0924 7072 4c6f 672d DERR();..$prLog-\n+00005030: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00005040: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n+00005050: 2d73 7472 2720 3d3e 205b 2253 5444 4552 -str' => [\"STDER\n+00005060: 5220 6f66 203c 2463 6f6d 7072 2040 636f R of <$compr @co\n+00005070: 6d70 7250 6172 2022 202e 0a09 0909 0920 mprPar \" ...... \n+00005080: 223c 2466 203e 2466 2463 6f6d 7072 506f \"<$f >$f$comprPo\n+00005090: 7374 6669 783e 3a22 2c20 4024 6f75 745d stfix>:\", @$out]\n+000050a0: 290a 0920 2020 2069 6620 2840 246f 7574 ).. if (@$out\n+000050b0: 203e 2030 293b 0a09 2470 724c 6f67 2d3e > 0);..$prLog->\n+000050c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+000050d0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n+000050e0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n+000050f0: 2064 656c 6574 6520 3c24 663e 225d 290a delete <$f>\"]).\n+00005100: 0920 2020 2069 6620 2875 6e6c 696e 6b20 . if (unlink \n+00005110: 2466 2920 213d 2031 3b0a 2020 2020 7d0a $f) != 1;. }.\n+00005120: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00005130: 6e74 2827 2d6b 696e 6427 203d 3e20 2753 nt('-kind' => 'S\n+00005140: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n+00005150: 205b 2263 7265 6174 6564 2024 6e6f 4d6b [\"created $noMk\n+00005160: 6469 7220 6469 7265 6374 6f72 6965 7322 dir directories\"\n+00005170: 2c0a 0909 0920 2020 2020 2263 7265 6174 ,.... \"creat\n+00005180: 6564 2024 6e6f 5379 6d4c 696e 6b20 7379 ed $noSymLink sy\n+00005190: 6d62 6f6c 6963 206c 696e 6b73 222c 0a09 mbolic links\",..\n+000051a0: 0909 2020 2020 2022 636f 6d70 7265 7373 .. \"compress\n+000051b0: 6564 2024 6e6f 436f 6d70 7265 7373 6564 ed $noCompressed\n+000051c0: 4669 6c65 7320 6669 6c65 7322 2c0a 0909 Files files\",...\n+000051d0: 0920 2020 2020 2275 7365 6420 2220 2e20 . \"used \" . \n+000051e0: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl\n+000051f0: 6528 246e 6577 5369 7a65 2929 5b30 5d20 e($newSize))[0] \n+00005200: 2e0a 0909 0920 2020 2020 2220 696e 7374 ..... \" inst\n+00005210: 6561 6420 6f66 2022 202e 2028 263a 3a68 ead of \" . (&::h\n+00005220: 756d 616e 5265 6164 6162 6c65 2824 6f6c umanReadable($ol\n+00005230: 6453 697a 6529 295b 305d 202e 0a09 0909 dSize))[0] .....\n+00005240: 2020 2020 2022 2028 246e 6577 5369 7a65 \" ($newSize\n+00005250: 203c 2d20 246f 6c64 5369 7a65 2922 5d29 <- $oldSize)\"])\n+00005260: 3b0a 0a20 2020 2023 0a20 2020 2023 2073 ;.. #. # s\n+00005270: 6574 2068 6172 6420 6c69 6e6b 730a 2020 et hard links. \n+00005280: 2020 230a 2020 2020 2470 724c 6f67 2d3e #. $prLog->\n+00005290: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+000052a0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str'\n+000052b0: 203d 3e20 5b22 7068 6173 6520 323a 2073 => [\"phase 2: s\n+000052c0: 6574 7469 6e67 2068 6172 6420 6c69 6e6b etting hard link\n+000052d0: 7322 5d29 3b0a 0a20 2020 206d 7920 2477 s\"]);.. my $w\n+000052e0: 6974 6842 6c6f 636b 6564 4669 6c65 7320 ithBlockedFiles \n+000052f0: 3d20 303b 0a20 2020 206d 7920 246e 6f48 = 0;. my $noH\n+00005300: 6172 644c 696e 6b73 203d 2030 3b0a 2020 ardLinks = 0;. \n+00005310: 2020 6d79 2024 6e6f 436f 7069 6564 4669 my $noCopiedFi\n+00005320: 6c65 7320 3d20 303b 0a20 2020 206d 7920 les = 0;. my \n+00005330: 2470 7220 3d20 2470 726f 6772 6573 7352 $pr = $progressR\n+00005340: 6570 6f72 7420 2a20 3230 303b 0a20 2020 eport * 200;. \n+00005350: 2024 6c69 6e6b 4669 6c65 203d 2070 6970 $linkFile = pip\n+00005360: 6546 726f 6d46 6f72 6b2d 3e6e 6577 2827 eFromFork->new('\n+00005370: 2d65 7865 6327 203d 3e20 2762 7a69 7032 -exec' => 'bzip2\n+00005380: 272c 0a09 0909 0920 2027 2d70 6172 616d ',..... '-param\n+00005390: 2720 3d3e 205b 272d 6427 5d2c 0a09 0909 ' => ['-d'],....\n+000053a0: 0920 2027 2d73 7464 696e 2720 3d3e 2024 . '-stdin' => $\n+000053b0: 662c 0a09 0909 0920 2027 2d6f 7574 5261 f,..... '-outRa\n+000053c0: 6e64 6f6d 2720 3d3e 2027 2f74 6d70 2f73 ndom' => '/tmp/s\n+000053d0: 7462 7550 6970 6546 726f 6d31 312d 272c tbuPipeFrom11-',\n+000053e0: 0a09 0909 0920 2027 2d70 724c 6f67 2720 ..... '-prLog' \n+000053f0: 3d3e 2024 7072 4c6f 6729 3b0a 0a20 2020 => $prLog);.. \n+00005400: 206c 6f63 616c 202a 424c 4f43 4b4d 4435 local *BLOCKMD5\n+00005410: 3b0a 2020 2020 6966 2028 2d65 2022 2464 ;. if (-e \"$d\n+00005420: 6972 2f2e 6d64 3542 6c6f 636b 4368 6563 ir/.md5BlockChec\n+00005430: 6b53 756d 7322 290a 2020 2020 7b0a 0924 kSums\"). {..$\n+00005440: 7769 7468 426c 6f63 6b65 6446 696c 6573 withBlockedFiles\n+00005450: 203d 2031 3b0a 096f 7065 6e28 424c 4f43 = 1;..open(BLOC\n+00005460: 4b4d 4435 2c20 223e 3e22 2c20 2224 6469 KMD5, \">>\", \"$di\n+00005470: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck\n+00005480: 5375 6d73 2229 206f 720a 0920 2020 2024 Sums\") or.. $\n+00005490: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+000054a0: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+000054b0: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+000054c0: 205b 2263 616e 6e6f 7420 6170 7065 6e64 [\"cannot append\n+000054d0: 2074 6f20 3c24 6469 722f 2e6d 6435 426c to <$dir/.md5Bl\n+000054e0: 6f63 6b43 6865 636b 5375 6d73 3e22 5d2c ockCheckSums>\"],\n+000054f0: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' =>\n+00005500: 2031 293b 0a20 2020 207d 0a0a 2020 2020 1);. }.. \n+00005510: 7768 696c 6520 2824 6c20 3d20 246c 696e while ($l = $lin\n+00005520: 6b46 696c 652d 3e72 6561 6428 2929 0a20 kFile->read()). \n+00005530: 2020 207b 0a09 6e65 7874 2069 6620 246c {..next if $l\n+00005540: 203d 7e20 2f5e 232f 3b0a 0963 686f 6d70 =~ /^#/;..chomp\n+00005550: 2024 6c3b 0a09 6d79 2028 2477 6861 742c $l;..my ($what,\n+00005560: 2024 6d64 3529 203d 2073 706c 6974 282f $md5) = split(/\n+00005570: 5c73 2b2f 2c20 246c 2c20 3229 3b0a 096d \\s+/, $l, 2);..m\n+00005580: 7920 246c 696e 654e 7220 3d20 246c 696e y $lineNr = $lin\n+00005590: 6b46 696c 652d 3e67 6574 2827 2d77 6861 kFile->get('-wha\n+000055a0: 7427 203d 3e20 276c 696e 654e 7227 293b t' => 'lineNr');\n+000055b0: 0a09 6966 2028 2477 6861 7420 6571 2027 ..if ($what eq '\n+000055c0: 6c69 6e6b 2729 0a09 7b0a 0920 2020 206d link')..{.. m\n+000055d0: 7920 2465 7869 7374 696e 6746 696c 6520 y $existingFile \n+000055e0: 3d20 246c 696e 6b46 696c 652d 3e72 6561 = $linkFile->rea\n+000055f0: 6428 293b 0a09 2020 2020 2465 7869 7374 d();.. $exist\n+00005600: 696e 6746 696c 6520 3d20 2224 6469 722f ingFile = \"$dir/\n+00005610: 2465 7869 7374 696e 6746 696c 6522 3b0a $existingFile\";.\n+00005620: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00005630: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n+00005640: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n+00005650: 3e20 5b22 6669 6c65 203c 2466 3e20 656e > [\"file <$f> en\n+00005660: 6473 2075 6e65 7870 6563 7465 6420 6174 ds unexpected at\n+00005670: 206c 696e 6520 246c 696e 654e 7222 5d2c line $lineNr\"],\n+00005680: 0a09 0909 2020 272d 6578 6974 2720 3d3e .... '-exit' =>\n+00005690: 2031 290a 0909 756e 6c65 7373 2024 6578 1)...unless $ex\n+000056a0: 6973 7469 6e67 4669 6c65 3b0a 0920 2020 istingFile;.. \n+000056b0: 2063 686f 6d70 2024 6578 6973 7469 6e67 chomp $existing\n+000056c0: 4669 6c65 3b0a 0920 2020 2024 6578 6973 File;.. $exis\n+000056d0: 7469 6e67 4669 6c65 203d 7e20 732f 5c30 tingFile =~ s/\\0\n+000056e0: 2f5c 6e2f 6f67 3b0a 0a09 2020 2020 6d79 /\\n/og;... my\n+000056f0: 2024 6e65 774c 696e 6b20 3d20 246c 696e $newLink = $lin\n+00005700: 6b46 696c 652d 3e72 6561 6428 293b 0a09 kFile->read();..\n+00005710: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00005720: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00005730: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n+00005740: 205b 2266 696c 6520 3c24 663e 2065 6e64 [\"file <$f> end\n+00005750: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at \n+00005760: 6c69 6e65 2024 6c69 6e65 4e72 225d 2c0a line $lineNr\"],.\n+00005770: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n+00005780: 3129 0a09 0975 6e6c 6573 7320 246e 6577 1)...unless $new\n+00005790: 4c69 6e6b 3b0a 0920 2020 2063 686f 6d70 Link;.. chomp\n+000057a0: 2024 6e65 774c 696e 6b3b 0a09 2020 2020 $newLink;.. \n+000057b0: 246e 6577 4c69 6e6b 203d 7e20 732f 5c30 $newLink =~ s/\\0\n+000057c0: 2f5c 6e2f 6f67 3b0a 0920 2020 2024 6e65 /\\n/og;.. $ne\n+000057d0: 774c 696e 6b20 3d20 2224 6469 722f 246e wLink = \"$dir/$n\n+000057e0: 6577 4c69 6e6b 223b 0a09 2020 2020 2465 ewLink\";.. $e\n+000057f0: 7869 7374 696e 6746 696c 6520 3d20 246d xistingFile = $m\n+00005800: 6435 546f 4669 6c65 7b24 6d64 357d 2069 d5ToFile{$md5} i\n+00005810: 6620 6578 6973 7473 2024 6d64 3554 6f46 f exists $md5ToF\n+00005820: 696c 657b 246d 6435 7d3b 0a09 2020 2020 ile{$md5};.. \n+00005830: 6966 2028 6c69 6e6b 2024 6578 6973 7469 if (link $existi\n+00005840: 6e67 4669 6c65 2c20 246e 6577 4c69 6e6b ngFile, $newLink\n+00005850: 290a 0920 2020 207b 0a09 0924 6e6f 4861 ).. {...$noHa\n+00005860: 7264 4c69 6e6b 732b 2b3b 0a09 0924 7072 rdLinks++;...$pr\n+00005870: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00005880: 6427 203d 3e20 2753 272c 0a09 0909 2020 d' => 'S',.... \n+00005890: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+000058a0: 6c69 6e6b 6564 2024 6e6f 4861 7264 4c69 linked $noHardLi\n+000058b0: 6e6b 7320 6669 6c65 7322 5d29 0a09 0909 nks files\"])....\n+000058c0: 6966 2028 2470 7220 616e 6420 246e 6f48 if ($pr and $noH\n+000058d0: 6172 644c 696e 6b73 2025 2024 7072 203d ardLinks % $pr =\n+000058e0: 3d20 3029 3b0a 0920 2020 207d 0a09 2020 = 0);.. }.. \n+000058f0: 2020 656c 7365 0a09 2020 2020 7b0a 0909 else.. {...\n+00005900: 2320 636f 7079 2066 696c 650a 2020 2020 # copy file. \n+00005910: 2020 2020 2020 2020 2020 2020 756e 6c65 unle\n+00005920: 7373 2028 3a3a 636f 7079 4669 6c65 2822 ss (::copyFile(\"\n+00005930: 2465 7869 7374 696e 6746 696c 6522 2c20 $existingFile\", \n+00005940: 2224 6e65 774c 696e 6b22 2929 0a20 2020 \"$newLink\")). \n+00005950: 2020 2020 2020 2020 2020 2020 207b 0a20 {. \n+00005960: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00005970: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00005980: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00005990: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+000059a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000059b0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+000059c0: 6f75 6c64 206e 6f74 206c 696e 6b2f 636f ould not link/co\n+000059d0: 7079 2022 202e 0a09 0909 0909 2020 2020 py \" ....... \n+000059e0: 2022 2465 7869 7374 696e 6746 696c 6520 \"$existingFile \n+000059f0: 246e 6577 4c69 6e6b 225d 293b 0a20 2020 $newLink\"]);. \n+00005a00: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00005a10: 206e 6578 743b 0a20 2020 2020 2020 2020 next;. \n+00005a20: 2020 2020 2020 207d 0a09 0924 6e6f 436f }...$noCo\n+00005a30: 7069 6564 4669 6c65 732b 2b3b 0a09 0924 piedFiles++;...$\n+00005a40: 6d64 3554 6f46 696c 657b 246d 6435 7d20 md5ToFile{$md5} \n+00005a50: 3d20 246e 6577 4c69 6e6b 3b0a 0920 2020 = $newLink;.. \n+00005a60: 207d 0a09 7d0a 0965 6c73 6966 2028 2477 }..}..elsif ($w\n+00005a70: 6861 7420 6571 2027 6469 7227 290a 097b hat eq 'dir')..{\n+00005a80: 0a09 7d0a 0965 6c73 6966 2028 2477 6861 ..}..elsif ($wha\n+00005a90: 7420 6571 2027 636f 6d70 7265 7373 2720 t eq 'compress' \n+00005aa0: 6f72 2024 7768 6174 2065 7120 2773 796d or $what eq 'sym\n+00005ab0: 6c69 6e6b 2729 0a09 7b0a 0920 2020 206d link')..{.. m\n+00005ac0: 7920 2466 696c 6520 3d20 246c 696e 6b46 y $file = $linkF\n+00005ad0: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. \n+00005ae0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00005af0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00005b00: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n+00005b10: 2266 696c 6520 3c24 663e 2065 6e64 7320 \"file <$f> ends \n+00005b20: 756e 6578 7065 6374 6564 2061 7420 6c69 unexpected at li\n+00005b30: 6e65 2024 6c69 6e65 4e72 225d 2c0a 0909 ne $lineNr\"],...\n+00005b40: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n+00005b50: 0a09 0975 6e6c 6573 7320 2466 696c 653b ...unless $file;\n+00005b60: 0a09 7d0a 0965 6c73 6966 2028 2477 6861 ..}..elsif ($wha\n+00005b70: 7420 6571 2027 6c69 6e6b 5379 6d6c 696e t eq 'linkSymlin\n+00005b80: 6b27 290a 097b 0a09 2020 2020 6d79 2024 k')..{.. my $\n+00005b90: 6578 6973 7469 6e67 4669 6c65 203d 2024 existingFile = $\n+00005ba0: 6c69 6e6b 4669 6c65 2d3e 7265 6164 2829 linkFile->read()\n+00005bb0: 3b0a 0920 2020 2024 6578 6973 7469 6e67 ;.. $existing\n+00005bc0: 4669 6c65 203d 2022 2464 6972 2f24 6578 File = \"$dir/$ex\n+00005bd0: 6973 7469 6e67 4669 6c65 223b 0a09 2020 istingFile\";.. \n+00005be0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n+00005bf0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00005c00: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n+00005c10: 2266 696c 6520 3c24 663e 2065 6e64 7320 \"file <$f> ends \n+00005c20: 756e 6578 7065 6374 6564 2061 7420 6c69 unexpected at li\n+00005c30: 6e65 2024 6c69 6e65 4e72 225d 2c0a 0909 ne $lineNr\"],...\n+00005c40: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n+00005c50: 0a09 0975 6e6c 6573 7320 2465 7869 7374 ...unless $exist\n+00005c60: 696e 6746 696c 653b 0a09 2020 2020 6368 ingFile;.. ch\n+00005c70: 6f6d 7020 2465 7869 7374 696e 6746 696c omp $existingFil\n+00005c80: 653b 0a09 2020 2020 2465 7869 7374 696e e;.. $existin\n+00005c90: 6746 696c 6520 3d7e 2073 2f5c 302f 5c6e gFile =~ s/\\0/\\n\n+00005ca0: 2f6f 673b 0a0a 0920 2020 206d 7920 246e /og;... my $n\n+00005cb0: 6577 4c69 6e6b 203d 2024 6c69 6e6b 4669 ewLink = $linkFi\n+00005cc0: 6c65 2d3e 7265 6164 2829 3b0a 0920 2020 le->read();.. \n+00005cd0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00005ce0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00005cf0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00005d00: 6669 6c65 203c 2466 3e20 656e 6473 2075 file <$f> ends u\n+00005d10: 6e65 7870 6563 7465 6420 6174 206c 696e nexpected at lin\n+00005d20: 6520 246c 696e 654e 7222 5d2c 0a09 0909 e $lineNr\"],....\n+00005d30: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n+00005d40: 0909 756e 6c65 7373 2024 6e65 774c 696e ..unless $newLin\n+00005d50: 6b3b 0a09 2020 2020 6368 6f6d 7020 246e k;.. chomp $n\n+00005d60: 6577 4c69 6e6b 3b0a 0920 2020 2024 6e65 ewLink;.. $ne\n+00005d70: 774c 696e 6b20 3d7e 2073 2f5c 302f 5c6e wLink =~ s/\\0/\\n\n+00005d80: 2f6f 673b 0a09 2020 2020 246e 6577 4c69 /og;.. $newLi\n+00005d90: 6e6b 203d 2022 2464 6972 2f24 6e65 774c nk = \"$dir/$newL\n+00005da0: 696e 6b22 3b0a 0920 2020 2069 6620 286c ink\";.. if (l\n+00005db0: 696e 6b20 2465 7869 7374 696e 6746 696c ink $existingFil\n+00005dc0: 652c 2024 6e65 774c 696e 6b29 0a09 2020 e, $newLink).. \n+00005dd0: 2020 7b0a 0909 246e 6f48 6172 644c 696e {...$noHardLin\n+00005de0: 6b73 2b2b 3b0a 0909 2470 724c 6f67 2d3e ks++;...$prLog->\n+00005df0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n+00005e00: 2027 5327 2c0a 0909 0920 2020 2020 2027 'S',.... '\n+00005e10: 2d73 7472 2720 3d3e 205b 226c 696e 6b65 -str' => [\"linke\n+00005e20: 6420 246e 6f48 6172 644c 696e 6b73 2066 d $noHardLinks f\n+00005e30: 696c 6573 225d 290a 0909 0969 6620 2824 iles\"])....if ($\n+00005e40: 7072 2061 6e64 2024 6e6f 4861 7264 4c69 pr and $noHardLi\n+00005e50: 6e6b 7320 2520 2470 7220 3d3d 2030 293b nks % $pr == 0);\n+00005e60: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00005e70: 650a 0920 2020 207b 0a09 0923 2063 7265 e.. {...# cre\n+00005e80: 6174 6520 7379 6d6c 696e 6b0a 0909 2470 ate symlink...$p\n+00005e90: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00005ea0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+00005eb0: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>..\n+00005ec0: 0909 2020 2020 2020 5b22 6361 6e6e 6f74 .. [\"cannot\n+00005ed0: 2063 7265 6174 6520 7379 6d6c 696e 6b20 create symlink \n+00005ee0: 6672 6f6d 203c 246e 6577 4c69 6e6b 3e20 from <$newLink> \n+00005ef0: 2d3e 203c 246d 6435 3e22 5d29 0a09 0975 -> <$md5>\"])...u\n+00005f00: 6e6c 6573 7320 7379 6d6c 696e 6b20 246d nless symlink $m\n+00005f10: 6435 2c20 246e 6577 4c69 6e6b 3b0a 0920 d5, $newLink;.. \n+00005f20: 2020 2024 6e6f 5379 6d4c 696e 6b2b 2b3b $noSymLink++;\n+00005f30: 0a09 2020 2020 7d0a 097d 0a09 656c 7369 .. }..}..elsi\n+00005f40: 6620 2824 7768 6174 2065 7120 276c 696e f ($what eq 'lin\n+00005f50: 6b62 6c6f 636b 2729 0a09 7b0a 0920 2020 kblock')..{.. \n+00005f60: 206d 7920 2465 7869 7374 696e 6746 696c my $existingFil\n+00005f70: 6520 3d20 246c 696e 6b46 696c 652d 3e72 e = $linkFile->r\n+00005f80: 6561 6428 293b 0a09 2020 2020 2465 7869 ead();.. $exi\n+00005f90: 7374 696e 6746 696c 6520 3d20 2224 6469 stingFile = \"$di\n+00005fa0: 722f 2465 7869 7374 696e 6746 696c 6522 r/$existingFile\"\n+00005fb0: 3b0a 0920 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p\n+00005fc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00005fd0: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str'\n+00005fe0: 203d 3e20 5b22 6669 6c65 203c 2466 3e20 => [\"file <$f> \n+00005ff0: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected \n+00006000: 6174 206c 696e 6520 246c 696e 654e 7222 at line $lineNr\"\n+00006010: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' \n+00006020: 3d3e 2031 290a 0909 756e 6c65 7373 2024 => 1)...unless $\n+00006030: 6578 6973 7469 6e67 4669 6c65 3b0a 0920 existingFile;.. \n+00006040: 2020 2063 686f 6d70 2024 6578 6973 7469 chomp $existi\n+00006050: 6e67 4669 6c65 3b0a 0920 2020 2024 6578 ngFile;.. $ex\n+00006060: 6973 7469 6e67 4669 6c65 203d 7e20 732f istingFile =~ s/\n+00006070: 5c30 2f5c 6e2f 6f67 3b0a 0a09 2020 2020 \\0/\\n/og;... \n+00006080: 6d79 2024 6e65 774c 696e 6b20 3d20 246c my $newLink = $l\n+00006090: 696e 6b46 696c 652d 3e72 6561 6428 293b inkFile->read();\n+000060a0: 0a09 2020 2020 246e 6577 4c69 6e6b 203d .. $newLink =\n+000060b0: 2022 2464 6972 2f24 6e65 774c 696e 6b22 \"$dir/$newLink\"\n+000060c0: 3b0a 0920 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p\n+000060d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+000060e0: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str'\n+000060f0: 203d 3e20 5b22 6669 6c65 203c 2466 3e20 => [\"file <$f> \n+00006100: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected \n+00006110: 6174 206c 696e 6520 246c 696e 654e 7222 at line $lineNr\"\n+00006120: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' \n+00006130: 3d3e 2031 290a 0909 756e 6c65 7373 2024 => 1)...unless $\n+00006140: 6e65 774c 696e 6b3b 0a09 2020 2020 6368 newLink;.. ch\n+00006150: 6f6d 7020 246e 6577 4c69 6e6b 3b0a 0920 omp $newLink;.. \n+00006160: 2020 2024 6e65 774c 696e 6b20 3d7e 2073 $newLink =~ s\n+00006170: 2f5c 302f 5c6e 2f6f 673b 0a0a 0920 2020 /\\0/\\n/og;... \n+00006180: 2024 6e6f 4861 7264 4c69 6e6b 7320 2b3d $noHardLinks +=\n+00006190: 0a09 0926 3a3a 6861 7264 4c69 6e6b 4469 ...&::hardLinkDi\n+000061a0: 7228 2465 7869 7374 696e 6746 696c 652c r($existingFile,\n+000061b0: 2024 6e65 774c 696e 6b2c 2027 5c41 5c64 $newLink, '\\A\\d\n+000061c0: 2e2a 272c 2024 7072 4c6f 6729 3b0a 0a09 .*', $prLog);...\n+000061d0: 2020 2020 6d79 2024 626c 6f63 6b4c 6f63 my $blockLoc\n+000061e0: 616c 203d 0a09 0970 6970 6546 726f 6d46 al =...pipeFromF\n+000061f0: 6f72 6b2d 3e6e 6577 2827 2d65 7865 6327 ork->new('-exec'\n+00006200: 203d 3e20 2762 7a69 7032 272c 0a09 0909 => 'bzip2',....\n+00006210: 0920 2027 2d70 6172 616d 2720 3d3e 205b . '-param' => [\n+00006220: 272d 6427 5d2c 0a09 0909 0920 2027 2d73 '-d'],..... '-s\n+00006230: 7464 696e 2720 3d3e 2022 246e 6577 4c69 tdin' => \"$newLi\n+00006240: 6e6b 2f2e 6d64 3542 6c6f 636b 4368 6563 nk/.md5BlockChec\n+00006250: 6b53 756d 732e 627a 3222 2c0a 0909 0909 kSums.bz2\",.....\n+00006260: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' =\n+00006270: 3e20 272f 746d 702f 7374 6275 5069 7065 > '/tmp/stbuPipe\n+00006280: 4672 6f6d 3132 2d27 2c0a 0909 0909 2020 From12-',..... \n+00006290: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+000062a0: 6f67 293b 0a0a 0920 2020 206d 7920 246c og);... my $l\n+000062b0: 3b0a 0920 2020 2077 6869 6c65 2028 246c ;.. while ($l\n+000062c0: 203d 2024 626c 6f63 6b4c 6f63 616c 2d3e = $blockLocal->\n+000062d0: 7265 6164 2829 290a 0920 2020 207b 0a09 read()).. {..\n+000062e0: 0970 7269 6e74 2042 4c4f 434b 4d44 3520 .print BLOCKMD5 \n+000062f0: 246c 3b0a 0920 2020 207d 0a09 2020 2020 $l;.. }.. \n+00006300: 2462 6c6f 636b 4c6f 6361 6c2d 3e77 6169 $blockLocal->wai\n+00006310: 7428 293b 0a09 2020 2020 6d79 2024 6f75 t();.. my $ou\n+00006320: 7420 3d20 2462 6c6f 636b 4c6f 6361 6c2d t = $blockLocal-\n+00006330: 3e67 6574 5354 4445 5252 2829 3b0a 0920 >getSTDERR();.. \n+00006340: 2020 2069 6620 2840 246f 7574 290a 0920 if (@$out).. \n+00006350: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n+00006360: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n+00006370: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n+00006380: 7374 7227 203d 3e20 5b22 7265 6164 696e str' => [\"readin\n+00006390: 6720 6c69 6e6b 4669 6c65 2066 696c 6520 g linkFile file \n+000063a0: 7265 706f 7274 7320 6572 726f 7273 3a22 reports errors:\"\n+000063b0: 2c0a 0909 0909 0920 4024 6f75 745d 293b ,...... @$out]);\n+000063c0: 0a09 0965 7869 7420 313b 0a09 2020 2020 ...exit 1;.. \n+000063d0: 7d0a 0920 2020 2024 626c 6f63 6b4c 6f63 }.. $blockLoc\n+000063e0: 616c 2d3e 636c 6f73 6528 293b 0a09 7d0a al->close();..}.\n+000063f0: 0965 6c73 650a 097b 0a09 2020 2020 2470 .else..{.. $p\n+00006400: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00006410: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n+00006420: 2027 2d73 7472 2720 3d3e 205b 2269 6c6c '-str' => [\"ill\n+00006430: 6567 616c 206b 6579 776f 7264 203c 2477 egal keyword <$w\n+00006440: 6861 743e 2022 202e 0a09 0909 0920 2020 hat> \" ...... \n+00006450: 2020 2261 7420 6c69 6e65 2024 6c69 6e65 \"at line $line\n+00006460: 4e72 2069 6e20 6669 6c65 203c 2466 3e3a Nr in file <$f>:\n+00006470: 222c 0a09 0909 2020 2020 2020 2020 2020 \",.... \n+00006480: 2020 2022 5c74 3c24 6c3e 225d 2c0a 0909 \"\\t<$l>\"],...\n+00006490: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n+000064a0: 3b0a 097d 0a0a 2020 2020 7d0a 2020 2020 ;..}.. }. \n+000064b0: 6966 2028 2477 6974 6842 6c6f 636b 6564 if ($withBlocked\n+000064c0: 4669 6c65 7329 0a20 2020 207b 0a09 636c Files). {..cl\n+000064d0: 6f73 6528 424c 4f43 4b4d 4435 2920 6f72 ose(BLOCKMD5) or\n+000064e0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n+000064f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00006500: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n+00006510: 3d3e 0a09 0909 2020 5b22 6361 6e6e 6f74 =>.... [\"cannot\n+00006520: 2063 6c6f 7365 2066 696c 6520 3c24 6469 close file <$di\n+00006530: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck\n+00006540: 5375 6d73 3e22 5d2c 0a09 0909 2020 272d Sums>\"],.... '-\n+00006550: 6578 6974 2720 3d3e 2031 293b 0a20 2020 exit' => 1);. \n+00006560: 207d 0a20 2020 2024 6c69 6e6b 4669 6c65 }. $linkFile\n+00006570: 2d3e 7761 6974 2829 3b0a 2020 2020 246f ->wait();. $o\n+00006580: 7574 203d 2024 6c69 6e6b 4669 6c65 2d3e ut = $linkFile->\n+00006590: 6765 7453 5444 4552 5228 293b 0a20 2020 getSTDERR();. \n+000065a0: 2069 6620 2840 246f 7574 290a 2020 2020 if (@$out). \n+000065b0: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print\n+000065c0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+000065d0: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+000065e0: 3d3e 205b 2272 6561 6469 6e67 206c 696e => [\"reading lin\n+000065f0: 6b46 696c 6520 6669 6c65 2072 6570 6f72 kFile file repor\n+00006600: 7473 2065 7272 6f72 733a 222c 0a09 0909 ts errors:\",....\n+00006610: 0920 4024 6f75 745d 293b 0a09 6578 6974 . @$out]);..exit\n+00006620: 2031 3b0a 2020 2020 7d0a 2020 2020 246c 1;. }. $l\n+00006630: 696e 6b46 696c 652d 3e63 6c6f 7365 2829 inkFile->close()\n+00006640: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n+00006650: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+00006660: 5327 2c0a 0909 2020 272d 7374 7227 203d S',... '-str' =\n+00006670: 3e20 5b22 6c69 6e6b 6564 2024 6e6f 4861 > [\"linked $noHa\n+00006680: 7264 4c69 6e6b 7320 6669 6c65 7322 5d29 rdLinks files\"])\n+00006690: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n+000066a0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n+000066b0: 5327 2c0a 0909 2020 272d 7374 7227 203d S',... '-str' =\n+000066c0: 3e20 5b22 636f 7069 6564 2024 6e6f 436f > [\"copied $noCo\n+000066d0: 7069 6564 4669 6c65 7320 6669 6c65 7322 piedFiles files\"\n+000066e0: 5d29 0a09 6966 2024 6e6f 436f 7069 6564 ])..if $noCopied\n+000066f0: 4669 6c65 733b 0a0a 2020 2020 6d79 2024 Files;.. my $\n+00006700: 636f 6d70 724d 6435 426c 6f63 6b43 6865 comprMd5BlockChe\n+00006710: 636b 5375 6d73 3b0a 2020 2020 6966 2028 ckSums;. if (\n+00006720: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile\n+00006730: 7320 616e 6420 2d65 2022 2464 6972 2f2e s and -e \"$dir/.\n+00006740: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2\n+00006750: 2229 0a20 2020 207b 0a09 2320 636f 6d70 \"). {..# comp\n+00006760: 7265 7373 202e 6d64 3542 6c6f 636b 4368 ress .md5BlockCh\n+00006770: 6563 6b53 756d 730a 0924 636f 6d70 724d eckSums..$comprM\n+00006780: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n+00006790: 203d 0a09 2020 2020 666f 726b 5072 6f63 =.. forkProc\n+000067a0: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' =>\n+000067b0: 2027 627a 6970 3227 2c0a 0909 0920 2027 'bzip2',.... '\n+000067c0: 2d70 6172 616d 2720 3d3e 205b 2224 6469 -param' => [\"$di\n+000067d0: 722f 2e6d 6435 426c 6f63 6b43 6865 636b r/.md5BlockCheck\n+000067e0: 5375 6d73 225d 2c0a 0909 0920 2027 2d6f Sums\"],.... '-o\n+000067f0: 7574 5261 6e64 6f6d 2720 3d3e 0a09 0909 utRandom' =>....\n+00006800: 2020 272f 746d 702f 7374 6275 2d63 6f6d '/tmp/stbu-com\n+00006810: 7072 2d27 2c0a 0909 0920 2027 2d70 724c pr-',.... '-prL\n+00006820: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+00006830: 2020 2020 7d0a 0a20 2020 2023 0a20 2020 }.. #. \n+00006840: 2023 2073 6574 2066 696c 6520 7065 726d # set file perm\n+00006850: 6973 7369 6f6e 730a 2020 2020 230a 2020 issions. #. \n+00006860: 2020 6d79 2024 7072 6573 6572 7665 5065 my $preservePe\n+00006870: 726d 7320 3d0a 0924 7263 7366 2d3e 6765 rms =..$rcsf->ge\n+00006880: 7449 6e66 6f57 6974 6850 6172 2827 7072 tInfoWithPar('pr\n+00006890: 6573 6572 7665 5065 726d 7327 2920 6571 eservePerms') eq\n+000068a0: 2027 6e6f 2720 3f20 3020 3a20 313b 0a23 'no' ? 0 : 1;.#\n+000068b0: 0928 2824 246d 6574 617b 2770 7265 7365 .(($$meta{'prese\n+000068c0: 7276 6550 6572 6d73 277d 292d 3e5b 305d rvePerms'})->[0]\n+000068d0: 2065 7120 276e 6f27 2920 3f20 3020 3a20 eq 'no') ? 0 : \n+000068e0: 313b 0a20 2020 2024 7072 203d 2024 7072 1;. $pr = $pr\n+000068f0: 6f67 7265 7373 5265 706f 7274 202a 2032 ogressReport * 2\n+00006900: 3030 303b 0a20 2020 2069 6620 2824 7072 000;. if ($pr\n+00006910: 6573 6572 7665 5065 726d 7329 0a20 2020 eservePerms). \n+00006920: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin\n+00006930: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n+00006940: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n+00006950: 203d 3e20 5b22 7068 6173 6520 333a 2073 => [\"phase 3: s\n+00006960: 6574 7469 6e67 2066 696c 6520 7065 726d etting file perm\n+00006970: 6973 7369 6f6e 7322 5d29 3b0a 2309 6d79 issions\"]);.#.my\n+00006980: 2024 636f 6d70 7250 6f73 7466 6978 203d $comprPostfix =\n+00006990: 2028 2424 6d65 7461 7b27 706f 7374 6669 ($$meta{'postfi\n+000069a0: 7827 7d29 2d3e 5b30 5d3b 0a09 6d79 2024 x'})->[0];..my $\n+000069b0: 636f 6d70 7250 6f73 7466 6978 203d 2024 comprPostfix = $\n+000069c0: 7263 7366 2d3e 6765 7449 6e66 6f57 6974 rcsf->getInfoWit\n+000069d0: 6850 6172 2827 706f 7374 6669 7827 293b hPar('postfix');\n+000069e0: 0a0a 096d 7920 246e 6f46 696c 6573 203d ...my $noFiles =\n+000069f0: 2030 3b0a 096d 7920 2472 6373 6620 3d20 0;..my $rcsf = \n+00006a00: 7265 6164 4368 6563 6b53 756d 4669 6c65 readCheckSumFile\n+00006a10: 2d3e 6e65 7728 272d 6368 6563 6b53 756d ->new('-checkSum\n+00006a20: 4669 6c65 2720 3d3e 2022 2464 6972 2f2e File' => \"$dir/.\n+00006a30: 6d64 3543 6865 636b 5375 6d73 222c 0a09 md5CheckSums\",..\n+00006a40: 0909 0909 2027 2d70 724c 6f67 2720 3d3e .... '-prLog' =>\n+00006a50: 2024 7072 4c6f 6729 3b0a 096d 7920 2824 $prLog);..my ($\n+00006a60: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n+00006a70: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n+00006a80: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n+00006a90: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime,\n+00006aa0: 0a09 2020 2020 2473 697a 652c 2024 7569 .. $size, $ui\n+00006ab0: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, \n+00006ac0: 2466 293b 0a09 7768 696c 6520 2828 2824 $f);..while ((($\n+00006ad0: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n+00006ae0: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n+00006af0: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n+00006b00: 2024 6d74 696d 652c 0a09 0920 2461 7469 $mtime,... $ati\n+00006b10: 6d65 2c20 2473 697a 652c 2024 7569 642c me, $size, $uid,\n+00006b20: 2024 6769 642c 2024 6d6f 6465 2c20 2466 $gid, $mode, $f\n+00006b30: 2920 3d20 2472 6373 662d 3e6e 6578 744c ) = $rcsf->nextL\n+00006b40: 696e 6528 2929 203e 2030 290a 097b 0a09 ine()) > 0)..{..\n+00006b50: 2020 2020 6d79 2024 6669 6c65 203d 2022 my $file = \"\n+00006b60: 2464 6972 2f24 6622 3b0a 0920 2020 206e $dir/$f\";.. n\n+00006b70: 6578 7420 6966 2028 246d 6435 7375 6d20 ext if ($md5sum \n+00006b80: 6571 2027 6469 7227 293b 0a0a 0920 2020 eq 'dir');... \n+00006b90: 2024 6669 6c65 202e 3d20 2463 6f6d 7072 $file .= $compr\n+00006ba0: 506f 7374 6669 7820 6966 2024 636f 6d70 Postfix if $comp\n+00006bb0: 7220 6571 2027 6327 3b0a 0a09 2020 2020 r eq 'c';... \n+00006bc0: 6966 2028 6e6f 7420 2d6c 2024 6669 6c65 if (not -l $file\n+00006bd0: 2061 6e64 206e 6f74 202d 6520 2466 696c and not -e $fil\n+00006be0: 6529 0a09 2020 2020 7b0a 0909 2470 724c e).. {...$prL\n+00006bf0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00006c00: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n+00006c10: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n+00006c20: 616e 6e6f 7420 6163 6365 7320 3c24 6669 annot acces <$fi\n+00006c30: 6c65 3e22 5d29 3b0a 0909 6e65 7874 3b0a le>\"]);...next;.\n+00006c40: 0920 2020 207d 0a09 2020 2020 246e 6f46 . }.. $noF\n+00006c50: 696c 6573 2b2b 3b0a 0920 2020 2024 7072 iles++;.. $pr\n+00006c60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n+00006c70: 6427 203d 3e20 2753 272c 0a09 0909 2020 d' => 'S',.... \n+00006c80: 272d 7374 7227 203d 3e20 5b22 7365 7420 '-str' => [\"set \n+00006c90: 7065 726d 6973 7369 6f6e 7320 6f66 2024 permissions of $\n+00006ca0: 6e6f 4669 6c65 7320 6669 6c65 7322 5d29 noFiles files\"])\n+00006cb0: 0a09 0909 6966 2028 2470 7220 616e 6420 ....if ($pr and \n+00006cc0: 246e 6f46 696c 6573 2025 2024 7072 203d $noFiles % $pr =\n+00006cd0: 3d20 3029 3b0a 0a09 2020 2020 6e65 7874 = 0);... next\n+00006ce0: 2069 6620 246d 6435 7375 6d20 6571 2027 if $md5sum eq '\n+00006cf0: 7379 6d6c 696e 6b27 3b0a 0a09 2020 2020 symlink';... \n+00006d00: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m\n+00006d10: 7469 6d65 2c20 2466 696c 653b 0a09 2020 time, $file;.. \n+00006d20: 2020 6368 6f77 6e20 2475 6964 2c20 2467 chown $uid, $g\n+00006d30: 6964 2c20 2466 696c 653b 0a09 2020 2020 id, $file;.. \n+00006d40: 6966 2028 2463 6f6d 7072 2065 7120 2762 if ($compr eq 'b\n+00006d50: 2729 2020 2020 2020 2020 2023 2062 6c6f ') # blo\n+00006d60: 636b 2066 696c 650a 0920 2020 207b 0a09 ck file.. {..\n+00006d70: 0924 6d6f 6465 2026 3d20 3037 3737 3b20 .$mode &= 0777; \n+00006d80: 2020 2023 2073 7472 6970 2073 7065 6369 # strip speci\n+00006d90: 616c 2070 6572 6d69 7373 696f 6e73 0a09 al permissions..\n+00006da0: 0924 6d6f 6465 207c 3d20 3031 3131 3b20 .$mode |= 0111; \n+00006db0: 2020 2023 2061 6464 2064 6972 6563 746f # add directo\n+00006dc0: 7279 2070 6572 6d69 7373 696f 6e73 0a09 ry permissions..\n+00006dd0: 2020 2020 7d0a 0920 2020 2063 686d 6f64 }.. chmod\n+00006de0: 2024 6d6f 6465 2c20 2466 696c 653b 0a09 $mode, $file;..\n+00006df0: 7d0a 0a09 2470 724c 6f67 2d3e 7072 696e }...$prLog->prin\n+00006e00: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S'\n+00006e10: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n+00006e20: 203d 3e20 5b22 7365 7420 7065 726d 6973 => [\"set permis\n+00006e30: 7369 6f6e 7320 666f 7220 246e 6f46 696c sions for $noFil\n+00006e40: 6573 2066 696c 6573 225d 293b 0a20 2020 es files\"]);. \n+00006e50: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n+00006e60: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print\n+00006e70: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n+00006e80: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+00006e90: 3d3e 205b 2270 6861 7365 2033 3a20 6669 => [\"phase 3: fi\n+00006ea0: 6c65 2070 6572 6d69 7373 696f 6e73 206e le permissions n\n+00006eb0: 6f74 2073 6574 2062 6563 6175 7365 2022 ot set because \"\n+00006ec0: 202e 0a09 0909 0920 2270 7265 7365 7276 ...... \"preserv\n+00006ed0: 6550 6572 6d73 206e 6f74 2073 6574 2069 ePerms not set i\n+00006ee0: 6e20 7374 6f72 6542 6163 6b75 702e 706c n storeBackup.pl\n+00006ef0: 225d 293b 0a20 2020 207d 0a0a 2020 2020 \"]);. }.. \n+00006f00: 6966 2028 2477 6974 6842 6c6f 636b 6564 if ($withBlocked\n+00006f10: 4669 6c65 7320 616e 6420 2d65 2022 2464 Files and -e \"$d\n+00006f20: 6972 2f2e 6d64 3543 6865 636b 5375 6d73 ir/.md5CheckSums\n+00006f30: 2e62 7a32 2229 0a20 2020 207b 0a09 2320 .bz2\"). {..# \n+00006f40: 636f 6d70 7265 7373 202e 6d64 3542 6c6f compress .md5Blo\n+00006f50: 636b 4368 6563 6b53 756d 730a 0924 636f ckCheckSums..$co\n+00006f60: 6d70 724d 6435 426c 6f63 6b43 6865 636b mprMd5BlockCheck\n+00006f70: 5375 6d73 2d3e 7761 6974 2829 3b0a 096d Sums->wait();..m\n+00006f80: 7920 246f 7574 203d 2024 636f 6d70 724d y $out = $comprM\n+00006f90: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n+00006fa0: 2d3e 6765 7453 5444 4f55 5428 293b 0a09 ->getSTDOUT();..\n+00006fb0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n+00006fc0: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n+00006fd0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n+00006fe0: 5b22 5354 4445 5252 206f 6620 3c75 6e61 [\"STDERR of :\", @$out])..\n+00007000: 2020 2020 6966 2028 4024 6f75 7420 3e20 if (@$out > \n+00007010: 3029 3b0a 0924 6f75 7420 3d20 2463 6f6d 0);..$out = $com\n+00007020: 7072 4d64 3542 6c6f 636b 4368 6563 6b53 prMd5BlockCheckS\n+00007030: 756d 732d 3e67 6574 5354 4445 5252 2829 ums->getSTDERR()\n+00007040: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print\n+00007050: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+00007060: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n+00007070: 3d3e 205b 2253 5444 4552 5220 6f66 203c => [\"STDERR of <\n+00007080: 756e 616d 653e 3a22 2c20 4024 6f75 745d uname>:\", @$out]\n+00007090: 290a 0920 2020 2069 6620 2840 246f 7574 ).. if (@$out\n+000070a0: 203e 2030 293b 0a20 2020 207d 0a0a 2020 > 0);. }.. \n+000070b0: 2020 230a 2020 2020 2320 7365 7420 6469 #. # set di\n+000070c0: 7265 6374 6f72 7920 7065 726d 6973 7369 rectory permissi\n+000070d0: 6f6e 730a 2020 2020 230a 2020 2020 6966 ons. #. if\n+000070e0: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms\n+000070f0: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog-\n+00007100: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00007110: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n+00007120: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => [\"phase\n+00007130: 2034 3a20 7365 7474 696e 6720 6469 7265 4: setting dire\n+00007140: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission\n+00007150: 7322 5d29 3b0a 2309 6d79 2024 636f 6d70 s\"]);.#.my $comp\n+00007160: 7250 6f73 7466 6978 203d 2028 2424 6d65 rPostfix = ($$me\n+00007170: 7461 7b27 706f 7374 6669 7827 7d29 2d3e ta{'postfix'})->\n+00007180: 5b30 5d3b 0a09 6d79 2024 636f 6d70 7250 [0];..my $comprP\n+00007190: 6f73 7466 6978 203d 2024 7263 7366 2d3e ostfix = $rcsf->\n+000071a0: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar('\n+000071b0: 706f 7374 6669 7827 293b 0a0a 096d 7920 postfix');...my \n+000071c0: 246e 6f44 6972 7320 3d20 303b 0a09 6d79 $noDirs = 0;..my\n+000071d0: 2024 7263 7366 203d 2072 6561 6443 6865 $rcsf = readChe\n+000071e0: 636b 5375 6d46 696c 652d 3e6e 6577 2827 ckSumFile->new('\n+000071f0: 2d63 6865 636b 5375 6d46 696c 6527 203d -checkSumFile' =\n+00007200: 3e20 2224 6469 722f 2e6d 6435 4368 6563 > \"$dir/.md5Chec\n+00007210: 6b53 756d 7322 2c0a 0909 0909 0920 272d kSums\",...... '-\n+00007220: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n+00007230: 293b 0a09 6d79 2028 246d 6435 7375 6d2c );..my ($md5sum,\n+00007240: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno\n+00007250: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup\n+00007260: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime\n+00007270: 2c20 2461 7469 6d65 2c0a 0920 2020 2024 , $atime,.. $\n+00007280: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid\n+00007290: 2c20 246d 6f64 652c 2024 6629 3b0a 0977 , $mode, $f);..w\n+000072a0: 6869 6c65 2028 2828 246d 6435 7375 6d2c hile ((($md5sum,\n+000072b0: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno\n+000072c0: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup\n+000072d0: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime\n+000072e0: 2c0a 0909 2024 6174 696d 652c 2024 7369 ,... $atime, $si\n+000072f0: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, \n+00007300: 246d 6f64 652c 2024 6629 203d 2024 7263 $mode, $f) = $rc\n+00007310: 7366 2d3e 6e65 7874 4c69 6e65 2829 2920 sf->nextLine()) \n+00007320: 3e20 3029 0a09 7b0a 0920 2020 206d 7920 > 0)..{.. my \n+00007330: 2466 696c 6520 3d20 2224 6469 722f 2466 $file = \"$dir/$f\n+00007340: 223b 0a09 2020 2020 6966 2028 246d 6435 \";.. if ($md5\n+00007350: 7375 6d20 6571 2027 6469 7227 290a 0920 sum eq 'dir').. \n+00007360: 2020 207b 0a09 0975 6e6c 6573 7320 282d {...unless (-\n+00007370: 6520 2466 696c 6529 0a09 097b 0a09 0920 e $file)...{... \n+00007380: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n+00007390: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+000073a0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n+000073b0: 205b 2263 616e 6e6f 7420 6163 6365 7320 [\"cannot acces \n+000073c0: 3c24 6669 6c65 3e22 5d29 3b0a 0909 2020 <$file>\"]);... \n+000073d0: 2020 6e65 7874 3b0a 0909 7d0a 0909 6368 next;...}...ch\n+000073e0: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n+000073f0: 2466 696c 653b 0a09 0963 686d 6f64 2024 $file;...chmod $\n+00007400: 6d6f 6465 2c20 2466 696c 653b 0a09 0975 mode, $file;...u\n+00007410: 7469 6d65 2024 6174 696d 652c 2024 6d74 time $atime, $mt\n+00007420: 696d 652c 2024 6669 6c65 3b0a 0a09 0924 ime, $file;....$\n+00007430: 6e6f 4469 7273 2b2b 3b0a 0909 2470 724c noDirs++;...$prL\n+00007440: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00007450: 2720 3d3e 2027 5327 2c0a 0909 0920 2027 ' => 'S',.... '\n+00007460: 2d73 7472 2720 3d3e 205b 2273 6574 2070 -str' => [\"set p\n+00007470: 6572 6d69 7373 696f 6e73 206f 6620 246e ermissions of $n\n+00007480: 6f44 6972 7320 6469 7265 6374 6f72 6965 oDirs directorie\n+00007490: 7322 5d29 0a09 0909 6966 2028 2470 7220 s\"])....if ($pr \n+000074a0: 616e 6420 246e 6f44 6972 7320 2520 2470 and $noDirs % $p\n+000074b0: 7220 3d3d 2030 293b 0a09 2020 2020 7d0a r == 0);.. }.\n+000074c0: 097d 0a0a 0924 7072 4c6f 672d 3e70 7269 .}...$prLog->pri\n+000074d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2753 nt('-kind' => 'S\n+000074e0: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n+000074f0: 2720 3d3e 205b 2273 6574 2070 6572 6d69 ' => [\"set permi\n+00007500: 7373 696f 6e73 2066 6f72 2024 6e6f 4469 ssions for $noDi\n+00007510: 7273 2064 6972 6563 746f 7269 6573 225d rs directories\"]\n+00007520: 293b 0a20 2020 207d 0a20 2020 2065 6c73 );. }. els\n+00007530: 650a 2020 2020 7b0a 0924 7072 4c6f 672d e. {..$prLog-\n+00007540: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n+00007550: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n+00007560: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => [\"phase\n+00007570: 2034 3a20 6469 7265 6374 6f72 7920 7065 4: directory pe\n+00007580: 726d 6973 7369 6f6e 7320 6e6f 7420 7365 rmissions not se\n+00007590: 7420 6265 6361 7573 6520 2220 2e0a 0909 t because \" ....\n+000075a0: 0909 2022 7072 6573 6572 7665 5065 726d .. \"preservePerm\n+000075b0: 7320 6e6f 7420 7365 7420 696e 2073 746f s not set in sto\n+000075c0: 7265 4261 636b 7570 2e70 6c22 5d29 3b0a reBackup.pl\"]);.\n+000075d0: 2020 2020 7d0a 0a7d 0a }..}.\n"}, {"source1": "./usr/bin/storeBackupVersions", "source2": "./usr/bin/storeBackupVersions", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,1100 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 7056 6572 7369 6f6e 730a pVersions.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# \n+00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i\n+00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software:\n+00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr\n+000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or \n+000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un\n+000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of\n+000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n+000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n+000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by.\n+00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof\n+00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation\n+00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version\n+00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens\n+00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo\n+00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l\n+00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...#\n+00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program \n+00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i\n+00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that \n+000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu\n+000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO\n+000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY;\n+000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th\n+000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran\n+000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA\n+00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT\n+00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI\n+00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. \n+00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU \n+00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n+00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more \n+00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y\n+00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r\n+00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o\n+00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera\n+000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with \n+000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I\n+000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...m\n+00000300: 7920 2456 4552 5349 4f4e 203d 2027 2449 y $VERSION = '$I\n+00000310: 643a 2073 746f 7265 4261 636b 7570 5665 d: storeBackupVe\n+00000320: 7273 696f 6e73 2e70 6c20 3336 3220 3230 rsions.pl 362 20\n+00000330: 3132 2d30 312d 3238 2032 323a 3131 3a31 12-01-28 22:11:1\n+00000340: 335a 2068 6a63 2024 2027 3b0a 7075 7368 3Z hjc $ ';.push\n+00000350: 2040 5645 5253 494f 4e2c 2024 5645 5253 @VERSION, $VERS\n+00000360: 494f 4e3b 0a6d 7920 2824 5645 5253 494f ION;.my ($VERSIO\n+00000370: 4e70 4e61 6d65 2c20 2456 4552 5349 4f4e NpName, $VERSION\n+00000380: 7376 6e49 4429 203d 2024 5645 5253 494f svnID) = $VERSIO\n+00000390: 4e20 3d7e 202f 4964 3a5c 732b 285c 532b N =~ /Id:\\s+(\\S+\n+000003a0: 295c 732b 285c 642b 292f 3b0a 246d 6169 )\\s+(\\d+)/;.$mai\n+000003b0: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n+000003c0: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n+000003d0: 7573 6520 4663 6e74 6c20 7177 284f 5f52 use Fcntl qw(O_R\n+000003e0: 4457 5220 4f5f 4352 4541 5429 3b0a 7573 DWR O_CREAT);.us\n+000003f0: 6520 4669 6c65 3a3a 436f 7079 3b0a 7573 e File::Copy;.us\n+00000400: 6520 504f 5349 583b 0a75 7365 2044 6967 e POSIX;.use Dig\n+00000410: 6573 743a 3a4d 4435 2071 7728 6d64 355f est::MD5 qw(md5_\n+00000420: 6865 7829 3b0a 0a75 7365 2073 7472 6963 hex);..use stric\n+00000430: 743b 0a0a 0a73 7562 206c 6962 5061 7468 t;...sub libPath\n+00000440: 0a7b 0a20 2020 206d 7920 2466 696c 6520 .{. my $file \n+00000450: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my\n+00000460: 2024 6469 723b 0a0a 2020 2020 2320 4661 $dir;.. # Fa\n+00000470: 6c6c 7320 4461 7465 6920 7365 6c62 7374 lls Datei selbst\n+00000480: 2065 696e 2073 796d 6c69 6e6b 2069 7374 ein symlink ist\n+00000490: 2c20 736f 6c61 6e67 6520 666f 6c67 656e , solange folgen\n+000004a0: 2c20 6269 7320 6175 6667 656c f673 740a , bis aufgel.st.\n+000004b0: 2020 2020 6966 2028 2d66 2024 6669 6c65 if (-f $file\n+000004c0: 290a 2020 2020 7b0a 0977 6869 6c65 2028 ). {..while (\n+000004d0: 2d6c 2024 6669 6c65 290a 097b 0a09 2020 -l $file)..{.. \n+000004e0: 2020 6d79 2024 6c69 6e6b 203d 2072 6561 my $link = rea\n+000004f0: 646c 696e 6b28 2466 696c 6529 3b0a 0a09 dlink($file);...\n+00000500: 2020 2020 6966 2028 7375 6273 7472 2824 if (substr($\n+00000510: 6c69 6e6b 2c20 302c 2031 2920 6e65 2022 link, 0, 1) ne \"\n+00000520: 2f22 290a 0920 2020 207b 0a09 0924 6669 /\").. {...$fi\n+00000530: 6c65 203d 7e20 732f 5b5e 5c2f 5d2b 242f le =~ s/[^\\/]+$/\n+00000540: 246c 696e 6b2f 3b0a 0920 2020 207d 0a09 $link/;.. }..\n+00000550: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {.\n+00000560: 0909 2466 696c 6520 3d20 246c 696e 6b3b ..$file = $link;\n+00000570: 0a09 2020 2020 7d0a 097d 0a0a 0928 2464 .. }..}...($d\n+00000580: 6972 2c20 2466 696c 6529 203d 2026 7370 ir, $file) = &sp\n+00000590: 6c69 7446 696c 6544 6972 2824 6669 6c65 litFileDir($file\n+000005a0: 293b 0a09 2466 696c 6520 3d20 222f 2466 );..$file = \"/$f\n+000005b0: 696c 6522 3b0a 2020 2020 7d0a 2020 2020 ile\";. }. \n+000005c0: 656c 7365 0a20 2020 207b 0a09 7072 696e else. {..prin\n+000005d0: 7420 5354 4445 5252 2022 3c24 6669 6c65 t STDERR \"<$file\n+000005e0: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist\n+000005f0: 215c 6e22 3b0a 0965 7869 7420 313b 0a20 !\\n\";..exit 1;. \n+00000600: 2020 207d 0a0a 2020 2020 2464 6972 202e }.. $dir .\n+00000610: 3d20 222f 2e2e 2f6c 6962 223b 2020 2020 = \"/../lib\"; \n+00000620: 2020 2020 2020 2023 2050 6661 6420 7a75 # Pfad zu\n+00000630: 2064 656e 2042 6962 6c69 6f74 6865 6b65 den Bibliotheke\n+00000640: 6e0a 2020 2020 6d79 2024 6f6c 6444 6972 n. my $oldDir\n+00000650: 203d 2060 2f62 696e 2f70 7764 603b 0a20 = `/bin/pwd`;. \n+00000660: 2020 2063 686f 6d70 2024 6f6c 6444 6972 chomp $oldDir\n+00000670: 3b0a 2020 2020 6966 2028 6368 6469 7220 ;. if (chdir \n+00000680: 2464 6972 290a 2020 2020 7b0a 096d 7920 $dir). {..my \n+00000690: 2461 6273 4469 7220 3d20 602f 6269 6e2f $absDir = `/bin/\n+000006a0: 7077 6460 3b0a 0963 686f 7020 2461 6273 pwd`;..chop $abs\n+000006b0: 4469 723b 0a09 6368 6469 7220 246f 6c64 Dir;..chdir $old\n+000006c0: 4469 723b 0a0a 0972 6574 7572 6e20 2826 Dir;...return (&\n+000006d0: 7370 6c69 7446 696c 6544 6972 2822 2461 splitFileDir(\"$a\n+000006e0: 6273 4469 7224 6669 6c65 2229 293b 0a20 bsDir$file\"));. \n+000006f0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n+00000700: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER\n+00000710: 5220 223c 2464 6972 3e20 646f 6573 206e R \"<$dir> does n\n+00000720: 6f74 2065 7869 7374 2c20 6578 6974 696e ot exist, exitin\n+00000730: 675c 6e22 3b0a 2020 2020 7d0a 7d0a 7375 g\\n\";. }.}.su\n+00000740: 6220 7370 6c69 7446 696c 6544 6972 0a7b b splitFileDir.{\n+00000750: 0a20 2020 206d 7920 246e 616d 6520 3d20 . my $name = \n+00000760: 7368 6966 743b 0a0a 2020 2020 7265 7475 shift;.. retu\n+00000770: 726e 2028 272e 272c 2024 6e61 6d65 2920 rn ('.', $name) \n+00000780: 756e 6c65 7373 2028 246e 616d 6520 3d7e unless ($name =~\n+00000790: 2f5c 2f2f 293b 2020 2020 2320 6e75 7220 /\\//); # nur \n+000007a0: 6569 6e66 6163 6865 7220 4461 7465 696e einfacher Datein\n+000007b0: 616d 650a 0a20 2020 206d 7920 2824 6469 ame.. my ($di\n+000007c0: 722c 2024 6669 6c65 2920 3d20 246e 616d r, $file) = $nam\n+000007d0: 6520 3d7e 202f 5e28 2e2a 295c 2f28 2e2a e =~ /^(.*)\\/(.*\n+000007e0: 2924 2f73 3b0a 2020 2020 2464 6972 203d )$/s;. $dir =\n+000007f0: 2027 2f27 2069 6620 2824 6469 7220 6571 '/' if ($dir eq\n+00000800: 2027 2729 3b20 2020 2020 2020 2020 2020 ''); \n+00000810: 2020 2020 2020 2020 2320 6769 6c74 2c20 # gilt, \n+00000820: 6661 6c6c 7320 7a2e 422e 202f 6669 6c65 falls z.B. /file\n+00000830: 6e61 6d65 0a20 2020 2072 6574 7572 6e20 name. return \n+00000840: 2824 6469 722c 2024 6669 6c65 293b 0a7d ($dir, $file);.}\n+00000850: 0a6d 7920 2824 7265 712c 2024 7072 6f67 .my ($req, $prog\n+00000860: 2920 3d20 266c 6962 5061 7468 2824 3029 ) = &libPath($0)\n+00000870: 3b0a 7075 7368 2040 494e 432c 2022 2472 ;.push @INC, \"$r\n+00000880: 6571 223b 0a0a 7265 7175 6972 6520 2763 eq\";..require 'c\n+00000890: 6865 636b 5061 7261 6d32 2e70 6c27 3b0a heckParam2.pl';.\n+000008a0: 7265 7175 6972 6520 2763 6865 636b 4f62 require 'checkOb\n+000008b0: 6a50 6172 2e70 6c27 3b0a 7265 7175 6972 jPar.pl';.requir\n+000008c0: 6520 2770 724c 6f67 2e70 6c27 3b0a 7265 e 'prLog.pl';.re\n+000008d0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p\n+000008e0: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil\n+000008f0: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir\n+00000900: 6520 2766 6f72 6b50 726f 632e 706c 273b e 'forkProc.pl';\n+00000910: 0a72 6571 7569 7265 2027 6875 6d61 6e52 .require 'humanR\n+00000920: 6561 642e 706c 273b 0a72 6571 7569 7265 ead.pl';.require\n+00000930: 2027 6461 7465 546f 6f6c 732e 706c 273b 'dateTools.pl';\n+00000940: 0a72 6571 7569 7265 2027 7374 6f72 6542 .require 'storeB\n+00000950: 6163 6b75 704c 6962 2e70 6c27 3b0a 0a6d ackupLib.pl';..m\n+00000960: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile \n+00000970: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums\n+00000980: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME.\n+00000990: 0a73 746f 7265 4261 636b 7570 5665 7273 .storeBackupVers\n+000009a0: 696f 6e73 2e70 6c20 2d20 6c6f 6361 7465 ions.pl - locate\n+000009b0: 7320 6469 6666 6572 656e 7420 7665 7273 s different vers\n+000009c0: 696f 6e73 206f 6620 6120 6669 6c65 2073 ions of a file s\n+000009d0: 6176 6564 2077 6974 6820 7374 6f72 6542 aved with storeB\n+000009e0: 6163 6b75 702e 706c 2e0a 0a3d 6865 6164 ackup.pl...=head\n+000009f0: 3120 5359 4e4f 5053 4953 0a0a 0973 746f 1 SYNOPSIS...sto\n+00000a00: 7265 4261 636b 7570 5665 7273 696f 6e73 reBackupVersions\n+00000a10: 2e70 6c20 2d66 2066 696c 6520 5b2d 6220 .pl -f file [-b \n+00000a20: 726f 6f74 5d20 205b 2d76 5d0a 0920 5b2d root] [-v].. [-\n+00000a30: 6c20 5b2d 6120 7c20 5b2d 735d 205b 2d75 l [-a | [-s] [-u\n+00000a40: 5d20 5b2d 675d 205b 2d4d 5d20 5b2d 635d ] [-g] [-M] [-c]\n+00000a50: 205b 2d6d 5d5d 5d0a 0a3d 6865 6164 3120 [-m]]]..=head1 \n+00000a60: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8\n+00000a70: 0a0a 3d69 7465 6d20 423c 2d2d 6669 6c65 ..=item B<--file\n+00000a80: 3e2c 2042 3c2d 663e 0a0a 2020 2020 6669 >, B<-f>.. fi\n+00000a90: 6c65 206e 616d 6520 286e 616d 6520 696e le name (name in\n+00000aa0: 2074 6865 2062 6163 6b75 702c 2070 726f the backup, pro\n+00000ab0: 6261 626c 7920 7769 7468 2073 7566 6669 bably with suffi\n+00000ac0: 780a 2020 2020 6672 6f6d 2063 6f6d 7072 x. from compr\n+00000ad0: 6573 7369 6f6e 290a 0a3d 6974 656d 2042 ession)..=item B\n+00000ae0: 3c2d 2d62 6163 6b75 7052 6f6f 743e 2042 <--backupRoot> B\n+00000af0: 3c2d 623e 0a0a 2020 2020 726f 6f74 206f <-b>.. root o\n+00000b00: 6620 7374 6f72 6542 6163 6b75 7020 7472 f storeBackup tr\n+00000b10: 6565 2c20 6e6f 726d 616c 6c79 206e 6f74 ee, normally not\n+00000b20: 206e 6565 6465 640a 0a3d 6974 656d 2042 needed..=item B\n+00000b30: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<-\n+00000b40: 763e 0a0a 2020 2020 7072 696e 7420 7665 v>.. print ve\n+00000b50: 7262 6f73 6520 6d65 7373 6167 6573 0a0a rbose messages..\n+00000b60: 3d69 7465 6d20 423c 2d2d 6c6f 6361 7465 =item B<--locate\n+00000b70: 5361 6d65 3e2c 2042 3c2d 6c3e 0a0a 2020 Same>, B<-l>.. \n+00000b80: 2020 6c6f 6361 7465 2073 616d 6520 6669 locate same fi\n+00000b90: 6c65 2077 6974 6820 6f74 6865 7220 6e61 le with other na\n+00000ba0: 6d65 730a 0a3d 6974 656d 2042 3c2d 2d73 mes..=item B<--s\n+00000bb0: 686f 7741 6c6c 3e2c 2042 3c2d 413e 0a0a howAll>, B<-A>..\n+00000bc0: 2020 2020 7361 6d65 2061 733a 205b 2d73 same as: [-s\n+00000bd0: 202d 7520 2d67 202d 4d20 2d63 202d 6d5d -u -g -M -c -m]\n+00000be0: 0a0a 3d69 7465 6d20 423c 2d2d 7369 7a65 ..=item B<--size\n+00000bf0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 7368 >, B<-s>.. sh\n+00000c00: 6f77 2073 697a 6520 2868 756d 616e 2072 ow size (human r\n+00000c10: 6561 6461 626c 6529 206f 6620 736f 7572 eadable) of sour\n+00000c20: 6365 2066 696c 650a 0a3d 6974 656d 2042 ce file..=item B\n+00000c30: 3c2d 2d75 6964 3e2c 2042 3c2d 753e 0a0a <--uid>, B<-u>..\n+00000c40: 2020 2020 7368 6f77 2075 6964 206f 6620 show uid of \n+00000c50: 736f 7572 6365 2066 696c 650a 0a3d 6974 source file..=it\n+00000c60: 656d 2042 3c2d 2d67 6964 3e2c 2042 3c2d em B<--gid>, B<-\n+00000c70: 673e 0a0a 2020 2020 7368 6f77 2067 6964 g>.. show gid\n+00000c80: 206f 6620 736f 7572 6365 2066 696c 650a of source file.\n+00000c90: 0a3d 6974 656d 2042 3c2d 2d6d 6f64 653e .=item B<--mode>\n+00000ca0: 2c20 423c 2d4d 3e0a 0a20 2020 2073 686f , B<-M>.. sho\n+00000cb0: 7720 7065 726d 6973 7369 6f6e 7320 6f66 w permissions of\n+00000cc0: 2073 6f75 7263 6520 6669 6c65 0a0a 3d69 source file..=i\n+00000cd0: 7465 6d20 423c 2d2d 6374 696d 653e 2c20 tem B<--ctime>, \n+00000ce0: 423c 2d63 3e0a 0a20 2020 2073 686f 7720 B<-c>.. show \n+00000cf0: 6372 6561 7469 6f6e 2074 696d 6520 6f66 creation time of\n+00000d00: 2073 6f75 7263 6520 6669 6c65 0a0a 3d69 source file..=i\n+00000d10: 7465 6d20 423c 2d2d 6d74 696d 653e 2c20 tem B<--mtime>, \n+00000d20: 423c 2d6d 3e0a 0a20 2020 2073 686f 7720 B<-m>.. show \n+00000d30: 6d6f 6469 6679 2074 696d 6520 6f66 2073 modify time of s\n+00000d40: 6f75 7263 6520 6669 6c65 0a0a 3d69 7465 ource file..=ite\n+00000d50: 6d20 423c 2d2d 6174 696d 653e 2c20 423c m B<--atime>, B<\n+00000d60: 2d61 3e0a 0a20 2020 2073 686f 7720 6163 -a>.. show ac\n+00000d70: 6365 7373 2074 696d 6520 6f66 2073 6f75 cess time of sou\n+00000d80: 7263 6520 6669 6c65 0a0a 3d62 6163 6b0a rce file..=back.\n+00000d90: 0a49 7420 646f 6573 206e 6f74 2061 6c77 .It does not alw\n+00000da0: 6179 7320 776f 726b 2063 6f72 7265 6374 ays work correct\n+00000db0: 6c79 2077 6865 6e20 6120 6669 6c65 2069 ly when a file i\n+00000dc0: 7320 7361 7665 6420 626c 6f63 6b65 6420 s saved blocked \n+00000dd0: 2a61 6e64 2a0a 6e6f 6e2d 626c 6f63 6b65 *and*.non-blocke\n+00000de0: 6420 696e 2064 6966 6665 7265 6e74 2062 d in different b\n+00000df0: 6163 6b75 7073 2e20 496e 2073 7563 6820 ackups. In such \n+00000e00: 6361 7365 732c 2075 7365 206f 7074 696f cases, use optio\n+00000e10: 6e20 423c 2d2d 6c6f 6361 7465 5361 6d65 n B<--locateSame\n+00000e20: 3e2e 0a0a 3d68 6561 6431 2043 4f50 5952 >...=head1 COPYR\n+00000e30: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright \n+00000e40: 2863 2920 3230 3032 2d32 3030 3820 6279 (c) 2002-2008 by\n+00000e50: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla\n+00000e60: 6573 2028 7365 6520 5245 4144 4d45 290a es (see README).\n+00000e70: 5075 626c 6973 6865 6420 756e 6465 7220 Published under \n+00000e80: 7468 6520 474e 5520 4765 6e65 7261 6c20 the GNU General \n+00000e90: 5075 626c 6963 204c 6963 656e 7365 2076 Public License v\n+00000ea0: 3320 6f72 2061 6e79 206c 6174 6572 2076 3 or any later v\n+00000eb0: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my\n+00000ec0: 2024 4865 6c70 203d 206a 6f69 6e28 2727 $Help = join(''\n+00000ed0: 2c20 6772 6570 2821 2f5e 5c73 2a24 2f2c , grep(!/^\\s*$/,\n+00000ee0: 2060 706f 6432 7465 7874 2024 3060 2929 `pod2text $0`))\n+00000ef0: 3b0a 2448 656c 7020 3d20 2263 616e 6e6f ;.$Help = \"canno\n+00000f00: 7420 6669 6e64 2070 6f64 3274 6578 742c t find pod2text,\n+00000f10: 2073 6565 2064 6f63 756d 656e 7461 7469 see documentati\n+00000f20: 6f6e 2066 6f72 2064 6574 6169 6c73 5c6e on for details\\n\n+00000f30: 220a 2020 2020 756e 6c65 7373 2024 4865 \". unless $He\n+00000f40: 6c70 3b0a 0a26 7072 696e 7456 6572 7369 lp;..&printVersi\n+00000f50: 6f6e 7328 5c40 4152 4756 2c20 272d 5627 ons(\\@ARGV, '-V'\n+00000f60: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar\n+00000f70: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara\n+00000f80: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi\n+00000f90: 7374 7327 203d 3e20 276e 6f27 2c0a 0909 sts' => 'no',...\n+00000fa0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [\n+00000fb0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+00000fc0: 6d65 2720 3d3e 2027 6669 6c65 272c 0a09 me' => 'file',..\n+00000fd0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n+00000fe0: 696f 6e27 203d 3e20 272d 6627 2c0a 0909 ion' => '-f',...\n+00000ff0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n+00001000: 7327 203d 3e20 272d 2d66 696c 6527 2c0a s' => '--file',.\n+00001010: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param\n+00001020: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',.....\n+00001030: 0920 2020 2027 2d6d 7573 745f 6265 2720 . '-must_be' \n+00001040: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O\n+00001050: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+00001060: 6527 203d 3e20 2762 6163 6b75 7052 6f6f e' => 'backupRoo\n+00001070: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n+00001080: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b\n+00001090: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+000010a0: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba\n+000010b0: 636b 7570 526f 6f74 272c 0a09 0909 0909 ckupRoot',......\n+000010c0: 2020 2020 272d 6465 6661 756c 7427 203d '-default' =\n+000010d0: 3e20 2727 292c 0a09 0909 094f 7074 696f > ''),.....Optio\n+000010e0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+000010f0: 3e20 2776 6572 626f 7365 272c 0a09 0909 > 'verbose',....\n+00001100: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001110: 6e27 203d 3e20 272d 7627 2c0a 0909 0909 n' => '-v',.....\n+00001120: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+00001130: 203d 3e20 272d 2d76 6572 626f 7365 2729 => '--verbose')\n+00001140: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+00001150: 7728 272d 6e61 6d65 2720 3d3e 2027 6c6f w('-name' => 'lo\n+00001160: 6361 7465 5361 6d65 272c 0a09 0909 0909 cateSame',......\n+00001170: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001180: 203d 3e20 272d 6c27 2c0a 0909 0909 0920 => '-l',...... \n+00001190: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+000011a0: 3e20 272d 2d6c 6f63 6174 6553 616d 6527 > '--locateSame'\n+000011b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+000011c0: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's\n+000011d0: 686f 7741 6c6c 272c 0a09 0909 0909 2020 howAll',...... \n+000011e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+000011f0: 3e20 272d 4127 2c0a 0909 0909 0920 2020 > '-A',...... \n+00001200: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n+00001210: 272d 2d73 686f 7741 6c6c 272c 0a09 0909 '--showAll',....\n+00001220: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if'\n+00001230: 203d 3e20 275b 6c6f 6361 7465 5361 6d65 => '[locateSame\n+00001240: 5d27 2c0a 0909 0909 0920 2020 2027 2d63 ]',...... '-c\n+00001250: 6f6d 6d65 6e74 2720 3d3e 0a09 0909 0922 omment' =>.....\"\n+00001260: 2d73 2063 616e 206f 6e6c 7920 6265 2075 -s can only be u\n+00001270: 7365 2069 6e20 636f 6e6a 756e 6374 696f se in conjunctio\n+00001280: 6e20 7769 7468 202d 6c5c 6e22 292c 0a09 n with -l\\n\"),..\n+00001290: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n+000012a0: 2d6e 616d 6527 203d 3e20 2773 697a 6527 -name' => 'size'\n+000012b0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+000012c0: 6f70 7469 6f6e 2720 3d3e 2027 2d73 272c option' => '-s',\n+000012d0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n+000012e0: 6c69 6173 2720 3d3e 2027 2d2d 7369 7a65 lias' => '--size\n+000012f0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n+00001300: 6c79 5f69 6627 203d 3e0a 0909 0909 0920 ly_if' =>...... \n+00001310: 2020 2027 5b6c 6f63 6174 6553 616d 655d '[locateSame]\n+00001320: 2061 6e64 206e 6f74 205b 7368 6f77 416c and not [showAl\n+00001330: 6c5d 2729 2c0a 0909 0909 4f70 7469 6f6e l]'),.....Option\n+00001340: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001350: 2027 7569 6427 2c0a 0909 0909 0920 2020 'uid',...... \n+00001360: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n+00001370: 2027 2d75 272c 0a09 0909 0909 2020 2020 '-u',...... \n+00001380: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n+00001390: 2d2d 7569 6427 2c0a 0909 0909 0920 2020 --uid',...... \n+000013a0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>..\n+000013b0: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate\n+000013c0: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s\n+000013d0: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O\n+000013e0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n+000013f0: 6527 203d 3e20 2767 6964 272c 0a09 0909 e' => 'gid',....\n+00001400: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+00001410: 6e27 203d 3e20 272d 6727 2c0a 0909 0909 n' => '-g',.....\n+00001420: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+00001430: 203d 3e20 272d 2d67 6964 272c 0a09 0909 => '--gid',....\n+00001440: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if'\n+00001450: 203d 3e0a 0909 0909 0920 2020 2027 5b6c =>...... '[l\n+00001460: 6f63 6174 6553 616d 655d 2061 6e64 206e ocateSame] and n\n+00001470: 6f74 205b 7368 6f77 416c 6c5d 2729 2c0a ot [showAll]'),.\n+00001480: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+00001490: 272d 6e61 6d65 2720 3d3e 2027 6d6f 6465 '-name' => 'mode\n+000014a0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+000014b0: 5f6f 7074 696f 6e27 203d 3e20 272d 4d27 _option' => '-M'\n+000014c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+000014d0: 616c 6961 7327 203d 3e20 272d 2d6d 6f64 alias' => '--mod\n+000014e0: 6527 2c0a 0909 0909 0920 2020 2027 2d6f e',...... '-o\n+000014f0: 6e6c 795f 6966 2720 3d3e 0a09 0909 0909 nly_if' =>......\n+00001500: 2020 2020 275b 6c6f 6361 7465 5361 6d65 '[locateSame\n+00001510: 5d20 616e 6420 6e6f 7420 5b73 686f 7741 ] and not [showA\n+00001520: 6c6c 5d27 292c 0a09 0909 094f 7074 696f ll]'),.....Optio\n+00001530: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001540: 3e20 2763 7469 6d65 272c 0a09 0909 0909 > 'ctime',......\n+00001550: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n+00001560: 203d 3e20 272d 6327 2c0a 0909 0909 0920 => '-c',...... \n+00001570: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n+00001580: 3e20 272d 2d63 7469 6d65 272c 0a09 0909 > '--ctime',....\n+00001590: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if'\n+000015a0: 203d 3e0a 0909 0909 0920 2020 2027 5b6c =>...... '[l\n+000015b0: 6f63 6174 6553 616d 655d 2061 6e64 206e ocateSame] and n\n+000015c0: 6f74 205b 7368 6f77 416c 6c5d 2729 2c0a ot [showAll]'),.\n+000015d0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n+000015e0: 272d 6e61 6d65 2720 3d3e 2027 6d74 696d '-name' => 'mtim\n+000015f0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n+00001600: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d6d l_option' => '-m\n+00001610: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001620: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6d74 _alias' => '--mt\n+00001630: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... '\n+00001640: 2d6f 6e6c 795f 6966 2720 3d3e 0a09 0909 -only_if' =>....\n+00001650: 0909 2020 2020 275b 6c6f 6361 7465 5361 .. '[locateSa\n+00001660: 6d65 5d20 616e 6420 6e6f 7420 5b73 686f me] and not [sho\n+00001670: 7741 6c6c 5d27 292c 0a09 0909 094f 7074 wAll]'),.....Opt\n+00001680: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+00001690: 203d 3e20 2761 7469 6d65 272c 0a09 0909 => 'atime',....\n+000016a0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n+000016b0: 6e27 203d 3e20 272d 6127 2c0a 0909 0909 n' => '-a',.....\n+000016c0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n+000016d0: 203d 3e20 272d 2d61 7469 6d65 272c 0a09 => '--atime',..\n+000016e0: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n+000016f0: 6627 203d 3e0a 0909 0909 0920 2020 2027 f' =>...... '\n+00001700: 5b6c 6f63 6174 6553 616d 655d 2061 6e64 [locateSame] and\n+00001710: 206e 6f74 205b 7368 6f77 416c 6c5d 2729 not [showAll]')\n+00001720: 0a09 0909 095d 0a09 0920 2020 2029 3b0a .....]... );.\n+00001730: 0a24 4368 6563 6b50 6172 2d3e 6368 6563 .$CheckPar->chec\n+00001740: 6b28 272d 6172 6776 2720 3d3e 205c 4041 k('-argv' => \\@A\n+00001750: 5247 562c 0a20 2020 2020 2020 2020 2020 RGV,. \n+00001760: 2020 2020 2020 272d 6865 6c70 2720 3d3e '-help' =>\n+00001770: 2024 4865 6c70 0a20 2020 2020 2020 2020 $Help. \n+00001780: 2020 2020 2020 2020 293b 0a0a 2320 4175 );..# Au\n+00001790: 7377 6572 7475 6e67 2064 6572 2050 6172 swertung der Par\n+000017a0: 616d 6574 6572 0a6d 7920 2466 696c 6520 ameter.my $file \n+000017b0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000017c0: 4f70 7457 6974 6850 6172 2827 6669 6c65 OptWithPar('file\n+000017d0: 2729 3b0a 6d79 2024 7665 7262 6f73 6520 ');.my $verbose \n+000017e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+000017f0: 4f70 7457 6974 686f 7574 5061 7228 2776 OptWithoutPar('v\n+00001800: 6572 626f 7365 2729 3b0a 6d79 2024 6261 erbose');.my $ba\n+00001810: 636b 7570 526f 6f74 203d 2024 4368 6563 ckupRoot = $Chec\n+00001820: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00001830: 5061 7228 2762 6163 6b75 7052 6f6f 7427 Par('backupRoot'\n+00001840: 293b 0a6d 7920 246c 6f63 6174 6553 616d );.my $locateSam\n+00001850: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n+00001860: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n+00001870: 276c 6f63 6174 6553 616d 6527 293b 0a6d 'locateSame');.m\n+00001880: 7920 2473 686f 7741 6c6c 203d 2024 4368 y $showAll = $Ch\n+00001890: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+000018a0: 7468 6f75 7450 6172 2827 7368 6f77 416c thoutPar('showAl\n+000018b0: 6c27 293b 0a6d 7920 2473 686f 7753 697a l');.my $showSiz\n+000018c0: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n+000018d0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n+000018e0: 2773 697a 6527 2920 7c20 2473 686f 7741 'size') | $showA\n+000018f0: 6c6c 3b0a 6d79 2024 7368 6f77 5549 4420 ll;.my $showUID \n+00001900: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n+00001910: 4f70 7457 6974 686f 7574 5061 7228 2775 OptWithoutPar('u\n+00001920: 6964 2729 207c 2024 7368 6f77 416c 6c3b id') | $showAll;\n+00001930: 0a6d 7920 2473 686f 7747 4944 203d 2024 .my $showGID = $\n+00001940: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001950: 5769 7468 6f75 7450 6172 2827 6769 6427 WithoutPar('gid'\n+00001960: 2920 7c20 2473 686f 7741 6c6c 3b0a 6d79 ) | $showAll;.my\n+00001970: 2024 7368 6f77 4d6f 6465 203d 2024 4368 $showMode = $Ch\n+00001980: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00001990: 7468 6f75 7450 6172 2827 6d6f 6465 2729 thoutPar('mode')\n+000019a0: 207c 2024 7368 6f77 416c 6c3b 0a6d 7920 | $showAll;.my \n+000019b0: 2473 686f 7743 5469 6d65 203d 2024 4368 $showCTime = $Ch\n+000019c0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+000019d0: 7468 6f75 7450 6172 2827 6374 696d 6527 thoutPar('ctime'\n+000019e0: 2920 7c20 2473 686f 7741 6c6c 3b0a 6d79 ) | $showAll;.my\n+000019f0: 2024 7368 6f77 4d54 696d 6520 3d20 2443 $showMTime = $C\n+00001a00: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00001a10: 6974 686f 7574 5061 7228 276d 7469 6d65 ithoutPar('mtime\n+00001a20: 2729 207c 2024 7368 6f77 416c 6c3b 0a6d ') | $showAll;.m\n+00001a30: 7920 2473 686f 7741 5469 6d65 203d 2024 y $showATime = $\n+00001a40: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001a50: 5769 7468 6f75 7450 6172 2827 6174 696d WithoutPar('atim\n+00001a60: 6527 2920 7c20 2473 686f 7741 6c6c 3b0a e') | $showAll;.\n+00001a70: 0a6d 7920 2466 203d 2024 6669 6c65 3b0a .my $f = $file;.\n+00001a80: 6d79 2024 6669 6c65 203d 2026 6162 736f my $file = &abso\n+00001a90: 6c75 7465 5061 7468 2824 6669 6c65 293b lutePath($file);\n+00001aa0: 0a0a 6d79 2024 7072 4c6f 6720 3d20 7072 ..my $prLog = pr\n+00001ab0: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki\n+00001ac0: 6e64 2720 3d3e 205b 2749 3a49 4e46 4f27 nd' => ['I:INFO'\n+00001ad0: 2c20 2757 3a57 4152 4e49 4e47 272c 2027 , 'W:WARNING', '\n+00001ae0: 453a 4552 524f 5227 2c0a 0909 0909 2020 E:ERROR',..... \n+00001af0: 2020 2020 2753 3a53 5441 5449 5354 4943 'S:STATISTIC\n+00001b00: 272c 2027 443a 4445 4255 4727 2c20 2756 ', 'D:DEBUG', 'V\n+00001b10: 3a56 4552 5349 4f4e 275d 293b 0a0a 2470 :VERSION']);..$p\n+00001b20: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+00001b30: 6e64 2720 3d3e 2027 5627 2c0a 0920 2020 nd' => 'V',.. \n+00001b40: 2020 2027 2d73 7472 2720 3d3e 205b 2224 '-str' => [\"$\n+00001b50: 5645 5253 494f 4e70 4e61 6d65 2c20 246d VERSIONpName, $m\n+00001b60: 6169 6e3a 3a53 544f 5245 4241 434b 5550 ain::STOREBACKUP\n+00001b70: 5645 5253 494f 4e2c 2022 202e 0a09 0909 VERSION, \" .....\n+00001b80: 2022 6275 696c 6420 2456 4552 5349 4f4e \"build $VERSION\n+00001b90: 7376 6e49 4422 5d29 0a20 2020 2069 6620 svnID\"]). if \n+00001ba0: 2476 6572 626f 7365 3b0a 0a23 0a23 206d $verbose;..#.# m\n+00001bb0: 6435 4368 6563 6b53 756d 202d 2044 6174 d5CheckSum - Dat\n+00001bc0: 6569 2066 696e 6465 6e0a 2470 724c 6f67 ei finden.$prLog\n+00001bd0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00001be0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. '\n+00001bf0: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => [\"file \n+00001c00: 3c24 663e 2064 6f65 7320 6e6f 7420 6578 <$f> does not ex\n+00001c10: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist\"],.. '-\n+00001c20: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n+00001c30: 756e 6c65 7373 2028 2d66 2024 6620 6f72 unless (-f $f or\n+00001c40: 202d 6420 2466 293b 0a0a 6966 2028 2462 -d $f);..if ($b\n+00001c50: 6163 6b75 7052 6f6f 7429 0a7b 0a20 2020 ackupRoot).{. \n+00001c60: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00001c70: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00001c80: 0920 2027 2d73 7472 2720 3d3e 205b 2264 . '-str' => [\"d\n+00001c90: 6972 6563 746f 7279 203c 2462 6163 6b75 irectory <$backu\n+00001ca0: 7052 6f6f 743e 2064 6f65 7320 6e6f 7420 pRoot> does not \n+00001cb0: 6578 6973 7422 5d2c 0a09 0920 2027 2d65 exist\"],... '-e\n+00001cc0: 7869 7427 203d 3e20 3129 0a09 756e 6c65 xit' => 1)..unle\n+00001cd0: 7373 2028 2d64 2024 6261 636b 7570 526f ss (-d $backupRo\n+00001ce0: 6f74 293b 0a20 2020 2024 6261 636b 7570 ot);. $backup\n+00001cf0: 526f 6f74 203d 2026 6162 736f 6c75 7465 Root = &absolute\n+00001d00: 5061 7468 2824 6261 636b 7570 526f 6f74 Path($backupRoot\n+00001d10: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. \n+00001d20: 6d79 2028 2464 6972 2c20 2478 2920 3d20 my ($dir, $x) = \n+00001d30: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n+00001d40: 696c 6529 3b0a 2020 2020 2462 6163 6b75 ile);. $backu\n+00001d50: 7052 6f6f 7420 3d20 756e 6465 663b 0a20 pRoot = undef;. \n+00001d60: 2020 2064 6f0a 2020 2020 7b0a 0923 2066 do. {..# f\n+00001d70: 6573 7473 7465 6c6c 656e 2c20 6f62 2065 eststellen, ob e\n+00001d80: 696e 6520 2e6d 6435 7375 6d20 4461 7465 ine .md5sum Date\n+00001d90: 6920 766f 7268 616e 6465 6e20 6973 740a i vorhanden ist.\n+00001da0: 0969 6620 282d 6620 2224 6469 722f 2463 .if (-f \"$dir/$c\n+00001db0: 6865 636b 5375 6d46 696c 6522 206f 7220 heckSumFile\" or \n+00001dc0: 2d66 2022 2464 6972 2f24 6368 6563 6b53 -f \"$dir/$checkS\n+00001dd0: 756d 4669 6c65 2e62 7a32 2229 0a09 7b0a umFile.bz2\")..{.\n+00001de0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n+00001df0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n+00001e00: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n+00001e10: 3e20 5b22 666f 756e 6420 696e 666f 2066 > [\"found info f\n+00001e20: 696c 6520 3c24 6368 6563 6b53 756d 4669 ile <$checkSumFi\n+00001e30: 6c65 3e20 696e 2022 202e 0a09 0909 0920 le> in \" ...... \n+00001e40: 2020 2020 2264 6972 6563 746f 7279 203c \"directory <\n+00001e50: 2464 6972 3e22 5d29 0a09 0969 6620 2824 $dir>\"])...if ($\n+00001e60: 7665 7262 6f73 6529 3b0a 0920 2020 2024 verbose);.. $\n+00001e70: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00001e80: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n+00001e90: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n+00001ea0: 205b 2266 6f75 6e64 2069 6e66 6f20 6669 [\"found info fi\n+00001eb0: 6c65 203c 2463 6865 636b 5375 6d46 696c le <$checkSumFil\n+00001ec0: 653e 2061 2073 6563 6f6e 6420 7469 6d65 e> a second time\n+00001ed0: 2069 6e20 2220 2e0a 0909 0920 2020 223c in \" ..... \"<\n+00001ee0: 2464 6972 3e2c 2066 6972 7374 2074 696d $dir>, first tim\n+00001ef0: 6520 666f 756e 6420 696e 203c 2462 6163 e found in <$bac\n+00001f00: 6b75 7052 6f6f 743e 225d 2c0a 0909 0920 kupRoot>\"],.... \n+00001f10: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1)..\n+00001f20: 0969 6620 2824 6261 636b 7570 526f 6f74 .if ($backupRoot\n+00001f30: 293b 0a0a 0920 2020 2024 6261 636b 7570 );... $backup\n+00001f40: 526f 6f74 203d 2024 6469 723b 0a09 7d0a Root = $dir;..}.\n+00001f50: 0a09 2824 6469 722c 2024 7829 203d 2026 ..($dir, $x) = &\n+00001f60: 7370 6c69 7446 696c 6544 6972 2824 6469 splitFileDir($di\n+00001f70: 7229 3b0a 2020 2020 7d20 7768 696c 6520 r);. } while \n+00001f80: 2824 6469 7220 6e65 2027 2f27 293b 0a0a ($dir ne '/');..\n+00001f90: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n+00001fa0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n+00001fb0: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => \n+00001fc0: 5b22 6469 6420 6e6f 7420 6669 6e64 2069 [\"did not find i\n+00001fd0: 6e66 6f20 6669 6c65 203c 2463 6865 636b nfo file <$check\n+00001fe0: 5375 6d46 696c 653e 225d 2c0a 0909 2020 SumFile>\"],... \n+00001ff0: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u\n+00002000: 6e6c 6573 7320 2824 6261 636b 7570 526f nless ($backupRo\n+00002010: 6f74 293b 0a7d 0a0a 6d79 2024 6368 6563 ot);.}..my $chec\n+00002020: 6b53 756d 4669 6c65 526f 6f74 203d 2024 kSumFileRoot = $\n+00002030: 6368 6563 6b53 756d 4669 6c65 3b0a 2463 checkSumFile;.$c\n+00002040: 6865 636b 5375 6d46 696c 6552 6f6f 7420 heckSumFileRoot \n+00002050: 2e3d 2022 2e62 7a32 2220 6966 2028 2d66 .= \".bz2\" if (-f\n+00002060: 2022 2462 6163 6b75 7052 6f6f 742f 2463 \"$backupRoot/$c\n+00002070: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2\"\n+00002080: 293b 0a24 7072 4c6f 672d 3e70 7269 6e74 );.$prLog->print\n+00002090: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n+000020a0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+000020b0: 3e20 5b22 6e6f 2069 6e66 6f20 6669 6c65 > [\"no info file\n+000020c0: 203c 2463 6865 636b 5375 6d46 696c 6552 <$checkSumFileR\n+000020d0: 6f6f 743e 2069 6e20 3c24 6261 636b 7570 oot> in <$backup\n+000020e0: 526f 6f74 3e22 5d2c 0a09 2020 2020 2020 Root>\"],.. \n+000020f0: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). \n+00002100: 2020 756e 6c65 7373 282d 6620 2224 6261 unless(-f \"$ba\n+00002110: 636b 7570 526f 6f74 2f24 6368 6563 6b53 ckupRoot/$checkS\n+00002120: 756d 4669 6c65 526f 6f74 2229 3b0a 0a23 umFileRoot\");..#\n+00002130: 206a 6574 7a74 2024 7265 7374 6f72 6554 jetzt $restoreT\n+00002140: 7265 6520 7265 6c61 7469 7620 7a75 2024 ree relativ zu $\n+00002150: 6261 636b 7570 526f 6f74 206d 6163 6865 backupRoot mache\n+00002160: 6e0a 6d79 2024 6669 6c65 5769 7468 5265 n.my $fileWithRe\n+00002170: 6c50 6174 6820 3d20 7375 6273 7472 2824 lPath = substr($\n+00002180: 6669 6c65 2c20 6c65 6e67 7468 2824 6261 file, length($ba\n+00002190: 636b 7570 526f 6f74 2920 2b20 3129 3b0a ckupRoot) + 1);.\n+000021a0: 6d79 2028 2473 746f 7265 4261 636b 7570 my ($storeBackup\n+000021b0: 416c 6c54 7265 6573 2c20 2466 696c 6544 AllTrees, $fileD\n+000021c0: 6174 6544 6972 2920 3d20 2673 706c 6974 ateDir) = &split\n+000021d0: 4669 6c65 4469 7228 2462 6163 6b75 7052 FileDir($backupR\n+000021e0: 6f6f 7429 3b0a 0a23 205e 5e5e 0a23 2042 oot);..# ^^^.# B\n+000021f0: 6569 7370 6965 6c3a 2020 2020 2020 2020 eispiel: \n+00002200: 2020 2020 282f 746d 702f 7374 6275 2f32 (/tmp/stbu/2\n+00002210: 3030 312e 3132 2e32 305f 3136 2e32 312e 001.12.20_16.21.\n+00002220: 3539 2f70 6572 6c2f 4a75 6c69 616e 2e63 59/perl/Julian.c\n+00002230: 2e62 7a32 290a 2320 2462 6163 6b75 7052 .bz2).# $backupR\n+00002240: 6f6f 7420 6265 696e 6861 6c74 6574 206a oot beinhaltet j\n+00002250: 6574 7a74 2064 656e 2050 6661 6420 7a75 etzt den Pfad zu\n+00002260: 6d20 4172 6368 6976 0a23 2020 2020 2020 m Archiv.# \n+00002270: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002280: 282f 746d 702f 7374 6275 2f32 3030 312e (/tmp/stbu/2001.\n+00002290: 3132 2e32 305f 3136 2e32 312e 3539 290a 12.20_16.21.59).\n+000022a0: 2320 2466 696c 6520 6265 696e 6861 6c74 # $file beinhalt\n+000022b0: 6574 2064 6965 2044 6174 6569 206d 6974 et die Datei mit\n+000022c0: 206b 6f6d 706c 6574 7465 6e2c 2061 6273 kompletten, abs\n+000022d0: 6f6c 7574 656e 2050 6661 640a 2320 2020 oluten Pfad.# \n+000022e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000022f0: 2020 2028 2f74 6d70 2f73 7462 752f 3230 (/tmp/stbu/20\n+00002300: 3031 2e31 322e 3230 5f31 362e 3231 2e35 01.12.20_16.21.5\n+00002310: 392f 7065 726c 2f4a 756c 6961 6e2e 632e 9/perl/Julian.c.\n+00002320: 627a 3229 0a23 2024 6669 6c65 5769 7468 bz2).# $fileWith\n+00002330: 5265 6c50 6174 6820 6265 696e 6861 6c74 RelPath beinhalt\n+00002340: 6574 206a 6574 7a74 2064 656e 2072 656c et jetzt den rel\n+00002350: 6174 6976 656e 2050 6661 6420 696e 6e65 ativen Pfad inne\n+00002360: 7268 616c 6220 6465 7320 4172 6368 6976 rhalb des Archiv\n+00002370: 730a 2320 2020 2020 2020 2020 2020 2020 s.# \n+00002380: 2020 2020 2020 2020 2028 7065 726c 2f4a (perl/J\n+00002390: 756c 6961 6e2e 632e 627a 3229 0a23 2024 ulian.c.bz2).# $\n+000023a0: 7374 6f72 6542 6163 6b75 7041 6c6c 5472 storeBackupAllTr\n+000023b0: 6565 7320 6265 696e 6861 6c74 6574 2064 ees beinhaltet d\n+000023c0: 656e 2052 6f6f 742d 5066 6164 2064 6573 en Root-Pfad des\n+000023d0: 2073 746f 7265 4261 636b 7570 2028 6f62 storeBackup (ob\n+000023e0: 6572 6861 6c62 0a23 2020 2020 2020 6465 erhalb.# de\n+000023f0: 7220 4461 7475 6d20 4469 7265 6374 6f72 r Datum Director\n+00002400: 6965 7329 0a23 2020 2020 2020 2020 2020 ies).# \n+00002410: 2020 2020 2020 2020 2020 2020 282f 746d (/tm\n+00002420: 702f 7374 6275 290a 2320 2466 696c 6544 p/stbu).# $fileD\n+00002430: 6174 6544 6972 2062 6569 6e68 616c 7465 ateDir beinhalte\n+00002440: 7420 6465 6e20 4e61 6d65 6e20 6465 7320 t den Namen des \n+00002450: 4461 7475 6d2d 4469 7273 2064 6573 2067 Datum-Dirs des g\n+00002460: 6573 7563 6874 656e 2066 696c 6573 0a23 esuchten files.#\n+00002470: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002480: 2020 2020 2020 2832 3030 312e 3132 2e32 (2001.12.2\n+00002490: 305f 3136 2e32 312e 3539 290a 0a23 7072 0_16.21.59)..#pr\n+000024a0: 696e 7420 2262 6163 6b75 7052 6f6f 7420 int \"backupRoot \n+000024b0: 3d20 2462 6163 6b75 7052 6f6f 745c 6e22 = $backupRoot\\n\"\n+000024c0: 3b0a 2370 7269 6e74 2022 6669 6c65 203d ;.#print \"file =\n+000024d0: 2024 6669 6c65 5c6e 223b 0a23 7072 696e $file\\n\";.#prin\n+000024e0: 7420 2266 696c 6557 6974 6852 656c 5061 t \"fileWithRelPa\n+000024f0: 7468 203d 2024 6669 6c65 5769 7468 5265 th = $fileWithRe\n+00002500: 6c50 6174 685c 6e22 3b0a 2370 7269 6e74 lPath\\n\";.#print\n+00002510: 2022 7374 6f72 6542 6163 6b75 7041 6c6c \"storeBackupAll\n+00002520: 5472 6565 7320 3d20 2473 746f 7265 4261 Trees = $storeBa\n+00002530: 636b 7570 416c 6c54 7265 6573 5c6e 223b ckupAllTrees\\n\";\n+00002540: 0a23 7072 696e 7420 2266 696c 6544 6174 .#print \"fileDat\n+00002550: 6544 6972 203d 2024 6669 6c65 4461 7465 eDir = $fileDate\n+00002560: 4469 725c 6e5c 6e22 3b0a 0a0a 2470 724c Dir\\n\\n\";...$prL\n+00002570: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n+00002580: 2720 3d3e 2027 4927 2c0a 0920 2020 2020 ' => 'I',.. \n+00002590: 2027 2d73 7472 2720 3d3e 205b 2263 6865 '-str' => [\"che\n+000025a0: 636b 696e 6720 666f 7220 3c24 6669 6c65 cking for <$file\n+000025b0: 5769 7468 5265 6c50 6174 683e 225d 290a WithRelPath>\"]).\n+000025c0: 2020 2020 6966 2024 7665 7262 6f73 653b if $verbose;\n+000025d0: 0a0a 2320 5665 7273 696f 6e73 2d44 6972 ..# Versions-Dir\n+000025e0: 6563 746f 7269 6573 2075 6e74 6572 2024 ectories unter $\n+000025f0: 6261 636b 7570 526f 6f74 2065 696e 6c65 backupRoot einle\n+00002600: 7365 6e0a 6d79 2028 4061 6c6c 4469 7273 sen.my (@allDirs\n+00002610: 2920 3d20 2826 3a3a 7265 6164 416c 6c42 ) = (&::readAllB\n+00002620: 6163 6b75 7044 6972 7328 2473 746f 7265 ackupDirs($store\n+00002630: 4261 636b 7570 416c 6c54 7265 6573 2c20 BackupAllTrees, \n+00002640: 2470 724c 6f67 2c20 3129 293b 0a23 7072 $prLog, 1));.#pr\n+00002650: 696e 7420 2261 6c6c 4469 7273 203d 5c6e int \"allDirs =\\n\n+00002660: 222c 206a 6f69 6e28 225c 6e22 2c20 4061 \", join(\"\\n\", @a\n+00002670: 6c6c 4469 7273 292c 2022 5c6e 223b 0a0a llDirs), \"\\n\";..\n+00002680: 2320 6368 6563 6b20 666f 7220 6c61 7465 # check for late\n+00002690: 4c69 6e6b 730a 6d79 2028 256c 696e 6b46 Links.my (%linkF\n+000026a0: 696c 6529 3b0a 6d79 2028 2464 2c20 4064 ile);.my ($d, @d\n+000026b0: 293b 0a66 6f72 6561 6368 2024 6420 2840 );.foreach $d (@\n+000026c0: 616c 6c44 6972 7329 0a7b 0a20 2020 2069 allDirs).{. i\n+000026d0: 6620 282d 6520 2224 642f 2e73 746f 7265 f (-e \"$d/.store\n+000026e0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link\n+000026f0: 4669 6c65 2e62 7a32 2229 0a20 2020 207b File.bz2\"). {\n+00002700: 0a09 7075 7368 2040 642c 2022 2020 2464 ..push @d, \" $d\n+00002710: 223b 0a09 246c 696e 6b46 696c 657b 2464 \";..$linkFile{$d\n+00002720: 7d20 3d20 313b 0a20 2020 207d 0a7d 0a24 } = 1;. }.}.$\n+00002730: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n+00002740: 696e 6427 203d 3e20 2757 272c 0a09 2020 ind' => 'W',.. \n+00002750: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n+00002760: 666f 756e 6420 756e 7265 736f 6c76 6564 found unresolved\n+00002770: 206c 696e 6b73 2069 6e20 3a20 222c 0a09 links in : \",..\n+00002780: 0909 2040 642c 0a09 0909 2022 706c 6561 .. @d,.... \"plea\n+00002790: 7365 2072 756e 2073 746f 7265 4261 636b se run storeBack\n+000027a0: 7570 5570 6461 7465 4261 636b 7570 2e70 upUpdateBackup.p\n+000027b0: 6c22 2c0a 0909 0920 2267 656e 6572 6174 l\",.... \"generat\n+000027c0: 6564 206c 6973 7420 7769 6c6c 206e 6f74 ed list will not\n+000027d0: 2062 6520 636f 6d70 6c65 7465 2122 2c0a be complete!\",.\n+000027e0: 0909 0920 2222 5d29 0a20 2020 2069 6620 ... \"\"]). if \n+000027f0: 4064 3b0a 0a0a 2320 5a75 6572 7374 2064 @d;...# Zuerst d\n+00002800: 6965 2044 6174 6569 656e 2064 6972 656b ie Dateien direk\n+00002810: 7420 6175 6620 4578 6973 7465 6e7a 20fc t auf Existenz .\n+00002820: 6265 7270 72fc 6665 6e0a 2320 6461 6e6e berpr.fen.# dann\n+00002830: 206d 6435 2d53 756d 6d65 6e20 6265 7265 md5-Summen bere\n+00002840: 6368 6e65 6e2c 2075 6d20 756e 7465 7273 chnen, um unters\n+00002850: 6368 6965 646c 6963 6865 2053 74e4 6e64 chiedliche St.nd\n+00002860: 6520 6665 7374 7a75 7374 656c 6c65 6e0a e festzustellen.\n+00002870: 6d79 2028 4066 696c 6573 2c20 406d 6435 my (@files, @md5\n+00002880: 7375 6d2c 2040 6469 7273 2c20 2465 6e74 sum, @dirs, $ent\n+00002890: 7279 293b 0a6d 7920 246d 6435 7375 6d42 ry);.my $md5sumB\n+000028a0: 6c6f 636b 203d 2075 6e64 6566 3b0a 6d79 lock = undef;.my\n+000028b0: 2024 6c61 7374 496e 6f64 6520 3d20 756e $lastInode = un\n+000028c0: 6465 663b 0a66 6f72 6561 6368 2024 656e def;.foreach $en\n+000028d0: 7472 7920 2840 616c 6c44 6972 7329 0a7b try (@allDirs).{\n+000028e0: 0a20 2020 2069 6620 2865 7869 7374 7320 . if (exists \n+000028f0: 246c 696e 6b46 696c 657b 2465 6e74 7279 $linkFile{$entry\n+00002900: 7d29 0a20 2020 207b 0a09 2470 724c 6f67 }). {..$prLog\n+00002910: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00002920: 3d3e 2027 5727 2c0a 0909 2020 2020 2020 => 'W',... \n+00002930: 272d 7374 7227 203d 3e20 5b22 736b 6970 '-str' => [\"skip\n+00002940: 7069 6e67 203c 2465 6e74 7279 3e22 5d29 ping <$entry>\"])\n+00002950: 3b0a 096e 6578 743b 0a20 2020 207d 0a0a ;..next;. }..\n+00002960: 2020 2020 6d79 2024 6620 3d20 2465 6e74 my $f = $ent\n+00002970: 7279 202e 2027 2f27 202e 2024 6669 6c65 ry . '/' . $file\n+00002980: 5769 7468 5265 6c50 6174 683b 0a20 2020 WithRelPath;. \n+00002990: 2069 6620 282d 6620 2466 290a 2020 2020 if (-f $f). \n+000029a0: 7b0a 0970 7573 6820 4066 696c 6573 2c20 {..push @files, \n+000029b0: 2466 3b0a 0970 7573 6820 4064 6972 732c $f;..push @dirs,\n+000029c0: 2024 656e 7472 793b 0a0a 0923 2065 7273 $entry;...# ers\n+000029d0: 7420 6d61 6c20 7072 fc66 656e 2c20 6f62 t mal pr.fen, ob\n+000029e0: 2069 6e6f 6465 2069 6465 6e74 6973 6368 inode identisch\n+000029f0: 2069 7374 0a09 6d79 2028 2469 6e6f 6465 ist..my ($inode\n+00002a00: 2c20 2473 697a 6529 203d 2028 7374 6174 , $size) = (stat\n+00002a10: 2824 6629 295b 312c 375d 3b0a 0969 6620 ($f))[1,7];..if \n+00002a20: 2824 696e 6f64 6520 3d3d 2024 6c61 7374 ($inode == $last\n+00002a30: 496e 6f64 6529 0a09 7b0a 0920 2020 2070 Inode)..{.. p\n+00002a40: 7573 6820 406d 6435 7375 6d2c 2024 6d64 ush @md5sum, $md\n+00002a50: 3573 756d 5b40 6d64 3573 756d 202d 2031 5sum[@md5sum - 1\n+00002a60: 5d3b 2020 2320 6c65 747a 7465 206d 6435 ]; # letzte md5\n+00002a70: 2053 756d 6d65 206b 6f70 6965 7265 6e0a Summe kopieren.\n+00002a80: 0920 2020 206e 6578 743b 2020 2020 2020 . next; \n+00002a90: 2020 2020 2020 2020 2320 6d64 3520 5375 # md5 Su\n+00002aa0: 6d6d 6520 6d75 7373 206e 6963 6874 2062 mme muss nicht b\n+00002ab0: 6572 6563 686e 6574 2077 6572 6465 6e0a erechnet werden.\n+00002ac0: 097d 0a09 246c 6173 7449 6e6f 6465 203d .}..$lastInode =\n+00002ad0: 2024 696e 6f64 653b 0a0a 0923 206d 6435 $inode;...# md5\n+00002ae0: 2053 756d 6d65 206d 7573 7320 6265 7265 Summe muss bere\n+00002af0: 6368 6e65 7420 7765 7264 656e 0a09 6d79 chnet werden..my\n+00002b00: 2024 6d64 3520 3d20 263a 3a63 616c 6346 $md5 = &::calcF\n+00002b10: 696c 654d 4435 5375 6d28 2224 6622 293b ileMD5Sum(\"$f\");\n+00002b20: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00002b30: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00002b40: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00002b50: 3e20 5b22 636f 756c 6420 6e6f 7420 7265 > [\"could not re\n+00002b60: 6164 203c 2466 3e22 5d29 0a09 2020 2020 ad <$f>\"]).. \n+00002b70: 756e 6c65 7373 2024 6d64 353b 0a0a 0970 unless $md5;...p\n+00002b80: 7573 6820 406d 6435 7375 6d2c 2024 6d64 ush @md5sum, $md\n+00002b90: 353b 0a20 2020 207d 0a20 2020 2065 6c73 5;. }. els\n+00002ba0: 6966 2028 2d64 2024 6629 2020 2020 2020 if (-d $f) \n+00002bb0: 2023 2062 6c6f 636b 6564 2066 696c 650a # blocked file.\n+00002bc0: 2020 2020 7b0a 0923 206d 6435 2073 756d {..# md5 sum\n+00002bd0: 206f 6620 626c 6f63 6b20 6368 6563 6b20 of block check \n+00002be0: 7375 6d20 6669 6c65 0a09 6d79 2024 6642 sum file..my $fB\n+00002bf0: 6c6f 636b 203d 2022 2466 2f2e 6d64 3542 lock = \"$f/.md5B\n+00002c00: 6c6f 636b 4368 6563 6b53 756d 732e 627a lockCheckSums.bz\n+00002c10: 3222 3b0a 0975 6e6c 6573 7320 282d 6620 2\";..unless (-f \n+00002c20: 2466 426c 6f63 6b29 0a09 7b0a 0920 2020 $fBlock)..{.. \n+00002c30: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n+00002c40: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n+00002c50: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n+00002c60: 6361 6e6e 6f74 206f 7065 6e20 3c24 6642 cannot open <$fB\n+00002c70: 6c6f 636b 3e22 5d29 3b0a 0920 2020 206e lock>\"]);.. n\n+00002c80: 6578 743b 0a09 7d0a 096d 7920 246d 6435 ext;..}..my $md5\n+00002c90: 203d 2026 3a3a 6361 6c63 4669 6c65 4d44 = &::calcFileMD\n+00002ca0: 3553 756d 2822 2466 426c 6f63 6b22 293b 5Sum(\"$fBlock\");\n+00002cb0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00002cc0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n+00002cd0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00002ce0: 3e20 5b22 636f 756c 6420 6e6f 7420 7265 > [\"could not re\n+00002cf0: 6164 203c 2466 426c 6f63 6b3e 225d 290a ad <$fBlock>\"]).\n+00002d00: 0920 2020 2075 6e6c 6573 7320 246d 6435 . unless $md5\n+00002d10: 3b0a 0970 7573 6820 4066 696c 6573 2c20 ;..push @files, \n+00002d20: 2466 3b0a 0970 7573 6820 4064 6972 732c $f;..push @dirs,\n+00002d30: 2024 656e 7472 793b 0a09 7075 7368 2040 $entry;..push @\n+00002d40: 6d64 3573 756d 2c20 246d 6435 3b0a 2020 md5sum, $md5;. \n+00002d50: 2020 7d0a 7d0a 0a23 7072 696e 7420 2266 }.}..#print \"f\n+00002d60: 696c 6573 203d 205c 6e22 2c20 6a6f 696e iles = \\n\", join\n+00002d70: 2822 5c6e 222c 2040 6669 6c65 7329 2c20 (\"\\n\", @files), \n+00002d80: 225c 6e22 3b0a 2370 7269 6e74 2022 6d64 \"\\n\";.#print \"md\n+00002d90: 3573 203d 205c 6e22 2c20 6a6f 696e 2822 5s = \\n\", join(\"\n+00002da0: 5c6e 222c 2040 6d64 3573 756d 292c 2022 \\n\", @md5sum), \"\n+00002db0: 5c6e 223b 0a0a 2320 556e 7465 7273 6368 \\n\";..# Untersch\n+00002dc0: 6965 646c 6963 6865 2056 6572 7369 6f6e iedliche Version\n+00002dd0: 656e 206d 6572 6b65 6e0a 6d79 2028 2469 en merken.my ($i\n+00002de0: 2c20 246a 293b 0a6d 7920 2840 7665 7273 , $j);.my (@vers\n+00002df0: 696f 6e46 696c 6573 2920 3d20 2466 696c ionFiles) = $fil\n+00002e00: 6573 5b30 5d3b 0a6d 7920 2840 7665 7273 es[0];.my (@vers\n+00002e10: 696f 6e44 6972 7329 203d 2024 6469 7273 ionDirs) = $dirs\n+00002e20: 5b30 5d3b 0a6d 7920 246c 6173 746d 6435 [0];.my $lastmd5\n+00002e30: 203d 2024 6d64 3573 756d 5b30 5d3b 0a70 = $md5sum[0];.p\n+00002e40: 7269 6e74 6628 2225 3264 2025 735c 6e22 rintf(\"%2d %s\\n\"\n+00002e50: 2c20 312c 2024 7665 7273 696f 6e46 696c , 1, $versionFil\n+00002e60: 6573 5b30 5d29 2075 6e6c 6573 7320 246c es[0]) unless $l\n+00002e70: 6f63 6174 6553 616d 653b 0a66 6f72 2028 ocateSame;.for (\n+00002e80: 246a 203d 2030 2c20 2469 203d 2031 203b $j = 0, $i = 1 ;\n+00002e90: 2024 6920 3c20 4066 696c 6573 203b 2024 $i < @files ; $\n+00002ea0: 692b 2b29 0a7b 0a20 2020 2069 6620 2824 i++).{. if ($\n+00002eb0: 6d64 3573 756d 5b24 695d 206e 6520 246c md5sum[$i] ne $l\n+00002ec0: 6173 746d 6435 290a 2020 2020 7b0a 0924 astmd5). {..$\n+00002ed0: 6c61 7374 6d64 3520 3d20 246d 6435 7375 lastmd5 = $md5su\n+00002ee0: 6d5b 2469 5d3b 0a09 2b2b 246a 3b0a 0924 m[$i];..++$j;..$\n+00002ef0: 7665 7273 696f 6e46 696c 6573 5b24 6a5d versionFiles[$j]\n+00002f00: 203d 2024 6669 6c65 735b 2469 5d3b 0a09 = $files[$i];..\n+00002f10: 2476 6572 7369 6f6e 4469 7273 5b24 6a5d $versionDirs[$j]\n+00002f20: 203d 2024 6469 7273 5b24 695d 3b0a 0970 = $dirs[$i];..p\n+00002f30: 7269 6e74 6628 2225 3264 2025 735c 6e22 rintf(\"%2d %s\\n\"\n+00002f40: 2c20 246a 202b 2031 2c20 2476 6572 7369 , $j + 1, $versi\n+00002f50: 6f6e 4669 6c65 735b 246a 5d29 2075 6e6c onFiles[$j]) unl\n+00002f60: 6573 7320 246c 6f63 6174 6553 616d 653b ess $locateSame;\n+00002f70: 0a20 2020 207d 0a7d 0a0a 6578 6974 2030 . }.}..exit 0\n+00002f80: 2075 6e6c 6573 7320 246c 6f63 6174 6553 unless $locateS\n+00002f90: 616d 653b 0a0a 6d79 2025 7665 7273 696f ame;..my %versio\n+00002fa0: 6e4d 4435 7375 6d3b 2020 2320 6d64 3520 nMD5sum; # md5 \n+00002fb0: 5375 6d6d 656e 206d fc73 7365 6e20 6175 Summen m.ssen au\n+00002fc0: 7320 2463 6865 636b 5375 6d46 696c 6520 s $checkSumFile \n+00002fd0: 6765 6c65 7365 6e20 7765 7264 656e 2c0a gelesen werden,.\n+00002fe0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00002ff0: 2020 2020 2320 6461 2061 6e73 6f6e 7374 # da ansonst\n+00003000: 656e 206b 6f6d 7072 696d 6965 7274 6520 en komprimierte \n+00003010: 4461 7465 6965 6e20 6d69 7420 6e69 6368 Dateien mit nich\n+00003020: 742d 6b6f 6d70 7269 6d69 6572 7465 6e0a t-komprimierten.\n+00003030: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003040: 2020 2020 2320 7665 7267 6c69 6368 656e # verglichen\n+00003050: 2077 fc72 6465 6e21 0a6d 7920 2576 6572 w.rden!.my %ver\n+00003060: 7369 6f6e 5369 7a65 3b20 2020 2023 206b sionSize; # k\n+00003070: 6579 203d 206d 6435 7375 6d20 2877 6965 ey = md5sum (wie\n+00003080: 206f 6265 6e29 2c20 7661 6c75 6520 3d20 oben), value = \n+00003090: 7369 7a65 2061 7573 2024 6368 6563 6b53 size aus $checkS\n+000030a0: 756d 4669 6c65 0a6d 7920 2576 6572 7369 umFile.my %versi\n+000030b0: 6f6e 5549 443b 2020 2020 2023 206b 6579 onUID; # key\n+000030c0: 203d 206d 6435 7375 6d20 2877 6965 206f = md5sum (wie o\n+000030d0: 6265 6e29 2c20 7661 6c75 6520 3d20 7569 ben), value = ui\n+000030e0: 6420 6175 7320 2463 6865 636b 5375 6d46 d aus $checkSumF\n+000030f0: 696c 650a 6d79 2025 7665 7273 696f 6e47 ile.my %versionG\n+00003100: 4944 3b20 2020 2020 2320 6b65 7920 3d20 ID; # key = \n+00003110: 6d64 3573 756d 2028 7769 6520 6f62 656e md5sum (wie oben\n+00003120: 292c 2076 616c 7565 203d 2075 6964 2061 ), value = uid a\n+00003130: 7573 2024 6368 6563 6b53 756d 4669 6c65 us $checkSumFile\n+00003140: 0a6d 7920 2576 6572 7369 6f6e 4d6f 6465 .my %versionMode\n+00003150: 3b20 2020 2023 206b 6579 203d 206d 6435 ; # key = md5\n+00003160: 7375 6d20 2877 6965 206f 6265 6e29 2c20 sum (wie oben), \n+00003170: 7661 6c75 6520 3d20 6d6f 6465 2061 7573 value = mode aus\n+00003180: 2024 6368 6563 6b53 756d 4669 6c65 0a6d $checkSumFile.m\n+00003190: 7920 2576 6572 7369 6f6e 4354 696d 653b y %versionCTime;\n+000031a0: 2020 2023 206b 6579 203d 206d 6435 7375 # key = md5su\n+000031b0: 6d20 2877 6965 206f 6265 6e29 2c20 7661 m (wie oben), va\n+000031c0: 6c75 6520 3d20 6374 696d 6520 6175 7320 lue = ctime aus \n+000031d0: 2463 6865 636b 5375 6d46 696c 650a 6d79 $checkSumFile.my\n+000031e0: 2025 7665 7273 696f 6e4d 5469 6d65 3b20 %versionMTime; \n+000031f0: 2020 2320 6b65 7920 3d20 6d64 3573 756d # key = md5sum\n+00003200: 2028 7769 6520 6f62 656e 292c 2076 616c (wie oben), val\n+00003210: 7565 203d 206d 7469 6d65 2061 7573 2024 ue = mtime aus $\n+00003220: 6368 6563 6b53 756d 4669 6c65 0a6d 7920 checkSumFile.my \n+00003230: 2576 6572 7369 6f6e 436f 6d70 723b 2020 %versionCompr; \n+00003240: 2023 206b 6579 203d 206d 6435 7375 6d20 # key = md5sum \n+00003250: 2877 6965 206f 6265 6e29 2c20 7661 6c75 (wie oben), valu\n+00003260: 6520 3d20 637c 7520 6175 7320 2463 6865 e = c|u aus $che\n+00003270: 636b 5375 6d46 696c 650a 6d79 2028 4076 ckSumFile.my (@v\n+00003280: 6572 7369 6f6e 4d44 3573 293b 0a6d 7920 ersionMD5s);.my \n+00003290: 2840 6475 6d6d 7929 3b0a 0a6d 7920 2461 (@dummy);..my $a\n+000032a0: 6c6c 203d 2040 7665 7273 696f 6e44 6972 ll = @versionDir\n+000032b0: 7320 2b20 4061 6c6c 4469 7273 3b0a 6d79 s + @allDirs;.my\n+000032c0: 2024 616c 6c43 6f75 6e74 203d 2030 3b0a $allCount = 0;.\n+000032d0: 6d79 2024 616c 6c41 6374 436f 756e 7420 my $allActCount \n+000032e0: 3d20 303b 0a66 6f72 6561 6368 2024 656e = 0;.foreach $en\n+000032f0: 7472 7920 2840 7665 7273 696f 6e44 6972 try (@versionDir\n+00003300: 7329 2020 2023 206a 6574 7a74 2061 6c6c s) # jetzt all\n+00003310: 6520 7a75 7220 4461 7465 6920 2a67 6573 e zur Datei *ges\n+00003320: 7065 6963 6865 7274 656e 2a0a 7b20 2020 peicherten*.{ \n+00003330: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00003340: 2020 2020 2020 2020 2020 2020 2320 756e # un\n+00003350: 7465 7273 6368 6965 646c 6963 6865 6e20 terschiedlichen \n+00003360: 6d64 3520 5375 6d6d 656e 206c 6164 656e md5 Summen laden\n+00003370: 0a20 2020 2069 6620 2824 7665 7262 6f73 . if ($verbos\n+00003380: 6529 0a20 2020 207b 0a09 2470 724c 6f67 e). {..$prLog\n+00003390: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+000033a0: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... \n+000033b0: 272d 7374 7227 203d 3e20 5b22 7265 6164 '-str' => [\"read\n+000033c0: 696e 6720 3c24 656e 7472 793e 225d 293b ing <$entry>\"]);\n+000033d0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n+000033e0: 2020 2020 7b0a 0969 6620 2824 616c 6c43 {..if ($allC\n+000033f0: 6f75 6e74 2b2b 202f 2024 616c 6c20 3e3d ount++ / $all >=\n+00003400: 2024 616c 6c41 6374 436f 756e 7420 2f20 $allActCount / \n+00003410: 3130 290a 097b 0a09 2020 2020 7072 696e 10)..{.. prin\n+00003420: 7420 2224 616c 6c41 6374 436f 756e 7420 t \"$allActCount \n+00003430: 223b 0a09 2020 2020 5354 444f 5554 2d3e \";.. STDOUT->\n+00003440: 6175 746f 666c 7573 6828 3129 3b0a 0920 autoflush(1);.. \n+00003450: 2020 2024 616c 6c41 6374 436f 756e 742b $allActCount+\n+00003460: 2b3b 0a09 7d0a 2020 2020 7d0a 0a20 2020 +;..}. }.. \n+00003470: 206d 7920 2466 6f75 6e64 203d 2030 3b0a my $found = 0;.\n+00003480: 2020 2020 6d79 2024 7263 7366 203d 2072 my $rcsf = r\n+00003490: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile-\n+000034a0: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF\n+000034b0: 696c 6527 203d 3e20 2224 656e 7472 792f ile' => \"$entry/\n+000034c0: 2463 6865 636b 5375 6d46 696c 6522 2c0a $checkSumFile\",.\n+000034d0: 0909 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog\n+000034e0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0909 ' => $prLog);...\n+000034f0: 0909 2020 2020 200a 2320 2020 206d 7920 .. .# my \n+00003500: 246d 6574 6120 3d20 2472 6373 662d 3e67 $meta = $rcsf->g\n+00003510: 6574 4d65 7461 5661 6c46 6965 6c64 2829 etMetaValField()\n+00003520: 3b0a 2320 2020 206d 7920 2470 6f73 7466 ;.# my $postf\n+00003530: 6978 203d 2028 2424 6d65 7461 7b27 706f ix = ($$meta{'po\n+00003540: 7374 6669 7827 7d29 2d3e 5b30 5d3b 2020 stfix'})->[0]; \n+00003550: 2020 2320 706f 7374 6669 7820 286b 6f6d # postfix (kom\n+00003560: 7072 2e20 6f64 6572 206e 6963 6874 2920 pr. oder nicht) \n+00003570: 6d65 726b 656e 0a20 2020 206d 7920 2470 merken. my $p\n+00003580: 6f73 7466 6978 203d 2024 7263 7366 2d3e ostfix = $rcsf->\n+00003590: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar('\n+000035a0: 706f 7374 6669 7827 293b 0a0a 2020 2020 postfix');.. \n+000035b0: 6d79 2028 246d 6435 7375 6d2c 2024 636f my ($md5sum, $co\n+000035c0: 6d70 722c 2024 6465 7649 6e6f 6465 2c20 mpr, $devInode, \n+000035d0: 2469 6e6f 6465 4261 636b 7570 2c20 2463 $inodeBackup, $c\n+000035e0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a\n+000035f0: 7469 6d65 2c0a 0924 7369 7a65 2c20 2475 time,..$size, $u\n+00003600: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode,\n+00003610: 2024 6669 6c65 6e61 6d65 293b 0a20 2020 $filename);. \n+00003620: 2077 6869 6c65 2028 2828 246d 6435 7375 while ((($md5su\n+00003630: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI\n+00003640: 6e6f 6465 2c20 2469 6e6f 6465 4261 636b node, $inodeBack\n+00003650: 7570 2c20 2463 7469 6d65 2c20 246d 7469 up, $ctime, $mti\n+00003660: 6d65 2c20 2461 7469 6d65 2c0a 0920 2020 me, $atime,.. \n+00003670: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g\n+00003680: 6964 2c20 246d 6f64 652c 2024 6669 6c65 id, $mode, $file\n+00003690: 6e61 6d65 2920 3d20 2472 6373 662d 3e6e name) = $rcsf->n\n+000036a0: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0).\n+000036b0: 2020 2020 7b0a 0924 6669 6c65 6e61 6d65 {..$filename\n+000036c0: 202e 3d20 2470 6f73 7466 6978 2069 6620 .= $postfix if \n+000036d0: 2463 6f6d 7072 2065 7120 2763 273b 0a0a $compr eq 'c';..\n+000036e0: 0969 6620 2824 6669 6c65 5769 7468 5265 .if ($fileWithRe\n+000036f0: 6c50 6174 6820 6571 2024 6669 6c65 6e61 lPath eq $filena\n+00003700: 6d65 290a 097b 0a09 2020 2020 7075 7368 me)..{.. push\n+00003710: 2040 7665 7273 696f 6e4d 4435 732c 2024 @versionMD5s, $\n+00003720: 6d64 3573 756d 3b20 2020 2020 2020 2320 md5sum; # \n+00003730: 4f72 6967 696e 616c 206d 6435 2053 756d Original md5 Sum\n+00003740: 6d65 206d 6572 6b65 6e0a 0920 2020 2070 me merken.. p\n+00003750: 7573 6820 4064 756d 6d79 2c20 2465 6e74 ush @dummy, $ent\n+00003760: 7279 3b0a 0920 2020 2024 7665 7273 696f ry;.. $versio\n+00003770: 6e4d 4435 7375 6d7b 246d 6435 7375 6d7d nMD5sum{$md5sum}\n+00003780: 203d 205b 5d3b 0a09 2020 2020 2476 6572 = [];.. $ver\n+00003790: 7369 6f6e 5369 7a65 7b24 6d64 3573 756d sionSize{$md5sum\n+000037a0: 7d20 3d20 2473 697a 653b 0a09 2020 2020 } = $size;.. \n+000037b0: 2476 6572 7369 6f6e 5549 447b 246d 6435 $versionUID{$md5\n+000037c0: 7375 6d7d 203d 2024 7569 643b 0a09 2020 sum} = $uid;.. \n+000037d0: 2020 2476 6572 7369 6f6e 4749 447b 246d $versionGID{$m\n+000037e0: 6435 7375 6d7d 203d 2024 6769 643b 0a09 d5sum} = $gid;..\n+000037f0: 2020 2020 2476 6572 7369 6f6e 4d6f 6465 $versionMode\n+00003800: 7b24 6d64 3573 756d 7d20 3d20 246d 6f64 {$md5sum} = $mod\n+00003810: 653b 0a09 2020 2020 2476 6572 7369 6f6e e;.. $version\n+00003820: 4354 696d 657b 246d 6435 7375 6d7d 203d CTime{$md5sum} =\n+00003830: 2024 6374 696d 653b 0a09 2020 2020 2476 $ctime;.. $v\n+00003840: 6572 7369 6f6e 4d54 696d 657b 246d 6435 ersionMTime{$md5\n+00003850: 7375 6d7d 203d 2024 6d74 696d 653b 0a09 sum} = $mtime;..\n+00003860: 2020 2020 2476 6572 7369 6f6e 436f 6d70 $versionComp\n+00003870: 727b 246d 6435 7375 6d7d 203d 2024 636f r{$md5sum} = $co\n+00003880: 6d70 723b 0a09 2020 2020 2466 6f75 6e64 mpr;.. $found\n+00003890: 203d 2031 3b0a 0920 2020 206c 6173 743b = 1;.. last;\n+000038a0: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p\n+000038b0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n+000038c0: 6e64 2720 3d3e 2027 4527 2c0a 2020 2020 nd' => 'E',. \n+000038d0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n+000038e0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n+000038f0: 2066 696e 6420 3c24 6669 6c65 5769 7468 find <$fileWith\n+00003900: 5265 6c50 6174 683e 2069 6e20 3c24 656e RelPath> in <$en\n+00003910: 7472 793e 225d 290a 2020 2020 2020 2020 try>\"]). \n+00003920: 6966 2028 2466 6f75 6e64 203d 3d20 3029 if ($found == 0)\n+00003930: 3b0a 7d0a 2840 7665 7273 696f 6e44 6972 ;.}.(@versionDir\n+00003940: 7329 203d 2028 4064 756d 6d79 293b 0a0a s) = (@dummy);..\n+00003950: 2370 7269 6e74 2022 5c6e 4f72 6967 696e #print \"\\nOrigin\n+00003960: 616c 2d4d 4435 2d53 756d 6d65 6e3a 5c6e al-MD5-Summen:\\n\n+00003970: 223b 0a23 7072 696e 7420 2276 6572 7369 \";.#print \"versi\n+00003980: 6f6e 4669 6c65 7320 3d20 5c6e 222c 206a onFiles = \\n\", j\n+00003990: 6f69 6e28 225c 6e22 2c20 4076 6572 7369 oin(\"\\n\", @versi\n+000039a0: 6f6e 4669 6c65 7329 2c20 225c 6e22 3b0a onFiles), \"\\n\";.\n+000039b0: 2370 7269 6e74 2022 7665 7273 696f 6e4d #print \"versionM\n+000039c0: 4435 7320 3d20 5c6e 222c 206a 6f69 6e28 D5s = \\n\", join(\n+000039d0: 225c 6e22 2c20 4076 6572 7369 6f6e 4d44 \"\\n\", @versionMD\n+000039e0: 3573 292c 2022 5c6e 223b 0a0a 230a 2320 5s), \"\\n\";..#.# \n+000039f0: 416c 6c65 2024 6368 6563 6b53 756d 4669 Alle $checkSumFi\n+00003a00: 6c65 7320 6475 7263 6867 6568 656e 2075 les durchgehen u\n+00003a10: 6e64 2044 6174 6569 656e 206d 6974 2070 nd Dateien mit p\n+00003a20: 6173 7365 6e64 656e 204d 4435 2053 756d assenden MD5 Sum\n+00003a30: 6d65 6e20 6d65 726b 656e 0a23 0a66 6f72 men merken.#.for\n+00003a40: 6561 6368 2024 656e 7472 7920 2840 616c each $entry (@al\n+00003a50: 6c44 6972 7329 0a7b 0a20 2020 2069 6620 lDirs).{. if \n+00003a60: 2824 7665 7262 6f73 6529 0a20 2020 207b ($verbose). {\n+00003a70: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n+00003a80: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n+00003a90: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n+00003aa0: 3e20 5b22 6368 6563 6b69 6e67 203c 2465 > [\"checking <$e\n+00003ab0: 6e74 7279 3e22 5d29 3b0a 2020 2020 7d0a ntry>\"]);. }.\n+00003ac0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n+00003ad0: 6966 2028 2461 6c6c 436f 756e 742b 2b20 if ($allCount++ \n+00003ae0: 2f20 2461 6c6c 203e 3d20 2461 6c6c 4163 / $all >= $allAc\n+00003af0: 7443 6f75 6e74 202f 2031 3029 0a09 7b0a tCount / 10)..{.\n+00003b00: 0920 2020 2070 7269 6e74 2022 2461 6c6c . print \"$all\n+00003b10: 4163 7443 6f75 6e74 2022 3b0a 0920 2020 ActCount \";.. \n+00003b20: 2053 5444 4f55 542d 3e61 7574 6f66 6c75 STDOUT->autoflu\n+00003b30: 7368 2831 293b 0a09 2020 2020 2461 6c6c sh(1);.. $all\n+00003b40: 4163 7443 6f75 6e74 2b2b 3b0a 097d 0a20 ActCount++;..}. \n+00003b50: 2020 207d 0a0a 2020 2020 6d79 2024 7263 }.. my $rc\n+00003b60: 7366 203d 2072 6561 6443 6865 636b 5375 sf = readCheckSu\n+00003b70: 6d46 696c 652d 3e6e 6577 2827 2d63 6865 mFile->new('-che\n+00003b80: 636b 5375 6d46 696c 6527 203d 3e20 2224 ckSumFile' => \"$\n+00003b90: 656e 7472 792f 2463 6865 636b 5375 6d46 entry/$checkSumF\n+00003ba0: 696c 6522 2c0a 0909 0909 2020 2020 2027 ile\",..... '\n+00003bb0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n+00003bc0: 6729 3b0a 0a20 2020 206d 7920 2824 6d64 g);.. my ($md\n+00003bd0: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d\n+00003be0: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB\n+00003bf0: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $\n+00003c00: 6d74 696d 652c 2024 6174 696d 652c 0a09 mtime, $atime,..\n+00003c10: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi\n+00003c20: 642c 2024 6d6f 6465 2c20 2466 696c 656e d, $mode, $filen\n+00003c30: 616d 6529 3b0a 2020 2020 7768 696c 6520 ame);. while \n+00003c40: 2828 2824 6d64 3573 756d 2c20 2463 6f6d ((($md5sum, $com\n+00003c50: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $\n+00003c60: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct\n+00003c70: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at\n+00003c80: 696d 652c 0a09 2020 2020 2473 697a 652c ime,.. $size,\n+00003c90: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo\n+00003ca0: 6465 2c20 2466 696c 656e 616d 6529 203d de, $filename) =\n+00003cb0: 2024 7263 7366 2d3e 6e65 7874 4c69 6e65 $rcsf->nextLine\n+00003cc0: 2829 2920 3e20 3029 0a20 2020 207b 0a0a ()) > 0). {..\n+00003cd0: 0969 6620 2865 7869 7374 7328 2476 6572 .if (exists($ver\n+00003ce0: 7369 6f6e 4d44 3573 756d 7b24 6d64 3573 sionMD5sum{$md5s\n+00003cf0: 756d 7d29 290a 097b 0a09 2020 2020 7075 um}))..{.. pu\n+00003d00: 7368 2040 7b24 7665 7273 696f 6e4d 4435 sh @{$versionMD5\n+00003d10: 7375 6d7b 246d 6435 7375 6d7d 7d2c 2022 sum{$md5sum}}, \"\n+00003d20: 2465 6e74 7279 2f24 6669 6c65 6e61 6d65 $entry/$filename\n+00003d30: 223b 0a23 0920 2020 2070 7269 6e74 2022 \";.#. print \"\n+00003d40: 246d 6435 7375 6d20 2465 6e74 7279 2f24 $md5sum $entry/$\n+00003d50: 6669 6c65 6e61 6d65 5c6e 223b 0a09 7d0a filename\\n\";..}.\n+00003d60: 2020 2020 7d0a 2320 2020 2063 6c6f 7365 }.# close\n+00003d70: 2846 494c 4529 3b0a 7d0a 7072 696e 7420 (FILE);.}.print \n+00003d80: 225c 6e22 2075 6e6c 6573 7320 2476 6572 \"\\n\" unless $ver\n+00003d90: 626f 7365 3b0a 0a0a 2320 4175 7367 6162 bose;...# Ausgab\n+00003da0: 653a 0a0a 2320 536f 7274 6965 7265 6e20 e:..# Sortieren \n+00003db0: 6465 7220 6765 6675 6e64 656e 656e 2044 der gefundenen D\n+00003dc0: 6174 6569 656e 2070 726f 206d 6435 2053 ateien pro md5 S\n+00003dd0: 756d 6d65 0a66 6f72 6561 6368 2024 656e umme.foreach $en\n+00003de0: 7472 7920 286b 6579 7320 2576 6572 7369 try (keys %versi\n+00003df0: 6f6e 4d44 3573 756d 290a 7b0a 2020 2020 onMD5sum).{. \n+00003e00: 407b 2476 6572 7369 6f6e 4d44 3573 756d @{$versionMD5sum\n+00003e10: 7b24 656e 7472 797d 7d20 3d20 736f 7274 {$entry}} = sort\n+00003e20: 2040 7b24 7665 7273 696f 6e4d 4435 7375 @{$versionMD5su\n+00003e30: 6d7b 2465 6e74 7279 7d7d 3b0a 7d0a 0a23 m{$entry}};.}..#\n+00003e40: 2041 7566 6261 7565 6e20 6569 6e65 7220 Aufbauen einer \n+00003e50: 4c69 7374 652c 2064 6965 2073 6f20 736f Liste, die so so\n+00003e60: 7274 6965 7274 2077 6572 6465 6e20 6b61 rtiert werden ka\n+00003e70: 6e6e 2c20 6461 df20 6469 6520 e46c 7465 nn, da. die .lte\n+00003e80: 7374 656e 0a23 2044 6174 6569 6e61 6d65 sten.# Dateiname\n+00003e90: 6e20 6469 6520 6572 7374 656e 2056 6572 n die ersten Ver\n+00003ea0: 7369 6f6e 736e 756d 6d65 726e 2062 656b sionsnummern bek\n+00003eb0: 6f6d 6d65 6e0a 6d79 2040 6c69 7374 3b0a ommen.my @list;.\n+00003ec0: 666f 7265 6163 6820 2465 6e74 7279 2028 foreach $entry (\n+00003ed0: 6b65 7973 2025 7665 7273 696f 6e4d 4435 keys %versionMD5\n+00003ee0: 7375 6d29 0a7b 0a20 2020 2070 7573 6820 sum).{. push \n+00003ef0: 406c 6973 742c 207b 0a09 276d 6435 2720 @list, {..'md5' \n+00003f00: 3d3e 2024 656e 7472 792c 0a09 276c 6973 => $entry,..'lis\n+00003f10: 7427 203d 3e20 2476 6572 7369 6f6e 4d44 t' => $versionMD\n+00003f20: 3573 756d 7b24 656e 7472 797d 2c0a 0927 5sum{$entry},..'\n+00003f30: 7369 7a65 2720 3d3e 2024 7665 7273 696f size' => $versio\n+00003f40: 6e53 697a 657b 2465 6e74 7279 7d2c 0a09 nSize{$entry},..\n+00003f50: 2775 6964 2720 3d3e 2024 7665 7273 696f 'uid' => $versio\n+00003f60: 6e55 4944 7b24 656e 7472 797d 2c0a 0927 nUID{$entry},..'\n+00003f70: 6769 6427 203d 3e20 2476 6572 7369 6f6e gid' => $version\n+00003f80: 4749 447b 2465 6e74 7279 7d2c 0a09 276d GID{$entry},..'m\n+00003f90: 6f64 6527 203d 3e20 2476 6572 7369 6f6e ode' => $version\n+00003fa0: 4d6f 6465 7b24 656e 7472 797d 2c0a 0927 Mode{$entry},..'\n+00003fb0: 6374 696d 6527 203d 3e20 2476 6572 7369 ctime' => $versi\n+00003fc0: 6f6e 4354 696d 657b 2465 6e74 7279 7d2c onCTime{$entry},\n+00003fd0: 0a09 276d 7469 6d65 2720 3d3e 2024 7665 ..'mtime' => $ve\n+00003fe0: 7273 696f 6e4d 5469 6d65 7b24 656e 7472 rsionMTime{$entr\n+00003ff0: 797d 2c0a 0927 636f 6d70 7227 203d 3e20 y},..'compr' => \n+00004000: 2476 6572 7369 6f6e 436f 6d70 727b 2465 $versionCompr{$e\n+00004010: 6e74 7279 7d0a 2020 2020 7d3b 0a7d 0a24 ntry}. };.}.$\n+00004020: 6920 3d20 313b 0a66 6f72 6561 6368 2024 i = 1;.foreach $\n+00004030: 656e 7472 7920 2820 736f 7274 207b 2024 entry ( sort { $\n+00004040: 612d 3e7b 276c 6973 7427 7d5b 305d 2063 a->{'list'}[0] c\n+00004050: 6d70 2024 622d 3e7b 276c 6973 7427 7d5b mp $b->{'list'}[\n+00004060: 305d 207d 2040 6c69 7374 2029 0a7b 0a20 0] } @list ).{. \n+00004070: 2020 206d 7920 2470 7673 203d 2027 273b my $pvs = '';\n+00004080: 0a20 2020 2069 6620 2824 7368 6f77 5369 . if ($showSi\n+00004090: 7a65 290a 2020 2020 7b0a 0924 7076 7320 ze). {..$pvs \n+000040a0: 3d20 2720 2720 2e20 2826 6875 6d61 6e52 = ' ' . (&humanR\n+000040b0: 6561 6461 626c 6528 2465 6e74 7279 2d3e eadable($entry->\n+000040c0: 7b27 7369 7a65 277d 2929 5b30 5d20 2e20 {'size'}))[0] . \n+000040d0: 2720 2720 2e0a 0920 2020 2024 656e 7472 ' ' ... $entr\n+000040e0: 792d 3e7b 2773 697a 6527 7d20 2e20 2720 y->{'size'} . ' \n+000040f0: 6279 7465 7320 273b 0a20 2020 2069 6620 bytes ';. if \n+00004100: 2824 656e 7472 792d 3e7b 2763 6f6d 7072 ($entry->{'compr\n+00004110: 277d 2065 7120 2763 2729 0a20 2020 207b '} eq 'c'). {\n+00004120: 0a09 2470 7673 202e 3d20 2728 636f 6d70 ..$pvs .= '(comp\n+00004130: 7265 7373 6564 2927 3b0a 2020 2020 7d0a ressed)';. }.\n+00004140: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n+00004150: 2470 7673 202e 3d20 2728 6e6f 7420 636f $pvs .= '(not co\n+00004160: 6d70 7265 7373 6564 2927 3b0a 2020 2020 mpressed)';. \n+00004170: 7d0a 2020 2020 7d0a 2020 2020 7072 696e }. }. prin\n+00004180: 7420 2224 693a 2470 7673 2028 6d64 353d t \"$i:$pvs (md5=\n+00004190: 222c 2024 656e 7472 792d 3e7b 276d 6435 \", $entry->{'md5\n+000041a0: 277d 2c20 2229 5c6e 223b 0a20 2020 206d '}, \")\\n\";. m\n+000041b0: 7920 4070 3b0a 2020 2020 7075 7368 2040 y @p;. push @\n+000041c0: 702c 2027 7569 6420 3d20 2720 2e20 2465 p, 'uid = ' . $e\n+000041d0: 6e74 7279 2d3e 7b27 7569 6427 7d20 6966 ntry->{'uid'} if\n+000041e0: 2024 7368 6f77 5549 443b 0a20 2020 2070 $showUID;. p\n+000041f0: 7573 6820 4070 2c20 2767 6964 203d 2027 ush @p, 'gid = '\n+00004200: 202e 2024 656e 7472 792d 3e7b 2767 6964 . $entry->{'gid\n+00004210: 277d 2020 6966 2024 7368 6f77 4749 443b '} if $showGID;\n+00004220: 0a20 2020 2070 7573 6820 4070 2c20 7370 . push @p, sp\n+00004230: 7269 6e74 6628 226d 6f64 6520 3d20 3025 rintf(\"mode = 0%\n+00004240: 6f22 2c20 2465 6e74 7279 2d3e 7b27 6d6f o\", $entry->{'mo\n+00004250: 6465 277d 2920 6966 2024 7368 6f77 4d6f de'}) if $showMo\n+00004260: 6465 3b0a 2020 2020 7072 696e 7420 2720 de;. print ' \n+00004270: 2020 2027 2c20 6a6f 696e 2827 2c20 272c ', join(', ',\n+00004280: 2040 7029 2c20 225c 6e22 2069 6620 2840 @p), \"\\n\" if (@\n+00004290: 7029 3b0a 2020 2020 4070 203d 2028 293b p);. @p = ();\n+000042a0: 0a20 2020 2069 6620 2824 7368 6f77 4354 . if ($showCT\n+000042b0: 696d 6529 0a20 2020 207b 0a09 6d79 2024 ime). {..my $\n+000042c0: 6420 3d20 6461 7465 546f 6f6c 732d 3e6e d = dateTools->n\n+000042d0: 6577 2827 2d75 6e69 7854 696d 6527 203d ew('-unixTime' =\n+000042e0: 3e20 2465 6e74 7279 2d3e 7b27 6374 696d > $entry->{'ctim\n+000042f0: 6527 7d29 3b0a 0970 7573 6820 4070 2c20 e'});..push @p, \n+00004300: 2763 7469 6d65 203d 2027 202e 2024 642d 'ctime = ' . $d-\n+00004310: 3e67 6574 4461 7465 5469 6d65 2829 3b0a >getDateTime();.\n+00004320: 2020 2020 7d0a 2020 2020 6966 2028 2473 }. if ($s\n+00004330: 686f 774d 5469 6d65 290a 2020 2020 7b0a howMTime). {.\n+00004340: 096d 7920 2464 203d 2064 6174 6554 6f6f .my $d = dateToo\n+00004350: 6c73 2d3e 6e65 7728 272d 756e 6978 5469 ls->new('-unixTi\n+00004360: 6d65 2720 3d3e 2024 656e 7472 792d 3e7b me' => $entry->{\n+00004370: 276d 7469 6d65 277d 293b 0a09 7075 7368 'mtime'});..push\n+00004380: 2040 702c 2027 6d74 696d 6520 3d20 2720 @p, 'mtime = ' \n+00004390: 2e20 2464 2d3e 6765 7444 6174 6554 696d . $d->getDateTim\n+000043a0: 6528 293b 0a20 2020 207d 0a20 2020 2069 e();. }. i\n+000043b0: 6620 2824 7368 6f77 4154 696d 6529 0a20 f ($showATime). \n+000043c0: 2020 207b 0a09 6d79 2024 6420 3d20 6461 {..my $d = da\n+000043d0: 7465 546f 6f6c 732d 3e6e 6577 2827 2d75 teTools->new('-u\n+000043e0: 6e69 7854 696d 6527 203d 3e20 2465 6e74 nixTime' => $ent\n+000043f0: 7279 2d3e 7b27 6174 696d 6527 7d29 3b0a ry->{'atime'});.\n+00004400: 0970 7573 6820 4070 2c20 2761 7469 6d65 .push @p, 'atime\n+00004410: 203d 2027 202e 2024 642d 3e67 6574 4461 = ' . $d->getDa\n+00004420: 7465 5469 6d65 2829 3b0a 2020 2020 7d0a teTime();. }.\n+00004430: 2020 2020 7072 696e 7420 2720 2020 2027 print ' '\n+00004440: 2c20 6a6f 696e 2827 2c20 272c 2040 7029 , join(', ', @p)\n+00004450: 2c20 225c 6e22 2069 6620 2840 7029 3b0a , \"\\n\" if (@p);.\n+00004460: 2020 2020 7072 696e 7420 225c 7422 3b0a print \"\\t\";.\n+00004470: 2020 2020 7072 696e 7420 6a6f 696e 2822 print join(\"\n+00004480: 5c6e 5c74 222c 2040 7b24 656e 7472 792d \\n\\t\", @{$entry-\n+00004490: 3e7b 276c 6973 7427 7d7d 292c 2022 5c6e >{'list'}}), \"\\n\n+000044a0: 223b 0a20 2020 202b 2b24 693b 0a7d 0a0a \";. ++$i;.}..\n+000044b0: 6578 6974 2030 3b0a exit 0;.\n"}, {"source1": "./usr/bin/storeBackup_du", "source2": "./usr/bin/storeBackup_du", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,435 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 705f 6475 0a p_du.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose\n+00000030: 6620 436c 6165 7320 2832 3030 322d 3230 f Claes (2002-20\n+00000040: 3132 290a 2320 2020 2020 2020 2020 2020 12).# \n+00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we\n+00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th\n+00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr\n+00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you\n+00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut\n+000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi\n+000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under \n+000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the\n+000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub\n+000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p\n+000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# \n+00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar\n+00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei\n+00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o\n+00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o\n+00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o\n+00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later\n+00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T\n+00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d\n+00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th\n+00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w\n+000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.#\n+000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A\n+000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit\n+000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im\n+000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o\n+000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB\n+00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS\n+00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA\n+00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See \n+00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene\n+00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen\n+00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta\n+00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s\n+00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei\n+00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th\n+00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n+000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# \n+000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this\n+000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no\n+000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..use Fc\n+00000300: 6e74 6c20 7177 284f 5f52 4457 5220 4f5f ntl qw(O_RDWR O_\n+00000310: 4352 4541 5429 3b0a 7573 6520 504f 5349 CREAT);.use POSI\n+00000320: 583b 0a0a 6d79 2024 5645 5253 494f 4e20 X;..my $VERSION \n+00000330: 3d20 2724 4964 3a20 7374 6f72 6542 6163 = '$Id: storeBac\n+00000340: 6b75 705f 6475 2e70 6c20 3336 3220 3230 kup_du.pl 362 20\n+00000350: 3132 2d30 312d 3238 2032 323a 3131 3a31 12-01-28 22:11:1\n+00000360: 335a 2068 6a63 2024 2027 3b0a 7075 7368 3Z hjc $ ';.push\n+00000370: 2040 5645 5253 494f 4e2c 2024 5645 5253 @VERSION, $VERS\n+00000380: 494f 4e3b 0a6d 7920 2824 5645 5253 494f ION;.my ($VERSIO\n+00000390: 4e70 4e61 6d65 2c20 2456 4552 5349 4f4e NpName, $VERSION\n+000003a0: 7376 6e49 4429 203d 2024 5645 5253 494f svnID) = $VERSIO\n+000003b0: 4e20 3d7e 202f 4964 3a5c 732b 285c 532b N =~ /Id:\\s+(\\S+\n+000003c0: 295c 732b 285c 642b 292f 3b0a 246d 6169 )\\s+(\\d+)/;.$mai\n+000003d0: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n+000003e0: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n+000003f0: 7573 6520 7374 7269 6374 3b0a 0a0a 7375 use strict;...su\n+00000400: 6220 6c69 6250 6174 680a 7b0a 2020 2020 b libPath.{. \n+00000410: 6d79 2024 6669 6c65 203d 2073 6869 6674 my $file = shift\n+00000420: 3b0a 0a20 2020 206d 7920 2464 6972 3b0a ;.. my $dir;.\n+00000430: 0a20 2020 2023 2046 616c 6c73 2044 6174 . # Falls Dat\n+00000440: 6569 2073 656c 6273 7420 6569 6e20 7379 ei selbst ein sy\n+00000450: 6d6c 696e 6b20 6973 742c 2073 6f6c 616e mlink ist, solan\n+00000460: 6765 2066 6f6c 6765 6e2c 2062 6973 2061 ge folgen, bis a\n+00000470: 7566 6765 6cf6 7374 0a20 2020 2069 6620 ufgel.st. if \n+00000480: 282d 6620 2466 696c 6529 0a20 2020 207b (-f $file). {\n+00000490: 0a09 7768 696c 6520 282d 6c20 2466 696c ..while (-l $fil\n+000004a0: 6529 0a09 7b0a 0920 2020 206d 7920 246c e)..{.. my $l\n+000004b0: 696e 6b20 3d20 7265 6164 6c69 6e6b 2824 ink = readlink($\n+000004c0: 6669 6c65 293b 0a0a 0920 2020 2069 6620 file);... if \n+000004d0: 2873 7562 7374 7228 246c 696e 6b2c 2030 (substr($link, 0\n+000004e0: 2c20 3129 206e 6520 222f 2229 0a09 2020 , 1) ne \"/\").. \n+000004f0: 2020 7b0a 0909 2466 696c 6520 3d7e 2073 {...$file =~ s\n+00000500: 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b /[^\\/]+$/$link/;\n+00000510: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n+00000520: 650a 0920 2020 207b 0a09 0924 6669 6c65 e.. {...$file\n+00000530: 203d 2024 6c69 6e6b 3b0a 0920 2020 207d = $link;.. }\n+00000540: 0a09 7d0a 0a09 2824 6469 722c 2024 6669 ..}...($dir, $fi\n+00000550: 6c65 2920 3d20 2673 706c 6974 4669 6c65 le) = &splitFile\n+00000560: 4469 7228 2466 696c 6529 3b0a 0924 6669 Dir($file);..$fi\n+00000570: 6c65 203d 2022 2f24 6669 6c65 223b 0a20 le = \"/$file\";. \n+00000580: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n+00000590: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER\n+000005a0: 5220 223c 2466 696c 653e 2064 6f65 7320 R \"<$file> does \n+000005b0: 6e6f 7420 6578 6973 7421 5c6e 223b 0a09 not exist!\\n\";..\n+000005c0: 6578 6974 2031 3b0a 2020 2020 7d0a 0a20 exit 1;. }.. \n+000005d0: 2020 2024 6469 7220 2e3d 2022 2f2e 2e2f $dir .= \"/../\n+000005e0: 6c69 6222 3b20 2020 2020 2020 2020 2020 lib\"; \n+000005f0: 2320 5066 6164 207a 7520 6465 6e20 4269 # Pfad zu den Bi\n+00000600: 626c 696f 7468 656b 656e 0a20 2020 206d bliotheken. m\n+00000610: 7920 246f 6c64 4469 7220 3d20 602f 6269 y $oldDir = `/bi\n+00000620: 6e2f 7077 6460 3b0a 2020 2020 6368 6f6d n/pwd`;. chom\n+00000630: 7020 246f 6c64 4469 723b 0a20 2020 2069 p $oldDir;. i\n+00000640: 6620 2863 6864 6972 2024 6469 7229 0a20 f (chdir $dir). \n+00000650: 2020 207b 0a09 6d79 2024 6162 7344 6972 {..my $absDir\n+00000660: 203d 2060 2f62 696e 2f70 7764 603b 0a09 = `/bin/pwd`;..\n+00000670: 6368 6f70 2024 6162 7344 6972 3b0a 0963 chop $absDir;..c\n+00000680: 6864 6972 2024 6f6c 6444 6972 3b0a 0a09 hdir $oldDir;...\n+00000690: 7265 7475 726e 2028 2673 706c 6974 4669 return (&splitFi\n+000006a0: 6c65 4469 7228 2224 6162 7344 6972 2466 leDir(\"$absDir$f\n+000006b0: 696c 6522 2929 3b0a 2020 2020 7d0a 2020 ile\"));. }. \n+000006c0: 2020 656c 7365 0a20 2020 207b 0a09 7072 else. {..pr\n+000006d0: 696e 7420 5354 4445 5252 2022 3c24 6469 int STDERR \"<$di\n+000006e0: 723e 2064 6f65 7320 6e6f 7420 6578 6973 r> does not exis\n+000006f0: 742c 2065 7869 7469 6e67 5c6e 223b 0a20 t, exiting\\n\";. \n+00000700: 2020 207d 0a7d 0a73 7562 2073 706c 6974 }.}.sub split\n+00000710: 4669 6c65 4469 720a 7b0a 2020 2020 6d79 FileDir.{. my\n+00000720: 2024 6e61 6d65 203d 2073 6869 6674 3b0a $name = shift;.\n+00000730: 0a20 2020 2072 6574 7572 6e20 2827 2e27 . return ('.'\n+00000740: 2c20 246e 616d 6529 2075 6e6c 6573 7320 , $name) unless \n+00000750: 2824 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 ($name =~/\\//); \n+00000760: 2020 2023 206e 7572 2065 696e 6661 6368 # nur einfach\n+00000770: 6572 2044 6174 6569 6e61 6d65 0a0a 2020 er Dateiname.. \n+00000780: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil\n+00000790: 6529 203d 2024 6e61 6d65 203d 7e20 2f5e e) = $name =~ /^\n+000007a0: 282e 2a29 5c2f 282e 2a29 242f 733b 0a20 (.*)\\/(.*)$/s;. \n+000007b0: 2020 2024 6469 7220 3d20 272f 2720 6966 $dir = '/' if\n+000007c0: 2028 2464 6972 2065 7120 2727 293b 2020 ($dir eq ''); \n+000007d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000007e0: 2023 2067 696c 742c 2066 616c 6c73 207a # gilt, falls z\n+000007f0: 2e42 2e20 2f66 696c 656e 616d 650a 2020 .B. /filename. \n+00000800: 2020 7265 7475 726e 2028 2464 6972 2c20 return ($dir, \n+00000810: 2466 696c 6529 3b0a 7d0a 6d79 2028 2472 $file);.}.my ($r\n+00000820: 6571 2c20 2470 726f 6729 203d 2026 6c69 eq, $prog) = &li\n+00000830: 6250 6174 6828 2430 293b 0a70 7573 6820 bPath($0);.push \n+00000840: 4049 4e43 2c20 2224 7265 7122 3b0a 0a72 @INC, \"$req\";..r\n+00000850: 6571 7569 7265 2027 6368 6563 6b50 6172 equire 'checkPar\n+00000860: 616d 322e 706c 273b 0a72 6571 7569 7265 am2.pl';.require\n+00000870: 2027 7665 7273 696f 6e2e 706c 273b 0a72 'version.pl';.r\n+00000880: 6571 7569 7265 2027 6875 6d61 6e52 6561 equire 'humanRea\n+00000890: 642e 706c 273b 0a72 6571 7569 7265 2027 d.pl';.require '\n+000008a0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p\n+000008b0: 6c27 3b0a 0a3d 6865 6164 3120 4e41 4d45 l';..=head1 NAME\n+000008c0: 0a0a 7374 6f72 6542 6163 6b75 705f 6475 ..storeBackup_du\n+000008d0: 2e70 6c20 2d20 6576 616c 7561 7465 7320 .pl - evaluates \n+000008e0: 7468 6520 6469 736b 2075 7361 6765 2069 the disk usage i\n+000008f0: 6e20 6f6e 6520 6f72 206d 6f72 6520 6261 n one or more ba\n+00000900: 636b 7570 2064 6972 6563 746f 7269 6573 ckup directories\n+00000910: 2e0a 0a3d 6865 6164 3120 5359 4e4f 5053 ...=head1 SYNOPS\n+00000920: 4953 0a0a 2020 2020 7374 6f72 6542 6163 IS.. storeBac\n+00000930: 6b75 705f 6475 2e70 6c20 5b2d 765d 205b kup_du.pl [-v] [\n+00000940: 2d6c 5d20 6261 636b 7570 6469 7273 202e -l] backupdirs .\n+00000950: 2e2e 0a0a 3d68 6561 6431 204f 5054 494f ....=head1 OPTIO\n+00000960: 4e53 0a0a 3d6f 7665 7220 380a 0a3d 6974 NS..=over 8..=it\n+00000970: 656d 2042 3c2d 2d76 6572 626f 7365 3e2c em B<--verbose>,\n+00000980: 2042 3c2d 763e 0a0a 2020 2020 5072 696e B<-v>.. Prin\n+00000990: 7420 6163 6375 6d75 6c61 7465 6420 7661 t accumulated va\n+000009a0: 6c75 6573 2066 6f72 206d 756c 7469 706c lues for multipl\n+000009b0: 6520 7665 7273 696f 6e73 2028 6461 7973 e versions (days\n+000009c0: 290a 2020 2020 6f66 2062 6163 6b75 7065 ). of backupe\n+000009d0: 6420 6669 6c65 732e 2053 686f 7773 2074 d files. Shows t\n+000009e0: 6865 2073 7465 7073 2077 6865 6e20 6361 he steps when ca\n+000009f0: 6c63 756c 6174 696e 6720 7468 650a 2020 lculating the. \n+00000a00: 2020 7370 6163 6520 7573 6564 2062 7920 space used by \n+00000a10: 7468 6520 7370 6563 6966 6965 6420 6261 the specified ba\n+00000a20: 636b 7570 730a 0a3d 6974 656d 2042 3c2d ckups..=item B<-\n+00000a30: 2d6c 696e 6b73 3e2c 2042 3c2d 6c3e 0a0a -links>, B<-l>..\n+00000a40: 2020 2020 416c 736f 2070 7269 6e74 2073 Also print s\n+00000a50: 7461 7469 7374 6963 2061 626f 7574 2068 tatistic about h\n+00000a60: 6f77 206d 616e 7920 6c69 6e6b 7320 7468 ow many links th\n+00000a70: 6520 6669 6c65 7320 6861 7665 0a20 2020 e files have. \n+00000a80: 2061 6e64 2068 6f77 206d 7563 6820 7370 and how much sp\n+00000a90: 6163 6520 7468 6973 2073 6176 6573 2e0a ace this saves..\n+00000aa0: 0a3d 6261 636b 0a0a 3d68 6561 6431 2043 .=back..=head1 C\n+00000ab0: 4f50 5952 4947 4854 0a0a 436f 7079 7269 OPYRIGHT..Copyri\n+00000ac0: 6768 7420 2863 2920 3230 3032 2d32 3030 ght (c) 2002-200\n+00000ad0: 3820 6279 2048 6569 6e7a 2d4a 6f73 6566 8 by Heinz-Josef\n+00000ae0: 2043 6c61 6573 2028 7365 6520 5245 4144 Claes (see READ\n+00000af0: 4d45 290a 5075 626c 6973 6865 6420 756e ME).Published un\n+00000b00: 6465 7220 7468 6520 474e 5520 4765 6e65 der the GNU Gene\n+00000b10: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen\n+00000b20: 7365 2076 3320 6f72 2061 6e79 206c 6174 se v3 or any lat\n+00000b30: 6572 2076 6572 7369 6f6e 0a0a 3d63 7574 er version..=cut\n+00000b40: 0a0a 6d79 2024 4865 6c70 203d 206a 6f69 ..my $Help = joi\n+00000b50: 6e28 2727 2c20 6772 6570 2821 2f5e 5c73 n('', grep(!/^\\s\n+00000b60: 2a24 2f2c 2060 706f 6432 7465 7874 2024 *$/, `pod2text $\n+00000b70: 3060 2929 3b0a 2448 656c 7020 3d20 2263 0`));.$Help = \"c\n+00000b80: 616e 6e6f 7420 6669 6e64 2070 6f64 3274 annot find pod2t\n+00000b90: 6578 742c 2073 6565 2064 6f63 756d 656e ext, see documen\n+00000ba0: 7461 7469 6f6e 2066 6f72 2064 6574 6169 tation for detai\n+00000bb0: 6c73 5c6e 220a 2020 2020 756e 6c65 7373 ls\\n\". unless\n+00000bc0: 2024 4865 6c70 3b0a 0a64 6965 2022 2448 $Help;..die \"$H\n+00000bd0: 656c 7022 2075 6e6c 6573 7320 4041 5247 elp\" unless @ARG\n+00000be0: 563b 0a0a 2670 7269 6e74 5665 7273 696f V;..&printVersio\n+00000bf0: 6e73 285c 4041 5247 562c 2027 2d56 2729 ns(\\@ARGV, '-V')\n+00000c00: 3b0a 0a0a 6d79 2024 4368 6563 6b50 6172 ;...my $CheckPar\n+00000c10: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara\n+00000c20: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi\n+00000c30: 7374 7327 203d 3e20 2779 6573 272c 0a09 sts' => 'yes',..\n+00000c40: 0920 2020 2027 2d6c 6973 7427 203d 3e20 . '-list' => \n+00000c50: 5b4f 7074 696f 6e2d 3e6e 6577 2827 2d6e [Option->new('-n\n+00000c60: 616d 6527 203d 3e20 2776 6572 626f 7365 ame' => 'verbose\n+00000c70: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00000c80: 5f6f 7074 696f 6e27 203d 3e20 272d 7627 _option' => '-v'\n+00000c90: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00000ca0: 616c 6961 7327 203d 3e20 272d 2d76 6572 alias' => '--ver\n+00000cb0: 626f 7365 2729 2c0a 0909 0909 4f70 7469 bose'),.....Opti\n+00000cc0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+00000cd0: 3d3e 2027 6c69 6e6b 7327 2c0a 0909 0909 => 'links',.....\n+00000ce0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+00000cf0: 2720 3d3e 2027 2d6c 272c 0a09 0909 0909 ' => '-l',......\n+00000d00: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n+00000d10: 3d3e 2027 2d2d 6c69 6e6b 7327 290a 0909 => '--links')...\n+00000d20: 0909 5d0a 0909 2020 2020 293b 0a0a 2443 ..]... );..$C\n+00000d30: 6865 636b 5061 722d 3e63 6865 636b 2827 heckPar->check('\n+00000d40: 2d61 7267 7627 203d 3e20 5c40 4152 4756 -argv' => \\@ARGV\n+00000d50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n+00000d60: 2020 2027 2d68 656c 7027 203d 3e20 2448 '-help' => $H\n+00000d70: 656c 700a 2020 2020 2020 2020 2020 2020 elp. \n+00000d80: 2020 2020 2029 3b0a 0a6d 7920 2476 6572 );..my $ver\n+00000d90: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar\n+00000da0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n+00000db0: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m\n+00000dc0: 7920 246c 696e 6b73 203d 2024 4368 6563 y $links = $Chec\n+00000dd0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n+00000de0: 6f75 7450 6172 2827 6c69 6e6b 7327 293b outPar('links');\n+00000df0: 0a0a 7072 696e 7420 2224 5645 5253 494f ..print \"$VERSIO\n+00000e00: 4e70 4e61 6d65 2c20 246d 6169 6e3a 3a53 NpName, $main::S\n+00000e10: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO\n+00000e20: 4e2c 2062 7569 6c64 2024 5645 5253 494f N, build $VERSIO\n+00000e30: 4e73 766e 4944 5c6e 220a 2020 2020 6966 NsvnID\\n\". if\n+00000e40: 2024 7665 7262 6f73 653b 0a0a 6469 6520 $verbose;..die \n+00000e50: 2264 6972 6563 746f 7269 6573 206d 6973 \"directories mis\n+00000e60: 7369 6e67 2069 6e20 6172 6775 6d65 6e74 sing in argument\n+00000e70: 206c 6973 7422 0a20 2020 2069 6620 2824 list\". if ($\n+00000e80: 4368 6563 6b50 6172 2d3e 6765 744c 6973 CheckPar->getLis\n+00000e90: 7450 6172 2829 203d 3d20 3029 3b0a 0a23 tPar() == 0);..#\n+00000ea0: 2050 72fc 6665 6e2c 206f 6220 4469 7265 Pr.fen, ob Dire\n+00000eb0: 6374 6f72 6965 7320 fc62 6572 6861 7570 ctories .berhaup\n+00000ec0: 7420 6578 6973 7469 6572 656e 0a6d 7920 t existieren.my \n+00000ed0: 2464 3b0a 666f 7265 6163 6820 2464 2028 $d;.foreach $d (\n+00000ee0: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi\n+00000ef0: 7374 5061 7228 2929 0a7b 0a20 2020 2064 stPar()).{. d\n+00000f00: 6965 2022 3c24 643e 2064 6f65 7320 6e6f ie \"<$d> does no\n+00000f10: 7420 6578 6973 7422 2075 6e6c 6573 7320 t exist\" unless \n+00000f20: 282d 6520 2464 293b 0a20 2020 2064 6965 (-e $d);. die\n+00000f30: 2022 3c24 643e 2069 7320 6e6f 7420 6120 \"<$d> is not a \n+00000f40: 6469 7265 6374 6f72 6965 7322 2075 6e6c directories\" unl\n+00000f50: 6573 7320 282d 6420 2464 293b 0a7d 0a0a ess (-d $d);.}..\n+00000f60: 0a0a 256d 6169 6e3a 3a6e 6f4c 696e 6b73 ..%main::noLinks\n+00000f70: 3b20 2020 2023 206b 6579 203d 2069 6e6f ; # key = ino\n+00000f80: 6465 2c0a 2020 2020 2020 2020 2020 2020 de,. \n+00000f90: 2020 2020 2020 2023 2020 2020 2020 2020 # \n+00000fa0: 2020 2020 2020 2773 697a 6527 2020 2020 'size' \n+00000fb0: 3d3e 2044 6174 6569 6772 f6df 6520 2865 => Dateigr..e (e\n+00000fc0: 696e 7a65 6c6e 6520 4461 7465 6929 0a20 inzelne Datei). \n+00000fd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000fe0: 2020 2320 2020 2020 2020 2020 2020 2020 # \n+00000ff0: 2027 7265 7374 4e6f 4c69 6e6b 7327 203d 'restNoLinks' =\n+00001000: 3e20 6269 7368 6572 2067 657a e468 6c74 > bisher gez.hlt\n+00001010: 6520 416e 7a61 686c 204c 696e 6b73 0a0a e Anzahl Links..\n+00001020: 246d 6169 6e3a 3a73 756d 4c6f 6361 6c20 $main::sumLocal \n+00001030: 3d20 303b 0a40 6d61 696e 3a3a 6e6f 4669 = 0;.@main::noFi\n+00001040: 6c65 7357 6974 684c 696e 6b73 203d 2028 lesWithLinks = (\n+00001050: 293b 0a40 6d61 696e 3a3a 7369 7a65 4669 );.@main::sizeFi\n+00001060: 6c65 7357 6974 684c 696e 6b73 203d 2028 lesWithLinks = (\n+00001070: 293b 0a0a 0a6d 7920 2473 203d 2027 273b );...my $s = '';\n+00001080: 0a66 6f72 6561 6368 2024 6420 2824 4368 .foreach $d ($Ch\n+00001090: 6563 6b50 6172 2d3e 6765 744c 6973 7450 eckPar->getListP\n+000010a0: 6172 2829 290a 7b0a 2020 2020 6966 2028 ar()).{. if (\n+000010b0: 2d65 2022 2464 2f2e 7374 6f72 6542 6163 -e \"$d/.storeBac\n+000010c0: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil\n+000010d0: 652e 627a 3222 290a 2020 2020 7b0a 0970 e.bz2\"). {..p\n+000010e0: 7269 6e74 2022 3c24 643e 2061 6666 6563 rint \"<$d> affec\n+000010f0: 7465 6420 6279 2075 6e72 6573 6f6c 7665 ted by unresolve\n+00001100: 6420 6c69 6e6b 732c 2073 6b69 7070 696e d links, skippin\n+00001110: 675c 6e22 3b0a 096e 6578 743b 0a20 2020 g\\n\";..next;. \n+00001120: 207d 0a20 2020 2070 7269 6e74 2022 5f5f }. print \"__\n+00001130: 5f5f 5f5f 5f5f 6368 6563 6b69 6e67 2024 ______checking $\n+00001140: 6420 2e2e 2e5c 6e22 2069 6620 2824 7665 d ...\\n\" if ($ve\n+00001150: 7262 6f73 6529 3b0a 2020 2020 6368 6469 rbose);. chdi\n+00001160: 7220 2224 6422 3b0a 2020 2020 2674 7261 r \"$d\";. &tra\n+00001170: 7665 7273 6554 7265 6573 2829 3b0a 2020 verseTrees();. \n+00001180: 2020 6368 6469 7220 222e 2e22 3b0a 2020 chdir \"..\";. \n+00001190: 2020 6966 2028 2476 6572 626f 7365 290a if ($verbose).\n+000011a0: 2020 2020 7b0a 0970 7269 6e74 2022 2073 {..print \" s\n+000011b0: 756d 4c6f 6361 6c20 3d20 222c 2026 6875 umLocal = \", &hu\n+000011c0: 6d61 6e52 6561 6461 626c 6528 246d 6169 manReadable($mai\n+000011d0: 6e3a 3a73 756d 4c6f 6361 6c29 2c20 2224 n::sumLocal), \"$\n+000011e0: 735c 6e22 3b0a 096d 7920 2473 756d 5368 s\\n\";..my $sumSh\n+000011f0: 6172 6564 3b0a 0966 6f72 6561 6368 2024 ared;..foreach $\n+00001200: 6420 286b 6579 7320 256d 6169 6e3a 3a6e d (keys %main::n\n+00001210: 6f4c 696e 6b73 290a 097b 0a09 2020 2020 oLinks)..{.. \n+00001220: 2473 756d 5368 6172 6564 202b 3d20 246d $sumShared += $m\n+00001230: 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 647d ain::noLinks{$d}\n+00001240: 7b27 7369 7a65 277d 3b0a 097d 0a09 7072 {'size'};..}..pr\n+00001250: 696e 7420 2273 756d 5368 6172 6564 203d int \"sumShared =\n+00001260: 2022 2c20 2668 756d 616e 5265 6164 6162 \", &humanReadab\n+00001270: 6c65 2824 7375 6d53 6861 7265 6429 2c20 le($sumShared), \n+00001280: 2224 735c 6e22 3b0a 0924 7320 3d20 2220 \"$s\\n\";..$s = \" \n+00001290: 2861 6363 756d 756c 6174 6564 2922 3b0a (accumulated)\";.\n+000012a0: 2020 2020 7d0a 7d0a 0a23 205a 7573 616d }.}..# Zusam\n+000012b0: 6d65 6e72 6563 686e 656e 2064 6572 2045 menrechnen der E\n+000012c0: 7267 6562 6e69 7373 650a 756e 6c65 7373 rgebnisse.unless\n+000012d0: 2028 2476 6572 626f 7365 290a 7b0a 2020 ($verbose).{. \n+000012e0: 2020 7072 696e 7420 2220 7375 6d4c 6f63 print \" sumLoc\n+000012f0: 616c 203d 2022 2c20 2668 756d 616e 5265 al = \", &humanRe\n+00001300: 6164 6162 6c65 2824 6d61 696e 3a3a 7375 adable($main::su\n+00001310: 6d4c 6f63 616c 292c 2022 5c6e 223b 0a20 mLocal), \"\\n\";. \n+00001320: 2020 206d 7920 2473 756d 5368 6172 6564 my $sumShared\n+00001330: 3b0a 2020 2020 666f 7265 6163 6820 2464 ;. foreach $d\n+00001340: 2028 6b65 7973 2025 6d61 696e 3a3a 6e6f (keys %main::no\n+00001350: 4c69 6e6b 7329 0a20 2020 207b 0a09 2473 Links). {..$s\n+00001360: 756d 5368 6172 6564 202b 3d20 246d 6169 umShared += $mai\n+00001370: 6e3a 3a6e 6f4c 696e 6b73 7b24 647d 7b27 n::noLinks{$d}{'\n+00001380: 7369 7a65 277d 3b0a 2020 2020 7d0a 2020 size'};. }. \n+00001390: 2020 7072 696e 7420 2273 756d 5368 6172 print \"sumShar\n+000013a0: 6564 203d 2022 2c20 2668 756d 616e 5265 ed = \", &humanRe\n+000013b0: 6164 6162 6c65 2824 7375 6d53 6861 7265 adable($sumShare\n+000013c0: 6429 2c20 225c 6e22 3b0a 7d0a 0a69 6620 d), \"\\n\";.}..if \n+000013d0: 2824 6c69 6e6b 7329 0a7b 0a20 2020 2070 ($links).{. p\n+000013e0: 7269 6e74 2022 5c6e 6c69 6e6b 7320 7c20 rint \"\\nlinks | \n+000013f0: 2066 696c 6573 207c 2073 697a 6520 7c20 files | size | \n+00001400: 6c20 2a20 7320 7c20 6c65 7373 5c6e 223b l * s | less\\n\";\n+00001410: 0a20 2020 2070 7269 6e74 2022 2d2d 2d2d . print \"----\n+00001420: 2d2d 2b2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d --+--------+----\n+00001430: 2d2d 2b2d 2d2d 2d2d 2d20 2b2d 2d2d 2d2d --+------ +-----\n+00001440: 5c6e 223b 0a20 2020 2066 6f72 2028 2464 \\n\";. for ($d\n+00001450: 203d 2031 203b 2024 6420 3c20 406d 6169 = 1 ; $d < @mai\n+00001460: 6e3a 3a6e 6f46 696c 6573 5769 7468 4c69 n::noFilesWithLi\n+00001470: 6e6b 7320 3b20 2464 2b2b 290a 2020 2020 nks ; $d++). \n+00001480: 7b0a 096e 6578 7420 756e 6c65 7373 2024 {..next unless $\n+00001490: 6d61 696e 3a3a 6e6f 4669 6c65 7357 6974 main::noFilesWit\n+000014a0: 684c 696e 6b73 5b24 645d 3b0a 096d 7920 hLinks[$d];..my \n+000014b0: 246c 7320 3d20 2464 202a 2024 6d61 696e $ls = $d * $main\n+000014c0: 3a3a 7369 7a65 4669 6c65 7357 6974 684c ::sizeFilesWithL\n+000014d0: 696e 6b73 5b24 645d 3b0a 0970 7269 6e74 inks[$d];..print\n+000014e0: 6628 2220 2534 6420 7c20 2536 6420 7c20 f(\" %4d | %6d | \n+000014f0: 2573 207c 2020 2573 207c 2025 735c 6e22 %s | %s | %s\\n\"\n+00001500: 2c20 2464 2c20 246d 6169 6e3a 3a6e 6f46 , $d, $main::noF\n+00001510: 696c 6573 5769 7468 4c69 6e6b 735b 2464 ilesWithLinks[$d\n+00001520: 5d2c 0a09 2020 2020 2020 2026 6875 6d61 ],.. &huma\n+00001530: 6e52 6561 6461 626c 6528 246d 6169 6e3a nReadable($main:\n+00001540: 3a73 697a 6546 696c 6573 5769 7468 4c69 :sizeFilesWithLi\n+00001550: 6e6b 735b 2464 5d29 2c0a 0920 2020 2020 nks[$d]),.. \n+00001560: 2020 2668 756d 616e 5265 6164 6162 6c65 &humanReadable\n+00001570: 2824 6c73 292c 0a09 2020 2020 2020 2026 ($ls),.. &\n+00001580: 6875 6d61 6e52 6561 6461 626c 6528 246c humanReadable($l\n+00001590: 7320 2d20 246d 6169 6e3a 3a73 697a 6546 s - $main::sizeF\n+000015a0: 696c 6573 5769 7468 4c69 6e6b 735b 2464 ilesWithLinks[$d\n+000015b0: 5d29 293b 0a20 2020 207d 0a7d 0a0a 6578 ]));. }.}..ex\n+000015c0: 6974 2030 3b0a 0a0a 2323 2323 2323 2323 it 0;...########\n+000015d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000015e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000015f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+00001600: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n+00001610: 7562 2074 7261 7665 7273 6554 7265 6573 ub traverseTrees\n+00001620: 0a7b 0a20 2020 206c 6f63 616c 202a 4449 .{. local *DI\n+00001630: 523b 0a20 2020 206f 7065 6e64 6972 2844 R;. opendir(D\n+00001640: 4952 2c20 272e 2729 3b0a 0a20 2020 206d IR, '.');.. m\n+00001650: 7920 2466 3b0a 2020 2020 7768 696c 6520 y $f;. while \n+00001660: 2824 6620 3d20 7265 6164 6469 7220 4449 ($f = readdir DI\n+00001670: 5229 0a20 2020 207b 0a09 6966 2028 2d6c R). {..if (-l\n+00001680: 2024 6629 0a09 7b0a 0920 2020 206d 7920 $f)..{.. my \n+00001690: 2824 696e 6f64 652c 2024 6e6c 696e 6b2c ($inode, $nlink,\n+000016a0: 2024 7369 7a65 2920 3d20 286c 7374 6174 $size) = (lstat\n+000016b0: 2824 6629 295b 312c 332c 375d 3b0a 0920 ($f))[1,3,7];.. \n+000016c0: 2020 2069 6620 2864 6566 696e 6564 2824 if (defined($\n+000016d0: 6d61 696e 3a3a 6e6f 4c69 6e6b 737b 2469 main::noLinks{$i\n+000016e0: 6e6f 6465 7d29 290a 0920 2020 207b 0a09 node})).. {..\n+000016f0: 0969 6620 282d 2d24 6d61 696e 3a3a 6e6f .if (--$main::no\n+00001700: 4c69 6e6b 737b 2469 6e6f 6465 7d7b 2772 Links{$inode}{'r\n+00001710: 6573 744e 6f4c 696e 6b73 277d 203d 3d20 estNoLinks'} == \n+00001720: 3029 0a09 097b 0a09 0920 2020 2024 6d61 0)...{... $ma\n+00001730: 696e 3a3a 7375 6d4c 6f63 616c 202b 3d20 in::sumLocal += \n+00001740: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$\n+00001750: 696e 6f64 657d 7b27 7369 7a65 277d 3b0a inode}{'size'};.\n+00001760: 0909 2020 2020 6465 6c65 7465 2024 6d61 .. delete $ma\n+00001770: 696e 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f in::noLinks{$ino\n+00001780: 6465 7d3b 0a09 0920 2020 206e 6578 743b de};... next;\n+00001790: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. \n+000017a0: 2065 6c73 650a 0920 2020 207b 0a09 0969 else.. {...i\n+000017b0: 6620 2824 6e6c 696e 6b20 3d3d 2031 290a f ($nlink == 1).\n+000017c0: 0909 7b0a 0909 2020 2020 246d 6169 6e3a ..{... $main:\n+000017d0: 3a73 756d 4c6f 6361 6c20 2b3d 2024 7369 :sumLocal += $si\n+000017e0: 7a65 3b0a 0909 2020 2020 6e65 7874 3b0a ze;... next;.\n+000017f0: 0909 7d0a 0909 246d 6169 6e3a 3a6e 6f4c ..}...$main::noL\n+00001800: 696e 6b73 7b24 696e 6f64 657d 7b27 7369 inks{$inode}{'si\n+00001810: 7a65 277d 203d 2024 7369 7a65 3b0a 0909 ze'} = $size;...\n+00001820: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$\n+00001830: 696e 6f64 657d 7b27 7265 7374 4e6f 4c69 inode}{'restNoLi\n+00001840: 6e6b 7327 7d20 3d20 246e 6c69 6e6b 202d nks'} = $nlink -\n+00001850: 2031 3b0a 0920 2020 207d 0a09 7d0a 0965 1;.. }..}..e\n+00001860: 6c73 6966 2028 2d66 2024 6629 0a09 7b0a lsif (-f $f)..{.\n+00001870: 0920 2020 206d 7920 2824 696e 6f64 652c . my ($inode,\n+00001880: 2024 6e6c 696e 6b2c 2024 7369 7a65 2920 $nlink, $size) \n+00001890: 3d20 2873 7461 7428 2466 2929 5b31 2c33 = (stat($f))[1,3\n+000018a0: 2c37 5d3b 0a09 2020 2020 6966 2028 6465 ,7];.. if (de\n+000018b0: 6669 6e65 6428 246d 6169 6e3a 3a6e 6f4c fined($main::noL\n+000018c0: 696e 6b73 7b24 696e 6f64 657d 2929 0a09 inks{$inode}))..\n+000018d0: 2020 2020 7b0a 0909 6966 2028 2d2d 246d {...if (--$m\n+000018e0: 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 696e ain::noLinks{$in\n+000018f0: 6f64 657d 7b27 7265 7374 4e6f 4c69 6e6b ode}{'restNoLink\n+00001900: 7327 7d20 3d3d 2030 290a 0909 7b0a 0909 s'} == 0)...{...\n+00001910: 2020 2020 246d 6169 6e3a 3a73 756d 4c6f $main::sumLo\n+00001920: 6361 6c20 2b3d 2024 6d61 696e 3a3a 6e6f cal += $main::no\n+00001930: 4c69 6e6b 737b 2469 6e6f 6465 7d7b 2773 Links{$inode}{'s\n+00001940: 697a 6527 7d3b 0a09 0920 2020 2064 656c ize'};... del\n+00001950: 6574 6520 246d 6169 6e3a 3a6e 6f4c 696e ete $main::noLin\n+00001960: 6b73 7b24 696e 6f64 657d 3b0a 0909 2020 ks{$inode};... \n+00001970: 2020 6e65 7874 3b0a 0909 7d0a 0920 2020 next;...}.. \n+00001980: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n+00001990: 2020 7b0a 0909 2b2b 246d 6169 6e3a 3a6e {...++$main::n\n+000019a0: 6f46 696c 6573 5769 7468 4c69 6e6b 735b oFilesWithLinks[\n+000019b0: 246e 6c69 6e6b 5d3b 0a09 0924 6d61 696e $nlink];...$main\n+000019c0: 3a3a 7369 7a65 4669 6c65 7357 6974 684c ::sizeFilesWithL\n+000019d0: 696e 6b73 5b24 6e6c 696e 6b5d 202b 3d20 inks[$nlink] += \n+000019e0: 2473 697a 653b 0a09 0969 6620 2824 6e6c $size;...if ($nl\n+000019f0: 696e 6b20 3d3d 2031 290a 0909 7b0a 0909 ink == 1)...{...\n+00001a00: 2020 2020 246d 6169 6e3a 3a73 756d 4c6f $main::sumLo\n+00001a10: 6361 6c20 2b3d 2024 7369 7a65 3b0a 0909 cal += $size;...\n+00001a20: 2020 2020 6e65 7874 3b0a 0909 7d0a 0909 next;...}...\n+00001a30: 246d 6169 6e3a 3a6e 6f4c 696e 6b73 7b24 $main::noLinks{$\n+00001a40: 696e 6f64 657d 7b27 7369 7a65 277d 203d inode}{'size'} =\n+00001a50: 2024 7369 7a65 3b0a 0909 246d 6169 6e3a $size;...$main:\n+00001a60: 3a6e 6f4c 696e 6b73 7b24 696e 6f64 657d :noLinks{$inode}\n+00001a70: 7b27 7265 7374 4e6f 4c69 6e6b 7327 7d20 {'restNoLinks'} \n+00001a80: 3d20 246e 6c69 6e6b 202d 2031 3b0a 0920 = $nlink - 1;.. \n+00001a90: 2020 207d 0a09 7d0a 0965 6c73 6966 2028 }..}..elsif (\n+00001aa0: 2d64 2024 6629 0a09 7b0a 0920 2020 206e -d $f)..{.. n\n+00001ab0: 6578 7420 6966 2028 2466 2065 7120 272e ext if ($f eq '.\n+00001ac0: 2720 6f72 2024 6620 6571 2027 2e2e 2729 ' or $f eq '..')\n+00001ad0: 3b0a 0920 2020 2063 6864 6972 2022 2466 ;.. chdir \"$f\n+00001ae0: 223b 0a09 2020 2020 2674 7261 7665 7273 \";.. &travers\n+00001af0: 6554 7265 6573 2829 3b0a 0920 2020 2063 eTrees();.. c\n+00001b00: 6864 6972 2022 2e2e 223b 0a09 7d0a 2020 hdir \"..\";..}. \n+00001b10: 2020 7d0a 2020 2020 636c 6f73 6528 4449 }. close(DI\n+00001b20: 5229 3b0a 7d0a R);.}.\n"}, {"source1": "./usr/bin/storeBackupls", "source2": "./usr/bin/storeBackupls", "has_internal_linenos": true, "unified_diff": "@@ -1,4 +1,735 @@\n-00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../\n-00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku\n-00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku\n-00000030: 706c 730a pls.\n+00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl\n+00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh\n+00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz-\n+00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200\n+00000040: 322d 3230 3132 290a 2320 2020 2020 2020 2-2012).# \n+00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae\n+00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# \n+00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i\n+00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software:\n+00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr\n+000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or \n+000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un\n+000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of\n+000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n+000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n+000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by.\n+00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof\n+00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation\n+00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version\n+00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens\n+00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo\n+00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l\n+00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...#\n+00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program \n+00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i\n+00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that \n+000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu\n+000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO\n+000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY;\n+000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th\n+000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran\n+000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA\n+00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT\n+00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI\n+00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. \n+00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU \n+00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n+00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more \n+00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y\n+00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r\n+00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o\n+00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera\n+000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License\n+000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with \n+000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I\n+000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#.#..\n+00000300: 7573 6520 4663 6e74 6c20 7177 284f 5f52 use Fcntl qw(O_R\n+00000310: 4457 5220 4f5f 4352 4541 5429 3b0a 7573 DWR O_CREAT);.us\n+00000320: 6520 4669 6c65 3a3a 436f 7079 3b0a 7573 e File::Copy;.us\n+00000330: 6520 504f 5349 583b 0a75 7365 2044 6967 e POSIX;.use Dig\n+00000340: 6573 743a 3a4d 4435 2071 7728 6d64 355f est::MD5 qw(md5_\n+00000350: 6865 7829 3b0a 0a0a 6d79 2024 5645 5253 hex);...my $VERS\n+00000360: 494f 4e20 3d20 2724 4964 3a20 7374 6f72 ION = '$Id: stor\n+00000370: 6542 6163 6b75 706c 732e 706c 2033 3634 eBackupls.pl 364\n+00000380: 2032 3031 322d 3032 2d31 3220 3134 3a31 2012-02-12 14:1\n+00000390: 343a 3434 5a20 686a 6320 2420 273b 0a70 4:44Z hjc $ ';.p\n+000003a0: 7573 6820 4056 4552 5349 4f4e 2c20 2456 ush @VERSION, $V\n+000003b0: 4552 5349 4f4e 3b0a 6d79 2028 2456 4552 ERSION;.my ($VER\n+000003c0: 5349 4f4e 704e 616d 652c 2024 5645 5253 SIONpName, $VERS\n+000003d0: 494f 4e73 766e 4944 2920 3d20 2456 4552 IONsvnID) = $VER\n+000003e0: 5349 4f4e 203d 7e20 2f49 643a 5c73 2b28 SION =~ /Id:\\s+(\n+000003f0: 5c53 2b29 5c73 2b28 5c64 2b29 2f3b 0a24 \\S+)\\s+(\\d+)/;.$\n+00000400: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n+00000410: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n+00000420: 3b0a 0a75 7365 2073 7472 6963 743b 0a0a ;..use strict;..\n+00000430: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. \n+00000440: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi\n+00000450: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir\n+00000460: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D\n+00000470: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein \n+00000480: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol\n+00000490: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis\n+000004a0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i\n+000004b0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). \n+000004c0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f\n+000004d0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my \n+000004e0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink\n+000004f0: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i\n+00000500: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link,\n+00000510: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne \"/\")..\n+00000520: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~\n+00000530: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\\/]+$/$link\n+00000540: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e\n+00000550: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi\n+00000560: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. \n+00000570: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $\n+00000580: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi\n+00000590: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$\n+000005a0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = \"/$file\";\n+000005b0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n+000005c0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD\n+000005d0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR \"<$file> doe\n+000005e0: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\\n\";\n+000005f0: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }.\n+00000600: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= \"/.\n+00000610: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib\"; \n+00000620: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den \n+00000630: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. \n+00000640: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/\n+00000650: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch\n+00000660: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. \n+00000670: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir)\n+00000680: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD\n+00000690: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`;\n+000006a0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;.\n+000006b0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;.\n+000006c0: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split\n+000006d0: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir(\"$absDir\n+000006e0: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file\"));. }.\n+000006f0: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n+00000700: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR \"<$\n+00000710: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex\n+00000720: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\\n\";\n+00000730: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl\n+00000740: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. \n+00000750: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift\n+00000760: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return ('\n+00000770: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles\n+00000780: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\\//)\n+00000790: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa\n+000007a0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname..\n+000007b0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f\n+000007c0: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ \n+000007d0: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\\/(.*)$/s;\n+000007e0: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' \n+000007f0: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq '');\n+00000800: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000810: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls\n+00000820: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename.\n+00000830: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir\n+00000840: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my (\n+00000850: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = &\n+00000860: 6c69 6250 6174 6828 2430 293b 0a70 7573 libPath($0);.pus\n+00000870: 6820 4049 4e43 2c20 2224 7265 7122 3b0a h @INC, \"$req\";.\n+00000880: 0a72 6571 7569 7265 2027 6368 6563 6b50 .require 'checkP\n+00000890: 6172 616d 322e 706c 273b 0a72 6571 7569 aram2.pl';.requi\n+000008a0: 7265 2027 6461 7465 546f 6f6c 732e 706c re 'dateTools.pl\n+000008b0: 273b 0a72 6571 7569 7265 2027 7665 7273 ';.require 'vers\n+000008c0: 696f 6e2e 706c 273b 0a72 6571 7569 7265 ion.pl';.require\n+000008d0: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib\n+000008e0: 2e70 6c27 3b0a 7265 7175 6972 6520 2770 .pl';.require 'p\n+000008f0: 724c 6f67 2e70 6c27 3b0a 7265 7175 6972 rLog.pl';.requir\n+00000900: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';.\n+00000910: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa\n+00000920: 636b 7570 4c69 622e 706c 273b 0a0a 6d79 ckupLib.pl';..my\n+00000930: 2024 6b65 6570 416c 6c20 3d20 2733 3064 $keepAll = '30d\n+00000940: 273b 0a6d 7920 246b 6565 7044 7570 6c69 ';.my $keepDupli\n+00000950: 6361 7465 203d 2027 3764 273b 0a24 6d61 cate = '7d';.$ma\n+00000960: 696e 3a3a 6368 6563 6b53 756d 4669 6c65 in::checkSumFile\n+00000970: 203d 2027 2e6d 6435 4368 6563 6b53 756d = '.md5CheckSum\n+00000980: 7327 3b0a 246d 6169 6e3a 3a63 686d 6f64 s';.$main::chmod\n+00000990: 4d44 3546 696c 6520 3d20 2730 3630 3027 MD5File = '0600'\n+000009a0: 3b0a 6d79 2024 6368 6563 6b53 756d 4669 ;.my $checkSumFi\n+000009b0: 6c65 203d 2027 2e6d 6435 4368 6563 6b53 le = '.md5CheckS\n+000009c0: 756d 7327 3b0a 0a3d 6865 6164 3120 4e41 ums';..=head1 NA\n+000009d0: 4d45 0a0a 7374 6f72 6542 6163 6b75 706c ME..storeBackupl\n+000009e0: 732e 706c 202d 204c 6973 7473 2062 6163 s.pl - Lists bac\n+000009f0: 6b75 7020 6469 7265 6374 6f72 6965 7320 kup directories \n+00000a00: 6765 6e65 7261 7465 6420 7769 7468 2073 generated with s\n+00000a10: 746f 7265 4261 636b 7570 2e70 6c20 7769 toreBackup.pl wi\n+00000a20: 7468 2077 6565 6b20 6461 792e 0a0a 3d68 th week day...=h\n+00000a30: 6561 6431 2053 594e 4f50 5349 530a 0a20 ead1 SYNOPSIS.. \n+00000a40: 2020 2073 746f 7265 4261 636b 7570 6c73 storeBackupls\n+00000a50: 2e70 6c20 2d66 2063 6f6e 6669 6746 696c .pl -f configFil\n+00000a60: 6520 5b2d 2d70 7269 6e74 5d20 5b73 746f e [--print] [sto\n+00000a70: 7265 4261 636b 7570 2d64 6972 5d0a 2020 reBackup-dir]. \n+00000a80: 2020 7374 6f72 6542 6163 6b75 706c 732e storeBackupls.\n+00000a90: 706c 205b 2d76 5d20 5b2d 2d70 7269 6e74 pl [-v] [--print\n+00000aa0: 5d20 7374 6f72 6542 6163 6b75 702d 6469 ] storeBackup-di\n+00000ab0: 720a 0a3d 6865 6164 3120 4f50 5449 4f4e r..=head1 OPTION\n+00000ac0: 530a 0a3d 6f76 6572 2038 0a0a 3d69 7465 S..=over 8..=ite\n+00000ad0: 6d20 423c 2d2d 7665 7262 6f73 653e 2c20 m B<--verbose>, \n+00000ae0: 423c 2d76 3e0a 0a20 2020 2061 6464 6974 B<-v>.. addit\n+00000af0: 696f 6e61 6c20 696e 666f 726d 6174 696f ional informatio\n+00000b00: 6e20 6162 6f75 7420 7468 6520 6261 636b n about the back\n+00000b10: 7570 2064 6972 6563 746f 7269 6573 0a0a up directories..\n+00000b20: 3d69 7465 6d20 423c 2d2d 7072 696e 743e =item B<--print>\n+00000b30: 0a0a 2020 2020 7072 696e 7420 636f 6e66 .. print conf\n+00000b40: 6967 7572 6174 696f 6e20 7265 6164 2066 iguration read f\n+00000b50: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio\n+00000b60: 6e20 6669 6c65 2061 6e64 2073 746f 700a n file and stop.\n+00000b70: 0a3d 6974 656d 2042 3c2d 2d66 696c 653e .=item B<--file>\n+00000b80: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con\n+00000b90: 6669 6775 7261 7469 6f6e 2066 696c 653b figuration file;\n+00000ba0: 2061 6e61 6c79 7365 2062 6163 6b75 7073 analyse backups\n+00000bb0: 2064 6570 656e 6469 6e67 206f 6e0a 2020 depending on. \n+00000bc0: 2020 6b65 6570 2070 6172 616d 6574 6572 keep parameter\n+00000bd0: 7320 696e 2063 6f6e 6669 6775 7261 7469 s in configurati\n+00000be0: 6f6e 2066 696c 650a 0a3d 6974 656d 2046 on file..=item F\n+00000bf0: 3c73 746f 7265 4261 636b 7570 2d64 6972 .. directory\n+00000c10: 2077 6865 7265 2074 6865 2073 746f 7265 where the store\n+00000c20: 4261 636b 7570 2064 6972 6563 746f 7269 Backup directori\n+00000c30: 6573 2061 7265 0a20 2020 206f 7665 7277 es are. overw\n+00000c40: 7269 7465 7320 7468 6520 7061 7468 2069 rites the path i\n+00000c50: 6e20 7468 6520 636f 6e66 6967 2066 696c n the config fil\n+00000c60: 6520 6966 2075 7365 6420 7769 7468 202d e if used with -\n+00000c70: 660a 0a3d 6261 636b 0a0a 3d68 6561 6431 f..=back..=head1\n+00000c80: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy\n+00000c90: 7269 6768 7420 2863 2920 3230 3032 2d32 right (c) 2002-2\n+00000ca0: 3030 382c 3230 3132 2062 7920 4865 696e 008,2012 by Hein\n+00000cb0: 7a2d 4a6f 7365 6620 436c 6165 7320 2873 z-Josef Claes (s\n+00000cc0: 6565 2052 4541 444d 4529 2e0a 5075 626c ee README)..Publ\n+00000cd0: 6973 6865 6420 756e 6465 7220 7468 6520 ished under the \n+00000ce0: 474e 5520 4765 6e65 7261 6c20 5075 626c GNU General Publ\n+00000cf0: 6963 204c 6963 656e 7365 2076 3320 6f72 ic License v3 or\n+00000d00: 2061 6e79 206c 6174 6572 2076 6572 7369 any later versi\n+00000d10: 6f6e 0a0a 3d63 7574 0a0a 6d79 2024 4865 on..=cut..my $He\n+00000d20: 6c70 203d 206a 6f69 6e28 2727 2c20 6772 lp = join('', gr\n+00000d30: 6570 2821 2f5e 5c73 2a24 2f2c 2060 706f ep(!/^\\s*$/, `po\n+00000d40: 6432 7465 7874 2024 3060 2929 3b0a 2448 d2text $0`));.$H\n+00000d50: 656c 7020 3d20 2263 616e 6e6f 7420 6669 elp = \"cannot fi\n+00000d60: 6e64 2070 6f64 3274 6578 742c 2073 6565 nd pod2text, see\n+00000d70: 2064 6f63 756d 656e 7461 7469 6f6e 2066 documentation f\n+00000d80: 6f72 2064 6574 6169 6c73 5c6e 220a 2020 or details\\n\". \n+00000d90: 2020 756e 6c65 7373 2024 4865 6c70 3b0a unless $Help;.\n+00000da0: 0a26 7072 696e 7456 6572 7369 6f6e 7328 .&printVersions(\n+00000db0: 5c40 4152 4756 2c20 272d 5627 293b 0a0a \\@ARGV, '-V');..\n+00000dc0: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. \n+00000dd0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n\n+00000de0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists'\n+00000df0: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... \n+00000e00: 2027 2d63 6f6e 6669 6746 696c 6527 203d '-configFile' =\n+00000e10: 3e20 272d 6627 2c0a 0909 2020 2020 272d > '-f',... '-\n+00000e20: 6c69 7374 2720 3d3e 205b 4f70 7469 6f6e list' => [Option\n+00000e30: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00000e40: 2027 7665 7262 6f73 6527 2c0a 0909 0909 'verbose',.....\n+00000e50: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+00000e60: 2720 3d3e 2027 2d76 272c 0a09 0909 0909 ' => '-v',......\n+00000e70: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n+00000e80: 3d3e 2027 2d2d 7665 7262 6f73 6527 292c => '--verbose'),\n+00000e90: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n+00000ea0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000eb0: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n\n+00000ec0: 616d 6527 203d 3e20 2770 7269 6e74 272c ame' => 'print',\n+00000ed0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00000ee0: 7074 696f 6e27 203d 3e20 272d 2d70 7269 ption' => '--pri\n+00000ef0: 6e74 2729 2c0a 0909 0909 4f70 7469 6f6e nt'),.....Option\n+00000f00: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00000f10: 2027 6669 6c65 272c 0a09 0909 0909 2020 'file',...... \n+00000f20: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n+00000f30: 3e20 272d 6627 2c0a 2020 2020 2020 2020 > '-f',. \n+00000f40: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000f50: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000f60: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n+00000f70: 3d3e 2027 2d2d 6669 6c65 272c 0a20 2020 => '--file',. \n+00000f80: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000f90: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00000fa0: 2020 2020 2020 2020 2027 2d70 6172 616d '-param\n+00000fb0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n+00000fc0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+00000fd0: 616d 6527 203d 3e20 2762 6163 6b75 7044 ame' => 'backupD\n+00000fe0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '-\n+00000ff0: 6366 5f6b 6579 2720 3d3e 2027 6261 636b cf_key' => 'back\n+00001000: 7570 4469 7227 2c0a 0909 0909 0920 2020 upDir',...... \n+00001010: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n+00001020: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option-\n+00001030: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n+00001040: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... \n+00001050: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n+00001060: 2773 6572 6965 7327 2c0a 0909 0909 0920 'series',...... \n+00001070: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n+00001080: 2027 6465 6661 756c 7427 292c 0a09 0909 'default'),....\n+00001090: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n+000010a0: 616d 6527 203d 3e20 276b 6565 7041 6c6c ame' => 'keepAll\n+000010b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+000010c0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n+000010d0: 6565 7041 6c6c 272c 0a09 0909 0909 2020 eepAll',...... \n+000010e0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n+000010f0: 6b65 6570 416c 6c27 2c0a 0909 0909 0920 keepAll',...... \n+00001100: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n+00001110: 2024 6b65 6570 416c 6c29 2c0a 0909 0909 $keepAll),.....\n+00001120: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n+00001130: 6d65 2720 3d3e 2027 6b65 6570 5765 656b me' => 'keepWeek\n+00001140: 6461 7927 2c0a 0909 0909 0920 2020 2027 day',...... '\n+00001150: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+00001160: 2d2d 6b65 6570 5765 656b 6461 7927 2c0a --keepWeekday',.\n+00001170: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+00001180: 7927 203d 3e20 276b 6565 7057 6565 6b64 y' => 'keepWeekd\n+00001190: 6179 272c 0a09 0909 0909 2020 2020 272d ay',...... '-\n+000011a0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n+000011b0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n+000011c0: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke\n+000011d0: 6570 4669 7273 744f 6659 6561 7227 2c0a epFirstOfYear',.\n+000011e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+000011f0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n+00001200: 4669 7273 744f 6659 6561 7227 2c0a 0909 FirstOfYear',...\n+00001210: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+00001220: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf\n+00001230: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... \n+00001240: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n+00001250: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n+00001260: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00001270: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear',\n+00001280: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n+00001290: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n+000012a0: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',...\n+000012b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+000012c0: 203d 3e20 276b 6565 704c 6173 744f 6659 => 'keepLastOfY\n+000012d0: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... '\n+000012e0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n+000012f0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n+00001300: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n+00001310: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth'\n+00001320: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n+00001330: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke\n+00001340: 6570 4669 7273 744f 664d 6f6e 7468 272c epFirstOfMonth',\n+00001350: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n+00001360: 6579 2720 3d3e 2027 6b65 6570 4669 7273 ey' => 'keepFirs\n+00001370: 744f 664d 6f6e 7468 272c 0a09 0909 0909 tOfMonth',......\n+00001380: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n+00001390: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n+000013a0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+000013b0: 3d3e 2027 6b65 6570 4c61 7374 4f66 4d6f => 'keepLastOfMo\n+000013c0: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... '\n+000013d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+000013e0: 2d2d 6b65 6570 4c61 7374 4f66 4d6f 6e74 --keepLastOfMont\n+000013f0: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c\n+00001400: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL\n+00001410: 6173 744f 664d 6f6e 7468 272c 0a09 0909 astOfMonth',....\n+00001420: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n+00001430: 3e20 2779 6573 2729 2c0a 2020 2020 2020 > 'yes'),. \n+00001440: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001450: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n+00001460: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n+00001470: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek\n+00001480: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001490: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f\n+000014a0: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',.\n+000014b0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n+000014c0: 7927 203d 3e20 2766 6972 7374 4461 794f y' => 'firstDayO\n+000014d0: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... \n+000014e0: 2027 2d64 6566 6175 6c74 2720 3d3e 2027 '-default' => '\n+000014f0: 5375 6e27 292c 0a09 0909 094f 7074 696f Sun'),.....Optio\n+00001500: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001510: 3e20 276b 6565 7046 6972 7374 4f66 5765 > 'keepFirstOfWe\n+00001520: 656b 272c 0a09 0909 0909 2020 2020 272d ek',...... '-\n+00001530: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n+00001540: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek\n+00001550: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+00001560: 5f6b 6579 2720 3d3e 2027 6b65 6570 4669 _key' => 'keepFi\n+00001570: 7273 744f 6657 6565 6b27 2c0a 0909 0909 rstOfWeek',.....\n+00001580: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n+00001590: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n+000015a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n+000015b0: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW\n+000015c0: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... '\n+000015d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n+000015e0: 2d2d 6b65 6570 4c61 7374 4f66 5765 656b --keepLastOfWeek\n+000015f0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n+00001600: 5f6b 6579 2720 3d3e 2027 6b65 6570 4c61 _key' => 'keepLa\n+00001610: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',......\n+00001620: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n+00001630: 2779 6573 2729 2c0a 2020 2020 2020 2020 'yes'),. \n+00001640: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001650: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n+00001660: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n+00001670: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',.\n+00001680: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n+00001690: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n+000016a0: 4475 706c 6963 6174 6527 2c0a 0909 0909 Duplicate',.....\n+000016b0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n+000016c0: 3e20 276b 6565 7044 7570 6c69 6361 7465 > 'keepDuplicate\n+000016d0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n+000016e0: 6661 756c 7427 203d 3e20 246b 6565 7044 fault' => $keepD\n+000016f0: 7570 6c69 6361 7465 292c 0a20 2020 2020 uplicate),. \n+00001700: 2020 2020 2020 2020 2020 2020 2020 2020 \n+00001710: 2020 2020 2020 2020 2020 204f 7074 696f Optio\n+00001720: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n+00001730: 3e20 276b 6565 704d 696e 4e75 6d62 6572 > 'keepMinNumber\n+00001740: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001750: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n+00001760: 6565 704d 696e 4e75 6d62 6572 272c 0a09 eepMinNumber',..\n+00001770: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n+00001780: 2720 3d3e 2027 6b65 6570 4d69 6e4e 756d ' => 'keepMinNum\n+00001790: 6265 7227 2c0a 0909 0909 0920 2020 2027 ber',...... '\n+000017a0: 2d64 6566 6175 6c74 2720 3d3e 2031 302c -default' => 10,\n+000017b0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n+000017c0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\\A\\d+\\Z\n+000017d0: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n+000017e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000017f0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n+00001800: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n+00001810: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',.....\n+00001820: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n+00001830: 2720 3d3e 2027 2d2d 6b65 6570 4d61 784e ' => '--keepMaxN\n+00001840: 756d 6265 7227 2c0a 0909 0909 0920 2020 umber',...... \n+00001850: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k\n+00001860: 6565 704d 6178 4e75 6d62 6572 272c 0a09 eepMaxNumber',..\n+00001870: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n+00001880: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... \n+00001890: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n+000018a0: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\\A\\d+\\Z'),. \n+000018b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000018c0: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n+000018d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n+000018e0: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative\n+000018f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n+00001900: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n+00001910: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',...\n+00001920: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n+00001930: 203d 3e20 276b 6565 7052 656c 6174 6976 => 'keepRelativ\n+00001940: 6527 2c0a 0909 0909 0920 2020 2027 2d6d e',...... '-m\n+00001950: 756c 7469 706c 6527 203d 3e20 2779 6573 ultiple' => 'yes\n+00001960: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n+00001970: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n+00001980: 0909 2020 2020 5d29 3b0a 0a24 4368 6563 .. ]);..$Chec\n+00001990: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar\n+000019a0: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \\@ARGV,. \n+000019b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n+000019c0: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help\n+000019d0: 2c0a 0909 2027 2d69 676e 6f72 6541 6464 ,... '-ignoreAdd\n+000019e0: 6974 696f 6e61 6c4b 6579 7327 203d 3e20 itionalKeys' => \n+000019f0: 310a 2020 2020 2020 2020 2020 2020 2020 1. \n+00001a00: 2020 2029 3b0a 0a6d 7920 2476 6572 626f );..my $verbo\n+00001a10: 7365 203d 2024 4368 6563 6b50 6172 2d3e se = $CheckPar->\n+00001a20: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n+00001a30: 2827 7665 7262 6f73 6527 293b 0a6d 7920 ('verbose');.my \n+00001a40: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP\n+00001a50: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n+00001a60: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m\n+00001a70: 7920 2463 6f6e 6669 6746 696c 6520 3d20 y $configFile = \n+00001a80: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00001a90: 7457 6974 6850 6172 2827 6669 6c65 2729 tWithPar('file')\n+00001aa0: 3b0a 0a6d 7920 2462 6163 6b75 7044 6972 ;..my $backupDir\n+00001ab0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n+00001ac0: 744f 7074 5769 7468 5061 7228 2762 6163 tOptWithPar('bac\n+00001ad0: 6b75 7044 6972 2729 3b0a 6d79 2024 7365 kupDir');.my $se\n+00001ae0: 7269 6573 203d 2024 4368 6563 6b50 6172 ries = $CheckPar\n+00001af0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n+00001b00: 2773 6572 6965 7327 293b 0a6d 7920 246b 'series');.my $k\n+00001b10: 6565 7041 6c6c 203d 2024 4368 6563 6b50 eepAll = $CheckP\n+00001b20: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n+00001b30: 7228 276b 6565 7041 6c6c 2729 3b0a 6d79 r('keepAll');.my\n+00001b40: 2024 6b65 6570 5765 656b 6461 7920 3d20 $keepWeekday = \n+00001b50: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n+00001b60: 7457 6974 6850 6172 2827 6b65 6570 5765 tWithPar('keepWe\n+00001b70: 656b 6461 7927 293b 0a6d 7920 246b 6565 ekday');.my $kee\n+00001b80: 7046 6972 7374 4f66 5965 6172 203d 2024 pFirstOfYear = $\n+00001b90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n+00001ba0: 5769 7468 5061 7228 276b 6565 7046 6972 WithPar('keepFir\n+00001bb0: 7374 4f66 5965 6172 2729 3b0a 6d79 2024 stOfYear');.my $\n+00001bc0: 6b65 6570 4c61 7374 4f66 5965 6172 203d keepLastOfYear =\n+00001bd0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n+00001be0: 7074 5769 7468 5061 7228 276b 6565 704c ptWithPar('keepL\n+00001bf0: 6173 744f 6659 6561 7227 293b 0a6d 7920 astOfYear');.my \n+00001c00: 246b 6565 7046 6972 7374 4f66 4d6f 6e74 $keepFirstOfMont\n+00001c10: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g\n+00001c20: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke\n+00001c30: 6570 4669 7273 744f 664d 6f6e 7468 2729 epFirstOfMonth')\n+00001c40: 3b0a 6d79 2024 6b65 6570 4c61 7374 4f66 ;.my $keepLastOf\n+00001c50: 4d6f 6e74 6820 3d20 2443 6865 636b 5061 Month = $CheckPa\n+00001c60: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n+00001c70: 2827 6b65 6570 4c61 7374 4f66 4d6f 6e74 ('keepLastOfMont\n+00001c80: 6827 293b 0a6d 7920 2466 6972 7374 4461 h');.my $firstDa\n+00001c90: 794f 6657 6565 6b20 3d20 2443 6865 636b yOfWeek = $Check\n+00001ca0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00001cb0: 6172 2827 6669 7273 7444 6179 4f66 5765 ar('firstDayOfWe\n+00001cc0: 656b 2729 3b0a 6d79 2024 6b65 6570 4669 ek');.my $keepFi\n+00001cd0: 7273 744f 6657 6565 6b20 3d20 2443 6865 rstOfWeek = $Che\n+00001ce0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00001cf0: 6850 6172 2827 6b65 6570 4669 7273 744f hPar('keepFirstO\n+00001d00: 6657 6565 6b27 293b 0a6d 7920 246b 6565 fWeek');.my $kee\n+00001d10: 704c 6173 744f 6657 6565 6b20 3d20 2443 pLastOfWeek = $C\n+00001d20: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00001d30: 6974 6850 6172 2827 6b65 6570 4c61 7374 ithPar('keepLast\n+00001d40: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke\n+00001d50: 6570 4475 706c 6963 6174 6520 3d20 2443 epDuplicate = $C\n+00001d60: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n+00001d70: 6974 6850 6172 2827 6b65 6570 4475 706c ithPar('keepDupl\n+00001d80: 6963 6174 6527 293b 0a6d 7920 246b 6565 icate');.my $kee\n+00001d90: 704d 696e 4e75 6d62 6572 203d 2024 4368 pMinNumber = $Ch\n+00001da0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n+00001db0: 7468 5061 7228 276b 6565 704d 696e 4e75 thPar('keepMinNu\n+00001dc0: 6d62 6572 2729 3b0a 6d79 2024 6b65 6570 mber');.my $keep\n+00001dd0: 4d61 784e 756d 6265 7220 3d20 2443 6865 MaxNumber = $Che\n+00001de0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n+00001df0: 6850 6172 2827 6b65 6570 4d61 784e 756d hPar('keepMaxNum\n+00001e00: 6265 7227 293b 0a6d 7920 246b 6565 7052 ber');.my $keepR\n+00001e10: 656c 6174 6976 6520 3d20 2443 6865 636b elative = $Check\n+00001e20: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n+00001e30: 6172 2827 6b65 6570 5265 6c61 7469 7665 ar('keepRelative\n+00001e40: 2729 3b0a 0a69 6620 2824 7072 696e 7429 ');..if ($print)\n+00001e50: 0a7b 0a20 2020 2024 4368 6563 6b50 6172 .{. $CheckPar\n+00001e60: 2d3e 7072 696e 7428 293b 0a20 2020 2065 ->print();. e\n+00001e70: 7869 7420 303b 0a7d 0a0a 6d79 2024 6469 xit 0;.}..my $di\n+00001e80: 723b 0a69 6620 2824 6261 636b 7570 4469 r;.if ($backupDi\n+00001e90: 7229 0a7b 0a20 2020 2024 6469 7220 3d20 r).{. $dir = \n+00001ea0: 2462 6163 6b75 7044 6972 202e 2027 2f27 $backupDir . '/'\n+00001eb0: 202e 2473 6572 6965 7320 2e20 272f 273b .$series . '/';\n+00001ec0: 0a7d 0a0a 6966 2028 2443 6865 636b 5061 .}..if ($CheckPa\n+00001ed0: 722d 3e67 6574 4c69 7374 5061 7228 2929 r->getListPar())\n+00001ee0: 0a7b 0a20 2020 2028 2464 6972 2920 3d20 .{. ($dir) = \n+00001ef0: 2443 6865 636b 5061 722d 3e67 6574 4c69 $CheckPar->getLi\n+00001f00: 7374 5061 7228 293b 0a7d 0a64 6965 2022 stPar();.}.die \"\n+00001f10: 2448 656c 7022 2075 6e6c 6573 7320 2464 $Help\" unless $d\n+00001f20: 6972 206f 7220 2463 6f6e 6669 6746 696c ir or $configFil\n+00001f30: 653b 0a0a 6d79 2024 746f 6461 7920 3d20 e;..my $today = \n+00001f40: 6461 7465 546f 6f6c 732d 3e6e 6577 2829 dateTools->new()\n+00001f50: 3b0a 0a69 6620 2824 636f 6e66 6967 4669 ;..if ($configFi\n+00001f60: 6c65 290a 7b0a 2020 2020 2661 6e61 6c79 le).{. &analy\n+00001f70: 7365 4f6c 6442 6163 6b75 7073 2824 6469 seOldBackups($di\n+00001f80: 722c 2024 636f 6e66 6967 4669 6c65 2c20 r, $configFile, \n+00001f90: 2474 6f64 6179 2c20 2476 6572 626f 7365 $today, $verbose\n+00001fa0: 2c20 246b 6565 7041 6c6c 2c0a 0909 2020 , $keepAll,... \n+00001fb0: 2020 2020 2024 6b65 6570 5765 656b 6461 $keepWeekda\n+00001fc0: 792c 2024 6b65 6570 4669 7273 744f 6659 y, $keepFirstOfY\n+00001fd0: 6561 722c 2024 6b65 6570 4c61 7374 4f66 ear, $keepLastOf\n+00001fe0: 5965 6172 2c0a 0909 2020 2020 2020 2024 Year,... $\n+00001ff0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n+00002000: 2c20 246b 6565 704c 6173 744f 664d 6f6e , $keepLastOfMon\n+00002010: 7468 2c20 2466 6972 7374 4461 794f 6657 th, $firstDayOfW\n+00002020: 6565 6b2c 0a09 0920 2020 2020 2020 246b eek,... $k\n+00002030: 6565 7046 6972 7374 4f66 5765 656b 2c20 eepFirstOfWeek, \n+00002040: 246b 6565 704c 6173 744f 6657 6565 6b2c $keepLastOfWeek,\n+00002050: 2024 6b65 6570 4475 706c 6963 6174 652c $keepDuplicate,\n+00002060: 0a09 0920 2020 2020 2020 246b 6565 704d ... $keepM\n+00002070: 696e 4e75 6d62 6572 2c20 246b 6565 704d inNumber, $keepM\n+00002080: 6178 4e75 6d62 6572 2c20 246b 6565 7052 axNumber, $keepR\n+00002090: 656c 6174 6976 6529 3b0a 2020 2020 6578 elative);. ex\n+000020a0: 6974 2030 3b0a 7d0a 0a6f 7065 6e64 6972 it 0;.}..opendir\n+000020b0: 2844 4952 2c20 2464 6972 2920 6f72 0a20 (DIR, $dir) or. \n+000020c0: 2020 2064 6965 2022 6361 6e6e 6f74 206f die \"cannot o\n+000020d0: 7065 6e20 3c24 6469 723e 223b 0a6d 7920 pen <$dir>\";.my \n+000020e0: 2824 656e 7472 792c 2040 656e 7472 6965 ($entry, @entrie\n+000020f0: 7329 3b0a 7768 696c 6520 2824 656e 7472 s);.while ($entr\n+00002100: 7920 3d20 7265 6164 6469 7220 4449 5229 y = readdir DIR)\n+00002110: 0a7b 0a20 2020 206d 7920 2465 203d 2022 .{. my $e = \"\n+00002120: 2464 6972 2f24 656e 7472 7922 3b0a 2020 $dir/$entry\";. \n+00002130: 2020 6e65 7874 2069 6620 282d 6c20 2465 next if (-l $e\n+00002140: 2061 6e64 206e 6f74 202d 6420 2465 293b and not -d $e);\n+00002150: 0a20 2020 2070 7573 6820 4065 6e74 7269 . push @entri\n+00002160: 6573 2c20 2465 6e74 7279 3b0a 7d0a 636c es, $entry;.}.cl\n+00002170: 6f73 6564 6972 2844 4952 293b 0a0a 6d79 osedir(DIR);..my\n+00002180: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL\n+00002190: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' \n+000021a0: 3d3e 205b 2749 3a49 4e46 4f27 2c20 2757 => ['I:INFO', 'W\n+000021b0: 3a57 4152 4e49 4e47 272c 2027 453a 4552 :WARNING', 'E:ER\n+000021c0: 524f 5227 2c0a 0909 0909 2020 2020 2020 ROR',..... \n+000021d0: 2753 3a53 5441 5449 5354 4943 272c 2027 'S:STATISTIC', '\n+000021e0: 443a 4445 4255 4727 2c20 2756 3a56 4552 D:DEBUG', 'V:VER\n+000021f0: 5349 4f4e 275d 293b 0a0a 2470 724c 6f67 SION']);..$prLog\n+00002200: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n+00002210: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. '\n+00002220: 2d73 7472 2720 3d3e 205b 2224 5645 5253 -str' => [\"$VERS\n+00002230: 494f 4e70 4e61 6d65 2c20 246d 6169 6e3a IONpName, $main:\n+00002240: 3a53 544f 5245 4241 434b 5550 5645 5253 :STOREBACKUPVERS\n+00002250: 494f 4e2c 2022 202e 0a09 0909 2022 6275 ION, \" ..... \"bu\n+00002260: 696c 6420 2456 4552 5349 4f4e 7376 6e49 ild $VERSIONsvnI\n+00002270: 4422 5d29 0a20 2020 2069 6620 2476 6572 D\"]). if $ver\n+00002280: 626f 7365 3b0a 0a0a 6d79 2024 6920 3d20 bose;...my $i = \n+00002290: 313b 0a66 6f72 6561 6368 2024 656e 7472 1;.foreach $entr\n+000022a0: 7920 2873 6f72 7420 4065 6e74 7269 6573 y (sort @entries\n+000022b0: 290a 7b0a 2020 2020 6e65 7874 2075 6e6c ).{. next unl\n+000022c0: 6573 7320 2465 6e74 7279 203d 7e0a 092f ess $entry =~../\n+000022d0: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \\A(\\d{4})\\.(\\d{2\n+000022e0: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\\.(\\d{2})_(\\d{\n+000022f0: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\\.(\\d{2})\\.(\\\n+00002300: 647b 327d 295c 5a2f 6f3b 0a20 2020 206d d{2})\\Z/o;. m\n+00002310: 7920 2464 203d 2064 6174 6554 6f6f 6c73 y $d = dateTools\n+00002320: 2d3e 6e65 7728 272d 7965 6172 2720 3d3e ->new('-year' =>\n+00002330: 2024 312c 0a09 0909 2020 2027 2d6d 6f6e $1,.... '-mon\n+00002340: 7468 2720 3d3e 2024 322c 0a09 0909 2020 th' => $2,.... \n+00002350: 2027 2d64 6179 2720 3d3e 2024 3329 3b0a '-day' => $3);.\n+00002360: 2020 2020 6d79 2028 4061 2920 3d20 2822 my (@a) = (\"\n+00002370: 2464 6972 2f24 656e 7472 792f 2e73 746f $dir/$entry/.sto\n+00002380: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li\n+00002390: 6e6b 4672 6f6d 2a22 293b 0a20 2020 206d nkFrom*\");. m\n+000023a0: 7920 2840 6529 203d 203c 4061 3e3b 0a20 y (@e) = <@a>;. \n+000023b0: 2020 2070 7269 6e74 6620 2225 3364 2020 printf \"%3d \n+000023c0: 222c 2024 692b 2b3b 0a20 2020 2070 7269 \", $i++;. pri\n+000023d0: 6e74 2024 642d 3e67 6574 4461 7465 5469 nt $d->getDateTi\n+000023e0: 6d65 2827 2d66 6f72 6d61 7427 203d 3e20 me('-format' => \n+000023f0: 2725 5720 2558 2025 4420 2559 2729 2c20 '%W %X %D %Y'), \n+00002400: 2220 2020 2465 6e74 7279 2020 2022 2c0a \" $entry \",.\n+00002410: 2020 2020 2474 6f64 6179 2d3e 6465 6c74 $today->delt\n+00002420: 6149 6e44 6179 7328 272d 7365 636f 6e64 aInDays('-second\n+00002430: 4461 7465 2720 3d3e 2024 6429 3b0a 2020 Date' => $d);. \n+00002440: 2020 7072 696e 7420 2220 206e 6f74 2066 print \" not f\n+00002450: 696e 6973 6865 6420 2220 6966 2028 2d65 inished \" if (-e\n+00002460: 2022 2464 6972 2f24 656e 7472 792f 2463 \"$dir/$entry/$c\n+00002470: 6865 636b 5375 6d46 696c 652e 6e6f 7446 heckSumFile.notF\n+00002480: 696e 6973 6865 6422 293b 0a20 2020 2070 inished\");. p\n+00002490: 7269 6e74 2022 2061 6666 6563 7465 6420 rint \" affected \n+000024a0: 6279 2075 6e72 6573 6f6c 7665 6420 6c69 by unresolved li\n+000024b0: 6e6b 7322 0a09 6966 202d 6520 2224 6469 nks\"..if -e \"$di\n+000024c0: 722f 2465 6e74 7279 2f2e 7374 6f72 6542 r/$entry/.storeB\n+000024d0: 6163 6b75 704c 696e 6b73 2f6c 696e 6b46 ackupLinks/linkF\n+000024e0: 696c 652e 627a 3222 206f 7220 4065 3b0a ile.bz2\" or @e;.\n+000024f0: 2020 2020 7072 696e 7420 225c 6e22 3b0a print \"\\n\";.\n+00002500: 0a20 2020 2069 6620 2824 7665 7262 6f73 . if ($verbos\n+00002510: 6529 0a20 2020 207b 0a23 096d 7920 2472 e). {.#.my $r\n+00002520: 6373 6620 3d20 7265 6164 4368 6563 6b53 csf = readCheckS\n+00002530: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch\n+00002540: 6563 6b53 756d 4669 6c65 2720 3d3e 0a23 eckSumFile' =>.#\n+00002550: 0909 0909 0920 2224 6469 722f 2465 6e74 ..... \"$dir/$ent\n+00002560: 7279 2f24 6368 6563 6b53 756d 4669 6c65 ry/$checkSumFile\n+00002570: 222c 0a23 0909 0909 0920 272d 7072 4c6f \",.#..... '-prLo\n+00002580: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n+00002590: 6d79 2024 7269 6620 3d20 7265 6164 496e my $rif = readIn\n+000025a0: 666f 4669 6c65 2d3e 6e65 7728 272d 6368 foFile->new('-ch\n+000025b0: 6563 6b53 756d 4669 6c65 2720 3d3e 0a09 eckSumFile' =>..\n+000025c0: 0909 0920 2020 2020 2224 6469 722f 2465 ... \"$dir/$e\n+000025d0: 6e74 7279 2f24 6368 6563 6b53 756d 4669 ntry/$checkSumFi\n+000025e0: 6c65 222c 0a09 0909 0920 2020 2020 272d le\",..... '-\n+000025f0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n+00002600: 293b 0a0a 2309 6d79 2024 6d65 7461 5661 );..#.my $metaVa\n+00002610: 6c20 3d20 2472 6373 662d 3e67 6574 4d65 l = $rcsf->getMe\n+00002620: 7461 5661 6c28 293b 0a23 096d 7920 246d taVal();.#.my $m\n+00002630: 6574 614b 6579 203d 2024 7263 7366 2d3e etaKey = $rcsf->\n+00002640: 6765 744d 6574 614b 6579 2829 3b0a 2309 getMetaKey();.#.\n+00002650: 6d79 2024 6b65 793b 0a23 0966 6f72 6561 my $key;.#.forea\n+00002660: 6368 2024 6b65 7920 2840 246d 6574 614b ch $key (@$metaK\n+00002670: 6579 290a 2309 7b0a 2309 2020 2020 7072 ey).#.{.#. pr\n+00002680: 696e 7420 225c 7424 6b65 7920 2d3e 2022 int \"\\t$key -> \"\n+00002690: 2c20 2424 6d65 7461 5661 6c7b 246b 6579 , $$metaVal{$key\n+000026a0: 7d2c 2022 5c6e 220a 2309 0969 6620 2424 }, \"\\n\".#..if $$\n+000026b0: 6d65 7461 5661 6c7b 246b 6579 7d3b 0a23 metaVal{$key};.#\n+000026c0: 097d 0a23 0924 7263 7366 2d3e 4445 5354 .}.#.$rcsf->DEST\n+000026d0: 524f 5928 293b 0a09 6d79 2024 6f70 743b ROY();..my $opt;\n+000026e0: 0a09 666f 7265 6163 6820 246f 7074 2028 ..foreach $opt (\n+000026f0: 2472 6966 2d3e 6765 7441 6c6c 496e 666f $rif->getAllInfo\n+00002700: 4f70 7473 2829 290a 097b 0a09 2020 2020 Opts())..{.. \n+00002710: 6d79 2024 6920 3d20 2472 6966 2d3e 6765 my $i = $rif->ge\n+00002720: 7449 6e66 6f57 6974 6850 6172 2824 6f70 tInfoWithPar($op\n+00002730: 7429 3b0a 0920 2020 2070 7269 6e74 2022 t);.. print \"\n+00002740: 5c74 246f 7074 202d 3e20 222c 2072 6566 \\t$opt -> \", ref\n+00002750: 2024 6920 6571 2027 4152 5241 5927 203f $i eq 'ARRAY' ?\n+00002760: 2022 4024 6922 203a 2024 692c 2022 5c6e \"@$i\" : $i, \"\\n\n+00002770: 223b 0a09 7d0a 2020 2020 7d0a 7d0a 0a65 \";..}. }.}..e\n+00002780: 7869 7420 303b 0a0a 0a23 2323 2323 2323 xit 0;...#######\n+00002790: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n+000027c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n+000027d0: 7375 6220 616e 616c 7973 654f 6c64 4261 sub analyseOldBa\n+000027e0: 636b 7570 730a 7b0a 2020 2020 6d79 2028 ckups.{. my (\n+000027f0: 2464 6972 2c20 2463 6f6e 6669 6746 696c $dir, $configFil\n+00002800: 652c 2024 746f 6461 792c 2024 7665 7262 e, $today, $verb\n+00002810: 6f73 652c 2024 6b65 6570 416c 6c2c 2024 ose, $keepAll, $\n+00002820: 6b65 6570 5765 656b 6461 792c 0a09 246b keepWeekday,..$k\n+00002830: 6565 7046 6972 7374 4f66 5965 6172 2c20 eepFirstOfYear, \n+00002840: 246b 6565 704c 6173 744f 6659 6561 722c $keepLastOfYear,\n+00002850: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon\n+00002860: 7468 2c0a 0924 6b65 6570 4c61 7374 4f66 th,..$keepLastOf\n+00002870: 4d6f 6e74 682c 2024 6669 7273 7444 6179 Month, $firstDay\n+00002880: 4f66 5765 656b 2c20 246b 6565 7046 6972 OfWeek, $keepFir\n+00002890: 7374 4f66 5765 656b 2c0a 0924 6b65 6570 stOfWeek,..$keep\n+000028a0: 4c61 7374 4f66 5765 656b 2c20 246b 6565 LastOfWeek, $kee\n+000028b0: 7044 7570 6c69 6361 7465 2c20 246b 6565 pDuplicate, $kee\n+000028c0: 704d 696e 4e75 6d62 6572 2c0a 0924 6b65 pMinNumber,..$ke\n+000028d0: 6570 4d61 784e 756d 6265 722c 2024 6b65 epMaxNumber, $ke\n+000028e0: 6570 5265 6c61 7469 7665 2920 3d20 405f epRelative) = @_\n+000028f0: 3b0a 0a20 2020 206d 7920 2470 724c 6f67 ;.. my $prLog\n+00002900: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new\n+00002910: 2827 2d77 6974 6854 696d 6527 203d 3e20 ('-withTime' => \n+00002920: 276e 6f27 2c0a 0909 0920 2020 2020 2027 'no',.... '\n+00002930: 2d77 6974 6850 4944 2720 3d3e 2027 6e6f -withPID' => 'no\n+00002940: 2729 3b0a 0a0a 2020 2020 6d79 2024 616c ');... my $al\n+00002950: 6c4c 696e 6b73 203d 206c 6174 654c 696e lLinks = lateLin\n+00002960: 6b73 2d3e 6e65 7728 272d 6469 7273 2720 ks->new('-dirs' \n+00002970: 3d3e 205b 2464 6972 5d2c 0a09 0909 0920 => [$dir],..... \n+00002980: 2027 2d6b 696e 6427 203d 3e20 2772 6563 '-kind' => 'rec\n+00002990: 7572 7369 7665 5365 6172 6368 272c 0a09 ursiveSearch',..\n+000029a0: 0909 0920 2027 2d76 6572 626f 7365 2720 ... '-verbose' \n+000029b0: 3d3e 2024 7665 7262 6f73 652c 0a09 0909 => $verbose,....\n+000029c0: 0920 2027 2d70 724c 6f67 2720 3d3e 2024 . '-prLog' => $\n+000029d0: 7072 4c6f 6729 3b0a 0a20 2020 206d 7920 prLog);.. my \n+000029e0: 2473 7461 7444 656c 4f6c 6442 6163 6b75 $statDelOldBacku\n+000029f0: 7044 6972 7320 3d0a 0973 7461 7469 7374 pDirs =..statist\n+00002a00: 6963 4465 6c65 7465 4f6c 6442 6163 6b75 icDeleteOldBacku\n+00002a10: 7044 6972 732d 3e6e 6577 2827 2d70 724c pDirs->new('-prL\n+00002a20: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n+00002a30: 2020 2020 6d79 2024 6465 6c4f 6c64 203d my $delOld =\n+00002a40: 0a09 6465 6c65 7465 4f6c 6442 6163 6b75 ..deleteOldBacku\n+00002a50: 7044 6972 732d 3e6e 6577 2827 2d74 6172 pDirs->new('-tar\n+00002a60: 6765 7444 6972 2720 3d3e 2024 6469 722c getDir' => $dir,\n+00002a70: 0a09 0909 0920 272d 646f 4e6f 7444 656c ..... '-doNotDel\n+00002a80: 6574 6527 203d 3e20 756e 6465 662c 0a09 ete' => undef,..\n+00002a90: 0909 0920 272d 6368 6563 6b53 756d 4669 ... '-checkSumFi\n+00002aa0: 6c65 2720 3d3e 2024 6d61 696e 3a3a 6368 le' => $main::ch\n+00002ab0: 6563 6b53 756d 4669 6c65 2c0a 0909 0909 eckSumFile,.....\n+00002ac0: 2027 2d61 6374 4261 636b 7570 4469 7227 '-actBackupDir'\n+00002ad0: 203d 3e20 756e 6465 662c 0a09 0909 0920 => undef,..... \n+00002ae0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n+00002af0: 6f67 2c0a 0909 0909 2027 2d74 6f64 6179 og,..... '-today\n+00002b00: 2720 3d3e 2024 746f 6461 792c 0a09 0909 ' => $today,....\n+00002b10: 0920 272d 6b65 6570 4669 7273 744f 6659 . '-keepFirstOfY\n+00002b20: 6561 7227 203d 3e20 246b 6565 7046 6972 ear' => $keepFir\n+00002b30: 7374 4f66 5965 6172 2c0a 0909 0909 2027 stOfYear,..... '\n+00002b40: 2d6b 6565 704c 6173 744f 6659 6561 7227 -keepLastOfYear'\n+00002b50: 203d 3e20 246b 6565 704c 6173 744f 6659 => $keepLastOfY\n+00002b60: 6561 722c 0a09 0909 0920 272d 6b65 6570 ear,..... '-keep\n+00002b70: 4669 7273 744f 664d 6f6e 7468 2720 3d3e FirstOfMonth' =>\n+00002b80: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon\n+00002b90: 7468 2c0a 0909 0909 2027 2d6b 6565 704c th,..... '-keepL\n+00002ba0: 6173 744f 664d 6f6e 7468 2720 3d3e 2024 astOfMonth' => $\n+00002bb0: 6b65 6570 4c61 7374 4f66 4d6f 6e74 682c keepLastOfMonth,\n+00002bc0: 0a09 0909 0920 272d 6669 7273 7444 6179 ..... '-firstDay\n+00002bd0: 4f66 5765 656b 2720 3d3e 2024 6669 7273 OfWeek' => $firs\n+00002be0: 7444 6179 4f66 5765 656b 2c0a 0909 0909 tDayOfWeek,.....\n+00002bf0: 2027 2d6b 6565 7046 6972 7374 4f66 5765 '-keepFirstOfWe\n+00002c00: 656b 2720 3d3e 2024 6b65 6570 4669 7273 ek' => $keepFirs\n+00002c10: 744f 6657 6565 6b2c 0a09 0909 0920 272d tOfWeek,..... '-\n+00002c20: 6b65 6570 4c61 7374 4f66 5765 656b 2720 keepLastOfWeek' \n+00002c30: 3d3e 2024 6b65 6570 4c61 7374 4f66 5765 => $keepLastOfWe\n+00002c40: 656b 2c0a 0909 0909 2027 2d6b 6565 7041 ek,..... '-keepA\n+00002c50: 6c6c 2720 3d3e 2024 6b65 6570 416c 6c2c ll' => $keepAll,\n+00002c60: 0a09 0909 0920 272d 6b65 6570 5265 6c61 ..... '-keepRela\n+00002c70: 7469 7665 2720 3d3e 2024 6b65 6570 5265 tive' => $keepRe\n+00002c80: 6c61 7469 7665 2c0a 0909 0909 2027 2d6b lative,..... '-k\n+00002c90: 6565 7057 6565 6b64 6179 2720 3d3e 2024 eepWeekday' => $\n+00002ca0: 6b65 6570 5765 656b 6461 792c 0a09 0909 keepWeekday,....\n+00002cb0: 0920 272d 6b65 6570 4475 706c 6963 6174 . '-keepDuplicat\n+00002cc0: 6527 203d 3e20 246b 6565 7044 7570 6c69 e' => $keepDupli\n+00002cd0: 6361 7465 2c0a 0909 0909 2027 2d6b 6565 cate,..... '-kee\n+00002ce0: 704d 696e 4e75 6d62 6572 2720 3d3e 2024 pMinNumber' => $\n+00002cf0: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,..\n+00002d00: 0909 0920 272d 6b65 6570 4d61 784e 756d ... '-keepMaxNum\n+00002d10: 6265 7227 203d 3e20 246b 6565 704d 6178 ber' => $keepMax\n+00002d20: 4e75 6d62 6572 2c0a 0909 0909 2027 2d6c Number,..... '-l\n+00002d30: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' =\n+00002d40: 3e20 312c 0a09 0909 0920 272d 616c 6c4c > 1,..... '-allL\n+00002d50: 696e 6b73 2720 3d3e 2024 616c 6c4c 696e inks' => $allLin\n+00002d60: 6b73 2c0a 0909 0909 2027 2d73 7461 7444 ks,..... '-statD\n+00002d70: 656c 4f6c 6442 6163 6b75 7044 6972 7327 elOldBackupDirs'\n+00002d80: 203d 3e0a 0909 0909 2024 7374 6174 4465 =>..... $statDe\n+00002d90: 6c4f 6c64 4261 636b 7570 4469 7273 2c0a lOldBackupDirs,.\n+00002da0: 0909 0909 2027 2d66 6c61 744f 7574 7075 .... '-flatOutpu\n+00002db0: 7427 203d 3e20 2779 6573 270a 0909 0909 t' => 'yes'.....\n+00002dc0: 2029 3b0a 2020 2020 2464 656c 4f6c 642d );. $delOld-\n+00002dd0: 3e63 6865 636b 4261 636b 7570 7328 293b >checkBackups();\n+00002de0: 0a7d 0a .}.\n"}]}]}]}]}