{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.6WGyQxrw/b1/storebackup_3.5.2-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.6WGyQxrw/b2/storebackup_3.5.2-1_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,2 +1,2 @@\n \n- 323b47da3c2cabcfef9c221226ed6ea7 1732020 utils optional storebackup_3.5.2-1_all.deb\n+ 3bb8a4e985f2512dafdfb1a49a83bb7c 1731908 utils optional storebackup_3.5.2-1_all.deb\n"}, {"source1": "storebackup_3.5.2-1_all.deb", "source2": "storebackup_3.5.2-1_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 2025-08-27 10:21:58.000000 debian-binary\n--rw-r--r-- 0 0 0 3476 2025-08-27 10:21:58.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1728352 2025-08-27 10:21:58.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 3388 2025-08-27 10:21:58.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1728328 2025-08-27 10:21:58.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,7 +1,7 @@\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./\n -rw-r--r-- 0 root (0) root (0) 28 2025-08-27 10:21:58.000000 ./conffiles\n -rw-r--r-- 0 root (0) root (0) 897 2025-08-27 10:21:58.000000 ./control\n--rw-r--r-- 0 root (0) root (0) 5897 2025-08-27 10:21:58.000000 ./md5sums\n+-rw-r--r-- 0 root (0) root (0) 4802 2025-08-27 10:21:58.000000 ./md5sums\n -rwxr-xr-x 0 root (0) root (0) 1849 2025-08-27 10:21:58.000000 ./postinst\n -rwxr-xr-x 0 root (0) root (0) 445 2025-08-27 10:21:58.000000 ./postrm\n -rwxr-xr-x 0 root (0) root (0) 270 2025-08-27 10:21:58.000000 ./prerm\n"}, {"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,12 +1,12 @@\n Package: storebackup\n Version: 3.5.2-1\n Architecture: all\n Maintainer: Debian QA Group \n-Installed-Size: 3132\n+Installed-Size: 2555\n Depends: bzip2, perl:any\n Recommends: libio-compress-bzip2-perl\n Section: utils\n Priority: optional\n Homepage: https://savannah.nongnu.org/projects/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,25 +1,7 @@\n-usr/bin/linkToDirs\n-usr/bin/llt\n-usr/bin/multiTail\n-usr/bin/storeBackup\n-usr/bin/storeBackupCheckBackup\n-usr/bin/storeBackupCheckSource\n-usr/bin/storeBackupConvertBackup\n-usr/bin/storeBackupDel\n-usr/bin/storeBackupMergeIsolatedBackup\n-usr/bin/storeBackupMount\n-usr/bin/storeBackupRecover\n-usr/bin/storeBackupReplicationWizard\n-usr/bin/storeBackupSearch\n-usr/bin/storeBackupSetupIsolatedMode\n-usr/bin/storeBackupUpdateBackup\n-usr/bin/storeBackupVersions\n-usr/bin/storeBackup_du\n-usr/bin/storeBackupls\n usr/lib/systemd/system/storebackup.service\n usr/lib/systemd/system/storebackup.timer\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/_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,32 +1,14 @@\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/cron.daily/\n -rwxr-xr-x 0 root (0) root (0) 743 2025-08-27 10:21:58.000000 ./etc/cron.daily/storebackup\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/storebackup.d/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/\n--rwxr-xr-x 0 root (0) root (0) 26929 2025-08-27 10:21:58.000000 ./usr/bin/linkToDirs\n--rwxr-xr-x 0 root (0) root (0) 6981 2025-08-27 10:21:58.000000 ./usr/bin/llt\n--rwxr-xr-x 0 root (0) root (0) 9962 2025-08-27 10:21:58.000000 ./usr/bin/multiTail\n--rwxr-xr-x 0 root (0) root (0) 261644 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup\n--rwxr-xr-x 0 root (0) root (0) 33901 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckBackup\n--rwxr-xr-x 0 root (0) root (0) 13298 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckSource\n--rwxr-xr-x 0 root (0) root (0) 10817 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupConvertBackup\n--rwxr-xr-x 0 root (0) root (0) 21147 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupDel\n--rwxr-xr-x 0 root (0) root (0) 14455 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMergeIsolatedBackup\n--rwxr-xr-x 0 root (0) root (0) 23772 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMount\n--rwxr-xr-x 0 root (0) root (0) 27250 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupRecover\n--rwxr-xr-x 0 root (0) root (0) 19463 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupReplicationWizard\n--rwxr-xr-x 0 root (0) root (0) 17932 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSearch\n--rwxr-xr-x 0 root (0) root (0) 16806 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSetupIsolatedMode\n--rwxr-xr-x 0 root (0) root (0) 59496 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupUpdateBackup\n--rwxr-xr-x 0 root (0) root (0) 17311 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupVersions\n--rwxr-xr-x 0 root (0) root (0) 6689 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup_du\n--rwxr-xr-x 0 root (0) root (0) 11302 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupls\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/systemd/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/\n -rw-r--r-- 0 root (0) root (0) 818 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/storebackup.service\n -rw-r--r-- 0 root (0) root (0) 157 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/storebackup.timer\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/share/doc/\n@@ -94,7 +76,25 @@\n -rwxr-xr-x 0 root (0) root (0) 4812 2025-08-27 10:21:58.000000 ./usr/share/storebackup/lib/stbuLog.pl\n -rwxr-xr-x 0 root (0) root (0) 2679 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/stbuMd5Exec.pl\n -rwxr-xr-x 0 root (0) root (0) 1666 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/stbuMd5cp.pl\n -rw-r--r-- 0 root (0) root (0) 3045 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/storeBackupGlob.pl\n -rw-r--r-- 0 root (0) root (0) 161450 2022-04-20 09:13:40.000000 ./usr/share/storebackup/lib/storeBackupLib.pl\n -rw-r--r-- 0 root (0) root (0) 3716 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/tail.pl\n -rw-r--r-- 0 root (0) root (0) 1511 2022-04-15 08:24:53.000000 ./usr/share/storebackup/lib/version.pl\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/linkToDirs -> ../share/storebackup/bin/linkToDirs\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/llt -> ../share/storebackup/bin/llt\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/multiTail -> ../share/storebackup/bin/multiTail\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup -> ../share/storebackup/bin/storeBackup\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckBackup -> ../share/storebackup/bin/storeBackupCheckBackup\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckSource -> ../share/storebackup/bin/storeBackupCheckSource\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupConvertBackup -> ../share/storebackup/bin/storeBackupConvertBackup\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupDel -> ../share/storebackup/bin/storeBackupDel\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMergeIsolatedBackup -> ../share/storebackup/bin/storeBackupMergeIsolatedBackup\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMount -> ../share/storebackup/bin/storeBackupMount\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupRecover -> ../share/storebackup/bin/storeBackupRecover\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupReplicationWizard -> ../share/storebackup/bin/storeBackupReplicationWizard\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSearch -> ../share/storebackup/bin/storeBackupSearch\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSetupIsolatedMode -> ../share/storebackup/bin/storeBackupSetupIsolatedMode\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupUpdateBackup -> ../share/storebackup/bin/storeBackupUpdateBackup\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupVersions -> ../share/storebackup/bin/storeBackupVersions\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup_du -> ../share/storebackup/bin/storeBackup_du\n+lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupls -> ../share/storebackup/bin/storeBackupls\n"}, {"source1": "./usr/bin/linkToDirs", "source2": "./usr/bin/linkToDirs", "has_internal_linenos": true, "unified_diff": "@@ -1,1684 +1,4 @@\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: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# \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 246d 6169 use POSIX;..$mai\n-00000350: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n-00000360: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n-00000370: 7573 6520 4442 5f46 696c 653b 2020 2020 use DB_File; \n-00000380: 2020 2020 2020 2023 2042 6572 6b65 6c65 # Berkele\n-00000390: 7920 4442 0a0a 0a73 7562 206c 6962 5061 y DB...sub libPa\n-000003a0: 7468 0a7b 0a20 2020 206d 7920 2466 696c th.{. my $fil\n-000003b0: 6520 3d20 7368 6966 743b 0a0a 2020 2020 e = shift;.. \n-000003c0: 6d79 2024 6469 723b 0a0a 2020 2020 2320 my $dir;.. # \n-000003d0: 4661 6c6c 7320 4461 7465 6920 7365 6c62 Falls Datei selb\n-000003e0: 7374 2065 696e 2073 796d 6c69 6e6b 2069 st ein symlink i\n-000003f0: 7374 2c20 736f 6c61 6e67 6520 666f 6c67 st, solange folg\n-00000400: 656e 2c20 6269 7320 6175 6667 656c c3b6 en, bis aufgel..\n-00000410: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f\n-00000420: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil\n-00000430: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{.\n-00000440: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = \n-00000450: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file);\n-00000460: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst\n-00000470: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n\n-00000480: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e \"/\").. {...\n-00000490: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\\/]\n-000004a0: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. \n-000004b0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. \n-000004c0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li\n-000004d0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}...\n-000004e0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = \n-000004f0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n-00000500: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = \"\n-00000510: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file\";. }. \n-00000520: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p\n-00000530: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR \"<$f\n-00000540: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex\n-00000550: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\\n\";..exit 1\n-00000560: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di\n-00000570: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= \"/../lib\"; \n-00000580: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad\n-00000590: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth\n-000005a0: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old\n-000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005c0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old\n-000005d0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd\n-000005e0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {..\n-000005f0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b\n-00000600: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $\n-00000610: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $\n-00000620: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return\n-00000630: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir(\n-00000640: 2224 6162 7344 6972 2466 696c 6522 2929 \"$absDir$file\"))\n-00000650: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-00000660: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-00000670: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR \"<$dir> doe\n-00000680: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000690: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\\n\";. }.}\n-000006a0: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi\n-000006b0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name\n-000006c0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r\n-000006d0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam\n-000006e0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name\n-000006f0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\\//); # n\n-00000700: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat\n-00000710: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my (\n-00000720: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $\n-00000730: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\\/\n-00000740: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di\n-00000750: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir\n-00000760: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); \n-00000770: 2020 2020 2020 2020 2020 2023 2067 696c # gil\n-00000780: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f\n-00000790: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu\n-000007a0: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file)\n-000007b0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p\n-000007c0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath(\n-000007d0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN\n-000007e0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, \"$req\";...req\n-000007f0: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku\n-00000800: 704c 6962 2e70 6c27 3b0a 7265 7175 6972 pLib.pl';.requir\n-00000810: 6520 2763 6865 636b 5061 7261 6d32 2e70 e 'checkParam2.p\n-00000820: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che\n-00000830: 636b 4f62 6a50 6172 2e70 6c27 3b0a 7265 ckObjPar.pl';.re\n-00000840: 7175 6972 6520 2770 724c 6f67 2e70 6c27 quire 'prLog.pl'\n-00000850: 3b0a 7265 7175 6972 6520 2776 6572 7369 ;.require 'versi\n-00000860: 6f6e 2e70 6c27 3b0a 7265 7175 6972 6520 on.pl';.require \n-00000870: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re\n-00000880: 7175 6972 6520 2764 6174 6554 6f6f 6c73 quire 'dateTools\n-00000890: 2e70 6c27 3b0a 0a6d 7920 2474 6d70 6469 .pl';..my $tmpdi\n-000008a0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; \n-000008b0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau\n-000008c0: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir\n-000008d0: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR'\n-000008e0: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN\n-000008f0: 567b 2754 4d50 4449 5227 7d3b 0a0a 0a0a V{'TMPDIR'};....\n-00000900: 2320 6c69 6e6b 546f 4469 7273 2e70 6c20 # linkToDirs.pl \n-00000910: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK\n-00000920: 5550 5645 5253 494f 4e0a 0a3d 6865 6164 UPVERSION..=head\n-00000930: 3120 4e41 4d45 0a0a 6c69 6e6b 546f 4469 1 NAME..linkToDi\n-00000940: 7273 2e70 6c20 2d20 6861 7264 206c 696e rs.pl - hard lin\n-00000950: 6b73 2066 696c 6573 2069 6e20 6469 7265 ks files in dire\n-00000960: 6374 6f72 6965 7320 7769 7468 206f 7468 ctories with oth\n-00000970: 6572 730a 0a3d 6865 6164 3120 5359 4e4f ers..=head1 SYNO\n-00000980: 5053 4953 0a0a 096c 696e 6b54 6f44 6972 PSIS...linkToDir\n-00000990: 732e 706c 205b 2d2d 6c69 6e6b 5769 7468 s.pl [--linkWith\n-000009a0: 2063 6f70 7942 6163 6b75 7044 6972 5d20 copyBackupDir] \n-000009b0: 5b2d 2d6c 696e 6b57 6974 6820 2e2e 2e5d [--linkWith ...]\n-000009c0: 0a09 0920 2020 2020 202d 2d74 6172 6765 ... --targe\n-000009d0: 7444 6972 2074 6172 6765 7446 6f72 536f tDir targetForSo\n-000009e0: 7572 6365 4469 720a 0909 2020 2020 2020 urceDir... \n-000009f0: 5b2d 2d70 726f 6772 6573 7352 6570 6f72 [--progressRepor\n-00000a00: 7420 6e75 6d62 6572 5b2c 7469 6d65 6672 t number[,timefr\n-00000a10: 616d 655d 5d20 0a09 0920 2020 2020 2020 ame]] ... \n-00000a20: 5b2d 2d70 7269 6e74 4465 7074 685d 205b [--printDepth] [\n-00000a30: 2d2d 646f 6e74 4c69 6e6b 5379 6d6c 696e --dontLinkSymlin\n-00000a40: 6b73 5d0a 0909 2020 2020 2020 5b2d 2d69 ks]... [--i\n-00000a50: 676e 6f72 6545 7272 6f72 735d 205b 2d2d gnoreErrors] [--\n-00000a60: 7361 7665 5241 4d5d 205b 2d54 2074 6d70 saveRAM] [-T tmp\n-00000a70: 6469 725d 0a09 0920 2020 2020 205b 2d2d dir]... [--\n-00000a80: 6372 6561 7465 5370 6172 7365 4669 6c65 createSparseFile\n-00000a90: 7320 5b2d 2d62 6c6f 636b 5369 7a65 5d5d s [--blockSize]]\n-00000aa0: 0a09 0920 2020 2020 205b 2d2d 6d61 7848 ... [--maxH\n-00000ab0: 6172 644c 696e 6b73 5d0a 0909 2020 2020 ardLinks]... \n-00000ac0: 2020 736f 7572 6365 4469 7220 2e2e 2e0a sourceDir ....\n-00000ad0: 0a3d 6865 6164 3120 4445 5343 5249 5054 .=head1 DESCRIPT\n-00000ae0: 494f 4e0a 0a4d 616b 6520 6120 6465 2d64 ION..Make a de-d\n-00000af0: 7570 6c69 6361 7465 6420 636f 7079 206f uplicated copy o\n-00000b00: 6620 6669 6c65 7320 696e 206f 6e65 2064 f files in one d\n-00000b10: 6972 6563 746f 7279 2074 6f20 616e 6f74 irectory to anot\n-00000b20: 6865 7220 6c6f 6361 7469 6f6e 2e20 0a55 her location. .U\n-00000b30: 7469 6c69 7a65 7320 6861 7264 206c 696e tilizes hard lin\n-00000b40: 6b73 2074 6f20 7468 6520 6675 6c6c 2065 ks to the full e\n-00000b50: 7874 656e 7420 706f 7373 6962 6c65 2074 xtent possible t\n-00000b60: 6f20 6176 6f69 6420 7761 7374 696e 6720 o avoid wasting \n-00000b70: 7374 6f72 6167 650a 7370 6163 652e 0a0a storage.space...\n-00000b80: 5573 6167 6520 6e6f 7465 3a20 7768 6572 Usage note: wher\n-00000b90: 6561 7320 6d61 6e79 2066 696c 6520 636f eas many file co\n-00000ba0: 7079 2075 7469 6c69 7469 6573 2068 6176 py utilities hav\n-00000bb0: 6520 6a75 7374 2074 776f 2070 7269 6d61 e just two prima\n-00000bc0: 7279 2070 6172 616d 6574 6572 730a 2874 ry parameters.(t\n-00000bd0: 6865 2073 6f75 7263 6520 616e 6420 6465 he source and de\n-00000be0: 7374 696e 6174 696f 6e29 2c20 6c69 6e6b stination), link\n-00000bf0: 546f 4469 7273 2e70 6c20 616c 6c6f 7773 ToDirs.pl allows\n-00000c00: 2074 6872 6565 2070 7269 6d61 7279 2070 three primary p\n-00000c10: 6172 616d 6574 6572 733a 0a20 2020 202a arameters:. *\n-00000c20: 2073 6f75 7263 6520 2873 6f75 7263 6544 source (sourceD\n-00000c30: 6972 290a 2020 2020 2a20 6465 7374 696e ir). * destin\n-00000c40: 6174 696f 6e20 2874 6172 6765 7444 6972 ation (targetDir\n-00000c50: 290a 2020 2020 2a20 616e 6420 6120 7265 ). * and a re\n-00000c60: 6665 7265 6e63 6520 6c6f 6361 7469 6f6e ference location\n-00000c70: 2028 6c69 6e6b 5769 7468 205b 6f70 7469 (linkWith [opti\n-00000c80: 6f6e 616c 5d29 0a54 6865 2072 6566 6572 onal]).The refer\n-00000c90: 656e 6365 206c 6f63 6174 696f 6e20 6973 ence location is\n-00000ca0: 2074 6865 2070 6c61 6365 2074 6f20 6c6f the place to lo\n-00000cb0: 6f6b 2066 6f72 2065 7869 7374 696e 6720 ok for existing \n-00000cc0: 636f 6e74 656e 7420 7768 6963 680a 6361 content which.ca\n-00000cd0: 6e20 6265 2068 6172 6420 6c69 6e6b 6564 n be hard linked\n-00000ce0: 2074 6f2e 2046 696c 6573 2077 6974 6820 to. Files with \n-00000cf0: 7468 6520 7361 6d65 2063 6f6e 7465 6e74 the same content\n-00000d00: 7320 696e 2073 6f75 7263 6544 6972 2061 s in sourceDir a\n-00000d10: 7265 2068 6172 640a 6c69 6e6b 6564 2061 re hard.linked a\n-00000d20: 6c77 6179 7320 696e 2074 6172 6765 7444 lways in targetD\n-00000d30: 6972 2e0a 0a3d 6865 6164 3120 4f50 5449 ir...=head1 OPTI\n-00000d40: 4f4e 530a 0a3d 6f76 6572 2038 0a0a 3d69 ONS..=over 8..=i\n-00000d50: 7465 6d20 423c 2d2d 6c69 6e6b 5769 7468 tem B<--linkWith\n-00000d60: 3e2c 2042 3c2d 773e 0a0a 2020 2020 6c69 >, B<-w>.. li\n-00000d70: 6e6b 5769 7468 2074 6172 6765 743b 2074 nkWith target; t\n-00000d80: 6865 2062 6163 6b75 7073 2077 6865 7265 he backups where\n-00000d90: 206f 7468 6572 2062 6163 6b75 7073 2068 other backups h\n-00000da0: 6176 6520 746f 2062 650a 2020 2020 6c69 ave to be. li\n-00000db0: 6e6b 6564 2074 6f20 7573 6520 7468 6973 nked to use this\n-00000dc0: 2070 6172 616d 6574 6572 206d 756c 7469 parameter multi\n-00000dd0: 706c 6520 7469 6d65 7320 666f 7220 6d75 ple times for mu\n-00000de0: 6c74 6970 6c65 0a20 2020 2064 6972 6563 ltiple. direc\n-00000df0: 746f 7269 6573 0a20 2020 2069 6620 796f tories. if yo\n-00000e00: 7520 646f 206e 6f74 2075 7365 2074 6869 u do not use thi\n-00000e10: 7320 6f70 7469 6f6e 2c20 7468 6520 7072 s option, the pr\n-00000e20: 6f67 7261 6d20 7769 6c6c 206a 7573 7420 ogram will just \n-00000e30: 636f 7079 2061 6e64 0a20 2020 206c 696e copy and. lin\n-00000e40: 6b20 2773 6f75 7263 6544 6972 270a 0a3d k 'sourceDir'..=\n-00000e50: 6974 656d 2042 3c2d 2d74 6172 6765 7444 item B<--targetD\n-00000e60: 6972 3e2c 2042 3c2d 743e 0a0a 2020 2020 ir>, B<-t>.. \n-00000e70: 7061 7468 2873 2920 746f 2064 6972 6563 path(s) to direc\n-00000e80: 746f 7279 2077 6865 7265 2062 6163 6b75 tory where backu\n-00000e90: 7073 2073 7065 6369 6669 6564 2062 790a ps specified by.\n-00000ea0: 2020 2020 2d2d 736f 7572 6365 4469 7220 --sourceDir \n-00000eb0: 7368 6f75 6c64 2062 6520 706c 6163 6564 should be placed\n-00000ec0: 0a0a 3d69 7465 6d20 423c 2d2d 7072 6f67 ..=item B<--prog\n-00000ed0: 7265 7373 5265 706f 7274 3e2c 2042 3c2d ressReport>, B<-\n-00000ee0: 503e 0a0a 2020 2020 7072 696e 7420 7072 P>.. print pr\n-00000ef0: 6f67 7265 7373 2072 6570 6f72 7420 6166 ogress report af\n-00000f00: 7465 7220 6561 6368 2027 6e75 6d62 6572 ter each 'number\n-00000f10: 2720 6669 6c65 730a 2020 2020 6164 6469 ' files. addi\n-00000f20: 7469 6f6e 616c 2079 6f75 206d 6179 2061 tional you may a\n-00000f30: 6464 2061 2074 696d 6520 6672 616d 6520 dd a time frame \n-00000f40: 6166 7465 7220 7768 6963 6820 6120 6d65 after which a me\n-00000f50: 7373 6167 6520 6973 0a20 2020 2070 7269 ssage is. pri\n-00000f60: 6e74 6564 0a20 2020 2069 6620 796f 7520 nted. if you \n-00000f70: 7761 6e74 2074 6f20 7072 696e 7420 6120 want to print a \n-00000f80: 7265 706f 7274 2065 6163 6820 3130 3030 report each 1000\n-00000f90: 2066 696c 6573 2061 6e64 2061 6674 6572 files and after\n-00000fa0: 0a20 2020 206f 6e65 206d 696e 7574 6520 . one minute \n-00000fb0: 616e 6420 3130 2073 6563 6f6e 6473 2c20 and 10 seconds, \n-00000fc0: 7573 653a 202d 5020 3130 3030 2c31 6d31 use: -P 1000,1m1\n-00000fd0: 3073 0a0a 3d69 7465 6d20 423c 2d2d 7072 0s..=item B<--pr\n-00000fe0: 696e 7444 6570 7468 3e2c 2042 3c2d 443e intDepth>, B<-D>\n-00000ff0: 0a0a 2020 2020 7072 696e 7420 6465 7074 .. print dept\n-00001000: 6820 6f66 2061 6374 7561 6c20 7265 6164 h of actual read\n-00001010: 2064 6972 6563 746f 7279 2064 7572 696e directory durin\n-00001020: 6720 6261 636b 7570 0a0a 3d69 7465 6d20 g backup..=item \n-00001030: 423c 2d2d 646f 6e74 4c69 6e6b 5379 6d6c B<--dontLinkSyml\n-00001040: 696e 6b73 3e0a 0a20 2020 2064 6f20 6e6f inks>.. do no\n-00001050: 7420 6861 7264 206c 696e 6b20 6964 656e t hard link iden\n-00001060: 7469 6361 6c20 7379 6d62 6f6c 6963 206c tical symbolic l\n-00001070: 696e 6b73 0a0a 3d69 7465 6d20 423c 2d2d inks..=item B<--\n-00001080: 6967 6e6f 7265 4572 726f 7273 3e2c 2042 ignoreErrors>, B\n-00001090: 3c2d 693e 0a0a 2020 2020 6966 2073 6574 <-i>.. if set\n-000010a0: 2c20 646f 6e27 7420 7374 6f70 2069 6e20 , don't stop in \n-000010b0: 6361 7365 206f 6620 6572 726f 7273 2077 case of errors w\n-000010c0: 6865 6e20 636f 7079 696e 670a 0a3d 6974 hen copying..=it\n-000010d0: 656d 2042 3c2d 2d73 6176 6552 414d 3e0a em B<--saveRAM>.\n-000010e0: 0a20 2020 2077 7269 7465 2074 656d 706f . write tempo\n-000010f0: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i\n-00001100: 6e20 2d2d 746d 7064 6972 0a20 2020 2075 n --tmpdir. u\n-00001110: 7365 2074 6869 7320 6966 2079 6f75 2064 se this if you d\n-00001120: 6f20 6e6f 7420 6861 7665 2065 6e6f 7567 o not have enoug\n-00001130: 6820 5241 4d0a 0a3d 6974 656d 2042 3c2d h RAM..=item B<-\n-00001140: 2d74 6d70 6469 723e 2c20 423c 2d54 3e0a -tmpdir>, B<-T>.\n-00001150: 0a20 2020 2064 6972 6563 746f 7279 2066 . directory f\n-00001160: 6f72 2074 656d 706f 7261 7279 2066 696c or temporary fil\n-00001170: 6573 2c20 6465 6661 756c 7420 6973 203c es, default is <\n-00001180: 2f74 6d70 3e0a 0a3d 6974 656d 2042 3c2d /tmp>..=item B<-\n-00001190: 2d63 7265 6174 6553 7061 7273 6546 696c -createSparseFil\n-000011a0: 6573 3e2c 2042 3c2d 733e 0a0a 2020 2020 es>, B<-s>.. \n-000011b0: 6966 2061 2066 696c 6520 6973 2069 6e64 if a file is ind\n-000011c0: 6963 6174 6564 2061 7320 6120 7370 6172 icated as a spar\n-000011d0: 7365 2066 696c 6520 616e 6420 7468 6174 se file and that\n-000011e0: 2066 696c 6520 6861 7320 746f 2062 650a file has to be.\n-000011f0: 2020 2020 636f 7069 6564 2c20 7468 656e copied, then\n-00001200: 2065 7874 6572 6e61 6c20 7072 6f67 7261 external progra\n-00001210: 6d20 2763 7027 2069 7320 6361 6c6c 6564 m 'cp' is called\n-00001220: 2074 6f20 636f 7079 2074 6861 7420 6669 to copy that fi\n-00001230: 6c65 0a20 2020 2028 676e 7563 7020 2f20 le. (gnucp / \n-00001240: 6c69 6e75 7820 646f 6573 2073 6f6d 6520 linux does some \n-00001250: 696e 7370 6563 7469 6f6e 2061 626f 7574 inspection about\n-00001260: 2073 7061 7273 6520 6669 6c65 732c 2069 sparse files, i\n-00001270: 6620 796f 7572 0a20 2020 204f 5320 7265 f your. OS re\n-00001280: 6c61 7465 6420 7665 7273 696f 6e20 6f66 lated version of\n-00001290: 2063 7020 646f 6573 206e 6f74 2073 7570 cp does not sup\n-000012a0: 706f 7274 2074 6869 7320 6675 6e63 7469 port this functi\n-000012b0: 6f6e 616c 6974 792c 0a20 2020 2074 6865 onality,. the\n-000012c0: 6e20 7468 6973 206f 7074 696f 6e20 7769 n this option wi\n-000012d0: 6c6c 206e 6f74 2077 6f72 6b20 666f 7220 ll not work for \n-000012e0: 796f 7529 0a0a 3d69 7465 6d20 423c 2d2d you)..=item B<--\n-000012f0: 626c 6f63 6b53 697a 653e 0a0a 2020 2020 blockSize>.. \n-00001300: 626c 6f63 6b20 7369 7a65 2075 7365 6420 block size used \n-00001310: 746f 2063 6865 636b 2069 6620 6120 6669 to check if a fi\n-00001320: 6c65 2069 7320 2f20 6d61 7920 6265 2061 le is / may be a\n-00001330: 2073 7061 7273 6520 6669 6c65 0a20 2020 sparse file. \n-00001340: 2064 6566 6175 6c74 2069 7320 3531 3220 default is 512 \n-00001350: 6279 7465 7320 2877 6869 6368 2073 686f bytes (which sho\n-00001360: 756c 6420 6265 2066 696e 6520 666f 7220 uld be fine for \n-00001370: 6d6f 7374 2066 696c 6520 7379 7374 656d most file system\n-00001380: 7329 0a20 2020 200a 3d69 7465 6d20 423c s). .=item B<\n-00001390: 736f 7572 6365 4469 723e 0a0a 2020 2020 sourceDir>.. \n-000013a0: 7061 7468 2873 2920 746f 2064 6972 6563 path(s) to direc\n-000013b0: 746f 7269 6573 2077 6869 6368 2068 6176 tories which hav\n-000013c0: 6520 746f 2062 6520 6c69 6e6b 6564 2074 e to be linked t\n-000013d0: 6f20 6f74 6865 7220 6261 636b 7570 730a o other backups.\n-000013e0: 2020 2020 7573 6520 7468 6973 2070 6172 use this par\n-000013f0: 616d 6574 6572 206d 756c 7469 706c 6520 ameter multiple \n-00001400: 7469 6d65 7320 666f 7220 6d75 6c74 6970 times for multip\n-00001410: 6c65 2064 6972 6563 746f 7269 6573 0a0a le directories..\n-00001420: 3d69 7465 6d20 423c 2d2d 6d61 7848 6172 =item B<--maxHar\n-00001430: 644c 696e 6b73 3e0a 0a20 2020 206d 6178 dLinks>.. max\n-00001440: 696d 756d 206e 756d 6265 7220 6f66 2068 imum number of h\n-00001450: 6172 6420 6c69 6e6b 7320 746f 2075 7365 ard links to use\n-00001460: 0a20 2020 207a 6572 6f20 2864 6566 6175 . zero (defau\n-00001470: 6c74 2920 6d65 616e 7320 6c69 6d69 7420 lt) means limit \n-00001480: 6465 7065 6e64 7320 6f6e 2066 696c 6520 depends on file \n-00001490: 7379 7374 656d 2075 7365 6420 6f6e 6c79 system used only\n-000014a0: 0a0a 3d62 6163 6b0a 0a3d 6865 6164 3120 ..=back..=head1 \n-000014b0: 434f 5059 5249 4748 540a 0a43 6f70 7972 COPYRIGHT..Copyr\n-000014c0: 6967 6874 2028 6329 2032 3031 322d 3230 ight (c) 2012-20\n-000014d0: 3232 2062 7920 4865 696e 7a2d 4a6f 7365 22 by Heinz-Jose\n-000014e0: 6620 436c 6165 7320 2873 6565 2052 4541 f Claes (see REA\n-000014f0: 444d 4529 2e0a 5075 626c 6973 6865 6420 DME)..Published \n-00001500: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge\n-00001510: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n-00001520: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l\n-00001530: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c\n-00001540: 7574 0a0a 0a6d 7920 2448 656c 7020 3d20 ut...my $Help = \n-00001550: 263a 3a67 6574 506f 6432 5465 7874 2824 &::getPod2Text($\n-00001560: 3029 3b0a 0a26 7072 696e 7456 6572 7369 0);..&printVersi\n-00001570: 6f6e 285c 4041 5247 562c 2027 2d56 272c on(\\@ARGV, '-V',\n-00001580: 2027 2d2d 7665 7273 696f 6e27 293b 0a0a '--version');..\n-00001590: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. \n-000015a0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n\n-000015b0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists'\n-000015c0: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... \n-000015d0: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt\n-000015e0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000015f0: 203d 3e20 276c 696e 6b57 6974 6827 2c0a => 'linkWith',.\n-00001600: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001610: 7469 6f6e 2720 3d3e 2027 2d77 272c 0a09 tion' => '-w',..\n-00001620: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00001630: 6173 2720 3d3e 2027 2d2d 6c69 6e6b 5769 as' => '--linkWi\n-00001640: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n-00001650: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes',\n-00001660: 0a09 0909 0909 2020 2020 272d 6d75 6c74 ...... '-mult\n-00001670: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'),\n-00001680: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001690: 2827 2d6e 616d 6527 203d 3e20 2774 6172 ('-name' => 'tar\n-000016a0: 6765 7444 6972 272c 0a09 0909 0909 2020 getDir',...... \n-000016b0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-000016c0: 3e20 272d 7427 2c0a 0909 0909 0920 2020 > '-t',...... \n-000016d0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-000016e0: 272d 2d74 6172 6765 7444 6972 272c 0a09 '--targetDir',..\n-000016f0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00001700: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n-00001710: 2020 2020 272d 6d75 7374 5f62 6527 203d '-must_be' =\n-00001720: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n-00001730: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00001740: 2720 3d3e 2027 7072 6f67 7265 7373 5265 ' => 'progressRe\n-00001750: 706f 7274 272c 0a09 0909 0909 2020 2020 port',...... \n-00001760: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001770: 272d 2d70 726f 6772 6573 7352 6570 6f72 '--progressRepor\n-00001780: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n-00001790: 6c5f 616c 6961 7327 203d 3e20 272d 5027 l_alias' => '-P'\n-000017a0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-000017b0: 6b65 7927 203d 3e20 2770 726f 6772 6573 key' => 'progres\n-000017c0: 7352 6570 6f72 7427 2c0a 0909 0909 0920 sReport',...... \n-000017d0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-000017e0: 2030 292c 0a09 0909 094f 7074 696f 6e2d 0),.....Option-\n-000017f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00001800: 2770 7269 6e74 4465 7074 6827 2c0a 0909 'printDepth',...\n-00001810: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001820: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7444 on' => '--printD\n-00001830: 6570 7468 272c 0a09 0909 0909 2020 2020 epth',...... \n-00001840: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001850: 2d44 272c 0a09 0909 0909 2020 2020 272d -D',...... '-\n-00001860: 6366 5f6b 6579 2720 3d3e 2027 7072 696e cf_key' => 'prin\n-00001870: 7444 6570 7468 272c 0a09 0909 0909 2020 tDepth',...... \n-00001880: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet'\n-00001890: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no'\n-000018a0: 5d29 2c0a 0909 0909 4f70 7469 6f6e 2d3e ]),.....Option->\n-000018b0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-000018c0: 646f 6e74 4c69 6e6b 5379 6d6c 696e 6b73 dontLinkSymlinks\n-000018d0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-000018e0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d64 _option' => '--d\n-000018f0: 6f6e 744c 696e 6b53 796d 6c69 6e6b 7327 ontLinkSymlinks'\n-00001900: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-00001910: 6577 2827 2d6e 616d 6527 203d 3e20 2769 ew('-name' => 'i\n-00001920: 676e 6f72 6545 7272 6f72 7327 2c0a 0909 gnoreErrors',...\n-00001930: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001940: 6f6e 2720 3d3e 2027 2d69 272c 0a09 0909 on' => '-i',....\n-00001950: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-00001960: 2720 3d3e 2027 2d2d 6967 6e6f 7265 4572 ' => '--ignoreEr\n-00001970: 726f 7273 2729 2c0a 0909 0909 4f70 7469 rors'),.....Opti\n-00001980: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001990: 3d3e 2027 7361 7665 5241 4d27 2c0a 0909 => 'saveRAM',...\n-000019a0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-000019b0: 6f6e 2720 3d3e 2027 2d2d 7361 7665 5241 on' => '--saveRA\n-000019c0: 4d27 292c 0a09 0909 094f 7074 696f 6e2d M'),.....Option-\n-000019d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-000019e0: 2763 7265 6174 6553 7061 7273 6546 696c 'createSparseFil\n-000019f0: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n-00001a00: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001a10: 2d63 7265 6174 6553 7061 7273 6546 696c -createSparseFil\n-00001a20: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n-00001a30: 636c 5f61 6c69 6173 2720 3d3e 2027 2d73 cl_alias' => '-s\n-00001a40: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00001a50: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001a60: 626c 6f63 6b53 697a 6527 2c0a 0909 0909 blockSize',.....\n-00001a70: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00001a80: 2720 3d3e 2027 2d2d 626c 6f63 6b53 697a ' => '--blockSiz\n-00001a90: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d\n-00001aa0: 6566 6175 6c74 2720 3d3e 2035 3132 2c0a efault' => 512,.\n-00001ab0: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n-00001ac0: 6966 2720 3d3e 2027 5b63 7265 6174 6553 if' => '[createS\n-00001ad0: 7061 7273 6546 696c 6573 5d27 2c0a 0909 parseFiles]',...\n-00001ae0: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern\n-00001af0: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 292c ' => '\\A\\d+\\Z'),\n-00001b00: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001b10: 2827 2d6e 616d 6527 203d 3e20 2774 6d70 ('-name' => 'tmp\n-00001b20: 6469 7227 2c0a 0909 0909 0920 2020 2027 dir',...... '\n-00001b30: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001b40: 2d54 272c 0a09 0909 0909 2020 2020 272d -T',...... '-\n-00001b50: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001b60: 746d 7064 6972 272c 0a09 0909 0909 2020 tmpdir',...... \n-00001b70: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => \n-00001b80: 2474 6d70 6469 7229 2c0a 0909 0909 4f70 $tmpdir),.....Op\n-00001b90: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00001ba0: 2720 3d3e 2027 6d61 7848 6172 644c 696e ' => 'maxHardLin\n-00001bb0: 6b73 272c 0a09 0909 0909 2020 2020 272d ks',...... '-\n-00001bc0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001bd0: 2d6d 6178 4861 7264 4c69 6e6b 7327 2c0a -maxHardLinks',.\n-00001be0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n-00001bf0: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... \n-00001c00: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' =>\n-00001c10: 2027 5c41 5c64 2b5c 5a27 290a 0909 0909 '\\A\\d+\\Z').....\n-00001c20: 5d29 3b0a 0a24 4368 6563 6b50 6172 2d3e ]);..$CheckPar->\n-00001c30: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' =>\n-00001c40: 205c 4041 5247 562c 0a20 2020 2020 2020 \\@ARGV,. \n-00001c50: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help\n-00001c60: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. \n-00001c70: 2020 2020 2020 2020 2020 2020 293b 0a0a );..\n-00001c80: 6d79 2024 6c69 6e6b 5769 7468 203d 2024 my $linkWith = $\n-00001c90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001ca0: 5769 7468 5061 7228 276c 696e 6b57 6974 WithPar('linkWit\n-00001cb0: 6827 293b 0a40 246c 696e 6b57 6974 6820 h');.@$linkWith \n-00001cc0: 3d20 2829 2075 6e6c 6573 7320 246c 696e = () unless $lin\n-00001cd0: 6b57 6974 683b 0a6d 7920 2474 6172 6765 kWith;.my $targe\n-00001ce0: 7444 6972 203d 2024 4368 6563 6b50 6172 tDir = $CheckPar\n-00001cf0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00001d00: 2774 6172 6765 7444 6972 2729 3b0a 6d79 'targetDir');.my\n-00001d10: 2024 7072 6f67 7265 7373 5265 706f 7274 $progressReport\n-00001d20: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00001d30: 744f 7074 5769 7468 5061 7228 2770 726f tOptWithPar('pro\n-00001d40: 6772 6573 7352 6570 6f72 7427 293b 0a6d gressReport');.m\n-00001d50: 7920 2470 7269 6e74 4465 7074 6820 3d20 y $printDepth = \n-00001d60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001d70: 7457 6974 686f 7574 5061 7228 2770 7269 tWithoutPar('pri\n-00001d80: 6e74 4465 7074 6827 293b 0a24 7072 696e ntDepth');.$prin\n-00001d90: 7444 6570 7468 203d 2024 7072 696e 7444 tDepth = $printD\n-00001da0: 6570 7468 203f 2027 7965 7327 203a 2027 epth ? 'yes' : '\n-00001db0: 6e6f 273b 0a6d 7920 2464 6f6e 744c 696e no';.my $dontLin\n-00001dc0: 6b53 796d 6c69 6e6b 7320 3d20 2443 6865 kSymlinks = $Che\n-00001dd0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00001de0: 686f 7574 5061 7228 2764 6f6e 744c 696e houtPar('dontLin\n-00001df0: 6b53 796d 6c69 6e6b 7327 293b 0a6d 7920 kSymlinks');.my \n-00001e00: 2469 676e 6f72 6545 7272 6f72 7320 3d20 $ignoreErrors = \n-00001e10: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001e20: 7457 6974 686f 7574 5061 7228 2769 676e tWithoutPar('ign\n-00001e30: 6f72 6545 7272 6f72 7327 293b 0a6d 7920 oreErrors');.my \n-00001e40: 2840 736f 7572 6365 4469 7229 203d 2024 (@sourceDir) = $\n-00001e50: 4368 6563 6b50 6172 2d3e 6765 744c 6973 CheckPar->getLis\n-00001e60: 7450 6172 2829 3b0a 6d79 2024 7361 7665 tPar();.my $save\n-00001e70: 5241 4d20 3d20 2443 6865 636b 5061 722d RAM = $CheckPar-\n-00001e80: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00001e90: 7228 2773 6176 6552 414d 2729 3b0a 6d79 r('saveRAM');.my\n-00001ea0: 2024 6372 6561 7465 5370 6172 7365 4669 $createSparseFi\n-00001eb0: 6c65 7320 3d20 2443 6865 636b 5061 722d les = $CheckPar-\n-00001ec0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00001ed0: 7228 2763 7265 6174 6553 7061 7273 6546 r('createSparseF\n-00001ee0: 696c 6573 2729 3b0a 6d79 2024 626c 6f63 iles');.my $bloc\n-00001ef0: 6b53 697a 6520 3d20 2443 6865 636b 5061 kSize = $CheckPa\n-00001f00: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00001f10: 2827 626c 6f63 6b53 697a 6527 293b 0a6d ('blockSize');.m\n-00001f20: 7920 246d 6178 4861 7264 4c69 6e6b 7320 y $maxHardLinks \n-00001f30: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001f40: 4f70 7457 6974 6850 6172 2827 6d61 7848 OptWithPar('maxH\n-00001f50: 6172 644c 696e 6b73 2729 3b0a 2474 6d70 ardLinks');.$tmp\n-00001f60: 6469 7220 3d20 2443 6865 636b 5061 722d dir = $CheckPar-\n-00001f70: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00001f80: 746d 7064 6972 2729 3b0a 0a69 6620 286e tmpdir');..if (n\n-00001f90: 6f74 2024 7461 7267 6574 4469 7220 6f72 ot $targetDir or\n-00001fa0: 206e 6f74 2040 736f 7572 6365 4469 7229 not @sourceDir)\n-00001fb0: 0a7b 0a20 2020 2070 7269 6e74 2022 2448 .{. print \"$H\n-00001fc0: 656c 7022 3b0a 2020 2020 6578 6974 2030 elp\";. exit 0\n-00001fd0: 3b0a 7d0a 0a6d 7920 2470 724c 6f67 3b0a ;.}..my $prLog;.\n-00001fe0: 6d79 2028 2470 724c 6f67 4b69 6e64 2920 my ($prLogKind) \n-00001ff0: 3d20 5b27 413a 4245 4749 4e27 2c0a 0909 = ['A:BEGIN',...\n-00002000: 2020 2027 5a3a 454e 4427 2c0a 0909 2020 'Z:END',... \n-00002010: 2027 493a 494e 464f 272c 0a09 0920 2020 'I:INFO',... \n-00002020: 2756 3a56 4552 5349 4f4e 272c 0a09 0920 'V:VERSION',... \n-00002030: 2020 2757 3a57 4152 4e49 4e47 272c 0a09 'W:WARNING',..\n-00002040: 0920 2020 2745 3a45 5252 4f52 272c 0a09 . 'E:ERROR',..\n-00002050: 0920 2020 2753 3a53 5441 5449 5354 4943 . 'S:STATISTIC\n-00002060: 272c 0a09 0920 2020 2750 3a50 524f 4752 ',... 'P:PROGR\n-00002070: 4553 5327 5d3b 0a24 7072 4c6f 6720 3d20 ESS'];.$prLog = \n-00002080: 7072 696e 744c 6f67 2d3e 6e65 7728 272d printLog->new('-\n-00002090: 6b69 6e64 2720 3d3e 2024 7072 4c6f 674b kind' => $prLogK\n-000020a0: 696e 642c 0a09 0920 2020 2020 2020 272d ind,... '-\n-000020b0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd\n-000020c0: 6972 293b 0a0a 2320 6368 6563 6b20 7072 ir);..# check pr\n-000020d0: 6f67 7265 7373 5265 706f 7274 2073 6574 ogressReport set\n-000020e0: 7469 6e67 730a 6d79 2024 7072 6f67 7265 tings.my $progre\n-000020f0: 7373 4465 6c74 6154 696d 6520 3d20 303b ssDeltaTime = 0;\n-00002100: 0a69 6620 2824 7072 6f67 7265 7373 5265 .if ($progressRe\n-00002110: 706f 7274 290a 7b0a 2020 2020 6d79 2028 port).{. my (\n-00002120: 2463 6f75 6e74 2c20 2474 293b 0a20 2020 $count, $t);. \n-00002130: 2069 6620 2824 7072 6f67 7265 7373 5265 if ($progressRe\n-00002140: 706f 7274 203d 7e20 2f2c 2f29 0a20 2020 port =~ /,/). \n-00002150: 207b 0a09 2824 636f 756e 742c 2024 7429 {..($count, $t)\n-00002160: 203d 2024 7072 6f67 7265 7373 5265 706f = $progressRepo\n-00002170: 7274 203d 7e20 2f5c 4128 2e2a 3f29 2c28 rt =~ /\\A(.*?),(\n-00002180: 2e2a 295c 5a2f 3b0a 0924 7072 4c6f 672d .*)\\Z/;..$prLog-\n-00002190: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000021a0: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-000021b0: 2d73 7472 2720 3d3e 205b 2277 726f 6e67 -str' => [\"wrong\n-000021c0: 2066 6f72 6d61 7420 666f 7220 6f70 7469 format for opti\n-000021d0: 6f6e 2070 726f 6772 6573 7352 6570 6f72 on progressRepor\n-000021e0: 7420 2220 2e0a 0909 0909 2022 7469 6d65 t \" ...... \"time\n-000021f0: 2070 6572 696f 6420 3c24 743e 225d 2c0a period <$t>\"],.\n-00002200: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n-00002210: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles\n-00002220: 7320 2664 6174 6554 6f6f 6c73 3a3a 6368 s &dateTools::ch\n-00002230: 6563 6b53 7472 2827 2d73 7472 2720 3d3e eckStr('-str' =>\n-00002240: 2024 7429 3b0a 0924 7072 6f67 7265 7373 $t);..$progress\n-00002250: 4465 6c74 6154 696d 6520 3d20 2664 6174 DeltaTime = &dat\n-00002260: 6554 6f6f 6c73 3a3a 7374 7254 6f53 6563 eTools::strToSec\n-00002270: 2827 2d73 7472 2720 3d3e 2024 7429 3b0a ('-str' => $t);.\n-00002280: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. \n-00002290: 2020 207b 0a09 2463 6f75 6e74 203d 2024 {..$count = $\n-000022a0: 7072 6f67 7265 7373 5265 706f 7274 3b0a progressReport;.\n-000022b0: 2020 2020 7d0a 2020 2020 2470 724c 6f67 }. $prLog\n-000022c0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000022d0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n-000022e0: 7227 203d 3e20 5b22 636f 756e 7465 7220 r' => [\"counter \n-000022f0: 3c24 636f 756e 743e 2066 6f72 2070 726f <$count> for pro\n-00002300: 6772 6573 7320 7265 706f 7274 2022 202e gress report \" .\n-00002310: 0a09 0909 2020 2020 2022 6d75 7374 2062 .... \"must b\n-00002320: 6520 6120 706f 7369 7469 7665 2069 6e74 e a positive int\n-00002330: 6567 6572 225d 2c0a 0909 2020 272d 6578 eger\"],... '-ex\n-00002340: 6974 2720 3d3e 2031 290a 0975 6e6c 6573 it' => 1)..unles\n-00002350: 7320 2463 6f75 6e74 203d 7e20 2f5c 415c s $count =~ /\\A\\\n-00002360: 642b 5c5a 2f3b 0a20 2020 2024 7072 6f67 d+\\Z/;. $prog\n-00002370: 7265 7373 5265 706f 7274 203d 2024 636f ressReport = $co\n-00002380: 756e 743b 0a7d 0a23 7072 696e 7420 2270 unt;.}.#print \"p\n-00002390: 726f 6772 6573 7352 6570 6f72 743d 3c24 rogressReport=<$\n-000023a0: 7072 6f67 7265 7373 5265 706f 7274 3e2c progressReport>,\n-000023b0: 2070 726f 6772 6573 7344 656c 7461 5469 progressDeltaTi\n-000023c0: 6d65 3d3c 2470 726f 6772 6573 7344 656c me=<$progressDel\n-000023d0: 7461 5469 6d65 3e5c 6e22 3b0a 0a6d 7920 taTime>\\n\";..my \n-000023e0: 2840 6c74 2920 3d20 2840 246c 696e 6b57 (@lt) = (@$linkW\n-000023f0: 6974 6829 3b0a 6d79 2028 406c 6229 203d ith);.my (@lb) =\n-00002400: 2028 4073 6f75 7263 6544 6972 293b 0a6d (@sourceDir);.m\n-00002410: 7920 246c 7473 203d 2024 7461 7267 6574 y $lts = $target\n-00002420: 4469 723b 0a69 6620 2840 6c74 290a 7b0a Dir;.if (@lt).{.\n-00002430: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00002440: 7428 272d 6b69 6e64 2720 3d3e 2027 4127 t('-kind' => 'A'\n-00002450: 2c0a 0909 2020 272d 7374 7227 203d 3e0a ,... '-str' =>.\n-00002460: 0909 2020 5b22 636f 7079 2f6c 696e 6b20 .. [\"copy/link \n-00002470: 3c22 202e 206a 6f69 6e28 273e 3c27 2c20 <\" . join('><', \n-00002480: 406c 6229 202e 2022 3e20 746f 203c 2220 @lb) . \"> to <\" \n-00002490: 2e0a 0909 2020 206a 6f69 6e28 273e 3c27 .... join('><'\n-000024a0: 2c20 406c 7429 202e 2022 3e20 746f 203c , @lt) . \"> to <\n-000024b0: 246c 7473 3e22 5d29 3b0a 7d0a 656c 7365 $lts>\"]);.}.else\n-000024c0: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p\n-000024d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-000024e0: 2741 272c 0a09 0920 2027 2d73 7472 2720 'A',... '-str' \n-000024f0: 3d3e 0a09 0920 205b 2263 6f70 792f 6c69 =>... [\"copy/li\n-00002500: 6e6b 203c 2220 2e20 6a6f 696e 2827 3e3c nk <\" . join('><\n-00002510: 272c 2040 6c62 2920 2e0a 0909 2020 2022 ', @lb) .... \"\n-00002520: 3e20 746f 203c 246c 7473 3e22 5d29 3b0a > to <$lts>\"]);.\n-00002530: 7d0a 2470 724c 6f67 2d3e 7072 696e 7428 }.$prLog->print(\n-00002540: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',.\n-00002550: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00002560: 205b 226c 696e 6b54 6f44 6972 732e 706c [\"linkToDirs.pl\n-00002570: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA\n-00002580: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION\"]);.\n-00002590: 0a23 206d 616b 6520 7061 7468 7320 6162 .# make paths ab\n-000025a0: 736f 6c75 7465 0a6d 7920 2469 3b0a 666f solute.my $i;.fo\n-000025b0: 7220 2824 6920 3d20 3020 3b20 2469 203c r ($i = 0 ; $i <\n-000025c0: 2040 246c 696e 6b57 6974 6820 3b20 2469 @$linkWith ; $i\n-000025d0: 2b2b 290a 7b0a 2020 2020 6d79 2024 7020 ++).{. my $p \n-000025e0: 3d20 2424 6c69 6e6b 5769 7468 5b24 695d = $$linkWith[$i]\n-000025f0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n-00002600: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00002610: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' =\n-00002620: 3e20 5b22 2d2d 6c69 6e6b 5769 7468 2070 > [\"--linkWith p\n-00002630: 6174 6820 3c24 703e 206e 6f74 2061 6363 ath <$p> not acc\n-00002640: 6573 7369 626c 6522 5d2c 0a09 0920 2027 essible\"],... '\n-00002650: 2d65 7869 7427 203d 3e20 3129 0a09 756e -exit' => 1)..un\n-00002660: 6c65 7373 202d 6520 2470 3b0a 2020 2020 less -e $p;. \n-00002670: 2424 6c69 6e6b 5769 7468 5b24 695d 203d $$linkWith[$i] =\n-00002680: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath\n-00002690: 2824 7029 3b0a 7d0a 666f 7220 2824 6920 ($p);.}.for ($i \n-000026a0: 3d20 3020 3b20 2469 203c 2040 736f 7572 = 0 ; $i < @sour\n-000026b0: 6365 4469 7220 3b20 2469 2b2b 290a 7b0a ceDir ; $i++).{.\n-000026c0: 2020 2020 6d79 2024 7020 3d20 2473 6f75 my $p = $sou\n-000026d0: 7263 6544 6972 5b24 695d 3b0a 2020 2020 rceDir[$i];. \n-000026e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-000026f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00002700: 2020 272d 7374 7227 203d 3e20 5b22 736f '-str' => [\"so\n-00002710: 7572 6365 4469 7220 7061 7468 203c 2470 urceDir path <$p\n-00002720: 3e20 6e6f 7420 6163 6365 7373 6962 6c65 > not accessible\n-00002730: 225d 2c0a 0909 2020 272d 6578 6974 2720 \"],... '-exit' \n-00002740: 3d3e 2031 290a 0975 6e6c 6573 7320 2d65 => 1)..unless -e\n-00002750: 2024 703b 0a20 2020 2024 736f 7572 6365 $p;. $source\n-00002760: 4469 725b 2469 5d20 3d20 263a 3a61 6273 Dir[$i] = &::abs\n-00002770: 6f6c 7574 6550 6174 6828 2470 293b 0a7d olutePath($p);.}\n-00002780: 0a23 2072 656d 6f76 6520 646f 7562 6c69 .# remove doubli\n-00002790: 6361 7465 7320 2869 6620 616e 7929 0a6d cates (if any).m\n-000027a0: 7920 2840 746d 7029 203d 2073 6f72 7420 y (@tmp) = sort \n-000027b0: 4024 6c69 6e6b 5769 7468 3b0a 4024 6c69 @$linkWith;.@$li\n-000027c0: 6e6b 5769 7468 203d 2028 293b 0a66 6f72 nkWith = ();.for\n-000027d0: 2028 2469 203d 2030 203b 2024 6920 3c20 ($i = 0 ; $i < \n-000027e0: 4074 6d70 203b 2024 692b 2b29 0a7b 0a20 @tmp ; $i++).{. \n-000027f0: 2020 2070 7573 6820 4024 6c69 6e6b 5769 push @$linkWi\n-00002800: 7468 2c20 2474 6d70 5b24 695d 0a09 6966 th, $tmp[$i]..if\n-00002810: 2024 6920 3d3d 2030 206f 7220 2474 6d70 $i == 0 or $tmp\n-00002820: 5b24 695d 206e 6520 2474 6d70 5b24 692d [$i] ne $tmp[$i-\n-00002830: 315d 3b0a 7d0a 2840 746d 7029 203d 2040 1];.}.(@tmp) = @\n-00002840: 736f 7572 6365 4469 723b 0a40 736f 7572 sourceDir;.@sour\n-00002850: 6365 4469 7220 3d20 2829 3b0a 666f 7220 ceDir = ();.for \n-00002860: 2824 6920 3d20 3020 3b20 2469 203c 2040 ($i = 0 ; $i < @\n-00002870: 746d 7020 3b20 2469 2b2b 290a 7b0a 2020 tmp ; $i++).{. \n-00002880: 2020 7075 7368 2040 736f 7572 6365 4469 push @sourceDi\n-00002890: 722c 2024 746d 705b 2469 5d0a 0969 6620 r, $tmp[$i]..if \n-000028a0: 2469 203d 3d20 3020 6f72 2024 746d 705b $i == 0 or $tmp[\n-000028b0: 2469 5d20 6e65 2024 746d 705b 2469 2d31 $i] ne $tmp[$i-1\n-000028c0: 5d3b 0a7d 0a0a 0a23 2067 656e 6572 616c ];.}...# general\n-000028d0: 2063 6865 636b 730a 6d79 2024 6578 6974 checks.my $exit\n-000028e0: 203d 2030 3b0a 7b0a 2020 2020 6d79 2028 = 0;.{. my (\n-000028f0: 2464 6576 5429 203d 2028 7374 6174 2824 $devT) = (stat($\n-00002900: 7461 7267 6574 4469 7229 295b 305d 3b0a targetDir))[0];.\n-00002910: 2020 2020 666f 7265 6163 6820 6d79 2024 foreach my $\n-00002920: 6420 2840 246c 696e 6b57 6974 6829 0a20 d (@$linkWith). \n-00002930: 2020 207b 0a09 756e 6c65 7373 2028 2d65 {..unless (-e\n-00002940: 2024 6429 0a09 7b0a 0920 2020 2024 7072 $d)..{.. $pr\n-00002950: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00002960: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n-00002970: 272d 7374 7227 203d 3e20 5b22 3c24 643e '-str' => [\"<$d>\n-00002980: 2064 6f65 7320 6e6f 7420 6578 6973 7422 does not exist\"\n-00002990: 5d29 3b0a 0920 2020 2024 6578 6974 203d ]);.. $exit =\n-000029a0: 2031 3b0a 097d 0a09 6966 2028 2d6c 2024 1;..}..if (-l $\n-000029b0: 6420 616e 6420 6e6f 7420 2d64 2024 6429 d and not -d $d)\n-000029c0: 2020 2023 2069 7320 6e6f 7420 6120 6469 # is not a di\n-000029d0: 7265 6374 6f72 790a 097b 0a09 2020 2020 rectory..{.. \n-000029e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-000029f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00002a00: 0920 2027 2d73 7472 2720 3d3e 205b 223c . '-str' => [\"<\n-00002a10: 2464 3e20 6973 206e 6f74 2061 2064 6972 $d> is not a dir\n-00002a20: 6563 746f 7279 225d 293b 0a09 2020 2020 ectory\"]);.. \n-00002a30: 2465 7869 7420 3d20 313b 0a09 7d0a 2009 $exit = 1;..}. .\n-00002a40: 6d79 2028 2464 6576 2920 3d20 2873 7461 my ($dev) = (sta\n-00002a50: 7428 2464 2929 5b30 5d3b 0a09 6966 2028 t($d))[0];..if (\n-00002a60: 2464 6576 206e 6520 2464 6576 5429 0a09 $dev ne $devT)..\n-00002a70: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p\n-00002a80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002a90: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str'\n-00002aa0: 203d 3e0a 0909 0920 205b 2264 6972 6563 =>.... [\"direc\n-00002ab0: 746f 7279 203c 2464 3e20 6973 206e 6f74 tory <$d> is not\n-00002ac0: 206f 6e20 7468 6520 2220 2e0a 0909 0920 on the \" ..... \n-00002ad0: 2020 2273 616d 6520 6465 7669 6365 2061 \"same device a\n-00002ae0: 7320 3c24 7461 7267 6574 4469 723e 202d s <$targetDir> -\n-00002af0: 2022 202e 0a09 0909 2020 2273 6574 7469 \" ..... \"setti\n-00002b00: 6e67 2068 6172 6420 6c69 6e6b 7320 6973 ng hard links is\n-00002b10: 206e 6f74 2070 6f73 7369 626c 6522 5d29 not possible\"])\n-00002b20: 3b0a 0920 2020 2024 6578 6974 203d 2031 ;.. $exit = 1\n-00002b30: 3b0a 097d 0a09 6966 2028 2474 6d70 6469 ;..}..if ($tmpdi\n-00002b40: 7229 0a09 7b0a 0920 2020 2075 6e6c 6573 r)..{.. unles\n-00002b50: 7320 282d 6420 2474 6d70 6469 7220 616e s (-d $tmpdir an\n-00002b60: 6420 2d77 2024 746d 7064 6972 290a 0920 d -w $tmpdir).. \n-00002b70: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n-00002b80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002b90: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-00002ba0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n-00002bb0: 205b 2264 6972 6563 746f 7279 203c 2474 [\"directory <$t\n-00002bc0: 6d70 6469 723e 2069 7320 6e6f 7420 6163 mpdir> is not ac\n-00002bd0: 6365 7373 6962 6c65 225d 293b 0a09 0924 cessible\"]);...$\n-00002be0: 6578 6974 203d 2031 3b0a 0920 2020 207d exit = 1;.. }\n-00002bf0: 0a09 7d0a 2020 207d 0a7d 0a66 6f72 6561 ..}. }.}.forea\n-00002c00: 6368 206d 7920 2464 2028 4073 6f75 7263 ch my $d (@sourc\n-00002c10: 6544 6972 290a 7b0a 2020 2020 756e 6c65 eDir).{. unle\n-00002c20: 7373 2028 2d64 2024 6429 0a20 2020 207b ss (-d $d). {\n-00002c30: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00002c40: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00002c50: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00002c60: 3e0a 0909 2020 2020 2020 5b22 3c24 643e >... [\"<$d>\n-00002c70: 2069 7320 6e6f 7420 6120 6469 7265 6374 is not a direct\n-00002c80: 6f72 7922 5d29 3b0a 0924 6578 6974 203d ory\"]);..$exit =\n-00002c90: 2031 3b0a 2020 2020 7d0a 2020 2020 6966 1;. }. if\n-00002ca0: 2028 282d 6c20 2464 2061 6e64 206e 6f74 ((-l $d and not\n-00002cb0: 202d 6420 2464 2929 2020 2023 2069 7320 -d $d)) # is \n-00002cc0: 6e6f 7420 6120 6469 7265 6374 6f72 790a not a directory.\n-00002cd0: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-00002ce0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002cf0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-00002d00: 7472 2720 3d3e 205b 223c 2464 3e20 6973 tr' => [\"<$d> is\n-00002d10: 206e 6f74 2061 2064 6972 6563 746f 7279 not a directory\n-00002d20: 225d 293b 0a09 2465 7869 7420 3d20 313b \"]);..$exit = 1;\n-00002d30: 0a20 2020 207d 0a23 7072 696e 7420 222d . }.#print \"-\n-00002d40: 2d2d 2d24 642d 2d2d 2d24 6578 6974 5c6e ---$d----$exit\\n\n-00002d50: 223b 0a7d 0a75 6e6c 6573 7320 282d 6420 \";.}.unless (-d \n-00002d60: 2474 6172 6765 7444 6972 290a 7b0a 2020 $targetDir).{. \n-00002d70: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00002d80: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00002d90: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-00002da0: 3c24 7461 7267 6574 4469 723e 2064 6f65 <$targetDir> doe\n-00002db0: 7320 6e6f 7420 6578 6973 7422 5d29 3b0a s not exist\"]);.\n-00002dc0: 2020 2020 2465 7869 7420 3d20 313b 0a7d $exit = 1;.}\n-00002dd0: 0a69 6620 282d 6c20 2474 6172 6765 7444 .if (-l $targetD\n-00002de0: 6972 2061 6e64 206e 6f74 202d 6420 2474 ir and not -d $t\n-00002df0: 6172 6765 7444 6972 2920 2020 2320 6973 argetDir) # is\n-00002e00: 206e 6f74 2061 2064 6972 6563 746f 7279 not a directory\n-00002e10: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p\n-00002e20: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002e30: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n-00002e40: 3d3e 205b 223c 2474 6172 6765 7444 6972 => [\"<$targetDir\n-00002e50: 3e20 6973 206e 6f74 2061 2064 6972 6563 > is not a direc\n-00002e60: 746f 7279 225d 293b 0a20 2020 2024 6578 tory\"]);. $ex\n-00002e70: 6974 203d 2031 3b0a 7d0a 666f 7265 6163 it = 1;.}.foreac\n-00002e80: 6820 6d79 2024 6420 2840 736f 7572 6365 h my $d (@source\n-00002e90: 4469 7229 0a7b 0a20 2020 206d 7920 2824 Dir).{. my ($\n-00002ea0: 6469 722c 2024 6261 7365 4469 7229 203d dir, $baseDir) =\n-00002eb0: 2026 3a3a 7370 6c69 7446 696c 6544 6972 &::splitFileDir\n-00002ec0: 2824 6429 3b0a 2020 2020 6966 2028 2d64 ($d);. if (-d\n-00002ed0: 2022 2474 6172 6765 7444 6972 2f24 6261 \"$targetDir/$ba\n-00002ee0: 7365 4469 7222 290a 2020 2020 7b0a 0924 seDir\"). {..$\n-00002ef0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002f00: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00002f10: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>..\n-00002f20: 0920 2020 2020 205b 2264 6972 6563 746f . [\"directo\n-00002f30: 7279 203c 2474 6172 6765 7444 6972 2f24 ry <$targetDir/$\n-00002f40: 6261 7365 4469 723e 2061 6c72 6561 6479 baseDir> already\n-00002f50: 2065 7869 7374 7322 5d29 3b0a 0924 6578 exists\"]);..$ex\n-00002f60: 6974 203d 2031 2075 6e6c 6573 7320 2469 it = 1 unless $i\n-00002f70: 676e 6f72 6545 7272 6f72 733b 0a20 2020 gnoreErrors;. \n-00002f80: 207d 2020 2020 0a7d 0a65 7869 7420 2465 } .}.exit $e\n-00002f90: 7869 7420 6966 2024 6578 6974 3b0a 0a23 xit if $exit;..#\n-00002fa0: 2066 696c 6520 666f 7220 7374 6f72 696e file for storin\n-00002fb0: 6720 7065 726d 6973 7369 6f6e 7320 6f66 g permissions of\n-00002fc0: 2064 6972 6563 746f 7269 6573 0a6d 7920 directories.my \n-00002fd0: 2474 6d70 4469 7246 696c 6520 3d20 263a $tmpDirFile = &:\n-00002fe0: 3a75 6e69 7146 696c 654e 616d 6528 2224 :uniqFileName(\"$\n-00002ff0: 746d 7064 6972 2f6c 696e 6b54 6f2e 2229 tmpdir/linkTo.\")\n-00003000: 3b0a 6c6f 6361 6c20 2a44 4952 4649 4c45 ;.local *DIRFILE\n-00003010: 3b0a 6f70 656e 2844 4952 4649 4c45 2c20 ;.open(DIRFILE, \n-00003020: 273e 272c 2024 746d 7044 6972 4669 6c65 '>', $tmpDirFile\n-00003030: 2920 6f72 0a20 2020 2024 7072 4c6f 672d ) or. $prLog-\n-00003040: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003050: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n-00003060: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => [\"cannot op\n-00003070: 656e 203c 2474 6d70 4469 7246 696c 653e en <$tmpDirFile>\n-00003080: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting\"],... \n-00003090: 2027 2d61 6464 2720 3d3e 205b 5f5f 4649 '-add' => [__FI\n-000030a0: 4c45 5f5f 2c20 5f5f 4c49 4e45 5f5f 5d2c LE__, __LINE__],\n-000030b0: 0a09 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-000030c0: 3129 3b0a 6368 6d6f 6420 3036 3030 2c20 1);.chmod 0600, \n-000030d0: 2474 6d70 4469 7246 696c 653b 0a0a 0a6d $tmpDirFile;...m\n-000030e0: 7920 2469 6e64 6578 4469 7220 3d20 696e y $indexDir = in\n-000030f0: 6465 7844 6972 2d3e 6e65 7728 293b 0a0a dexDir->new();..\n-00003100: 6d79 2028 2569 6e6f 6465 326d 6435 2c20 my (%inode2md5, \n-00003110: 256d 6435 3266 696c 6529 3b0a 6d79 2024 %md52file);.my $\n-00003120: 696e 6f64 6532 6d64 3546 696c 6520 3d20 inode2md5File = \n-00003130: 263a 3a75 6e69 7146 696c 654e 616d 6528 &::uniqFileName(\n-00003140: 2224 746d 7064 6972 2f6c 696e 6b54 6f2d \"$tmpdir/linkTo-\n-00003150: 696e 6f64 6532 6d64 352e 2229 3b0a 6d79 inode2md5.\");.my\n-00003160: 2024 6d64 3532 6669 6c65 4669 6c65 203d $md52fileFile =\n-00003170: 2026 3a3a 756e 6971 4669 6c65 4e61 6d65 &::uniqFileName\n-00003180: 2822 2474 6d70 6469 722f 6c69 6e6b 546f (\"$tmpdir/linkTo\n-00003190: 2d6d 6435 3266 696c 652e 2229 3b0a 6966 -md52file.\");.if\n-000031a0: 2028 2473 6176 6552 414d 290a 7b0a 2020 ($saveRAM).{. \n-000031b0: 2020 6462 6d6f 7065 6e28 2569 6e6f 6465 dbmopen(%inode\n-000031c0: 326d 6435 2c20 2469 6e6f 6465 326d 6435 2md5, $inode2md5\n-000031d0: 4669 6c65 2c20 3036 3030 293b 0a20 2020 File, 0600);. \n-000031e0: 2064 626d 6f70 656e 2825 6d64 3532 6669 dbmopen(%md52fi\n-000031f0: 6c65 2c20 246d 6435 3266 696c 6546 696c le, $md52fileFil\n-00003200: 652c 2030 3630 3029 3b0a 7d0a 6d79 2024 e, 0600);.}.my $\n-00003210: 7374 6174 203d 2053 7461 7469 7374 6963 stat = Statistic\n-00003220: 2d3e 6e65 7728 272d 7072 4c6f 6727 203d ->new('-prLog' =\n-00003230: 3e20 2470 724c 6f67 2c0a 0909 0920 2027 > $prLog,.... '\n-00003240: 2d70 726f 6772 6573 7352 6570 6f72 7427 -progressReport'\n-00003250: 203d 3e20 2470 726f 6772 6573 7352 6570 => $progressRep\n-00003260: 6f72 742c 0a09 0909 2020 272d 7072 6f67 ort,.... '-prog\n-00003270: 7265 7373 4465 6c74 6154 696d 6527 203d ressDeltaTime' =\n-00003280: 3e20 2470 726f 6772 6573 7344 656c 7461 > $progressDelta\n-00003290: 5469 6d65 293b 0a0a 0a23 0a23 2072 6561 Time);...#.# rea\n-000032a0: 6420 616c 6c20 6c69 6e6b 5769 7468 2064 d all linkWith d\n-000032b0: 6972 6563 746f 7265 730a 230a 6d79 2024 irectores.#.my $\n-000032c0: 7272 6420 3d20 7265 6375 7273 6976 6552 rrd = recursiveR\n-000032d0: 6561 6444 6972 2d3e 6e65 7728 272d 6469 eadDir->new('-di\n-000032e0: 7273 2720 3d3e 2024 6c69 6e6b 5769 7468 rs' => $linkWith\n-000032f0: 2c0a 0909 0909 272d 7072 696e 7444 6570 ,.....'-printDep\n-00003300: 7468 2720 3d3e 2024 7072 696e 7444 6570 th' => $printDep\n-00003310: 7468 2c0a 0909 0909 272d 7072 696e 7444 th,.....'-printD\n-00003320: 6570 7468 5072 6c6f 674b 696e 6427 203d epthPrlogKind' =\n-00003330: 3e20 2750 272c 0a09 0909 0927 2d70 724c > 'P',.....'-prL\n-00003340: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n-00003350: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00003360: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. \n-00003370: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00003380: 2273 7461 7274 2072 6561 6469 6e67 206c \"start reading l\n-00003390: 696e 6b57 6974 6820 6469 7273 203c 2220 inkWith dirs <\" \n-000033a0: 2e0a 0909 0920 6a6f 696e 2827 3e20 3c27 ..... join('> <'\n-000033b0: 2c20 4024 6c69 6e6b 5769 7468 2920 2e20 , @$linkWith) . \n-000033c0: 273e 275d 290a 2020 2020 6966 2040 246c '>']). if @$l\n-000033d0: 696e 6b57 6974 683b 0a6d 7920 2824 662c inkWith;.my ($f,\n-000033e0: 2024 7429 3b0a 7768 696c 6520 2828 2466 $t);.while (($f\n-000033f0: 2c20 2474 2920 3d20 2472 7264 2d3e 6e65 , $t) = $rrd->ne\n-00003400: 7874 2829 290a 7b0a 2370 7269 6e74 2022 xt()).{.#print \"\n-00003410: 2474 202d 3e20 2466 5c6e 223b 0a0a 2020 $t -> $f\\n\";.. \n-00003420: 2020 6966 2028 2474 2065 7120 2766 2729 if ($t eq 'f')\n-00003430: 2020 2020 2023 206e 6f72 6d61 6c20 6669 # normal fi\n-00003440: 6c65 0a20 2020 207b 0a09 2473 7461 742d le. {..$stat-\n-00003450: 3e69 6e63 7252 6561 6428 293b 0a0a 096d >incrRead();...m\n-00003460: 7920 2824 6465 762c 2024 696e 6f64 652c y ($dev, $inode,\n-00003470: 2024 6d6f 6465 2c20 2475 6964 2c20 2467 $mode, $uid, $g\n-00003480: 6964 2c20 2473 697a 652c 2024 6174 696d id, $size, $atim\n-00003490: 652c 0a09 2020 2020 246d 7469 6d65 2c20 e,.. $mtime, \n-000034a0: 2463 7469 6d65 2920 3d20 2873 7461 7428 $ctime) = (stat(\n-000034b0: 2466 2929 5b30 2c31 2c32 2c34 2c35 2c37 $f))[0,1,2,4,5,7\n-000034c0: 2c38 2c39 2c31 305d 3b0a 096d 7920 2464 ,8,9,10];..my $d\n-000034d0: 6576 496e 6f64 6520 3d20 2224 6465 762d evInode = \"$dev-\n-000034e0: 2469 6e6f 6465 223b 0a0a 096e 6578 7420 $inode\";...next \n-000034f0: 6966 2065 7869 7374 7320 2469 6e6f 6465 if exists $inode\n-00003500: 326d 6435 7b24 6465 7649 6e6f 6465 7d3b 2md5{$devInode};\n-00003510: 2020 2320 616c 7265 6164 7920 7265 6164 # already read\n-00003520: 0a0a 096d 7920 246d 6435 203d 2026 3a3a ...my $md5 = &::\n-00003530: 6361 6c63 4d44 3528 2466 2c20 2470 724c calcMD5($f, $prL\n-00003540: 6f67 293b 0a09 756e 6c65 7373 2028 246d og);..unless ($m\n-00003550: 6435 290a 097b 0a09 2020 2020 2470 724c d5)..{.. $prL\n-00003560: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00003570: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-00003580: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-00003590: 636f 756c 6420 6e6f 7420 6361 6c63 756c could not calcul\n-000035a0: 6174 6520 6d64 3520 7375 6d20 6f66 203c ate md5 sum of <\n-000035b0: 2466 3e2c 2073 6b69 7070 696e 6722 5d29 $f>, skipping\"])\n-000035c0: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}.\n-000035d0: 0924 7374 6174 2d3e 696e 6372 4d64 3528 .$stat->incrMd5(\n-000035e0: 293b 0a09 6d79 2024 6d64 3573 697a 6520 );..my $md5size \n-000035f0: 3d20 2224 6d64 352d 2473 697a 6522 3b0a = \"$md5-$size\";.\n-00003600: 0924 696e 6f64 6532 6d64 357b 2464 6576 .$inode2md5{$dev\n-00003610: 496e 6f64 657d 203d 2024 6d64 3573 697a Inode} = $md5siz\n-00003620: 653b 0a0a 096d 7920 2824 6662 6173 652c e;...my ($fbase,\n-00003630: 2024 666e 616d 652c 2024 696e 6465 7829 $fname, $index)\n-00003640: 203d 2024 696e 6465 7844 6972 2d3e 6e65 = $indexDir->ne\n-00003650: 7746 696c 6528 2466 293b 0a09 246d 6435 wFile($f);..$md5\n-00003660: 3266 696c 657b 246d 6435 7369 7a65 7d20 2file{$md5size} \n-00003670: 3d20 2224 696e 6465 782f 2466 6e61 6d65 = \"$index/$fname\n-00003680: 223b 0a23 7072 696e 7420 225c 7424 6662 \";.#print \"\\t$fb\n-00003690: 6173 652c 2024 666e 616d 652c 2024 696e ase, $fname, $in\n-000036a0: 6465 7820 2824 6d64 3573 697a 6529 5c6e dex ($md5size)\\n\n-000036b0: 223b 0a20 2020 207d 0a20 2020 2065 6c73 \";. }. els\n-000036c0: 6966 2028 2474 2065 7120 276c 2729 2020 if ($t eq 'l') \n-000036d0: 2020 2023 2073 796d 626f 6c69 6320 6c69 # symbolic li\n-000036e0: 6e6b 0a20 2020 207b 0a09 2473 7461 742d nk. {..$stat-\n-000036f0: 3e69 6e63 7252 6561 6428 293b 0a09 0a09 >incrRead();....\n-00003700: 6d79 2028 2464 6576 2c20 2469 6e6f 6465 my ($dev, $inode\n-00003710: 2c20 246d 6f64 652c 2024 7569 642c 2024 , $mode, $uid, $\n-00003720: 6769 642c 2024 7369 7a65 2c20 2461 7469 gid, $size, $ati\n-00003730: 6d65 2c0a 0920 2020 2024 6d74 696d 652c me,.. $mtime,\n-00003740: 2024 6374 696d 6529 203d 2028 6c73 7461 $ctime) = (lsta\n-00003750: 7428 2466 2929 5b30 2c31 2c32 2c34 2c35 t($f))[0,1,2,4,5\n-00003760: 2c37 2c38 2c39 2c31 305d 3b0a 096d 7920 ,7,8,9,10];..my \n-00003770: 2464 6576 496e 6f64 6520 3d20 2224 6465 $devInode = \"$de\n-00003780: 762d 2469 6e6f 6465 223b 0a0a 096e 6578 v-$inode\";...nex\n-00003790: 7420 6966 2065 7869 7374 7320 2469 6e6f t if exists $ino\n-000037a0: 6465 326d 6435 7b24 6465 7649 6e6f 6465 de2md5{$devInode\n-000037b0: 7d3b 2020 2320 616c 7265 6164 7920 7265 }; # already re\n-000037c0: 6164 0a0a 096d 7920 246d 6435 203d 2026 ad...my $md5 = &\n-000037d0: 3a3a 7265 6164 5379 6d4c 696e 6b43 616c ::readSymLinkCal\n-000037e0: 634d 6435 2824 662c 2024 7072 4c6f 6729 cMd5($f, $prLog)\n-000037f0: 3b0a 0975 6e6c 6573 7320 2824 6d64 3529 ;..unless ($md5)\n-00003800: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog-\n-00003810: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003820: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n-00003830: 7227 203d 3e0a 0909 0920 205b 2263 6f75 r' =>.... [\"cou\n-00003840: 6c64 206e 6f74 2063 616c 6375 6c61 7465 ld not calculate\n-00003850: 206d 6435 2073 756d 206f 6620 7379 6d6c md5 sum of syml\n-00003860: 696e 6b20 3c24 663e 2c22 202e 0a09 0909 ink <$f>,\" .....\n-00003870: 2020 2022 2073 6b69 7070 696e 6722 5d29 \" skipping\"])\n-00003880: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}.\n-00003890: 0924 7374 6174 2d3e 696e 6372 4d64 3528 .$stat->incrMd5(\n-000038a0: 293b 0a09 6d79 2024 6d64 3573 697a 6520 );..my $md5size \n-000038b0: 3d20 224c 2d24 6d64 352d 2473 697a 6522 = \"L-$md5-$size\"\n-000038c0: 3b0a 0924 696e 6f64 6532 6d64 357b 2464 ;..$inode2md5{$d\n-000038d0: 6576 496e 6f64 657d 203d 2024 6d64 3573 evInode} = $md5s\n-000038e0: 697a 653b 0a0a 096d 7920 2824 6662 6173 ize;...my ($fbas\n-000038f0: 652c 2024 666e 616d 652c 2024 696e 6465 e, $fname, $inde\n-00003900: 7829 203d 2024 696e 6465 7844 6972 2d3e x) = $indexDir->\n-00003910: 6e65 7746 696c 6528 2466 293b 0a09 246d newFile($f);..$m\n-00003920: 6435 3266 696c 657b 246d 6435 7369 7a65 d52file{$md5size\n-00003930: 7d20 3d20 2224 696e 6465 782f 2466 6e61 } = \"$index/$fna\n-00003940: 6d65 223b 0a23 7072 696e 7420 225c 7453 me\";.#print \"\\tS\n-00003950: 796d 6c69 6e6b 3a20 2466 6261 7365 2c20 ymlink: $fbase, \n-00003960: 2466 6e61 6d65 2c20 2469 6e64 6578 2028 $fname, $index (\n-00003970: 246d 6435 7369 7a65 295c 6e22 3b0a 2020 $md5size)\\n\";. \n-00003980: 2020 7d0a 7d0a 2370 7269 6e74 2022 2d2d }.}.#print \"--\n-00003990: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000039a0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000039b0: 2d2d 2d2d 2d2d 2d2d 5c6e 223b 0a0a 2474 --------\\n\";..$t\n-000039c0: 6172 6765 7444 6972 203d 2026 3a3a 6162 argetDir = &::ab\n-000039d0: 736f 6c75 7465 5061 7468 2824 7461 7267 solutePath($targ\n-000039e0: 6574 4469 7229 3b0a 0a23 0a23 2063 6f70 etDir);..#.# cop\n-000039f0: 7920 2f20 6c69 6e6b 2040 736f 7572 6365 y / link @source\n-00003a00: 4469 720a 230a 2470 724c 6f67 2d3e 7072 Dir.#.$prLog->pr\n-00003a10: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00003a20: 4927 2c0a 0920 2020 2020 2027 2d73 7472 I',.. '-str\n-00003a30: 2720 3d3e 205b 2273 7461 7274 2063 6f70 ' => [\"start cop\n-00003a40: 7969 6e67 203c 2220 2e20 6a6f 696e 2827 ying <\" . join('\n-00003a50: 3e20 3c27 2c20 4073 6f75 7263 6544 6972 > <', @sourceDir\n-00003a60: 2920 2e20 273e 275d 293b 0a66 6f72 6561 ) . '>']);.forea\n-00003a70: 6368 206d 7920 2464 2028 4073 6f75 7263 ch my $d (@sourc\n-00003a80: 6544 6972 290a 7b0a 2370 7269 6e74 2022 eDir).{.#print \"\n-00003a90: 2d2d 2d24 642d 2d2d 5c6e 223b 0a20 2020 ---$d---\\n\";. \n-00003aa0: 206d 7920 2824 6469 722c 2024 6261 7365 my ($dir, $base\n-00003ab0: 4469 7229 203d 2026 3a3a 7370 6c69 7446 Dir) = &::splitF\n-00003ac0: 696c 6544 6972 2824 6429 3b0a 0a20 2020 ileDir($d);.. \n-00003ad0: 207b 0a09 6d79 2028 246d 6f64 652c 2024 {..my ($mode, $\n-00003ae0: 7569 642c 2024 6769 642c 2024 6174 696d uid, $gid, $atim\n-00003af0: 652c 2024 6d74 696d 6529 203d 2028 7374 e, $mtime) = (st\n-00003b00: 6174 2824 6429 295b 322c 342c 352c 382c at($d))[2,4,5,8,\n-00003b10: 395d 3b0a 0a09 756e 6c65 7373 2028 6d6b 9];...unless (mk\n-00003b20: 6469 7220 2224 7461 7267 6574 4469 722f dir \"$targetDir/\n-00003b30: 2462 6173 6544 6972 222c 2024 6d6f 6465 $baseDir\", $mode\n-00003b40: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog\n-00003b50: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00003b60: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n-00003b70: 7472 2720 3d3e 0a09 0909 2020 5b22 6361 tr' =>.... [\"ca\n-00003b80: 6e6e 6f74 2063 7265 6174 6520 6469 7265 nnot create dire\n-00003b90: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi\n-00003ba0: 722f 2462 6173 6544 6972 3e22 5d29 3b0a r/$baseDir>\"]);.\n-00003bb0: 0920 2020 2065 7869 7420 3120 756e 6c65 . exit 1 unle\n-00003bc0: 7373 2024 6967 6e6f 7265 4572 726f 7273 ss $ignoreErrors\n-00003bd0: 3b0a 097d 0a0a 0963 686f 776e 2024 7569 ;..}...chown $ui\n-00003be0: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, \"$targe\n-00003bf0: 7444 6972 2f24 6261 7365 4469 7222 3b0a tDir/$baseDir\";.\n-00003c00: 2309 7574 696d 6520 2461 7469 6d65 2c20 #.utime $atime, \n-00003c10: 246d 7469 6d65 2c20 2224 7461 7267 6574 $mtime, \"$target\n-00003c20: 4469 722f 2462 6173 6544 6972 223b 0a09 Dir/$baseDir\";..\n-00003c30: 6d79 2024 7772 203d 2022 2474 6172 6765 my $wr = \"$targe\n-00003c40: 7444 6972 2f24 6261 7365 4469 7222 3b0a tDir/$baseDir\";.\n-00003c50: 0924 7772 203d 7e20 732f 5c6e 2f5c 302f .$wr =~ s/\\n/\\0/\n-00003c60: 6f67 3b0a 0970 7269 6e74 2044 4952 4649 og;..print DIRFI\n-00003c70: 4c45 2022 2461 7469 6d65 2024 6d74 696d LE \"$atime $mtim\n-00003c80: 6520 246d 6f64 6520 2477 725c 6e22 3b0a e $mode $wr\\n\";.\n-00003c90: 0924 7374 6174 2d3e 696e 6372 4469 7228 .$stat->incrDir(\n-00003ca0: 293b 0a20 2020 207d 0a0a 2020 2020 2472 );. }.. $r\n-00003cb0: 7264 203d 2072 6563 7572 7369 7665 5265 rd = recursiveRe\n-00003cc0: 6164 4469 722d 3e6e 6577 2827 2d64 6972 adDir->new('-dir\n-00003cd0: 7327 203d 3e20 5b24 645d 2c0a 0909 0909 s' => [$d],.....\n-00003ce0: 2027 2d70 7269 6e74 4465 7074 6827 203d '-printDepth' =\n-00003cf0: 3e20 2470 7269 6e74 4465 7074 682c 0a09 > $printDepth,..\n-00003d00: 0909 0920 272d 7072 696e 7444 6570 7468 ... '-printDepth\n-00003d10: 5072 6c6f 674b 696e 6427 203d 3e20 2750 PrlogKind' => 'P\n-00003d20: 272c 0a09 0909 0920 272d 7072 4c6f 6727 ',..... '-prLog'\n-00003d30: 203d 3e20 2470 724c 6f67 293b 0a20 2020 => $prLog);. \n-00003d40: 2077 6869 6c65 2028 2824 662c 2024 7429 while (($f, $t)\n-00003d50: 203d 2024 7272 642d 3e6e 6578 7428 2929 = $rrd->next())\n-00003d60: 0a20 2020 207b 0a09 6d79 2024 7265 6c50 . {..my $relP\n-00003d70: 6174 6820 3d20 263a 3a73 7562 7374 7261 ath = &::substra\n-00003d80: 6374 5061 7468 2824 662c 2024 6429 3b0a ctPath($f, $d);.\n-00003d90: 096d 7920 2466 6e65 7720 3d20 2224 7461 .my $fnew = \"$ta\n-00003da0: 7267 6574 4469 722f 2462 6173 6544 6972 rgetDir/$baseDir\n-00003db0: 2f24 7265 6c50 6174 6822 3b0a 2370 7269 /$relPath\";.#pri\n-00003dc0: 6e74 2022 2474 202d 3e20 2466 202d 3e20 nt \"$t -> $f -> \n-00003dd0: 2466 6e65 775c 6e22 3b0a 0a09 6d79 2024 $fnew\\n\";...my $\n-00003de0: 6c69 6e6b 5379 6d6c 696e 6b73 203d 2031 linkSymlinks = 1\n-00003df0: 3b0a 0924 6c69 6e6b 5379 6d6c 696e 6b73 ;..$linkSymlinks\n-00003e00: 203d 2030 0a09 2020 2020 6966 2028 2474 = 0.. if ($t\n-00003e10: 2065 7120 276c 2720 616e 6420 2464 6f6e eq 'l' and $don\n-00003e20: 744c 696e 6b53 796d 6c69 6e6b 7329 3b0a tLinkSymlinks);.\n-00003e30: 2370 7269 6e74 2022 6c69 6e6b 5379 6d6c #print \"linkSyml\n-00003e40: 696e 6b73 203d 2024 6c69 6e6b 5379 6d6c inks = $linkSyml\n-00003e50: 696e 6b73 5c6e 223b 0a0a 0969 6620 2824 inks\\n\";...if ($\n-00003e60: 7420 6571 2027 6427 2920 2020 2020 2020 t eq 'd') \n-00003e70: 2320 6469 7265 6374 6f72 790a 097b 0a09 # directory..{..\n-00003e80: 2020 2020 6d79 2028 246d 6f64 652c 2024 my ($mode, $\n-00003e90: 7569 642c 2024 6769 642c 2024 6174 696d uid, $gid, $atim\n-00003ea0: 652c 2024 6d74 696d 6529 203d 0a09 0928 e, $mtime) =...(\n-00003eb0: 7374 6174 2824 6629 295b 322c 342c 352c stat($f))[2,4,5,\n-00003ec0: 382c 395d 3b0a 0920 2020 2075 6e6c 6573 8,9];.. unles\n-00003ed0: 7320 286d 6b64 6972 2024 666e 6577 290a s (mkdir $fnew).\n-00003ee0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog-\n-00003ef0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003f00: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... \n-00003f10: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... \n-00003f20: 2020 205b 2263 616e 6e6f 7420 6372 6561 [\"cannot crea\n-00003f30: 7465 2064 6972 6563 746f 7279 203c 2466 te directory <$f\n-00003f40: 6e65 773e 225d 293b 0a09 0965 7869 7420 new>\"]);...exit \n-00003f50: 3120 756e 6c65 7373 2024 6967 6e6f 7265 1 unless $ignore\n-00003f60: 4572 726f 7273 3b0a 0920 2020 207d 0a09 Errors;.. }..\n-00003f70: 2020 2020 6368 6f77 6e20 2475 6964 2c20 chown $uid, \n-00003f80: 2467 6964 2c20 2224 666e 6577 223b 0a09 $gid, \"$fnew\";..\n-00003f90: 2020 2020 6d79 2024 7772 203d 2024 666e my $wr = $fn\n-00003fa0: 6577 3b0a 0920 2020 2024 7772 203d 7e20 ew;.. $wr =~ \n-00003fb0: 732f 5c6e 2f5c 302f 6f67 3b0a 0920 2020 s/\\n/\\0/og;.. \n-00003fc0: 2070 7269 6e74 2044 4952 4649 4c45 2022 print DIRFILE \"\n-00003fd0: 2461 7469 6d65 2024 6d74 696d 6520 246d $atime $mtime $m\n-00003fe0: 6f64 6520 2477 725c 6e22 3b0a 0920 2020 ode $wr\\n\";.. \n-00003ff0: 2024 7374 6174 2d3e 696e 6372 4469 7228 $stat->incrDir(\n-00004000: 293b 0a09 7d0a 0965 6c73 6966 2028 2474 );..}..elsif ($t\n-00004010: 2065 7120 2766 2720 6f72 2024 7420 6571 eq 'f' or $t eq\n-00004020: 2027 6c27 2920 2023 206e 6f72 6d61 6c20 'l') # normal \n-00004030: 6669 6c65 206f 7220 7379 6d6c 696e 6b0a file or symlink.\n-00004040: 097b 0a09 2020 2020 6d79 2028 2464 6576 .{.. my ($dev\n-00004050: 2c20 2469 6e6f 6465 2c20 246d 6f64 652c , $inode, $mode,\n-00004060: 2024 7569 642c 2024 6769 642c 2024 7369 $uid, $gid, $si\n-00004070: 7a65 2c20 2461 7469 6d65 2c0a 0909 246d ze, $atime,...$m\n-00004080: 7469 6d65 2c20 2463 7469 6d65 2c20 2462 time, $ctime, $b\n-00004090: 6c6f 636b 7329 3b0a 0920 2020 2069 6620 locks);.. if \n-000040a0: 2824 7420 6571 2027 6627 290a 0920 2020 ($t eq 'f').. \n-000040b0: 207b 0a09 0928 2464 6576 2c20 2469 6e6f {...($dev, $ino\n-000040c0: 6465 2c20 246d 6f64 652c 2024 7569 642c de, $mode, $uid,\n-000040d0: 2024 6769 642c 2024 7369 7a65 2c20 2461 $gid, $size, $a\n-000040e0: 7469 6d65 2c0a 0909 246d 7469 6d65 2c20 time,...$mtime, \n-000040f0: 2463 7469 6d65 2c20 2462 6c6f 636b 7329 $ctime, $blocks)\n-00004100: 203d 2028 7374 6174 2824 6629 295b 302c = (stat($f))[0,\n-00004110: 312c 322c 342c 352c 372c 382c 392c 3130 1,2,4,5,7,8,9,10\n-00004120: 2c31 325d 3b0a 0920 2020 207d 0a09 2020 ,12];.. }.. \n-00004130: 2020 656c 7369 6620 2824 7420 6571 2027 elsif ($t eq '\n-00004140: 6c27 290a 0920 2020 207b 0a09 0928 2464 l').. {...($d\n-00004150: 6576 2c20 2469 6e6f 6465 2c20 246d 6f64 ev, $inode, $mod\n-00004160: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $\n-00004170: 7369 7a65 2c20 2461 7469 6d65 2c0a 0909 size, $atime,...\n-00004180: 246d 7469 6d65 2c20 2463 7469 6d65 2920 $mtime, $ctime) \n-00004190: 3d20 286c 7374 6174 2824 6629 295b 302c = (lstat($f))[0,\n-000041a0: 312c 322c 342c 352c 372c 382c 392c 3130 1,2,4,5,7,8,9,10\n-000041b0: 5d3b 0a09 2020 2020 7d0a 0a09 2020 2020 ];.. }... \n-000041c0: 6d79 2024 6465 7649 6e6f 6465 203d 2022 my $devInode = \"\n-000041d0: 2464 6576 2d24 696e 6f64 6522 3b0a 0a09 $dev-$inode\";...\n-000041e0: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $\n-000041f0: 696e 6f64 6532 6d64 357b 2464 6576 496e inode2md5{$devIn\n-00004200: 6f64 657d 2920 2023 2068 6172 6420 6c69 ode}) # hard li\n-00004210: 6e6b 2061 6c72 6561 6479 2072 6561 640a nk already read.\n-00004220: 0920 2020 207b 0a09 096d 7920 246d 6435 . {...my $md5\n-00004230: 7369 7a65 203d 2024 696e 6f64 6532 6d64 size = $inode2md\n-00004240: 357b 2464 6576 496e 6f64 657d 3b0a 0909 5{$devInode};...\n-00004250: 0a09 096d 7920 2469 4669 6c65 203d 2024 ...my $iFile = $\n-00004260: 6d64 3532 6669 6c65 7b24 6d64 3573 697a md52file{$md5siz\n-00004270: 657d 3b0a 0a09 096d 7920 2466 6f75 6e64 e};....my $found\n-00004280: 4669 6c65 203d 2024 696e 6465 7844 6972 File = $indexDir\n-00004290: 2d3e 7265 706c 6163 6549 6e64 6578 2824 ->replaceIndex($\n-000042a0: 6946 696c 6529 3b0a 0a23 7072 696e 7420 iFile);..#print \n-000042b0: 225c 746c 696e 6b20 2831 2920 2466 6f75 \"\\tlink (1) $fou\n-000042c0: 6e64 4669 6c65 203d 3e20 2466 6e65 775c ndFile => $fnew\\\n-000042d0: 6e22 3b0a 0a0a 0920 2020 206d 7920 2468 n\";.... my $h\n-000042e0: 6c20 3d20 2d31 3b0a 0920 2020 2069 6620 l = -1;.. if \n-000042f0: 2824 6d61 7848 6172 644c 696e 6b73 203e ($maxHardLinks >\n-00004300: 2030 290a 0920 2020 207b 0a09 0924 686c 0).. {...$hl\n-00004310: 203d 2028 7374 6174 2824 666f 756e 6446 = (stat($foundF\n-00004320: 696c 6529 295b 335d 3b0a 0909 6966 2028 ile))[3];...if (\n-00004330: 2474 2065 7120 276c 2729 2020 2023 2073 $t eq 'l') # s\n-00004340: 796d 6c69 6e6b 0a09 097b 0a09 0920 2020 ymlink...{... \n-00004350: 2024 686c 203d 2028 6c73 7461 7428 2466 $hl = (lstat($f\n-00004360: 6f75 6e64 4669 6c65 2929 5b33 5d3b 0a09 oundFile))[3];..\n-00004370: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{...\n-00004380: 2020 2020 2468 6c20 3d20 2873 7461 7428 $hl = (stat(\n-00004390: 2466 6f75 6e64 4669 6c65 2929 5b33 5d3b $foundFile))[3];\n-000043a0: 0a09 097d 0a23 7072 696e 7420 2224 666f ...}.#print \"$fo\n-000043b0: 756e 6446 696c 653a 2024 686c 2068 6172 undFile: $hl har\n-000043c0: 646c 696e 6b73 2028 246d 6178 4861 7264 dlinks ($maxHard\n-000043d0: 4c69 6e6b 7329 5c6e 223b 0a09 2020 2020 Links)\\n\";.. \n-000043e0: 7d0a 0920 2020 2069 6620 2824 686c 203c }.. if ($hl <\n-000043f0: 2024 6d61 7848 6172 644c 696e 6b73 2061 $maxHardLinks a\n-00004400: 6e64 206e 6f74 0a09 0928 246c 696e 6b53 nd not...($linkS\n-00004410: 796d 6c69 6e6b 7320 616e 6420 6c69 6e6b ymlinks and link\n-00004420: 2024 666f 756e 6446 696c 652c 2024 666e $foundFile, $fn\n-00004430: 6577 2929 0a23 0909 756e 6c65 7373 2028 ew)).#..unless (\n-00004440: 246c 696e 6b53 796d 6c69 6e6b 7320 616e $linkSymlinks an\n-00004450: 6420 6c69 6e6b 2024 666f 756e 6446 696c d link $foundFil\n-00004460: 652c 2024 666e 6577 290a 0a0a 0909 7b0a e, $fnew).....{.\n-00004470: 2370 7269 6e74 2022 5c74 5c74 2121 2163 #print \"\\t\\t!!!c\n-00004480: 6f70 7920 2466 203d 3e24 666e 6577 5c6e opy $f =>$fnew\\n\n-00004490: 223b 0a09 0920 2020 206d 7920 2824 6662 \";... my ($fb\n-000044a0: 6173 652c 2024 666e 616d 652c 2024 696e ase, $fname, $in\n-000044b0: 6465 7829 203d 2024 696e 6465 7844 6972 dex) = $indexDir\n-000044c0: 2d3e 6e65 7746 696c 6528 2466 6e65 7729 ->newFile($fnew)\n-000044d0: 3b0a 0909 2020 2020 246d 6435 3266 696c ;... $md52fil\n-000044e0: 657b 246d 6435 7369 7a65 7d20 3d20 2224 e{$md5size} = \"$\n-000044f0: 696e 6465 782f 2466 6e61 6d65 223b 0a0a index/$fname\";..\n-00004500: 0909 2020 2020 6966 2028 2474 2065 7120 .. if ($t eq \n-00004510: 2766 2729 0a09 0920 2020 207b 0a23 0909 'f')... {.#..\n-00004520: 0975 6e6c 6573 7320 2826 3a3a 636f 7079 .unless (&::copy\n-00004530: 4669 6c65 2824 662c 2024 666e 6577 2c20 File($f, $fnew, \n-00004540: 2470 724c 6f67 2929 0a09 0909 756e 6c65 $prLog))....unle\n-00004550: 7373 2028 263a 3a63 6865 636b 5370 6172 ss (&::checkSpar\n-00004560: 7365 416e 6443 6f70 7946 696c 6573 280a seAndCopyFiles(.\n-00004570: 0909 0909 2020 2020 2020 2024 662c 2024 .... $f, $\n-00004580: 666e 6577 2c20 2470 724c 6f67 2c20 2473 fnew, $prLog, $s\n-00004590: 697a 652c 0a09 0909 0920 2020 2020 2020 ize,..... \n-000045a0: 2462 6c6f 636b 732c 2024 6372 6561 7465 $blocks, $create\n-000045b0: 5370 6172 7365 4669 6c65 732c 0a09 0909 SparseFiles,....\n-000045c0: 0920 2020 2020 2020 2462 6c6f 636b 5369 . $blockSi\n-000045d0: 7a65 2c20 2474 6d70 6469 7229 290a 0909 ze, $tmpdir))...\n-000045e0: 097b 0a09 0909 2020 2020 2470 724c 6f67 .{.... $prLog\n-000045f0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00004600: 3d3e 2027 4527 2c0a 0909 0909 0920 2027 => 'E',...... '\n-00004610: 2d73 7472 2720 3d3e 0a09 0909 0909 2020 -str' =>...... \n-00004620: 5b22 6361 6e6e 6f74 2063 6f70 7920 3c24 [\"cannot copy <$\n-00004630: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to \" ....... \n-00004640: 2020 223c 2466 6e65 773e 225d 293b 0a09 \"<$fnew>\"]);..\n-00004650: 0909 2020 2020 6578 6974 2031 2075 6e6c .. exit 1 unl\n-00004660: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError\n-00004670: 733b 0a09 0909 7d0a 0909 2020 2020 7d0a s;....}... }.\n-00004680: 0909 2020 2020 656c 7369 6620 2824 7420 .. elsif ($t \n-00004690: 6571 2027 6c27 290a 0909 2020 2020 7b0a eq 'l')... {.\n-000046a0: 0909 0975 6e6c 6573 7320 2826 3a3a 636f ...unless (&::co\n-000046b0: 7079 5379 6d4c 696e 6b28 2466 2c20 2466 pySymLink($f, $f\n-000046c0: 6e65 7729 290a 0909 097b 0a09 0909 2020 new))....{.... \n-000046d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-000046e0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-000046f0: 0909 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n-00004700: 0a09 0909 0909 2020 5b22 6361 6e6e 6f74 ...... [\"cannot\n-00004710: 2063 6f70 7920 7379 6d6c 696e 6b20 3c24 copy symlink <$\n-00004720: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to \" ....... \n-00004730: 2020 223c 2466 6e65 773e 225d 293b 0a09 \"<$fnew>\"]);..\n-00004740: 0909 2020 2020 6578 6974 2031 2075 6e6c .. exit 1 unl\n-00004750: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError\n-00004760: 733b 0a09 0909 7d0a 0909 2020 2020 7d0a s;....}... }.\n-00004770: 0909 2020 2020 2473 7461 742d 3e69 6e63 .. $stat->inc\n-00004780: 7243 6f70 7928 293b 0a09 097d 0a09 0965 rCopy();...}...e\n-00004790: 6c73 650a 0909 7b0a 0909 2020 2020 2473 lse...{... $s\n-000047a0: 7461 742d 3e69 6e63 724c 696e 6b28 293b tat->incrLink();\n-000047b0: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. \n-000047c0: 2065 6c73 6520 2020 2020 2320 6361 6e6e else # cann\n-000047d0: 6f74 2066 696e 6420 7361 6d65 2068 6172 ot find same har\n-000047e0: 6420 6c69 6e6b 0a09 2020 2020 7b0a 0909 d link.. {...\n-000047f0: 6d79 2024 6d64 3573 697a 653b 0a09 0969 my $md5size;...i\n-00004800: 6620 2824 7420 6571 2027 6627 290a 0909 f ($t eq 'f')...\n-00004810: 7b0a 0909 2020 2020 6d79 2024 6d64 3520 {... my $md5 \n-00004820: 3d20 263a 3a63 616c 634d 4435 2824 662c = &::calcMD5($f,\n-00004830: 2024 7072 4c6f 6729 3b0a 0909 2020 2020 $prLog);... \n-00004840: 756e 6c65 7373 2028 246d 6435 290a 0909 unless ($md5)...\n-00004850: 2020 2020 7b0a 0909 0924 7072 4c6f 672d {....$prLog-\n-00004860: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00004870: 3e20 2745 272c 0a09 0909 0920 2020 2020 > 'E',..... \n-00004880: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n-00004890: 2020 2020 205b 2263 6f75 6c64 206e 6f74 [\"could not\n-000048a0: 2063 616c 6375 6c61 7465 206d 6435 2073 calculate md5 s\n-000048b0: 756d 206f 6620 3c24 663e 2c20 736b 6970 um of <$f>, skip\n-000048c0: 7069 6e67 225d 293b 0a09 0909 6e65 7874 ping\"]);....next\n-000048d0: 3b0a 0909 2020 2020 7d0a 0909 2020 2020 ;... }... \n-000048e0: 246d 6435 7369 7a65 203d 2022 246d 6435 $md5size = \"$md5\n-000048f0: 2d24 7369 7a65 223b 0a09 097d 0a09 0965 -$size\";...}...e\n-00004900: 6c73 6966 2028 2474 2065 7120 276c 2729 lsif ($t eq 'l')\n-00004910: 0a09 097b 0a09 0920 2020 206d 7920 246d ...{... my $m\n-00004920: 6435 203d 2026 3a3a 7265 6164 5379 6d4c d5 = &::readSymL\n-00004930: 696e 6b43 616c 634d 6435 2824 662c 2024 inkCalcMd5($f, $\n-00004940: 7072 4c6f 6729 3b0a 0909 2020 2020 756e prLog);... un\n-00004950: 6c65 7373 2028 246d 6435 290a 0909 2020 less ($md5)... \n-00004960: 2020 7b0a 0909 0924 7072 4c6f 672d 3e70 {....$prLog->p\n-00004970: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00004980: 2745 272c 0a09 0909 0920 2020 2020 2027 'E',..... '\n-00004990: 2d73 7472 2720 3d3e 0a09 0909 0920 2020 -str' =>..... \n-000049a0: 2020 205b 2263 6f75 6c64 206e 6f74 2063 [\"could not c\n-000049b0: 616c 6375 6c61 7465 206d 6435 2073 756d alculate md5 sum\n-000049c0: 206f 6620 7379 6d6c 696e 6b20 3c24 663e of symlink <$f>\n-000049d0: 2c22 202e 0a09 0909 0920 2020 2020 2020 ,\" ...... \n-000049e0: 2220 736b 6970 7069 6e67 225d 293b 0a09 \" skipping\"]);..\n-000049f0: 0909 6e65 7874 3b0a 0909 2020 2020 7d0a ..next;... }.\n-00004a00: 0909 2020 2020 246d 6435 7369 7a65 203d .. $md5size =\n-00004a10: 2022 4c2d 246d 6435 2d24 7369 7a65 223b \"L-$md5-$size\";\n-00004a20: 0a09 097d 0a0a 0909 2473 7461 742d 3e69 ...}....$stat->i\n-00004a30: 6e63 724d 6435 2829 3b0a 0909 2469 6e6f ncrMd5();...$ino\n-00004a40: 6465 326d 6435 7b24 6465 7649 6e6f 6465 de2md5{$devInode\n-00004a50: 7d20 3d20 246d 6435 7369 7a65 3b0a 0a09 } = $md5size;...\n-00004a60: 0969 6620 2865 7869 7374 7320 246d 6435 .if (exists $md5\n-00004a70: 3266 696c 657b 246d 6435 7369 7a65 7d29 2file{$md5size})\n-00004a80: 2020 2023 2066 6f75 6e64 2073 616d 6520 # found same \n-00004a90: 6669 6c65 0a09 097b 0a09 0920 2020 206d file...{... m\n-00004aa0: 7920 2469 4669 6c65 203d 2024 6d64 3532 y $iFile = $md52\n-00004ab0: 6669 6c65 7b24 6d64 3573 697a 657d 3b0a file{$md5size};.\n-00004ac0: 0909 2020 2020 6d79 2024 666f 756e 6446 .. my $foundF\n-00004ad0: 696c 6520 3d20 2469 6e64 6578 4469 722d ile = $indexDir-\n-00004ae0: 3e72 6570 6c61 6365 496e 6465 7828 2469 >replaceIndex($i\n-00004af0: 4669 6c65 293b 0a0a 2370 7269 6e74 2022 File);..#print \"\n-00004b00: 5c74 6c69 6e6b 2028 3229 2024 666f 756e \\tlink (2) $foun\n-00004b10: 6446 696c 6520 3d3e 2024 666e 6577 5c6e dFile => $fnew\\n\n-00004b20: 223b 0a0a 0a09 2020 2020 6d79 2024 686c \";.... my $hl\n-00004b30: 203d 202d 313b 0a09 2020 2020 6966 2028 = -1;.. if (\n-00004b40: 246d 6178 4861 7264 4c69 6e6b 7320 3e20 $maxHardLinks > \n-00004b50: 3029 0a09 2020 2020 7b0a 0909 6966 2028 0).. {...if (\n-00004b60: 2474 2065 7120 276c 2729 2020 2023 2073 $t eq 'l') # s\n-00004b70: 796d 6c69 6e6b 0a09 097b 0a09 0920 2020 ymlink...{... \n-00004b80: 2024 686c 203d 2028 6c73 7461 7428 2466 $hl = (lstat($f\n-00004b90: 6f75 6e64 4669 6c65 2929 5b33 5d3b 0a09 oundFile))[3];..\n-00004ba0: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{...\n-00004bb0: 2020 2020 2468 6c20 3d20 2873 7461 7428 $hl = (stat(\n-00004bc0: 2466 6f75 6e64 4669 6c65 2929 5b33 5d3b $foundFile))[3];\n-00004bd0: 0a09 097d 0a23 7072 696e 7420 2224 666f ...}.#print \"$fo\n-00004be0: 756e 6446 696c 653a 2024 686c 2068 6172 undFile: $hl har\n-00004bf0: 646c 696e 6b73 2028 246d 6178 4861 7264 dlinks ($maxHard\n-00004c00: 4c69 6e6b 7329 5c6e 223b 0a09 2020 2020 Links)\\n\";.. \n-00004c10: 7d0a 0920 2020 2069 6620 2824 686c 203c }.. if ($hl <\n-00004c20: 2024 6d61 7848 6172 644c 696e 6b73 2061 $maxHardLinks a\n-00004c30: 6e64 206e 6f74 0a09 0928 246c 696e 6b53 nd not...($linkS\n-00004c40: 796d 6c69 6e6b 7320 616e 6420 6c69 6e6b ymlinks and link\n-00004c50: 2024 666f 756e 6446 696c 652c 2024 666e $foundFile, $fn\n-00004c60: 6577 2929 0a23 0909 756e 6c65 7373 2028 ew)).#..unless (\n-00004c70: 246c 696e 6b53 796d 6c69 6e6b 7320 616e $linkSymlinks an\n-00004c80: 6420 6c69 6e6b 2024 666f 756e 6446 696c d link $foundFil\n-00004c90: 652c 2024 666e 6577 290a 0a0a 0909 2020 e, $fnew)..... \n-00004ca0: 2020 7b0a 2370 7269 6e74 2022 5c74 5c74 {.#print \"\\t\\t\n-00004cb0: 2121 2163 6f70 7920 2466 203d 3e24 666e !!!copy $f =>$fn\n-00004cc0: 6577 5c6e 223b 0a09 0909 6d79 2028 2466 ew\\n\";....my ($f\n-00004cd0: 6261 7365 2c20 2466 6e61 6d65 2c20 2469 base, $fname, $i\n-00004ce0: 6e64 6578 2920 3d20 2469 6e64 6578 4469 ndex) = $indexDi\n-00004cf0: 722d 3e6e 6577 4669 6c65 2824 666e 6577 r->newFile($fnew\n-00004d00: 293b 0a09 0909 246d 6435 3266 696c 657b );....$md52file{\n-00004d10: 246d 6435 7369 7a65 7d20 3d20 2224 696e $md5size} = \"$in\n-00004d20: 6465 782f 2466 6e61 6d65 223b 0a0a 0909 dex/$fname\";....\n-00004d30: 0969 6620 2824 7420 6571 2027 6627 290a .if ($t eq 'f').\n-00004d40: 0909 097b 0a23 0909 0920 2020 2075 6e6c ...{.#... unl\n-00004d50: 6573 7320 2826 3a3a 636f 7079 4669 6c65 ess (&::copyFile\n-00004d60: 2824 662c 2024 666e 6577 2c20 2470 724c ($f, $fnew, $prL\n-00004d70: 6f67 2929 0a09 0909 2020 2020 756e 6c65 og)).... unle\n-00004d80: 7373 2028 263a 3a63 6865 636b 5370 6172 ss (&::checkSpar\n-00004d90: 7365 416e 6443 6f70 7946 696c 6573 280a seAndCopyFiles(.\n-00004da0: 0909 0909 0920 2020 2466 2c20 2466 6e65 ..... $f, $fne\n-00004db0: 772c 2024 7072 4c6f 672c 2024 7369 7a65 w, $prLog, $size\n-00004dc0: 2c0a 0909 0909 0920 2020 2462 6c6f 636b ,...... $block\n-00004dd0: 732c 2024 6372 6561 7465 5370 6172 7365 s, $createSparse\n-00004de0: 4669 6c65 732c 0a09 0909 0909 2020 2024 Files,...... $\n-00004df0: 626c 6f63 6b53 697a 652c 2024 746d 7064 blockSize, $tmpd\n-00004e00: 6972 2929 0a09 0909 2020 2020 7b0a 0909 ir)).... {...\n-00004e10: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00004e20: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00004e30: 0909 0909 0920 2020 2020 2027 2d73 7472 ..... '-str\n-00004e40: 2720 3d3e 0a09 0909 0909 2020 2020 2020 ' =>...... \n-00004e50: 5b22 6361 6e6e 6f74 2063 6f70 7920 3c24 [\"cannot copy <$\n-00004e60: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to \" ....... \n-00004e70: 2020 2020 2020 223c 2466 6e65 773e 225d \"<$fnew>\"]\n-00004e80: 293b 0a09 0909 0965 7869 7420 3120 756e );.....exit 1 un\n-00004e90: 6c65 7373 2024 6967 6e6f 7265 4572 726f less $ignoreErro\n-00004ea0: 7273 3b0a 0909 0920 2020 207d 0a09 0909 rs;.... }....\n-00004eb0: 7d0a 0909 0965 6c73 6966 2028 2474 2065 }....elsif ($t e\n-00004ec0: 7120 276c 2729 0a09 0909 7b0a 0909 0920 q 'l')....{.... \n-00004ed0: 2020 2075 6e6c 6573 7320 2826 3a3a 636f unless (&::co\n-00004ee0: 7079 5379 6d4c 696e 6b28 2466 2c20 2466 pySymLink($f, $f\n-00004ef0: 6e65 7729 290a 0909 0920 2020 207b 0a09 new)).... {..\n-00004f00: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00004f10: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00004f20: 0a09 0909 0909 2020 2020 2020 272d 7374 ...... '-st\n-00004f30: 7227 203d 3e0a 0909 0909 0920 2020 2020 r' =>...... \n-00004f40: 205b 2263 616e 6e6f 7420 636f 7079 2073 [\"cannot copy s\n-00004f50: 796d 6c69 6e6b 203c 2466 3e20 746f 2022 ymlink <$f> to \"\n-00004f60: 202e 0a09 0909 0909 2020 2020 2020 2022 ....... \"\n-00004f70: 3c24 666e 6577 3e22 5d29 3b0a 0909 0909 <$fnew>\"]);.....\n-00004f80: 6578 6974 2031 2075 6e6c 6573 7320 2469 exit 1 unless $i\n-00004f90: 676e 6f72 6545 7272 6f72 733b 0a09 0909 gnoreErrors;....\n-00004fa0: 2020 2020 7d0a 0909 097d 0a09 0909 2473 }....}....$s\n-00004fb0: 7461 742d 3e69 6e63 7243 6f70 7928 293b tat->incrCopy();\n-00004fc0: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e\n-00004fd0: 6c73 650a 0909 2020 2020 7b0a 0909 0924 lse... {....$\n-00004fe0: 7374 6174 2d3e 696e 6372 4c69 6e6b 2829 stat->incrLink()\n-00004ff0: 3b0a 0909 2020 2020 7d0a 0909 7d0a 0909 ;... }...}...\n-00005000: 656c 7365 2020 2020 2320 6e65 7720 6669 else # new fi\n-00005010: 6c65 0a09 097b 0a09 0920 2020 206d 7920 le...{... my \n-00005020: 2824 6662 6173 652c 2024 666e 616d 652c ($fbase, $fname,\n-00005030: 2024 696e 6465 7829 203d 2024 696e 6465 $index) = $inde\n-00005040: 7844 6972 2d3e 6e65 7746 696c 6528 2466 xDir->newFile($f\n-00005050: 6e65 7729 3b0a 0909 2020 2020 246d 6435 new);... $md5\n-00005060: 3266 696c 657b 246d 6435 7369 7a65 7d20 2file{$md5size} \n-00005070: 3d20 2224 696e 6465 782f 2466 6e61 6d65 = \"$index/$fname\n-00005080: 223b 0a0a 2370 7269 6e74 2022 5c74 636f \";..#print \"\\tco\n-00005090: 7079 2024 6620 3d3e 2466 6e65 775c 6e22 py $f =>$fnew\\n\"\n-000050a0: 3b0a 0909 2020 2020 6966 2028 2474 2065 ;... if ($t e\n-000050b0: 7120 2766 2729 0a09 0920 2020 207b 0a23 q 'f')... {.#\n-000050c0: 0909 0975 6e6c 6573 7320 2826 3a3a 636f ...unless (&::co\n-000050d0: 7079 4669 6c65 2824 662c 2024 666e 6577 pyFile($f, $fnew\n-000050e0: 2c20 2470 724c 6f67 2929 0a09 0909 756e , $prLog))....un\n-000050f0: 6c65 7373 2028 263a 3a63 6865 636b 5370 less (&::checkSp\n-00005100: 6172 7365 416e 6443 6f70 7946 696c 6573 arseAndCopyFiles\n-00005110: 280a 0909 0909 2020 2020 2020 2024 662c (..... $f,\n-00005120: 2024 666e 6577 2c20 2470 724c 6f67 2c20 $fnew, $prLog, \n-00005130: 2473 697a 652c 0a09 0909 0920 2020 2020 $size,..... \n-00005140: 2020 2462 6c6f 636b 732c 2024 6372 6561 $blocks, $crea\n-00005150: 7465 5370 6172 7365 4669 6c65 732c 0a09 teSparseFiles,..\n-00005160: 0909 0920 2020 2020 2020 2462 6c6f 636b ... $block\n-00005170: 5369 7a65 2c20 2474 6d70 6469 7229 290a Size, $tmpdir)).\n-00005180: 0909 097b 0a09 0909 2020 2020 2470 724c ...{.... $prL\n-00005190: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000051a0: 2720 3d3e 2027 4527 2c0a 0909 0909 0920 ' => 'E',...... \n-000051b0: 2027 2d73 7472 2720 3d3e 0a09 0909 0909 '-str' =>......\n-000051c0: 2020 5b22 6361 6e6e 6f74 2063 6f70 7920 [\"cannot copy \n-000051d0: 3c24 663e 2074 6f20 2220 2e0a 0909 0909 <$f> to \" ......\n-000051e0: 0920 2020 223c 2466 6e65 773e 225d 293b . \"<$fnew>\"]);\n-000051f0: 0a09 0909 0965 7869 7420 3120 756e 6c65 .....exit 1 unle\n-00005200: 7373 2024 6967 6e6f 7265 4572 726f 7273 ss $ignoreErrors\n-00005210: 3b0a 0909 0920 2020 207d 0a09 0920 2020 ;.... }... \n-00005220: 207d 0a09 0920 2020 2065 6c73 6966 2028 }... elsif (\n-00005230: 2474 2065 7120 276c 2729 0a09 0920 2020 $t eq 'l')... \n-00005240: 207b 0a09 0909 756e 6c65 7373 2028 263a {....unless (&:\n-00005250: 3a63 6f70 7953 796d 4c69 6e6b 2824 662c :copySymLink($f,\n-00005260: 2024 666e 6577 2929 0a09 0909 7b0a 0909 $fnew))....{...\n-00005270: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00005280: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00005290: 272c 0a09 0909 0909 2020 272d 7374 7227 ',...... '-str'\n-000052a0: 203d 3e0a 0909 0909 0920 205b 2263 616e =>...... [\"can\n-000052b0: 6e6f 7420 636f 7079 2073 796d 6c69 6e6b not copy symlink\n-000052c0: 203c 2466 3e20 746f 2022 202e 0a09 0909 <$f> to \" .....\n-000052d0: 0909 2020 2022 3c24 666e 6577 3e22 5d29 .. \"<$fnew>\"])\n-000052e0: 3b0a 0909 0909 6578 6974 2031 2075 6e6c ;.....exit 1 unl\n-000052f0: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError\n-00005300: 733b 0a09 0909 2020 2020 7d0a 0909 2020 s;.... }... \n-00005310: 2020 7d0a 0909 2020 2020 2473 7461 742d }... $stat-\n-00005320: 3e69 6e63 7243 6f70 7928 293b 0a09 097d >incrCopy();...}\n-00005330: 0a09 2020 2020 7d0a 0920 2020 2069 6620 .. }.. if \n-00005340: 2824 7420 6571 2027 6c27 2920 2020 2020 ($t eq 'l') \n-00005350: 2023 2073 796d 626f 6c69 6320 6c69 6e6b # symbolic link\n-00005360: 0a09 2020 2020 7b0a 0909 6d79 2024 6368 .. {...my $ch\n-00005370: 6f77 6e20 3d0a 0909 2020 2020 666f 726b own =... fork\n-00005380: 5072 6f63 2d3e 6e65 7728 272d 6578 6563 Proc->new('-exec\n-00005390: 2720 3d3e 2027 6368 6f77 6e27 2c0a 0909 ' => 'chown',...\n-000053a0: 0909 2020 272d 7061 7261 6d27 203d 3e20 .. '-param' => \n-000053b0: 5b27 2d68 272c 2022 2475 6964 3a24 6769 ['-h', \"$uid:$gi\n-000053c0: 6422 2c20 2466 6e65 775d 2c0a 0909 0909 d\", $fnew],.....\n-000053d0: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' =\n-000053e0: 3e20 2224 746d 7064 6972 2f63 686f 776e > \"$tmpdir/chown\n-000053f0: 2d22 2c0a 0909 0909 2020 272d 7072 4c6f -\",..... '-prLo\n-00005400: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n-00005410: 0924 6368 6f77 6e2d 3e77 6169 7428 293b .$chown->wait();\n-00005420: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-00005430: 650a 0920 2020 207b 0a09 0963 686f 776e e.. {...chown\n-00005440: 2024 7569 642c 2024 6769 642c 2024 666e $uid, $gid, $fn\n-00005450: 6577 3b0a 0909 6368 6d6f 6420 246d 6f64 ew;...chmod $mod\n-00005460: 652c 2024 666e 6577 3b0a 0909 7574 696d e, $fnew;...utim\n-00005470: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n-00005480: 2c20 2466 6e65 773b 0a09 2020 2020 7d0a , $fnew;.. }.\n-00005490: 097d 0a09 656c 7365 2020 2023 2061 6c6c .}..else # all\n-000054a0: 2066 696c 6520 7479 7065 7320 6578 6365 file types exce\n-000054b0: 7074 2027 6627 2061 6e64 2027 6427 0a09 pt 'f' and 'd'..\n-000054c0: 7b0a 0920 2020 2026 3a3a 636f 7079 4469 {.. &::copyDi\n-000054d0: 7228 2466 2c20 2466 6e65 772c 2022 2474 r($f, $fnew, \"$t\n-000054e0: 6d70 6469 722f 7374 6275 4c69 6e6b 2d22 mpdir/stbuLink-\"\n-000054f0: 2c20 2470 724c 6f67 2c20 2469 676e 6f72 , $prLog, $ignor\n-00005500: 6545 7272 6f72 7329 3b0a 0920 2020 2024 eErrors);.. $\n-00005510: 7374 6174 2d3e 696e 6372 436f 7079 2829 stat->incrCopy()\n-00005520: 3b0a 097d 0a20 2020 207d 0a7d 0a0a 6966 ;..}. }.}..if\n-00005530: 2028 2473 6176 6552 414d 290a 7b0a 2020 ($saveRAM).{. \n-00005540: 2020 6462 6d63 6c6f 7365 2825 696e 6f64 dbmclose(%inod\n-00005550: 6532 6d64 3529 3b0a 2020 2020 756e 6c69 e2md5);. unli\n-00005560: 6e6b 2024 696e 6f64 6532 6d64 3546 696c nk $inode2md5Fil\n-00005570: 653b 0a20 2020 2064 626d 636c 6f73 6528 e;. dbmclose(\n-00005580: 256d 6435 3266 696c 6529 3b0a 2020 2020 %md52file);. \n-00005590: 756e 6c69 6e6b 2024 6d64 3532 6669 6c65 unlink $md52file\n-000055a0: 4669 6c65 3b0a 7d0a 0a23 2073 6574 2061 File;.}..# set a\n-000055b0: 7469 6d65 2c20 6d74 696d 652c 206d 6f64 time, mtime, mod\n-000055c0: 6520 6f66 2064 6972 6563 746f 7269 6573 e of directories\n-000055d0: 0a63 6c6f 7365 2844 4952 4649 4c45 293b .close(DIRFILE);\n-000055e0: 0a75 6e6c 6573 7320 286f 7065 6e28 4449 .unless (open(DI\n-000055f0: 5246 494c 452c 2027 3c27 2c20 2474 6d70 RFILE, '<', $tmp\n-00005600: 4469 7246 696c 6529 290a 7b0a 2020 2020 DirFile)).{. \n-00005610: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00005620: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00005630: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n-00005640: 6e6e 6f74 2072 6561 6420 3c24 746d 7044 nnot read <$tmpD\n-00005650: 6972 4669 6c65 3e2c 2063 616e 6e6f 7420 irFile>, cannot \n-00005660: 7365 7420 2220 2e0a 0909 0920 2020 2020 set \" ..... \n-00005670: 2261 7469 6d65 2061 6e64 206d 7469 6d65 \"atime and mtime\n-00005680: 2066 6f72 2064 6972 6563 746f 7269 6573 for directories\n-00005690: 225d 293b 0a7d 0a65 6c73 650a 7b0a 2020 \"]);.}.else.{. \n-000056a0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-000056b0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-000056c0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-000056d0: 7365 7474 696e 6720 6174 696d 652c 206d setting atime, m\n-000056e0: 7469 6d65 206f 6620 6469 7265 6374 6f72 time of director\n-000056f0: 6965 7320 2e2e 2e22 5d29 3b0a 0a20 2020 ies ...\"]);.. \n-00005700: 206d 7920 246c 696e 653b 0a20 2020 2077 my $line;. w\n-00005710: 6869 6c65 2028 246c 696e 6520 3d20 3c44 hile ($line = ). {..\n-00005730: 6368 6f70 2024 6c69 6e65 3b0a 096d 7920 chop $line;..my \n-00005740: 2824 6174 696d 652c 2024 6d74 696d 652c ($atime, $mtime,\n-00005750: 2024 6d6f 6465 2c20 2464 6629 203d 2073 $mode, $df) = s\n-00005760: 706c 6974 282f 5c73 2f2c 2024 6c69 6e65 plit(/\\s/, $line\n-00005770: 2c20 3429 3b0a 0924 6466 203d 7e20 732f , 4);..$df =~ s/\n-00005780: 5c30 2f5c 6e2f 6f67 3b0a 0963 686d 6f64 \\0/\\n/og;..chmod\n-00005790: 2024 6d6f 6465 2c20 2464 663b 0a09 7574 $mode, $df;..ut\n-000057a0: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti\n-000057b0: 6d65 2c20 2464 663b 0a09 7574 696d 6520 me, $df;..utime \n-000057c0: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, \n-000057d0: 2464 663b 0a20 2020 207d 0a20 2020 2063 $df;. }. c\n-000057e0: 6c6f 7365 2844 4952 4649 4c45 293b 0a7d lose(DIRFILE);.}\n-000057f0: 0a75 6e6c 696e 6b20 2474 6d70 4469 7246 .unlink $tmpDirF\n-00005800: 696c 653b 0a0a 0a24 7374 6174 2d3e 7072 ile;...$stat->pr\n-00005810: 696e 7428 293b 0a69 6620 2840 6c74 290a int();.if (@lt).\n-00005820: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr\n-00005830: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005840: 5a27 2c0a 0909 2020 272d 7374 7227 203d Z',... '-str' =\n-00005850: 3e0a 0909 2020 5b22 636f 7079 2f6c 696e >... [\"copy/lin\n-00005860: 6b20 3c22 202e 206a 6f69 6e28 273e 3c27 k <\" . join('><'\n-00005870: 2c20 406c 6229 202e 2022 3e20 746f 203c , @lb) . \"> to <\n-00005880: 2220 2e0a 0909 2020 206a 6f69 6e28 273e \" .... join('>\n-00005890: 3c27 2c20 406c 7429 202e 2022 3e20 746f <', @lt) . \"> to\n-000058a0: 203c 246c 7473 3e22 5d29 3b0a 7d0a 656c <$lts>\"]);.}.el\n-000058b0: 7365 0a7b 0a20 2020 2024 7072 4c6f 672d se.{. $prLog-\n-000058c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000058d0: 3e20 275a 272c 0a09 0920 2027 2d73 7472 > 'Z',... '-str\n-000058e0: 2720 3d3e 0a09 0920 205b 2263 6f70 792f ' =>... [\"copy/\n-000058f0: 6c69 6e6b 203c 2220 2e20 6a6f 696e 2827 link <\" . join('\n-00005900: 3e3c 272c 2040 6c62 2920 2e0a 0909 2020 ><', @lb) .... \n-00005910: 2022 3e20 746f 203c 246c 7473 3e22 5d29 \"> to <$lts>\"])\n-00005920: 3b0a 7d0a 0a0a 6578 6974 2030 3b0a 0a0a ;.}...exit 0;...\n-00005930: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005940: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005950: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005960: 2323 0a23 2072 6574 756e 7273 2031 206f ##.# retunrs 1 o\n-00005970: 6e20 7375 6363 6573 732c 2030 2069 6620 n success, 0 if \n-00005980: 636f 7079 2066 6169 6c73 0a73 7562 2063 copy fails.sub c\n-00005990: 6865 636b 5370 6172 7365 416e 6443 6f70 heckSparseAndCop\n-000059a0: 7946 696c 6573 0a7b 0a20 2020 206d 7920 yFiles.{. my \n-000059b0: 2473 6f75 7263 6520 3d20 7368 6966 743b $source = shift;\n-000059c0: 0a20 2020 206d 7920 2474 6172 6765 7420 . my $target \n-000059d0: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-000059e0: 2470 724c 6f67 203d 2073 6869 6674 3b0a $prLog = shift;.\n-000059f0: 2020 2020 6d79 2024 7369 7a65 203d 2073 my $size = s\n-00005a00: 6869 6674 3b0a 2020 2020 6d79 2024 626c hift;. my $bl\n-00005a10: 6f63 6b73 203d 2073 6869 6674 3b0a 2020 ocks = shift;. \n-00005a20: 2020 6d79 2024 6372 6561 7465 5370 6172 my $createSpar\n-00005a30: 7365 4669 6c65 7320 3d20 7368 6966 743b seFiles = shift;\n-00005a40: 0a20 2020 206d 7920 2462 6c6f 636b 5369 . my $blockSi\n-00005a50: 7a65 203d 2073 6869 6674 3b0a 2020 2020 ze = shift;. \n-00005a60: 6d79 2024 746d 7064 6972 203d 2073 6869 my $tmpdir = shi\n-00005a70: 6674 3b0a 0a20 2020 2069 6620 2824 6372 ft;.. if ($cr\n-00005a80: 6561 7465 5370 6172 7365 4669 6c65 7320 eateSparseFiles \n-00005a90: 616e 6420 2024 626c 6f63 6b73 202a 2024 and $blocks * $\n-00005aa0: 626c 6f63 6b53 697a 6520 3c20 2473 697a blockSize < $siz\n-00005ab0: 6529 2023 206d 6179 6265 2073 7061 7273 e) # maybe spars\n-00005ac0: 6520 6669 6c65 0a20 2020 207b 0a09 6d79 e file. {..my\n-00005ad0: 2024 7265 7420 3d20 313b 2020 2023 2073 $ret = 1; # s\n-00005ae0: 7563 6365 7373 0a09 6d79 2024 6370 203d uccess..my $cp =\n-00005af0: 2066 6f72 6b50 726f 632d 3e6e 6577 2827 forkProc->new('\n-00005b00: 2d65 7865 6327 203d 3e20 2763 7027 2c0a -exec' => 'cp',.\n-00005b10: 0909 0920 2020 2020 2020 272d 7061 7261 ... '-para\n-00005b20: 6d27 203d 3e0a 0909 0920 2020 2020 2020 m' =>.... \n-00005b30: 5b22 2473 6f75 7263 6522 2c20 2224 7461 [\"$source\", \"$ta\n-00005b40: 7267 6574 225d 2c0a 0909 0920 2020 2020 rget\"],.... \n-00005b50: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' =\n-00005b60: 3e20 2224 746d 7064 6972 2f6c 696e 6b54 > \"$tmpdir/linkT\n-00005b70: 6f2d 6370 2d22 2c0a 0909 0920 2020 2020 o-cp-\",.... \n-00005b80: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n-00005b90: 724c 6f67 293b 0a09 2463 702d 3e77 6169 rLog);..$cp->wai\n-00005ba0: 7428 293b 0a09 6d79 2024 6f75 7420 3d20 t();..my $out = \n-00005bb0: 2463 702d 3e67 6574 5354 444f 5554 2829 $cp->getSTDOUT()\n-00005bc0: 3b0a 0969 6620 2840 246f 7574 290a 097b ;..if (@$out)..{\n-00005bd0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00005be0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005bf0: 5727 2c0a 0909 0920 2027 2d73 7472 2720 W',.... '-str' \n-00005c00: 3d3e 0a09 0909 2020 5b22 636f 7079 696e =>.... [\"copyin\n-00005c10: 6720 6f66 203c 2473 6f75 7263 653e 2074 g of <$source> t\n-00005c20: 6f20 3c24 7461 7267 6574 3e20 7265 706f o <$target> repo\n-00005c30: 7274 6564 3a22 2c0a 0909 0920 2020 4024 rted:\",.... @$\n-00005c40: 6f75 745d 293b 0a09 7d0a 0924 6f75 7420 out]);..}..$out \n-00005c50: 3d20 2463 702d 3e67 6574 5354 4445 5252 = $cp->getSTDERR\n-00005c60: 2829 3b0a 0969 6620 2840 246f 7574 290a ();..if (@$out).\n-00005c70: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog->\n-00005c80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00005c90: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-00005ca0: 2720 3d3e 0a09 0920 205b 2263 6f70 7969 ' =>... [\"copyi\n-00005cb0: 6e67 2028 7769 7468 2027 6370 202d 7227 ng (with 'cp -r'\n-00005cc0: 2920 6f66 203c 2473 6f75 7263 653e 2074 ) of <$source> t\n-00005cd0: 6f20 3c24 7461 7267 6574 3e20 7265 706f o <$target> repo\n-00005ce0: 7274 6564 3a22 2c0a 0909 0920 2020 4024 rted:\",.... @$\n-00005cf0: 6f75 745d 293b 0a09 2020 2020 2472 6574 out]);.. $ret\n-00005d00: 203d 2030 3b0a 097d 0a09 2470 724c 6f67 = 0;..}..$prLog\n-00005d10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00005d20: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... \n-00005d30: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => [\"file\n-00005d40: 203c 2473 6f75 7263 653e 2063 6f70 6965 <$source> copie\n-00005d50: 6420 6173 2073 7061 7273 6520 6669 6c65 d as sparse file\n-00005d60: 225d 290a 0920 2020 2069 6620 2472 6574 \"]).. if $ret\n-00005d70: 3b0a 0a09 7265 7475 726e 2024 7265 743b ;...return $ret;\n-00005d80: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-00005d90: 2020 2020 7b0a 0972 6574 7572 6e20 263a {..return &:\n-00005da0: 3a63 6f70 7946 696c 6528 2473 6f75 7263 :copyFile($sourc\n-00005db0: 652c 2024 7461 7267 6574 2c20 2470 724c e, $target, $prL\n-00005dc0: 6f67 293b 0a20 2020 207d 0a7d 0a0a 0a0a og);. }.}....\n-00005dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005de0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005df0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005e00: 2323 0a70 6163 6b61 6765 2053 7461 7469 ##.package Stati\n-00005e10: 7374 6963 3b0a 0a23 2323 2323 2323 2323 stic;..#########\n-00005e20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005e30: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00005e40: 7375 6220 6e65 770a 7b0a 2020 2020 6d79 sub new.{. my\n-00005e50: 2024 636c 6173 7320 3d20 7368 6966 743b $class = shift;\n-00005e60: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n-00005e70: 7b7d 3b0a 0a20 2020 206d 7920 2825 7061 {};.. my (%pa\n-00005e80: 7261 6d73 2920 3d20 2827 2d70 724c 6f67 rams) = ('-prLog\n-00005e90: 2720 2020 2020 2020 2020 2020 2020 3d3e ' =>\n-00005ea0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00005eb0: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' \n-00005ec0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-00005ed0: 2020 2027 2d70 726f 6772 6573 7344 656c '-progressDel\n-00005ee0: 7461 5469 6d65 2720 3d3e 2030 0a09 0920 taTime' => 0... \n-00005ef0: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch\n-00005f00: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams(\n-00005f10: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \\%params, \\@_, '\n-00005f20: 5374 6174 6973 7469 633a 3a6e 6577 272c Statistic::new',\n-00005f30: 0a09 0909 205b 272d 7072 4c6f 6727 2c20 .... ['-prLog', \n-00005f40: 272d 7072 6f67 7265 7373 5265 706f 7274 '-progressReport\n-00005f50: 275d 293b 0a20 2020 2026 3a3a 7365 7450 ']);. &::setP\n-00005f60: 6172 616d 7344 6972 6563 7428 2473 656c aramsDirect($sel\n-00005f70: 662c 205c 2570 6172 616d 7329 3b0a 0a20 f, \\%params);.. \n-00005f80: 2020 2024 7365 6c66 2d3e 7b27 7374 6174 $self->{'stat\n-00005f90: 436f 7079 277d 203d 2030 3b0a 2020 2020 Copy'} = 0;. \n-00005fa0: 2473 656c 662d 3e7b 2773 7461 744c 696e $self->{'statLin\n-00005fb0: 6b27 7d20 3d20 303b 0a20 2020 2024 7365 k'} = 0;. $se\n-00005fc0: 6c66 2d3e 7b27 7374 6174 4469 7227 7d20 lf->{'statDir'} \n-00005fd0: 3d20 303b 0a0a 2020 2020 2473 656c 662d = 0;.. $self-\n-00005fe0: 3e7b 2773 7461 7452 6561 6427 7d20 3d20 >{'statRead'} = \n-00005ff0: 303b 0a20 2020 2024 7365 6c66 2d3e 7b27 0;. $self->{'\n-00006000: 7374 6174 4d64 3527 7d20 3d20 303b 0a0a statMd5'} = 0;..\n-00006010: 2020 2020 2473 656c 662d 3e7b 2774 696d $self->{'tim\n-00006020: 6550 726f 6772 5265 706f 7274 277d 203d eProgrReport'} =\n-00006030: 0a09 2824 7365 6c66 2d3e 7b27 7072 6f67 ..($self->{'prog\n-00006040: 7265 7373 4465 6c74 6154 696d 6527 7d20 ressDeltaTime'} \n-00006050: 3e20 3029 203f 2074 696d 6520 3a20 303b > 0) ? time : 0;\n-00006060: 0a0a 2020 2020 626c 6573 7320 2473 656c .. bless $sel\n-00006070: 662c 2024 636c 6173 733b 0a7d 0a0a 2323 f, $class;.}..##\n-00006080: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006090: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000060a0: 2323 2323 2323 0a73 7562 2069 6e63 7243 ######.sub incrC\n-000060b0: 6f70 790a 7b0a 2020 2020 6d79 2024 7365 opy.{. my $se\n-000060c0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. \n-000060d0: 202b 2b24 7365 6c66 2d3e 7b27 7374 6174 ++$self->{'stat\n-000060e0: 436f 7079 277d 3b0a 2020 2020 2473 656c Copy'};. $sel\n-000060f0: 662d 3e63 6865 636b 5072 6f67 7265 7373 f->checkProgress\n-00006100: 2829 3b0a 7d0a 0a23 2323 2323 2323 2323 ();.}..#########\n-00006110: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006120: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00006130: 7375 6220 696e 6372 4c69 6e6b 0a7b 0a20 sub incrLink.{. \n-00006140: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n-00006150: 6966 743b 0a0a 2020 2020 2b2b 2473 656c ift;.. ++$sel\n-00006160: 662d 3e7b 2773 7461 744c 696e 6b27 7d3b f->{'statLink'};\n-00006170: 0a20 2020 2024 7365 6c66 2d3e 6368 6563 . $self->chec\n-00006180: 6b50 726f 6772 6573 7328 293b 0a7d 0a0a kProgress();.}..\n-00006190: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000061a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000061b0: 2323 2323 2323 2323 0a73 7562 2069 6e63 ########.sub inc\n-000061c0: 7244 6972 0a7b 0a20 2020 206d 7920 2473 rDir.{. my $s\n-000061d0: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. \n-000061e0: 2020 2b2b 2473 656c 662d 3e7b 2773 7461 ++$self->{'sta\n-000061f0: 7444 6972 277d 3b0a 2020 2020 2473 656c tDir'};. $sel\n-00006200: 662d 3e63 6865 636b 5072 6f67 7265 7373 f->checkProgress\n-00006210: 2829 3b0a 7d0a 0a23 2323 2323 2323 2323 ();.}..#########\n-00006220: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006230: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00006240: 7375 6220 696e 6372 5265 6164 0a7b 0a20 sub incrRead.{. \n-00006250: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n-00006260: 6966 743b 0a0a 2020 2020 2b2b 2473 656c ift;.. ++$sel\n-00006270: 662d 3e7b 2773 7461 7452 6561 6427 7d3b f->{'statRead'};\n-00006280: 0a20 2020 2024 7365 6c66 2d3e 6368 6563 . $self->chec\n-00006290: 6b50 726f 6772 6573 7352 6561 6428 293b kProgressRead();\n-000062a0: 0a7d 0a0a 2323 2323 2323 2323 2323 2323 .}..############\n-000062b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000062c0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n-000062d0: 2069 6e63 724d 6435 0a7b 0a20 2020 206d incrMd5.{. m\n-000062e0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-000062f0: 0a0a 2020 2020 2b2b 2473 656c 662d 3e7b .. ++$self->{\n-00006300: 2773 7461 744d 6435 277d 3b0a 7d0a 0a23 'statMd5'};.}..#\n-00006310: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006320: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006330: 2323 2323 2323 230a 7375 6220 6368 6563 #######.sub chec\n-00006340: 6b50 726f 6772 6573 7352 6561 640a 7b0a kProgressRead.{.\n-00006350: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n-00006360: 6869 6674 3b0a 0a20 2020 206d 7920 246e hift;.. my $n\n-00006370: 203d 2024 7365 6c66 2d3e 7b27 7374 6174 = $self->{'stat\n-00006380: 5265 6164 277d 3b0a 2020 2020 6966 2028 Read'};. if (\n-00006390: 2824 7365 6c66 2d3e 7b27 7072 6f67 7265 ($self->{'progre\n-000063a0: 7373 5265 706f 7274 277d 2061 6e64 0a09 ssReport'} and..\n-000063b0: 246e 2025 2024 7365 6c66 2d3e 7b27 7072 $n % $self->{'pr\n-000063c0: 6f67 7265 7373 5265 706f 7274 277d 203d ogressReport'} =\n-000063d0: 3d20 3029 206f 720a 0928 2473 656c 662d = 0) or..($self-\n-000063e0: 3e7b 2774 696d 6550 726f 6772 5265 706f >{'timeProgrRepo\n-000063f0: 7274 277d 203e 2030 2061 6e64 0a09 2074 rt'} > 0 and.. t\n-00006400: 696d 6520 3e3d 2024 7365 6c66 2d3e 7b27 ime >= $self->{'\n-00006410: 7469 6d65 5072 6f67 7252 6570 6f72 7427 timeProgrReport'\n-00006420: 7d20 2b20 2473 656c 662d 3e7b 2770 726f } + $self->{'pro\n-00006430: 6772 6573 7344 656c 7461 5469 6d65 277d gressDeltaTime'}\n-00006440: 2929 0a20 2020 207b 0a09 2473 656c 662d )). {..$self-\n-00006450: 3e7b 2770 724c 6f67 277d 2d3e 7072 696e >{'prLog'}->prin\n-00006460: 7428 272d 6b69 6e64 2720 3d3e 2027 5027 t('-kind' => 'P'\n-00006470: 2c0a 0909 0909 272d 7374 7227 203d 3e0a ,.....'-str' =>.\n-00006480: 0909 0909 5b22 7265 6164 2024 6e20 6974 ....[\"read $n it\n-00006490: 656d 732c 2063 616c 6365 6420 2220 2e0a ems, calced \" ..\n-000064a0: 0909 0909 2473 656c 662d 3e7b 2773 7461 ....$self->{'sta\n-000064b0: 744d 6435 277d 202e 2022 206d 6435 2073 tMd5'} . \" md5 s\n-000064c0: 756d 7322 5d29 3b0a 0924 7365 6c66 2d3e ums\"]);..$self->\n-000064d0: 7b27 7469 6d65 5072 6f67 7252 6570 6f72 {'timeProgrRepor\n-000064e0: 7427 7d20 3d20 7469 6d65 0a09 2020 2020 t'} = time.. \n-000064f0: 6966 2024 7365 6c66 2d3e 7b27 7469 6d65 if $self->{'time\n-00006500: 5072 6f67 7252 6570 6f72 7427 7d20 3e20 ProgrReport'} > \n-00006510: 303b 0a20 2020 207d 0a7d 0a0a 2323 2323 0;. }.}..####\n-00006520: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006530: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006540: 2323 2323 0a73 7562 2063 6865 636b 5072 ####.sub checkPr\n-00006550: 6f67 7265 7373 0a7b 0a20 2020 206d 7920 ogress.{. my \n-00006560: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n-00006570: 2020 2020 6d79 2024 6e20 3d20 2473 656c my $n = $sel\n-00006580: 662d 3e7b 2773 7461 7443 6f70 7927 7d20 f->{'statCopy'} \n-00006590: 2b20 2473 656c 662d 3e7b 2773 7461 744c + $self->{'statL\n-000065a0: 696e 6b27 7d20 2b0a 0924 7365 6c66 2d3e ink'} +..$self->\n-000065b0: 7b27 7374 6174 4469 7227 7d3b 0a20 2020 {'statDir'};. \n-000065c0: 2069 6620 2828 2473 656c 662d 3e7b 2770 if (($self->{'p\n-000065d0: 726f 6772 6573 7352 6570 6f72 7427 7d20 rogressReport'} \n-000065e0: 616e 640a 0920 246e 2025 2024 7365 6c66 and.. $n % $self\n-000065f0: 2d3e 7b27 7072 6f67 7265 7373 5265 706f ->{'progressRepo\n-00006600: 7274 277d 203d 3d20 3029 206f 720a 0928 rt'} == 0) or..(\n-00006610: 2473 656c 662d 3e7b 2774 696d 6550 726f $self->{'timePro\n-00006620: 6772 5265 706f 7274 277d 203e 2030 2061 grReport'} > 0 a\n-00006630: 6e64 0a09 2074 696d 6520 3e3d 2024 7365 nd.. time >= $se\n-00006640: 6c66 2d3e 7b27 7469 6d65 5072 6f67 7252 lf->{'timeProgrR\n-00006650: 6570 6f72 7427 7d20 2b20 2473 656c 662d eport'} + $self-\n-00006660: 3e7b 2770 726f 6772 6573 7344 656c 7461 >{'progressDelta\n-00006670: 5469 6d65 277d 2929 0a20 2020 207b 0a09 Time'})). {..\n-00006680: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n-00006690: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000066a0: 3d3e 2027 5027 2c0a 0909 0909 272d 7374 => 'P',.....'-st\n-000066b0: 7227 203d 3e0a 0909 0909 5b22 7072 6f63 r' =>.....[\"proc\n-000066c0: 6573 7365 6420 246e 2069 7465 6d73 2c20 essed $n items, \n-000066d0: 6361 6c63 6564 2022 202e 0a09 0909 0924 calced \" ......$\n-000066e0: 7365 6c66 2d3e 7b27 7374 6174 4d64 3527 self->{'statMd5'\n-000066f0: 7d20 2e20 2220 6d64 3520 7375 6d73 3b20 } . \" md5 sums; \n-00006700: 2220 2e0a 0909 0909 2473 656c 662d 3e7b \" ......$self->{\n-00006710: 2773 7461 744c 696e 6b27 7d20 2e20 2220 'statLink'} . \" \n-00006720: 6c69 6e6b 6564 2c20 2220 2e0a 0909 0909 linked, \" ......\n-00006730: 2473 656c 662d 3e7b 2773 7461 7443 6f70 $self->{'statCop\n-00006740: 7927 7d20 2e20 2220 636f 7069 6564 225d y'} . \" copied\"]\n-00006750: 293b 0a09 2473 656c 662d 3e7b 2774 696d );..$self->{'tim\n-00006760: 6550 726f 6772 5265 706f 7274 277d 203d eProgrReport'} =\n-00006770: 2074 696d 650a 0920 2020 2069 6620 2473 time.. if $s\n-00006780: 656c 662d 3e7b 2774 696d 6550 726f 6772 elf->{'timeProgr\n-00006790: 5265 706f 7274 277d 203e 2030 3b0a 2020 Report'} > 0;. \n-000067a0: 2020 7d0a 7d0a 0a23 2323 2323 2323 2323 }.}..#########\n-000067b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000067c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-000067d0: 7375 6220 7072 696e 740a 7b0a 2020 2020 sub print.{. \n-000067e0: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-000067f0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n-00006800: 7072 4c6f 6727 7d2d 3e70 7269 6e74 2827 prLog'}->print('\n-00006810: 2d6b 696e 6427 203d 3e20 2753 272c 0a09 -kind' => 'S',..\n-00006820: 0909 2020 2020 272d 7374 7227 203d 3e0a .. '-str' =>.\n-00006830: 0909 0920 2020 205b 2272 6561 6420 2220 ... [\"read \" \n-00006840: 2e0a 0909 0920 2020 2020 2473 656c 662d ..... $self-\n-00006850: 3e7b 2773 7461 7452 6561 6427 7d20 2e20 >{'statRead'} . \n-00006860: 2220 6974 656d 733b 2063 7265 6174 6564 \" items; created\n-00006870: 2022 202e 0a09 0909 2020 2020 2024 7365 \" ..... $se\n-00006880: 6c66 2d3e 7b27 7374 6174 4469 7227 7d20 lf->{'statDir'} \n-00006890: 2e20 2220 6469 7273 2c20 2220 2e0a 0909 . \" dirs, \" ....\n-000068a0: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s\n-000068b0: 7461 744c 696e 6b27 7d20 2e20 2220 6861 tatLink'} . \" ha\n-000068c0: 7264 206c 696e 6b73 2c20 2220 2e0a 0909 rd links, \" ....\n-000068d0: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s\n-000068e0: 7461 7443 6f70 7927 7d20 2e20 2220 636f tatCopy'} . \" co\n-000068f0: 7069 6564 3b20 6361 6c63 6564 2022 202e pied; calced \" .\n-00006900: 0a09 0909 2020 2020 2024 7365 6c66 2d3e .... $self->\n-00006910: 7b27 7374 6174 4d64 3527 7d20 2e20 2220 {'statMd5'} . \" \n-00006920: 6d64 3520 7375 6d73 2c20 225d 293b 0a7d md5 sums, \"]);.}\n-00006930: 0a .\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 6c69 6e6b 546f 4469 7273 p/bin/linkToDirs\n+00000030: 0a .\n"}, {"source1": "./usr/bin/llt", "source2": "./usr/bin/llt", "has_internal_linenos": true, "unified_diff": "@@ -1,437 +1,3 @@\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: 3232 290a 2320 2020 2020 2020 2020 2020 22).# \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 0a72 6571 7569 7265 2027 6669 pl';.require 'fi\n-000007d0: 6c65 4469 722e 706c 273b 0a0a 3d68 6561 leDir.pl';..=hea\n-000007e0: 6431 204e 414d 450a 0a6c 6c74 202d 206c d1 NAME..llt - l\n-000007f0: 6973 7420 6372 6561 7465 2c20 6163 6365 ist create, acce\n-00000800: 7373 2061 6e64 206d 6f64 6966 6963 6174 ss and modificat\n-00000810: 696f 6e20 7469 6d65 7320 6f66 2066 696c ion times of fil\n-00000820: 6573 0a0a 3d68 6561 6431 2053 594e 4f50 es..=head1 SYNOP\n-00000830: 5349 530a 0a09 6c6c 7420 5b2d 725d 205b SIS...llt [-r] [\n-00000840: 2d69 5d20 5b2d 617c 2d6d 7c2d 635d 205b -i] [-a|-m|-c] [\n-00000850: 6669 6c65 735d 205b 6469 7273 5d0a 6f72 files] [dirs].or\n-00000860: 0a20 2020 2020 2020 206c 6c74 202d 6520 . llt -e \n-00000870: 7469 6d65 0a0a 3d68 6561 6431 204f 5054 time..=head1 OPT\n-00000880: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..=\n-00000890: 6974 656d 2042 3c2d 2d68 656c 703e 2c20 item B<--help>, \n-000008a0: 423c 2d68 3e0a 0a20 2020 2073 686f 7720 B<-h>.. show \n-000008b0: 7468 6973 2068 656c 700a 0a3d 6974 656d this help..=item\n-000008c0: 2042 3c2d 2d72 6576 6572 7365 3e2c 2042 B<--reverse>, B\n-000008d0: 3c2d 723e 0a0a 2020 2020 736f 7274 2069 <-r>.. sort i\n-000008e0: 6e20 7265 7665 7273 6520 6f72 6465 720a n reverse order.\n-000008f0: 0a3d 6974 656d 2042 3c2d 2d69 6e73 656e .=item B<--insen\n-00000900: 7369 7469 7665 3e2c 2042 3c2d 693e 0a0a sitive>, B<-i>..\n-00000910: 2020 2020 6361 7365 2069 6e73 656e 7369 case insensi\n-00000920: 7469 7665 6c79 2028 6e6f 7420 7769 7468 tively (not with\n-00000930: 202d 612c 202d 6d20 6f72 202d 6329 0a0a -a, -m or -c)..\n-00000940: 3d69 7465 6d20 423c 2d2d 6163 6365 7373 =item B<--access\n-00000950: 3e2c 2042 3c2d 613e 0a0a 2020 2020 736f >, B<-a>.. so\n-00000960: 7274 2061 6363 6f72 6469 6e67 2074 6f20 rt according to \n-00000970: 6163 6365 7373 2074 696d 650a 0a3d 6974 access time..=it\n-00000980: 656d 2042 3c2d 2d6d 6f64 6966 6963 6174 em B<--modificat\n-00000990: 696f 6e3e 2c20 423c 2d6d 3e0a 0a20 2020 ion>, B<-m>.. \n-000009a0: 2073 6f72 7420 6163 636f 7264 696e 6720 sort according \n-000009b0: 746f 206d 6f64 6966 6963 6174 696f 6e20 to modification \n-000009c0: 7469 6d65 0a0a 3d69 7465 6d20 423c 2d2d time..=item B<--\n-000009d0: 6372 6561 7469 6f6e 3e2c 2042 3c2d 633e creation>, B<-c>\n-000009e0: 0a0a 2020 2020 736f 7274 2061 6363 6f72 .. sort accor\n-000009f0: 6469 6e67 2074 6f20 6372 6561 7469 6f6e ding to creation\n-00000a00: 2074 696d 650a 0a3d 6974 656d 2042 3c2d time..=item B<-\n-00000a10: 2d75 6e69 7854 696d 653e 2c20 423c 2d75 -unixTime>, B<-u\n-00000a20: 3e0a 0a20 2020 2073 686f 7720 756e 6978 >.. show unix\n-00000a30: 2074 696d 6520 2875 6e73 6967 6e65 6420 time (unsigned \n-00000a40: 696e 7465 6765 7229 0a0a 3d69 7465 6d20 integer)..=item \n-00000a50: 423c 2d56 3e0a 0a20 2020 2070 7269 6e74 B<-V>.. print\n-00000a60: 2076 6572 7369 6f6e 2873 290a 0a3d 6974 version(s)..=it\n-00000a70: 656d 2042 3c2d 2d65 706f 6368 3e2c 2042 em B<--epoch>, B\n-00000a80: 3c2d 653e 0a0a 2020 2020 7061 7261 6d65 <-e>.. parame\n-00000a90: 7465 7220 6973 2074 6865 2074 696d 6520 ter is the time \n-00000aa0: 7369 6e63 6520 6570 6f63 680a 2020 2020 since epoch. \n-00000ab0: 6c6c 7420 7072 696e 7420 7468 6520 6461 llt print the da\n-00000ac0: 7465 2069 6e20 6120 7265 6164 6162 6c65 te in a readable\n-00000ad0: 2066 6f72 6d61 740a 2020 2020 7468 6973 format. this\n-00000ae0: 206f 7074 696f 6e20 6361 6e20 6265 2072 option can be r\n-00000af0: 6570 6561 7465 6420 6d75 6c74 6970 6c65 epeated multiple\n-00000b00: 2074 696d 6573 0a20 2020 206c 6c74 2077 times. llt w\n-00000b10: 696c 6c20 7374 6f70 2065 7865 6375 7469 ill stop executi\n-00000b20: 6e67 2069 6620 6e6f 206f 7468 6572 206f ng if no other o\n-00000b30: 7074 696f 6e73 206f 7220 7061 7261 6d73 ptions or params\n-00000b40: 2061 7265 2063 686f 7365 6e0a 0a3d 6261 are chosen..=ba\n-00000b50: 636b 0a0a 536f 7274 696e 6720 7769 7468 ck..Sorting with\n-00000b60: 6f75 7420 5b2d 617c 2d6d 7c2d 635d 2069 out [-a|-m|-c] i\n-00000b70: 7320 736f 7274 696e 6720 6163 636f 7264 s sorting accord\n-00000b80: 696e 6720 746f 2066 696c 6520 6e61 6d65 ing to file name\n-00000b90: 732e 0a0a 3d68 6561 6431 2043 4f50 5952 s...=head1 COPYR\n-00000ba0: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright \n-00000bb0: 2863 2920 3230 3030 2d32 3032 3220 6279 (c) 2000-2022 by\n-00000bc0: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla\n-00000bd0: 6573 2028 7365 6520 5245 4144 4d45 292e es (see README).\n-00000be0: 0a50 7562 6c69 7368 6564 2075 6e64 6572 .Published under\n-00000bf0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n-00000c00: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n-00000c10: 7633 206f 7220 616e 7920 6c61 7465 7220 v3 or any later \n-00000c20: 7665 7273 696f 6e2e 0a0a 3d63 7574 0a0a version...=cut..\n-00000c30: 6d79 2024 4865 6c70 203d 2026 3a3a 6765 my $Help = &::ge\n-00000c40: 7450 6f64 3254 6578 7428 2430 293b 0a0a tPod2Text($0);..\n-00000c50: 2670 7269 6e74 5665 7273 696f 6e28 5c40 &printVersion(\\@\n-00000c60: 4152 4756 2c20 272d 5627 2c20 272d 2d76 ARGV, '-V', '--v\n-00000c70: 6572 7369 6f6e 2729 3b0a 0a6d 7920 2443 ersion');..my $C\n-00000c80: 6865 636b 5061 7220 3d0a 2020 2020 4368 heckPar =. Ch\n-00000c90: 6563 6b50 6172 616d 2d3e 6e65 7728 0a09 eckParam->new(..\n-00000ca0: 0920 2020 2027 2d61 6c6c 6f77 4c69 7374 . '-allowList\n-00000cb0: 7327 203d 3e20 2779 6573 272c 0a09 0920 s' => 'yes',... \n-00000cc0: 2020 2027 2d6c 6973 7427 203d 3e20 5b0a '-list' => [.\n-00000cd0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00000ce0: 272d 6e61 6d65 2720 3d3e 2027 696e 7365 '-name' => 'inse\n-00000cf0: 6e73 6974 6976 6527 2c0a 0909 0909 0920 nsitive',...... \n-00000d00: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00000d10: 3d3e 2027 2d69 272c 0a09 0909 0909 2020 => '-i',...... \n-00000d20: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00000d30: 2027 2d2d 696e 7365 6e73 6974 6976 6527 '--insensitive'\n-00000d40: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl\n-00000d50: 795f 6966 2720 3d3e 0a09 0920 2020 2027 y_if' =>... '\n-00000d60: 6e6f 7420 5b61 6363 6573 735d 2061 6e64 not [access] and\n-00000d70: 206e 6f74 205b 6d6f 6469 6669 6361 7469 not [modificati\n-00000d80: 6f6e 5d20 616e 6420 6e6f 7420 5b63 7265 on] and not [cre\n-00000d90: 6174 696f 6e5d 270a 0909 0909 0920 2020 ation]'...... \n-00000da0: 2029 2c0a 0909 0909 4f70 7469 6f6e 2d3e ),.....Option->\n-00000db0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00000dc0: 6163 6365 7373 272c 0a09 0909 0909 2020 access',...... \n-00000dd0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00000de0: 3e20 272d 6127 2c0a 0909 0909 0920 2020 > '-a',...... \n-00000df0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-00000e00: 272d 2d61 6363 6573 7327 2c0a 0909 0909 '--access',.....\n-00000e10: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' \n-00000e20: 3d3e 0a09 0920 2020 2027 6e6f 7420 5b6d =>... 'not [m\n-00000e30: 6f64 6966 6963 6174 696f 6e5d 2061 6e64 odification] and\n-00000e40: 206e 6f74 205b 6372 6561 7469 6f6e 5d27 not [creation]'\n-00000e50: 0a09 0909 0909 2020 2020 292c 0a09 0909 ...... ),....\n-00000e60: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00000e70: 616d 6527 203d 3e20 276d 6f64 6966 6963 ame' => 'modific\n-00000e80: 6174 696f 6e27 2c0a 0909 0909 0920 2020 ation',...... \n-00000e90: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00000ea0: 2027 2d6d 272c 0a09 0909 0909 2020 2020 '-m',...... \n-00000eb0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00000ec0: 2d2d 6d6f 6469 6669 6361 7469 6f6e 272c --modification',\n-00000ed0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only\n-00000ee0: 5f69 6627 203d 3e0a 0909 2020 2020 276e _if' =>... 'n\n-00000ef0: 6f74 205b 6163 6365 7373 5d20 616e 6420 ot [access] and \n-00000f00: 6e6f 7420 5b63 7265 6174 696f 6e5d 270a not [creation]'.\n-00000f10: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),.....\n-00000f20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00000f30: 6d65 2720 3d3e 2027 6372 6561 7469 6f6e me' => 'creation\n-00000f40: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00000f50: 5f6f 7074 696f 6e27 203d 3e20 272d 6327 _option' => '-c'\n-00000f60: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00000f70: 616c 6961 7327 203d 3e20 272d 2d63 7265 alias' => '--cre\n-00000f80: 6174 696f 6e27 2c0a 0909 0909 0920 2020 ation',...... \n-00000f90: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>..\n-00000fa0: 0920 2020 2027 6e6f 7420 5b61 6363 6573 . 'not [acces\n-00000fb0: 735d 2061 6e64 206e 6f74 205b 6d6f 6469 s] and not [modi\n-00000fc0: 6669 6361 7469 6f6e 5d27 0a09 0909 0909 fication]'......\n-00000fd0: 2020 2020 292c 0a09 0909 094f 7074 696f ),.....Optio\n-00000fe0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00000ff0: 3e20 2772 6576 6572 7365 272c 0a09 0909 > 'reverse',....\n-00001000: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00001010: 6e27 203d 3e20 272d 7227 2c0a 0909 0909 n' => '-r',.....\n-00001020: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00001030: 203d 3e20 272d 2d72 6576 6572 7365 270a => '--reverse'.\n-00001040: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),.....\n-00001050: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001060: 6d65 2720 3d3e 2027 756e 6978 5469 6d65 me' => 'unixTime\n-00001070: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001080: 5f6f 7074 696f 6e27 203d 3e20 272d 7527 _option' => '-u'\n-00001090: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000010a0: 616c 6961 7327 203d 3e20 272d 2d75 6e69 alias' => '--uni\n-000010b0: 7854 696d 6527 292c 0a09 0909 094f 7074 xTime'),.....Opt\n-000010c0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000010d0: 203d 3e20 2765 706f 6368 272c 0a09 0909 => 'epoch',....\n-000010e0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-000010f0: 6e27 203d 3e20 272d 6527 2c0a 0909 0909 n' => '-e',.....\n-00001100: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00001110: 203d 3e20 272d 2d65 706f 6368 272c 0a09 => '--epoch',..\n-00001120: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip\n-00001130: 6c65 2720 3d3e 2027 7965 7327 292c 0a09 le' => 'yes'),..\n-00001140: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001150: 2d6e 616d 6527 203d 3e20 2768 656c 7027 -name' => 'help'\n-00001160: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001170: 6f70 7469 6f6e 2720 3d3e 2027 2d68 272c option' => '-h',\n-00001180: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00001190: 6c69 6173 2720 3d3e 2027 2d2d 6865 6c70 lias' => '--help\n-000011a0: 270a 0909 0909 0920 2020 2029 2c0a 0909 '...... ),...\n-000011b0: 0909 5d0a 0909 2020 2020 293b 0a0a 2443 ..]... );..$C\n-000011c0: 6865 636b 5061 722d 3e63 6865 636b 2827 heckPar->check('\n-000011d0: 2d61 7267 7627 203d 3e20 5c40 4152 4756 -argv' => \\@ARGV\n-000011e0: 2c0a 0909 2027 2d68 656c 7027 203d 3e20 ,... '-help' => \n-000011f0: 2448 656c 700a 0909 2029 3b0a 0a69 6620 $Help... );..if \n-00001200: 2824 4368 6563 6b50 6172 2d3e 6765 744f ($CheckPar->getO\n-00001210: 7074 5769 7468 6f75 7450 6172 2827 6865 ptWithoutPar('he\n-00001220: 6c70 2729 290a 7b0a 2020 2020 7072 696e lp')).{. prin\n-00001230: 7420 2224 4865 6c70 223b 0a20 2020 2065 t \"$Help\";. e\n-00001240: 7869 7420 303b 0a7d 0a0a 6d79 2024 736f xit 0;.}..my $so\n-00001250: 7274 203d 2027 6e61 6d65 273b 2020 2020 rt = 'name'; \n-00001260: 2020 2320 4465 6661 756c 743a 2041 6c70 # Default: Alp\n-00001270: 6861 6265 7469 7363 6820 736f 7274 6965 habetisch sortie\n-00001280: 7265 6e0a 2473 6f72 7420 3d20 2761 7469 ren.$sort = 'ati\n-00001290: 6d65 2720 6966 2028 2443 6865 636b 5061 me' if ($CheckPa\n-000012a0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-000012b0: 5061 7228 2761 6363 6573 7327 2929 3b0a Par('access'));.\n-000012c0: 2473 6f72 7420 3d20 276d 7469 6d65 2720 $sort = 'mtime' \n-000012d0: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g\n-000012e0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-000012f0: 276d 6f64 6966 6963 6174 696f 6e27 2929 'modification'))\n-00001300: 3b0a 2473 6f72 7420 3d20 2763 7469 6d65 ;.$sort = 'ctime\n-00001310: 2720 6966 2028 2443 6865 636b 5061 722d ' if ($CheckPar-\n-00001320: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00001330: 7228 2763 7265 6174 696f 6e27 2929 3b0a r('creation'));.\n-00001340: 6d79 2024 7265 7665 7273 6520 3d20 3120 my $reverse = 1 \n-00001350: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g\n-00001360: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00001370: 2772 6576 6572 7365 2729 293b 0a6d 7920 'reverse'));.my \n-00001380: 2469 6e73 656e 7369 7469 7665 203d 2031 $insensitive = 1\n-00001390: 2069 6620 2824 4368 6563 6b50 6172 2d3e if ($CheckPar->\n-000013a0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-000013b0: 2827 696e 7365 6e73 6974 6976 6527 2929 ('insensitive'))\n-000013c0: 3b0a 6d79 2024 756e 6978 5469 6d65 203d ;.my $unixTime =\n-000013d0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000013e0: 7074 5769 7468 6f75 7450 6172 2827 756e ptWithoutPar('un\n-000013f0: 6978 5469 6d65 2729 3b0a 6d79 2024 6570 ixTime');.my $ep\n-00001400: 6f63 6820 3d20 2443 6865 636b 5061 722d och = $CheckPar-\n-00001410: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00001420: 6570 6f63 6827 293b 0a0a 6d79 2028 4061 epoch');..my (@a\n-00001430: 6c6c 2920 3d20 2824 4368 6563 6b50 6172 ll) = ($CheckPar\n-00001440: 2d3e 6765 744c 6973 7450 6172 2829 293b ->getListPar());\n-00001450: 0a0a 0a69 6620 2824 6570 6f63 6829 0a7b ...if ($epoch).{\n-00001460: 0a20 2020 206d 7920 2824 6570 293b 0a20 . my ($ep);. \n-00001470: 2020 2066 6f72 6561 6368 2024 6570 2028 foreach $ep (\n-00001480: 4024 6570 6f63 6829 0a20 2020 207b 0a09 @$epoch). {..\n-00001490: 7072 696e 7420 2224 6570 202d 3e20 222c print \"$ep -> \",\n-000014a0: 2026 6765 7454 696d 6528 2465 7029 2c20 &getTime($ep), \n-000014b0: 225c 6e22 3b0a 2020 2020 7d0a 2020 2020 \"\\n\";. }. \n-000014c0: 6578 6974 2030 2075 6e6c 6573 7320 4061 exit 0 unless @a\n-000014d0: 6c6c 3b0a 7d0a 0a28 4061 6c6c 2920 3d20 ll;.}..(@all) = \n-000014e0: 2827 2e27 2920 756e 6c65 7373 2040 616c ('.') unless @al\n-000014f0: 6c3b 0a0a 6d79 2028 4066 696c 6573 293b l;..my (@files);\n-00001500: 0a6d 7920 2466 3b0a 666f 7265 6163 6820 .my $f;.foreach \n-00001510: 2466 2028 4061 6c6c 290a 7b0a 2020 2020 $f (@all).{. \n-00001520: 6966 2028 2d64 2024 6629 2020 2020 2320 if (-d $f) # \n-00001530: 7765 6e6e 2044 6972 6563 746f 7279 0a20 wenn Directory. \n-00001540: 2020 207b 0a09 6f70 656e 6469 7228 4449 {..opendir(DI\n-00001550: 522c 2024 6629 206f 7220 7072 696e 7420 R, $f) or print \n-00001560: 5354 4445 5252 2022 6361 6e6e 6f74 206f STDERR \"cannot o\n-00001570: 7065 6e20 3c24 663e 5c6e 223b 0a09 6d79 pen <$f>\\n\";..my\n-00001580: 2024 6631 3b0a 0966 6f72 6561 6368 2024 $f1;..foreach $\n-00001590: 6631 2028 7265 6164 6469 7228 4449 5229 f1 (readdir(DIR)\n-000015a0: 290a 097b 0a09 2020 2020 7075 7368 2040 )..{.. push @\n-000015b0: 6669 6c65 732c 2022 2466 2f24 6631 223b files, \"$f/$f1\";\n-000015c0: 0a09 7d0a 0963 6c6f 7365 6469 7228 4449 ..}..closedir(DI\n-000015d0: 5229 3b0a 2020 2020 7d0a 2020 2020 656c R);. }. el\n-000015e0: 7365 2020 2020 2020 2020 2020 2320 4461 se # Da\n-000015f0: 7465 690a 2020 2020 7b0a 0969 6620 282d tei. {..if (-\n-00001600: 6620 2466 290a 097b 0a09 2020 2020 7075 f $f)..{.. pu\n-00001610: 7368 2040 6669 6c65 732c 2024 663b 0a09 sh @files, $f;..\n-00001620: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. \n-00001630: 7072 696e 7420 2243 616e 6e6f 7420 6f70 print \"Cannot op\n-00001640: 656e 2066 696c 6520 3c24 663e 5c6e 223b en file <$f>\\n\";\n-00001650: 0a09 7d0a 2020 2020 7d0a 7d0a 0a23 2045 ..}. }.}..# E\n-00001660: 726d 6974 7465 6c6e 2064 6572 205a 6569 rmitteln der Zei\n-00001670: 7465 6e0a 6d79 2028 4066 293b 0a66 6f72 ten.my (@f);.for\n-00001680: 6561 6368 2024 6620 2840 6669 6c65 7329 each $f (@files)\n-00001690: 0a7b 0a20 2020 206d 7920 2824 6174 696d .{. my ($atim\n-000016a0: 652c 2024 6d74 696d 652c 2024 6374 696d e, $mtime, $ctim\n-000016b0: 6529 203d 2028 6c73 7461 7428 2466 2929 e) = (lstat($f))\n-000016c0: 5b38 2c39 2c31 305d 3b0a 2020 2020 6d79 [8,9,10];. my\n-000016d0: 2025 6820 3d20 2827 6e61 6d65 2720 3d3e %h = ('name' =>\n-000016e0: 2024 662c 0a09 2020 2020 2027 6174 696d $f,.. 'atim\n-000016f0: 6527 203d 3e20 2461 7469 6d65 2c0a 0920 e' => $atime,.. \n-00001700: 2020 2020 276d 7469 6d65 2720 3d3e 2024 'mtime' => $\n-00001710: 6d74 696d 652c 0a09 2020 2020 2027 6374 mtime,.. 'ct\n-00001720: 696d 6527 203d 3e20 2463 7469 6d65 0a09 ime' => $ctime..\n-00001730: 2020 2020 2029 3b0a 2020 2020 7075 7368 );. push\n-00001740: 2040 662c 205c 2568 3b0a 7d0a 0a23 2053 @f, \\%h;.}..# S\n-00001750: 6f72 7469 6572 656e 0a6d 7920 2840 7366 ortieren.my (@sf\n-00001760: 293b 0a69 6620 2824 736f 7274 2065 7120 );.if ($sort eq \n-00001770: 276e 616d 6527 290a 7b0a 2020 2020 6966 'name').{. if\n-00001780: 2028 2469 6e73 656e 7369 7469 7665 290a ($insensitive).\n-00001790: 2020 2020 7b0a 0940 7366 203d 2024 7265 {..@sf = $re\n-000017a0: 7665 7273 6520 3f20 736f 7274 207b 2075 verse ? sort { u\n-000017b0: 6328 2462 2d3e 7b24 736f 7274 7d29 2063 c($b->{$sort}) c\n-000017c0: 6d70 2075 6328 2461 2d3e 7b24 736f 7274 mp uc($a->{$sort\n-000017d0: 7d29 207d 2040 660a 0920 2020 203a 2073 }) } @f.. : s\n-000017e0: 6f72 7420 7b20 7563 2824 612d 3e7b 2473 ort { uc($a->{$s\n-000017f0: 6f72 747d 2920 636d 7020 7563 2824 622d ort}) cmp uc($b-\n-00001800: 3e7b 2473 6f72 747d 2920 7d20 4066 3b0a >{$sort}) } @f;.\n-00001810: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. \n-00001820: 2020 207b 0a09 4073 6620 3d20 2472 6576 {..@sf = $rev\n-00001830: 6572 7365 203f 2073 6f72 7420 7b20 2462 erse ? sort { $b\n-00001840: 2d3e 7b24 736f 7274 7d20 636d 7020 2461 ->{$sort} cmp $a\n-00001850: 2d3e 7b24 736f 7274 7d20 7d20 4066 0a09 ->{$sort} } @f..\n-00001860: 2020 2020 3a20 736f 7274 207b 2024 612d : sort { $a-\n-00001870: 3e7b 2473 6f72 747d 2063 6d70 2024 622d >{$sort} cmp $b-\n-00001880: 3e7b 2473 6f72 747d 207d 2040 663b 0a20 >{$sort} } @f;. \n-00001890: 2020 207d 0a7d 0a65 6c73 650a 7b0a 2020 }.}.else.{. \n-000018a0: 2020 4073 6620 3d20 2472 6576 6572 7365 @sf = $reverse\n-000018b0: 203f 0a09 736f 7274 207b 2024 622d 3e7b ?..sort { $b->{\n-000018c0: 2473 6f72 747d 203c 3d3e 2024 612d 3e7b $sort} <=> $a->{\n-000018d0: 2473 6f72 747d 207d 2040 6620 3a0a 0973 $sort} } @f :..s\n-000018e0: 6f72 7420 7b20 2461 2d3e 7b24 736f 7274 ort { $a->{$sort\n-000018f0: 7d20 3c3d 3e20 2462 2d3e 7b24 736f 7274 } <=> $b->{$sort\n-00001900: 7d20 7d20 4066 3b0a 7d0a 0a23 2041 7573 } } @f;.}..# Aus\n-00001910: 6761 6265 0a6d 7920 246c 656e 203d 2024 gabe.my $len = $\n-00001920: 756e 6978 5469 6d65 203f 2031 3120 3a20 unixTime ? 11 : \n-00001930: 3139 3b0a 7072 696e 7466 2022 252d 247b 19;.printf \"%-${\n-00001940: 6c65 6e7d 7320 2025 2d24 7b6c 656e 7d73 len}s %-${len}s\n-00001950: 2020 252d 247b 6c65 6e7d 7320 205b 5469 %-${len}s [Ti\n-00001960: 6d65 5d5c 6e22 2c20 2261 6363 6573 7322 me]\\n\", \"access\"\n-00001970: 2c0a 2020 2020 226d 6f64 6966 6963 6174 ,. \"modificat\n-00001980: 696f 6e22 2c20 2263 7265 6174 696f 6e22 ion\", \"creation\"\n-00001990: 3b0a 666f 7265 6163 6820 2466 2028 4073 ;.foreach $f (@s\n-000019a0: 6629 0a7b 0a20 2020 206d 7920 2474 3b0a f).{. my $t;.\n-000019b0: 2020 2020 666f 7265 6163 6820 2474 2028 foreach $t (\n-000019c0: 2466 2d3e 7b27 6174 696d 6527 7d2c 2024 $f->{'atime'}, $\n-000019d0: 662d 3e7b 276d 7469 6d65 277d 2c20 2466 f->{'mtime'}, $f\n-000019e0: 2d3e 7b27 6374 696d 6527 7d29 0a20 2020 ->{'ctime'}). \n-000019f0: 207b 0a09 6966 2028 2475 6e69 7854 696d {..if ($unixTim\n-00001a00: 6529 0a09 7b0a 0920 2020 2070 7269 6e74 e)..{.. print\n-00001a10: 2022 2474 2020 2022 2c0a 097d 0a09 656c \"$t \",..}..el\n-00001a20: 7365 0a09 7b0a 0920 2020 2070 7269 6e74 se..{.. print\n-00001a30: 2026 6765 7454 696d 6528 2474 292c 2022 &getTime($t), \"\n-00001a40: 2020 223b 0a09 7d0a 2020 2020 7d0a 2020 \";..}. }. \n-00001a50: 2020 7072 696e 7420 2466 2d3e 7b27 6e61 print $f->{'na\n-00001a60: 6d65 277d 2c20 225c 6e22 3b0a 7d0a 0a65 me'}, \"\\n\";.}..e\n-00001a70: 7869 7420 303b 0a0a 0a73 7562 2067 6574 xit 0;...sub get\n-00001a80: 5469 6d65 0a7b 0a20 2020 206d 7920 2474 Time.{. my $t\n-00001a90: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m\n-00001aa0: 7920 2824 7365 632c 246d 696e 2c24 686f y ($sec,$min,$ho\n-00001ab0: 7572 2c24 6d64 6179 2c24 6d6f 6e2c 2479 ur,$mday,$mon,$y\n-00001ac0: 6561 7229 203d 206c 6f63 616c 7469 6d65 ear) = localtime\n-00001ad0: 2824 7429 3b0a 2020 2020 7265 7475 726e ($t);. return\n-00001ae0: 2073 7072 696e 7466 2822 2534 642e 2530 sprintf(\"%4d.%0\n-00001af0: 3264 2e25 3032 6420 2530 3264 3a25 3032 2d.%02d %02d:%02\n-00001b00: 643a 2530 3264 222c 0a09 0920 2020 2479 d:%02d\",... $y\n-00001b10: 6561 722b 3139 3030 2c20 246d 6f6e 2b31 ear+1900, $mon+1\n-00001b20: 2c20 246d 6461 792c 0a09 0920 2020 2468 , $mday,... $h\n-00001b30: 6f75 722c 2024 6d69 6e2c 2024 7365 6329 our, $min, $sec)\n-00001b40: 3b0a 7d0a 0a ;.}..\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"}, {"source1": "./usr/bin/multiTail", "source2": "./usr/bin/multiTail", "has_internal_linenos": true, "unified_diff": "@@ -1,623 +1,3 @@\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: 3232 290a 2320 2020 2020 2020 2020 2020 22).# \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 s\n-00000300: 7472 6963 743b 0a75 7365 2054 6572 6d3a trict;.use Term:\n-00000310: 3a41 4e53 4943 6f6c 6f72 3b0a 0a0a 7375 :ANSIColor;...su\n-00000320: 6220 6c69 6250 6174 680a 7b0a 2020 2020 b libPath.{. \n-00000330: 6d79 2024 6669 6c65 203d 2073 6869 6674 my $file = shift\n-00000340: 3b0a 0a20 2020 206d 7920 2464 6972 3b0a ;.. my $dir;.\n-00000350: 0a20 2020 2023 2046 616c 6c73 2044 6174 . # Falls Dat\n-00000360: 6569 2073 656c 6273 7420 6569 6e20 7379 ei selbst ein sy\n-00000370: 6d6c 696e 6b20 6973 742c 2073 6f6c 616e mlink ist, solan\n-00000380: 6765 2066 6f6c 6765 6e2c 2062 6973 2061 ge folgen, bis a\n-00000390: 7566 6765 6cf6 7374 0a20 2020 2069 6620 ufgel.st. if \n-000003a0: 282d 6620 2466 696c 6529 0a20 2020 207b (-f $file). {\n-000003b0: 0a09 7768 696c 6520 282d 6c20 2466 696c ..while (-l $fil\n-000003c0: 6529 0a09 7b0a 0920 2020 206d 7920 246c e)..{.. my $l\n-000003d0: 696e 6b20 3d20 7265 6164 6c69 6e6b 2824 ink = readlink($\n-000003e0: 6669 6c65 293b 0a0a 0920 2020 2069 6620 file);... if \n-000003f0: 2873 7562 7374 7228 246c 696e 6b2c 2030 (substr($link, 0\n-00000400: 2c20 3129 206e 6520 222f 2229 0a09 2020 , 1) ne \"/\").. \n-00000410: 2020 7b0a 0909 2466 696c 6520 3d7e 2073 {...$file =~ s\n-00000420: 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b /[^\\/]+$/$link/;\n-00000430: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-00000440: 650a 0920 2020 207b 0a09 0924 6669 6c65 e.. {...$file\n-00000450: 203d 2024 6c69 6e6b 3b0a 0920 2020 207d = $link;.. }\n-00000460: 0a09 7d0a 0a09 2824 6469 722c 2024 6669 ..}...($dir, $fi\n-00000470: 6c65 2920 3d20 2673 706c 6974 4669 6c65 le) = &splitFile\n-00000480: 4469 7228 2466 696c 6529 3b0a 0924 6669 Dir($file);..$fi\n-00000490: 6c65 203d 2022 2f24 6669 6c65 223b 0a20 le = \"/$file\";. \n-000004a0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n-000004b0: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER\n-000004c0: 5220 223c 2466 696c 653e 2064 6f65 7320 R \"<$file> does \n-000004d0: 6e6f 7420 6578 6973 7421 5c6e 223b 0a09 not exist!\\n\";..\n-000004e0: 6578 6974 2031 3b0a 2020 2020 7d0a 0a20 exit 1;. }.. \n-000004f0: 2020 2024 6469 7220 2e3d 2022 2f2e 2e2f $dir .= \"/../\n-00000500: 6c69 6222 3b20 2020 2020 2020 2020 2020 lib\"; \n-00000510: 2320 5066 6164 207a 7520 6465 6e20 4269 # Pfad zu den Bi\n-00000520: 626c 696f 7468 656b 656e 0a20 2020 206d bliotheken. m\n-00000530: 7920 246f 6c64 4469 7220 3d20 602f 6269 y $oldDir = `/bi\n-00000540: 6e2f 7077 6460 3b0a 2020 2020 6368 6f6d n/pwd`;. chom\n-00000550: 7020 246f 6c64 4469 723b 0a20 2020 2069 p $oldDir;. i\n-00000560: 6620 2863 6864 6972 2024 6469 7229 0a20 f (chdir $dir). \n-00000570: 2020 207b 0a09 6d79 2024 6162 7344 6972 {..my $absDir\n-00000580: 203d 2060 2f62 696e 2f70 7764 603b 0a09 = `/bin/pwd`;..\n-00000590: 6368 6f70 2024 6162 7344 6972 3b0a 0963 chop $absDir;..c\n-000005a0: 6864 6972 2024 6f6c 6444 6972 3b0a 0a09 hdir $oldDir;...\n-000005b0: 7265 7475 726e 2028 2673 706c 6974 4669 return (&splitFi\n-000005c0: 6c65 4469 7228 2224 6162 7344 6972 2466 leDir(\"$absDir$f\n-000005d0: 696c 6522 2929 3b0a 2020 2020 7d0a 2020 ile\"));. }. \n-000005e0: 2020 656c 7365 0a20 2020 207b 0a09 7072 else. {..pr\n-000005f0: 696e 7420 5354 4445 5252 2022 3c24 6469 int STDERR \"<$di\n-00000600: 723e 2064 6f65 7320 6e6f 7420 6578 6973 r> does not exis\n-00000610: 742c 2065 7869 7469 6e67 5c6e 223b 0a20 t, exiting\\n\";. \n-00000620: 2020 207d 0a7d 0a73 7562 2073 706c 6974 }.}.sub split\n-00000630: 4669 6c65 4469 720a 7b0a 2020 2020 6d79 FileDir.{. my\n-00000640: 2024 6e61 6d65 203d 2073 6869 6674 3b0a $name = shift;.\n-00000650: 0a20 2020 2072 6574 7572 6e20 2827 2e27 . return ('.'\n-00000660: 2c20 246e 616d 6529 2075 6e6c 6573 7320 , $name) unless \n-00000670: 2824 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 ($name =~/\\//); \n-00000680: 2020 2023 206e 7572 2065 696e 6661 6368 # nur einfach\n-00000690: 6572 2044 6174 6569 6e61 6d65 0a0a 2020 er Dateiname.. \n-000006a0: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil\n-000006b0: 6529 203d 2024 6e61 6d65 203d 7e20 2f5e e) = $name =~ /^\n-000006c0: 282e 2a29 5c2f 282e 2a29 242f 733b 0a20 (.*)\\/(.*)$/s;. \n-000006d0: 2020 2024 6469 7220 3d20 272f 2720 6966 $dir = '/' if\n-000006e0: 2028 2464 6972 2065 7120 2727 293b 2020 ($dir eq ''); \n-000006f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000700: 2023 2067 696c 742c 2066 616c 6c73 207a # gilt, falls z\n-00000710: 2e42 2e20 2f66 696c 656e 616d 650a 2020 .B. /filename. \n-00000720: 2020 7265 7475 726e 2028 2464 6972 2c20 return ($dir, \n-00000730: 2466 696c 6529 3b0a 7d0a 6d79 2028 2472 $file);.}.my ($r\n-00000740: 6571 2c20 2470 726f 6729 203d 2026 6c69 eq, $prog) = &li\n-00000750: 6250 6174 6828 2430 293b 0a75 6e73 6869 bPath($0);.unshi\n-00000760: 6674 2040 494e 432c 2022 2472 6571 223b ft @INC, \"$req\";\n-00000770: 0a0a 0a72 6571 7569 7265 2022 6368 6563 ...require \"chec\n-00000780: 6b50 6172 616d 322e 706c 223b 0a72 6571 kParam2.pl\";.req\n-00000790: 7569 7265 2022 7461 696c 2e70 6c22 3b0a uire \"tail.pl\";.\n-000007a0: 7265 7175 6972 6520 2270 724c 6f67 2e70 require \"prLog.p\n-000007b0: 6c22 3b0a 7265 7175 6972 6520 2776 6572 l\";.require 'ver\n-000007c0: 7369 6f6e 2e70 6c27 3b0a 7265 7175 6972 sion.pl';.requir\n-000007d0: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';.\n-000007e0: 0a0a 6d79 2028 2563 6f6c 6f72 7329 203d ..my (%colors) =\n-000007f0: 2028 2772 6564 2720 3d3e 2031 2c0a 0909 ('red' => 1,...\n-00000800: 2767 7265 656e 2720 3d3e 2031 2c0a 0909 'green' => 1,...\n-00000810: 2779 656c 6c6f 7727 203d 3e20 312c 0a09 'yellow' => 1,..\n-00000820: 0927 626c 7565 2720 3d3e 2031 2c0a 0909 .'blue' => 1,...\n-00000830: 276d 6167 656e 7461 2720 3d3e 2031 2c0a 'magenta' => 1,.\n-00000840: 0909 2763 7961 6e27 203d 3e20 3129 3b0a ..'cyan' => 1);.\n-00000850: 0a0a 3d68 6561 6431 204e 414d 450a 0a6d ..=head1 NAME..m\n-00000860: 756c 7469 5461 696c 2e70 6c20 2d20 5265 ultiTail.pl - Re\n-00000870: 6164 206d 756c 7469 706c 6520 6c6f 6720 ad multiple log \n-00000880: 6669 6c65 732e 2054 6865 206c 6f67 2066 files. The log f\n-00000890: 696c 6573 2063 616e 2062 6520 7772 6974 iles can be writ\n-000008a0: 7465 6e20 726f 756e 642e 0a0a 3d68 6561 ten round...=hea\n-000008b0: 6431 2053 594e 4f50 5349 530a 0a09 6d75 d1 SYNOPSIS...mu\n-000008c0: 6c74 6954 6169 6c2e 706c 205b 2d61 5d20 ltiTail.pl [-a] \n-000008d0: 5b2d 6420 6465 6c61 795d 205b 2d70 2062 [-d delay] [-p b\n-000008e0: 6567 696e 7c65 6e64 5d0a 2020 2020 2020 egin|end]. \n-000008f0: 2020 2020 2020 2020 2020 5b2d 2d70 7269 [--pri\n-00000900: 6e74 5d20 5b2d 745d 205b 2d6f 206f 7574 nt] [-t] [-o out\n-00000910: 4669 6c65 205b 2d6d 206d 6178 5d20 5b2d File [-m max] [-\n-00000920: 505d 0a09 0920 5b5b 2d6e 206e 6f46 696c P]... [[-n noFil\n-00000930: 6573 5d20 7c20 5b2d 7320 5b2d 6320 636f es] | [-s [-c co\n-00000940: 6d70 7265 7373 7072 6f67 5d5d 205d 0a09 mpressprog]] ]..\n-00000950: 095d 0a09 095b 2d43 2063 6f6c 6f72 3d70 .]...[-C color=p\n-00000960: 6174 7465 726e 205b 2d43 2063 6f6c 6f72 attern [-C color\n-00000970: 3d70 6174 7465 726e 202e 2e2e 5d5d 0a09 =pattern ...]]..\n-00000980: 095b 2d67 2065 7870 7265 7373 696f 6e5d .[-g expression]\n-00000990: 2066 696c 6573 2e2e 2e0a 0a3d 6865 6164 files.....=head\n-000009a0: 3120 4f50 5449 4f4e 530a 0a3d 6f76 6572 1 OPTIONS..=over\n-000009b0: 2038 0a0a 3d69 7465 6d20 423c 2d61 3e2c 8..=item B<-a>,\n-000009c0: 2042 3c2d 2d61 6464 4e61 6d65 3e0a 0a20 B<--addName>.. \n-000009d0: 2020 2061 6464 2066 696c 656e 616d 6520 add filename \n-000009e0: 746f 2074 6865 206f 7574 7075 7420 6174 to the output at\n-000009f0: 2074 6865 2062 6567 696e 6e69 6e67 206f the beginning o\n-00000a00: 6620 6561 6368 206c 696e 650a 0a3d 6974 f each line..=it\n-00000a10: 656d 2042 3c2d 643e 2c20 423c 2d2d 6465 em B<-d>, B<--de\n-00000a20: 6c61 793e 0a0a 2020 2020 6465 6c61 7920 lay>.. delay \n-00000a30: 696e 2073 6563 2e20 6265 7477 6565 6e20 in sec. between \n-00000a40: 6368 6563 6b69 6e67 2074 6865 2066 696c checking the fil\n-00000a50: 6573 2028 6465 6661 756c 7420 3520 7365 es (default 5 se\n-00000a60: 6329 0a0a 3d69 7465 6d20 423c 2d70 3e2c c)..=item B<-p>,\n-00000a70: 2042 3c2d 2d70 6f73 6974 696f 6e3e 0a0a B<--position>..\n-00000a80: 2020 2020 7265 6164 2066 726f 6d20 6265 read from be\n-00000a90: 6769 6e20 6f72 2065 6e64 206f 6620 6669 gin or end of fi\n-00000aa0: 6c65 2028 6465 6661 756c 7420 3d20 6265 le (default = be\n-00000ab0: 6769 6e29 0a0a 3d69 7465 6d20 423c 2d2d gin)..=item B<--\n-00000ac0: 7072 696e 743e 0a0a 2020 2020 7072 696e print>.. prin\n-00000ad0: 7420 636f 6e66 6967 7572 6174 696f 6e20 t configuration \n-00000ae0: 7265 6164 2066 726f 6d20 636f 6e66 6967 read from config\n-00000af0: 7572 6174 696f 6e20 6669 6c65 0a20 2020 uration file. \n-00000b00: 206f 7220 636f 6d6d 616e 6420 6c69 6e65 or command line\n-00000b10: 2061 6e64 2073 746f 700a 0a3d 6974 656d and stop..=item\n-00000b20: 2042 3c2d 743e 2c20 423c 2d2d 7769 7468 B<-t>, B<--with\n-00000b30: 5469 6d65 3e0a 0a20 2020 2077 6974 6820 Time>.. with \n-00000b40: 6375 7272 656e 7420 7469 6d65 2061 6e64 current time and\n-00000b50: 2064 6174 6520 696e 2074 6865 206f 7574 date in the out\n-00000b60: 7075 740a 0a3d 6974 656d 2042 3c2d 6f3e put..=item B<-o>\n-00000b70: 2c20 423c 2d2d 6f75 743e 0a0a 2020 2020 , B<--out>.. \n-00000b80: 7772 6974 6520 6f75 7470 7574 2074 6f20 write output to \n-00000b90: 6669 6c65 0a0a 3d69 7465 6d20 423c 2d6d file..=item B<-m\n-00000ba0: 3e2c 2042 3c2d 2d6d 6178 4669 6c65 6c65 >, B<--maxFilele\n-00000bb0: 6e3e 0a0a 2020 2020 6d61 7869 6d61 6c20 n>.. maximal \n-00000bc0: 6c65 6e20 6f66 2066 696c 6520 7772 6974 len of file writ\n-00000bd0: 7465 6e20 726f 756e 6420 2864 6566 6175 ten round (defau\n-00000be0: 6c74 203d 2031 6536 290a 0a3d 6974 656d lt = 1e6)..=item\n-00000bf0: 2042 3c2d 6e3e 2c20 423c 2d2d 6e6f 4f66 B<-n>, B<--noOf\n-00000c00: 4f6c 6446 696c 6573 3e0a 0a20 2020 206e OldFiles>.. n\n-00000c10: 756d 6265 7220 6f66 206f 6c64 2066 696c umber of old fil\n-00000c20: 6573 2074 6f20 7374 6f72 650a 0a3d 6974 es to store..=it\n-00000c30: 656d 2042 3c2d 503e 2c20 423c 2d2d 7769 em B<-P>, B<--wi\n-00000c40: 7468 5049 443e 0a0a 2020 2020 7772 6974 thPID>.. writ\n-00000c50: 6520 7069 6420 746f 206c 6f67 2066 696c e pid to log fil\n-00000c60: 6520 2864 6566 6175 6c74 2069 7320 6e6f e (default is no\n-00000c70: 7429 0a0a 3d69 7465 6d20 423c 2d48 3e2c t)..=item B<-H>,\n-00000c80: 2042 3c2d 2d77 6974 6848 6f73 746e 616d B<--withHostnam\n-00000c90: 653e 0a0a 2020 2020 7772 6974 6520 686f e>.. write ho\n-00000ca0: 7374 6e61 6d65 2074 6f20 6c6f 6720 6669 stname to log fi\n-00000cb0: 6c65 2028 6465 6661 756c 7420 6973 206e le (default is n\n-00000cc0: 6f74 290a 0a3d 6974 656d 2042 3c2d 6c3e ot)..=item B<-l>\n-00000cd0: 2c20 423c 2d2d 6d61 786c 696e 6573 3e0a , B<--maxlines>.\n-00000ce0: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num\n-00000cf0: 6265 7220 6f66 206c 696e 6573 2074 6f20 ber of lines to \n-00000d00: 7265 6164 2070 6572 202d 2d64 656c 6179 read per --delay\n-00000d10: 2069 6e20 6f6e 6520 6368 756e 6b0a 2020 in one chunk. \n-00000d20: 2020 6672 6f6d 2061 206c 6f67 2066 696c from a log fil\n-00000d30: 6520 2864 6566 6175 6c74 203d 2031 3030 e (default = 100\n-00000d40: 3029 0a20 2020 2073 6574 7469 6e67 2074 0). setting t\n-00000d50: 6869 7320 7661 6c75 6520 746f 2030 206d his value to 0 m\n-00000d60: 6561 6e73 2074 6f20 7265 6164 2061 6c6c eans to read all\n-00000d70: 206c 696e 6573 2069 6d6d 6564 6961 7465 lines immediate\n-00000d80: 6c79 0a0a 3d69 7465 6d20 423c 2d73 3e2c ly..=item B<-s>,\n-00000d90: 2042 3c2d 2d73 6176 654c 6f67 733e 0a0a B<--saveLogs>..\n-00000da0: 2020 2020 7361 7665 206c 6f67 2066 696c save log fil\n-00000db0: 6573 2077 6974 6820 6461 7465 2061 6e64 es with date and\n-00000dc0: 2074 696d 6520 696e 7374 6561 6420 6f66 time instead of\n-00000dd0: 2064 656c 6574 696e 6720 7468 650a 2020 deleting the. \n-00000de0: 2020 6f6c 6420 2877 6974 6820 5b2d 6e6f old (with [-no\n-00000df0: 4f66 4f6c 6446 696c 6573 5d29 0a0a 3d69 OfOldFiles])..=i\n-00000e00: 7465 6d20 423c 2d63 3e2c 2042 3c2d 2d63 tem B<-c>, B<--c\n-00000e10: 6f6d 7072 6573 7357 6974 683e 0a0a 2020 ompressWith>.. \n-00000e20: 2020 636f 6d70 7265 7373 2073 6176 6564 compress saved\n-00000e30: 206c 6f67 2066 696c 6573 2028 652e 672e log files (e.g.\n-00000e40: 2077 6974 6820 2d63 2027 677a 6970 202d with -c 'gzip -\n-00000e50: 3927 290a 0a3d 6974 656d 2042 3c2d 433e 9')..=item B<-C>\n-00000e60: 2c20 423c 2d2d 636f 6c6f 723e 0a0a 2020 , B<--color>.. \n-00000e70: 2020 7573 6520 636f 6c6f 7220 666f 7220 use color for \n-00000e80: 6120 6c69 6e65 2069 6620 7370 6563 6966 a line if specif\n-00000e90: 6965 6420 7061 7474 6572 6e20 6d61 7463 ied pattern matc\n-00000ea0: 6865 730a 2020 2020 7375 7070 6f72 7465 hes. supporte\n-00000eb0: 6420 636f 6c6f 7273 2061 7265 3a0a 2020 d colors are:. \n-00000ec0: 2020 2772 6564 272c 2027 6772 6565 6e27 'red', 'green'\n-00000ed0: 2c20 2779 656c 6c6f 7727 2c20 2762 6c75 , 'yellow', 'blu\n-00000ee0: 6527 2c20 276d 6167 656e 7461 272c 2027 e', 'magenta', '\n-00000ef0: 6379 616e 270a 2020 2020 7468 6973 206f cyan'. this o\n-00000f00: 7074 696f 6e20 6361 6e20 6265 2075 7365 ption can be use\n-00000f10: 6420 6d75 6c74 6970 6c65 2074 696d 6573 d multiple times\n-00000f20: 0a20 2020 2065 7861 6d70 6c65 3a0a 2020 . example:. \n-00000f30: 2020 2020 202d 2d63 6f6c 6f72 2072 6564 --color red\n-00000f40: 3d45 5252 4f52 0a0a 3d69 7465 6d20 423c =ERROR..=item B<\n-00000f50: 2d67 3e2c 2042 3c2d 2d67 7265 703e 0a0a -g>, B<--grep>..\n-00000f60: 2020 2020 6772 6570 2066 6f72 206c 696e grep for lin\n-00000f70: 6573 2077 6974 6820 7468 6520 7370 6563 es with the spec\n-00000f80: 6966 6965 6420 6578 7072 6573 7369 6f6e ified expression\n-00000f90: 0a20 2020 2065 7861 6d70 6c65 3a0a 2020 . example:. \n-00000fa0: 2020 2020 202d 2d67 7265 7020 2745 5252 --grep 'ERR\n-00000fb0: 4f52 7c57 4152 4e49 4e47 270a 0a3d 6974 OR|WARNING'..=it\n-00000fc0: 656d 2042 3c2d 563e 0a0a 2020 2020 7072 em B<-V>.. pr\n-00000fd0: 696e 7420 7665 7273 696f 6e28 7329 0a0a int version(s)..\n-00000fe0: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO\n-00000ff0: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig\n-00001000: 6874 2028 6329 2032 3030 312d 3230 3232 ht (c) 2001-2022\n-00001010: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef \n-00001020: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM\n-00001030: 4529 0a50 7562 6c69 7368 6564 2075 6e64 E).Published und\n-00001040: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener\n-00001050: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens\n-00001060: 6520 6f72 2061 6e79 206c 6174 6572 2076 e or any later v\n-00001070: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my\n-00001080: 2024 4865 6c70 203d 2026 3a3a 6765 7450 $Help = &::getP\n-00001090: 6f64 3254 6578 7428 2430 293b 0a0a 2670 od2Text($0);..&p\n-000010a0: 7269 6e74 5665 7273 696f 6e28 5c40 4152 rintVersion(\\@AR\n-000010b0: 4756 2c20 272d 5627 2c20 272d 2d76 6572 GV, '-V', '--ver\n-000010c0: 7369 6f6e 2729 3b0a 0a6d 7920 2443 6865 sion');..my $Che\n-000010d0: 636b 5061 7220 3d20 4368 6563 6b50 6172 ckPar = CheckPar\n-000010e0: 616d 2d3e 6e65 7728 272d 616c 6c6f 774c am->new('-allowL\n-000010f0: 6973 7473 2720 3d3e 2027 7965 7327 2c0a ists' => 'yes',.\n-00001100: 0909 0920 2020 2020 2020 272d 6c69 7374 ... '-list\n-00001110: 2720 3d3e 205b 0a09 0909 0920 2020 4f70 ' => [..... Op\n-00001120: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00001130: 2720 3d3e 2027 6164 644e 616d 6527 2c0a ' => 'addName',.\n-00001140: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl\n-00001150: 5f6f 7074 696f 6e27 203d 3e20 272d 6127 _option' => '-a'\n-00001160: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '-\n-00001170: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001180: 6164 644e 616d 6527 292c 0a09 0909 0920 addName'),..... \n-00001190: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n-000011a0: 6e61 6d65 2720 3d3e 2027 6465 6c61 7927 name' => 'delay'\n-000011b0: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '-\n-000011c0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-000011d0: 6427 2c0a 0909 0909 0920 2020 2020 2020 d',...... \n-000011e0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-000011f0: 2d2d 6465 6c61 7927 2c0a 0909 0909 0920 --delay',...... \n-00001200: 2020 2020 2020 272d 6465 6661 756c 7427 '-default'\n-00001210: 203d 3e20 3529 2c0a 0909 0909 2020 204f => 5),..... O\n-00001220: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001230: 6527 203d 3e20 2770 6f73 6974 696f 6e27 e' => 'position'\n-00001240: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '-\n-00001250: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001260: 7027 2c0a 0909 0909 0920 2020 2020 2020 p',...... \n-00001270: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001280: 2d2d 706f 7369 7469 6f6e 272c 0a09 0909 --position',....\n-00001290: 0909 2020 2020 2020 2027 2d64 6566 6175 .. '-defau\n-000012a0: 6c74 2720 3d3e 2027 6265 6769 6e27 2c0a lt' => 'begin',.\n-000012b0: 0909 0909 0920 2020 2020 2020 272d 7061 ..... '-pa\n-000012c0: 7474 6572 6e27 203d 3e0a 0909 0909 0920 ttern' =>...... \n-000012d0: 2020 2020 2020 275e 6265 6769 6e24 7c5e '^begin$|^\n-000012e0: 656e 6424 2720 2320 270a 0909 0909 2020 end$' # '..... \n-000012f0: 2029 2c0a 0909 0909 2020 204f 7074 696f ),..... Optio\n-00001300: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001310: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',......\n-00001320: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti\n-00001330: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7427 on' => '--print'\n-00001340: 292c 0a09 0909 0920 2020 4f70 7469 6f6e ),..... Option\n-00001350: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001360: 2027 7769 7468 5469 6d65 272c 0a09 0909 'withTime',....\n-00001370: 0909 2020 2020 2020 2027 2d63 6c5f 6f70 .. '-cl_op\n-00001380: 7469 6f6e 2720 3d3e 2027 2d74 272c 0a09 tion' => '-t',..\n-00001390: 0909 0909 2020 2020 2020 2027 2d63 6c5f .... '-cl_\n-000013a0: 616c 6961 7327 203d 3e20 272d 2d77 6974 alias' => '--wit\n-000013b0: 6854 696d 6527 292c 0a09 0909 0920 2020 hTime'),..... \n-000013c0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000013d0: 6d65 2720 3d3e 2027 6f75 7427 2c0a 0909 me' => 'out',...\n-000013e0: 0909 0920 2020 2020 2020 272d 636c 5f6f ... '-cl_o\n-000013f0: 7074 696f 6e27 203d 3e20 272d 6f27 2c0a ption' => '-o',.\n-00001400: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl\n-00001410: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6f75 _alias' => '--ou\n-00001420: 7427 2c0a 0909 0909 0920 2020 2020 2020 t',...... \n-00001430: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00001440: 2729 2c0a 0909 0909 2020 204f 7074 696f '),..... Optio\n-00001450: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001460: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',.\n-00001470: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl\n-00001480: 5f6f 7074 696f 6e27 203d 3e20 272d 6d27 _option' => '-m'\n-00001490: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '-\n-000014a0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-000014b0: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',....\n-000014c0: 0909 2020 2020 2020 2027 2d64 6566 6175 .. '-defau\n-000014d0: 6c74 2720 3d3e 2031 6536 292c 0a09 0909 lt' => 1e6),....\n-000014e0: 0920 2020 4f70 7469 6f6e 2d3e 6e65 7728 . Option->new(\n-000014f0: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4f66 '-name' => 'noOf\n-00001500: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',......\n-00001510: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti\n-00001520: 6f6e 2720 3d3e 2027 2d6e 272c 0a09 0909 on' => '-n',....\n-00001530: 0909 2020 2020 2020 2027 2d63 6c5f 616c .. '-cl_al\n-00001540: 6961 7327 203d 3e20 272d 2d6e 6f4f 664f ias' => '--noOfO\n-00001550: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... \n-00001560: 2020 2020 2020 272d 7061 7261 6d27 203d '-param' =\n-00001570: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... \n-00001580: 2020 2020 2027 2d6f 6e6c 795f 6966 2720 '-only_if' \n-00001590: 3d3e 0a09 0909 0927 5b70 6974 5d20 616e =>.....'[pit] an\n-000015a0: 6420 6e6f 7420 2820 5b73 6176 654c 6f67 d not ( [saveLog\n-000015b0: 735d 206f 7220 5b63 6f6d 7072 6573 7357 s] or [compressW\n-000015c0: 6974 685d 2927 292c 0a09 0909 0920 2020 ith])'),..... \n-000015d0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000015e0: 6d65 2720 3d3e 2027 7769 7468 5049 4427 me' => 'withPID'\n-000015f0: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '-\n-00001600: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001610: 5027 2c0a 0909 0909 0920 2020 2020 2020 P',...... \n-00001620: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001630: 2d2d 7769 7468 5049 4427 292c 0a09 0909 --withPID'),....\n-00001640: 0920 2020 4f70 7469 6f6e 2d3e 6e65 7728 . Option->new(\n-00001650: 272d 6e61 6d65 2720 3d3e 2027 7769 7468 '-name' => 'with\n-00001660: 486f 7374 6e61 6d65 272c 0a09 0909 0909 Hostname',......\n-00001670: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti\n-00001680: 6f6e 2720 3d3e 2027 2d48 272c 0a09 0909 on' => '-H',....\n-00001690: 0909 2020 2020 2020 2027 2d63 6c5f 616c .. '-cl_al\n-000016a0: 6961 7327 203d 3e20 272d 2d77 6974 6848 ias' => '--withH\n-000016b0: 6f73 746e 616d 6527 292c 0a09 0909 0920 ostname'),..... \n-000016c0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n-000016d0: 6e61 6d65 2720 3d3e 2027 6d61 786c 696e name' => 'maxlin\n-000016e0: 6573 272c 0a09 0909 0909 2020 2020 2020 es',...... \n-000016f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001700: 2027 2d6c 272c 0a09 0909 0909 2020 2020 '-l',...... \n-00001710: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00001720: 3e20 272d 2d6d 6178 6c69 6e65 7327 2c0a > '--maxlines',.\n-00001730: 0909 0909 0920 2020 2020 2020 272d 6465 ..... '-de\n-00001740: 6661 756c 7427 203d 3e20 3130 3030 2c0a fault' => 1000,.\n-00001750: 0909 0909 0920 2020 2020 2020 272d 7061 ..... '-pa\n-00001760: 7474 6572 6e27 203d 3e20 275e 5c64 2b24 ttern' => '^\\d+$\n-00001770: 2720 2320 270a 0909 0909 2020 2029 2c0a ' # '..... ),.\n-00001780: 0909 0909 2020 204f 7074 696f 6e2d 3e6e .... Option->n\n-00001790: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's\n-000017a0: 6176 654c 6f67 7327 2c0a 0909 0909 0920 aveLogs',...... \n-000017b0: 2020 2020 2020 272d 636c 5f6f 7074 696f '-cl_optio\n-000017c0: 6e27 203d 3e20 272d 7327 2c0a 0909 0909 n' => '-s',.....\n-000017d0: 0920 2020 2020 2020 272d 636c 5f61 6c69 . '-cl_ali\n-000017e0: 6173 2720 3d3e 2027 2d2d 7361 7665 4c6f as' => '--saveLo\n-000017f0: 6773 272c 0a09 0909 0909 2020 2020 2020 gs',...... \n-00001800: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>..\n-00001810: 0909 0909 2020 2020 2020 2027 5b6f 7574 .... '[out\n-00001820: 5d20 616e 6420 6e6f 7420 5b6e 6f4f 664f ] and not [noOfO\n-00001830: 6c64 4669 6c65 735d 2729 2c0a 0909 0909 ldFiles]'),.....\n-00001840: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-00001850: 2d6e 616d 6527 203d 3e20 2763 6f6d 7072 -name' => 'compr\n-00001860: 6573 7357 6974 6827 2c0a 0909 0909 0920 essWith',...... \n-00001870: 2020 2020 2020 272d 636c 5f6f 7074 696f '-cl_optio\n-00001880: 6e27 203d 3e20 272d 6327 2c0a 0909 0909 n' => '-c',.....\n-00001890: 0920 2020 2020 2020 272d 636c 5f61 6c69 . '-cl_ali\n-000018a0: 6173 2720 3d3e 2027 2d2d 636f 6d70 7265 as' => '--compre\n-000018b0: 7373 5769 7468 272c 0a09 0909 0909 2020 ssWith',...... \n-000018c0: 2020 2020 2027 2d70 6172 616d 2720 3d3e '-param' =>\n-000018d0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... \n-000018e0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-000018f0: 3e0a 0909 0909 0920 2020 2020 2020 275b >...... '[\n-00001900: 6f75 745d 2061 6e64 206e 6f74 205b 6e6f out] and not [no\n-00001910: 4f66 4f6c 6446 696c 6573 5d27 292c 0a09 OfOldFiles]'),..\n-00001920: 0909 0920 2020 4f70 7469 6f6e 2d3e 6e65 ... Option->ne\n-00001930: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co\n-00001940: 6c6f 7227 2c0a 0909 0909 0920 2020 2020 lor',...... \n-00001950: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00001960: 3e20 272d 4327 2c0a 0909 0909 0920 2020 > '-C',...... \n-00001970: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n-00001980: 3d3e 2027 2d2d 636f 6c6f 7227 2c0a 0909 => '--color',...\n-00001990: 0909 0920 2020 2020 2020 272d 6d75 6c74 ... '-mult\n-000019a0: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'),\n-000019b0: 0a09 0909 0920 2020 4f70 7469 6f6e 2d3e ..... Option->\n-000019c0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-000019d0: 6772 6570 272c 0a09 0909 0909 2020 2020 grep',...... \n-000019e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000019f0: 3d3e 2027 2d67 272c 0a09 0909 0909 2020 => '-g',...... \n-00001a00: 2020 2020 2027 2d63 6c5f 616c 6961 7327 '-cl_alias'\n-00001a10: 203d 3e20 272d 2d67 7265 7027 2c0a 0909 => '--grep',...\n-00001a20: 0909 0920 2020 2020 2020 272d 7061 7261 ... '-para\n-00001a30: 6d27 203d 3e20 2779 6573 2729 0a09 0909 m' => 'yes')....\n-00001a40: 2020 2020 2020 205d 0a20 2020 2029 3b0a ]. );.\n-00001a50: 0a24 4368 6563 6b50 6172 2d3e 6368 6563 .$CheckPar->chec\n-00001a60: 6b28 272d 6172 6776 2720 3d3e 205c 4041 k('-argv' => \\@A\n-00001a70: 5247 562c 0a20 2020 2020 2020 2020 2020 RGV,. \n-00001a80: 2020 2020 2020 272d 6865 6c70 2720 3d3e '-help' =>\n-00001a90: 2024 4865 6c70 0a20 2020 2020 2020 2020 $Help. \n-00001aa0: 2020 2020 2020 2020 293b 0a0a 6d79 2024 );..my $\n-00001ab0: 6465 6c61 7920 3d20 2443 6865 636b 5061 delay = $CheckPa\n-00001ac0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00001ad0: 2827 6465 6c61 7927 293b 0a6d 7920 2461 ('delay');.my $a\n-00001ae0: 6464 4e61 6d65 203d 2031 2069 6620 2824 ddName = 1 if ($\n-00001af0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001b00: 5769 7468 6f75 7450 6172 2827 6164 644e WithoutPar('addN\n-00001b10: 616d 6527 2929 3b0a 6d79 2024 706f 7369 ame'));.my $posi\n-00001b20: 7469 6f6e 203d 2024 4368 6563 6b50 6172 tion = $CheckPar\n-00001b30: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00001b40: 2770 6f73 6974 696f 6e27 293b 0a6d 7920 'position');.my \n-00001b50: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP\n-00001b60: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00001b70: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m\n-00001b80: 7920 2477 6974 6854 696d 6520 3d20 2824 y $withTime = ($\n-00001b90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001ba0: 5769 7468 6f75 7450 6172 2827 7769 7468 WithoutPar('with\n-00001bb0: 5469 6d65 2729 2920 3f20 2779 6573 2720 Time')) ? 'yes' \n-00001bc0: 3a20 276e 6f27 3b0a 6d79 2024 6f75 7420 : 'no';.my $out \n-00001bd0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001be0: 4f70 7457 6974 6850 6172 2827 6f75 7427 OptWithPar('out'\n-00001bf0: 293b 0a6d 7920 246d 6178 4669 6c65 6c65 );.my $maxFilele\n-00001c00: 6e20 3d20 2443 6865 636b 5061 722d 3e67 n = $CheckPar->g\n-00001c10: 6574 4f70 7457 6974 6850 6172 2827 6d61 etOptWithPar('ma\n-00001c20: 7846 696c 656c 656e 2729 3b0a 6d79 2024 xFilelen');.my $\n-00001c30: 6e6f 4f66 4f6c 6446 696c 6573 203d 2024 noOfOldFiles = $\n-00001c40: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001c50: 5769 7468 5061 7228 276e 6f4f 664f 6c64 WithPar('noOfOld\n-00001c60: 4669 6c65 7327 293b 0a6d 7920 2477 6974 Files');.my $wit\n-00001c70: 6850 4944 203d 2024 4368 6563 6b50 6172 hPID = $CheckPar\n-00001c80: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00001c90: 6172 2827 7769 7468 5049 4427 2920 3f20 ar('withPID') ? \n-00001ca0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my\n-00001cb0: 2024 686f 7374 6e61 6d65 203d 2024 4368 $hostname = $Ch\n-00001cc0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00001cd0: 7468 6f75 7450 6172 2827 7769 7468 486f thoutPar('withHo\n-00001ce0: 7374 6e61 6d65 2729 203f 2060 686f 7374 stname') ? `host\n-00001cf0: 6e61 6d65 202d 6660 203a 2027 273b 0a63 name -f` : '';.c\n-00001d00: 686f 6d70 2024 686f 7374 6e61 6d65 3b0a homp $hostname;.\n-00001d10: 6d79 2024 6d61 786c 696e 6573 203d 2024 my $maxlines = $\n-00001d20: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001d30: 5769 7468 5061 7228 276d 6178 6c69 6e65 WithPar('maxline\n-00001d40: 7327 293b 0a6d 7920 2473 6176 654c 6f67 s');.my $saveLog\n-00001d50: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g\n-00001d60: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00001d70: 2773 6176 654c 6f67 7327 293b 0a24 7361 'saveLogs');.$sa\n-00001d80: 7665 4c6f 6773 203d 2027 7965 7327 2069 veLogs = 'yes' i\n-00001d90: 6620 2473 6176 654c 6f67 733b 0a6d 7920 f $saveLogs;.my \n-00001da0: 2463 6f6d 7072 6573 7357 6974 6820 3d20 $compressWith = \n-00001db0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001dc0: 7457 6974 6850 6172 2827 636f 6d70 7265 tWithPar('compre\n-00001dd0: 7373 5769 7468 2729 3b0a 6d79 2024 636f ssWith');.my $co\n-00001de0: 6c6f 7220 3d20 2443 6865 636b 5061 722d lor = $CheckPar-\n-00001df0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00001e00: 636f 6c6f 7227 293b 0a6d 7920 2467 7265 color');.my $gre\n-00001e10: 7020 3d20 2443 6865 636b 5061 722d 3e67 p = $CheckPar->g\n-00001e20: 6574 4f70 7457 6974 6850 6172 2827 6772 etOptWithPar('gr\n-00001e30: 6570 2729 3b0a 0a75 6e6c 6573 7320 2824 ep');..unless ($\n-00001e40: 4368 6563 6b50 6172 2d3e 6765 744e 6f4c CheckPar->getNoL\n-00001e50: 6973 7450 6172 2829 290a 7b0a 2020 2020 istPar()).{. \n-00001e60: 7072 696e 7420 2224 4865 6c70 223b 0a20 print \"$Help\";. \n-00001e70: 2020 2065 7869 7420 313b 0a7d 0a0a 6966 exit 1;.}..if\n-00001e80: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. \n-00001e90: 2443 6865 636b 5061 722d 3e70 7269 6e74 $CheckPar->print\n-00001ea0: 2829 3b0a 2020 2020 6578 6974 2030 3b0a ();. exit 0;.\n-00001eb0: 7d0a 0a23 2067 6574 2063 6f6c 6f72 7320 }..# get colors \n-00001ec0: 616e 6420 7061 7474 6572 6e0a 6d79 2028 and pattern.my (\n-00001ed0: 4063 6f6c 2c20 4070 6174 293b 0a66 6f72 @col, @pat);.for\n-00001ee0: 6561 6368 206d 7920 2463 6f6c 2028 4024 each my $col (@$\n-00001ef0: 636f 6c6f 7229 0a7b 0a20 2020 206d 7920 color).{. my \n-00001f00: 2824 632c 2024 7029 203d 2073 706c 6974 ($c, $p) = split\n-00001f10: 282f 3d2f 2c20 2463 6f6c 2c20 3229 3b0a (/=/, $col, 2);.\n-00001f20: 2020 2020 756e 6c65 7373 2028 6465 6669 unless (defi\n-00001f30: 6e65 6420 2470 290a 2020 2020 7b0a 0970 ned $p). {..p\n-00001f40: 7269 6e74 2053 5444 4552 5220 2277 726f rint STDERR \"wro\n-00001f50: 6e67 2061 7267 756d 656e 7420 3c24 636f ng argument <$co\n-00001f60: 6c3e 2066 6f72 206f 7074 696f 6e20 2d2d l> for option --\n-00001f70: 636f 6c6f 723a 2027 3d27 2069 7320 6d69 color: '=' is mi\n-00001f80: 7373 696e 675c 6e22 3b0a 0965 7869 7420 ssing\\n\";..exit \n-00001f90: 313b 0a20 2020 207d 0a20 2020 2075 6e6c 1;. }. unl\n-00001fa0: 6573 7320 2864 6566 696e 6564 2024 636f ess (defined $co\n-00001fb0: 6c6f 7273 7b24 637d 290a 2020 2020 7b0a lors{$c}). {.\n-00001fc0: 0970 7269 6e74 2053 5444 4552 5220 2263 .print STDERR \"c\n-00001fd0: 6f6c 6f72 203c 2463 3e20 6e6f 7420 7375 olor <$c> not su\n-00001fe0: 7070 6f72 7465 6420 696e 2061 7267 756d pported in argum\n-00001ff0: 656e 7420 3c24 636f 6c3e 2066 6f72 206f ent <$col> for o\n-00002000: 7074 696f 6e20 2d2d 636f 6c6f 725c 6e22 ption --color\\n\"\n-00002010: 2c0a 0922 616c 6c6f 7765 6420 636f 6c6f ,..\"allowed colo\n-00002020: 7273 2061 7265 3a20 222c 096a 6f69 6e28 rs are: \",.join(\n-00002030: 272c 2027 2c20 736f 7274 206b 6579 7320 ', ', sort keys \n-00002040: 2563 6f6c 6f72 7329 2c20 225c 6e22 3b0a %colors), \"\\n\";.\n-00002050: 0965 7869 7420 313b 0a20 2020 207d 0a20 .exit 1;. }. \n-00002060: 2020 2070 7573 6820 4063 6f6c 2c20 2463 push @col, $c\n-00002070: 3b0a 2020 2020 7075 7368 2040 7061 742c ;. push @pat,\n-00002080: 2024 703b 0a7d 0a24 5465 726d 3a3a 414e $p;.}.$Term::AN\n-00002090: 5349 436f 6c6f 723a 3a41 5554 4f52 4553 SIColor::AUTORES\n-000020a0: 4554 203d 2031 0a20 2020 2069 6620 4063 ET = 1. if @c\n-000020b0: 6f6c 3b0a 0a0a 2320 7369 676e 616c 2068 ol;...# signal h\n-000020c0: 616e 646c 696e 670a 2453 4947 7b49 4e54 andling.$SIG{INT\n-000020d0: 7d20 3d20 2453 4947 7b54 4552 4d7d 203d } = $SIG{TERM} =\n-000020e0: 205c 2663 6c65 616e 7570 3b0a 0a23 2049 \\&cleanup;..# I\n-000020f0: 6e69 7469 616c 6973 6965 7275 6e67 0a6d nitialisierung.m\n-00002100: 7920 4066 696c 6573 3b0a 6d79 2024 6669 y @files;.my $fi\n-00002110: 6c65 3b0a 6d79 2024 6974 6572 203d 2049 le;.my $iter = I\n-00002120: 7465 725f 5061 724c 6973 742d 3e6e 6577 ter_ParList->new\n-00002130: 2824 4368 6563 6b50 6172 293b 0a77 6869 ($CheckPar);.whi\n-00002140: 6c65 2028 2466 696c 6520 3d20 2469 7465 le ($file = $ite\n-00002150: 722d 3e6e 6578 7428 2929 0a7b 0a20 2020 r->next()).{. \n-00002160: 206d 7920 2466 203d 2028 2461 6464 4e61 my $f = ($addNa\n-00002170: 6d65 2920 3f20 2224 6669 6c65 2022 203a me) ? \"$file \" :\n-00002180: 2027 273b 0a20 2020 2070 7573 6820 4066 '';. push @f\n-00002190: 696c 6573 2c20 7461 696c 4f6e 6546 696c iles, tailOneFil\n-000021a0: 652d 3e6e 6577 2827 2d66 696c 656e 616d e->new('-filenam\n-000021b0: 6527 203d 3e20 2466 696c 652c 0a09 0909 e' => $file,....\n-000021c0: 0920 2027 2d70 6f73 6974 696f 6e27 203d . '-position' =\n-000021d0: 3e20 2470 6f73 6974 696f 6e2c 0a09 0909 > $position,....\n-000021e0: 0920 2027 2d70 7265 6669 7827 203d 3e20 . '-prefix' => \n-000021f0: 2466 2c0a 0909 0909 2020 272d 6d61 786c $f,..... '-maxl\n-00002200: 696e 6573 2720 3d3e 2024 6d61 786c 696e ines' => $maxlin\n-00002210: 6573 290a 7d0a 0a0a 2320 4175 7367 6162 es).}...# Ausgab\n-00002220: 656f 626a 656b 7420 6572 7a65 7567 656e eobjekt erzeugen\n-00002230: 0a6d 7920 2840 6669 6c65 6f75 7429 203d .my (@fileout) =\n-00002240: 2028 272d 6669 6c65 2720 3d3e 2024 6f75 ('-file' => $ou\n-00002250: 7429 2069 6620 2824 6f75 7429 3b0a 6d79 t) if ($out);.my\n-00002260: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL\n-00002270: 6f67 2d3e 6e65 7728 4066 696c 656f 7574 og->new(@fileout\n-00002280: 2c0a 0909 0920 2027 2d77 6974 6854 696d ,.... '-withTim\n-00002290: 6527 203d 3e20 2477 6974 6854 696d 652c e' => $withTime,\n-000022a0: 0a09 0909 2020 272d 6d61 7846 696c 656c .... '-maxFilel\n-000022b0: 656e 2720 3d3e 2024 6d61 7846 696c 656c en' => $maxFilel\n-000022c0: 656e 2c0a 0909 0920 2027 2d6e 6f4f 664f en,.... '-noOfO\n-000022d0: 6c64 4669 6c65 7327 203d 3e20 246e 6f4f ldFiles' => $noO\n-000022e0: 664f 6c64 4669 6c65 732c 0a09 0909 2020 fOldFiles,.... \n-000022f0: 272d 7361 7665 4c6f 6773 2720 3d3e 2024 '-saveLogs' => $\n-00002300: 7361 7665 4c6f 6773 2c0a 0909 0920 2027 saveLogs,.... '\n-00002310: 2d63 6f6d 7072 6573 7357 6974 6827 203d -compressWith' =\n-00002320: 3e20 2463 6f6d 7072 6573 7357 6974 682c > $compressWith,\n-00002330: 0a09 0909 2020 272d 7769 7468 5049 4427 .... '-withPID'\n-00002340: 203d 3e20 2477 6974 6850 4944 2c0a 0909 => $withPID,...\n-00002350: 0920 2027 2d68 6f73 746e 616d 6527 203d . '-hostname' =\n-00002360: 3e20 2468 6f73 746e 616d 650a 2020 2020 > $hostname. \n-00002370: 293b 0a0a 0a6d 7920 2469 203d 2030 3b0a );...my $i = 0;.\n-00002380: 7768 696c 6520 2834 3229 0a7b 0a20 2020 while (42).{. \n-00002390: 206d 7920 2824 6c2c 2024 6529 203d 2024 my ($l, $e) = $\n-000023a0: 6669 6c65 735b 2469 5d2d 3e72 6561 6428 files[$i]->read(\n-000023b0: 293b 0a20 2020 2063 686f 7020 4024 6c3b );. chop @$l;\n-000023c0: 0a0a 2020 2020 2840 246c 2920 3d20 6772 .. (@$l) = gr\n-000023d0: 6570 282f 2467 7265 702f 2c20 4024 6c29 ep(/$grep/, @$l)\n-000023e0: 0a09 6966 2024 6772 6570 3b0a 0a23 2020 ..if $grep;..# \n-000023f0: 2020 7072 696e 7420 2240 246c 5c6e 223b print \"@$l\\n\";\n-00002400: 0a20 2020 2069 6620 2840 636f 6c29 0a20 . if (@col). \n-00002410: 2020 207b 0a09 666f 7265 6163 6820 6d79 {..foreach my\n-00002420: 2024 6c69 6e65 2028 4024 6c29 0a09 7b0a $line (@$l)..{.\n-00002430: 0920 2020 206d 7920 2463 6f6c 466c 6167 . my $colFlag\n-00002440: 203d 2030 3b0a 2370 7269 6e74 2022 2d31 = 0;.#print \"-1\n-00002450: 2d40 636f 6c5c 6e22 3b0a 0920 2020 2066 -@col\\n\";.. f\n-00002460: 6f72 2028 6d79 2024 6a20 3d20 3020 3b20 or (my $j = 0 ; \n-00002470: 246a 203c 2040 636f 6c20 3b20 246a 2b2b $j < @col ; $j++\n-00002480: 290a 0920 2020 207b 0a09 096d 7920 2470 ).. {...my $p\n-00002490: 203d 2024 7061 745b 246a 5d3b 0a23 7072 = $pat[$j];.#pr\n-000024a0: 696e 7420 222d 322d 2470 5c6e 223b 0a09 int \"-2-$p\\n\";..\n-000024b0: 0969 6620 2824 6c69 6e65 203d 7e20 2f24 .if ($line =~ /$\n-000024c0: 702f 290a 0909 7b0a 0909 2020 2020 7072 p/)...{... pr\n-000024d0: 696e 7420 636f 6c6f 7220 2463 6f6c 5b24 int color $col[$\n-000024e0: 6a5d 3b0a 0909 2020 2020 2470 724c 6f67 j];... $prLog\n-000024f0: 2d3e 7072 2824 6c69 6e65 293b 0a09 0920 ->pr($line);... \n-00002500: 2020 2070 7269 6e74 2063 6f6c 6f72 2027 print color '\n-00002510: 7265 7365 7427 3b0a 0909 2020 2020 2463 reset';... $c\n-00002520: 6f6c 466c 6167 203d 2031 3b0a 2370 7269 olFlag = 1;.#pri\n-00002530: 6e74 2022 2d33 2d22 2c20 2463 6f6c 5b24 nt \"-3-\", $col[$\n-00002540: 6a5d 2c20 222d 2463 6f6c 466c 6167 5c6e j], \"-$colFlag\\n\n-00002550: 223b 0a09 0920 2020 206c 6173 743b 0a09 \";... last;..\n-00002560: 097d 0a09 2020 2020 7d0a 0920 2020 2024 .}.. }.. $\n-00002570: 7072 4c6f 672d 3e70 7228 246c 696e 6529 prLog->pr($line)\n-00002580: 0a09 0975 6e6c 6573 7320 2463 6f6c 466c ...unless $colFl\n-00002590: 6167 3b0a 097d 0a20 2020 207d 0a20 2020 ag;..}. }. \n-000025a0: 2065 6c73 650a 2020 2020 7b0a 0924 7072 else. {..$pr\n-000025b0: 4c6f 672d 3e70 7228 4024 6c29 3b0a 2020 Log->pr(@$l);. \n-000025c0: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog->\n-000025d0: 7072 2822 2a2a 2a20 2465 202a 2a2a 2229 pr(\"*** $e ***\")\n-000025e0: 2069 6620 2465 3b0a 0a20 2020 202b 2b24 if $e;.. ++$\n-000025f0: 693b 0a20 2020 2024 6920 253d 2040 6669 i;. $i %= @fi\n-00002600: 6c65 733b 0a20 2020 2073 656c 6563 7428 les;. select(\n-00002610: 756e 6465 662c 2075 6e64 6566 2c20 756e undef, undef, un\n-00002620: 6465 662c 2024 6465 6c61 7920 2f20 4066 def, $delay / @f\n-00002630: 696c 6573 293b 2023 2073 6c65 6570 2069 iles); # sleep i\n-00002640: 6e20 7365 636f 6e64 730a 7d0a 0a0a 0a23 n seconds.}....#\n-00002650: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00002660: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00002670: 2323 2323 2323 230a 7375 6220 636c 6561 #######.sub clea\n-00002680: 6e75 700a 7b0a 2020 2020 6d79 2024 7369 nup.{. my $si\n-00002690: 676e 616d 6520 3d20 7368 6966 743b 0a20 gname = shift;. \n-000026a0: 2020 206d 7920 2465 7869 7420 3d20 2873 my $exit = (s\n-000026b0: 6869 6674 2829 207c 7c20 3129 3b0a 0a20 hift() || 1);.. \n-000026c0: 2020 2070 7269 6e74 2063 6f6c 6f72 2027 print color '\n-000026d0: 7265 7365 7427 3b0a 2020 2020 6578 6974 reset';. exit\n-000026e0: 2024 6578 6974 3b0a 7d0a $exit;.}.\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 6d75 6c74 6954 6169 6c0a p/bin/multiTail.\n"}, {"source1": "./usr/bin/storeBackup", "source2": "./usr/bin/storeBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,16353 +1,4 @@\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 3232 290a 2320 2020 2020 2020 1-2022).# \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 6c3b 0a75 7365 ..use Fcntl;.use\n-00000330: 2046 636e 746c 2071 7728 4f5f 5244 5752 Fcntl qw(O_RDWR\n-00000340: 204f 5f43 5245 4154 293b 0a75 7365 2046 O_CREAT);.use F\n-00000350: 636e 746c 2071 7728 465f 5345 5450 4950 cntl qw(F_SETPIP\n-00000360: 455f 535a 293b 0a75 7365 2046 636e 746c E_SZ);.use Fcntl\n-00000370: 2071 7728 465f 4745 5450 4950 455f 535a qw(F_GETPIPE_SZ\n-00000380: 293b 0a0a 7573 6520 494f 3a3a 436f 6d70 );..use IO::Comp\n-00000390: 7265 7373 3a3a 477a 6970 2071 7728 677a ress::Gzip qw(gz\n-000003a0: 6970 2024 477a 6970 4572 726f 7229 3b0a ip $GzipError);.\n-000003b0: 7573 6520 504f 5349 583b 0a75 7365 2044 use POSIX;.use D\n-000003c0: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md\n-000003d0: 355f 6865 7829 3b0a 0a75 7365 2073 7472 5_hex);..use str\n-000003e0: 6963 743b 0a75 7365 2077 6172 6e69 6e67 ict;.use warning\n-000003f0: 733b 0a0a 246d 6169 6e3a 3a53 544f 5245 s;..$main::STORE\n-00000400: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = \n-00000410: 756e 6465 663b 0a0a 0a73 7562 206c 6962 undef;...sub lib\n-00000420: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f\n-00000430: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. \n-00000440: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. \n-00000450: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se\n-00000460: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink\n-00000470: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo\n-00000480: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel\n-00000490: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f \n-000004a0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh\n-000004b0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file)..\n-000004c0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link \n-000004d0: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file\n-000004e0: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub\n-000004f0: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1)\n-00000500: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne \"/\").. {.\n-00000510: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\\\n-00000520: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. \n-00000530: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. \n-00000540: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f\n-00000550: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. \n-00000560: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, \n-00000570: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF\n-00000580: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);..\n-00000590: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = \"/$file\"\n-000005a0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-000005b0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-000005c0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR \"<$file> do\n-000005d0: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\\n\"\n-000005e0: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. }\n-000005f0: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= \"/\n-00000600: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib\"; \n-00000610: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den\n-00000620: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. \n-00000630: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = `\n-00000640: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c\n-00000650: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. \n-00000660: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir\n-00000670: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs\n-00000680: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-00000690: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir;\n-000006a0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir;\n-000006b0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli\n-000006c0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir(\"$absDi\n-000006d0: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file\"));. }\n-000006e0: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n-000006f0: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR \"<\n-00000700: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e\n-00000710: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\\n\"\n-00000720: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp\n-00000730: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. \n-00000740: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif\n-00000750: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return (\n-00000760: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle\n-00000770: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\\//\n-00000780: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf\n-00000790: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname.\n-000007a0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $\n-000007b0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~\n-000007c0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\\/(.*)$/s\n-000007d0: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/'\n-000007e0: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '')\n-000007f0: 3b20 2020 2020 2020 2020 2020 2020 2020 ; \n-00000800: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall\n-00000810: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename\n-00000820: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di\n-00000830: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my \n-00000840: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = \n-00000850: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un\n-00000860: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, \"$re\n-00000870: 7122 3b0a 0a0a 7265 7175 6972 6520 2773 q\";...require 's\n-00000880: 746f 7265 4261 636b 7570 476c 6f62 2e70 toreBackupGlob.p\n-00000890: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che\n-000008a0: 636b 5061 7261 6d32 2e70 6c27 3b0a 7265 ckParam2.pl';.re\n-000008b0: 7175 6972 6520 2763 6865 636b 4f62 6a50 quire 'checkObjP\n-000008c0: 6172 2e70 6c27 3b0a 7265 7175 6972 6520 ar.pl';.require \n-000008d0: 2770 724c 6f67 2e70 6c27 3b0a 7265 7175 'prLog.pl';.requ\n-000008e0: 6972 6520 2773 706c 6974 4c69 6e65 2e70 ire 'splitLine.p\n-000008f0: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil\n-00000900: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir\n-00000910: 6520 2764 6174 6554 6f6f 6c73 2e70 6c27 e 'dateTools.pl'\n-00000920: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP\n-00000930: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require\n-00000940: 2027 6875 6d61 6e52 6561 642e 706c 273b 'humanRead.pl';\n-00000950: 0a72 6571 7569 7265 2027 7665 7273 696f .require 'versio\n-00000960: 6e2e 706c 273b 0a72 6571 7569 7265 2027 n.pl';.require '\n-00000970: 6576 616c 546f 6f6c 732e 706c 273b 0a72 evalTools.pl';.r\n-00000980: 6571 7569 7265 2027 7374 6f72 6542 6163 equire 'storeBac\n-00000990: 6b75 704c 6962 2e70 6c27 3b0a 0a6e 6f20 kupLib.pl';..no \n-000009a0: 7761 726e 696e 6773 2027 6e65 776c 696e warnings 'newlin\n-000009b0: 6527 3b20 2020 2023 206e 6f20 7761 726e e'; # no warn\n-000009c0: 696e 6720 666f 7220 7374 6174 206f 6620 ing for stat of \n-000009d0: 6669 6c65 7320 7769 7468 206e 6577 6c69 files with newli\n-000009e0: 6e65 0a20 2020 2020 2020 2020 2020 2020 ne. \n-000009f0: 2020 2020 2020 2020 2020 2020 2023 2077 # w\n-00000a00: 6f72 6b73 2069 6e20 7065 726c 2035 2e36 orks in perl 5.6\n-00000a10: 2b20 6f6e 6c79 0a0a 232f 7573 722f 696e + only..#/usr/in\n-00000a20: 636c 7564 652f 6c69 6e75 782f 6c69 6d69 clude/linux/limi\n-00000a30: 7473 2e68 3a23 6465 6669 6e65 2041 5247 ts.h:#define ARG\n-00000a40: 5f4d 4158 2020 2020 2020 2031 3331 3037 _MAX 13107\n-00000a50: 3220 2020 2020 2020 202f 2a20 230a 2362 2 /* #.#b\n-00000a60: 7974 6573 206f 6620 6172 6773 202b 2065 ytes of args + e\n-00000a70: 6e76 6972 6f6e 2066 6f72 2065 7865 6328 nviron for exec(\n-00000a80: 2920 2a2f 0a23 0a23 0a23 4175 7320 6465 ) */.#.#.#Aus de\n-00000a90: 6d20 536f 7572 6365 2066 c3bc 7220 2278 m Source f..r \"x\n-00000aa0: 6172 6773 2220 6765 6874 2068 6572 766f args\" geht hervo\n-00000ab0: 723a 0a23 0a23 2020 6f72 6967 5f61 7267 r:.#.# orig_arg\n-00000ac0: 5f6d 6178 203d 2041 5247 5f4d 4158 202d _max = ARG_MAX -\n-00000ad0: 2032 3034 383b 202f 2a20 504f 5349 582e 2048; /* POSIX.\n-00000ae0: 3220 7265 7175 6972 6573 2073 7562 7472 2 requires subtr\n-00000af0: 6163 7469 6e67 2032 3034 382e 202a 2f0a acting 2048. */.\n-00000b00: 2320 2061 7267 5f6d 6178 203d 206f 7269 # arg_max = ori\n-00000b10: 675f 6172 675f 6d61 783b 0a0a 246d 6169 g_arg_max;..$mai\n-00000b20: 6e3a 3a73 7462 754d 6435 4578 6563 203d n::stbuMd5Exec =\n-00000b30: 2022 2472 6571 2f73 7462 754d 6435 4578 \"$req/stbuMd5Ex\n-00000b40: 6563 2e70 6c22 3b0a 246d 6169 6e3a 3a73 ec.pl\";.$main::s\n-00000b50: 7462 754d 6435 6370 203d 2022 2472 6571 tbuMd5cp = \"$req\n-00000b60: 2f73 7462 754d 6435 6370 2e70 6c22 3b0a /stbuMd5cp.pl\";.\n-00000b70: 246d 6169 6e3a 3a65 6e64 4f66 5374 6f72 $main::endOfStor\n-00000b80: 6542 6163 6b75 7020 3d20 303b 0a24 6d61 eBackup = 0;.$ma\n-00000b90: 696e 3a3a 6578 6563 5061 7261 6d4c 656e in::execParamLen\n-00000ba0: 6774 6820 3d20 3420 2a20 3130 3234 3b20 gth = 4 * 1024; \n-00000bb0: 2020 2020 2023 2044 6566 6175 6c74 2057 # Default W\n-00000bc0: 6572 742c 2073 6568 7220 6e69 6564 7269 ert, sehr niedri\n-00000bd0: 6720 616e 6765 7365 747a 740a 246d 6169 g angesetzt.$mai\n-00000be0: 6e3a 3a6d 696e 436f 7079 5769 7468 466f n::minCopyWithFo\n-00000bf0: 726b 203d 2031 3032 342a 2a32 3b20 2020 rk = 1024**2; \n-00000c00: 2020 2020 2320 616c 6c65 7320 7761 7320 # alles was \n-00000c10: 3c3d 2069 7374 2c20 7769 7264 2069 6e20 <= ist, wird in \n-00000c20: 7065 726c 0a20 2020 2020 2020 2020 2020 perl. \n-00000c30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000c40: 2020 2020 2020 2020 2020 2020 2023 206b # k\n-00000c50: 6f70 6965 7274 2c20 7761 7320 3e20 6973 opiert, was > is\n-00000c60: 742c 206d 6974 2066 6f72 6b0a 6d79 2028 t, mit fork.my (\n-00000c70: 2565 7865 6350 6172 616d 4c65 6e67 7468 %execParamLength\n-00000c80: 2920 3d20 2827 4149 5827 203d 3e20 3232 ) = ('AIX' => 22\n-00000c90: 202a 2031 3032 342c 0a09 0909 2027 4c69 * 1024,.... 'Li\n-00000ca0: 6e75 7827 203d 3e20 3632 202a 2031 3032 nux' => 62 * 102\n-00000cb0: 3429 3b0a 246d 6169 6e3a 3a73 6f75 7263 4);.$main::sourc\n-00000cc0: 6544 6972 203d 2027 273b 2020 2020 2020 eDir = ''; \n-00000cd0: 2020 2020 2020 2020 2020 2020 2320 7365 # se\n-00000ce0: 7420 666f 7220 6d61 696e 3a3a 434f 4d52 t for main::COMR\n-00000cf0: 4553 530a 2020 2020 2020 2020 2020 2020 ESS. \n-00000d00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000d10: 2020 2020 2020 2020 2020 2020 2320 7061 # pa\n-00000d20: 7468 2074 6f20 6261 636b 7570 2064 6972 th to backup dir\n-00000d30: 6563 746f 7279 0a0a 0a6d 7920 2473 746f ectory...my $sto\n-00000d40: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa\n-00000d50: 636b 7570 5f70 7267 203d 2027 7374 6f72 ckup_prg = 'stor\n-00000d60: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac\n-00000d70: 6b75 702e 706c 273b 0a6d 7920 246c 6f63 kup.pl';.my $loc\n-00000d80: 6b46 696c 6520 3d20 2824 454e 567b 2755 kFile = ($ENV{'U\n-00000d90: 5345 5227 7d20 6571 2027 726f 6f74 2729 SER'} eq 'root')\n-00000da0: 203f 2020 2020 2023 2064 6566 6175 6c74 ? # default\n-00000db0: 2076 616c 7565 0a09 0927 2f76 6172 2f6c value...'/var/l\n-00000dc0: 6f63 6b2f 7374 6f72 6542 6163 6b75 702e ock/storeBackup.\n-00000dd0: 6c6f 636b 2720 3a0a 0909 2445 4e56 7b27 lock' :...$ENV{'\n-00000de0: 484f 4d45 277d 202e 2027 2f73 746f 7265 HOME'} . '/store\n-00000df0: 4261 636b 7570 2e6c 6f63 6b27 3b0a 6d79 Backup.lock';.my\n-00000e00: 2028 4063 6f6d 7072 6573 7329 203d 2028 (@compress) = (\n-00000e10: 2762 7a69 7032 2729 3b20 2020 2020 2020 'bzip2'); \n-00000e20: 2020 2020 2020 2020 2320 6465 6661 756c # defaul\n-00000e30: 7420 7661 6c75 650a 6d79 2028 4075 6e63 t value.my (@unc\n-00000e40: 6f6d 7072 6573 7329 203d 2028 2762 7a69 ompress) = ('bzi\n-00000e50: 7032 272c 2027 2d64 2729 3b20 2020 2020 p2', '-d'); \n-00000e60: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu\n-00000e70: 650a 6d79 2024 6d69 6e43 6f6d 7072 6573 e.my $minCompres\n-00000e80: 7353 697a 6520 3d20 3130 3234 3b20 2020 sSize = 1024; \n-00000e90: 2020 2020 2320 6465 6661 756c 7420 7661 # default va\n-00000ea0: 6c75 650a 6d79 2024 706f 7374 6669 7820 lue.my $postfix \n-00000eb0: 3d20 272e 627a 3227 3b20 2020 2020 2020 = '.bz2'; \n-00000ec0: 2020 2020 2020 2320 6465 6661 756c 7420 # default \n-00000ed0: 7661 6c75 650a 6d79 2024 7175 6575 6543 value.my $queueC\n-00000ee0: 6f6d 7072 6573 7320 3d20 3130 3030 3b20 ompress = 1000; \n-00000ef0: 2020 2020 2020 2020 2320 6465 6661 756c # defaul\n-00000f00: 7420 7661 6c75 650a 6d79 2024 7175 6575 t value.my $queu\n-00000f10: 6543 6f70 7920 3d20 3130 3030 3b20 2020 eCopy = 1000; \n-00000f20: 2020 2020 2020 2020 2020 2320 6465 6661 # defa\n-00000f30: 756c 7420 7661 6c75 650a 6d79 2024 7175 ult value.my $qu\n-00000f40: 6575 6542 6c6f 636b 203d 2031 3030 303b eueBlock = 1000;\n-00000f50: 2020 2020 2020 2020 2020 2020 2320 6465 # de\n-00000f60: 6661 756c 7420 7661 6c75 650a 6d79 2024 fault value.my $\n-00000f70: 6e6f 426c 6f63 6b52 756c 6573 203d 2035 noBlockRules = 5\n-00000f80: 3b20 2020 2020 2020 2020 2020 2020 2320 ; # \n-00000f90: 6465 6661 756c 7420 7661 6c75 652c 206d default value, m\n-00000fa0: 7573 7420 6265 203e 2030 0a24 6d61 696e ust be > 0.$main\n-00000fb0: 3a3a 6e6f 426c 6f63 6b44 6576 6963 6573 ::noBlockDevices\n-00000fc0: 203d 2035 3b20 2020 2020 2020 2023 2064 = 5; # d\n-00000fd0: 6566 6175 6c74 2076 616c 7565 2c20 6d75 efault value, mu\n-00000fe0: 7374 2062 6520 3e20 300a 246d 6169 6e3a st be > 0.$main:\n-00000ff0: 3a6e 6f43 6f6d 7072 6573 7352 756c 6573 :noCompressRules\n-00001000: 203d 2035 3b20 2020 2020 2020 2320 6465 = 5; # de\n-00001010: 6661 756c 7420 7661 6c75 652c 206d 7573 fault value, mus\n-00001020: 7420 6265 203e 2030 0a6d 7920 2463 6865 t be > 0.my $che\n-00001030: 636b 426c 6f63 6b73 4253 6465 6661 756c ckBlocksBSdefaul\n-00001040: 7420 3d20 2731 4d27 3b20 2023 2064 6566 t = '1M'; # def\n-00001050: 6175 6c74 2076 616c 7565 0a6d 7920 2463 ault value.my $c\n-00001060: 6865 636b 426c 6f63 6b73 4253 6d69 6e20 heckBlocksBSmin \n-00001070: 3d20 3130 2a31 3032 343b 2020 2023 206d = 10*1024; # m\n-00001080: 696e 696d 616c 2076 616c 7565 0a6d 7920 inimal value.my \n-00001090: 246e 6f43 6f70 7920 3d20 313b 2020 2020 $noCopy = 1; \n-000010a0: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-000010b0: 2064 6566 6175 6c74 2076 616c 7565 0a6d default value.m\n-000010c0: 7920 2463 686d 6f64 4d44 3546 696c 6520 y $chmodMD5File \n-000010d0: 3d20 2730 3630 3027 3b20 2020 2020 2020 = '0600'; \n-000010e0: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value\n-000010f0: 0a6d 7920 2474 6d70 6469 7220 3d20 272f .my $tmpdir = '/\n-00001100: 746d 7027 3b20 2020 2020 2020 2020 2020 tmp'; \n-00001110: 2020 2023 2064 6566 6175 6c74 2076 616c # default val\n-00001120: 7565 0a6d 7920 4065 7863 6570 7453 7566 ue.my @exceptSuf\n-00001130: 6669 7820 3d20 2827 5c2e 7a69 7027 2c20 fix = ('\\.zip', \n-00001140: 275c 2e62 7a32 272c 2027 5c2e 677a 272c '\\.bz2', '\\.gz',\n-00001150: 2027 5c2e 7467 7a27 2c20 275c 2e6a 7067 '\\.tgz', '\\.jpg\n-00001160: 272c 2027 5c2e 6769 6627 2c0a 0909 2020 ', '\\.gif',... \n-00001170: 2020 275c 2e74 6966 663f 272c 2027 5c2e '\\.tiff?', '\\.\n-00001180: 6d70 653f 6727 2c20 275c 2e6d 705b 3334 mpe?g', '\\.mp[34\n-00001190: 5d27 2c20 275c 2e6d 7065 3f5b 3334 5d67 ]', '\\.mpe?[34]g\n-000011a0: 272c 2027 5c2e 6f67 6727 2c0a 0909 2020 ', '\\.ogg',... \n-000011b0: 2020 275c 2e67 7067 272c 2027 5c2e 706e '\\.gpg', '\\.pn\n-000011c0: 6727 2c20 275c 2e6c 7a6d 6127 2c20 275c g', '\\.lzma', '\\\n-000011d0: 2e78 7a27 2c20 275c 2e6d 6f76 2729 3b0a .xz', '\\.mov');.\n-000011e0: 6d79 2024 6c6f 6749 6e42 6163 6b75 7044 my $logInBackupD\n-000011f0: 6972 4669 6c65 4e61 6d65 203d 2027 2e73 irFileName = '.s\n-00001200: 746f 7265 4261 636b 7570 2e6c 6f67 273b toreBackup.log';\n-00001210: 0a6d 7920 2463 6865 636b 5375 6d46 696c .my $checkSumFil\n-00001220: 6520 3d20 272e 6d64 3543 6865 636b 5375 e = '.md5CheckSu\n-00001230: 6d73 273b 0a6d 7920 2462 6c6f 636b 4368 ms';.my $blockCh\n-00001240: 6563 6b53 756d 4669 6c65 203d 2027 2e6d eckSumFile = '.m\n-00001250: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n-00001260: 273b 0a24 6d61 696e 3a3a 6368 6563 6b53 ';.$main::checkS\n-00001270: 756d 4669 6c65 5665 7273 696f 6e20 3d20 umFileVersion = \n-00001280: 2731 2e33 273b 0a6d 7920 246b 6565 7041 '1.3';.my $keepA\n-00001290: 6c6c 203d 2027 3330 6427 3b0a 6d79 2024 ll = '30d';.my $\n-000012a0: 6b65 6570 4475 706c 6963 6174 6520 3d20 keepDuplicate = \n-000012b0: 2737 6427 3b0a 0a6d 7920 2466 6c61 6742 '7d';..my $flagB\n-000012c0: 6c6f 636b 4465 7669 6365 203d 2030 3b20 lockDevice = 0; \n-000012d0: 2020 2020 2020 2020 2023 2031 2069 6620 # 1 if \n-000012e0: 626c 6f63 6b20 6f72 2064 6576 6963 6520 block or device \n-000012f0: 6f70 7469 6f6e 7320 6172 6520 7573 6564 options are used\n-00001300: 0a24 746d 7064 6972 203d 2024 454e 567b .$tmpdir = $ENV{\n-00001310: 2754 4d50 4449 5227 7d20 6966 2064 6566 'TMPDIR'} if def\n-00001320: 696e 6564 2024 454e 567b 2754 4d50 4449 ined $ENV{'TMPDI\n-00001330: 5227 7d3b 0a0a 0a23 2073 746f 7265 4261 R'};...# storeBa\n-00001340: 636b 7570 2e70 6c20 246d 6169 6e3a 3a53 ckup.pl $main::S\n-00001350: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO\n-00001360: 4e0a 0a3d 6865 6164 3120 4e41 4d45 0a0a N..=head1 NAME..\n-00001370: 7374 6f72 6542 6163 6b75 702e 706c 202d storeBackup.pl -\n-00001380: 2066 616e 6379 2063 6f6d 7072 6573 7369 fancy compressi\n-00001390: 6e67 206d 616e 6167 696e 6720 6368 6563 ng managing chec\n-000013a0: 6b73 756d 6d69 6e67 0a20 2020 2020 2020 ksumming. \n-000013b0: 2020 2020 2020 2020 2020 6861 7264 2d6c hard-l\n-000013c0: 696e 6b69 6e67 2064 6564 7570 6c69 6361 inking deduplica\n-000013d0: 7469 6e67 2027 6370 202d 7561 270a 0a3d ting 'cp -ua'..=\n-000013e0: 6865 6164 3120 4445 5343 5249 5054 494f head1 DESCRIPTIO\n-000013f0: 4e0a 0a54 6869 7320 7072 6f67 7261 6d20 N..This program \n-00001400: 636f 7069 6573 2074 7265 6573 2074 6f20 copies trees to \n-00001410: 616e 6f74 6865 7220 6c6f 6361 7469 6f6e another location\n-00001420: 2e20 4576 6572 7920 6669 6c65 2063 6f70 . Every file cop\n-00001430: 6965 6420 6973 0a70 6f74 656e 7469 616c ied is.potential\n-00001440: 6c79 2063 6f6d 7072 6573 7365 6420 2873 ly compressed (s\n-00001450: 6565 202d 2d65 7863 6570 7453 7566 6669 ee --exceptSuffi\n-00001460: 7829 2e20 5468 6520 6261 636b 7570 7320 x). The backups \n-00001470: 6166 7465 720a 7468 6520 6669 7273 7420 after.the first \n-00001480: 6261 636b 7570 2077 696c 6c20 636f 6d70 backup will comp\n-00001490: 6172 6520 7468 6520 6669 6c65 7320 7769 are the files wi\n-000014a0: 7468 2061 6e20 6d64 3520 6368 6563 6b73 th an md5 checks\n-000014b0: 756d 0a77 6974 6820 7468 6520 6c61 7374 um.with the last\n-000014c0: 2073 746f 7265 6420 7665 7273 696f 6e2e stored version.\n-000014d0: 2049 6620 7468 6579 2061 7265 2065 7175 If they are equ\n-000014e0: 616c 2c20 6974 2077 696c 6c20 6f6e 6c79 al, it will only\n-000014f0: 206d 616b 6520 616e 0a68 6172 6420 6c69 make an.hard li\n-00001500: 6e6b 2074 6f20 6974 2e20 4974 2077 696c nk to it. It wil\n-00001510: 6c20 616c 736f 2063 6865 636b 206d 7469 l also check mti\n-00001520: 6d65 2c20 6374 696d 6520 616e 6420 7369 me, ctime and si\n-00001530: 7a65 2074 6f20 7265 636f 676e 697a 650a ze to recognize.\n-00001540: 6964 656e 7469 616c 2066 696c 6573 2069 idential files i\n-00001550: 6e20 6f6c 6465 7220 6261 636b 7570 7320 n older backups \n-00001560: 7665 7279 2066 6173 742e 0a49 7420 6361 very fast..It ca\n-00001570: 6e20 616c 736f 2062 6163 6b75 7020 6269 n also backup bi\n-00001580: 6720 696d 6167 6520 6669 6c65 7320 6661 g image files fa\n-00001590: 7374 2061 6e64 2065 6666 6963 6965 6e74 st and efficient\n-000015a0: 6c79 206f 6e20 6120 7065 7220 626c 6f63 ly on a per bloc\n-000015b0: 6b0a 6261 7369 7320 2864 6174 6120 6465 k.basis (data de\n-000015c0: 6475 706c 6963 6174 696f 6e29 2e0a 0a59 duplication)...Y\n-000015d0: 6f75 2063 616e 206f 7665 7277 7269 7465 ou can overwrite\n-000015e0: 206f 7074 696f 6e73 2069 6e20 7468 6520 options in the \n-000015f0: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi\n-00001600: 6c65 206f 6e20 7468 6520 636f 6d6d 616e le on the comman\n-00001610: 6420 6c69 6e65 2e0a 0a3d 6865 6164 3120 d line...=head1 \n-00001620: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store\n-00001630: 4261 636b 7570 2e70 6c20 2d2d 6865 6c70 Backup.pl --help\n-00001640: 0a6f 7220 2020 200a 0973 746f 7265 4261 .or ..storeBa\n-00001650: 636b 7570 2e70 6c20 2d67 2063 6f6e 6669 ckup.pl -g confi\n-00001660: 6746 696c 650a 6f72 0a09 7374 6f72 6542 gFile.or..storeB\n-00001670: 6163 6b75 702e 706c 205b 2d66 2063 6f6e ackup.pl [-f con\n-00001680: 6669 6746 696c 655d 205b 2d73 2073 6f75 figFile] [-s sou\n-00001690: 7263 6544 6972 5d0a 0920 2020 2020 205b rceDir].. [\n-000016a0: 2d62 2062 6163 6b75 7044 6972 6563 746f -b backupDirecto\n-000016b0: 7279 5d20 5b2d 5320 7365 7269 6573 5d20 ry] [-S series] \n-000016c0: 5b2d 2d63 6865 636b 436f 6d70 725d 205b [--checkCompr] [\n-000016d0: 2d2d 7072 696e 745d 0a09 2020 2020 2020 --print].. \n-000016e0: 5b2d 5420 746d 7064 6972 5d20 5b2d 4c20 [-T tmpdir] [-L \n-000016f0: 6c6f 636b 4669 6c65 5d20 5b2d 2d75 6e6c lockFile] [--unl\n-00001700: 6f63 6b42 6566 6f72 6544 656c 5d20 0a09 ockBeforeDel] ..\n-00001710: 2020 2020 2020 5b2d 2d65 7863 6570 7444 [--exceptD\n-00001720: 6972 7320 6469 7231 5d20 5b2d 2d63 6f6e irs dir1] [--con\n-00001730: 7445 7863 6570 7444 6972 7345 7272 5d0a tExceptDirsErr].\n-00001740: 0920 2020 2020 205b 2d2d 696e 636c 7564 . [--includ\n-00001750: 6544 6972 7320 6469 7231 5d0a 0920 2020 eDirs dir1].. \n-00001760: 2020 205b 2d2d 6578 6365 7074 5275 6c65 [--exceptRule\n-00001770: 2072 756c 655d 205b 2d2d 696e 636c 7564 rule] [--includ\n-00001780: 6552 756c 6520 7275 6c65 5d0a 0920 2020 eRule rule].. \n-00001790: 2020 205b 2d2d 6578 6365 7074 5479 7065 [--exceptType\n-000017a0: 7320 7479 7065 735d 0a09 2020 2020 2020 s types].. \n-000017b0: 5b2d 2d73 7065 6369 616c 5479 7065 4172 [--specialTypeAr\n-000017c0: 6368 6976 6572 2061 7263 6869 7665 7220 chiver archiver \n-000017d0: 5b2d 2d61 7263 6869 7665 5479 7065 7320 [--archiveTypes \n-000017e0: 7479 7065 735d 5d0a 0920 2020 2020 205b types]].. [\n-000017f0: 2d2d 6370 4973 476e 755d 205b 2d2d 6c69 --cpIsGnu] [--li\n-00001800: 6e6b 5379 6d6c 696e 6b73 5d0a 0920 2020 nkSymlinks].. \n-00001810: 2020 205b 2d2d 7072 6563 6f6d 6d61 6e64 [--precommand\n-00001820: 206a 6f62 5d20 5b2d 2d70 6f73 7463 6f6d job] [--postcom\n-00001830: 6d61 6e64 206a 6f62 5d0a 2020 2020 2020 mand job]. \n-00001840: 2020 2020 2020 2020 5b2d 2d66 6f6c 6c6f [--follo\n-00001850: 774c 696e 6b73 2064 6570 7468 5d20 5b2d wLinks depth] [-\n-00001860: 2d73 7461 7949 6e46 696c 6553 7973 7465 -stayInFileSyste\n-00001870: 6d5d 205b 2d2d 6869 6768 4c61 7465 6e63 m] [--highLatenc\n-00001880: 795d 0a09 2020 2020 2020 5b2d 2d69 676e y].. [--ign\n-00001890: 6f72 6550 6572 6d73 5d20 5b2d 2d6c 6174 orePerms] [--lat\n-000018a0: 654c 696e 6b73 205b 2d2d 6c61 7465 436f eLinks [--lateCo\n-000018b0: 6d70 7265 7373 5d5d 205b 2d2d 6175 746f mpress]] [--auto\n-000018c0: 7265 7061 6972 5d0a 0920 2020 2020 205b repair].. [\n-000018d0: 2d2d 6368 6563 6b42 6c6f 636b 7353 7566 --checkBlocksSuf\n-000018e0: 6669 7820 7375 6666 6978 5d20 5b2d 2d63 fix suffix] [--c\n-000018f0: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz\n-00001900: 6520 7369 7a65 5d0a 0920 2020 2020 205b e size].. [\n-00001910: 2d2d 6368 6563 6b42 6c6f 636b 7342 535d --checkBlocksBS]\n-00001920: 205b 2d2d 6368 6563 6b42 6c6f 636b 7343 [--checkBlocksC\n-00001930: 6f6d 7072 2063 6865 636b 7c79 6573 7c6e ompr check|yes|n\n-00001940: 6f5d 0a09 2020 2020 2020 5b2d 2d63 6865 o].. [--che\n-00001950: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel\n-00001960: 5d20 5b2d 2d71 7565 7565 426c 6f63 6b5d ] [--queueBlock]\n-00001970: 0a20 2020 2020 2020 2020 2020 2020 205b . [\n-00001980: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul\n-00001990: 6530 2072 756c 6520 5b2d 2d63 6865 636b e0 rule [--check\n-000019a0: 426c 6f63 6b73 4253 3020 7369 7a65 5d0a BlocksBS0 size].\n-000019b0: 2020 2020 2020 2020 2020 2020 2020 205b [\n-000019c0: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom\n-000019d0: 7072 3020 6b65 795d 205b 2d2d 6368 6563 pr0 key] [--chec\n-000019e0: 6b42 6c6f 636b 7352 6561 6430 2066 696c kBlocksRead0 fil\n-000019f0: 7465 725d 0a20 2020 2020 2020 2020 2020 ter]. \n-00001a00: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc\n-00001a10: 6b73 5061 7261 6c6c 656c 305d 5d0a 2020 ksParallel0]]. \n-00001a20: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c\n-00001a30: 6865 636b 426c 6f63 6b73 5275 6c65 3120 heckBlocksRule1 \n-00001a40: 7275 6c65 205b 2d2d 6368 6563 6b42 6c6f rule [--checkBlo\n-00001a50: 636b 7342 5331 2073 697a 655d 0a20 2020 cksBS1 size]. \n-00001a60: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c\n-00001a70: 6865 636b 426c 6f63 6b73 436f 6d70 7231 heckBlocksCompr1\n-00001a80: 206b 6579 5d20 5b2d 2d63 6865 636b 426c key] [--checkBl\n-00001a90: 6f63 6b73 5265 6164 3120 6669 6c74 6572 ocksRead1 filter\n-00001aa0: 5d0a 2020 2020 2020 2020 2020 2020 2020 ]. \n-00001ab0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7350 [--checkBlocksP\n-00001ac0: 6172 616c 6c65 6c31 5d5d 0a20 2020 2020 arallel1]]. \n-00001ad0: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec\n-00001ae0: 6b42 6c6f 636b 7352 756c 6532 2072 756c kBlocksRule2 rul\n-00001af0: 6520 5b2d 2d63 6865 636b 426c 6f63 6b73 e [--checkBlocks\n-00001b00: 4253 3220 7369 7a65 5d0a 2020 2020 2020 BS2 size]. \n-00001b10: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec\n-00001b20: 6b42 6c6f 636b 7343 6f6d 7072 3220 6b64 kBlocksCompr2 kd\n-00001b30: 6579 5d20 5b2d 2d63 6865 636b 426c 6f63 ey] [--checkBloc\n-00001b40: 6b73 5265 6164 3220 6669 6c74 6572 5d0a ksRead2 filter].\n-00001b50: 2020 2020 2020 2020 2020 2020 2020 205b [\n-00001b60: 2d2d 6368 6563 6b42 6c6f 636b 7350 6172 --checkBlocksPar\n-00001b70: 616c 6c65 6c32 5d5d 0a20 2020 2020 2020 allel2]]. \n-00001b80: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB\n-00001b90: 6c6f 636b 7352 756c 6533 2072 756c 6520 locksRule3 rule \n-00001ba0: 5b2d 2d63 6865 636b 426c 6f63 6b73 4253 [--checkBlocksBS\n-00001bb0: 3320 7369 7a65 5d0a 2020 2020 2020 2020 3 size]. \n-00001bc0: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB\n-00001bd0: 6c6f 636b 7343 6f6d 7072 3320 6b65 795d locksCompr3 key]\n-00001be0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7352 [--checkBlocksR\n-00001bf0: 6561 6433 2066 696c 7465 725d 0a20 2020 ead3 filter]. \n-00001c00: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c\n-00001c10: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall\n-00001c20: 656c 335d 5d0a 2020 2020 2020 2020 2020 el3]]. \n-00001c30: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc\n-00001c40: 6b73 5275 6c65 3420 7275 6c65 205b 2d2d ksRule4 rule [--\n-00001c50: 6368 6563 6b42 6c6f 636b 7342 5334 2073 checkBlocksBS4 s\n-00001c60: 697a 655d 0a20 2020 2020 2020 2020 2020 ize]. \n-00001c70: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc\n-00001c80: 6b73 436f 6d70 7234 206b 6579 5d20 5b2d ksCompr4 key] [-\n-00001c90: 2d63 6865 636b 426c 6f63 6b73 5265 6164 -checkBlocksRead\n-00001ca0: 3420 6669 6c74 6572 5d0a 2020 2020 2020 4 filter]. \n-00001cb0: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec\n-00001cc0: 6b42 6c6f 636b 7350 6172 616c 6c65 6c34 kBlocksParallel4\n-00001cd0: 5d5d 0a20 2020 2020 2020 2020 2020 2020 ]]. \n-00001ce0: 205b 2d2d 6368 6563 6b44 6576 6963 6573 [--checkDevices\n-00001cf0: 3020 6c69 7374 205b 2d2d 6368 6563 6b44 0 list [--checkD\n-00001d00: 6576 6963 6573 4469 7230 5d0a 2020 2020 evicesDir0]. \n-00001d10: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch\n-00001d20: 6563 6b44 6576 6963 6573 4253 305d 205b eckDevicesBS0] [\n-00001d30: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp\n-00001d40: 7230 206b 6579 5d0a 2020 2020 2020 2020 r0 key]. \n-00001d50: 2020 2020 2020 205b 2d2d 6368 6563 6b44 [--checkD\n-00001d60: 6576 6963 6573 5061 7261 6c6c 656c 305d evicesParallel0]\n-00001d70: 5d0a 2020 2020 2020 2020 2020 2020 2020 ]. \n-00001d80: 5b2d 2d63 6865 636b 4465 7669 6365 7331 [--checkDevices1\n-00001d90: 206c 6973 7420 5b2d 2d63 6865 636b 4465 list [--checkDe\n-00001da0: 7669 6365 7344 6972 315d 0a20 2020 2020 vicesDir1]. \n-00001db0: 2020 2020 2020 2020 2020 5b2d 2d63 6865 [--che\n-00001dc0: 636b 4465 7669 6365 7342 5331 5d20 5b63 ckDevicesBS1] [c\n-00001dd0: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr\n-00001de0: 3120 6b65 795d 0a20 2020 2020 2020 2020 1 key]. \n-00001df0: 2020 2020 2020 5b2d 2d63 6865 636b 4465 [--checkDe\n-00001e00: 7669 6365 7350 6172 616c 6c65 6c31 5d5d vicesParallel1]]\n-00001e10: 0a20 2020 2020 2020 2020 2020 2020 205b . [\n-00001e20: 2d2d 6368 6563 6b44 6576 6963 6573 3220 --checkDevices2 \n-00001e30: 6c69 7374 205b 2d2d 6368 6563 6b44 6576 list [--checkDev\n-00001e40: 6963 6573 4469 7232 5d0a 2020 2020 2020 icesDir2]. \n-00001e50: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec\n-00001e60: 6b44 6576 6963 6573 4253 325d 205b 6368 kDevicesBS2] [ch\n-00001e70: 6563 6b44 6576 6963 6573 436f 6d70 7232 eckDevicesCompr2\n-00001e80: 206b 6579 5d0a 2020 2020 2020 2020 2020 key]. \n-00001e90: 2020 2020 205b 2d2d 6368 6563 6b44 6576 [--checkDev\n-00001ea0: 6963 6573 5061 7261 6c6c 656c 325d 5d0a icesParallel2]].\n-00001eb0: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n-00001ec0: 2d63 6865 636b 4465 7669 6365 7333 206c -checkDevices3 l\n-00001ed0: 6973 7420 5b2d 2d63 6865 636b 4465 7669 ist [--checkDevi\n-00001ee0: 6365 7344 6972 335d 0a20 2020 2020 2020 cesDir3]. \n-00001ef0: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check\n-00001f00: 4465 7669 6365 7342 5333 5d20 5b63 6865 DevicesBS3] [che\n-00001f10: 636b 4465 7669 6365 7343 6f6d 7072 3320 ckDevicesCompr3 \n-00001f20: 6b65 795d 0a20 2020 2020 2020 2020 2020 key]. \n-00001f30: 2020 2020 5b2d 2d63 6865 636b 4465 7669 [--checkDevi\n-00001f40: 6365 7350 6172 616c 6c65 6c33 5d5d 0a20 cesParallel3]]. \n-00001f50: 2020 2020 2020 2020 2020 2020 205b 2d2d [--\n-00001f60: 6368 6563 6b44 6576 6963 6573 3420 6c69 checkDevices4 li\n-00001f70: 7374 205b 2d2d 6368 6563 6b44 6576 6963 st [--checkDevic\n-00001f80: 6573 4469 7234 5d0a 2020 2020 2020 2020 esDir4]. \n-00001f90: 2020 2020 2020 205b 2d2d 6368 6563 6b44 [--checkD\n-00001fa0: 6576 6963 6573 4253 345d 205b 6368 6563 evicesBS4] [chec\n-00001fb0: 6b44 6576 6963 6573 436f 6d70 7234 206b kDevicesCompr4 k\n-00001fc0: 6579 5d0a 2020 2020 2020 2020 2020 2020 ey]. \n-00001fd0: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic\n-00001fe0: 6573 5061 7261 6c6c 656c 315d 5d0a 0920 esParallel1]].. \n-00001ff0: 2020 2020 205b 2d2d 7361 7665 5241 4d5d [--saveRAM]\n-00002000: 205b 2d63 2063 6f6d 7072 6573 735d 205b [-c compress] [\n-00002010: 2d75 2075 6e63 6f6d 7072 6573 735d 205b -u uncompress] [\n-00002020: 2d70 2070 6f73 7466 6978 5d0a 0920 2020 -p postfix].. \n-00002030: 2020 205b 2d2d 6e6f 436f 6d70 7265 7373 [--noCompress\n-00002040: 206e 756d 6265 725d 205b 2d2d 7175 6575 number] [--queu\n-00002050: 6543 6f6d 7072 6573 7320 6e75 6d62 6572 eCompress number\n-00002060: 5d0a 0920 2020 2020 205b 2d2d 6e6f 436f ].. [--noCo\n-00002070: 7079 206e 756d 6265 725d 205b 2d2d 7175 py number] [--qu\n-00002080: 6575 6543 6f70 7920 6e75 6d62 6572 5d0a eueCopy number].\n-00002090: 0920 2020 2020 205b 2d2d 7769 7468 5573 . [--withUs\n-000020a0: 6572 4772 6f75 7053 7461 745d 205b 2d2d erGroupStat] [--\n-000020b0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil\n-000020c0: 6520 6669 6c65 6e61 6d65 5d0a 0920 2020 e filename].. \n-000020d0: 2020 205b 2d2d 6578 6365 7074 5375 6666 [--exceptSuff\n-000020e0: 6978 2073 7566 6669 7865 735d 095b 2d2d ix suffixes].[--\n-000020f0: 6164 6445 7863 6570 7453 7566 6669 7820 addExceptSuffix \n-00002100: 7375 6666 6978 6573 5d0a 0920 2020 2020 suffixes].. \n-00002110: 205b 2d2d 636f 6d70 7265 7373 5375 6666 [--compressSuff\n-00002120: 6978 5d20 5b2d 2d6d 696e 436f 6d70 7265 ix] [--minCompre\n-00002130: 7373 5369 7a65 2073 697a 655d 205b 2d2d ssSize size] [--\n-00002140: 636f 6d70 7252 756c 655d 0a09 2020 2020 comprRule].. \n-00002150: 2020 5b2d 2d64 6f4e 6f74 436f 6d70 7265 [--doNotCompre\n-00002160: 7373 4d44 3546 696c 655d 205b 2d2d 6368 ssMD5File] [--ch\n-00002170: 6d6f 644d 4435 4669 6c65 5d20 5b2d 765d modMD5File] [-v]\n-00002180: 0a09 2020 2020 2020 5b2d 6420 6c65 7665 .. [-d leve\n-00002190: 6c5d 205b 2d2d 7072 6f67 7265 7373 5265 l] [--progressRe\n-000021a0: 706f 7274 206e 756d 6265 725b 2c74 696d port number[,tim\n-000021b0: 6566 7261 6d65 5d5d 0a09 2020 2020 2020 eframe]].. \n-000021c0: 5b2d 2d69 676e 6f72 6552 6561 6445 7272 [--ignoreReadErr\n-000021d0: 6f72 5d20 5b2d 2d73 7570 7072 6573 7349 or] [--suppressI\n-000021e0: 6e66 6f5d 0a20 2020 2020 2020 2020 2020 nfo]. \n-000021f0: 2020 205b 2d2d 7375 7070 7265 7373 5761 [--suppressWa\n-00002200: 726e 696e 6720 6b65 795d 205b 2d2d 6c69 rning key] [--li\n-00002210: 6e6b 546f 5265 6365 6e74 206e 616d 655d nkToRecent name]\n-00002220: 0a09 2020 2020 2020 5b2d 2d64 6f4e 6f74 .. [--doNot\n-00002230: 4465 6c65 7465 5d20 5b2d 2d64 656c 6574 Delete] [--delet\n-00002240: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs\n-00002250: 5d20 5b2d 2d6d 6178 4861 7264 4c69 6e6b ] [--maxHardLink\n-00002260: 735d 0a09 2020 2020 2020 5b2d 2d72 6573 s].. [--res\n-00002270: 6574 4174 696d 655d 205b 2d2d 6b65 6570 etAtime] [--keep\n-00002280: 416c 6c20 7469 6d65 5065 7269 6f64 5d20 All timePeriod] \n-00002290: 5b2d 2d6b 6565 7057 6565 6b64 6179 2065 [--keepWeekday e\n-000022a0: 6e74 7279 5d0a 0920 2020 2020 205b 5b2d ntry].. [[-\n-000022b0: 2d6b 6565 7046 6972 7374 4f66 5965 6172 -keepFirstOfYear\n-000022c0: 5d20 5b2d 2d6b 6565 704c 6173 744f 6659 ] [--keepLastOfY\n-000022d0: 6561 725d 0a09 2020 2020 2020 205b 2d2d ear].. [--\n-000022e0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n-000022f0: 5d20 5b2d 2d6b 6565 704c 6173 744f 664d ] [--keepLastOfM\n-00002300: 6f6e 7468 5d0a 0920 2020 2020 2020 5b2d onth].. [-\n-00002310: 2d66 6972 7374 4461 794f 6657 6565 6b20 -firstDayOfWeek \n-00002320: 6461 795d 205b 2d2d 6b65 6570 4669 7273 day] [--keepFirs\n-00002330: 744f 6657 6565 6b5d 0a20 2020 2020 2020 tOfWeek]. \n-00002340: 2020 2020 2020 2020 5b2d 2d6b 6565 704c [--keepL\n-00002350: 6173 744f 6657 6565 6b5d 205b 2d2d 6b65 astOfWeek] [--ke\n-00002360: 6570 4475 706c 6963 6174 655d 205b 2d2d epDuplicate] [--\n-00002370: 6b65 6570 4d69 6e4e 756d 6265 725d 0a20 keepMinNumber]. \n-00002380: 2020 2020 2020 2020 2020 2020 2020 5b2d [-\n-00002390: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber].\n-000023a0: 0920 2020 2020 2020 207c 205b 2d2d 6b65 . | [--ke\n-000023b0: 6570 5265 6c61 7469 7665 5d20 5d0a 0920 epRelative] ].. \n-000023c0: 2020 2020 205b 2d6c 206c 6f67 4669 6c65 [-l logFile\n-000023d0: 0a09 2020 2020 2020 205b 2d2d 706c 7573 .. [--plus\n-000023e0: 4c6f 6753 7464 6f75 745d 205b 2d2d 7375 LogStdout] [--su\n-000023f0: 7070 7265 7373 5469 6d65 5d20 5b2d 6d20 ppressTime] [-m \n-00002400: 6d61 7846 696c 656c 656e 5d0a 0920 2020 maxFilelen].. \n-00002410: 2020 2020 5b5b 2d6e 206e 6f4f 664f 6c64 [[-n noOfOld\n-00002420: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save\n-00002430: 4c6f 6773 5d5d 0a09 2020 2020 2020 205b Logs]].. [\n-00002440: 2d2d 636f 6d70 7265 7373 5769 7468 2063 --compressWith c\n-00002450: 6f6d 7072 6573 7370 726f 675d 5d0a 0920 ompressprog]].. \n-00002460: 2020 2020 205b 2d2d 6c6f 6749 6e42 6163 [--logInBac\n-00002470: 6b75 7044 6972 205b 2d2d 636f 6d70 7265 kupDir [--compre\n-00002480: 7373 4c6f 6749 6e42 6163 6b75 7044 6972 ssLogInBackupDir\n-00002490: 5d0a 0920 2020 2020 2020 5b2d 2d6c 6f67 ].. [--log\n-000024a0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-000024b0: 616d 6520 6c6f 6746 696c 655d 5d0a 0920 ame logFile]].. \n-000024c0: 2020 2020 205b 6f74 6865 7242 6163 6b75 [otherBacku\n-000024d0: 7053 6572 6965 7320 2e2e 2e5d 0a0a 0a3d pSeries ...]...=\n-000024e0: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..=\n-000024f0: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B<\n-00002500: 2d2d 6865 6c70 3e0a 0a20 2020 2073 686f --help>.. sho\n-00002510: 7720 7468 6973 2068 656c 700a 0a3d 6974 w this help..=it\n-00002520: 656d 2042 3c2d 2d67 656e 6572 6174 653e em B<--generate>\n-00002530: 2c20 423c 2d67 3e0a 0a20 2020 2067 656e , B<-g>.. gen\n-00002540: 6572 6174 6520 6120 7465 6d70 6c61 7465 erate a template\n-00002550: 206f 6620 7468 6520 636f 6e66 6967 7572 of the configur\n-00002560: 6174 696f 6e20 6669 6c65 0a0a 3d69 7465 ation file..=ite\n-00002570: 6d20 423c 2d2d 6368 6563 6b43 6f6d 7072 m B<--checkCompr\n-00002580: 3e2c 2042 3c2d 433e 0a0a 2020 2020 6368 >, B<-C>.. ch\n-00002590: 6563 6b20 636f 6d70 7265 7373 696f 6e20 eck compression \n-000025a0: 666f 7220 616c 6c20 6669 6c65 7320 6269 for all files bi\n-000025b0: 6767 6572 2074 6861 6e20 316b 2074 6f20 gger than 1k to \n-000025c0: 6368 6563 6b20 6966 0a20 2020 2069 7420 check if. it \n-000025d0: 6d61 6b65 7320 7365 6e73 6520 746f 2063 makes sense to c\n-000025e0: 6f6d 7072 6573 7320 7468 656d 0a20 2020 ompress them. \n-000025f0: 206f 7665 7277 7269 7465 7320 6f70 7469 overwrites opti\n-00002600: 6f6e 730a 2020 2020 2020 2020 6578 6365 ons. exce\n-00002610: 7074 5375 6666 6978 2c20 6164 6445 7863 ptSuffix, addExc\n-00002620: 6570 7453 7566 6669 782c 206d 696e 436f eptSuffix, minCo\n-00002630: 6d70 7265 7373 5369 7a65 2c20 636f 6d70 mpressSize, comp\n-00002640: 7252 756c 650a 0a3d 6974 656d 2042 3c2d rRule..=item B<-\n-00002650: 2d70 7269 6e74 3e0a 0a20 2020 2070 7269 -print>.. pri\n-00002660: 6e74 2063 6f6e 6669 6775 7261 7469 6f6e nt configuration\n-00002670: 2072 6561 6420 6672 6f6d 2063 6f6e 6669 read from confi\n-00002680: 6775 7261 7469 6f6e 2066 696c 650a 2020 guration file. \n-00002690: 2020 6f72 2063 6f6d 6d61 6e64 206c 696e or command lin\n-000026a0: 6520 616e 6420 7374 6f70 0a0a 3d69 7465 e and stop..=ite\n-000026b0: 6d20 423c 2d2d 6669 6c65 3e2c 2042 3c2d m B<--file>, B<-\n-000026c0: 663e 0a0a 2020 2020 636f 6e66 6967 7572 f>.. configur\n-000026d0: 6174 696f 6e20 6669 6c65 2028 696e 7374 ation file (inst\n-000026e0: 6561 6420 6f66 206f 7220 6164 6469 7469 ead of or additi\n-000026f0: 6f6e 616c 6c79 2074 6f20 6f70 7469 6f6e onally to option\n-00002700: 730a 2020 2020 6f6e 2063 6f6d 6d61 6e64 s. on command\n-00002710: 206c 696e 6529 0a0a 3d69 7465 6d20 423c line)..=item B<\n-00002720: 2d2d 736f 7572 6365 4469 723e 2c20 423c --sourceDir>, B<\n-00002730: 2d73 3e0a 0a20 2020 2073 6f75 7263 6520 -s>.. source \n-00002740: 6469 7265 6374 6f72 7920 286d 7573 7420 directory (must \n-00002750: 6578 6973 7429 0a0a 3d69 7465 6d20 423c exist)..=item B<\n-00002760: 2d2d 6261 636b 7570 4469 723e 2c20 423c --backupDir>, B<\n-00002770: 2d62 3e0a 0a20 2020 2074 6f70 206c 6576 -b>.. top lev\n-00002780: 656c 2064 6972 6563 746f 7279 206f 6620 el directory of \n-00002790: 616c 6c20 6261 636b 7570 7320 286d 7573 all backups (mus\n-000027a0: 7420 6578 6973 7429 0a0a 3d69 7465 6d20 t exist)..=item \n-000027b0: 423c 2d2d 7365 7269 6573 3e2c 2042 3c2d B<--series>, B<-\n-000027c0: 533e 0a0a 2020 2020 7365 7269 6573 2064 S>.. series d\n-000027d0: 6972 6563 746f 7279 2c20 6465 6661 756c irectory, defaul\n-000027e0: 7420 6973 2027 6465 6661 756c 7427 0a20 t is 'default'. \n-000027f0: 2020 2072 656c 6174 6976 6520 7061 7468 relative path\n-00002800: 2066 726f 6d20 6261 636b 7570 4469 720a from backupDir.\n-00002810: 0a3d 6974 656d 2042 3c2d 2d74 6d70 6469 .=item B<--tmpdi\n-00002820: 723e 2c20 423c 2d54 3e0a 0a20 2020 2064 r>, B<-T>.. d\n-00002830: 6972 6563 746f 7279 2066 6f72 2074 656d irectory for tem\n-00002840: 706f 7261 7279 2066 696c 6573 2c20 6465 porary files, de\n-00002850: 6661 756c 7420 6973 203c 2f74 6d70 3e0a fault is .\n-00002860: 0a3d 6974 656d 2042 3c2d 2d6c 6f63 6b46 .=item B<--lockF\n-00002870: 696c 653e 2c20 423c 2d4c 3e0a 0a20 2020 ile>, B<-L>.. \n-00002880: 206c 6f63 6b20 6669 6c65 2c20 6966 2065 lock file, if e\n-00002890: 7869 7374 732c 206e 6577 2069 6e73 7461 xists, new insta\n-000028a0: 6e63 6573 2077 696c 6c20 6669 6e69 7368 nces will finish\n-000028b0: 2069 6620 616e 206f 6c64 0a20 2020 2069 if an old. i\n-000028c0: 7320 616c 7265 6164 7920 7275 6e6e 696e s already runnin\n-000028d0: 672c 2064 6566 6175 6c74 2069 7320 246c g, default is $l\n-000028e0: 6f63 6b46 696c 650a 2020 2020 7468 6973 ockFile. this\n-000028f0: 2074 7970 6520 6f66 206c 6f63 6b20 6669 type of lock fi\n-00002900: 6c65 7320 646f 6573 206e 6f74 2077 6f72 les does not wor\n-00002910: 6b20 6163 726f 7373 206d 756c 7469 706c k across multipl\n-00002920: 6520 7365 7276 6572 730a 2020 2020 616e e servers. an\n-00002930: 6420 6973 206e 6f74 2064 6573 6967 6e65 d is not designe\n-00002940: 6420 746f 2073 6570 6172 6174 6520 7374 d to separate st\n-00002950: 6f72 6542 6163 6b75 702e 706c 2061 6e64 oreBackup.pl and\n-00002960: 0a20 2020 2073 746f 7265 4261 636b 7570 . storeBackup\n-00002970: 5570 6461 7465 4261 636b 7570 2e70 6c20 UpdateBackup.pl \n-00002980: 6f72 2061 6e79 206f 7468 6572 2073 746f or any other sto\n-00002990: 7265 4261 636b 7570 0a20 2020 2070 726f reBackup. pro\n-000029a0: 6365 7373 2069 6e20 6120 7365 7061 7261 cess in a separa\n-000029b0: 7465 2050 4944 2073 7061 6365 2e0a 2020 te PID space.. \n-000029c0: 2020 4465 6661 756c 7420 6c6f 636b 2066 Default lock f\n-000029d0: 696c 6520 666f 7220 726f 6f74 2069 7320 ile for root is \n-000029e0: 696e 202f 7661 722f 6c6f 636b 2c20 666f in /var/lock, fo\n-000029f0: 7220 6f74 6865 7273 2069 6e20 5c24 484f r others in \\$HO\n-00002a00: 4d45 0a0a 3d69 7465 6d20 423c 2d2d 756e ME..=item B<--un\n-00002a10: 6c6f 636b 4265 666f 7265 4465 6c3e 0a0a lockBeforeDel>..\n-00002a20: 2020 2020 7265 6d6f 7665 2074 6865 206c remove the l\n-00002a30: 6f63 6b20 6669 6c65 2062 6566 6f72 6520 ock file before \n-00002a40: 6465 6c65 7469 6e67 206f 6c64 2062 6163 deleting old bac\n-00002a50: 6b75 7073 0a20 2020 2064 6566 6175 6c74 kups. default\n-00002a60: 2069 7320 746f 2064 656c 6574 6520 7468 is to delete th\n-00002a70: 6520 6c6f 636b 2066 696c 6520 6166 7465 e lock file afte\n-00002a80: 7220 7265 6d6f 7669 6e67 206f 6c64 0a20 r removing old. \n-00002a90: 2020 2062 6163 6b75 7073 0a0a 3d69 7465 backups..=ite\n-00002aa0: 6d20 423c 2d2d 6578 6365 7074 4469 7273 m B<--exceptDirs\n-00002ab0: 3e2c 2042 3c2d 653e 0a0a 2020 2020 6469 >, B<-e>.. di\n-00002ac0: 7265 6374 6f72 6965 7320 746f 2065 7863 rectories to exc\n-00002ad0: 6570 7420 6672 6f6d 2062 6163 6b69 6e67 ept from backing\n-00002ae0: 2075 7020 2872 656c 6174 6976 6520 7061 up (relative pa\n-00002af0: 7468 292c 0a20 2020 2077 696c 6463 6172 th),. wildcar\n-00002b00: 6473 2061 7265 2070 6f73 7369 626c 6520 ds are possible \n-00002b10: 616e 6420 7368 6f75 6c64 2062 6520 7175 and should be qu\n-00002b20: 6f74 6564 2074 6f20 6176 6f69 640a 2020 oted to avoid. \n-00002b30: 2020 7265 706c 6163 656d 656e 7473 2062 replacements b\n-00002b40: 7920 7468 6520 7368 656c 6c0a 2020 2020 y the shell. \n-00002b50: 7573 6520 7468 6973 2070 6172 616d 6574 use this paramet\n-00002b60: 6572 206d 756c 7469 706c 6520 7469 6d65 er multiple time\n-00002b70: 7320 666f 7220 6d75 6c74 6970 6c65 0a20 s for multiple. \n-00002b80: 2020 2064 6972 6563 746f 7269 6573 0a0a directories..\n-00002b90: 3d69 7465 6d20 423c 2d2d 636f 6e74 4578 =item B<--contEx\n-00002ba0: 6365 7074 4469 7273 4572 723e 0a0a 2020 ceptDirsErr>.. \n-00002bb0: 2020 636f 6e74 696e 7565 2069 6620 6f6e continue if on\n-00002bc0: 6520 6f72 206d 6f72 6520 6f66 2074 6865 e or more of the\n-00002bd0: 2065 7863 6570 7469 6f6e 616c 2064 6972 exceptional dir\n-00002be0: 6563 746f 7269 6573 0a20 2020 2064 6f20 ectories. do \n-00002bf0: 6e6f 7420 6578 6973 7420 2864 6566 6175 not exist (defau\n-00002c00: 6c74 2069 7320 746f 2073 746f 7020 7072 lt is to stop pr\n-00002c10: 6f63 6573 7369 6e67 290a 0a3d 6974 656d ocessing)..=item\n-00002c20: 2042 3c2d 2d69 6e63 6c75 6465 4469 7273 B<--includeDirs\n-00002c30: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6469 >, B<-i>.. di\n-00002c40: 7265 6374 6f72 6965 7320 746f 2069 6e63 rectories to inc\n-00002c50: 6c75 6465 2069 6e20 7468 6520 6261 636b lude in the back\n-00002c60: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat\n-00002c70: 6829 2c0a 2020 2020 7769 6c64 6361 7264 h),. wildcard\n-00002c80: 7320 6172 6520 706f 7373 6962 6c65 2061 s are possible a\n-00002c90: 6e64 2068 6176 6520 746f 2062 6520 7175 nd have to be qu\n-00002ca0: 6f74 6564 0a20 2020 2075 7365 2074 6869 oted. use thi\n-00002cb0: 7320 7061 7261 6d65 7465 7220 6d75 6c74 s parameter mult\n-00002cc0: 6970 6c65 2074 696d 6573 2066 6f72 206d iple times for m\n-00002cd0: 756c 7469 706c 6520 6469 7265 6374 6f72 ultiple director\n-00002ce0: 6965 730a 0a3d 6974 656d 2042 3c2d 2d65 ies..=item B<--e\n-00002cf0: 7863 6570 7452 756c 653e 0a0a 2020 2020 xceptRule>.. \n-00002d00: 4669 6c65 7320 746f 2065 7863 6c75 6465 Files to exclude\n-00002d10: 2066 726f 6d20 6261 636b 696e 6720 7570 from backing up\n-00002d20: 2e0a 2020 2020 7365 6520 5245 4144 4d45 .. see README\n-00002d30: 3a20 2769 6e63 6c75 6469 6e67 202f 2065 : 'including / e\n-00002d40: 7863 6c75 6469 6e67 2066 696c 6573 2061 xcluding files a\n-00002d50: 6e64 2064 6972 6563 746f 7269 6573 270a nd directories'.\n-00002d60: 0a3d 6974 656d 2042 3c2d 2d69 6e63 6c75 .=item B<--inclu\n-00002d70: 6465 5275 6c65 3e0a 0a20 2020 2046 696c deRule>.. Fil\n-00002d80: 6573 2074 6f20 696e 636c 7564 6520 696e es to include in\n-00002d90: 2074 6865 2062 6163 6b75 6720 7570 202d the backug up -\n-00002da0: 206c 696b 6520 6578 6365 7074 5275 6c65 like exceptRule\n-00002db0: 0a20 2020 2073 6565 2052 4541 444d 453a . see README:\n-00002dc0: 2027 696e 636c 7564 696e 6720 2f20 6578 'including / ex\n-00002dd0: 636c 7564 696e 6720 6669 6c65 7320 616e cluding files an\n-00002de0: 6420 6469 7265 6374 6f72 6965 7327 0a0a d directories'..\n-00002df0: 3d69 7465 6d20 423c 2d2d 7772 6974 6545 =item B<--writeE\n-00002e00: 7863 6c75 6465 4c6f 673e 0a0a 2020 2020 xcludeLog>.. \n-00002e10: 7772 6974 6520 6120 6669 6c65 206e 616d write a file nam\n-00002e20: 6520 2e73 746f 7265 4261 636b 7570 2e6e e .storeBackup.n\n-00002e30: 6f74 5361 7665 642e 627a 3220 7769 7468 otSaved.bz2 with\n-00002e40: 2074 6865 206e 616d 6573 0a20 2020 206f the names. o\n-00002e50: 6620 616c 6c20 736b 6970 7065 6420 6669 f all skipped fi\n-00002e60: 6c65 730a 0a3d 6974 656d 2042 3c2d 2d65 les..=item B<--e\n-00002e70: 7863 6570 7454 7970 6573 3e0a 0a20 2020 xceptTypes>.. \n-00002e80: 2064 6f20 6e6f 7420 7361 7665 2074 6865 do not save the\n-00002e90: 2073 7065 6369 6669 6564 2074 7970 6520 specified type \n-00002ea0: 6f66 2066 696c 6573 2c20 616c 6c6f 7765 of files, allowe\n-00002eb0: 643a 2053 6263 6670 6c0a 2020 2020 2020 d: Sbcfpl. \n-00002ec0: 2020 5320 2d20 6669 6c65 2069 7320 6120 S - file is a \n-00002ed0: 736f 636b 6574 0a20 2020 2020 2020 2062 socket. b\n-00002ee0: 202d 2066 696c 6520 6973 2061 2062 6c6f - file is a blo\n-00002ef0: 636b 2073 7065 6369 616c 2066 696c 650a ck special file.\n-00002f00: 2020 2020 2020 2020 6320 2d20 6669 6c65 c - file\n-00002f10: 2069 7320 6120 6368 6172 6163 7465 7220 is a character \n-00002f20: 7370 6563 6961 6c20 6669 6c65 0a20 2020 special file. \n-00002f30: 2020 2020 2066 202d 2066 696c 6520 6973 f - file is\n-00002f40: 2061 2070 6c61 696e 2066 696c 650a 2020 a plain file. \n-00002f50: 2020 2020 2020 7020 2d20 6669 6c65 2069 p - file i\n-00002f60: 7320 6120 6e61 6d65 6420 7069 7065 0a20 s a named pipe. \n-00002f70: 2020 2020 2020 206c 202d 2066 696c 6520 l - file \n-00002f80: 6973 2061 2073 796d 626f 6c69 6320 6c69 is a symbolic li\n-00002f90: 6e6b 0a20 2020 2020 2020 2053 6263 2063 nk. Sbc c\n-00002fa0: 616e 206f 6e6c 7920 6265 2073 6176 6564 an only be saved\n-00002fb0: 2077 6865 6e20 7573 696e 6720 6f70 7469 when using opti\n-00002fc0: 6f6e 205b 6370 4973 476e 755d 0a0a 3d69 on [cpIsGnu]..=i\n-00002fd0: 7465 6d20 423c 2d2d 6172 6368 6976 6554 tem B<--archiveT\n-00002fe0: 7970 6573 3e0a 0a20 2020 2073 6176 6520 ypes>.. save \n-00002ff0: 7468 6520 7370 6563 6966 6965 6420 7479 the specified ty\n-00003000: 7065 206f 6620 6669 6c65 7320 696e 2061 pe of files in a\n-00003010: 6e20 6172 6368 6976 6520 696e 7374 6561 n archive instea\n-00003020: 6420 7361 7669 6e67 0a20 2020 2074 6865 d saving. the\n-00003030: 6d20 6469 7265 6374 6c79 2069 6e20 7468 m directly in th\n-00003040: 6520 6669 6c65 2073 7973 7465 6d0a 2020 e file system. \n-00003050: 2020 7573 6520 7468 6973 2069 6620 796f use this if yo\n-00003060: 7520 7761 6e74 2074 6f20 6261 636b 7570 u want to backup\n-00003070: 2074 686f 7365 2066 696c 6520 7479 7065 those file type\n-00003080: 7320 6275 7420 796f 7572 2074 6172 6765 s but your targe\n-00003090: 740a 2020 2020 6669 6c65 206f 7220 7472 t. file or tr\n-000030a0: 616e 7370 6f72 7420 2865 672e 2073 7368 ansport (eg. ssh\n-000030b0: 6673 206f 7220 6e6f 6e20 676e 752d 6370 fs or non gnu-cp\n-000030c0: 2920 7379 7374 656d 2064 6f65 7320 6e6f ) system does no\n-000030d0: 7420 7375 7070 6f72 740a 2020 2020 7468 t support. th\n-000030e0: 6f73 6520 7479 7065 7320 6f66 2066 696c ose types of fil\n-000030f0: 6573 0a20 2020 2020 2020 2053 202d 2066 es. S - f\n-00003100: 696c 6520 6973 2061 2073 6f63 6b65 740a ile is a socket.\n-00003110: 2020 2020 2020 2020 6220 2d20 6669 6c65 b - file\n-00003120: 2069 7320 6120 626c 6f63 6b20 7370 6563 is a block spec\n-00003130: 6961 6c20 6669 6c65 0a20 2020 2020 2020 ial file. \n-00003140: 2063 202d 2066 696c 6520 6973 2061 2063 c - file is a c\n-00003150: 6861 7261 6374 6572 2073 7065 6369 616c haracter special\n-00003160: 2066 696c 650a 2020 2020 2020 2020 7020 file. p \n-00003170: 2d20 6669 6c65 2069 7320 6120 6e61 6d65 - file is a name\n-00003180: 6420 7069 7065 0a20 2020 2079 6f75 2061 d pipe. you a\n-00003190: 6c73 6f20 6861 7665 2074 6f20 7365 7420 lso have to set \n-000031a0: 2d2d 7370 6563 6961 6c54 7970 6541 7263 --specialTypeArc\n-000031b0: 6869 7665 7220 7768 656e 2075 7369 6e67 hiver when using\n-000031c0: 2074 6869 7320 6f70 7469 6f6e 0a0a 3d69 this option..=i\n-000031d0: 7465 6d20 423c 2d2d 7370 6563 6961 6c54 tem B<--specialT\n-000031e0: 7970 6541 7263 6869 7665 723e 0a0a 2020 ypeArchiver>.. \n-000031f0: 2020 706f 7373 6962 6c65 2076 616c 7565 possible value\n-00003200: 7320 6172 6520 2763 7069 6f27 206f 7220 s are 'cpio' or \n-00003210: 2774 6172 272e 2064 6566 6175 6c74 2069 'tar'. default i\n-00003220: 7320 2763 7069 6f27 0a20 2020 2074 6172 s 'cpio'. tar\n-00003230: 2069 7320 6e6f 7420 6162 6c65 2074 6f20 is not able to \n-00003240: 6172 6368 6976 6520 736f 636b 6574 730a archive sockets.\n-00003250: 2020 2020 6370 696f 2069 7320 6e6f 7420 cpio is not \n-00003260: 7061 7274 206f 6620 7468 6520 6163 7475 part of the actu\n-00003270: 616c 2070 6f73 6978 2073 7461 6e64 6172 al posix standar\n-00003280: 6420 616e 7920 6d6f 7265 0a0a 3d69 7465 d any more..=ite\n-00003290: 6d20 423c 2d2d 6370 4973 476e 753e 0a0a m B<--cpIsGnu>..\n-000032a0: 2020 2020 4163 7469 7661 7465 2074 6869 Activate thi\n-000032b0: 7320 6f70 7469 6f6e 2069 6620 796f 7572 s option if your\n-000032c0: 2073 7973 7465 6d73 2063 7020 6973 2061 systems cp is a\n-000032d0: 2066 756c 6c2d 6665 6174 7572 6564 0a20 full-featured. \n-000032e0: 2020 2047 4e55 2076 6572 7369 6f6e 2e20 GNU version. \n-000032f0: 496e 2074 6869 7320 6361 7365 2079 6f75 In this case you\n-00003300: 2077 696c 6c20 6265 2061 626c 6520 746f will be able to\n-00003310: 2061 6c73 6f20 6261 636b 7570 0a20 2020 also backup. \n-00003320: 2073 6576 6572 616c 2073 7065 6369 616c several special\n-00003330: 2066 696c 6520 7479 7065 7320 6c69 6b65 file types like\n-00003340: 2073 6f63 6b65 7473 2e0a 0a3d 6974 656d sockets...=item\n-00003350: 2042 3c2d 2d6c 696e 6b53 796d 6c69 6e6b B<--linkSymlink\n-00003360: 733e 0a0a 2020 2020 6861 7264 206c 696e s>.. hard lin\n-00003370: 6b20 6964 656e 7469 6361 6c20 7379 6d6c k identical syml\n-00003380: 696e 6b73 0a0a 3d69 7465 6d20 423c 2d2d inks..=item B<--\n-00003390: 7072 6563 6f6d 6d61 6e64 3e0a 0a20 2020 precommand>.. \n-000033a0: 2065 7865 6320 6a6f 6220 6265 666f 7265 exec job before\n-000033b0: 2073 7461 7274 696e 6720 7468 6520 6261 starting the ba\n-000033c0: 636b 7570 2c20 6368 6563 6b73 206c 6f63 ckup, checks loc\n-000033d0: 6b46 696c 6520 282d 4c29 0a20 2020 2062 kFile (-L). b\n-000033e0: 6566 6f72 6520 7374 6172 7469 6e67 2028 efore starting (\n-000033f0: 652e 672e 2063 616e 2062 6520 7573 6564 e.g. can be used\n-00003400: 2066 6f72 2072 7379 6e63 290a 2020 2020 for rsync). \n-00003410: 7374 6f70 7320 6578 6563 7574 696f 6e20 stops execution \n-00003420: 6966 206a 6f62 2072 6574 7572 6e73 2065 if job returns e\n-00003430: 7869 7420 7374 6174 7573 2021 3d20 300a xit status != 0.\n-00003440: 2020 2020 5468 6973 2070 6172 616d 6574 This paramet\n-00003450: 6572 2069 7320 7061 7273 6564 206c 696b er is parsed lik\n-00003460: 6520 6120 6c69 6e65 2069 6e20 7468 6520 e a line in the \n-00003470: 636f 6e66 6967 7572 6174 696f 6e0a 2020 configuration. \n-00003480: 2020 6669 6c65 2061 6e64 206e 6f72 6d61 file and norma\n-00003490: 6c6c 7920 6861 7320 746f 2062 6520 7175 lly has to be qu\n-000034a0: 6f74 6564 2e0a 0a3d 6974 656d 2042 3c2d oted...=item B<-\n-000034b0: 2d70 6f73 7463 6f6d 6d61 6e64 3e0a 0a20 -postcommand>.. \n-000034c0: 2020 2065 7865 6320 6a6f 6220 6166 7465 exec job afte\n-000034d0: 7220 6669 6e69 7368 696e 6720 7468 6520 r finishing the \n-000034e0: 6261 636b 7570 2c20 6275 7420 6265 666f backup, but befo\n-000034f0: 7265 2065 7261 7369 6e67 206f 660a 2020 re erasing of. \n-00003500: 2020 6f6c 6420 6261 636b 7570 7320 2072 old backups r\n-00003510: 6570 6f72 7473 2069 6620 6a6f 6220 7265 eports if job re\n-00003520: 7475 726e 7320 6578 6974 2073 7461 7475 turns exit statu\n-00003530: 7320 213d 2030 0a20 2020 2054 6869 7320 s != 0. This \n-00003540: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par\n-00003550: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line \n-00003560: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura\n-00003570: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an\n-00003580: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t\n-00003590: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i\n-000035a0: 7465 6d20 423c 2d2d 666f 6c6c 6f77 4c69 tem B<--followLi\n-000035b0: 6e6b 733e 0a0a 2020 2020 666f 6c6c 6f77 nks>.. follow\n-000035c0: 2073 796d 626f 6c69 6320 6c69 6e6b 7320 symbolic links \n-000035d0: 6c69 6b65 2064 6972 6563 746f 7269 6573 like directories\n-000035e0: 2075 7020 746f 2064 6570 7468 0a20 2020 up to depth. \n-000035f0: 2064 6566 6175 6c74 203d 2030 202d 3e20 default = 0 -> \n-00003600: 646f 206e 6f74 2066 6f6c 6c6f 7720 6c69 do not follow li\n-00003610: 6e6b 730a 0a3d 6974 656d 2042 3c2d 2d73 nks..=item B<--s\n-00003620: 7461 7949 6e46 696c 6553 7973 7465 6d3e tayInFileSystem>\n-00003630: 0a0a 2020 2020 6f6e 6c79 2073 746f 7265 .. only store\n-00003640: 2074 6865 2063 6f6e 7465 6e74 7320 6f66 the contents of\n-00003650: 2066 696c 6520 7379 7374 656d 7320 6e61 file systems na\n-00003660: 6d65 6420 6279 0a20 2020 202d 2d73 6f75 med by. --sou\n-00003670: 7263 6544 6972 2061 6e64 2073 796d 6c69 rceDir and symli\n-00003680: 6e6b 6564 2076 6961 202d 2d66 6f6c 6c6f nked via --follo\n-00003690: 774c 696e 6b73 0a0a 3d69 7465 6d20 423c wLinks..=item B<\n-000036a0: 2d2d 6869 6768 4c61 7465 6e63 793e 0a0a --highLatency>..\n-000036b0: 2020 2020 7573 6520 7468 6973 2066 6f72 use this for\n-000036c0: 2061 2076 6572 7920 6869 6768 206c 6174 a very high lat\n-000036d0: 656e 6379 206c 696e 6520 2865 672e 2076 ency line (eg. v\n-000036e0: 706e 206f 7665 720a 2020 2020 7468 6520 pn over. the \n-000036f0: 696e 7465 726e 6574 2920 666f 7220 6265 internet) for be\n-00003700: 7474 6572 2070 6172 616c 6c65 6c69 7a61 tter paralleliza\n-00003710: 7469 6f6e 0a0a 3d69 7465 6d20 423c 2d2d tion..=item B<--\n-00003720: 6967 6e6f 7265 5065 726d 733e 0a0a 2020 ignorePerms>.. \n-00003730: 2020 4966 2074 6869 7320 6f70 7469 6f6e If this option\n-00003740: 2069 7320 7365 6c65 6374 6564 2c20 6669 is selected, fi\n-00003750: 6c65 7320 7769 6c6c 206e 6f74 206e 6563 les will not nec\n-00003760: 6573 7361 7269 6c79 2068 6176 650a 2020 essarily have. \n-00003770: 2020 7468 6520 7361 6d65 2070 6572 6d69 the same permi\n-00003780: 7373 696f 6e73 2061 6e64 206f 776e 6572 ssions and owner\n-00003790: 2061 7320 7468 6520 6f72 6967 696e 616c as the original\n-000037a0: 732e 2054 6869 730a 2020 2020 7370 6565 s. This. spee\n-000037b0: 6473 2075 7020 6261 636b 7570 7320 6f6e ds up backups on\n-000037c0: 206e 6574 776f 726b 2064 7269 7665 7320 network drives \n-000037d0: 6120 6c6f 742e 2052 6563 6f76 6572 7920 a lot. Recovery \n-000037e0: 7769 7468 0a20 2020 2073 746f 7265 4261 with. storeBa\n-000037f0: 636b 7570 5265 636f 7665 722e 706c 2077 ckupRecover.pl w\n-00003800: 696c 6c20 7265 7374 6f72 6520 7468 656d ill restore them\n-00003810: 2063 6f72 7265 6374 6c79 2e0a 0a3d 6974 correctly...=it\n-00003820: 656d 2042 3c2d 2d6c 6174 654c 696e 6b73 em B<--lateLinks\n-00003830: 3e0a 0a20 2020 2064 6f20 2a6e 6f74 2a20 >.. do *not* \n-00003840: 7772 6974 6520 6861 7264 206c 696e 6b73 write hard links\n-00003850: 2074 6f20 6578 6973 7469 6e67 2066 696c to existing fil\n-00003860: 6573 2069 6e20 7468 6520 6261 636b 7570 es in the backup\n-00003870: 0a20 2020 2064 7572 696e 6720 7468 6520 . during the \n-00003880: 6261 636b 7570 0a20 2020 2079 6f75 2068 backup. you h\n-00003890: 6176 6520 746f 2063 616c 6c20 7468 6520 ave to call the \n-000038a0: 7072 6f67 7261 6d20 7374 6f72 6542 6163 program storeBac\n-000038b0: 6b75 7057 7269 7465 4c61 7465 4c69 6e6b kupWriteLateLink\n-000038c0: 2e70 6c0a 2020 2020 6c61 7465 7220 6f6e .pl. later on\n-000038d0: 2079 6f75 7220 7365 7276 6572 2069 6620 your server if \n-000038e0: 796f 7520 7365 7420 7468 6973 2066 6c61 you set this fla\n-000038f0: 6720 746f 2027 7965 7327 0a20 2020 2079 g to 'yes'. y\n-00003900: 6f75 2068 6176 6520 746f 2072 756e 2073 ou have to run s\n-00003910: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate\n-00003920: 4261 636b 7570 2e70 6c20 6c61 7465 7220 Backup.pl later \n-00003930: 2d20 7365 650a 2020 2020 6465 7363 7269 - see. descri\n-00003940: 7074 696f 6e20 666f 7220 7468 6174 2070 ption for that p\n-00003950: 726f 6772 616d 0a0a 3d69 7465 6d20 423c rogram..=item B<\n-00003960: 2d2d 6c61 7465 436f 6d70 7265 7373 3e0a --lateCompress>.\n-00003970: 0a20 2020 206f 6e6c 7920 696e 2063 6f6d . only in com\n-00003980: 6269 6e61 7469 6f6e 2077 6974 6820 2d2d bination with --\n-00003990: 6c61 7465 4c69 6e6b 730a 2020 2020 636f lateLinks. co\n-000039a0: 6d70 7265 7373 696f 6e20 6672 6f6d 2066 mpression from f\n-000039b0: 696c 6573 203e 3d20 6d69 6e43 6f6d 7072 iles >= minCompr\n-000039c0: 6573 7353 697a 6520 7769 6c6c 2062 6520 essSize will be \n-000039d0: 646f 6e65 0a20 2020 206c 6174 6572 2c20 done. later, \n-000039e0: 7468 6520 6669 6c65 2069 7320 2874 656d the file is (tem\n-000039f0: 706f 7261 7269 6c79 2920 636f 7069 6564 porarily) copied\n-00003a00: 2069 6e74 6f20 7468 6520 6261 636b 7570 into the backup\n-00003a10: 0a0a 3d69 7465 6d20 423c 2d2d 6175 746f ..=item B<--auto\n-00003a20: 7265 7061 6972 3e2c 2042 3c2d 613e 0a0a repair>, B<-a>..\n-00003a30: 2020 2020 7265 7061 6972 2073 696d 706c repair simpl\n-00003a40: 6520 696e 636f 6e73 6973 7465 6e63 6965 e inconsistencie\n-00003a50: 7320 2866 726f 6d20 6c61 7465 4c69 6e6b s (from lateLink\n-00003a60: 7329 2061 7574 6f6d 6174 6963 616c 6c79 s) automatically\n-00003a70: 0a20 2020 2077 6974 686f 7574 2072 6571 . without req\n-00003a80: 7565 7374 696e 6720 7468 6520 6163 7469 uesting the acti\n-00003a90: 6f6e 0a0a 3d69 7465 6d20 423c 2d2d 6368 on..=item B<--ch\n-00003aa0: 6563 6b42 6c6f 636b 7353 7566 6669 783e eckBlocksSuffix>\n-00003ab0: 0a0a 2020 2020 4669 6c65 7320 7769 7468 .. Files with\n-00003ac0: 2073 7566 6669 7820 666f 7220 7768 6963 suffix for whic\n-00003ad0: 6820 7374 6f72 6542 6163 6b75 7020 7769 h storeBackup wi\n-00003ae0: 6c6c 206d 616b 6520 616e 206d 6435 0a20 ll make an md5. \n-00003af0: 2020 2063 6865 636b 206f 6e20 626c 6f63 check on bloc\n-00003b00: 6b73 206f 6620 7468 6174 2066 696c 652e ks of that file.\n-00003b10: 2045 7865 6375 7465 6420 6166 7465 720a Executed after.\n-00003b20: 2020 2020 2d2d 6368 6563 6b42 6c6f 636b --checkBlock\n-00003b30: 7352 756c 6528 6e29 0a20 2020 2054 6869 sRule(n). Thi\n-00003b40: 7320 6f70 7469 6f6e 2063 616e 2062 6520 s option can be \n-00003b50: 7265 7065 6174 6564 206d 756c 7469 706c repeated multipl\n-00003b60: 6520 7469 6d65 730a 0a3d 6974 656d 2042 e times..=item B\n-00003b70: 3c2d 2d63 6865 636b 426c 6f63 6b73 4d69 <--checkBlocksMi\n-00003b80: 6e53 697a 653e 0a0a 2020 2020 4f6e 6c79 nSize>.. Only\n-00003b90: 2063 6865 636b 2066 696c 6573 2073 7065 check files spe\n-00003ba0: 6369 6669 6564 2069 6e20 2d2d 6368 6563 cified in --chec\n-00003bb0: 6b42 6c6f 636b 7353 7566 6669 7820 6966 kBlocksSuffix if\n-00003bc0: 2074 6865 7265 0a20 2020 2066 696c 6520 there. file \n-00003bd0: 7369 7a65 2069 7320 6174 206c 6561 7374 size is at least\n-00003be0: 2074 6869 7320 7661 6c75 652c 2064 6566 this value, def\n-00003bf0: 6175 6c74 2069 7320 3130 304d 0a0a 3d69 ault is 100M..=i\n-00003c00: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo\n-00003c10: 636b 7342 533e 0a0a 2020 2020 426c 6f63 cksBS>.. Bloc\n-00003c20: 6b20 7369 7a65 2066 6f72 2066 696c 6573 k size for files\n-00003c30: 2073 7065 6369 6669 6564 2077 6974 6820 specified with \n-00003c40: 2d2d 6368 6563 6b42 6c6f 636b 7353 7566 --checkBlocksSuf\n-00003c50: 6669 780a 2020 2020 4465 6661 756c 7420 fix. Default \n-00003c60: 6973 2024 6368 6563 6b42 6c6f 636b 7342 is $checkBlocksB\n-00003c70: 5364 6566 6175 6c74 2028 3120 6d65 6761 Sdefault (1 mega\n-00003c80: 6279 7465 290a 0a3d 6974 656d 2042 3c2d byte)..=item B<-\n-00003c90: 2d63 6865 636b 426c 6f63 6b73 436f 6d70 -checkBlocksComp\n-00003ca0: 723e 0a0a 2020 2020 6966 2073 6574 2c20 r>.. if set, \n-00003cb0: 7468 6520 626c 6f63 6b73 2067 656e 6572 the blocks gener\n-00003cc0: 6174 6564 2064 7565 2074 6f20 6368 6563 ated due to chec\n-00003cd0: 6b42 6c6f 636b 7353 7566 6669 780a 2020 kBlocksSuffix. \n-00003ce0: 2020 6172 6520 636f 6d70 7265 7373 6564 are compressed\n-00003cf0: 2c20 6465 6661 756c 7420 6973 2027 6e6f , default is 'no\n-00003d00: 270a 2020 2020 6966 2073 6574 2074 6f20 '. if set to \n-00003d10: 2763 6865 636b 272c 2074 7269 6573 2074 'check', tries t\n-00003d20: 6f20 6573 7469 6d61 7465 2069 6620 636f o estimate if co\n-00003d30: 6d70 7265 7373 696f 6e20 6865 6c70 730a mpression helps.\n-00003d40: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check\n-00003d50: 426c 6f63 6b73 5061 7261 6c6c 656c 3e0a BlocksParallel>.\n-00003d60: 0a20 2020 2052 6561 6420 6669 6c65 7320 . Read files \n-00003d70: 7370 6563 6966 6965 6420 6865 7265 2069 specified here i\n-00003d80: 6e20 7061 7261 6c6c 656c 2074 6f20 226e n parallel to \"n\n-00003d90: 6f72 6d61 6c22 206f 6e65 732e 0a20 2020 ormal\" ones.. \n-00003da0: 2054 6869 7320 6f6e 6c79 206d 616b 6573 This only makes\n-00003db0: 2073 656e 7365 2069 6620 7468 6579 2061 sense if they a\n-00003dc0: 7265 206f 6e20 6120 6469 6666 6572 656e re on a differen\n-00003dd0: 7420 6469 736b 2e0a 2020 2020 4465 6661 t disk.. Defa\n-00003de0: 756c 7420 7661 6c75 6520 6973 2027 6e6f ult value is 'no\n-00003df0: 270a 0a3d 6974 656d 2042 3c2d 2d71 7565 '..=item B<--que\n-00003e00: 7565 426c 6f63 6b3e 0a0a 2020 2020 6c65 ueBlock>.. le\n-00003e10: 6e67 7468 206f 6620 7175 6575 6520 746f ngth of queue to\n-00003e20: 2073 746f 7265 2066 696c 6573 2062 6566 store files bef\n-00003e30: 6f72 6520 626c 6f63 6b20 6368 6563 6b69 ore block checki\n-00003e40: 6e67 2c0a 2020 2020 6465 6661 756c 7420 ng,. default \n-00003e50: 3d20 2471 7565 7565 426c 6f63 6b0a 0a3d = $queueBlock..=\n-00003e60: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl\n-00003e70: 6f63 6b73 5275 6c65 303e 0a0a 2020 2020 ocksRule0>.. \n-00003e80: 4669 6c65 7320 666f 7220 7768 6963 6820 Files for which \n-00003e90: 7374 6f72 6542 6163 6b75 7020 7769 6c6c storeBackup will\n-00003ea0: 206d 616b 6520 616e 206d 6435 2063 6865 make an md5 che\n-00003eb0: 636b 0a20 2020 2064 6570 656e 6469 6e67 ck. depending\n-00003ec0: 206f 6e20 626c 6f63 6b73 206f 6620 7468 on blocks of th\n-00003ed0: 6174 2066 696c 652e 0a0a 3d69 7465 6d20 at file...=item \n-00003ee0: 423c 2d2d 6368 6563 6b42 6c6f 636b 7342 B<--checkBlocksB\n-00003ef0: 5330 3e0a 0a20 2020 2042 6c6f 636b 2073 S0>.. Block s\n-00003f00: 697a 6520 666f 7220 6f70 7469 6f6e 2063 ize for option c\n-00003f10: 6865 636b 426c 6f63 6b73 5275 6c65 0a20 heckBlocksRule. \n-00003f20: 2020 2044 6566 6175 6c74 2069 7320 2463 Default is $c\n-00003f30: 6865 636b 426c 6f63 6b73 4253 6465 6661 heckBlocksBSdefa\n-00003f40: 756c 7420 2831 206d 6567 6162 7974 6529 ult (1 megabyte)\n-00003f50: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n-00003f60: 6b42 6c6f 636b 7343 6f6d 7072 303e 0a0a kBlocksCompr0>..\n-00003f70: 2020 2020 6966 2073 6574 2c20 7468 6520 if set, the \n-00003f80: 626c 6f63 6b73 2067 656e 6572 6174 6564 blocks generated\n-00003f90: 2064 7565 2074 6f20 7468 6973 2072 756c due to this rul\n-00003fa0: 6520 6172 650a 2020 2020 636f 6d70 7265 e are. compre\n-00003fb0: 7373 6564 0a0a 3d69 7465 6d20 423c 2d2d ssed..=item B<--\n-00003fc0: 6368 6563 6b42 6c6f 636b 7352 6561 6430 checkBlocksRead0\n-00003fd0: 3e0a 0a20 2020 2046 696c 7465 7220 666f >.. Filter fo\n-00003fe0: 7220 7265 6164 696e 6720 7468 6520 6669 r reading the fi\n-00003ff0: 6c65 2074 6f20 7472 6561 7420 6173 2061 le to treat as a\n-00004000: 2062 6c6f 636b 6564 2066 696c 650a 2020 blocked file. \n-00004010: 2020 6567 2e20 2767 7a69 7020 2d64 2720 eg. 'gzip -d' \n-00004020: 6966 2074 6865 2066 696c 6520 6973 2063 if the file is c\n-00004030: 6f6d 7072 6573 7365 642e 2044 6566 6175 ompressed. Defau\n-00004040: 6c74 2069 7320 6e6f 0a20 2020 2072 6561 lt is no. rea\n-00004050: 6420 6669 6c74 6572 2e0a 2020 2020 5468 d filter.. Th\n-00004060: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is \n-00004070: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the \n-00004080: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. \n-00004090: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi\n-000040a0: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally \n-000040b0: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted\n-000040c0: 2c0a 2020 2020 6567 2e20 2767 7a69 7020 ,. eg. 'gzip \n-000040d0: 2d39 270a 0a3d 6974 656d 2042 3c2d 2d63 -9'..=item B<--c\n-000040e0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall\n-000040f0: 656c 303e 0a0a 2020 2020 5265 6164 2066 el0>.. Read f\n-00004100: 696c 6573 2073 7065 6369 6669 6564 2068 iles specified h\n-00004110: 6572 6520 696e 2070 6172 616c 6c65 6c20 ere in parallel \n-00004120: 746f 2022 6e6f 726d 616c 2220 6f6e 6573 to \"normal\" ones\n-00004130: 2e0a 2020 2020 5468 6973 206f 6e6c 7920 .. This only \n-00004140: 6d61 6b65 7320 7365 6e73 6520 6966 2074 makes sense if t\n-00004150: 6865 7920 6172 6520 6f6e 2061 2064 6966 hey are on a dif\n-00004160: 6665 7265 6e74 2064 6973 6b2e 0a20 2020 ferent disk.. \n-00004170: 2044 6566 6175 6c74 2076 616c 7565 2069 Default value i\n-00004180: 7320 276e 6f27 0a0a 3d69 7465 6d20 423c s 'no'..=item B<\n-00004190: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul\n-000041a0: 6531 3e0a 0a3d 6974 656d 2042 3c2d 2d63 e1>..=item B<--c\n-000041b0: 6865 636b 426c 6f63 6b73 4253 313e 0a0a heckBlocksBS1>..\n-000041c0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB\n-000041d0: 6c6f 636b 7343 6f6d 7072 313e 0a0a 3d69 locksCompr1>..=i\n-000041e0: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo\n-000041f0: 636b 7352 6561 6431 3e0a 0a3d 6974 656d cksRead1>..=item\n-00004200: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks\n-00004210: 5061 7261 6c6c 656c 313e 0a0a 3d69 7465 Parallel1>..=ite\n-00004220: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock\n-00004230: 7352 756c 6532 3e0a 0a3d 6974 656d 2042 sRule2>..=item B\n-00004240: 3c2d 2d63 6865 636b 426c 6f63 6b73 4253 <--checkBlocksBS\n-00004250: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch\n-00004260: 6563 6b42 6c6f 636b 7343 6f6d 7072 323e eckBlocksCompr2>\n-00004270: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n-00004280: 6b42 6c6f 636b 7352 6561 6432 3e0a 0a3d kBlocksRead2>..=\n-00004290: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl\n-000042a0: 6f63 6b73 5061 7261 6c6c 656c 323e 0a0a ocksParallel2>..\n-000042b0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB\n-000042c0: 6c6f 636b 7352 756c 6533 3e0a 0a3d 6974 locksRule3>..=it\n-000042d0: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc\n-000042e0: 6b73 4253 333e 0a0a 3d69 7465 6d20 423c ksBS3>..=item B<\n-000042f0: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom\n-00004300: 7072 333e 0a0a 3d69 7465 6d20 423c 2d2d pr3>..=item B<--\n-00004310: 6368 6563 6b42 6c6f 636b 7352 6561 6433 checkBlocksRead3\n-00004320: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n-00004330: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel\n-00004340: 333e 0a0a 3d69 7465 6d20 423c 2d2d 6368 3>..=item B<--ch\n-00004350: 6563 6b42 6c6f 636b 7352 756c 6534 3e0a eckBlocksRule4>.\n-00004360: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check\n-00004370: 426c 6f63 6b73 4253 343e 0a0a 3d69 7465 BlocksBS4>..=ite\n-00004380: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock\n-00004390: 7343 6f6d 7072 343e 0a0a 3d69 7465 6d20 sCompr4>..=item \n-000043a0: 423c 2d2d 6368 6563 6b42 6c6f 636b 7352 B<--checkBlocksR\n-000043b0: 6561 6434 3e0a 0a3d 6974 656d 2042 3c2d ead4>..=item B<-\n-000043c0: 2d63 6865 636b 426c 6f63 6b73 5061 7261 -checkBlocksPara\n-000043d0: 6c6c 656c 343e 0a0a 3d69 7465 6d20 423c llel4>..=item B<\n-000043e0: 2d2d 6368 6563 6b44 6576 6963 6573 303e --checkDevices0>\n-000043f0: 0a0a 2020 2020 4c69 7374 206f 6620 6465 .. List of de\n-00004400: 7669 6365 7320 666f 7220 6d64 3520 636b vices for md5 ck\n-00004410: 6563 6b20 6465 7065 6e64 696e 6720 6f6e eck depending on\n-00004420: 2062 6c6f 636b 7320 6f66 2074 6865 7365 blocks of these\n-00004430: 0a20 2020 2064 6576 6963 6573 2028 6567 . devices (eg\n-00004440: 2e20 2f64 6576 2f73 6462 206f 7220 2f64 . /dev/sdb or /d\n-00004450: 6576 2f73 6462 3129 0a0a 3d69 7465 6d20 ev/sdb1)..=item \n-00004460: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices\n-00004470: 4469 7230 3e0a 0a20 2020 2044 6972 6563 Dir0>.. Direc\n-00004480: 746f 7279 2077 6865 7265 2074 6f20 7374 tory where to st\n-00004490: 6f72 6520 7468 6520 6261 636b 7570 206f ore the backup o\n-000044a0: 6620 7468 6520 6465 7669 6365 0a0a 3d69 f the device..=i\n-000044b0: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev\n-000044c0: 6963 6573 4253 303e 0a0a 2020 2020 426c icesBS0>.. Bl\n-000044d0: 6f63 6b20 7369 7a65 206f 6620 6f70 7469 ock size of opti\n-000044e0: 6f6e 2063 6865 636b 4465 7669 6365 7330 on checkDevices0\n-000044f0: 2c0a 2020 2020 6465 6661 756c 7420 6973 ,. default is\n-00004500: 2031 4d20 2831 206d 6567 6162 7974 6529 1M (1 megabyte)\n-00004510: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n-00004520: 6b44 6576 6963 6573 436f 6d70 7230 3e0a kDevicesCompr0>.\n-00004530: 0a20 2020 2043 6f6d 7072 6573 7320 626c . Compress bl\n-00004540: 6f63 6b73 2072 6573 756c 7469 6e67 2066 ocks resulting f\n-00004550: 726f 6d20 6f70 7469 6f6e 2063 6865 636b rom option check\n-00004560: 4465 7669 6365 7330 0a20 2020 2070 6f73 Devices0. pos\n-00004570: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are\n-00004580: 2027 6368 6563 6b27 2c20 2779 6573 2720 'check', 'yes' \n-00004590: 6f72 2027 6e6f 272c 2064 6566 6175 6c74 or 'no', default\n-000045a0: 2069 7320 276e 6f27 0a0a 3d69 7465 6d20 is 'no'..=item \n-000045b0: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices\n-000045c0: 5061 7261 6c6c 656c 303e 0a0a 2020 2020 Parallel0>.. \n-000045d0: 5265 6164 2064 6576 6963 6573 2073 7065 Read devices spe\n-000045e0: 6369 6669 6564 2069 6e20 7061 7261 6c6c cified in parall\n-000045f0: 656c 2074 6f20 7468 6520 7265 7374 206f el to the rest o\n-00004600: 6620 7468 650a 2020 2020 6261 636b 7570 f the. backup\n-00004610: 2e20 5468 6973 206f 6e6c 7920 6d61 6b65 . This only make\n-00004620: 7320 7365 6e73 6520 6966 2074 6865 7920 s sense if they \n-00004630: 6172 6520 6f6e 2061 2064 6966 6665 7265 are on a differe\n-00004640: 6e74 0a20 2020 2064 6973 6b2e 2044 6566 nt. disk. Def\n-00004650: 6175 6c74 2076 616c 7565 2069 7320 276e ault value is 'n\n-00004660: 6f27 0a0a 3d69 7465 6d20 423c 2d2d 6368 o'..=item B<--ch\n-00004670: 6563 6b44 6576 6963 6573 313e 0a0a 3d69 eckDevices1>..=i\n-00004680: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev\n-00004690: 6963 6573 4469 7231 3e0a 0a3d 6974 656d icesDir1>..=item\n-000046a0: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice\n-000046b0: 7342 5331 3e0a 0a3d 6974 656d 2042 3c2d sBS1>..=item B<-\n-000046c0: 2d63 6865 636b 4465 7669 6365 7343 6f6d -checkDevicesCom\n-000046d0: 7072 313e 0a0a 3d69 7465 6d20 423c 2d2d pr1>..=item B<--\n-000046e0: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara\n-000046f0: 6c6c 656c 313e 0a0a 3d69 7465 6d20 423c llel1>..=item B<\n-00004700: 2d2d 6368 6563 6b44 6576 6963 6573 323e --checkDevices2>\n-00004710: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n-00004720: 6b44 6576 6963 6573 4469 7232 3e0a 0a3d kDevicesDir2>..=\n-00004730: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe\n-00004740: 7669 6365 7342 5332 3e0a 0a3d 6974 656d vicesBS2>..=item\n-00004750: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice\n-00004760: 7343 6f6d 7072 323e 0a0a 3d69 7465 6d20 sCompr2>..=item \n-00004770: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices\n-00004780: 5061 7261 6c6c 656c 323e 0a0a 3d69 7465 Parallel2>..=ite\n-00004790: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic\n-000047a0: 6573 333e 0a0a 3d69 7465 6d20 423c 2d2d es3>..=item B<--\n-000047b0: 6368 6563 6b44 6576 6963 6573 4469 7233 checkDevicesDir3\n-000047c0: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n-000047d0: 636b 4465 7669 6365 7342 5333 3e0a 0a3d ckDevicesBS3>..=\n-000047e0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe\n-000047f0: 7669 6365 7343 6f6d 7072 333e 0a0a 3d69 vicesCompr3>..=i\n-00004800: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev\n-00004810: 6963 6573 5061 7261 6c6c 656c 333e 0a0a icesParallel3>..\n-00004820: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD\n-00004830: 6576 6963 6573 343e 0a0a 3d69 7465 6d20 evices4>..=item \n-00004840: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices\n-00004850: 4469 7234 3e0a 0a3d 6974 656d 2042 3c2d Dir4>..=item B<-\n-00004860: 2d63 6865 636b 4465 7669 6365 7342 5334 -checkDevicesBS4\n-00004870: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che\n-00004880: 636b 4465 7669 6365 7343 6f6d 7072 343e ckDevicesCompr4>\n-00004890: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec\n-000048a0: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel\n-000048b0: 343e 0a0a 3d69 7465 6d20 423c 2d2d 7361 4>..=item B<--sa\n-000048c0: 7665 5241 4d3e 0a0a 2020 2020 7772 6974 veRAM>.. writ\n-000048d0: 6520 7465 6d70 6f72 6172 7920 6462 6d20 e temporary dbm \n-000048e0: 6669 6c65 7320 696e 202d 2d74 6d70 6469 files in --tmpdi\n-000048f0: 720a 2020 2020 7573 6520 7468 6973 2069 r. use this i\n-00004900: 6620 796f 7520 646f 206e 6f74 2068 6176 f you do not hav\n-00004910: 6520 656e 6f75 6768 2052 414d 0a0a 3d69 e enough RAM..=i\n-00004920: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress\n-00004930: 3e2c 2042 3c2d 633e 0a0a 2020 2020 636f >, B<-c>.. co\n-00004940: 6d70 7265 7373 2063 6f6d 6d61 6e64 2028 mpress command (\n-00004950: 7769 7468 206f 7074 696f 6e73 292c 2064 with options), d\n-00004960: 6566 6175 6c74 2069 7320 3c62 7a69 7032 efault is . This param\n-00004980: 6574 6572 2069 7320 7061 7273 6564 206c eter is parsed l\n-00004990: 696b 6520 7468 6520 6c69 6e65 2069 6e20 ike the line in \n-000049a0: 7468 650a 2020 2020 636f 6e66 6967 7572 the. configur\n-000049b0: 6174 696f 6e20 6669 6c65 2061 6e64 206e ation file and n\n-000049c0: 6f72 6d61 6c6c 7920 6861 7320 746f 2062 ormally has to b\n-000049d0: 6520 7175 6f74 6564 2c0a 2020 2020 6567 e quoted,. eg\n-000049e0: 2e20 2767 7a69 7020 2d39 270a 0a3d 6974 . 'gzip -9'..=it\n-000049f0: 656d 2042 3c2d 2d75 6e63 6f6d 7072 6573 em B<--uncompres\n-00004a00: 733e 2c20 423c 2d75 3e0a 0a20 2020 2075 s>, B<-u>.. u\n-00004a10: 6e63 6f6d 7072 6573 7320 636f 6d6d 616e ncompress comman\n-00004a20: 6420 2877 6974 6820 6f70 7469 6f6e 7329 d (with options)\n-00004a30: 2c20 6465 6661 756c 7420 6973 2020 3c62 , default is . Thi\n-00004a50: 7320 7061 7261 6d65 7465 7220 6973 2070 s parameter is p\n-00004a60: 6172 7365 6420 6c69 6b65 2074 6865 206c arsed like the l\n-00004a70: 696e 6520 696e 2074 6865 0a20 2020 2063 ine in the. c\n-00004a80: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n-00004a90: 6520 616e 6420 6e6f 726d 616c 6c79 2068 e and normally h\n-00004aa0: 6173 2074 6f20 6265 2071 756f 7465 642c as to be quoted,\n-00004ab0: 2065 672e 0a20 2020 2027 677a 6970 202d eg.. 'gzip -\n-00004ac0: 6427 0a0a 3d69 7465 6d20 423c 2d2d 706f d'..=item B<--po\n-00004ad0: 7374 6669 783e 2c20 423c 2d70 3e0a 0a20 stfix>, B<-p>.. \n-00004ae0: 2020 2070 6f73 7466 6978 2074 6f20 6164 postfix to ad\n-00004af0: 6420 6166 7465 7220 636f 6d70 7265 7373 d after compress\n-00004b00: 696f 6e2c 2064 6566 6175 6c74 2069 7320 ion, default is \n-00004b10: 3c2e 627a 323e 0a0a 3d69 7465 6d20 423c <.bz2>..=item B<\n-00004b20: 2d2d 6578 6365 7074 5375 6666 6978 3e0a --exceptSuffix>.\n-00004b30: 0a20 2020 2064 6f20 6e6f 7420 636f 6d70 . do not comp\n-00004b40: 7265 7373 2066 696c 6573 2077 6974 6820 ress files with \n-00004b50: 7468 6520 666f 6c6c 6f77 696e 670a 2020 the following. \n-00004b60: 2020 7375 6666 6978 2028 7570 7065 7263 suffix (upperc\n-00004b70: 6173 6520 696e 636c 7564 6564 293a 0a20 ase included):. \n-00004b80: 2020 2027 5c2e 7a69 7027 2c20 275c 2e62 '\\.zip', '\\.b\n-00004b90: 7a32 272c 2027 5c2e 677a 272c 2027 5c2e z2', '\\.gz', '\\.\n-00004ba0: 7467 7a27 2c20 275c 2e6a 7067 272c 2027 tgz', '\\.jpg', '\n-00004bb0: 5c2e 6769 6627 2c0a 2020 2020 275c 2e74 \\.gif',. '\\.t\n-00004bc0: 6966 663f 272c 2027 5c2e 6d70 6567 272c iff?', '\\.mpeg',\n-00004bd0: 2027 5c2e 6d70 653f 6727 2c20 275c 2e6d '\\.mpe?g', '\\.m\n-00004be0: 7065 3f5b 3334 5d27 2c20 275c 2e6f 6767 pe?[34]', '\\.ogg\n-00004bf0: 272c 0a20 2020 2027 5c2e 6770 6727 2c20 ',. '\\.gpg', \n-00004c00: 275c 2e70 6e67 272c 2027 5c2e 6c7a 6d61 '\\.png', '\\.lzma\n-00004c10: 272c 2027 5c2e 787a 272c 2027 5c2e 6d6f ', '\\.xz', '\\.mo\n-00004c20: 7627 0a20 2020 2054 6869 7320 6f70 7469 v'. This opti\n-00004c30: 6f6e 2063 616e 2062 6520 7265 7065 6174 on can be repeat\n-00004c40: 6564 206d 756c 7469 706c 6520 7469 6d65 ed multiple time\n-00004c50: 730a 2020 2020 4966 2079 6f75 2064 6f20 s. If you do \n-00004c60: 6e6f 7420 7761 6e74 2061 6e79 2063 6f6d not want any com\n-00004c70: 7072 6573 7369 6f6e 2c20 7365 7420 7468 pression, set th\n-00004c80: 6973 206f 7074 696f 6e0a 2020 2020 746f is option. to\n-00004c90: 2027 2e2a 270a 0a3d 6974 656d 2042 3c2d '.*'..=item B<-\n-00004ca0: 2d61 6464 4578 6365 7074 5375 6666 6978 -addExceptSuffix\n-00004cb0: 3e0a 0a20 2020 206c 696b 6520 2d2d 6578 >.. like --ex\n-00004cc0: 6365 7074 5375 6666 6978 2c20 6275 7420 ceptSuffix, but \n-00004cd0: 646f 206e 6f74 2072 6570 6c61 6365 2064 do not replace d\n-00004ce0: 6566 6175 6c74 732c 2061 6464 0a0a 3d69 efaults, add..=i\n-00004cf0: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress\n-00004d00: 5375 6666 6978 3e0a 0a20 2020 204c 696b Suffix>.. Lik\n-00004d10: 6520 2d2d 6578 6365 7074 5375 6666 6978 e --exceptSuffix\n-00004d20: 2c20 6275 7420 6d65 6e74 696f 6e65 6420 , but mentioned \n-00004d30: 6669 6c65 7320 7769 6c6c 2062 650a 2020 files will be. \n-00004d40: 2020 636f 6d70 7265 7373 6564 2e20 4966 compressed. If\n-00004d50: 2079 6f75 2063 686f 7365 2074 6869 7320 you chose this \n-00004d60: 6f70 7469 6f6e 2c20 7468 656e 2066 696c option, then fil\n-00004d70: 6573 206e 6f74 0a20 2020 2061 6666 6563 es not. affec\n-00004d80: 7465 6420 6265 2065 7865 6370 7453 7566 ted be execptSuf\n-00004d90: 6669 782c 2061 6464 4578 6365 7074 5375 fix, addExceptSu\n-00004da0: 6666 6978 206f 7220 7468 6973 2053 7566 ffix or this Suf\n-00004db0: 6669 7865 730a 2020 2020 7769 6c6c 2062 fixes. will b\n-00004dc0: 6520 7261 7465 6420 6279 2074 6865 2072 e rated by the r\n-00004dd0: 756c 6520 6675 6e63 7469 6f6e 2043 4f4d ule function COM\n-00004de0: 5052 4553 5349 4f4e 5f43 4845 434b 2077 PRESSION_CHECK w\n-00004df0: 6574 6865 720a 2020 2020 746f 2063 6f6d ether. to com\n-00004e00: 7072 6573 7320 6f72 206e 6f74 0a0a 3d69 press or not..=i\n-00004e10: 7465 6d20 423c 2d2d 6d69 6e43 6f6d 7072 tem B<--minCompr\n-00004e20: 6573 7353 697a 653e 0a0a 2020 2020 4669 essSize>.. Fi\n-00004e30: 6c65 7320 736d 616c 6c65 7220 7468 616e les smaller than\n-00004e40: 2074 6869 7320 7369 7a65 2077 696c 6c20 this size will \n-00004e50: 6e65 7665 7220 6265 2063 6f6d 7072 6573 never be compres\n-00004e60: 7365 640a 2020 2020 6275 7420 636f 7069 sed. but copi\n-00004e70: 6564 0a0a 3d69 7465 6d20 423c 2d2d 636f ed..=item B<--co\n-00004e80: 6d70 7252 756c 653e 0a0a 2020 2020 616c mprRule>.. al\n-00004e90: 7465 726e 6174 6976 6520 746f 202d 2d65 ternative to --e\n-00004ea0: 7863 6570 7453 7566 6669 782c 2063 6f6d xceptSuffix, com\n-00004eb0: 7072 6573 7353 7566 6669 7820 616e 6420 pressSuffix and \n-00004ec0: 6d69 6e43 6f6d 7072 6573 7353 697a 653a minCompressSize:\n-00004ed0: 0a20 2020 2064 6566 696e 6974 696f 6e20 . definition \n-00004ee0: 6f66 2061 2072 756c 6520 7768 6963 6820 of a rule which \n-00004ef0: 6669 6c65 7320 7769 6c6c 2062 6520 636f files will be co\n-00004f00: 6d70 7265 7373 6564 0a0a 3d69 7465 6d20 mpressed..=item \n-00004f10: 423c 2d2d 6e6f 436f 6d70 7265 7373 3e0a B<--noCompress>.\n-00004f20: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num\n-00004f30: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel \n-00004f40: 636f 6d70 7265 7373 206f 7065 7261 7469 compress operati\n-00004f50: 6f6e 732c 0a20 2020 2064 6566 6175 6c74 ons,. default\n-00004f60: 203d 2063 686f 7365 6e20 6175 746f 6d61 = chosen automa\n-00004f70: 7469 6361 6c6c 790a 0a3d 6974 656d 2042 tically..=item B\n-00004f80: 3c2d 2d71 7565 7565 436f 6d70 7265 7373 <--queueCompress\n-00004f90: 3e0a 0a20 2020 206c 656e 6774 6820 6f66 >.. length of\n-00004fa0: 2071 7565 7565 2074 6f20 7374 6f72 6520 queue to store \n-00004fb0: 6669 6c65 7320 6265 666f 7265 2063 6f6d files before com\n-00004fc0: 7072 6573 7369 6f6e 2c0a 2020 2020 6465 pression,. de\n-00004fd0: 6661 756c 7420 3d20 3130 3030 0a0a 3d69 fault = 1000..=i\n-00004fe0: 7465 6d20 423c 2d2d 6e6f 436f 7079 3e0a tem B<--noCopy>.\n-00004ff0: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num\n-00005000: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel \n-00005010: 636f 7079 206f 7065 7261 7469 6f6e 732c copy operations,\n-00005020: 0a20 2020 2064 6566 6175 6c74 203d 2031 . default = 1\n-00005030: 0a0a 3d69 7465 6d20 423c 2d2d 7175 6575 ..=item B<--queu\n-00005040: 6543 6f70 793e 0a0a 2020 2020 6c65 6e67 eCopy>.. leng\n-00005050: 7468 206f 6620 7175 6575 6520 746f 2073 th of queue to s\n-00005060: 746f 7265 2066 696c 6573 2062 6566 6f72 tore files befor\n-00005070: 6520 636f 7079 696e 672c 0a20 2020 2064 e copying,. d\n-00005080: 6566 6175 6c74 203d 2031 3030 300a 0a3d efault = 1000..=\n-00005090: 6974 656d 2042 3c2d 2d77 6974 6855 7365 item B<--withUse\n-000050a0: 7247 726f 7570 5374 6174 3e0a 0a20 2020 rGroupStat>.. \n-000050b0: 2077 7269 7465 2073 7461 7469 7374 6963 write statistic\n-000050c0: 7320 6162 6f75 7420 7573 6564 2073 7061 s about used spa\n-000050d0: 6365 2069 6e20 6c6f 6720 6669 6c65 0a0a ce in log file..\n-000050e0: 3d69 7465 6d20 423c 2d2d 7573 6572 4772 =item B<--userGr\n-000050f0: 6f75 7053 7461 7446 696c 653e 0a0a 2020 oupStatFile>.. \n-00005100: 2020 7772 6974 6520 7374 6174 6973 7469 write statisti\n-00005110: 6373 2061 626f 7574 2075 7365 6420 7370 cs about used sp\n-00005120: 6163 6520 696e 206e 616d 6520 6669 6c65 ace in name file\n-00005130: 0a20 2020 2077 696c 6c20 6265 206f 7665 . will be ove\n-00005140: 7272 6964 6465 6e20 6561 6368 2074 696d rridden each tim\n-00005150: 650a 0a3d 6974 656d 2042 3c2d 2d64 6f4e e..=item B<--doN\n-00005160: 6f74 436f 6d70 7265 7373 4d44 3546 696c otCompressMD5Fil\n-00005170: 653e 0a0a 2020 2020 646f 206e 6f74 2063 e>.. do not c\n-00005180: 6f6d 7072 6573 7320 2e6d 6435 4368 6563 ompress .md5Chec\n-00005190: 6b53 756d 4669 6c65 0a0a 3d69 7465 6d20 kSumFile..=item \n-000051a0: 423c 2d2d 6368 6d6f 644d 4435 4669 6c65 B<--chmodMD5File\n-000051b0: 3e0a 0a20 2020 2070 6572 6d69 7373 696f >.. permissio\n-000051c0: 6e73 206f 6620 2e6d 6435 4368 6563 6b53 ns of .md5CheckS\n-000051d0: 756d 4669 6c65 2061 6e64 2063 6f72 7265 umFile and corre\n-000051e0: 7370 6f6e 6469 6e67 0a20 2020 202e 7374 sponding. .st\n-000051f0: 6f72 6542 6163 6b75 704c 696e 6b73 2064 oreBackupLinks d\n-00005200: 6972 6563 746f 7279 2c20 6465 6661 756c irectory, defaul\n-00005210: 7420 6973 2030 3630 300a 0a3d 6974 656d t is 0600..=item\n-00005220: 2042 3c2d 2d76 6572 626f 7365 3e2c 2042 B<--verbose>, B\n-00005230: 3c2d 763e 0a0a 2020 2020 7665 7262 6f73 <-v>.. verbos\n-00005240: 6520 6d65 7373 6167 6573 0a0a 3d69 7465 e messages..=ite\n-00005250: 6d20 423c 2d2d 6465 6275 673e 2c20 423c m B<--debug>, B<\n-00005260: 2d64 3e0a 0a20 2020 2067 656e 6572 6174 -d>.. generat\n-00005270: 6520 6465 6275 6720 6d65 7373 6167 6573 e debug messages\n-00005280: 2c20 6c65 7665 6c73 2061 7265 2030 2028 , levels are 0 (\n-00005290: 6e6f 6e65 2c20 6465 6661 756c 7429 2c0a none, default),.\n-000052a0: 2020 2020 3120 2873 6f6d 6529 2c20 3220 1 (some), 2 \n-000052b0: 286d 616e 7929 206d 6573 7361 6765 732c (many) messages,\n-000052c0: 2065 7370 6563 6961 6c6c 7920 696e 0a20 especially in. \n-000052d0: 2020 202d 2d65 7863 6570 7452 756c 6520 --exceptRule \n-000052e0: 616e 6420 2d2d 696e 636c 7564 6552 756c and --includeRul\n-000052f0: 650a 0a3d 6974 656d 2042 3c2d 2d72 6573 e..=item B<--res\n-00005300: 6574 4174 696d 653e 0a0a 2020 2020 7265 etAtime>.. re\n-00005310: 7365 7420 6163 6365 7373 2074 696d 6520 set access time \n-00005320: 696e 2074 6865 2073 6f75 7263 6520 6469 in the source di\n-00005330: 7265 6374 6f72 7920 2d20 6275 7420 7468 rectory - but th\n-00005340: 6973 2077 696c 6c0a 2020 2020 6368 616e is will. chan\n-00005350: 6765 2063 7469 6d65 2028 7469 6d65 206f ge ctime (time o\n-00005360: 6620 6c61 7374 206d 6f64 6966 6963 6174 f last modificat\n-00005370: 696f 6e20 6f66 2066 696c 6520 7374 6174 ion of file stat\n-00005380: 7573 0a20 2020 2069 6e66 6f72 6d61 7469 us. informati\n-00005390: 6f6e 290a 0a3d 6974 656d 2042 3c2d 2d64 on)..=item B<--d\n-000053a0: 6f4e 6f74 4465 6c65 7465 3e0a 0a20 2020 oNotDelete>.. \n-000053b0: 2063 6865 636b 206f 6e6c 792c 2064 6f20 check only, do \n-000053c0: 6e6f 7420 6465 6c65 7465 2061 6e79 2062 not delete any b\n-000053d0: 6163 6b75 700a 0a3d 6974 656d 2042 3c2d ackup..=item B<-\n-000053e0: 2d64 656c 6574 654e 6f74 4669 6e69 7368 -deleteNotFinish\n-000053f0: 6564 4469 7273 3e0a 0a20 2020 2064 656c edDirs>.. del\n-00005400: 6574 6520 6f6c 6420 6261 636b 7570 7320 ete old backups \n-00005410: 7768 6963 6820 6861 7665 206e 6f74 2062 which have not b\n-00005420: 6565 6e20 6669 6e69 7368 6564 0a20 2020 een finished. \n-00005430: 2074 6869 7320 7769 6c6c 206f 6e6c 7920 this will only \n-00005440: 6861 7070 656e 2069 6620 646f 4e6f 7444 happen if doNotD\n-00005450: 656c 6574 6520 6973 2073 6574 0a0a 3d69 elete is set..=i\n-00005460: 7465 6d20 423c 2d2d 6d61 7848 6172 644c tem B<--maxHardL\n-00005470: 696e 6b73 3e0a 0a20 2020 206d 6178 696d inks>.. maxim\n-00005480: 756d 206e 756d 6265 7220 6f66 2068 6172 um number of har\n-00005490: 6420 6c69 6e6b 7320 746f 2075 7365 0a20 d links to use. \n-000054a0: 2020 207a 6572 6f20 2864 6566 6175 6c74 zero (default\n-000054b0: 2920 6d65 616e 7320 6c69 6d69 7420 6465 ) means limit de\n-000054c0: 7065 6e64 7320 6f6e 2066 696c 6520 7379 pends on file sy\n-000054d0: 7374 656d 2075 7365 6420 6f6e 6c79 0a0a stem used only..\n-000054e0: 3d69 7465 6d20 423c 2d2d 6b65 6570 416c =item B<--keepAl\n-000054f0: 6c3e 0a0a 2020 2020 6b65 6570 2062 6163 l>.. keep bac\n-00005500: 6b75 7073 2077 6869 6368 2061 7265 206e kups which are n\n-00005510: 6f74 206f 6c64 6572 2074 6861 6e20 7468 ot older than th\n-00005520: 6520 7370 6563 6966 6965 6420 616d 6f75 e specified amou\n-00005530: 6e74 0a20 2020 206f 6620 7469 6d65 2e20 nt. of time. \n-00005540: 5468 6973 2069 7320 6c69 6b65 2061 2064 This is like a d\n-00005550: 6566 6175 6c74 2076 616c 7565 2066 6f72 efault value for\n-00005560: 2061 6c6c 2064 6179 7320 696e 0a20 2020 all days in. \n-00005570: 202d 2d6b 6565 7057 6565 6b64 6179 2e20 --keepWeekday. \n-00005580: 4265 6769 6e73 2064 656c 6574 696e 6720 Begins deleting \n-00005590: 6174 2074 6865 2065 6e64 206f 6620 7468 at the end of th\n-000055a0: 6520 7363 7269 7074 0a20 2020 2074 6865 e script. the\n-000055b0: 2074 696d 6520 7261 6e67 6520 6861 7320 time range has \n-000055c0: 746f 2062 6520 7370 6563 6966 6965 6420 to be specified \n-000055d0: 696e 2066 6f72 6d61 7420 2764 686d 7327 in format 'dhms'\n-000055e0: 2c20 652e 672e 0a20 2020 2020 2031 3064 , e.g.. 10d\n-000055f0: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days\n-00005600: 2061 6e64 2034 2068 6f75 7273 0a20 2020 and 4 hours. \n-00005610: 2020 2064 6566 6175 6c74 203d 2032 3064 default = 20d\n-00005620: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep\n-00005630: 5765 656b 6461 793e 0a0a 2020 2020 6b65 Weekday>.. ke\n-00005640: 6570 2062 6163 6b75 7073 2066 6f72 2074 ep backups for t\n-00005650: 6865 2073 7065 6369 6669 6564 2064 6179 he specified day\n-00005660: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif\n-00005670: 6965 640a 2020 2020 616d 6f75 6e74 206f ied. amount o\n-00005680: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit\n-00005690: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v\n-000056a0: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in.\n-000056b0: 2020 2020 2d2d 6b65 6570 416c 6c2e 2027 --keepAll. '\n-000056c0: 4d6f 6e2c 5765 643a 3430 6420 5361 743a Mon,Wed:40d Sat:\n-000056d0: 3630 6431 306d 2720 6d65 616e 733a 0a20 60d10m' means:. \n-000056e0: 2020 2020 206b 6565 7020 6261 636b 7570 keep backup\n-000056f0: 7320 6672 6f6d 204d 6f6e 2061 6e64 2057 s from Mon and W\n-00005700: 6564 2034 3064 6179 7320 2b20 356d 696e ed 40days + 5min\n-00005710: 730a 2020 2020 2020 6b65 6570 2062 6163 s. keep bac\n-00005720: 6b75 7073 2066 726f 6d20 5361 7420 3630 kups from Sat 60\n-00005730: 6461 7973 202b 2031 306d 696e 730a 2020 days + 10mins. \n-00005740: 2020 2020 6b65 6570 2062 6163 6b75 7073 keep backups\n-00005750: 2066 726f 6d20 7468 6520 7265 7374 206f from the rest o\n-00005760: 6620 7468 6520 6461 7973 206c 696b 6520 f the days like \n-00005770: 7370 6369 6669 6564 2069 6e0a 2020 2020 spcified in. \n-00005780: 2020 2d2d 6b65 6570 416c 6c20 2864 6566 --keepAll (def\n-00005790: 6175 6c74 2024 6b65 6570 416c 6c29 0a20 ault $keepAll). \n-000057a0: 2020 2069 6620 796f 7520 616c 736f 2075 if you also u\n-000057b0: 7365 2074 6865 2027 6172 6368 6976 6520 se the 'archive \n-000057c0: 666c 6167 2720 6974 206d 6561 6e73 2074 flag' it means t\n-000057d0: 6f20 6e6f 740a 2020 2020 6465 6c65 7465 o not. delete\n-000057e0: 2074 6865 2061 6666 6563 7465 6420 6469 the affected di\n-000057f0: 7265 6374 6f72 6965 7320 7669 6120 2d2d rectories via --\n-00005800: 6b65 6570 4d61 784e 756d 6265 723a 0a20 keepMaxNumber:. \n-00005810: 2020 2020 2061 3130 6434 6820 6d65 616e a10d4h mean\n-00005820: 7320 3130 2064 6179 7320 616e 6420 3420 s 10 days and 4 \n-00005830: 686f 7572 7320 616e 6420 2761 7263 6869 hours and 'archi\n-00005840: 7665 2066 6c61 6727 0a20 2020 2065 2e67 ve flag'. e.g\n-00005850: 2e20 274d 6f6e 2c57 6564 3a61 3430 6435 . 'Mon,Wed:a40d5\n-00005860: 6d20 5361 743a 3630 6431 306d 2720 6d65 m Sat:60d10m' me\n-00005870: 616e 733a 0a20 2020 2020 206b 6565 7020 ans:. keep \n-00005880: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon\n-00005890: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days \n-000058a0: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi\n-000058b0: 7665 270a 2020 2020 2020 6b65 6570 2062 ve'. keep b\n-000058c0: 6163 6b75 7073 2066 726f 6d20 5361 7420 ackups from Sat \n-000058d0: 3630 6461 7973 202b 2031 306d 696e 730a 60days + 10mins.\n-000058e0: 2020 2020 2020 6b65 6570 2062 6163 6b75 keep backu\n-000058f0: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest\n-00005900: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik\n-00005910: 6520 7370 6563 6966 6965 6420 696e 0a20 e specified in. \n-00005920: 2020 2020 202d 2d6b 6565 7041 6c6c 2028 --keepAll (\n-00005930: 6465 6661 756c 7420 3330 6429 0a0a 3d69 default 30d)..=i\n-00005940: 7465 6d20 423c 2d2d 6b65 6570 4669 7273 tem B<--keepFirs\n-00005950: 744f 6659 6561 723e 0a0a 2020 2020 646f tOfYear>.. do\n-00005960: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the \n-00005970: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of \n-00005980: 6120 7965 6172 0a20 2020 2066 6f72 6d61 a year. forma\n-00005990: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n-000059a0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n-000059b0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n-000059c0: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast\n-000059d0: 4f66 5965 6172 3e0a 0a20 2020 2064 6f20 OfYear>.. do \n-000059e0: 6e6f 7420 6465 6c65 7465 2074 6865 206c not delete the l\n-000059f0: 6173 7420 6261 636b 7570 206f 6620 6120 ast backup of a \n-00005a00: 7965 6172 0a20 2020 2066 6f72 6d61 7420 year. format \n-00005a10: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi\n-00005a20: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc\n-00005a30: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite\n-00005a40: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO\n-00005a50: 664d 6f6e 7468 3e0a 0a20 2020 2064 6f20 fMonth>.. do \n-00005a60: 6e6f 7420 6465 6c65 7465 2074 6865 2066 not delete the f\n-00005a70: 6972 7374 2062 6163 6b75 7020 6f66 2061 irst backup of a\n-00005a80: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma\n-00005a90: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n-00005aa0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n-00005ab0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n-00005ac0: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast\n-00005ad0: 4f66 4d6f 6e74 683e 0a0a 2020 2020 646f OfMonth>.. do\n-00005ae0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the \n-00005af0: 6c61 7374 2062 6163 6b75 7020 6f66 2061 last backup of a\n-00005b00: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma\n-00005b10: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod \n-00005b20: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a\n-00005b30: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i\n-00005b40: 7465 6d20 423c 2d2d 6669 7273 7444 6179 tem B<--firstDay\n-00005b50: 4f66 5765 656b 3e0a 0a20 2020 2064 6566 OfWeek>.. def\n-00005b60: 6175 6c74 3a20 2753 756e 272e 2054 6869 ault: 'Sun'. Thi\n-00005b70: 7320 7661 6c75 6520 6973 2075 7365 6420 s value is used \n-00005b80: 666f 7220 6361 6c63 756c 6174 696e 670a for calculating.\n-00005b90: 2020 2020 2d2d 6b65 6570 4669 7273 744f --keepFirstO\n-00005ba0: 6657 6565 6b20 616e 6420 2d2d 6b65 6570 fWeek and --keep\n-00005bb0: 4c61 7374 4f66 5765 656b 0a0a 3d69 7465 LastOfWeek..=ite\n-00005bc0: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO\n-00005bd0: 6657 6565 6b3e 0a0a 2020 2020 646f 206e fWeek>.. do n\n-00005be0: 6f74 2064 656c 6574 6520 7468 6520 6669 ot delete the fi\n-00005bf0: 7273 7420 6261 636b 7570 206f 6620 6120 rst backup of a \n-00005c00: 7765 656b 0a20 2020 2066 6f72 6d61 7420 week. format \n-00005c10: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi\n-00005c20: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc\n-00005c30: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite\n-00005c40: 6d20 423c 2d2d 6b65 6570 4c61 7374 4f66 m B<--keepLastOf\n-00005c50: 5765 656b 3e0a 0a20 2020 2064 6f20 6e6f Week>.. do no\n-00005c60: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las\n-00005c70: 7420 6261 636b 7570 206f 6620 6120 7765 t backup of a we\n-00005c80: 656b 0a20 2020 2066 6f72 6d61 7420 6973 ek. format is\n-00005c90: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with\n-00005ca0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi\n-00005cb0: 7665 2066 6c61 6727 0a0a 3d69 7465 6d20 ve flag'..=item \n-00005cc0: 423c 2d2d 6b65 6570 4475 706c 6963 6174 B<--keepDuplicat\n-00005cd0: 653e 0a0a 2020 2020 6b65 6570 206d 756c e>.. keep mul\n-00005ce0: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of\n-00005cf0: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t\n-00005d00: 696d 6550 6572 696f 640a 2020 2020 666f imePeriod. fo\n-00005d10: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri\n-00005d20: 6f64 2c20 2761 7263 6869 7665 2066 6c61 od, 'archive fla\n-00005d30: 6727 2069 7320 6e6f 7420 706f 7373 6962 g' is not possib\n-00005d40: 6c65 0a20 2020 2064 6566 6175 6c74 203d le. default =\n-00005d50: 2037 640a 0a3d 6974 656d 2042 3c2d 2d6b 7d..=item B<--k\n-00005d60: 6565 704d 696e 4e75 6d62 6572 3e0a 0a20 eepMinNumber>.. \n-00005d70: 2020 204b 6565 7020 7468 6174 206d 696d Keep that mim\n-00005d80: 696e 756d 206f 6620 6261 636b 7570 732e inum of backups.\n-00005d90: 204d 756c 7469 706c 6520 6261 636b 7570 Multiple backup\n-00005da0: 7320 6f66 206f 6e65 0a20 2020 2064 6179 s of one. day\n-00005db0: 2061 7265 2063 6f75 6e74 6564 2061 7320 are counted as \n-00005dc0: 6f6e 6520 6261 636b 7570 2e20 4465 6661 one backup. Defa\n-00005dd0: 756c 7420 6973 2031 302e 0a0a 3d69 7465 ult is 10...=ite\n-00005de0: 6d20 423c 2d2d 6b65 6570 4d61 784e 756d m B<--keepMaxNum\n-00005df0: 6265 723e 0a0a 2020 2020 5472 7920 746f ber>.. Try to\n-00005e00: 206b 6565 7020 6f6e 6c79 2074 6861 7420 keep only that \n-00005e10: 6d61 7869 6d75 6d20 6f66 2062 6163 6b75 maximum of backu\n-00005e20: 7073 2e20 4966 2079 6f75 2068 6176 6520 ps. If you have \n-00005e30: 6d6f 7265 0a20 2020 2062 6163 6b75 7073 more. backups\n-00005e40: 2c20 7468 6520 666f 6c6c 6f77 696e 6720 , the following \n-00005e50: 7365 7175 656e 6365 206f 6620 6465 6c65 sequence of dele\n-00005e60: 7469 6e67 2077 696c 6c20 6861 7070 656e ting will happen\n-00005e70: 3a0a 2020 2020 2d20 6465 6c65 7465 2061 :. - delete a\n-00005e80: 6c6c 2064 7570 6c69 6361 7465 7320 6f66 ll duplicates of\n-00005e90: 2061 2064 6179 2c20 6265 6769 6e6e 696e a day, beginnin\n-00005ea0: 6720 7769 7468 2074 6865 206f 6c64 0a20 g with the old. \n-00005eb0: 2020 2020 206f 6e63 652c 2065 7863 6570 once, excep\n-00005ec0: 7420 7468 6520 6c61 7374 206f 6620 6576 t the last of ev\n-00005ed0: 6572 7920 6461 790a 2020 2020 2d20 6966 ery day. - if\n-00005ee0: 2074 6869 7320 6973 206e 6f74 2065 6e6f this is not eno\n-00005ef0: 7567 682c 2064 656c 6574 6520 7468 6520 ugh, delete the \n-00005f00: 7265 7374 206f 6620 7468 6520 6261 636b rest of the back\n-00005f10: 7570 730a 2020 2020 2020 6265 6769 6e6e ups. beginn\n-00005f20: 696e 6720 7769 7468 2074 6865 206f 6c64 ing with the old\n-00005f30: 6573 742c 2062 7574 202a 6e65 7665 722a est, but *never*\n-00005f40: 2061 2062 6163 6b75 7020 7769 7468 0a20 a backup with. \n-00005f50: 2020 2020 2074 6865 2027 6172 6368 6976 the 'archiv\n-00005f60: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l\n-00005f70: 6173 7420 6261 636b 7570 0a0a 3d69 7465 ast backup..=ite\n-00005f80: 6d20 423c 2d2d 6b65 6570 5265 6c61 7469 m B<--keepRelati\n-00005f90: 7665 3e2c 2042 3c2d 523e 0a0a 2020 2020 ve>, B<-R>.. \n-00005fa0: 416c 7465 726e 6174 6976 6520 6465 6c65 Alternative dele\n-00005fb0: 7469 6f6e 2073 6368 656d 652e 2049 6620 tion scheme. If \n-00005fc0: 796f 7520 7573 6520 7468 6973 206f 7074 you use this opt\n-00005fd0: 696f 6e2c 2061 6c6c 0a20 2020 206f 7468 ion, all. oth\n-00005fe0: 6572 206b 6565 7020 6f70 7469 6f6e 7320 er keep options \n-00005ff0: 6172 6520 6967 6e6f 7265 642e 2050 7265 are ignored. Pre\n-00006000: 7365 7276 6573 2062 6163 6b75 7073 2064 serves backups d\n-00006010: 6570 656e 6469 6e67 0a20 2020 206f 6e20 epending. on \n-00006020: 7468 6569 7220 2a72 656c 6174 6976 652a their *relative*\n-00006030: 2061 6765 2e20 4578 616d 706c 653a 0a20 age. Example:. \n-00006040: 2020 202d 5220 2731 6420 3764 2036 3164 -R '1d 7d 61d\n-00006050: 2039 3264 270a 2020 2020 7769 6c6c 2028 92d'. will (\n-00006060: 7472 7920 746f 2920 656e 7375 7265 2074 try to) ensure t\n-00006070: 6861 7420 7468 6572 6520 6973 2061 6c77 hat there is alw\n-00006080: 6179 730a 2020 2020 2d20 4f6e 6520 6261 ays. - One ba\n-00006090: 636b 7570 2062 6574 7765 656e 2031 2064 ckup between 1 d\n-000060a0: 6179 2061 6e64 2037 2064 6179 7320 6f6c ay and 7 days ol\n-000060b0: 640a 2020 2020 2d20 4f6e 6520 6261 636b d. - One back\n-000060c0: 7570 2062 6574 7765 656e 2035 2064 6179 up between 5 day\n-000060d0: 7320 616e 6420 7e32 206d 6f6e 7468 7320 s and ~2 months \n-000060e0: 6f6c 640a 2020 2020 2d20 4f6e 6520 6261 old. - One ba\n-000060f0: 636b 7570 2062 6574 7765 656e 207e 3220 ckup between ~2 \n-00006100: 6d6f 6e74 6873 2061 6e64 207e 3320 6d6f months and ~3 mo\n-00006110: 6e74 6873 206f 6c64 0a20 2020 2049 6620 nths old. If \n-00006120: 7468 6572 6520 6973 206e 6f20 6261 636b there is no back\n-00006130: 7570 2066 6f72 2061 2073 7065 6369 6669 up for a specifi\n-00006140: 6564 2074 696d 6573 7061 6e0a 2020 2020 ed timespan. \n-00006150: 2865 2e67 2e20 6265 6361 7573 6520 7468 (e.g. because th\n-00006160: 6520 6c61 7374 2062 6163 6b75 7020 7761 e last backup wa\n-00006170: 7320 646f 6e65 206d 6f72 6520 7468 616e s done more than\n-00006180: 2032 2077 6565 6b73 0a20 2020 2061 676f 2 weeks. ago\n-00006190: 2920 7468 6520 6e65 7874 206f 6c64 6572 ) the next older\n-000061a0: 2062 6163 6b75 7020 7769 6c6c 2062 6520 backup will be \n-000061b0: 7573 6564 2066 6f72 2074 6869 7320 7469 used for this ti\n-000061c0: 6d65 7370 616e 2e0a 0a3d 6974 656d 2042 mespan...=item B\n-000061d0: 3c2d 2d70 726f 6772 6573 7352 6570 6f72 <--progressRepor\n-000061e0: 743e 2c20 423c 2d50 3e0a 0a20 2020 2070 t>, B<-P>.. p\n-000061f0: 7269 6e74 2070 726f 6772 6573 7320 7265 rint progress re\n-00006200: 706f 7274 2061 6674 6572 2065 6163 6820 port after each \n-00006210: 276e 756d 6265 7227 2066 696c 6573 0a20 'number' files. \n-00006220: 2020 2061 6464 6974 696f 6e61 6c20 796f additional yo\n-00006230: 7520 6d61 7920 6164 6420 6120 7469 6d65 u may add a time\n-00006240: 2066 7261 6d65 2061 6674 6572 2077 6869 frame after whi\n-00006250: 6368 2061 206d 6573 7361 6765 2069 730a ch a message is.\n-00006260: 2020 2020 7072 696e 7465 640a 2020 2020 printed. \n-00006270: 6966 2079 6f75 2077 616e 7420 746f 2070 if you want to p\n-00006280: 7269 6e74 2061 2072 6570 6f72 7420 6561 rint a report ea\n-00006290: 6368 2031 3030 3020 6669 6c65 7320 616e ch 1000 files an\n-000062a0: 6420 6166 7465 720a 2020 2020 6f6e 6520 d after. one \n-000062b0: 6d69 6e75 7465 2061 6e64 2031 3020 7365 minute and 10 se\n-000062c0: 636f 6e64 732c 2075 7365 3a20 2d50 2031 conds, use: -P 1\n-000062d0: 3030 302c 316d 3130 730a 0a3d 6974 656d 000,1m10s..=item\n-000062e0: 2042 3c2d 2d70 7269 6e74 4465 7074 683e B<--printDepth>\n-000062f0: 2c20 423c 2d44 3e0a 0a20 2020 2070 7269 , B<-D>.. pri\n-00006300: 6e74 2064 6570 7468 206f 6620 6163 7475 nt depth of actu\n-00006310: 616c 2072 6561 6420 6469 7265 6374 6f72 al read director\n-00006320: 7920 6475 7269 6e67 2062 6163 6b75 700a y during backup.\n-00006330: 0a3d 6974 656d 2042 3c2d 2d69 676e 6f72 .=item B<--ignor\n-00006340: 6552 6561 6445 7272 6f72 3e0a 0a20 2020 eReadError>.. \n-00006350: 2069 676e 6f72 6520 7265 6164 2065 7272 ignore read err\n-00006360: 6f72 7320 696e 2073 6f75 7263 6520 6469 ors in source di\n-00006370: 7265 6374 6f72 793b 206e 6f74 2072 6561 rectory; not rea\n-00006380: 6461 626c 650a 2020 2020 6469 7265 6374 dable. direct\n-00006390: 6f72 6965 7320 646f 206e 6f74 2063 6175 ories do not cau\n-000063a0: 7365 2073 746f 7265 4261 636b 7570 2e70 se storeBackup.p\n-000063b0: 6c20 746f 2073 746f 7020 7072 6f63 6573 l to stop proces\n-000063c0: 7369 6e67 0a0a 3d69 7465 6d20 423c 2d2d sing..=item B<--\n-000063d0: 7375 7070 7265 7373 5761 726e 696e 673e suppressWarning>\n-000063e0: 0a0a 2020 2020 7375 7070 7265 7373 2028 .. suppress (\n-000063f0: 756e 7761 6e74 6564 2920 7761 726e 696e unwanted) warnin\n-00006400: 6773 2069 6e20 7468 6520 6c6f 6720 6669 gs in the log fi\n-00006410: 6c65 733b 0a20 2020 2074 6f20 7375 7070 les;. to supp\n-00006420: 7265 7373 2077 6172 6e69 6e67 732c 2074 ress warnings, t\n-00006430: 6865 2066 6f6c 6c6f 7769 6e67 206b 6579 he following key\n-00006440: 7320 6361 6e20 6265 2075 7365 643a 0a20 s can be used:. \n-00006450: 2020 2020 2065 7863 4469 7220 2873 7570 excDir (sup\n-00006460: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn\n-00006470: 696e 6720 7468 6174 2065 7863 6c75 6465 ing that exclude\n-00006480: 6420 6469 7265 6374 6f72 6965 730a 2020 d directories. \n-00006490: 2020 2020 2020 2020 2020 2064 6f20 6e6f do no\n-000064a0: 7420 6578 6973 7429 0a20 2020 2020 2066 t exist). f\n-000064b0: 696c 6543 6861 6e67 6520 2873 7570 7072 ileChange (suppr\n-000064c0: 6573 7365 7320 7468 6520 7761 726e 696e esses the warnin\n-000064d0: 6720 7468 6174 2061 2066 696c 6520 6861 g that a file ha\n-000064e0: 7320 6368 616e 6765 640a 2020 2020 2020 s changed. \n-000064f0: 2020 2020 2020 2020 2020 2064 7572 696e durin\n-00006500: 6720 7468 6520 6261 636b 7570 290a 2020 g the backup). \n-00006510: 2020 2020 6372 5365 7269 6573 2028 7375 crSeries (su\n-00006520: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war\n-00006530: 6e69 6e67 2074 6861 7420 7374 6f72 6542 ning that storeB\n-00006540: 6163 6b75 7020 6861 6420 746f 0a20 2020 ackup had to. \n-00006550: 2020 2020 2020 2020 2020 2020 6372 6561 crea\n-00006560: 7465 2074 6865 2027 6465 6661 756c 7427 te the 'default'\n-00006570: 2073 6572 6965 7329 0a20 2020 2020 2068 series). h\n-00006580: 6173 6843 6f6c 6c69 7369 6f6e 2028 7375 ashCollision (su\n-00006590: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war\n-000065a0: 6e69 6e67 2069 6620 6120 706f 7373 6962 ning if a possib\n-000065b0: 6c65 0a20 2020 2020 2020 2020 2020 2020 le. \n-000065c0: 2020 2020 2020 2068 6173 6820 636f 6c6c hash coll\n-000065d0: 6973 696f 6e20 6973 2064 6574 6563 7465 ision is detecte\n-000065e0: 6429 0a20 2020 2020 6669 6c65 4e61 6d65 d). fileName\n-000065f0: 5769 7468 4c69 6e65 4665 6564 2028 7375 WithLineFeed (su\n-00006600: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war\n-00006610: 6e69 6e67 2069 6620 6120 6669 6c65 6e61 ning if a filena\n-00006620: 6d65 0a20 2020 2020 2020 2020 2020 2020 me. \n-00006630: 2020 2020 2020 2020 2020 2020 2063 6f6e con\n-00006640: 7461 696e 7320 6120 6c69 6e65 2066 6565 tains a line fee\n-00006650: 6429 0a20 2020 2020 7573 655f 4442 5f46 d). use_DB_F\n-00006660: 696c 6520 2873 7570 7072 6573 7365 7320 ile (suppresses \n-00006670: 7468 6520 7761 726e 696e 6720 7468 6174 the warning that\n-00006680: 2079 6f75 2073 686f 756c 6420 696e 7374 you should inst\n-00006690: 616c 6c0a 2020 2020 2020 2020 2020 2020 all. \n-000066a0: 2020 2020 2020 7065 726c 206d 6f64 756c perl modul\n-000066b0: 6520 4442 5f46 696c 6520 666f 7220 6265 e DB_File for be\n-000066c0: 7474 6572 2070 6572 666f 7261 6d6e 6365 tter perforamnce\n-000066d0: 290a 2020 2020 2075 7365 5f4d 4c44 424d ). use_MLDBM\n-000066e0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n-000066f0: 2077 6172 6e69 6e67 2074 6861 7420 796f warning that yo\n-00006700: 7520 7368 6f75 6c64 2069 6e73 7461 6c6c u should install\n-00006710: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00006720: 2070 6572 6c20 6d6f 6475 6c65 204d 4c44 perl module MLD\n-00006730: 424d 2069 6620 796f 7520 7761 6e74 2074 BM if you want t\n-00006740: 6f20 7573 6520 7275 6c65 2066 756e 6374 o use rule funct\n-00006750: 696f 6e73 0a20 2020 2020 2020 2020 2020 ions. \n-00006760: 2020 2020 204d 4152 4b5f 4449 5220 6f72 MARK_DIR or\n-00006770: 204d 4152 4b5f 4449 525f 5245 4320 746f MARK_DIR_REC to\n-00006780: 6765 7468 6572 2077 6974 6820 6f70 7469 gether with opti\n-00006790: 6f6e 2073 6176 6552 414d 290a 2020 2020 on saveRAM). \n-000067a0: 2075 7365 5f49 4f43 6f6d 7072 6573 7342 use_IOCompressB\n-000067b0: 7a69 7032 2028 7375 7070 7265 7373 6573 zip2 (suppresses\n-000067c0: 2074 6865 2077 6172 6e69 6e67 2074 6861 the warning tha\n-000067d0: 7420 796f 7520 7368 6f75 6c64 0a20 2020 t you should. \n-000067e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000067f0: 2020 2020 2020 2069 6e73 7461 6c20 7065 instal pe\n-00006800: 726c 206d 6f64 756c 6520 494f 3a3a 436f rl module IO::Co\n-00006810: 6d70 7265 7373 3a3a 427a 6970 320a 2020 mpress::Bzip2. \n-00006820: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00006830: 2020 2020 2020 2020 666f 7220 6265 7474 for bett\n-00006840: 6572 2070 6572 666f 726d 616e 6365 290a er performance).\n-00006850: 2020 2020 206e 6f42 6163 6b75 7046 6f72 noBackupFor\n-00006860: 5065 7269 6f64 2028 7375 7070 7265 7373 Period (suppress\n-00006870: 6573 2077 6172 6e69 6e67 2074 6861 7420 es warning that \n-00006880: 7468 6572 6520 6172 650a 2020 2020 2020 there are. \n-00006890: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000068a0: 2020 6e6f 2062 6163 6b75 7073 2066 6f72 no backups for\n-000068b0: 2063 6572 7461 696e 2070 6572 696f 6473 certain periods\n-000068c0: 2077 6865 6e20 7573 696e 670a 2020 2020 when using. \n-000068d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000068e0: 2020 2020 6f70 7469 6f6e 206b 6565 7052 option keepR\n-000068f0: 656c 6174 6976 6529 0a20 2020 2054 6869 elative). Thi\n-00006900: 7320 6f70 7469 6f6e 2063 616e 2062 6520 s option can be \n-00006910: 7265 7065 6174 6564 206d 756c 7469 706c repeated multipl\n-00006920: 6520 7469 6d65 7320 6f6e 2074 6865 2063 e times on the c\n-00006930: 6f6d 6d61 6e64 206c 696e 652e 0a0a 3d69 ommand line...=i\n-00006940: 7465 6d20 423c 2d2d 7375 7070 7265 7373 tem B<--suppress\n-00006950: 496e 666f 3e0a 0a20 2020 2073 7570 7072 Info>.. suppr\n-00006960: 6573 7320 2875 6e77 616e 7465 6429 2069 ess (unwanted) i\n-00006970: 6e66 6f73 2069 6e20 7468 6520 6c6f 6720 nfos in the log \n-00006980: 6669 6c65 733b 0a20 2020 2074 6f20 7375 files;. to su\n-00006990: 7070 7265 7373 2069 6e66 6f73 2c20 7468 ppress infos, th\n-000069a0: 6520 666f 6c6c 6f77 696e 6720 6b65 7973 e following keys\n-000069b0: 2063 616e 2062 6520 7573 6564 3a0a 2020 can be used:. \n-000069c0: 2020 2020 7265 6164 4368 6563 6b53 756d readCheckSum\n-000069d0: 7320 2873 7570 7072 6573 7320 7468 6520 s (suppress the \n-000069e0: 696e 666f 726d 6174 696f 6e20 7468 6174 information that\n-000069f0: 2063 6865 636b 7375 6d73 0a20 2020 2020 checksums. \n-00006a00: 2020 2020 2020 2020 2020 2020 2020 206f o\n-00006a10: 6620 626c 6f63 6b65 6420 6669 6c65 7320 f blocked files \n-00006a20: 6172 6520 7265 6164 290a 2020 2020 5468 are read). Th\n-00006a30: 6973 206f 7074 696f 6e20 6361 6e20 6265 is option can be\n-00006a40: 2072 6570 6561 7465 6420 6d75 6c74 6970 repeated multip\n-00006a50: 6c65 2074 696d 6573 206f 6e20 7468 6520 le times on the \n-00006a60: 636f 6d6d 616e 6420 6c69 6e65 2e0a 0a3d command line...=\n-00006a70: 6974 656d 2042 3c2d 2d6c 696e 6b54 6f52 item B<--linkToR\n-00006a80: 6563 656e 743e 0a0a 2020 2020 6166 7465 ecent>.. afte\n-00006a90: 7220 6120 7375 6363 6573 7366 756c 2062 r a successful b\n-00006aa0: 6163 6b75 702c 2073 6574 2061 2073 796d ackup, set a sym\n-00006ab0: 626f 6c69 6320 6c69 6e6b 2074 6f0a 2020 bolic link to. \n-00006ac0: 2020 7468 6174 2062 6163 6b75 7020 616e that backup an\n-00006ad0: 6420 6465 6c65 7465 2065 7869 7374 696e d delete existin\n-00006ae0: 6720 6f6c 6465 7220 6c69 6e6b 7320 7769 g older links wi\n-00006af0: 7468 2074 6865 0a20 2020 2073 616d 6520 th the. same \n-00006b00: 6e61 6d65 0a0a 3d69 7465 6d20 423c 2d2d name..=item B<--\n-00006b10: 6c6f 6746 696c 653e 2c20 423c 2d6c 3e0a logFile>, B<-l>.\n-00006b20: 0a20 2020 206c 6f67 2066 696c 6520 2864 . log file (d\n-00006b30: 6566 6175 6c74 2069 7320 5354 444f 5554 efault is STDOUT\n-00006b40: 290a 0a3d 6974 656d 2042 3c2d 2d70 6c75 )..=item B<--plu\n-00006b50: 734c 6f67 5374 646f 7574 3e0a 0a20 2020 sLogStdout>.. \n-00006b60: 2069 6620 796f 7520 7370 6563 6966 7920 if you specify \n-00006b70: 6120 6c6f 6720 6669 6c65 2077 6974 6820 a log file with \n-00006b80: 2d2d 6c6f 6746 696c 6520 796f 7520 6361 --logFile you ca\n-00006b90: 6e0a 2020 2020 6164 6469 7469 6f6e 616c n. additional\n-00006ba0: 6c79 2070 7269 6e74 2074 6865 206f 7574 ly print the out\n-00006bb0: 7075 7420 746f 2053 5444 4f55 5420 7769 put to STDOUT wi\n-00006bc0: 7468 2074 6869 7320 666c 6167 0a0a 3d69 th this flag..=i\n-00006bd0: 7465 6d20 423c 2d2d 7375 7070 7265 7373 tem B<--suppress\n-00006be0: 5469 6d65 3e0a 0a20 2020 2073 7570 7072 Time>.. suppr\n-00006bf0: 6573 7320 6f75 7470 7574 206f 6620 7469 ess output of ti\n-00006c00: 6d65 2069 6e20 6c6f 6766 696c 650a 0a3d me in logfile..=\n-00006c10: 6974 656d 2042 3c2d 2d6d 6178 4669 6c65 item B<--maxFile\n-00006c20: 6c65 6e3e 2c20 423c 2d6d 3e0a 0a20 2020 len>, B<-m>.. \n-00006c30: 206d 6178 696d 616c 206c 656e 6774 6820 maximal length \n-00006c40: 6f66 206c 6f67 2066 696c 652c 2064 6566 of log file, def\n-00006c50: 6175 6c74 203d 2031 6536 0a0a 3d69 7465 ault = 1e6..=ite\n-00006c60: 6d20 423c 2d2d 6e6f 4f66 4f6c 6446 696c m B<--noOfOldFil\n-00006c70: 6573 3e2c 2042 3c2d 6e3e 0a0a 2020 2020 es>, B<-n>.. \n-00006c80: 6e75 6d62 6572 206f 6620 6f6c 6420 6c6f number of old lo\n-00006c90: 6720 6669 6c65 732c 2064 6566 6175 6c74 g files, default\n-00006ca0: 203d 2035 0a0a 3d69 7465 6d20 423c 2d2d = 5..=item B<--\n-00006cb0: 7361 7665 4c6f 6773 3e0a 0a20 2020 2073 saveLogs>.. s\n-00006cc0: 6176 6520 6c6f 6720 6669 6c65 7320 7769 ave log files wi\n-00006cd0: 7468 2064 6174 6520 616e 6420 7469 6d65 th date and time\n-00006ce0: 2069 6e73 7465 6164 206f 6620 6465 6c65 instead of dele\n-00006cf0: 7469 6e67 2074 6865 0a20 2020 206f 6c64 ting the. old\n-00006d00: 2028 7769 7468 205b 2d6e 6f4f 664f 6c64 (with [-noOfOld\n-00006d10: 4669 6c65 735d 290a 0a3d 6974 656d 2042 Files])..=item B\n-00006d20: 3c2d 2d63 6f6d 7072 6573 7357 6974 683e <--compressWith>\n-00006d30: 0a0a 2020 2020 636f 6d70 7265 7373 2073 .. compress s\n-00006d40: 6176 6564 206c 6f67 2066 696c 6573 2028 aved log files (\n-00006d50: 652e 672e 2077 6974 6820 2767 7a69 7020 e.g. with 'gzip \n-00006d60: 2d39 2729 0a20 2020 2064 6566 6175 6c74 -9'). default\n-00006d70: 2069 7320 2762 7a69 7032 270a 2020 2020 is 'bzip2'. \n-00006d80: 5468 6973 2070 6172 616d 6574 6572 2069 This parameter i\n-00006d90: 7320 7061 7273 6564 206c 696b 6520 6120 s parsed like a \n-00006da0: 6c69 6e65 2069 6e20 7468 6520 636f 6e66 line in the conf\n-00006db0: 6967 7572 6174 696f 6e0a 2020 2020 6669 iguration. fi\n-00006dc0: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally \n-00006dd0: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted\n-00006de0: 2e0a 0a3d 6974 656d 2042 3c2d 2d6c 6f67 ...=item B<--log\n-00006df0: 496e 4261 636b 7570 4469 723e 0a0a 2020 InBackupDir>.. \n-00006e00: 2020 7772 6974 6520 6c6f 6720 6669 6c65 write log file\n-00006e10: 2028 616c 736f 2920 696e 2074 6865 2062 (also) in the b\n-00006e20: 6163 6b75 7020 6469 7265 6374 6f72 790a ackup directory.\n-00006e30: 2020 2020 4265 2061 7761 7265 2074 6861 Be aware tha\n-00006e40: 7420 7468 6973 206c 6f67 2064 6f65 7320 t this log does \n-00006e50: 6e6f 7420 636f 6e74 6169 6e20 616c 6c20 not contain all \n-00006e60: 6572 726f 720a 2020 2020 6d65 7373 6167 error. messag\n-00006e70: 6573 206f 6620 7468 6520 6f6e 6520 7370 es of the one sp\n-00006e80: 6563 6966 6965 6420 7769 7468 202d 2d6c ecified with --l\n-00006e90: 6f67 4669 6c65 210a 0a3d 6974 656d 2042 ogFile!..=item B\n-00006ea0: 3c2d 2d63 6f6d 7072 6573 734c 6f67 496e <--compressLogIn\n-00006eb0: 4261 636b 7570 4469 723e 0a0a 2020 2020 BackupDir>.. \n-00006ec0: 636f 6d70 7265 7373 2074 6865 206c 6f67 compress the log\n-00006ed0: 2066 696c 6520 696e 2074 6865 2062 6163 file in the bac\n-00006ee0: 6b75 7020 6469 7265 6374 6f72 790a 0a3d kup directory..=\n-00006ef0: 6974 656d 2042 3c2d 2d6c 6f67 496e 4261 item B<--logInBa\n-00006f00: 636b 7570 4469 7246 696c 654e 616d 653e ckupDirFileName>\n-00006f10: 0a0a 2020 2020 6669 6c65 6e61 6d65 2074 .. filename t\n-00006f20: 6f20 7573 6520 666f 7220 7772 6974 696e o use for writin\n-00006f30: 6720 7468 6520 6162 6f76 6520 6c6f 6720 g the above log \n-00006f40: 6669 6c65 2c0a 2020 2020 6465 6661 756c file,. defaul\n-00006f50: 7420 6973 202e 7374 6f72 6542 6163 6b75 t is .storeBacku\n-00006f60: 702e 6c6f 670a 0a3d 6974 656d 2042 3c6f p.log..=item B.. List of o\n-00006f90: 7468 6572 2062 6163 6b75 7020 7365 7269 ther backup seri\n-00006fa0: 6573 2074 6f20 636f 6e73 6964 6572 2066 es to consider f\n-00006fb0: 6f72 0a20 2020 2068 6172 6420 6c69 6e6b or. hard link\n-00006fc0: 696e 672e 2052 656c 6174 6976 6520 7061 ing. Relative pa\n-00006fd0: 7468 2066 726f 6d20 6261 636b 7570 4469 th from backupDi\n-00006fe0: 7221 0a20 2020 2046 6f72 6d61 7420 2865 r!. Format (e\n-00006ff0: 7861 6d70 6c65 7329 3a0a 2020 2020 6261 xamples):. ba\n-00007000: 636b 7570 5365 7269 6573 2f32 3030 322e ckupSeries/2002.\n-00007010: 3038 2e32 395f 3038 2e32 352e 3238 202d 08.29_08.25.28 -\n-00007020: 3e20 636f 6e73 6964 6572 2074 6869 7320 > consider this \n-00007030: 6261 636b 7570 0a20 2020 206f 720a 2020 backup. or. \n-00007040: 2020 303a 6261 636b 7570 5365 7269 6573 0:backupSeries\n-00007050: 202d 3e6c 6173 7420 2879 6f75 6e67 6573 ->last (younges\n-00007060: 7429 2069 6e20 3c62 6163 6b75 7044 6972 t) in /backupSeries. \n-00007080: 2020 2031 3a62 6163 6b75 7053 6572 6965 1:backupSerie\n-00007090: 7320 2d3e 6f6e 6520 6265 666f 7265 206c s ->one before l\n-000070a0: 6173 7420 696e 203c 6261 636b 7570 4469 ast in /backupSeries.\n-000070c0: 2020 2020 6e3a 6261 636b 7570 5365 7269 n:backupSeri\n-000070d0: 6573 202d 3e0a 2020 2020 2020 6e27 7468 es ->. n'th\n-000070e0: 2062 6566 6f72 6520 6c61 7374 2069 6e20 before last in \n-000070f0: 3c62 6163 6b75 7044 6972 3e2f 6261 636b /back\n-00007100: 7570 5365 7269 6573 0a20 2020 2033 2d35 upSeries. 3-5\n-00007110: 3a62 6163 6b75 7053 6572 6965 7320 2d3e :backupSeries ->\n-00007120: 0a20 2020 2020 2033 7264 2c20 3474 6820 . 3rd, 4th \n-00007130: 616e 6420 3574 6820 696e 203c 6261 636b and 5th in /backupSer\n-00007150: 6965 730a 2020 2020 616c 6c3a 6261 636b ies. all:back\n-00007160: 7570 5365 7269 6573 202d 3e20 616c 6c20 upSeries -> all \n-00007170: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b\n-00007180: 6163 6b75 7053 6572 6965 730a 2020 2020 ackupSeries. \n-00007190: 596f 7520 6361 6e20 616c 736f 2075 7365 You can also use\n-000071a0: 2077 696c 6463 6172 6473 2069 6e20 7365 wildcards in se\n-000071b0: 7269 6573 206e 616d 6573 2e20 5365 6520 ries names. See \n-000071c0: 646f 6375 6d65 6e74 6174 696f 6e2c 0a20 documentation,. \n-000071d0: 2020 2073 6563 7469 6f6e 2027 5573 696e section 'Usin\n-000071e0: 6720 5769 6c64 6361 7264 7320 666f 7220 g Wildcards for \n-000071f0: 5265 706c 6963 6174 696f 6e27 2066 6f72 Replication' for\n-00007200: 2064 6574 6169 6c73 2e0a 2020 2020 4465 details.. De\n-00007210: 6661 756c 7420 6973 2074 6f20 6c69 6e6b fault is to link\n-00007220: 2074 6f20 7468 6520 6c61 7374 2062 6163 to the last bac\n-00007230: 6b75 7020 696e 2065 7665 7279 2073 6572 kup in every ser\n-00007240: 6965 730a 0a3d 6261 636b 0a0a 3d68 6561 ies..=back..=hea\n-00007250: 6431 2043 4f50 5952 4947 4854 0a0a 436f d1 COPYRIGHT..Co\n-00007260: 7079 7269 6768 7420 2863 2920 3230 3030 pyright (c) 2000\n-00007270: 2d32 3032 3220 6279 2048 6569 6e7a 2d4a -2022 by Heinz-J\n-00007280: 6f73 6566 2043 6c61 6573 2028 7365 6520 osef Claes (see \n-00007290: 5245 4144 4d45 292e 0a50 7562 6c69 7368 README)..Publish\n-000072a0: 6564 2075 6e64 6572 2074 6865 2047 4e55 ed under the GNU\n-000072b0: 2047 656e 6572 616c 2050 7562 6c69 6320 General Public \n-000072c0: 4c69 6365 6e73 652c 2065 6974 6865 7220 License, either \n-000072d0: 7665 7273 696f 6e20 330a 6f66 2074 6865 version 3.of the\n-000072e0: 204c 6963 656e 7365 2c20 6f72 2028 6174 License, or (at\n-000072f0: 2079 6f75 7220 6f70 7469 6f6e 2920 616e your option) an\n-00007300: 7920 6c61 7465 7220 7665 7273 696f 6e2e y later version.\n-00007310: 0a0a 3d63 7574 0a0a 6d79 2024 4865 6c70 ..=cut..my $Help\n-00007320: 203d 203c 3c45 4f48 3b0a 7472 7920 2724 = < &::S\n-000074c0: 495a 4528 2233 4d22 2927 2061 6e64 2027 IZE(\"3M\")' and '\n-000074d0: 5c24 7569 6420 6571 2022 686a 6322 2720 \\$uid eq \"hjc\"' \n-000074e0: 2920 6f72 0a23 2020 2020 2820 275c 246d ) or.# ( '\\$m\n-000074f0: 7469 6d65 203e 2026 3a3a 4441 5445 2822 time > &::DATE(\"\n-00007500: 3364 3468 2229 2720 616e 6420 6e6f 7420 3d4h\")' and not \n-00007510: 275c 2466 696c 6520 3d7e 206d 232f 746d '\\$file =~ m#/tm\n-00007520: 702f 2327 2029 270a 3b63 6865 636b 426c p/#' )'.;checkBl\n-00007530: 6f63 6b73 5275 6c65 303d 0a0a 2320 426c ocksRule0=..# Bl\n-00007540: 6f63 6b20 7369 7a65 2066 6f72 206f 7074 ock size for opt\n-00007550: 696f 6e20 6368 6563 6b42 6c6f 636b 7352 ion checkBlocksR\n-00007560: 756c 650a 2320 6465 6661 756c 7420 6973 ule.# default is\n-00007570: 2024 6368 6563 6b42 6c6f 636b 7342 5364 $checkBlocksBSd\n-00007580: 6566 6175 6c74 2028 3120 6d65 6761 6279 efault (1 megaby\n-00007590: 7465 290a 3b63 6865 636b 426c 6f63 6b73 te).;checkBlocks\n-000075a0: 4253 303d 0a0a 2320 6966 2073 6574 2074 BS0=..# if set t\n-000075b0: 6f20 2779 6573 272c 2062 6c6f 636b 7320 o 'yes', blocks \n-000075c0: 6765 6e65 7261 7465 6420 6475 6520 746f generated due to\n-000075d0: 2074 6869 7320 7275 6c65 2077 696c 6c20 this rule will \n-000075e0: 6265 2063 6f6d 7072 6573 7365 640a 2320 be compressed.# \n-000075f0: 706f 7373 6962 6c65 2076 616c 7565 733a possible values:\n-00007600: 2027 6368 6563 6b27 2c20 2779 6573 2720 'check', 'yes' \n-00007610: 6f72 2027 6e6f 272c 2064 6566 6175 6c74 or 'no', default\n-00007620: 2069 7320 276e 6f27 0a23 2063 6865 636b is 'no'.# check\n-00007630: 2075 7365 7273 2043 4f4d 5245 5353 494f users COMRESSIO\n-00007640: 4e5f 4348 4543 4b20 2873 6565 206f 7074 N_CHECK (see opt\n-00007650: 696f 6e20 636f 6d70 7265 7373 5375 6666 ion compressSuff\n-00007660: 6978 290a 3b63 6865 636b 426c 6f63 6b73 ix).;checkBlocks\n-00007670: 436f 6d70 7230 3d0a 0a23 2046 696c 7465 Compr0=..# Filte\n-00007680: 7220 666f 7220 7265 6164 696e 6720 7468 r for reading th\n-00007690: 6520 6669 6c65 2074 6f20 7472 6561 7420 e file to treat \n-000076a0: 6173 2061 2062 6c6f 636b 6564 2066 696c as a blocked fil\n-000076b0: 650a 2320 6567 2e20 2020 677a 6970 202d e.# eg. gzip -\n-000076c0: 6420 2020 6966 2074 6865 2066 696c 6520 d if the file \n-000076d0: 6973 2063 6f6d 7072 6573 7365 642e 2044 is compressed. D\n-000076e0: 6566 6175 6c74 2069 7320 6e6f 2072 6561 efault is no rea\n-000076f0: 6420 6669 6c74 6572 2e0a 3b63 6865 636b d filter..;check\n-00007700: 426c 6f63 6b73 5265 6164 303d 0a0a 2320 BlocksRead0=..# \n-00007710: 5265 6164 2066 696c 6573 2073 7065 6369 Read files speci\n-00007720: 6669 6564 2068 6572 6520 696e 2070 6172 fied here in par\n-00007730: 616c 6c65 6c20 746f 2022 6e6f 726d 616c allel to \"normal\n-00007740: 2220 6f6e 6573 2e0a 2320 5468 6973 206f \" ones..# This o\n-00007750: 6e6c 7920 6d61 6b65 7320 7365 6e73 6520 nly makes sense \n-00007760: 6966 2074 6865 7920 6172 6520 6f6e 2061 if they are on a\n-00007770: 2064 6966 6665 7265 6e74 2064 6973 6b2e different disk.\n-00007780: 0a23 2044 6566 6175 6c74 2076 616c 7565 .# Default value\n-00007790: 2069 7320 276e 6f27 0a3b 6368 6563 6b42 is 'no'.;checkB\n-000077a0: 6c6f 636b 7350 6172 616c 6c65 6c30 3d0a locksParallel0=.\n-000077b0: 0a45 4f48 0a20 2020 203b 0a7b 0a20 2020 .EOH. ;.{. \n-000077c0: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore\n-000077d0: 6163 6820 2469 2028 312e 2e24 6e6f 426c ach $i (1..$noBl\n-000077e0: 6f63 6b52 756c 6573 2d31 290a 2020 2020 ockRules-1). \n-000077f0: 7b0a 0924 626c 6f63 6b52 756c 6573 4865 {..$blockRulesHe\n-00007800: 6c70 202e 3d0a 0920 2020 2073 7072 696e lp .=.. sprin\n-00007810: 7466 2822 3b63 6865 636b 426c 6f63 6b73 tf(\";checkBlocks\n-00007820: 5275 6c65 2564 3d5c 6e3b 6368 6563 6b42 Rule%d=\\n;checkB\n-00007830: 6c6f 636b 7342 5325 643d 5c6e 3b63 6865 locksBS%d=\\n;che\n-00007840: 636b 426c 6f63 6b73 436f 6d70 7225 643d ckBlocksCompr%d=\n-00007850: 5c6e 2220 2e0a 0909 2020 2020 223b 6368 \\n\" .... \";ch\n-00007860: 6563 6b42 6c6f 636b 7352 6561 6425 643d eckBlocksRead%d=\n-00007870: 5c6e 3b63 6865 636b 426c 6f63 6b73 5061 \\n;checkBlocksPa\n-00007880: 7261 6c6c 656c 2564 3d5c 6e5c 6e22 2c0a rallel%d=\\n\\n\",.\n-00007890: 0909 2020 2020 2469 2c20 2469 2c20 2469 .. $i, $i, $i\n-000078a0: 2c20 2469 2c20 2469 293b 0a20 2020 207d , $i, $i);. }\n-000078b0: 0a20 2020 2063 686f 7020 2462 6c6f 636b . chop $block\n-000078c0: 5275 6c65 7348 656c 703b 0a7d 0a0a 6d79 RulesHelp;.}..my\n-000078d0: 2024 626c 6f63 6b44 6576 6963 6548 656c $blockDeviceHel\n-000078e0: 7020 3d20 3c3c 454f 483b 0a23 2020 4c69 p = < cons\n-00008910: 6964 6572 2074 6869 7320 6261 636b 7570 ider this backup\n-00008920: 0a23 206f 720a 2320 303a 6261 636b 7570 .# or.# 0:backup\n-00008930: 5365 7269 6573 2020 2020 2d3e 206c 6173 Series -> las\n-00008940: 7420 2879 6f75 6e67 6573 7429 2062 6163 t (youngest) bac\n-00008950: 6b75 7020 696e 203c 6261 636b 7570 4469 kup in /backupSeries.\n-00008970: 2320 313a 6261 636b 7570 5365 7269 6573 # 1:backupSeries\n-00008980: 2020 2020 2d3e 2066 6972 7374 2062 6566 -> first bef\n-00008990: 6f72 6520 6c61 7374 2062 6163 6b75 7020 ore last backup \n-000089a0: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b\n-000089b0: 6163 6b75 7053 6572 6965 730a 2320 6e3a ackupSeries.# n:\n-000089c0: 6261 636b 7570 5365 7269 6573 2020 2020 backupSeries \n-000089d0: 2d3e 206e 2774 6820 6265 666f 7265 206c -> n'th before l\n-000089e0: 6173 7420 6261 636b 7570 2069 6e20 3c62 ast backup in /backup\n-00008a00: 5365 7269 6573 0a23 2033 2d35 3a62 6163 Series.# 3-5:bac\n-00008a10: 6b75 7053 6572 6965 7320 202d 3e20 3372 kupSeries -> 3r\n-00008a20: 642c 2034 7468 2061 6e64 2035 7468 2069 d, 4th and 5th i\n-00008a30: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba\n-00008a40: 636b 7570 5365 7269 6573 0a23 2061 6c6c ckupSeries.# all\n-00008a50: 3a62 6163 6b75 7053 6572 6965 7320 202d :backupSeries -\n-00008a60: 3e20 616c 6c20 696e 203c 6261 636b 7570 > all in /backupSerie\n-00008a80: 730a 2320 5468 6973 206f 7074 696f 6e20 s.# This option \n-00008a90: 6973 2075 7365 6675 6c2c 2069 6620 796f is useful, if yo\n-00008aa0: 7520 7761 6e74 2074 6f20 6578 706c 6963 u want to explic\n-00008ab0: 6974 6c79 2068 6172 6420 6c69 6e6b 0a23 itly hard link.#\n-00008ac0: 2074 6f20 6261 636b 7570 2073 6572 6965 to backup serie\n-00008ad0: 7320 6672 6f6d 2064 6966 6665 7265 6e74 s from different\n-00008ae0: 2062 6163 6b75 7073 2e20 596f 7520 6361 backups. You ca\n-00008af0: 6e20 7370 6563 6966 7920 6567 2e20 7769 n specify eg. wi\n-00008b00: 7468 0a23 2030 3a6d 7942 6163 6b75 7020 th.# 0:myBackup \n-00008b10: 746f 2074 6865 206c 6173 7420 6261 636b to the last back\n-00008b20: 7570 206f 6620 7365 7269 6573 2027 6d79 up of series 'my\n-00008b30: 4261 636b 7570 272e 2049 6620 796f 7520 Backup'. If you \n-00008b40: 7370 6563 6966 790a 2320 6261 636b 7570 specify.# backup\n-00008b50: 2073 6572 6965 7320 7769 7468 206f 7468 series with oth\n-00008b60: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, \n-00008b70: 7468 656e 206f 6e6c 7920 7468 6573 6520 then only these \n-00008b80: 6261 636b 7570 7320 7769 6c6c 2062 650a backups will be.\n-00008b90: 2320 7573 6564 2066 6f72 2068 6172 6420 # used for hard \n-00008ba0: 6c69 6e6b 696e 672e 0a23 2059 6f75 2063 linking..# You c\n-00008bb0: 616e 2061 6c73 6f20 7573 6520 7769 6c64 an also use wild\n-00008bc0: 6361 7264 7320 696e 2073 6572 6965 7320 cards in series \n-00008bd0: 6e61 6d65 732e 2053 6565 2064 6f63 756d names. See docum\n-00008be0: 656e 7461 7469 6f6e 2c0a 2320 7365 6374 entation,.# sect\n-00008bf0: 696f 6e20 2755 7369 6e67 2057 696c 6463 ion 'Using Wildc\n-00008c00: 6172 6473 2066 6f72 2052 6570 6c69 6361 ards for Replica\n-00008c10: 7469 6f6e 2720 666f 7220 6465 7461 696c tion' for detail\n-00008c20: 732e 0a23 2044 6566 6175 6c74 2076 616c s..# Default val\n-00008c30: 7565 2069 7320 746f 206c 696e 6b20 746f ue is to link to\n-00008c40: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup\n-00008c50: 206f 6620 616c 6c20 7365 7269 6573 2073 of all series s\n-00008c60: 746f 7265 6420 696e 0a23 2027 6261 636b tored in.# 'back\n-00008c70: 7570 4469 7227 2e0a 3b6f 7468 6572 4261 upDir'..;otherBa\n-00008c80: 636b 7570 5365 7269 6573 3d0a 0a23 206c ckupSeries=..# l\n-00008c90: 6f63 6b20 6669 6c65 2c20 6966 2065 7869 ock file, if exi\n-00008ca0: 7374 2c20 6e65 7720 696e 7374 616e 6365 st, new instance\n-00008cb0: 7320 7769 6c6c 2066 696e 6973 6820 6966 s will finish if\n-00008cc0: 0a23 2061 6e20 6f6c 6420 6973 2061 6c72 .# an old is alr\n-00008cd0: 6561 6479 2072 756e 6e69 6e67 2c20 6465 eady running, de\n-00008ce0: 6661 756c 7420 6973 2024 6c6f 636b 4669 fault is $lockFi\n-00008cf0: 6c65 0a23 2044 6566 6175 6c74 206c 6f63 le.# Default loc\n-00008d00: 6b20 6669 6c65 2066 6f72 2072 6f6f 7420 k file for root \n-00008d10: 6973 2069 6e20 2f76 6172 2f6c 6f63 6b2c is in /var/lock,\n-00008d20: 2066 6f72 206f 7468 6572 7320 696e 205c for others in \\\n-00008d30: 2448 4f4d 450a 3b6c 6f63 6b46 696c 653d $HOME.;lockFile=\n-00008d40: 0a0a 2320 7265 6d6f 7665 2074 6865 206c ..# remove the l\n-00008d50: 6f63 6b20 6669 6c65 7320 6265 666f 7265 ock files before\n-00008d60: 2064 656c 6574 696e 6720 6f6c 6420 6261 deleting old ba\n-00008d70: 636b 7570 730a 2320 6465 6661 756c 7420 ckups.# default \n-00008d80: 2827 6e6f 2729 2069 7320 746f 2064 656c ('no') is to del\n-00008d90: 6574 6520 7468 6520 6c6f 636b 2066 696c ete the lock fil\n-00008da0: 6520 6166 7465 7220 6465 6c65 7469 6e67 e after deleting\n-00008db0: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu\n-00008dc0: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and\n-00008dd0: 2027 6e6f 270a 3b75 6e6c 6f63 6b42 6566 'no'.;unlockBef\n-00008de0: 6f72 6544 656c 3d0a 0a23 2063 6f6e 7469 oreDel=..# conti\n-00008df0: 6e75 6520 6966 206f 6e65 206f 7220 6d6f nue if one or mo\n-00008e00: 7265 206f 6620 7468 6520 6578 6365 7074 re of the except\n-00008e10: 696f 6e61 6c20 6469 7265 6374 6f72 6965 ional directorie\n-00008e20: 730a 2320 646f 206e 6f74 2065 7869 7374 s.# do not exist\n-00008e30: 2028 6e6f 2069 7320 7374 6f70 7069 6e67 (no is stopping\n-00008e40: 2070 726f 6365 7373 696e 6729 0a23 2064 processing).# d\n-00008e50: 6566 6175 6c74 2069 7320 276e 6f27 2c20 efault is 'no', \n-00008e60: 6361 6e20 6265 2027 7965 7327 206f 7220 can be 'yes' or \n-00008e70: 276e 6f27 0a3b 636f 6e74 4578 6365 7074 'no'.;contExcept\n-00008e80: 4469 7273 4572 723d 0a0a 2320 4469 7265 DirsErr=..# Dire\n-00008e90: 6374 6f72 6965 7320 746f 2065 7863 6c75 ctories to exclu\n-00008ea0: 6465 2066 726f 6d20 7468 6520 6261 636b de from the back\n-00008eb0: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat\n-00008ec0: 6820 696e 7369 6465 206f 6620 7468 6520 h inside of the \n-00008ed0: 6261 636b 7570 292e 0a23 2059 6f75 2063 backup)..# You c\n-00008ee0: 616e 2075 7365 2073 6865 6c6c 2074 7970 an use shell typ\n-00008ef0: 6520 7769 6c64 6361 7264 732e 0a23 2054 e wildcards..# T\n-00008f00: 6865 7365 2064 6972 6563 746f 7269 6573 hese directories\n-00008f10: 2068 6176 6520 746f 2062 6520 7365 7061 have to be sepa\n-00008f20: 7261 7465 6420 6279 2073 7061 6365 206f rated by space o\n-00008f30: 7220 6e65 776c 696e 652e 0a3b 6578 6365 r newline..;exce\n-00008f40: 7074 4469 7273 3d0a 0a23 2044 6972 6563 ptDirs=..# Direc\n-00008f50: 746f 7269 6573 2074 6f20 696e 636c 7564 tories to includ\n-00008f60: 6520 696e 2074 6865 2062 6163 6b75 7020 e in the backup \n-00008f70: 2872 656c 6174 6976 6520 7061 7468 2069 (relative path i\n-00008f80: 6e73 6964 6520 6f66 2074 6865 2062 6163 nside of the bac\n-00008f90: 6b75 7029 2e0a 2320 596f 7520 6361 6e20 kup)..# You can \n-00008fa0: 7573 6520 7368 656c 6c20 7479 7065 2077 use shell type w\n-00008fb0: 696c 6463 6172 6473 2e0a 2320 5468 6573 ildcards..# Thes\n-00008fc0: 6520 6469 7265 6374 6f72 6965 7320 6861 e directories ha\n-00008fd0: 7665 2074 6f20 6265 2073 6570 6172 6174 ve to be separat\n-00008fe0: 6564 2062 7920 7370 6163 6520 6f72 206e ed by space or n\n-00008ff0: 6577 6c69 6e65 2e0a 3b69 6e63 6c75 6465 ewline..;include\n-00009000: 4469 7273 3d0a 0a23 2072 756c 6520 666f Dirs=..# rule fo\n-00009010: 7220 6578 636c 7564 696e 6720 6669 6c65 r excluding file\n-00009020: 7320 2f20 6f6e 6c79 2066 6f72 2065 7870 s / only for exp\n-00009030: 6572 6965 6e63 6564 2061 646d 696e 6973 erienced adminis\n-00009040: 7472 6174 6f72 730a 2320 2121 2120 7365 trators.# !!! se\n-00009050: 6520 5245 4144 4d45 2066 696c 6520 2769 e README file 'i\n-00009060: 6e63 6c75 6469 6e67 202f 2065 7863 6c75 ncluding / exclu\n-00009070: 6469 6e67 2066 696c 6573 2061 6e64 2064 ding files and d\n-00009080: 6972 6563 746f 7269 6573 270a 2320 4558 irectories'.# EX\n-00009090: 414d 504c 453a 200a 2320 7365 6172 6368 AMPLE: .# search\n-000090a0: 5275 6c65 203d 2028 2027 5c24 7369 7a65 Rule = ( '\\$size\n-000090b0: 203e 2026 3a3a 5349 5a45 2822 334d 2229 > &::SIZE(\"3M\")\n-000090c0: 2720 616e 6420 275c 2475 6964 2065 7120 ' and '\\$uid eq \n-000090d0: 2268 6a63 2227 2029 206f 720a 2320 2020 \"hjc\"' ) or.# \n-000090e0: 2028 2027 5c24 6d74 696d 6520 3e20 263a ( '\\$mtime > &:\n-000090f0: 3a44 4154 4528 2233 6434 6822 2927 2061 :DATE(\"3d4h\")' a\n-00009100: 6e64 206e 6f74 2027 5c24 6669 6c65 203d nd not '\\$file =\n-00009110: 7e20 6d23 2f74 6d70 2f23 2720 2927 0a3b ~ m#/tmp/#' )'.;\n-00009120: 6578 6365 7074 5275 6c65 3d0a 0a23 2046 exceptRule=..# F\n-00009130: 6f72 2065 7870 6c61 6e61 7469 6f6e 732c or explanations,\n-00009140: 2073 6565 2027 6578 6365 7074 5275 6c65 see 'exceptRule\n-00009150: 272e 0a3b 696e 636c 7564 6552 756c 653d '..;includeRule=\n-00009160: 0a0a 2320 7772 6974 6520 6120 6669 6c65 ..# write a file\n-00009170: 206e 616d 6520 2e73 746f 7265 4261 636b name .storeBack\n-00009180: 7570 2e6e 6f74 5361 7665 642e 627a 3220 up.notSaved.bz2 \n-00009190: 7769 7468 2074 6865 0a23 206e 616d 6573 with the.# names\n-000091a0: 206f 6620 616c 6c20 736b 6970 7065 6420 of all skipped \n-000091b0: 6669 6c65 732c 2064 6566 6175 6c74 2069 files, default i\n-000091c0: 7320 276e 6f27 2c20 6361 6e20 6265 2027 s 'no', can be '\n-000091d0: 7965 7327 206f 7220 276e 6f27 0a3b 7772 yes' or 'no'.;wr\n-000091e0: 6974 6545 7863 6c75 6465 4c6f 673d 0a0a iteExcludeLog=..\n-000091f0: 2320 646f 206e 6f74 2073 6176 6520 7468 # do not save th\n-00009200: 6520 7370 6563 6966 6965 6420 7479 7065 e specified type\n-00009210: 7320 6f66 2066 696c 6573 2c20 616c 6c6f s of files, allo\n-00009220: 7765 643a 2053 6263 6670 6c0a 2320 5320 wed: Sbcfpl.# S \n-00009230: 2d20 6669 6c65 2069 7320 6120 736f 636b - file is a sock\n-00009240: 6574 0a23 2062 202d 2066 696c 6520 6973 et.# b - file is\n-00009250: 2061 2062 6c6f 636b 2073 7065 6369 616c a block special\n-00009260: 2066 696c 650a 2320 6320 2d20 6669 6c65 file.# c - file\n-00009270: 2069 7320 6120 6368 6172 6163 7465 7220 is a character \n-00009280: 7370 6563 6961 6c20 6669 6c65 0a23 2066 special file.# f\n-00009290: 202d 2066 696c 6520 6973 2061 2070 6c61 - file is a pla\n-000092a0: 696e 2066 696c 650a 2320 7020 2d20 6669 in file.# p - fi\n-000092b0: 6c65 2069 7320 6120 6e61 6d65 6420 7069 le is a named pi\n-000092c0: 7065 0a23 206c 202d 2066 696c 6520 6973 pe.# l - file is\n-000092d0: 2061 2073 796d 626f 6c69 6320 6c69 6e6b a symbolic link\n-000092e0: 0a23 2053 7062 6320 6361 6e20 6f6e 6c79 .# Spbc can only\n-000092f0: 2062 6520 6261 636b 6564 2075 7020 6966 be backed up if\n-00009300: 2047 4e55 2063 6f70 7920 6973 2061 7661 GNU copy is ava\n-00009310: 696c 6162 6c65 2e0a 3b65 7863 6570 7454 ilable..;exceptT\n-00009320: 7970 6573 3d0a 0a23 2073 6176 6520 7468 ypes=..# save th\n-00009330: 6520 7370 6563 6966 6965 6420 7479 7065 e specified type\n-00009340: 206f 6620 6669 6c65 7320 696e 2061 6e20 of files in an \n-00009350: 6172 6368 6976 6520 696e 7374 6561 6420 archive instead \n-00009360: 7361 7669 6e67 0a23 2074 6865 6d20 6469 saving.# them di\n-00009370: 7265 6374 6c79 2069 6e20 7468 6520 6669 rectly in the fi\n-00009380: 6c65 2073 7973 7465 6d0a 2320 7573 6520 le system.# use \n-00009390: 7468 6973 2069 6620 796f 7520 7761 6e74 this if you want\n-000093a0: 2074 6f20 6261 636b 7570 2074 686f 7365 to backup those\n-000093b0: 2066 696c 6520 7479 7065 7320 6275 7420 file types but \n-000093c0: 796f 7572 2074 6172 6765 740a 2320 6669 your target.# fi\n-000093d0: 6c65 206f 7220 7472 616e 7370 6f72 7420 le or transport \n-000093e0: 2865 672e 2073 7368 6673 206f 7220 6e6f (eg. sshfs or no\n-000093f0: 6e20 676e 752d 6370 2920 7379 7374 656d n gnu-cp) system\n-00009400: 2064 6f65 7320 6e6f 7420 7375 7070 6f72 does not suppor\n-00009410: 740a 2320 7468 6f73 6520 7479 7065 7320 t.# those types \n-00009420: 6f66 2066 696c 650a 2320 2020 5320 2d20 of file.# S - \n-00009430: 6669 6c65 2069 7320 6120 736f 636b 6574 file is a socket\n-00009440: 0a23 2020 2062 202d 2066 696c 6520 6973 .# b - file is\n-00009450: 2061 2062 6c6f 636b 2073 7065 6369 616c a block special\n-00009460: 2066 696c 650a 2320 2020 6320 2d20 6669 file.# c - fi\n-00009470: 6c65 2069 7320 6120 6368 6172 6163 7465 le is a characte\n-00009480: 7220 7370 6563 6961 6c20 6669 6c65 0a23 r special file.#\n-00009490: 2020 2070 202d 2066 696c 6520 6973 2061 p - file is a\n-000094a0: 206e 616d 6564 2070 6970 650a 2320 2020 named pipe.# \n-000094b0: 6c20 2d20 6669 6c65 2069 7320 6120 7379 l - file is a sy\n-000094c0: 6d62 6f6c 6963 206c 696e 6b0a 2320 796f mbolic link.# yo\n-000094d0: 7520 616c 736f 2068 6176 6520 746f 2073 u also have to s\n-000094e0: 6574 2073 7065 6369 616c 5479 7065 4172 et specialTypeAr\n-000094f0: 6368 6976 6572 2077 6865 6e20 7573 696e chiver when usin\n-00009500: 6720 7468 6973 206f 7074 696f 6e0a 3b61 g this option.;a\n-00009510: 7263 6869 7665 5479 7065 733d 0a0a 0a23 rchiveTypes=...#\n-00009520: 2070 6f73 7369 626c 6520 7661 6c75 6573 possible values\n-00009530: 2061 7265 2027 6370 696f 272c 2027 7461 are 'cpio', 'ta\n-00009540: 7227 2c20 276e 6f6e 6527 2e20 6465 6661 r', 'none'. defa\n-00009550: 756c 7420 6973 2027 6370 696f 270a 2320 ult is 'cpio'.# \n-00009560: 7461 7220 6973 206e 6f74 2061 626c 6520 tar is not able \n-00009570: 746f 2061 7263 6869 7665 2073 6f63 6b65 to archive socke\n-00009580: 7473 0a23 2063 7069 6f20 6973 206e 6f74 ts.# cpio is not\n-00009590: 2070 6172 7420 6f66 2074 6865 2061 6374 part of the act\n-000095a0: 7561 6c20 706f 7369 7820 7374 616e 6461 ual posix standa\n-000095b0: 7264 2061 6e79 206d 6f72 650a 3b73 7065 rd any more.;spe\n-000095c0: 6369 616c 5479 7065 4172 6368 6976 6572 cialTypeArchiver\n-000095d0: 3d0a 0a23 2041 6374 6976 6174 6520 7468 =..# Activate th\n-000095e0: 6973 206f 7074 696f 6e20 6966 2079 6f75 is option if you\n-000095f0: 7220 7379 7374 656d 2773 2063 7020 6973 r system's cp is\n-00009600: 2061 2066 756c 6c2d 6665 6174 7572 6564 a full-featured\n-00009610: 2047 4e55 0a23 2076 6572 7369 6f6e 2e20 GNU.# version. \n-00009620: 496e 2074 6869 7320 6361 7365 2079 6f75 In this case you\n-00009630: 2077 696c 6c20 6265 2061 626c 6520 746f will be able to\n-00009640: 2061 6c73 6f20 6261 636b 7570 2073 6576 also backup sev\n-00009650: 6572 616c 0a23 2073 7065 6369 616c 2066 eral.# special f\n-00009660: 696c 6520 7479 7065 7320 6c69 6b65 2073 ile types like s\n-00009670: 6f63 6b65 7473 2e0a 2320 506f 7373 6962 ockets..# Possib\n-00009680: 6c65 2076 616c 7565 7320 6172 6520 2779 le values are 'y\n-00009690: 6573 2720 616e 6420 276e 6f27 2e20 4465 es' and 'no'. De\n-000096a0: 6661 756c 7420 6973 2027 6e6f 270a 3b63 fault is 'no'.;c\n-000096b0: 7049 7347 6e75 3d0a 0a23 206d 616b 6520 pIsGnu=..# make \n-000096c0: 6120 6861 7264 206c 696e 6b20 746f 2065 a hard link to e\n-000096d0: 7869 7374 696e 672c 2069 6465 6e74 6963 xisting, identic\n-000096e0: 616c 2073 796d 6c69 6e6b 7320 696e 206f al symlinks in o\n-000096f0: 6c64 2062 6163 6b75 7073 0a23 2075 7365 ld backups.# use\n-00009700: 2074 6869 732c 2069 6620 796f 7572 206f this, if your o\n-00009710: 7065 7261 7469 6e67 2073 7973 7465 6d20 perating system \n-00009720: 7375 7070 6f72 7473 2074 6869 7320 286c supports this (l\n-00009730: 696e 7578 2064 6f65 7329 0a23 2050 6f73 inux does).# Pos\n-00009740: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are\n-00009750: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'.\n-00009760: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no'\n-00009770: 0a3b 6c69 6e6b 5379 6d6c 696e 6b73 3d0a .;linkSymlinks=.\n-00009780: 0a23 2065 7865 6320 6a6f 6220 6265 666f .# exec job befo\n-00009790: 7265 2073 7461 7274 696e 6720 7468 6520 re starting the \n-000097a0: 6261 636b 7570 2c20 6368 6563 6b73 206c backup, checks l\n-000097b0: 6f63 6b46 696c 6520 282d 4c29 2062 6566 ockFile (-L) bef\n-000097c0: 6f72 650a 2320 7374 6172 7469 6e67 2028 ore.# starting (\n-000097d0: 652e 672e 2063 616e 2062 6520 7573 6564 e.g. can be used\n-000097e0: 2066 6f72 2072 7379 6e63 2920 7374 6f70 for rsync) stop\n-000097f0: 7320 6578 6563 7574 696f 6e20 6966 206a s execution if j\n-00009800: 6f62 2072 6574 7572 6e73 0a23 2065 7869 ob returns.# exi\n-00009810: 7420 7374 6174 7573 2021 3d20 300a 3b70 t status != 0.;p\n-00009820: 7265 636f 6d6d 616e 643d 0a0a 2320 6578 recommand=..# ex\n-00009830: 6563 206a 6f62 2061 6674 6572 2066 696e ec job after fin\n-00009840: 6973 6869 6e67 2074 6865 2062 6163 6b75 ishing the backu\n-00009850: 702c 2062 7574 2062 6566 6f72 6520 6572 p, but before er\n-00009860: 6173 696e 6720 6f66 206f 6c64 0a23 2062 asing of old.# b\n-00009870: 6163 6b75 7073 2072 6570 6f72 7473 2069 ackups reports i\n-00009880: 6620 6a6f 6220 7265 7475 726e 7320 6578 f job returns ex\n-00009890: 6974 2073 7461 7475 7320 213d 2030 0a3b it status != 0.;\n-000098a0: 706f 7374 636f 6d6d 616e 643d 0a0a 2320 postcommand=..# \n-000098b0: 666f 6c6c 6f77 2073 796d 626f 6c69 6320 follow symbolic \n-000098c0: 6c69 6e6b 7320 6c69 6b65 2064 6972 6563 links like direc\n-000098d0: 746f 7269 6573 2075 7020 746f 2064 6570 tories up to dep\n-000098e0: 7468 2030 202d 3e20 646f 206e 6f74 0a23 th 0 -> do not.#\n-000098f0: 2066 6f6c 6c6f 7720 6c69 6e6b 730a 3b66 follow links.;f\n-00009900: 6f6c 6c6f 774c 696e 6b73 3d0a 0a23 206f ollowLinks=..# o\n-00009910: 6e6c 7920 7374 6f72 6520 7468 6520 636f nly store the co\n-00009920: 6e74 656e 7473 206f 6620 6669 6c65 2073 ntents of file s\n-00009930: 7973 7465 6d73 206e 616d 6564 2062 790a ystems named by.\n-00009940: 2320 736f 7572 6365 4469 7220 616e 6420 # sourceDir and \n-00009950: 7379 6d6c 696e 6b65 6420 7669 6120 666f symlinked via fo\n-00009960: 6c6c 6f77 4c69 6e6b 730a 2320 706f 7373 llowLinks.# poss\n-00009970: 6962 6c65 2076 616c 7565 7320 6172 6520 ible values are \n-00009980: 2779 6573 2720 616e 6420 276e 6f27 3b20 'yes' and 'no'; \n-00009990: 6465 6661 756c 7420 6973 2027 6e6f 270a default is 'no'.\n-000099a0: 3b73 7461 7949 6e46 696c 6553 7973 7465 ;stayInFileSyste\n-000099b0: 6d3d 0a0a 2320 7573 6520 7468 6973 206f m=..# use this o\n-000099c0: 6e6c 7920 6966 2079 6f75 2077 7269 7465 nly if you write\n-000099d0: 2079 6f75 7220 6261 636b 7570 206f 7665 your backup ove\n-000099e0: 7220 6120 6869 6768 206c 6174 656e 6379 r a high latency\n-000099f0: 206c 696e 650a 2320 6c69 6b65 2061 2076 line.# like a v\n-00009a00: 706e 206f 7665 7220 7468 6520 696e 7465 pn over the inte\n-00009a10: 726e 6574 0a23 2073 746f 7265 6261 636b rnet.# storeback\n-00009a20: 7570 2077 696c 6c20 7573 6520 6d6f 7265 up will use more\n-00009a30: 2070 6172 616c 6c65 6c69 7a61 7469 6f6e parallelization\n-00009a40: 2061 7420 7468 6520 636f 7374 206f 6620 at the cost of \n-00009a50: 6d6f 7265 0a23 2063 7075 2070 6f77 6572 more.# cpu power\n-00009a60: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu\n-00009a70: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and\n-00009a80: 2027 6e6f 273b 2064 6566 6175 6c74 2069 'no'; default i\n-00009a90: 7320 276e 6f27 0a3b 6869 6768 4c61 7465 s 'no'.;highLate\n-00009aa0: 6e63 793d 0a0a 2320 4966 2074 6869 7320 ncy=..# If this \n-00009ab0: 6f70 7469 6f6e 2069 7320 656e 6162 6c65 option is enable\n-00009ac0: 642c 2074 6865 6e20 7468 6520 6669 6c65 d, then the file\n-00009ad0: 7320 696e 2074 6865 2062 6163 6b75 7020 s in the backup \n-00009ae0: 7769 6c6c 206e 6f74 0a23 206e 6563 6365 will not.# necce\n-00009af0: 7373 6172 696c 7920 6861 7665 2074 6865 ssarily have the\n-00009b00: 2073 616d 6520 7065 726d 6973 7369 6f6e same permission\n-00009b10: 7320 616e 6420 6f77 6e65 7220 6173 2074 s and owner as t\n-00009b20: 6865 206f 7269 6769 6e61 6c73 2e0a 2320 he originals..# \n-00009b30: 5468 6973 2073 7065 6564 7320 7570 2062 This speeds up b\n-00009b40: 6163 6b75 7073 206f 6e20 6e65 7477 6f72 ackups on networ\n-00009b50: 6b20 6472 6976 6573 2061 206c 6f74 2e20 k drives a lot. \n-00009b60: 436f 7272 6563 7420 7065 726d 6973 7369 Correct permissi\n-00009b70: 6f6e 730a 2320 6172 6520 7265 7374 6f72 ons.# are restor\n-00009b80: 6564 2062 7920 7374 6f72 6542 6163 6b75 ed by storeBacku\n-00009b90: 7052 6563 6f76 6572 2e70 6c20 6e6f 206d pRecover.pl no m\n-00009ba0: 6174 7465 7220 7768 6174 2074 6869 7320 atter what this \n-00009bb0: 6f70 7469 6f6e 2069 730a 2320 7365 7420 option is.# set \n-00009bc0: 746f 2e20 4465 6661 756c 7420 6973 2027 to. Default is '\n-00009bd0: 6e6f 270a 3b69 676e 6f72 6550 6572 6d73 no'.;ignorePerms\n-00009be0: 3d0a 0a23 2073 7570 7072 6573 7320 2875 =..# suppress (u\n-00009bf0: 6e77 616e 7465 6429 2077 6172 6e69 6e67 nwanted) warning\n-00009c00: 7320 696e 2074 6865 206c 6f67 2066 696c s in the log fil\n-00009c10: 6573 3b0a 2320 746f 2073 7570 7072 6573 es;.# to suppres\n-00009c20: 7320 7761 726e 696e 6773 2c20 7468 6520 s warnings, the \n-00009c30: 666f 6c6c 6f77 696e 6720 6b65 7973 2063 following keys c\n-00009c40: 616e 2062 6520 7573 6564 3a0a 2320 2020 an be used:.# \n-00009c50: 6578 6344 6972 2028 7375 7070 7265 7373 excDir (suppress\n-00009c60: 6573 2074 6865 2077 6172 6e69 6e67 2074 es the warning t\n-00009c70: 6861 7420 6578 636c 7564 6564 2064 6972 hat excluded dir\n-00009c80: 6563 746f 7269 6573 0a23 2020 2020 2020 ectories.# \n-00009c90: 2020 2020 646f 206e 6f74 2065 7869 7374 do not exist\n-00009ca0: 290a 2320 2020 6669 6c65 4368 616e 6765 ).# fileChange\n-00009cb0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the\n-00009cc0: 2077 6172 6e69 6e67 2074 6861 7420 6120 warning that a \n-00009cd0: 6669 6c65 2068 6173 2063 6861 6e67 6564 file has changed\n-00009ce0: 2064 7572 696e 670a 2320 2020 2020 2020 during.# \n-00009cf0: 2020 2020 2020 2074 6865 2062 6163 6b75 the backu\n-00009d00: 7029 0a23 2020 2063 7253 6572 6965 7320 p).# crSeries \n-00009d10: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the \n-00009d20: 7761 726e 696e 6720 7468 6174 2073 746f warning that sto\n-00009d30: 7265 4261 636b 7570 2068 6164 2074 6f20 reBackup had to \n-00009d40: 6372 6561 7465 2074 6865 0a23 2020 2020 create the.# \n-00009d50: 2020 2020 2020 2020 2764 6566 6175 6c74 'default\n-00009d60: 2720 7365 7269 6573 290a 2320 2020 6861 ' series).# ha\n-00009d70: 7368 436f 6c6c 6973 696f 6e20 2873 7570 shCollision (sup\n-00009d80: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn\n-00009d90: 696e 6720 6966 2061 2070 6f73 7369 626c ing if a possibl\n-00009da0: 650a 2320 2020 2020 2020 2020 2020 2020 e.# \n-00009db0: 2020 2020 6861 7368 2063 6f6c 6c69 7369 hash collisi\n-00009dc0: 6f6e 2069 7320 6465 7465 6374 6564 290a on is detected).\n-00009dd0: 2320 2020 6669 6c65 4e61 6d65 5769 7468 # fileNameWith\n-00009de0: 4c69 6e65 4665 6564 2028 7375 7070 7265 LineFeed (suppre\n-00009df0: 7373 6573 2074 6865 2077 6172 6e69 6e67 sses the warning\n-00009e00: 2069 6620 6120 6669 6c65 6e61 6d65 0a23 if a filename.#\n-00009e10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00009e20: 2020 2020 2020 2020 636f 6e74 6169 6e73 contains\n-00009e30: 2061 206c 696e 6520 6665 6564 290a 2320 a line feed).# \n-00009e40: 2020 2075 7365 5f44 425f 4669 6c65 2028 use_DB_File (\n-00009e50: 7375 7070 7265 7373 6573 2074 6865 2077 suppresses the w\n-00009e60: 6172 6e69 6e67 2074 6861 7420 796f 7520 arning that you \n-00009e70: 7368 6f75 6c64 2069 6e73 7461 6c6c 0a23 should install.#\n-00009e80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00009e90: 2070 6572 6c20 6d6f 6475 6c65 2044 425f perl module DB_\n-00009ea0: 4669 6c65 2066 6f72 2062 6574 7465 7220 File for better \n-00009eb0: 7065 7266 6f72 616d 6e63 6529 0a23 2020 perforamnce).# \n-00009ec0: 2020 7573 655f 4d4c 4442 4d20 2873 7570 use_MLDBM (sup\n-00009ed0: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn\n-00009ee0: 696e 6720 7468 6174 2079 6f75 2073 686f ing that you sho\n-00009ef0: 756c 6420 696e 7374 616c 6c0a 2320 2020 uld install.# \n-00009f00: 2020 2020 2020 2020 2020 2020 7065 726c perl\n-00009f10: 206d 6f64 756c 6520 4d4c 4442 4d20 6966 module MLDBM if\n-00009f20: 2079 6f75 2077 616e 7420 746f 2075 7365 you want to use\n-00009f30: 2072 756c 6520 6675 6e63 7469 6f6e 730a rule functions.\n-00009f40: 2320 2020 2020 2020 2020 2020 2020 2020 # \n-00009f50: 4d41 524b 5f44 4952 206f 7220 4d41 524b MARK_DIR or MARK\n-00009f60: 5f44 4952 5f52 4543 2074 6f67 6574 6865 _DIR_REC togethe\n-00009f70: 7220 7769 7468 206f 7074 696f 6e20 7361 r with option sa\n-00009f80: 7665 5241 4d29 0a23 2020 2020 7573 655f veRAM).# use_\n-00009f90: 494f 436f 6d70 7265 7373 427a 6970 3220 IOCompressBzip2 \n-00009fa0: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the \n-00009fb0: 7761 726e 696e 6720 7468 6174 2079 6f75 warning that you\n-00009fc0: 2073 686f 756c 640a 2320 2020 2020 2020 should.# \n-00009fd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00009fe0: 2020 696e 7374 616c 2070 6572 6c20 6d6f instal perl mo\n-00009ff0: 6475 6c65 2049 4f3a 3a43 6f6d 7072 6573 dule IO::Compres\n-0000a000: 733a 3a42 7a69 7032 0a23 2020 2020 2020 s::Bzip2.# \n-0000a010: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000a020: 2020 2066 6f72 2062 6574 7465 7220 7065 for better pe\n-0000a030: 7266 6f72 6d61 6e63 6529 0a23 2020 2020 rformance).# \n-0000a040: 6e6f 4261 636b 7570 466f 7250 6572 696f noBackupForPerio\n-0000a050: 6420 2873 7570 7072 6573 7365 7320 7761 d (suppresses wa\n-0000a060: 726e 696e 6720 7468 6174 2074 6865 7265 rning that there\n-0000a070: 2061 7265 0a23 2020 2020 2020 2020 2020 are.# \n-0000a080: 2020 2020 2020 2020 2020 2020 206e 6f20 no \n-0000a090: 6261 636b 7570 7320 666f 7220 6365 7274 backups for cert\n-0000a0a0: 6169 6e20 7065 7269 6f64 7320 7768 656e ain periods when\n-0000a0b0: 2075 7369 6e67 0a23 2020 2020 2020 2020 using.# \n-0000a0c0: 2020 2020 2020 2020 2020 2020 2020 206f o\n-0000a0d0: 7074 696f 6e20 6b65 6570 5265 6c61 7469 ption keepRelati\n-0000a0e0: 7665 290a 2320 2054 6869 7320 6f70 7469 ve).# This opti\n-0000a0f0: 6f6e 2063 616e 2062 6520 7265 7065 6174 on can be repeat\n-0000a100: 6564 206d 756c 7469 706c 6520 7469 6d65 ed multiple time\n-0000a110: 7320 6f6e 2074 6865 2063 6f6d 6d61 6e64 s on the command\n-0000a120: 206c 696e 652e 0a23 2020 4578 616d 706c line..# Exampl\n-0000a130: 6520 7573 6167 6520 696e 2063 6f6e 6620 e usage in conf \n-0000a140: 6669 6c65 3a0a 2320 2073 7570 7072 6573 file:.# suppres\n-0000a150: 7357 6172 6e69 6e67 203d 2065 7863 4469 sWarning = excDi\n-0000a160: 7220 6669 6c65 4368 616e 6765 2063 7253 r fileChange crS\n-0000a170: 6572 6965 7320 6861 7368 436f 6c6c 6973 eries hashCollis\n-0000a180: 696f 6e0a 2320 2042 7920 6465 6661 756c ion.# By defaul\n-0000a190: 7420 6e6f 2077 6172 6e69 6e67 7320 6172 t no warnings ar\n-0000a1a0: 6520 7375 7070 7265 7373 6564 2e0a 3b73 e suppressed..;s\n-0000a1b0: 7570 7072 6573 7357 6172 6e69 6e67 3d0a uppressWarning=.\n-0000a1c0: 0a23 2073 7570 7072 6573 7320 2875 6e77 .# suppress (unw\n-0000a1d0: 616e 7465 6429 2069 6e66 6f73 2069 6e20 anted) infos in \n-0000a1e0: 7468 6520 6c6f 6720 6669 6c65 733b 0a23 the log files;.#\n-0000a1f0: 2074 6f20 7375 7070 7265 7373 2069 6e66 to suppress inf\n-0000a200: 6f73 2c20 7468 6520 666f 6c6c 6f77 696e os, the followin\n-0000a210: 6720 6b65 7973 2063 616e 2062 6520 7573 g keys can be us\n-0000a220: 6564 3a0a 2320 2020 7265 6164 4368 6563 ed:.# readChec\n-0000a230: 6b53 756d 7320 2873 7570 7072 6573 7320 kSums (suppress \n-0000a240: 7468 6520 696e 666f 726d 6174 696f 6e20 the information \n-0000a250: 7468 6174 2063 6865 636b 7375 6d73 0a23 that checksums.#\n-0000a260: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000a270: 206f 6620 626c 6f63 6b65 6420 6669 6c65 of blocked file\n-0000a280: 7320 6172 6520 7265 6164 290a 2320 2054 s are read).# T\n-0000a290: 6869 7320 6f70 7469 6f6e 2063 616e 2062 his option can b\n-0000a2a0: 6520 7265 7065 6174 6564 206d 756c 7469 e repeated multi\n-0000a2b0: 706c 6520 7469 6d65 7320 6f6e 2074 6865 ple times on the\n-0000a2c0: 2063 6f6d 6d61 6e64 206c 696e 652e 0a23 command line..#\n-0000a2d0: 2020 7375 7070 7265 7373 496e 666f 203d suppressInfo =\n-0000a2e0: 2072 6561 6443 6865 636b 5375 6d73 0a23 readCheckSums.#\n-0000a2f0: 2020 4279 2064 6566 6175 6c74 206e 6f20 By default no \n-0000a300: 696e 666f 7320 6172 6520 7375 7070 7265 infos are suppre\n-0000a310: 7373 6564 2e0a 3b73 7570 7072 6573 7349 ssed..;suppressI\n-0000a320: 6e66 6f3d 0a0a 2320 646f 202a 6e6f 742a nfo=..# do *not*\n-0000a330: 2077 7269 7465 2068 6172 6420 6c69 6e6b write hard link\n-0000a340: 7320 746f 2065 7869 7374 696e 6720 6669 s to existing fi\n-0000a350: 6c65 7320 696e 2074 6865 2062 6163 6b75 les in the backu\n-0000a360: 700a 2320 6475 7269 6e67 2074 6865 2062 p.# during the b\n-0000a370: 6163 6b75 7020 2879 6573 7c6e 6f29 0a23 ackup (yes|no).#\n-0000a380: 2079 6f75 2068 6176 6520 746f 2063 616c you have to cal\n-0000a390: 6c20 7468 6520 7072 6f67 7261 6d20 7374 l the program st\n-0000a3a0: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB\n-0000a3b0: 6163 6b75 702e 706c 0a23 206c 6174 6572 ackup.pl.# later\n-0000a3c0: 206f 6e20 796f 7572 2073 6572 7665 7220 on your server \n-0000a3d0: 6966 2079 6f75 2073 6574 2074 6869 7320 if you set this \n-0000a3e0: 666c 6167 2074 6f20 2779 6573 270a 2320 flag to 'yes'.# \n-0000a3f0: 796f 7520 6861 7665 2074 6f20 7275 6e20 you have to run \n-0000a400: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat\n-0000a410: 6542 6163 6b75 702e 706c 206c 6174 6572 eBackup.pl later\n-0000a420: 202d 2073 6565 0a23 2064 6573 6372 6970 - see.# descrip\n-0000a430: 7469 6f6e 2066 6f72 2074 6861 7420 7072 tion for that pr\n-0000a440: 6f67 7261 6d0a 2320 6465 6661 756c 7420 ogram.# default \n-0000a450: 3d20 6e6f 3a20 646f 206e 6f74 2077 7269 = no: do not wri\n-0000a460: 7465 2068 6172 6420 6c69 6e6b 730a 3b6c te hard links.;l\n-0000a470: 6174 654c 696e 6b73 3d0a 0a23 206f 6e6c ateLinks=..# onl\n-0000a480: 7920 696e 2063 6f6d 6269 6e61 7469 6f6e y in combination\n-0000a490: 2077 6974 6820 2d2d 6c61 7465 4c69 6e6b with --lateLink\n-0000a4a0: 730a 2320 636f 6d70 7265 7373 696f 6e20 s.# compression \n-0000a4b0: 6672 6f6d 2066 696c 6573 203e 3d20 7369 from files >= si\n-0000a4c0: 7a65 2077 696c 6c20 6265 2064 6f6e 6520 ze will be done \n-0000a4d0: 6c61 7465 722c 0a23 2074 6865 2066 696c later,.# the fil\n-0000a4e0: 6520 6973 2028 7465 6d70 6f72 6172 696c e is (temporaril\n-0000a4f0: 7929 2063 6f70 6965 6420 696e 746f 2074 y) copied into t\n-0000a500: 6865 2062 6163 6b75 700a 2320 6465 6661 he backup.# defa\n-0000a510: 756c 7420 3d20 6e6f 3a20 6e6f 206c 6174 ult = no: no lat\n-0000a520: 6520 636f 6d70 7265 7373 696f 6e0a 3b6c e compression.;l\n-0000a530: 6174 6543 6f6d 7072 6573 733d 0a0a 2320 ateCompress=..# \n-0000a540: 7265 7061 6972 2073 696d 706c 6520 696e repair simple in\n-0000a550: 636f 6e73 6973 7465 6e63 6965 7320 2866 consistencies (f\n-0000a560: 726f 6d20 6c61 7465 4c69 6e6b 7329 2061 rom lateLinks) a\n-0000a570: 7574 6f6d 6174 6963 616c 6c79 0a23 2077 utomatically.# w\n-0000a580: 6974 686f 7574 2072 6571 7565 7374 696e ithout requestin\n-0000a590: 6720 7468 6520 6163 7469 6f6e 0a23 2064 g the action.# d\n-0000a5a0: 6566 6175 6c74 203d 206e 6f2c 206e 6f20 efault = no, no \n-0000a5b0: 6175 746f 6d61 7469 6320 7265 7061 6972 automatic repair\n-0000a5c0: 0a3b 6175 746f 7265 7061 6972 3d0a 0a23 .;autorepair=..#\n-0000a5d0: 2046 696c 6573 2077 6974 6820 7370 6563 Files with spec\n-0000a5e0: 6966 6965 6420 7375 6666 6978 2066 6f72 ified suffix for\n-0000a5f0: 2077 6869 6368 2073 746f 7265 4261 636b which storeBack\n-0000a600: 7570 2077 696c 6c20 6d61 6b65 2061 6e20 up will make an \n-0000a610: 6d64 3520 6368 6563 6b0a 2320 6f6e 2062 md5 check.# on b\n-0000a620: 6c6f 636b 7320 6f66 2074 6861 7420 6669 locks of that fi\n-0000a630: 6c65 2e20 4578 6563 7574 6564 2061 6674 le. Executed aft\n-0000a640: 6572 202d 2d63 6865 636b 426c 6f63 6b73 er --checkBlocks\n-0000a650: 5275 6c65 286e 290a 3b63 6865 636b 426c Rule(n).;checkBl\n-0000a660: 6f63 6b73 5375 6666 6978 3d0a 0a23 204f ocksSuffix=..# O\n-0000a670: 6e6c 7920 6368 6563 6b20 6669 6c65 7320 nly check files \n-0000a680: 7370 6563 6966 6965 6420 696e 202d 2d63 specified in --c\n-0000a690: 6865 636b 426c 6f63 6b73 5375 6666 6978 heckBlocksSuffix\n-0000a6a0: 2069 6620 7468 6572 650a 2320 6669 6c65 if there.# file\n-0000a6b0: 2073 697a 6520 6973 2061 7420 6c65 6173 size is at leas\n-0000a6c0: 7420 7468 6973 2076 616c 7565 2c20 6465 t this value, de\n-0000a6d0: 6661 756c 7420 6973 2031 3030 4d0a 3b63 fault is 100M.;c\n-0000a6e0: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz\n-0000a6f0: 653d 0a0a 2320 426c 6f63 6b20 7369 7a65 e=..# Block size\n-0000a700: 2066 6f72 2066 696c 6573 2073 7065 6369 for files speci\n-0000a710: 6669 6564 2077 6974 6820 2d2d 6368 6563 fied with --chec\n-0000a720: 6b42 6c6f 636b 7353 7566 6669 780a 2320 kBlocksSuffix.# \n-0000a730: 6465 6661 756c 7420 6973 2024 6368 6563 default is $chec\n-0000a740: 6b42 6c6f 636b 7342 5364 6566 6175 6c74 kBlocksBSdefault\n-0000a750: 2028 3120 6d65 6761 6279 7465 290a 3b63 (1 megabyte).;c\n-0000a760: 6865 636b 426c 6f63 6b73 4253 3d0a 0a23 heckBlocksBS=..#\n-0000a770: 2069 6620 7365 742c 2074 6865 2062 6c6f if set, the blo\n-0000a780: 636b 7320 6765 6e65 7261 7465 6420 6475 cks generated du\n-0000a790: 6520 746f 2063 6865 636b 426c 6f63 6b73 e to checkBlocks\n-0000a7a0: 5375 6666 6978 2061 7265 2063 6f6d 7072 Suffix are compr\n-0000a7b0: 6573 7365 640a 2320 506f 7373 6962 6c65 essed.# Possible\n-0000a7c0: 2076 616c 7565 7320 6172 6520 2763 6865 values are 'che\n-0000a7d0: 636b 2c20 2779 6573 2720 616e 6420 276e ck, 'yes' and 'n\n-0000a7e0: 6f27 2e20 4465 6661 756c 7420 6973 2027 o'. Default is '\n-0000a7f0: 6e6f 270a 2320 6368 6563 6b20 7573 6573 no'.# check uses\n-0000a800: 2043 4f4d 5245 5353 494f 4e5f 4348 4543 COMRESSION_CHEC\n-0000a810: 4b20 2873 6565 206f 7074 696f 6e20 636f K (see option co\n-0000a820: 6d70 7265 7373 5375 6666 6978 290a 3b63 mpressSuffix).;c\n-0000a830: 6865 636b 426c 6f63 6b73 436f 6d70 723d heckBlocksCompr=\n-0000a840: 0a0a 2320 5265 6164 2066 696c 6573 2073 ..# Read files s\n-0000a850: 7065 6369 6669 6564 2068 6572 6520 696e pecified here in\n-0000a860: 2070 6172 616c 6c65 6c20 746f 2022 6e6f parallel to \"no\n-0000a870: 726d 616c 2220 6f6e 6573 2e0a 2320 5468 rmal\" ones..# Th\n-0000a880: 6973 206f 6e6c 7920 6d61 6b65 7320 7365 is only makes se\n-0000a890: 6e73 6520 6966 2074 6865 7920 6172 6520 nse if they are \n-0000a8a0: 6f6e 2061 2064 6966 6665 7265 6e74 2064 on a different d\n-0000a8b0: 6973 6b2e 0a23 2044 6566 6175 6c74 2076 isk..# Default v\n-0000a8c0: 616c 7565 2069 7320 276e 6f27 0a3b 6368 alue is 'no'.;ch\n-0000a8d0: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle\n-0000a8e0: 6c3d 0a0a 2320 6c65 6e67 7468 206f 6620 l=..# length of \n-0000a8f0: 7175 6575 6520 746f 2073 746f 7265 2066 queue to store f\n-0000a900: 696c 6573 2062 6566 6f72 6520 626c 6f63 iles before bloc\n-0000a910: 6b20 6368 6563 6b69 6e67 2c0a 2320 6465 k checking,.# de\n-0000a920: 6661 756c 7420 3d20 2471 7565 7565 426c fault = $queueBl\n-0000a930: 6f63 6b0a 3b71 7565 7565 426c 6f63 6b3d ock.;queueBlock=\n-0000a940: 0a0a 2462 6c6f 636b 5275 6c65 7348 656c ..$blockRulesHel\n-0000a950: 700a 2462 6c6f 636b 4465 7669 6365 4865 p.$blockDeviceHe\n-0000a960: 6c70 0a23 2077 7269 7465 2074 656d 706f lp.# write tempo\n-0000a970: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i\n-0000a980: 6e20 2d2d 746d 7064 6972 0a23 2075 7365 n --tmpdir.# use\n-0000a990: 2074 6869 7320 6966 2079 6f75 2068 6176 this if you hav\n-0000a9a0: 6520 6e6f 7420 656e 6f75 6768 2052 414d e not enough RAM\n-0000a9b0: 2c20 6465 6661 756c 7420 6973 206e 6f0a , default is no.\n-0000a9c0: 3b73 6176 6552 414d 3d0a 0a23 2063 6f6d ;saveRAM=..# com\n-0000a9d0: 7072 6573 7320 636f 6d6d 616e 6420 2877 press command (w\n-0000a9e0: 6974 6820 6f70 7469 6f6e 7329 2c20 6465 ith options), de\n-0000a9f0: 6661 756c 7420 6973 203c 4063 6f6d 7072 fault is <@compr\n-0000aa00: 6573 733e 0a3b 636f 6d70 7265 7373 3d0a ess>.;compress=.\n-0000aa10: 0a23 2075 6e63 6f6d 7072 6573 7320 636f .# uncompress co\n-0000aa20: 6d6d 616e 6420 2877 6974 6820 6f70 7469 mmand (with opti\n-0000aa30: 6f6e 7329 2c20 6465 6661 756c 7420 6973 ons), default is\n-0000aa40: 203c 4075 6e63 6f6d 7072 6573 733e 0a3b <@uncompress>.;\n-0000aa50: 756e 636f 6d70 7265 7373 3d0a 0a23 2070 uncompress=..# p\n-0000aa60: 6f73 7466 6978 2074 6f20 6164 6420 6166 ostfix to add af\n-0000aa70: 7465 7220 636f 6d70 7265 7373 696f 6e2c ter compression,\n-0000aa80: 2064 6566 6175 6c74 2069 7320 3c24 706f default is <$po\n-0000aa90: 7374 6669 783e 0a3b 706f 7374 6669 783d stfix>.;postfix=\n-0000aaa0: 0a0a 2320 646f 206e 6f74 2063 6f6d 7072 ..# do not compr\n-0000aab0: 6573 7320 6669 6c65 7320 7769 7468 2074 ess files with t\n-0000aac0: 6865 2066 6f6c 6c6f 7769 6e67 0a23 2073 he following.# s\n-0000aad0: 7566 6669 7820 2875 7070 6572 6361 7365 uffix (uppercase\n-0000aae0: 2069 6e63 6c75 6465 6429 3a0a 2320 2869 included):.# (i\n-0000aaf0: 6620 796f 7520 7365 7420 7468 6973 2074 f you set this t\n-0000ab00: 6f20 272e 2a27 2c20 6e6f 2066 696c 6573 o '.*', no files\n-0000ab10: 2077 696c 6c20 6265 2063 6f6d 7072 6573 will be compres\n-0000ab20: 7365 6429 0a23 2044 6566 6175 6c74 2069 sed).# Default i\n-0000ab30: 7320 4065 7863 6570 7453 7566 6669 780a s @exceptSuffix.\n-0000ab40: 3b65 7863 6570 7453 7566 6669 783d 0a0a ;exceptSuffix=..\n-0000ab50: 2320 6c69 6b65 202d 2d65 7863 6570 7453 # like --exceptS\n-0000ab60: 7566 6669 782c 2062 7574 2064 6f20 6e6f uffix, but do no\n-0000ab70: 7420 7265 706c 6163 6520 6465 6661 756c t replace defaul\n-0000ab80: 7473 2c20 6164 640a 3b61 6464 4578 6365 ts, add.;addExce\n-0000ab90: 7074 5375 6666 6978 3d0a 0a0a 2320 4c69 ptSuffix=...# Li\n-0000aba0: 6b65 202d 2d65 7863 6570 7453 7566 6669 ke --exceptSuffi\n-0000abb0: 782c 2062 7574 206d 656e 7469 6f6e 6564 x, but mentioned\n-0000abc0: 2066 696c 6573 2077 696c 6c20 6265 0a23 files will be.#\n-0000abd0: 2063 6f6d 7072 6573 7365 642e 2049 6620 compressed. If \n-0000abe0: 796f 7520 6368 6f73 6520 7468 6973 206f you chose this o\n-0000abf0: 7074 696f 6e2c 2074 6865 6e20 6669 6c65 ption, then file\n-0000ac00: 7320 6e6f 740a 2320 6166 6665 6374 6564 s not.# affected\n-0000ac10: 2062 6520 6578 6563 7074 5375 6666 6978 be execptSuffix\n-0000ac20: 2c20 6164 6445 7863 6570 7453 7566 6669 , addExceptSuffi\n-0000ac30: 7820 6f72 2074 6869 7320 5375 6666 6978 x or this Suffix\n-0000ac40: 6573 0a23 2077 696c 6c20 6265 2072 6174 es.# will be rat\n-0000ac50: 6564 2062 7920 7468 6520 7275 6c65 2066 ed by the rule f\n-0000ac60: 756e 6374 696f 6e20 434f 4d50 5245 5353 unction COMPRESS\n-0000ac70: 5f43 4845 434b 2077 6574 6865 720a 2320 _CHECK wether.# \n-0000ac80: 746f 2063 6f6d 7072 6573 7320 6f72 206e to compress or n\n-0000ac90: 6f74 0a3b 636f 6d70 7265 7373 5375 6666 ot.;compressSuff\n-0000aca0: 6978 3d0a 0a23 2046 696c 6573 2073 6d61 ix=..# Files sma\n-0000acb0: 6c6c 6572 2074 6861 6e20 7468 6973 2073 ller than this s\n-0000acc0: 697a 6520 7769 6c6c 206e 6576 6572 2062 ize will never b\n-0000acd0: 6520 636f 6d70 7265 7373 6564 2062 7574 e compressed but\n-0000ace0: 2061 6c77 6179 730a 2320 636f 7069 6564 always.# copied\n-0000acf0: 2e20 4465 6661 756c 7420 6973 2024 6d69 . Default is $mi\n-0000ad00: 6e43 6f6d 7072 6573 7353 697a 650a 3b6d nCompressSize.;m\n-0000ad10: 696e 436f 6d70 7265 7373 5369 7a65 3d0a inCompressSize=.\n-0000ad20: 0a23 2061 6c74 6572 6e61 7469 7665 2074 .# alternative t\n-0000ad30: 6f20 6578 6365 7074 5375 6666 6978 2c20 o exceptSuffix, \n-0000ad40: 636f 6d70 7252 756c 6520 616e 6420 6d69 comprRule and mi\n-0000ad50: 6e43 6f6d 7072 6573 7353 697a 653a 0a23 nCompressSize:.#\n-0000ad60: 2064 6566 696e 6974 696f 6e20 6f66 2061 definition of a\n-0000ad70: 2072 756c 6520 7768 6963 6820 6669 6c65 rule which file\n-0000ad80: 7320 7769 6c6c 2062 6520 636f 6d70 7265 s will be compre\n-0000ad90: 7373 6564 0a23 2049 6620 7468 6973 2072 ssed.# If this r\n-0000ada0: 756c 6520 6973 2073 6574 2c20 6578 6365 ule is set, exce\n-0000adb0: 7074 5375 6666 6978 2c20 6164 6445 7863 ptSuffix, addExc\n-0000adc0: 6570 7453 7566 6669 780a 2320 616e 6420 eptSuffix.# and \n-0000add0: 6d69 6e43 6f6d 7072 6573 7353 697a 6520 minCompressSize \n-0000ade0: 6172 6520 6967 6e6f 7265 642e 0a23 2044 are ignored..# D\n-0000adf0: 6566 6175 6c74 2072 756c 6520 5f67 656e efault rule _gen\n-0000ae00: 6572 6174 6564 5f20 6672 6f6d 2074 6865 erated_ from the\n-0000ae10: 206f 7074 696f 6e73 2061 626f 7665 2069 options above i\n-0000ae20: 733a 0a23 2063 6f6d 7072 5275 6c65 203d s:.# comprRule =\n-0000ae30: 2027 5c24 7369 7a65 203e 2031 3032 3427 '\\$size > 1024'\n-0000ae40: 2061 6e64 206e 6f74 0a23 2020 2027 5c24 and not.# '\\$\n-0000ae50: 6669 6c65 203d 7e20 2f5c 2e7a 6970 5c5c file =~ /\\.zip\\\\\n-0000ae60: 5a7c 5c2e 627a 325c 5c5a 7c5c 2e67 7a5c Z|\\.bz2\\\\Z|\\.gz\\\n-0000ae70: 5c5a 7c5c 2e74 677a 5c5c 5a7c 5c2e 6a70 \\Z|\\.tgz\\\\Z|\\.jp\n-0000ae80: 675c 5c5a 7c5c 2e67 6966 5c5c 5a7c 5c2e g\\\\Z|\\.gif\\\\Z|\\.\n-0000ae90: 7469 6666 5c5c 5a7c 5c2e 7469 665c 5c5a tiff\\\\Z|\\.tif\\\\Z\n-0000aea0: 7c5c 2e6d 7065 675c 5c5a 7c5c 2e6d 7067 |\\.mpeg\\\\Z|\\.mpg\n-0000aeb0: 5c5c 5a7c 5c2e 6d70 335c 5c5a 7c5c 2e6f \\\\Z|\\.mp3\\\\Z|\\.o\n-0000aec0: 6767 5c5c 5a7c 5c2e 6770 675c 5c5a 7c5c gg\\\\Z|\\.gpg\\\\Z|\\\n-0000aed0: 2e70 6e67 5c5c 5a2f 6927 0a23 206f 7220 .png\\\\Z/i'.# or \n-0000aee0: 2865 672e 2069 6620 636f 6d70 7265 7373 (eg. if compress\n-0000aef0: 5375 6666 6978 203d 205c 2e64 6f63 205c Suffix = \\.doc \\\n-0000af00: 2e70 6466 293a 0a23 2020 2027 5c24 7369 .pdf):.# '\\$si\n-0000af10: 7a65 203e 2031 3032 3420 616e 6420 6e6f ze > 1024 and no\n-0000af20: 7420 5c24 6669 6c65 203d 7e20 2f5c 2e7a t \\$file =~ /\\.z\n-0000af30: 6970 5c5c 5a7c 5c2e 627a 325c 5c5a 7c5c ip\\\\Z|\\.bz2\\\\Z|\\\n-0000af40: 2e67 7a5c 5c5a 7c5c 2e74 677a 5c5c 5a7c .gz\\\\Z|\\.tgz\\\\Z|\n-0000af50: 5c2e 6a70 675c 5c5a 7c5c 2e67 6966 5c5c \\.jpg\\\\Z|\\.gif\\\\\n-0000af60: 5a7c 5c2e 7469 6666 5c5c 5a7c 5c2e 7469 Z|\\.tiff\\\\Z|\\.ti\n-0000af70: 665c 5c5a 7c5c 2e6d 7065 675c 5c5a 7c5c f\\\\Z|\\.mpeg\\\\Z|\\\n-0000af80: 2e6d 7067 5c5c 5a7c 5c2e 6d70 335c 5c5a .mpg\\\\Z|\\.mp3\\\\Z\n-0000af90: 7c5c 2e6f 6767 5c5c 5a7c 5c2e 6770 675c |\\.ogg\\\\Z|\\.gpg\\\n-0000afa0: 5c5a 7c5c 2e70 6e67 5c5c 5a2f 6920 616e \\Z|\\.png\\\\Z/i an\n-0000afb0: 6420 2820 5c24 6669 6c65 203d 7e20 2f5c d ( \\$file =~ /\\\n-0000afc0: 2e64 6f63 5c5c 5a7c 5c2e 7064 665c 5c5a .doc\\\\Z|\\.pdf\\\\Z\n-0000afd0: 2f69 206f 7220 263a 3a43 4f4d 5052 4553 /i or &::COMPRES\n-0000afe0: 5349 4f4e 5f43 4845 434b 285c 2466 696c SION_CHECK(\\$fil\n-0000aff0: 6529 2029 270a 3b63 6f6d 7072 5275 6c65 e) )'.;comprRule\n-0000b000: 3d0a 0a23 206d 6178 696d 616c 206e 756d =..# maximal num\n-0000b010: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel \n-0000b020: 636f 6d70 7265 7373 206f 7065 7261 7469 compress operati\n-0000b030: 6f6e 732c 0a23 2064 6566 6175 6c74 203d ons,.# default =\n-0000b040: 2063 686f 7365 6e20 6175 746f 6d61 7469 chosen automati\n-0000b050: 6361 6c6c 790a 3b6e 6f43 6f6d 7072 6573 cally.;noCompres\n-0000b060: 733d 0a0a 2320 6c65 6e67 7468 206f 6620 s=..# length of \n-0000b070: 7175 6575 6520 746f 2073 746f 7265 2066 queue to store f\n-0000b080: 696c 6573 2062 6566 6f72 6520 636f 6d70 iles before comp\n-0000b090: 7265 7373 696f 6e2c 0a23 2064 6566 6175 ression,.# defau\n-0000b0a0: 6c74 203d 2024 7175 6575 6543 6f6d 7072 lt = $queueCompr\n-0000b0b0: 6573 730a 3b71 7565 7565 436f 6d70 7265 ess.;queueCompre\n-0000b0c0: 7373 3d0a 0a23 206d 6178 696d 616c 206e ss=..# maximal n\n-0000b0d0: 756d 6265 7220 6f66 2070 6172 616c 6c65 umber of paralle\n-0000b0e0: 6c20 636f 7079 206f 7065 7261 7469 6f6e l copy operation\n-0000b0f0: 732c 0a23 2064 6566 6175 6c74 203d 2024 s,.# default = $\n-0000b100: 6e6f 436f 7079 0a3b 6e6f 436f 7079 3d0a noCopy.;noCopy=.\n-0000b110: 0a23 206c 656e 6774 6820 6f66 2071 7565 .# length of que\n-0000b120: 7565 2074 6f20 7374 6f72 6520 6669 6c65 ue to store file\n-0000b130: 7320 6265 666f 7265 2063 6f70 7969 6e67 s before copying\n-0000b140: 2c0a 2320 6465 6661 756c 7420 3d20 2471 ,.# default = $q\n-0000b150: 7565 7565 436f 7079 0a3b 7175 6575 6543 ueueCopy.;queueC\n-0000b160: 6f70 793d 0a0a 2320 7772 6974 6520 7374 opy=..# write st\n-0000b170: 6174 6973 7469 6373 2061 626f 7574 2075 atistics about u\n-0000b180: 7365 6420 7370 6163 6520 696e 206c 6f67 sed space in log\n-0000b190: 2066 696c 650a 2320 6465 6661 756c 7420 file.# default \n-0000b1a0: 6973 2027 6e6f 270a 3b77 6974 6855 7365 is 'no'.;withUse\n-0000b1b0: 7247 726f 7570 5374 6174 3d0a 0a23 2077 rGroupStat=..# w\n-0000b1c0: 7269 7465 2073 7461 7469 7374 6963 7320 rite statistics \n-0000b1d0: 6162 6f75 7420 7573 6564 2073 7061 6365 about used space\n-0000b1e0: 2069 6e20 6e61 6d65 2066 696c 650a 2309 in name file.#.\n-0000b1f0: 0920 2020 2077 696c 6c20 6265 206f 7665 . will be ove\n-0000b200: 7272 6964 6465 6e20 6561 6368 2074 696d rridden each tim\n-0000b210: 650a 2320 6966 206e 6f20 6669 6c65 206e e.# if no file n\n-0000b220: 616d 6520 6973 2067 6976 656e 2c20 6e6f ame is given, no\n-0000b230: 7468 696e 6720 7769 6c6c 2062 6520 7772 thing will be wr\n-0000b240: 6974 7465 6e0a 2320 666f 726d 6174 2069 itten.# format i\n-0000b250: 733a 0a23 2069 6465 6e74 6966 6965 7220 s:.# identifier \n-0000b260: 7569 6420 7573 6572 4e61 6d65 2076 616c uid userName val\n-0000b270: 7565 0a23 2069 6465 6e74 6966 6965 7220 ue.# identifier \n-0000b280: 6769 6420 6772 6f75 704e 616d 6520 7661 gid groupName va\n-0000b290: 6c75 650a 3b75 7365 7247 726f 7570 5374 lue.;userGroupSt\n-0000b2a0: 6174 4669 6c65 3d0a 0a23 2064 6566 6175 atFile=..# defau\n-0000b2b0: 6c74 2069 7320 276e 6f27 2c20 6966 2079 lt is 'no', if y\n-0000b2c0: 6f75 2064 6f20 6e6f 7420 7761 6e74 2074 ou do not want t\n-0000b2d0: 6f20 636f 6d70 7265 7373 2c20 7361 7920 o compress, say \n-0000b2e0: 2779 6573 270a 3b64 6f4e 6f74 436f 6d70 'yes'.;doNotComp\n-0000b2f0: 7265 7373 4d44 3546 696c 653d 0a0a 2320 ressMD5File=..# \n-0000b300: 7065 726d 6973 7369 6f6e 7320 6f66 202e permissions of .\n-0000b310: 6d64 3563 6865 636b 5375 6d46 696c 652c md5checkSumFile,\n-0000b320: 2064 6566 6175 6c74 2069 7320 2463 686d default is $chm\n-0000b330: 6f64 4d44 3546 696c 650a 3b63 686d 6f64 odMD5File.;chmod\n-0000b340: 4d44 3546 696c 653d 0a0a 2320 7665 7262 MD5File=..# verb\n-0000b350: 6f73 6520 6d65 7373 6167 6573 2c20 6162 ose messages, ab\n-0000b360: 6f75 7420 6578 6365 7074 5275 6c65 2061 out exceptRule a\n-0000b370: 6e64 2069 6e63 6c75 6465 5275 6c65 0a23 nd includeRule.#\n-0000b380: 2061 6e64 2061 6464 6564 2066 696c 6573 and added files\n-0000b390: 2e20 6465 6661 756c 7420 6973 2027 6e6f . default is 'no\n-0000b3a0: 270a 3b76 6572 626f 7365 3d0a 0a23 2067 '.;verbose=..# g\n-0000b3b0: 656e 6572 6174 6520 6465 6275 6720 6d65 enerate debug me\n-0000b3c0: 7373 6167 6573 2c20 6c65 7665 6c73 2061 ssages, levels a\n-0000b3d0: 7265 2030 2028 6e6f 6e65 2c20 6465 6661 re 0 (none, defa\n-0000b3e0: 756c 7429 2c0a 2320 3120 2873 6f6d 6529 ult),.# 1 (some)\n-0000b3f0: 2c20 3220 286d 616e 7929 206d 6573 7361 , 2 (many) messa\n-0000b400: 6765 730a 3b64 6562 7567 3d0a 0a23 2072 ges.;debug=..# r\n-0000b410: 6573 6574 2061 6363 6573 7320 7469 6d65 eset access time\n-0000b420: 2069 6e20 7468 6520 736f 7572 6365 2064 in the source d\n-0000b430: 6972 6563 746f 7279 202d 2062 7574 2074 irectory - but t\n-0000b440: 6869 7320 7769 6c6c 0a23 2063 6861 6e67 his will.# chang\n-0000b450: 6520 6374 696d 6520 2874 696d 6520 6f66 e ctime (time of\n-0000b460: 206c 6173 7420 6d6f 6469 6669 6361 7469 last modificati\n-0000b470: 6f6e 206f 6620 6669 6c65 2073 7461 7475 on of file statu\n-0000b480: 730a 2320 696e 666f 726d 6174 696f 6e0a s.# information.\n-0000b490: 2320 6465 6661 756c 7420 6973 2027 6e6f # default is 'no\n-0000b4a0: 272c 2069 6620 796f 7520 7761 6e74 2074 ', if you want t\n-0000b4b0: 6869 732c 2073 6179 2027 7965 7327 0a3b his, say 'yes'.;\n-0000b4c0: 7265 7365 7441 7469 6d65 3d0a 0a23 2064 resetAtime=..# d\n-0000b4d0: 6f20 6e6f 7420 6465 6c65 7465 2061 6e79 o not delete any\n-0000b4e0: 206f 6c64 2062 6163 6b75 7020 2865 2e67 old backup (e.g\n-0000b4f0: 2e20 7370 6563 6966 6965 6420 7669 6120 . specified via \n-0000b500: 2d2d 6b65 6570 416c 6c20 6f72 0a23 202d --keepAll or.# -\n-0000b510: 2d6b 6565 7057 6565 6b64 6179 2920 6275 -keepWeekday) bu\n-0000b520: 7420 7072 696e 7420 6120 6d65 7373 6167 t print a messag\n-0000b530: 652e 2054 6869 7320 6973 2066 6f72 2074 e. This is for t\n-0000b540: 6573 7469 6e67 2063 6f6e 6669 6775 7261 esting configura\n-0000b550: 746f 6e73 0a23 206f 7220 6966 2079 6f75 tons.# or if you\n-0000b560: 2077 616e 7420 746f 2064 656c 6574 6520 want to delete \n-0000b570: 6f6c 6420 6261 636b 7570 7320 7769 7468 old backups with\n-0000b580: 2073 746f 7265 4261 636b 7570 4465 6c2e storeBackupDel.\n-0000b590: 706c 2e0a 2320 5661 6c75 6573 2061 7265 pl..# Values are\n-0000b5a0: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'.\n-0000b5b0: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no'\n-0000b5c0: 2077 6869 6368 206d 6561 6e73 2074 6f20 which means to \n-0000b5d0: 6e6f 7420 6465 6c65 7465 2e0a 3b64 6f4e not delete..;doN\n-0000b5e0: 6f74 4465 6c65 7465 3d0a 0a23 2064 656c otDelete=..# del\n-0000b5f0: 6574 6520 6f6c 6420 6261 636b 7570 7320 ete old backups \n-0000b600: 7768 6963 6820 6861 7665 206e 6f74 2062 which have not b\n-0000b610: 6565 6e20 6669 6e69 7368 6564 0a23 2074 een finished.# t\n-0000b620: 6869 7320 7769 6c6c 206e 6f74 2068 6170 his will not hap\n-0000b630: 7065 6e20 6966 2064 6f4e 6f74 4465 6c65 pen if doNotDele\n-0000b640: 7465 2069 7320 7365 740a 2320 5661 6c75 te is set.# Valu\n-0000b650: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and\n-0000b660: 2027 6e6f 272e 2044 6566 6175 6c74 2069 'no'. Default i\n-0000b670: 7320 276e 6f27 2077 6869 6368 206d 6561 s 'no' which mea\n-0000b680: 6e73 206e 6f74 2074 6f20 6465 6c65 7465 ns not to delete\n-0000b690: 2e0a 3b64 656c 6574 654e 6f74 4669 6e69 ..;deleteNotFini\n-0000b6a0: 7368 6564 4469 7273 3d0a 0a23 206d 6178 shedDirs=..# max\n-0000b6b0: 696d 756d 206e 756d 6265 7220 6f66 2068 imum number of h\n-0000b6c0: 6172 6420 6c69 6e6b 7320 746f 2063 7265 ard links to cre\n-0000b6d0: 6174 6520 6f6e 2061 2066 696c 650a 2320 ate on a file.# \n-0000b6e0: 7a65 726f 2028 6465 6661 756c 7429 206d zero (default) m\n-0000b6f0: 6561 6e73 206c 696d 6974 2064 6570 656e eans limit depen\n-0000b700: 6473 206f 6e20 6669 6c65 2073 7973 7465 ds on file syste\n-0000b710: 6d20 7573 6564 206f 6e6c 790a 3b6d 6178 m used only.;max\n-0000b720: 4861 7264 4c69 6e6b 7320 3d0a 0a23 206b HardLinks =..# k\n-0000b730: 6565 7020 6261 636b 7570 7320 7768 6963 eep backups whic\n-0000b740: 6820 6172 6520 6e6f 7420 6f6c 6465 7220 h are not older \n-0000b750: 7468 616e 2074 6865 2073 7065 6369 6669 than the specifi\n-0000b760: 6564 2061 6d6f 756e 740a 2320 6f66 2074 ed amount.# of t\n-0000b770: 696d 652e 2054 6869 7320 6973 206c 696b ime. This is lik\n-0000b780: 6520 6120 6465 6661 756c 7420 7661 6c75 e a default valu\n-0000b790: 6520 666f 7220 616c 6c20 6461 7973 2069 e for all days i\n-0000b7a0: 6e0a 2320 2d2d 6b65 6570 5765 656b 6461 n.# --keepWeekda\n-0000b7b0: 792e 2042 6567 696e 7320 6465 6c65 7469 y. Begins deleti\n-0000b7c0: 6e67 2061 7420 7468 6520 656e 6420 6f66 ng at the end of\n-0000b7d0: 2074 6865 2073 6372 6970 740a 2320 7468 the script.# th\n-0000b7e0: 6520 7469 6d65 2072 616e 6765 2068 6173 e time range has\n-0000b7f0: 2074 6f20 6265 2073 7065 6369 6669 6564 to be specified\n-0000b800: 2069 6e20 666f 726d 6174 2027 6468 6d73 in format 'dhms\n-0000b810: 272c 2065 2e67 2e0a 2320 3130 6434 6820 ', e.g..# 10d4h \n-0000b820: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an\n-0000b830: 6420 3420 686f 7572 730a 2320 6465 6661 d 4 hours.# defa\n-0000b840: 756c 7420 3d20 246b 6565 7041 6c6c 3b0a ult = $keepAll;.\n-0000b850: 2320 416e 2061 7263 6869 7665 2066 6c61 # An archive fla\n-0000b860: 6720 6973 206e 6f74 2070 6f73 7369 626c g is not possibl\n-0000b870: 6520 7769 7468 2074 6869 7320 7061 7261 e with this para\n-0000b880: 6d65 7465 7220 2873 6565 2062 656c 6f77 meter (see below\n-0000b890: 292e 0a3b 6b65 6570 416c 6c3d 0a0a 2320 )..;keepAll=..# \n-0000b8a0: 6b65 6570 2062 6163 6b75 7073 2066 6f72 keep backups for\n-0000b8b0: 2074 6865 2073 7065 6369 6669 6564 2064 the specified d\n-0000b8c0: 6179 7320 666f 7220 7468 6520 7370 6563 ays for the spec\n-0000b8d0: 6966 6965 640a 2320 616d 6f75 6e74 206f ified.# amount o\n-0000b8e0: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit\n-0000b8f0: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v\n-0000b900: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in.\n-0000b910: 2320 2d2d 6b65 6570 416c 6c2e 2027 4d6f # --keepAll. 'Mo\n-0000b920: 6e2c 5765 643a 3430 6420 5361 743a 3630 n,Wed:40d Sat:60\n-0000b930: 6431 306d 2720 6d65 616e 733a 0a23 206b d10m' means:.# k\n-0000b940: 6565 7020 6261 636b 7570 7320 6672 6f6d eep backups from\n-0000b950: 204d 6f6e 2061 6e64 2057 6564 2034 3064 Mon and Wed 40d\n-0000b960: 6179 7320 2b20 356d 696e 730a 2320 6b65 ays + 5mins.# ke\n-0000b970: 6570 2062 6163 6b75 7073 2066 726f 6d20 ep backups from \n-0000b980: 5361 7420 3630 6461 7973 202b 2031 306d Sat 60days + 10m\n-0000b990: 696e 730a 2320 6b65 6570 2062 6163 6b75 ins.# keep backu\n-0000b9a0: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest\n-0000b9b0: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik\n-0000b9c0: 6520 7370 6369 6669 6564 2069 6e0a 2320 e spcified in.# \n-0000b9d0: 2d2d 6b65 6570 416c 6c20 2864 6566 6175 --keepAll (defau\n-0000b9e0: 6c74 2024 6b65 6570 416c 6c29 0a23 2079 lt $keepAll).# y\n-0000b9f0: 6f75 2063 616e 2061 6c73 6f20 7365 7420 ou can also set \n-0000ba00: 7468 6520 2761 7263 6869 7665 2066 6c61 the 'archive fla\n-0000ba10: 6727 2e0a 2320 274d 6f6e 2c57 6564 3a61 g'..# 'Mon,Wed:a\n-0000ba20: 3430 6435 6d20 5361 743a 3630 6431 306d 40d5m Sat:60d10m\n-0000ba30: 2720 6d65 616e 733a 0a23 206b 6565 7020 ' means:.# keep \n-0000ba40: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon\n-0000ba50: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days \n-0000ba60: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi\n-0000ba70: 7665 270a 2320 6b65 6570 2062 6163 6b75 ve'.# keep backu\n-0000ba80: 7073 2066 726f 6d20 5361 7420 3630 6461 ps from Sat 60da\n-0000ba90: 7973 202b 2031 306d 696e 730a 2320 6b65 ys + 10mins.# ke\n-0000baa0: 6570 2062 6163 6b75 7073 2066 726f 6d20 ep backups from \n-0000bab0: 7468 6520 7265 7374 206f 6620 7468 6520 the rest of the \n-0000bac0: 6461 7973 206c 696b 6520 7370 6563 6966 days like specif\n-0000bad0: 6965 6420 696e 0a23 202d 2d6b 6565 7041 ied in.# --keepA\n-0000bae0: 6c6c 2028 6465 6661 756c 7420 246b 6565 ll (default $kee\n-0000baf0: 7041 6c6c 290a 2320 4966 2079 6f75 2061 pAll).# If you a\n-0000bb00: 6c73 6f20 7573 6520 7468 6520 2761 7263 lso use the 'arc\n-0000bb10: 6869 7665 2066 6c61 6727 2069 7420 6d65 hive flag' it me\n-0000bb20: 616e 7320 746f 206e 6f74 0a23 2064 656c ans to not.# del\n-0000bb30: 6574 6520 7468 6520 6166 6665 6374 6564 ete the affected\n-0000bb40: 2064 6972 6563 746f 7269 6573 2076 6961 directories via\n-0000bb50: 202d 2d6b 6565 704d 6178 4e75 6d62 6572 --keepMaxNumber\n-0000bb60: 3a0a 2320 6131 3064 3468 206d 6561 6e73 :.# a10d4h means\n-0000bb70: 2031 3020 6461 7973 2061 6e64 2034 2068 10 days and 4 h\n-0000bb80: 6f75 7273 2061 6e64 2027 6172 6368 6976 ours and 'archiv\n-0000bb90: 6520 666c 6167 270a 3b6b 6565 7057 6565 e flag'.;keepWee\n-0000bba0: 6b64 6179 3d0a 0a23 2064 6f20 6e6f 7420 kday=..# do not \n-0000bbb0: 6465 6c65 7465 2074 6865 2066 6972 7374 delete the first\n-0000bbc0: 2062 6163 6b75 7020 6f66 2061 2079 6561 backup of a yea\n-0000bbd0: 720a 2320 666f 726d 6174 2069 7320 7469 r.# format is ti\n-0000bbe0: 6d65 5065 7269 6f64 2077 6974 6820 706f mePeriod with po\n-0000bbf0: 7373 6962 6c65 2027 6172 6368 6976 6520 ssible 'archive \n-0000bc00: 666c 6167 270a 3b6b 6565 7046 6972 7374 flag'.;keepFirst\n-0000bc10: 4f66 5965 6172 3d0a 0a23 2064 6f20 6e6f OfYear=..# do no\n-0000bc20: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las\n-0000bc30: 7420 6261 636b 7570 206f 6620 6120 7965 t backup of a ye\n-0000bc40: 6172 0a23 2066 6f72 6d61 7420 6973 2074 ar.# format is t\n-0000bc50: 696d 6550 6572 696f 6420 7769 7468 2070 imePeriod with p\n-0000bc60: 6f73 7369 626c 6520 2761 7263 6869 7665 ossible 'archive\n-0000bc70: 2066 6c61 6727 0a3b 6b65 6570 4c61 7374 flag'.;keepLast\n-0000bc80: 4f66 5965 6172 3d0a 0a23 2064 6f20 6e6f OfYear=..# do no\n-0000bc90: 7420 6465 6c65 7465 2074 6865 2066 6972 t delete the fir\n-0000bca0: 7374 2062 6163 6b75 7020 6f66 2061 206d st backup of a m\n-0000bcb0: 6f6e 7468 0a23 2066 6f72 6d61 7420 6973 onth.# format is\n-0000bcc0: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with\n-0000bcd0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi\n-0000bce0: 7665 2066 6c61 6727 0a3b 6b65 6570 4669 ve flag'.;keepFi\n-0000bcf0: 7273 744f 664d 6f6e 7468 3d0a 0a23 2064 rstOfMonth=..# d\n-0000bd00: 6f20 6e6f 7420 6465 6c65 7465 2074 6865 o not delete the\n-0000bd10: 206c 6173 7420 6261 636b 7570 206f 6620 last backup of \n-0000bd20: 6120 6d6f 6e74 680a 2320 666f 726d 6174 a month.# format\n-0000bd30: 2069 7320 7469 6d65 5065 7269 6f64 2077 is timePeriod w\n-0000bd40: 6974 6820 706f 7373 6962 6c65 2027 6172 ith possible 'ar\n-0000bd50: 6368 6976 6520 666c 6167 270a 3b6b 6565 chive flag'.;kee\n-0000bd60: 704c 6173 744f 664d 6f6e 7468 3d0a 0a23 pLastOfMonth=..#\n-0000bd70: 2064 6566 6175 6c74 3a20 2753 756e 272e default: 'Sun'.\n-0000bd80: 2054 6869 7320 7661 6c75 6520 6973 2075 This value is u\n-0000bd90: 7365 6420 666f 7220 6361 6c63 756c 6174 sed for calculat\n-0000bda0: 696e 670a 2320 2d2d 6b65 6570 4669 7273 ing.# --keepFirs\n-0000bdb0: 744f 6657 6565 6b20 616e 6420 2d2d 6b65 tOfWeek and --ke\n-0000bdc0: 6570 4c61 7374 4f66 5765 656b 0a3b 6669 epLastOfWeek.;fi\n-0000bdd0: 7273 7444 6179 4f66 5765 656b 3d0a 0a23 rstDayOfWeek=..#\n-0000bde0: 2064 6f20 6e6f 7420 6465 6c65 7465 2074 do not delete t\n-0000bdf0: 6865 2066 6972 7374 2062 6163 6b75 7020 he first backup \n-0000be00: 6f66 2061 2077 6565 6b0a 2320 666f 726d of a week.# form\n-0000be10: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod\n-0000be20: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible '\n-0000be30: 6172 6368 6976 6520 666c 6167 270a 3b6b archive flag'.;k\n-0000be40: 6565 7046 6972 7374 4f66 5765 656b 3d0a eepFirstOfWeek=.\n-0000be50: 0a23 2064 6f20 6e6f 7420 6465 6c65 7465 .# do not delete\n-0000be60: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup\n-0000be70: 206f 6620 6120 7765 656b 0a23 2066 6f72 of a week.# for\n-0000be80: 6d61 7420 6973 2074 696d 6550 6572 696f mat is timePerio\n-0000be90: 6420 7769 7468 2070 6f73 7369 626c 6520 d with possible \n-0000bea0: 2761 7263 6869 7665 2066 6c61 6727 0a3b 'archive flag'.;\n-0000beb0: 6b65 6570 4c61 7374 4f66 5765 656b 3d0a keepLastOfWeek=.\n-0000bec0: 0a23 206b 6565 7020 6d75 6c74 6970 6c65 .# keep multiple\n-0000bed0: 2062 6163 6b75 7073 206f 6620 6f6e 6520 backups of one \n-0000bee0: 6461 7920 7570 2074 6f20 7469 6d65 5065 day up to timePe\n-0000bef0: 7269 6f64 0a23 2066 6f72 6d61 7420 6973 riod.# format is\n-0000bf00: 2074 696d 6550 6572 696f 642c 2027 6172 timePeriod, 'ar\n-0000bf10: 6368 6976 6520 666c 6167 2720 6973 206e chive flag' is n\n-0000bf20: 6f74 2070 6f73 7369 626c 650a 2320 6465 ot possible.# de\n-0000bf30: 6661 756c 7420 6973 2024 6b65 6570 4475 fault is $keepDu\n-0000bf40: 706c 6963 6174 650a 3b6b 6565 7044 7570 plicate.;keepDup\n-0000bf50: 6c69 6361 7465 3d0a 0a23 204b 6565 7020 licate=..# Keep \n-0000bf60: 7468 6174 206d 696d 696e 756d 206f 6620 that miminum of \n-0000bf70: 6261 636b 7570 732e 204d 756c 7469 706c backups. Multipl\n-0000bf80: 6520 6261 636b 7570 7320 6f66 206f 6e65 e backups of one\n-0000bf90: 0a23 2064 6179 2061 7265 2063 6f75 6e74 .# day are count\n-0000bfa0: 6564 2061 7320 6f6e 6520 6261 636b 7570 ed as one backup\n-0000bfb0: 2e20 4465 6661 756c 7420 6973 2031 302e . Default is 10.\n-0000bfc0: 0a3b 6b65 6570 4d69 6e4e 756d 6265 723d .;keepMinNumber=\n-0000bfd0: 0a0a 2320 5472 7920 746f 206b 6565 7020 ..# Try to keep \n-0000bfe0: 6f6e 6c79 2074 6861 7420 6d61 7869 6d75 only that maximu\n-0000bff0: 6d20 6f66 2062 6163 6b75 7073 2e20 4966 m of backups. If\n-0000c000: 2079 6f75 2068 6176 6520 6d6f 7265 0a23 you have more.#\n-0000c010: 2062 6163 6b75 7073 2c20 7468 6520 666f backups, the fo\n-0000c020: 6c6c 6f77 696e 6720 7365 7175 656e 6365 llowing sequence\n-0000c030: 206f 6620 6465 6c65 7469 6e67 2077 696c of deleting wil\n-0000c040: 6c20 6861 7070 656e 3a0a 2320 2d20 6465 l happen:.# - de\n-0000c050: 6c65 7465 2061 6c6c 2064 7570 6c69 6361 lete all duplica\n-0000c060: 7465 7320 6f66 2061 2064 6179 2c20 6265 tes of a day, be\n-0000c070: 6769 6e6e 696e 6720 7769 7468 2074 6865 ginning with the\n-0000c080: 206f 6c64 0a23 2020 206f 6e63 652c 2065 old.# once, e\n-0000c090: 7863 6570 7420 7468 6520 6f6c 6465 7374 xcept the oldest\n-0000c0a0: 206f 6620 6576 6572 7920 6461 790a 2320 of every day.# \n-0000c0b0: 2d20 6966 2074 6869 7320 6973 206e 6f74 - if this is not\n-0000c0c0: 2065 6e6f 7567 682c 2064 656c 6574 6520 enough, delete \n-0000c0d0: 7468 6520 7265 7374 206f 6620 7468 6520 the rest of the \n-0000c0e0: 6261 636b 7570 730a 2320 2020 6265 6769 backups.# begi\n-0000c0f0: 6e6e 696e 6720 7769 7468 2074 6865 206f nning with the o\n-0000c100: 6c64 6573 742c 2062 7574 202a 6e65 7665 ldest, but *neve\n-0000c110: 722a 2061 2062 6163 6b75 7020 7769 7468 r* a backup with\n-0000c120: 0a23 2020 2074 6865 2027 6172 6368 6976 .# the 'archiv\n-0000c130: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l\n-0000c140: 6173 7420 6261 636b 7570 0a3b 6b65 6570 ast backup.;keep\n-0000c150: 4d61 784e 756d 6265 723d 0a0a 2320 416c MaxNumber=..# Al\n-0000c160: 7465 726e 6174 6976 6520 6465 6c65 7469 ternative deleti\n-0000c170: 6f6e 2073 6368 656d 652e 2049 6620 796f on scheme. If yo\n-0000c180: 7520 7573 6520 7468 6973 206f 7074 696f u use this optio\n-0000c190: 6e2c 2061 6c6c 0a23 206f 7468 6572 206b n, all.# other k\n-0000c1a0: 6565 7020 6f70 7469 6f6e 7320 6172 6520 eep options are \n-0000c1b0: 6967 6e6f 7265 642e 2050 7265 7365 7276 ignored. Preserv\n-0000c1c0: 6573 2062 6163 6b75 7073 2064 6570 656e es backups depen\n-0000c1d0: 6469 6e67 0a23 206f 6e20 7468 6569 7220 ding.# on their \n-0000c1e0: 2a72 656c 6174 6976 652a 2061 6765 2e20 *relative* age. \n-0000c1f0: 4578 616d 706c 653a 0a23 0a23 2020 206b Example:.#.# k\n-0000c200: 6565 7052 656c 6174 6976 6520 3d20 3164 eepRelative = 1d\n-0000c210: 2037 6420 3631 6420 3932 640a 230a 2320 7d 61d 92d.#.# \n-0000c220: 7769 6c6c 2028 7472 7920 746f 2920 656e will (try to) en\n-0000c230: 7375 7265 2074 6861 7420 7468 6572 6520 sure that there \n-0000c240: 6973 2061 6c77 6179 730a 230a 2320 2d20 is always.#.# - \n-0000c250: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe\n-0000c260: 656e 2031 2064 6179 2061 6e64 2037 2064 en 1 day and 7 d\n-0000c270: 6179 7320 6f6c 640a 2320 2d20 4f6e 6520 ays old.# - One \n-0000c280: 6261 636b 7570 2062 6574 7765 656e 2035 backup between 5\n-0000c290: 2064 6179 7320 616e 6420 3220 6d6f 6e74 days and 2 mont\n-0000c2a0: 6873 206f 6c64 0a23 202d 204f 6e65 2062 hs old.# - One b\n-0000c2b0: 6163 6b75 7020 6265 7477 6565 6e20 7e32 ackup between ~2\n-0000c2c0: 206d 6f6e 7468 7320 616e 6420 7e33 206d months and ~3 m\n-0000c2d0: 6f6e 7468 7320 6f6c 640a 230a 2320 4966 onths old.#.# If\n-0000c2e0: 2074 6865 7265 2069 7320 6e6f 2062 6163 there is no bac\n-0000c2f0: 6b75 7020 666f 7220 6120 7370 6563 6966 kup for a specif\n-0000c300: 6965 6420 7469 6d65 7370 616e 2028 652e ied timespan (e.\n-0000c310: 672e 2062 6563 6175 7365 2074 6865 0a23 g. because the.#\n-0000c320: 206c 6173 7420 6261 636b 7570 2077 6173 last backup was\n-0000c330: 2064 6f6e 6520 6d6f 7265 2074 6861 6e20 done more than \n-0000c340: 3220 7765 656b 7320 6167 6f29 2074 6865 2 weeks ago) the\n-0000c350: 206e 6578 7420 6f6c 6465 7220 6261 636b next older back\n-0000c360: 7570 0a23 2077 696c 6c20 6265 2075 7365 up.# will be use\n-0000c370: 6420 666f 7220 7468 6973 2074 696d 6573 d for this times\n-0000c380: 7061 6e2e 0a3b 6b65 6570 5265 6c61 7469 pan..;keepRelati\n-0000c390: 7665 203d 0a0a 2320 7072 696e 7420 7072 ve =..# print pr\n-0000c3a0: 6f67 7265 7373 2072 6570 6f72 7420 6166 ogress report af\n-0000c3b0: 7465 7220 6561 6368 2027 6e75 6d62 6572 ter each 'number\n-0000c3c0: 2720 6669 6c65 730a 2320 4465 6661 756c ' files.# Defaul\n-0000c3d0: 7420 6973 2030 2c20 7768 6963 6820 6d65 t is 0, which me\n-0000c3e0: 616e 7320 6e6f 2072 6570 6f72 7473 2e0a ans no reports..\n-0000c3f0: 2320 6164 6469 7469 6f6e 616c 2079 6f75 # additional you\n-0000c400: 206d 6179 2061 6464 2061 2074 696d 6520 may add a time \n-0000c410: 6672 616d 6520 6166 7465 7220 7768 6963 frame after whic\n-0000c420: 6820 6120 6d65 7373 6167 6520 6973 2070 h a message is p\n-0000c430: 7269 6e74 6564 0a23 2069 6620 796f 7520 rinted.# if you \n-0000c440: 7761 6e74 2074 6f20 7072 696e 7420 6120 want to print a \n-0000c450: 7265 706f 7274 2065 6163 6820 3130 3030 report each 1000\n-0000c460: 2066 696c 6573 2061 6e64 2061 6674 6572 files and after\n-0000c470: 0a23 206f 6e65 206d 696e 7574 6520 616e .# one minute an\n-0000c480: 6420 3130 2073 6563 6f6e 6473 2c20 7573 d 10 seconds, us\n-0000c490: 653a 202d 5020 3130 3030 2c31 6d31 3073 e: -P 1000,1m10s\n-0000c4a0: 0a3b 7072 6f67 7265 7373 5265 706f 7274 .;progressReport\n-0000c4b0: 3d0a 0a23 2070 7269 6e74 2064 6570 7468 =..# print depth\n-0000c4c0: 206f 6620 6163 7475 616c 2072 6561 6465 of actual reade\n-0000c4d0: 6420 6469 7265 6374 6f72 7920 6475 7269 d directory duri\n-0000c4e0: 6e67 2062 6163 6b75 700a 2320 6465 6661 ng backup.# defa\n-0000c4f0: 756c 7420 6973 2027 6e6f 272c 2076 616c ult is 'no', val\n-0000c500: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an\n-0000c510: 6420 276e 6f27 0a3b 7072 696e 7444 6570 d 'no'.;printDep\n-0000c520: 7468 3d0a 0a23 2069 676e 6f72 6520 7265 th=..# ignore re\n-0000c530: 6164 2065 7272 6f72 7320 696e 2073 6f75 ad errors in sou\n-0000c540: 7263 6520 6469 7265 6374 6f72 793b 206e rce directory; n\n-0000c550: 6f74 2072 6561 6461 626c 650a 2320 6469 ot readable.# di\n-0000c560: 7265 6374 6f72 6965 7320 646f 6573 206e rectories does n\n-0000c570: 6f74 2063 6175 7365 2073 746f 7265 4261 ot cause storeBa\n-0000c580: 636b 7570 2e70 6c20 746f 2073 746f 7020 ckup.pl to stop \n-0000c590: 7072 6f63 6573 7369 6e67 0a23 2056 616c processing.# Val\n-0000c5a0: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an\n-0000c5b0: 6420 276e 6f27 2e20 4465 6661 756c 7420 d 'no'. Default \n-0000c5c0: 6973 2027 6e6f 2720 7768 6963 6820 6d65 is 'no' which me\n-0000c5d0: 616e 7320 6e6f 740a 2320 746f 2069 676e ans not.# to ign\n-0000c5e0: 6f72 6520 7468 656d 0a3b 6967 6e6f 7265 ore them.;ignore\n-0000c5f0: 5265 6164 4572 726f 723d 0a0a 2320 6166 ReadError=..# af\n-0000c600: 7465 7220 6120 7375 6363 6573 7366 756c ter a successful\n-0000c610: 2062 6163 6b75 702c 2073 6574 2061 2073 backup, set a s\n-0000c620: 796d 626f 6c69 6320 6c69 6e6b 2074 6f0a ymbolic link to.\n-0000c630: 2320 7468 6174 2062 6163 6b75 7020 616e # that backup an\n-0000c640: 6420 6465 6c65 7465 2065 7869 7374 696e d delete existin\n-0000c650: 6720 6f6c 6465 7220 6c69 6e6b 7320 7769 g older links wi\n-0000c660: 7468 2074 6865 0a23 2073 616d 6520 6e61 th the.# same na\n-0000c670: 6d65 0a3b 6c69 6e6b 546f 5265 6365 6e74 me.;linkToRecent\n-0000c680: 3d0a 0a23 206e 616d 6520 6f66 2074 6865 =..# name of the\n-0000c690: 206c 6f67 2066 696c 6520 2864 6566 6175 log file (defau\n-0000c6a0: 6c74 2069 7320 5354 444f 5554 290a 3b6c lt is STDOUT).;l\n-0000c6b0: 6f67 4669 6c65 3d0a 0a23 2069 6620 796f ogFile=..# if yo\n-0000c6c0: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log \n-0000c6d0: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF\n-0000c6e0: 696c 6520 796f 7520 6361 6e0a 2320 6164 ile you can.# ad\n-0000c6f0: 6469 7469 6f6e 616c 6c79 2070 7269 6e74 ditionally print\n-0000c700: 2074 6865 206f 7574 7075 7420 746f 2053 the output to S\n-0000c710: 5444 4f55 5420 7769 7468 2074 6869 7320 TDOUT with this \n-0000c720: 666c 6167 0a23 2056 616c 7565 7320 6172 flag.# Values ar\n-0000c730: 6520 2779 6573 2720 616e 6420 276e 6f27 e 'yes' and 'no'\n-0000c740: 2e20 4465 6661 756c 7420 6973 2027 6e6f . Default is 'no\n-0000c750: 272e 0a3b 706c 7573 4c6f 6753 7464 6f75 '..;plusLogStdou\n-0000c760: 743d 0a0a 2320 6f75 7470 7574 2069 6e20 t=..# output in \n-0000c770: 6c6f 6766 696c 6520 7769 7468 6f75 7420 logfile without \n-0000c780: 7469 6d65 3a20 2779 6573 2720 6f72 2027 time: 'yes' or '\n-0000c790: 6e6f 270a 2320 6465 6661 756c 7420 3d20 no'.# default = \n-0000c7a0: 6e6f 0a3b 7375 7070 7265 7373 5469 6d65 no.;suppressTime\n-0000c7b0: 3d0a 0a23 206d 6178 696d 616c 206c 656e =..# maximal len\n-0000c7c0: 6774 6820 6f66 206c 6f67 2066 696c 652c gth of log file,\n-0000c7d0: 2064 6566 6175 6c74 203d 2031 6536 0a3b default = 1e6.;\n-0000c7e0: 6d61 7846 696c 656c 656e 3d0a 0a23 206e maxFilelen=..# n\n-0000c7f0: 756d 6265 7220 6f66 206f 6c64 206c 6f67 umber of old log\n-0000c800: 2066 696c 6573 2c20 6465 6661 756c 7420 files, default \n-0000c810: 3d20 350a 3b6e 6f4f 664f 6c64 4669 6c65 = 5.;noOfOldFile\n-0000c820: 733d 0a0a 2320 7361 7665 206c 6f67 2066 s=..# save log f\n-0000c830: 696c 6573 2077 6974 6820 6461 7465 2061 iles with date a\n-0000c840: 6e64 2074 696d 6520 696e 7374 6561 6420 nd time instead \n-0000c850: 6f66 2064 656c 6574 696e 6720 7468 650a of deleting the.\n-0000c860: 2320 6f6c 6420 2877 6974 6820 5b2d 6e6f # old (with [-no\n-0000c870: 4f66 4f6c 6446 696c 6573 5d29 3a20 2779 OfOldFiles]): 'y\n-0000c880: 6573 2720 6f72 2027 6e6f 272c 2064 6566 es' or 'no', def\n-0000c890: 6175 6c74 203d 2027 6e6f 270a 3b73 6176 ault = 'no'.;sav\n-0000c8a0: 654c 6f67 733d 0a0a 2320 636f 6d70 7265 eLogs=..# compre\n-0000c8b0: 7373 2073 6176 6564 206c 6f67 2066 696c ss saved log fil\n-0000c8c0: 6573 2028 652e 672e 2077 6974 6820 2767 es (e.g. with 'g\n-0000c8d0: 7a69 7020 2d39 2729 0a23 2064 6566 6175 zip -9').# defau\n-0000c8e0: 6c74 2069 7320 2762 7a69 7032 270a 3b63 lt is 'bzip2'.;c\n-0000c8f0: 6f6d 7072 6573 7357 6974 683d 0a0a 2320 ompressWith=..# \n-0000c900: 7772 6974 6520 6c6f 6720 6669 6c65 2028 write log file (\n-0000c910: 616c 736f 2920 696e 2074 6865 2062 6163 also) in the bac\n-0000c920: 6b75 7020 6469 7265 6374 6f72 793a 0a23 kup directory:.#\n-0000c930: 2027 7965 7327 206f 7220 276e 6f27 2c20 'yes' or 'no', \n-0000c940: 6465 6661 756c 7420 6973 2027 6e6f 270a default is 'no'.\n-0000c950: 2320 4265 2061 7761 7265 2074 6861 7420 # Be aware that \n-0000c960: 7468 6973 206c 6f67 2064 6f65 7320 6e6f this log does no\n-0000c970: 7420 636f 6e74 6169 6e20 616c 6c20 6572 t contain all er\n-0000c980: 726f 720a 2320 6d65 7373 6167 6573 206f ror.# messages o\n-0000c990: 6620 7468 6520 6f6e 6520 7370 6563 6966 f the one specif\n-0000c9a0: 6965 6420 7769 7468 202d 2d6c 6f67 4669 ied with --logFi\n-0000c9b0: 6c65 210a 2320 536f 6d65 2065 7272 6f72 le!.# Some error\n-0000c9c0: 7320 6172 6520 706f 7373 6962 6c65 2062 s are possible b\n-0000c9d0: 6566 6f72 6520 7468 6520 6261 636b 7570 efore the backup\n-0000c9e0: 0a23 2064 6972 6563 746f 7279 2069 7320 .# directory is \n-0000c9f0: 6372 6561 7465 642e 0a3b 6c6f 6749 6e42 created..;logInB\n-0000ca00: 6163 6b75 7044 6972 3d0a 0a23 2063 6f6d ackupDir=..# com\n-0000ca10: 7072 6573 7320 7468 6520 6c6f 6720 6669 press the log fi\n-0000ca20: 6c65 2069 6e20 7468 6520 6261 636b 7570 le in the backup\n-0000ca30: 2064 6972 6563 746f 7279 3a0a 2320 2779 directory:.# 'y\n-0000ca40: 6573 2720 6f72 2027 6e6f 272c 2064 6566 es' or 'no', def\n-0000ca50: 6175 6c74 2069 7320 276e 6f27 0a3b 636f ault is 'no'.;co\n-0000ca60: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku\n-0000ca70: 7044 6972 3d0a 0a23 2066 696c 656e 616d pDir=..# filenam\n-0000ca80: 6520 746f 2075 7365 2066 6f72 2077 7269 e to use for wri\n-0000ca90: 7469 6e67 2074 6865 2061 626f 7665 206c ting the above l\n-0000caa0: 6f67 2066 696c 652c 0a23 2064 6566 6175 og file,.# defau\n-0000cab0: 6c74 2069 7320 2724 6c6f 6749 6e42 6163 lt is '$logInBac\n-0000cac0: 6b75 7044 6972 4669 6c65 4e61 6d65 270a kupDirFileName'.\n-0000cad0: 3b6c 6f67 496e 4261 636b 7570 4469 7246 ;logInBackupDirF\n-0000cae0: 696c 654e 616d 653d 0a0a 454f 430a 2020 ileName=..EOC. \n-0000caf0: 2020 3b0a 0a0a 2670 7269 6e74 5665 7273 ;...&printVers\n-0000cb00: 696f 6e28 5c40 4152 4756 2c20 272d 5627 ion(\\@ARGV, '-V'\n-0000cb10: 2c20 272d 2d76 6572 7369 6f6e 2729 3b0a , '--version');.\n-0000cb20: 0a6d 7920 2840 626c 6f63 6b52 756c 6573 .my (@blockRules\n-0000cb30: 4f70 7473 293b 0a7b 0a20 2020 206d 7920 Opts);.{. my \n-0000cb40: 2469 3b0a 2020 2020 666f 7265 6163 6820 $i;. foreach \n-0000cb50: 2469 2028 302e 2e24 6e6f 426c 6f63 6b52 $i (0..$noBlockR\n-0000cb60: 756c 6573 2d31 290a 2020 2020 7b0a 0970 ules-1). {..p\n-0000cb70: 7573 6820 4062 6c6f 636b 5275 6c65 734f ush @blockRulesO\n-0000cb80: 7074 732c 0a09 4f70 7469 6f6e 2d3e 6e65 pts,..Option->ne\n-0000cb90: 7728 272d 6e61 6d65 2720 3d3e 2022 6368 w('-name' => \"ch\n-0000cba0: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i\"\n-0000cbb0: 2c0a 0909 2020 2020 272d 636c 5f6f 7074 ,... '-cl_opt\n-0000cbc0: 696f 6e27 203d 3e20 222d 2d63 6865 636b ion' => \"--check\n-0000cbd0: 426c 6f63 6b73 5275 6c65 2469 222c 0a09 BlocksRule$i\",..\n-0000cbe0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-0000cbf0: 3e20 2263 6865 636b 426c 6f63 6b73 5275 > \"checkBlocksRu\n-0000cc00: 6c65 2469 222c 0a09 0920 2020 2027 2d71 le$i\",... '-q\n-0000cc10: 756f 7465 4576 616c 2720 3d3e 2027 7965 uoteEval' => 'ye\n-0000cc20: 7327 292c 0a09 4f70 7469 6f6e 2d3e 6e65 s'),..Option->ne\n-0000cc30: 7728 272d 6e61 6d65 2720 3d3e 2022 6368 w('-name' => \"ch\n-0000cc40: 6563 6b42 6c6f 636b 7342 5324 6922 2c0a eckBlocksBS$i\",.\n-0000cc50: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000cc60: 6e27 203d 3e20 222d 2d63 6865 636b 426c n' => \"--checkBl\n-0000cc70: 6f63 6b73 4253 2469 222c 0a09 0920 2020 ocksBS$i\",... \n-0000cc80: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => \"c\n-0000cc90: 6865 636b 426c 6f63 6b73 4253 2469 222c heckBlocksBS$i\",\n-0000cca0: 0a09 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-0000ccb0: 2720 3d3e 2024 6368 6563 6b42 6c6f 636b ' => $checkBlock\n-0000ccc0: 7342 5364 6566 6175 6c74 292c 0a09 4f70 sBSdefault),..Op\n-0000ccd0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000cce0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n-0000ccf0: 7343 6f6d 7072 2469 222c 0a09 0920 2020 sCompr$i\",... \n-0000cd00: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000cd10: 2022 2d2d 6368 6563 6b42 6c6f 636b 7343 \"--checkBlocksC\n-0000cd20: 6f6d 7072 2469 222c 0a09 0920 2020 2027 ompr$i\",... '\n-0000cd30: 2d63 665f 6b65 7927 203d 3e20 2263 6865 -cf_key' => \"che\n-0000cd40: 636b 426c 6f63 6b73 436f 6d70 7224 6922 ckBlocksCompr$i\"\n-0000cd50: 2c0a 0909 2020 2020 272d 6465 6661 756c ,... '-defaul\n-0000cd60: 7427 203d 3e20 276e 6f27 2c0a 0909 2020 t' => 'no',... \n-0000cd70: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n-0000cd80: 275c 4163 6865 636b 5c5a 7c5c 4179 6573 '\\Acheck\\Z|\\Ayes\n-0000cd90: 5c5a 7c5c 416e 6f5c 5a27 292c 0a09 4f70 \\Z|\\Ano\\Z'),..Op\n-0000cda0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000cdb0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n-0000cdc0: 7352 6561 6424 6922 2c0a 0909 2020 2020 sRead$i\",... \n-0000cdd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-0000cde0: 222d 2d63 6865 636b 426c 6f63 6b73 5265 \"--checkBlocksRe\n-0000cdf0: 6164 2469 222c 0a09 0920 2020 2027 2d63 ad$i\",... '-c\n-0000ce00: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => \"check\n-0000ce10: 426c 6f63 6b73 5265 6164 2469 222c 0a09 BlocksRead$i\",..\n-0000ce20: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n-0000ce30: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op\n-0000ce40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000ce50: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n-0000ce60: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i\",...\n-0000ce70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-0000ce80: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => \"--checkBloc\n-0000ce90: 6b73 5061 7261 6c6c 656c 2469 222c 0a09 ksParallel$i\",..\n-0000cea0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-0000ceb0: 3e20 2263 6865 636b 426c 6f63 6b73 5061 > \"checkBlocksPa\n-0000cec0: 7261 6c6c 656c 2469 222c 0a09 0920 2020 rallel$i\",... \n-0000ced0: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n-0000cee0: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n-0000cef0: 293b 0a0a 2020 2020 7d0a 7d0a 6d79 2028 );.. }.}.my (\n-0000cf00: 4062 6c6f 636b 4465 7669 6365 734f 7074 @blockDevicesOpt\n-0000cf10: 7329 3b0a 7b0a 2020 2020 6d79 2024 693b s);.{. my $i;\n-0000cf20: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i \n-0000cf30: 2830 2e2e 246d 6169 6e3a 3a6e 6f42 6c6f (0..$main::noBlo\n-0000cf40: 636b 4465 7669 6365 732d 3129 0a20 2020 ckDevices-1). \n-0000cf50: 207b 0a09 7075 7368 2040 626c 6f63 6b44 {..push @blockD\n-0000cf60: 6576 6963 6573 4f70 7473 2c0a 094f 7074 evicesOpts,..Opt\n-0000cf70: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-0000cf80: 203d 3e20 2263 6865 636b 4465 7669 6365 => \"checkDevice\n-0000cf90: 7324 6922 2c0a 0909 2020 2020 272d 636c s$i\",... '-cl\n-0000cfa0: 5f6f 7074 696f 6e27 203d 3e20 222d 2d63 _option' => \"--c\n-0000cfb0: 6865 636b 4465 7669 6365 7324 6922 2c0a heckDevices$i\",.\n-0000cfc0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-0000cfd0: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => \"checkDevices\n-0000cfe0: 2469 222c 0a09 0920 2020 2027 2d6d 756c $i\",... '-mul\n-0000cff0: 7469 706c 6527 203d 3e20 2779 6573 2729 tiple' => 'yes')\n-0000d000: 2c0a 094f 7074 696f 6e2d 3e6e 6577 2827 ,..Option->new('\n-0000d010: 2d6e 616d 6527 203d 3e20 2263 6865 636b -name' => \"check\n-0000d020: 4465 7669 6365 7344 6972 2469 222c 0a09 DevicesDir$i\",..\n-0000d030: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-0000d040: 2720 3d3e 2022 2d2d 6368 6563 6b44 6576 ' => \"--checkDev\n-0000d050: 6963 6573 4469 7224 6922 2c0a 0909 2020 icesDir$i\",... \n-0000d060: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => \"\n-0000d070: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$\n-0000d080: 6922 2c0a 0909 2020 2020 272d 7061 7261 i\",... '-para\n-0000d090: 6d27 203d 3e20 2779 6573 2729 2c0a 094f m' => 'yes'),..O\n-0000d0a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000d0b0: 6527 203d 3e20 2263 6865 636b 4465 7669 e' => \"checkDevi\n-0000d0c0: 6365 7342 5324 6922 2c0a 0909 2020 2020 cesBS$i\",... \n-0000d0d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-0000d0e0: 222d 2d63 6865 636b 4465 7669 6365 7342 \"--checkDevicesB\n-0000d0f0: 5324 6922 2c0a 0909 2020 2020 272d 6366 S$i\",... '-cf\n-0000d100: 5f6b 6579 2720 3d3e 2022 6368 6563 6b44 _key' => \"checkD\n-0000d110: 6576 6963 6573 4253 2469 222c 0a09 0920 evicesBS$i\",... \n-0000d120: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-0000d130: 2024 6368 6563 6b42 6c6f 636b 7342 5364 $checkBlocksBSd\n-0000d140: 6566 6175 6c74 292c 0a09 4f70 7469 6f6e efault),..Option\n-0000d150: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-0000d160: 2022 6368 6563 6b44 6576 6963 6573 436f \"checkDevicesCo\n-0000d170: 6d70 7224 6922 2c0a 0909 2020 2020 272d mpr$i\",... '-\n-0000d180: 636c 5f6f 7074 696f 6e27 203d 3e20 222d cl_option' => \"-\n-0000d190: 2d63 6865 636b 4465 7669 6365 7343 6f6d -checkDevicesCom\n-0000d1a0: 7072 2469 222c 0a09 0920 2020 2027 2d63 pr$i\",... '-c\n-0000d1b0: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => \"check\n-0000d1c0: 4465 7669 6365 7343 6f6d 7072 2469 222c DevicesCompr$i\",\n-0000d1d0: 0a09 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-0000d1e0: 2720 3d3e 2027 6e6f 272c 0a09 0920 2020 ' => 'no',... \n-0000d1f0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => '\n-0000d200: 5c41 6368 6563 6b5c 5a7c 5c41 7965 735c \\Acheck\\Z|\\Ayes\\\n-0000d210: 5a7c 5c41 6e6f 5c5a 2729 2c0a 094f 7074 Z|\\Ano\\Z'),..Opt\n-0000d220: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-0000d230: 203d 3e20 2263 6865 636b 4465 7669 6365 => \"checkDevice\n-0000d240: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i\",...\n-0000d250: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-0000d260: 203d 3e20 222d 2d63 6865 636b 4465 7669 => \"--checkDevi\n-0000d270: 6365 7350 6172 616c 6c65 6c24 6922 2c0a cesParallel$i\",.\n-0000d280: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-0000d290: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => \"checkDevices\n-0000d2a0: 5061 7261 6c6c 656c 2469 222c 0a09 0920 Parallel$i\",... \n-0000d2b0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n-0000d2c0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n-0000d2d0: 275d 293b 0a20 2020 207d 0a7d 0a0a 2323 ']);. }.}..##\n-0000d2e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000d2f0: 2323 2121 2121 2121 2121 2121 2121 2121 ##!!!!!!!!!!!!!!\n-0000d300: 2121 0a6d 7920 2840 636f 6d70 7265 7373 !!.my (@compress\n-0000d310: 5275 6c65 7329 3b0a 7b0a 2020 2020 6d79 Rules);.{. my\n-0000d320: 2024 693b 0a0a 2020 2020 666f 7265 6163 $i;.. foreac\n-0000d330: 6820 2469 2028 302e 2e24 6d61 696e 3a3a h $i (0..$main::\n-0000d340: 6e6f 436f 6d70 7265 7373 5275 6c65 732d noCompressRules-\n-0000d350: 3129 0a20 2020 207b 0a09 7075 7368 2040 1). {..push @\n-0000d360: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,..\n-0000d370: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000d380: 6d65 2720 3d3e 2022 636f 6d70 7265 7373 me' => \"compress\n-0000d390: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i\",... '-cl_\n-0000d3a0: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 636f option' => \"--co\n-0000d3b0: 6d70 7265 7373 2469 222c 0a09 0920 2020 mpress$i\",... \n-0000d3c0: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => \"c\n-0000d3d0: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i\",... \n-0000d3e0: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n-0000d3f0: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option\n-0000d400: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-0000d410: 2022 756e 636f 6d70 7265 7373 2469 222c \"uncompress$i\",\n-0000d420: 0a09 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-0000d430: 6f6e 2720 3d3e 2022 2d2d 756e 636f 6d70 on' => \"--uncomp\n-0000d440: 7265 7373 2469 222c 0a09 0920 2020 2027 ress$i\",... '\n-0000d450: 2d63 665f 6b65 7927 203d 3e20 2275 6e63 -cf_key' => \"unc\n-0000d460: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i\",... \n-0000d470: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n-0000d480: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option\n-0000d490: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-0000d4a0: 2022 706f 7374 6669 7824 6922 2c0a 0909 \"postfix$i\",...\n-0000d4b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-0000d4c0: 203d 3e20 222d 2d70 6f73 7466 6978 2469 => \"--postfix$i\n-0000d4d0: 222c 0a09 0920 2020 2027 2d63 665f 6b65 \",... '-cf_ke\n-0000d4e0: 7927 203d 3e20 2270 6f73 7466 6978 2469 y' => \"postfix$i\n-0000d4f0: 222c 0a09 0920 2020 2027 2d70 6172 616d \",... '-param\n-0000d500: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op\n-0000d510: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000d520: 2720 3d3e 2022 636f 6d70 7265 7373 5275 ' => \"compressRu\n-0000d530: 6c65 2469 222c 0a09 0920 2020 2027 2d63 le$i\",... '-c\n-0000d540: 6c5f 6f70 7469 6f6e 2720 3d3e 2022 2d2d l_option' => \"--\n-0000d550: 636f 6d70 7265 7373 5275 6c65 2469 222c compressRule$i\",\n-0000d560: 0a09 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-0000d570: 203d 3e20 2263 6f6d 7072 6573 7352 756c => \"compressRul\n-0000d580: 6524 6922 2c0a 0909 2020 2020 272d 6d75 e$i\",... '-mu\n-0000d590: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes'\n-0000d5a0: 293b 0a20 2020 207d 0a7d 0a0a 6d79 2024 );. }.}..my $\n-0000d5b0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C\n-0000d5c0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new('\n-0000d5d0: 2d61 6c6c 6f77 4c69 7374 7327 203d 3e20 -allowLists' => \n-0000d5e0: 2779 6573 272c 0a20 2020 2020 2020 2020 'yes',. \n-0000d5f0: 2020 2020 2020 2020 2020 2027 2d6c 6973 '-lis\n-0000d600: 744d 6170 7069 6e67 2720 3d3e 2027 6f74 tMapping' => 'ot\n-0000d610: 6865 7242 6163 6b75 7053 6572 6965 7327 herBackupSeries'\n-0000d620: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-0000d630: 2020 2020 2020 272d 636f 6e66 6967 4669 '-configFi\n-0000d640: 6c65 2720 3d3e 2027 2d66 272c 0a09 0920 le' => '-f',... \n-0000d650: 2020 2027 2d6c 6973 7427 203d 3e20 5b4f '-list' => [O\n-0000d660: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000d670: 6527 203d 3e20 2768 656c 7027 2c0a 0909 e' => 'help',...\n-0000d680: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-0000d690: 6f6e 2720 3d3e 2027 2d2d 6865 6c70 2729 on' => '--help')\n-0000d6a0: 2c0a 0a20 2020 2020 2020 2020 2020 2020 ,.. \n-0000d6b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000d6c0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-0000d6d0: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi\n-0000d6e0: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n-0000d6f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000d700: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... \n-0000d710: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-0000d720: 2d2d 6669 6c65 272c 0a09 0909 0909 2020 --file',...... \n-0000d730: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y\n-0000d740: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n-0000d750: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not\n-0000d760: 205b 6765 6e65 7261 7465 5d27 292c 0a20 [generate]'),. \n-0000d770: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000d780: 2020 2020 2020 2020 2020 2020 2020 204f O\n-0000d790: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000d7a0: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate'\n-0000d7b0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000d7c0: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g',\n-0000d7d0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-0000d7e0: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene\n-0000d7f0: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... \n-0000d800: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-0000d810: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-0000d820: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n-0000d830: 636f 6e66 6967 4669 6c65 5d27 292c 0a20 configFile]'),. \n-0000d840: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000d850: 2020 2020 2020 2020 2020 2020 2020 204f O\n-0000d860: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000d870: 6527 203d 3e20 2770 7269 6e74 272c 0a09 e' => 'print',..\n-0000d880: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-0000d890: 696f 6e27 203d 3e20 272d 2d70 7269 6e74 ion' => '--print\n-0000d8a0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-0000d8b0: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back\n-0000d8c0: 7570 4469 725d 2729 2c0a 2020 2020 2020 upDir]'),. \n-0000d8d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000d8e0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n-0000d8f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-0000d900: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',...\n-0000d910: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-0000d920: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',....\n-0000d930: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-0000d940: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi\n-0000d950: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n-0000d960: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu\n-0000d970: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n-0000d980: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-0000d990: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n-0000d9a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000d9b0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n-0000d9c0: 272d 6e61 6d65 2720 3d3e 2027 736f 7572 '-name' => 'sour\n-0000d9d0: 6365 4469 7227 2c0a 0909 0909 0920 2020 ceDir',...... \n-0000d9e0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000d9f0: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... \n-0000da00: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-0000da10: 2d2d 736f 7572 6365 4469 7227 2c0a 0909 --sourceDir',...\n-0000da20: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-0000da30: 203d 3e20 2773 6f75 7263 6544 6972 272c => 'sourceDir',\n-0000da40: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-0000da50: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n-0000da60: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-0000da70: 6e61 6d65 2720 3d3e 2027 7365 7269 6573 name' => 'series\n-0000da80: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-0000da90: 5f6f 7074 696f 6e27 203d 3e20 272d 5327 _option' => '-S'\n-0000daa0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000dab0: 616c 6961 7327 203d 3e20 272d 2d73 6572 alias' => '--ser\n-0000dac0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... '\n-0000dad0: 2d63 665f 6b65 7927 203d 3e20 2773 6572 -cf_key' => 'ser\n-0000dae0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... '\n-0000daf0: 2d64 6566 6175 6c74 2720 3d3e 2027 6465 -default' => 'de\n-0000db00: 6661 756c 7427 292c 0a09 0909 094f 7074 fault'),.....Opt\n-0000db10: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-0000db20: 203d 3e20 2763 6865 636b 436f 6d70 7227 => 'checkCompr'\n-0000db30: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000db40: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6368 option' => '--ch\n-0000db50: 6563 6b43 6f6d 7072 272c 0a09 0909 0909 eckCompr',......\n-0000db60: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n-0000db70: 3d3e 2027 2d43 2729 2c0a 0909 0909 4f70 => '-C'),.....Op\n-0000db80: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000db90: 2720 3d3e 2027 746d 7064 6972 272c 0a09 ' => 'tmpdir',..\n-0000dba0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-0000dbb0: 696f 6e27 203d 3e20 272d 5427 2c0a 0909 ion' => '-T',...\n-0000dbc0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-0000dbd0: 7327 203d 3e20 272d 2d74 6d70 6469 7227 s' => '--tmpdir'\n-0000dbe0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000dbf0: 6b65 7927 203d 3e20 2774 6d70 4469 7227 key' => 'tmpDir'\n-0000dc00: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def\n-0000dc10: 6175 6c74 2720 3d3e 2024 746d 7064 6972 ault' => $tmpdir\n-0000dc20: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. \n-0000dc30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000dc40: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-0000dc50: 2d6e 616d 6527 203d 3e20 276f 7468 6572 -name' => 'other\n-0000dc60: 4261 636b 7570 5365 7269 6573 272c 0a09 BackupSeries',..\n-0000dc70: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-0000dc80: 2720 3d3e 2027 6f74 6865 7242 6163 6b75 ' => 'otherBacku\n-0000dc90: 7053 6572 6965 7327 2c0a 0909 0909 0920 pSeries',...... \n-0000dca0: 2020 2027 2d6d 756c 7469 706c 6527 203d '-multiple' =\n-0000dcb0: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n-0000dcc0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000dcd0: 2720 3d3e 2027 6c6f 636b 4669 6c65 272c ' => 'lockFile',\n-0000dce0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-0000dcf0: 7074 696f 6e27 203d 3e20 272d 4c27 2c0a ption' => '-L',.\n-0000dd00: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n-0000dd10: 6961 7327 203d 3e20 272d 2d6c 6f63 6b46 ias' => '--lockF\n-0000dd20: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n-0000dd30: 2d63 665f 6b65 7927 203d 3e20 276c 6f63 -cf_key' => 'loc\n-0000dd40: 6b46 696c 6527 2c0a 0909 0909 0920 2020 kFile',...... \n-0000dd50: 2027 2d64 6566 6175 6c74 2720 3d3e 2024 '-default' => $\n-0000dd60: 6c6f 636b 4669 6c65 292c 0a09 0909 094f lockFile),.....O\n-0000dd70: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000dd80: 6527 203d 3e20 2775 6e6c 6f63 6b42 6566 e' => 'unlockBef\n-0000dd90: 6f72 6544 656c 272c 0a09 0909 0909 2020 oreDel',...... \n-0000dda0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-0000ddb0: 3e20 272d 2d75 6e6c 6f63 6b42 6566 6f72 > '--unlockBefor\n-0000ddc0: 6544 656c 272c 0a09 0909 0909 2020 2020 eDel',...... \n-0000ddd0: 272d 6366 5f6b 6579 2720 3d3e 2027 756e '-cf_key' => 'un\n-0000dde0: 6c6f 636b 4265 666f 7265 4465 6c27 2c0a lockBeforeDel',.\n-0000ddf0: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param\n-0000de00: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',.....\n-0000de10: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' \n-0000de20: 3d3e 2027 5b6c 6f63 6b46 696c 655d 270a => '[lockFile]'.\n-0000de30: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),.....\n-0000de40: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000de50: 6d65 2720 3d3e 2027 6578 6365 7074 4469 me' => 'exceptDi\n-0000de60: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '-\n-0000de70: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-0000de80: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n-0000de90: 6c5f 616c 6961 7327 203d 3e20 272d 2d65 l_alias' => '--e\n-0000dea0: 7863 6570 7444 6972 7327 2c0a 0909 0909 xceptDirs',.....\n-0000deb0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-0000dec0: 3e20 2765 7863 6570 7444 6972 7327 2c0a > 'exceptDirs',.\n-0000ded0: 0909 0909 0920 2020 2027 2d6d 756c 7469 ..... '-multi\n-0000dee0: 706c 6527 203d 3e20 2779 6573 2729 2c0a ple' => 'yes'),.\n-0000def0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-0000df00: 272d 6e61 6d65 2720 3d3e 2027 696e 636c '-name' => 'incl\n-0000df10: 7564 6544 6972 7327 2c0a 0909 0909 0920 udeDirs',...... \n-0000df20: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000df30: 3d3e 2027 2d69 272c 0a09 0909 0909 2020 => '-i',...... \n-0000df40: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-0000df50: 2027 2d2d 696e 636c 7564 6544 6972 7327 '--includeDirs'\n-0000df60: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000df70: 6b65 7927 203d 3e20 2769 6e63 6c75 6465 key' => 'include\n-0000df80: 4469 7273 272c 0a09 0909 0909 2020 2020 Dirs',...... \n-0000df90: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => '\n-0000dfa0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-0000dfb0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-0000dfc0: 3e20 2765 7863 6570 7452 756c 6527 2c0a > 'exceptRule',.\n-0000dfd0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-0000dfe0: 7469 6f6e 2720 3d3e 2027 2d2d 6578 6365 tion' => '--exce\n-0000dff0: 7074 5275 6c65 272c 0a09 0909 0909 2020 ptRule',...... \n-0000e000: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-0000e010: 6578 6365 7074 5275 6c65 272c 0a09 0909 exceptRule',....\n-0000e020: 0909 2020 2020 272d 7175 6f74 6545 7661 .. '-quoteEva\n-0000e030: 6c27 203d 3e20 2779 6573 2729 2c0a 0909 l' => 'yes'),...\n-0000e040: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-0000e050: 6e61 6d65 2720 3d3e 2027 696e 636c 7564 name' => 'includ\n-0000e060: 6552 756c 6527 2c0a 0909 0909 0920 2020 eRule',...... \n-0000e070: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000e080: 2027 2d2d 696e 636c 7564 6552 756c 6527 '--includeRule'\n-0000e090: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000e0a0: 6b65 7927 203d 3e20 2769 6e63 6c75 6465 key' => 'include\n-0000e0b0: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... \n-0000e0c0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => \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 7772 6974 6545 7863 6c75 6465 => 'writeExclude\n-0000e100: 4c6f 6727 2c0a 0909 0909 0920 2020 2027 Log',...... '\n-0000e110: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-0000e120: 2d2d 7772 6974 6545 7863 6c75 6465 4c6f --writeExcludeLo\n-0000e130: 6727 2c0a 0909 0909 0920 2020 2027 2d63 g',...... '-c\n-0000e140: 665f 6b65 7927 203d 3e20 2777 7269 7465 f_key' => 'write\n-0000e150: 4578 636c 7564 654c 6f67 272c 0a09 0909 ExcludeLog',....\n-0000e160: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n-0000e170: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n-0000e180: 276e 6f27 5d29 2c0a 0909 0920 2020 2020 'no']),.... \n-0000e190: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-0000e1a0: 2d6e 616d 6527 203d 3e20 2763 6f6e 7445 -name' => 'contE\n-0000e1b0: 7863 6570 7444 6972 7345 7272 272c 0a09 xceptDirsErr',..\n-0000e1c0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-0000e1d0: 696f 6e27 203d 3e20 272d 2d63 6f6e 7445 ion' => '--contE\n-0000e1e0: 7863 6570 7444 6972 7345 7272 272c 0a09 xceptDirsErr',..\n-0000e1f0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-0000e200: 2720 3d3e 2027 636f 6e74 4578 6365 7074 ' => 'contExcept\n-0000e210: 4469 7273 4572 7227 2c0a 0909 0909 0920 DirsErr',...... \n-0000e220: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n-0000e230: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n-0000e240: 275d 292c 0a09 0909 2020 2020 2020 2020 ']),.... \n-0000e250: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000e260: 6d65 2720 3d3e 2027 6578 6365 7074 5479 me' => 'exceptTy\n-0000e270: 7065 7327 2c0a 0909 0909 0920 2020 2027 pes',...... '\n-0000e280: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-0000e290: 2d2d 6578 6365 7074 5479 7065 7327 2c0a --exceptTypes',.\n-0000e2a0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-0000e2b0: 7927 203d 3e20 2765 7863 6570 7454 7970 y' => 'exceptTyp\n-0000e2c0: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n-0000e2d0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes',\n-0000e2e0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-0000e2f0: 6572 6e27 203d 3e20 275c 415b 5362 6366 ern' => '\\A[Sbcf\n-0000e300: 706c 5d2b 5c5a 2729 2c0a 0909 0920 2020 pl]+\\Z'),.... \n-0000e310: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n-0000e320: 2827 2d6e 616d 6527 203d 3e20 2761 7263 ('-name' => 'arc\n-0000e330: 6869 7665 5479 7065 7327 2c0a 0909 0909 hiveTypes',.....\n-0000e340: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-0000e350: 2720 3d3e 2027 2d2d 6172 6368 6976 6554 ' => '--archiveT\n-0000e360: 7970 6573 272c 0a09 0909 0909 2020 2020 ypes',...... \n-0000e370: 272d 6366 5f6b 6579 2720 3d3e 2027 6172 '-cf_key' => 'ar\n-0000e380: 6368 6976 6554 7970 6573 272c 0a09 0909 chiveTypes',....\n-0000e390: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n-0000e3a0: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... \n-0000e3b0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n-0000e3c0: 275c 415b 5362 6370 6c5d 2b5c 5a27 2c0a '\\A[Sbcpl]+\\Z',.\n-0000e3d0: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_\n-0000e3e0: 6966 2720 3d3e 2027 5b73 7065 6369 616c if' => '[special\n-0000e3f0: 5479 7065 4172 6368 6976 6572 5d27 292c TypeArchiver]'),\n-0000e400: 0a09 0909 2020 2020 2020 2020 4f70 7469 .... Opti\n-0000e410: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-0000e420: 3d3e 2027 7370 6563 6961 6c54 7970 6541 => 'specialTypeA\n-0000e430: 7263 6869 7665 7227 2c0a 0909 0909 0920 rchiver',...... \n-0000e440: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000e450: 3d3e 2027 2d2d 7370 6563 6961 6c54 7970 => '--specialTyp\n-0000e460: 6541 7263 6869 7665 7227 2c0a 0909 0909 eArchiver',.....\n-0000e470: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-0000e480: 3e20 2773 7065 6369 616c 5479 7065 4172 > 'specialTypeAr\n-0000e490: 6368 6976 6572 272c 0a09 0909 0909 2020 chiver',...... \n-0000e4a0: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => \n-0000e4b0: 2763 7069 6f27 2c0a 0909 0909 0920 2020 'cpio',...... \n-0000e4c0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => '\n-0000e4d0: 5c41 6370 696f 5c5a 7c5c 4174 6172 5c5a \\Acpio\\Z|\\Atar\\Z\n-0000e4e0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-0000e4f0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-0000e500: 6370 4973 476e 7527 2c0a 0909 0909 0920 cpIsGnu',...... \n-0000e510: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000e520: 3d3e 2027 2d2d 6370 4973 476e 7527 2c0a => '--cpIsGnu',.\n-0000e530: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-0000e540: 7927 203d 3e20 2763 7049 7347 6e75 272c y' => 'cpIsGnu',\n-0000e550: 0a09 0909 0909 2020 2020 272d 6366 5f6e ...... '-cf_n\n-0000e560: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye\n-0000e570: 7327 2c20 276e 6f27 5d29 2c0a 0909 0909 s', 'no']),.....\n-0000e580: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000e590: 6d65 2720 3d3e 2027 6c69 6e6b 5379 6d6c me' => 'linkSyml\n-0000e5a0: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... \n-0000e5b0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-0000e5c0: 272d 2d6c 696e 6b53 796d 6c69 6e6b 7327 '--linkSymlinks'\n-0000e5d0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000e5e0: 6b65 7927 203d 3e20 276c 696e 6b53 796d key' => 'linkSym\n-0000e5f0: 6c69 6e6b 7327 2c0a 0909 0909 0920 2020 links',...... \n-0000e600: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n-0000e610: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n-0000e620: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-0000e630: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p\n-0000e640: 7265 636f 6d6d 616e 6427 2c0a 0909 0909 recommand',.....\n-0000e650: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-0000e660: 2720 3d3e 2027 2d2d 7072 6563 6f6d 6d61 ' => '--precomma\n-0000e670: 6e64 272c 0a09 0909 0909 2020 2020 272d nd',...... '-\n-0000e680: 6366 5f6b 6579 2720 3d3e 2027 7072 6563 cf_key' => 'prec\n-0000e690: 6f6d 6d61 6e64 272c 0a09 0909 0909 2020 ommand',...... \n-0000e6a0: 2020 272d 7175 6f74 6545 7661 6c27 203d '-quoteEval' =\n-0000e6b0: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n-0000e6c0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000e6d0: 2720 3d3e 2027 706f 7374 636f 6d6d 616e ' => 'postcomman\n-0000e6e0: 6427 2c0a 0909 0909 0920 2020 2027 2d63 d',...... '-c\n-0000e6f0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-0000e700: 706f 7374 636f 6d6d 616e 6427 2c0a 0909 postcommand',...\n-0000e710: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-0000e720: 203d 3e20 2770 6f73 7463 6f6d 6d61 6e64 => 'postcommand\n-0000e730: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu\n-0000e740: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes\n-0000e750: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-0000e760: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-0000e770: 666f 6c6c 6f77 4c69 6e6b 7327 2c0a 0909 followLinks',...\n-0000e780: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-0000e790: 6f6e 2720 3d3e 2027 2d2d 666f 6c6c 6f77 on' => '--follow\n-0000e7a0: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... \n-0000e7b0: 2027 2d63 665f 6b65 7927 203d 3e20 2766 '-cf_key' => 'f\n-0000e7c0: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',....\n-0000e7d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-0000e7e0: 203d 3e20 302c 0a09 0909 0909 2020 2020 => 0,...... \n-0000e7f0: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\\\n-0000e800: 415c 642b 5c5a 2729 2c0a 0909 0909 4f70 A\\d+\\Z'),.....Op\n-0000e810: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000e820: 2720 3d3e 2027 7374 6179 496e 4669 6c65 ' => 'stayInFile\n-0000e830: 5379 7374 656d 272c 0a09 0909 0909 2020 System',...... \n-0000e840: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-0000e850: 3e20 272d 2d73 7461 7949 6e46 696c 6553 > '--stayInFileS\n-0000e860: 7973 7465 6d27 2c0a 0909 0909 0920 2020 ystem',...... \n-0000e870: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's\n-0000e880: 7461 7949 6e46 696c 6553 7973 7465 6d27 tayInFileSystem'\n-0000e890: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000e8a0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y\n-0000e8b0: 6573 272c 2027 6e6f 275d 292c 0a09 0909 es', 'no']),....\n-0000e8c0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-0000e8d0: 616d 6527 203d 3e20 2768 6967 684c 6174 ame' => 'highLat\n-0000e8e0: 656e 6379 272c 0a09 0909 0909 2020 2020 ency',...... \n-0000e8f0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-0000e900: 272d 2d68 6967 684c 6174 656e 6379 272c '--highLatency',\n-0000e910: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n-0000e920: 6579 2720 3d3e 2027 6869 6768 4c61 7465 ey' => 'highLate\n-0000e930: 6e63 7927 2c0a 0909 0909 0920 2020 2027 ncy',...... '\n-0000e940: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n-0000e950: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n-0000e960: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-0000e970: 2827 2d6e 616d 6527 203d 3e20 2769 676e ('-name' => 'ign\n-0000e980: 6f72 6550 6572 6d73 272c 0a09 0909 0909 orePerms',......\n-0000e990: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-0000e9a0: 203d 3e20 272d 2d69 676e 6f72 6550 6572 => '--ignorePer\n-0000e9b0: 6d73 272c 0a09 0909 0909 2020 2020 272d ms',...... '-\n-0000e9c0: 6366 5f6b 6579 2720 3d3e 2027 6967 6e6f cf_key' => 'igno\n-0000e9d0: 7265 5065 726d 7327 2c0a 0909 0909 0920 rePerms',...... \n-0000e9e0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n-0000e9f0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n-0000ea00: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option-\n-0000ea10: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-0000ea20: 276c 6174 654c 696e 6b73 272c 0a09 0909 'lateLinks',....\n-0000ea30: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000ea40: 6e27 203d 3e20 272d 2d6c 6174 654c 696e n' => '--lateLin\n-0000ea50: 6b73 272c 0a09 0909 0909 2020 2020 272d ks',...... '-\n-0000ea60: 6366 5f6b 6579 2720 3d3e 2027 6c61 7465 cf_key' => 'late\n-0000ea70: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... \n-0000ea80: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' \n-0000ea90: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no']\n-0000eaa0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-0000eab0: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l\n-0000eac0: 6174 6543 6f6d 7072 6573 7327 2c0a 0909 ateCompress',...\n-0000ead0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-0000eae0: 6f6e 2720 3d3e 2027 2d2d 6c61 7465 436f on' => '--lateCo\n-0000eaf0: 6d70 7265 7373 272c 0a09 0909 0909 2020 mpress',...... \n-0000eb00: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => \n-0000eb10: 275b 6c61 7465 4c69 6e6b 735d 272c 0a09 '[lateLinks]',..\n-0000eb20: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-0000eb30: 2720 3d3e 2027 6c61 7465 436f 6d70 7265 ' => 'lateCompre\n-0000eb40: 7373 272c 0a09 0909 0909 2020 2020 272d ss',...... '-\n-0000eb50: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => \n-0000eb60: 5b27 7965 7327 2c20 276e 6f27 5d29 2c0a ['yes', 'no']),.\n-0000eb70: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-0000eb80: 272d 6e61 6d65 2720 3d3e 2027 6175 746f '-name' => 'auto\n-0000eb90: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... \n-0000eba0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-0000ebb0: 3e20 272d 2d61 7574 6f72 6570 6169 7227 > '--autorepair'\n-0000ebc0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-0000ebd0: 6b65 7927 203d 3e20 2761 7574 6f72 6570 key' => 'autorep\n-0000ebe0: 6169 7227 2c0a 0909 0909 0920 2020 2027 air',...... '\n-0000ebf0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-0000ec00: 6127 2c0a 0909 0909 0920 2020 2027 2d63 a',...... '-c\n-0000ec10: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [\n-0000ec20: 2779 6573 272c 2027 6e6f 275d 292c 0a09 'yes', 'no']),..\n-0000ec30: 0909 0940 626c 6f63 6b52 756c 6573 4f70 ...@blockRulesOp\n-0000ec40: 7473 2c0a 0909 0909 4062 6c6f 636b 4465 ts,.....@blockDe\n-0000ec50: 7669 6365 734f 7074 732c 0a09 0909 094f vicesOpts,.....O\n-0000ec60: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000ec70: 6527 203d 3e20 2763 6865 636b 426c 6f63 e' => 'checkBloc\n-0000ec80: 6b73 5375 6666 6978 272c 0a09 0909 0909 ksSuffix',......\n-0000ec90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-0000eca0: 203d 3e20 272d 2d63 6865 636b 426c 6f63 => '--checkBloc\n-0000ecb0: 6b73 5375 6666 6978 272c 0a09 0909 0909 ksSuffix',......\n-0000ecc0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-0000ecd0: 2027 6368 6563 6b42 6c6f 636b 7353 7566 'checkBlocksSuf\n-0000ece0: 6669 7827 2c0a 0909 0909 0920 2020 2027 fix',...... '\n-0000ecf0: 2d6d 756c 7469 706c 6527 203d 3e20 2779 -multiple' => 'y\n-0000ed00: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option\n-0000ed10: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-0000ed20: 2027 6368 6563 6b42 6c6f 636b 734d 696e 'checkBlocksMin\n-0000ed30: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... \n-0000ed40: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-0000ed50: 272d 2d63 6865 636b 426c 6f63 6b73 4d69 '--checkBlocksMi\n-0000ed60: 6e53 697a 6527 2c0a 0909 0909 0920 2020 nSize',...... \n-0000ed70: 2027 2d63 665f 6b65 7927 203d 3e20 2763 '-cf_key' => 'c\n-0000ed80: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz\n-0000ed90: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d\n-0000eda0: 6566 6175 6c74 2720 3d3e 2027 3130 304d efault' => '100M\n-0000edb0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-0000edc0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-0000edd0: 6368 6563 6b42 6c6f 636b 7342 5327 2c0a checkBlocksBS',.\n-0000ede0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-0000edf0: 7469 6f6e 2720 3d3e 2027 2d2d 6368 6563 tion' => '--chec\n-0000ee00: 6b42 6c6f 636b 7342 5327 2c0a 0909 0909 kBlocksBS',.....\n-0000ee10: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-0000ee20: 3e20 2763 6865 636b 426c 6f63 6b73 4253 > 'checkBlocksBS\n-0000ee30: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-0000ee40: 6661 756c 7427 203d 3e20 2463 6865 636b fault' => $check\n-0000ee50: 426c 6f63 6b73 4253 6465 6661 756c 7429 BlocksBSdefault)\n-0000ee60: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-0000ee70: 7728 272d 6e61 6d65 2720 3d3e 2027 6368 w('-name' => 'ch\n-0000ee80: 6563 6b42 6c6f 636b 7343 6f6d 7072 272c eckBlocksCompr',\n-0000ee90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-0000eea0: 7074 696f 6e27 203d 3e20 272d 2d63 6865 ption' => '--che\n-0000eeb0: 636b 426c 6f63 6b73 436f 6d70 7227 2c0a ckBlocksCompr',.\n-0000eec0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-0000eed0: 7927 203d 3e20 2763 6865 636b 426c 6f63 y' => 'checkBloc\n-0000eee0: 6b73 436f 6d70 7227 2c0a 0909 0909 0920 ksCompr',...... \n-0000eef0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-0000ef00: 2027 6e6f 272c 0a09 0909 0909 2020 2020 'no',...... \n-0000ef10: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\\\n-0000ef20: 4163 6865 636b 5c5a 7c5c 4179 6573 5c5a Acheck\\Z|\\Ayes\\Z\n-0000ef30: 7c5c 416e 6f5c 5a27 292c 0a09 0909 094f |\\Ano\\Z'),.....O\n-0000ef40: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-0000ef50: 6527 203d 3e20 2263 6865 636b 426c 6f63 e' => \"checkBloc\n-0000ef60: 6b73 5061 7261 6c6c 656c 222c 0a09 0909 ksParallel\",....\n-0000ef70: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000ef80: 6e27 203d 3e20 222d 2d63 6865 636b 426c n' => \"--checkBl\n-0000ef90: 6f63 6b73 5061 7261 6c6c 656c 222c 0a09 ocksParallel\",..\n-0000efa0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-0000efb0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => \"checkBlock\n-0000efc0: 7350 6172 616c 6c65 6c22 2c0a 0909 0909 sParallel\",.....\n-0000efd0: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n-0000efe0: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n-0000eff0: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio\n-0000f000: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-0000f010: 3e20 2771 7565 7565 426c 6f63 6b27 2c0a > 'queueBlock',.\n-0000f020: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-0000f030: 7469 6f6e 2720 3d3e 2027 2d2d 7175 6575 tion' => '--queu\n-0000f040: 6542 6c6f 636b 272c 0a09 0909 0909 2020 eBlock',...... \n-0000f050: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-0000f060: 7175 6575 6542 6c6f 636b 272c 0a09 0909 queueBlock',....\n-0000f070: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-0000f080: 203d 3e20 2471 7565 7565 426c 6f63 6b2c => $queueBlock,\n-0000f090: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-0000f0a0: 6572 6e27 203d 3e20 275c 415b 312d 395d ern' => '\\A[1-9]\n-0000f0b0: 5c64 2a5c 5a27 292c 0a09 0909 094f 7074 \\d*\\Z'),.....Opt\n-0000f0c0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-0000f0d0: 203d 3e20 2773 6176 6552 414d 272c 0a09 => 'saveRAM',..\n-0000f0e0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-0000f0f0: 696f 6e27 203d 3e20 272d 2d73 6176 6552 ion' => '--saveR\n-0000f100: 414d 272c 0a09 0909 0909 2020 2020 272d AM',...... '-\n-0000f110: 6366 5f6b 6579 2720 3d3e 2027 7361 7665 cf_key' => 'save\n-0000f120: 5241 4d27 2c0a 0909 0909 0920 2020 2027 RAM',...... '\n-0000f130: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n-0000f140: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n-0000f150: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-0000f160: 2827 2d6e 616d 6527 203d 3e20 2763 6f6d ('-name' => 'com\n-0000f170: 7072 6573 7327 2c0a 0909 0909 0920 2020 press',...... \n-0000f180: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000f190: 2027 2d63 272c 0a09 0909 0909 2020 2020 '-c',...... \n-0000f1a0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-0000f1b0: 2d2d 636f 6d70 7265 7373 272c 0a09 0909 --compress',....\n-0000f1c0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-0000f1d0: 3d3e 2027 636f 6d70 7265 7373 272c 0a09 => 'compress',..\n-0000f1e0: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE\n-0000f1f0: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',..\n-0000f200: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-0000f210: 7427 203d 3e20 5c40 636f 6d70 7265 7373 t' => \\@compress\n-0000f220: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-0000f230: 6577 2827 2d6e 616d 6527 203d 3e20 2775 ew('-name' => 'u\n-0000f240: 6e63 6f6d 7072 6573 7327 2c0a 0909 0909 ncompress',.....\n-0000f250: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-0000f260: 2720 3d3e 2027 2d75 272c 0a09 0909 0909 ' => '-u',......\n-0000f270: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n-0000f280: 3d3e 2027 2d2d 756e 636f 6d70 7265 7373 => '--uncompress\n-0000f290: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-0000f2a0: 5f6b 6579 2720 3d3e 2027 756e 636f 6d70 _key' => 'uncomp\n-0000f2b0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... \n-0000f2c0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => \n-0000f2d0: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n-0000f2e0: 272d 6465 6661 756c 7427 203d 3e20 5c40 '-default' => \\@\n-0000f2f0: 756e 636f 6d70 7265 7373 292c 0a09 0909 uncompress),....\n-0000f300: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-0000f310: 616d 6527 203d 3e20 2770 6f73 7466 6978 ame' => 'postfix\n-0000f320: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-0000f330: 5f6f 7074 696f 6e27 203d 3e20 272d 7027 _option' => '-p'\n-0000f340: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000f350: 616c 6961 7327 203d 3e20 272d 2d70 6f73 alias' => '--pos\n-0000f360: 7466 6978 272c 0a09 0909 0909 2020 2020 tfix',...... \n-0000f370: 272d 6366 5f6b 6579 2720 3d3e 2027 706f '-cf_key' => 'po\n-0000f380: 7374 6669 7827 2c0a 0909 0909 0920 2020 stfix',...... \n-0000f390: 2027 2d64 6566 6175 6c74 2720 3d3e 2024 '-default' => $\n-0000f3a0: 706f 7374 6669 7829 2c0a 2309 0909 0940 postfix),.#....@\n-0000f3b0: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,..\n-0000f3c0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-0000f3d0: 2d6e 616d 6527 203d 3e20 276d 696e 436f -name' => 'minCo\n-0000f3e0: 6d70 7265 7373 5369 7a65 272c 0a09 0909 mpressSize',....\n-0000f3f0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000f400: 6e27 203d 3e20 272d 2d6d 696e 436f 6d70 n' => '--minComp\n-0000f410: 7265 7373 5369 7a65 272c 0a09 0909 0909 ressSize',......\n-0000f420: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-0000f430: 2027 6d69 6e43 6f6d 7072 6573 7353 697a 'minCompressSiz\n-0000f440: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d\n-0000f450: 6566 6175 6c74 2720 3d3e 2024 6d69 6e43 efault' => $minC\n-0000f460: 6f6d 7072 6573 7353 697a 652c 0a09 0909 ompressSize,....\n-0000f470: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-0000f480: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\\A\\d+\\Z'),.\n-0000f490: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-0000f4a0: 272d 6e61 6d65 2720 3d3e 2027 636f 6d70 '-name' => 'comp\n-0000f4b0: 7252 756c 6527 2c0a 0909 0909 0920 2020 rRule',...... \n-0000f4c0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-0000f4d0: 2027 2d2d 636f 6d70 7252 756c 6527 2c0a '--comprRule',.\n-0000f4e0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-0000f4f0: 7927 203d 3e20 2763 6f6d 7072 5275 6c65 y' => 'comprRule\n-0000f500: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu\n-0000f510: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes\n-0000f520: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-0000f530: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-0000f540: 6e6f 436f 6d70 7265 7373 272c 0a09 0909 noCompress',....\n-0000f550: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000f560: 6e27 203d 3e20 272d 2d6e 6f43 6f6d 7072 n' => '--noCompr\n-0000f570: 6573 7327 2c0a 0909 0909 0920 2020 2027 ess',...... '\n-0000f580: 2d63 665f 6b65 7927 203d 3e20 276e 6f43 -cf_key' => 'noC\n-0000f590: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... \n-0000f5a0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-0000f5b0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-0000f5c0: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\\A\n-0000f5d0: 5b31 2d39 5d5c 642a 5c5a 2729 2c0a 0909 [1-9]\\d*\\Z'),...\n-0000f5e0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-0000f5f0: 6e61 6d65 2720 3d3e 2027 7175 6575 6543 name' => 'queueC\n-0000f600: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... \n-0000f610: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000f620: 3d3e 2027 2d2d 7175 6575 6543 6f6d 7072 => '--queueCompr\n-0000f630: 6573 7327 2c0a 0909 0909 0920 2020 2027 ess',...... '\n-0000f640: 2d63 665f 6b65 7927 203d 3e20 2771 7565 -cf_key' => 'que\n-0000f650: 7565 436f 6d70 7265 7373 272c 0a09 0909 ueCompress',....\n-0000f660: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-0000f670: 203d 3e20 2471 7565 7565 436f 6d70 7265 => $queueCompre\n-0000f680: 7373 2c0a 0909 0909 0920 2020 2027 2d70 ss,...... '-p\n-0000f690: 6174 7465 726e 2720 3d3e 2027 5c41 5b31 attern' => '\\A[1\n-0000f6a0: 2d39 5d5c 642a 5c5a 2729 2c0a 0909 0909 -9]\\d*\\Z'),.....\n-0000f6b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000f6c0: 6d65 2720 3d3e 2027 6e6f 436f 7079 272c me' => 'noCopy',\n-0000f6d0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-0000f6e0: 7074 696f 6e27 203d 3e20 272d 2d6e 6f43 ption' => '--noC\n-0000f6f0: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... '\n-0000f700: 2d63 665f 6b65 7927 203d 3e20 276e 6f43 -cf_key' => 'noC\n-0000f710: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... '\n-0000f720: 2d64 6566 6175 6c74 2720 3d3e 2024 6e6f -default' => $no\n-0000f730: 436f 7079 2c0a 0909 0909 0920 2020 2027 Copy,...... '\n-0000f740: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\\A\n-0000f750: 5b31 2d39 5d5c 642a 5c5a 2729 2c0a 0909 [1-9]\\d*\\Z'),...\n-0000f760: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-0000f770: 6e61 6d65 2720 3d3e 2027 7175 6575 6543 name' => 'queueC\n-0000f780: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... '\n-0000f790: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-0000f7a0: 2d2d 7175 6575 6543 6f70 7927 2c0a 0909 --queueCopy',...\n-0000f7b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-0000f7c0: 203d 3e20 2771 7565 7565 436f 7079 272c => 'queueCopy',\n-0000f7d0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-0000f7e0: 756c 7427 203d 3e20 2471 7565 7565 436f ult' => $queueCo\n-0000f7f0: 7079 2c0a 0909 0909 0920 2020 2027 2d70 py,...... '-p\n-0000f800: 6174 7465 726e 2720 3d3e 2027 5c41 5b31 attern' => '\\A[1\n-0000f810: 2d39 5d5c 642a 5c5a 2729 2c0a 0909 0909 -9]\\d*\\Z'),.....\n-0000f820: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-0000f830: 6d65 2720 3d3e 2027 636f 7079 4257 4c69 me' => 'copyBWLi\n-0000f840: 6d69 7427 2c0a 0909 0909 0920 2020 2027 mit',...... '\n-0000f850: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-0000f860: 2d2d 636f 7079 4257 4c69 6d69 7427 2c0a --copyBWLimit',.\n-0000f870: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-0000f880: 7927 203d 3e20 2763 6f70 7942 574c 696d y' => 'copyBWLim\n-0000f890: 6974 272c 0a09 0909 0909 2020 2020 272d it',...... '-\n-0000f8a0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes',\n-0000f8b0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-0000f8c0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\\A\\d+\\Z\n-0000f8d0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-0000f8e0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-0000f8f0: 7769 7468 5573 6572 4772 6f75 7053 7461 withUserGroupSta\n-0000f900: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n-0000f910: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-0000f920: 7769 7468 5573 6572 4772 6f75 7053 7461 withUserGroupSta\n-0000f930: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n-0000f940: 665f 6b65 7927 203d 3e20 2777 6974 6855 f_key' => 'withU\n-0000f950: 7365 7247 726f 7570 5374 6174 272c 0a09 serGroupStat',..\n-0000f960: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO\n-0000f970: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes'\n-0000f980: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op\n-0000f990: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-0000f9a0: 2720 3d3e 2027 7573 6572 4772 6f75 7053 ' => 'userGroupS\n-0000f9b0: 7461 7446 696c 6527 2c0a 0909 0909 0920 tatFile',...... \n-0000f9c0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000f9d0: 3d3e 2027 2d2d 7573 6572 4772 6f75 7053 => '--userGroupS\n-0000f9e0: 7461 7446 696c 6527 2c0a 0909 0909 0920 tatFile',...... \n-0000f9f0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-0000fa00: 2775 7365 7247 726f 7570 5374 6174 4669 'userGroupStatFi\n-0000fa10: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '-\n-0000fa20: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n-0000fa30: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-0000fa40: 7728 272d 6e61 6d65 2720 3d3e 2027 6578 w('-name' => 'ex\n-0000fa50: 6365 7074 5375 6666 6978 272c 0a09 0909 ceptSuffix',....\n-0000fa60: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000fa70: 6e27 203d 3e20 272d 2d65 7863 6570 7453 n' => '--exceptS\n-0000fa80: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... \n-0000fa90: 2027 2d63 665f 6b65 7927 203d 3e20 2765 '-cf_key' => 'e\n-0000faa0: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',...\n-0000fab0: 0909 0920 2020 2027 2d6d 756c 7469 706c ... '-multipl\n-0000fac0: 6527 203d 3e20 2779 6573 272c 0a09 0909 e' => 'yes',....\n-0000fad0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-0000fae0: 203d 3e20 5c40 6578 6365 7074 5375 6666 => \\@exceptSuff\n-0000faf0: 6978 292c 0a09 0909 094f 7074 696f 6e2d ix),.....Option-\n-0000fb00: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-0000fb10: 2763 6f6d 7072 6573 7353 7566 6669 7827 'compressSuffix'\n-0000fb20: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000fb30: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 636f option' => '--co\n-0000fb40: 6d70 7265 7373 5375 6666 6978 272c 0a09 mpressSuffix',..\n-0000fb50: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-0000fb60: 2720 3d3e 2027 636f 6d70 7265 7373 5375 ' => 'compressSu\n-0000fb70: 6666 6978 272c 0a09 0909 0909 2020 2020 ffix',...... \n-0000fb80: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => '\n-0000fb90: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-0000fba0: 2d64 6566 6175 6c74 2720 3d3e 205b 5d29 -default' => [])\n-0000fbb0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-0000fbc0: 7728 272d 6e61 6d65 2720 3d3e 2027 6164 w('-name' => 'ad\n-0000fbd0: 6445 7863 6570 7453 7566 6669 7827 2c0a dExceptSuffix',.\n-0000fbe0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-0000fbf0: 7469 6f6e 2720 3d3e 2027 2d2d 6164 6445 tion' => '--addE\n-0000fc00: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',...\n-0000fc10: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-0000fc20: 203d 3e20 2761 6464 4578 6365 7074 5375 => 'addExceptSu\n-0000fc30: 6666 6978 272c 0a09 0909 0909 2020 2020 ffix',...... \n-0000fc40: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => '\n-0000fc50: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-0000fc60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-0000fc70: 3e20 2764 6f4e 6f74 436f 6d70 7265 7373 > 'doNotCompress\n-0000fc80: 4d44 3546 696c 6527 2c0a 0909 0909 0920 MD5File',...... \n-0000fc90: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-0000fca0: 3d3e 2027 2d2d 646f 4e6f 7443 6f6d 7072 => '--doNotCompr\n-0000fcb0: 6573 734d 4435 4669 6c65 272c 0a09 0909 essMD5File',....\n-0000fcc0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-0000fcd0: 3d3e 2027 646f 4e6f 7443 6f6d 7072 6573 => 'doNotCompres\n-0000fce0: 734d 4435 4669 6c65 272c 0a09 0909 0909 sMD5File',......\n-0000fcf0: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe\n-0000fd00: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n\n-0000fd10: 6f27 5d29 2c0a 2020 2020 2020 2020 2020 o']),. \n-0000fd20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000fd30: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne\n-0000fd40: 7728 272d 6e61 6d65 2720 3d3e 2027 6368 w('-name' => 'ch\n-0000fd50: 6d6f 644d 4435 4669 6c65 272c 0a09 0909 modMD5File',....\n-0000fd60: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-0000fd70: 6e27 203d 3e20 272d 2d63 686d 6f64 4d44 n' => '--chmodMD\n-0000fd80: 3546 696c 6527 2c0a 0909 0909 0920 2020 5File',...... \n-0000fd90: 2027 2d63 665f 6b65 7927 203d 3e20 2763 '-cf_key' => 'c\n-0000fda0: 686d 6f64 4d44 3546 696c 6527 2c0a 0909 hmodMD5File',...\n-0000fdb0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-0000fdc0: 2720 3d3e 2024 6368 6d6f 644d 4435 4669 ' => $chmodMD5Fi\n-0000fdd0: 6c65 2c0a 0909 0909 0920 2020 2027 2d70 le,...... '-p\n-0000fde0: 6174 7465 726e 2720 3d3e 2027 5c41 305b attern' => '\\A0[\n-0000fdf0: 302d 375d 7b33 2c34 7d5c 5a27 292c 0a09 0-7]{3,4}\\Z'),..\n-0000fe00: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-0000fe10: 2d6e 616d 6527 203d 3e20 2776 6572 626f -name' => 'verbo\n-0000fe20: 7365 272c 0a09 0909 0909 2020 2020 272d se',...... '-\n-0000fe30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-0000fe40: 7627 2c0a 0909 0909 0920 2020 2027 2d63 v',...... '-c\n-0000fe50: 6c5f 616c 6961 7327 203d 3e20 272d 2d76 l_alias' => '--v\n-0000fe60: 6572 626f 7365 272c 0a09 0909 0909 2020 erbose',...... \n-0000fe70: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-0000fe80: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... \n-0000fe90: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet\n-0000fea0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no\n-0000feb0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option-\n-0000fec0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-0000fed0: 2764 6562 7567 272c 0a09 0909 0909 2020 'debug',...... \n-0000fee0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-0000fef0: 3e20 272d 6427 2c0a 0909 0909 0920 2020 > '-d',...... \n-0000ff00: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-0000ff10: 272d 2d64 6562 7567 272c 0a09 0909 0909 '--debug',......\n-0000ff20: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-0000ff30: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... \n-0000ff40: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-0000ff50: 2030 2c0a 0909 0909 0920 2020 2027 2d70 0,...... '-p\n-0000ff60: 6174 7465 726e 2720 3d3e 2027 5c41 5b30 attern' => '\\A[0\n-0000ff70: 2d34 5d5c 5a27 292c 0a09 0909 094f 7074 -4]\\Z'),.....Opt\n-0000ff80: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-0000ff90: 203d 3e20 2772 6573 6574 4174 696d 6527 => 'resetAtime'\n-0000ffa0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-0000ffb0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7265 option' => '--re\n-0000ffc0: 7365 7441 7469 6d65 272c 0a09 0909 0909 setAtime',......\n-0000ffd0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-0000ffe0: 2027 7265 7365 7441 7469 6d65 272c 0a09 'resetAtime',..\n-0000fff0: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO\n-00010000: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes'\n-00010010: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op\n-00010020: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00010030: 2720 3d3e 2027 646f 4e6f 7444 656c 6574 ' => 'doNotDelet\n-00010040: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n-00010050: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00010060: 646f 4e6f 7444 656c 6574 6527 2c0a 0909 doNotDelete',...\n-00010070: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-00010080: 203d 3e20 2764 6f4e 6f74 4465 6c65 7465 => 'doNotDelete\n-00010090: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-000100a0: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => ['\n-000100b0: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),...\n-000100c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000100d0: 6e61 6d65 2720 3d3e 2027 6465 6c65 7465 name' => 'delete\n-000100e0: 4e6f 7446 696e 6973 6865 6444 6972 7327 NotFinishedDirs'\n-000100f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00010100: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6465 option' => '--de\n-00010110: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD\n-00010120: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... '\n-00010130: 2d63 665f 6b65 7927 203d 3e20 2764 656c -cf_key' => 'del\n-00010140: 6574 654e 6f74 4669 6e69 7368 6564 4469 eteNotFinishedDi\n-00010150: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '-\n-00010160: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => \n-00010170: 5b27 7965 7327 2c20 276e 6f27 5d29 2c0a ['yes', 'no']),.\n-00010180: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00010190: 272d 6e61 6d65 2720 3d3e 2027 6d61 7848 '-name' => 'maxH\n-000101a0: 6172 644c 696e 6b73 272c 0a09 0909 0909 ardLinks',......\n-000101b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-000101c0: 203d 3e20 272d 2d6d 6178 4861 7264 4c69 => '--maxHardLi\n-000101d0: 6e6b 7327 2c0a 0909 0909 0920 2020 2027 nks',...... '\n-000101e0: 2d63 665f 6b65 7927 203d 3e20 276d 6178 -cf_key' => 'max\n-000101f0: 4861 7264 4c69 6e6b 7327 2c0a 0909 0909 HardLinks',.....\n-00010200: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n-00010210: 3d3e 2030 2c0a 0909 0909 0920 2020 2027 => 0,...... '\n-00010220: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\\A\n-00010230: 5c64 2b5c 5a27 292c 0a09 0909 094f 7074 \\d+\\Z'),.....Opt\n-00010240: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00010250: 203d 3e20 276b 6565 7041 6c6c 272c 0a09 => 'keepAll',..\n-00010260: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00010270: 696f 6e27 203d 3e20 272d 2d6b 6565 7041 ion' => '--keepA\n-00010280: 6c6c 272c 0a09 0909 0909 2020 2020 272d ll',...... '-\n-00010290: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep\n-000102a0: 416c 6c27 2c0a 0909 0909 0920 2020 2027 All',...... '\n-000102b0: 2d64 6566 6175 6c74 2720 3d3e 2024 6b65 -default' => $ke\n-000102c0: 6570 416c 6c29 2c0a 0909 0909 4f70 7469 epAll),.....Opti\n-000102d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-000102e0: 3d3e 2027 6b65 6570 5765 656b 6461 7927 => 'keepWeekday'\n-000102f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00010300: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke\n-00010310: 6570 5765 656b 6461 7927 2c0a 0909 0909 epWeekday',.....\n-00010320: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00010330: 3e20 276b 6565 7057 6565 6b64 6179 272c > 'keepWeekday',\n-00010340: 0a09 0909 0909 2020 2020 272d 7175 6f74 ...... '-quot\n-00010350: 6545 7661 6c27 203d 3e20 2779 6573 2729 eEval' => 'yes')\n-00010360: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00010370: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke\n-00010380: 6570 4669 7273 744f 6659 6561 7227 2c0a epFirstOfYear',.\n-00010390: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000103a0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n-000103b0: 4669 7273 744f 6659 6561 7227 2c0a 0909 FirstOfYear',...\n-000103c0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-000103d0: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf\n-000103e0: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... \n-000103f0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00010400: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00010410: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00010420: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear',\n-00010430: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00010440: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n-00010450: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',...\n-00010460: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-00010470: 203d 3e20 276b 6565 704c 6173 744f 6659 => 'keepLastOfY\n-00010480: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... '\n-00010490: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-000104a0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-000104b0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n-000104c0: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth'\n-000104d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000104e0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke\n-000104f0: 6570 4669 7273 744f 664d 6f6e 7468 272c epFirstOfMonth',\n-00010500: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n-00010510: 6579 2720 3d3e 2027 6b65 6570 4669 7273 ey' => 'keepFirs\n-00010520: 744f 664d 6f6e 7468 272c 0a09 0909 0909 tOfMonth',......\n-00010530: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00010540: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-00010550: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00010560: 3d3e 2027 6b65 6570 4c61 7374 4f66 4d6f => 'keepLastOfMo\n-00010570: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... '\n-00010580: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00010590: 2d2d 6b65 6570 4c61 7374 4f66 4d6f 6e74 --keepLastOfMont\n-000105a0: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c\n-000105b0: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL\n-000105c0: 6173 744f 664d 6f6e 7468 272c 0a09 0909 astOfMonth',....\n-000105d0: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n-000105e0: 3e20 2779 6573 2729 2c0a 2020 2020 2020 > 'yes'),. \n-000105f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00010600: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n-00010610: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00010620: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek\n-00010630: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00010640: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f\n-00010650: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',.\n-00010660: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00010670: 7927 203d 3e20 2766 6972 7374 4461 794f y' => 'firstDayO\n-00010680: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... \n-00010690: 2027 2d64 6566 6175 6c74 2720 3d3e 2027 '-default' => '\n-000106a0: 5375 6e27 292c 0a09 0909 094f 7074 696f Sun'),.....Optio\n-000106b0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000106c0: 3e20 276b 6565 7046 6972 7374 4f66 5765 > 'keepFirstOfWe\n-000106d0: 656b 272c 0a09 0909 0909 2020 2020 272d ek',...... '-\n-000106e0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-000106f0: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek\n-00010700: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-00010710: 5f6b 6579 2720 3d3e 2027 6b65 6570 4669 _key' => 'keepFi\n-00010720: 7273 744f 6657 6565 6b27 2c0a 0909 0909 rstOfWeek',.....\n-00010730: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-00010740: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n-00010750: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00010760: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW\n-00010770: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... '\n-00010780: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00010790: 2d2d 6b65 6570 4c61 7374 4f66 5765 656b --keepLastOfWeek\n-000107a0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-000107b0: 5f6b 6579 2720 3d3e 2027 6b65 6570 4c61 _key' => 'keepLa\n-000107c0: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',......\n-000107d0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-000107e0: 2779 6573 2729 2c0a 2020 2020 2020 2020 'yes'),. \n-000107f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00010800: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00010810: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00010820: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',.\n-00010830: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00010840: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n-00010850: 4475 706c 6963 6174 6527 2c0a 0909 0909 Duplicate',.....\n-00010860: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00010870: 3e20 276b 6565 7044 7570 6c69 6361 7465 > 'keepDuplicate\n-00010880: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-00010890: 6661 756c 7427 203d 3e20 246b 6565 7044 fault' => $keepD\n-000108a0: 7570 6c69 6361 7465 292c 0a20 2020 2020 uplicate),. \n-000108b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000108c0: 2020 2020 2020 2020 2020 204f 7074 696f Optio\n-000108d0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000108e0: 3e20 276b 6565 704d 696e 4e75 6d62 6572 > 'keepMinNumber\n-000108f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00010900: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n-00010910: 6565 704d 696e 4e75 6d62 6572 272c 0a09 eepMinNumber',..\n-00010920: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-00010930: 2720 3d3e 2027 6b65 6570 4d69 6e4e 756d ' => 'keepMinNum\n-00010940: 6265 7227 2c0a 0909 0909 0920 2020 2027 ber',...... '\n-00010950: 2d64 6566 6175 6c74 2720 3d3e 2031 302c -default' => 10,\n-00010960: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-00010970: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\\A\\d+\\Z\n-00010980: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n-00010990: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000109a0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n-000109b0: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n-000109c0: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',.....\n-000109d0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-000109e0: 2720 3d3e 2027 2d2d 6b65 6570 4d61 784e ' => '--keepMaxN\n-000109f0: 756d 6265 7227 2c0a 0909 0909 0920 2020 umber',...... \n-00010a00: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k\n-00010a10: 6565 704d 6178 4e75 6d62 6572 272c 0a09 eepMaxNumber',..\n-00010a20: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-00010a30: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... \n-00010a40: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n-00010a50: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\\A\\d+\\Z'),. \n-00010a60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00010a70: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n-00010a80: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00010a90: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative\n-00010aa0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00010ab0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n-00010ac0: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',...\n-00010ad0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00010ae0: 7327 203d 3e20 272d 5227 2c0a 0909 0909 s' => '-R',.....\n-00010af0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00010b00: 3e20 276b 6565 7052 656c 6174 6976 6527 > 'keepRelative'\n-00010b10: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo\n-00010b20: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes'\n-00010b30: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n-00010b40: 616d 2720 3d3e 2027 7965 7327 292c 0a20 am' => 'yes'),. \n-00010b50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00010b60: 2020 2020 2020 2020 2020 2020 2020 204f O\n-00010b70: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00010b80: 6527 203d 3e20 2769 676e 6f72 6552 6561 e' => 'ignoreRea\n-00010b90: 6445 7272 6f72 272c 0a09 0909 0909 2020 dError',...... \n-00010ba0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00010bb0: 3e20 272d 2d69 676e 6f72 6552 6561 6445 > '--ignoreReadE\n-00010bc0: 7272 6f72 272c 0a09 0909 0909 2020 2020 rror',...... \n-00010bd0: 272d 6366 5f6b 6579 2720 3d3e 2027 6967 '-cf_key' => 'ig\n-00010be0: 6e6f 7265 5265 6164 4572 726f 7227 2c0a noreReadError',.\n-00010bf0: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no\n-00010c00: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes\n-00010c10: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O\n-00010c20: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00010c30: 6527 203d 3e20 2773 7570 7072 6573 7357 e' => 'suppressW\n-00010c40: 6172 6e69 6e67 272c 0a09 0909 0909 2020 arning',...... \n-00010c50: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00010c60: 3e20 272d 2d73 7570 7072 6573 7357 6172 > '--suppressWar\n-00010c70: 6e69 6e67 272c 0a09 0909 0909 2020 2020 ning',...... \n-00010c80: 272d 6366 5f6b 6579 2720 3d3e 2027 7375 '-cf_key' => 'su\n-00010c90: 7070 7265 7373 5761 726e 696e 6727 2c0a ppressWarning',.\n-00010ca0: 0909 0909 0920 2020 2027 2d6d 756c 7469 ..... '-multi\n-00010cb0: 706c 6527 203d 3e20 2779 6573 272c 0a09 ple' => 'yes',..\n-00010cc0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n-00010cd0: 6e27 203d 3e0a 2020 275c 4165 7863 4469 n' =>. '\\AexcDi\n-00010ce0: 725c 5a7c 5c41 6669 6c65 4368 616e 6765 r\\Z|\\AfileChange\n-00010cf0: 5c5a 7c5c 4163 7253 6572 6965 735c 5a7c \\Z|\\AcrSeries\\Z|\n-00010d00: 5c41 6861 7368 436f 6c6c 6973 696f 6e5c \\AhashCollision\\\n-00010d10: 5a7c 5c41 6669 6c65 4e61 6d65 5769 7468 Z|\\AfileNameWith\n-00010d20: 4c69 6e65 4665 6564 7c5c 4175 7365 5f44 LineFeed|\\Ause_D\n-00010d30: 425f 4669 6c65 5c5a 7c5c 4175 7365 5f4d B_File\\Z|\\Ause_M\n-00010d40: 4c44 424d 5c5a 7c5c 4175 7365 5f49 4f43 LDBM\\Z|\\Ause_IOC\n-00010d50: 6f6d 7072 6573 7342 7a69 7032 5c5a 7c5c ompressBzip2\\Z|\\\n-00010d60: 416e 6f42 6163 6b75 7046 6f72 5065 7269 AnoBackupForPeri\n-00010d70: 6f64 5c5a 2729 2c0a 0909 0909 4f70 7469 od\\Z'),.....Opti\n-00010d80: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00010d90: 3d3e 2027 7375 7070 7265 7373 496e 666f => 'suppressInfo\n-00010da0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00010db0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s\n-00010dc0: 7570 7072 6573 7349 6e66 6f27 2c0a 0909 uppressInfo',...\n-00010dd0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-00010de0: 203d 3e20 2773 7570 7072 6573 7349 6e66 => 'suppressInf\n-00010df0: 6f27 2c0a 0909 0909 0920 2020 2027 2d6d o',...... '-m\n-00010e00: 756c 7469 706c 6527 203d 3e20 2779 6573 ultiple' => 'yes\n-00010e10: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00010e20: 7474 6572 6e27 203d 3e0a 2020 275c 4172 ttern' =>. '\\Ar\n-00010e30: 6561 6443 6865 636b 5375 6d73 5c5a 2729 eadCheckSums\\Z')\n-00010e40: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00010e50: 7728 272d 6e61 6d65 2720 3d3e 2027 6c69 w('-name' => 'li\n-00010e60: 6e6b 546f 5265 6365 6e74 272c 0a09 0909 nkToRecent',....\n-00010e70: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00010e80: 6e27 203d 3e20 272d 2d6c 696e 6b54 6f52 n' => '--linkToR\n-00010e90: 6563 656e 7427 2c0a 0909 0909 0920 2020 ecent',...... \n-00010ea0: 2027 2d63 665f 6b65 7927 203d 3e20 276c '-cf_key' => 'l\n-00010eb0: 696e 6b54 6f52 6563 656e 7427 2c0a 0909 inkToRecent',...\n-00010ec0: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n-00010ed0: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O\n-00010ee0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00010ef0: 6527 203d 3e20 276c 6f67 4669 6c65 272c e' => 'logFile',\n-00010f00: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00010f10: 7074 696f 6e27 203d 3e20 272d 6c27 2c0a ption' => '-l',.\n-00010f20: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n-00010f30: 6961 7327 203d 3e20 272d 2d6c 6f67 4669 ias' => '--logFi\n-00010f40: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '-\n-00010f50: 6366 5f6b 6579 2720 3d3e 2027 6c6f 6746 cf_key' => 'logF\n-00010f60: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n-00010f70: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-00010f80: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-00010f90: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p\n-00010fa0: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',..\n-00010fb0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00010fc0: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL\n-00010fd0: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',......\n-00010fe0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-00010ff0: 2027 706c 7573 4c6f 6753 7464 6f75 7427 'plusLogStdout'\n-00011000: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl\n-00011010: 795f 6966 2720 3d3e 2027 5b6c 6f67 4669 y_if' => '[logFi\n-00011020: 6c65 5d27 2c0a 0909 0909 0920 2020 2027 le]',...... '\n-00011030: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' =>\n-00011040: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']),\n-00011050: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00011060: 2827 2d6e 616d 6527 203d 3e20 2773 7570 ('-name' => 'sup\n-00011070: 7072 6573 7354 696d 6527 2c0a 0909 0909 pressTime',.....\n-00011080: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00011090: 2720 3d3e 2027 2d2d 7375 7070 7265 7373 ' => '--suppress\n-000110a0: 5469 6d65 272c 0a09 0909 0909 2020 2020 Time',...... \n-000110b0: 272d 6366 5f6b 6579 2720 3d3e 2027 7375 '-cf_key' => 'su\n-000110c0: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',....\n-000110d0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n-000110e0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n-000110f0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n-00011100: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00011110: 3d3e 2027 6d61 7846 696c 656c 656e 272c => 'maxFilelen',\n-00011120: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00011130: 7074 696f 6e27 203d 3e20 272d 6d27 2c0a ption' => '-m',.\n-00011140: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n-00011150: 6961 7327 203d 3e20 272d 2d6d 6178 4669 ias' => '--maxFi\n-00011160: 6c65 6c65 6e27 2c0a 0909 0909 0920 2020 lelen',...... \n-00011170: 2027 2d63 665f 6b65 7927 203d 3e20 276d '-cf_key' => 'm\n-00011180: 6178 4669 6c65 6c65 6e27 2c0a 0909 0909 axFilelen',.....\n-00011190: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n-000111a0: 3d3e 2031 6536 2c0a 0909 0909 0920 2020 => 1e6,...... \n-000111b0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => '\n-000111c0: 5c41 5b65 5c64 5d2b 5c5a 272c 0a09 0909 \\A[e\\d]+\\Z',....\n-000111d0: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if'\n-000111e0: 203d 3e20 225b 6c6f 6746 696c 655d 2229 => \"[logFile]\")\n-000111f0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00011200: 7728 272d 6e61 6d65 2720 3d3e 2027 6e6f w('-name' => 'no\n-00011210: 4f66 4f6c 6446 696c 6573 272c 0a09 0909 OfOldFiles',....\n-00011220: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00011230: 6e27 203d 3e20 272d 6e27 2c0a 0909 0909 n' => '-n',.....\n-00011240: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00011250: 203d 3e20 272d 2d6e 6f4f 664f 6c64 4669 => '--noOfOldFi\n-00011260: 6c65 7327 2c0a 0909 0909 0920 2020 2027 les',...... '\n-00011270: 2d63 665f 6b65 7927 203d 3e20 276e 6f4f -cf_key' => 'noO\n-00011280: 664f 6c64 4669 6c65 7327 2c0a 0909 0909 fOldFiles',.....\n-00011290: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n-000112a0: 3d3e 2027 3527 2c0a 0909 0909 0920 2020 => '5',...... \n-000112b0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => '\n-000112c0: 5c41 5c64 2b5c 5a27 2c0a 0909 0909 0920 \\A\\d+\\Z',...... \n-000112d0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' =>\n-000112e0: 225b 6c6f 6746 696c 655d 2229 2c0a 2020 \"[logFile]\"),. \n-000112f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00011300: 2020 2020 2020 2020 2020 2020 2020 4f70 Op\n-00011310: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00011320: 2720 3d3e 2027 7361 7665 4c6f 6773 272c ' => 'saveLogs',\n-00011330: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00011340: 7074 696f 6e27 203d 3e20 272d 2d73 6176 ption' => '--sav\n-00011350: 654c 6f67 7327 2c0a 0909 0909 0920 2020 eLogs',...... \n-00011360: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's\n-00011370: 6176 654c 6f67 7327 2c0a 0909 0909 0920 aveLogs',...... \n-00011380: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' =>\n-00011390: 2022 5b6c 6f67 4669 6c65 5d22 2c0a 0909 \"[logFile]\",...\n-000113a0: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp\n-000113b0: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes',\n-000113c0: 2027 6e6f 275d 292c 0a20 2020 2020 2020 'no']),. \n-000113d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000113e0: 2020 2020 2020 2020 204f 7074 696f 6e2d Option-\n-000113f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00011400: 2763 6f6d 7072 6573 7357 6974 6827 2c0a 'compressWith',.\n-00011410: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00011420: 7469 6f6e 2720 3d3e 2027 2d2d 636f 6d70 tion' => '--comp\n-00011430: 7265 7373 5769 7468 272c 0a09 0909 0909 ressWith',......\n-00011440: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-00011450: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith',\n-00011460: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-00011470: 756c 7427 203d 3e20 2762 7a69 7032 272c ult' => 'bzip2',\n-00011480: 0a09 0909 0909 2020 2020 272d 7175 6f74 ...... '-quot\n-00011490: 6545 7661 6c27 203d 3e20 2779 6573 272c eEval' => 'yes',\n-000114a0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only\n-000114b0: 5f69 6627 203d 3e22 5b6c 6f67 4669 6c65 _if' =>\"[logFile\n-000114c0: 5d22 292c 0a09 0909 094f 7074 696f 6e2d ]\"),.....Option-\n-000114d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-000114e0: 276c 6f67 496e 4261 636b 7570 4469 7227 'logInBackupDir'\n-000114f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00011500: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6c6f option' => '--lo\n-00011510: 6749 6e42 6163 6b75 7044 6972 272c 0a09 gInBackupDir',..\n-00011520: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-00011530: 2720 3d3e 2027 6c6f 6749 6e42 6163 6b75 ' => 'logInBacku\n-00011540: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n-00011550: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n-00011560: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n-00011570: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00011580: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co\n-00011590: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku\n-000115a0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n-000115b0: 272d 636c 5f6f 7074 696f 6e27 203d 3e0a '-cl_option' =>.\n-000115c0: 0909 0909 0920 2020 2027 2d2d 636f 6d70 ..... '--comp\n-000115d0: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD\n-000115e0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '-\n-000115f0: 6366 5f6b 6579 2720 3d3e 2027 636f 6d70 cf_key' => 'comp\n-00011600: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD\n-00011610: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '-\n-00011620: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => \n-00011630: 5b27 7965 7327 2c20 276e 6f27 5d2c 0a09 ['yes', 'no'],..\n-00011640: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-00011650: 6627 203d 3e20 275b 6c6f 6749 6e42 6163 f' => '[logInBac\n-00011660: 6b75 7044 6972 5d27 292c 0a20 2020 2020 kupDir]'),. \n-00011670: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00011680: 2020 2020 2020 2020 2020 204f 7074 696f Optio\n-00011690: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000116a0: 3e20 276c 6f67 496e 4261 636b 7570 4469 > 'logInBackupDi\n-000116b0: 7246 696c 654e 616d 6527 2c0a 0909 0909 rFileName',.....\n-000116c0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-000116d0: 2720 3d3e 0a09 0909 0909 2020 2020 272d ' =>...... '-\n-000116e0: 2d6c 6f67 496e 4261 636b 7570 4469 7246 -logInBackupDirF\n-000116f0: 696c 654e 616d 6527 2c0a 0909 0909 0920 ileName',...... \n-00011700: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-00011710: 276c 6f67 496e 4261 636b 7570 4469 7246 'logInBackupDirF\n-00011720: 696c 654e 616d 6527 2c0a 0909 0909 0920 ileName',...... \n-00011730: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-00011740: 0a09 0909 0909 2020 2020 246c 6f67 496e ...... $logIn\n-00011750: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam\n-00011760: 652c 0a09 0909 0909 2020 2020 272d 6f6e e,...... '-on\n-00011770: 6c79 5f69 6627 203d 3e20 275b 6c6f 6749 ly_if' => '[logI\n-00011780: 6e42 6163 6b75 7044 6972 5d27 292c 0a09 nBackupDir]'),..\n-00011790: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-000117a0: 2d6e 616d 6527 203d 3e20 2770 726f 6772 -name' => 'progr\n-000117b0: 6573 7352 6570 6f72 7427 2c0a 0909 0909 essReport',.....\n-000117c0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-000117d0: 2720 3d3e 2027 2d2d 7072 6f67 7265 7373 ' => '--progress\n-000117e0: 5265 706f 7274 272c 0a09 0909 0909 2020 Report',...... \n-000117f0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00011800: 2027 2d50 272c 0a09 0909 0909 2020 2020 '-P',...... \n-00011810: 272d 6366 5f6b 6579 2720 3d3e 2027 7072 '-cf_key' => 'pr\n-00011820: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',..\n-00011830: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-00011840: 7427 203d 3e20 3029 2c0a 0909 0909 4f70 t' => 0),.....Op\n-00011850: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00011860: 2720 3d3e 2027 7072 696e 7444 6570 7468 ' => 'printDepth\n-00011870: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00011880: 5f6f 7074 696f 6e27 203d 3e20 272d 2d70 _option' => '--p\n-00011890: 7269 6e74 4465 7074 6827 2c0a 0909 0909 rintDepth',.....\n-000118a0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-000118b0: 203d 3e20 272d 4427 2c0a 0909 0909 0920 => '-D',...... \n-000118c0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-000118d0: 2770 7269 6e74 4465 7074 6827 2c0a 0909 'printDepth',...\n-000118e0: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp\n-000118f0: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes',\n-00011900: 2027 6e6f 275d 292c 0a23 2068 6964 6465 'no']),.# hidde\n-00011910: 6e20 6f70 7469 6f6e 730a 0909 0909 4f70 n options.....Op\n-00011920: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00011930: 2720 3d3e 2027 6d65 7267 6542 6163 6b75 ' => 'mergeBacku\n-00011940: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n-00011950: 272d 6366 5f6b 6579 2720 3d3e 2027 6d65 '-cf_key' => 'me\n-00011960: 7267 6542 6163 6b75 7044 6972 272c 0a09 rgeBackupDir',..\n-00011970: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00011980: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-00011990: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000119a0: 6d65 2720 3d3e 2027 7072 696e 7441 6c6c me' => 'printAll\n-000119b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-000119c0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d70 _option' => '--p\n-000119d0: 7269 6e74 416c 6c27 2c0a 0909 0909 0920 rintAll',...... \n-000119e0: 2020 2027 2d68 6964 6465 6e27 203d 3e20 '-hidden' => \n-000119f0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-00011a00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00011a10: 3d3e 2027 6d69 6e42 6c6f 636b 4c65 6e67 => 'minBlockLeng\n-00011a20: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n-00011a30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00011a40: 2d6d 696e 426c 6f63 6b4c 656e 6774 6827 -minBlockLength'\n-00011a50: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00011a60: 6b65 7927 203d 3e20 276d 696e 426c 6f63 key' => 'minBloc\n-00011a70: 6b4c 656e 6774 6827 2c0a 0909 0909 0920 kLength',...... \n-00011a80: 2020 2027 2d68 6964 6465 6e27 203d 3e20 '-hidden' => \n-00011a90: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n-00011aa0: 272d 6465 6661 756c 7427 203d 3e20 2463 '-default' => $c\n-00011ab0: 6865 636b 426c 6f63 6b73 4253 6d69 6e2c heckBlocksBSmin,\n-00011ac0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-00011ad0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\\A\\d+\\Z\n-00011ae0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00011af0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00011b00: 746f 6461 794f 7074 272c 0a09 0909 0909 todayOpt',......\n-00011b10: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00011b20: 203d 3e20 272d 2d74 6f64 6179 272c 0a09 => '--today',..\n-00011b30: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-00011b40: 2720 3d3e 2027 746f 6461 7927 2c0a 0909 ' => 'today',...\n-00011b50: 0909 0920 2020 2027 2d68 6964 6465 6e27 ... '-hidden'\n-00011b60: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n-00011b70: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00011b80: 2779 6573 2729 2c0a 0a23 2069 676e 6f72 'yes'),..# ignor\n-00011b90: 6520 7370 6563 6966 6965 6420 7469 6d65 e specified time\n-00011ba0: 2077 6865 6e20 636f 6d70 6169 7269 6e67 when compairing\n-00011bb0: 2066 696c 6573 3b20 706f 7373 6962 6c65 files; possible\n-00011bc0: 0a23 2076 616c 7565 7320 6172 653a 2027 .# values are: '\n-00011bd0: 6374 696d 6527 2c20 276d 7469 6d65 2720 ctime', 'mtime' \n-00011be0: 6f72 2027 6e6f 6e65 272c 2064 6566 6175 or 'none', defau\n-00011bf0: 6c74 2069 7320 276e 6f6e 6527 0a23 2053 lt is 'none'.# S\n-00011c00: 6574 7469 6e67 2074 6869 7320 7061 7261 etting this para\n-00011c10: 6d65 7465 7220 6f6e 6c79 206d 616b 6573 meter only makes\n-00011c20: 2073 656e 7365 2069 6e20 6d69 7865 640a sense in mixed.\n-00011c30: 2320 656e 7669 726f 6e6d 656e 7473 2c20 # environments, \n-00011c40: 7768 656e 206f 6e65 2074 696d 6520 6861 when one time ha\n-00011c50: 7320 7374 6f63 6861 7374 6963 2076 616c s stochastic val\n-00011c60: 7565 732e 0a20 2020 2020 2020 2020 2020 ues.. \n-00011c70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00011c80: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n-00011c90: 2827 2d6e 616d 6527 203d 3e20 2769 676e ('-name' => 'ign\n-00011ca0: 6f72 6554 696d 6527 2c0a 0909 0909 0920 oreTime',...... \n-00011cb0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00011cc0: 3d3e 2027 2d2d 6967 6e6f 7265 5469 6d65 => '--ignoreTime\n-00011cd0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-00011ce0: 5f6b 6579 2720 3d3e 2027 6967 6e6f 7265 _key' => 'ignore\n-00011cf0: 5469 6d65 272c 0a09 0909 0909 2020 2020 Time',...... \n-00011d00: 272d 6465 6661 756c 7427 203d 3e20 276e '-default' => 'n\n-00011d10: 6f6e 6527 2c0a 0909 0909 0920 2020 2027 one',...... '\n-00011d20: 2d70 6174 7465 726e 2720 3d3e 0a09 0909 -pattern' =>....\n-00011d30: 0909 2020 2020 275c 416e 6f6e 655c 5a7c .. '\\Anone\\Z|\n-00011d40: 5c41 6374 696d 655c 5a7c 5c41 6d74 696d \\Actime\\Z|\\Amtim\n-00011d50: 655c 5a27 292c 0a09 0909 094f 7074 696f e\\Z'),.....Optio\n-00011d60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00011d70: 3e20 2773 746f 7041 6674 6572 4e6f 5265 > 'stopAfterNoRe\n-00011d80: 6164 4572 726f 7273 272c 0a09 0909 0909 adErrors',......\n-00011d90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00011da0: 203d 3e0a 0909 0909 0920 2020 2027 2d2d =>...... '--\n-00011db0: 7374 6f70 4166 7465 724e 6f52 6561 6445 stopAfterNoReadE\n-00011dc0: 7272 6f72 7327 2c0a 0909 0909 0920 2020 rrors',...... \n-00011dd0: 2027 2d63 665f 6b65 7927 203d 3e0a 0909 '-cf_key' =>...\n-00011de0: 0909 0920 2020 2027 7374 6f70 4166 7465 ... 'stopAfte\n-00011df0: 724e 6f52 6561 6445 7272 6f72 7327 2c0a rNoReadErrors',.\n-00011e00: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde\n-00011e10: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',....\n-00011e20: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-00011e30: 203d 3e20 3530 3029 2c0a 0909 0909 4f70 => 500),.....Op\n-00011e40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00011e50: 2720 3d3e 2027 696e 7465 726e 616c 5069 ' => 'internalPi\n-00011e60: 7065 4275 6653 697a 6527 2c0a 0909 0909 peBufSize',.....\n-00011e70: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00011e80: 2720 3d3e 0a09 0909 0909 2020 2020 272d ' =>...... '-\n-00011e90: 2d69 6e74 6572 6e61 6c50 6970 6542 7566 -internalPipeBuf\n-00011ea0: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... \n-00011eb0: 272d 6366 5f6b 6579 2720 3d3e 0a09 0909 '-cf_key' =>....\n-00011ec0: 0909 2020 2020 2769 6e74 6572 6e61 6c50 .. 'internalP\n-00011ed0: 6970 6542 7566 5369 7a65 272c 0a09 0909 ipeBufSize',....\n-00011ee0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' \n-00011ef0: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... \n-00011f00: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-00011f10: 2027 3136 4d27 292c 0a23 2075 7365 6420 '16M'),.# used \n-00011f20: 6279 2073 746f 7265 4261 636b 7570 4d6f by storeBackupMo\n-00011f30: 756e 742e 706c 0a09 0909 094f 7074 696f unt.pl.....Optio\n-00011f40: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00011f50: 3e20 2777 7269 7465 546f 4e61 6d65 6450 > 'writeToNamedP\n-00011f60: 6970 6527 2c0a 0909 0909 0920 2020 2027 ipe',...... '\n-00011f70: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00011f80: 2d2d 7772 6974 6554 6f4e 616d 6564 5069 --writeToNamedPi\n-00011f90: 7065 272c 0a09 0909 0909 2020 2020 272d pe',...... '-\n-00011fa0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes',\n-00011fb0: 0a09 0909 0909 2020 2020 272d 6869 6464 ...... '-hidd\n-00011fc0: 656e 2720 3d3e 2027 7965 7327 292c 0a09 en' => 'yes'),..\n-00011fd0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00011fe0: 2d6e 616d 6527 203d 3e20 2773 6b69 7053 -name' => 'skipS\n-00011ff0: 796e 6327 2c0a 0909 0909 0920 2020 2027 ync',...... '\n-00012000: 2d68 6964 6465 6e27 203d 3e20 2779 6573 -hidden' => 'yes\n-00012010: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00012020: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s\n-00012030: 6b69 7053 796e 6327 290a 0909 0909 5d0a kipSync').....].\n-00012040: 0909 2020 2020 293b 0a0a 0a24 4368 6563 .. );...$Chec\n-00012050: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar\n-00012060: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \\@ARGV,. \n-00012070: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00012080: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help\n-00012090: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-000120a0: 2020 293b 0a0a 2320 4175 7377 6572 7475 );..# Auswertu\n-000120b0: 6e67 2064 6572 2050 6172 616d 6574 6572 ng der Parameter\n-000120c0: 0a6d 7920 2468 656c 7020 3d20 2443 6865 .my $help = $Che\n-000120d0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-000120e0: 686f 7574 5061 7228 2768 656c 7027 293b houtPar('help');\n-000120f0: 0a0a 6469 6520 2224 4675 6c6c 4865 6c70 ..die \"$FullHelp\n-00012100: 2220 6966 2024 6865 6c70 3b0a 0a6d 7920 \" if $help;..my \n-00012110: 2463 6f6e 6669 6746 696c 6520 3d20 2443 $configFile = $C\n-00012120: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00012130: 6974 6850 6172 2827 636f 6e66 6967 4669 ithPar('configFi\n-00012140: 6c65 2729 3b0a 6d79 2024 6765 6e65 7261 le');.my $genera\n-00012150: 7465 436f 6e66 6967 4669 6c65 203d 2024 teConfigFile = $\n-00012160: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00012170: 5769 7468 5061 7228 2767 656e 6572 6174 WithPar('generat\n-00012180: 6527 293b 0a6d 7920 2470 7269 6e74 203d e');.my $print =\n-00012190: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000121a0: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr\n-000121b0: 696e 7427 293b 0a0a 6d79 2024 6261 636b int');..my $back\n-000121c0: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa\n-000121d0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-000121e0: 2827 6261 636b 7570 4469 7227 293b 0a6d ('backupDir');.m\n-000121f0: 7920 2473 6f75 7263 6544 6972 203d 2024 y $sourceDir = $\n-00012200: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00012210: 5769 7468 5061 7228 2773 6f75 7263 6544 WithPar('sourceD\n-00012220: 6972 2729 3b0a 6d79 2024 7365 7269 6573 ir');.my $series\n-00012230: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00012240: 744f 7074 5769 7468 5061 7228 2773 6572 tOptWithPar('ser\n-00012250: 6965 7327 293b 0a6d 7920 2463 6865 636b ies');.my $check\n-00012260: 436f 6d70 7220 3d20 2443 6865 636b 5061 Compr = $CheckPa\n-00012270: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-00012280: 5061 7228 2763 6865 636b 436f 6d70 7227 Par('checkCompr'\n-00012290: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch\n-000122a0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000122b0: 7468 5061 7228 2774 6d70 6469 7227 293b thPar('tmpdir');\n-000122c0: 0a24 6c6f 636b 4669 6c65 203d 2024 4368 .$lockFile = $Ch\n-000122d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000122e0: 7468 5061 7228 276c 6f63 6b46 696c 6527 thPar('lockFile'\n-000122f0: 293b 0a6d 7920 2475 6e6c 6f63 6b42 6566 );.my $unlockBef\n-00012300: 6f72 6544 656c 203d 2024 4368 6563 6b50 oreDel = $CheckP\n-00012310: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00012320: 7228 2775 6e6c 6f63 6b42 6566 6f72 6544 r('unlockBeforeD\n-00012330: 656c 2729 3b0a 6d79 2024 6578 6365 7074 el');.my $except\n-00012340: 4469 7273 203d 2024 4368 6563 6b50 6172 Dirs = $CheckPar\n-00012350: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00012360: 2765 7863 6570 7444 6972 7327 293b 0a6d 'exceptDirs');.m\n-00012370: 7920 2469 6e63 6c75 6465 4469 7273 203d y $includeDirs =\n-00012380: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00012390: 7074 5769 7468 5061 7228 2769 6e63 6c75 ptWithPar('inclu\n-000123a0: 6465 4469 7273 2729 3b0a 6d79 2024 6578 deDirs');.my $ex\n-000123b0: 6365 7074 5275 6c65 203d 2024 4368 6563 ceptRule = $Chec\n-000123c0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-000123d0: 5061 7228 2765 7863 6570 7452 756c 6527 Par('exceptRule'\n-000123e0: 293b 0a6d 7920 2469 6e63 6c75 6465 5275 );.my $includeRu\n-000123f0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar->\n-00012400: 6765 744f 7074 5769 7468 5061 7228 2769 getOptWithPar('i\n-00012410: 6e63 6c75 6465 5275 6c65 2729 3b0a 6d79 ncludeRule');.my\n-00012420: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo\n-00012430: 6720 3d20 2443 6865 636b 5061 722d 3e67 g = $CheckPar->g\n-00012440: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00012450: 2777 7269 7465 4578 636c 7564 654c 6f67 'writeExcludeLog\n-00012460: 2729 3b0a 6d79 2024 636f 6e74 4578 6365 ');.my $contExce\n-00012470: 7074 4469 7273 4572 7220 3d20 2443 6865 ptDirsErr = $Che\n-00012480: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00012490: 686f 7574 5061 7228 2763 6f6e 7445 7863 houtPar('contExc\n-000124a0: 6570 7444 6972 7345 7272 2729 3b0a 6d79 eptDirsErr');.my\n-000124b0: 2024 6578 6365 7074 5479 7065 7320 3d20 $exceptTypes = \n-000124c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-000124d0: 7457 6974 6850 6172 2827 6578 6365 7074 tWithPar('except\n-000124e0: 5479 7065 7327 293b 0a24 6578 6365 7074 Types');.$except\n-000124f0: 5479 7065 7320 3d20 2727 2075 6e6c 6573 Types = '' unles\n-00012500: 7320 2465 7863 6570 7454 7970 6573 3b0a s $exceptTypes;.\n-00012510: 6d79 2024 6172 6368 6976 6554 7970 6573 my $archiveTypes\n-00012520: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00012530: 744f 7074 5769 7468 5061 7228 2761 7263 tOptWithPar('arc\n-00012540: 6869 7665 5479 7065 7327 293b 0a6d 7920 hiveTypes');.my \n-00012550: 2473 7065 6369 616c 5479 7065 4172 6368 $specialTypeArch\n-00012560: 6976 6572 203d 2024 4368 6563 6b50 6172 iver = $CheckPar\n-00012570: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00012580: 2773 7065 6369 616c 5479 7065 4172 6368 'specialTypeArch\n-00012590: 6976 6572 2729 3b0a 6d79 2024 676e 7563 iver');.my $gnuc\n-000125a0: 7020 3d20 2443 6865 636b 5061 722d 3e67 p = $CheckPar->g\n-000125b0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-000125c0: 2763 7049 7347 6e75 2729 3b0a 6d79 2024 'cpIsGnu');.my $\n-000125d0: 6c69 6e6b 5379 6d6c 696e 6b73 203d 2024 linkSymlinks = $\n-000125e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000125f0: 5769 7468 6f75 7450 6172 2827 6c69 6e6b WithoutPar('link\n-00012600: 5379 6d6c 696e 6b73 2729 3b0a 6d79 2024 Symlinks');.my $\n-00012610: 7072 6563 6f6d 6d61 6e64 203d 2024 4368 precommand = $Ch\n-00012620: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00012630: 7468 5061 7228 2770 7265 636f 6d6d 616e thPar('precomman\n-00012640: 6427 293b 0a6d 7920 2470 6f73 7463 6f6d d');.my $postcom\n-00012650: 6d61 6e64 203d 2024 4368 6563 6b50 6172 mand = $CheckPar\n-00012660: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00012670: 2770 6f73 7463 6f6d 6d61 6e64 2729 3b0a 'postcommand');.\n-00012680: 6d79 2024 666f 6c6c 6f77 4c69 6e6b 7320 my $followLinks \n-00012690: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000126a0: 4f70 7457 6974 6850 6172 2827 666f 6c6c OptWithPar('foll\n-000126b0: 6f77 4c69 6e6b 7327 293b 0a6d 7920 2473 owLinks');.my $s\n-000126c0: 7461 7949 6e46 696c 6553 7973 7465 6d20 tayInFileSystem \n-000126d0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000126e0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s\n-000126f0: 7461 7949 6e46 696c 6553 7973 7465 6d27 tayInFileSystem'\n-00012700: 293b 0a6d 7920 2468 6967 684c 6174 656e );.my $highLaten\n-00012710: 6379 203d 2024 4368 6563 6b50 6172 2d3e cy = $CheckPar->\n-00012720: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-00012730: 2827 6869 6768 4c61 7465 6e63 7927 293b ('highLatency');\n-00012740: 0a24 6d61 696e 3a3a 6d69 6e43 6f70 7957 .$main::minCopyW\n-00012750: 6974 6846 6f72 6b20 3d20 3020 6966 2024 ithFork = 0 if $\n-00012760: 6869 6768 4c61 7465 6e63 793b 0a6d 7920 highLatency;.my \n-00012770: 2469 676e 6f72 6550 6572 6d73 203d 2024 $ignorePerms = $\n-00012780: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00012790: 5769 7468 6f75 7450 6172 2827 6967 6e6f WithoutPar('igno\n-000127a0: 7265 5065 726d 7327 293b 0a6d 7920 2470 rePerms');.my $p\n-000127b0: 7265 7365 7276 6550 6572 6d73 203d 206e reservePerms = n\n-000127c0: 6f74 2024 6967 6e6f 7265 5065 726d 733b ot $ignorePerms;\n-000127d0: 0a6d 7920 246c 6174 654c 696e 6b73 203d .my $lateLinks =\n-000127e0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000127f0: 7074 5769 7468 6f75 7450 6172 2827 6c61 ptWithoutPar('la\n-00012800: 7465 4c69 6e6b 7327 293b 0a6d 7920 246c teLinks');.my $l\n-00012810: 6174 6543 6f6d 7072 6573 7320 3d20 2443 ateCompress = $C\n-00012820: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00012830: 6974 686f 7574 5061 7228 276c 6174 6543 ithoutPar('lateC\n-00012840: 6f6d 7072 6573 7327 293b 0a6d 7920 2461 ompress');.my $a\n-00012850: 7574 6f72 6570 6169 7220 3d20 2443 6865 utorepair = $Che\n-00012860: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00012870: 686f 7574 5061 7228 2761 7574 6f72 6570 houtPar('autorep\n-00012880: 6169 7227 293b 0a6d 7920 2463 6865 636b air');.my $check\n-00012890: 426c 6f63 6b73 5375 6666 6978 203d 2024 BlocksSuffix = $\n-000128a0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000128b0: 5769 7468 5061 7228 2263 6865 636b 426c WithPar(\"checkBl\n-000128c0: 6f63 6b73 5375 6666 6978 2229 3b0a 6d79 ocksSuffix\");.my\n-000128d0: 2024 6368 6563 6b42 6c6f 636b 7353 7566 $checkBlocksSuf\n-000128e0: 6669 784d 696e 5369 7a65 203d 2024 4368 fixMinSize = $Ch\n-000128f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00012900: 7468 5061 7228 2263 6865 636b 426c 6f63 thPar(\"checkBloc\n-00012910: 6b73 4d69 6e53 697a 6522 293b 0a6d 7920 ksMinSize\");.my \n-00012920: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff\n-00012930: 6978 4253 203d 2024 4368 6563 6b50 6172 ixBS = $CheckPar\n-00012940: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00012950: 2263 6865 636b 426c 6f63 6b73 4253 2229 \"checkBlocksBS\")\n-00012960: 3b0a 6d79 2024 6368 6563 6b42 6c6f 636b ;.my $checkBlock\n-00012970: 7343 6f6d 7072 203d 2024 4368 6563 6b50 sCompr = $CheckP\n-00012980: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00012990: 7228 2263 6865 636b 426c 6f63 6b73 436f r(\"checkBlocksCo\n-000129a0: 6d70 7222 293b 0a6d 7920 2463 6865 636b mpr\");.my $check\n-000129b0: 426c 6f63 6b73 5061 7261 6c6c 656c 203d BlocksParallel =\n-000129c0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000129d0: 7074 5769 7468 6f75 7450 6172 2822 6368 ptWithoutPar(\"ch\n-000129e0: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle\n-000129f0: 6c22 293b 0a6d 7920 2840 6368 6563 6b42 l\");.my (@checkB\n-00012a00: 6c6f 636b 7352 756c 652c 2040 6368 6563 locksRule, @chec\n-00012a10: 6b42 6c6f 636b 7342 532c 2040 6368 6563 kBlocksBS, @chec\n-00012a20: 6b42 6c6f 636b 7343 6f6d 7072 2c20 4063 kBlocksCompr, @c\n-00012a30: 6865 636b 426c 6f63 6b73 5265 6164 2c0a heckBlocksRead,.\n-00012a40: 2020 2020 4063 6865 636b 426c 6f63 6b73 @checkBlocks\n-00012a50: 5061 7261 6c6c 656c 293b 0a7b 0a20 2020 Parallel);.{. \n-00012a60: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore\n-00012a70: 6163 6820 2469 2028 302e 2e24 6e6f 426c ach $i (0..$noBl\n-00012a80: 6f63 6b52 756c 6573 2d31 290a 2020 2020 ockRules-1). \n-00012a90: 7b0a 0970 7573 6820 4063 6865 636b 426c {..push @checkBl\n-00012aa0: 6f63 6b73 5275 6c65 2c20 2443 6865 636b ocksRule, $Check\n-00012ab0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00012ac0: 6172 2822 6368 6563 6b42 6c6f 636b 7352 ar(\"checkBlocksR\n-00012ad0: 756c 6524 6922 293b 0a09 7075 7368 2040 ule$i\");..push @\n-00012ae0: 6368 6563 6b42 6c6f 636b 7342 532c 2024 checkBlocksBS, $\n-00012af0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00012b00: 5769 7468 5061 7228 2263 6865 636b 426c WithPar(\"checkBl\n-00012b10: 6f63 6b73 4253 2469 2229 3b0a 0970 7573 ocksBS$i\");..pus\n-00012b20: 6820 4063 6865 636b 426c 6f63 6b73 436f h @checkBlocksCo\n-00012b30: 6d70 722c 0a09 2443 6865 636b 5061 722d mpr,..$CheckPar-\n-00012b40: 3e67 6574 4f70 7457 6974 6850 6172 2822 >getOptWithPar(\"\n-00012b50: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr\n-00012b60: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i\");..push @che\n-00012b70: 636b 426c 6f63 6b73 5265 6164 2c20 2443 ckBlocksRead, $C\n-00012b80: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00012b90: 6974 6850 6172 2822 6368 6563 6b42 6c6f ithPar(\"checkBlo\n-00012ba0: 636b 7352 6561 6424 6922 293b 0a09 7075 cksRead$i\");..pu\n-00012bb0: 7368 2040 6368 6563 6b42 6c6f 636b 7350 sh @checkBlocksP\n-00012bc0: 6172 616c 6c65 6c2c 0a09 2443 6865 636b arallel,..$Check\n-00012bd0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00012be0: 7574 5061 7228 2263 6865 636b 426c 6f63 utPar(\"checkBloc\n-00012bf0: 6b73 5061 7261 6c6c 656c 2469 2229 3b0a ksParallel$i\");.\n-00012c00: 2020 2020 7d0a 7d0a 0a6d 7920 4063 686b }.}..my @chk\n-00012c10: 6465 7673 3b0a 6d79 2024 6368 6b64 6576 devs;.my $chkdev\n-00012c20: 7344 6972 3b0a 6d79 2024 6368 6b64 6576 sDir;.my $chkdev\n-00012c30: 7342 533b 0a6d 7920 2463 686b 6465 7673 sBS;.my $chkdevs\n-00012c40: 436f 6d70 723b 0a6d 7920 2463 686b 6465 Compr;.my $chkde\n-00012c50: 7673 5061 7261 6c6c 656c 3b0a 0a6d 7920 vsParallel;..my \n-00012c60: 2840 6368 6563 6b44 6576 6963 6573 2920 (@checkDevices) \n-00012c70: 3d20 2829 3b0a 6d79 2028 4063 6865 636b = ();.my (@check\n-00012c80: 4465 7669 6365 7344 6972 2920 3d20 2829 DevicesDir) = ()\n-00012c90: 3b0a 6d79 2028 4063 6865 636b 4465 7669 ;.my (@checkDevi\n-00012ca0: 6365 7342 5329 203d 2028 293b 0a6d 7920 cesBS) = ();.my \n-00012cb0: 2840 6368 6563 6b44 6576 6963 6573 436f (@checkDevicesCo\n-00012cc0: 6d70 7229 203d 2028 293b 0a6d 7920 2840 mpr) = ();.my (@\n-00012cd0: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara\n-00012ce0: 6c6c 656c 2920 3d20 2829 3b0a 6d79 2028 llel) = ();.my (\n-00012cf0: 4063 6865 636b 4465 7669 6365 7349 6e64 @checkDevicesInd\n-00012d00: 6578 2920 3d20 2829 3b0a 7b20 2020 2020 ex) = ();.{ \n-00012d10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00012d20: 2020 2020 2020 2020 2020 2020 2023 2323 ###\n-00012d30: 2320 6e65 7565 2042 6572 6563 686e 756e # neue Berechnun\n-00012d40: 670a 2020 2020 666f 7220 286d 7920 2469 g. for (my $i\n-00012d50: 203d 2030 203b 2024 6920 3c20 246d 6169 = 0 ; $i < $mai\n-00012d60: 6e3a 3a6e 6f42 6c6f 636b 4465 7669 6365 n::noBlockDevice\n-00012d70: 7320 3b20 2469 2b2b 290a 2020 2020 7b0a s ; $i++). {.\n-00012d80: 0923 2052 6561 6420 7661 6c75 6573 2066 .# Read values f\n-00012d90: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio\n-00012da0: 6e63 6f6d 6d61 6e64 206c 696e 650a 096d ncommand line..m\n-00012db0: 7920 2478 203d 2024 4368 6563 6b50 6172 y $x = $CheckPar\n-00012dc0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00012dd0: 2263 6865 636b 4465 7669 6365 7324 6922 \"checkDevices$i\"\n-00012de0: 293b 0a09 6d79 2040 6368 6b64 6576 7320 );..my @chkdevs \n-00012df0: 3d20 6465 6669 6e65 6428 2478 2920 3f20 = defined($x) ? \n-00012e00: 4024 7820 3a20 2829 3b0a 0924 6368 6b64 @$x : ();..$chkd\n-00012e10: 6576 7344 6972 3d20 2443 6865 636b 5061 evsDir= $CheckPa\n-00012e20: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00012e30: 2822 6368 6563 6b44 6576 6963 6573 4469 (\"checkDevicesDi\n-00012e40: 7224 6922 293b 0a23 0924 7820 3d20 2443 r$i\");.#.$x = $C\n-00012e50: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00012e60: 6974 6850 6172 2822 6368 6563 6b44 6576 ithPar(\"checkDev\n-00012e70: 6963 6573 4469 7224 6922 293b 0a23 096d icesDir$i\");.#.m\n-00012e80: 7920 2463 686b 6465 7673 4469 7220 3d20 y $chkdevsDir = \n-00012e90: 6465 6669 6e65 6428 2478 2920 3f20 2424 defined($x) ? $$\n-00012ea0: 785b 305d 203a 2022 223b 2020 2320 7767 x[0] : \"\"; # wg\n-00012eb0: 2e20 6d75 6c74 6970 6c65 0a09 6d79 2024 . multiple..my $\n-00012ec0: 6368 6b64 6576 7342 5320 3d20 2443 6865 chkdevsBS = $Che\n-00012ed0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00012ee0: 6850 6172 2822 6368 6563 6b44 6576 6963 hPar(\"checkDevic\n-00012ef0: 6573 4253 2469 2229 3b0a 096d 7920 2463 esBS$i\");..my $c\n-00012f00: 686b 6465 7673 436f 6d70 7220 3d0a 0920 hkdevsCompr =.. \n-00012f10: 2020 2024 4368 6563 6b50 6172 2d3e 6765 $CheckPar->ge\n-00012f20: 744f 7074 5769 7468 5061 7228 2263 6865 tOptWithPar(\"che\n-00012f30: 636b 4465 7669 6365 7343 6f6d 7072 2469 ckDevicesCompr$i\n-00012f40: 2229 3b0a 096d 7920 2463 686b 6465 7673 \");..my $chkdevs\n-00012f50: 5061 7261 6c6c 656c 203d 200a 0920 2020 Parallel = .. \n-00012f60: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00012f70: 7074 5769 7468 6f75 7450 6172 2822 6368 ptWithoutPar(\"ch\n-00012f80: 6563 6b44 6576 6963 6573 5061 7261 6c6c eckDevicesParall\n-00012f90: 656c 2469 2229 3b0a 0924 6368 6b64 6576 el$i\");..$chkdev\n-00012fa0: 7350 6172 616c 6c65 6c20 3d20 2463 686b sParallel = $chk\n-00012fb0: 6465 7673 5061 7261 6c6c 656c 203f 2031 devsParallel ? 1\n-00012fc0: 203a 2030 3b0a 0a09 2463 686b 6465 7673 : 0;...$chkdevs\n-00012fd0: 4253 203d 2028 263a 3a72 6576 6572 7448 BS = (&::revertH\n-00012fe0: 756d 616e 5265 6164 6162 6c65 2824 6368 umanReadable($ch\n-00012ff0: 6b64 6576 7342 5329 295b 305d 3b0a 090a kdevsBS))[0];...\n-00013000: 0966 6f72 2028 6d79 2024 6a20 3d20 3020 .for (my $j = 0 \n-00013010: 3b20 246a 203c 2040 6368 6b64 6576 7320 ; $j < @chkdevs \n-00013020: 3b20 246a 2b2b 290a 097b 0a09 2020 2020 ; $j++)..{.. \n-00013030: 7075 7368 2040 6368 6563 6b44 6576 6963 push @checkDevic\n-00013040: 6573 2c24 6368 6b64 6576 735b 246a 5d3b es,$chkdevs[$j];\n-00013050: 0a09 2020 2020 7075 7368 2040 6368 6563 .. push @chec\n-00013060: 6b44 6576 6963 6573 4469 722c 2024 6368 kDevicesDir, $ch\n-00013070: 6b64 6576 7344 6972 3b0a 0920 2020 2070 kdevsDir;.. p\n-00013080: 7573 6820 4063 6865 636b 4465 7669 6365 ush @checkDevice\n-00013090: 7342 532c 2463 686b 6465 7673 4253 3b0a sBS,$chkdevsBS;.\n-000130a0: 0920 2020 2070 7573 6820 4063 6865 636b . push @check\n-000130b0: 4465 7669 6365 7343 6f6d 7072 2c20 2463 DevicesCompr, $c\n-000130c0: 686b 6465 7673 436f 6d70 723b 0a09 2020 hkdevsCompr;.. \n-000130d0: 2020 7075 7368 2040 6368 6563 6b44 6576 push @checkDev\n-000130e0: 6963 6573 5061 7261 6c6c 656c 2c20 2463 icesParallel, $c\n-000130f0: 686b 6465 7673 5061 7261 6c6c 656c 3b3b hkdevsParallel;;\n-00013100: 0a09 2020 2020 7075 7368 2040 6368 6563 .. push @chec\n-00013110: 6b44 6576 6963 6573 496e 6465 782c 2024 kDevicesIndex, $\n-00013120: 693b 0a09 7d0a 2020 2020 7d0a 7d0a 2370 i;..}. }.}.#p\n-00013130: 7269 6e74 2022 2d2d 2d2d 2d2d 2d2d 2d2d rint \"----------\n-00013140: 2d44 4556 4943 4553 2d2d 2d2d 2d2d 2d2d -DEVICES--------\n-00013150: 2d2d 2d2d 2d2d 2d5c 6e22 3b0a 2370 7269 -------\\n\";.#pri\n-00013160: 6e74 206a 6f69 6e28 225c 7422 2c20 4063 nt join(\"\\t\", @c\n-00013170: 6865 636b 4465 7669 6365 7329 2c20 225c heckDevices), \"\\\n-00013180: 746e 6577 5c6e 223b 0a23 7072 696e 7420 tnew\\n\";.#print \n-00013190: 6a6f 696e 2822 5c74 222c 2040 6368 6563 join(\"\\t\", @chec\n-000131a0: 6b44 6576 6963 6573 4469 7229 2c20 225c kDevicesDir), \"\\\n-000131b0: 745c 746e 6577 5c6e 223b 0a23 7072 696e t\\tnew\\n\";.#prin\n-000131c0: 7420 6a6f 696e 2822 5c74 5c74 222c 2040 t join(\"\\t\\t\", @\n-000131d0: 6368 6563 6b44 6576 6963 6573 4253 292c checkDevicesBS),\n-000131e0: 225c 745c 746e 6577 5c6e 223b 0a23 7072 \"\\t\\tnew\\n\";.#pr\n-000131f0: 696e 7420 6a6f 696e 2822 5c74 5c74 222c int join(\"\\t\\t\",\n-00013200: 2040 6368 6563 6b44 6576 6963 6573 436f @checkDevicesCo\n-00013210: 6d70 7229 2c20 225c 745c 746e 6577 5c6e mpr), \"\\t\\tnew\\n\n-00013220: 223b 0a23 7072 696e 7420 6a6f 696e 2822 \";.#print join(\"\n-00013230: 5c74 5c74 222c 2040 6368 6563 6b44 6576 \\t\\t\", @checkDev\n-00013240: 6963 6573 5061 7261 6c6c 656c 292c 2022 icesParallel), \"\n-00013250: 5c74 5c74 6e65 775c 6e22 3b0a 2370 7269 \\t\\tnew\\n\";.#pri\n-00013260: 6e74 206a 6f69 6e28 225c 745c 7422 2c20 nt join(\"\\t\\t\", \n-00013270: 4063 6865 636b 4465 7669 6365 7349 6e64 @checkDevicesInd\n-00013280: 6578 292c 2022 5c74 5c74 6e65 775c 6e22 ex), \"\\t\\tnew\\n\"\n-00013290: 3b0a 0a0a 2370 7269 6e74 2022 2d2d 2d2d ;...#print \"----\n-000132a0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000132b0: 2d2d 2d2d 2d2d 5c6e 223b 0a23 7072 696e ------\\n\";.#prin\n-000132c0: 7420 2231 2063 6865 636b 4465 7669 6365 t \"1 checkDevice\n-000132d0: 7320 3d20 4063 6865 636b 4465 7669 6365 s = @checkDevice\n-000132e0: 735c 6e22 3b0a 2370 7269 6e74 2022 3120 s\\n\";.#print \"1 \n-000132f0: 6368 6563 6b44 6576 6963 6573 4469 7220 checkDevicesDir \n-00013300: 3d20 4063 6865 636b 4465 7669 6365 7344 = @checkDevicesD\n-00013310: 6972 5c6e 223b 0a23 7072 696e 7420 2231 ir\\n\";.#print \"1\n-00013320: 2063 6865 636b 4465 7669 6365 7342 5320 checkDevicesBS \n-00013330: 3d20 4063 6865 636b 4465 7669 6365 7342 = @checkDevicesB\n-00013340: 535c 6e22 3b0a 2370 7269 6e74 2022 3120 S\\n\";.#print \"1 \n-00013350: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp\n-00013360: 7220 3d20 4063 6865 636b 4465 7669 6365 r = @checkDevice\n-00013370: 7343 6f6d 7072 5c6e 223b 0a23 7072 696e sCompr\\n\";.#prin\n-00013380: 7420 2231 2063 6865 636b 4465 7669 6365 t \"1 checkDevice\n-00013390: 7350 6172 616c 6c65 6c20 3d20 4063 6865 sParallel = @che\n-000133a0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n-000133b0: 6c5c 6e22 3b0a 2370 7269 6e74 2022 3120 l\\n\";.#print \"1 \n-000133c0: 6368 6563 6b44 6576 6963 6573 496e 6465 checkDevicesInde\n-000133d0: 7820 3d20 4063 6865 636b 4465 7669 6365 x = @checkDevice\n-000133e0: 7349 6e64 6578 5c6e 223b 0a0a 2471 7565 sIndex\\n\";..$que\n-000133f0: 7565 426c 6f63 6b20 3d20 2443 6865 636b ueBlock = $Check\n-00013400: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00013410: 6172 2827 7175 6575 6542 6c6f 636b 2729 ar('queueBlock')\n-00013420: 3b0a 6d79 2024 7361 7665 5241 4d20 3d20 ;.my $saveRAM = \n-00013430: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00013440: 7457 6974 686f 7574 5061 7228 2773 6176 tWithoutPar('sav\n-00013450: 6552 414d 2729 3b0a 6d79 2024 636f 6d70 eRAM');.my $comp\n-00013460: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar\n-00013470: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00013480: 2763 6f6d 7072 6573 7327 293b 0a6d 7920 'compress');.my \n-00013490: 2475 6e63 6f6d 7072 6573 7320 3d20 2443 $uncompress = $C\n-000134a0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-000134b0: 6974 6850 6172 2827 756e 636f 6d70 7265 ithPar('uncompre\n-000134c0: 7373 2729 3b0a 2470 6f73 7466 6978 203d ss');.$postfix =\n-000134d0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000134e0: 7074 5769 7468 5061 7228 2770 6f73 7466 ptWithPar('postf\n-000134f0: 6978 2729 3b0a 6d79 2024 6e6f 436f 6d70 ix');.my $noComp\n-00013500: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar\n-00013510: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00013520: 276e 6f43 6f6d 7072 6573 7327 293b 0a24 'noCompress');.$\n-00013530: 7175 6575 6543 6f6d 7072 6573 7320 3d20 queueCompress = \n-00013540: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00013550: 7457 6974 6850 6172 2827 7175 6575 6543 tWithPar('queueC\n-00013560: 6f6d 7072 6573 7327 293b 0a24 6e6f 436f ompress');.$noCo\n-00013570: 7079 203d 2024 4368 6563 6b50 6172 2d3e py = $CheckPar->\n-00013580: 6765 744f 7074 5769 7468 5061 7228 276e getOptWithPar('n\n-00013590: 6f43 6f70 7927 293b 0a24 7175 6575 6543 oCopy');.$queueC\n-000135a0: 6f70 7920 3d20 2443 6865 636b 5061 722d opy = $CheckPar-\n-000135b0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-000135c0: 7175 6575 6543 6f70 7927 293b 0a6d 7920 queueCopy');.my \n-000135d0: 2463 6f70 7942 574c 696d 6974 203d 2024 $copyBWLimit = $\n-000135e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000135f0: 5769 7468 5061 7228 2763 6f70 7942 574c WithPar('copyBWL\n-00013600: 696d 6974 2729 3b0a 6d79 2024 7769 7468 imit');.my $with\n-00013610: 5573 6572 4772 6f75 7053 7461 7420 3d20 UserGroupStat = \n-00013620: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00013630: 7457 6974 686f 7574 5061 7228 2777 6974 tWithoutPar('wit\n-00013640: 6855 7365 7247 726f 7570 5374 6174 2729 hUserGroupStat')\n-00013650: 3b0a 6d79 2024 7573 6572 4772 6f75 7053 ;.my $userGroupS\n-00013660: 7461 7446 696c 6520 3d20 2443 6865 636b tatFile = $Check\n-00013670: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00013680: 6172 2827 7573 6572 4772 6f75 7053 7461 ar('userGroupSta\n-00013690: 7446 696c 6527 293b 0a6d 7920 2465 7863 tFile');.my $exc\n-000136a0: 6570 7453 7566 6669 7820 3d20 2443 6865 eptSuffix = $Che\n-000136b0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-000136c0: 6850 6172 2827 6578 6365 7074 5375 6666 hPar('exceptSuff\n-000136d0: 6978 2729 3b0a 6d79 2024 636f 6d70 7265 ix');.my $compre\n-000136e0: 7373 5375 6666 6978 203d 2024 4368 6563 ssSuffix = $Chec\n-000136f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00013700: 5061 7228 2763 6f6d 7072 6573 7353 7566 Par('compressSuf\n-00013710: 6669 7827 293b 0a6d 7920 2461 6464 4578 fix');.my $addEx\n-00013720: 6365 7074 5375 6666 6978 203d 2024 4368 ceptSuffix = $Ch\n-00013730: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00013740: 7468 5061 7228 2761 6464 4578 6365 7074 thPar('addExcept\n-00013750: 5375 6666 6978 2729 3b0a 246d 696e 436f Suffix');.$minCo\n-00013760: 6d70 7265 7373 5369 7a65 203d 2024 4368 mpressSize = $Ch\n-00013770: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00013780: 7468 5061 7228 276d 696e 436f 6d70 7265 thPar('minCompre\n-00013790: 7373 5369 7a65 2729 3b0a 6d79 2024 636f ssSize');.my $co\n-000137a0: 6d70 7252 756c 6520 3d20 2443 6865 636b mprRule = $Check\n-000137b0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-000137c0: 6172 2827 636f 6d70 7252 756c 6527 293b ar('comprRule');\n-000137d0: 0a6d 7920 2463 6f6d 7072 6573 734d 4435 .my $compressMD5\n-000137e0: 4669 6c65 203d 2024 4368 6563 6b50 6172 File = $CheckPar\n-000137f0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00013800: 6172 2827 646f 4e6f 7443 6f6d 7072 6573 ar('doNotCompres\n-00013810: 734d 4435 4669 6c65 2729 0a20 2020 203f sMD5File'). ?\n-00013820: 2027 6e6f 2720 3a20 2779 6573 273b 0a24 'no' : 'yes';.$\n-00013830: 6368 6d6f 644d 4435 4669 6c65 203d 2024 chmodMD5File = $\n-00013840: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00013850: 5769 7468 5061 7228 2763 686d 6f64 4d44 WithPar('chmodMD\n-00013860: 3546 696c 6527 293b 0a6d 7920 2476 6572 5File');.my $ver\n-00013870: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar\n-00013880: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00013890: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m\n-000138a0: 7920 2464 6562 7567 203d 2024 4368 6563 y $debug = $Chec\n-000138b0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-000138c0: 5061 7228 2764 6562 7567 2729 3b0a 6d79 Par('debug');.my\n-000138d0: 2024 7265 7365 7441 7469 6d65 203d 2024 $resetAtime = $\n-000138e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000138f0: 5769 7468 6f75 7450 6172 2827 7265 7365 WithoutPar('rese\n-00013900: 7441 7469 6d65 2729 3b0a 6d79 2024 646f tAtime');.my $do\n-00013910: 4e6f 7444 656c 6574 6520 3d20 2443 6865 NotDelete = $Che\n-00013920: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00013930: 686f 7574 5061 7228 2764 6f4e 6f74 4465 houtPar('doNotDe\n-00013940: 6c65 7465 2729 3b0a 6d79 2024 6465 6c65 lete');.my $dele\n-00013950: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir\n-00013960: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g\n-00013970: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00013980: 2764 656c 6574 654e 6f74 4669 6e69 7368 'deleteNotFinish\n-00013990: 6564 4469 7273 2729 3b0a 6d79 2024 6d61 edDirs');.my $ma\n-000139a0: 7848 6172 644c 696e 6b73 203d 2024 4368 xHardLinks = $Ch\n-000139b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000139c0: 7468 5061 7228 276d 6178 4861 7264 4c69 thPar('maxHardLi\n-000139d0: 6e6b 7327 293b 0a24 6b65 6570 416c 6c20 nks');.$keepAll \n-000139e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000139f0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n-00013a00: 416c 6c27 293b 0a6d 7920 246b 6565 7057 All');.my $keepW\n-00013a10: 6565 6b64 6179 203d 2024 4368 6563 6b50 eekday = $CheckP\n-00013a20: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00013a30: 7228 276b 6565 7057 6565 6b64 6179 2729 r('keepWeekday')\n-00013a40: 3b0a 246b 6565 7057 6565 6b64 6179 203d ;.$keepWeekday =\n-00013a50: 2022 4024 6b65 6570 5765 656b 6461 7922 \"@$keepWeekday\"\n-00013a60: 2069 6620 6465 6669 6e65 6420 246b 6565 if defined $kee\n-00013a70: 7057 6565 6b64 6179 3b0a 6d79 2024 6b65 pWeekday;.my $ke\n-00013a80: 6570 4669 7273 744f 6659 6561 7220 3d20 epFirstOfYear = \n-00013a90: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00013aa0: 7457 6974 6850 6172 2827 6b65 6570 4669 tWithPar('keepFi\n-00013ab0: 7273 744f 6659 6561 7227 293b 0a6d 7920 rstOfYear');.my \n-00013ac0: 246b 6565 704c 6173 744f 6659 6561 7220 $keepLastOfYear \n-00013ad0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00013ae0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n-00013af0: 4c61 7374 4f66 5965 6172 2729 3b0a 6d79 LastOfYear');.my\n-00013b00: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon\n-00013b10: 7468 203d 2024 4368 6563 6b50 6172 2d3e th = $CheckPar->\n-00013b20: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k\n-00013b30: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth'\n-00013b40: 293b 0a6d 7920 246b 6565 704c 6173 744f );.my $keepLastO\n-00013b50: 664d 6f6e 7468 203d 2024 4368 6563 6b50 fMonth = $CheckP\n-00013b60: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00013b70: 7228 276b 6565 704c 6173 744f 664d 6f6e r('keepLastOfMon\n-00013b80: 7468 2729 3b0a 6d79 2024 6669 7273 7444 th');.my $firstD\n-00013b90: 6179 4f66 5765 656b 203d 2024 4368 6563 ayOfWeek = $Chec\n-00013ba0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00013bb0: 5061 7228 2766 6972 7374 4461 794f 6657 Par('firstDayOfW\n-00013bc0: 6565 6b27 293b 0a6d 7920 246b 6565 7046 eek');.my $keepF\n-00013bd0: 6972 7374 4f66 5765 656b 203d 2024 4368 irstOfWeek = $Ch\n-00013be0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00013bf0: 7468 5061 7228 276b 6565 7046 6972 7374 thPar('keepFirst\n-00013c00: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke\n-00013c10: 6570 4c61 7374 4f66 5765 656b 203d 2024 epLastOfWeek = $\n-00013c20: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00013c30: 5769 7468 5061 7228 276b 6565 704c 6173 WithPar('keepLas\n-00013c40: 744f 6657 6565 6b27 293b 0a24 6b65 6570 tOfWeek');.$keep\n-00013c50: 4475 706c 6963 6174 6520 3d20 2443 6865 Duplicate = $Che\n-00013c60: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00013c70: 6850 6172 2827 6b65 6570 4475 706c 6963 hPar('keepDuplic\n-00013c80: 6174 6527 293b 0a6d 7920 246b 6565 704d ate');.my $keepM\n-00013c90: 696e 4e75 6d62 6572 203d 2024 4368 6563 inNumber = $Chec\n-00013ca0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00013cb0: 5061 7228 276b 6565 704d 696e 4e75 6d62 Par('keepMinNumb\n-00013cc0: 6572 2729 3b0a 6d79 2024 6b65 6570 4d61 er');.my $keepMa\n-00013cd0: 784e 756d 6265 7220 3d20 2443 6865 636b xNumber = $Check\n-00013ce0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00013cf0: 6172 2827 6b65 6570 4d61 784e 756d 6265 ar('keepMaxNumbe\n-00013d00: 7227 293b 0a6d 7920 246b 6565 7052 656c r');.my $keepRel\n-00013d10: 6174 6976 6520 3d20 2443 6865 636b 5061 ative = $CheckPa\n-00013d20: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00013d30: 2827 6b65 6570 5265 6c61 7469 7665 2729 ('keepRelative')\n-00013d40: 3b0a 6d79 2024 6967 6e6f 7265 5265 6164 ;.my $ignoreRead\n-00013d50: 4572 726f 7220 3d20 2443 6865 636b 5061 Error = $CheckPa\n-00013d60: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-00013d70: 5061 7228 2769 676e 6f72 6552 6561 6445 Par('ignoreReadE\n-00013d80: 7272 6f72 2729 3b0a 6d79 2024 7375 7070 rror');.my $supp\n-00013d90: 7265 7373 5761 726e 696e 6720 3d20 2443 ressWarning = $C\n-00013da0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00013db0: 6974 6850 6172 2827 7375 7070 7265 7373 ithPar('suppress\n-00013dc0: 5761 726e 696e 6727 293b 0a6d 7920 2473 Warning');.my $s\n-00013dd0: 7570 7072 6573 7349 6e66 6f20 3d20 2443 uppressInfo = $C\n-00013de0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00013df0: 6974 6850 6172 2827 7375 7070 7265 7373 ithPar('suppress\n-00013e00: 496e 666f 2729 3b0a 6d79 2024 6c69 6e6b Info');.my $link\n-00013e10: 546f 5265 6365 6e74 203d 2024 4368 6563 ToRecent = $Chec\n-00013e20: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00013e30: 5061 7228 276c 696e 6b54 6f52 6563 656e Par('linkToRecen\n-00013e40: 7427 293b 0a6d 7920 246c 6f67 4669 6c65 t');.my $logFile\n-00013e50: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00013e60: 744f 7074 5769 7468 5061 7228 276c 6f67 tOptWithPar('log\n-00013e70: 4669 6c65 2729 3b0a 6d79 2024 706c 7573 File');.my $plus\n-00013e80: 4c6f 6753 7464 6f75 7420 3d20 2443 6865 LogStdout = $Che\n-00013e90: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00013ea0: 686f 7574 5061 7228 2770 6c75 734c 6f67 houtPar('plusLog\n-00013eb0: 5374 646f 7574 2729 3b0a 6d79 2024 7769 Stdout');.my $wi\n-00013ec0: 7468 5469 6d65 203d 206e 6f74 2024 4368 thTime = not $Ch\n-00013ed0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00013ee0: 7468 6f75 7450 6172 2827 7375 7070 7265 thoutPar('suppre\n-00013ef0: 7373 5469 6d65 2729 3b0a 2477 6974 6854 ssTime');.$withT\n-00013f00: 696d 6520 3d20 2477 6974 6854 696d 6520 ime = $withTime \n-00013f10: 3f20 2779 6573 2720 3a20 276e 6f27 3b0a ? 'yes' : 'no';.\n-00013f20: 6d79 2024 6d61 7846 696c 656c 656e 203d my $maxFilelen =\n-00013f30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00013f40: 7074 5769 7468 5061 7228 276d 6178 4669 ptWithPar('maxFi\n-00013f50: 6c65 6c65 6e27 293b 0a6d 7920 246e 6f4f lelen');.my $noO\n-00013f60: 664f 6c64 4669 6c65 7320 3d20 2443 6865 fOldFiles = $Che\n-00013f70: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00013f80: 6850 6172 2827 6e6f 4f66 4f6c 6446 696c hPar('noOfOldFil\n-00013f90: 6573 2729 3b0a 6d79 2024 7361 7665 4c6f es');.my $saveLo\n-00013fa0: 6773 203d 2024 4368 6563 6b50 6172 2d3e gs = $CheckPar->\n-00013fb0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-00013fc0: 2827 7361 7665 4c6f 6773 2729 203f 2027 ('saveLogs') ? '\n-00013fd0: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my \n-00013fe0: 2463 6f6d 7072 6573 7357 6974 6820 3d20 $compressWith = \n-00013ff0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00014000: 7457 6974 6850 6172 2827 636f 6d70 7265 tWithPar('compre\n-00014010: 7373 5769 7468 2729 3b0a 6d79 2024 6c6f ssWith');.my $lo\n-00014020: 6749 6e42 6163 6b75 7044 6972 203d 2024 gInBackupDir = $\n-00014030: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00014040: 5769 7468 6f75 7450 6172 2827 6c6f 6749 WithoutPar('logI\n-00014050: 6e42 6163 6b75 7044 6972 2729 3b0a 6d79 nBackupDir');.my\n-00014060: 2024 636f 6d70 7265 7373 4c6f 6749 6e42 $compressLogInB\n-00014070: 6163 6b75 7044 6972 203d 0a20 2443 6865 ackupDir =. $Che\n-00014080: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00014090: 686f 7574 5061 7228 2763 6f6d 7072 6573 houtPar('compres\n-000140a0: 734c 6f67 496e 4261 636b 7570 4469 7227 sLogInBackupDir'\n-000140b0: 293b 0a24 6c6f 6749 6e42 6163 6b75 7044 );.$logInBackupD\n-000140c0: 6972 4669 6c65 4e61 6d65 203d 0a20 2443 irFileName =. $C\n-000140d0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-000140e0: 6974 6850 6172 2827 6c6f 6749 6e42 6163 ithPar('logInBac\n-000140f0: 6b75 7044 6972 4669 6c65 4e61 6d65 2729 kupDirFileName')\n-00014100: 3b0a 6d79 2024 7072 6f67 7265 7373 5265 ;.my $progressRe\n-00014110: 706f 7274 203d 2024 4368 6563 6b50 6172 port = $CheckPar\n-00014120: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00014130: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport'\n-00014140: 293b 0a6d 7920 2470 7269 6e74 4465 7074 );.my $printDept\n-00014150: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g\n-00014160: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00014170: 2770 7269 6e74 4465 7074 6827 293b 0a24 'printDepth');.$\n-00014180: 7072 696e 7444 6570 7468 203d 2024 7072 printDepth = $pr\n-00014190: 696e 7444 6570 7468 203f 2027 7965 7327 intDepth ? 'yes'\n-000141a0: 203a 2027 6e6f 273b 0a6d 7920 2840 6f74 : 'no';.my (@ot\n-000141b0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries)\n-000141c0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-000141d0: 744c 6973 7450 6172 2829 3b0a 2320 6869 tListPar();.# hi\n-000141e0: 6464 656e 206f 7074 696f 6e73 0a6d 7920 dden options.my \n-000141f0: 2470 7269 6e74 416c 6c20 3d20 2443 6865 $printAll = $Che\n-00014200: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00014210: 686f 7574 5061 7228 2770 7269 6e74 416c houtPar('printAl\n-00014220: 6c27 293b 0a24 7072 696e 7420 3d20 3120 l');.$print = 1 \n-00014230: 6966 2024 7072 696e 7441 6c6c 3b0a 6d79 if $printAll;.my\n-00014240: 2024 6d69 6e42 6c6f 636b 4c65 6e67 7468 $minBlockLength\n-00014250: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00014260: 744f 7074 5769 7468 5061 7228 276d 696e tOptWithPar('min\n-00014270: 426c 6f63 6b4c 656e 6774 6827 293b 0a6d BlockLength');.m\n-00014280: 7920 2474 6f64 6179 4f70 7420 3d20 2443 y $todayOpt = $C\n-00014290: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-000142a0: 6974 6850 6172 2827 746f 6461 794f 7074 ithPar('todayOpt\n-000142b0: 2729 3b20 2023 2066 6f72 6d61 7420 6c69 '); # format li\n-000142c0: 6b65 0a20 2020 2020 2020 2020 2020 2020 ke. \n-000142d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000142e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000142f0: 2020 2020 2020 2020 2023 2062 6163 6b75 # backu\n-00014300: 7020 6469 7220 6e61 6d65 0a6d 7920 2469 p dir name.my $i\n-00014310: 676e 6f72 6554 696d 6520 3d20 2443 6865 gnoreTime = $Che\n-00014320: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00014330: 6850 6172 2827 6967 6e6f 7265 5469 6d65 hPar('ignoreTime\n-00014340: 2729 3b0a 6d79 2024 7374 6f70 4166 7465 ');.my $stopAfte\n-00014350: 724e 6f52 6561 6445 7272 6f72 7320 3d0a rNoReadErrors =.\n-00014360: 2020 2020 2443 6865 636b 5061 722d 3e67 $CheckPar->g\n-00014370: 6574 4f70 7457 6974 6850 6172 2827 7374 etOptWithPar('st\n-00014380: 6f70 4166 7465 724e 6f52 6561 6445 7272 opAfterNoReadErr\n-00014390: 6f72 7327 293b 0a6d 7920 2469 6e74 6572 ors');.my $inter\n-000143a0: 6e61 6c50 6970 6542 7566 5369 7a65 203d nalPipeBufSize =\n-000143b0: 0a20 2020 2024 4368 6563 6b50 6172 2d3e . $CheckPar->\n-000143c0: 6765 744f 7074 5769 7468 5061 7228 2769 getOptWithPar('i\n-000143d0: 6e74 6572 6e61 6c50 6970 6542 7566 5369 nternalPipeBufSi\n-000143e0: 7a65 2729 3b0a 2469 6e74 6572 6e61 6c50 ze');.$internalP\n-000143f0: 6970 6542 7566 5369 7a65 203d 2028 263a ipeBufSize = (&:\n-00014400: 3a72 6576 6572 7448 756d 616e 5265 6164 :revertHumanRead\n-00014410: 6162 6c65 2824 696e 7465 726e 616c 5069 able($internalPi\n-00014420: 7065 4275 6653 697a 6529 295b 305d 3b0a peBufSize))[0];.\n-00014430: 6d79 2024 7772 6974 6554 6f4e 616d 6564 my $writeToNamed\n-00014440: 5069 7065 203d 2024 4368 6563 6b50 6172 Pipe = $CheckPar\n-00014450: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00014460: 2777 7269 7465 546f 4e61 6d65 6450 6970 'writeToNamedPip\n-00014470: 6527 293b 0a6d 7920 2473 6b69 7053 796e e');.my $skipSyn\n-00014480: 6320 3d20 2443 6865 636b 5061 722d 3e67 c = $CheckPar->g\n-00014490: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-000144a0: 2773 6b69 7053 796e 6327 293b 0a0a 0a75 'skipSync');...u\n-000144b0: 6e6c 6573 7320 2824 6e6f 436f 6d70 7265 nless ($noCompre\n-000144c0: 7373 290a 7b0a 2020 2020 6c6f 6361 6c20 ss).{. local \n-000144d0: 2a46 494c 453b 0a20 2020 2069 6620 286f *FILE;. if (o\n-000144e0: 7065 6e28 4649 4c45 2c20 222f 7072 6f63 pen(FILE, \"/proc\n-000144f0: 2f63 7075 696e 666f 2229 290a 2020 2020 /cpuinfo\")). \n-00014500: 7b0a 096d 7920 246c 3b0a 0924 6e6f 436f {..my $l;..$noCo\n-00014510: 6d70 7265 7373 203d 2031 3b0a 0977 6869 mpress = 1;..whi\n-00014520: 6c65 2028 246c 203d 203c 4649 4c45 3e29 le ($l = )\n-00014530: 0a09 7b0a 0920 2020 2024 6e6f 436f 6d70 ..{.. $noComp\n-00014540: 7265 7373 2b2b 2069 6620 246c 203d 7e20 ress++ if $l =~ \n-00014550: 2f70 726f 6365 7373 6f72 2f3b 0a09 7d0a /processor/;..}.\n-00014560: 0963 6c6f 7365 2846 494c 4529 3b0a 2020 .close(FILE);. \n-00014570: 2020 7d0a 2020 2020 246e 6f43 6f6d 7072 }. $noCompr\n-00014580: 6573 7320 3d20 3220 6966 2024 6e6f 436f ess = 2 if $noCo\n-00014590: 6d70 7265 7373 203c 2032 3b0a 7d0a 0a28 mpress < 2;.}..(\n-000145a0: 4065 7863 6570 7453 7566 6669 7829 203d @exceptSuffix) =\n-000145b0: 2028 293b 0a70 7573 6820 4065 7863 6570 ();.push @excep\n-000145c0: 7453 7566 6669 782c 2028 4024 6578 6365 tSuffix, (@$exce\n-000145d0: 7074 5375 6666 6978 2920 6966 2064 6566 ptSuffix) if def\n-000145e0: 696e 6564 2024 6578 6365 7074 5375 6666 ined $exceptSuff\n-000145f0: 6978 3b0a 7075 7368 2040 6578 6365 7074 ix;.push @except\n-00014600: 5375 6666 6978 2c20 2840 2461 6464 4578 Suffix, (@$addEx\n-00014610: 6365 7074 5375 6666 6978 2920 6966 2064 ceptSuffix) if d\n-00014620: 6566 696e 6564 2024 6164 6445 7863 6570 efined $addExcep\n-00014630: 7453 7566 6669 783b 0a0a 0a69 6620 2824 tSuffix;...if ($\n-00014640: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi\n-00014650: 6c65 290a 7b0a 2020 2020 6d79 2024 616e le).{. my $an\n-00014660: 7377 6572 203d 2027 7965 7327 3b0a 2020 swer = 'yes';. \n-00014670: 2020 6966 2028 2d65 2024 6765 6e65 7261 if (-e $genera\n-00014680: 7465 436f 6e66 6967 4669 6c65 290a 2020 teConfigFile). \n-00014690: 2020 7b0a 0964 6f0a 097b 0a09 2020 2020 {..do..{.. \n-000146a0: 7072 696e 7420 223c 2467 656e 6572 6174 print \"<$generat\n-000146b0: 6543 6f6e 6669 6746 696c 653e 2061 6c72 eConfigFile> alr\n-000146c0: 6561 6479 2065 7869 7374 732e 204f 7665 eady exists. Ove\n-000146d0: 7277 7269 7465 3f5c 6e22 2c0a 0920 2020 rwrite?\\n\",.. \n-000146e0: 2022 7965 7320 2f20 6e6f 202d 3e20 223b \"yes / no -> \";\n-000146f0: 0a09 2020 2020 2461 6e73 7765 7220 3d20 .. $answer = \n-00014700: 3c53 5444 494e 3e3b 0a09 2020 2020 6368 ;.. ch\n-00014710: 6f6d 7020 2461 6e73 7765 723b 0a09 7d20 omp $answer;..} \n-00014720: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n\n-00014730: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans\n-00014740: 7765 7220 6e65 2027 6e6f 2729 3b0a 2020 wer ne 'no');. \n-00014750: 2020 7d0a 2020 2020 6578 6974 2030 2069 }. exit 0 i\n-00014760: 6620 2461 6e73 7765 7220 6571 2027 6e6f f $answer eq 'no\n-00014770: 273b 0a0a 2020 2020 6c6f 6361 6c20 2a46 ';.. local *F\n-00014780: 494c 453b 0a20 2020 206f 7065 6e28 4649 ILE;. open(FI\n-00014790: 4c45 2c20 223e 2024 6765 6e65 7261 7465 LE, \"> $generate\n-000147a0: 436f 6e66 6967 4669 6c65 2229 206f 720a ConfigFile\") or.\n-000147b0: 0964 6965 2022 636f 756c 6420 6e6f 7420 .die \"could not \n-000147c0: 7772 6974 6520 746f 203c 2467 656e 6572 write to <$gener\n-000147d0: 6174 6543 6f6e 6669 6746 696c 653e 223b ateConfigFile>\";\n-000147e0: 0a20 2020 2070 7269 6e74 2046 494c 4520 . print FILE \n-000147f0: 2474 656d 706c 6174 6543 6f6e 6669 6746 $templateConfigF\n-00014800: 696c 653b 0a20 2020 2063 6c6f 7365 2846 ile;. close(F\n-00014810: 494c 4529 3b0a 2020 2020 6578 6974 2030 ILE);. exit 0\n-00014820: 3b0a 7d0a 0a69 6620 2824 7072 696e 7429 ;.}..if ($print)\n-00014830: 0a7b 0a20 2020 2024 7072 696e 7441 6c6c .{. $printAll\n-00014840: 203d 2024 7072 696e 7441 6c6c 203f 2027 = $printAll ? '\n-00014850: 7965 7327 203a 2027 6e6f 273b 0a20 2020 yes' : 'no';. \n-00014860: 2024 4368 6563 6b50 6172 2d3e 7072 696e $CheckPar->prin\n-00014870: 7428 272d 7368 6f77 4869 6464 656e 2720 t('-showHidden' \n-00014880: 3d3e 2024 7072 696e 7441 6c6c 293b 0a20 => $printAll);. \n-00014890: 2020 2065 7869 7420 303b 0a7d 0a0a 2463 exit 0;.}..$c\n-000148a0: 686d 6f64 4d44 3546 696c 6520 3d20 6f63 hmodMD5File = oc\n-000148b0: 7420 2463 686d 6f64 4d44 3546 696c 653b t $chmodMD5File;\n-000148c0: 0a0a 6d79 2028 4070 6172 293b 0a69 6620 ..my (@par);.if \n-000148d0: 2824 6c6f 6746 696c 6529 0a7b 0a20 2020 ($logFile).{. \n-000148e0: 2070 7573 6820 4070 6172 2c20 2827 2d66 push @par, ('-f\n-000148f0: 696c 6527 203d 3e20 246c 6f67 4669 6c65 ile' => $logFile\n-00014900: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. \n-00014910: 7075 7368 2040 7061 722c 2028 272d 6669 push @par, ('-fi\n-00014920: 6c65 6465 7363 7269 7074 6f72 272c 202a ledescriptor', *\n-00014930: 5354 444f 5554 293b 0a7d 0a6d 7920 2824 STDOUT);.}.my ($\n-00014940: 7072 4c6f 674b 696e 6429 203d 205b 2741 prLogKind) = ['A\n-00014950: 3a42 4547 494e 272c 0a09 0920 2020 275a :BEGIN',... 'Z\n-00014960: 3a45 4e44 272c 0a09 0920 2020 2749 3a49 :END',... 'I:I\n-00014970: 4e46 4f27 2c0a 0909 2020 2027 563a 5645 NFO',... 'V:VE\n-00014980: 5253 494f 4e27 2c0a 0909 2020 2027 573a RSION',... 'W:\n-00014990: 5741 524e 494e 4727 2c0a 0909 2020 2027 WARNING',... '\n-000149a0: 453a 4552 524f 5227 2c0a 0909 2020 2027 E:ERROR',... '\n-000149b0: 503a 5052 4f47 5245 5353 272c 0a09 0920 P:PROGRESS',... \n-000149c0: 2020 2753 3a53 5441 5449 5354 4943 272c 'S:STATISTIC',\n-000149d0: 0a09 0920 2020 2744 3a44 4542 5547 275d ... 'D:DEBUG']\n-000149e0: 3b0a 6d79 2024 7072 4c6f 6731 203d 2070 ;.my $prLog1 = p\n-000149f0: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k\n-00014a00: 696e 6427 203d 3e20 2470 724c 6f67 4b69 ind' => $prLogKi\n-00014a10: 6e64 2c0a 0909 0920 2020 4070 6172 2c0a nd,.... @par,.\n-00014a20: 0909 0920 2020 272d 7769 7468 5469 6d65 ... '-withTime\n-00014a30: 2720 3d3e 2024 7769 7468 5469 6d65 2c0a ' => $withTime,.\n-00014a40: 0909 0920 2020 272d 6d61 7846 696c 656c ... '-maxFilel\n-00014a50: 656e 2720 3d3e 2024 6d61 7846 696c 656c en' => $maxFilel\n-00014a60: 656e 2c0a 0909 0920 2020 272d 6e6f 4f66 en,.... '-noOf\n-00014a70: 4f6c 6446 696c 6573 2720 3d3e 2024 6e6f OldFiles' => $no\n-00014a80: 4f66 4f6c 6446 696c 6573 2c0a 0909 0920 OfOldFiles,.... \n-00014a90: 2020 272d 7361 7665 4c6f 6773 2720 3d3e '-saveLogs' =>\n-00014aa0: 2024 7361 7665 4c6f 6773 2c0a 0909 0920 $saveLogs,.... \n-00014ab0: 2020 272d 636f 6d70 7265 7373 5769 7468 '-compressWith\n-00014ac0: 2720 3d3e 2024 636f 6d70 7265 7373 5769 ' => $compressWi\n-00014ad0: 7468 2c0a 0909 0920 2020 272d 746d 7064 th,.... '-tmpd\n-00014ae0: 6972 2720 3d3e 2024 746d 7064 6972 293b ir' => $tmpdir);\n-00014af0: 0a24 7072 4c6f 6731 2d3e 7365 7453 746f .$prLog1->setSto\n-00014b00: 7041 744e 6f4d 6573 7361 6765 7328 272d pAtNoMessages('-\n-00014b10: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00014b20: 0920 2020 2020 272d 7374 6f70 4174 2720 . '-stopAt' \n-00014b30: 3d3e 2024 7374 6f70 4166 7465 724e 6f52 => $stopAfterNoR\n-00014b40: 6561 6445 7272 6f72 7329 3b0a 0a6d 7920 eadErrors);..my \n-00014b50: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo\n-00014b60: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new('\n-00014b70: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr\n-00014b80: 4c6f 6731 5d29 3b0a 0a69 6620 2824 706c Log1]);..if ($pl\n-00014b90: 7573 4c6f 6753 7464 6f75 7429 0a7b 0a20 usLogStdout).{. \n-00014ba0: 2020 206d 7920 2470 203d 2070 7269 6e74 my $p = print\n-00014bb0: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind'\n-00014bc0: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,.\n-00014bd0: 0909 0920 2027 2d66 696c 6564 6573 6372 ... '-filedescr\n-00014be0: 6970 746f 7227 2c20 2a53 5444 4f55 542c iptor', *STDOUT,\n-00014bf0: 0a09 0909 2020 272d 746d 7064 6972 2720 .... '-tmpdir' \n-00014c00: 3d3e 2024 746d 7064 6972 293b 0a20 2020 => $tmpdir);. \n-00014c10: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p\n-00014c20: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]);\n-00014c30: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN\n-00014c40: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. \n-00014c50: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo\n-00014c60: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' =\n-00014c70: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,...\n-00014c80: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $\n-00014c90: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-00014ca0: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil\n-00014cb0: 656c 656e 2720 3d3e 2030 2c0a 0909 0920 elen' => 0,.... \n-00014cc0: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $\n-00014cd0: 746d 7064 6972 293b 0a20 2020 2024 7072 tmpdir);. $pr\n-00014ce0: 4c6f 672d 3e61 6464 2827 2d70 724c 6f67 Log->add('-prLog\n-00014cf0: 7327 203d 3e20 5b24 6e70 5d29 3b0a 7d0a s' => [$np]);.}.\n-00014d00: 0a24 6d61 696e 3a3a 5f5f 7072 4c6f 6720 .$main::__prLog \n-00014d10: 3d20 2470 724c 6f67 3b20 2020 2320 7573 = $prLog; # us\n-00014d20: 6564 2069 6e20 7275 6c65 730a 2470 724c ed in rules.$prL\n-00014d30: 6f67 2d3e 666f 726b 2824 7265 7129 3b0a og->fork($req);.\n-00014d40: 0a0a 2840 6d61 696e 3a3a 636c 6561 6e75 ..(@main::cleanu\n-00014d50: 7029 203d 2028 2470 724c 6f67 2c20 3129 p) = ($prLog, 1)\n-00014d60: 3b0a 0a6d 7920 2825 7375 7070 7265 7373 ;..my (%suppress\n-00014d70: 5761 726e 696e 6729 3b0a 7b0a 2020 2020 Warning);.{. \n-00014d80: 6d79 2024 733b 0a20 2020 2066 6f72 6561 my $s;. forea\n-00014d90: 6368 2024 7320 2840 2473 7570 7072 6573 ch $s (@$suppres\n-00014da0: 7357 6172 6e69 6e67 290a 2020 2020 7b0a sWarning). {.\n-00014db0: 0924 7375 7070 7265 7373 5761 726e 696e .$suppressWarnin\n-00014dc0: 677b 2473 7d20 3d20 313b 0a20 2020 207d g{$s} = 1;. }\n-00014dd0: 0a7d 0a6d 7920 2825 7375 7070 7265 7373 .}.my (%suppress\n-00014de0: 496e 666f 293b 0a7b 0a20 2020 206d 7920 Info);.{. my \n-00014df0: 2473 3b0a 2020 2020 666f 7265 6163 6820 $s;. foreach \n-00014e00: 2473 2028 4024 7375 7070 7265 7373 496e $s (@$suppressIn\n-00014e10: 666f 290a 2020 2020 7b0a 0924 7375 7070 fo). {..$supp\n-00014e20: 7265 7373 496e 666f 7b24 737d 203d 2031 ressInfo{$s} = 1\n-00014e30: 3b0a 2020 2020 7d0a 7d0a 0a24 7072 4c6f ;. }.}..$prLo\n-00014e40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00014e50: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. \n-00014e60: 272d 7374 7227 203d 3e20 5b22 6d69 7373 '-str' => [\"miss\n-00014e70: 696e 6720 7061 7261 6d73 2062 6163 6b75 ing params backu\n-00014e80: 7044 6972 2c20 736f 7572 6365 4469 722c pDir, sourceDir,\n-00014e90: 2073 6572 6965 735c 6e24 4865 6c70 225d series\\n$Help\"]\n-00014ea0: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit'\n-00014eb0: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles\n-00014ec0: 7320 6465 6669 6e65 6420 2462 6163 6b75 s defined $backu\n-00014ed0: 7044 6972 2061 6e64 2064 6566 696e 6564 pDir and defined\n-00014ee0: 2024 736f 7572 6365 4469 7220 616e 6420 $sourceDir and \n-00014ef0: 6465 6669 6e65 6420 2473 6572 6965 733b defined $series;\n-00014f00: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00014f10: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00014f20: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00014f30: 3e20 5b22 6261 636b 7570 4469 7220 6469 > [\"backupDir di\n-00014f40: 7265 6374 6f72 7920 3c24 6261 636b 7570 rectory <$backup\n-00014f50: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex\n-00014f60: 6973 745c 6e24 4865 6c70 225d 2c0a 0920 ist\\n$Help\"],.. \n-00014f70: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00014f80: 3129 0a20 2020 2075 6e6c 6573 7320 2d65 1). unless -e\n-00014f90: 2024 6261 636b 7570 4469 723b 0a0a 2470 $backupDir;..$p\n-00014fa0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00014fb0: 6e64 2720 3d3e 2027 4527 2c0a 0920 2020 nd' => 'E',.. \n-00014fc0: 2020 2027 2d73 7472 2720 3d3e 205b 2262 '-str' => [\"b\n-00014fd0: 6163 6b75 7044 6972 206d 7573 7420 6265 ackupDir must be\n-00014fe0: 2074 6865 2074 6f70 206c 6576 656c 2064 the top level d\n-00014ff0: 6972 6563 746f 7279 2066 6f72 2061 6c6c irectory for all\n-00015000: 2079 6f75 7222 2c0a 0920 2020 2020 2022 your\",.. \"\n-00015010: 7374 6f72 6542 6163 6b75 7020 6261 636b storeBackup back\n-00015020: 7570 7320 6f6e 2074 6861 7420 7061 7274 ups on that part\n-00015030: 6974 696f 6e2e 2059 6f75 2063 616e 6e6f ition. You canno\n-00015040: 7420 7573 6520 272f 2720 666f 7220 7468 t use '/' for th\n-00015050: 6174 225d 2c0a 0920 2020 2020 2027 2d65 at\"],.. '-e\n-00015060: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i\n-00015070: 6620 2462 6163 6b75 7044 6972 2065 7120 f $backupDir eq \n-00015080: 272f 273b 0a0a 2470 724c 6f67 2d3e 7072 '/';..$prLog->pr\n-00015090: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000150a0: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str\n-000150b0: 2720 3d3e 205b 2273 6f75 7263 6520 6469 ' => [\"source di\n-000150c0: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source\n-000150d0: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex\n-000150e0: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist\"],.. '-\n-000150f0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n-00015100: 756e 6c65 7373 2028 2d64 2024 736f 7572 unless (-d $sour\n-00015110: 6365 4469 7229 3b0a 0a6d 7920 2474 6172 ceDir);..my $tar\n-00015120: 6765 7444 6972 203d 2022 2462 6163 6b75 getDir = \"$backu\n-00015130: 7044 6972 2f24 7365 7269 6573 223b 0a75 pDir/$series\";.u\n-00015140: 6e6c 6573 7320 282d 6520 2474 6172 6765 nless (-e $targe\n-00015150: 7444 6972 290a 7b0a 2020 2020 2470 724c tDir).{. $prL\n-00015160: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00015170: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '-\n-00015180: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-00015190: 2063 7265 6174 6520 6469 7265 6374 6f72 create director\n-000151a0: 7920 666f 7220 7365 7269 6573 203c 2474 y for series <$t\n-000151b0: 6172 6765 7444 6972 3e22 5d2c 0a09 0920 argetDir>\"],... \n-000151c0: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1)..\n-000151d0: 756e 6c65 7373 2026 3a3a 6d61 6b65 4469 unless &::makeDi\n-000151e0: 7250 6174 6843 6163 6865 2824 7461 7267 rPathCache($targ\n-000151f0: 6574 4469 722c 2024 7072 4c6f 6729 3b0a etDir, $prLog);.\n-00015200: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00015210: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n-00015220: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => \n-00015230: 5b22 6372 6561 7465 6420 6469 7265 6374 [\"created direct\n-00015240: 6f72 7920 3c24 7461 7267 6574 4469 723e ory <$targetDir>\n-00015250: 225d 290a 0975 6e6c 6573 7320 6578 6973 \"])..unless exis\n-00015260: 7473 2024 7375 7070 7265 7373 5761 726e ts $suppressWarn\n-00015270: 696e 677b 2763 7253 6572 6965 7327 7d3b ing{'crSeries'};\n-00015280: 0a7d 0a0a 2470 724c 6f67 2d3e 7072 696e .}..$prLog->prin\n-00015290: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-000152a0: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-000152b0: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => [\"cannot writ\n-000152c0: 6520 746f 2074 6172 6765 7420 6469 7265 e to target dire\n-000152d0: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi\n-000152e0: 723e 225d 2c0a 0920 2020 2020 2027 2d65 r>\"],.. '-e\n-000152f0: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u\n-00015300: 6e6c 6573 7320 282d 7720 2474 6172 6765 nless (-w $targe\n-00015310: 7444 6972 293b 0a0a 2474 6172 6765 7444 tDir);..$targetD\n-00015320: 6972 203d 2026 3a3a 6162 736f 6c75 7465 ir = &::absolute\n-00015330: 5061 7468 2824 7461 7267 6574 4469 7229 Path($targetDir)\n-00015340: 3b0a 2473 6f75 7263 6544 6972 203d 2026 ;.$sourceDir = &\n-00015350: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($\n-00015360: 736f 7572 6365 4469 7229 3b0a 2462 6163 sourceDir);.$bac\n-00015370: 6b75 7044 6972 203d 2026 3a3a 6162 736f kupDir = &::abso\n-00015380: 6c75 7465 5061 7468 2824 6261 636b 7570 lutePath($backup\n-00015390: 4469 7229 3b0a 0a24 6d61 696e 3a3a 736f Dir);..$main::so\n-000153a0: 7572 6365 4469 7220 3d20 2473 6f75 7263 urceDir = $sourc\n-000153b0: 6544 6972 3b0a 0a23 2063 6865 636b 2063 eDir;..# check c\n-000153c0: 6f6e 7369 7374 656e 6379 206f 6620 6f70 onsistency of op\n-000153d0: 7469 6f6e 7320 2761 7263 6869 7665 5479 tions 'archiveTy\n-000153e0: 7065 7327 2061 6e64 2027 7370 6563 6961 pes' and 'specia\n-000153f0: 6c54 7970 6541 7263 6869 7665 7227 0a69 lTypeArchiver'.i\n-00015400: 6620 2824 7370 6563 6961 6c54 7970 6541 f ($specialTypeA\n-00015410: 7263 6869 7665 7220 616e 640a 2020 2020 rchiver and. \n-00015420: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc\n-00015430: 6869 7665 7220 6571 2027 7461 7227 2061 hiver eq 'tar' a\n-00015440: 6e64 0a20 2020 2020 2461 7263 6869 7665 nd. $archive\n-00015450: 5479 7065 7320 3d7e 202f 532f 2920 616e Types =~ /S/) an\n-00015460: 6420 6e6f 740a 2020 2020 2465 7863 6570 d not. $excep\n-00015470: 7454 7970 6573 203d 7e20 2f53 2f29 0a7b tTypes =~ /S/).{\n-00015480: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00015490: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000154a0: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n-000154b0: 0a20 205b 2270 6c65 6173 6520 7365 7420 . [\"please set \n-000154c0: 2753 2720 666f 7220 6578 6365 7074 5479 'S' for exceptTy\n-000154d0: 7065 7320 7768 656e 2075 7369 6e67 2074 pes when using t\n-000154e0: 6172 2061 7320 7370 6563 6961 6c54 7970 ar as specialTyp\n-000154f0: 6541 7263 6869 7665 7222 5d2c 0a09 0920 eArchiver\"],... \n-00015500: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);.\n-00015510: 7d0a 0a23 2063 6865 636b 2070 726f 6772 }..# check progr\n-00015520: 6573 7352 6570 6f72 7420 7365 7474 696e essReport settin\n-00015530: 6773 0a6d 7920 2470 726f 6772 6573 7344 gs.my $progressD\n-00015540: 656c 7461 5469 6d65 203d 2030 3b0a 6966 eltaTime = 0;.if\n-00015550: 2028 2470 726f 6772 6573 7352 6570 6f72 ($progressRepor\n-00015560: 7429 0a7b 0a20 2020 206d 7920 2824 636f t).{. my ($co\n-00015570: 756e 742c 2024 7429 3b0a 2020 2020 6966 unt, $t);. if\n-00015580: 2028 2470 726f 6772 6573 7352 6570 6f72 ($progressRepor\n-00015590: 7420 3d7e 202f 2c2f 290a 2020 2020 7b0a t =~ /,/). {.\n-000155a0: 0928 2463 6f75 6e74 2c20 2474 2920 3d20 .($count, $t) = \n-000155b0: 2470 726f 6772 6573 7352 6570 6f72 7420 $progressReport \n-000155c0: 3d7e 202f 5c41 282e 2a3f 292c 282e 2a29 =~ /\\A(.*?),(.*)\n-000155d0: 5c5a 2f3b 0a09 2470 724c 6f67 2d3e 7072 \\Z/;..$prLog->pr\n-000155e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000155f0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n-00015600: 7227 203d 3e20 5b22 7772 6f6e 6720 666f r' => [\"wrong fo\n-00015610: 726d 6174 2066 6f72 206f 7074 696f 6e20 rmat for option \n-00015620: 7072 6f67 7265 7373 5265 706f 7274 2022 progressReport \"\n-00015630: 202e 0a09 0909 0920 2274 696d 6520 7065 ...... \"time pe\n-00015640: 7269 6f64 203c 2474 3e22 5d2c 0a09 0920 riod <$t>\"],... \n-00015650: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00015660: 3129 0a09 2020 2020 756e 6c65 7373 2026 1).. unless &\n-00015670: 6461 7465 546f 6f6c 733a 3a63 6865 636b dateTools::check\n-00015680: 5374 7228 272d 7374 7227 203d 3e20 2474 Str('-str' => $t\n-00015690: 293b 0a09 2470 726f 6772 6573 7344 656c );..$progressDel\n-000156a0: 7461 5469 6d65 203d 2026 6461 7465 546f taTime = &dateTo\n-000156b0: 6f6c 733a 3a73 7472 546f 5365 6328 272d ols::strToSec('-\n-000156c0: 7374 7227 203d 3e20 2474 293b 0a20 2020 str' => $t);. \n-000156d0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n-000156e0: 7b0a 0924 636f 756e 7420 3d20 2470 726f {..$count = $pro\n-000156f0: 6772 6573 7352 6570 6f72 743b 0a20 2020 gressReport;. \n-00015700: 207d 0a20 2020 2024 7072 4c6f 672d 3e70 }. $prLog->p\n-00015710: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00015720: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n-00015730: 3d3e 205b 2263 6f75 6e74 6572 203c 2463 => [\"counter <$c\n-00015740: 6f75 6e74 3e20 666f 7220 7072 6f67 7265 ount> for progre\n-00015750: 7373 2072 6570 6f72 7420 2220 2e0a 0909 ss report \" ....\n-00015760: 0920 2020 2020 226d 7573 7420 6265 2061 . \"must be a\n-00015770: 2070 6f73 6974 6976 6520 696e 7465 6765 positive intege\n-00015780: 7222 5d2c 0a09 0920 2027 2d65 7869 7427 r\"],... '-exit'\n-00015790: 203d 3e20 3129 0a09 756e 6c65 7373 2024 => 1)..unless $\n-000157a0: 636f 756e 7420 3d7e 202f 5c41 5c64 2b5c count =~ /\\A\\d+\\\n-000157b0: 5a2f 3b0a 2020 2020 2470 726f 6772 6573 Z/;. $progres\n-000157c0: 7352 6570 6f72 7420 3d20 2463 6f75 6e74 sReport = $count\n-000157d0: 3b0a 7d0a 2370 7269 6e74 2022 7072 6f67 ;.}.#print \"prog\n-000157e0: 7265 7373 5265 706f 7274 3d3c 2470 726f ressReport=<$pro\n-000157f0: 6772 6573 7352 6570 6f72 743e 2c20 7072 gressReport>, pr\n-00015800: 6f67 7265 7373 4465 6c74 6154 696d 653d ogressDeltaTime=\n-00015810: 3c24 7072 6f67 7265 7373 4465 6c74 6154 <$progressDeltaT\n-00015820: 696d 653e 5c6e 223b 0a0a 0a24 6d61 696e ime>\\n\";...$main\n-00015830: 3a3a 494f 436f 6d70 7265 7373 4469 7265 ::IOCompressDire\n-00015840: 6374 203d 2030 3b0a 7b0a 2020 2020 2320 ct = 0;.{. # \n-00015850: 6275 696c 6420 6120 7275 6c65 2066 726f build a rule fro\n-00015860: 6d20 6f70 7469 6f6e 2063 6865 636b 426c m option checkBl\n-00015870: 6f63 6b73 5375 6666 6978 0a20 2020 2069 ocksSuffix. i\n-00015880: 6620 2864 6566 696e 6564 2824 6368 6563 f (defined($chec\n-00015890: 6b42 6c6f 636b 7353 7566 6669 7829 290a kBlocksSuffix)).\n-000158a0: 2020 2020 7b0a 096d 7920 2462 7320 3d20 {..my $bs = \n-000158b0: 2826 3a3a 7265 7665 7274 4875 6d61 6e52 (&::revertHumanR\n-000158c0: 6561 6461 626c 6528 2463 6865 636b 426c eadable($checkBl\n-000158d0: 6f63 6b73 5375 6666 6978 4253 2929 5b30 ocksSuffixBS))[0\n-000158e0: 5d3b 0a09 2470 724c 6f67 2d3e 7072 696e ];..$prLog->prin\n-000158f0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00015900: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n-00015910: 203d 3e20 5b22 6368 6563 6b42 6c6f 636b => [\"checkBlock\n-00015920: 7342 5320 746f 6f20 736d 616c 6c20 2220 sBS too small \" \n-00015930: 2e20 0a09 0909 0920 2228 2463 6865 636b . ..... \"($check\n-00015940: 426c 6f63 6b73 5375 6666 6978 4253 203c BlocksSuffixBS <\n-00015950: 2024 6368 6563 6b42 6c6f 636b 7342 536d $checkBlocksBSm\n-00015960: 696e 2922 5d2c 0a09 0920 2020 2020 2027 in)\"],... '\n-00015970: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. \n-00015980: 2020 6966 2024 6273 203c 2024 6368 6563 if $bs < $chec\n-00015990: 6b42 6c6f 636b 7342 536d 696e 3b0a 0970 kBlocksBSmin;..p\n-000159a0: 7573 6820 4063 6865 636b 426c 6f63 6b73 ush @checkBlocks\n-000159b0: 4253 2c20 2463 6865 636b 426c 6f63 6b73 BS, $checkBlocks\n-000159c0: 5375 6666 6978 4253 3b0a 0970 7573 6820 SuffixBS;..push \n-000159d0: 4063 6865 636b 426c 6f63 6b73 436f 6d70 @checkBlocksComp\n-000159e0: 722c 2024 6368 6563 6b42 6c6f 636b 7343 r, $checkBlocksC\n-000159f0: 6f6d 7072 3b0a 0970 7573 6820 4063 6865 ompr;..push @che\n-00015a00: 636b 426c 6f63 6b73 5275 6c65 2c0a 095b ckBlocksRule,..[\n-00015a10: 2724 7369 7a65 203e 3d20 263a 3a53 495a '$size >= &::SIZ\n-00015a20: 4528 2227 202e 2024 6368 6563 6b42 6c6f E(\"' . $checkBlo\n-00015a30: 636b 7353 7566 6669 784d 696e 5369 7a65 cksSuffixMinSize\n-00015a40: 202e 2027 2229 2720 2c20 0a09 2027 616e . '\")' , .. 'an\n-00015a50: 6427 2c0a 0920 2724 6669 6c65 203d 7e20 d',.. '$file =~ \n-00015a60: 2f27 202e 206a 6f69 6e28 275c 5a7c 272c /' . join('\\Z|',\n-00015a70: 2040 2463 6865 636b 426c 6f63 6b73 5375 @$checkBlocksSu\n-00015a80: 6666 6978 2920 2e20 275c 5a2f 275d 3b0a ffix) . '\\Z/'];.\n-00015a90: 0970 7573 6820 4063 6865 636b 426c 6f63 .push @checkBloc\n-00015aa0: 6b73 5265 6164 2c20 756e 6465 663b 0a09 ksRead, undef;..\n-00015ab0: 7075 7368 2040 6368 6563 6b42 6c6f 636b push @checkBlock\n-00015ac0: 7350 6172 616c 6c65 6c2c 2024 6368 6563 sParallel, $chec\n-00015ad0: 6b42 6c6f 636b 7350 6172 616c 6c65 6c3b kBlocksParallel;\n-00015ae0: 0a20 2020 207d 0a0a 2020 2020 6d79 2024 . }.. my $\n-00015af0: 693b 0a20 2020 2066 6f72 6561 6368 2024 i;. foreach $\n-00015b00: 6920 2830 2e2e 4063 6865 636b 426c 6f63 i (0..@checkBloc\n-00015b10: 6b73 5275 6c65 2d31 290a 2020 2020 7b0a ksRule-1). {.\n-00015b20: 096e 6578 7420 756e 6c65 7373 2064 6566 .next unless def\n-00015b30: 696e 6564 2024 6368 6563 6b42 6c6f 636b ined $checkBlock\n-00015b40: 7352 756c 655b 2469 5d3b 0a0a 0975 6e6c sRule[$i];...unl\n-00015b50: 6573 7320 2864 6566 696e 6564 2024 6368 ess (defined $ch\n-00015b60: 6563 6b42 6c6f 636b 7342 535b 2469 5d29 eckBlocksBS[$i])\n-00015b70: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog-\n-00015b80: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00015b90: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n-00015ba0: 7227 203d 3e0a 0909 0920 205b 2262 6c6f r' =>.... [\"blo\n-00015bb0: 636b 2073 697a 6520 666f 7220 6f70 7469 ck size for opti\n-00015bc0: 6f6e 2063 6865 636b 426c 6f63 6b73 5275 on checkBlocksRu\n-00015bd0: 6c65 2469 2069 7320 6d69 7373 696e 6722 le$i is missing\"\n-00015be0: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' \n-00015bf0: 3d3e 2031 293b 0a09 7d0a 0924 666c 6167 => 1);..}..$flag\n-00015c00: 426c 6f63 6b44 6576 6963 6520 3d20 313b BlockDevice = 1;\n-00015c10: 0a09 6d79 2024 6273 3b0a 0924 6273 203d ..my $bs;..$bs =\n-00015c20: 2024 6368 6563 6b42 6c6f 636b 7342 535b $checkBlocksBS[\n-00015c30: 2469 5d20 3d0a 0920 2020 2028 263a 3a72 $i] =.. (&::r\n-00015c40: 6576 6572 7448 756d 616e 5265 6164 6162 evertHumanReadab\n-00015c50: 6c65 2824 6368 6563 6b42 6c6f 636b 7342 le($checkBlocksB\n-00015c60: 535b 2469 5d29 295b 305d 3b0a 0a09 2470 S[$i]))[0];...$p\n-00015c70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00015c80: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n-00015c90: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>...\n-00015ca0: 2020 2020 2020 5b22 6368 6563 6b42 6c6f [\"checkBlo\n-00015cb0: 636b 7342 5324 6920 746f 6f20 736d 616c cksBS$i too smal\n-00015cc0: 6c20 2824 6273 203c 2024 6368 6563 6b42 l ($bs < $checkB\n-00015cd0: 6c6f 636b 7342 536d 696e 2922 5d2c 0a09 locksBSmin)\"],..\n-00015ce0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00015cf0: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs\n-00015d00: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB\n-00015d10: 536d 696e 3b0a 0a09 2470 724c 6f67 2d3e Smin;...$prLog->\n-00015d20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00015d30: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n-00015d40: 7374 7227 203d 3e0a 0909 2020 2020 2020 str' =>... \n-00015d50: 5b22 626c 6f63 6b20 7369 7a65 2066 6f72 [\"block size for\n-00015d60: 2063 6865 636b 426c 6f63 6b73 5275 6c65 checkBlocksRule\n-00015d70: 2469 2069 7320 2220 2e20 2463 6865 636b $i is \" . $check\n-00015d80: 426c 6f63 6b73 4253 5b24 695d 202e 0a09 BlocksBS[$i] ...\n-00015d90: 0920 2020 2020 2020 222c 206d 7573 7420 . \", must \n-00015da0: 6265 2024 6d69 6e42 6c6f 636b 4c65 6e67 be $minBlockLeng\n-00015db0: 7468 206f 7220 6d6f 7265 225d 2c0a 0909 th or more\"],...\n-00015dc0: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00015dd0: 2031 290a 0920 2020 2069 6620 2462 7320 1).. if $bs \n-00015de0: 3c20 246d 696e 426c 6f63 6b4c 656e 6774 < $minBlockLengt\n-00015df0: 683b 0a0a 0924 7072 4c6f 672d 3e70 7269 h;...$prLog->pri\n-00015e00: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00015e10: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-00015e20: 2720 3d3e 0a09 0920 2020 2020 205b 2270 ' =>... [\"p\n-00015e30: 6172 616d 6574 6572 203c 2462 733e 2066 arameter <$bs> f\n-00015e40: 6f72 206f 7074 696f 6e20 6368 6563 6b42 or option checkB\n-00015e50: 6c6f 636b 7342 5325 6920 6861 7320 7772 locksBS%i has wr\n-00015e60: 6f6e 6720 666f 726d 6174 225d 2c0a 0909 ong format\"],...\n-00015e70: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00015e80: 2031 290a 0920 2020 2075 6e6c 6573 7320 1).. unless \n-00015e90: 6465 6669 6e65 6420 2462 733b 0a20 2020 defined $bs;. \n-00015ea0: 207d 0a0a 0a23 7072 696e 7420 222d 2d2d }...#print \"---\n-00015eb0: 2d2d 2d2d 2d2d 2d2d 2d2d 626c 6f63 6b73 ----------blocks\n-00015ec0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 -------------\\n\"\n-00015ed0: 3b0a 2370 7269 6e74 206a 6f69 6e28 225c ;.#print join(\"\\\n-00015ee0: 7422 2c20 2832 2c20 2463 6865 636b 426c t\", (2, $checkBl\n-00015ef0: 6f63 6b73 5375 6666 6978 2929 2c20 225c ocksSuffix)), \"\\\n-00015f00: 746e 6577 5c6e 223b 2020 2020 0a23 7072 tnew\\n\"; .#pr\n-00015f10: 696e 7420 6a6f 696e 2822 5c74 222c 2028 int join(\"\\t\", (\n-00015f20: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff\n-00015f30: 6978 4d69 6e53 697a 6529 292c 2022 5c74 ixMinSize)), \"\\t\n-00015f40: 6e65 775c 6e22 3b20 2020 200a 2370 7269 new\\n\"; .#pri\n-00015f50: 6e74 206a 6f69 6e28 225c 7422 2c20 2824 nt join(\"\\t\", ($\n-00015f60: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi\n-00015f70: 7842 5329 292c 2022 5c74 6e65 775c 6e22 xBS)), \"\\tnew\\n\"\n-00015f80: 3b20 2020 200a 2370 7269 6e74 206a 6f69 ; .#print joi\n-00015f90: 6e28 225c 7422 2c20 2824 6368 6563 6b42 n(\"\\t\", ($checkB\n-00015fa0: 6c6f 636b 7343 6f6d 7072 2929 2c20 225c locksCompr)), \"\\\n-00015fb0: 746e 6577 5c6e 223b 2020 2020 0a23 7072 tnew\\n\"; .#pr\n-00015fc0: 696e 7420 6a6f 696e 2822 5c74 222c 2028 int join(\"\\t\", (\n-00015fd0: 2463 6865 636b 426c 6f63 6b73 5061 7261 $checkBlocksPara\n-00015fe0: 6c6c 656c 2929 2c20 225c 746e 6577 5c6e llel)), \"\\tnew\\n\n-00015ff0: 223b 2020 2020 0a23 7072 696e 7420 222d \"; .#print \"-\n-00016000: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 626c 6f63 ------------bloc\n-00016010: 6b73 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c ks-------------\\\n-00016020: 6e22 3b0a 2370 7269 6e74 2022 6368 6563 n\";.#print \"chec\n-00016030: 6b42 6c6f 636b 7352 756c 6520 3d20 4063 kBlocksRule = @c\n-00016040: 6865 636b 426c 6f63 6b73 5275 6c65 5c6e heckBlocksRule\\n\n-00016050: 223b 0a23 7072 696e 7420 2263 6865 636b \";.#print \"check\n-00016060: 426c 6f63 6b73 436f 6d70 7220 3d20 4063 BlocksCompr = @c\n-00016070: 6865 636b 426c 6f63 6b73 436f 6d70 725c heckBlocksCompr\\\n-00016080: 6e22 3b0a 2370 7269 6e74 2022 6368 6563 n\";.#print \"chec\n-00016090: 6b42 6c6f 636b 7352 6561 6420 3d20 4063 kBlocksRead = @c\n-000160a0: 6865 636b 426c 6f63 6b73 5265 6164 5c6e heckBlocksRead\\n\n-000160b0: 223b 0a23 7072 696e 7420 2263 6865 636b \";.#print \"check\n-000160c0: 426c 6f63 6b73 5061 7261 6c6c 656c 203d BlocksParallel =\n-000160d0: 2040 6368 6563 6b42 6c6f 636b 7350 6172 @checkBlocksPar\n-000160e0: 616c 6c65 6c5c 6e22 3b0a 0a20 2020 200a allel\\n\";.. .\n-000160f0: 0a20 2020 206d 7920 2840 6368 6563 6b42 . my (@checkB\n-00016100: 6c6f 636b 7352 756c 652c 2040 6368 6b44 locksRule, @chkD\n-00016110: 6576 6963 6573 4469 722c 2040 6368 6b44 evicesDir, @chkD\n-00016120: 6576 6963 6573 4253 2c20 4063 686b 4465 evicesBS, @chkDe\n-00016130: 7669 6365 7343 6f6d 7072 2c0a 0940 6368 vicesCompr,..@ch\n-00016140: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel\n-00016150: 293b 0a20 2020 2066 6f72 6561 6368 2024 );. foreach $\n-00016160: 6920 2830 2e2e 4063 6865 636b 4465 7669 i (0..@checkDevi\n-00016170: 6365 732d 3129 0a20 2020 207b 0a09 6e65 ces-1). {..ne\n-00016180: 7874 2075 6e6c 6573 7320 2463 6865 636b xt unless $check\n-00016190: 4465 7669 6365 735b 2469 5d3b 0a09 6d79 Devices[$i];..my\n-000161a0: 2028 2475 6964 2c20 4067 6964 2920 3d20 ($uid, @gid) = \n-000161b0: 2026 3a3a 7569 645f 6769 6428 293b 0a09 &::uid_gid();..\n-000161c0: 6966 2028 2475 6964 203e 2030 2061 6e64 if ($uid > 0 and\n-000161d0: 2024 6769 645b 305d 203e 2030 290a 097b $gid[0] > 0)..{\n-000161e0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-000161f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00016200: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n-00016210: 3d3e 0a09 0909 2020 5b22 796f 7520 6d75 =>.... [\"you mu\n-00016220: 7374 2068 6176 6520 726f 6f74 2070 6572 st have root per\n-00016230: 6d69 7373 696f 6e73 2074 6f20 7573 6520 missions to use \n-00016240: 6f70 7469 6f6e 203c 6368 6563 6b44 6576 option \"]);.. \n-00016260: 2065 7869 7420 313b 0a09 7d0a 090a 0975 exit 1;..}....u\n-00016270: 6e6c 6573 7320 2864 6566 696e 6564 2024 nless (defined $\n-00016280: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$\n-00016290: 695d 290a 097b 0a09 2020 2020 2470 724c i])..{.. $prL\n-000162a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000162b0: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-000162c0: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-000162d0: 626c 6f63 6b20 7369 7a65 2066 6f72 206f block size for o\n-000162e0: 7074 696f 6e20 6368 6563 6b44 6576 6963 ption checkDevic\n-000162f0: 6573 2469 2069 7320 6d69 7373 696e 6722 es$i is missing\"\n-00016300: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' \n-00016310: 3d3e 2031 293b 0a09 7d0a 0924 666c 6167 => 1);..}..$flag\n-00016320: 426c 6f63 6b44 6576 6963 6520 3d20 313b BlockDevice = 1;\n-00016330: 0a09 6d79 2024 6273 3b0a 0924 6273 203d ..my $bs;..$bs =\n-00016340: 2024 6368 6563 6b44 6576 6963 6573 4253 $checkDevicesBS\n-00016350: 5b24 695d 203d 0a09 2020 2020 2826 3a3a [$i] =.. (&::\n-00016360: 7265 7665 7274 4875 6d61 6e52 6561 6461 revertHumanReada\n-00016370: 626c 6528 2463 6865 636b 4465 7669 6365 ble($checkDevice\n-00016380: 7342 535b 2469 5d29 295b 305d 3b0a 0a09 sBS[$i]))[0];...\n-00016390: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-000163a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-000163b0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n-000163c0: 0909 2020 2020 2020 5b22 6368 6563 6b44 .. [\"checkD\n-000163d0: 6576 6963 6573 4253 2469 2074 6f6f 2073 evicesBS$i too s\n-000163e0: 6d61 6c6c 2028 2462 7320 3c20 2463 6865 mall ($bs < $che\n-000163f0: 636b 426c 6f63 6b73 4253 6d69 6e29 225d ckBlocksBSmin)\"]\n-00016400: 2c0a 0909 2020 2020 2020 272d 6578 6974 ,... '-exit\n-00016410: 2720 3d3e 2031 290a 0920 2020 2069 6620 ' => 1).. if \n-00016420: 2462 7320 3c20 2463 6865 636b 426c 6f63 $bs < $checkBloc\n-00016430: 6b73 4253 6d69 6e3b 0a0a 0924 7072 4c6f ksBSmin;...$prLo\n-00016440: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00016450: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n-00016460: 2027 2d73 7472 2720 3d3e 0a09 0920 2020 '-str' =>... \n-00016470: 2020 205b 2262 6c6f 636b 2073 697a 6520 [\"block size \n-00016480: 666f 7220 6368 6563 6b44 6576 6963 6573 for checkDevices\n-00016490: 2469 2069 7320 2220 2e20 2463 6865 636b $i is \" . $check\n-000164a0: 4465 7669 6365 7342 535b 2469 5d20 2e0a DevicesBS[$i] ..\n-000164b0: 0909 2020 2020 2020 2022 2c20 6d75 7374 .. \", must\n-000164c0: 2062 6520 246d 696e 426c 6f63 6b4c 656e be $minBlockLen\n-000164d0: 6774 6820 6f72 206d 6f72 6522 5d2c 0a09 gth or more\"],..\n-000164e0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-000164f0: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs\n-00016500: 203c 2024 6d69 6e42 6c6f 636b 4c65 6e67 < $minBlockLeng\n-00016510: 7468 3b0a 0a09 2470 724c 6f67 2d3e 7072 th;...$prLog->pr\n-00016520: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00016530: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n-00016540: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [\"\n-00016550: 7061 7261 6d65 7465 7220 3c24 6273 3e20 parameter <$bs> \n-00016560: 666f 7220 6f70 7469 6f6e 2063 6865 636b for option check\n-00016570: 4465 7669 6365 7342 5325 6920 6861 7320 DevicesBS%i has \n-00016580: 7772 6f6e 6720 666f 726d 6174 225d 2c0a wrong format\"],.\n-00016590: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n-000165a0: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles\n-000165b0: 7320 6465 6669 6e65 6420 2462 733b 0a0a s defined $bs;..\n-000165c0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-000165d0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000165e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000165f0: 0a09 0920 2020 2020 205b 226f 7074 696f ... [\"optio\n-00016600: 6e20 6368 6563 6b44 6576 6963 6573 4469 n checkDevicesDi\n-00016610: 7224 6920 6e6f 7420 7365 7422 5d2c 0a09 r$i not set\"],..\n-00016620: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00016630: 3e20 3129 0a09 2020 2020 756e 6c65 7373 > 1).. unless\n-00016640: 2064 6566 696e 6564 2024 6368 6563 6b44 defined $checkD\n-00016650: 6576 6963 6573 4469 725b 2469 5d3b 0a0a evicesDir[$i];..\n-00016660: 096d 7920 2464 6576 4c69 7374 203d 2024 .my $devList = $\n-00016670: 6368 6563 6b44 6576 6963 6573 5b24 695d checkDevices[$i]\n-00016680: 3b0a 096d 7920 2464 6576 4469 7220 3d20 ;..my $devDir = \n-00016690: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir\n-000166a0: 5b24 695d 3b0a 096d 7920 246c 6173 7444 [$i];..my $lastD\n-000166b0: 6576 4469 7220 3d20 2463 6865 636b 4465 evDir = $checkDe\n-000166c0: 7669 6365 7344 6972 5b24 695d 3b0a 2020 vicesDir[$i];. \n-000166d0: 2020 7d0a 0a23 7072 696e 7420 2263 6865 }..#print \"che\n-000166e0: 636b 4465 7669 6365 7320 3d20 4063 6865 ckDevices = @che\n-000166f0: 636b 4465 7669 6365 735c 6e22 3b0a 2370 ckDevices\\n\";.#p\n-00016700: 7269 6e74 2022 6368 6563 6b44 6576 6963 rint \"checkDevic\n-00016710: 6573 4469 7220 3d20 4063 6865 636b 4465 esDir = @checkDe\n-00016720: 7669 6365 7344 6972 5c6e 223b 0a23 7072 vicesDir\\n\";.#pr\n-00016730: 696e 7420 2263 6865 636b 4465 7669 6365 int \"checkDevice\n-00016740: 7342 5320 3d20 4063 6865 636b 4465 7669 sBS = @checkDevi\n-00016750: 6365 7342 535c 6e22 3b0a 2370 7269 6e74 cesBS\\n\";.#print\n-00016760: 2022 6368 6563 6b44 6576 6963 6573 436f \"checkDevicesCo\n-00016770: 6d70 7220 3d20 4063 6865 636b 4465 7669 mpr = @checkDevi\n-00016780: 6365 7343 6f6d 7072 5c6e 223b 0a23 7072 cesCompr\\n\";.#pr\n-00016790: 696e 7420 2263 6865 636b 4465 7669 6365 int \"checkDevice\n-000167a0: 7350 6172 616c 6c65 6c20 3d20 4063 6865 sParallel = @che\n-000167b0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle\n-000167c0: 6c5c 6e22 3b0a 0a20 2020 200a 2020 2020 l\\n\";.. . \n-000167d0: 6966 2028 2840 6368 6563 6b42 6c6f 636b if ((@checkBlock\n-000167e0: 7352 756c 6520 6f72 2040 6368 6563 6b44 sRule or @checkD\n-000167f0: 6576 6963 6573 2920 616e 640a 0924 636f evices) and..$co\n-00016800: 6d70 7265 7373 5b30 5d20 6571 2027 627a mpress[0] eq 'bz\n-00016810: 6970 3227 290a 2020 2020 7b0a 0965 7661 ip2'). {..eva\n-00016820: 6c20 2275 7365 2049 4f3a 3a43 6f6d 7072 l \"use IO::Compr\n-00016830: 6573 733a 3a42 7a69 7032 2071 7728 627a ess::Bzip2 qw(bz\n-00016840: 6970 3229 223b 0a09 6966 2028 2440 290a ip2)\";..if ($@).\n-00016850: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog->\n-00016860: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00016870: 2027 5727 2c0a 0909 0920 2027 2d73 7472 'W',.... '-str\n-00016880: 2720 3d3e 0a09 0909 2020 5b22 706c 6561 ' =>.... [\"plea\n-00016890: 7365 2069 6e73 7461 6c6c 2049 4f3a 3a43 se install IO::C\n-000168a0: 6f6d 7072 6573 733a 3a42 7a69 7032 2066 ompress::Bzip2 f\n-000168b0: 726f 6d20 2220 2e0a 0909 0920 2020 2243 rom \" ..... \"C\n-000168c0: 5041 4e20 666f 7220 6265 7474 6572 2070 PAN for better p\n-000168d0: 6572 666f 726d 616e 6365 225d 290a 0909 erformance\"])...\n-000168e0: 756e 6c65 7373 2024 7375 7070 7265 7373 unless $suppress\n-000168f0: 5761 726e 696e 677b 2775 7365 5f49 4f43 Warning{'use_IOC\n-00016900: 6f6d 7072 6573 7342 7a69 7032 277d 3b0a ompressBzip2'};.\n-00016910: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. \n-00016920: 2024 6d61 696e 3a3a 494f 436f 6d70 7265 $main::IOCompre\n-00016930: 7373 4469 7265 6374 203d 2031 3b0a 097d ssDirect = 1;..}\n-00016940: 0a20 2020 207d 0a7d 0a0a 2470 724c 6f67 . }.}..$prLog\n-00016950: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00016960: 3d3e 2027 4127 2c0a 0920 2020 2020 2027 => 'A',.. '\n-00016970: 2d73 7472 2720 3d3e 205b 2262 6163 6b69 -str' => [\"backi\n-00016980: 6e67 2075 7020 6469 7265 6374 6f72 7920 ng up directory \n-00016990: 3c24 736f 7572 6365 4469 723e 2074 6f20 <$sourceDir> to \n-000169a0: 3c24 7461 7267 6574 4469 723e 225d 293b <$targetDir>\"]);\n-000169b0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-000169c0: 2d6b 696e 6427 203d 3e20 2756 272c 0a09 -kind' => 'V',..\n-000169d0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-000169e0: 5b22 7374 6f72 6542 6163 6b75 702e 706c [\"storeBackup.pl\n-000169f0: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA\n-00016a00: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION\"]);.\n-00016a10: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00016a20: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n-00016a30: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00016a40: 5b22 6f70 7469 6f6e 205c 2263 6f70 7942 [\"option \\\"copyB\n-00016a50: 574c 696d 6974 5c22 2069 7320 6465 7072 WLimit\\\" is depr\n-00016a60: 6563 6174 6564 2c20 706c 6561 7365 2022 ecated, please \"\n-00016a70: 202e 0a09 0909 2022 7265 6d6f 7665 2066 ..... \"remove f\n-00016a80: 726f 6d20 796f 7572 2063 6f6e 6669 6775 rom your configu\n-00016a90: 7261 7469 6f6e 225d 290a 2020 2020 6966 ration\"]). if\n-00016aa0: 2064 6566 696e 6564 2024 636f 7079 4257 defined $copyBW\n-00016ab0: 4c69 6d69 743b 0a0a 6576 616c 2022 7573 Limit;..eval \"us\n-00016ac0: 6520 4442 5f46 696c 6522 3b0a 6966 2028 e DB_File\";.if (\n-00016ad0: 2440 290a 7b0a 2020 2020 2470 724c 6f67 $@).{. $prLog\n-00016ae0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00016af0: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st\n-00016b00: 7227 203d 3e20 5b22 706c 6561 7365 2069 r' => [\"please i\n-00016b10: 6e73 7461 6c6c 2044 425f 4669 6c65 2066 nstall DB_File f\n-00016b20: 726f 6d20 2220 2e0a 0909 0920 2020 2020 rom \" ..... \n-00016b30: 2243 5041 4e20 666f 7220 6265 7474 6572 \"CPAN for better\n-00016b40: 2070 6572 666f 726d 616e 6365 225d 290a performance\"]).\n-00016b50: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $\n-00016b60: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{\n-00016b70: 2775 7365 5f44 425f 4669 6c65 277d 3b0a 'use_DB_File'};.\n-00016b80: 7d0a 0a23 204f 532d 5479 7020 6665 7374 }..# OS-Typ fest\n-00016b90: 7374 656c 6c65 6e2c 2075 6d20 4152 475f stellen, um ARG_\n-00016ba0: 4d41 5820 7a75 2073 6574 7a65 6e0a 2320 MAX zu setzen.# \n-00016bb0: 4465 6661 756c 7420 7769 7264 2076 6f72 Default wird vor\n-00016bc0: 7369 6368 7473 6861 6c62 6572 2061 7566 sichtshalber auf\n-00016bd0: 2034 204b 4220 6765 7365 747a 7421 0a7b 4 KB gesetzt!.{\n-00016be0: 0a20 2020 206d 7920 2475 6e61 6d65 203d . my $uname =\n-00016bf0: 2066 6f72 6b50 726f 632d 3e6e 6577 2827 forkProc->new('\n-00016c00: 2d65 7865 6327 203d 3e20 2775 6e61 6d65 -exec' => 'uname\n-00016c10: 272c 0a09 0909 2020 2020 2020 272d 6f75 ',.... '-ou\n-00016c20: 7452 616e 646f 6d27 203d 3e20 2224 746d tRandom' => \"$tm\n-00016c30: 7064 6972 2f75 6e61 6d65 2d22 2c0a 0909 pdir/uname-\",...\n-00016c40: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n-00016c50: 3d3e 2024 7072 4c6f 6729 3b0a 2020 2020 => $prLog);. \n-00016c60: 2475 6e61 6d65 2d3e 7761 6974 2829 3b0a $uname->wait();.\n-00016c70: 2020 2020 6d79 2024 6f75 7420 3d20 2475 my $out = $u\n-00016c80: 6e61 6d65 2d3e 6765 7453 5444 4f55 5428 name->getSTDOUT(\n-00016c90: 293b 0a20 2020 206d 7920 246f 7320 3d20 );. my $os = \n-00016ca0: 2727 3b0a 0a20 2020 2069 6620 2865 7869 '';.. if (exi\n-00016cb0: 7374 7320 2465 7865 6350 6172 616d 4c65 sts $execParamLe\n-00016cc0: 6e67 7468 7b24 246f 7574 5b30 5d7d 290a ngth{$$out[0]}).\n-00016cd0: 2020 2020 7b0a 0924 6d61 696e 3a3a 6578 {..$main::ex\n-00016ce0: 6563 5061 7261 6d4c 656e 6774 6820 3d20 ecParamLength = \n-00016cf0: 2465 7865 6350 6172 616d 4c65 6e67 7468 $execParamLength\n-00016d00: 7b24 246f 7574 5b30 5d7d 3b0a 0924 6f73 {$$out[0]};..$os\n-00016d10: 203d 2027 2028 2720 2e20 2424 6f75 745b = ' (' . $$out[\n-00016d20: 305d 202e 2027 2927 3b0a 0a09 6966 2028 0] . ')';...if (\n-00016d30: 2424 6f75 745b 305d 2065 7120 274c 696e $$out[0] eq 'Lin\n-00016d40: 7578 2720 616e 6420 6e6f 7420 2467 6e75 ux' and not $gnu\n-00016d50: 6370 290a 097b 0a09 2020 2020 2467 6e75 cp)..{.. $gnu\n-00016d60: 6370 203d 2031 3b0a 0920 2020 2024 7072 cp = 1;.. $pr\n-00016d70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00016d80: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n-00016d90: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [\n-00016da0: 2273 6574 7469 6e67 206f 7074 696f 6e20 \"setting option \n-00016db0: 2763 7049 7347 6e75 2720 6265 6361 7573 'cpIsGnu' becaus\n-00016dc0: 6520 4c69 6e75 7820 7379 7374 656d 2069 e Linux system i\n-00016dd0: 7320 7265 636f 676e 697a 6564 225d 293b s recognized\"]);\n-00016de0: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p\n-00016df0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00016e00: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... \n-00016e10: 272d 7374 7227 203d 3e20 5b27 7365 7474 '-str' => ['sett\n-00016e20: 696e 6720 4152 475f 4d41 5820 746f 2027 ing ARG_MAX to '\n-00016e30: 202e 2024 6d61 696e 3a3a 6578 6563 5061 . $main::execPa\n-00016e40: 7261 6d4c 656e 6774 6820 2e0a 0909 0920 ramLength ..... \n-00016e50: 2020 2020 246f 735d 293b 0a20 2020 2024 $os]);. $\n-00016e60: 6f75 7420 3d20 2475 6e61 6d65 2d3e 6765 out = $uname->ge\n-00016e70: 7453 5444 4552 5228 293b 0a20 2020 2024 tSTDERR();. $\n-00016e80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00016e90: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00016ea0: 2027 2d73 7472 2720 3d3e 205b 2253 5444 '-str' => [\"STD\n-00016eb0: 4552 5220 6f66 203c 756e 616d 653e 3a22 ERR of :\"\n-00016ec0: 2c20 4024 6f75 745d 290a 0969 6620 2840 , @$out])..if (@\n-00016ed0: 246f 7574 203e 2030 293b 0a0a 2020 2020 $out > 0);.. \n-00016ee0: 2320 6368 6563 6b20 6966 2065 7874 6572 # check if exter\n-00016ef0: 6e61 6c20 7072 6f67 7261 6d73 2065 7869 nal programs exi\n-00016f00: 7374 2069 6e20 7061 7468 0a20 2020 206d st in path. m\n-00016f10: 7920 2840 6d69 7373 696e 6729 203d 0a09 y (@missing) =..\n-00016f20: 263a 3a63 6865 636b 5072 6f67 4578 6973 &::checkProgExis\n-00016f30: 7473 2824 7072 4c6f 672c 2027 6d64 3573 ts($prLog, 'md5s\n-00016f40: 756d 272c 2027 6370 272c 2027 627a 6970 um', 'cp', 'bzip\n-00016f50: 3227 2c20 276d 6b6e 6f64 272c 0a09 0909 2', 'mknod',....\n-00016f60: 2020 2027 6d6f 756e 7427 2c20 2463 6f6d 'mount', $com\n-00016f70: 7072 6573 735b 305d 2c20 2475 6e63 6f6d press[0], $uncom\n-00016f80: 7072 6573 735b 305d 293b 0a20 2020 2069 press[0]);. i\n-00016f90: 6620 2840 6d69 7373 696e 6729 0a20 2020 f (@missing). \n-00016fa0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin\n-00016fb0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00016fc0: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n-00016fd0: 203d 3e20 5b22 7468 6520 666f 6c6c 6f77 => [\"the follow\n-00016fe0: 696e 6720 7072 6f67 7261 6d73 2061 7265 ing programs are\n-00016ff0: 206e 6f74 2069 6e20 5c24 5041 5448 3a22 not in \\$PATH:\"\n-00017000: 2c0a 0909 0909 2022 5c74 406d 6973 7369 ,..... \"\\t@missi\n-00017010: 6e67 222c 0a09 0909 0920 2270 6c65 6173 ng\",..... \"pleas\n-00017020: 6520 696e 7374 616c 6c20 6f72 2063 6865 e install or che\n-00017030: 636b 205c 2450 4154 4822 2c0a 0909 0909 ck \\$PATH\",.....\n-00017040: 2022 5c24 5041 5448 2069 7320 2220 2e20 \"\\$PATH is \" . \n-00017050: 2445 4e56 7b27 5041 5448 277d 5d2c 0a09 $ENV{'PATH'}],..\n-00017060: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00017070: 3e20 3129 3b0a 2020 2020 7d0a 7d0a 0a0a > 1);. }.}...\n-00017080: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00017090: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. \n-000170a0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-000170b0: 2270 7265 7365 7276 6520 5065 726d 7320 \"preserve Perms \n-000170c0: 6973 206e 6f74 2073 6574 225d 290a 2020 is not set\"]). \n-000170d0: 2020 6966 2024 7072 6573 6572 7665 5065 if $preservePe\n-000170e0: 726d 7320 6571 2027 6e6f 273b 0a0a 230a rms eq 'no';..#.\n-000170f0: 2320 696e 6974 6961 6c69 7365 2069 6e63 # initialise inc\n-00017100: 6c75 6465 2c20 6578 636c 7564 6520 616e lude, exclude an\n-00017110: 6420 6368 6563 6b42 6c6f 636b 7320 7275 d checkBlocks ru\n-00017120: 6c65 730a 230a 6d79 2024 6578 6352 756c les.#.my $excRul\n-00017130: 6520 3d20 6576 616c 496e 6f64 6552 756c e = evalInodeRul\n-00017140: 652d 3e6e 6577 2827 2d6c 696e 6527 203d e->new('-line' =\n-00017150: 3e20 2465 7863 6570 7452 756c 652c 0a09 > $exceptRule,..\n-00017160: 0909 0920 272d 6b65 794e 616d 6527 203d ... '-keyName' =\n-00017170: 3e20 2765 7863 6570 7452 756c 6527 2c0a > 'exceptRule',.\n-00017180: 0909 0909 2027 2d64 6562 7567 2720 3d3e .... '-debug' =>\n-00017190: 2024 6465 6275 672c 0a09 0909 0920 272d $debug,..... '-\n-000171a0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd\n-000171b0: 6972 2c0a 0909 0909 2027 2d70 724c 6f67 ir,..... '-prLog\n-000171c0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 6d79 ' => $prLog);.my\n-000171d0: 2024 696e 6352 756c 6520 3d20 6576 616c $incRule = eval\n-000171e0: 496e 6f64 6552 756c 652d 3e6e 6577 2827 InodeRule->new('\n-000171f0: 2d6c 696e 6527 203d 3e20 2469 6e63 6c75 -line' => $inclu\n-00017200: 6465 5275 6c65 2c0a 0909 0909 2027 2d6b deRule,..... '-k\n-00017210: 6579 4e61 6d65 2720 3d3e 2027 696e 636c eyName' => 'incl\n-00017220: 7564 6552 756c 6527 2c0a 0909 0909 2027 udeRule',..... '\n-00017230: 2d64 6562 7567 2720 3d3e 2024 6465 6275 -debug' => $debu\n-00017240: 672c 0a09 0909 0920 272d 746d 7064 6972 g,..... '-tmpdir\n-00017250: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,...\n-00017260: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $\n-00017270: 7072 4c6f 6729 3b0a 0a69 6620 2824 6368 prLog);..if ($ch\n-00017280: 6563 6b43 6f6d 7072 290a 7b0a 2020 2020 eckCompr).{. \n-00017290: 2463 6f6d 7072 5275 6c65 203d 2065 7661 $comprRule = eva\n-000172a0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new(\n-000172b0: 272d 6c69 6e65 2720 3d3e 0a09 2020 2020 '-line' =>.. \n-000172c0: 2020 205b 2724 7369 7a65 203e 2031 3032 ['$size > 102\n-000172d0: 3427 2c20 2761 6e64 272c 2027 263a 3a43 4', 'and', '&::C\n-000172e0: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK\n-000172f0: 2824 6669 6c65 2927 5d2c 0a09 0909 0920 ($file)'],..... \n-00017300: 2020 2027 2d6b 6579 4e61 6d65 2720 3d3e '-keyName' =>\n-00017310: 2027 636f 6d70 7252 756c 6527 2c0a 0909 'comprRule',...\n-00017320: 0909 2020 2020 272d 6465 6275 6727 203d .. '-debug' =\n-00017330: 3e20 2464 6562 7567 2c0a 0909 0909 2020 > $debug,..... \n-00017340: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $\n-00017350: 746d 7064 6972 2c0a 0909 0909 2020 2020 tmpdir,..... \n-00017360: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-00017370: 6f67 293b 0a7d 0a65 6c73 6966 2028 2463 og);.}.elsif ($c\n-00017380: 6f6d 7072 5275 6c65 290a 7b0a 2020 2020 omprRule).{. \n-00017390: 2463 6f6d 7072 5275 6c65 203d 2065 7661 $comprRule = eva\n-000173a0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new(\n-000173b0: 272d 6c69 6e65 2720 3d3e 2024 636f 6d70 '-line' => $comp\n-000173c0: 7252 756c 652c 0a09 0909 0920 2020 2027 rRule,..... '\n-000173d0: 2d6b 6579 4e61 6d65 2720 3d3e 2027 636f -keyName' => 'co\n-000173e0: 6d70 7252 756c 6527 2c0a 0909 0909 2020 mprRule',..... \n-000173f0: 2020 272d 6465 6275 6727 203d 3e20 2464 '-debug' => $d\n-00017400: 6562 7567 2c0a 0909 0909 2020 2020 272d ebug,..... '-\n-00017410: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd\n-00017420: 6972 2c0a 0909 0909 2020 2020 272d 7072 ir,..... '-pr\n-00017430: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-00017440: 2020 0a7d 0a65 6c73 650a 7b0a 2020 2020 .}.else.{. \n-00017450: 6d79 2028 4072 2920 3d20 2829 3b0a 0a20 my (@r) = ();.. \n-00017460: 2020 2070 7573 6820 4072 2c20 225c 2473 push @r, \"\\$s\n-00017470: 697a 6520 3e20 246d 696e 436f 6d70 7265 ize > $minCompre\n-00017480: 7373 5369 7a65 2061 6e64 2220 6966 2024 ssSize and\" if $\n-00017490: 6d69 6e43 6f6d 7072 6573 7353 697a 6520 minCompressSize \n-000174a0: 3e20 303b 0a0a 2020 2020 6d79 2024 6578 > 0;.. my $ex\n-000174b0: 6365 7074 5375 6666 6978 5061 7474 6572 ceptSuffixPatter\n-000174c0: 6e20 3d0a 096a 6f69 6e28 275c 5a7c 272c n =..join('\\Z|',\n-000174d0: 2040 6578 6365 7074 5375 6666 6978 2920 @exceptSuffix) \n-000174e0: 2e20 275c 5a27 3b0a 0a20 2020 2070 7573 . '\\Z';.. pus\n-000174f0: 6820 4072 2c20 226e 6f74 205c 2466 696c h @r, \"not \\$fil\n-00017500: 6520 3d7e 202f 2465 7863 6570 7453 7566 e =~ /$exceptSuf\n-00017510: 6669 7850 6174 7465 726e 2f69 2220 6966 fixPattern/i\" if\n-00017520: 2040 6578 6365 7074 5375 6666 6978 3b0a @exceptSuffix;.\n-00017530: 0a20 2020 2069 6620 2824 636f 6d70 7265 . if ($compre\n-00017540: 7373 5375 6666 6978 290a 2020 2020 7b0a ssSuffix). {.\n-00017550: 0970 7573 6820 4072 2c20 2761 6e64 272c .push @r, 'and',\n-00017560: 2027 2827 3b0a 0a09 6d79 2024 636f 6d70 '(';...my $comp\n-00017570: 7253 7566 6669 7850 6174 7465 726e 203d rSuffixPattern =\n-00017580: 0a09 2020 2020 6a6f 696e 2827 5c5a 7c27 .. join('\\Z|'\n-00017590: 2c20 4024 636f 6d70 7265 7373 5375 6666 , @$compressSuff\n-000175a0: 6978 2920 2e20 275c 5a27 3b0a 0970 7573 ix) . '\\Z';..pus\n-000175b0: 6820 4072 2c20 225c 2466 696c 6520 3d7e h @r, \"\\$file =~\n-000175c0: 202f 2463 6f6d 7072 5375 6666 6978 5061 /$comprSuffixPa\n-000175d0: 7474 6572 6e2f 6922 3b0a 0970 7573 6820 ttern/i\";..push \n-000175e0: 4072 2c20 276f 7227 3b0a 0a09 7075 7368 @r, 'or';...push\n-000175f0: 2040 722c 2027 263a 3a43 4f4d 5052 4553 @r, '&::COMPRES\n-00017600: 5349 4f4e 5f43 4845 434b 2824 6669 6c65 SION_CHECK($file\n-00017610: 2927 3b0a 0a09 7075 7368 2040 722c 2027 )';...push @r, '\n-00017620: 2927 3b0a 2020 2020 7d0a 0a20 2020 2024 )';. }.. $\n-00017630: 636f 6d70 7252 756c 6520 3d20 6576 616c comprRule = eval\n-00017640: 496e 6f64 6552 756c 652d 3e6e 6577 2827 InodeRule->new('\n-00017650: 2d6c 696e 6527 203d 3e20 5c40 722c 0a09 -line' => \\@r,..\n-00017660: 0909 0920 2020 2027 2d6b 6579 4e61 6d65 ... '-keyName\n-00017670: 2720 3d3e 2027 636f 6d70 7252 756c 6527 ' => 'comprRule'\n-00017680: 2c0a 0909 0909 2020 2020 272d 6465 6275 ,..... '-debu\n-00017690: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,...\n-000176a0: 0909 2020 2020 272d 746d 7064 6972 2720 .. '-tmpdir' \n-000176b0: 3d3e 2024 746d 7064 6972 2c0a 0909 0909 => $tmpdir,.....\n-000176c0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n-000176d0: 2470 724c 6f67 293b 0a7d 0a24 7072 4c6f $prLog);.}.$prLo\n-000176e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000176f0: 203d 3e20 2749 272c 0a09 2020 2020 2020 => 'I',.. \n-00017700: 272d 7374 7227 203d 3e20 5b22 636f 6d70 '-str' => [\"comp\n-00017710: 7252 756c 6520 3d20 2220 2e0a 0909 0920 rRule = \" ..... \n-00017720: 2463 6f6d 7072 5275 6c65 2d3e 6765 744c $comprRule->getL\n-00017730: 696e 6553 7472 696e 6728 295d 290a 2020 ineString()]). \n-00017740: 2020 6966 2024 636f 6d70 7252 756c 652d if $comprRule-\n-00017750: 3e68 6173 4c69 6e65 2829 3b0a 6d79 2024 >hasLine();.my $\n-00017760: 6368 6252 756c 6520 3d20 6576 616c 496e chbRule = evalIn\n-00017770: 6f64 6552 756c 654d 756c 7469 706c 652d odeRuleMultiple-\n-00017780: 3e6e 6577 2827 2d6c 696e 6573 2720 3d3e >new('-lines' =>\n-00017790: 205c 4063 6865 636b 426c 6f63 6b73 5275 \\@checkBlocksRu\n-000177a0: 6c65 2c0a 0909 0909 0920 272d 626c 6f63 le,...... '-bloc\n-000177b0: 6b53 697a 6527 203d 3e20 5c40 6368 6563 kSize' => \\@chec\n-000177c0: 6b42 6c6f 636b 7342 532c 0a09 0909 0909 kBlocksBS,......\n-000177d0: 2027 2d62 6c6f 636b 436f 6d70 7265 7373 '-blockCompress\n-000177e0: 2720 3d3e 205c 4063 6865 636b 426c 6f63 ' => \\@checkBloc\n-000177f0: 6b73 436f 6d70 722c 0a09 0909 0909 2027 ksCompr,...... '\n-00017800: 2d62 6c6f 636b 5265 6164 2720 3d3e 205c -blockRead' => \\\n-00017810: 4063 6865 636b 426c 6f63 6b73 5265 6164 @checkBlocksRead\n-00017820: 2c0a 0909 0909 0920 272d 626c 6f63 6b50 ,...... '-blockP\n-00017830: 6172 616c 6c65 6c27 203d 3e0a 0909 0909 arallel' =>.....\n-00017840: 0920 5c40 6368 6563 6b42 6c6f 636b 7350 . \\@checkBlocksP\n-00017850: 6172 616c 6c65 6c2c 0a09 0909 0909 2027 arallel,...... '\n-00017860: 2d6b 6579 4e61 6d65 2720 3d3e 2027 6368 -keyName' => 'ch\n-00017870: 6563 6b42 6c6f 636b 7352 756c 6527 2c0a eckBlocksRule',.\n-00017880: 0909 0909 0920 272d 6465 6275 6727 203d ..... '-debug' =\n-00017890: 3e20 2464 6562 7567 2c0a 0909 0909 0920 > $debug,...... \n-000178a0: 272d 746d 7064 6972 2720 3d3e 2024 746d '-tmpdir' => $tm\n-000178b0: 7064 6972 2c0a 0909 0909 0920 272d 7072 pdir,...... '-pr\n-000178c0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-000178d0: 0a0a 0a6d 7920 2473 7461 7274 4461 7465 ...my $startDate\n-000178e0: 203d 2064 6174 6554 6f6f 6c73 2d3e 6e65 = dateTools->ne\n-000178f0: 7728 293b 0a0a 230a 2320 6f74 6865 7242 w();..#.# otherB\n-00017900: 6163 6b75 7053 6572 6965 7320 6572 6d69 ackupSeries ermi\n-00017910: 7474 656c 6e20 756e 6420 696e 206b 6f72 tteln und in kor\n-00017920: 7265 6b74 6572 2052 6569 6865 6e66 6f6c rekter Reihenfol\n-00017930: 6765 2073 6f72 7469 6572 656e 0a23 2028 ge sortieren.# (\n-00017940: 6e65 7565 7374 6520 7a75 6c65 747a 7429 neueste zuletzt)\n-00017950: 2e20 4461 7320 6973 7420 7769 6368 7469 . Das ist wichti\n-00017960: 672c 2064 616d 6974 2063 7469 6d65 2065 g, damit ctime e\n-00017970: 7463 2e20 6569 6e65 7220 7a75 0a23 2073 tc. einer zu.# s\n-00017980: 6963 6865 726e 6465 6e20 4461 7465 6920 ichernden Datei \n-00017990: 6175 6368 2064 656e 206e 6575 6573 7465 auch den neueste\n-000179a0: 6e20 6172 6368 6976 6965 7274 656e 2044 n archivierten D\n-000179b0: 6174 656e 2076 6572 676c 6963 6865 6e0a aten verglichen.\n-000179c0: 2320 7769 7264 2e0a 230a 0a23 2063 6f6e # wird..#..# con\n-000179d0: 7369 6465 7220 6c61 7374 206f 6620 6261 sider last of ba\n-000179e0: 636b 7570 206f 6620 616c 6c20 7365 7269 ckup of all seri\n-000179f0: 6573 2069 6620 6e6f 7420 7370 6563 6966 es if not specif\n-00017a00: 6965 640a 2370 7269 6e74 2022 3120 6f74 ied.#print \"1 ot\n-00017a10: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries \n-00017a20: 3d20 5c6e 5c74 3c22 2c20 6a6f 696e 2822 = \\n\\t<\", join(\"\n-00017a30: 3e5c 6e5c 743c 222c 2040 6f74 6865 7242 >\\n\\t<\", @otherB\n-00017a40: 6163 6b75 7053 6572 6965 7329 2c20 223e ackupSeries), \">\n-00017a50: 5c6e 223b 0a69 6620 2840 6f74 6865 7242 \\n\";.if (@otherB\n-00017a60: 6163 6b75 7053 6572 6965 7320 3d3d 2030 ackupSeries == 0\n-00017a70: 290a 7b0a 2020 2020 666f 7265 6163 6820 ).{. foreach \n-00017a80: 6d79 2024 6420 2826 3a3a 7265 6164 416c my $d (&::readAl\n-00017a90: 6c42 6163 6b75 7053 6572 6965 7328 2462 lBackupSeries($b\n-00017aa0: 6163 6b75 7044 6972 2c20 2470 724c 6f67 ackupDir, $prLog\n-00017ab0: 2929 0a20 2020 207b 0a09 7075 7368 2040 )). {..push @\n-00017ac0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n-00017ad0: 732c 2022 303a 2464 223b 0a20 2020 207d s, \"0:$d\";. }\n-00017ae0: 0a7d 0a65 6c73 6520 2020 2320 6576 616c .}.else # eval\n-00017af0: 7561 7465 202f 2072 6570 6c61 6365 2077 uate / replace w\n-00017b00: 696c 6463 6172 6473 2066 6f72 206f 7468 ildcards for oth\n-00017b10: 6572 4261 636b 7570 5365 7269 6573 0a7b erBackupSeries.{\n-00017b20: 0a20 2020 206d 7920 2840 6e65 7742 6163 . my (@newBac\n-00017b30: 6b75 7053 6572 6965 7329 203d 2028 293b kupSeries) = ();\n-00017b40: 0a20 2020 206d 7920 2840 7375 6274 7261 . my (@subtra\n-00017b50: 6374 4261 636b 7570 5365 7269 6573 2920 ctBackupSeries) \n-00017b60: 3d20 2829 3b0a 2020 2020 666f 7265 6163 = ();. foreac\n-00017b70: 6820 6d79 2024 6420 2840 6f74 6865 7242 h my $d (@otherB\n-00017b80: 6163 6b75 7053 6572 6965 7329 0a20 2020 ackupSeries). \n-00017b90: 207b 0a09 6d79 2028 2472 616e 6765 2c20 {..my ($range, \n-00017ba0: 2473 293b 0a09 6d79 2024 6e20 3d20 2824 $s);..my $n = ($\n-00017bb0: 7261 6e67 652c 2024 7329 203d 2024 6420 range, $s) = $d \n-00017bc0: 3d7e 202f 5c41 282e 2a3f 293a 282e 2a29 =~ /\\A(.*?):(.*)\n-00017bd0: 5c5a 2f3b 0a09 2470 724c 6f67 2d3e 7072 \\Z/;..$prLog->pr\n-00017be0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00017bf0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n-00017c00: 7227 203d 3e20 5b22 696e 7661 6c69 6420 r' => [\"invalid \n-00017c10: 6f72 206e 6f20 7261 6e67 6520 696e 2070 or no range in p\n-00017c20: 6172 616d 203c 2464 3e2c 2065 7869 7469 aram <$d>, exiti\n-00017c30: 6e67 225d 2c0a 0909 2020 2020 2020 272d ng\"],... '-\n-00017c40: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n-00017c50: 2075 6e6c 6573 7320 246e 203d 3d20 323b unless $n == 2;\n-00017c60: 0a0a 0969 6620 2824 7261 6e67 6520 3d7e ...if ($range =~\n-00017c70: 202f 5c41 5c2d 282e 2a29 2f29 2020 2020 /\\A\\-(.*)/) \n-00017c80: 2020 2020 2320 7375 6274 7261 6374 0a09 # subtract..\n-00017c90: 7b0a 0920 2020 206d 7920 2840 7362 7329 {.. my (@sbs)\n-00017ca0: 203d 2026 6576 616c 4578 6365 7074 696f = &evalExceptio\n-00017cb0: 6e4c 6973 7428 5b24 735d 2c20 2462 6163 nList([$s], $bac\n-00017cc0: 6b75 7044 6972 2c20 276f 7468 6572 4261 kupDir, 'otherBa\n-00017cd0: 636b 7570 5365 7269 6573 272c 0a09 0909 ckupSeries',....\n-00017ce0: 0909 2020 2027 6176 6f69 6420 7365 7269 .. 'avoid seri\n-00017cf0: 6573 272c 2031 2c20 756e 6465 662c 2031 es', 1, undef, 1\n-00017d00: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. \n-00017d10: 666f 7265 6163 6820 6d79 2024 6e65 7720 foreach my $new \n-00017d20: 2840 7362 7329 0a09 2020 2020 7b0a 0909 (@sbs).. {...\n-00017d30: 7075 7368 2040 7375 6274 7261 6374 4261 push @subtractBa\n-00017d40: 636b 7570 5365 7269 6573 2c20 2224 7261 ckupSeries, \"$ra\n-00017d50: 6e67 653a 246e 6577 223b 0a09 2020 2020 nge:$new\";.. \n-00017d60: 7d0a 097d 0a09 656c 7365 0a09 7b0a 0920 }..}..else..{.. \n-00017d70: 2020 206d 7920 2840 6e62 7329 203d 2026 my (@nbs) = &\n-00017d80: 6576 616c 4578 6365 7074 696f 6e4c 6973 evalExceptionLis\n-00017d90: 7428 5b24 735d 2c20 2462 6163 6b75 7044 t([$s], $backupD\n-00017da0: 6972 2c20 276f 7468 6572 4261 636b 7570 ir, 'otherBackup\n-00017db0: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... \n-00017dc0: 2027 636f 6e73 6964 6572 2073 6572 6965 'consider serie\n-00017dd0: 7327 2c20 302c 2075 6e64 6566 2c20 312c s', 0, undef, 1,\n-00017de0: 2024 7072 4c6f 6729 3b0a 0920 2020 2066 $prLog);.. f\n-00017df0: 6f72 6561 6368 206d 7920 246e 6577 2028 oreach my $new (\n-00017e00: 406e 6273 290a 0920 2020 207b 0a09 0970 @nbs).. {...p\n-00017e10: 7573 6820 406e 6577 4261 636b 7570 5365 ush @newBackupSe\n-00017e20: 7269 6573 2c20 2224 7261 6e67 653a 246e ries, \"$range:$n\n-00017e30: 6577 223b 0a09 2020 2020 7d0a 097d 0a20 ew\";.. }..}. \n-00017e40: 2020 207d 0a20 2020 2023 2073 7562 7472 }. # subtr\n-00017e50: 6163 7420 4073 7562 7472 6163 7442 6163 act @subtractBac\n-00017e60: 6b75 7053 6572 6965 7320 6672 6f6d 2040 kupSeries from @\n-00017e70: 6e65 7742 6163 6b75 7053 6572 6965 730a newBackupSeries.\n-00017e80: 2020 2020 6d79 2028 256e 6577 4261 636b my (%newBack\n-00017e90: 7570 5365 7269 6573 293b 0a20 2020 2066 upSeries);. f\n-00017ea0: 6f72 6561 6368 206d 7920 246e 2028 406e oreach my $n (@n\n-00017eb0: 6577 4261 636b 7570 5365 7269 6573 290a ewBackupSeries).\n-00017ec0: 2020 2020 7b0a 0924 6e20 3d7e 202f 5c41 {..$n =~ /\\A\n-00017ed0: 282e 2a3f 293a 282e 2a29 5c5a 2f3b 0a09 (.*?):(.*)\\Z/;..\n-00017ee0: 246e 6577 4261 636b 7570 5365 7269 6573 $newBackupSeries\n-00017ef0: 7b24 327d 203d 2024 313b 0a20 2020 207d {$2} = $1;. }\n-00017f00: 0a20 2020 2066 6f72 6561 6368 206d 7920 . foreach my \n-00017f10: 2473 2028 4073 7562 7472 6163 7442 6163 $s (@subtractBac\n-00017f20: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). {\n-00017f30: 0a09 2473 203d 7e20 2f5c 4128 2e2a 3f29 ..$s =~ /\\A(.*?)\n-00017f40: 3a28 2e2a 295c 5a2f 3b0a 0964 656c 6574 :(.*)\\Z/;..delet\n-00017f50: 6520 246e 6577 4261 636b 7570 5365 7269 e $newBackupSeri\n-00017f60: 6573 7b24 327d 2069 6620 6465 6669 6e65 es{$2} if define\n-00017f70: 6420 246e 6577 4261 636b 7570 5365 7269 d $newBackupSeri\n-00017f80: 6573 7b24 327d 3b0a 2020 2020 7d0a 0a20 es{$2};. }.. \n-00017f90: 2020 2028 406f 7468 6572 4261 636b 7570 (@otherBackup\n-00017fa0: 5365 7269 6573 2920 3d20 2829 3b0a 2020 Series) = ();. \n-00017fb0: 2020 6d79 2028 4070 7229 3b0a 2020 2020 my (@pr);. \n-00017fc0: 666f 7265 6163 6820 6d79 2024 6e20 2873 foreach my $n (s\n-00017fd0: 6f72 7420 6b65 7973 2025 6e65 7742 6163 ort keys %newBac\n-00017fe0: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). {\n-00017ff0: 0a09 6d79 2024 7220 3d20 246e 6577 4261 ..my $r = $newBa\n-00018000: 636b 7570 5365 7269 6573 7b24 6e7d 3b0a ckupSeries{$n};.\n-00018010: 0924 7220 3d20 2431 2069 6620 2472 203d .$r = $1 if $r =\n-00018020: 7e20 2f5c 415c 2b28 2e2a 295c 5a2f 3b0a ~ /\\A\\+(.*)\\Z/;.\n-00018030: 0970 7573 6820 406f 7468 6572 4261 636b .push @otherBack\n-00018040: 7570 5365 7269 6573 2c20 2224 723a 246e upSeries, \"$r:$n\n-00018050: 223b 0a09 7075 7368 2040 7072 2c20 2220 \";..push @pr, \" \n-00018060: 2020 2073 6572 6965 7320 3c24 6e3e 223b series <$n>\";\n-00018070: 0a20 2020 207d 0a20 2020 2069 6620 2840 . }. if (@\n-00018080: 7072 290a 2020 2020 7b0a 0924 7072 4c6f pr). {..$prLo\n-00018090: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000180a0: 203d 3e20 2749 272c 0a09 0920 2020 2020 => 'I',... \n-000180b0: 2027 2d73 7472 2720 3d3e 205b 2272 6573 '-str' => [\"res\n-000180c0: 756c 7469 6e67 2073 6572 6965 7320 746f ulting series to\n-000180d0: 2068 6172 6420 6c69 6e6b 222c 2040 7072 hard link\", @pr\n-000180e0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el\n-000180f0: 7365 0a20 2020 207b 0a09 2470 724c 6f67 se. {..$prLog\n-00018100: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00018110: 3d3e 2027 5727 2c0a 0909 2020 2020 2020 => 'W',... \n-00018120: 272d 7374 7227 203d 3e20 5b22 6e6f 2073 '-str' => [\"no s\n-00018130: 6572 6965 7320 7370 6563 6966 6965 6420 eries specified \n-00018140: 746f 2068 6172 6420 6c69 6e6b 225d 293b to hard link\"]);\n-00018150: 0a20 2020 207d 0a7d 0a23 7072 696e 7420 . }.}.#print \n-00018160: 2232 206f 7468 6572 4261 636b 7570 5365 \"2 otherBackupSe\n-00018170: 7269 6573 203d 205c 6e5c 743c 222c 206a ries = \\n\\t<\", j\n-00018180: 6f69 6e28 223e 5c6e 5c74 3c22 2c20 406f oin(\">\\n\\t<\", @o\n-00018190: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries\n-000181a0: 292c 2022 3e5c 6e22 3b0a 0a6d 7920 2470 ), \">\\n\";..my $p\n-000181b0: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri\n-000181c0: 6573 203d 2075 6e64 6566 3b0a 6966 2028 es = undef;.if (\n-000181d0: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri\n-000181e0: 6573 203e 2030 290a 7b0a 2020 2020 7075 es > 0).{. pu\n-000181f0: 7368 2040 6f74 6865 7242 6163 6b75 7053 sh @otherBackupS\n-00018200: 6572 6965 732c 2022 303a 2474 6172 6765 eries, \"0:$targe\n-00018210: 7444 6972 223b 0a20 2020 206d 7920 2840 tDir\";. my (@\n-00018220: 6f62 642c 2024 6429 3b0a 0a20 2020 2023 obd, $d);.. #\n-00018230: 2056 6572 7a65 6963 686e 6973 7365 2065 Verzeichnisse e\n-00018240: 726d 6974 7465 6c6e 0a20 2020 2066 6f72 rmitteln. for\n-00018250: 6561 6368 2024 6420 2840 6f74 6865 7242 each $d (@otherB\n-00018260: 6163 6b75 7053 6572 6965 7329 0a20 2020 ackupSeries). \n-00018270: 207b 0a09 6966 2028 2464 203d 7e20 2f5c {..if ($d =~ /\\\n-00018280: 4128 616c 6c7c 5c64 2b7c 5c64 2b2d 5c64 A(all|\\d+|\\d+-\\d\n-00018290: 2b29 3a28 2e2a 292f 290a 097b 0a09 2020 +):(.*)/)..{.. \n-000182a0: 2020 6d79 2024 6469 7220 3d20 2432 3b0a my $dir = $2;.\n-000182b0: 2020 2020 2020 2020 2020 2020 6d79 2024 my $\n-000182c0: 7768 6174 203d 2024 313b 0a09 2020 2020 what = $1;.. \n-000182d0: 2464 6972 203d 2022 2462 6163 6b75 7044 $dir = \"$backupD\n-000182e0: 6972 2f24 6469 7222 2075 6e6c 6573 7320 ir/$dir\" unless \n-000182f0: 2464 6972 203d 7e20 2f5c 415c 2f2f 3b0a $dir =~ /\\A\\//;.\n-00018300: 0920 2020 206d 7920 2461 7362 6420 3d0a . my $asbd =.\n-00018310: 0909 616c 6c53 746f 7265 4261 636b 7570 ..allStoreBackup\n-00018320: 5365 7269 6573 2d3e 6e65 7728 272d 726f Series->new('-ro\n-00018330: 6f74 4469 7227 203d 3e20 2464 6972 2c0a otDir' => $dir,.\n-00018340: 0909 0909 0920 2027 2d63 6865 636b 5375 ..... '-checkSu\n-00018350: 6d46 696c 6527 203d 3e20 2463 6865 636b mFile' => $check\n-00018360: 5375 6d46 696c 652c 0a09 0909 0909 2020 SumFile,...... \n-00018370: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-00018380: 6f67 293b 0a23 0909 0909 0927 2d61 6273 og);.#.....'-abs\n-00018390: 5061 7468 2720 3d3e 2030 293b 0a20 2020 Path' => 0);. \n-000183a0: 2020 2020 2020 2020 206d 7920 2840 6429 my (@d)\n-000183b0: 203d 2073 6f72 7420 7b20 2462 2063 6d70 = sort { $b cmp\n-000183c0: 2024 6120 7d0a 0920 2020 2024 6173 6264 $a }.. $asbd\n-000183d0: 2d3e 6765 7441 6c6c 4669 6e69 7368 6564 ->getAllFinished\n-000183e0: 5769 7468 6f75 7441 6374 4261 636b 7570 WithoutActBackup\n-000183f0: 4469 7228 293b 0a09 2020 2020 2020 2320 Dir();.. # \n-00018400: 6669 6c74 6572 2077 616e 7465 6420 6469 filter wanted di\n-00018410: 7273 2061 6e64 2067 656e 6572 6174 6520 rs and generate \n-00018420: 6162 736f 6c75 7465 2070 6174 680a 2020 absolute path. \n-00018430: 2020 2020 2020 2020 2020 6966 2028 2477 if ($w\n-00018440: 6861 7420 6571 2022 616c 6c22 290a 0920 hat eq \"all\").. \n-00018450: 2020 207b 0a20 2020 2020 2020 2020 2020 {. \n-00018460: 2020 2020 2066 6f72 6561 6368 206d 7920 foreach my \n-00018470: 2478 2028 4064 290a 0909 7b0a 2020 2020 $x (@d)...{. \n-00018480: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018490: 7075 7368 2040 6f62 642c 205b 2464 6972 push @obd, [$dir\n-000184a0: 2c20 2478 5d3b 0a20 2020 2020 2020 2020 , $x];. \n-000184b0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. \n-000184c0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n-000184d0: 2020 2065 6c73 650a 0920 2020 207b 0a20 else.. {. \n-000184e0: 2020 2020 2020 2020 2020 2020 2020 206d m\n-000184f0: 7920 2824 6672 6f6d 2c20 2474 6f29 3b0a y ($from, $to);.\n-00018500: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018510: 6966 2028 2477 6861 7420 3d7e 202f 5e28 if ($what =~ /^(\n-00018520: 5c64 2b29 242f 290a 0909 7b0a 2020 2020 \\d+)$/)...{. \n-00018530: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018540: 2466 726f 6d20 3d20 2474 6f20 3d20 2431 $from = $to = $1\n-00018550: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-00018560: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n-00018570: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what\n-00018580: 203d 7e20 2f5e 285c 642b 292d 285c 642b =~ /^(\\d+)-(\\d+\n-00018590: 2924 2f29 0a09 097b 0a20 2020 2020 2020 )$/)...{. \n-000185a0: 2020 2020 2020 2020 2020 2020 2024 6672 $fr\n-000185b0: 6f6d 203d 2024 313b 0a20 2020 2020 2020 om = $1;. \n-000185c0: 2020 2020 2020 2020 2020 2020 2024 746f $to\n-000185d0: 203d 2024 323b 0a20 2020 2020 2020 2020 = $2;. \n-000185e0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. \n-000185f0: 2020 2020 2020 2020 2066 6f72 6561 6368 foreach\n-00018600: 206d 7920 2469 2028 2466 726f 6d20 2e2e my $i ($from ..\n-00018610: 2024 746f 290a 0909 7b0a 2020 2020 2020 $to)...{. \n-00018620: 2020 2020 2020 2020 2020 2020 2020 6966 if\n-00018630: 2028 6578 6973 7473 2024 645b 2469 5d29 (exists $d[$i])\n-00018640: 0a09 0920 2020 207b 0a20 2020 2020 2020 ... {. \n-00018650: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018660: 2070 7573 6820 406f 6264 2c20 5b24 6469 push @obd, [$di\n-00018670: 722c 2024 645b 2469 5d5d 3b0a 2020 2020 r, $d[$i]];. \n-00018680: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018690: 7d0a 2020 2020 2020 2020 2020 2020 2020 }. \n-000186a0: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n-000186b0: 7d0a 2020 2020 2020 2020 7d0a 2020 2020 }. }. \n-000186c0: 2020 2020 656c 7365 0a09 7b0a 2020 2020 else..{. \n-000186d0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog->\n-000186e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-000186f0: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. \n-00018700: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018710: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [\n-00018720: 2269 6e76 616c 6964 206f 7220 6e6f 2072 \"invalid or no r\n-00018730: 616e 6765 2069 6e20 7061 7261 6d20 3c24 ange in param <$\n-00018740: 643e 2c20 6578 6974 696e 6722 5d2c 0a20 d>, exiting\"],. \n-00018750: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018760: 2020 2020 2020 2020 2027 2d65 7869 7427 '-exit'\n-00018770: 203d 3e20 3129 3b0a 2020 2020 2020 2020 => 1);. \n-00018780: 7d0a 2020 2020 7d0a 0a20 2020 2023 2073 }. }.. # s\n-00018790: 6f72 7420 6e65 7765 7374 2062 6163 6b75 ort newest backu\n-000187a0: 7020 6669 7273 740a 2020 2020 2840 6f74 p first. (@ot\n-000187b0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries)\n-000187c0: 203d 2028 293b 0a20 2020 206d 7920 2825 = ();. my (%\n-000187d0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n-000187e0: 7329 203d 2028 293b 0a20 2020 2066 6f72 s) = ();. for\n-000187f0: 6561 6368 2024 6420 2873 6f72 7420 7b20 each $d (sort { \n-00018800: 2462 2d3e 5b31 5d20 636d 7020 2461 2d3e $b->[1] cmp $a->\n-00018810: 5b31 5d20 7d20 406f 6264 290a 2020 2020 [1] } @obd). \n-00018820: 7b0a 096d 7920 2462 6420 3d20 2464 2d3e {..my $bd = $d->\n-00018830: 5b30 5d20 2e20 222f 2220 2e20 2464 2d3e [0] . \"/\" . $d->\n-00018840: 5b31 5d3b 0a09 2462 6420 3d7e 2073 2f5c [1];..$bd =~ s/\\\n-00018850: 2f2b 2f5c 2f2f 673b 0a09 6966 2028 2d64 /+/\\//g;..if (-d\n-00018860: 2024 6264 2061 6e64 206e 6f74 2065 7869 $bd and not exi\n-00018870: 7374 7320 246f 7468 6572 4261 636b 7570 sts $otherBackup\n-00018880: 5365 7269 6573 7b24 6264 7d29 0a09 7b0a Series{$bd})..{.\n-00018890: 0920 2020 2024 6f74 6865 7242 6163 6b75 . $otherBacku\n-000188a0: 7053 6572 6965 737b 2462 647d 203d 2031 pSeries{$bd} = 1\n-000188b0: 3b20 2020 2320 646f 206e 6f74 2061 6c6c ; # do not all\n-000188c0: 6f77 2064 6f75 626c 6520 656e 7472 6965 ow double entrie\n-000188d0: 730a 0920 2020 2070 7573 6820 406f 7468 s.. push @oth\n-000188e0: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, \n-000188f0: 2462 643b 0a09 7d0a 2020 2020 7d0a 0a20 $bd;..}. }.. \n-00018900: 2020 2023 2066 696e 6420 7468 6520 7072 # find the pr\n-00018910: 6576 696f 7573 2065 6e74 7279 2066 726f evious entry fro\n-00018920: 6d20 7468 6520 6163 7475 616c 2062 6163 m the actual bac\n-00018930: 6b75 7020 7365 7269 6573 0a20 2020 2023 kup series. #\n-00018940: 2061 6e64 2073 6574 2069 7420 746f 2074 and set it to t\n-00018950: 6865 2062 6567 696e 6e69 6e67 2c20 736f he beginning, so\n-00018960: 2069 7420 7769 6c6c 2062 6520 7072 6566 it will be pref\n-00018970: 6572 6564 2066 6f72 206c 696e 6b69 6e67 ered for linking\n-00018980: 0a20 2020 2023 2074 6865 7265 666f 7265 . # therefore\n-00018990: 2077 6520 6d69 6e69 6d69 7a65 2074 6865 we minimize the\n-000189a0: 206e 756d 6265 7220 6f66 206d 6435 2073 number of md5 s\n-000189b0: 756d 7320 746f 2063 616c 6375 6c61 7465 ums to calculate\n-000189c0: 0a23 7072 696e 7420 2233 206f 7468 6572 .#print \"3 other\n-000189d0: 4261 636b 7570 5365 7269 6573 203d 205c BackupSeries = \\\n-000189e0: 6e5c 743c 222c 206a 6f69 6e28 223e 5c6e n\\t<\", join(\">\\n\n-000189f0: 5c74 3c22 2c20 406f 7468 6572 4261 636b \\t<\", @otherBack\n-00018a00: 7570 5365 7269 6573 292c 2022 3e5c 6e22 upSeries), \">\\n\"\n-00018a10: 3b0a 2020 2020 2840 6f62 6429 203d 2028 ;. (@obd) = (\n-00018a20: 293b 0a20 2020 2066 6f72 6561 6368 2024 );. foreach $\n-00018a30: 6420 2840 6f74 6865 7242 6163 6b75 7053 d (@otherBackupS\n-00018a40: 6572 6965 7329 0a20 2020 207b 0a09 2464 eries). {..$d\n-00018a50: 203d 7e20 6d23 5c41 282e 2a29 2f23 3b0a =~ m#\\A(.*)/#;.\n-00018a60: 0969 6620 2824 3120 2065 7120 2474 6172 .if ($1 eq $tar\n-00018a70: 6765 7444 6972 0a09 2020 2020 616e 6420 getDir.. and \n-00018a80: 6e6f 7420 2470 7265 7642 6163 6b75 704f not $prevBackupO\n-00018a90: 776e 5365 7269 6573 290a 097b 0a09 2020 wnSeries)..{.. \n-00018aa0: 2020 2470 7265 7642 6163 6b75 704f 776e $prevBackupOwn\n-00018ab0: 5365 7269 6573 203d 2024 643b 0a23 7072 Series = $d;.#pr\n-00018ac0: 696e 7420 222b 312b 2464 5c6e 223b 0a09 int \"+1+$d\\n\";..\n-00018ad0: 7d0a 0965 6c73 650a 097b 0a23 7072 696e }..else..{.#prin\n-00018ae0: 7420 222b 322b 2464 5c6e 223b 0a09 2020 t \"+2+$d\\n\";.. \n-00018af0: 2020 7075 7368 2040 6f62 642c 2024 643b push @obd, $d;\n-00018b00: 0a09 7d0a 2020 2020 7d0a 2370 7269 6e74 ..}. }.#print\n-00018b10: 2022 2b33 2b24 7072 6576 4261 636b 7570 \"+3+$prevBackup\n-00018b20: 4f77 6e53 6572 6965 735c 6e22 3b0a 2020 OwnSeries\\n\";. \n-00018b30: 2020 2320 6966 2024 7072 6576 4261 636b # if $prevBack\n-00018b40: 7570 4f77 6e53 6572 6965 7320 6973 2073 upOwnSeries is s\n-00018b50: 7469 6c6c 2075 6e64 6566 2c20 7468 6973 till undef, this\n-00018b60: 206d 6561 6e73 2074 6861 7420 7468 6520 means that the \n-00018b70: 7468 650a 2020 2020 2320 7265 6665 7265 the. # refere\n-00018b80: 6e63 6520 746f 2074 6865 2070 7265 7669 nce to the previ\n-00018b90: 6f75 7320 6261 636b 7570 2069 6e20 7468 ous backup in th\n-00018ba0: 6520 6f77 6e20 7365 7269 6573 2064 6f65 e own series doe\n-00018bb0: 7320 6e6f 7420 6578 6973 740a 2020 2020 s not exist. \n-00018bc0: 2320 7468 6973 206d 6561 6e73 2c20 7468 # this means, th\n-00018bd0: 6572 6520 6973 206e 6f20 7072 6576 696f ere is no previo\n-00018be0: 7573 2062 6163 6b75 702e 0a20 2020 2023 us backup.. #\n-00018bf0: 2028 7468 6520 6669 7273 7420 6261 636b (the first back\n-00018c00: 7570 7320 7374 6f72 6564 2069 6e20 406f ups stored in @o\n-00018c10: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries\n-00018c20: 205f 616c 7761 7973 5f20 6973 2074 6865 _always_ is the\n-00018c30: 0a20 2020 2023 2070 6174 6820 746f 2074 . # path to t\n-00018c40: 6865 2070 7265 7669 6f75 7320 6261 636b he previous back\n-00018c50: 7570 206f 6620 7468 6520 6f77 6e20 7365 up of the own se\n-00018c60: 7269 6573 290a 2020 2020 2840 6f74 6865 ries). (@othe\n-00018c70: 7242 6163 6b75 7053 6572 6965 7329 203d rBackupSeries) =\n-00018c80: 2028 2470 7265 7642 6163 6b75 704f 776e ($prevBackupOwn\n-00018c90: 5365 7269 6573 2c20 406f 6264 293b 0a7d Series, @obd);.}\n-00018ca0: 0a23 7072 696e 7420 2234 206f 7468 6572 .#print \"4 other\n-00018cb0: 4261 636b 7570 5365 7269 6573 203d 205c BackupSeries = \\\n-00018cc0: 6e5c 743c 222c 206a 6f69 6e28 223e 5c6e n\\t<\", join(\">\\n\n-00018cd0: 5c74 3c22 2c20 406f 7468 6572 4261 636b \\t<\", @otherBack\n-00018ce0: 7570 5365 7269 6573 292c 2022 3e5c 6e22 upSeries), \">\\n\"\n-00018cf0: 3b0a 0a0a 6966 2028 2476 6572 626f 7365 ;...if ($verbose\n-00018d00: 2061 6e64 2040 6f74 6865 7242 6163 6b75 and @otherBacku\n-00018d10: 7053 6572 6965 7329 0a7b 0a20 2020 206d pSeries).{. m\n-00018d20: 7920 2840 6f62 6429 203d 2028 293b 0a20 y (@obd) = ();. \n-00018d30: 2020 206d 7920 246f 3b0a 2020 2020 666f my $o;. fo\n-00018d40: 7265 6163 6820 246f 2028 406f 7468 6572 reach $o (@other\n-00018d50: 4261 636b 7570 5365 7269 6573 290a 2020 BackupSeries). \n-00018d60: 2020 7b0a 0970 7573 6820 406f 6264 2c20 {..push @obd, \n-00018d70: 2220 2020 246f 223b 0a20 2020 207d 0a20 \" $o\";. }. \n-00018d80: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00018d90: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00018da0: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00018db0: 226f 7468 6572 4261 636b 7570 5365 7269 \"otherBackupSeri\n-00018dc0: 6573 203d 222c 2040 6f62 645d 293b 0a7d es =\", @obd]);.}\n-00018dd0: 0a0a 2370 7269 6e74 2022 3520 6f74 6865 ..#print \"5 othe\n-00018de0: 7242 6163 6b75 7053 6572 6965 7320 3d20 rBackupSeries = \n-00018df0: 3c22 2c20 6a6f 696e 2827 3e3c 272c 2040 <\", join('><', @\n-00018e00: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n-00018e10: 7329 2c20 223e 5c6e 223b 0a0a 6d79 2024 s), \">\\n\";..my $\n-00018e20: 616c 6c4c 696e 6b73 203d 206c 6174 654c allLinks = lateL\n-00018e30: 696e 6b73 2d3e 6e65 7728 272d 6469 7273 inks->new('-dirs\n-00018e40: 2720 3d3e 205b 2462 6163 6b75 7044 6972 ' => [$backupDir\n-00018e50: 5d2c 0a09 0909 2020 2020 2020 272d 6b69 ],.... '-ki\n-00018e60: 6e64 2720 3d3e 2027 7265 6375 7273 6976 nd' => 'recursiv\n-00018e70: 6553 6561 7263 6827 2c0a 0909 0920 2020 eSearch',.... \n-00018e80: 2020 2027 2d76 6572 626f 7365 2720 3d3e '-verbose' =>\n-00018e90: 2024 7665 7262 6f73 652c 0a09 0909 2020 $verbose,.... \n-00018ea0: 2020 2020 272d 6175 746f 7265 7061 6972 '-autorepair\n-00018eb0: 2720 3d3e 2024 6175 746f 7265 7061 6972 ' => $autorepair\n-00018ec0: 2c0a 0909 0920 2020 2020 2027 2d70 724c ,.... '-prL\n-00018ed0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n-00018ee0: 2370 7269 6e74 2022 3620 6f74 6865 7242 #print \"6 otherB\n-00018ef0: 6163 6b75 7053 6572 6965 7320 3d20 3c22 ackupSeries = <\"\n-00018f00: 2c20 6a6f 696e 2827 3e3c 272c 2040 6f74 , join('><', @ot\n-00018f10: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries)\n-00018f20: 2c20 223e 5c6e 223b 0a75 6e6c 6573 7320 , \">\\n\";.unless \n-00018f30: 2824 6c61 7465 4c69 6e6b 7329 0a7b 0a20 ($lateLinks).{. \n-00018f40: 2020 2023 2063 6865 636b 2c20 6966 2064 # check, if d\n-00018f50: 6972 6563 746f 7269 6573 2077 6974 6820 irectories with \n-00018f60: 6c61 7465 4c69 6e6b 7320 6172 6520 7265 lateLinks are re\n-00018f70: 6665 7265 6e63 6564 2062 7920 6f74 6865 ferenced by othe\n-00018f80: 7242 6163 6b75 7053 6572 6965 730a 2020 rBackupSeries. \n-00018f90: 2020 6d79 2024 6f62 643b 0a20 2020 2066 my $obd;. f\n-00018fa0: 6f72 6561 6368 2024 6f62 6420 2840 6f74 oreach $obd (@ot\n-00018fb0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries)\n-00018fc0: 0a20 2020 207b 0a23 7072 696e 7420 2263 . {.#print \"c\n-00018fd0: 6865 636b 696e 6720 6f74 6865 7242 6163 hecking otherBac\n-00018fe0: 6b75 6b70 4469 7273 3a5c 6e22 3b0a 0924 kukpDirs:\\n\";..$\n-00018ff0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00019000: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00019010: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00019020: 2264 6972 6563 746f 7279 203c 246f 6264 \"directory <$obd\n-00019030: 3e20 6861 7320 756e 7265 736f 6c76 6564 > has unresolved\n-00019040: 2022 202e 0a09 0909 0920 226c 696e 6b73 \" ...... \"links\n-00019050: 2028 6279 2070 6172 6d20 2d2d 6c61 7465 (by parm --late\n-00019060: 4c69 6e6b 7329 222c 0a09 0920 2020 2020 Links)\",... \n-00019070: 2020 2020 2020 2020 2020 2020 2273 7461 \"sta\n-00019080: 7274 203a 3a24 7374 6f72 6542 6163 6b75 rt ::$storeBacku\n-00019090: 7055 7064 6174 6542 6163 6b75 705f 7072 pUpdateBackup_pr\n-000190a0: 6720 2220 2e0a 0909 0909 2022 746f 2073 g \" ...... \"to s\n-000190b0: 6574 206c 696e 6b73 222c 0a09 0920 2020 et links\",... \n-000190c0: 2020 2020 2020 2020 2020 2020 2020 226f \"o\n-000190d0: 7220 7374 6172 7420 7374 6f72 6542 6163 r start storeBac\n-000190e0: 6b75 702e 706c 2077 6974 6820 2d2d 6c61 kup.pl with --la\n-000190f0: 7465 4c69 6e6b 7320 616e 6420 2220 2e0a teLinks and \" ..\n-00019100: 0909 0909 2022 7265 736f 6c76 6520 6c61 .... \"resolve la\n-00019110: 7465 7222 5d2c 0a09 0920 2020 2020 2027 ter\"],... '\n-00019120: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. \n-00019130: 2020 6966 2024 616c 6c4c 696e 6b73 2d3e if $allLinks->\n-00019140: 6368 6563 6b44 6972 2824 6f62 6429 3b0a checkDir($obd);.\n-00019150: 2020 2020 7d0a 7d0a 0a6d 7920 2461 6b74 }.}..my $akt\n-00019160: 4461 7465 203d 2064 6174 6554 6f6f 6c73 Date = dateTools\n-00019170: 2d3e 6e65 7728 293b 0a69 6620 2824 746f ->new();.if ($to\n-00019180: 6461 794f 7074 290a 7b0a 2020 2020 6966 dayOpt).{. if\n-00019190: 2028 2474 6f64 6179 4f70 7420 3d7e 202f ($todayOpt =~ /\n-000191a0: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \\A(\\d{4})\\.(\\d{2\n-000191b0: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\\.(\\d{2})_(\\d{\n-000191c0: 327d 292e 285c 647b 327d 292e 285c 647b 2}).(\\d{2}).(\\d{\n-000191d0: 327d 295c 5a2f 290a 2020 2020 7b0a 0924 2})\\Z/). {..$\n-000191e0: 616b 7444 6174 6520 3d20 6461 7465 546f aktDate = dateTo\n-000191f0: 6f6c 732d 3e6e 6577 2827 2d79 6561 7227 ols->new('-year'\n-00019200: 203d 3e20 2431 2c0a 0909 0909 2020 272d => $1,..... '-\n-00019210: 6d6f 6e74 6827 203d 3e20 2432 2c0a 0909 month' => $2,...\n-00019220: 0909 2020 272d 6461 7927 203d 3e20 2433 .. '-day' => $3\n-00019230: 2c0a 0909 0909 2020 272d 686f 7572 2720 ,..... '-hour' \n-00019240: 3d3e 2024 342c 0a09 0909 0920 2027 2d6d => $4,..... '-m\n-00019250: 696e 2720 3d3e 2024 352c 0a09 0909 0920 in' => $5,..... \n-00019260: 2027 2d73 6563 2720 3d3e 2024 3629 3b0a '-sec' => $6);.\n-00019270: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00019280: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00019290: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000192a0: 0a09 0920 2020 2020 205b 2224 746f 6461 ... [\"$toda\n-000192b0: 794f 7074 2028 6f70 7469 6f6e 2074 6f64 yOpt (option tod\n-000192c0: 6179 2920 6973 206e 6f74 2061 2076 616c ay) is not a val\n-000192d0: 6964 2064 6174 6522 5d2c 0a09 0920 2020 id date\"],... \n-000192e0: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n-000192f0: 0a09 2020 2020 756e 6c65 7373 2024 616b .. unless $ak\n-00019300: 7444 6174 652d 3e69 7356 616c 6964 2829 tDate->isValid()\n-00019310: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print\n-00019320: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W',\n-00019330: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00019340: 3d3e 205b 2273 6574 7469 6e67 2074 6f64 => [\"setting tod\n-00019350: 6179 2074 6f20 2220 2e0a 0909 0909 2024 ay to \" ...... $\n-00019360: 616b 7444 6174 652d 3e67 6574 4461 7465 aktDate->getDate\n-00019370: 5469 6d65 2829 5d29 3b0a 2020 2020 7d0a Time()]);. }.\n-00019380: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n-00019390: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-000193a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-000193b0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-000193c0: 5b22 666f 726d 6174 2065 7272 6f72 2061 [\"format error a\n-000193d0: 7420 6f70 7469 6f6e 2074 6f64 6179 2c20 t option today, \n-000193e0: 6d75 7374 2062 6522 2c0a 0909 0909 2022 must be\",..... \"\n-000193f0: 2020 5959 5959 2e4d 4d2e 4444 5f48 482e YYYY.MM.DD_HH.\n-00019400: 4d4d 2e53 5322 5d2c 0a09 0920 2020 2020 MM.SS\"],... \n-00019410: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);.\n-00019420: 2020 2020 7d0a 7d0a 0a24 6d61 696e 3a3a }.}..$main::\n-00019430: 7374 6174 203d 2053 7461 7469 7374 6963 stat = Statistic\n-00019440: 2d3e 6e65 7728 272d 7374 6172 7444 6174 ->new('-startDat\n-00019450: 6527 203d 3e0a 0909 0920 2020 2020 2470 e' =>.... $p\n-00019460: 7265 636f 6d6d 616e 6420 3f20 2473 7461 recommand ? $sta\n-00019470: 7274 4461 7465 203a 2075 6e64 6566 2c0a rtDate : undef,.\n-00019480: 0909 0920 2020 2020 272d 616b 7444 6174 ... '-aktDat\n-00019490: 6527 203d 3e20 2461 6b74 4461 7465 2c0a e' => $aktDate,.\n-000194a0: 0909 0920 2020 2020 272d 7573 6572 4772 ... '-userGr\n-000194b0: 6f75 7053 7461 7446 696c 6527 203d 3e20 oupStatFile' => \n-000194c0: 2475 7365 7247 726f 7570 5374 6174 4669 $userGroupStatFi\n-000194d0: 6c65 2c0a 0909 0920 2020 2020 272d 6578 le,.... '-ex\n-000194e0: 6365 7074 5375 6666 6978 2720 3d3e 2024 ceptSuffix' => $\n-000194f0: 6578 6365 7074 5375 6666 6978 2c0a 0909 exceptSuffix,...\n-00019500: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' =\n-00019510: 3e20 2470 724c 6f67 2c0a 0909 0920 2020 > $prLog,.... \n-00019520: 2020 272d 7072 6f67 7265 7373 5265 706f '-progressRepo\n-00019530: 7274 2720 3d3e 2024 7072 6f67 7265 7373 rt' => $progress\n-00019540: 5265 706f 7274 2c0a 0909 0920 2020 2020 Report,.... \n-00019550: 272d 7072 6f67 7265 7373 4465 6c74 6154 '-progressDeltaT\n-00019560: 696d 6527 203d 3e20 2470 726f 6772 6573 ime' => $progres\n-00019570: 7344 656c 7461 5469 6d65 2c0a 0909 0920 sDeltaTime,.... \n-00019580: 2020 2020 272d 7769 7468 5573 6572 4772 '-withUserGr\n-00019590: 6f75 7053 7461 7427 203d 3e20 2477 6974 oupStat' => $wit\n-000195a0: 6855 7365 7247 726f 7570 5374 6174 2c0a hUserGroupStat,.\n-000195b0: 0909 0920 2020 2020 272d 7573 6572 4772 ... '-userGr\n-000195c0: 6f75 7053 7461 7446 696c 6527 203d 3e20 oupStatFile' => \n-000195d0: 2475 7365 7247 726f 7570 5374 6174 4669 $userGroupStatFi\n-000195e0: 6c65 2c0a 0909 0920 2020 2020 272d 636f le,.... '-co\n-000195f0: 6d70 7265 7373 2720 3d3e 2024 636f 6d70 mpress' => $comp\n-00019600: 7265 7373 293b 0a0a 0a23 0a23 2063 6865 ress);...#.# che\n-00019610: 636b 2069 6620 616c 6c20 6578 6365 7074 ck if all except\n-00019620: 4469 7273 2061 6e64 2069 6e63 6c75 6465 Dirs and include\n-00019630: 4469 7273 2061 7265 2072 656c 6174 6976 Dirs are relativ\n-00019640: 6520 5061 7468 730a 230a 7b0a 2020 2020 e Paths.#.{. \n-00019650: 6d79 2024 6572 726f 7220 3d20 303b 0a20 my $error = 0;. \n-00019660: 2020 206d 7920 2464 3b0a 2020 2020 666f my $d;. fo\n-00019670: 7265 6163 6820 2464 2028 4024 6578 6365 reach $d (@$exce\n-00019680: 7074 4469 7273 290a 2020 2020 7b0a 0969 ptDirs). {..i\n-00019690: 6620 2824 6420 3d7e 202f 5c41 5c2f 2f6f f ($d =~ /\\A\\//o\n-000196a0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog\n-000196b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000196c0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n-000196d0: 7472 2720 3d3e 0a09 0909 2020 5b22 6578 tr' =>.... [\"ex\n-000196e0: 6365 7074 4469 7220 3c24 643e 2069 7320 ceptDir <$d> is \n-000196f0: 6e6f 7420 6120 7265 6c61 7469 7665 2070 not a relative p\n-00019700: 6174 6821 225d 293b 0a09 2020 2020 2465 ath!\"]);.. $e\n-00019710: 7272 6f72 203d 2031 3b0a 097d 0a20 2020 rror = 1;..}. \n-00019720: 207d 0a20 2020 2066 6f72 6561 6368 2024 }. foreach $\n-00019730: 6420 2840 2469 6e63 6c75 6465 4469 7273 d (@$includeDirs\n-00019740: 290a 2020 2020 7b0a 0969 6620 2824 6420 ). {..if ($d \n-00019750: 3d7e 202f 5c41 5c2f 2f6f 290a 097b 0a09 =~ /\\A\\//o)..{..\n-00019760: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00019770: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00019780: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-00019790: 0a09 0909 2020 5b22 696e 636c 7564 6544 .... [\"includeD\n-000197a0: 6972 203c 2464 3e20 6973 206e 6f74 2061 ir <$d> is not a\n-000197b0: 2072 656c 6174 6976 6520 7061 7468 2122 relative path!\"\n-000197c0: 5d29 3b0a 0920 2020 2024 6572 726f 7220 ]);.. $error \n-000197d0: 3d20 313b 0a09 7d0a 2020 2020 7d0a 2020 = 1;..}. }. \n-000197e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-000197f0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00019800: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-00019810: 6578 6974 696e 6722 5d2c 0a09 0920 2027 exiting\"],... '\n-00019820: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if\n-00019830: 2024 6572 726f 723b 0a7d 0a0a 230a 2320 $error;.}..#.# \n-00019840: 6578 6365 7074 696f 6e2d 2075 6e64 2069 exception- und i\n-00019850: 6e63 6c75 6465 2d20 4c69 7374 6520 c3bc nclude- Liste ..\n-00019860: 6265 7270 72c3 bc66 656e 2075 6e64 2065 berpr..fen und e\n-00019870: 7661 6c75 6965 7265 6e0a 2320 2b20 6368 valuieren.# + ch\n-00019880: 6563 6b42 6c6f 636b 7352 756c 6520 0a23 eckBlocksRule .#\n-00019890: 0a6d 7920 2840 6578 6365 7074 4469 7273 .my (@exceptDirs\n-000198a0: 2920 3d20 2665 7661 6c45 7863 6570 7469 ) = &evalExcepti\n-000198b0: 6f6e 4c69 7374 2824 6578 6365 7074 4469 onList($exceptDi\n-000198c0: 7273 2c20 2473 6f75 7263 6544 6972 2c0a rs, $sourceDir,.\n-000198d0: 0909 0909 2020 2027 6578 6365 7074 4469 .... 'exceptDi\n-000198e0: 7227 2c20 2765 7863 6c75 6469 6e67 272c r', 'excluding',\n-000198f0: 0a09 0909 0920 2020 2020 2024 636f 6e74 ..... $cont\n-00019900: 4578 6365 7074 4469 7273 4572 722c 2075 ExceptDirsErr, u\n-00019910: 6e64 6566 2c20 302c 2024 7072 4c6f 6729 ndef, 0, $prLog)\n-00019920: 3b0a 6d79 2028 4069 6e63 6c75 6465 4469 ;.my (@includeDi\n-00019930: 7273 2920 3d20 2665 7661 6c45 7863 6570 rs) = &evalExcep\n-00019940: 7469 6f6e 4c69 7374 2824 696e 636c 7564 tionList($includ\n-00019950: 6544 6972 732c 2024 736f 7572 6365 4469 eDirs, $sourceDi\n-00019960: 722c 0a09 0909 0920 2020 2027 696e 636c r,..... 'incl\n-00019970: 7564 6544 6972 272c 2027 696e 636c 7564 udeDir', 'includ\n-00019980: 696e 6727 2c0a 0909 0909 2020 2020 2020 ing',..... \n-00019990: 2024 636f 6e74 4578 6365 7074 4469 7273 $contExceptDirs\n-000199a0: 4572 722c 2075 6e64 6566 2c20 302c 2024 Err, undef, 0, $\n-000199b0: 7072 4c6f 6729 3b0a 2470 724c 6f67 2d3e prLog);.$prLog->\n-000199c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-000199d0: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s\n-000199e0: 7472 2720 3d3e 205b 2265 7863 6570 7452 tr' => [\"exceptR\n-000199f0: 756c 6520 3d20 2220 2e20 2465 7863 5275 ule = \" . $excRu\n-00019a00: 6c65 2d3e 6765 744c 696e 6553 7472 696e le->getLineStrin\n-00019a10: 6728 295d 290a 2020 2020 6966 2024 6578 g()]). if $ex\n-00019a20: 6365 7074 5275 6c65 3b0a 2470 724c 6f67 ceptRule;.$prLog\n-00019a30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00019a40: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. '\n-00019a50: 2d73 7472 2720 3d3e 205b 2269 6e63 6c75 -str' => [\"inclu\n-00019a60: 6465 5275 6c65 203d 2022 202e 2024 696e deRule = \" . $in\n-00019a70: 6352 756c 652d 3e67 6574 4c69 6e65 5374 cRule->getLineSt\n-00019a80: 7269 6e67 2829 5d29 0a20 2020 2069 6620 ring()]). if \n-00019a90: 2469 6e63 6c75 6465 5275 6c65 3b0a 2470 $includeRule;.$p\n-00019aa0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00019ab0: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. \n-00019ac0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-00019ad0: 6865 636b 426c 6f63 6b73 5275 6c65 203d heckBlocksRule =\n-00019ae0: 203c 220a 0909 0920 2e20 2463 6862 5275 <\".... . $chbRu\n-00019af0: 6c65 2d3e 6765 744c 696e 6553 7472 696e le->getLineStrin\n-00019b00: 6728 2920 2e20 223e 225d 290a 2020 2020 g() . \">\"]). \n-00019b10: 6966 2024 6368 6252 756c 652d 3e68 6173 if $chbRule->has\n-00019b20: 4c69 6e65 2829 3b0a 7b0a 2020 2020 6d79 Line();.{. my\n-00019b30: 2024 693b 0a20 2020 2066 6f72 6561 6368 $i;. foreach\n-00019b40: 2024 6920 2830 2e2e 4063 6865 636b 4465 $i (0..@checkDe\n-00019b50: 7669 6365 732d 3129 0a20 2020 207b 0a09 vices-1). {..\n-00019b60: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00019b70: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n-00019b80: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n-00019b90: 0909 2020 2020 2020 5b22 7361 7669 6e67 .. [\"saving\n-00019ba0: 2064 6576 6963 6520 2220 2e20 2463 6865 device \" . $che\n-00019bb0: 636b 4465 7669 6365 7349 6e64 6578 5b24 ckDevicesIndex[$\n-00019bc0: 695d 202e 0a09 0920 2020 2020 2020 2220 i] .... \" \n-00019bd0: 3c22 202e 2024 6368 6563 6b44 6576 6963 <\" . $checkDevic\n-00019be0: 6573 5b24 695d 202e 2022 3e20 2d3e 2022 es[$i] . \"> -> \"\n-00019bf0: 202e 0a09 0920 2020 2020 2020 2463 6865 .... $che\n-00019c00: 636b 4465 7669 6365 7344 6972 5b24 695d ckDevicesDir[$i]\n-00019c10: 202e 2022 2028 626c 6f63 6b20 7369 7a65 . \" (block size\n-00019c20: 203d 2022 202e 0a09 0920 2020 2020 2020 = \" .... \n-00019c30: 2463 6865 636b 4465 7669 6365 7342 535b $checkDevicesBS[\n-00019c40: 2469 5d20 2e20 222c 2022 202e 0a09 0920 $i] . \", \" .... \n-00019c50: 2020 2020 2020 2763 6f6d 7072 6573 7369 'compressi\n-00019c60: 6f6e 3a20 2720 2e20 2463 6865 636b 4465 on: ' . $checkDe\n-00019c70: 7669 6365 7343 6f6d 7072 5b24 695d 202e vicesCompr[$i] .\n-00019c80: 2027 2927 5d29 3b0a 2020 2020 7d0a 7d0a ')']);. }.}.\n-00019c90: 0a0a 230a 2320 6368 6563 6b20 6966 2062 ..#.# check if b\n-00019ca0: 6163 6b75 7044 6972 2069 7320 6120 7375 ackupDir is a su\n-00019cb0: 6264 6972 206f 6620 736f 7572 6365 4469 bdir of sourceDi\n-00019cc0: 720a 230a 6d79 2024 7461 7267 6574 496e r.#.my $targetIn\n-00019cd0: 536f 7572 6365 203d 2030 3b0a 6966 2028 Source = 0;.if (\n-00019ce0: 263a 3a69 7353 7562 4469 7228 2473 6f75 &::isSubDir($sou\n-00019cf0: 7263 6544 6972 2c20 2474 6172 6765 7444 rceDir, $targetD\n-00019d00: 6972 2929 2020 2020 2320 6c69 6567 7420 ir)) # liegt \n-00019d10: 6472 696e 210a 7b0a 2020 2020 2474 6172 drin!.{. $tar\n-00019d20: 6765 7449 6e53 6f75 7263 6520 3d20 313b getInSource = 1;\n-00019d30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019d40: 2023 2041 6e6e 6168 6d65 3a20 6573 2067 # Annahme: es g\n-00019d50: 6962 7420 6b65 696e 6520 4175 736e 6168 ibt keine Ausnah\n-00019d60: 6d65 0a20 2020 2069 6620 2840 6578 6365 me. if (@exce\n-00019d70: 7074 4469 7273 203e 2030 2920 2020 2020 ptDirs > 0) \n-00019d80: 2020 2020 2020 2020 2020 2020 2320 7465 # te\n-00019d90: 7374 656e 2c20 6f62 2076 6965 6c6c 6569 sten, ob viellei\n-00019da0: 6368 7420 696d 2076 6f6d 0a20 2020 207b cht im vom. {\n-00019db0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019dc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00019dd0: 2020 2020 2320 4261 636b 7570 2061 7573 # Backup aus\n-00019de0: 6765 6e6f 6d6d 656e 656e 2054 7265 650a genommenen Tree.\n-00019df0: 096d 7920 2465 3b0a 0966 6f72 6561 6368 .my $e;..foreach\n-00019e00: 2024 6520 2840 6578 6365 7074 4469 7273 $e (@exceptDirs\n-00019e10: 290a 097b 0a09 2020 2020 6966 2028 263a )..{.. if (&:\n-00019e20: 3a69 7353 7562 4469 7228 2465 2c20 2474 :isSubDir($e, $t\n-00019e30: 6172 6765 7444 6972 2929 0a09 2020 2020 argetDir)).. \n-00019e40: 7b0a 0909 2474 6172 6765 7449 6e53 6f75 {...$targetInSou\n-00019e50: 7263 6520 3d20 303b 2020 2020 2023 2064 rce = 0; # d\n-00019e60: 6f63 6820 4175 736e 6168 6d65 2067 6566 och Ausnahme gef\n-00019e70: 756e 6465 6e0a 0909 2470 724c 6f67 2d3e unden...$prLog->\n-00019e80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00019e90: 2027 4927 2c0a 0909 0920 2020 2020 2027 'I',.... '\n-00019ea0: 2d73 7472 2720 3d3e 0a09 0909 2020 2020 -str' =>.... \n-00019eb0: 2020 5b22 7461 7267 6574 2064 6972 6563 [\"target direc\n-00019ec0: 746f 7279 203c 2474 6172 6765 7444 6972 tory <$targetDir\n-00019ed0: 3e20 6973 2069 6e20 2220 2e0a 0909 0920 > is in \" ..... \n-00019ee0: 2020 2020 2020 2265 7863 6570 7469 6f6e \"exception\n-00019ef0: 203c 2465 3e20 6f66 2073 6f75 7263 6520 <$e> of source \n-00019f00: 6469 7265 6374 6f72 7920 2220 2e0a 0909 directory \" ....\n-00019f10: 0920 2020 2020 2020 223c 2473 6f75 7263 . \"<$sourc\n-00019f20: 6544 6972 3e2c 206f 6b22 5d29 3b0a 0909 eDir>, ok\"]);...\n-00019f30: 6c61 7374 3b0a 0920 2020 207d 0a09 7d0a last;.. }..}.\n-00019f40: 2020 2020 7d0a 2020 2020 6966 2028 2474 }. if ($t\n-00019f50: 6172 6765 7449 6e53 6f75 7263 6520 3d3d argetInSource ==\n-00019f60: 2031 2061 6e64 0a09 4069 6e63 6c75 6465 1 and..@include\n-00019f70: 4469 7273 203e 2030 2920 2020 2020 2020 Dirs > 0) \n-00019f80: 2020 2020 2023 2063 6865 636b 2c20 6966 # check, if\n-00019f90: 206e 6f74 2069 6e20 696e 636c 7564 6520 not in include \n-00019fa0: 7061 7468 730a 2020 2020 7b0a 096d 7920 paths. {..my \n-00019fb0: 2469 3b0a 096d 7920 2474 6172 6765 7449 $i;..my $targetI\n-00019fc0: 6e53 6f75 7263 6520 3d20 303b 2020 2020 nSource = 0; \n-00019fd0: 2020 2320 6173 7375 6d70 7469 6f6e 3a20 # assumption: \n-00019fe0: 7461 7267 6574 2069 7320 6e6f 7420 696e target is not in\n-00019ff0: 2073 6f75 7263 650a 0966 6f72 6561 6368 source..foreach\n-0001a000: 2024 6920 2840 696e 636c 7564 6544 6972 $i (@includeDir\n-0001a010: 7329 0a09 7b0a 0920 2020 2069 6620 2826 s)..{.. if (&\n-0001a020: 3a3a 6973 5375 6244 6972 2824 692c 2024 ::isSubDir($i, $\n-0001a030: 7461 7267 6574 4469 7229 290a 0920 2020 targetDir)).. \n-0001a040: 207b 0a09 0924 7461 7267 6574 496e 536f {...$targetInSo\n-0001a050: 7572 6365 203d 2031 3b0a 0909 6c61 7374 urce = 1;...last\n-0001a060: 3b0a 0920 2020 207d 0a09 7d0a 2020 2020 ;.. }..}. \n-0001a070: 7d0a 7d0a 2470 724c 6f67 2d3e 7072 696e }.}.$prLog->prin\n-0001a080: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-0001a090: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-0001a0a0: 3d3e 0a09 2020 2020 2020 5b22 6261 636b =>.. [\"back\n-0001a0b0: 7570 2064 6972 6563 746f 7279 203c 2474 up directory <$t\n-0001a0c0: 6172 6765 7444 6972 3e20 6361 6e6e 6f74 argetDir> cannot\n-0001a0d0: 2062 6520 7061 7274 206f 6620 7468 6520 be part of the \n-0001a0e0: 2220 2e0a 0920 2020 2020 2020 2273 6f75 \" ... \"sou\n-0001a0f0: 7263 6520 6469 7265 6374 6f72 7920 3c24 rce directory <$\n-0001a100: 736f 7572 6365 4469 723e 222c 0a09 2020 sourceDir>\",.. \n-0001a110: 2020 2020 2022 6465 6669 6e65 2061 6e20 \"define an \n-0001a120: 6578 6365 7074 696f 6e20 7769 7468 202d exception with -\n-0001a130: 2d65 7863 6570 7444 6972 7320 6f72 2063 -exceptDirs or c\n-0001a140: 686f 6f73 6520 616e 6f74 6865 7220 2220 hoose another \" \n-0001a150: 2e0a 0920 2020 2020 2020 2274 6172 6765 ... \"targe\n-0001a160: 7420 6469 7265 6374 6f72 7922 5d2c 0a09 t directory\"],..\n-0001a170: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-0001a180: 2031 290a 2020 2020 6966 2028 2474 6172 1). if ($tar\n-0001a190: 6765 7449 6e53 6f75 7263 6529 3b0a 0a23 getInSource);..#\n-0001a1a0: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all \n-0001a1b0: 6578 6365 7074 4469 7273 2061 7265 2073 exceptDirs are s\n-0001a1c0: 7562 6469 7265 6374 6f72 6965 7320 6f66 ubdirectories of\n-0001a1d0: 2069 6e63 6c75 6465 4469 7273 206f 720a includeDirs or.\n-0001a1e0: 2320 6765 6e65 7261 7465 2061 2077 6172 # generate a war\n-0001a1f0: 6e69 6e67 0a23 2061 6c73 6f20 6368 6563 ning.# also chec\n-0001a200: 6b20 666f 7220 7361 6d65 2064 6972 6563 k for same direc\n-0001a210: 746f 7269 6573 2069 6e20 696e 636c 7564 tories in includ\n-0001a220: 6544 6972 7320 616e 6420 6578 636c 7564 eDirs and exclud\n-0001a230: 6544 6972 730a 230a 6d79 2024 5361 6d65 eDirs.#.my $Same\n-0001a240: 496e 636c 4578 636c 203d 2030 3b0a 6966 InclExcl = 0;.if\n-0001a250: 2028 4065 7863 6570 7444 6972 7320 616e (@exceptDirs an\n-0001a260: 6420 4069 6e63 6c75 6465 4469 7273 2061 d @includeDirs a\n-0001a270: 6e64 206e 6f74 2065 7869 7374 7320 2473 nd not exists $s\n-0001a280: 7570 7072 6573 7357 6172 6e69 6e67 7b27 uppressWarning{'\n-0001a290: 6578 6344 6972 277d 290a 7b0a 2020 2020 excDir'}).{. \n-0001a2a0: 6d79 2024 653b 0a20 2020 2066 6f72 6561 my $e;. forea\n-0001a2b0: 6368 2024 6520 2840 6578 6365 7074 4469 ch $e (@exceptDi\n-0001a2c0: 7273 290a 2020 2020 7b0a 096d 7920 2469 rs). {..my $i\n-0001a2d0: 3b0a 096d 7920 2469 7349 6e20 3d20 303b ;..my $isIn = 0;\n-0001a2e0: 0a09 666f 7265 6163 6820 2469 2028 4069 ..foreach $i (@i\n-0001a2f0: 6e63 6c75 6465 4469 7273 290a 097b 0a09 ncludeDirs)..{..\n-0001a300: 2020 2020 6966 2028 2469 2065 7120 2465 if ($i eq $e\n-0001a310: 2920 2020 2020 2023 2073 616d 6520 6469 ) # same di\n-0001a320: 7265 6374 6f72 7920 6368 6f73 656e 2066 rectory chosen f\n-0001a330: 6f72 2069 6e63 6c75 6465 2061 6e64 2065 or include and e\n-0001a340: 7863 6c75 6465 0a09 2020 2020 7b0a 0909 xclude.. {...\n-0001a350: 2453 616d 6549 6e63 6c45 7863 6c20 3d20 $SameInclExcl = \n-0001a360: 313b 0a09 0924 7072 4c6f 672d 3e70 7269 1;...$prLog->pri\n-0001a370: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-0001a380: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-0001a390: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n-0001a3a0: 2263 6f6e 6669 6775 7261 7469 6f6e 2065 \"configuration e\n-0001a3b0: 7272 6f72 3a20 3c24 693e 2063 686f 7365 rror: <$i> chose\n-0001a3c0: 6e20 2220 2e0a 0909 0920 2020 2020 2020 n \" ..... \n-0001a3d0: 2266 6f72 206f 7074 696f 6e73 2069 6e63 \"for options inc\n-0001a3e0: 6c75 6465 4469 7273 2061 6e64 2065 7863 ludeDirs and exc\n-0001a3f0: 6c75 6465 4469 7273 225d 293b 0a09 2020 ludeDirs\"]);.. \n-0001a400: 2020 7d0a 0920 2020 2069 6620 2826 3a3a }.. if (&::\n-0001a410: 6973 5375 6244 6972 2824 692c 2024 6529 isSubDir($i, $e)\n-0001a420: 290a 0920 2020 207b 0a09 0924 6973 496e ).. {...$isIn\n-0001a430: 203d 2031 3b0a 0909 6c61 7374 3b0a 0920 = 1;...last;.. \n-0001a440: 2020 207d 0a09 7d0a 0924 7072 4c6f 672d }..}..$prLog-\n-0001a450: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0001a460: 3e20 2757 272c 0a09 0920 2020 2020 2027 > 'W',... '\n-0001a470: 2d73 7472 2720 3d3e 205b 2265 7863 6570 -str' => [\"excep\n-0001a480: 7420 6469 7220 3c24 653e 2069 7320 6e6f t dir <$e> is no\n-0001a490: 7420 7061 7274 206f 6620 7468 6520 6261 t part of the ba\n-0001a4a0: 636b 7570 225d 290a 0920 2020 2075 6e6c ckup\"]).. unl\n-0001a4b0: 6573 7320 2469 7349 6e3b 0a20 2020 207d ess $isIn;. }\n-0001a4c0: 0a7d 0a65 7869 7420 3120 6966 2024 5361 .}.exit 1 if $Sa\n-0001a4d0: 6d65 496e 636c 4578 636c 3b0a 0a23 0a23 meInclExcl;..#.#\n-0001a4e0: 206c 6f63 6b20 6669 6c65 20c3 bc62 6572 lock file ..ber\n-0001a4f0: 7072 c3bc 6665 6e0a 230a 3a3a 6368 6563 pr..fen.#.::chec\n-0001a500: 6b4c 6f63 6b46 696c 6528 246c 6f63 6b46 kLockFile($lockF\n-0001a510: 696c 652c 2024 7072 4c6f 6729 3b0a 0a23 ile, $prLog);..#\n-0001a520: 2070 7265 7061 7265 2065 7863 6570 7454 prepare exceptT\n-0001a530: 7970 6573 0a6d 7920 2825 6578 5479 7065 ypes.my (%exType\n-0001a540: 732c 2024 6574 293b 0a66 6f72 6561 6368 s, $et);.foreach\n-0001a550: 2024 6574 2028 7370 6c69 7428 2f2f 2c20 $et (split(//, \n-0001a560: 2465 7863 6570 7454 7970 6573 207c 7c20 $exceptTypes || \n-0001a570: 2222 2929 0a7b 0a20 2020 2024 6578 5479 \"\")).{. $exTy\n-0001a580: 7065 737b 2465 747d 203d 2030 3b20 2020 pes{$et} = 0; \n-0001a590: 2020 2020 2020 2320 7468 6973 2069 7320 # this is \n-0001a5a0: 6120 666c 6167 2061 6e64 2061 6e64 2061 a flag and and a\n-0001a5b0: 6c73 6f20 6120 636f 756e 7465 720a 7d0a lso a counter.}.\n-0001a5c0: 0a23 0a23 2073 6574 2065 6e76 6972 6f6e .#.# set environ\n-0001a5d0: 6d65 6e74 2076 6172 6961 626c 6573 0a23 ment variables.#\n-0001a5e0: 0a24 454e 567b 2753 5442 555f 736f 7572 .$ENV{'STBU_sour\n-0001a5f0: 6365 4469 7227 7d20 3d20 2473 6f75 7263 ceDir'} = $sourc\n-0001a600: 6544 6972 3b0a 2445 4e56 7b27 5354 4255 eDir;.$ENV{'STBU\n-0001a610: 5f62 6163 6b75 7044 6972 277d 203d 2024 _backupDir'} = $\n-0001a620: 6261 636b 7570 4469 723b 0a24 454e 567b backupDir;.$ENV{\n-0001a630: 2753 5442 555f 7365 7269 6573 277d 203d 'STBU_series'} =\n-0001a640: 2024 7365 7269 6573 3b0a 2445 4e56 7b27 $series;.$ENV{'\n-0001a650: 5354 4255 5f74 6d70 6469 7227 7d20 3d20 STBU_tmpdir'} = \n-0001a660: 2474 6d70 6469 723b 0a24 454e 567b 2753 $tmpdir;.$ENV{'S\n-0001a670: 5442 555f 6c6f 636b 4669 6c65 277d 203d TBU_lockFile'} =\n-0001a680: 2024 6c6f 636b 4669 6c65 3b0a 2445 4e56 $lockFile;.$ENV\n-0001a690: 7b27 5354 4255 5f66 6f6c 6c6f 774c 696e {'STBU_followLin\n-0001a6a0: 6b73 277d 203d 2024 666f 6c6c 6f77 4c69 ks'} = $followLi\n-0001a6b0: 6e6b 733b 0a24 454e 567b 2753 5442 555f nks;.$ENV{'STBU_\n-0001a6c0: 6c61 7465 4c69 6e6b 7327 7d20 3d20 246c lateLinks'} = $l\n-0001a6d0: 6174 654c 696e 6b73 3b0a 2445 4e56 7b27 ateLinks;.$ENV{'\n-0001a6e0: 5354 4255 5f6c 6174 6543 6f6d 7072 6573 STBU_lateCompres\n-0001a6f0: 732c 277d 203d 2024 6c61 7465 436f 6d70 s,'} = $lateComp\n-0001a700: 7265 7373 2c3b 0a24 454e 567b 2753 5442 ress,;.$ENV{'STB\n-0001a710: 555f 7665 7262 6f73 6527 7d20 3d20 2476 U_verbose'} = $v\n-0001a720: 6572 626f 7365 3b0a 2445 4e56 7b27 5354 erbose;.$ENV{'ST\n-0001a730: 4255 5f64 6f4e 6f74 4465 6c65 7465 277d BU_doNotDelete'}\n-0001a740: 203d 2024 646f 4e6f 7444 656c 6574 653b = $doNotDelete;\n-0001a750: 0a24 454e 567b 2753 5442 555f 6465 6c65 .$ENV{'STBU_dele\n-0001a760: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir\n-0001a770: 7327 7d20 3d20 2464 656c 6574 654e 6f74 s'} = $deleteNot\n-0001a780: 4669 6e69 7368 6564 4469 7273 3b0a 2445 FinishedDirs;.$E\n-0001a790: 4e56 7b27 5354 4255 5f6c 6f67 4669 6c65 NV{'STBU_logFile\n-0001a7a0: 277d 203d 2024 6c6f 6746 696c 653b 0a24 '} = $logFile;.$\n-0001a7b0: 454e 567b 2753 5442 555f 6c6f 6749 6e42 ENV{'STBU_logInB\n-0001a7c0: 6163 6b75 7044 6972 277d 203d 2024 6c6f ackupDir'} = $lo\n-0001a7d0: 6749 6e42 6163 6b75 7044 6972 3b0a 2445 gInBackupDir;.$E\n-0001a7e0: 4e56 7b27 6c6f 6749 6e42 6163 6b75 7044 NV{'logInBackupD\n-0001a7f0: 6972 4669 6c65 4e61 6d65 277d 203d 2024 irFileName'} = $\n-0001a800: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi\n-0001a810: 6c65 4e61 6d65 3b0a 0a23 0a23 2070 7265 leName;..#.# pre\n-0001a820: 636f 6d6d 616e 6420 6175 7366 c3bc 6872 command ausf..hr\n-0001a830: 656e 0a23 0a69 6620 2864 6566 696e 6564 en.#.if (defined\n-0001a840: 2024 7072 6563 6f6d 6d61 6e64 290a 7b0a $precommand).{.\n-0001a850: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-0001a860: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n-0001a870: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => \n-0001a880: 5b22 7374 6172 7469 6e67 2070 7265 2063 [\"starting pre c\n-0001a890: 6f6d 6d61 6e64 203c 4024 7072 6563 6f6d ommand <@$precom\n-0001a8a0: 6d61 6e64 3e20 2e2e 2e22 5d29 3b0a 2020 mand> ...\"]);. \n-0001a8b0: 2020 6d79 2028 2470 7265 436f 6d6d 2c20 my ($preComm, \n-0001a8c0: 4070 7265 5061 7261 6d29 203d 2028 4024 @preParam) = (@$\n-0001a8d0: 7072 6563 6f6d 6d61 6e64 293b 0a20 2020 precommand);. \n-0001a8e0: 206d 7920 2470 7265 636f 203d 2066 6f72 my $preco = for\n-0001a8f0: 6b50 726f 632d 3e6e 6577 2827 2d65 7865 kProc->new('-exe\n-0001a900: 6327 203d 3e20 2470 7265 436f 6d6d 2c0a c' => $preComm,.\n-0001a910: 0909 0920 2020 2020 2027 2d70 6172 616d ... '-param\n-0001a920: 2720 3d3e 205c 4070 7265 5061 7261 6d2c ' => \\@preParam,\n-0001a930: 0a09 0909 2020 2020 2020 272d 776f 726b .... '-work\n-0001a940: 696e 6744 6972 2720 3d3e 2027 2e27 2c0a ingDir' => '.',.\n-0001a950: 0909 0920 2020 2020 2027 2d6f 7574 5261 ... '-outRa\n-0001a960: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => \"$tmpdi\n-0001a970: 722f 7072 6563 6f6d 6d2d 222c 0a09 0909 r/precomm-\",....\n-0001a980: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n-0001a990: 3e20 2470 724c 6f67 293b 0a20 2020 2024 > $prLog);. $\n-0001a9a0: 7072 6563 6f2d 3e77 6169 7428 293b 0a20 preco->wait();. \n-0001a9b0: 2020 206d 7920 246f 7574 203d 2024 7072 my $out = $pr\n-0001a9c0: 6563 6f2d 3e67 6574 5354 444f 5554 2829 eco->getSTDOUT()\n-0001a9d0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n-0001a9e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-0001a9f0: 5727 2c0a 0909 2020 272d 7374 7227 203d W',... '-str' =\n-0001aa00: 3e20 5b22 5354 444f 5554 206f 6620 3c40 > [\"STDOUT of <@\n-0001aa10: 2470 7265 636f 6d6d 616e 643e 3a22 2c20 $precommand>:\", \n-0001aa20: 4024 6f75 745d 290a 0969 6620 2840 246f @$out])..if (@$o\n-0001aa30: 7574 203e 2030 293b 0a20 2020 2024 6f75 ut > 0);. $ou\n-0001aa40: 7420 3d20 2470 7265 636f 2d3e 6765 7453 t = $preco->getS\n-0001aa50: 5444 4552 5228 293b 0a20 2020 2024 7072 TDERR();. $pr\n-0001aa60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0001aa70: 6427 203d 3e20 2745 272c 0a09 0920 2027 d' => 'E',... '\n-0001aa80: 2d73 7472 2720 3d3e 205b 2253 5444 4552 -str' => [\"STDER\n-0001aa90: 5220 6f66 203c 4024 7072 6563 6f6d 6d61 R of <@$precomma\n-0001aaa0: 6e64 3e3a 222c 2040 246f 7574 5d29 0a09 nd>:\", @$out])..\n-0001aab0: 6966 2028 4024 6f75 7420 3e20 3029 3b0a if (@$out > 0);.\n-0001aac0: 0a20 2020 206d 7920 2473 7461 7475 7320 . my $status \n-0001aad0: 3d20 2470 7265 636f 2d3e 6765 7428 272d = $preco->get('-\n-0001aae0: 7768 6174 2720 3d3e 2027 7374 6174 7573 what' => 'status\n-0001aaf0: 2729 3b0a 2020 2020 6966 2028 2473 7461 ');. if ($sta\n-0001ab00: 7475 7320 3d3d 2030 290a 2020 2020 7b0a tus == 0). {.\n-0001ab10: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0001ab20: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-0001ab30: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-0001ab40: 0a09 0920 2020 2020 205b 2270 7265 2063 ... [\"pre c\n-0001ab50: 6f6d 6d61 6e64 203c 4024 7072 6563 6f6d ommand <@$precom\n-0001ab60: 6d61 6e64 3e20 6669 6e69 7368 6564 2077 mand> finished w\n-0001ab70: 6974 6820 7374 6174 7573 2030 225d 293b ith status 0\"]);\n-0001ab80: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-0001ab90: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-0001aba0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001abb0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-0001abc0: 7472 2720 3d3e 205b 2270 7265 2063 6f6d tr' => [\"pre com\n-0001abd0: 6d61 6e64 203c 4024 7072 6563 6f6d 6d61 mand <@$precomma\n-0001abe0: 6e64 3e20 6669 6e69 7368 6564 2077 6974 nd> finished wit\n-0001abf0: 6820 2220 2e0a 0909 0909 2022 7374 6174 h \" ...... \"stat\n-0001ac00: 7573 2024 7374 6174 7573 2c20 6578 6974 us $status, exit\n-0001ac10: 696e 6722 5d29 3b0a 0975 6e6c 696e 6b20 ing\"]);..unlink \n-0001ac20: 246c 6f63 6b46 696c 6520 6966 2024 6c6f $lockFile if $lo\n-0001ac30: 636b 4669 6c65 3b0a 0965 7869 7420 313b ckFile;..exit 1;\n-0001ac40: 0a20 2020 207d 0a7d 0a0a 0a23 0a23 2045 . }.}...#.# E\n-0001ac50: 727a 6575 6765 6e20 6465 7220 6265 6ec3 rzeugen der ben.\n-0001ac60: b674 6967 7465 6e20 4f62 6a65 6b74 650a .tigten Objekte.\n-0001ac70: 230a 6d79 2024 6164 6d69 6e44 6972 7320 #.my $adminDirs \n-0001ac80: 3d20 6164 6d69 6e44 6972 6563 746f 7269 = adminDirectori\n-0001ac90: 6573 2d3e 6e65 7728 272d 7461 7267 6574 es->new('-target\n-0001aca0: 4469 7227 203d 3e20 2474 6172 6765 7444 Dir' => $targetD\n-0001acb0: 6972 2c0a 0909 0909 2020 2020 2020 272d ir,..... '-\n-0001acc0: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' =>\n-0001acd0: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,.\n-0001ace0: 0909 0909 2020 2020 2020 272d 746d 7064 .... '-tmpd\n-0001acf0: 6972 2720 3d3e 2024 746d 7064 6972 2c0a ir' => $tmpdir,.\n-0001ad00: 0909 0909 2020 2020 2020 272d 6368 6d6f .... '-chmo\n-0001ad10: 644d 4435 4669 6c65 2720 3d3e 2024 6368 dMD5File' => $ch\n-0001ad20: 6d6f 644d 4435 4669 6c65 2c0a 0909 0909 modMD5File,.....\n-0001ad30: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n-0001ad40: 3e20 2470 724c 6f67 2c0a 0909 0909 2020 > $prLog,..... \n-0001ad50: 2020 2020 272d 616b 7444 6174 6527 203d '-aktDate' =\n-0001ad60: 3e20 2461 6b74 4461 7465 2c0a 0909 0909 > $aktDate,.....\n-0001ad70: 2020 2020 2020 272d 6465 6275 674d 6f64 '-debugMod\n-0001ad80: 6527 203d 3e20 2464 6562 7567 293b 0a0a e' => $debug);..\n-0001ad90: 2370 7269 6e74 2022 6163 7475 616c 2064 #print \"actual d\n-0001ada0: 6972 2066 6f72 2074 6869 7320 6261 636b ir for this back\n-0001adb0: 7570 3a20 2b22 2e20 2024 6164 6d69 6e44 up: +\". $adminD\n-0001adc0: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir()\n-0001add0: 2c20 225c 6e22 3b0a 0a6d 7920 2469 6e64 , \"\\n\";..my $ind\n-0001ade0: 6578 4469 7220 3d20 696e 6465 7844 6972 exDir = indexDir\n-0001adf0: 2d3e 6e65 7728 293b 0a0a 6d79 2024 616b ->new();..my $ak\n-0001ae00: 7446 696c 656e 616d 6520 3d0a 2020 2020 tFilename =. \n-0001ae10: 616b 7446 696c 656e 616d 652d 3e6e 6577 aktFilename->new\n-0001ae20: 2827 2d69 6e66 6f46 696c 6527 203d 3e20 ('-infoFile' => \n-0001ae30: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA\n-0001ae40: 6b74 496e 666f 4669 6c65 2829 2c0a 0909 ktInfoFile(),...\n-0001ae50: 2020 2020 2027 2d62 6c6f 636b 4368 6563 '-blockChec\n-0001ae60: 6b53 756d 4669 6c65 2720 3d3e 0a09 0920 kSumFile' =>... \n-0001ae70: 2020 2020 2461 646d 696e 4469 7273 2d3e $adminDirs->\n-0001ae80: 6765 7441 6b74 4469 7228 2920 2e20 222f getAktDir() . \"/\n-0001ae90: 2462 6c6f 636b 4368 6563 6b53 756d 4669 $blockCheckSumFi\n-0001aea0: 6c65 222c 0a09 0920 2020 2020 272d 636f le\",... '-co\n-0001aeb0: 6d70 7265 7373 4d44 3546 696c 6527 203d mpressMD5File' =\n-0001aec0: 3e20 2463 6f6d 7072 6573 734d 4435 4669 > $compressMD5Fi\n-0001aed0: 6c65 2c0a 0909 2020 2020 2027 2d73 6f75 le,... '-sou\n-0001aee0: 7263 6544 6972 2720 3d3e 2024 736f 7572 rceDir' => $sour\n-0001aef0: 6365 4469 722c 0a09 0920 2020 2020 272d ceDir,... '-\n-0001af00: 666f 6c6c 6f77 4c69 6e6b 7327 203d 3e20 followLinks' => \n-0001af10: 2466 6f6c 6c6f 774c 696e 6b73 2c0a 0909 $followLinks,...\n-0001af20: 2020 2020 2027 2d63 6f6d 7072 6573 7327 '-compress'\n-0001af30: 203d 3e20 2463 6f6d 7072 6573 732c 0a09 => $compress,..\n-0001af40: 0920 2020 2020 272d 756e 636f 6d70 7265 . '-uncompre\n-0001af50: 7373 2720 3d3e 2024 756e 636f 6d70 7265 ss' => $uncompre\n-0001af60: 7373 2c0a 0909 2020 2020 2027 2d70 6f73 ss,... '-pos\n-0001af70: 7466 6978 2720 3d3e 2024 706f 7374 6669 tfix' => $postfi\n-0001af80: 782c 0a09 0920 2020 2020 272d 636f 6d70 x,... '-comp\n-0001af90: 7252 756c 6527 203d 3e20 2463 6f6d 7072 rRule' => $compr\n-0001afa0: 5275 6c65 2c0a 0909 2020 2020 2027 2d65 Rule,... '-e\n-0001afb0: 7863 6570 7452 756c 6527 203d 3e20 2465 xceptRule' => $e\n-0001afc0: 7863 5275 6c65 2c0a 0909 2020 2020 2027 xcRule,... '\n-0001afd0: 2d69 6e63 6c75 6465 5275 6c65 2720 3d3e -includeRule' =>\n-0001afe0: 2024 696e 6352 756c 652c 0a09 0920 2020 $incRule,... \n-0001aff0: 2020 272d 7772 6974 6545 7863 6c75 6465 '-writeExclude\n-0001b000: 4c6f 6727 203d 3e20 2477 7269 7465 4578 Log' => $writeEx\n-0001b010: 636c 7564 654c 6f67 2c0a 0909 2020 2020 cludeLog,... \n-0001b020: 2027 2d65 7863 6570 7454 7970 6573 2720 '-exceptTypes' \n-0001b030: 3d3e 2024 6578 6365 7074 5479 7065 732c => $exceptTypes,\n-0001b040: 0a09 0920 2020 2020 272d 7370 6563 6961 ... '-specia\n-0001b050: 6c54 7970 6541 7263 6869 7665 7227 203d lTypeArchiver' =\n-0001b060: 3e20 2473 7065 6369 616c 5479 7065 4172 > $specialTypeAr\n-0001b070: 6368 6976 6572 2c0a 0909 2020 2020 2027 chiver,... '\n-0001b080: 2d61 7263 6869 7665 5479 7065 7327 203d -archiveTypes' =\n-0001b090: 3e20 2461 7263 6869 7665 5479 7065 732c > $archiveTypes,\n-0001b0a0: 0a09 0920 2020 2020 272d 6368 6563 6b42 ... '-checkB\n-0001b0b0: 6c6f 636b 7352 756c 6527 203d 3e20 5c40 locksRule' => \\@\n-0001b0c0: 6368 6563 6b42 6c6f 636b 7352 756c 652c checkBlocksRule,\n-0001b0d0: 0a09 0920 2020 2020 272d 6368 6563 6b42 ... '-checkB\n-0001b0e0: 6c6f 636b 7342 5327 203d 3e20 5c40 6368 locksBS' => \\@ch\n-0001b0f0: 6563 6b42 6c6f 636b 7342 532c 0a09 0920 eckBlocksBS,... \n-0001b100: 2020 2020 272d 6368 6563 6b42 6c6f 636b '-checkBlock\n-0001b110: 7343 6f6d 7072 2720 3d3e 205c 4063 6865 sCompr' => \\@che\n-0001b120: 636b 426c 6f63 6b73 436f 6d70 722c 0a09 ckBlocksCompr,..\n-0001b130: 0920 2020 2020 272d 6368 6563 6b42 6c6f . '-checkBlo\n-0001b140: 636b 7352 6561 6427 203d 3e20 5c40 6368 cksRead' => \\@ch\n-0001b150: 6563 6b42 6c6f 636b 7352 6561 642c 0a09 eckBlocksRead,..\n-0001b160: 0920 2020 2020 272d 6368 6563 6b44 6576 . '-checkDev\n-0001b170: 6963 6573 2720 3d3e 205c 4063 6865 636b ices' => \\@check\n-0001b180: 4465 7669 6365 732c 0a09 0920 2020 2020 Devices,... \n-0001b190: 272d 6368 6563 6b44 6576 6963 6573 4469 '-checkDevicesDi\n-0001b1a0: 7227 203d 3e20 5c40 6368 6563 6b44 6576 r' => \\@checkDev\n-0001b1b0: 6963 6573 4469 722c 0a09 0920 2020 2020 icesDir,... \n-0001b1c0: 272d 6368 6563 6b44 6576 6963 6573 4253 '-checkDevicesBS\n-0001b1d0: 2720 3d3e 205c 4063 6865 636b 4465 7669 ' => \\@checkDevi\n-0001b1e0: 6365 7342 532c 0a09 0920 2020 2020 272d cesBS,... '-\n-0001b1f0: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp\n-0001b200: 7227 203d 3e20 5c40 6368 6563 6b44 6576 r' => \\@checkDev\n-0001b210: 6963 6573 436f 6d70 722c 0a09 0920 2020 icesCompr,... \n-0001b220: 2020 272d 6c61 7465 4c69 6e6b 7327 203d '-lateLinks' =\n-0001b230: 3e20 246c 6174 654c 696e 6b73 2c0a 0909 > $lateLinks,...\n-0001b240: 2020 2020 2027 2d6c 6f67 496e 4261 636b '-logInBack\n-0001b250: 7570 4469 7227 203d 3e20 246c 6f67 496e upDir' => $logIn\n-0001b260: 4261 636b 7570 4469 722c 0a09 0920 2020 BackupDir,... \n-0001b270: 2020 272d 636f 6d70 7265 7373 4c6f 6749 '-compressLogI\n-0001b280: 6e42 6163 6b75 7044 6972 2720 3d3e 2024 nBackupDir' => $\n-0001b290: 636f 6d70 7265 7373 4c6f 6749 6e42 6163 compressLogInBac\n-0001b2a0: 6b75 7044 6972 2c0a 0909 2020 2020 2027 kupDir,... '\n-0001b2b0: 2d6c 6f67 496e 4261 636b 7570 4469 7246 -logInBackupDirF\n-0001b2c0: 696c 654e 616d 6527 203d 3e20 246c 6f67 ileName' => $log\n-0001b2d0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-0001b2e0: 616d 652c 0a09 0920 2020 2020 272d 6578 ame,... '-ex\n-0001b2f0: 6365 7074 4469 7273 2720 3d3e 205c 4065 ceptDirs' => \\@e\n-0001b300: 7863 6570 7444 6972 732c 0a09 0920 2020 xceptDirs,... \n-0001b310: 2020 272d 696e 636c 7564 6544 6972 7327 '-includeDirs'\n-0001b320: 203d 3e20 5c40 696e 636c 7564 6544 6972 => \\@includeDir\n-0001b330: 732c 0a09 0920 2020 2020 272d 616b 7444 s,... '-aktD\n-0001b340: 6174 6527 203d 3e20 2461 6b74 4461 7465 ate' => $aktDate\n-0001b350: 2c0a 0909 2020 2020 2027 2d63 686d 6f64 ,... '-chmod\n-0001b360: 4d44 3546 696c 6527 203d 3e20 2463 686d MD5File' => $chm\n-0001b370: 6f64 4d44 3546 696c 652c 0a09 0920 2020 odMD5File,... \n-0001b380: 2020 272d 696e 6465 7844 6972 2720 3d3e '-indexDir' =>\n-0001b390: 2024 696e 6465 7844 6972 2c0a 0909 2020 $indexDir,... \n-0001b3a0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n-0001b3b0: 7072 4c6f 6729 3b0a 0a6d 7920 2473 6574 prLog);..my $set\n-0001b3c0: 5265 7365 7444 6972 5469 6d65 7346 696c ResetDirTimesFil\n-0001b3d0: 6520 3d20 263a 3a75 6e69 7146 696c 654e e = &::uniqFileN\n-0001b3e0: 616d 6528 2224 746d 7064 6972 2f73 746f ame(\"$tmpdir/sto\n-0001b3f0: 7265 4261 636b 7570 2d64 6972 732e 2424 reBackup-dirs.$$\n-0001b400: 2229 3b0a 6d79 2024 7365 7452 6573 6574 \");.my $setReset\n-0001b410: 4469 7254 696d 6573 203d 0a20 2020 2073 DirTimes =. s\n-0001b420: 6574 5265 7365 7444 6972 5469 6d65 732d etResetDirTimes-\n-0001b430: 3e6e 6577 2827 2d74 6d70 4469 7227 203d >new('-tmpDir' =\n-0001b440: 3e20 2474 6d70 6469 722c 0a09 0909 2020 > $tmpdir,.... \n-0001b450: 272d 736f 7572 6365 4469 7227 203d 3e20 '-sourceDir' => \n-0001b460: 2473 6f75 7263 6544 6972 2c0a 0909 0920 $sourceDir,.... \n-0001b470: 2027 2d74 6172 6765 7444 6972 2720 3d3e '-targetDir' =>\n-0001b480: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get\n-0001b490: 416b 7444 6972 2829 2c0a 0909 0920 2027 AktDir(),.... '\n-0001b4a0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n-0001b4b0: 672c 0a09 0909 2020 272d 7372 6474 6627 g,.... '-srdtf'\n-0001b4c0: 203d 3e20 2473 6574 5265 7365 7444 6972 => $setResetDir\n-0001b4d0: 5469 6d65 7346 696c 652c 0a09 0909 2020 TimesFile,.... \n-0001b4e0: 272d 646f 4e6f 7468 696e 6727 203d 3e20 '-doNothing' => \n-0001b4f0: 246c 6174 654c 696e 6b73 203f 2031 203a $lateLinks ? 1 :\n-0001b500: 2030 2c0a 0909 0920 2027 2d72 6573 6574 0,.... '-reset\n-0001b510: 4174 696d 6527 203d 3e20 2472 6573 6574 Atime' => $reset\n-0001b520: 4174 696d 652c 0a09 0909 2020 272d 7072 Atime,.... '-pr\n-0001b530: 6573 6572 7665 5065 726d 7327 203d 3e20 eservePerms' => \n-0001b540: 2470 7265 7365 7276 6550 6572 6d73 293b $preservePerms);\n-0001b550: 0a23 7072 696e 7420 2261 6374 7561 6c20 .#print \"actual \n-0001b560: 6261 636b 7570 2064 6972 203d 2022 2c20 backup dir = \", \n-0001b570: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA\n-0001b580: 6b74 4469 7228 292c 225c 6e22 3b0a 6d79 ktDir(),\"\\n\";.my\n-0001b590: 2024 7072 4c6f 6732 203d 2075 6e64 6566 $prLog2 = undef\n-0001b5a0: 3b0a 6966 2028 246c 6f67 496e 4261 636b ;.if ($logInBack\n-0001b5b0: 7570 4469 7229 2020 2020 2020 2320 6175 upDir) # au\n-0001b5c0: 6368 2069 6e20 4261 636b 7570 4469 7273 ch in BackupDirs\n-0001b5d0: 2068 6572 696e 6c6f 6767 656e 0a7b 0a20 herinloggen.{. \n-0001b5e0: 2020 2024 6c6f 6749 6e42 6163 6b75 7044 $logInBackupD\n-0001b5f0: 6972 4669 6c65 4e61 6d65 203d 0a09 2461 irFileName =..$a\n-0001b600: 646d 696e 4469 7273 2d3e 6765 7441 6b74 dminDirs->getAkt\n-0001b610: 4469 7228 2920 2e20 222f 246c 6f67 496e Dir() . \"/$logIn\n-0001b620: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam\n-0001b630: 6522 2c0a 2020 2020 2470 724c 6f67 3220 e\",. $prLog2 \n-0001b640: 3d20 7072 696e 744c 6f67 2d3e 6e65 7728 = printLog->new(\n-0001b650: 272d 6b69 6e64 2720 3d3e 2024 7072 4c6f '-kind' => $prLo\n-0001b660: 674b 696e 642c 0a09 0909 2020 2020 272d gKind,.... '-\n-0001b670: 6669 6c65 2720 3d3e 2024 6c6f 6749 6e42 file' => $logInB\n-0001b680: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName\n-0001b690: 2c0a 0909 0920 2020 2027 2d77 6974 6854 ,.... '-withT\n-0001b6a0: 696d 6527 203d 3e20 2779 6573 272c 0a09 ime' => 'yes',..\n-0001b6b0: 0909 2020 2020 272d 6d61 7846 696c 656c .. '-maxFilel\n-0001b6c0: 656e 2720 3d3e 2030 2c0a 0909 0920 2020 en' => 0,.... \n-0001b6d0: 2027 2d6e 6f4f 664f 6c64 4669 6c65 7327 '-noOfOldFiles'\n-0001b6e0: 203d 3e20 312c 0a09 0909 2020 2020 272d => 1,.... '-\n-0001b6f0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd\n-0001b700: 6972 293b 0a20 2020 2024 7072 4c6f 672d ir);. $prLog-\n-0001b710: 3e61 6464 2827 2d70 724c 6f67 7327 203d >add('-prLogs' =\n-0001b720: 3e20 5b24 7072 4c6f 6732 5d29 3b0a 7d0a > [$prLog2]);.}.\n-0001b730: 0a6d 7920 2464 656c 4f6c 6420 3d0a 2020 .my $delOld =. \n-0001b740: 2020 6465 6c65 7465 4f6c 6442 6163 6b75 deleteOldBacku\n-0001b750: 7044 6972 732d 3e6e 6577 2827 2d74 6172 pDirs->new('-tar\n-0001b760: 6765 7444 6972 2720 3d3e 2024 7461 7267 getDir' => $targ\n-0001b770: 6574 4469 722c 0a09 0909 2020 2020 2027 etDir,.... '\n-0001b780: 2d64 6f4e 6f74 4465 6c65 7465 2720 3d3e -doNotDelete' =>\n-0001b790: 2024 646f 4e6f 7444 656c 6574 652c 0a09 $doNotDelete,..\n-0001b7a0: 0909 2020 2020 2027 2d64 656c 6574 654e .. '-deleteN\n-0001b7b0: 6f74 4669 6e69 7368 6564 4469 7273 2720 otFinishedDirs' \n-0001b7c0: 3d3e 2024 6465 6c65 7465 4e6f 7446 696e => $deleteNotFin\n-0001b7d0: 6973 6865 6444 6972 732c 0a09 0909 2020 ishedDirs,.... \n-0001b7e0: 2020 2027 2d63 6865 636b 5375 6d46 696c '-checkSumFil\n-0001b7f0: 6527 203d 3e20 2463 6865 636b 5375 6d46 e' => $checkSumF\n-0001b800: 696c 652c 0a09 0909 2020 2020 2027 2d61 ile,.... '-a\n-0001b810: 6374 4261 636b 7570 4469 7227 203d 3e20 ctBackupDir' => \n-0001b820: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA\n-0001b830: 6b74 4469 7228 292c 0a09 0909 2020 2020 ktDir(),.... \n-0001b840: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr\n-0001b850: 4c6f 672c 0a09 0909 2020 2020 2027 2d74 Log,.... '-t\n-0001b860: 6f64 6179 2720 3d3e 2024 616b 7444 6174 oday' => $aktDat\n-0001b870: 652c 0a09 0909 2020 2020 2027 2d6b 6565 e,.... '-kee\n-0001b880: 7046 6972 7374 4f66 5965 6172 2720 3d3e pFirstOfYear' =>\n-0001b890: 2024 6b65 6570 4669 7273 744f 6659 6561 $keepFirstOfYea\n-0001b8a0: 722c 0a09 0909 2020 2020 2027 2d6b 6565 r,.... '-kee\n-0001b8b0: 704c 6173 744f 6659 6561 7227 203d 3e20 pLastOfYear' => \n-0001b8c0: 246b 6565 704c 6173 744f 6659 6561 722c $keepLastOfYear,\n-0001b8d0: 0a09 0909 2020 2020 2027 2d6b 6565 7046 .... '-keepF\n-0001b8e0: 6972 7374 4f66 4d6f 6e74 6827 203d 3e20 irstOfMonth' => \n-0001b8f0: 246b 6565 7046 6972 7374 4f66 4d6f 6e74 $keepFirstOfMont\n-0001b900: 682c 0a09 0909 2020 2020 2027 2d6b 6565 h,.... '-kee\n-0001b910: 704c 6173 744f 664d 6f6e 7468 2720 3d3e pLastOfMonth' =>\n-0001b920: 2024 6b65 6570 4c61 7374 4f66 4d6f 6e74 $keepLastOfMont\n-0001b930: 682c 0a09 0909 2020 2020 2027 2d66 6972 h,.... '-fir\n-0001b940: 7374 4461 794f 6657 6565 6b27 203d 3e20 stDayOfWeek' => \n-0001b950: 2466 6972 7374 4461 794f 6657 6565 6b2c $firstDayOfWeek,\n-0001b960: 0a09 0909 2020 2020 2027 2d6b 6565 7046 .... '-keepF\n-0001b970: 6972 7374 4f66 5765 656b 2720 3d3e 2024 irstOfWeek' => $\n-0001b980: 6b65 6570 4669 7273 744f 6657 6565 6b2c keepFirstOfWeek,\n-0001b990: 0a09 0909 2020 2020 2027 2d6b 6565 704c .... '-keepL\n-0001b9a0: 6173 744f 6657 6565 6b27 203d 3e20 246b astOfWeek' => $k\n-0001b9b0: 6565 704c 6173 744f 6657 6565 6b2c 0a09 eepLastOfWeek,..\n-0001b9c0: 0909 2020 2020 2027 2d6b 6565 7041 6c6c .. '-keepAll\n-0001b9d0: 2720 3d3e 2024 6b65 6570 416c 6c2c 0a09 ' => $keepAll,..\n-0001b9e0: 0909 2020 2020 2027 2d6b 6565 7052 656c .. '-keepRel\n-0001b9f0: 6174 6976 6527 203d 3e20 246b 6565 7052 ative' => $keepR\n-0001ba00: 656c 6174 6976 652c 0a09 0909 2020 2020 elative,.... \n-0001ba10: 2027 2d6b 6565 7057 6565 6b64 6179 2720 '-keepWeekday' \n-0001ba20: 3d3e 2024 6b65 6570 5765 656b 6461 792c => $keepWeekday,\n-0001ba30: 0a09 0909 2020 2020 2027 2d6b 6565 7044 .... '-keepD\n-0001ba40: 7570 6c69 6361 7465 2720 3d3e 2024 6b65 uplicate' => $ke\n-0001ba50: 6570 4475 706c 6963 6174 652c 0a09 0909 epDuplicate,....\n-0001ba60: 2020 2020 2027 2d6b 6565 704d 696e 4e75 '-keepMinNu\n-0001ba70: 6d62 6572 2720 3d3e 2024 6b65 6570 4d69 mber' => $keepMi\n-0001ba80: 6e4e 756d 6265 722c 0a09 0909 2020 2020 nNumber,.... \n-0001ba90: 2027 2d6b 6565 704d 6178 4e75 6d62 6572 '-keepMaxNumber\n-0001baa0: 2720 3d3e 2024 6b65 6570 4d61 784e 756d ' => $keepMaxNum\n-0001bab0: 6265 722c 0a09 0909 2020 2020 2027 2d73 ber,.... '-s\n-0001bac0: 7461 7444 656c 4f6c 6442 6163 6b75 7044 tatDelOldBackupD\n-0001bad0: 6972 7327 203d 3e20 246d 6169 6e3a 3a73 irs' => $main::s\n-0001bae0: 7461 742c 0a09 0909 2020 2020 2027 2d6c tat,.... '-l\n-0001baf0: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' =\n-0001bb00: 3e20 246c 6174 654c 696e 6b73 2c0a 0909 > $lateLinks,...\n-0001bb10: 0920 2020 2020 272d 616c 6c4c 696e 6b73 . '-allLinks\n-0001bb20: 2720 3d3e 2024 616c 6c4c 696e 6b73 2c0a ' => $allLinks,.\n-0001bb30: 0909 0920 2020 2020 272d 7375 7070 7265 ... '-suppre\n-0001bb40: 7373 5761 726e 696e 6727 203d 3e20 5c25 ssWarning' => \\%\n-0001bb50: 7375 7070 7265 7373 5761 726e 696e 670a suppressWarning.\n-0001bb60: 0909 0920 2020 2020 293b 0a24 6465 6c4f ... );.$delO\n-0001bb70: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups\n-0001bb80: 2829 3b0a 6d79 2024 6f6c 6446 696c 656e ();.my $oldFilen\n-0001bb90: 616d 6520 3d0a 2020 2020 6f6c 6446 696c ame =. oldFil\n-0001bba0: 656e 616d 652d 3e6e 6577 2827 2d64 626d ename->new('-dbm\n-0001bbb0: 4261 7365 4e61 6d65 2720 3d3e 2022 2474 BaseName' => \"$t\n-0001bbc0: 6d70 6469 722f 6462 6d22 2c0a 0909 2020 mpdir/dbm\",... \n-0001bbd0: 2020 2027 2d69 6e64 6578 4469 7227 203d '-indexDir' =\n-0001bbe0: 3e20 2469 6e64 6578 4469 722c 0a09 0920 > $indexDir,... \n-0001bbf0: 2020 2020 272d 7072 6f67 7265 7373 5265 '-progressRe\n-0001bc00: 706f 7274 2720 3d3e 2024 7072 6f67 7265 port' => $progre\n-0001bc10: 7373 5265 706f 7274 2c0a 0909 2020 2020 ssReport,... \n-0001bc20: 2027 2d61 6b74 4469 7227 203d 3e20 2461 '-aktDir' => $a\n-0001bc30: 646d 696e 4469 7273 2d3e 6765 7441 6b74 dminDirs->getAkt\n-0001bc40: 4469 7228 292c 0a09 0920 2020 2020 272d Dir(),... '-\n-0001bc50: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie\n-0001bc60: 7327 203d 3e20 5c40 6f74 6865 7242 6163 s' => \\@otherBac\n-0001bc70: 6b75 7053 6572 6965 732c 0a09 0920 2020 kupSeries,... \n-0001bc80: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n-0001bc90: 724c 6f67 2c0a 0909 2020 2020 2027 2d63 rLog,... '-c\n-0001bca0: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => \n-0001bcb0: 2463 6865 636b 5375 6d46 696c 652c 0a09 $checkSumFile,..\n-0001bcc0: 0920 2020 2020 272d 6465 6275 674d 6f64 . '-debugMod\n-0001bcd0: 6527 203d 3e20 2464 6562 7567 2c0a 0909 e' => $debug,...\n-0001bce0: 2020 2020 2027 2d73 6176 6552 414d 2720 '-saveRAM' \n-0001bcf0: 3d3e 2024 7361 7665 5241 4d2c 0a09 0920 => $saveRAM,... \n-0001bd00: 2020 2020 272d 666c 6167 426c 6f63 6b44 '-flagBlockD\n-0001bd10: 6576 6963 6527 203d 3e20 2466 6c61 6742 evice' => $flagB\n-0001bd20: 6c6f 636b 4465 7669 6365 2c0a 0909 2020 lockDevice,... \n-0001bd30: 2020 2027 2d73 7570 7072 6573 7349 6e66 '-suppressInf\n-0001bd40: 6f27 203d 3e20 5c25 7375 7070 7265 7373 o' => \\%suppress\n-0001bd50: 496e 666f 2c0a 0909 2020 2020 2027 2d74 Info,... '-t\n-0001bd60: 6d70 6469 7227 203d 3e20 2474 6d70 6469 mpdir' => $tmpdi\n-0001bd70: 720a 2020 2020 293b 0a0a 2461 6b74 4669 r. );..$aktFi\n-0001bd80: 6c65 6e61 6d65 2d3e 7365 7444 424d 6d64 lename->setDBMmd\n-0001bd90: 3528 246f 6c64 4669 6c65 6e61 6d65 2d3e 5($oldFilename->\n-0001bda0: 6765 7444 424d 6d64 3528 2929 3b0a 0a24 getDBMmd5());..$\n-0001bdb0: 7772 6974 6545 7863 6c75 6465 4c6f 6720 writeExcludeLog \n-0001bdc0: 3d20 2461 646d 696e 4469 7273 2d3e 6765 = $adminDirs->ge\n-0001bdd0: 7441 6b74 4469 7228 2920 2e20 222f 2e73 tAktDir() . \"/.s\n-0001bde0: 746f 7265 4261 636b 7570 2e6e 6f74 5361 toreBackup.notSa\n-0001bdf0: 7665 642e 627a 3222 0a20 2020 2069 6620 ved.bz2\". if \n-0001be00: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog\n-0001be10: 3b0a 0a6d 7920 2472 6561 6444 6972 416e ;..my $readDirAn\n-0001be20: 6443 6865 636b 203d 0a20 2020 2072 6561 dCheck =. rea\n-0001be30: 6444 6972 4368 6563 6b53 697a 6554 696d dDirCheckSizeTim\n-0001be40: 652d 3e6e 6577 2827 2d61 646d 696e 4469 e->new('-adminDi\n-0001be50: 7273 2720 3d3e 2024 6164 6d69 6e44 6972 rs' => $adminDir\n-0001be60: 732c 0a09 0909 2020 2020 2020 272d 6f6c s,.... '-ol\n-0001be70: 6446 696c 656e 616d 6527 203d 3e20 246f dFilename' => $o\n-0001be80: 6c64 4669 6c65 6e61 6d65 2c0a 0909 0920 ldFilename,.... \n-0001be90: 2020 2020 2027 2d61 6b74 4669 6c65 6e61 '-aktFilena\n-0001bea0: 6d65 2720 3d3e 2024 616b 7446 696c 656e me' => $aktFilen\n-0001beb0: 616d 652c 0a09 0909 2020 2020 2020 272d ame,.... '-\n-0001bec0: 6469 7227 203d 3e20 2473 6f75 7263 6544 dir' => $sourceD\n-0001bed0: 6972 2c0a 0909 0920 2020 2020 2027 2d66 ir,.... '-f\n-0001bee0: 6f6c 6c6f 774c 696e 6b73 2720 3d3e 2024 ollowLinks' => $\n-0001bef0: 666f 6c6c 6f77 4c69 6e6b 732c 0a09 0909 followLinks,....\n-0001bf00: 2020 2020 2020 272d 7374 6179 496e 4669 '-stayInFi\n-0001bf10: 6c65 5379 7374 656d 2720 3d3e 2024 7374 leSystem' => $st\n-0001bf20: 6179 496e 4669 6c65 5379 7374 656d 2c0a ayInFileSystem,.\n-0001bf30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001bf40: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-0001bf50: 6370 4973 476e 7527 203d 3e20 2824 676e cpIsGnu' => ($gn\n-0001bf60: 7563 7020 6f72 2024 7370 6563 6961 6c54 ucp or $specialT\n-0001bf70: 7970 6541 7263 6869 7665 7229 2c0a 0909 ypeArchiver),...\n-0001bf80: 0920 2020 2020 2027 2d65 7863 6570 7444 . '-exceptD\n-0001bf90: 6972 7327 203d 3e20 5b40 6578 6365 7074 irs' => [@except\n-0001bfa0: 4469 7273 5d2c 0a09 0909 2020 2020 2020 Dirs],.... \n-0001bfb0: 272d 696e 636c 7564 6544 6972 7327 203d '-includeDirs' =\n-0001bfc0: 3e20 5b40 696e 636c 7564 6544 6972 735d > [@includeDirs]\n-0001bfd0: 2c0a 0909 0920 2020 2020 2027 2d77 7269 ,.... '-wri\n-0001bfe0: 7465 4578 636c 7564 654c 6f67 2720 3d3e teExcludeLog' =>\n-0001bff0: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo\n-0001c000: 672c 0a09 0909 2020 2020 2020 272d 616b g,.... '-ak\n-0001c010: 7444 6972 2720 3d3e 2024 6164 6d69 6e44 tDir' => $adminD\n-0001c020: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir()\n-0001c030: 2c0a 0909 0920 2020 2020 2027 2d70 6f73 ,.... '-pos\n-0001c040: 7466 6978 2720 3d3e 2024 706f 7374 6669 tfix' => $postfi\n-0001c050: 782c 0a09 0909 2020 2020 2020 272d 6578 x,.... '-ex\n-0001c060: 6365 7074 5275 6c65 2720 3d3e 2024 6578 ceptRule' => $ex\n-0001c070: 6352 756c 652c 0a09 0909 2020 2020 2020 cRule,.... \n-0001c080: 272d 696e 636c 7564 6552 756c 6527 203d '-includeRule' =\n-0001c090: 3e20 2469 6e63 5275 6c65 2c0a 0909 0920 > $incRule,.... \n-0001c0a0: 2020 2020 2027 2d63 6865 636b 426c 6f63 '-checkBloc\n-0001c0b0: 6b73 5275 6c65 2720 3d3e 2024 6368 6252 ksRule' => $chbR\n-0001c0c0: 756c 652c 0a09 0909 2020 2020 2020 272d ule,.... '-\n-0001c0d0: 6578 5479 7065 7327 203d 3e20 5c25 6578 exTypes' => \\%ex\n-0001c0e0: 5479 7065 732c 0a09 0909 2020 2020 2020 Types,.... \n-0001c0f0: 272d 7265 7365 7441 7469 6d65 2720 3d3e '-resetAtime' =>\n-0001c100: 2024 7265 7365 7441 7469 6d65 2c0a 0909 $resetAtime,...\n-0001c110: 0920 2020 2020 2027 2d64 6562 7567 4d6f . '-debugMo\n-0001c120: 6465 2720 3d3e 2024 6465 6275 672c 0a09 de' => $debug,..\n-0001c130: 0909 2020 2020 2020 272d 7665 7262 6f73 .. '-verbos\n-0001c140: 6527 203d 3e20 2476 6572 626f 7365 2c0a e' => $verbose,.\n-0001c150: 0909 0920 2020 2020 2027 2d74 6d70 6469 ... '-tmpdi\n-0001c160: 7227 203d 3e20 2474 6d70 6469 722c 0a09 r' => $tmpdir,..\n-0001c170: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog'\n-0001c180: 203d 3e20 2470 724c 6f67 2c0a 0909 0920 => $prLog,.... \n-0001c190: 2020 2020 2027 2d69 676e 6f72 6552 6561 '-ignoreRea\n-0001c1a0: 6445 7272 6f72 2720 3d3e 2024 6967 6e6f dError' => $igno\n-0001c1b0: 7265 5265 6164 4572 726f 722c 0a09 0909 reReadError,....\n-0001c1c0: 2020 2020 2020 272d 6967 6e6f 7265 5469 '-ignoreTi\n-0001c1d0: 6d65 2720 3d3e 2024 6967 6e6f 7265 5469 me' => $ignoreTi\n-0001c1e0: 6d65 2c0a 0909 0920 2020 2020 2027 2d70 me,.... '-p\n-0001c1f0: 7269 6e74 4465 7074 6827 203d 3e20 2470 rintDepth' => $p\n-0001c200: 7269 6e74 4465 7074 6829 3b0a 0a6d 7920 rintDepth);..my \n-0001c210: 2470 6172 466f 726b 436f 7079 203d 2070 $parForkCopy = p\n-0001c220: 6172 616c 6c65 6c46 6f72 6b2d 3e6e 6577 arallelFork->new\n-0001c230: 2827 2d6d 6178 5061 7261 6c6c 656c 2720 ('-maxParallel' \n-0001c240: 3d3e 2024 6e6f 436f 7079 2c0a 0909 0909 => $noCopy,.....\n-0001c250: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n-0001c260: 2470 724c 6f67 293b 0a6d 7920 2470 6172 $prLog);.my $par\n-0001c270: 466f 726b 436f 6d70 7220 3d20 7061 7261 ForkCompr = para\n-0001c280: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('-\n-0001c290: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => \n-0001c2a0: 246e 6f43 6f6d 7072 6573 732c 0a09 0909 $noCompress,....\n-0001c2b0: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' =\n-0001c2c0: 3e20 2470 724c 6f67 293b 0a6d 7920 2470 > $prLog);.my $p\n-0001c2d0: 6172 466f 726b 426c 6f63 6b20 3d20 7061 arForkBlock = pa\n-0001c2e0: 7261 6c6c 656c 466f 726b 2d3e 6e65 7728 rallelFork->new(\n-0001c2f0: 272d 6d61 7850 6172 616c 6c65 6c27 203d '-maxParallel' =\n-0001c300: 3e20 312c 0a09 0909 0920 2020 2020 272d > 1,..... '-\n-0001c310: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0001c320: 293b 0a0a 2320 6f70 7469 6f6e 2073 6176 );..# option sav\n-0001c330: 6552 414d 2066 6f72 2072 756c 6520 6675 eRAM for rule fu\n-0001c340: 6e63 7469 6f6e 7320 6d61 696e 3a3a 4d41 nctions main::MA\n-0001c350: 524b 5f44 4952 2061 6e64 206d 6169 6e3a RK_DIR and main:\n-0001c360: 3a4d 4152 4b5f 4449 525f 5245 430a 6d79 :MARK_DIR_REC.my\n-0001c370: 2024 7374 6275 4558 434c 6669 6c65 6e61 $stbuEXCLfilena\n-0001c380: 6d65 203d 2075 6e64 6566 3b0a 6d79 2024 me = undef;.my $\n-0001c390: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen\n-0001c3a0: 616d 6520 3d20 756e 6465 663b 0a6d 7920 ame = undef;.my \n-0001c3b0: 2473 7462 7549 4e43 4c52 4543 6669 6c65 $stbuINCLRECfile\n-0001c3c0: 6e61 6d65 203d 2075 6e64 6566 3b0a 6d79 name = undef;.my\n-0001c3d0: 2024 6d61 6b65 4469 7250 6174 6846 696c $makeDirPathFil\n-0001c3e0: 656e 616d 6520 3d20 756e 6465 663b 0a69 ename = undef;.i\n-0001c3f0: 6620 2824 7361 7665 5241 4d29 0a7b 0a09 f ($saveRAM).{..\n-0001c400: 2473 7462 7545 5843 4c66 696c 656e 616d $stbuEXCLfilenam\n-0001c410: 6520 3d20 263a 3a75 6e69 7146 696c 654e e = &::uniqFileN\n-0001c420: 616d 6528 2224 746d 7064 6972 2f73 7462 ame(\"$tmpdir/stb\n-0001c430: 7545 5843 4c2e 2424 2e22 293b 0a09 256d uEXCL.$$.\");..%m\n-0001c440: 6169 6e3a 3a4d 4152 4b5f 4449 525f 4361 ain::MARK_DIR_Ca\n-0001c450: 6368 6520 3d20 2829 3b0a 2309 7469 6528 che = ();.#.tie(\n-0001c460: 256d 6169 6e3a 3a4d 4152 4b5f 4449 525f %main::MARK_DIR_\n-0001c470: 4361 6368 652c 2022 4442 5f46 696c 6522 Cache, \"DB_File\"\n-0001c480: 2c20 2473 7462 7545 5843 4c66 696c 656e , $stbuEXCLfilen\n-0001c490: 616d 652c 0a23 0920 2020 204f 5f43 5245 ame,.#. O_CRE\n-0001c4a0: 4154 7c4f 5f52 4457 522c 2030 3630 3029 AT|O_RDWR, 0600)\n-0001c4b0: 206f 720a 0964 626d 6f70 656e 2825 6d61 or..dbmopen(%ma\n-0001c4c0: 696e 3a3a 4d41 524b 5f44 4952 5f43 6163 in::MARK_DIR_Cac\n-0001c4d0: 6865 2c20 2473 7462 7545 5843 4c66 696c he, $stbuEXCLfil\n-0001c4e0: 656e 616d 652c 2030 3630 3029 206f 720a ename, 0600) or.\n-0001c4f0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-0001c500: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-0001c510: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-0001c520: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => [\"cannot writ\n-0001c530: 6520 746f 2024 7374 6275 4558 434c 6669 e to $stbuEXCLfi\n-0001c540: 6c65 6e61 6d65 225d 2c0a 0909 0920 2020 lename\"],.... \n-0001c550: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n-0001c560: 3b0a 0a09 2473 7462 7545 5843 4c52 4543 ;...$stbuEXCLREC\n-0001c570: 6669 6c65 6e61 6d65 203d 2026 3a3a 756e filename = &::un\n-0001c580: 6971 4669 6c65 4e61 6d65 2822 2474 6d70 iqFileName(\"$tmp\n-0001c590: 6469 722f 7374 6275 4558 434c 5245 432e dir/stbuEXCLREC.\n-0001c5a0: 2424 2e22 293b 0a09 256d 6169 6e3a 3a4d $$.\");..%main::M\n-0001c5b0: 4152 4b5f 4449 525f 5245 435f 4361 6368 ARK_DIR_REC_Cach\n-0001c5c0: 6520 3d20 2829 3b0a 2309 7469 6528 256d e = ();.#.tie(%m\n-0001c5d0: 6169 6e3a 3a4d 4152 4b5f 4449 525f 5245 ain::MARK_DIR_RE\n-0001c5e0: 435f 4361 6368 652c 2022 4442 5f46 696c C_Cache, \"DB_Fil\n-0001c5f0: 6522 2c20 2473 7462 7545 5843 4c52 4543 e\", $stbuEXCLREC\n-0001c600: 6669 6c65 6e61 6d65 2c0a 2309 2020 2020 filename,.#. \n-0001c610: 4f5f 4352 4541 547c 4f5f 5244 5752 2c20 O_CREAT|O_RDWR, \n-0001c620: 3036 3030 2920 6f72 0a09 6462 6d6f 7065 0600) or..dbmope\n-0001c630: 6e28 256d 6169 6e3a 3a4d 4152 4b5f 4449 n(%main::MARK_DI\n-0001c640: 525f 5245 435f 4361 6368 652c 2024 7374 R_REC_Cache, $st\n-0001c650: 6275 4558 434c 5245 4366 696c 656e 616d buEXCLRECfilenam\n-0001c660: 652c 2030 3630 3029 206f 720a 0909 2470 e, 0600) or...$p\n-0001c670: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0001c680: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-0001c690: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-0001c6a0: 2263 616e 6e6f 7420 7772 6974 6520 746f \"cannot write to\n-0001c6b0: 2024 7374 6275 4558 434c 5245 4366 696c $stbuEXCLRECfil\n-0001c6c0: 656e 616d 6522 5d2c 0a09 0909 2020 2020 ename\"],.... \n-0001c6d0: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1);\n-0001c6e0: 0a0a 0924 7374 6275 494e 434c 5245 4366 ...$stbuINCLRECf\n-0001c6f0: 696c 656e 616d 6520 3d20 263a 3a75 6e69 ilename = &::uni\n-0001c700: 7146 696c 654e 616d 6528 2224 746d 7064 qFileName(\"$tmpd\n-0001c710: 6972 2f73 7462 7549 4e43 4c52 4543 2e24 ir/stbuINCLREC.$\n-0001c720: 242e 2229 3b0a 0925 6d61 696e 3a3a 4d41 $.\");..%main::MA\n-0001c730: 524b 5f44 4952 5f49 4e43 4c5f 5245 435f RK_DIR_INCL_REC_\n-0001c740: 4361 6368 6520 3d20 2829 3b0a 2309 7469 Cache = ();.#.ti\n-0001c750: 6528 256d 6169 6e3a 3a4d 4152 4b5f 4449 e(%main::MARK_DI\n-0001c760: 525f 494e 434c 5f52 4543 5f43 6163 6865 R_INCL_REC_Cache\n-0001c770: 2c20 2244 425f 4669 6c65 222c 2024 7374 , \"DB_File\", $st\n-0001c780: 6275 494e 434c 5245 4366 696c 656e 616d buINCLRECfilenam\n-0001c790: 652c 0a23 0920 2020 204f 5f43 5245 4154 e,.#. O_CREAT\n-0001c7a0: 7c4f 5f52 4457 522c 2030 3630 3029 206f |O_RDWR, 0600) o\n-0001c7b0: 720a 0964 626d 6f70 656e 2825 6d61 696e r..dbmopen(%main\n-0001c7c0: 3a3a 4d41 524b 5f44 4952 5f49 4e43 4c5f ::MARK_DIR_INCL_\n-0001c7d0: 5245 435f 4361 6368 652c 2024 7374 6275 REC_Cache, $stbu\n-0001c7e0: 494e 434c 5245 4366 696c 656e 616d 652c INCLRECfilename,\n-0001c7f0: 2030 3630 3029 206f 720a 0909 2470 724c 0600) or...$prL\n-0001c800: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0001c810: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n-0001c820: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-0001c830: 616e 6e6f 7420 7772 6974 6520 746f 2024 annot write to $\n-0001c840: 7374 6275 494e 434c 5245 4366 696c 656e stbuINCLRECfilen\n-0001c850: 616d 6522 5d2c 0a09 0909 2020 2020 2020 ame\"],.... \n-0001c860: 272d 6578 6974 2720 3d3e 2031 293b 0a0a '-exit' => 1);..\n-0001c870: 0924 6d61 6b65 4469 7250 6174 6846 696c .$makeDirPathFil\n-0001c880: 656e 616d 6520 3d20 263a 3a75 6e69 7146 ename = &::uniqF\n-0001c890: 696c 654e 616d 6528 2224 746d 7064 6972 ileName(\"$tmpdir\n-0001c8a0: 2f73 7462 754d 616b 6544 6972 2e24 242e /stbuMakeDir.$$.\n-0001c8b0: 2229 3b0a 0925 6d61 696e 3a3a 6d61 6b65 \");..%main::make\n-0001c8c0: 4469 7250 6174 6843 6163 6865 203d 2028 DirPathCache = (\n-0001c8d0: 293b 0a09 6462 6d6f 7065 6e28 256d 6169 );..dbmopen(%mai\n-0001c8e0: 6e3a 3a6d 616b 6544 6972 5061 7468 4361 n::makeDirPathCa\n-0001c8f0: 6368 652c 2024 6d61 6b65 4469 7250 6174 che, $makeDirPat\n-0001c900: 6846 696c 656e 616d 652c 2030 3630 3029 hFilename, 0600)\n-0001c910: 206f 720a 0909 2470 724c 6f67 2d3e 7072 or...$prLog->pr\n-0001c920: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-0001c930: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s\n-0001c940: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-0001c950: 7772 6974 6520 746f 2024 6d61 6b65 4469 write to $makeDi\n-0001c960: 7250 6174 6846 696c 656e 616d 6522 5d2c rPathFilename\"],\n-0001c970: 0a09 0909 2020 2020 2020 272d 6578 6974 .... '-exit\n-0001c980: 2720 3d3e 2031 293b 0a7d 0a0a 0a23 2073 ' => 1);.}...# s\n-0001c990: 6967 6e61 6c20 6861 6e64 6c69 6e67 0a28 ignal handling.(\n-0001c9a0: 406d 6169 6e3a 3a63 6c65 616e 7570 2920 @main::cleanup) \n-0001c9b0: 3d20 2020 2020 2023 204f 626a 656b 7465 = # Objekte\n-0001c9c0: 2076 6572 66c3 bc67 6261 7220 6d61 6368 verf..gbar mach\n-0001c9d0: 656e 0a20 2020 2028 2470 724c 6f67 2c20 en. ($prLog, \n-0001c9e0: 302c 2024 6f6c 6446 696c 656e 616d 652c 0, $oldFilename,\n-0001c9f0: 2024 616b 7446 696c 656e 616d 652c 2024 $aktFilename, $\n-0001ca00: 7061 7246 6f72 6b43 6f70 792c 2024 7061 parForkCopy, $pa\n-0001ca10: 7246 6f72 6b43 6f6d 7072 2c20 2474 6d70 rForkCompr, $tmp\n-0001ca20: 6469 722c 0a20 2020 2020 2473 6574 5265 dir,. $setRe\n-0001ca30: 7365 7444 6972 5469 6d65 7346 696c 652c setDirTimesFile,\n-0001ca40: 2024 6c6f 636b 4669 6c65 2c20 2473 7462 $lockFile, $stb\n-0001ca50: 7545 5843 4c66 696c 656e 616d 652c 2024 uEXCLfilename, $\n-0001ca60: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen\n-0001ca70: 616d 652c 0a20 2020 2020 246d 616b 6544 ame,. $makeD\n-0001ca80: 6972 5061 7468 4669 6c65 6e61 6d65 293b irPathFilename);\n-0001ca90: 0a24 5349 477b 494e 547d 203d 205c 2663 .$SIG{INT} = \\&c\n-0001caa0: 6c65 616e 7570 3b0a 2453 4947 7b54 4552 leanup;.$SIG{TER\n-0001cab0: 4d7d 203d 205c 2663 6c65 616e 7570 3b0a M} = \\&cleanup;.\n-0001cac0: 0a0a 6d79 2024 6669 666f 436f 7079 203d ..my $fifoCopy =\n-0001cad0: 2066 6966 6f51 7565 7565 2d3e 6e65 7728 fifoQueue->new(\n-0001cae0: 272d 6d61 784c 656e 6774 6827 203d 3e20 '-maxLength' => \n-0001caf0: 2471 7565 7565 436f 7079 2c0a 0909 0920 $queueCopy,.... \n-0001cb00: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n-0001cb10: 2024 7072 4c6f 6729 3b0a 6d79 2024 6669 $prLog);.my $fi\n-0001cb20: 666f 436f 6d70 7220 3d20 6669 666f 5175 foCompr = fifoQu\n-0001cb30: 6575 652d 3e6e 6577 2827 2d6d 6178 4c65 eue->new('-maxLe\n-0001cb40: 6e67 7468 2720 3d3e 2024 7175 6575 6543 ngth' => $queueC\n-0001cb50: 6f6d 7072 6573 732c 0a09 0909 2020 2020 ompress,.... \n-0001cb60: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n-0001cb70: 7072 4c6f 6729 3b0a 6d79 2024 6669 666f prLog);.my $fifo\n-0001cb80: 426c 6f63 6b20 3d20 6669 666f 5175 6575 Block = fifoQueu\n-0001cb90: 652d 3e6e 6577 2827 2d6d 6178 4c65 6e67 e->new('-maxLeng\n-0001cba0: 7468 2720 3d3e 2024 7175 6575 6542 6c6f th' => $queueBlo\n-0001cbb0: 636b 2c0a 0909 0920 2020 2020 2020 272d ck,.... '-\n-0001cbc0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0001cbd0: 293b 0a0a 6d79 2024 7363 6865 6475 6c65 );..my $schedule\n-0001cbe0: 7220 3d0a 2020 2020 5363 6865 6475 6c65 r =. Schedule\n-0001cbf0: 722d 3e6e 6577 2827 2d61 6b74 4669 6c65 r->new('-aktFile\n-0001cc00: 6e61 6d65 2720 3d3e 2024 616b 7446 696c name' => $aktFil\n-0001cc10: 656e 616d 652c 0a09 0920 2020 272d 6f6c ename,... '-ol\n-0001cc20: 6446 696c 656e 616d 6527 203d 3e20 246f dFilename' => $o\n-0001cc30: 6c64 4669 6c65 6e61 6d65 2c0a 0909 2020 ldFilename,... \n-0001cc40: 2027 2d66 6f6c 6c6f 774c 696e 6b73 2720 '-followLinks' \n-0001cc50: 3d3e 2024 666f 6c6c 6f77 4c69 6e6b 732c => $followLinks,\n-0001cc60: 0a09 0920 2020 272d 7072 6576 4261 636b ... '-prevBack\n-0001cc70: 7570 4f77 6e53 6572 6965 7327 203d 3e20 upOwnSeries' => \n-0001cc80: 2470 7265 7642 6163 6b75 704f 776e 5365 $prevBackupOwnSe\n-0001cc90: 7269 6573 2c0a 0909 2020 2027 2d72 6561 ries,... '-rea\n-0001cca0: 6444 6972 416e 6443 6865 636b 2720 3d3e dDirAndCheck' =>\n-0001ccb0: 2024 7265 6164 4469 7241 6e64 4368 6563 $readDirAndChec\n-0001ccc0: 6b2c 0a09 0920 2020 272d 7365 7452 6573 k,... '-setRes\n-0001ccd0: 6574 4469 7254 696d 6573 2720 3d3e 2024 etDirTimes' => $\n-0001cce0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes\n-0001ccf0: 2c0a 0909 2020 2027 2d70 6172 466f 726b ,... '-parFork\n-0001cd00: 436f 7079 2720 3d3e 2024 7061 7246 6f72 Copy' => $parFor\n-0001cd10: 6b43 6f70 792c 0a09 0920 2020 272d 6669 kCopy,... '-fi\n-0001cd20: 666f 436f 7079 2720 3d3e 2024 6669 666f foCopy' => $fifo\n-0001cd30: 436f 7079 2c0a 0909 2020 2027 2d70 6172 Copy,... '-par\n-0001cd40: 466f 726b 436f 6d70 7227 203d 3e20 2470 ForkCompr' => $p\n-0001cd50: 6172 466f 726b 436f 6d70 722c 0a09 0920 arForkCompr,... \n-0001cd60: 2020 272d 6e6f 436f 6d70 7265 7373 2720 '-noCompress' \n-0001cd70: 3d3e 2024 6e6f 436f 6d70 7265 7373 2c0a => $noCompress,.\n-0001cd80: 0909 2020 2027 2d62 6c6f 636b 4368 6563 .. '-blockChec\n-0001cd90: 6b53 756d 4669 6c65 2720 3d3e 2024 626c kSumFile' => $bl\n-0001cda0: 6f63 6b43 6865 636b 5375 6d46 696c 652c ockCheckSumFile,\n-0001cdb0: 0a09 0920 2020 272d 7061 7246 6f72 6b42 ... '-parForkB\n-0001cdc0: 6c6f 636b 2720 3d3e 2024 7061 7246 6f72 lock' => $parFor\n-0001cdd0: 6b42 6c6f 636b 2c0a 0909 2020 2027 2d66 kBlock,... '-f\n-0001cde0: 6966 6f42 6c6f 636b 2720 3d3e 2024 6669 ifoBlock' => $fi\n-0001cdf0: 666f 426c 6f63 6b2c 0a09 0920 2020 272d foBlock,... '-\n-0001ce00: 636f 6d70 7265 7373 2720 3d3e 2024 636f compress' => $co\n-0001ce10: 6d70 7265 7373 2c0a 0909 2020 2027 2d70 mpress,... '-p\n-0001ce20: 6f73 7466 6978 2720 3d3e 2024 706f 7374 ostfix' => $post\n-0001ce30: 6669 782c 0a09 0920 2020 272d 6669 666f fix,... '-fifo\n-0001ce40: 436f 6d70 7227 203d 3e20 2466 6966 6f43 Compr' => $fifoC\n-0001ce50: 6f6d 7072 2c0a 0909 2020 2027 2d63 6f6d ompr,... '-com\n-0001ce60: 7072 5275 6c65 2720 3d3e 2024 636f 6d70 prRule' => $comp\n-0001ce70: 7252 756c 652c 0a09 0920 2020 272d 7461 rRule,... '-ta\n-0001ce80: 7267 6574 4469 7227 203d 3e20 2461 646d rgetDir' => $adm\n-0001ce90: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi\n-0001cea0: 7228 292c 0a09 0920 2020 272d 616b 7449 r(),... '-aktI\n-0001ceb0: 6e66 6f46 696c 6527 203d 3e20 2463 6865 nfoFile' => $che\n-0001cec0: 636b 5375 6d46 696c 652c 0a09 0920 2020 ckSumFile,... \n-0001ced0: 272d 7265 7365 7441 7469 6d65 2720 3d3e '-resetAtime' =>\n-0001cee0: 2024 7265 7365 7441 7469 6d65 2c0a 0909 $resetAtime,...\n-0001cef0: 2020 2027 2d74 6d70 6469 7227 203d 3e20 '-tmpdir' => \n-0001cf00: 2474 6d70 6469 722c 0a09 0920 2020 272d $tmpdir,... '-\n-0001cf10: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0001cf20: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-0001cf30: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' \n-0001cf40: 3d3e 2024 676e 7563 702c 0a09 0920 2020 => $gnucp,... \n-0001cf50: 272d 6c69 6e6b 5379 6d6c 696e 6b73 2720 '-linkSymlinks' \n-0001cf60: 3d3e 2024 6c69 6e6b 5379 6d6c 696e 6b73 => $linkSymlinks\n-0001cf70: 2c0a 0909 2020 2027 2d6c 6174 654c 696e ,... '-lateLin\n-0001cf80: 6b73 2720 3d3e 2024 6c61 7465 4c69 6e6b ks' => $lateLink\n-0001cf90: 732c 0a09 0920 2020 272d 6c61 7465 436f s,... '-lateCo\n-0001cfa0: 6d70 7265 7373 2720 3d3e 2024 6c61 7465 mpress' => $late\n-0001cfb0: 436f 6d70 7265 7373 2c0a 0909 2020 2027 Compress,... '\n-0001cfc0: 2d73 7570 7072 6573 7357 6172 6e69 6e67 -suppressWarning\n-0001cfd0: 2720 3d3e 205c 2573 7570 7072 6573 7357 ' => \\%suppressW\n-0001cfe0: 6172 6e69 6e67 2c0a 2020 2020 2020 2020 arning,. \n-0001cff0: 2020 2020 2020 2020 2020 2027 2d70 7265 '-pre\n-0001d000: 7365 7276 6550 6572 6d73 2720 3d3e 2024 servePerms' => $\n-0001d010: 7072 6573 6572 7665 5065 726d 732c 0a09 preservePerms,..\n-0001d020: 0920 2020 272d 696e 7465 726e 616c 5069 . '-internalPi\n-0001d030: 7065 4275 6653 697a 6527 203d 3e20 2469 peBufSize' => $i\n-0001d040: 6e74 6572 6e61 6c50 6970 6542 7566 5369 nternalPipeBufSi\n-0001d050: 7a65 2c0a 0909 2020 2027 2d64 6562 7567 ze,... '-debug\n-0001d060: 4d6f 6465 2720 3d3e 2024 6465 6275 6729 Mode' => $debug)\n-0001d070: 3b0a 0a24 6d61 696e 3a3a 7469 6e79 5761 ;..$main::tinyWa\n-0001d080: 6974 5363 6865 6475 6c65 7220 3d20 7469 itScheduler = ti\n-0001d090: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler-\n-0001d0a0: 3e6e 6577 2827 2d66 6972 7374 4661 7374 >new('-firstFast\n-0001d0b0: 2720 3d3e 2031 2c0a 0909 0909 0909 2020 ' => 1,....... \n-0001d0c0: 272d 6d61 7857 6169 7454 696d 6527 203d '-maxWaitTime' =\n-0001d0d0: 3e20 2e32 2c0a 0909 0909 0909 2020 272d > .2,....... '-\n-0001d0e0: 6e6f 4f66 5761 6974 5374 6570 7327 203d noOfWaitSteps' =\n-0001d0f0: 3e20 3130 302c 0a09 0909 0909 2020 2020 > 100,...... \n-0001d100: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n-0001d110: 3e20 2470 724c 6f67 2c0a 0909 0909 0920 > $prLog,...... \n-0001d120: 2020 2020 2020 2020 2027 2d64 6562 7567 '-debug\n-0001d130: 2720 3d3e 2024 6465 6275 6729 3b0a 0a7b ' => $debug);..{\n-0001d140: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. \n-0001d150: 666f 7265 6163 6820 2469 2028 302e 2e40 foreach $i (0..@\n-0001d160: 6368 6563 6b44 6576 6963 6573 2d31 290a checkDevices-1).\n-0001d170: 2020 2020 7b0a 0924 6669 666f 426c 6f63 {..$fifoBloc\n-0001d180: 6b2d 3e61 6464 2827 2d76 616c 7565 2720 k->add('-value' \n-0001d190: 3d3e 205b 2764 6576 6963 6527 2c20 2463 => ['device', $c\n-0001d1a0: 6865 636b 4465 7669 6365 735b 2469 5d2c heckDevices[$i],\n-0001d1b0: 0a09 0909 0920 2020 2020 2463 6865 636b ..... $check\n-0001d1c0: 4465 7669 6365 7344 6972 5b24 695d 2c20 DevicesDir[$i], \n-0001d1d0: 2463 6865 636b 4465 7669 6365 7342 535b $checkDevicesBS[\n-0001d1e0: 2469 5d2c 0a09 0909 0920 2020 2020 2463 $i],..... $c\n-0001d1f0: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr\n-0001d200: 5b24 695d 2c0a 0909 0909 2020 2020 2024 [$i],..... $\n-0001d210: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara\n-0001d220: 6c6c 656c 5b24 695d 5d29 3b0a 2020 2020 llel[$i]]);. \n-0001d230: 7d0a 7d0a 0a24 7363 6865 6475 6c65 722d }.}..$scheduler-\n-0001d240: 3e6e 6f72 6d61 6c4f 7065 7261 7469 6f6e >normalOperation\n-0001d250: 2829 3b20 2020 2320 6469 6520 6569 6765 (); # die eige\n-0001d260: 6e74 6c69 6368 6520 5665 7261 7262 6569 ntliche Verarbei\n-0001d270: 7475 6e67 0a0a 2473 6574 5265 7365 7444 tung..$setResetD\n-0001d280: 6972 5469 6d65 732d 3e77 7269 7465 5469 irTimes->writeTi\n-0001d290: 6d65 7328 293b 2023 2073 6574 2061 7469 mes(); # set ati\n-0001d2a0: 6d65 2c20 6d74 696d 6520 666f 7220 6469 me, mtime for di\n-0001d2b0: 7265 6374 6f72 6965 730a 0a24 616b 7446 rectories..$aktF\n-0001d2c0: 696c 656e 616d 652d 3e63 6c6f 7365 496e ilename->closeIn\n-0001d2d0: 666f 4669 6c65 2829 3b0a 246f 6c64 4669 foFile();.$oldFi\n-0001d2e0: 6c65 6e61 6d65 2d3e 7265 6164 4442 4d46 lename->readDBMF\n-0001d2f0: 696c 6573 5369 7a65 2829 3b0a 246f 6c64 ilesSize();.$old\n-0001d300: 4669 6c65 6e61 6d65 2d3e 6465 6c44 424d Filename->delDBM\n-0001d310: 4669 6c65 7328 293b 2020 2020 2023 2064 Files(); # d\n-0001d320: 626d 2066 696c 6573 206c c3b6 7363 6865 bm files l..sche\n-0001d330: 6e0a 0a69 6620 2824 7374 6275 4558 434c n..if ($stbuEXCL\n-0001d340: 6669 6c65 6e61 6d65 290a 7b0a 2320 2020 filename).{.# \n-0001d350: 2075 6e74 6965 2025 6d61 696e 3a3a 4d41 untie %main::MA\n-0001d360: 524b 5f44 4952 5f43 6163 6865 3b0a 2020 RK_DIR_Cache;. \n-0001d370: 2020 6462 6d63 6c6f 7365 2825 6d61 696e dbmclose(%main\n-0001d380: 3a3a 4d41 524b 5f44 4952 5f43 6163 6865 ::MARK_DIR_Cache\n-0001d390: 293b 0a20 2020 2075 6e6c 696e 6b20 2473 );. unlink $s\n-0001d3a0: 7462 7545 5843 4c66 696c 656e 616d 653b tbuEXCLfilename;\n-0001d3b0: 0a7d 0a69 6620 2824 7374 6275 4558 434c .}.if ($stbuEXCL\n-0001d3c0: 5245 4366 696c 656e 616d 6529 0a7b 0a23 RECfilename).{.#\n-0001d3d0: 2020 2020 756e 7469 6520 256d 6169 6e3a untie %main:\n-0001d3e0: 3a4d 4152 4b5f 4449 525f 5245 435f 4361 :MARK_DIR_REC_Ca\n-0001d3f0: 6368 653b 0a20 2020 2064 626d 636c 6f73 che;. dbmclos\n-0001d400: 6528 256d 6169 6e3a 3a4d 4152 4b5f 4449 e(%main::MARK_DI\n-0001d410: 525f 5245 435f 4361 6368 6529 3b0a 2020 R_REC_Cache);. \n-0001d420: 2020 756e 6c69 6e6b 2024 7374 6275 4558 unlink $stbuEX\n-0001d430: 434c 5245 4366 696c 656e 616d 653b 0a7d CLRECfilename;.}\n-0001d440: 0a69 6620 2824 7374 6275 494e 434c 5245 .if ($stbuINCLRE\n-0001d450: 4366 696c 656e 616d 6529 0a7b 0a23 2020 Cfilename).{.# \n-0001d460: 2020 756e 7469 6520 256d 6169 6e3a 3a4d untie %main::M\n-0001d470: 4152 4b5f 4449 525f 494e 434c 5f43 6163 ARK_DIR_INCL_Cac\n-0001d480: 6865 3b0a 2020 2020 6462 6d63 6c6f 7365 he;. dbmclose\n-0001d490: 2825 6d61 696e 3a3a 4d41 524b 5f44 4952 (%main::MARK_DIR\n-0001d4a0: 5f49 4e43 4c5f 4361 6368 6529 3b0a 2020 _INCL_Cache);. \n-0001d4b0: 2020 756e 6c69 6e6b 2024 7374 6275 494e unlink $stbuIN\n-0001d4c0: 434c 5245 4366 696c 656e 616d 653b 0a7d CLRECfilename;.}\n-0001d4d0: 0a69 6620 2824 6d61 6b65 4469 7250 6174 .if ($makeDirPat\n-0001d4e0: 6846 696c 656e 616d 6529 0a7b 0a20 2020 hFilename).{. \n-0001d4f0: 2064 626d 636c 6f73 6528 256d 6169 6e3a dbmclose(%main:\n-0001d500: 3a6d 616b 6544 6972 5061 7468 4361 6368 :makeDirPathCach\n-0001d510: 6529 3b0a 2020 2020 756e 6c69 6e6b 2024 e);. unlink $\n-0001d520: 6d61 6b65 4469 7250 6174 6846 696c 656e makeDirPathFilen\n-0001d530: 616d 653b 0a7d 0a0a 0a75 6e6c 6573 7320 ame;.}...unless \n-0001d540: 2824 736b 6970 5379 6e63 290a 7b0a 2020 ($skipSync).{. \n-0001d550: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-0001d560: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-0001d570: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-0001d580: 7379 6e63 696e 6720 2e2e 2e22 5d29 3b0a syncing ...\"]);.\n-0001d590: 2020 2020 7379 7374 656d 2022 2f62 696e system \"/bin\n-0001d5a0: 2f73 796e 6322 3b0a 7d0a 0a0a 7b6d 7920 /sync\";.}...{my \n-0001d5b0: 2458 5858 5858 203d 2024 6d61 696e 3a3a $XXXXX = $main::\n-0001d5c0: 6669 6e69 7368 6564 466c 6167 3b7d 2020 finishedFlag;} \n-0001d5d0: 2023 2074 6f20 6d61 6b65 2070 6572 6c20 # to make perl \n-0001d5e0: 6861 7070 790a 6d79 2024 6669 6e69 7368 happy.my $finish\n-0001d5f0: 6564 203d 2024 6164 6d69 6e44 6972 732d ed = $adminDirs-\n-0001d600: 3e67 6574 416b 7444 6972 2829 202e 2022 >getAktDir() . \"\n-0001d610: 2f24 6d61 696e 3a3a 6669 6e69 7368 6564 /$main::finished\n-0001d620: 466c 6167 223b 0a6c 6f63 616c 202a 4649 Flag\";.local *FI\n-0001d630: 4c45 3b0a 263a 3a63 6865 636b 4465 6c53 LE;.&::checkDelS\n-0001d640: 796d 4c69 6e6b 2822 2466 696e 6973 6865 ymLink(\"$finishe\n-0001d650: 6422 2c20 2470 724c 6f67 2c20 3078 3031 d\", $prLog, 0x01\n-0001d660: 293b 0a6f 7065 6e28 4649 4c45 2c20 223e );.open(FILE, \">\n-0001d670: 222c 2022 2466 696e 6973 6865 6422 2920 \", \"$finished\") \n-0001d680: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p\n-0001d690: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001d6a0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n-0001d6b0: 3d3e 205b 2263 616e 6e6f 7420 6f70 656e => [\"cannot open\n-0001d6c0: 203c 2466 696e 6973 6865 643e 225d 2c0a <$finished>\"],.\n-0001d6d0: 0909 2020 272d 6164 6427 203d 3e20 5b5f .. '-add' => [_\n-0001d6e0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_\n-0001d6f0: 5f5d 2c0a 0909 2020 272d 6578 6974 2720 _],... '-exit' \n-0001d700: 3d3e 2031 293b 0a46 494c 452d 3e61 7574 => 1);.FILE->aut\n-0001d710: 6f66 6c75 7368 2831 293b 0a63 6c6f 7365 oflush(1);.close\n-0001d720: 2846 494c 4529 206f 720a 2020 2020 2470 (FILE) or. $p\n-0001d730: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0001d740: 6e64 2720 3d3e 2022 4522 2c0a 0909 2020 nd' => \"E\",... \n-0001d750: 272d 7374 7227 203d 3e20 5b22 636f 756c '-str' => [\"coul\n-0001d760: 646e 2774 2063 6c6f 7365 203c 2466 696e dn't close <$fin\n-0001d770: 6973 6865 643e 3a20 2421 225d 293b 0a63 ished>: $!\"]);.c\n-0001d780: 686d 6f64 2030 3634 342c 2024 6669 6e69 hmod 0644, $fini\n-0001d790: 7368 6564 3b0a 0a69 6620 2824 6c69 6e6b shed;..if ($link\n-0001d7a0: 546f 5265 6365 6e74 290a 7b0a 2020 2020 ToRecent).{. \n-0001d7b0: 6966 2028 2d6c 2022 2474 6172 6765 7444 if (-l \"$targetD\n-0001d7c0: 6972 2f24 6c69 6e6b 546f 5265 6365 6e74 ir/$linkToRecent\n-0001d7d0: 2229 0a20 2020 207b 0a09 756e 6c69 6e6b \"). {..unlink\n-0001d7e0: 2022 2474 6172 6765 7444 6972 2f24 6c69 \"$targetDir/$li\n-0001d7f0: 6e6b 546f 5265 6365 6e74 223b 0a0a 096d nkToRecent\";...m\n-0001d800: 7920 2824 5f64 2c20 246c 696e 6b29 203d y ($_d, $link) =\n-0001d810: 2026 3a3a 7370 6c69 7446 696c 6544 6972 &::splitFileDir\n-0001d820: 2824 6164 6d69 6e44 6972 732d 3e67 6574 ($adminDirs->get\n-0001d830: 416b 7444 6972 2829 293b 0a09 2470 724c AktDir());..$prL\n-0001d840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0001d850: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... \n-0001d860: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n-0001d870: 6e6e 6f74 2063 7265 6174 6520 7379 6d6c nnot create syml\n-0001d880: 696e 6b20 6c69 6e6b 546f 5265 6365 6e74 ink linkToRecent\n-0001d890: 2022 202e 0a09 0909 0920 223c 246c 696e \" ...... \"<$lin\n-0001d8a0: 6b54 6f52 6563 656e 743e 225d 290a 0920 kToRecent>\"]).. \n-0001d8b0: 2020 2075 6e6c 6573 7320 7379 6d6c 696e unless symlin\n-0001d8c0: 6b20 246c 696e 6b2c 2022 2474 6172 6765 k $link, \"$targe\n-0001d8d0: 7444 6972 2f24 6c69 6e6b 546f 5265 6365 tDir/$linkToRece\n-0001d8e0: 6e74 223b 0a20 2020 207d 0a20 2020 2065 nt\";. }. e\n-0001d8f0: 6c73 6966 2028 2d65 2022 2474 6172 6765 lsif (-e \"$targe\n-0001d900: 7444 6972 2f24 6c69 6e6b 546f 5265 6365 tDir/$linkToRece\n-0001d910: 6e74 2229 0a20 2020 207b 0a09 2470 724c nt\"). {..$prL\n-0001d920: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0001d930: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... \n-0001d940: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n-0001d950: 6e6e 6f74 2064 656c 6574 6520 3c24 6c69 nnot delete <$li\n-0001d960: 6e6b 546f 5265 6365 6e74 3e20 2220 2e0a nkToRecent> \" ..\n-0001d970: 0909 0909 2022 286f 7074 696f 6e20 6c69 .... \"(option li\n-0001d980: 6e6b 546f 5265 6365 6e74 293a 2022 202e nkToRecent): \" .\n-0001d990: 0a09 0909 0920 2269 7320 6e6f 7420 6120 ..... \"is not a \n-0001d9a0: 7379 6d62 6f6c 6963 206c 696e 6b20 2220 symbolic link \" \n-0001d9b0: 2e0a 0909 0909 2022 6f72 206e 6f20 7065 ...... \"or no pe\n-0001d9c0: 726d 6973 7369 6f6e 7322 5d29 3b0a 2020 rmissions\"]);. \n-0001d9d0: 2020 7d0a 2020 2020 656c 7365 2020 2020 }. else \n-0001d9e0: 2320 646f 6573 206e 6f74 2065 7869 7374 # does not exist\n-0001d9f0: 2c20 6372 6561 7465 2061 206e 6577 206f , create a new o\n-0001da00: 6e65 0a20 2020 207b 0a09 6d79 2028 245f ne. {..my ($_\n-0001da10: 642c 2024 6c69 6e6b 2920 3d20 263a 3a73 d, $link) = &::s\n-0001da20: 706c 6974 4669 6c65 4469 7228 2461 646d plitFileDir($adm\n-0001da30: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi\n-0001da40: 7228 2929 3b0a 0924 7072 4c6f 672d 3e70 r());..$prLog->p\n-0001da50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001da60: 2757 272c 0a09 0920 2020 2020 2027 2d73 'W',... '-s\n-0001da70: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-0001da80: 6372 6561 7465 2073 796d 6c69 6e6b 206c create symlink l\n-0001da90: 696e 6b54 6f52 6563 656e 7420 2220 2e0a inkToRecent \" ..\n-0001daa0: 0909 0909 2022 3c24 6c69 6e6b 546f 5265 .... \"<$linkToRe\n-0001dab0: 6365 6e74 3e22 5d29 0a09 2020 2020 756e cent>\"]).. un\n-0001dac0: 6c65 7373 2073 796d 6c69 6e6b 2024 6c69 less symlink $li\n-0001dad0: 6e6b 2c20 2224 7461 7267 6574 4469 722f nk, \"$targetDir/\n-0001dae0: 246c 696e 6b54 6f52 6563 656e 7422 3b0a $linkToRecent\";.\n-0001daf0: 2020 2020 7d0a 7d0a 0a0a 230a 2320 6a65 }.}...#.# je\n-0001db00: 747a 7420 6e6f 6368 2061 6c74 6520 4261 tzt noch alte Ba\n-0001db10: 636b 7570 7320 6cc3 b673 6368 656e 0a23 ckups l..schen.#\n-0001db20: 0a24 6465 6c4f 6c64 2d3e 6465 6c65 7465 .$delOld->delete\n-0001db30: 4261 636b 7570 7328 293b 0a0a 0a23 0a23 Backups();...#.#\n-0001db40: 2070 6f73 7463 6f6d 6d61 6e64 2061 7573 postcommand aus\n-0001db50: 66c3 bc68 7265 6e0a 230a 0a69 6620 2864 f..hren.#..if (d\n-0001db60: 6566 696e 6564 2024 706f 7374 636f 6d6d efined $postcomm\n-0001db70: 616e 6429 0a7b 0a20 2020 2024 7072 4c6f and).{. $prLo\n-0001db80: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0001db90: 203d 3e20 2749 272c 0a09 0920 2027 2d73 => 'I',... '-s\n-0001dba0: 7472 2720 3d3e 205b 2273 7461 7274 696e tr' => [\"startin\n-0001dbb0: 6720 706f 7374 2063 6f6d 6d61 6e64 203c g post command <\n-0001dbc0: 4024 706f 7374 636f 6d6d 616e 643e 202e @$postcommand> .\n-0001dbd0: 2e2e 225d 293b 0a20 2020 206d 7920 2824 ..\"]);. my ($\n-0001dbe0: 706f 7374 436f 6d6d 2c20 4070 6f73 7450 postComm, @postP\n-0001dbf0: 6172 616d 2920 3d20 2840 2470 6f73 7463 aram) = (@$postc\n-0001dc00: 6f6d 6d61 6e64 293b 0a20 2020 206d 7920 ommand);. my \n-0001dc10: 2470 6f73 7463 6f20 3d20 666f 726b 5072 $postco = forkPr\n-0001dc20: 6f63 2d3e 6e65 7728 272d 6578 6563 2720 oc->new('-exec' \n-0001dc30: 3d3e 2024 706f 7374 436f 6d6d 2c0a 0909 => $postComm,...\n-0001dc40: 0920 2020 2020 2027 2d70 6172 616d 2720 . '-param' \n-0001dc50: 3d3e 205c 4070 6f73 7450 6172 616d 2c0a => \\@postParam,.\n-0001dc60: 0909 0920 2020 2020 2027 2d77 6f72 6b69 ... '-worki\n-0001dc70: 6e67 4469 7227 203d 3e20 272e 272c 0a09 ngDir' => '.',..\n-0001dc80: 0909 2020 2020 2020 272d 6f75 7452 616e .. '-outRan\n-0001dc90: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => \"$tmpdir\n-0001dca0: 2f70 6f73 7463 6f6d 6d2d 222c 0a09 0909 /postcomm-\",....\n-0001dcb0: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n-0001dcc0: 3e20 2470 724c 6f67 293b 0a20 2020 2024 > $prLog);. $\n-0001dcd0: 706f 7374 636f 2d3e 7761 6974 2829 3b0a postco->wait();.\n-0001dce0: 2020 2020 6d79 2024 6f75 7420 3d20 2470 my $out = $p\n-0001dcf0: 6f73 7463 6f2d 3e67 6574 5354 444f 5554 ostco->getSTDOUT\n-0001dd00: 2829 3b0a 2020 2020 2470 724c 6f67 2d3e ();. $prLog->\n-0001dd10: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0001dd20: 2027 5727 2c0a 0909 2020 272d 7374 7227 'W',... '-str'\n-0001dd30: 203d 3e20 5b22 5354 444f 5554 206f 6620 => [\"STDOUT of \n-0001dd40: 3c40 2470 6f73 7463 6f6d 6d61 6e64 3e3a <@$postcommand>:\n-0001dd50: 222c 2040 246f 7574 5d29 0a09 6966 2028 \", @$out])..if (\n-0001dd60: 4024 6f75 7420 3e20 3029 3b0a 2020 2020 @$out > 0);. \n-0001dd70: 246f 7574 203d 2024 706f 7374 636f 2d3e $out = $postco->\n-0001dd80: 6765 7453 5444 4552 5228 293b 0a20 2020 getSTDERR();. \n-0001dd90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-0001dda0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-0001ddb0: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => [\"S\n-0001ddc0: 5444 4552 5220 6f66 203c 4024 706f 7374 TDERR of <@$post\n-0001ddd0: 636f 6d6d 616e 643e 3a22 2c20 4024 6f75 command>:\", @$ou\n-0001dde0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out >\n-0001ddf0: 2030 293b 0a0a 2020 2020 6d79 2024 7374 0);.. my $st\n-0001de00: 6174 7573 203d 2024 706f 7374 636f 2d3e atus = $postco->\n-0001de10: 6765 7428 272d 7768 6174 2720 3d3e 2027 get('-what' => '\n-0001de20: 7374 6174 7573 2729 3b0a 2020 2020 6966 status');. if\n-0001de30: 2028 2473 7461 7475 7320 3d3d 2030 290a ($status == 0).\n-0001de40: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-0001de50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001de60: 2749 272c 0a09 0920 2020 2020 2027 2d73 'I',... '-s\n-0001de70: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [\n-0001de80: 2270 6f73 7420 636f 6d6d 616e 6420 3c40 \"post command <@\n-0001de90: 2470 6f73 7463 6f6d 6d61 6e64 3e20 6669 $postcommand> fi\n-0001dea0: 6e69 7368 6564 2077 6974 6820 7374 6174 nished with stat\n-0001deb0: 7573 2030 225d 293b 0a20 2020 207d 0a20 us 0\"]);. }. \n-0001dec0: 2020 2065 6c73 650a 2020 2020 7b0a 0924 else. {..$\n-0001ded0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-0001dee0: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-0001def0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-0001df00: 2270 6f73 7420 636f 6d6d 616e 6420 3c40 \"post command <@\n-0001df10: 2470 6f73 7463 6f6d 6d61 6e64 3e20 6669 $postcommand> fi\n-0001df20: 6e69 7368 6564 2022 202e 0a09 0909 0920 nished \" ...... \n-0001df30: 2277 6974 6820 7374 6174 7573 2024 7374 \"with status $st\n-0001df40: 6174 7573 225d 293b 0a09 756e 6c69 6e6b atus\"]);..unlink\n-0001df50: 2024 6c6f 636b 4669 6c65 2069 6620 246c $lockFile if $l\n-0001df60: 6f63 6b46 696c 653b 0a09 6578 6974 2031 ockFile;..exit 1\n-0001df70: 3b0a 2020 2020 7d0a 7d0a 0a23 206c 6f63 ;. }.}..# loc\n-0001df80: 6b20 6669 6c65 206c c3b6 7363 6865 6e0a k file l..schen.\n-0001df90: 6966 2028 246c 6f63 6b46 696c 6520 616e if ($lockFile an\n-0001dfa0: 6420 2475 6e6c 6f63 6b42 6566 6f72 6544 d $unlockBeforeD\n-0001dfb0: 656c 290a 7b0a 2020 2020 2470 724c 6f67 el).{. $prLog\n-0001dfc0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-0001dfd0: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st\n-0001dfe0: 7227 203d 3e20 5b22 7265 6d6f 7669 6e67 r' => [\"removing\n-0001dff0: 206c 6f63 6b20 6669 6c65 203c 246c 6f63 lock file <$loc\n-0001e000: 6b46 696c 653e 225d 293b 0a20 2020 2075 kFile>\"]);. u\n-0001e010: 6e6c 696e 6b20 246c 6f63 6b46 696c 653b nlink $lockFile;\n-0001e020: 0a20 2020 2024 6c6f 636b 4669 6c65 203d . $lockFile =\n-0001e030: 2075 6e64 6566 3b0a 7d0a 0a0a 2320 4772 undef;.}...# Gr\n-0001e040: c3b6 c39f 6520 766f 6e20 2e6d 6435 4368 ....e von .md5Ch\n-0001e050: 6563 6b53 756d 2d44 6174 6569 206e 6f63 eckSum-Datei noc\n-0001e060: 6820 66c3 bc72 2053 7461 7469 7374 696b h f..r Statistik\n-0001e070: 2062 6572 c3bc 636b 7369 6368 7469 6765 ber..cksichtige\n-0001e080: 6e0a 246d 6169 6e3a 3a73 7461 742d 3e73 n.$main::stat->s\n-0001e090: 6574 5369 7a65 4d44 3543 6865 636b 5375 etSizeMD5CheckSu\n-0001e0a0: 6d28 2461 646d 696e 4469 7273 2d3e 6765 m($adminDirs->ge\n-0001e0b0: 7441 6b74 496e 666f 4669 6c65 2829 2c0a tAktInfoFile(),.\n-0001e0c0: 0909 0909 2463 6f6d 7072 6573 734d 4435 ....$compressMD5\n-0001e0d0: 4669 6c65 293b 0a24 6d61 696e 3a3a 7374 File);.$main::st\n-0001e0e0: 6174 2d3e 7365 7455 7365 6453 697a 6551 at->setUsedSizeQ\n-0001e0f0: 7565 7565 7328 2466 6966 6f43 6f70 792d ueues($fifoCopy-\n-0001e100: 3e67 6574 4d61 7855 7365 644c 656e 6774 >getMaxUsedLengt\n-0001e110: 6828 292c 0a09 0909 2020 2020 2020 2024 h(),.... $\n-0001e120: 6669 666f 436f 6d70 722d 3e67 6574 4d61 fifoCompr->getMa\n-0001e130: 7855 7365 644c 656e 6774 6828 2929 3b0a xUsedLength());.\n-0001e140: 246d 6169 6e3a 3a73 7461 742d 3e70 7269 $main::stat->pri\n-0001e150: 6e74 2827 2d65 7854 7970 6573 2720 3d3e nt('-exTypes' =>\n-0001e160: 205c 2565 7854 7970 6573 293b 0a0a 2320 \\%exTypes);..# \n-0001e170: 6c6f 636b 2066 696c 6520 6cc3 b673 6368 lock file l..sch\n-0001e180: 656e 0a69 6620 2824 6c6f 636b 4669 6c65 en.if ($lockFile\n-0001e190: 290a 7b0a 2020 2020 2470 724c 6f67 2d3e ).{. $prLog->\n-0001e1a0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0001e1b0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str'\n-0001e1c0: 203d 3e20 5b22 7265 6d6f 7669 6e67 206c => [\"removing l\n-0001e1d0: 6f63 6b20 6669 6c65 203c 246c 6f63 6b46 ock file <$lockF\n-0001e1e0: 696c 653e 225d 293b 0a20 2020 2075 6e6c ile>\"]);. unl\n-0001e1f0: 696e 6b20 246c 6f63 6b46 696c 653b 0a7d ink $lockFile;.}\n-0001e200: 0a0a 6966 2028 2463 6f6d 7072 6573 734c ..if ($compressL\n-0001e210: 6f67 496e 4261 636b 7570 4469 7229 2020 ogInBackupDir) \n-0001e220: 2020 2020 2020 2020 2020 2023 206c 6f67 # log\n-0001e230: 2066 696c 6520 696d 2042 6163 6b75 7044 file im BackupD\n-0001e240: 6972 206e 6f63 680a 7b20 2020 2020 2020 ir noch.{ \n-0001e250: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001e260: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001e270: 2023 206b 6f6d 7072 696d 6965 7265 6e0a # komprimieren.\n-0001e280: 2020 2020 2470 724c 6f67 2d3e 7375 6228 $prLog->sub(\n-0001e290: 272d 7072 4c6f 6773 2720 3d3e 205b 2470 '-prLogs' => [$p\n-0001e2a0: 724c 6f67 325d 293b 0a20 2020 206d 7920 rLog2]);. my \n-0001e2b0: 2463 6f6d 7072 6573 734c 6f67 203d 2066 $compressLog = f\n-0001e2c0: 6f72 6b50 726f 632d 3e6e 6577 2827 2d65 orkProc->new('-e\n-0001e2d0: 7865 6327 203d 3e20 2762 7a69 7032 272c xec' => 'bzip2',\n-0001e2e0: 0a09 0909 0920 2020 2027 2d70 6172 616d ..... '-param\n-0001e2f0: 2720 3d3e 205b 246c 6f67 496e 4261 636b ' => [$logInBack\n-0001e300: 7570 4469 7246 696c 654e 616d 655d 2c0a upDirFileName],.\n-0001e310: 0909 0909 2020 2020 272d 6f75 7452 616e .... '-outRan\n-0001e320: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => \"$tmpdir\n-0001e330: 2f63 6f6d 7072 4c6f 672d 222c 0a09 0909 /comprLog-\",....\n-0001e340: 0920 2020 2027 2d70 724c 6f67 2720 3d3e . '-prLog' =>\n-0001e350: 2024 7072 4c6f 6729 3b0a 2020 2020 2463 $prLog);. $c\n-0001e360: 6f6d 7072 6573 734c 6f67 2d3e 7761 6974 ompressLog->wait\n-0001e370: 2829 3b0a 7d0a 0a6d 7920 2465 6e63 203d ();.}..my $enc =\n-0001e380: 2024 7072 4c6f 672d 3e65 6e63 6f75 6e74 $prLog->encount\n-0001e390: 6572 6564 2827 2d6b 696e 6427 203d 3e20 ered('-kind' => \n-0001e3a0: 2757 2729 3b0a 6d79 2024 5320 3d20 2465 'W');.my $S = $e\n-0001e3b0: 6e63 203e 2031 203f 2027 5327 203a 2027 nc > 1 ? 'S' : '\n-0001e3c0: 273b 0a24 7072 4c6f 672d 3e70 7269 6e74 ';.$prLog->print\n-0001e3d0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W',\n-0001e3e0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0001e3f0: 3e20 5b22 2d2d 2024 656e 6320 5741 524e > [\"-- $enc WARN\n-0001e400: 494e 4724 5320 4f43 4355 5252 4544 2044 ING$S OCCURRED D\n-0001e410: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP\n-0001e420: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --\"]). if $\n-0001e430: 656e 633b 0a0a 2465 6e63 203d 2024 7072 enc;..$enc = $pr\n-0001e440: 4c6f 672d 3e65 6e63 6f75 6e74 6572 6564 Log->encountered\n-0001e450: 2827 2d6b 696e 6427 203d 3e20 2745 2729 ('-kind' => 'E')\n-0001e460: 3b0a 2453 203d 2024 656e 6320 3e20 3120 ;.$S = $enc > 1 \n-0001e470: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL\n-0001e480: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0001e490: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. \n-0001e4a0: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => [\"-- \n-0001e4b0: 2465 6e63 2045 5252 4f52 2453 204f 4343 $enc ERROR$S OCC\n-0001e4c0: 5552 5245 4420 4455 5249 4e47 2054 4845 URRED DURING THE\n-0001e4d0: 2042 4143 4b55 5021 202d 2d22 5d29 0a20 BACKUP! --\"]). \n-0001e4e0: 2020 2069 6620 2465 6e63 3b0a 0a0a 6966 if $enc;...if\n-0001e4f0: 2028 2470 724c 6f67 2d3e 656e 636f 756e ($prLog->encoun\n-0001e500: 7465 7265 6428 272d 6b69 6e64 2720 3d3e tered('-kind' =>\n-0001e510: 2022 4522 2929 0a7b 0a20 2020 2024 7072 \"E\")).{. $pr\n-0001e520: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0001e530: 6427 203d 3e20 275a 272c 0a09 0920 2027 d' => 'Z',... '\n-0001e540: 2d73 7472 2720 3d3e 205b 2262 6163 6b69 -str' => [\"backi\n-0001e550: 6e67 2075 7020 6469 7265 6374 6f72 7920 ng up directory \n-0001e560: 3c24 736f 7572 6365 4469 723e 2074 6f20 <$sourceDir> to \n-0001e570: 3c22 202e 0a09 0909 2020 2020 2024 6164 <\" ..... $ad\n-0001e580: 6d69 6e44 6972 732d 3e67 6574 416b 7444 minDirs->getAktD\n-0001e590: 6972 2829 202e 2022 3e22 5d29 3b0a 2020 ir() . \">\"]);. \n-0001e5a0: 2020 6578 6974 2031 3b0a 7d0a 656c 7365 exit 1;.}.else\n-0001e5b0: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p\n-0001e5c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001e5d0: 275a 272c 0a09 0920 2027 2d73 7472 2720 'Z',... '-str' \n-0001e5e0: 3d3e 205b 2262 6163 6b69 6e67 2075 7020 => [\"backing up \n-0001e5f0: 6469 7265 6374 6f72 7920 3c24 736f 7572 directory <$sour\n-0001e600: 6365 4469 723e 2074 6f20 3c22 202e 0a09 ceDir> to <\" ...\n-0001e610: 0909 2020 2020 2024 6164 6d69 6e44 6972 .. $adminDir\n-0001e620: 732d 3e67 6574 416b 7444 6972 2829 202e s->getAktDir() .\n-0001e630: 2022 3e22 5d29 3b0a 2020 2020 6578 6974 \">\"]);. exit\n-0001e640: 2030 3b0a 7d0a 0a0a 2323 2323 2323 2323 0;.}...########\n-0001e650: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0001e660: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0001e670: 2323 2323 2323 2323 2323 0a73 7562 2063 ##########.sub c\n-0001e680: 6c65 616e 7570 0a7b 0a20 2020 206d 7920 leanup.{. my \n-0001e690: 2473 6967 6e61 6d65 203d 2073 6869 6674 $signame = shift\n-0001e6a0: 3b0a 2020 2020 6d79 2024 6578 6974 203d ;. my $exit =\n-0001e6b0: 2028 7368 6966 7428 2920 7c7c 2031 293b (shift() || 1);\n-0001e6c0: 0a0a 2020 2020 6d79 2028 2470 724c 6f67 .. my ($prLog\n-0001e6d0: 2c20 246f 6e6c 794c 6174 654c 696e 6b43 , $onlyLateLinkC\n-0001e6e0: 6865 636b 2c20 246f 6c64 4669 6c65 6e61 heck, $oldFilena\n-0001e6f0: 6d65 2c20 2461 6b74 4669 6c65 6e61 6d65 me, $aktFilename\n-0001e700: 2c20 2470 6172 466f 726b 436f 7079 2c0a , $parForkCopy,.\n-0001e710: 0924 7061 7246 6f72 6b43 6f6d 7072 2c20 .$parForkCompr, \n-0001e720: 2474 6d70 6469 722c 2024 7365 7452 6573 $tmpdir, $setRes\n-0001e730: 6574 4469 7254 696d 6573 4669 6c65 2c20 etDirTimesFile, \n-0001e740: 246c 6f63 6b46 696c 652c 0a09 2473 7462 $lockFile,..$stb\n-0001e750: 7545 5843 4c66 696c 656e 616d 652c 2024 uEXCLfilename, $\n-0001e760: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen\n-0001e770: 616d 652c 2024 6d61 6b65 4469 7250 6174 ame, $makeDirPat\n-0001e780: 6846 696c 656e 616d 6529 0a09 3d20 2840 hFilename)..= (@\n-0001e790: 6d61 696e 3a3a 636c 6561 6e75 7029 3b0a main::cleanup);.\n-0001e7a0: 0a20 2020 2075 6e6c 696e 6b20 246c 6f63 . unlink $loc\n-0001e7b0: 6b46 696c 6520 6966 2024 6c6f 636b 4669 kFile if $lockFi\n-0001e7c0: 6c65 3b0a 0a20 2020 2024 6d61 696e 3a3a le;.. $main::\n-0001e7d0: 656e 644f 6653 746f 7265 4261 636b 7570 endOfStoreBackup\n-0001e7e0: 203d 2031 3b0a 0a20 2020 2069 6620 2824 = 1;.. if ($\n-0001e7f0: 7369 676e 616d 6529 0a20 2020 207b 0a20 signame). {. \n-0001e800: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p\n-0001e810: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0001e820: 2745 272c 0a20 2020 2020 2020 2020 2020 'E',. \n-0001e830: 2020 2020 2020 2020 2020 2027 2d73 7472 '-str\n-0001e840: 2720 3d3e 205b 2263 6175 6768 7420 7369 ' => [\"caught si\n-0001e850: 676e 616c 2024 7369 676e 616d 652c 2074 gnal $signame, t\n-0001e860: 6572 6d69 6e61 7469 6e67 225d 293b 0a20 erminating\"]);. \n-0001e870: 2020 207d 0a0a 2020 2020 756e 6c65 7373 }.. unless\n-0001e880: 2028 246f 6e6c 794c 6174 654c 696e 6b43 ($onlyLateLinkC\n-0001e890: 6865 636b 290a 2020 2020 7b0a 0923 2044 heck). {..# D\n-0001e8a0: 6174 6569 656e 2073 6368 6c69 65c3 9f65 ateien schlie..e\n-0001e8b0: 6e2c 2061 7566 72c3 a475 6d65 6e0a 0924 n, aufr..umen..$\n-0001e8c0: 616b 7446 696c 656e 616d 652d 3e64 656c aktFilename->del\n-0001e8d0: 496e 666f 4669 6c65 2829 3b0a 0924 6f6c InfoFile();..$ol\n-0001e8e0: 6446 696c 656e 616d 652d 3e64 656c 4442 dFilename->delDB\n-0001e8f0: 4d46 696c 6573 2829 3b20 2020 2020 2320 MFiles(); # \n-0001e900: 6462 6d20 6669 6c65 7320 6cc3 b673 6368 dbm files l..sch\n-0001e910: 656e 0a09 756e 6c69 6e6b 2024 7365 7452 en..unlink $setR\n-0001e920: 6573 6574 4469 7254 696d 6573 4669 6c65 esetDirTimesFile\n-0001e930: 3b0a 0a09 2320 6c61 7566 656e 6465 2050 ;...# laufende P\n-0001e940: 726f 7a65 7373 6520 6162 7363 6869 65c3 rozesse abschie.\n-0001e950: 9f65 6e0a 0924 7061 7246 6f72 6b43 6f70 .en..$parForkCop\n-0001e960: 792d 3e73 6967 6e61 6c28 272d 7661 6c75 y->signal('-valu\n-0001e970: 6527 203d 3e20 3229 3b0a 0924 7061 7246 e' => 2);..$parF\n-0001e980: 6f72 6b43 6f6d 7072 2d3e 7369 676e 616c orkCompr->signal\n-0001e990: 2827 2d76 616c 7565 2720 3d3e 2032 293b ('-value' => 2);\n-0001e9a0: 0a0a 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-0001e9b0: 2827 2d6b 696e 6427 203d 3e20 275a 272c ('-kind' => 'Z',\n-0001e9c0: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-0001e9d0: 3d3e 205b 2262 6163 6b69 6e67 2075 7020 => [\"backing up \n-0001e9e0: 6469 7265 6374 6f72 7920 3c24 736f 7572 directory <$sour\n-0001e9f0: 6365 4469 723e 225d 293b 0a20 2020 207d ceDir>\"]);. }\n-0001ea00: 0a0a 2020 2020 6966 2028 2473 7462 7545 .. if ($stbuE\n-0001ea10: 5843 4c66 696c 656e 616d 6529 0a20 2020 XCLfilename). \n-0001ea20: 207b 0a23 0975 6e74 6965 2025 6d61 696e {.#.untie %main\n-0001ea30: 3a3a 4d41 524b 5f44 4952 5f43 6163 6865 ::MARK_DIR_Cache\n-0001ea40: 3b0a 0964 626d 636c 6f73 6528 256d 6169 ;..dbmclose(%mai\n-0001ea50: 6e3a 3a4d 4152 4b5f 4449 525f 4361 6368 n::MARK_DIR_Cach\n-0001ea60: 6529 3b0a 0975 6e6c 696e 6b20 2473 7462 e);..unlink $stb\n-0001ea70: 7545 5843 4c66 696c 656e 616d 653b 0a20 uEXCLfilename;. \n-0001ea80: 2020 207d 0a20 2020 2069 6620 2824 7374 }. if ($st\n-0001ea90: 6275 4558 434c 5245 4366 696c 656e 616d buEXCLRECfilenam\n-0001eaa0: 6529 0a20 2020 207b 0a23 0975 6e74 6965 e). {.#.untie\n-0001eab0: 2025 6d61 696e 3a3a 4d41 524b 5f44 4952 %main::MARK_DIR\n-0001eac0: 5f52 4543 5f43 6163 6865 3b0a 0964 626d _REC_Cache;..dbm\n-0001ead0: 636c 6f73 6528 256d 6169 6e3a 3a4d 4152 close(%main::MAR\n-0001eae0: 4b5f 4449 525f 5245 435f 4361 6368 6529 K_DIR_REC_Cache)\n-0001eaf0: 3b0a 0975 6e6c 696e 6b20 2473 7462 7545 ;..unlink $stbuE\n-0001eb00: 5843 4c52 4543 6669 6c65 6e61 6d65 3b0a XCLRECfilename;.\n-0001eb10: 2020 2020 7d0a 2020 2020 6966 2028 2473 }. if ($s\n-0001eb20: 7462 7549 4e43 4c52 4543 6669 6c65 6e61 tbuINCLRECfilena\n-0001eb30: 6d65 290a 2020 2020 7b0a 2309 756e 7469 me). {.#.unti\n-0001eb40: 6520 256d 6169 6e3a 3a4d 4152 4b5f 4449 e %main::MARK_DI\n-0001eb50: 525f 494e 434c 5f43 6163 6865 3b0a 0964 R_INCL_Cache;..d\n-0001eb60: 626d 636c 6f73 6528 256d 6169 6e3a 3a4d bmclose(%main::M\n-0001eb70: 4152 4b5f 4449 525f 494e 434c 5f43 6163 ARK_DIR_INCL_Cac\n-0001eb80: 6865 293b 0a09 756e 6c69 6e6b 2024 7374 he);..unlink $st\n-0001eb90: 6275 494e 434c 5245 4366 696c 656e 616d buINCLRECfilenam\n-0001eba0: 653b 0a20 2020 207d 0a0a 2020 2020 6966 e;. }.. if\n-0001ebb0: 2028 246d 616b 6544 6972 5061 7468 4669 ($makeDirPathFi\n-0001ebc0: 6c65 6e61 6d65 290a 2020 2020 7b0a 0964 lename). {..d\n-0001ebd0: 626d 636c 6f73 6528 256d 6169 6e3a 3a6d bmclose(%main::m\n-0001ebe0: 616b 6544 6972 5061 7468 4361 6368 6529 akeDirPathCache)\n-0001ebf0: 3b0a 0975 6e6c 696e 6b20 246d 616b 6544 ;..unlink $makeD\n-0001ec00: 6972 5061 7468 4669 6c65 6e61 6d65 3b0a irPathFilename;.\n-0001ec10: 2020 2020 7d0a 0a20 2020 2065 7869 7420 }.. exit \n-0001ec20: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...#####\n-0001ec30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0001ec40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0001ec50: 2323 230a 7375 6220 6361 6c63 426c 6f63 ###.sub calcBloc\n-0001ec60: 6b4d 4435 5375 6d73 0a7b 0a20 2020 206d kMD5Sums.{. m\n-0001ec70: 7920 2473 6f75 7263 6544 6972 203d 2073 y $sourceDir = s\n-0001ec80: 6869 6674 3b0a 2020 2020 6d79 2024 7461 hift;. my $ta\n-0001ec90: 7267 6574 4469 7220 3d20 7368 6966 743b rgetDir = shift;\n-0001eca0: 0a20 2020 206d 7920 2472 656c 5061 7468 . my $relPath\n-0001ecb0: 203d 2073 6869 6674 3b20 2020 2020 2020 = shift; \n-0001ecc0: 2020 2023 2072 656c 6174 6976 6520 7061 # relative pa\n-0001ecd0: 7468 2069 6e20 6261 636b 7570 2069 6e63 th in backup inc\n-0001ece0: 6c2e 2066 696c 650a 2020 2020 6d79 2024 l. file. my $\n-0001ecf0: 626c 6f63 6b53 697a 6520 3d20 7368 6966 blockSize = shif\n-0001ed00: 743b 0a20 2020 206d 7920 2463 6f6d 7072 t;. my $compr\n-0001ed10: 6573 7342 6c6f 636b 203d 2073 6869 6674 essBlock = shift\n-0001ed20: 3b20 2020 2023 2027 6327 206f 6465 7220 ; # 'c' oder \n-0001ed30: 2775 2720 2863 6f6d 7072 6573 732c 2075 'u' (compress, u\n-0001ed40: 6e63 6f6d 7072 6573 7329 0a20 2020 206d ncompress). m\n-0001ed50: 7920 2462 6c6f 636b 5265 6164 203d 2073 y $blockRead = s\n-0001ed60: 6869 6674 3b20 2020 2020 2020 2023 2070 hift; # p\n-0001ed70: 6f69 6e74 6572 2074 6f20 6c69 7374 0a20 ointer to list. \n-0001ed80: 2020 206d 7920 2463 6f6d 7072 6573 7343 my $compressC\n-0001ed90: 6f6d 6d61 6e64 203d 2073 6869 6674 3b0a ommand = shift;.\n-0001eda0: 2020 2020 6d79 2024 636f 6d70 7265 7373 my $compress\n-0001edb0: 4f70 7469 6f6e 7320 3d20 7368 6966 743b Options = shift;\n-0001edc0: 0a20 2020 206d 7920 2470 6f73 7466 6978 . my $postfix\n-0001edd0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-0001ede0: 2024 6f6c 6446 696c 656e 616d 6520 3d20 $oldFilename = \n-0001edf0: 7368 6966 743b 2020 2020 2020 2320 706f shift; # po\n-0001ee00: 696e 7465 7220 746f 206f 626a 6563 740a inter to object.\n-0001ee10: 2020 2020 6d79 2024 6c61 7465 4c69 6e6b my $lateLink\n-0001ee20: 7320 3d20 7368 6966 743b 0a20 2020 206d s = shift;. m\n-0001ee30: 7920 246c 6174 6543 6f6d 7072 6573 7320 y $lateCompress \n-0001ee40: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-0001ee50: 246e 6f43 6f6d 7072 6573 7320 3d20 7368 $noCompress = sh\n-0001ee60: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL\n-0001ee70: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. \n-0001ee80: 6d79 2024 746d 7066 696c 6520 3d20 7368 my $tmpfile = sh\n-0001ee90: 6966 743b 0a20 2020 206d 7920 2462 6c6f ift;. my $blo\n-0001eea0: 636b 4368 6563 6b53 756d 4669 6c65 203d ckCheckSumFile =\n-0001eeb0: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $\n-0001eec0: 6374 696d 6520 3d20 7368 6966 743b 0a20 ctime = shift;. \n-0001eed0: 2020 206d 7920 246d 7469 6d65 203d 2073 my $mtime = s\n-0001eee0: 6869 6674 3b0a 2020 2020 6d79 2024 696e hift;. my $in\n-0001eef0: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz\n-0001ef00: 6520 3d20 7368 6966 743b 0a0a 0a23 7072 e = shift;...#pr\n-0001ef10: 696e 7420 2263 616c 634d 4435 426c 6f63 int \"calcMD5Bloc\n-0001ef20: 6b53 756d 735c 6e22 3b0a 2370 7269 6e74 kSums\\n\";.#print\n-0001ef30: 2022 5c74 736f 7572 6365 4469 7220 3d20 \"\\tsourceDir = \n-0001ef40: 3c24 736f 7572 6365 4469 723e 5c6e 223b <$sourceDir>\\n\";\n-0001ef50: 0a23 7072 696e 7420 225c 7474 6172 6765 .#print \"\\ttarge\n-0001ef60: 7444 6972 203d 203c 2474 6172 6765 7444 tDir = <$targetD\n-0001ef70: 6972 3e5c 6e22 3b0a 2370 7269 6e74 2022 ir>\\n\";.#print \"\n-0001ef80: 5c74 7265 6c50 6174 6820 3d20 3c24 7265 \\trelPath = <$re\n-0001ef90: 6c50 6174 683e 5c6e 223b 0a23 7072 696e lPath>\\n\";.#prin\n-0001efa0: 7420 225c 7462 6c6f 636b 5369 7a65 203d t \"\\tblockSize =\n-0001efb0: 203c 2462 6c6f 636b 5369 7a65 3e5c 6e22 <$blockSize>\\n\"\n-0001efc0: 3b0a 2370 7269 6e74 2022 5c74 746d 7066 ;.#print \"\\ttmpf\n-0001efd0: 696c 6520 3d20 3c24 746d 7066 696c 653e ile = <$tmpfile>\n-0001efe0: 5c6e 223b 0a23 7072 696e 7420 225c 7463 \\n\";.#print \"\\tc\n-0001eff0: 6f6d 7072 6573 7342 6c6f 636b 203d 203c ompressBlock = <\n-0001f000: 2463 6f6d 7072 6573 7342 6c6f 636b 3e5c $compressBlock>\\\n-0001f010: 6e22 3b0a 2370 7269 6e74 2022 5c74 6c61 n\";.#print \"\\tla\n-0001f020: 7465 436f 6d70 7265 7373 203d 203c 246c teCompress = <$l\n-0001f030: 6174 6543 6f6d 7072 6573 733e 5c6e 2220 ateCompress>\\n\" \n-0001f040: 6966 2024 6c61 7465 436f 6d70 7265 7373 if $lateCompress\n-0001f050: 3b0a 0a20 2020 2024 3020 3d20 2270 6572 ;.. $0 = \"per\n-0001f060: 6c6d 6435 626c 6f63 6b20 2472 656c 5061 lmd5block $relPa\n-0001f070: 7468 223b 0a0a 0a20 2020 206d 7920 246d th\";... my $m\n-0001f080: 616e 6167 654e 6577 426c 6f63 6b20 3d0a anageNewBlock =.\n-0001f090: 096d 616e 6167 654e 6577 426c 6f63 6b4d .manageNewBlockM\n-0001f0a0: 4435 746f 4669 6c65 6e61 6d65 2d3e 6e65 D5toFilename->ne\n-0001f0b0: 7728 272d 6f6c 6446 696c 656e 616d 6527 w('-oldFilename'\n-0001f0c0: 203d 3e20 246f 6c64 4669 6c65 6e61 6d65 => $oldFilename\n-0001f0d0: 2c0a 0909 0909 0920 272d 6469 7227 203d ,...... '-dir' =\n-0001f0e0: 3e20 2474 6172 6765 7444 6972 2c0a 0909 > $targetDir,...\n-0001f0f0: 0909 0920 272d 7265 6c50 6174 6827 203d ... '-relPath' =\n-0001f100: 3e20 2472 656c 5061 7468 2c0a 0909 0909 > $relPath,.....\n-0001f110: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p\n-0001f120: 724c 6f67 293b 0a0a 2020 2020 2320 6578 rLog);.. # ex\n-0001f130: 706c 616e 6174 696f 6e73 3a0a 2020 2020 planations:. \n-0001f140: 2323 2024 6c61 7465 4c69 6e6b 730a 2020 ## $lateLinks. \n-0001f150: 2020 2323 2020 6966 2064 6566 696e 6564 ## if defined\n-0001f160: 2c20 7772 6974 6520 6c61 7465 4c69 6e6b , write lateLink\n-0001f170: 730a 2020 2020 2323 2024 6c61 7465 436f s. ## $lateCo\n-0001f180: 6d70 7265 7373 0a20 2020 2023 2320 2066 mpress. ## f\n-0001f190: 726f 6d20 6f70 7469 6f6e 0a20 2020 2023 rom option. #\n-0001f1a0: 2320 2464 6972 6563 740a 2020 2020 2323 # $direct. ##\n-0001f1b0: 2020 3d3d 2030 202d 3e20 666f 726b 2066 == 0 -> fork f\n-0001f1c0: 6f72 2063 6f6d 7072 6573 7369 6f6e 202f or compression /\n-0001f1d0: 203d 3d20 3120 2d3e 2063 6f6d 7072 6573 == 1 -> compres\n-0001f1e0: 7320 696e 2070 6572 6c0a 0a20 2020 206d s in perl.. m\n-0001f1f0: 7920 2463 6f6d 7072 4368 6563 6b3b 0a20 y $comprCheck;. \n-0001f200: 2020 2069 6620 2824 636f 6d70 7265 7373 if ($compress\n-0001f210: 426c 6f63 6b20 6571 2027 6e6f 2729 0a20 Block eq 'no'). \n-0001f220: 2020 207b 0a09 2463 6f6d 7072 6573 7342 {..$compressB\n-0001f230: 6c6f 636b 203d 2027 7527 3b0a 0924 636f lock = 'u';..$co\n-0001f240: 6d70 7243 6865 636b 203d 2075 6e64 6566 mprCheck = undef\n-0001f250: 3b0a 2020 2020 7d0a 2020 2020 656c 7369 ;. }. elsi\n-0001f260: 6620 2824 636f 6d70 7265 7373 426c 6f63 f ($compressBloc\n-0001f270: 6b20 6571 2027 7965 7327 290a 2020 2020 k eq 'yes'). \n-0001f280: 7b0a 0924 636f 6d70 7265 7373 426c 6f63 {..$compressBloc\n-0001f290: 6b20 3d20 2763 273b 0a09 2463 6f6d 7072 k = 'c';..$compr\n-0001f2a0: 4368 6563 6b20 3d20 756e 6465 663b 0a20 Check = undef;. \n-0001f2b0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n-0001f2c0: 2020 7b0a 0924 636f 6d70 7265 7373 426c {..$compressBl\n-0001f2d0: 6f63 6b20 3d20 2763 273b 2020 2020 2320 ock = 'c'; # \n-0001f2e0: 6265 6361 7573 6520 6966 2064 6570 656e because if depen\n-0001f2f0: 6465 6e79 206f 6620 6c61 7465 436f 6d70 deny of lateComp\n-0001f300: 7265 7373 0a09 2020 2020 2020 2020 2020 ress.. \n-0001f310: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-0001f320: 2028 7365 6520 6265 6c6f 7729 0a09 2463 (see below)..$c\n-0001f330: 6f6d 7072 4368 6563 6b20 3d20 313b 0a20 omprCheck = 1;. \n-0001f340: 2020 207d 0a0a 2020 2020 246c 6174 6543 }.. $lateC\n-0001f350: 6f6d 7072 6573 7320 3d20 756e 6465 6620 ompress = undef \n-0001f360: 6966 2024 636f 6d70 7265 7373 426c 6f63 if $compressBloc\n-0001f370: 6b20 6571 2027 7527 3b20 2023 206d 7573 k eq 'u'; # mus\n-0001f380: 7420 6e6f 7420 6265 2063 6f6d 7072 6573 t not be compres\n-0001f390: 7365 640a 0a20 2020 206d 7920 2824 6e6f sed.. my ($no\n-0001f3a0: 5761 726e 696e 6773 2c20 246e 6f45 7272 Warnings, $noErr\n-0001f3b0: 6f72 7329 203d 2028 302c 2030 293b 0a20 ors) = (0, 0);. \n-0001f3c0: 2020 206d 7920 2824 6e6f 426c 6f63 6b43 my ($noBlockC\n-0001f3d0: 6f6d 7072 4368 6563 6b43 6f6d 7072 2c20 omprCheckCompr, \n-0001f3e0: 246e 6f42 6c6f 636b 436f 6d70 7243 6865 $noBlockComprChe\n-0001f3f0: 636b 4370 2920 3d20 2830 2c20 3029 3b0a ckCp) = (0, 0);.\n-0001f400: 0a20 2020 206d 7920 246d 6b64 6972 4c61 . my $mkdirLa\n-0001f410: 7465 4c69 6e6b 7346 696c 6550 6174 6820 teLinksFilePath \n-0001f420: 3d20 756e 6465 663b 0a20 2020 206c 6f63 = undef;. loc\n-0001f430: 616c 2028 2a46 494c 452c 202a 4f55 5429 al (*FILE, *OUT)\n-0001f440: 3b0a 2020 2020 6d79 2024 6669 6c65 496e ;. my $fileIn\n-0001f450: 203d 2075 6e64 6566 3b20 2020 2023 2075 = undef; # u\n-0001f460: 7365 6420 746f 2072 6561 6420 7669 6120 sed to read via \n-0001f470: 7069 7065 2028 6669 6c74 6572 290a 2020 pipe (filter). \n-0001f480: 2020 6966 2028 4024 626c 6f63 6b52 6561 if (@$blockRea\n-0001f490: 6429 2020 2023 2024 626c 6f63 6b52 6561 d) # $blockRea\n-0001f4a0: 6420 3d20 706f 696e 7465 7220 746f 2070 d = pointer to p\n-0001f4b0: 726f 6772 616d 2074 6f20 7069 7065 2069 rogram to pipe i\n-0001f4c0: 6e20 626c 6f63 6b20 746f 2072 6561 640a n block to read.\n-0001f4d0: 2020 2020 7b0a 096d 7920 2824 7072 6f67 {..my ($prog\n-0001f4e0: 2c20 4070 6172 2920 3d20 2840 2462 6c6f , @par) = (@$blo\n-0001f4f0: 636b 5265 6164 293b 0a09 6d79 2028 4070 ckRead);..my (@p\n-0001f500: 293b 0a09 6966 2028 2463 7469 6d65 203d );..if ($ctime =\n-0001f510: 3d20 3029 2020 2020 2020 2020 2020 2020 = 0) \n-0001f520: 2020 2023 2064 6576 6963 650a 097b 0a09 # device..{..\n-0001f530: 2020 2020 2840 7029 203d 2028 272d 7374 (@p) = ('-st\n-0001f540: 6465 7272 2720 3d3e 2027 2f64 6576 2f6e derr' => '/dev/n\n-0001f550: 756c 6c27 293b 0a09 7d0a 0965 6c73 6520 ull');..}..else \n-0001f560: 2020 2023 2062 6c6f 636b 6564 2066 696c # blocked fil\n-0001f570: 650a 097b 0a09 2020 2020 2840 7029 203d e..{.. (@p) =\n-0001f580: 2028 272d 6f75 7452 616e 646f 6d27 203d ('-outRandom' =\n-0001f590: 3e20 2224 746d 7064 6972 2f73 7462 7550 > \"$tmpdir/stbuP\n-0001f5a0: 6970 6546 726f 6d31 302d 2229 3b0a 097d ipeFrom10-\");..}\n-0001f5b0: 0a09 2466 696c 6549 6e20 3d20 7069 7065 ..$fileIn = pipe\n-0001f5c0: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('-\n-0001f5d0: 6578 6563 2720 3d3e 2024 7072 6f67 2c0a exec' => $prog,.\n-0001f5e0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-0001f5f0: 203d 3e20 5c40 7061 722c 0a09 0909 0920 => \\@par,..... \n-0001f600: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $\n-0001f610: 736f 7572 6365 4469 722c 0a09 0909 0920 sourceDir,..... \n-0001f620: 2020 2040 702c 0a09 0909 0920 2020 2027 @p,..... '\n-0001f630: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo\n-0001f640: 6729 3b0a 2309 7072 696e 7420 2265 7865 g);.#.print \"exe\n-0001f650: 6320 3d20 3c24 7072 6f67 3e5c 6e22 3b0a c = <$prog>\\n\";.\n-0001f660: 2309 7072 696e 7420 225c 4070 203d 203c #.print \"\\@p = <\n-0001f670: 4070 3e5c 6e22 3b0a 096d 7920 2824 666c @p>\\n\";..my ($fl\n-0001f680: 6167 732c 2024 666c 312c 2024 666c 322c ags, $fl1, $fl2,\n-0001f690: 2024 666c 3329 3b0a 096c 6f63 616c 202a $fl3);..local *\n-0001f6a0: 494e 203d 2024 6669 6c65 496e 2d3e 7b27 IN = $fileIn->{'\n-0001f6b0: 6664 277d 3b0a 0a09 756e 6c65 7373 2028 fd'};...unless (\n-0001f6c0: 2466 6c61 6773 203d 2066 636e 746c 2849 $flags = fcntl(I\n-0001f6d0: 4e2c 2046 5f47 4554 5049 5045 5f53 5a2c N, F_GETPIPE_SZ,\n-0001f6e0: 2030 2929 0a20 097b 0a09 2020 2020 2470 0)). .{.. $p\n-0001f6f0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0001f700: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-0001f710: 2027 2d73 7472 2720 3d3e 205b 2243 616e '-str' => [\"Can\n-0001f720: 2774 2066 636e 746c 2046 5f47 4554 5049 't fcntl F_GETPI\n-0001f730: 5045 5f53 5a3a 2024 2122 5d29 3b0a 097d PE_SZ: $!\"]);..}\n-0001f740: 0a09 2466 6c31 203d 2024 666c 6167 733b ..$fl1 = $flags;\n-0001f750: 0a23 0920 2020 206f 7220 6469 6520 2243 .#. or die \"C\n-0001f760: 616e 2774 2066 636e 746c 2046 5f47 4554 an't fcntl F_GET\n-0001f770: 5049 5045 5f53 5a3a 2024 2122 3b0a 2309 PIPE_SZ: $!\";.#.\n-0001f780: 7072 696e 7420 2223 2323 2347 4554 2066 print \"####GET f\n-0001f790: 6c61 6773 2031 3d24 666c 6167 735c 6e22 lags 1=$flags\\n\"\n-0001f7a0: 3b0a 0a09 756e 6c65 7373 2028 2466 6c61 ;...unless ($fla\n-0001f7b0: 6773 203d 2066 636e 746c 2849 4e2c 2046 gs = fcntl(IN, F\n-0001f7c0: 5f53 4554 5049 5045 5f53 5a2c 2024 696e _SETPIPE_SZ, $in\n-0001f7d0: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz\n-0001f7e0: 6529 290a 097b 0a09 2020 2020 2470 724c e))..{.. $prL\n-0001f7f0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0001f800: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-0001f810: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-0001f820: 4361 6669 6c65 3a2f 2f2f 686f 6d65 2f68 Cafile:///home/h\n-0001f830: 6a63 2f53 6368 7265 6962 7469 7363 682f jc/Schreibtisch/\n-0001f840: 7472 6173 682e 6465 736b 746f 706e 2774 trash.desktopn't\n-0001f850: 2066 636e 746c 2046 5f53 4554 5049 5045 fcntl F_SETPIPE\n-0001f860: 5f53 5a20 746f 2024 696e 7465 726e 616c _SZ to $internal\n-0001f870: 5069 7065 4275 6653 697a 653a 2024 2122 PipeBufSize: $!\"\n-0001f880: 5d29 3b0a 097d 0a09 2466 6c32 203d 2024 ]);..}..$fl2 = $\n-0001f890: 666c 6167 733b 0a23 0920 2020 200a 2320 flags;.#. .# \n-0001f8a0: 2020 206f 7220 6469 6520 2243 616e 2774 or die \"Can't\n-0001f8b0: 2066 636e 746c 2046 5f47 4554 5049 5045 fcntl F_GETPIPE\n-0001f8c0: 5f53 5a3a 2024 2122 3b0a 2309 7072 696e _SZ: $!\";.#.prin\n-0001f8d0: 7420 2223 2323 2353 4554 2066 6c61 6773 t \"####SET flags\n-0001f8e0: 2032 3d24 666c 6167 735c 6e22 3b0a 0a09 2=$flags\\n\";...\n-0001f8f0: 756e 6c65 7373 2028 2466 6c61 6773 203d unless ($flags =\n-0001f900: 2066 636e 746c 2849 4e2c 2046 5f47 4554 fcntl(IN, F_GET\n-0001f910: 5049 5045 5f53 5a2c 2030 2929 0a09 7b0a PIPE_SZ, 0))..{.\n-0001f920: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-0001f930: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-0001f940: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n-0001f950: 3e20 5b22 4361 6e27 7420 6663 6e74 6c20 > [\"Can't fcntl \n-0001f960: 465f 4745 5450 4950 455f 535a 3a20 2421 F_GETPIPE_SZ: $!\n-0001f970: 225d 293b 0a09 7d0a 0924 666c 3320 3d20 \"]);..}..$fl3 = \n-0001f980: 2466 6c61 6773 3b0a 2309 2020 2020 6f72 $flags;.#. or\n-0001f990: 2064 6965 2022 4361 6e27 7420 6663 6e74 die \"Can't fcnt\n-0001f9a0: 6c20 465f 4745 5450 4950 455f 535a 3a20 l F_GETPIPE_SZ: \n-0001f9b0: 2421 223b 0a23 0970 7269 6e74 2022 2323 $!\";.#.print \"##\n-0001f9c0: 2323 4745 5420 666c 6167 7320 333d 2466 ##GET flags 3=$f\n-0001f9d0: 6c61 6773 5c6e 223b 0a0a 0969 6620 2824 lags\\n\";...if ($\n-0001f9e0: 666c 3120 213d 2024 666c 3329 0a09 7b0a fl1 != $fl3)..{.\n-0001f9f0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-0001fa00: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-0001fa10: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n-0001fa20: 3e0a 0909 205b 2263 6861 6e67 6564 2069 >... [\"changed i\n-0001fa30: 6e74 6572 6e61 6c20 7069 7065 2062 7566 nternal pipe buf\n-0001fa40: 6665 7220 7369 7a65 2066 726f 6d20 2466 fer size from $f\n-0001fa50: 6c31 2074 6f20 2466 6c33 2066 6f72 203c l1 to $fl3 for <\n-0001fa60: 2473 6f75 7263 6544 6972 3e22 5d29 3b0a $sourceDir>\"]);.\n-0001fa70: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. \n-0001fa80: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-0001fa90: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-0001faa0: 2020 2020 2020 2020 272d 7374 7227 203d '-str' =\n-0001fab0: 3e20 5b22 7072 6573 6572 7669 6e67 2069 > [\"preserving i\n-0001fac0: 6e74 6572 6e61 6c20 7069 7065 2062 7566 nternal pipe buf\n-0001fad0: 6665 7220 7369 7a65 206f 6620 2466 6c31 fer size of $fl1\n-0001fae0: 2066 6f72 203c 2473 6f75 7263 6544 6972 for <$sourceDir\n-0001faf0: 3e22 5d29 3b0a 097d 0a20 2020 207d 0a20 >\"]);..}. }. \n-0001fb00: 2020 2065 6c73 650a 2020 2020 7b0a 0975 else. {..u\n-0001fb10: 6e6c 6573 7320 2873 7973 6f70 656e 2846 nless (sysopen(F\n-0001fb20: 494c 452c 2024 736f 7572 6365 4469 722c ILE, $sourceDir,\n-0001fb30: 204f 5f52 444f 4e4c 5929 290a 097b 0a09 O_RDONLY))..{..\n-0001fb40: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-0001fb50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-0001fb60: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-0001fb70: 205b 2263 616e 6e6f 7420 6f70 656e 203c [\"cannot open <\n-0001fb80: 2473 6f75 7263 6544 6972 3e22 5d2c 0a09 $sourceDir>\"],..\n-0001fb90: 0909 2020 272d 6164 6427 203d 3e20 5b5f .. '-add' => [_\n-0001fba0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_\n-0001fbb0: 5f5d 293b 0a09 2020 2020 2b2b 246e 6f45 _]);.. ++$noE\n-0001fbc0: 7272 6f72 733b 0a09 2020 2020 7265 7475 rrors;.. retu\n-0001fbd0: 726e 2030 3b0a 097d 0a20 2020 207d 0a0a rn 0;..}. }..\n-0001fbe0: 2020 2020 6d79 2024 6d64 3541 6c6c 203d my $md5All =\n-0001fbf0: 2044 6967 6573 743a 3a4d 4435 2d3e 6e65 Digest::MD5->ne\n-0001fc00: 7728 293b 0a20 2020 206d 7920 2462 6c6f w();. my $blo\n-0001fc10: 636b 4e6f 203d 2030 3b0a 2020 2020 6d79 ckNo = 0;. my\n-0001fc20: 2024 6275 6666 6572 3b0a 2020 2020 6d79 $buffer;. my\n-0001fc30: 2028 406e 6577 4d44 356c 696e 6529 203d (@newMD5line) =\n-0001fc40: 2028 293b 0a20 2020 206d 7920 2824 7374 ();. my ($st\n-0001fc50: 6174 5369 7a65 4f72 6967 2c20 2473 7461 atSizeOrig, $sta\n-0001fc60: 7453 697a 654e 6577 2c20 2473 7461 744e tSizeNew, $statN\n-0001fc70: 6f46 6f72 6b73 4350 2c20 2473 7461 744e oForksCP, $statN\n-0001fc80: 6f46 6f72 6b73 436f 6d70 7265 7373 2c0a oForksCompress,.\n-0001fc90: 0924 7374 6174 4e6f 4c61 7465 4c69 6e6b .$statNoLateLink\n-0001fca0: 732c 2024 6e29 203d 2028 302c 2030 2c20 s, $n) = (0, 0, \n-0001fcb0: 302c 2030 2c20 302c 2030 293b 0a0a 2020 0, 0, 0, 0);.. \n-0001fcc0: 2020 6d79 2024 7061 7261 6c46 6f72 6b20 my $paralFork \n-0001fcd0: 3d20 7061 7261 6c6c 656c 466f 726b 2d3e = parallelFork->\n-0001fce0: 6e65 7728 272d 6d61 7850 6172 616c 6c65 new('-maxParalle\n-0001fcf0: 6c27 203d 3e20 246e 6f43 6f6d 7072 6573 l' => $noCompres\n-0001fd00: 732c 0a09 0909 0920 2020 2020 2027 2d70 s,..... '-p\n-0001fd10: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-0001fd20: 3b0a 2020 2020 6d79 2024 7469 6e79 5363 ;. my $tinySc\n-0001fd30: 6865 6420 3d20 7469 6e79 5761 6974 5363 hed = tinyWaitSc\n-0001fd40: 6865 6475 6c65 722d 3e6e 6577 2827 2d70 heduler->new('-p\n-0001fd50: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-0001fd60: 3b0a 0a20 2020 206d 7920 2464 6972 6563 ;.. my $direc\n-0001fd70: 7420 3d20 303b 2020 2020 2320 3d3d 2031 t = 0; # == 1\n-0001fd80: 202d 3e20 646f 206e 6f74 2066 6f72 6b20 -> do not fork \n-0001fd90: 666f 7220 636f 6d70 7265 7373 696f 6e20 for compression \n-0001fda0: 6f72 2063 6f70 790a 2020 2020 2464 6972 or copy. $dir\n-0001fdb0: 6563 7420 3d20 3120 6966 2024 636f 6d70 ect = 1 if $comp\n-0001fdc0: 7265 7373 426c 6f63 6b20 6571 2027 7527 ressBlock eq 'u'\n-0001fdd0: 3b0a 2020 2020 2464 6972 6563 7420 3d20 ;. $direct = \n-0001fde0: 3120 6966 2024 6d61 696e 3a3a 494f 436f 1 if $main::IOCo\n-0001fdf0: 6d70 7265 7373 4469 7265 6374 0a09 616e mpressDirect..an\n-0001fe00: 6420 2462 6c6f 636b 5369 7a65 203c 2024 d $blockSize < $\n-0001fe10: 6d61 696e 3a3a 6d69 6e43 6f70 7957 6974 main::minCopyWit\n-0001fe20: 6846 6f72 6b0a 0961 6e64 2024 636f 6d70 hFork..and $comp\n-0001fe30: 7265 7373 426c 6f63 6b20 6571 2027 6327 ressBlock eq 'c'\n-0001fe40: 3b0a 2370 7269 6e74 2022 6469 7265 6374 ;.#print \"direct\n-0001fe50: 203d 203c 2464 6972 6563 743e 5c6e 223b = <$direct>\\n\";\n-0001fe60: 0a0a 2020 2020 6d79 2024 6a6f 6254 6f44 .. my $jobToD\n-0001fe70: 6f20 3d20 313b 0a20 2020 206d 7920 2470 o = 1;. my $p\n-0001fe80: 6172 466f 726b 546f 446f 203d 2030 3b0a arForkToDo = 0;.\n-0001fe90: 0a20 2020 2075 6e6c 6573 7320 286f 7065 . unless (ope\n-0001fea0: 6e28 4f55 542c 2022 3e22 2c20 2474 6d70 n(OUT, \">\", $tmp\n-0001feb0: 6669 6c65 2929 0a20 2020 207b 0a09 2470 file)). {..$p\n-0001fec0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0001fed0: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n-0001fee0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-0001fef0: 6361 6e6e 6f74 206f 7065 6e20 7465 6d70 cannot open temp\n-0001ff00: 6f72 6172 7920 6669 6c65 203c 2474 6d70 orary file <$tmp\n-0001ff10: 6669 6c65 3e22 5d29 3b0a 092b 2b24 6e6f file>\"]);..++$no\n-0001ff20: 4572 726f 7273 3b0a 0972 6574 7572 6e20 Errors;..return \n-0001ff30: 313b 2020 2020 2020 2020 2020 2020 2020 1; \n-0001ff40: 2020 2020 2020 2020 2020 2023 2045 5252 # ERR\n-0001ff50: 4f52 0a20 2020 207d 0a0a 2020 2020 7768 OR. }.. wh\n-0001ff60: 696c 6520 2824 6a6f 6254 6f44 6f20 3e20 ile ($jobToDo > \n-0001ff70: 3020 6f72 2024 7061 7246 6f72 6b54 6f44 0 or $parForkToD\n-0001ff80: 6f20 3e20 3029 0a20 2020 207b 0a23 7072 o > 0). {.#pr\n-0001ff90: 696e 7420 222d 2d2d 206a 6f62 546f 446f int \"--- jobToDo\n-0001ffa0: 3d24 6a6f 6254 6f44 6f20 2d2d 2070 6172 =$jobToDo -- par\n-0001ffb0: 466f 726b 546f 446f 3d24 7061 7246 6f72 ForkToDo=$parFor\n-0001ffc0: 6b54 6f44 6f20 2d2d 2d5c 6e22 3b0a 0923 kToDo ---\\n\";..#\n-0001ffd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0001ffe0: 2323 2323 2323 2323 2323 2323 0a09 6d79 ############..my\n-0001fff0: 2024 6f6c 6420 3d20 2470 6172 616c 466f $old = $paralFo\n-00020000: 726b 2d3e 6368 6563 6b4f 6e65 2829 3b0a rk->checkOne();.\n-00020010: 0969 6620 2824 6f6c 6429 0a09 7b0a 0920 .if ($old)..{.. \n-00020020: 2020 206d 7920 2824 6469 6765 7374 2c20 my ($digest, \n-00020030: 2466 696c 652c 2024 706f 7374 6669 7829 $file, $postfix)\n-00020040: 203d 2040 7b24 6f6c 642d 3e67 6574 2827 = @{$old->get('\n-00020050: 2d77 6861 7427 203d 3e20 2769 6e66 6f27 -what' => 'info'\n-00020060: 297d 3b0a 0920 2020 2024 7374 6174 5369 )};.. $statSi\n-00020070: 7a65 4e65 7720 2b3d 2028 7374 6174 2822 zeNew += (stat(\"\n-00020080: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-00020090: 2470 6f73 7466 6978 2229 295b 375d 207c $postfix\"))[7] |\n-000200a0: 7c20 303b 0a23 7072 696e 7420 222d 312d | 0;.#print \"-1-\n-000200b0: 206d 6435 2024 6669 6c65 203c 2470 6f73 md5 $file <$pos\n-000200c0: 7466 6978 3e5c 6e22 3b0a 097d 0a0a 0923 tfix>\\n\";..}...#\n-000200d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000200e0: 2323 2323 2323 2323 2323 2323 0a23 7072 ############.#pr\n-000200f0: 696e 7420 226a 6f62 546f 446f 203d 203c int \"jobToDo = <\n-00020100: 246a 6f62 546f 446f 3e2c 2066 7265 6545 $jobToDo>, freeE\n-00020110: 6e74 7269 6573 203d 203c 222c 2024 7061 ntries = <\", $pa\n-00020120: 7261 6c46 6f72 6b2d 3e67 6574 4e6f 4672 ralFork->getNoFr\n-00020130: 6565 456e 7472 6965 7328 292c 2022 3e5c eeEntries(), \">\\\n-00020140: 6e22 3b0a 0969 6620 2824 6a6f 6254 6f44 n\";..if ($jobToD\n-00020150: 6f20 3e20 3020 616e 6420 2470 6172 616c o > 0 and $paral\n-00020160: 466f 726b 2d3e 6765 744e 6f46 7265 6545 Fork->getNoFreeE\n-00020170: 6e74 7269 6573 2829 203e 2030 290a 097b ntries() > 0)..{\n-00020180: 0a09 2020 2020 6966 2028 2466 696c 6549 .. if ($fileI\n-00020190: 6e29 0a09 2020 2020 7b0a 0909 2320 2020 n).. {...# \n-000201a0: 246e 203d 2024 6669 6c65 496e 2d3e 7379 $n = $fileIn->sy\n-000201b0: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\\$buffer, \n-000201c0: 2462 6c6f 636b 5369 7a65 293b 0a09 096d $blockSize);...m\n-000201d0: 7920 2462 7566 546d 7020 3d20 2727 3b0a y $bufTmp = '';.\n-000201e0: 0909 2462 7566 6665 7220 3d20 2727 3b0a ..$buffer = '';.\n-000201f0: 0909 6d79 2024 6669 7273 7452 756e 203d ..my $firstRun =\n-00020200: 2031 3b0a 0909 6d79 2024 7265 6164 4253 1;...my $readBS\n-00020210: 203d 2024 626c 6f63 6b53 697a 6520 3e20 = $blockSize > \n-00020220: 2469 6e74 6572 6e61 6c50 6970 6542 7566 $internalPipeBuf\n-00020230: 5369 7a65 0a09 0920 2020 203f 2024 696e Size... ? $in\n-00020240: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz\n-00020250: 6520 3a20 2462 6c6f 636b 5369 7a65 203b e : $blockSize ;\n-00020260: 0a23 0909 7072 696e 7420 2262 6c6f 636b .#..print \"block\n-00020270: 5369 7a65 203d 2024 626c 6f63 6b53 697a Size = $blockSiz\n-00020280: 655c 6e22 3b0a 0909 7768 696c 6520 2831 e\\n\";...while (1\n-00020290: 290a 0909 7b0a 0909 2020 2020 2309 0920 )...{... #.. \n-000202a0: 2020 2070 7269 6e74 2022 7379 736f 7065 print \"sysope\n-000202b0: 6e3a 2020 7265 6164 4253 3d24 7265 6164 n: readBS=$read\n-000202c0: 4253 5c6e 223b 0a09 0920 2020 2069 6620 BS\\n\";... if \n-000202d0: 2824 6669 7273 7452 756e 290a 0909 2020 ($firstRun)... \n-000202e0: 2020 7b0a 0909 0924 6e20 3d20 2466 696c {....$n = $fil\n-000202f0: 6549 6e2d 3e73 7973 7265 6164 285c 2462 eIn->sysread(\\$b\n-00020300: 7566 6665 722c 2024 7265 6164 4253 293b uffer, $readBS);\n-00020310: 0a09 0909 2466 6972 7374 5275 6e20 3d20 ....$firstRun = \n-00020320: 303b 0a09 0920 2020 207d 0a09 0920 2020 0;... }... \n-00020330: 2065 6c73 650a 0909 2020 2020 7b0a 0909 else... {...\n-00020340: 0924 6e20 3d20 2466 696c 6549 6e2d 3e73 .$n = $fileIn->s\n-00020350: 7973 7265 6164 285c 2462 7566 546d 702c ysread(\\$bufTmp,\n-00020360: 2024 7265 6164 4253 293b 0a09 0909 2462 $readBS);....$b\n-00020370: 7566 6665 7220 2e3d 2024 6275 6654 6d70 uffer .= $bufTmp\n-00020380: 3b0a 0909 2020 2020 7d0a 0909 2020 2020 ;... }... \n-00020390: 0a09 0920 2020 206d 7920 246c 6220 3d20 ... my $lb = \n-000203a0: 6c65 6e67 7468 2824 6275 6666 6572 293b length($buffer);\n-000203b0: 0a23 0909 2020 2020 6d79 2024 6c74 203d .#.. my $lt =\n-000203c0: 206c 656e 6774 6828 2462 7566 546d 7029 length($bufTmp)\n-000203d0: 3b0a 2309 0920 2020 2070 7269 6e74 2022 ;.#.. print \"\n-000203e0: 6361 7428 2462 6c6f 636b 4e6f 2920 2d3e cat($blockNo) ->\n-000203f0: 206e 3d24 6e20 2d20 6c74 3d24 6c74 202d n=$n - lt=$lt -\n-00020400: 206c 623d 246c 625c 6e22 3b0a 0909 2020 lb=$lb\\n\";... \n-00020410: 2020 6c61 7374 2069 6620 246c 6220 3e3d last if $lb >=\n-00020420: 2024 626c 6f63 6b53 697a 6520 6f72 2024 $blockSize or $\n-00020430: 6e20 3d3d 2030 3b0a 0909 7d0a 0909 246e n == 0;...}...$n\n-00020440: 203d 206c 656e 6774 6828 2462 7566 6665 = length($buffe\n-00020450: 7229 3b0a 0920 2020 207d 0a09 2020 2020 r);.. }.. \n-00020460: 656c 7365 0a09 2020 2020 7b0a 0909 246e else.. {...$n\n-00020470: 203d 2073 7973 7265 6164 2846 494c 452c = sysread(FILE,\n-00020480: 2024 6275 6666 6572 2c20 2462 6c6f 636b $buffer, $block\n-00020490: 5369 7a65 293b 0a09 2020 2020 7d0a 0a09 Size);.. }...\n-000204a0: 2020 2020 6966 2028 246e 290a 0920 2020 if ($n).. \n-000204b0: 207b 0a09 0924 7374 6174 5369 7a65 4f72 {...$statSizeOr\n-000204c0: 6967 202b 3d20 246e 3b0a 0909 2462 6c6f ig += $n;...$blo\n-000204d0: 636b 4e6f 2b2b 3b0a 0909 6d79 2024 626c ckNo++;...my $bl\n-000204e0: 6f63 6b4e 616d 6520 3d20 7370 7269 6e74 ockName = sprint\n-000204f0: 6620 2225 3031 3064 222c 2024 626c 6f63 f \"%010d\", $bloc\n-00020500: 6b4e 6f3b 0a09 096d 7920 2462 6c6f 636b kNo;...my $block\n-00020510: 4669 6c65 203d 2022 2472 656c 5061 7468 File = \"$relPath\n-00020520: 2f24 626c 6f63 6b4e 616d 6522 3b0a 0909 /$blockName\";...\n-00020530: 6d79 2024 6469 6765 7374 203d 206d 6435 my $digest = md5\n-00020540: 5f68 6578 2824 6275 6666 6572 293b 0a09 _hex($buffer);..\n-00020550: 0924 6d64 3541 6c6c 2d3e 6164 6428 2462 .$md5All->add($b\n-00020560: 7566 6665 7229 3b0a 2370 7269 6e74 2022 uffer);.#print \"\n-00020570: 2d32 2d20 2462 6c6f 636b 4e61 6d65 202d -2- $blockName -\n-00020580: 3e20 6469 6765 7374 203d 2024 6469 6765 > digest = $dige\n-00020590: 7374 2028 246e 2062 7974 6573 295c 6e22 st ($n bytes)\\n\"\n-000205a0: 3b0a 0909 6d79 2028 2465 7869 7374 696e ;...my ($existin\n-000205b0: 6746 696c 652c 2024 636f 6d70 722c 2024 gFile, $compr, $\n-000205c0: 6e31 293b 0a09 0969 6620 2824 6e31 203d n1);...if ($n1 =\n-000205d0: 2028 2824 636f 6d70 722c 2024 6578 6973 (($compr, $exis\n-000205e0: 7469 6e67 4669 6c65 2920 3d0a 2309 0909 tingFile) =.#...\n-000205f0: 2020 2024 6f6c 6446 696c 656e 616d 652d $oldFilename-\n-00020600: 3e67 6574 426c 6f63 6b46 696c 656e 616d >getBlockFilenam\n-00020610: 6543 6f6d 7072 2824 6469 6765 7374 2929 eCompr($digest))\n-00020620: 290a 0909 0920 2020 246d 616e 6167 654e ).... $manageN\n-00020630: 6577 426c 6f63 6b2d 3e67 6574 426c 6f63 ewBlock->getBloc\n-00020640: 6b46 696c 656e 616d 6528 2464 6967 6573 kFilename($diges\n-00020650: 7429 2929 0a09 097b 2020 2020 2020 2020 t)))...{ \n-00020660: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00020670: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00020680: 2020 2320 626c 6f63 6b20 6578 6973 7473 # block exists\n-00020690: 0a09 0920 2020 2024 626c 6f63 6b46 696c ... $blockFil\n-000206a0: 6520 2e3d 2024 706f 7374 6669 7820 6966 e .= $postfix if\n-000206b0: 2024 636f 6d70 7220 6571 2027 6327 3b0a $compr eq 'c';.\n-000206c0: 0a09 0920 2020 2070 7573 6820 406e 6577 ... push @new\n-000206d0: 4d44 356c 696e 652c 2022 2464 6967 6573 MD5line, \"$diges\n-000206e0: 7420 2463 6f6d 7072 2024 626c 6f63 6b46 t $compr $blockF\n-000206f0: 696c 6522 3b0a 2370 7269 6e74 2022 2d31 ile\";.#print \"-1\n-00020700: 302d 2028 2464 6967 6573 7429 206c 696e 0- ($digest) lin\n-00020710: 6b20 2d3e 2024 6578 6973 7469 6e67 4669 k -> $existingFi\n-00020720: 6c65 202d 3e20 2474 6172 6765 7444 6972 le -> $targetDir\n-00020730: 2f24 626c 6f63 6b46 696c 655c 6e22 3b0a /$blockFile\\n\";.\n-00020740: 0909 2020 2020 6966 2028 246c 6174 654c .. if ($lateL\n-00020750: 696e 6b73 290a 0909 2020 2020 7b0a 0909 inks)... {...\n-00020760: 0969 6620 286e 6f74 2024 6d6b 6469 724c .if (not $mkdirL\n-00020770: 6174 654c 696e 6b73 4669 6c65 5061 7468 ateLinksFilePath\n-00020780: 290a 0909 097b 0a09 0909 2020 2020 263a )....{.... &:\n-00020790: 3a6d 616b 6546 696c 6550 6174 6843 6163 :makeFilePathCac\n-000207a0: 6865 2822 2474 6172 6765 7444 6972 2f24 he(\"$targetDir/$\n-000207b0: 626c 6f63 6b46 696c 6522 2c0a 0909 0909 blockFile\",.....\n-000207c0: 0909 2024 7072 4c6f 6729 3b0a 0909 0920 .. $prLog);.... \n-000207d0: 2020 2024 6d6b 6469 724c 6174 654c 696e $mkdirLateLin\n-000207e0: 6b73 4669 6c65 5061 7468 203d 2031 3b0a ksFilePath = 1;.\n-000207f0: 0909 097d 0a09 0909 7072 696e 7420 4f55 ...}....print OU\n-00020800: 5420 226c 696e 6b20 2464 6967 6573 745c T \"link $digest\\\n-00020810: 6e24 6578 6973 7469 6e67 4669 6c65 5c6e n$existingFile\\n\n-00020820: 2474 6172 6765 7444 6972 2f24 626c 6f63 $targetDir/$bloc\n-00020830: 6b46 696c 655c 6e22 3b0a 0909 092b 2b24 kFile\\n\";....++$\n-00020840: 7374 6174 4e6f 4c61 7465 4c69 6e6b 733b statNoLateLinks;\n-00020850: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e\n-00020860: 6c73 650a 0909 2020 2020 7b0a 2370 7269 lse... {.#pri\n-00020870: 6e74 2022 2d31 302e 322d 203c 2465 7869 nt \"-10.2- <$exi\n-00020880: 7374 696e 6746 696c 653e 5c6e 223b 0a09 stingFile>\\n\";..\n-00020890: 0909 263a 3a77 6169 7446 6f72 4669 6c65 ..&::waitForFile\n-000208a0: 2824 6578 6973 7469 6e67 4669 6c65 293b ($existingFile);\n-000208b0: 0a09 0909 6d79 2024 686c 203d 202d 313b ....my $hl = -1;\n-000208c0: 0a09 0909 6966 2028 246d 6178 4861 7264 ....if ($maxHard\n-000208d0: 4c69 6e6b 7320 203e 2030 290a 0909 097b Links > 0)....{\n-000208e0: 0a09 0909 2020 2020 2468 6c20 3d20 2873 .... $hl = (s\n-000208f0: 7461 7428 2465 7869 7374 696e 6746 696c tat($existingFil\n-00020900: 6529 295b 335d 3b0a 2370 7269 6e74 2022 e))[3];.#print \"\n-00020910: 2d31 302e 3235 2d20 2465 7869 7374 696e -10.25- $existin\n-00020920: 6746 696c 653a 2024 686c 2068 6172 646c gFile: $hl hardl\n-00020930: 696e 6b73 2028 246d 6178 4861 7264 4c69 inks ($maxHardLi\n-00020940: 6e6b 7329 5c6e 223b 0a09 0909 7d0a 2370 nks)\\n\";....}.#p\n-00020950: 7269 6e74 2022 2d31 302e 3236 2d20 6c69 rint \"-10.26- li\n-00020960: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile\n-00020970: 203c 2d20 2474 6172 6765 7444 6972 2f24 <- $targetDir/$\n-00020980: 626c 6f63 6b46 696c 655c 6e22 3b0a 0909 blockFile\\n\";...\n-00020990: 096d 7920 2468 6c43 6f70 7920 3d20 303b .my $hlCopy = 0;\n-000209a0: 0a09 0909 6966 2028 2468 6c20 3c20 246d ....if ($hl < $m\n-000209b0: 6178 4861 7264 4c69 6e6b 7329 2020 2320 axHardLinks) # \n-000209c0: 6265 6c6f 7720 6e75 6d62 6572 206f 6620 below number of \n-000209d0: 616c 6c6f 7765 6420 6861 7264 206c 696e allowed hard lin\n-000209e0: 6b73 0a09 0909 7b0a 0909 0920 2020 2075 ks....{.... u\n-000209f0: 6e6c 6573 7320 286c 696e 6b20 2465 7869 nless (link $exi\n-00020a00: 7374 696e 6746 696c 652c 2022 2474 6172 stingFile, \"$tar\n-00020a10: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil\n-00020a20: 6522 290a 0909 0920 2020 207b 0a09 0909 e\").... {....\n-00020a30: 0924 686c 436f 7079 203d 2031 3b20 2020 .$hlCopy = 1; \n-00020a40: 2320 7472 7920 746f 2068 6172 6420 6c69 # try to hard li\n-00020a50: 6e6b 2077 6173 206e 6f74 2073 7563 6365 nk was not succe\n-00020a60: 7373 6675 6c6c 0a09 0909 2020 2020 7d0a ssfull.... }.\n-00020a70: 0909 097d 0a09 0909 656c 7365 2020 2023 ...}....else #\n-00020a80: 2072 6561 6368 6564 206e 756d 6265 7220 reached number \n-00020a90: 6f66 2061 6c6c 6f77 6564 2068 6172 6420 of allowed hard \n-00020aa0: 6c69 6e6b 730a 0909 097b 0a09 0909 2020 links....{.... \n-00020ab0: 2020 2468 6c43 6f70 7920 3d20 313b 2020 $hlCopy = 1; \n-00020ac0: 2020 2320 646f 6e27 7420 7472 7920 746f # don't try to\n-00020ad0: 2068 6172 6420 6c69 6e6b 202d 3e20 636f hard link -> co\n-00020ae0: 7079 2066 696c 650a 0909 097d 0a23 2020 py file....}.# \n-00020af0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00020b00: 2020 2020 2020 756e 6c65 7373 2028 6c69 unless (li\n-00020b10: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile\n-00020b20: 2c20 2224 7461 7267 6574 4469 722f 2462 , \"$targetDir/$b\n-00020b30: 6c6f 636b 4669 6c65 2229 0a20 2020 2020 lockFile\"). \n-00020b40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00020b50: 2020 2069 6620 2824 686c 436f 7079 290a if ($hlCopy).\n-00020b60: 0909 097b 0a23 7072 696e 7420 222d 3130 ...{.#print \"-10\n-00020b70: 2e33 2d5c 6e22 3b0a 0909 0920 2020 2069 .3-\\n\";.... i\n-00020b80: 6620 2824 636f 6d70 7265 7373 426c 6f63 f ($compressBloc\n-00020b90: 6b20 6571 2027 6327 290a 0909 0920 2020 k eq 'c').... \n-00020ba0: 207b 0a23 7072 696e 7420 2241 5c6e 223b {.#print \"A\\n\";\n-00020bb0: 0a09 0909 0924 7061 7261 6c46 6f72 6b2d .....$paralFork-\n-00020bc0: 3e61 6464 5f6e 6f62 6c6f 636b 280a 0909 >add_noblock(...\n-00020bd0: 0909 2020 2020 272d 6675 6e63 7469 6f6e .. '-function\n-00020be0: 2720 3d3e 205c 2663 6f6d 7072 6573 734f ' => \\&compressO\n-00020bf0: 6e65 426c 6f63 6b2c 0a09 0909 0920 2020 neBlock,..... \n-00020c00: 2027 2d66 756e 6350 6172 2720 3d3e 0a09 '-funcPar' =>..\n-00020c10: 0909 0920 2020 205b 2462 7566 6665 722c ... [$buffer,\n-00020c20: 0a23 0909 0909 2020 2020 2022 2474 6172 .#.... \"$tar\n-00020c30: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil\n-00020c40: 6524 706f 7374 6669 7822 2c0a 0909 0909 e$postfix\",.....\n-00020c50: 2020 2020 2022 2474 6172 6765 7444 6972 \"$targetDir\n-00020c60: 2f24 626c 6f63 6b46 696c 6522 2c0a 0909 /$blockFile\",...\n-00020c70: 0909 2020 2020 2024 636f 6d70 7265 7373 .. $compress\n-00020c80: 436f 6d6d 616e 642c 0a09 0909 0920 2020 Command,..... \n-00020c90: 2020 2463 6f6d 7072 6573 734f 7074 696f $compressOptio\n-00020ca0: 6e73 2c0a 0909 0909 2020 2020 2024 7072 ns,..... $pr\n-00020cb0: 4c6f 672c 2024 746d 7064 6972 5d2c 0a09 Log, $tmpdir],..\n-00020cc0: 0909 0920 2020 2027 2d69 6e66 6f27 203d ... '-info' =\n-00020cd0: 3e20 5b24 6469 6765 7374 2c0a 0909 0909 > [$digest,.....\n-00020ce0: 0909 2224 7265 6c50 6174 682f 2462 6c6f ..\"$relPath/$blo\n-00020cf0: 636b 4e61 6d65 222c 0a23 0909 0909 0909 ckName\",.#......\n-00020d00: 2727 5d29 3b0a 0909 0909 0909 2470 6f73 '']);.......$pos\n-00020d10: 7466 6978 5d29 3b0a 0909 0909 2b2b 2473 tfix]);.....++$s\n-00020d20: 7461 744e 6f46 6f72 6b73 436f 6d70 7265 tatNoForksCompre\n-00020d30: 7373 3b0a 0a23 0909 0909 7075 7368 2040 ss;..#....push @\n-00020d40: 6e65 774d 4435 6c69 6e65 2c0a 2309 0909 newMD5line,.#...\n-00020d50: 0922 2464 6967 6573 7420 2463 6f6d 7072 .\"$digest $compr\n-00020d60: 6573 7342 6c6f 636b 2024 7265 6c50 6174 essBlock $relPat\n-00020d70: 682f 2462 6c6f 636b 4e61 6d65 223b 0a23 h/$blockName\";.#\n-00020d80: 0909 0909 2224 6469 6765 7374 2024 636f ....\"$digest $co\n-00020d90: 6d70 7265 7373 426c 6f63 6b20 2472 656c mpressBlock $rel\n-00020da0: 5061 7468 2f24 626c 6f63 6b4e 616d 6524 Path/$blockName$\n-00020db0: 706f 7374 6669 7822 3b0a 2370 7269 6e74 postfix\";.#print\n-00020dc0: 2022 2d31 302e 342d 5c6e 223b 0a09 0909 \"-10.4-\\n\";....\n-00020dd0: 2020 2020 7d0a 0909 0920 2020 2065 6c73 }.... els\n-00020de0: 650a 0909 0920 2020 207b 0a23 7072 696e e.... {.#prin\n-00020df0: 7420 222d 3130 2e35 2d5c 6e22 3b0a 0909 t \"-10.5-\\n\";...\n-00020e00: 0909 3a3a 636f 7079 4f6e 6542 6c6f 636b ..::copyOneBlock\n-00020e10: 2824 6275 6666 6572 2c20 2224 7461 7267 ($buffer, \"$targ\n-00020e20: 6574 4469 722f 2472 656c 5061 7468 2f24 etDir/$relPath/$\n-00020e30: 626c 6f63 6b4e 616d 6522 2c0a 0909 0909 blockName\",.....\n-00020e40: 0920 2020 2020 2020 2470 724c 6f67 293b . $prLog);\n-00020e50: 0a09 0909 0924 7374 6174 5369 7a65 4e65 .....$statSizeNe\n-00020e60: 7720 2b3d 2028 7374 6174 2822 2474 6172 w += (stat(\"$tar\n-00020e70: 6765 7444 6972 2f24 7265 6c50 6174 682f getDir/$relPath/\n-00020e80: 2462 6c6f 636b 4e61 6d65 2229 295b 375d $blockName\"))[7]\n-00020e90: 207c 7c20 303b 0a0a 0909 0920 2020 207d || 0;..... }\n-00020ea0: 0a23 7072 696e 7420 222d 3130 2e36 2d5c .#print \"-10.6-\\\n-00020eb0: 6e22 3b0a 2309 0909 2020 2020 246f 6c64 n\";.#... $old\n-00020ec0: 4669 6c65 6e61 6d65 2d3e 7365 7442 6c6f Filename->setBlo\n-00020ed0: 636b 4669 6c65 6e61 6d65 436f 6d70 7228 ckFilenameCompr(\n-00020ee0: 2464 6967 6573 742c 0a23 0909 0909 0909 $digest,.#......\n-00020ef0: 0909 2224 7461 7267 6574 4469 722f 2462 ..\"$targetDir/$b\n-00020f00: 6c6f 636b 4669 6c65 222c 0a09 0909 2020 lockFile\",.... \n-00020f10: 2020 246d 616e 6167 654e 6577 426c 6f63 $manageNewBloc\n-00020f20: 6b2d 3e73 6574 426c 6f63 6b46 696c 656e k->setBlockFilen\n-00020f30: 616d 6528 2464 6967 6573 742c 0a09 0909 ame($digest,....\n-00020f40: 0909 0909 2020 2020 2020 2462 6c6f 636b .... $block\n-00020f50: 4669 6c65 2c0a 0909 0909 0909 0920 2020 File,........ \n-00020f60: 2020 2024 636f 6d70 7265 7373 426c 6f63 $compressBloc\n-00020f70: 6b29 3b0a 0909 097d 0a23 7072 696e 7420 k);....}.#print \n-00020f80: 222d 3130 2e37 2d5c 6e22 3b0a 0909 2020 \"-10.7-\\n\";... \n-00020f90: 2020 7d0a 0909 7d0a 0909 656c 7365 2020 }...}...else \n-00020fa0: 2020 2020 2020 2320 626c 6f63 6b20 6973 # block is\n-00020fb0: 206e 6577 0a09 097b 0a23 7072 696e 7420 new...{.#print \n-00020fc0: 222d 3131 2d20 6e65 7720 626c 6f63 6b5c \"-11- new block\\\n-00020fd0: 6e22 3b0a 0909 2020 2020 6966 2028 246c n\";... if ($l\n-00020fe0: 6174 654c 696e 6b73 2061 6e64 206e 6f74 ateLinks and not\n-00020ff0: 2024 6d6b 6469 724c 6174 654c 696e 6b73 $mkdirLateLinks\n-00021000: 4669 6c65 5061 7468 290a 0909 2020 2020 FilePath)... \n-00021010: 7b0a 0909 0926 3a3a 6d61 6b65 4669 6c65 {....&::makeFile\n-00021020: 5061 7468 4361 6368 6528 2224 7461 7267 PathCache(\"$targ\n-00021030: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile\n-00021040: 222c 2024 7072 4c6f 6729 3b0a 0909 0924 \", $prLog);....$\n-00021050: 6d6b 6469 724c 6174 654c 696e 6b73 4669 mkdirLateLinksFi\n-00021060: 6c65 5061 7468 203d 2031 3b0a 0909 2020 lePath = 1;... \n-00021070: 2020 7d0a 0a09 0920 2020 2069 6620 2824 }.... if ($\n-00021080: 636f 6d70 7243 6865 636b 290a 0909 2020 comprCheck)... \n-00021090: 2020 7b0a 0909 096d 7920 2463 6f6d 7072 {....my $compr\n-000210a0: 4368 6563 6b42 7566 6665 723b 0a09 0909 CheckBuffer;....\n-000210b0: 3a3a 677a 6970 205c 2462 7566 6665 7220 ::gzip \\$buffer \n-000210c0: 3d3e 205c 2463 6f6d 7072 4368 6563 6b42 => \\$comprCheckB\n-000210d0: 7566 6665 722c 204c 6576 656c 203d 3e20 uffer, Level => \n-000210e0: 313b 0a09 0909 6966 2028 6c65 6e67 7468 1;....if (length\n-000210f0: 2824 636f 6d70 7243 6865 636b 4275 6666 ($comprCheckBuff\n-00021100: 6572 292f 6c65 6e67 7468 2824 6275 6666 er)/length($buff\n-00021110: 6572 2920 3c20 302e 3935 290a 0909 097b er) < 0.95)....{\n-00021120: 0a23 7072 696e 7420 222d 3131 2e35 2d20 .#print \"-11.5- \n-00021130: 636f 6d70 7265 7373 5f63 6865 636b 3a20 compress_check: \n-00021140: 636f 6d70 7265 7373 5c6e 223b 0a09 0909 compress\\n\";....\n-00021150: 2020 2020 2463 6f6d 7072 6573 7342 6c6f $compressBlo\n-00021160: 636b 203d 2027 6327 3b0a 0909 0920 2020 ck = 'c';.... \n-00021170: 202b 2b24 6e6f 426c 6f63 6b43 6f6d 7072 ++$noBlockCompr\n-00021180: 4368 6563 6b43 6f6d 7072 3b0a 0909 097d CheckCompr;....}\n-00021190: 0a09 0909 656c 7365 0a09 0909 7b0a 2370 ....else....{.#p\n-000211a0: 7269 6e74 2022 2d31 312e 352d 2063 6f6d rint \"-11.5- com\n-000211b0: 7072 6573 735f 6368 6563 6b3a 2063 6f70 press_check: cop\n-000211c0: 795c 6e22 3b0a 0909 0920 2020 2024 636f y\\n\";.... $co\n-000211d0: 6d70 7265 7373 426c 6f63 6b20 3d20 2775 mpressBlock = 'u\n-000211e0: 273b 0a09 0909 2020 2020 2b2b 246e 6f42 ';.... ++$noB\n-000211f0: 6c6f 636b 436f 6d70 7243 6865 636b 4370 lockComprCheckCp\n-00021200: 3b0a 0909 097d 0a09 0920 2020 207d 0a0a ;....}... }..\n-00021210: 0909 2020 2020 6d79 2024 7066 203d 2024 .. my $pf = $\n-00021220: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq\n-00021230: 2027 6327 203f 2024 706f 7374 6669 7820 'c' ? $postfix \n-00021240: 3a20 2727 3b0a 2309 0920 2020 2024 6f6c : '';.#.. $ol\n-00021250: 6446 696c 656e 616d 652d 3e73 6574 426c dFilename->setBl\n-00021260: 6f63 6b46 696c 656e 616d 6543 6f6d 7072 ockFilenameCompr\n-00021270: 2824 6469 6765 7374 2c0a 2309 0909 0909 ($digest,.#.....\n-00021280: 0909 2224 7461 7267 6574 4469 722f 2462 ..\"$targetDir/$b\n-00021290: 6c6f 636b 4669 6c65 2470 6622 2c0a 0909 lockFile$pf\",...\n-000212a0: 2020 2020 246d 616e 6167 654e 6577 426c $manageNewBl\n-000212b0: 6f63 6b2d 3e73 6574 426c 6f63 6b46 696c ock->setBlockFil\n-000212c0: 656e 616d 6528 2464 6967 6573 742c 0a09 ename($digest,..\n-000212d0: 0909 0909 0920 2020 2020 2022 2462 6c6f ..... \"$blo\n-000212e0: 636b 4669 6c65 2470 6622 2c0a 0909 0909 ckFile$pf\",.....\n-000212f0: 0909 2020 2020 2020 2463 6f6d 7072 6573 .. $compres\n-00021300: 7342 6c6f 636b 293b 0a09 0920 2020 2069 sBlock);... i\n-00021310: 6620 2824 6c61 7465 436f 6d70 7265 7373 f ($lateCompress\n-00021320: 2061 6e64 2028 2463 6f6d 7072 6573 7342 and ($compressB\n-00021330: 6c6f 636b 2065 7120 2763 2729 290a 0909 lock eq 'c'))...\n-00021340: 2020 2020 7b0a 2370 7269 6e74 2022 2d31 {.#print \"-1\n-00021350: 322d 206c 6174 6520 636f 6d70 7265 7373 2- late compress\n-00021360: 5c6e 223b 0a09 0909 6966 2028 2464 6972 \\n\";....if ($dir\n-00021370: 6563 7429 0a09 0909 7b0a 0909 0920 2020 ect)....{.... \n-00021380: 203a 3a63 6f70 794f 6e65 426c 6f63 6b28 ::copyOneBlock(\n-00021390: 2462 7566 6665 722c 2022 2474 6172 6765 $buffer, \"$targe\n-000213a0: 7444 6972 2f24 7265 6c50 6174 682f 2462 tDir/$relPath/$b\n-000213b0: 6c6f 636b 4e61 6d65 222c 0a09 0909 0909 lockName\",......\n-000213c0: 2020 2024 7072 4c6f 6729 3b0a 0909 0920 $prLog);.... \n-000213d0: 2020 2024 7374 6174 5369 7a65 4e65 7720 $statSizeNew \n-000213e0: 2b3d 2028 7374 6174 2822 2474 6172 6765 += (stat(\"$targe\n-000213f0: 7444 6972 2f24 7265 6c50 6174 682f 2462 tDir/$relPath/$b\n-00021400: 6c6f 636b 4e61 6d65 2229 295b 375d 207c lockName\"))[7] |\n-00021410: 7c20 303b 0a09 0909 7d0a 0909 0965 6c73 | 0;....}....els\n-00021420: 650a 0909 097b 0a23 7072 696e 7420 2242 e....{.#print \"B\n-00021430: 5c6e 223b 0a09 0909 2020 2020 2470 6172 \\n\";.... $par\n-00021440: 616c 466f 726b 2d3e 6164 645f 6e6f 626c alFork->add_nobl\n-00021450: 6f63 6b28 272d 6675 6e63 7469 6f6e 2720 ock('-function' \n-00021460: 3d3e 205c 2663 6f70 794f 6e65 426c 6f63 => \\©OneBloc\n-00021470: 6b2c 0a09 0909 0909 0920 2020 2027 2d66 k,....... '-f\n-00021480: 756e 6350 6172 2720 3d3e 205b 2462 7566 uncPar' => [$buf\n-00021490: 6665 722c 0a09 0909 0909 0920 2020 2020 fer,....... \n-000214a0: 2224 7461 7267 6574 4469 722f 2472 656c \"$targetDir/$rel\n-000214b0: 5061 7468 2f24 626c 6f63 6b4e 616d 6522 Path/$blockName\"\n-000214c0: 2c0a 0909 0909 0909 0909 2020 2024 7072 ,......... $pr\n-000214d0: 4c6f 675d 2c0a 0909 0909 0909 2020 2020 Log],....... \n-000214e0: 272d 696e 666f 2720 3d3e 205b 2464 6967 '-info' => [$dig\n-000214f0: 6573 742c 0a09 0909 0909 0909 2022 2472 est,........ \"$r\n-00021500: 656c 5061 7468 2f24 626c 6f63 6b4e 616d elPath/$blockNam\n-00021510: 6522 2c0a 0909 0909 0909 0909 2727 5d29 e\",.........''])\n-00021520: 3b0a 0909 0920 2020 202b 2b24 7374 6174 ;.... ++$stat\n-00021530: 4e6f 466f 726b 7343 503b 0a09 0909 7d0a NoForksCP;....}.\n-00021540: 0909 0970 7269 6e74 204f 5554 2022 636f ...print OUT \"co\n-00021550: 6d70 7265 7373 2024 6469 6765 7374 5c6e mpress $digest\\n\n-00021560: 2220 2e0a 0909 0920 2020 2022 2474 6172 \" ..... \"$tar\n-00021570: 6765 7444 6972 2f24 7265 6c50 6174 682f getDir/$relPath/\n-00021580: 2462 6c6f 636b 4e61 6d65 5c6e 223b 0a09 $blockName\\n\";..\n-00021590: 0909 7075 7368 2040 6e65 774d 4435 6c69 ..push @newMD5li\n-000215a0: 6e65 2c0a 0909 0920 2020 2022 2464 6967 ne,.... \"$dig\n-000215b0: 6573 7420 2463 6f6d 7072 6573 7342 6c6f est $compressBlo\n-000215c0: 636b 2024 7265 6c50 6174 682f 2462 6c6f ck $relPath/$blo\n-000215d0: 636b 4e61 6d65 2470 6622 3b0a 0909 2020 ckName$pf\";... \n-000215e0: 2020 7d0a 0909 2020 2020 656c 7365 0a09 }... else..\n-000215f0: 0920 2020 207b 0a09 0909 6966 2028 2463 . {....if ($c\n-00021600: 6f6d 7072 6573 7342 6c6f 636b 2065 7120 ompressBlock eq \n-00021610: 2763 2729 0a09 0909 7b0a 2370 7269 6e74 'c')....{.#print\n-00021620: 2022 2d31 332d 2063 6f6d 7072 6573 7342 \"-13- compressB\n-00021630: 6c6f 636b 203d 2063 2c20 706f 7374 6669 lock = c, postfi\n-00021640: 7820 3d20 2470 6f73 7466 6978 5c6e 223b x = $postfix\\n\";\n-00021650: 0a09 0909 2020 2020 6966 2028 2464 6972 .... if ($dir\n-00021660: 6563 7420 616e 6420 2463 6f6d 7072 6573 ect and $compres\n-00021670: 7343 6f6d 6d61 6e64 2065 7120 2762 7a69 sCommand eq 'bzi\n-00021680: 7032 2729 0a09 0909 2020 2020 7b0a 0909 p2').... {...\n-00021690: 0909 6d79 2024 627a 203d 206e 6577 2049 ..my $bz = new I\n-000216a0: 4f3a 3a43 6f6d 7072 6573 733a 3a42 7a69 O::Compress::Bzi\n-000216b0: 7032 280a 0909 0909 2020 2020 2224 7461 p2(..... \"$ta\n-000216c0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi\n-000216d0: 6c65 2470 6f73 7466 6978 222c 0a09 0909 le$postfix\",....\n-000216e0: 0920 2020 2042 6c6f 636b 5369 7a65 3130 . BlockSize10\n-000216f0: 304b 203d 3e20 3929 3b0a 0909 0909 756e 0K => 9);.....un\n-00021700: 6c65 7373 2028 2462 7a2d 3e73 7973 7772 less ($bz->syswr\n-00021710: 6974 6528 2462 7566 6665 7229 290a 0909 ite($buffer))...\n-00021720: 0909 7b0a 0909 0909 2020 2020 2470 724c ..{..... $prL\n-00021730: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00021740: 2720 3d3e 2027 4527 2c0a 0909 0909 0909 ' => 'E',.......\n-00021750: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n-00021760: 205b 2277 7269 7469 6e67 2063 6f6d 7072 [\"writing compr\n-00021770: 6573 7365 6420 6461 7461 2066 6169 6c65 essed data faile\n-00021780: 6420 2220 2e0a 0909 0920 2020 223c 2474 d \" ..... \"<$t\n-00021790: 6172 6765 7444 6972 2f24 626c 6f63 6b46 argetDir/$blockF\n-000217a0: 696c 6524 706f 7374 6669 783e 225d 293b ile$postfix>\"]);\n-000217b0: 0a09 0909 097d 0a09 0909 0924 627a 2d3e .....}.....$bz->\n-000217c0: 666c 7573 6828 293b 0a09 0909 0924 627a flush();.....$bz\n-000217d0: 2d3e 656f 6628 293b 0a0a 0909 0909 2473 ->eof();......$s\n-000217e0: 7461 7453 697a 654e 6577 202b 3d0a 0909 tatSizeNew +=...\n-000217f0: 0909 2020 2020 2873 7461 7428 2224 7461 .. (stat(\"$ta\n-00021800: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi\n-00021810: 6c65 2470 6f73 7466 6978 2229 295b 375d le$postfix\"))[7]\n-00021820: 207c 7c20 303b 0a09 0909 2020 2020 7d0a || 0;.... }.\n-00021830: 0909 0920 2020 2065 6c73 650a 0909 0920 ... else.... \n-00021840: 2020 207b 0a23 7072 696e 7420 2243 5c6e {.#print \"C\\n\n-00021850: 223b 0a09 0909 0924 7061 7261 6c46 6f72 \";.....$paralFor\n-00021860: 6b2d 3e61 6464 5f6e 6f62 6c6f 636b 280a k->add_noblock(.\n-00021870: 0909 0909 2020 2020 272d 6675 6e63 7469 .... '-functi\n-00021880: 6f6e 2720 3d3e 205c 2663 6f6d 7072 6573 on' => \\&compres\n-00021890: 734f 6e65 426c 6f63 6b2c 0a09 0909 0920 sOneBlock,..... \n-000218a0: 2020 2027 2d66 756e 6350 6172 2720 3d3e '-funcPar' =>\n-000218b0: 0a09 0909 0920 2020 205b 2462 7566 6665 ..... [$buffe\n-000218c0: 722c 0a09 0909 0920 2020 2020 2224 7461 r,..... \"$ta\n-000218d0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi\n-000218e0: 6c65 2470 6f73 7466 6978 222c 0a09 0909 le$postfix\",....\n-000218f0: 0920 2020 2020 2463 6f6d 7072 6573 7343 . $compressC\n-00021900: 6f6d 6d61 6e64 2c0a 0909 0909 2020 2020 ommand,..... \n-00021910: 2024 636f 6d70 7265 7373 4f70 7469 6f6e $compressOption\n-00021920: 732c 0a09 0909 0920 2020 2020 2470 724c s,..... $prL\n-00021930: 6f67 2c20 2474 6d70 6469 725d 2c0a 0909 og, $tmpdir],...\n-00021940: 0909 2020 2020 272d 696e 666f 2720 3d3e .. '-info' =>\n-00021950: 205b 2464 6967 6573 742c 0a09 0909 0909 [$digest,......\n-00021960: 0922 2472 656c 5061 7468 2f24 626c 6f63 .\"$relPath/$bloc\n-00021970: 6b4e 616d 6522 2c0a 0909 0909 0909 2470 kName\",.......$p\n-00021980: 6f73 7466 6978 5d29 3b0a 0909 0909 2b2b ostfix]);.....++\n-00021990: 2473 7461 744e 6f46 6f72 6b73 436f 6d70 $statNoForksComp\n-000219a0: 7265 7373 3b0a 0909 0920 2020 207d 0a09 ress;.... }..\n-000219b0: 0909 2020 2020 7075 7368 2040 6e65 774d .. push @newM\n-000219c0: 4435 6c69 6e65 2c0a 0909 0909 2224 6469 D5line,.....\"$di\n-000219d0: 6765 7374 2024 636f 6d70 7265 7373 426c gest $compressBl\n-000219e0: 6f63 6b20 2472 656c 5061 7468 2f24 626c ock $relPath/$bl\n-000219f0: 6f63 6b4e 616d 6524 706f 7374 6669 7822 ockName$postfix\"\n-00021a00: 3b0a 0909 097d 0a09 0909 656c 7365 0a09 ;....}....else..\n-00021a10: 0909 7b0a 2370 7269 6e74 2022 2d31 342d ..{.#print \"-14-\n-00021a20: 2063 6f6d 7072 6573 7342 6c6f 636b 203d compressBlock =\n-00021a30: 2075 2020 2f2f 2f20 2020 6469 7265 6374 u /// direct\n-00021a40: 203d 2024 6469 7265 6374 5c6e 223b 0a09 = $direct\\n\";..\n-00021a50: 0909 2020 2020 6966 2028 2464 6972 6563 .. if ($direc\n-00021a60: 7429 0a09 0909 2020 2020 7b0a 2370 7269 t).... {.#pri\n-00021a70: 6e74 2022 2d31 342e 312d 2066 696c 653d nt \"-14.1- file=\n-00021a80: 3c24 7461 7267 6574 4469 722f 2462 6c6f <$targetDir/$blo\n-00021a90: 636b 4669 6c65 3e5c 6e22 3b0a 0909 0909 ckFile>\\n\";.....\n-00021aa0: 3a3a 636f 7079 4f6e 6542 6c6f 636b 2824 ::copyOneBlock($\n-00021ab0: 6275 6666 6572 2c20 2224 7461 7267 6574 buffer, \"$target\n-00021ac0: 4469 722f 2462 6c6f 636b 4669 6c65 222c Dir/$blockFile\",\n-00021ad0: 0a09 0909 0909 2020 2020 2020 2024 7072 ...... $pr\n-00021ae0: 4c6f 6729 3b0a 0909 0909 2473 7461 7453 Log);.....$statS\n-00021af0: 697a 654e 6577 202b 3d20 2873 7461 7428 izeNew += (stat(\n-00021b00: 2224 7461 7267 6574 4469 722f 2462 6c6f \"$targetDir/$blo\n-00021b10: 636b 4669 6c65 2229 295b 375d 207c 7c20 ckFile\"))[7] || \n-00021b20: 303b 0a09 0909 2020 2020 7d0a 0909 0920 0;.... }.... \n-00021b30: 2020 2065 6c73 650a 0909 0920 2020 207b else.... {\n-00021b40: 0a23 7072 696e 7420 2244 5c6e 223b 0a09 .#print \"D\\n\";..\n-00021b50: 0909 0924 7061 7261 6c46 6f72 6b2d 3e61 ...$paralFork->a\n-00021b60: 6464 5f6e 6f62 6c6f 636b 2827 2d66 756e dd_noblock('-fun\n-00021b70: 6374 696f 6e27 203d 3e20 5c26 636f 7079 ction' => \\©\n-00021b80: 4f6e 6542 6c6f 636b 2c0a 0909 0909 0909 OneBlock,.......\n-00021b90: 0927 2d66 756e 6350 6172 2720 3d3e 0a09 .'-funcPar' =>..\n-00021ba0: 0909 0909 0909 5b24 6275 6666 6572 2c0a ......[$buffer,.\n-00021bb0: 0909 0909 0909 0920 2224 7461 7267 6574 ....... \"$target\n-00021bc0: 4469 722f 2462 6c6f 636b 4669 6c65 222c Dir/$blockFile\",\n-00021bd0: 0a09 0909 0909 0909 2024 7072 4c6f 675d ........ $prLog]\n-00021be0: 2c0a 0909 0909 0909 0927 2d69 6e66 6f27 ,........'-info'\n-00021bf0: 203d 3e20 5b24 6469 6765 7374 2c0a 0909 => [$digest,...\n-00021c00: 0909 0909 0920 2020 2020 2020 2224 7265 ..... \"$re\n-00021c10: 6c50 6174 682f 2462 6c6f 636b 4e61 6d65 lPath/$blockName\n-00021c20: 222c 0a09 0909 0909 0909 0920 2020 2027 \",......... '\n-00021c30: 275d 293b 0a09 0909 2020 2020 2b2b 2473 ']);.... ++$s\n-00021c40: 7461 744e 6f46 6f72 6b73 4350 3b0a 0909 tatNoForksCP;...\n-00021c50: 0920 2020 207d 0a09 0909 2020 2020 7075 . }.... pu\n-00021c60: 7368 2040 6e65 774d 4435 6c69 6e65 2c0a sh @newMD5line,.\n-00021c70: 0909 0909 2224 6469 6765 7374 2024 636f ....\"$digest $co\n-00021c80: 6d70 7265 7373 426c 6f63 6b20 2472 656c mpressBlock $rel\n-00021c90: 5061 7468 2f24 626c 6f63 6b4e 616d 6522 Path/$blockName\"\n-00021ca0: 3b0a 0909 097d 0a09 0920 2020 207d 0a23 ;....}... }.#\n-00021cb0: 7072 696e 7420 222d 3135 2d20 6d64 3520 print \"-15- md5 \n-00021cc0: 2472 656c 5061 7468 2f24 626c 6f63 6b4e $relPath/$blockN\n-00021cd0: 616d 655c 6e22 3b0a 0909 7d0a 0909 2474 ame\\n\";...}...$t\n-00021ce0: 696e 7953 6368 6564 2d3e 7265 7365 7428 inySched->reset(\n-00021cf0: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e\n-00021d00: 6c73 650a 0920 2020 207b 0a09 0924 6a6f lse.. {...$jo\n-00021d10: 6254 6f44 6f20 3d20 303b 0a09 2020 2020 bToDo = 0;.. \n-00021d20: 7d0a 097d 0a0a 0923 2323 2323 2323 2323 }..}...#########\n-00021d30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00021d40: 2323 2323 0a09 2474 696e 7953 6368 6564 ####..$tinySched\n-00021d50: 2d3e 7761 6974 2829 3b0a 0a09 2470 6172 ->wait();...$par\n-00021d60: 466f 726b 546f 446f 203d 2024 7061 7261 ForkToDo = $para\n-00021d70: 6c46 6f72 6b2d 3e67 6574 4e6f 5573 6564 lFork->getNoUsed\n-00021d80: 456e 7472 6965 7328 293b 0a20 2020 207d Entries();. }\n-00021d90: 0a0a 2020 2020 6966 2028 2466 696c 6549 .. if ($fileI\n-00021da0: 6e29 0a20 2020 207b 0a09 6d79 2024 6f75 n). {..my $ou\n-00021db0: 7420 3d20 2466 696c 6549 6e2d 3e67 6574 t = $fileIn->get\n-00021dc0: 5354 4445 5252 2829 3b0a 0969 6620 2840 STDERR();..if (@\n-00021dd0: 246f 7574 290a 097b 0a09 2020 2020 2470 $out)..{.. $p\n-00021de0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00021df0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-00021e00: 2027 2d73 7472 2720 3d3e 205b 2272 6561 '-str' => [\"rea\n-00021e10: 6469 6e67 2066 726f 6d20 2473 6f75 7263 ding from $sourc\n-00021e20: 6544 6972 2067 656e 6572 6174 6564 222c eDir generated\",\n-00021e30: 0a09 0909 0920 2020 2020 4024 6f75 745d ..... @$out]\n-00021e40: 293b 0a09 2020 2020 2b2b 246e 6f45 7272 );.. ++$noErr\n-00021e50: 6f72 733b 0a09 2020 2020 7265 7475 726e ors;.. return\n-00021e60: 2030 3b0a 097d 0a09 2466 696c 6549 6e2d 0;..}..$fileIn-\n-00021e70: 3e63 6c6f 7365 2829 3b0a 0924 6669 6c65 >close();..$file\n-00021e80: 496e 203d 2075 6e64 6566 3b0a 2020 2020 In = undef;. \n-00021e90: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. {\n-00021ea0: 0a09 636c 6f73 6528 4649 4c45 293b 0a20 ..close(FILE);. \n-00021eb0: 2020 207d 0a0a 0a20 2020 2069 6620 2824 }... if ($\n-00021ec0: 6374 696d 6520 213d 2030 2920 2020 2023 ctime != 0) #\n-00021ed0: 206e 6f74 2061 2064 6576 6963 650a 2020 not a device. \n-00021ee0: 2020 7b0a 0975 6e6c 6573 7320 282d 6520 {..unless (-e \n-00021ef0: 2473 6f75 7263 6544 6972 290a 097b 0a09 $sourceDir)..{..\n-00021f00: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00021f10: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00021f20: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-00021f30: 205b 223c 2473 6f75 7263 6544 6972 3e20 [\"<$sourceDir> \n-00021f40: 6465 6c65 7465 6420 6475 7269 6e67 2062 deleted during b\n-00021f50: 6163 6b75 7022 5d29 0a09 0975 6e6c 6573 ackup\"])...unles\n-00021f60: 7320 6578 6973 7473 2024 7375 7070 7265 s exists $suppre\n-00021f70: 7373 5761 726e 696e 677b 2766 696c 6543 ssWarning{'fileC\n-00021f80: 6861 6e67 6527 7d3b 0a09 2020 2020 2b2b hange'};.. ++\n-00021f90: 246e 6f45 7272 6f72 733b 0a09 7d0a 0965 $noErrors;..}..e\n-00021fa0: 6c73 650a 097b 0a09 2020 2020 6d79 2028 lse..{.. my (\n-00021fb0: 2461 6374 4d74 696d 652c 2024 6163 7443 $actMtime, $actC\n-00021fc0: 7469 6d65 2920 3d20 2873 7461 7428 2473 time) = (stat($s\n-00021fd0: 6f75 7263 6544 6972 2929 5b39 2c31 305d ourceDir))[9,10]\n-00021fe0: 3b0a 0920 2020 2069 6620 2824 6163 744d ;.. if ($actM\n-00021ff0: 7469 6d65 2021 3d20 246d 7469 6d65 206f time != $mtime o\n-00022000: 7220 2461 6374 4374 696d 6520 213d 2024 r $actCtime != $\n-00022010: 6374 696d 6529 0a09 2020 2020 7b0a 0909 ctime).. {...\n-00022020: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00022030: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n-00022040: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00022050: 205b 223c 2473 6f75 7263 6544 6972 3e20 [\"<$sourceDir> \n-00022060: 6368 616e 6765 6420 6475 7269 6e67 2062 changed during b\n-00022070: 6163 6b75 7022 5d29 0a09 0920 2020 2075 ackup\"])... u\n-00022080: 6e6c 6573 7320 6578 6973 7473 2024 7375 nless exists $su\n-00022090: 7070 7265 7373 5761 726e 696e 677b 2766 ppressWarning{'f\n-000220a0: 696c 6543 6861 6e67 6527 7d3b 0a09 092b ileChange'};...+\n-000220b0: 2b24 6e6f 5761 726e 696e 6773 3b0a 0920 +$noWarnings;.. \n-000220c0: 2020 207d 0a09 7d0a 2020 2020 7d0a 0a23 }..}. }..#\n-000220d0: 2020 2020 6966 2028 6e6f 7420 246c 6174 if (not $lat\n-000220e0: 654c 696e 6b73 206f 7220 246d 6b64 6972 eLinks or $mkdir\n-000220f0: 4c61 7465 4c69 6e6b 7346 696c 6550 6174 LateLinksFilePat\n-00022100: 6829 0a20 2020 207b 0a09 6d79 2024 6373 h). {..my $cs\n-00022110: 6620 3d20 2224 7461 7267 6574 4469 722f f = \"$targetDir/\n-00022120: 2472 656c 5061 7468 2f24 626c 6f63 6b43 $relPath/$blockC\n-00022130: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2\"\n-00022140: 3b0a 096d 7920 2463 7366 5772 6974 6520 ;..my $csfWrite \n-00022150: 3d20 7069 7065 546f 466f 726b 2d3e 6e65 = pipeToFork->ne\n-00022160: 7728 272d 6578 6563 2720 3d3e 2027 627a w('-exec' => 'bz\n-00022170: 6970 3227 2c0a 0909 0909 2020 2020 2020 ip2',..... \n-00022180: 2027 2d73 7464 6f75 7427 203d 3e20 2463 '-stdout' => $c\n-00022190: 7366 2c0a 0909 0909 2020 2020 2020 2027 sf,..... '\n-000221a0: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2022 -outRandom' => \"\n-000221b0: 2474 6d70 6469 722f 7374 6275 5069 7065 $tmpdir/stbuPipe\n-000221c0: 546f 3130 2d22 2c0a 0909 0909 2020 2020 To10-\",..... \n-000221d0: 2020 2027 2d64 656c 5374 646f 7574 2720 '-delStdout' \n-000221e0: 3d3e 2027 6e6f 272c 0a09 0909 0920 2020 => 'no',..... \n-000221f0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n-00022200: 2470 724c 6f67 293b 0a09 2b2b 2473 7461 $prLog);..++$sta\n-00022210: 744e 6f46 6f72 6b73 436f 6d70 7265 7373 tNoForksCompress\n-00022220: 3b0a 0a09 6d79 2028 246c 696e 6529 3b0a ;...my ($line);.\n-00022230: 0966 6f72 6561 6368 2024 6c69 6e65 2028 .foreach $line (\n-00022240: 406e 6577 4d44 356c 696e 6529 0a09 7b0a @newMD5line)..{.\n-00022250: 0920 2020 2023 2077 7269 7465 2074 6f20 . # write to \n-00022260: 7465 6d70 6f72 6172 7920 6669 6c65 0a09 temporary file..\n-00022270: 2020 2020 7072 696e 7420 4f55 5420 2224 print OUT \"$\n-00022280: 6c69 6e65 5c6e 223b 0a09 2020 2020 2377 line\\n\";.. #w\n-00022290: 7269 7465 2074 6f20 626c 6f63 6b20 6c6f rite to block lo\n-000222a0: 6361 6c20 2e6d 6435 4368 6563 6b53 756d cal .md5CheckSum\n-000222b0: 0a09 2020 2020 2463 7366 5772 6974 652d .. $csfWrite-\n-000222c0: 3e70 7269 6e74 2822 246c 696e 655c 6e22 >print(\"$line\\n\"\n-000222d0: 293b 0a09 7d0a 0a09 2463 7366 5772 6974 );..}...$csfWrit\n-000222e0: 652d 3e77 6169 7428 293b 0a09 6d79 2024 e->wait();..my $\n-000222f0: 6f75 7420 3d20 2463 7366 5772 6974 652d out = $csfWrite-\n-00022300: 3e67 6574 5354 4445 5252 2829 3b0a 0969 >getSTDERR();..i\n-00022310: 6620 2840 246f 7574 290a 097b 0a09 2020 f (@$out)..{.. \n-00022320: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00022330: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00022340: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00022350: 2262 7a69 7032 2072 6570 6f72 7473 2065 \"bzip2 reports e\n-00022360: 7272 6f72 733a 222c 0a09 0909 0920 2020 rrors:\",..... \n-00022370: 2020 4024 6f75 745d 293b 0a09 2020 2020 @$out]);.. \n-00022380: 7265 7475 726e 2030 3b0a 097d 0a09 2463 return 0;..}..$c\n-00022390: 7366 5772 6974 652d 3e63 6c6f 7365 2829 sfWrite->close()\n-000223a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 2027 ;. }.. # '\n-000223b0: 6d64 3520 6f66 2077 686f 6c65 2066 696c md5 of whole fil\n-000223c0: 6527 2c20 2773 697a 6520 6f66 206f 7269 e', 'size of ori\n-000223d0: 6727 2c20 2773 697a 6520 6f66 2062 6c6f g', 'size of blo\n-000223e0: 636b 7327 0a20 2020 206d 7920 246d 6435 cks'. my $md5\n-000223f0: 203d 2024 6d64 3541 6c6c 2d3e 6865 7864 = $md5All->hexd\n-00022400: 6967 6573 7428 293b 0a20 2020 2070 7269 igest();. pri\n-00022410: 6e74 204f 5554 2022 616c 6c4d 4435 2024 nt OUT \"allMD5 $\n-00022420: 6d64 3520 2473 7461 7453 697a 654f 7269 md5 $statSizeOri\n-00022430: 6720 2473 7461 7453 697a 654e 6577 2022 g $statSizeNew \"\n-00022440: 202e 0a09 2224 7374 6174 4e6f 466f 726b ...\"$statNoFork\n-00022450: 7343 5020 2473 7461 744e 6f46 6f72 6b73 sCP $statNoForks\n-00022460: 436f 6d70 7265 7373 2024 626c 6f63 6b4e Compress $blockN\n-00022470: 6f20 2473 7461 744e 6f4c 6174 654c 696e o $statNoLateLin\n-00022480: 6b73 2022 202e 0a09 2224 6e6f 5761 726e ks \" ...\"$noWarn\n-00022490: 696e 6773 2024 6e6f 4572 726f 7273 2024 ings $noErrors $\n-000224a0: 6e6f 426c 6f63 6b43 6f6d 7072 4368 6563 noBlockComprChec\n-000224b0: 6b43 6f6d 7072 2024 6e6f 426c 6f63 6b43 kCompr $noBlockC\n-000224c0: 6f6d 7072 4368 6563 6b43 705c 6e22 3b0a omprCheckCp\\n\";.\n-000224d0: 2020 2020 636c 6f73 6528 4f55 5429 3b0a close(OUT);.\n-000224e0: 0a20 2020 2072 6574 7572 6e20 303b 0a7d . return 0;.}\n-000224f0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-00022500: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00022510: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00022520: 2323 2323 230a 2320 7363 6872 6569 6274 #####.# schreibt\n-00022530: 206e 6575 6520 4d65 7461 2d49 6e66 6f72 neue Meta-Infor\n-00022540: 6d61 7469 6f6e 656e 2069 6e20 6462 6d73 mationen in dbms\n-00022550: 202b 202e 6d64 3543 6865 636b 5375 6d0a + .md5CheckSum.\n-00022560: 7061 636b 6167 6520 616b 7446 696c 656e package aktFilen\n-00022570: 616d 653b 0a0a 7375 6220 6e65 770a 7b0a ame;..sub new.{.\n-00022580: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = \n-00022590: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s\n-000225a0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m\n-000225b0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = ('\n-000225c0: 2d69 6e66 6f46 696c 6527 2020 2020 2020 -infoFile' \n-000225d0: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-000225e0: 2020 272d 626c 6f63 6b43 6865 636b 5375 '-blockCheckSu\n-000225f0: 6d46 696c 6527 203d 3e20 756e 6465 662c mFile' => undef,\n-00022600: 0a09 0920 2020 2027 2d63 6f6d 7072 6573 ... '-compres\n-00022610: 734d 4435 4669 6c65 2720 3d3e 2075 6e64 sMD5File' => und\n-00022620: 6566 2c0a 0909 2020 2020 272d 736f 7572 ef,... '-sour\n-00022630: 6365 4469 7227 2020 2020 2020 203d 3e20 ceDir' => \n-00022640: 756e 6465 662c 0a09 0920 2020 2027 2d66 undef,... '-f\n-00022650: 6f6c 6c6f 774c 696e 6b73 2720 2020 2020 ollowLinks' \n-00022660: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-00022670: 272d 636f 6d70 7265 7373 2720 2020 2020 '-compress' \n-00022680: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-00022690: 2020 2027 2d75 6e63 6f6d 7072 6573 7327 '-uncompress'\n-000226a0: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,.\n-000226b0: 0909 2020 2020 272d 706f 7374 6669 7827 .. '-postfix'\n-000226c0: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde\n-000226d0: 662c 0a09 0920 2020 2027 2d65 7863 6570 f,... '-excep\n-000226e0: 7444 6972 7327 2020 2020 2020 3d3e 205b tDirs' => [\n-000226f0: 5d2c 0a09 0920 2020 2027 2d69 6e63 6c75 ],... '-inclu\n-00022700: 6465 4469 7273 2720 2020 2020 3d3e 205b deDirs' => [\n-00022710: 5d2c 0a09 0920 2020 2027 2d63 6f6d 7072 ],... '-compr\n-00022720: 5275 6c65 2720 2020 2020 2020 3d3e 205b Rule' => [\n-00022730: 5d2c 0a09 0920 2020 2027 2d65 7863 6570 ],... '-excep\n-00022740: 7452 756c 6527 2020 2020 2020 3d3e 205b tRule' => [\n-00022750: 5d2c 0a09 0920 2020 2027 2d69 6e63 6c75 ],... '-inclu\n-00022760: 6465 5275 6c65 2720 2020 2020 3d3e 205b deRule' => [\n-00022770: 5d2c 0a09 0920 2020 2027 2d77 7269 7465 ],... '-write\n-00022780: 4578 636c 7564 654c 6f67 2720 3d3e 2075 ExcludeLog' => u\n-00022790: 6e64 6566 2c0a 0909 2020 2020 272d 6578 ndef,... '-ex\n-000227a0: 6365 7074 5479 7065 7327 2020 2020 203d ceptTypes' =\n-000227b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n-000227c0: 2d73 7065 6369 616c 5479 7065 4172 6368 -specialTypeArch\n-000227d0: 6976 6572 2720 3d3e 2075 6e64 6566 2c0a iver' => undef,.\n-000227e0: 0909 2020 2020 272d 6172 6368 6976 6554 .. '-archiveT\n-000227f0: 7970 6573 2720 2020 203d 3e20 756e 6465 ypes' => unde\n-00022800: 662c 0a09 0920 2020 2027 2d63 6865 636b f,... '-check\n-00022810: 426c 6f63 6b73 5275 6c65 2720 3d3e 205b BlocksRule' => [\n-00022820: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-00022830: 426c 6f63 6b73 4253 2720 2020 3d3e 205b BlocksBS' => [\n-00022840: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-00022850: 426c 6f63 6b73 436f 6d70 7227 3d3e 205b BlocksCompr'=> [\n-00022860: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-00022870: 426c 6f63 6b73 5265 6164 2720 3d3e 205b BlocksRead' => [\n-00022880: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-00022890: 4465 7669 6365 7327 2020 2020 3d3e 205b Devices' => [\n-000228a0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-000228b0: 4465 7669 6365 7344 6972 2720 3d3e 205b DevicesDir' => [\n-000228c0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-000228d0: 4465 7669 6365 7342 5327 2020 3d3e 205b DevicesBS' => [\n-000228e0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check\n-000228f0: 4465 7669 6365 7343 6f6d 7072 2720 3d3e DevicesCompr' =>\n-00022900: 205b 5d2c 0a09 0920 2020 2027 2d6c 6174 [],... '-lat\n-00022910: 654c 696e 6b73 2720 2020 2020 2020 3d3e eLinks' =>\n-00022920: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00022930: 6c6f 6749 6e42 6163 6b75 7044 6972 2720 logInBackupDir' \n-00022940: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-00022950: 2027 2d63 6f6d 7072 6573 734c 6f67 496e '-compressLogIn\n-00022960: 4261 636b 7570 4469 7227 203d 3e20 756e BackupDir' => un\n-00022970: 6465 662c 0a09 0920 2020 2027 2d6c 6f67 def,... '-log\n-00022980: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-00022990: 616d 6527 203d 3e20 756e 6465 662c 0a09 ame' => undef,..\n-000229a0: 0920 2020 2027 2d61 6b74 4461 7465 2720 . '-aktDate' \n-000229b0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n-000229c0: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog'\n-000229d0: 2020 2020 2020 2020 2020 203d 3e20 756e => un\n-000229e0: 6465 662c 0a09 0920 2020 2027 2d63 686d def,... '-chm\n-000229f0: 6f64 4d44 3546 696c 6527 2020 2020 3d3e odMD5File' =>\n-00022a00: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00022a10: 696e 6465 7844 6972 2720 2020 2020 2020 indexDir' \n-00022a20: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-00022a30: 2027 2d64 6562 7567 4d6f 6465 2720 2020 '-debugMode' \n-00022a40: 2020 2020 3d3e 2027 6e6f 2729 3b0a 0a20 => 'no');.. \n-00022a50: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec\n-00022a60: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\\%params\n-00022a70: 2c20 5c40 5f2c 2027 616b 7446 696c 656e , \\@_, 'aktFilen\n-00022a80: 616d 653a 3a6e 6577 272c 0a09 0909 205b ame::new',.... [\n-00022a90: 272d 696e 666f 4669 6c65 272c 2027 2d62 '-infoFile', '-b\n-00022aa0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile\n-00022ab0: 272c 0a09 0909 2020 272d 636f 6d70 7265 ',.... '-compre\n-00022ac0: 7373 4d44 3546 696c 6527 2c20 272d 736f ssMD5File', '-so\n-00022ad0: 7572 6365 4469 7227 2c20 272d 666f 6c6c urceDir', '-foll\n-00022ae0: 6f77 4c69 6e6b 7327 2c0a 0909 0920 2027 owLinks',.... '\n-00022af0: 2d63 6f6d 7072 6573 7327 2c20 272d 756e -compress', '-un\n-00022b00: 636f 6d70 7265 7373 272c 2027 2d70 6f73 compress', '-pos\n-00022b10: 7466 6978 272c 0a09 0909 2020 272d 6578 tfix',.... '-ex\n-00022b20: 6365 7074 4469 7273 272c 2027 2d63 6f6d ceptDirs', '-com\n-00022b30: 7072 5275 6c65 272c 0a09 0909 2020 272d prRule',.... '-\n-00022b40: 696e 636c 7564 6544 6972 7327 2c20 272d includeDirs', '-\n-00022b50: 6578 6365 7074 5275 6c65 272c 2027 2d65 exceptRule', '-e\n-00022b60: 7863 6570 7454 7970 6573 272c 0a09 0909 xceptTypes',....\n-00022b70: 2020 272d 7370 6563 6961 6c54 7970 6541 '-specialTypeA\n-00022b80: 7263 6869 7665 7227 2c20 272d 6172 6368 rchiver', '-arch\n-00022b90: 6976 6554 7970 6573 272c 0a09 0909 2020 iveTypes',.... \n-00022ba0: 272d 696e 636c 7564 6552 756c 6527 2c20 '-includeRule', \n-00022bb0: 272d 6368 6563 6b42 6c6f 636b 7352 756c '-checkBlocksRul\n-00022bc0: 6527 2c0a 0909 0920 2027 2d63 6865 636b e',.... '-check\n-00022bd0: 426c 6f63 6b73 4253 272c 2027 2d63 6865 BlocksBS', '-che\n-00022be0: 636b 426c 6f63 6b73 436f 6d70 7227 2c0a ckBlocksCompr',.\n-00022bf0: 0909 0920 2027 2d63 6865 636b 426c 6f63 ... '-checkBloc\n-00022c00: 6b73 5265 6164 272c 0a09 0909 2020 272d ksRead',.... '-\n-00022c10: 6368 6563 6b44 6576 6963 6573 4253 272c checkDevicesBS',\n-00022c20: 2027 2d63 6865 636b 4465 7669 6365 7327 '-checkDevices'\n-00022c30: 2c0a 0909 0920 2027 2d63 6865 636b 4465 ,.... '-checkDe\n-00022c40: 7669 6365 7344 6972 272c 0a09 0909 2020 vicesDir',.... \n-00022c50: 272d 6368 6563 6b44 6576 6963 6573 436f '-checkDevicesCo\n-00022c60: 6d70 7227 2c20 272d 616b 7444 6174 6527 mpr', '-aktDate'\n-00022c70: 2c0a 0909 0920 2027 2d70 724c 6f67 272c ,.... '-prLog',\n-00022c80: 2027 2d63 686d 6f64 4d44 3546 696c 6527 '-chmodMD5File'\n-00022c90: 2c20 272d 696e 6465 7844 6972 275d 293b , '-indexDir']);\n-00022ca0: 0a20 2020 2026 3a3a 7365 7450 6172 616d . &::setParam\n-00022cb0: 7344 6972 6563 7428 2473 656c 662c 205c sDirect($self, \\\n-00022cc0: 2570 6172 616d 7329 3b0a 0a20 2020 206d %params);.. m\n-00022cd0: 7920 2470 724c 6f67 203d 2024 7365 6c66 y $prLog = $self\n-00022ce0: 2d3e 7b27 7072 4c6f 6727 7d3b 0a0a 2020 ->{'prLog'};.. \n-00022cf0: 2020 6d79 2024 6578 6365 7074 5275 6c65 my $exceptRule\n-00022d00: 203d 2024 7365 6c66 2d3e 7b27 6578 6365 = $self->{'exce\n-00022d10: 7074 5275 6c65 277d 2d3e 6861 734c 696e ptRule'}->hasLin\n-00022d20: 6528 2920 3f0a 0922 2722 202e 206a 6f69 e() ?..\"'\" . joi\n-00022d30: 6e28 2227 2027 222c 2040 7b24 7365 6c66 n(\"' '\", @{$self\n-00022d40: 2d3e 7b27 6578 6365 7074 5275 6c65 277d ->{'exceptRule'}\n-00022d50: 2d3e 6765 744c 696e 6528 297d 2920 2e20 ->getLine()}) . \n-00022d60: 2227 2220 3a20 2727 3b0a 2020 2020 6d79 \"'\" : '';. my\n-00022d70: 2024 696e 636c 7564 6552 756c 6520 3d20 $includeRule = \n-00022d80: 2473 656c 662d 3e7b 2769 6e63 6c75 6465 $self->{'include\n-00022d90: 5275 6c65 277d 2d3e 6861 734c 696e 6528 Rule'}->hasLine(\n-00022da0: 2920 3f0a 0922 2722 202e 206a 6f69 6e28 ) ?..\"'\" . join(\n-00022db0: 2227 2027 222c 2040 7b24 7365 6c66 2d3e \"' '\", @{$self->\n-00022dc0: 7b27 696e 636c 7564 6552 756c 6527 7d2d {'includeRule'}-\n-00022dd0: 3e67 6574 4c69 6e65 2829 7d29 202e 2022 >getLine()}) . \"\n-00022de0: 2722 203a 2027 273b 0a20 2020 206d 7920 '\" : '';. my \n-00022df0: 2463 6f6d 7072 5275 6c65 203d 2024 7365 $comprRule = $se\n-00022e00: 6c66 2d3e 7b27 636f 6d70 7252 756c 6527 lf->{'comprRule'\n-00022e10: 7d2d 3e68 6173 4c69 6e65 2829 203f 0a09 }->hasLine() ?..\n-00022e20: 2227 2220 2e20 6a6f 696e 2822 2720 2722 \"'\" . join(\"' '\"\n-00022e30: 2c20 407b 2473 656c 662d 3e7b 2763 6f6d , @{$self->{'com\n-00022e40: 7072 5275 6c65 277d 2d3e 6765 744c 696e prRule'}->getLin\n-00022e50: 6528 297d 2920 2e20 2227 2220 3a20 2727 e()}) . \"'\" : ''\n-00022e60: 3b0a 2020 2020 6d79 2024 6578 6365 7074 ;. my $except\n-00022e70: 4469 7273 203d 2040 7b24 7365 6c66 2d3e Dirs = @{$self->\n-00022e80: 7b27 6578 6365 7074 4469 7273 277d 7d20 {'exceptDirs'}} \n-00022e90: 3f0a 0922 2722 202e 206a 6f69 6e28 2227 ?..\"'\" . join(\"'\n-00022ea0: 2027 222c 2040 7b24 7365 6c66 2d3e 7b27 '\", @{$self->{'\n-00022eb0: 6578 6365 7074 4469 7273 277d 7d29 202e exceptDirs'}}) .\n-00022ec0: 2022 2722 203a 2027 273b 0a20 2020 2024 \"'\" : '';. $\n-00022ed0: 6578 6365 7074 4469 7273 203d 7e20 732f exceptDirs =~ s/\n-00022ee0: 5c5c 2f5c 5c35 432f 6f67 3b20 2020 2023 \\\\/\\\\5C/og; #\n-00022ef0: 2027 5c5c 2720 7374 6f72 6564 2061 7320 '\\\\' stored as \n-00022f00: 5c35 430a 2020 2020 2465 7863 6570 7444 \\5C. $exceptD\n-00022f10: 6972 7320 3d7e 2073 2f5c 6e2f 5c5c 3041 irs =~ s/\\n/\\\\0A\n-00022f20: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\\n' s\n-00022f30: 746f 7265 6420 6173 205c 3041 0a20 2020 tored as \\0A. \n-00022f40: 206d 7920 2469 6e63 6c75 6465 4469 7273 my $includeDirs\n-00022f50: 203d 2040 7b24 7365 6c66 2d3e 7b27 696e = @{$self->{'in\n-00022f60: 636c 7564 6544 6972 7327 7d7d 203f 0a09 cludeDirs'}} ?..\n-00022f70: 2227 2220 2e20 6a6f 696e 2822 2720 2722 \"'\" . join(\"' '\"\n-00022f80: 2c20 407b 2473 656c 662d 3e7b 2769 6e63 , @{$self->{'inc\n-00022f90: 6c75 6465 4469 7273 277d 7d29 202e 2022 ludeDirs'}}) . \"\n-00022fa0: 2722 203a 2027 273b 0a20 2020 2024 696e '\" : '';. $in\n-00022fb0: 636c 7564 6544 6972 7320 3d7e 2073 2f5c cludeDirs =~ s/\\\n-00022fc0: 5c2f 5c5c 3543 2f6f 673b 2020 2020 2320 \\/\\\\5C/og; # \n-00022fd0: 275c 5c27 2073 746f 7265 6420 6173 205c '\\\\' stored as \\\n-00022fe0: 3543 0a20 2020 2024 696e 636c 7564 6544 5C. $includeD\n-00022ff0: 6972 7320 3d7e 2073 2f5c 6e2f 5c5c 3041 irs =~ s/\\n/\\\\0A\n-00023000: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\\n' s\n-00023010: 746f 7265 6420 6173 205c 3041 0a20 2020 tored as \\0A. \n-00023020: 206d 7920 2465 7863 6570 7454 7970 6573 my $exceptTypes\n-00023030: 203d 2024 7365 6c66 2d3e 7b27 6578 6365 = $self->{'exce\n-00023040: 7074 5479 7065 7327 7d20 3f20 2473 656c ptTypes'} ? $sel\n-00023050: 662d 3e7b 2765 7863 6570 7454 7970 6573 f->{'exceptTypes\n-00023060: 277d 203a 2027 273b 0a20 2020 2069 6620 '} : '';. if \n-00023070: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc\n-00023080: 6869 7665 7229 0a20 2020 207b 0a09 2461 hiver). {..$a\n-00023090: 7263 6869 7665 5479 7065 7320 3d20 2727 rchiveTypes = ''\n-000230a0: 2075 6e6c 6573 7320 2461 7263 6869 7665 unless $archive\n-000230b0: 5479 7065 733b 0a20 2020 207d 0a20 2020 Types;. }. \n-000230c0: 2065 6c73 650a 2020 2020 7b0a 0924 7370 else. {..$sp\n-000230d0: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive\n-000230e0: 7220 3d20 2727 3b0a 0924 6172 6368 6976 r = '';..$archiv\n-000230f0: 6554 7970 6573 203d 2027 273b 0a20 2020 eTypes = '';. \n-00023100: 207d 0a20 2020 206d 7920 2473 6420 3d20 }. my $sd = \n-00023110: 2473 656c 662d 3e7b 2773 6f75 7263 6544 $self->{'sourceD\n-00023120: 6972 277d 3b0a 2020 2020 2473 6420 3d7e ir'};. $sd =~\n-00023130: 2073 2f5c 5c2f 5c5c 3543 2f6f 673b 2020 s/\\\\/\\\\5C/og; \n-00023140: 2020 2320 275c 5c27 2073 746f 7265 6420 # '\\\\' stored \n-00023150: 6173 205c 3543 0a20 2020 2024 7364 203d as \\5C. $sd =\n-00023160: 7e20 732f 5c6e 2f5c 5c30 412f 736f 673b ~ s/\\n/\\\\0A/sog;\n-00023170: 2020 2023 2027 5c6e 2720 7374 6f72 6564 # '\\n' stored\n-00023180: 2061 7320 5c30 410a 2020 2020 2473 6420 as \\0A. $sd \n-00023190: 3d7e 2073 2f5c 272f 5c5c 5c27 2f73 6f67 =~ s/\\'/\\\\\\'/sog\n-000231a0: 3b20 2020 2320 2720 7374 6f72 6564 2061 ; # ' stored a\n-000231b0: 7320 5c27 0a20 2020 206d 7920 246c 6f67 s \\'. my $log\n-000231c0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-000231d0: 616d 6520 3d20 2473 656c 662d 3e7b 276c ame = $self->{'l\n-000231e0: 6f67 496e 4261 636b 7570 4469 7246 696c ogInBackupDirFil\n-000231f0: 654e 616d 6527 7d3b 0a20 2020 2024 6c6f eName'};. $lo\n-00023200: 6749 6e42 6163 6b75 7044 6972 4669 6c65 gInBackupDirFile\n-00023210: 4e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 Name =~ s/\\\\/\\\\5\n-00023220: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\\\' \n-00023230: 7374 6f72 6564 2061 7320 5c35 430a 2020 stored as \\5C. \n-00023240: 2020 246c 6f67 496e 4261 636b 7570 4469 $logInBackupDi\n-00023250: 7246 696c 654e 616d 6520 3d7e 2073 2f5c rFileName =~ s/\\\n-00023260: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\\\0A/sog; # \n-00023270: 275c 6e27 2073 746f 7265 6420 6173 205c '\\n' stored as \\\n-00023280: 3041 0a20 2020 2024 6c6f 6749 6e42 6163 0A. $logInBac\n-00023290: 6b75 7044 6972 4669 6c65 4e61 6d65 203d kupDirFileName =\n-000232a0: 7e20 732f 5c27 2f5c 5c5c 272f 736f 673b ~ s/\\'/\\\\\\'/sog;\n-000232b0: 2020 2023 2027 2073 746f 7265 6420 6173 # ' stored as\n-000232c0: 205c 270a 0a20 2020 206d 7920 2840 626c \\'.. my (@bl\n-000232d0: 6f63 6b73 5275 6c65 732c 2024 6929 3b0a ocksRules, $i);.\n-000232e0: 2020 2020 6d79 2024 6368 6563 6b42 6c6f my $checkBlo\n-000232f0: 636b 7352 756c 6520 3d20 2473 656c 662d cksRule = $self-\n-00023300: 3e7b 2763 6865 636b 426c 6f63 6b73 5275 >{'checkBlocksRu\n-00023310: 6c65 277d 3b0a 2020 2020 6d79 2024 6368 le'};. my $ch\n-00023320: 6563 6b42 6c6f 636b 7342 5320 3d20 2473 eckBlocksBS = $s\n-00023330: 656c 662d 3e7b 2763 6865 636b 426c 6f63 elf->{'checkBloc\n-00023340: 6b73 4253 277d 3b0a 2020 2020 666f 7265 ksBS'};. fore\n-00023350: 6163 6820 2469 2028 302e 2e40 2463 6865 ach $i (0..@$che\n-00023360: 636b 426c 6f63 6b73 5275 6c65 2d31 290a ckBlocksRule-1).\n-00023370: 2020 2020 7b0a 096d 7920 2462 7220 3d20 {..my $br = \n-00023380: 2263 6865 636b 426c 6f63 6b73 5275 6c65 \"checkBlocksRule\n-00023390: 2469 3d22 3b0a 096d 7920 2462 7320 3d20 $i=\";..my $bs = \n-000233a0: 2263 6865 636b 426c 6f63 6b73 4253 2469 \"checkBlocksBS$i\n-000233b0: 3d22 3b0a 096d 7920 2462 6320 3d20 2263 =\";..my $bc = \"c\n-000233c0: 6865 636b 426c 6f63 6b73 436f 6d70 7224 heckBlocksCompr$\n-000233d0: 693d 223b 0a09 6d79 2024 6272 6561 6420 i=\";..my $bread \n-000233e0: 3d20 2263 6865 636b 426c 6f63 6b73 5265 = \"checkBlocksRe\n-000233f0: 6164 2469 3d22 3b0a 0a09 6d79 2028 4063 ad$i=\";...my (@c\n-00023400: 6272 2920 3d20 4024 6368 6563 6b42 6c6f br) = @$checkBlo\n-00023410: 636b 7352 756c 653b 0a09 6966 2028 6465 cksRule;..if (de\n-00023420: 6669 6e65 6420 2463 6272 5b24 695d 290a fined $cbr[$i]).\n-00023430: 097b 0a09 2020 2020 2462 7220 2e3d 2022 .{.. $br .= \"\n-00023440: 2722 202e 206a 6f69 6e28 2720 272c 2040 '\" . join(' ', @\n-00023450: 7b24 6362 725b 2469 5d7d 2920 2e20 2227 {$cbr[$i]}) . \"'\n-00023460: 223b 0a09 2020 2020 2462 7320 2e3d 2024 \";.. $bs .= $\n-00023470: 2463 6865 636b 426c 6f63 6b73 4253 5b24 $checkBlocksBS[$\n-00023480: 695d 3b0a 0920 2020 2024 6263 202e 3d20 i];.. $bc .= \n-00023490: 2463 6865 636b 426c 6f63 6b73 436f 6d70 $checkBlocksComp\n-000234a0: 725b 2469 5d3b 0a09 2020 2020 2462 7265 r[$i];.. $bre\n-000234b0: 6164 202e 3d20 2463 6865 636b 426c 6f63 ad .= $checkBloc\n-000234c0: 6b73 5265 6164 5b24 695d 0a09 093f 2022 ksRead[$i]...? \"\n-000234d0: 2722 202e 206a 6f69 6e28 2720 272c 2040 '\" . join(' ', @\n-000234e0: 7b24 6368 6563 6b42 6c6f 636b 7352 6561 {$checkBlocksRea\n-000234f0: 645b 2469 5d7d 2920 2e20 2227 2220 3a20 d[$i]}) . \"'\" : \n-00023500: 2727 3b0a 097d 0a09 2462 7220 3d7e 2073 '';..}..$br =~ s\n-00023510: 2f5c 5c2f 5c5c 3543 2f6f 673b 2020 2020 /\\\\/\\\\5C/og; \n-00023520: 2320 275c 5c27 2073 746f 7265 6420 6173 # '\\\\' stored as\n-00023530: 205c 3543 0a09 2462 7220 3d7e 2073 2f5c \\5C..$br =~ s/\\\n-00023540: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\\\0A/sog; # \n-00023550: 275c 6e27 2073 746f 7265 6420 6173 205c '\\n' stored as \\\n-00023560: 3041 0a09 7075 7368 2040 626c 6f63 6b73 0A..push @blocks\n-00023570: 5275 6c65 732c 2024 6272 2c20 2462 732c Rules, $br, $bs,\n-00023580: 2024 6263 2c20 2462 7265 6164 3b0a 2020 $bc, $bread;. \n-00023590: 2020 7d0a 2020 2020 6d79 2028 4064 6576 }. my (@dev\n-000235a0: 6963 6573 293b 0a20 2020 206d 7920 2463 ices);. my $c\n-000235b0: 6865 636b 4465 7669 6365 7320 3d20 2473 heckDevices = $s\n-000235c0: 656c 662d 3e7b 2763 6865 636b 4465 7669 elf->{'checkDevi\n-000235d0: 6365 7327 7d3b 0a20 2020 206d 7920 2463 ces'};. my $c\n-000235e0: 6865 636b 4465 7669 6365 7344 6972 203d heckDevicesDir =\n-000235f0: 2024 7365 6c66 2d3e 7b27 6368 6563 6b44 $self->{'checkD\n-00023600: 6576 6963 6573 4469 7227 7d3b 0a20 2020 evicesDir'};. \n-00023610: 206d 7920 2463 6865 636b 4465 7669 6365 my $checkDevice\n-00023620: 7342 5320 3d20 2473 656c 662d 3e7b 2763 sBS = $self->{'c\n-00023630: 6865 636b 4465 7669 6365 7342 5327 7d3b heckDevicesBS'};\n-00023640: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe\n-00023650: 7669 6365 7343 6f6d 7072 203d 2024 7365 vicesCompr = $se\n-00023660: 6c66 2d3e 7b27 6368 6563 6b44 6576 6963 lf->{'checkDevic\n-00023670: 6573 436f 6d70 7227 7d3b 0a20 2020 2066 esCompr'};. f\n-00023680: 6f72 6561 6368 2024 6920 2830 2e2e 4024 oreach $i (0..@$\n-00023690: 6368 6563 6b44 6576 6963 6573 2d31 290a checkDevices-1).\n-000236a0: 2020 2020 7b0a 0970 7573 6820 4064 6576 {..push @dev\n-000236b0: 6963 6573 2c0a 0922 6368 6563 6b44 6576 ices,..\"checkDev\n-000236c0: 6963 6573 2469 3d22 202e 2024 6368 6563 ices$i=\" . $chec\n-000236d0: 6b44 6576 6963 6573 5b24 695d 2c0a 0922 kDevices[$i],..\"\n-000236e0: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$\n-000236f0: 693d 2220 2e20 2463 6865 636b 4465 7669 i=\" . $checkDevi\n-00023700: 6365 7344 6972 5b24 695d 2c0a 0922 6368 cesDir[$i],..\"ch\n-00023710: 6563 6b44 6576 6963 6573 4253 2469 3d22 eckDevicesBS$i=\"\n-00023720: 202e 2024 6368 6563 6b44 6576 6963 6573 . $checkDevices\n-00023730: 4253 5b24 695d 2c0a 0922 6368 6563 6b44 BS[$i],..\"checkD\n-00023740: 6576 6963 6573 436f 6d70 7224 693d 2220 evicesCompr$i=\" \n-00023750: 2e20 2463 6865 636b 4465 7669 6365 7343 . $checkDevicesC\n-00023760: 6f6d 7072 5b24 695d 3b0a 2020 2020 7d0a ompr[$i];. }.\n-00023770: 2020 2020 6d79 2028 4069 6e66 6f4c 696e my (@infoLin\n-00023780: 6573 2920 3d20 2822 7665 7273 696f 6e3d es) = (\"version=\n-00023790: 2220 2e20 246d 6169 6e3a 3a63 6865 636b \" . $main::check\n-000237a0: 5375 6d46 696c 6556 6572 7369 6f6e 2c0a SumFileVersion,.\n-000237b0: 0909 2020 2020 2020 2022 7374 6f72 6542 .. \"storeB\n-000237c0: 6163 6b75 7056 6572 7369 6f6e 3d22 202e ackupVersion=\" .\n-000237d0: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC\n-000237e0: 4b55 5056 4552 5349 4f4e 2c0a 0909 2020 KUPVERSION,... \n-000237f0: 2020 2020 2022 6461 7465 3d22 202e 0a09 \"date=\" ...\n-00023800: 0920 2020 2020 2020 2473 656c 662d 3e7b . $self->{\n-00023810: 2761 6b74 4461 7465 277d 2d3e 6765 7444 'aktDate'}->getD\n-00023820: 6174 6554 696d 6528 272d 666f 726d 6174 ateTime('-format\n-00023830: 2720 3d3e 0a09 0909 0909 0920 2020 2020 ' =>....... \n-00023840: 2020 2725 592e 254d 2e25 4420 2568 2e25 '%Y.%M.%D %h.%\n-00023850: 6d2e 2573 2729 2c0a 0909 2020 2020 2020 m.%s'),... \n-00023860: 2022 736f 7572 6365 4469 723d 2220 2e20 \"sourceDir=\" . \n-00023870: 2227 2220 2e20 2473 6420 2e20 2227 222c \"'\" . $sd . \"'\",\n-00023880: 0a09 0920 2020 2020 2020 2266 6f6c 6c6f ... \"follo\n-00023890: 774c 696e 6b73 3d22 202e 2024 7365 6c66 wLinks=\" . $self\n-000238a0: 2d3e 7b27 666f 6c6c 6f77 4c69 6e6b 7327 ->{'followLinks'\n-000238b0: 7d2c 0a09 0920 2020 2020 2020 2263 6f6d },... \"com\n-000238c0: 7072 6573 733d 2220 2e0a 0909 2020 2020 press=\" .... \n-000238d0: 2020 2022 2722 202e 206a 6f69 6e28 2227 \"'\" . join(\"'\n-000238e0: 2027 222c 2040 7b24 7365 6c66 2d3e 7b27 '\", @{$self->{'\n-000238f0: 636f 6d70 7265 7373 277d 7d29 202e 2022 compress'}}) . \"\n-00023900: 2722 2c0a 0909 2020 2020 2020 2022 756e '\",... \"un\n-00023910: 636f 6d70 7265 7373 3d22 202e 0a09 0920 compress=\" .... \n-00023920: 2020 2020 2020 2227 2220 2e20 6a6f 696e \"'\" . join\n-00023930: 2822 2720 2722 2c20 407b 2473 656c 662d (\"' '\", @{$self-\n-00023940: 3e7b 2775 6e63 6f6d 7072 6573 7327 7d7d >{'uncompress'}}\n-00023950: 2920 2e20 2227 222c 0a09 0920 2020 2020 ) . \"'\",... \n-00023960: 2020 2270 6f73 7466 6978 3d22 202e 2022 \"postfix=\" . \"\n-00023970: 2722 202e 2024 7365 6c66 2d3e 7b27 706f '\" . $self->{'po\n-00023980: 7374 6669 7827 7d20 2e20 2227 222c 0a09 stfix'} . \"'\",..\n-00023990: 0920 2020 2020 2020 2263 6f6d 7072 5275 . \"comprRu\n-000239a0: 6c65 3d22 202e 2024 636f 6d70 7252 756c le=\" . $comprRul\n-000239b0: 652c 0a09 0920 2020 2020 2020 2265 7863 e,... \"exc\n-000239c0: 6570 7444 6972 733d 2220 2e20 2465 7863 eptDirs=\" . $exc\n-000239d0: 6570 7444 6972 732c 0a09 0920 2020 2020 eptDirs,... \n-000239e0: 2020 2269 6e63 6c75 6465 4469 7273 3d22 \"includeDirs=\"\n-000239f0: 202e 2024 696e 636c 7564 6544 6972 732c . $includeDirs,\n-00023a00: 0a09 0920 2020 2020 2020 2265 7863 6570 ... \"excep\n-00023a10: 7452 756c 653d 2220 2e20 2465 7863 6570 tRule=\" . $excep\n-00023a20: 7452 756c 652c 0a09 0920 2020 2020 2020 tRule,... \n-00023a30: 2269 6e63 6c75 6465 5275 6c65 3d22 202e \"includeRule=\" .\n-00023a40: 2024 696e 636c 7564 6552 756c 652c 0a09 $includeRule,..\n-00023a50: 0920 2020 2020 2020 2277 7269 7465 4578 . \"writeEx\n-00023a60: 636c 7564 654c 6f67 3d22 202e 0a09 0920 cludeLog=\" .... \n-00023a70: 2020 2020 2020 2020 2020 2824 7365 6c66 ($self\n-00023a80: 2d3e 7b27 7772 6974 6545 7863 6c75 6465 ->{'writeExclude\n-00023a90: 4c6f 6727 7d20 3f20 2779 6573 2720 3a20 Log'} ? 'yes' : \n-00023aa0: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... \n-00023ab0: 2265 7863 6570 7454 7970 6573 3d22 202e \"exceptTypes=\" .\n-00023ac0: 2024 6578 6365 7074 5479 7065 732c 0a09 $exceptTypes,..\n-00023ad0: 0920 2020 2020 2020 2261 7263 6869 7665 . \"archive\n-00023ae0: 5479 7065 733d 2220 2e20 2461 7263 6869 Types=\" . $archi\n-00023af0: 7665 5479 7065 732c 0a09 0920 2020 2020 veTypes,... \n-00023b00: 2020 2273 7065 6369 616c 5479 7065 4172 \"specialTypeAr\n-00023b10: 6368 6976 6572 3d22 202e 2024 7370 6563 chiver=\" . $spec\n-00023b20: 6961 6c54 7970 6541 7263 6869 7665 722c ialTypeArchiver,\n-00023b30: 0a09 0920 2020 2020 2020 4062 6c6f 636b ... @block\n-00023b40: 7352 756c 6573 2c0a 0909 2020 2020 2020 sRules,... \n-00023b50: 2040 6465 7669 6365 732c 0a09 0920 2020 @devices,... \n-00023b60: 2020 2020 2270 7265 7365 7276 6550 6572 \"preservePer\n-00023b70: 6d73 3d22 202e 2028 2470 7265 7365 7276 ms=\" . ($preserv\n-00023b80: 6550 6572 6d73 203f 2027 7965 7327 203a ePerms ? 'yes' :\n-00023b90: 2027 6e6f 2729 2c0a 0909 2020 2020 2020 'no'),... \n-00023ba0: 2022 6c61 7465 4c69 6e6b 733d 222e 2028 \"lateLinks=\". (\n-00023bb0: 246c 6174 654c 696e 6b73 203f 2027 7965 $lateLinks ? 'ye\n-00023bc0: 7327 203a 2027 6e6f 2729 2c0a 0909 2020 s' : 'no'),... \n-00023bd0: 2020 2020 2022 6c61 7465 436f 6d70 7265 \"lateCompre\n-00023be0: 7373 3d22 202e 2028 246c 6174 6543 6f6d ss=\" . ($lateCom\n-00023bf0: 7072 6573 7320 3f20 2779 6573 2720 3a20 press ? 'yes' : \n-00023c00: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... \n-00023c10: 2263 7049 7347 6e75 3d22 2e20 2824 676e \"cpIsGnu=\". ($gn\n-00023c20: 7563 7020 3f20 2779 6573 2720 3a20 276e ucp ? 'yes' : 'n\n-00023c30: 6f27 292c 0a09 0920 2020 2020 2020 226c o'),... \"l\n-00023c40: 6f67 496e 4261 636b 7570 4469 723d 2220 ogInBackupDir=\" \n-00023c50: 2e0a 0909 2020 2020 2020 2020 2020 2028 .... (\n-00023c60: 2473 656c 662d 3e7b 276c 6f67 496e 4261 $self->{'logInBa\n-00023c70: 636b 7570 4469 7227 7d20 3f20 2779 6573 ckupDir'} ? 'yes\n-00023c80: 2720 3a20 276e 6f27 292c 0a09 0920 2020 ' : 'no'),... \n-00023c90: 2020 2020 2263 6f6d 7072 6573 734c 6f67 \"compressLog\n-00023ca0: 496e 4261 636b 7570 4469 723d 2220 2e0a InBackupDir=\" ..\n-00023cb0: 0909 2020 2020 2020 2020 2020 2028 2473 .. ($s\n-00023cc0: 656c 662d 3e7b 2763 6f6d 7072 6573 734c elf->{'compressL\n-00023cd0: 6f67 496e 4261 636b 7570 4469 7227 7d20 ogInBackupDir'} \n-00023ce0: 3f20 2779 6573 2720 3a20 276e 6f27 292c ? 'yes' : 'no'),\n-00023cf0: 0a09 0920 2020 2020 2020 226c 6f67 496e ... \"logIn\n-00023d00: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam\n-00023d10: 653d 2220 2e0a 0909 2020 2020 2020 2020 e=\" .... \n-00023d20: 2020 2022 2722 202e 2024 6c6f 6749 6e42 \"'\" . $logInB\n-00023d30: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName\n-00023d40: 202e 2022 2722 2c0a 0909 2020 2020 2020 . \"'\",... \n-00023d50: 2022 6c69 6e6b 546f 5265 6365 6e74 3d22 \"linkToRecent=\"\n-00023d60: 202e 0a09 0920 2020 2020 2020 2020 2020 .... \n-00023d70: 2824 6c69 6e6b 546f 5265 6365 6e74 203f ($linkToRecent ?\n-00023d80: 2022 2722 202e 2024 6c69 6e6b 546f 5265 \"'\" . $linkToRe\n-00023d90: 6365 6e74 202e 2022 2722 203a 2022 2229 cent . \"'\" : \"\")\n-00023da0: 0a09 0920 2020 2020 2020 293b 0a20 2020 ... );. \n-00023db0: 206d 7920 2469 6e66 6f46 696c 6520 3d20 my $infoFile = \n-00023dc0: 2473 656c 662d 3e7b 2769 6e66 6f46 696c $self->{'infoFil\n-00023dd0: 6527 7d3b 0a0a 2020 2020 6d79 2024 7763 e'};.. my $wc\n-00023de0: 7366 203d 2077 7269 7465 4368 6563 6b53 sf = writeCheckS\n-00023df0: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch\n-00023e00: 6563 6b53 756d 4669 6c65 2720 3d3e 2024 eckSumFile' => $\n-00023e10: 696e 666f 4669 6c65 2c0a 0909 0909 2020 infoFile,..... \n-00023e20: 2020 2020 272d 626c 6f63 6b43 6865 636b '-blockCheck\n-00023e30: 5375 6d46 696c 6527 203d 3e0a 0909 0909 SumFile' =>.....\n-00023e40: 2020 2020 2020 2473 656c 662d 3e7b 2762 $self->{'b\n-00023e50: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile\n-00023e60: 277d 2c0a 0909 0909 2020 2020 2020 272d '},..... '-\n-00023e70: 696e 666f 4c69 6e65 7327 203d 3e20 5c40 infoLines' => \\@\n-00023e80: 696e 666f 4c69 6e65 732c 0a09 0909 0920 infoLines,..... \n-00023e90: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n-00023ea0: 2024 7072 4c6f 672c 0a09 0909 0920 2020 $prLog,..... \n-00023eb0: 2020 2027 2d63 686d 6f64 4d44 3546 696c '-chmodMD5Fil\n-00023ec0: 6527 203d 3e20 2473 656c 662d 3e7b 2763 e' => $self->{'c\n-00023ed0: 686d 6f64 4d44 3546 696c 6527 7d2c 0a09 hmodMD5File'},..\n-00023ee0: 0909 0920 2020 2020 2027 2d63 6f6d 7072 ... '-compr\n-00023ef0: 6573 734d 4435 4669 6c65 2720 3d3e 0a09 essMD5File' =>..\n-00023f00: 0909 0920 2020 2020 2024 7365 6c66 2d3e ... $self->\n-00023f10: 7b27 636f 6d70 7265 7373 4d44 3546 696c {'compressMD5Fil\n-00023f20: 6527 7d2c 0a09 0909 0920 2020 2020 2027 e'},..... '\n-00023f30: 2d6c 6174 654c 696e 6b73 2720 3d3e 2024 -lateLinks' => $\n-00023f40: 6c61 7465 4c69 6e6b 732c 0a09 0909 0920 lateLinks,..... \n-00023f50: 2020 2020 2027 2d74 6d70 6469 7227 203d '-tmpdir' =\n-00023f60: 3e20 2474 6d70 6469 7229 3b0a 2020 2020 > $tmpdir);. \n-00023f70: 2473 656c 662d 3e7b 2777 7269 7465 4368 $self->{'writeCh\n-00023f80: 6563 6b53 756d 4669 6c65 277d 203d 2024 eckSumFile'} = $\n-00023f90: 7763 7366 3b0a 0a20 2020 2062 6c65 7373 wcsf;.. bless\n-00023fa0: 2024 7365 6c66 2c20 2463 6c61 7373 3b0a $self, $class;.\n-00023fb0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n-00023fc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00023fd0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n-00023fe0: 2073 6574 4442 4d6d 6435 0a7b 0a20 2020 setDBMmd5.{. \n-00023ff0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-00024000: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{\n-00024010: 2744 424d 6d64 3527 7d20 3d20 7368 6966 'DBMmd5'} = shif\n-00024020: 743b 0a7d 0a0a 0a23 2323 2323 2323 2323 t;.}...#########\n-00024030: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00024040: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00024050: 2320 66c3 bc72 206e 6f72 6d61 6c65 2044 # f..r normale D\n-00024060: 6174 6569 656e 0a73 7562 2073 746f 7265 ateien.sub store\n-00024070: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n-00024080: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my\n-00024090: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('-\n-000240a0: 6669 6c65 6e61 6d65 2720 2020 203d 3e20 filename' => \n-000240b0: 756e 6465 662c 0a09 0920 2020 2027 2d6d undef,... '-m\n-000240c0: 6435 7375 6d27 2020 2020 2020 3d3e 2075 d5sum' => u\n-000240d0: 6e64 6566 2c0a 0909 2020 2020 272d 636f ndef,... '-co\n-000240e0: 6d70 7227 2020 2020 2020 203d 3e20 756e mpr' => un\n-000240f0: 6465 662c 0a09 0920 2020 2027 2d64 6576 def,... '-dev\n-00024100: 2720 2020 2020 2020 2020 3d3e 2075 6e64 ' => und\n-00024110: 6566 2c0a 0909 2020 2020 272d 696e 6f64 ef,... '-inod\n-00024120: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde\n-00024130: 662c 0a09 0920 2020 2027 2d69 6e6f 6465 f,... '-inode\n-00024140: 4261 636b 7570 2720 3d3e 2075 6e64 6566 Backup' => undef\n-00024150: 2c0a 0909 2020 2020 272d 6374 696d 6527 ,... '-ctime'\n-00024160: 2020 2020 2020 203d 3e20 756e 6465 662c => undef,\n-00024170: 0a09 0920 2020 2027 2d6d 7469 6d65 2720 ... '-mtime' \n-00024180: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,.\n-00024190: 0909 2020 2020 272d 6174 696d 6527 2020 .. '-atime' \n-000241a0: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,..\n-000241b0: 0920 2020 2027 2d73 697a 6527 2020 2020 . '-size' \n-000241c0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,...\n-000241d0: 2020 2020 272d 7569 6427 2020 2020 2020 '-uid' \n-000241e0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-000241f0: 2020 2027 2d67 6964 2720 2020 2020 2020 '-gid' \n-00024200: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-00024210: 2020 272d 6d6f 6465 2720 2020 2020 2020 '-mode' \n-00024220: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-00024230: 2027 2d73 746f 7265 496e 4442 4d27 2020 '-storeInDBM' \n-00024240: 3d3e 2031 2020 2020 2020 2320 4465 6661 => 1 # Defa\n-00024250: 756c 743a 2073 7065 6963 6865 726e 2c0a ult: speichern,.\n-00024260: 0909 2020 2020 2020 2020 2020 2020 2020 .. \n-00024270: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00024280: 2020 2020 2020 2020 3020 3d20 6e69 6368 0 = nich\n-00024290: 7420 7370 6569 6368 6572 6e0a 0909 2020 t speichern... \n-000242a0: 2020 293b 0a0a 2020 2020 263a 3a63 6865 );.. &::che\n-000242b0: 636b 4f62 6a65 6374 5061 7261 6d73 285c ckObjectParams(\\\n-000242c0: 2570 6172 616d 732c 205c 405f 2c20 2761 %params, \\@_, 'a\n-000242d0: 6b74 4669 6c65 6e61 6d65 3a3a 7374 6f72 ktFilename::stor\n-000242e0: 6527 2c0a 0909 0920 5b27 2d66 696c 656e e',.... ['-filen\n-000242f0: 616d 6527 2c20 272d 6d64 3573 756d 272c ame', '-md5sum',\n-00024300: 2027 2d63 6f6d 7072 272c 2027 2d64 6576 '-compr', '-dev\n-00024310: 272c 2027 2d69 6e6f 6465 272c 0a09 0909 ', '-inode',....\n-00024320: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup'\n-00024330: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt\n-00024340: 696d 6527 2c20 272d 6174 696d 6527 2c0a ime', '-atime',.\n-00024350: 0909 0920 2027 2d73 697a 6527 2c20 272d ... '-size', '-\n-00024360: 7569 6427 2c20 272d 6769 6427 2c20 272d uid', '-gid', '-\n-00024370: 6d6f 6465 275d 293b 0a20 2020 206d 7920 mode']);. my \n-00024380: 2466 696c 656e 616d 6520 3d20 2470 6172 $filename = $par\n-00024390: 616d 737b 272d 6669 6c65 6e61 6d65 277d ams{'-filename'}\n-000243a0: 3b0a 2020 2020 6d79 2024 6d64 3573 756d ;. my $md5sum\n-000243b0: 203d 2024 7061 7261 6d73 7b27 2d6d 6435 = $params{'-md5\n-000243c0: 7375 6d27 7d3b 0a20 2020 206d 7920 2463 sum'};. my $c\n-000243d0: 6f6d 7072 203d 2024 7061 7261 6d73 7b27 ompr = $params{'\n-000243e0: 2d63 6f6d 7072 277d 3b0a 2020 2020 6d79 -compr'};. my\n-000243f0: 2024 6465 7620 3d20 2470 6172 616d 737b $dev = $params{\n-00024400: 272d 6465 7627 7d3b 0a20 2020 206d 7920 '-dev'};. my \n-00024410: 2469 6e6f 6465 203d 2024 7061 7261 6d73 $inode = $params\n-00024420: 7b27 2d69 6e6f 6465 277d 3b0a 2020 2020 {'-inode'};. \n-00024430: 6d79 2024 696e 6f64 6542 6163 6b75 7020 my $inodeBackup \n-00024440: 3d20 2470 6172 616d 737b 272d 696e 6f64 = $params{'-inod\n-00024450: 6542 6163 6b75 7027 7d3b 0a20 2020 206d eBackup'};. m\n-00024460: 7920 2463 7469 6d65 203d 2024 7061 7261 y $ctime = $para\n-00024470: 6d73 7b27 2d63 7469 6d65 277d 3b0a 2020 ms{'-ctime'};. \n-00024480: 2020 6d79 2024 6d74 696d 6520 3d20 2470 my $mtime = $p\n-00024490: 6172 616d 737b 272d 6d74 696d 6527 7d3b arams{'-mtime'};\n-000244a0: 0a20 2020 206d 7920 2461 7469 6d65 203d . my $atime =\n-000244b0: 2024 7061 7261 6d73 7b27 2d61 7469 6d65 $params{'-atime\n-000244c0: 277d 3b0a 2020 2020 6d79 2024 7369 7a65 '};. my $size\n-000244d0: 203d 2024 7061 7261 6d73 7b27 2d73 697a = $params{'-siz\n-000244e0: 6527 7d3b 0a20 2020 206d 7920 2475 6964 e'};. my $uid\n-000244f0: 203d 2024 7061 7261 6d73 7b27 2d75 6964 = $params{'-uid\n-00024500: 277d 3b0a 2020 2020 6d79 2024 6769 6420 '};. my $gid \n-00024510: 3d20 2470 6172 616d 737b 272d 6769 6427 = $params{'-gid'\n-00024520: 7d3b 0a20 2020 206d 7920 246d 6f64 6520 };. my $mode \n-00024530: 3d20 2470 6172 616d 737b 272d 6d6f 6465 = $params{'-mode\n-00024540: 277d 3b0a 0a20 2020 2069 6620 2824 7061 '};.. if ($pa\n-00024550: 7261 6d73 7b27 2d73 746f 7265 496e 4442 rams{'-storeInDB\n-00024560: 4d27 7d29 0a20 2020 207b 0a09 6d79 2024 M'}). {..my $\n-00024570: 4442 4d6d 6435 203d 2024 7365 6c66 2d3e DBMmd5 = $self->\n-00024580: 7b27 4442 4d6d 6435 277d 3b0a 0a09 6d79 {'DBMmd5'};...my\n-00024590: 2024 6d64 3570 6163 6b20 3d20 7061 636b $md5pack = pack\n-000245a0: 2827 4833 3227 2c20 246d 6435 7375 6d29 ('H32', $md5sum)\n-000245b0: 3b0a 096d 7920 2466 203d 2024 7365 6c66 ;..my $f = $self\n-000245c0: 2d3e 7b27 696e 6465 7844 6972 277d 2d3e ->{'indexDir'}->\n-000245d0: 7365 7449 6e64 6578 2824 6669 6c65 6e61 setIndex($filena\n-000245e0: 6d65 293b 0a09 2424 4442 4d6d 6435 7b24 me);..$$DBMmd5{$\n-000245f0: 6d64 3570 6163 6b7d 203d 2070 6163 6b28 md5pack} = pack(\n-00024600: 2746 6153 612a 272c 2024 696e 6f64 6542 'FaSa*', $inodeB\n-00024610: 6163 6b75 702c 2024 636f 6d70 722c 0a09 ackup, $compr,..\n-00024620: 0909 0920 2030 2c20 2466 290a 0920 2020 ... 0, $f).. \n-00024630: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $\n-00024640: 2444 424d 6d64 357b 246d 6435 7061 636b $DBMmd5{$md5pack\n-00024650: 7d3b 0a20 2020 207d 0920 2020 2020 2020 };. }. \n-00024660: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00024670: 2020 2020 2023 2024 6261 636b 7570 4469 # $backupDi\n-00024680: 7249 6e64 6578 2069 7374 2069 6d6d 6572 rIndex ist immer\n-00024690: 2030 0a0a 2020 2020 2473 656c 662d 3e7b 0.. $self->{\n-000246a0: 2777 7269 7465 4368 6563 6b53 756d 4669 'writeCheckSumFi\n-000246b0: 6c65 277d 2d3e 7772 6974 6528 272d 6669 le'}->write('-fi\n-000246c0: 6c65 6e61 6d65 2720 3d3e 2024 6669 6c65 lename' => $file\n-000246d0: 6e61 6d65 2c0a 0909 0909 0927 2d6d 6435 name,......'-md5\n-000246e0: 7375 6d27 203d 3e20 246d 6435 7375 6d2c sum' => $md5sum,\n-000246f0: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' =\n-00024700: 3e20 2463 6f6d 7072 2c0a 0909 0909 0927 > $compr,......'\n-00024710: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,..\n-00024720: 0909 0909 272d 696e 6f64 6527 203d 3e20 ....'-inode' => \n-00024730: 2469 6e6f 6465 2c0a 0909 0909 0927 2d69 $inode,......'-i\n-00024740: 6e6f 6465 4261 636b 7570 2720 3d3e 2024 nodeBackup' => $\n-00024750: 696e 6f64 6542 6163 6b75 702c 0a09 0909 inodeBackup,....\n-00024760: 0909 272d 6374 696d 6527 203d 3e20 2463 ..'-ctime' => $c\n-00024770: 7469 6d65 2c0a 0909 0909 0927 2d6d 7469 time,......'-mti\n-00024780: 6d65 2720 3d3e 2024 6d74 696d 652c 0a09 me' => $mtime,..\n-00024790: 0909 0909 272d 6174 696d 6527 203d 3e20 ....'-atime' => \n-000247a0: 2461 7469 6d65 2c0a 0909 0909 0927 2d73 $atime,......'-s\n-000247b0: 697a 6527 203d 3e20 2473 697a 652c 0a09 ize' => $size,..\n-000247c0: 0909 0909 272d 7569 6427 203d 3e20 2475 ....'-uid' => $u\n-000247d0: 6964 2c0a 0909 0909 0927 2d67 6964 2720 id,......'-gid' \n-000247e0: 3d3e 2024 6769 642c 0a09 0909 0909 272d => $gid,......'-\n-000247f0: 6d6f 6465 2720 3d3e 2024 6d6f 6465 0a09 mode' => $mode..\n-00024800: 0909 0909 293b 0a7d 0a0a 0a23 2323 2323 ....);.}...#####\n-00024810: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00024820: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00024830: 2323 230a 7375 6220 7374 6f72 6544 6972 ###.sub storeDir\n-00024840: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n-00024850: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my\n-00024860: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('-\n-00024870: 6469 7227 2020 203d 3e20 756e 6465 662c dir' => undef,\n-00024880: 0a09 0920 2020 2027 2d64 6576 2720 2020 ... '-dev' \n-00024890: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-000248a0: 272d 696e 6f64 6527 203d 3e20 756e 6465 '-inode' => unde\n-000248b0: 662c 0a09 0920 2020 2027 2d63 7469 6d65 f,... '-ctime\n-000248c0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... \n-000248d0: 2020 272d 6d74 696d 6527 203d 3e20 756e '-mtime' => un\n-000248e0: 6465 662c 0a09 0920 2020 2027 2d61 7469 def,... '-ati\n-000248f0: 6d65 2720 3d3e 2075 6e64 6566 2c0a 0909 me' => undef,...\n-00024900: 2020 2020 272d 7569 6427 2020 203d 3e20 '-uid' => \n-00024910: 756e 6465 662c 0a09 0920 2020 2027 2d67 undef,... '-g\n-00024920: 6964 2720 2020 3d3e 2075 6e64 6566 2c0a id' => undef,.\n-00024930: 0909 2020 2020 272d 6d6f 6465 2720 203d .. '-mode' =\n-00024940: 3e20 756e 6465 660a 0909 2020 2020 293b > undef... );\n-00024950: 0a0a 2020 2020 263a 3a63 6865 636b 4f62 .. &::checkOb\n-00024960: 6a65 6374 5061 7261 6d73 285c 2570 6172 jectParams(\\%par\n-00024970: 616d 732c 205c 405f 2c20 2761 6b74 4669 ams, \\@_, 'aktFi\n-00024980: 6c65 6e61 6d65 3a3a 7374 6f72 6544 6972 lename::storeDir\n-00024990: 272c 0a09 0909 205b 272d 6469 7227 2c20 ',.... ['-dir', \n-000249a0: 272d 6465 7627 2c20 272d 696e 6f64 6527 '-dev', '-inode'\n-000249b0: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt\n-000249c0: 696d 6527 2c0a 0909 0920 2027 2d61 7469 ime',.... '-ati\n-000249d0: 6d65 272c 2027 2d75 6964 272c 2027 2d67 me', '-uid', '-g\n-000249e0: 6964 272c 2027 2d6d 6f64 6527 5d29 3b0a id', '-mode']);.\n-000249f0: 0a20 2020 206d 7920 2464 6972 203d 2024 . my $dir = $\n-00024a00: 7061 7261 6d73 7b27 2d64 6972 277d 3b0a params{'-dir'};.\n-00024a10: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p\n-00024a20: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. \n-00024a30: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $\n-00024a40: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'}\n-00024a50: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime \n-00024a60: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim\n-00024a70: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti\n-00024a80: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m\n-00024a90: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $\n-00024aa0: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{\n-00024ab0: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m\n-00024ac0: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params\n-00024ad0: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my\n-00024ae0: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{\n-00024af0: 272d 6769 6427 7d3b 0a20 2020 206d 7920 '-gid'};. my \n-00024b00: 246d 6f64 6520 3d20 2470 6172 616d 737b $mode = $params{\n-00024b10: 272d 6d6f 6465 277d 3b0a 0a20 2020 206d '-mode'};.. m\n-00024b20: 7920 2469 6e6f 6465 4261 636b 7570 203d y $inodeBackup =\n-00024b30: 2030 3b20 2020 2023 2069 7272 656c 6576 0; # irrelev\n-00024b40: 616e 740a 0a20 2020 2024 7365 6c66 2d3e ant.. $self->\n-00024b50: 7b27 7772 6974 6543 6865 636b 5375 6d46 {'writeCheckSumF\n-00024b60: 696c 6527 7d2d 3e77 7269 7465 2827 2d66 ile'}->write('-f\n-00024b70: 696c 656e 616d 6527 203d 3e20 2464 6972 ilename' => $dir\n-00024b80: 2c0a 0909 0909 0927 2d6d 6435 7375 6d27 ,......'-md5sum'\n-00024b90: 203d 3e20 2764 6972 272c 0a09 0909 0909 => 'dir',......\n-00024ba0: 272d 636f 6d70 7227 203d 3e20 302c 0a09 '-compr' => 0,..\n-00024bb0: 0909 0909 272d 6465 7627 203d 3e20 2464 ....'-dev' => $d\n-00024bc0: 6576 2c0a 0909 0909 0927 2d69 6e6f 6465 ev,......'-inode\n-00024bd0: 2720 3d3e 2024 696e 6f64 652c 0a09 0909 ' => $inode,....\n-00024be0: 0909 272d 696e 6f64 6542 6163 6b75 7027 ..'-inodeBackup'\n-00024bf0: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup\n-00024c00: 2c0a 0909 0909 0927 2d63 7469 6d65 2720 ,......'-ctime' \n-00024c10: 3d3e 2024 6374 696d 652c 0a09 0909 0909 => $ctime,......\n-00024c20: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti\n-00024c30: 6d65 2c0a 0909 0909 0927 2d61 7469 6d65 me,......'-atime\n-00024c40: 2720 3d3e 2024 6174 696d 652c 0a09 0909 ' => $atime,....\n-00024c50: 0909 272d 7369 7a65 2720 3d3e 2030 2c0a ..'-size' => 0,.\n-00024c60: 0909 0909 0927 2d75 6964 2720 3d3e 2024 .....'-uid' => $\n-00024c70: 7569 642c 0a09 0909 0909 272d 6769 6427 uid,......'-gid'\n-00024c80: 203d 3e20 2467 6964 2c0a 0909 0909 0927 => $gid,......'\n-00024c90: 2d6d 6f64 6527 203d 3e20 246d 6f64 650a -mode' => $mode.\n-00024ca0: 0909 0909 0929 3b0a 7d0a 0a0a 2323 2323 .....);.}...####\n-00024cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00024cc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00024cd0: 2323 2323 0a73 7562 2073 746f 7265 5379 ####.sub storeSy\n-00024ce0: 6d6c 696e 6b0a 7b0a 2020 2020 6d79 2024 mlink.{. my $\n-00024cf0: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. \n-00024d00: 2020 206d 7920 2825 7061 7261 6d73 2920 my (%params) \n-00024d10: 3d20 2827 2d73 796d 6c69 6e6b 2720 3d3e = ('-symlink' =>\n-00024d20: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00024d30: 6465 7627 2020 203d 3e20 756e 6465 662c dev' => undef,\n-00024d40: 0a09 0920 2020 2027 2d69 6e6f 6465 2720 ... '-inode' \n-00024d50: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-00024d60: 272d 6374 696d 6527 2020 203d 3e20 756e '-ctime' => un\n-00024d70: 6465 662c 0a09 0920 2020 2027 2d6d 7469 def,... '-mti\n-00024d80: 6d65 2720 2020 3d3e 2075 6e64 6566 2c0a me' => undef,.\n-00024d90: 0909 2020 2020 272d 6174 696d 6527 2020 .. '-atime' \n-00024da0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-00024db0: 2027 2d75 6964 2720 2020 2020 3d3e 2075 '-uid' => u\n-00024dc0: 6e64 6566 2c0a 0909 2020 2020 272d 6769 ndef,... '-gi\n-00024dd0: 6427 2020 2020 203d 3e20 756e 6465 662c d' => undef,\n-00024de0: 0a09 0920 2020 2029 3b0a 0a20 2020 2026 ... );.. &\n-00024df0: 3a3a 6368 6563 6b4f 626a 6563 7450 6172 ::checkObjectPar\n-00024e00: 616d 7328 5c25 7061 7261 6d73 2c20 5c40 ams(\\%params, \\@\n-00024e10: 5f2c 2027 616b 7446 696c 656e 616d 653a _, 'aktFilename:\n-00024e20: 3a73 746f 7265 5379 6d6c 696e 6b27 2c0a :storeSymlink',.\n-00024e30: 0909 0920 5b27 2d73 796d 6c69 6e6b 272c ... ['-symlink',\n-00024e40: 2027 2d64 6576 272c 2027 2d69 6e6f 6465 '-dev', '-inode\n-00024e50: 272c 2027 2d63 7469 6d65 272c 2027 2d6d ', '-ctime', '-m\n-00024e60: 7469 6d65 272c 0a09 0909 2020 272d 6174 time',.... '-at\n-00024e70: 696d 6527 2c20 272d 7569 6427 2c20 272d ime', '-uid', '-\n-00024e80: 6769 6427 5d29 3b0a 0a20 2020 206d 7920 gid']);.. my \n-00024e90: 2473 796d 6c69 6e6b 203d 2024 7061 7261 $symlink = $para\n-00024ea0: 6d73 7b27 2d73 796d 6c69 6e6b 277d 3b0a ms{'-symlink'};.\n-00024eb0: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p\n-00024ec0: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. \n-00024ed0: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $\n-00024ee0: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'}\n-00024ef0: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime \n-00024f00: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim\n-00024f10: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti\n-00024f20: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m\n-00024f30: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $\n-00024f40: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{\n-00024f50: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m\n-00024f60: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params\n-00024f70: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my\n-00024f80: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{\n-00024f90: 272d 6769 6427 7d3b 0a0a 2020 2020 6d79 '-gid'};.. my\n-00024fa0: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = \n-00024fb0: 303b 2020 2023 2069 7272 656c 6576 616e 0; # irrelevan\n-00024fc0: 740a 0a20 2020 2024 7365 6c66 2d3e 7b27 t.. $self->{'\n-00024fd0: 7772 6974 6543 6865 636b 5375 6d46 696c writeCheckSumFil\n-00024fe0: 6527 7d2d 3e77 7269 7465 2827 2d66 696c e'}->write('-fil\n-00024ff0: 656e 616d 6527 203d 3e20 2473 796d 6c69 ename' => $symli\n-00025000: 6e6b 2c0a 0909 0909 0927 2d6d 6435 7375 nk,......'-md5su\n-00025010: 6d27 203d 3e20 2773 796d 6c69 6e6b 272c m' => 'symlink',\n-00025020: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' =\n-00025030: 3e20 302c 0a09 0909 0909 272d 6465 7627 > 0,......'-dev'\n-00025040: 203d 3e20 2464 6576 2c0a 0909 0909 0927 => $dev,......'\n-00025050: 2d69 6e6f 6465 2720 3d3e 2024 696e 6f64 -inode' => $inod\n-00025060: 652c 0a09 0909 0909 272d 696e 6f64 6542 e,......'-inodeB\n-00025070: 6163 6b75 7027 203d 3e20 2469 6e6f 6465 ackup' => $inode\n-00025080: 4261 636b 7570 2c0a 0909 0909 0927 2d63 Backup,......'-c\n-00025090: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime,\n-000250a0: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' =\n-000250b0: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......'\n-000250c0: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim\n-000250d0: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' \n-000250e0: 3d3e 2030 2c0a 0909 0909 0927 2d75 6964 => 0,......'-uid\n-000250f0: 2720 3d3e 2024 7569 642c 0a09 0909 0909 ' => $uid,......\n-00025100: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,.\n-00025110: 0909 0909 0927 2d6d 6f64 6527 203d 3e20 .....'-mode' => \n-00025120: 300a 0909 0909 0929 3b0a 7d0a 0a0a 2323 0......);.}...##\n-00025130: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025140: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025150: 2323 2323 2323 0a73 7562 2073 746f 7265 ######.sub store\n-00025160: 4e61 6d65 6450 6970 650a 7b0a 2020 2020 NamedPipe.{. \n-00025170: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-00025180: 3b0a 0a20 2020 206d 7920 2825 7061 7261 ;.. my (%para\n-00025190: 6d73 2920 3d20 2827 2d70 6970 6527 2020 ms) = ('-pipe' \n-000251a0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-000251b0: 272d 6465 7627 2020 203d 3e20 756e 6465 '-dev' => unde\n-000251c0: 662c 0a09 0920 2020 2027 2d69 6e6f 6465 f,... '-inode\n-000251d0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... \n-000251e0: 2020 272d 6374 696d 6527 203d 3e20 756e '-ctime' => un\n-000251f0: 6465 662c 0a09 0920 2020 2027 2d6d 7469 def,... '-mti\n-00025200: 6d65 2720 3d3e 2075 6e64 6566 2c0a 0909 me' => undef,...\n-00025210: 2020 2020 272d 6174 696d 6527 203d 3e20 '-atime' => \n-00025220: 756e 6465 662c 0a09 0920 2020 2027 2d75 undef,... '-u\n-00025230: 6964 2720 2020 3d3e 2075 6e64 6566 2c0a id' => undef,.\n-00025240: 0909 2020 2020 272d 6769 6427 2020 203d .. '-gid' =\n-00025250: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n-00025260: 2d6d 6f64 6527 2020 3d3e 2075 6e64 6566 -mode' => undef\n-00025270: 0a09 0920 2020 2029 3b0a 0a20 2020 2026 ... );.. &\n-00025280: 3a3a 6368 6563 6b4f 626a 6563 7450 6172 ::checkObjectPar\n-00025290: 616d 7328 5c25 7061 7261 6d73 2c20 5c40 ams(\\%params, \\@\n-000252a0: 5f2c 2027 616b 7446 696c 656e 616d 653a _, 'aktFilename:\n-000252b0: 3a73 746f 7265 4e61 6d65 6450 6970 6527 :storeNamedPipe'\n-000252c0: 2c0a 0909 0920 5b27 2d70 6970 6527 2c20 ,.... ['-pipe', \n-000252d0: 272d 6374 696d 6527 2c20 272d 6d74 696d '-ctime', '-mtim\n-000252e0: 6527 2c20 272d 6174 696d 6527 2c0a 0909 e', '-atime',...\n-000252f0: 0920 2027 2d75 6964 272c 2027 2d67 6964 . '-uid', '-gid\n-00025300: 272c 2027 2d6d 6f64 6527 5d29 3b0a 0a20 ', '-mode']);.. \n-00025310: 2020 206d 7920 2470 6970 6520 3d20 2470 my $pipe = $p\n-00025320: 6172 616d 737b 272d 7069 7065 277d 3b0a arams{'-pipe'};.\n-00025330: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p\n-00025340: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. \n-00025350: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $\n-00025360: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'}\n-00025370: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime \n-00025380: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim\n-00025390: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti\n-000253a0: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m\n-000253b0: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $\n-000253c0: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{\n-000253d0: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m\n-000253e0: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params\n-000253f0: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my\n-00025400: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{\n-00025410: 272d 6769 6427 7d3b 0a20 2020 206d 7920 '-gid'};. my \n-00025420: 246d 6f64 6520 3d20 2470 6172 616d 737b $mode = $params{\n-00025430: 272d 6d6f 6465 277d 3b0a 0a20 2020 206d '-mode'};.. m\n-00025440: 7920 2469 6e6f 6465 4261 636b 7570 203d y $inodeBackup =\n-00025450: 2030 3b20 2020 2320 6972 7265 6c65 7661 0; # irreleva\n-00025460: 6e74 0a0a 2020 2020 2473 656c 662d 3e7b nt.. $self->{\n-00025470: 2777 7269 7465 4368 6563 6b53 756d 4669 'writeCheckSumFi\n-00025480: 6c65 277d 2d3e 7772 6974 6528 272d 6669 le'}->write('-fi\n-00025490: 6c65 6e61 6d65 2720 3d3e 2024 7069 7065 lename' => $pipe\n-000254a0: 2c0a 0909 0909 0927 2d6d 6435 7375 6d27 ,......'-md5sum'\n-000254b0: 203d 3e20 2770 6970 6527 2c0a 0909 0909 => 'pipe',.....\n-000254c0: 0927 2d63 6f6d 7072 2720 3d3e 2030 2c0a .'-compr' => 0,.\n-000254d0: 0909 0909 0927 2d64 6576 2720 3d3e 2024 .....'-dev' => $\n-000254e0: 6465 762c 0a09 0909 0909 272d 696e 6f64 dev,......'-inod\n-000254f0: 6527 203d 3e20 2469 6e6f 6465 2c0a 0909 e' => $inode,...\n-00025500: 0909 0927 2d69 6e6f 6465 4261 636b 7570 ...'-inodeBackup\n-00025510: 2720 3d3e 2024 696e 6f64 6542 6163 6b75 ' => $inodeBacku\n-00025520: 702c 0a09 0909 0909 272d 6374 696d 6527 p,......'-ctime'\n-00025530: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,.....\n-00025540: 0927 2d6d 7469 6d65 2720 3d3e 2024 6d74 .'-mtime' => $mt\n-00025550: 696d 652c 0a09 0909 0909 272d 6174 696d ime,......'-atim\n-00025560: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,...\n-00025570: 0909 0927 2d73 697a 6527 203d 3e20 302c ...'-size' => 0,\n-00025580: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => \n-00025590: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid\n-000255a0: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,......\n-000255b0: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode\n-000255c0: 0a09 0909 0909 293b 0a7d 0a0a 0a23 2323 ......);.}...###\n-000255d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000255e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000255f0: 2323 2323 230a 7375 6220 7374 6f72 6553 #####.sub storeS\n-00025600: 7065 6369 616c 0a7b 0a20 2020 206d 7920 pecial.{. my \n-00025610: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n-00025620: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params)\n-00025630: 203d 2028 272d 6e61 6d65 2720 203d 3e20 = ('-name' => \n-00025640: 756e 6465 662c 0a20 2020 2020 2020 2020 undef,. \n-00025650: 2020 2020 2020 2020 2020 2027 2d74 7970 '-typ\n-00025660: 6527 2020 3d3e 2075 6e64 6566 2c0a 0909 e' => undef,...\n-00025670: 2020 2020 272d 6465 7627 2020 203d 3e20 '-dev' => \n-00025680: 756e 6465 662c 0a09 0920 2020 2027 2d69 undef,... '-i\n-00025690: 6e6f 6465 2720 3d3e 2075 6e64 6566 2c0a node' => undef,.\n-000256a0: 0909 2020 2020 272d 6374 696d 6527 203d .. '-ctime' =\n-000256b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n-000256c0: 2d6d 7469 6d65 2720 3d3e 2075 6e64 6566 -mtime' => undef\n-000256d0: 2c0a 0909 2020 2020 272d 6174 696d 6527 ,... '-atime'\n-000256e0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-000256f0: 2027 2d75 6964 2720 2020 3d3e 2075 6e64 '-uid' => und\n-00025700: 6566 2c0a 0909 2020 2020 272d 6769 6427 ef,... '-gid'\n-00025710: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-00025720: 2020 2027 2d6d 6f64 6527 2020 3d3e 2075 '-mode' => u\n-00025730: 6e64 6566 0a09 0920 2020 2029 3b0a 0a20 ndef... );.. \n-00025740: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec\n-00025750: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\\%params\n-00025760: 2c20 5c40 5f2c 2027 616b 7446 696c 656e , \\@_, 'aktFilen\n-00025770: 616d 653a 3a73 746f 7265 5370 6563 6961 ame::storeSpecia\n-00025780: 6c27 2c0a 0909 0920 5b27 2d6e 616d 6527 l',.... ['-name'\n-00025790: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt\n-000257a0: 696d 6527 2c20 272d 6174 696d 6527 2c0a ime', '-atime',.\n-000257b0: 0909 0920 2027 2d75 6964 272c 2027 2d67 ... '-uid', '-g\n-000257c0: 6964 272c 2027 2d6d 6f64 6527 2c20 272d id', '-mode', '-\n-000257d0: 7479 7065 275d 293b 0a0a 2020 2020 6d79 type']);.. my\n-000257e0: 2024 6e61 6d65 203d 2024 7061 7261 6d73 $name = $params\n-000257f0: 7b27 2d6e 616d 6527 7d3b 0a20 2020 206d {'-name'};. m\n-00025800: 7920 2474 7970 6520 3d20 2470 6172 616d y $type = $param\n-00025810: 737b 272d 7479 7065 277d 3b0a 2020 2020 s{'-type'};. \n-00025820: 6d79 2024 6465 7620 3d20 2470 6172 616d my $dev = $param\n-00025830: 737b 272d 6465 7627 7d3b 0a20 2020 206d s{'-dev'};. m\n-00025840: 7920 2469 6e6f 6465 203d 2024 7061 7261 y $inode = $para\n-00025850: 6d73 7b27 2d69 6e6f 6465 277d 3b0a 2020 ms{'-inode'};. \n-00025860: 2020 6d79 2024 6374 696d 6520 3d20 2470 my $ctime = $p\n-00025870: 6172 616d 737b 272d 6374 696d 6527 7d3b arams{'-ctime'};\n-00025880: 0a20 2020 206d 7920 246d 7469 6d65 203d . my $mtime =\n-00025890: 2024 7061 7261 6d73 7b27 2d6d 7469 6d65 $params{'-mtime\n-000258a0: 277d 3b0a 2020 2020 6d79 2024 6174 696d '};. my $atim\n-000258b0: 6520 3d20 2470 6172 616d 737b 272d 6174 e = $params{'-at\n-000258c0: 696d 6527 7d3b 0a20 2020 206d 7920 2475 ime'};. my $u\n-000258d0: 6964 203d 2024 7061 7261 6d73 7b27 2d75 id = $params{'-u\n-000258e0: 6964 277d 3b0a 2020 2020 6d79 2024 6769 id'};. my $gi\n-000258f0: 6420 3d20 2470 6172 616d 737b 272d 6769 d = $params{'-gi\n-00025900: 6427 7d3b 0a20 2020 206d 7920 246d 6f64 d'};. my $mod\n-00025910: 6520 3d20 2470 6172 616d 737b 272d 6d6f e = $params{'-mo\n-00025920: 6465 277d 3b0a 0a20 2020 206d 7920 2469 de'};.. my $i\n-00025930: 6e6f 6465 4261 636b 7570 203d 2030 3b20 nodeBackup = 0; \n-00025940: 2020 2320 6972 7265 6c65 7661 6e74 0a0a # irrelevant..\n-00025950: 2020 2020 2474 7970 6520 3d20 2273 6f63 $type = \"soc\n-00025960: 6b65 7422 2069 6620 2474 7970 6520 6571 ket\" if $type eq\n-00025970: 2022 5322 3b0a 2020 2020 2474 7970 6520 \"S\";. $type \n-00025980: 3d20 2262 6c6f 636b 6465 7622 2069 6620 = \"blockdev\" if \n-00025990: 2474 7970 6520 6571 2022 6222 3b0a 2020 $type eq \"b\";. \n-000259a0: 2020 2474 7970 6520 3d20 2263 6861 7264 $type = \"chard\n-000259b0: 6576 2220 6966 2024 7479 7065 2065 7120 ev\" if $type eq \n-000259c0: 2263 223b 0a0a 2020 2020 2473 656c 662d \"c\";.. $self-\n-000259d0: 3e7b 2777 7269 7465 4368 6563 6b53 756d >{'writeCheckSum\n-000259e0: 4669 6c65 277d 2d3e 7772 6974 6528 272d File'}->write('-\n-000259f0: 6669 6c65 6e61 6d65 2720 3d3e 2024 6e61 filename' => $na\n-00025a00: 6d65 2c0a 0909 0909 0927 2d6d 6435 7375 me,......'-md5su\n-00025a10: 6d27 203d 3e20 2474 7970 652c 0a09 0909 m' => $type,....\n-00025a20: 0909 272d 636f 6d70 7227 203d 3e20 2775 ..'-compr' => 'u\n-00025a30: 272c 0a09 0909 0909 272d 6465 7627 203d ',......'-dev' =\n-00025a40: 3e20 2464 6576 2c0a 0909 0909 0927 2d69 > $dev,......'-i\n-00025a50: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode,\n-00025a60: 0a09 0909 0909 272d 696e 6f64 6542 6163 ......'-inodeBac\n-00025a70: 6b75 7027 203d 3e20 2469 6e6f 6465 4261 kup' => $inodeBa\n-00025a80: 636b 7570 2c0a 0909 0909 0927 2d63 7469 ckup,......'-cti\n-00025a90: 6d65 2720 3d3e 2024 6374 696d 652c 0a09 me' => $ctime,..\n-00025aa0: 0909 0909 272d 6d74 696d 6527 203d 3e20 ....'-mtime' => \n-00025ab0: 246d 7469 6d65 2c0a 0909 0909 0927 2d61 $mtime,......'-a\n-00025ac0: 7469 6d65 2720 3d3e 2024 6174 696d 652c time' => $atime,\n-00025ad0: 0a09 0909 0909 272d 7369 7a65 2720 3d3e ......'-size' =>\n-00025ae0: 2030 2c0a 0909 0909 0927 2d75 6964 2720 0,......'-uid' \n-00025af0: 3d3e 2024 7569 642c 0a09 0909 0909 272d => $uid,......'-\n-00025b00: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,...\n-00025b10: 0909 0927 2d6d 6f64 6527 203d 3e20 246d ...'-mode' => $m\n-00025b20: 6f64 650a 0909 0909 0929 3b0a 7d0a 0a0a ode......);.}...\n-00025b30: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-00025b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025b50: 2323 2323 2323 2323 230a 2320 666f 7220 #########.# for \n-00025b60: 7369 676e 616c 2068 616e 646c 696e 670a signal handling.\n-00025b70: 7375 6220 6465 6c49 6e66 6f46 696c 650a sub delInfoFile.\n-00025b80: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n-00025b90: 2073 6869 6674 3b0a 0a20 2020 2075 6e6c shift;.. unl\n-00025ba0: 696e 6b20 2473 656c 662d 3e7b 2769 6e66 ink $self->{'inf\n-00025bb0: 6f46 696c 6527 7d3b 0a7d 0a0a 0a23 2323 oFile'};.}...###\n-00025bc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025be0: 2323 2323 230a 7375 6220 636c 6f73 6549 #####.sub closeI\n-00025bf0: 6e66 6f46 696c 650a 7b0a 2020 2020 6d79 nfoFile.{. my\n-00025c00: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-00025c10: 0a20 2020 2024 7365 6c66 2d3e 7b27 7772 . $self->{'wr\n-00025c20: 6974 6543 6865 636b 5375 6d46 696c 6527 iteCheckSumFile'\n-00025c30: 7d2d 3e64 6573 7472 6f79 2829 3b0a 7d0a }->destroy();.}.\n-00025c40: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n-00025c50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025c70: 2323 2323 0a70 6163 6b61 6765 2072 6561 ####.package rea\n-00025c80: 6444 6972 4368 6563 6b53 697a 6554 696d dDirCheckSizeTim\n-00025c90: 653b 0a6f 7572 2040 4953 4120 3d20 7177 e;.our @ISA = qw\n-00025ca0: 2820 7265 6375 7273 6976 6552 6561 6444 ( recursiveReadD\n-00025cb0: 6972 2029 3b0a 0a23 2323 2323 2323 2323 ir );..#########\n-00025cc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00025cd0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00025ce0: 7375 6220 6e65 770a 7b0a 2020 2020 6d79 sub new.{. my\n-00025cf0: 2024 636c 6173 7320 3d20 7368 6966 743b $class = shift;\n-00025d00: 0a0a 2020 2020 6d79 2028 2570 6172 616d .. my (%param\n-00025d10: 7329 203d 2028 272d 6469 7227 2020 2020 s) = ('-dir' \n-00025d20: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n-00025d30: 2c20 2320 7a75 2064 7572 6368 7375 6368 , # zu durchsuch\n-00025d40: 656e 6465 7320 6469 7265 6374 6f72 790a endes directory.\n-00025d50: 0909 2020 2020 272d 6164 6d69 6e44 6972 .. '-adminDir\n-00025d60: 7327 2020 2020 2020 3d3e 2075 6e64 6566 s' => undef\n-00025d70: 2c20 2320 4f62 6a65 6b74 206d 6974 2049 , # Objekt mit I\n-00025d80: 6e66 6f73 2076 6f6e 0a09 0920 2020 2020 nfos von... \n-00025d90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025da0: 2020 2020 2020 2020 2020 2023 2056 6572 # Ver\n-00025db0: 7a65 6963 686e 6973 7365 6e0a 0909 2020 zeichnissen... \n-00025dc0: 2020 272d 6f6c 6446 696c 656e 616d 6527 '-oldFilename'\n-00025dd0: 2020 2020 3d3e 2075 6e64 6566 2c20 2320 => undef, # \n-00025de0: 4f62 6a65 6b74 206d 6974 2061 6c74 656e Objekt mit alten\n-00025df0: 2044 424d 7320 6574 632e 0a09 0920 2020 DBMs etc.... \n-00025e00: 2027 2d61 6b74 4669 6c65 6e61 6d65 2720 '-aktFilename' \n-00025e10: 2020 203d 3e20 756e 6465 662c 2023 204f => undef, # O\n-00025e20: 626a 656b 7420 66c3 bc72 206e 6575 6520 bjekt f..r neue \n-00025e30: 4d65 7461 2049 6e66 6f73 0a09 0920 2020 Meta Infos... \n-00025e40: 2027 2d61 6b74 4469 7227 2020 2020 2020 '-aktDir' \n-00025e50: 2020 203d 3e20 756e 6465 662c 2023 207a => undef, # z\n-00025e60: 7520 7369 6368 6572 6e64 6573 2044 6972 u sicherndes Dir\n-00025e70: 6563 746f 7279 0a09 0920 2020 2027 2d66 ectory... '-f\n-00025e80: 6f6c 6c6f 774c 696e 6b73 2720 2020 203d ollowLinks' =\n-00025e90: 3e20 302c 2020 2020 2023 2054 6965 6665 > 0, # Tiefe\n-00025ea0: 2c20 6269 7320 7a75 2064 6572 2073 796d , bis zu der sym\n-00025eb0: 6c69 6e6b 730a 0909 2020 2020 2020 2020 links... \n-00025ec0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025ed0: 2020 2020 2020 2020 2320 6765 666f 6c67 # gefolg\n-00025ee0: 7420 7765 7264 656e 2073 6f6c 6c0a 0909 t werden soll...\n-00025ef0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs\n-00025f00: 2720 2020 2020 3d3e 205b 5d2c 2020 2020 ' => [], \n-00025f10: 2320 4175 736e 6168 6d65 7665 727a 6569 # Ausnahmeverzei\n-00025f20: 6368 6e69 7373 650a 0909 2020 2020 272d chnisse... '-\n-00025f30: 696e 636c 7564 6544 6972 7327 2020 2020 includeDirs' \n-00025f40: 3d3e 205b 5d2c 2020 2020 2320 6f6e 6c79 => [], # only\n-00025f50: 2069 6e63 6c75 6465 2074 6865 7365 2064 include these d\n-00025f60: 6972 730a 0909 2020 2020 272d 7374 6179 irs... '-stay\n-00025f70: 496e 4669 6c65 5379 7374 656d 2720 3d3e InFileSystem' =>\n-00025f80: 2030 2c20 2020 2320 646f 6e27 7420 6c65 0, # don't le\n-00025f90: 6176 6520 6669 6c65 2073 7973 7465 6d2c ave file system,\n-00025fa0: 2062 7574 0a09 0920 2020 2020 2020 2020 but... \n-00025fb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025fc0: 2020 2020 2020 2023 2063 6f6e 7369 6465 # conside\n-00025fd0: 7220 2d2d 666f 6c6c 6f77 4c69 6e6b 730a r --followLinks.\n-00025fe0: 0909 2020 2020 272d 706f 7374 6669 7827 .. '-postfix'\n-00025ff0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n-00026000: 2c20 2320 506f 7374 6669 782c 2064 6572 , # Postfix, der\n-00026010: 206e 6163 6820 4b6f 6d70 722e 0a09 0920 nach Kompr.... \n-00026020: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00026030: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00026040: 2061 6e67 6568 c3a4 6e67 7420 7765 7264 angeh..ngt werd\n-00026050: 656e 2073 6f6c 6c0a 0909 2020 2020 272d en soll... '-\n-00026060: 696e 636c 7564 6552 756c 6527 2020 2020 includeRule' \n-00026070: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-00026080: 272d 6578 6365 7074 5275 6c65 2720 2020 '-exceptRule' \n-00026090: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-000260a0: 2020 272d 6368 6563 6b42 6c6f 636b 7352 '-checkBlocksR\n-000260b0: 756c 6527 203d 3e20 756e 6465 662c 0a09 ule' => undef,..\n-000260c0: 0920 2020 2027 2d77 7269 7465 4578 636c . '-writeExcl\n-000260d0: 7564 654c 6f67 273d 3e20 756e 6465 662c udeLog'=> undef,\n-000260e0: 0a09 0920 2020 2027 2d65 7854 7970 6573 ... '-exTypes\n-000260f0: 2720 2020 2020 2020 203d 3e20 756e 6465 ' => unde\n-00026100: 662c 0a09 0920 2020 2027 2d72 6573 6574 f,... '-reset\n-00026110: 4174 696d 6527 2020 2020 203d 3e20 756e Atime' => un\n-00026120: 6465 662c 0a20 2020 2020 2020 2020 2020 def,. \n-00026130: 2020 2020 2020 2020 2027 2d63 7049 7347 '-cpIsG\n-00026140: 6e75 2720 2020 2020 2020 203d 3e20 756e nu' => un\n-00026150: 6465 662c 0a09 0920 2020 2027 2d64 6562 def,... '-deb\n-00026160: 7567 4d6f 6465 2720 2020 2020 203d 3e20 ugMode' => \n-00026170: 756e 6465 662c 0a09 0920 2020 2027 2d76 undef,... '-v\n-00026180: 6572 626f 7365 2720 2020 2020 2020 203d erbose' =\n-00026190: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n-000261a0: 2d74 6d70 6469 7227 2020 2020 2020 2020 -tmpdir' \n-000261b0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... \n-000261c0: 2027 2d70 724c 6f67 2720 2020 2020 2020 '-prLog' \n-000261d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-000261e0: 2020 2027 2d70 724c 6f67 4572 726f 7227 '-prLogError'\n-000261f0: 2020 2020 203d 3e20 2745 272c 0a09 0920 => 'E',... \n-00026200: 2020 2027 2d70 724c 6f67 5761 726e 2720 '-prLogWarn' \n-00026210: 2020 2020 203d 3e20 2757 272c 0a09 0920 => 'W',... \n-00026220: 2020 2027 2d65 7869 7449 6645 7272 6f72 '-exitIfError\n-00026230: 2720 2020 203d 3e20 312c 2020 2020 2020 ' => 1, \n-00026240: 2320 4572 726f 7263 6f64 6520 6265 6920 # Errorcode bei \n-00026250: 4665 686c 6572 0a09 0920 2020 2027 2d69 Fehler... '-i\n-00026260: 676e 6f72 6552 6561 6445 7272 6f72 2720 gnoreReadError' \n-00026270: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... '\n-00026280: 2d69 676e 6f72 6554 696d 6527 2020 2020 -ignoreTime' \n-00026290: 203d 3e20 276e 6f6e 6527 2c0a 0909 2020 => 'none',... \n-000262a0: 2020 272d 7072 696e 7444 6570 7468 2720 '-printDepth' \n-000262b0: 2020 2020 3d3e 2075 6e64 6566 0a09 0920 => undef... \n-000262c0: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch\n-000262d0: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams(\n-000262e0: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \\%params, \\@_, '\n-000262f0: 7265 6164 4469 7243 6865 636b 5369 7a65 readDirCheckSize\n-00026300: 5469 6d65 3a3a 6e65 7727 2c0a 0909 0920 Time::new',.... \n-00026310: 5b27 2d64 6972 272c 2027 2d6f 6c64 4669 ['-dir', '-oldFi\n-00026320: 6c65 6e61 6d65 272c 2027 2d61 6b74 4469 lename', '-aktDi\n-00026330: 7227 2c20 272d 6578 5479 7065 7327 2c0a r', '-exTypes',.\n-00026340: 0909 0920 2027 2d70 6f73 7466 6978 272c ... '-postfix',\n-00026350: 2027 2d61 646d 696e 4469 7273 272c 2027 '-adminDirs', '\n-00026360: 2d70 724c 6f67 272c 0a09 0909 2020 272d -prLog',.... '-\n-00026370: 7072 696e 7444 6570 7468 275d 293b 0a0a printDepth']);..\n-00026380: 2020 2020 6966 2028 6465 6669 6e65 6420 if (defined \n-00026390: 2470 6172 616d 737b 2d64 6972 7d29 0a20 $params{-dir}). \n-000263a0: 2020 207b 0a09 2470 6172 616d 737b 272d {..$params{'-\n-000263b0: 6469 7227 7d20 3d7e 2073 2f5c 2f5c 2f2f dir'} =~ s/\\/\\//\n-000263c0: 5c2f 2f67 3b20 2020 2020 2020 2023 202f \\//g; # /\n-000263d0: 2f20 2d3e 202f 0a09 2470 6172 616d 737b / -> /..$params{\n-000263e0: 272d 6469 7227 7d20 3d7e 2073 2f5c 4128 '-dir'} =~ s/\\A(\n-000263f0: 2e2b 295c 2f5c 5a2f 2431 2f3b 2020 2023 .+)\\/\\Z/$1/; #\n-00026400: 2072 656d 6f76 6520 7472 6169 6c69 6e67 remove trailing\n-00026410: 202f 0a20 2020 207d 0a0a 2020 2020 6d79 /. }.. my\n-00026420: 2024 7365 6c66 203d 2072 6563 7572 7369 $self = recursi\n-00026430: 7665 5265 6164 4469 722d 3e6e 6577 2827 veReadDir->new('\n-00026440: 2d64 6972 7327 203d 3e20 5b24 7061 7261 -dirs' => [$para\n-00026450: 6d73 7b27 2d64 6972 277d 5d2c 0a09 0909 ms{'-dir'}],....\n-00026460: 0920 2020 2020 272d 666f 6c6c 6f77 4c69 . '-followLi\n-00026470: 6e6b 7327 203d 3e20 2470 6172 616d 737b nks' => $params{\n-00026480: 272d 666f 6c6c 6f77 4c69 6e6b 7327 7d2c '-followLinks'},\n-00026490: 0a09 0909 0920 2020 2020 272d 7374 6179 ..... '-stay\n-000264a0: 496e 4669 6c65 5379 7374 656d 2720 3d3e InFileSystem' =>\n-000264b0: 0a09 0909 0920 2020 2020 2020 2020 2470 ..... $p\n-000264c0: 6172 616d 737b 272d 7374 6179 496e 4669 arams{'-stayInFi\n-000264d0: 6c65 5379 7374 656d 277d 2c0a 0909 0909 leSystem'},.....\n-000264e0: 2020 2020 2027 2d65 7863 6570 7444 6972 '-exceptDir\n-000264f0: 7327 203d 3e20 2470 6172 616d 737b 272d s' => $params{'-\n-00026500: 6578 6365 7074 4469 7273 277d 2c0a 0909 exceptDirs'},...\n-00026510: 0909 2020 2020 2027 2d69 6e63 6c75 6465 .. '-include\n-00026520: 4469 7273 2720 3d3e 2024 7061 7261 6d73 Dirs' => $params\n-00026530: 7b27 2d69 6e63 6c75 6465 4469 7273 277d {'-includeDirs'}\n-00026540: 2c0a 0909 0909 2020 2020 2027 2d70 724c ,..... '-prL\n-00026550: 6f67 2720 3d3e 2024 7061 7261 6d73 7b27 og' => $params{'\n-00026560: 2d70 724c 6f67 277d 2c0a 0909 0909 2020 -prLog'},..... \n-00026570: 2020 2027 2d70 724c 6f67 4572 726f 7227 '-prLogError'\n-00026580: 203d 3e20 2470 6172 616d 737b 272d 7072 => $params{'-pr\n-00026590: 4c6f 6745 7272 6f72 277d 2c0a 0909 0909 LogError'},.....\n-000265a0: 2020 2020 2027 2d70 724c 6f67 5761 726e '-prLogWarn\n-000265b0: 2720 3d3e 2024 7061 7261 6d73 7b27 2d70 ' => $params{'-p\n-000265c0: 724c 6f67 5761 726e 277d 2c0a 0909 0909 rLogWarn'},.....\n-000265d0: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' \n-000265e0: 3d3e 2024 7061 7261 6d73 7b27 2d76 6572 => $params{'-ver\n-000265f0: 626f 7365 277d 2c0a 0909 0909 2020 2020 bose'},..... \n-00026600: 2027 2d65 7869 7449 6645 7272 6f72 2720 '-exitIfError' \n-00026610: 3d3e 2024 7061 7261 6d73 7b27 2d65 7869 => $params{'-exi\n-00026620: 7449 6645 7272 6f72 277d 2c0a 0909 0909 tIfError'},.....\n-00026630: 2020 2020 2027 2d70 7269 6e74 4465 7074 '-printDept\n-00026640: 6827 203d 3e20 2470 6172 616d 737b 272d h' => $params{'-\n-00026650: 7072 696e 7444 6570 7468 277d 2c0a 0909 printDepth'},...\n-00026660: 0909 2020 2020 2027 2d70 7269 6e74 4465 .. '-printDe\n-00026670: 7074 6850 726c 6f67 4b69 6e64 2720 3d3e pthPrlogKind' =>\n-00026680: 2027 5027 0a09 0909 0920 2020 2020 293b 'P'..... );\n-00026690: 0a20 2020 2026 3a3a 7365 7450 6172 616d . &::setParam\n-000266a0: 7344 6972 6563 7428 2473 656c 662c 205c sDirect($self, \\\n-000266b0: 2570 6172 616d 7329 3b0a 2020 2020 2473 %params);. $s\n-000266c0: 656c 662d 3e7b 2761 6b74 496e 666f 4669 elf->{'aktInfoFi\n-000266d0: 6c65 277d 203d 2024 7061 7261 6d73 7b27 le'} = $params{'\n-000266e0: 2d61 646d 696e 4469 7273 277d 2d3e 6765 -adminDirs'}->ge\n-000266f0: 7441 6b74 496e 666f 4669 6c65 2829 3b0a tAktInfoFile();.\n-00026700: 0a20 2020 2024 7365 6c66 2d3e 7b27 6d64 . $self->{'md\n-00026710: 3546 6f72 6b27 7d20 3d20 756e 6465 663b 5Fork'} = undef;\n-00026720: 2020 2020 2020 2320 6573 206c c3a4 7566 # es l..uf\n-00026730: 7420 6b65 696e 2070 6172 616c 6c65 6c65 t kein parallele\n-00026740: 7320 6d64 3573 756d 0a0a 2020 2020 6966 s md5sum.. if\n-00026750: 2028 2473 656c 662d 3e7b 2777 7269 7465 ($self->{'write\n-00026760: 4578 636c 7564 654c 6f67 277d 290a 2020 ExcludeLog'}). \n-00026770: 2020 7b0a 096d 7920 2477 636c 203d 2024 {..my $wcl = $\n-00026780: 7365 6c66 2d3e 7b27 7772 6974 6545 7863 self->{'writeExc\n-00026790: 6c75 6465 4c6f 6727 7d3b 0a09 6d79 2024 ludeLog'};..my $\n-000267a0: 6578 636c 4c6f 6720 3d20 7069 7065 546f exclLog = pipeTo\n-000267b0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec\n-000267c0: 2720 3d3e 2027 627a 6970 3227 2c0a 0909 ' => 'bzip2',...\n-000267d0: 0909 2020 2020 2020 272d 7374 646f 7574 .. '-stdout\n-000267e0: 2720 3d3e 2024 7763 6c2c 0a09 0909 0920 ' => $wcl,..... \n-000267f0: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom\n-00026800: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => \"$tmpdir/st\n-00026810: 6275 5069 7065 546f 3131 2d22 2c0a 0909 buPipeTo11-\",...\n-00026820: 0909 2020 2020 2020 272d 6465 6c53 7464 .. '-delStd\n-00026830: 6f75 7427 203d 3e20 276e 6f27 2c0a 0909 out' => 'no',...\n-00026840: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog'\n-00026850: 203d 3e20 2470 724c 6f67 293b 0a09 2473 => $prLog);..$s\n-00026860: 656c 662d 3e7b 2765 7863 6c4c 6f67 277d elf->{'exclLog'}\n-00026870: 203d 2024 6578 636c 4c6f 673b 0a20 2020 = $exclLog;. \n-00026880: 207d 0a0a 2020 2020 626c 6573 7320 2473 }.. bless $s\n-00026890: 656c 662c 2024 636c 6173 733b 0a7d 0a0a elf, $class;.}..\n-000268a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-000268b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000268c0: 2323 2323 2323 2323 230a 2320 6c69 6566 #########.# lief\n-000268d0: 6572 7420 4261 7369 7376 6572 7a65 6963 ert Basisverzeic\n-000268e0: 686e 6973 2c20 6461 7a75 2072 656c 6174 hnis, dazu relat\n-000268f0: 6976 656e 2044 6174 6569 6e61 6d65 6e20 iven Dateinamen \n-00026900: 756e 6420 4669 6c65 7479 700a 7375 6220 und Filetyp.sub \n-00026910: 6e65 7874 0a7b 0a20 2020 206d 7920 2473 next.{. my $s\n-00026920: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. \n-00026930: 2020 6d79 2028 2466 2c20 2474 7970 6573 my ($f, $types\n-00026940: 293b 0a20 2020 206d 7920 246e 203d 2028 );. my $n = (\n-00026950: 2466 2c20 2474 7970 6573 2920 3d20 2473 $f, $types) = $s\n-00026960: 656c 662d 3e72 6563 7572 7369 7665 5265 elf->recursiveRe\n-00026970: 6164 4469 723a 3a6e 6578 7428 293b 0a0a adDir::next();..\n-00026980: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{\n-00026990: 276d 6435 466f 726b 277d 2061 6e64 2024 'md5Fork'} and $\n-000269a0: 6e20 3d3d 2030 290a 2020 2020 7b0a 2020 n == 0). {. \n-000269b0: 2020 2020 2020 2320 4966 2074 6865 7265 # If there\n-000269c0: 2077 6572 6520 6e6f 2064 6972 2773 206c were no dir's l\n-000269d0: 6566 7420 746f 2063 6865 636b 2c20 7265 eft to check, re\n-000269e0: 6164 4469 7220 6d61 7920 6e6f 7420 6861 adDir may not ha\n-000269f0: 7665 0a20 2020 2020 2020 2023 2062 6565 ve. # bee\n-00026a00: 6e20 6361 6c6c 6564 2062 7920 7468 6520 n called by the \n-00026a10: 6e65 7874 2829 2063 616c 6c20 6162 6f76 next() call abov\n-00026a20: 652e 2057 6520 6861 7665 2074 6f20 6361 e. We have to ca\n-00026a30: 6c6c 2069 740a 2020 2020 2020 2020 2320 ll it. # \n-00026a40: 6d61 6e75 616c 6c79 2074 6f20 6368 6563 manually to chec\n-00026a50: 6b20 7768 6574 6865 7220 7468 6520 6d64 k whether the md\n-00026a60: 3520 7072 6f63 6573 7320 6973 2066 696e 5 process is fin\n-00026a70: 6973 6865 6420 2861 6e64 0a20 2020 2020 ished (and. \n-00026a80: 2020 2023 2069 6620 736f 2c20 7265 7472 # if so, retr\n-00026a90: 6965 7665 2074 6865 2072 6573 756c 7473 ieve the results\n-00026aa0: 290a 0924 7365 6c66 2d3e 7265 6164 4469 )..$self->readDi\n-00026ab0: 7228 293b 0a09 7265 7475 726e 2028 2920 r();..return () \n-00026ac0: 6966 2028 407b 2473 656c 662d 3e7b 2766 if (@{$self->{'f\n-00026ad0: 696c 6573 277d 7d20 3d3d 2030 293b 0a20 iles'}} == 0);. \n-00026ae0: 2020 2020 2020 2024 6620 3d20 7368 6966 $f = shif\n-00026af0: 7420 407b 2473 656c 662d 3e7b 2766 696c t @{$self->{'fil\n-00026b00: 6573 277d 7d3b 0a09 2474 7970 6573 203d es'}};..$types =\n-00026b10: 2073 6869 6674 2040 7b24 7365 6c66 2d3e shift @{$self->\n-00026b20: 7b27 7479 7065 7327 7d7d 3b0a 2020 2020 {'types'}};. \n-00026b30: 7d0a 2020 2020 656c 7369 6620 2824 6e20 }. elsif ($n \n-00026b40: 3d3d 2030 290a 2020 2020 7b0a 0972 6574 == 0). {..ret\n-00026b50: 7572 6e20 2829 3b0a 2020 2020 7d0a 0a20 urn ();. }.. \n-00026b60: 2020 206d 7920 246d 6435 203d 2073 6869 my $md5 = shi\n-00026b70: 6674 2040 7b24 7365 6c66 2d3e 7b27 6d64 ft @{$self->{'md\n-00026b80: 3527 7d7d 3b0a 2020 2020 2320 2466 207a 5'}};. # $f z\n-00026b90: 6572 6c65 6765 6e20 696e 2076 6f72 6765 erlegen in vorge\n-00026ba0: 6765 6265 6e65 6e20 5465 696c 2075 6e64 gebenen Teil und\n-00026bb0: 2072 656c 6174 6976 656e 0a20 2020 206d relativen. m\n-00026bc0: 7920 2464 6972 203d 2024 7365 6c66 2d3e y $dir = $self->\n-00026bd0: 7b27 6469 7227 7d3b 0a20 2020 206d 7920 {'dir'};. my \n-00026be0: 2466 696c 6520 3d20 263a 3a73 7562 7374 $file = &::subst\n-00026bf0: 7261 6374 5061 7468 2824 662c 2024 6469 ractPath($f, $di\n-00026c00: 7229 3b0a 0a20 2020 2072 6574 7572 6e20 r);.. return \n-00026c10: 2824 6469 722c 2024 6669 6c65 2c20 246d ($dir, $file, $m\n-00026c20: 6435 2c20 2474 7970 6573 293b 0a7d 0a0a d5, $types);.}..\n-00026c30: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-00026c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00026c50: 2323 2323 2323 2323 230a 2320 7769 7264 #########.# wird\n-00026c60: 2076 6f6e 2025 696e 5072 6f67 7265 7373 von %inProgress\n-00026c70: 2069 6e20 5363 6865 6475 6c65 723a 3a6e in Scheduler::n\n-00026c80: 6f72 6d61 6c4f 7065 7261 7469 6f6e 2062 ormalOperation b\n-00026c90: 656e c3b6 7469 6774 0a73 7562 2070 7573 en..tigt.sub pus\n-00026ca0: 6862 6163 6b0a 7b0a 2020 2020 6d79 2024 hback.{. my $\n-00026cb0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n-00026cc0: 2020 6d79 2024 6c69 7374 203d 2073 6869 my $list = shi\n-00026cd0: 6674 3b20 2020 2020 2320 4c69 7374 6520 ft; # Liste \n-00026ce0: 6d69 7420 4c69 7374 656e 2076 6f6e 2028 mit Listen von (\n-00026cf0: 2464 6972 2c20 2466 696c 652c 2024 6d64 $dir, $file, $md\n-00026d00: 352c 2024 7479 7065 7329 0a20 2020 206d 5, $types). m\n-00026d10: 7920 2470 724c 6f67 203d 2073 6869 6674 y $prLog = shift\n-00026d20: 3b0a 2020 2020 6d79 2024 6465 6275 6720 ;. my $debug \n-00026d30: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my\n-00026d40: 2024 6c3b 0a20 2020 2066 6f72 6561 6368 $l;. foreach\n-00026d50: 2024 6c20 2840 246c 6973 7429 0a20 2020 $l (@$list). \n-00026d60: 207b 0a09 6d79 2028 2464 6972 2c20 2466 {..my ($dir, $f\n-00026d70: 696c 652c 2024 6d64 352c 2024 7479 7065 ile, $md5, $type\n-00026d80: 2920 3d20 2840 246c 293b 0a09 2470 724c ) = (@$l);..$prL\n-00026d90: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00026da0: 2720 3d3e 2027 4427 2c0a 0909 2020 2020 ' => 'D',... \n-00026db0: 2020 272d 7374 7227 203d 3e20 5b22 6368 '-str' => [\"ch\n-00026dc0: 6563 6b69 6e67 206f 6620 6964 656e 7469 ecking of identi\n-00026dd0: 6361 6c20 6669 6c65 203c 2466 696c 653e cal file <$file>\n-00026de0: 225d 290a 0920 2020 2069 6620 2464 6562 \"]).. if $deb\n-00026df0: 7567 3b0a 0970 7573 6820 407b 2473 656c ug;..push @{$sel\n-00026e00: 662d 3e7b 2766 696c 6573 277d 7d2c 2022 f->{'files'}}, \"\n-00026e10: 2464 6972 2f24 6669 6c65 223b 0a09 7075 $dir/$file\";..pu\n-00026e20: 7368 2040 7b24 7365 6c66 2d3e 7b27 6d64 sh @{$self->{'md\n-00026e30: 3527 7d7d 2c20 246d 6435 3b0a 0970 7573 5'}}, $md5;..pus\n-00026e40: 6820 407b 2473 656c 662d 3e7b 2774 7970 h @{$self->{'typ\n-00026e50: 6573 277d 7d2c 2024 7479 7065 3b0a 2020 es'}}, $type;. \n-00026e60: 2020 7d0a 7d0a 0a0a 2323 2323 2323 2323 }.}...########\n-00026e70: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00026e80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00026e90: 0a73 7562 2072 6561 6444 6972 0a7b 0a20 .sub readDir.{. \n-00026ea0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n-00026eb0: 6966 743b 0a0a 2020 2020 6d79 2024 7072 ift;.. my $pr\n-00026ec0: 4c6f 6720 3d20 2473 656c 662d 3e7b 2770 Log = $self->{'p\n-00026ed0: 724c 6f67 277d 3b0a 2020 2020 6d79 2024 rLog'};. my $\n-00026ee0: 706f 7374 6669 7820 3d20 2473 656c 662d postfix = $self-\n-00026ef0: 3e7b 2770 6f73 7466 6978 277d 3b0a 2020 >{'postfix'};. \n-00026f00: 2020 6d79 2024 616b 7446 696c 656e 616d my $aktFilenam\n-00026f10: 6520 3d20 2473 656c 662d 3e7b 2761 6b74 e = $self->{'akt\n-00026f20: 4669 6c65 6e61 6d65 277d 3b0a 2020 2020 Filename'};. \n-00026f30: 6d79 2024 6465 6275 674d 6f64 6520 3d20 my $debugMode = \n-00026f40: 2473 656c 662d 3e7b 2764 6562 7567 4d6f $self->{'debugMo\n-00026f50: 6465 277d 3b0a 2020 2020 6d79 2024 7665 de'};. my $ve\n-00026f60: 7262 6f73 6520 3d20 2473 656c 662d 3e7b rbose = $self->{\n-00026f70: 2776 6572 626f 7365 277d 3b0a 2020 2020 'verbose'};. \n-00026f80: 6d79 2024 676e 7563 7020 3d20 2473 656c my $gnucp = $sel\n-00026f90: 662d 3e7b 2763 7049 7347 6e75 277d 3b0a f->{'cpIsGnu'};.\n-00026fa0: 0a20 2020 206d 7920 2465 7863 6570 7452 . my $exceptR\n-00026fb0: 756c 6520 3d20 2473 656c 662d 3e7b 2765 ule = $self->{'e\n-00026fc0: 7863 6570 7452 756c 6527 7d3b 0a20 2020 xceptRule'};. \n-00026fd0: 206d 7920 2469 6e63 6c75 6465 5275 6c65 my $includeRule\n-00026fe0: 203d 2024 7365 6c66 2d3e 7b27 696e 636c = $self->{'incl\n-00026ff0: 7564 6552 756c 6527 7d3b 0a20 2020 206d udeRule'};. m\n-00027000: 7920 2463 6865 636b 426c 6f63 6b73 5275 y $checkBlocksRu\n-00027010: 6c65 203d 2024 7365 6c66 2d3e 7b27 6368 le = $self->{'ch\n-00027020: 6563 6b42 6c6f 636b 7352 756c 6527 7d3b eckBlocksRule'};\n-00027030: 0a20 2020 206d 7920 2465 7869 6e63 6c50 . my $exinclP\n-00027040: 6174 7446 6c61 6720 3d0a 0924 6578 6365 attFlag =..$exce\n-00027050: 7074 5275 6c65 2d3e 6861 734c 696e 6528 ptRule->hasLine(\n-00027060: 2920 2b20 2469 6e63 6c75 6465 5275 6c65 ) + $includeRule\n-00027070: 2d3e 6861 734c 696e 6528 293b 0a20 2020 ->hasLine();. \n-00027080: 206d 7920 2465 7854 7970 6573 203d 2024 my $exTypes = $\n-00027090: 7365 6c66 2d3e 7b27 6578 5479 7065 7327 self->{'exTypes'\n-000270a0: 7d3b 0a20 2020 206d 7920 2477 7269 7465 };. my $write\n-000270b0: 4578 636c 7564 654c 6f67 203d 2024 7365 ExcludeLog = $se\n-000270c0: 6c66 2d3e 7b27 7772 6974 6545 7863 6c75 lf->{'writeExclu\n-000270d0: 6465 4c6f 6727 7d3b 0a20 2020 206d 7920 deLog'};. my \n-000270e0: 2465 7863 6c4c 6f67 203d 2024 7365 6c66 $exclLog = $self\n-000270f0: 2d3e 7b27 6578 636c 4c6f 6727 7d20 6966 ->{'exclLog'} if\n-00027100: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo\n-00027110: 673b 0a0a 2020 2020 6d79 2028 4066 696c g;.. my (@fil\n-00027120: 6573 2920 3d20 2829 3b0a 2020 2020 6d79 es) = ();. my\n-00027130: 2028 406d 6435 2920 3d20 2829 3b0a 2020 (@md5) = ();. \n-00027140: 2020 6d79 2028 4074 7970 6573 2920 3d20 my (@types) = \n-00027150: 2829 3b0a 0a20 2020 206d 7920 246f 6c64 ();.. my $old\n-00027160: 4669 6c65 6e61 6d65 203d 2024 7365 6c66 Filename = $self\n-00027170: 2d3e 7b27 6f6c 6446 696c 656e 616d 6527 ->{'oldFilename'\n-00027180: 7d3b 0a20 2020 206d 7920 2474 6d70 6469 };. my $tmpdi\n-00027190: 7220 3d20 2473 656c 662d 3e7b 2774 6d70 r = $self->{'tmp\n-000271a0: 6469 7227 7d3b 0a20 2020 206d 7920 2469 dir'};. my $i\n-000271b0: 676e 6f72 6554 696d 6520 3d20 2473 656c gnoreTime = $sel\n-000271c0: 662d 3e7b 2769 676e 6f72 6554 696d 6527 f->{'ignoreTime'\n-000271d0: 7d3b 0a0a 0a20 2020 2023 204d 4435 206c };... # MD5 l\n-000271e0: c3a4 7566 742c 2077 656e 6e20 6dc3 b667 ..uft, wenn m..g\n-000271f0: 6c69 6368 204d 4435 2053 756d 6d65 6e20 lich MD5 Summen \n-00027200: 766f 6d20 5061 7261 6c6c 656c 7072 6f7a vom Parallelproz\n-00027210: 6573 7320 686f 6c65 6e0a 2020 2020 6966 ess holen. if\n-00027220: 2028 2473 656c 662d 3e7b 276d 6435 466f ($self->{'md5Fo\n-00027230: 726b 277d 2061 6e64 0a20 2020 2020 2020 rk'} and. \n-00027240: 206e 6f74 2024 7365 6c66 2d3e 7b27 6d64 not $self->{'md\n-00027250: 3546 6f72 6b27 7d2d 3e70 726f 6365 7373 5Fork'}->process\n-00027260: 5275 6e73 2829 290a 2020 2020 7b0a 2020 Runs()). {. \n-00027270: 2020 2020 2020 6d79 2024 7374 6465 7272 my $stderr\n-00027280: 203d 2024 7365 6c66 2d3e 7b27 6d64 3546 = $self->{'md5F\n-00027290: 6f72 6b27 7d2d 3e67 6574 5354 4445 5252 ork'}->getSTDERR\n-000272a0: 2829 3b0a 2020 2020 2020 2020 6d79 2824 ();. my($\n-000272b0: 6c29 3b0a 2020 2020 2020 2020 2470 724c l);. $prL\n-000272c0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000272d0: 2720 3d3e 2027 4527 2c0a 2020 2020 2020 ' => 'E',. \n-000272e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000272f0: 272d 7374 7227 203d 3e0a 2020 2020 2020 '-str' =>. \n-00027300: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00027310: 5b22 666f 726b 206f 6620 6d64 3573 756d [\"fork of md5sum\n-00027320: 2067 656e 6572 6174 6564 2074 6865 2066 generated the f\n-00027330: 6f6c 6c6f 7769 6e67 2065 7272 6f72 733a ollowing errors:\n-00027340: 222c 0a20 2020 2020 2020 2020 2020 2020 \",. \n-00027350: 2020 2020 2020 2020 2020 4024 7374 6465 @$stde\n-00027360: 7272 5d29 0a20 2020 2020 2020 2020 2020 rr]). \n-00027370: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > \n-00027380: 3029 3b0a 2020 2020 2020 2020 6d79 2024 0);. my $\n-00027390: 7374 646f 7574 203d 2024 7365 6c66 2d3e stdout = $self->\n-000273a0: 7b27 6d64 3546 6f72 6b27 7d2d 3e67 6574 {'md5Fork'}->get\n-000273b0: 5354 444f 5554 2829 3b0a 2020 2020 2020 STDOUT();. \n-000273c0: 2020 666f 7265 6163 6820 246c 2028 4024 foreach $l (@$\n-000273d0: 7374 646f 7574 290a 2020 2020 2020 2020 stdout). \n-000273e0: 7b0a 2020 2020 2020 2020 2020 2020 6966 {. if\n-000273f0: 2028 246c 203d 7e20 2f5c 415c 5c2f 2920 ($l =~ /\\A\\\\/) \n-00027400: 2023 2022 5c22 2061 6d20 5a65 696c 656e # \"\\\" am Zeilen\n-00027410: 616e 6661 6e67 202d 3e20 6573 2077 6972 anfang -> es wir\n-00027420: 6420 6765 7175 6f74 6574 0a20 2020 2020 d gequotet. \n-00027430: 2020 2020 2020 207b 0a20 2020 2020 2020 {. \n-00027440: 2020 2020 2020 2020 2024 6c20 3d7e 2073 $l =~ s\n-00027450: 2f5c 5c6e 2f5c 6e2f 673b 2020 2023 2022 /\\\\n/\\n/g; # \"\n-00027460: 5c6e 2220 696d 204e 616d 656e 2077 6972 \\n\" im Namen wir\n-00027470: 6420 766f 6e20 6d64 3573 756d 207a 750a d von md5sum zu.\n-00027480: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00027490: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000274a0: 2020 2020 2320 225c 5c6e 2220 6765 6d61 # \"\\\\n\" gema\n-000274b0: 6368 742c 0a20 2020 2020 2020 2020 2020 cht,. \n-000274c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000274d0: 2020 2020 2020 2020 2023 207a 7572 c3bc # zur..\n-000274e0: 636b 6b6f 6e76 6572 7469 6572 656e 210a ckkonvertieren!.\n-000274f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00027500: 246c 203d 7e20 732f 5c5c 5c5c 2f5c 5c2f $l =~ s/\\\\\\\\/\\\\/\n-00027510: 6f67 3b20 2320 4261 636b 736c 6173 680a og; # Backslash.\n-00027520: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00027530: 246c 203d 7e20 732f 5c41 5c5c 2f2f 3b20 $l =~ s/\\A\\\\//; \n-00027540: 2020 2020 2320 225c 5c22 2061 6d20 5a65 # \"\\\\\" am Ze\n-00027550: 696c 656e 616e 6661 6e67 2065 6e74 6665 ilenanfang entfe\n-00027560: 726e 656e 0a0a 2020 2020 2020 2020 2020 rnen.. \n-00027570: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n-00027580: 6d79 2028 246d 6435 2c20 2466 2920 3d20 my ($md5, $f) = \n-00027590: 246c 203d 7e20 2f5c 4128 5c77 2b29 5c73 $l =~ /\\A(\\w+)\\s\n-000275a0: 2b28 2e2a 292f 733b 0a20 2020 2020 2020 +(.*)/s;. \n-000275b0: 2020 2020 2070 7573 6820 4066 696c 6573 push @files\n-000275c0: 2c20 2466 3b0a 2020 2020 2020 2020 2020 , $f;. \n-000275d0: 2020 7075 7368 2040 6d64 352c 2024 6d64 push @md5, $md\n-000275e0: 353b 0a20 2020 2020 2020 2020 2020 2070 5;. p\n-000275f0: 7573 6820 4074 7970 6573 2c20 2766 273b ush @types, 'f';\n-00027600: 0a20 2020 2020 2020 207d 0a20 2020 2020 . }. \n-00027610: 2020 2024 7365 6c66 2d3e 7b27 6d64 3546 $self->{'md5F\n-00027620: 6f72 6b27 7d20 3d20 756e 6465 663b 2020 ork'} = undef; \n-00027630: 2320 6a6f 6220 6973 7420 6665 7274 6967 # job ist fertig\n-00027640: 0a20 2020 207d 0a0a 2020 2020 2320 4e65 . }.. # Ne\n-00027650: 7565 6e20 4d44 3520 4c61 7566 2073 7461 uen MD5 Lauf sta\n-00027660: 7274 656e 2077 656e 6e20 6dc3 b667 6c69 rten wenn m..gli\n-00027670: 6368 0a20 2020 2069 6620 286e 6f74 2024 ch. if (not $\n-00027680: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork'\n-00027690: 7d29 0a20 2020 207b 0a20 2020 2020 2020 }). {. \n-000276a0: 206d 7928 4063 616c 634d 4435 2920 3d20 my(@calcMD5) = \n-000276b0: 2829 3b0a 0a09 2320 4469 7265 6374 6f72 ();...# Director\n-000276c0: 7920 6569 6e6c 6573 656e 0a20 2020 2020 y einlesen. \n-000276d0: 2020 2024 7365 6c66 2d3e 7265 6375 7273 $self->recurs\n-000276e0: 6976 6552 6561 6444 6972 3a3a 7265 6164 iveReadDir::read\n-000276f0: 4469 7228 293b 0a0a 0923 2045 696e 6765 Dir();...# Einge\n-00027700: 6c65 7365 6e65 2044 6174 6569 656e 2069 lesene Dateien i\n-00027710: 6e20 2473 656c 662d 3e7b 2766 696c 6573 n $self->{'files\n-00027720: 277d 2066 696c 7465 726e 0a20 2020 2020 '} filtern. \n-00027730: 2020 206d 7920 2824 662c 2024 742c 2024 my ($f, $t, $\n-00027740: 6929 3b0a 2020 2020 2020 2020 6d79 2024 i);. my $\n-00027750: 6469 7220 3d20 2473 656c 662d 3e7b 2764 dir = $self->{'d\n-00027760: 6972 277d 3b20 2020 2020 2320 7a75 2064 ir'}; # zu d\n-00027770: 7572 6368 7375 6368 656e 6465 7320 4469 urchsuchendes Di\n-00027780: 7265 6374 6f72 790a 0a20 2020 2020 2020 rectory.. \n-00027790: 206d 7920 2461 6b74 4469 7220 3d20 2473 my $aktDir = $s\n-000277a0: 656c 662d 3e7b 2761 6b74 4469 7227 7d3b elf->{'aktDir'};\n-000277b0: 2020 2023 2061 6b74 7565 6c6c 6573 2042 # aktuelles B\n-000277c0: 6163 6b75 7076 6572 7a65 6963 686e 6973 ackupverzeichnis\n-000277d0: 0a09 666f 7220 2824 6920 3d20 3020 3b20 ..for ($i = 0 ; \n-000277e0: 2469 203c 2040 7b24 7365 6c66 2d3e 7b27 $i < @{$self->{'\n-000277f0: 6669 6c65 7327 7d7d 203b 2024 692b 2b29 files'}} ; $i++)\n-00027800: 0a09 7b0a 0920 2020 2024 6620 3d20 2473 ..{.. $f = $s\n-00027810: 656c 662d 3e7b 2766 696c 6573 277d 5b24 elf->{'files'}[$\n-00027820: 695d 3b0a 0920 2020 2024 7420 3d20 2473 i];.. $t = $s\n-00027830: 656c 662d 3e7b 2774 7970 6573 277d 5b24 elf->{'types'}[$\n-00027840: 695d 3b0a 0a09 2020 2020 6d79 2024 7265 i];... my $re\n-00027850: 6c46 696c 654e 616d 653b 0a09 2020 2020 lFileName;.. \n-00027860: 6966 2028 2464 6972 2065 7120 272f 2729 if ($dir eq '/')\n-00027870: 0a09 2020 2020 7b0a 0909 2472 656c 4669 .. {...$relFi\n-00027880: 6c65 4e61 6d65 203d 2073 7562 7374 7228 leName = substr(\n-00027890: 2466 2c20 3129 3b0a 0920 2020 207d 0a09 $f, 1);.. }..\n-000278a0: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {.\n-000278b0: 0909 2472 656c 4669 6c65 4e61 6d65 203d ..$relFileName =\n-000278c0: 2073 7562 7374 7228 2466 2c20 6c65 6e67 substr($f, leng\n-000278d0: 7468 2824 6469 7229 202b 2031 293b 0a09 th($dir) + 1);..\n-000278e0: 2020 2020 7d0a 0920 2020 2024 7265 6c46 }.. $relF\n-000278f0: 696c 654e 616d 6520 3d7e 2073 235c 412f ileName =~ s#\\A/\n-00027900: 2b23 233b 2020 2023 2072 656d 6f76 6520 +##; # remove \n-00027910: 6c65 6164 696e 6720 2f20 6966 2065 7869 leading / if exi\n-00027920: 7374 730a 0a09 2020 2020 6966 2028 6578 sts... if (ex\n-00027930: 6973 7473 2024 2465 7854 7970 6573 7b24 ists $$exTypes{$\n-00027940: 747d 290a 0920 2020 207b 0a09 092b 2b24 t}).. {...++$\n-00027950: 2465 7854 7970 6573 7b24 747d 3b0a 0909 $exTypes{$t};...\n-00027960: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00027970: 6b69 6e64 2720 3d3e 2027 4427 2c0a 0909 kind' => 'D',...\n-00027980: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00027990: 205b 2265 7863 6570 7454 7970 6520 2474 [\"exceptType $t\n-000279a0: 203c 2472 656c 4669 6c65 4e61 6d65 3e22 <$relFileName>\"\n-000279b0: 5d29 0a09 0920 2020 2069 6620 2464 6562 ])... if $deb\n-000279c0: 7567 203e 2030 3b0a 0909 6e65 7874 3b0a ug > 0;...next;.\n-000279d0: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if \n-000279e0: 2824 7420 6571 2027 5327 2061 6e64 0a20 ($t eq 'S' and. \n-000279f0: 2020 2020 2020 2020 2020 2020 2020 206e n\n-00027a00: 6f74 2024 676e 7563 7029 0a09 2020 2020 ot $gnucp).. \n-00027a10: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin\n-00027a20: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n-00027a30: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-00027a40: 2720 3d3e 205b 2275 6e73 7570 706f 7274 ' => [\"unsupport\n-00027a50: 6564 2066 696c 6520 7479 7065 2027 736f ed file type 'so\n-00027a60: 636b 6574 2722 202e 0a09 0909 0909 2022 cket'\" ....... \"\n-00027a70: 203c 2472 656c 4669 6c65 4e61 6d65 3e22 <$relFileName>\"\n-00027a80: 2c0a 0909 0920 2022 5c74 7365 6520 6f70 ,.... \"\\tsee op\n-00027a90: 7469 6f6e 2027 6370 4973 476e 7527 206f tion 'cpIsGnu' o\n-00027aa0: 7220 2773 7065 6369 616c 5479 7065 4172 r 'specialTypeAr\n-00027ab0: 6368 6976 6572 2722 5d29 3b0a 0909 6e65 chiver'\"]);...ne\n-00027ac0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. \n-00027ad0: 6966 2028 2474 2065 7120 2762 2720 616e if ($t eq 'b' an\n-00027ae0: 640a 0909 6e6f 7420 2467 6e75 6370 290a d...not $gnucp).\n-00027af0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog-\n-00027b00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00027b10: 3e20 2757 272c 0a09 0909 2020 2020 2020 > 'W',.... \n-00027b20: 272d 7374 7227 203d 3e20 5b22 756e 7375 '-str' => [\"unsu\n-00027b30: 7070 6f72 7465 6420 6669 6c65 2074 7970 pported file typ\n-00027b40: 6520 2762 6c6f 636b 2022 202e 0a09 0909 e 'block \" .....\n-00027b50: 0909 2022 7370 6563 6961 6c20 6669 6c65 .. \"special file\n-00027b60: 2720 3c24 7265 6c46 696c 654e 616d 653e ' <$relFileName>\n-00027b70: 222c 0a09 0920 2020 2020 2020 2020 2022 \",... \"\n-00027b80: 5c74 7365 6520 6f70 7469 6f6e 2027 6370 \\tsee option 'cp\n-00027b90: 4973 476e 7527 206f 7220 2773 7065 6369 IsGnu' or 'speci\n-00027ba0: 616c 5479 7065 4172 6368 6976 6572 2722 alTypeArchiver'\"\n-00027bb0: 5d29 3b0a 0909 6e65 7874 3b0a 0920 2020 ]);...next;.. \n-00027bc0: 207d 0a09 2020 2020 6966 2028 2474 2065 }.. if ($t e\n-00027bd0: 7120 2763 2720 616e 640a 2020 2020 2020 q 'c' and. \n-00027be0: 2020 2020 2020 2020 206e 6f74 2024 676e not $gn\n-00027bf0: 7563 7029 0a09 2020 2020 7b0a 0909 2470 ucp).. {...$p\n-00027c00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00027c10: 6e64 2720 3d3e 2027 5727 2c0a 0909 0920 nd' => 'W',.... \n-00027c20: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00027c30: 2275 6e73 7570 706f 7274 6564 2066 696c \"unsupported fil\n-00027c40: 6520 7479 7065 2027 6368 6172 6163 7465 e type 'characte\n-00027c50: 7220 2722 202e 0a09 0909 0909 2022 7370 r '\" ....... \"sp\n-00027c60: 6563 6961 6c20 6669 6c65 2720 3c24 7265 ecial file' <$re\n-00027c70: 6c46 696c 654e 616d 653e 222c 0a09 0909 lFileName>\",....\n-00027c80: 2020 225c 7473 6565 206f 7074 696f 6e20 \"\\tsee option \n-00027c90: 2763 7049 7347 6e75 2720 6f72 2027 7370 'cpIsGnu' or 'sp\n-00027ca0: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive\n-00027cb0: 7227 225d 293b 0a09 096e 6578 743b 0a09 r'\"]);...next;..\n-00027cc0: 2020 2020 7d0a 0a09 2020 2020 756e 6c65 }... unle\n-00027cd0: 7373 2028 2d65 2024 6629 0a09 2020 2020 ss (-e $f).. \n-00027ce0: 7b0a 0909 756e 6c65 7373 2028 2d6c 2024 {...unless (-l $\n-00027cf0: 6629 0a09 097b 0a09 0920 2020 2024 7072 f)...{... $pr\n-00027d00: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00027d10: 6427 203d 3e20 2757 272c 0a09 0909 0920 d' => 'W',..... \n-00027d20: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n-00027d30: 205b 2266 696c 6520 3c24 663e 2064 656c [\"file <$f> del\n-00027d40: 6574 6564 2064 7572 696e 6720 6261 636b eted during back\n-00027d50: 7570 2028 3129 225d 290a 0909 0975 6e6c up (1)\"])....unl\n-00027d60: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp\n-00027d70: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n-00027d80: 6543 6861 6e67 6527 7d3b 0a09 0920 2020 eChange'};... \n-00027d90: 206e 6578 743b 0a09 097d 0a09 2020 2020 next;...}.. \n-00027da0: 7d0a 0920 2020 206d 7920 2824 6465 762c }.. my ($dev,\n-00027db0: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, \n-00027dc0: 2475 6964 2c20 2467 6964 2c20 2461 6374 $uid, $gid, $act\n-00027dd0: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime\n-00027de0: 2c0a 0909 2461 6374 4174 696d 652c 2024 ,...$actAtime, $\n-00027df0: 6163 7453 697a 6529 203d 0a09 0920 2020 actSize) =... \n-00027e00: 2028 7374 6174 2824 6629 295b 302c 2031 (stat($f))[0, 1\n-00027e10: 2c20 322c 2034 2c20 352c 2031 302c 2039 , 2, 4, 5, 10, 9\n-00027e20: 2c20 382c 2037 5d3b 0a09 2020 2020 246d , 8, 7];.. $m\n-00027e30: 6f64 6520 3d20 3020 756e 6c65 7373 2024 ode = 0 unless $\n-00027e40: 6d6f 6465 3b0a 0920 2020 2024 6d6f 6465 mode;.. $mode\n-00027e50: 2026 3d20 3037 3737 373b 0a09 2020 2020 &= 07777;.. \n-00027e60: 2320 6368 6563 6b20 6578 6365 7074 5275 # check exceptRu\n-00027e70: 6c65 2061 6e64 2069 6e63 6c75 6465 5275 le and includeRu\n-00027e80: 6c65 0a09 2020 2020 6966 2028 2474 206e le.. if ($t n\n-00027e90: 6520 2764 2720 616e 6420 2465 7869 6e63 e 'd' and $exinc\n-00027ea0: 6c50 6174 7446 6c61 6729 0a09 2020 2020 lPattFlag).. \n-00027eb0: 7b0a 0909 6966 2028 2465 7863 6570 7452 {...if ($exceptR\n-00027ec0: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() =\n-00027ed0: 3d20 3120 616e 640a 0909 2020 2020 2465 = 1 and... $e\n-00027ee0: 7863 6570 7452 756c 652d 3e63 6865 636b xceptRule->check\n-00027ef0: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam\n-00027f00: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo\n-00027f10: 6465 2c0a 0909 0909 0920 2020 2461 6374 de,...... $act\n-00027f20: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime\n-00027f30: 2c20 2475 6964 2c0a 0909 0909 0920 2020 , $uid,...... \n-00027f40: 2467 6964 2c20 2474 2920 3d3d 2031 290a $gid, $t) == 1).\n-00027f50: 0909 7b0a 0909 2020 2020 2465 7863 6c4c ..{... $exclL\n-00027f60: 6f67 2d3e 7072 696e 7428 2224 7265 6c46 og->print(\"$relF\n-00027f70: 696c 654e 616d 655c 6e22 2920 6966 2024 ileName\\n\") if $\n-00027f80: 7772 6974 6545 7863 6c75 6465 4c6f 673b writeExcludeLog;\n-00027f90: 0a23 7072 696e 7420 2266 203d 203c 2466 .#print \"f = <$f\n-00027fa0: 3e20 7369 7a65 203d 2024 6163 7453 697a > size = $actSiz\n-00027fb0: 655c 6e22 3b0a 0909 2020 2020 2461 6374 e\\n\";... $act\n-00027fc0: 5369 7a65 203d 2030 2075 6e6c 6573 7320 Size = 0 unless \n-00027fd0: 6465 6669 6e65 6420 2461 6374 5369 7a65 defined $actSize\n-00027fe0: 3b20 2320 6578 636c 7564 6564 2077 6974 ; # excluded wit\n-00027ff0: 6820 4d41 524b 5f44 4952 5f52 4543 0a09 h MARK_DIR_REC..\n-00028000: 0920 2020 2024 6d61 696e 3a3a 7374 6174 . $main::stat\n-00028010: 2d3e 696e 6372 5f6e 6f45 7863 6c75 6465 ->incr_noExclude\n-00028020: 5275 6c65 2824 6163 7453 697a 6529 3b0a Rule($actSize);.\n-00028030: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}.\n-00028040: 0a09 0969 6620 2824 696e 636c 7564 6552 ...if ($includeR\n-00028050: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() =\n-00028060: 3d20 3129 0a09 097b 0a09 0920 2020 2069 = 1)...{... i\n-00028070: 6620 2824 696e 636c 7564 6552 756c 652d f ($includeRule-\n-00028080: 3e63 6865 636b 5275 6c65 2824 7265 6c46 >checkRule($relF\n-00028090: 696c 654e 616d 652c 2024 6163 7453 697a ileName, $actSiz\n-000280a0: 652c 2024 6d6f 6465 2c0a 0909 0909 0920 e, $mode,...... \n-000280b0: 2020 2024 6163 7443 7469 6d65 2c20 2461 $actCtime, $a\n-000280c0: 6374 4d74 696d 652c 2024 7569 642c 0a09 ctMtime, $uid,..\n-000280d0: 0909 0909 2020 2020 2467 6964 2c20 2474 .... $gid, $t\n-000280e0: 2920 3d3d 2031 290a 0909 2020 2020 7b0a ) == 1)... {.\n-000280f0: 0909 0924 6578 636c 4c6f 672d 3e70 7269 ...$exclLog->pri\n-00028100: 6e74 2822 2472 656c 4669 6c65 4e61 6d65 nt(\"$relFileName\n-00028110: 5c6e 2229 2069 6620 2477 7269 7465 4578 \\n\") if $writeEx\n-00028120: 636c 7564 654c 6f67 3b0a 0909 0924 6d61 cludeLog;....$ma\n-00028130: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n-00028140: 6f49 6e63 6c75 6465 5275 6c65 2824 6163 oIncludeRule($ac\n-00028150: 7453 697a 6529 3b0a 0909 2020 2020 7d0a tSize);... }.\n-00028160: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... \n-00028170: 207b 0a09 0909 6e65 7874 3b0a 0909 2020 {....next;... \n-00028180: 2020 7d0a 0909 7d0a 0920 2020 207d 0a0a }...}.. }..\n-00028190: 2020 2020 2020 2020 2020 2020 2320 4e69 # Ni\n-000281a0: 6368 7420 706c 6169 6e2d 6669 6c65 2062 cht plain-file b\n-000281b0: 656e c3b6 7469 6774 206b 6569 6e20 4d44 en..tigt kein MD\n-000281c0: 350a 0920 2020 2069 6620 2824 7420 6e65 5.. if ($t ne\n-000281d0: 2027 6627 290a 0920 2020 207b 0a09 0970 'f').. {...p\n-000281e0: 7573 6820 4066 696c 6573 2c20 2466 3b0a ush @files, $f;.\n-000281f0: 0909 7075 7368 2040 7479 7065 732c 2024 ..push @types, $\n-00028200: 743b 0a20 2020 2020 2020 2020 2020 2020 t;. \n-00028210: 2020 2070 7573 6820 406d 6435 2c20 756e push @md5, un\n-00028220: 6465 663b 0a09 096e 6578 743b 0a09 2020 def;...next;.. \n-00028230: 2020 7d0a 0a0a 0920 2020 2023 0a09 2020 }.... #.. \n-00028240: 2020 2320 6162 2068 6965 7220 6973 7420 # ab hier ist \n-00028250: 616c 6c65 7320 6e75 7220 6e6f 6368 2070 alles nur noch p\n-00028260: 6c61 696e 2066 696c 6520 2869 6e20 666f lain file (in fo\n-00028270: 7220 5363 686c 6569 6665 290a 0920 2020 r Schleife).. \n-00028280: 2023 0a09 2020 2020 6d79 2028 246f 6c64 #.. my ($old\n-00028290: 436f 6d70 722c 2024 6f6c 6443 7469 6d65 Compr, $oldCtime\n-000282a0: 2c20 246f 6c64 4d74 696d 652c 2024 6f6c , $oldMtime, $ol\n-000282b0: 6453 697a 652c 2024 6d64 3573 756d 293b dSize, $md5sum);\n-000282c0: 0a09 2020 2020 6d79 2024 6e20 3d20 2824 .. my $n = ($\n-000282d0: 6f6c 6443 6f6d 7072 2c20 246f 6c64 4374 oldCompr, $oldCt\n-000282e0: 696d 652c 2024 6f6c 644d 7469 6d65 2c20 ime, $oldMtime, \n-000282f0: 246f 6c64 5369 7a65 2c20 246d 6435 7375 $oldSize, $md5su\n-00028300: 6d29 203d 0a09 0924 6f6c 6446 696c 656e m) =...$oldFilen\n-00028310: 616d 652d 3e67 6574 496e 6f64 6562 6163 ame->getInodebac\n-00028320: 6b75 7043 6f6d 7072 4374 696d 654d 7469 kupComprCtimeMti\n-00028330: 6d65 5369 7a65 4d44 3528 2472 656c 4669 meSizeMD5($relFi\n-00028340: 6c65 4e61 6d65 293b 0a0a 0920 2020 2023 leName);... #\n-00028350: 2063 6865 636b 2063 6865 636b 426c 6f63 check checkBloc\n-00028360: 6b73 5275 6c65 0a09 2020 2020 6966 2028 ksRule.. if (\n-00028370: 2474 2065 7120 2766 2720 616e 6420 2463 $t eq 'f' and $c\n-00028380: 6865 636b 426c 6f63 6b73 5275 6c65 2d3e heckBlocksRule->\n-00028390: 6861 734c 696e 6528 2929 2023 2074 6869 hasLine()) # thi\n-000283a0: 7320 6c69 6e65 2072 6573 756c 7473 0a09 s line results..\n-000283b0: 2020 2020 7b20 2020 2020 2020 2020 2020 { \n-000283c0: 2020 2020 2020 2020 2020 2020 2023 2069 # i\n-000283d0: 6e20 6120 7761 726e 696e 6720 6475 6520 n a warning due \n-000283e0: 746f 2061 2062 7567 2069 6e20 7065 726c to a bug in perl\n-000283f0: 0a09 096d 7920 2824 7275 6c65 4253 2c20 ...my ($ruleBS, \n-00028400: 2472 756c 6543 6f6d 7072 6573 732c 2024 $ruleCompress, $\n-00028410: 7275 6c65 5061 7261 6c6c 656c 2c20 2472 ruleParallel, $r\n-00028420: 756c 6552 6561 6429 203d 0a09 0920 2020 uleRead) =... \n-00028430: 2024 6368 6563 6b42 6c6f 636b 7352 756c $checkBlocksRul\n-00028440: 652d 3e63 6865 636b 5275 6c65 2824 7265 e->checkRule($re\n-00028450: 6c46 696c 654e 616d 652c 2024 6163 7453 lFileName, $actS\n-00028460: 697a 652c 0a09 0909 0909 0924 6d6f 6465 ize,.......$mode\n-00028470: 2c20 2461 6374 4374 696d 652c 0a09 0909 , $actCtime,....\n-00028480: 0909 0924 6163 744d 7469 6d65 2c20 2475 ...$actMtime, $u\n-00028490: 6964 2c0a 0909 0909 0909 2467 6964 2c20 id,.......$gid, \n-000284a0: 2474 293b 0a09 0969 6620 2824 7275 6c65 $t);...if ($rule\n-000284b0: 4253 203e 2030 290a 0909 7b0a 0909 2020 BS > 0)...{... \n-000284c0: 2020 2320 6d64 3520 6973 2063 616c 6375 # md5 is calcu\n-000284d0: 6c61 7465 6420 6c61 7465 720a 0909 2020 lated later... \n-000284e0: 2020 7075 7368 2040 6669 6c65 732c 2024 push @files, $\n-000284f0: 663b 0a09 0920 2020 2070 7573 6820 4074 f;... push @t\n-00028500: 7970 6573 2c20 2762 6627 3b20 2020 2320 ypes, 'bf'; # \n-00028510: 626c 6f63 6b20 6669 6c65 0a0a 0909 2020 block file.... \n-00028520: 2020 6966 2028 246e 203e 2030 2061 6e64 if ($n > 0 and\n-00028530: 0a09 0909 2461 6374 5369 7a65 203d 3d20 ....$actSize == \n-00028540: 246f 6c64 5369 7a65 2061 6e64 0a09 0909 $oldSize and....\n-00028550: 2824 6163 744d 7469 6d65 203d 3d20 246f ($actMtime == $o\n-00028560: 6c64 4d74 696d 6529 2061 6e64 0a09 0909 ldMtime) and....\n-00028570: 2824 6f6c 6443 6f6d 7072 2065 7120 2762 ($oldCompr eq 'b\n-00028580: 2729 290a 0909 2020 2020 7b0a 0909 0923 '))... {....#\n-00028590: 206e 6f74 6869 6e67 2063 6861 6e67 6564 nothing changed\n-000285a0: 0a09 0909 7075 7368 2040 6d64 352c 2024 ....push @md5, $\n-000285b0: 6d64 3573 756d 3b0a 0909 2020 2020 7d0a md5sum;... }.\n-000285c0: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... \n-000285d0: 207b 0a23 0909 096d 7920 2463 203d 2024 {.#...my $c = $\n-000285e0: 7275 6c65 436f 6d70 7265 7373 203f 2027 ruleCompress ? '\n-000285f0: 6327 203a 2027 7527 3b0a 0909 096d 7920 c' : 'u';....my \n-00028600: 2463 203d 2024 7275 6c65 436f 6d70 7265 $c = $ruleCompre\n-00028610: 7373 3b0a 0909 0920 2020 2020 2020 2020 ss;.... \n-00028620: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028630: 2020 2020 2020 2020 2320 6361 6c63 756c # calcul\n-00028640: 6174 6520 6e65 7720 6d64 3520 7375 6d0a ate new md5 sum.\n-00028650: 0909 0970 7573 6820 406d 6435 2c20 5b24 ...push @md5, [$\n-00028660: 7275 6c65 4253 2c20 2463 2c20 2472 756c ruleBS, $c, $rul\n-00028670: 6550 6172 616c 6c65 6c2c 2040 2472 756c eParallel, @$rul\n-00028680: 6552 6561 645d 3b0a 0909 0969 6620 2824 eRead];....if ($\n-00028690: 6465 6275 674d 6f64 6520 3e3d 2033 290a debugMode >= 3).\n-000286a0: 0909 097b 0a09 0909 2020 2020 6d79 2028 ...{.... my (\n-000286b0: 4072 6561 736f 6e29 3b0a 0909 0920 2020 @reason);.... \n-000286c0: 2070 7573 6820 4072 6561 736f 6e2c 2027 push @reason, '\n-000286d0: 7369 7a65 2720 6966 2024 6163 7453 697a size' if $actSiz\n-000286e0: 6520 213d 2024 6f6c 6453 697a 653b 0a09 e != $oldSize;..\n-000286f0: 0909 2020 2020 7075 7368 2040 7265 6173 .. push @reas\n-00028700: 6f6e 2c20 276d 7469 6d65 2720 6966 2024 on, 'mtime' if $\n-00028710: 6163 744d 7469 6d65 2021 3d20 246f 6c64 actMtime != $old\n-00028720: 4d74 696d 653b 0a09 0909 2020 2020 7075 Mtime;.... pu\n-00028730: 7368 2040 7265 6173 6f6e 2c20 2763 7469 sh @reason, 'cti\n-00028740: 6d65 2720 6966 2024 6163 7443 7469 6d65 me' if $actCtime\n-00028750: 2021 3d20 246f 6c64 4374 696d 653b 0a09 != $oldCtime;..\n-00028760: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00028770: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00028780: 4427 2c0a 0909 0909 0920 2027 2d73 7472 D',...... '-str\n-00028790: 2720 3d3e 205b 226d 6435 7375 6d20 2822 ' => [\"md5sum (\"\n-000287a0: 202e 0a09 0909 0909 2020 6a6f 696e 2827 ....... join('\n-000287b0: 2c20 272c 2040 7265 6173 6f6e 2920 2e20 , ', @reason) . \n-000287c0: 2229 2024 6622 5d29 3b0a 0909 097d 0a09 \") $f\"]);....}..\n-000287d0: 0920 2020 207d 0a09 0920 2020 206e 6578 . }... nex\n-000287e0: 743b 0a09 097d 0a09 2020 2020 7d0a 0920 t;...}.. }.. \n-000287f0: 2020 2065 6c73 6966 2028 246f 6c64 436f elsif ($oldCo\n-00028800: 6d70 7220 616e 6420 246f 6c64 436f 6d70 mpr and $oldComp\n-00028810: 7220 6571 2027 6227 2920 2020 2023 2066 r eq 'b') # f\n-00028820: 202d 3e20 620a 0920 2020 207b 0a09 0970 -> b.. {...p\n-00028830: 7573 6820 4074 7970 6573 2c20 2766 6e65 ush @types, 'fne\n-00028840: 7727 3b20 2020 2320 666f 7263 6520 636f w'; # force co\n-00028850: 7079 206f 7220 636f 6d70 7265 7373 2c20 py or compress, \n-00028860: 646f 206e 6f74 0a09 0970 7573 6820 406d do not...push @m\n-00028870: 6435 2c20 246d 6435 7375 6d3b 2020 2020 d5, $md5sum; \n-00028880: 2320 6c69 6e6b 2062 6563 6175 7365 2070 # link because p\n-00028890: 7265 7669 6f75 7320 6261 636b 7570 2077 revious backup w\n-000288a0: 6173 0a09 0970 7573 6820 4066 696c 6573 as...push @files\n-000288b0: 2c20 2466 3b20 2020 2020 2020 2320 626c , $f; # bl\n-000288c0: 6f63 6b65 640a 0909 6966 2028 2464 6562 ocked...if ($deb\n-000288d0: 7567 4d6f 6465 203e 3d20 3329 0a09 097b ugMode >= 3)...{\n-000288e0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-000288f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00028900: 2744 272c 0a09 0909 0920 2027 2d73 7472 'D',..... '-str\n-00028910: 2720 3d3e 205b 226d 6435 7375 6d20 2862 ' => [\"md5sum (b\n-00028920: 6c6f 636b 2074 6f20 6669 6c65 2920 2466 lock to file) $f\n-00028930: 225d 293b 0a09 097d 0a09 096e 6578 743b \"]);...}...next;\n-00028940: 0a09 2020 2020 7d0a 0a09 2020 2020 2320 .. }... # \n-00028950: 706c 6169 6e20 6669 6c65 732c 206e 6f20 plain files, no \n-00028960: 626c 6f63 6b65 6420 6669 6c65 730a 0920 blocked files.. \n-00028970: 2020 2069 6620 2824 6e20 3d3d 2030 2920 if ($n == 0) \n-00028980: 2020 2023 206e 6963 6874 2069 6d20 4861 # nicht im Ha\n-00028990: 7368 2067 6566 756e 6465 6e20 2861 7573 sh gefunden (aus\n-000289a0: 2044 6174 6569 202e 6d64 3543 6865 636b Datei .md5Check\n-000289b0: 5375 6d73 0a09 2020 2020 7b20 2020 2020 Sums.. { \n-000289c0: 2020 2020 2020 2020 2020 2320 2d3e 206e # -> n\n-000289d0: c3a4 6865 7220 756e 7465 7273 7563 6865 ..her untersuche\n-000289e0: 6e21 0a20 2020 2020 2020 2020 2020 2020 n!. \n-000289f0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00028a00: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00028a10: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00028a20: 2020 2020 2020 2020 2020 2020 2020 2027 '\n-00028a30: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. \n-00028a40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028a50: 2020 2020 2020 205b 2243 6865 636b 696e [\"Checkin\n-00028a60: 6720 2472 656c 4669 6c65 4e61 6d65 205b g $relFileName [\n-00028a70: 6e65 775d 225d 2920 6966 2024 7665 7262 new]\"]) if $verb\n-00028a80: 6f73 653b 0a09 0970 7573 6820 4063 616c ose;...push @cal\n-00028a90: 634d 4435 2c20 2466 3b0a 0909 6966 2028 cMD5, $f;...if (\n-00028aa0: 2464 6562 7567 4d6f 6465 203e 3d20 3329 $debugMode >= 3)\n-00028ab0: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo\n-00028ac0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00028ad0: 203d 3e20 2744 272c 0a09 0909 0920 2027 => 'D',..... '\n-00028ae0: 2d73 7472 2720 3d3e 205b 226d 6435 7375 -str' => [\"md5su\n-00028af0: 6d20 286e 6577 2066 696c 6529 2024 6622 m (new file) $f\"\n-00028b00: 5d29 3b0a 0909 7d0a 0909 6e65 7874 3b0a ]);...}...next;.\n-00028b10: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if \n-00028b20: 2824 6967 6e6f 7265 5469 6d65 206e 6520 ($ignoreTime ne \n-00028b30: 276d 7469 6d65 2720 616e 6420 2824 6163 'mtime' and ($ac\n-00028b40: 744d 7469 6d65 2021 3d20 246f 6c64 4d74 tMtime != $oldMt\n-00028b50: 696d 6529 290a 0920 2020 207b 0a20 2020 ime)).. {. \n-00028b60: 2020 2020 2020 2020 2020 2020 2024 7072 $pr\n-00028b70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00028b80: 6427 203d 3e20 2749 272c 0a20 2020 2020 d' => 'I',. \n-00028b90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028ba0: 2020 2020 2020 2020 2027 2d73 7472 2720 '-str' \n-00028bb0: 3d3e 0a20 2020 2020 2020 2020 2020 2020 =>. \n-00028bc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028bd0: 205b 2243 6865 636b 696e 6720 2472 656c [\"Checking $rel\n-00028be0: 4669 6c65 4e61 6d65 205b 6d74 696d 653a FileName [mtime:\n-00028bf0: 2024 6f6c 644d 7469 6d65 202d 3e20 2461 $oldMtime -> $a\n-00028c00: 6374 4d74 696d 655d 225d 290a 0909 2020 ctMtime]\"])... \n-00028c10: 2020 6966 2024 7665 7262 6f73 653b 0a09 if $verbose;..\n-00028c20: 0970 7573 6820 4063 616c 634d 4435 2c20 .push @calcMD5, \n-00028c30: 2466 3b0a 0909 6966 2028 2464 6562 7567 $f;...if ($debug\n-00028c40: 4d6f 6465 203e 3d20 3329 0a09 097b 0a09 Mode >= 3)...{..\n-00028c50: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00028c60: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D\n-00028c70: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' \n-00028c80: 3d3e 205b 226d 6435 7375 6d20 286d 7469 => [\"md5sum (mti\n-00028c90: 6d65 2920 2466 225d 293b 0a09 097d 0a09 me) $f\"]);...}..\n-00028ca0: 096e 6578 743b 0a09 2020 2020 7d0a 0a20 .next;.. }.. \n-00028cb0: 2020 2020 2020 2020 2020 2065 6c73 6966 elsif\n-00028cc0: 2028 2461 6374 5369 7a65 2021 3d20 246f ($actSize != $o\n-00028cd0: 6c64 5369 7a65 290a 0920 2020 207b 0a09 ldSize).. {..\n-00028ce0: 0970 7573 6820 4063 616c 634d 4435 2c20 .push @calcMD5, \n-00028cf0: 2466 3b0a 0909 6966 2028 2464 6562 7567 $f;...if ($debug\n-00028d00: 4d6f 6465 203e 3d20 3329 0a09 097b 0a09 Mode >= 3)...{..\n-00028d10: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00028d20: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D\n-00028d30: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' \n-00028d40: 3d3e 205b 226d 6435 7375 6d20 2873 697a => [\"md5sum (siz\n-00028d50: 6529 2024 6622 5d29 3b0a 0909 7d0a 0909 e) $f\"]);...}...\n-00028d60: 6e65 7874 3b0a 0920 2020 207d 0a0a 0920 next;.. }... \n-00028d70: 2020 2065 6c73 6966 2028 2469 676e 6f72 elsif ($ignor\n-00028d80: 6554 696d 6520 6e65 2027 6374 696d 6527 eTime ne 'ctime'\n-00028d90: 2061 6e64 2028 2461 6374 4374 696d 6520 and ($actCtime \n-00028da0: 213d 2024 6f6c 6443 7469 6d65 2929 0a09 != $oldCtime))..\n-00028db0: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. \n-00028dc0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n-00028dd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00028de0: 4927 2c0a 2020 2020 2020 2020 2020 2020 I',. \n-00028df0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028e00: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. \n-00028e10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00028e20: 2020 2020 2020 2020 2020 5b22 4368 6563 [\"Chec\n-00028e30: 6b69 6e67 2024 7265 6c46 696c 654e 616d king $relFileNam\n-00028e40: 6520 5b63 7469 6d65 3a20 246f 6c64 4374 e [ctime: $oldCt\n-00028e50: 696d 6520 2d3e 2024 6163 7443 7469 6d65 ime -> $actCtime\n-00028e60: 5d22 5d29 0a09 0920 2020 2069 6620 2476 ]\"])... if $v\n-00028e70: 6572 626f 7365 3b0a 0909 7075 7368 2040 erbose;...push @\n-00028e80: 6361 6c63 4d44 352c 2024 663b 0a09 0969 calcMD5, $f;...i\n-00028e90: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >=\n-00028ea0: 2033 290a 0909 7b0a 0909 2020 2020 2470 3)...{... $p\n-00028eb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00028ec0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',.....\n-00028ed0: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => [\"md\n-00028ee0: 3573 756d 2028 6374 696d 6529 2024 6622 5sum (ctime) $f\"\n-00028ef0: 5d29 3b0a 0909 7d0a 0909 6e65 7874 3b0a ]);...}...next;.\n-00028f00: 0920 2020 207d 0a0a 0a09 2020 2020 230a . }.... #.\n-00028f10: 0920 2020 2023 20c3 bc62 7269 673a 2070 . # ..brig: p\n-00028f20: 6c61 696e 2066 696c 6573 2c20 6469 6520 lain files, die \n-00028f30: 7369 6368 2067 6567 656e c3bc 6265 7220 sich gegen..ber \n-00028f40: 6465 6d20 6c65 747a 7465 6e20 4261 636b dem letzten Back\n-00028f50: 7570 0a09 2020 2020 2320 6e69 6368 7420 up.. # nicht \n-00028f60: 7665 72c3 a46e 6465 7274 2068 6162 656e ver..ndert haben\n-00028f70: 0a09 2020 2020 230a 0a20 2020 2020 2020 .. #.. \n-00028f80: 2020 2020 2023 206d 6974 206d 6435 2053 # mit md5 S\n-00028f90: 756d 6d65 20c3 bc62 6572 2064 626d 286d umme ..ber dbm(m\n-00028fa0: 6435 2920 6765 6865 6e2c 2064 6164 7572 d5) gehen, dadur\n-00028fb0: 6368 0a20 2020 2020 2020 2020 2020 2023 ch. #\n-00028fc0: 2044 6f70 7065 6c74 6520 7665 726d 6569 Doppelte vermei\n-00028fd0: 6465 6e0a 2020 2020 2020 2020 2020 2020 den. \n-00028fe0: 7075 7368 2040 6669 6c65 732c 2024 663b push @files, $f;\n-00028ff0: 0a20 2020 2020 2020 2020 2020 2070 7573 . pus\n-00029000: 6820 406d 6435 2c20 246d 6435 7375 6d3b h @md5, $md5sum;\n-00029010: 0a20 2020 2020 2020 2020 2020 2070 7573 . pus\n-00029020: 6820 4074 7970 6573 2c20 2766 273b 0a09 h @types, 'f';..\n-00029030: 7d0a 0a0a 2020 2020 2020 2020 2320 5061 }... # Pa\n-00029040: 7261 6c6c 656c 7072 6f7a 6573 7320 7374 rallelprozess st\n-00029050: 6172 7465 6e2c 0a20 2020 2020 2020 2023 arten,. #\n-00029060: 204d 4435 2053 756d 6d65 6e20 66c3 bc72 MD5 Summen f..r\n-00029070: 2040 6361 6c63 4d44 3520 6265 7265 6368 @calcMD5 berech\n-00029080: 6e65 6e0a 2020 2020 2020 2020 6966 2028 nen. if (\n-00029090: 4063 616c 634d 4435 203e 2030 290a 2020 @calcMD5 > 0). \n-000290a0: 2020 2020 2020 7b0a 2020 2020 2020 2020 {. \n-000290b0: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5\n-000290c0: 466f 726b 277d 203d 2066 6f72 6b4d 4435 Fork'} = forkMD5\n-000290d0: 2d3e 6e65 7728 272d 7061 7261 6d27 203d ->new('-param' =\n-000290e0: 3e20 5b40 6361 6c63 4d44 355d 2c0a 0909 > [@calcMD5],...\n-000290f0: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog\n-00029100: 2720 3d3e 2024 7072 4c6f 672c 0a09 0909 ' => $prLog,....\n-00029110: 0909 2020 2020 2020 272d 746d 7064 6972 .. '-tmpdir\n-00029120: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,...\n-00029130: 0909 0920 2020 2020 2027 2d72 6573 6574 ... '-reset\n-00029140: 4174 696d 6527 203d 3e0a 0909 0909 0920 Atime' =>...... \n-00029150: 2020 2020 2024 7365 6c66 2d3e 7b27 7265 $self->{'re\n-00029160: 7365 7441 7469 6d65 277d 293b 0a20 2020 setAtime'});. \n-00029170: 2020 2020 207d 0a20 2020 207d 0a0a 2020 }. }.. \n-00029180: 2020 2320 4661 6c6c 7320 6e6f 6368 2065 # Falls noch e\n-00029190: 696e 2050 6172 616c 6c65 6c70 726f 7a65 in Parallelproze\n-000291a0: 7373 206c c3a4 7566 742c 2073 6963 6865 ss l..uft, siche\n-000291b0: 7273 7465 6c6c 656e 2064 6173 7320 7265 rstellen dass re\n-000291c0: 6164 4469 720a 2020 2020 2320 6572 6e65 adDir. # erne\n-000291d0: 7574 2061 7566 6765 7275 6665 6e20 7769 ut aufgerufen wi\n-000291e0: 7264 2061 7563 6820 7765 6e6e 2065 7320 rd auch wenn es \n-000291f0: 6a65 747a 7420 6e69 6368 7473 207a 7572 jetzt nichts zur\n-00029200: c3bc 636b 6765 6765 6265 6e0a 2020 2020 ..ckgegeben. \n-00029210: 2320 6861 742e 0a20 2020 2069 6620 2840 # hat.. if (@\n-00029220: 6669 6c65 7320 3d3d 2030 2061 6e64 2024 files == 0 and $\n-00029230: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork'\n-00029240: 7d29 0a20 2020 207b 0a20 2020 2020 2020 }). {. \n-00029250: 2070 7573 6820 4066 696c 6573 2c20 756e push @files, un\n-00029260: 6465 663b 0a20 2020 2020 2020 2070 7573 def;. pus\n-00029270: 6820 406d 6435 2c20 756e 6465 663b 0a20 h @md5, undef;. \n-00029280: 2020 2020 2020 2070 7573 6820 4074 7970 push @typ\n-00029290: 6573 2c20 2772 6570 6561 7427 3b0a 2020 es, 'repeat';. \n-000292a0: 2020 7d0a 0a20 2020 2024 7365 6c66 2d3e }.. $self->\n-000292b0: 7b27 6669 6c65 7327 7d20 3d20 5c40 6669 {'files'} = \\@fi\n-000292c0: 6c65 733b 0a20 2020 2024 7365 6c66 2d3e les;. $self->\n-000292d0: 7b27 6d64 3527 7d20 3d20 5c40 6d64 353b {'md5'} = \\@md5;\n-000292e0: 0a20 2020 2024 7365 6c66 2d3e 7b27 7479 . $self->{'ty\n-000292f0: 7065 7327 7d20 3d20 5c40 7479 7065 733b pes'} = \\@types;\n-00029300: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n-00029310: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029320: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-00029330: 6220 4445 5354 524f 590a 7b0a 2020 2020 b DESTROY.{. \n-00029340: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-00029350: 3b0a 0a20 2020 206d 7920 2477 636c 203d ;.. my $wcl =\n-00029360: 2024 7365 6c66 2d3e 7b27 7772 6974 6545 $self->{'writeE\n-00029370: 7863 6c75 6465 4c6f 6727 7d3b 0a0a 2020 xcludeLog'};.. \n-00029380: 2020 6966 2028 2477 636c 2061 6e64 2024 if ($wcl and $\n-00029390: 6d61 696e 3a3a 656e 644f 6653 746f 7265 main::endOfStore\n-000293a0: 4261 636b 7570 290a 2020 2020 7b0a 2309 Backup). {.#.\n-000293b0: 6c6f 6361 6c20 2a45 5843 4c5f 4c4f 4720 local *EXCL_LOG \n-000293c0: 3d20 2473 656c 662d 3e7b 2745 5843 4c5f = $self->{'EXCL_\n-000293d0: 4c4f 4727 7d3b 0a23 0963 6c6f 7365 2845 LOG'};.#.close(E\n-000293e0: 5843 4c5f 4c4f 4729 206f 720a 2309 2020 XCL_LOG) or.#. \n-000293f0: 2020 2473 656c 662d 3e7b 2770 724c 6f67 $self->{'prLog\n-00029400: 277d 2d3e 7072 696e 7428 272d 6b69 6e64 '}->print('-kind\n-00029410: 2720 3d3e 2027 4527 2c0a 2309 0909 0920 ' => 'E',.#.... \n-00029420: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-00029430: 616e 6e6f 7420 636c 6f73 6520 3c24 7763 annot close <$wc\n-00029440: 6c3e 225d 2c0a 2309 0909 0920 2020 2027 l>\"],.#.... '\n-00029450: 2d65 7869 7427 203d 3e20 3129 3b0a 096d -exit' => 1);..m\n-00029460: 7920 2465 7863 6c4c 6f67 203d 2024 7365 y $exclLog = $se\n-00029470: 6c66 2d3e 7b27 6578 636c 4c6f 6727 7d3b lf->{'exclLog'};\n-00029480: 0a09 2465 7863 6c4c 6f67 2d3e 7761 6974 ..$exclLog->wait\n-00029490: 2829 3b0a 096d 7920 246f 7574 203d 2024 ();..my $out = $\n-000294a0: 6578 636c 4c6f 672d 3e67 6574 5354 4445 exclLog->getSTDE\n-000294b0: 5252 2829 3b0a 0969 6620 2840 246f 7574 RR();..if (@$out\n-000294c0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog\n-000294d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000294e0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n-000294f0: 7472 2720 3d3e 205b 2262 7a69 7032 2072 tr' => [\"bzip2 r\n-00029500: 6570 6f72 7473 2065 7272 6f72 733a 222c eports errors:\",\n-00029510: 0a09 0909 0920 2020 2020 4024 6f75 745d ..... @$out]\n-00029520: 293b 0a09 2020 2020 6578 6974 2031 3b0a );.. exit 1;.\n-00029530: 097d 0a09 2465 7863 6c4c 6f67 2d3e 636c .}..$exclLog->cl\n-00029540: 6f73 6528 293b 0a20 2020 207d 0a7d 0a0a ose();. }.}..\n-00029550: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-00029560: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029570: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029580: 2323 230a 2320 7374 656c 6c74 2066 6573 ###.# stellt fes\n-00029590: 742c 2077 656c 6368 6573 2064 6173 206e t, welches das n\n-000295a0: 6575 6520 4469 7265 6374 6f72 7920 6973 eue Directory is\n-000295b0: 742c 206c c3b6 7363 6874 2061 6c74 650a t, l..scht alte.\n-000295c0: 7061 636b 6167 6520 6164 6d69 6e44 6972 package adminDir\n-000295d0: 6563 746f 7269 6573 3b0a 7573 6520 4361 ectories;.use Ca\n-000295e0: 7270 3b0a 0a73 7562 206e 6577 0a7b 0a20 rp;..sub new.{. \n-000295f0: 2020 206d 7920 2463 6c61 7373 203d 2073 my $class = s\n-00029600: 6869 6674 3b0a 2020 2020 6d79 2024 7365 hift;. my $se\n-00029610: 6c66 203d 207b 7d3b 0a0a 2020 2020 6d79 lf = {};.. my\n-00029620: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('-\n-00029630: 7461 7267 6574 4469 7227 2020 2020 3d3e targetDir' =>\n-00029640: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00029650: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' =>\n-00029660: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00029670: 746d 7064 6972 2720 2020 2020 2020 3d3e tmpdir' =>\n-00029680: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-00029690: 6368 6d6f 644d 4435 4669 6c65 2720 3d3e chmodMD5File' =>\n-000296a0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-000296b0: 7072 4c6f 6727 2020 2020 2020 2020 3d3e prLog' =>\n-000296c0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-000296d0: 616b 7444 6174 6527 2020 2020 2020 3d3e aktDate' =>\n-000296e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-000296f0: 6465 6275 674d 6f64 6527 2020 2020 3d3e debugMode' =>\n-00029700: 2030 0a09 0920 2020 2029 3b0a 0a20 2020 0... );.. \n-00029710: 2026 3a3a 6368 6563 6b4f 626a 6563 7450 &::checkObjectP\n-00029720: 6172 616d 7328 5c25 7061 7261 6d73 2c20 arams(\\%params, \n-00029730: 5c40 5f2c 2027 6164 6d69 6e44 6972 6563 \\@_, 'adminDirec\n-00029740: 746f 7269 6573 3a3a 6e65 7727 2c0a 0909 tories::new',...\n-00029750: 0920 5b27 2d74 6172 6765 7444 6972 272c . ['-targetDir',\n-00029760: 2027 2d63 6865 636b 5375 6d46 696c 6527 '-checkSumFile'\n-00029770: 2c20 272d 6368 6d6f 644d 4435 4669 6c65 , '-chmodMD5File\n-00029780: 272c 0a09 0909 2020 272d 746d 7064 6972 ',.... '-tmpdir\n-00029790: 272c 2027 2d70 724c 6f67 275d 293b 0a20 ', '-prLog']);. \n-000297a0: 2020 2026 3a3a 7365 7450 6172 616d 7344 &::setParamsD\n-000297b0: 6972 6563 7428 2473 656c 662c 205c 2570 irect($self, \\%p\n-000297c0: 6172 616d 7329 3b0a 0a23 2077 6569 7465 arams);..# weite\n-000297d0: 7265 2056 6172 6961 626c 656e 3a0a 2320 re Variablen:.# \n-000297e0: 2761 6b74 4461 7465 272c 2027 6261 7365 'aktDate', 'base\n-000297f0: 4469 7227 2c20 2761 6b74 4469 7227 2c20 Dir', 'aktDir', \n-00029800: 2770 7265 7644 6972 272c 2027 6f6c 6444 'prevDir', 'oldD\n-00029810: 6972 7327 0a0a 2020 2020 6d79 2024 7461 irs'.. my $ta\n-00029820: 7267 6574 4469 7220 3d20 2473 656c 662d rgetDir = $self-\n-00029830: 3e7b 2774 6172 6765 7444 6972 277d 3b0a >{'targetDir'};.\n-00029840: 2020 2020 6d79 2024 6368 6d6f 644d 4435 my $chmodMD5\n-00029850: 4669 6c65 203d 2024 7365 6c66 2d3e 7b27 File = $self->{'\n-00029860: 6368 6d6f 644d 4435 4669 6c65 277d 3b0a chmodMD5File'};.\n-00029870: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n-00029880: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n-00029890: 3b0a 0a20 2020 206d 7920 2461 6b74 4461 ;.. my $aktDa\n-000298a0: 7465 203d 2024 7365 6c66 2d3e 7b27 616b te = $self->{'ak\n-000298b0: 7444 6174 6527 7d3b 0a20 2020 2024 7365 tDate'};. $se\n-000298c0: 6c66 2d3e 7b27 6261 7365 4469 7227 7d20 lf->{'baseDir'} \n-000298d0: 3d20 2474 6172 6765 7444 6972 3b0a 2020 = $targetDir;. \n-000298e0: 2020 6d79 2024 616b 7444 6972 203d 2024 my $aktDir = $\n-000298f0: 7365 6c66 2d3e 7b27 616b 7444 6972 277d self->{'aktDir'}\n-00029900: 203d 2024 7461 7267 6574 4469 7220 2e20 = $targetDir . \n-00029910: 272f 2720 2e0a 0924 616b 7444 6174 652d '/' ...$aktDate-\n-00029920: 3e67 6574 4461 7465 5469 6d65 2827 2d66 >getDateTime('-f\n-00029930: 6f72 6d61 7427 203d 3e20 2725 592e 254d ormat' => '%Y.%M\n-00029940: 2e25 445f 2568 2e25 6d2e 2573 2729 3b0a .%D_%h.%m.%s');.\n-00029950: 0a20 2020 206d 7920 2461 7362 6420 3d20 . my $asbd = \n-00029960: 616c 6c53 746f 7265 4261 636b 7570 5365 allStoreBackupSe\n-00029970: 7269 6573 2d3e 6e65 7728 272d 726f 6f74 ries->new('-root\n-00029980: 4469 7227 203d 3e20 2474 6172 6765 7444 Dir' => $targetD\n-00029990: 6972 2c0a 0909 0909 0920 272d 6368 6563 ir,...... '-chec\n-000299a0: 6b53 756d 4669 6c65 2720 3d3e 2024 6368 kSumFile' => $ch\n-000299b0: 6563 6b53 756d 4669 6c65 2c0a 0909 0909 eckSumFile,.....\n-000299c0: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p\n-000299d0: 724c 6f67 293b 0a20 2020 2024 7365 6c66 rLog);. $self\n-000299e0: 2d3e 7b27 7072 6576 4469 7227 7d20 3d20 ->{'prevDir'} = \n-000299f0: 2461 7362 642d 3e67 6574 4669 6e69 7368 $asbd->getFinish\n-00029a00: 6564 5072 6576 2829 3b0a 0a23 204e 6575 edPrev();..# Neu\n-00029a10: 6573 2056 6572 7a65 6963 686e 6973 2061 es Verzeichnis a\n-00029a20: 6e6c 6567 656e 0a20 2020 2024 7072 4c6f nlegen. $prLo\n-00029a30: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00029a40: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-00029a50: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-00029a60: 6372 6561 7465 203c 2461 6b74 4469 723e create <$aktDir>\n-00029a70: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting\"],... \n-00029a80: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1)..\n-00029a90: 756e 6c65 7373 2028 6d6b 6469 7220 2461 unless (mkdir $a\n-00029aa0: 6b74 4469 7229 3b0a 2020 2020 6368 6d6f ktDir);. chmo\n-00029ab0: 6420 3037 3535 2c20 2461 6b74 4469 723b d 0755, $aktDir;\n-00029ac0: 0a20 2020 206d 7920 2463 686d 6f64 4469 . my $chmodDi\n-00029ad0: 7220 3d20 2463 686d 6f64 4d44 3546 696c r = $chmodMD5Fil\n-00029ae0: 653b 0a20 2020 2024 6368 6d6f 6444 6972 e;. $chmodDir\n-00029af0: 207c 3d20 3031 3030 2069 6620 2463 686d |= 0100 if $chm\n-00029b00: 6f64 4469 7220 2620 3034 3030 3b0a 2020 odDir & 0400;. \n-00029b10: 2020 2463 686d 6f64 4469 7220 7c3d 2030 $chmodDir |= 0\n-00029b20: 3031 3020 6966 2024 6368 6d6f 6444 6972 010 if $chmodDir\n-00029b30: 2026 2030 3034 303b 0a20 2020 2024 6368 & 0040;. $ch\n-00029b40: 6d6f 6444 6972 207c 3d20 3030 3031 2069 modDir |= 0001 i\n-00029b50: 6620 2463 686d 6f64 4469 7220 2620 3030 f $chmodDir & 00\n-00029b60: 3034 3b0a 2020 2020 6d6b 6469 7220 2224 04;. mkdir \"$\n-00029b70: 616b 7444 6972 2f2e 7374 6f72 6542 6163 aktDir/.storeBac\n-00029b80: 6b75 704c 696e 6b73 222c 2024 6368 6d6f kupLinks\", $chmo\n-00029b90: 6444 6972 3b0a 0a20 2020 206d 7920 2464 dDir;.. my $d\n-00029ba0: 6562 7567 4d6f 6465 203d 2024 7365 6c66 ebugMode = $self\n-00029bb0: 2d3e 7b27 6465 6275 674d 6f64 6527 7d3b ->{'debugMode'};\n-00029bc0: 0a20 2020 2069 6620 2824 6465 6275 674d . if ($debugM\n-00029bd0: 6f64 6520 3e20 3029 0a20 2020 207b 0a09 ode > 0). {..\n-00029be0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00029bf0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',...\n-00029c00: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00029c10: 5b22 6e65 7720 6469 7265 6374 6f72 7920 [\"new directory \n-00029c20: 6973 203c 2461 6b74 4469 723e 222c 0a09 is <$aktDir>\",..\n-00029c30: 0909 0920 2473 656c 662d 3e7b 2770 7265 ... $self->{'pre\n-00029c40: 7644 6972 277d 203f 0a09 0909 0920 2270 vDir'} ?..... \"p\n-00029c50: 7265 7669 6f75 7320 6469 7265 6374 6f72 revious director\n-00029c60: 7920 6973 203c 2220 2e0a 0909 0909 2024 y is <\" ...... $\n-00029c70: 7365 6c66 2d3e 7b27 7072 6576 4469 7227 self->{'prevDir'\n-00029c80: 7d20 2e20 223e 2220 3a0a 0909 0909 2027 } . \">\" :..... '\n-00029c90: 6e6f 2070 7265 7669 6f75 7320 6469 7265 no previous dire\n-00029ca0: 6374 6f72 792c 2066 6972 7374 2075 7365 ctory, first use\n-00029cb0: 275d 293b 0a20 2020 207d 0a0a 2020 2020 ']);. }.. \n-00029cc0: 6d79 2028 406f 6c64 4469 7273 2920 3d20 my (@oldDirs) = \n-00029cd0: 2461 7362 642d 3e67 6574 416c 6c44 6972 $asbd->getAllDir\n-00029ce0: 7328 293b 0a20 2020 2024 7365 6c66 2d3e s();. $self->\n-00029cf0: 7b27 6f6c 6444 6972 7327 7d20 3d20 5c40 {'oldDirs'} = \\@\n-00029d00: 6f6c 6444 6972 733b 0a0a 2020 2020 626c oldDirs;.. bl\n-00029d10: 6573 7320 2473 656c 662c 2024 636c 6173 ess $self, $clas\n-00029d20: 733b 0a7d 0a0a 0a23 2323 2323 2323 2323 s;.}...#########\n-00029d30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029d40: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-00029d50: 2320 7369 6e64 2073 6f72 7469 6572 743a # sind sortiert:\n-00029d60: 20c3 a46c 7465 7374 6573 207a 7565 7273 ..ltestes zuers\n-00029d70: 740a 7375 6220 6765 744f 6c64 4469 7273 t.sub getOldDirs\n-00029d80: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self \n-00029d90: 3d20 7368 6966 743b 0a0a 2020 2020 7265 = shift;.. re\n-00029da0: 7475 726e 2024 7365 6c66 2d3e 7b27 6f6c turn $self->{'ol\n-00029db0: 6444 6972 7327 7d3b 0a7d 0a0a 0a23 2323 dDirs'};.}...###\n-00029dc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029de0: 2323 2323 230a 7375 6220 6765 7441 6b74 #####.sub getAkt\n-00029df0: 4469 720a 7b0a 2020 2020 6d79 2024 7365 Dir.{. my $se\n-00029e00: 6c66 203d 2073 6869 6674 3b0a 2020 2020 lf = shift;. \n-00029e10: 7265 7475 726e 2024 7365 6c66 2d3e 7b27 return $self->{'\n-00029e20: 616b 7444 6972 277d 3b20 2020 2020 2020 aktDir'}; \n-00029e30: 2320 5374 7269 6e67 0a7d 0a0a 0a23 2323 # String.}...###\n-00029e40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029e50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029e60: 2323 2323 230a 7375 6220 6765 7441 6b74 #####.sub getAkt\n-00029e70: 496e 666f 4669 6c65 0a7b 0a20 2020 206d InfoFile.{. m\n-00029e80: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-00029e90: 0a0a 2020 2020 6d79 2024 616b 7444 6972 .. my $aktDir\n-00029ea0: 203d 2024 7365 6c66 2d3e 7b27 616b 7444 = $self->{'aktD\n-00029eb0: 6972 277d 3b0a 2020 2020 6966 2028 2461 ir'};. if ($a\n-00029ec0: 6b74 4469 7229 0a20 2020 207b 0a09 7265 ktDir). {..re\n-00029ed0: 7475 726e 2024 616b 7444 6972 202e 2027 turn $aktDir . '\n-00029ee0: 2f27 202e 2024 7365 6c66 2d3e 7b27 6368 /' . $self->{'ch\n-00029ef0: 6563 6b53 756d 4669 6c65 277d 3b0a 2020 eckSumFile'};. \n-00029f00: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n-00029f10: 207b 0a09 7265 7475 726e 2075 6e64 6566 {..return undef\n-00029f20: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...####\n-00029f30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029f40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00029f50: 2323 2323 0a73 7562 2067 6574 5072 6576 ####.sub getPrev\n-00029f60: 4469 720a 7b0a 2020 2020 6361 7270 2022 Dir.{. carp \"\n-00029f70: 4465 7072 6563 6174 6564 2120 5768 7920 Deprecated! Why \n-00029f80: 7368 6f75 6c64 2074 6869 7320 6265 206e should this be n\n-00029f90: 6563 6365 7373 6172 793f 223b 0a20 2020 eccessary?\";. \n-00029fa0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-00029fb0: 743b 0a20 2020 2072 6574 7572 6e20 2473 t;. return $s\n-00029fc0: 656c 662d 3e7b 2770 7265 7644 6972 277d elf->{'prevDir'}\n-00029fd0: 3b20 2020 2020 2020 2320 5374 7269 6e67 ; # String\n-00029fe0: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n-00029ff0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002a000: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-0002a010: 6220 6765 744f 6c64 496e 666f 4669 6c65 b getOldInfoFile\n-0002a020: 0a7b 0a20 2020 2063 6172 7020 2244 6570 .{. carp \"Dep\n-0002a030: 7265 6361 7465 6421 2057 6879 2073 686f recated! Why sho\n-0002a040: 756c 6420 7468 6973 2062 6520 6e65 6363 uld this be necc\n-0002a050: 6573 7361 7279 3f22 3b0a 2020 2020 6d79 essary?\";. my\n-0002a060: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-0002a070: 0a20 2020 206d 7920 2470 7265 7644 6972 . my $prevDir\n-0002a080: 203d 2024 7365 6c66 2d3e 7b27 7072 6576 = $self->{'prev\n-0002a090: 4469 7227 7d3b 0a20 2020 2069 6620 2824 Dir'};. if ($\n-0002a0a0: 7072 6576 4469 7229 0a20 2020 207b 0a09 prevDir). {..\n-0002a0b0: 7265 7475 726e 2024 7072 6576 4469 7220 return $prevDir \n-0002a0c0: 2e20 272f 2720 2e20 2473 656c 662d 3e7b . '/' . $self->{\n-0002a0d0: 2763 6865 636b 5375 6d46 696c 6527 7d3b 'checkSumFile'};\n-0002a0e0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-0002a0f0: 2020 2020 7b0a 0972 6574 7572 6e20 756e {..return un\n-0002a100: 6465 663b 0a20 2020 207d 0a7d 0a0a 0a23 def;. }.}...#\n-0002a110: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002a120: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002a130: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002a140: 230a 2320 5370 6c69 7474 6574 2064 6965 #.# Splittet die\n-0002a150: 2050 6172 616d 6574 6572 6c69 7374 6520 Parameterliste \n-0002a160: 2866 616c 6c73 207a 7520 6c61 6e67 2920 (falls zu lang) \n-0002a170: 6175 660a 2320 5374 656c 6c74 206e 6163 auf.# Stellt nac\n-0002a180: 6820 6175 c39f 656e 2065 696e 2049 6e74 h au..en ein Int\n-0002a190: 6572 6661 6365 2061 6e61 6c6f 6720 666f erface analog fo\n-0002a1a0: 726b 5072 6f63 207a 7572 2056 6572 66c3 rkProc zur Verf.\n-0002a1b0: bc67 756e 670a 2320 286c c3a4 7566 7420 .gung.# (l..uft \n-0002a1c0: 696d 2048 696e 7465 7267 7275 6e64 2061 im Hintergrund a\n-0002a1d0: 6c73 2066 6f72 6b2f 6578 6563 290a 2320 ls fork/exec).# \n-0002a1e0: 4172 6265 6974 6574 202a 616c 6c65 2a20 Arbeitet *alle* \n-0002a1f0: 6162 2c20 6572 7374 2064 616e 6e20 7769 ab, erst dann wi\n-0002a200: 7264 2045 7267 6562 6e69 7320 6765 6c69 rd Ergebnis geli\n-0002a210: 6566 6572 740a 7061 636b 6167 6520 666f efert.package fo\n-0002a220: 726b 4d44 353b 0a0a 7375 6220 6e65 770a rkMD5;..sub new.\n-0002a230: 7b0a 2020 2020 6d79 2024 636c 6173 7320 {. my $class \n-0002a240: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-0002a250: 2473 656c 6620 3d20 7b7d 3b0a 0a20 2020 $self = {};.. \n-0002a260: 206d 7920 2825 7061 7261 6d73 2920 3d20 my (%params) = \n-0002a270: 2827 2d70 6172 616d 2720 2020 2020 203d ('-param' =\n-0002a280: 3e20 5b5d 2c0a 0909 2020 2020 272d 7072 > [],... '-pr\n-0002a290: 4c6f 6727 2020 2020 2020 3d3e 2075 6e64 Log' => und\n-0002a2a0: 6566 2c0a 0909 2020 2020 272d 746d 7064 ef,... '-tmpd\n-0002a2b0: 6972 2720 2020 2020 3d3e 2075 6e64 6566 ir' => undef\n-0002a2c0: 2c0a 0909 2020 2020 272d 7265 7365 7441 ,... '-resetA\n-0002a2d0: 7469 6d65 2720 3d3e 2075 6e64 6566 0a09 time' => undef..\n-0002a2e0: 0920 2020 2029 3b0a 0a20 2020 2026 3a3a . );.. &::\n-0002a2f0: 6368 6563 6b4f 626a 6563 7450 6172 616d checkObjectParam\n-0002a300: 7328 5c25 7061 7261 6d73 2c20 5c40 5f2c s(\\%params, \\@_,\n-0002a310: 2027 666f 726b 4d44 353a 3a6e 6577 272c 'forkMD5::new',\n-0002a320: 0a09 0909 205b 272d 7072 4c6f 6727 2c20 .... ['-prLog', \n-0002a330: 272d 746d 7064 6972 275d 293b 0a20 2020 '-tmpdir']);. \n-0002a340: 2026 3a3a 7365 7450 6172 616d 7344 6972 &::setParamsDir\n-0002a350: 6563 7428 2473 656c 662c 205c 2570 6172 ect($self, \\%par\n-0002a360: 616d 7329 3b0a 0a0a 2020 2020 2840 7b24 ams);... (@{$\n-0002a370: 7365 6c66 2d3e 7b27 7265 7375 6c74 5354 self->{'resultST\n-0002a380: 4445 5252 277d 7d29 203d 2028 293b 0a20 DERR'}}) = ();. \n-0002a390: 2020 2028 407b 2473 656c 662d 3e7b 2772 (@{$self->{'r\n-0002a3a0: 6573 756c 7453 5444 4f55 5427 7d7d 2920 esultSTDOUT'}}) \n-0002a3b0: 3d20 2829 3b0a 0a20 2020 2062 6c65 7373 = ();.. bless\n-0002a3c0: 2024 7365 6c66 2c20 2463 6c61 7373 3b0a $self, $class;.\n-0002a3d0: 0a20 2020 2023 2063 6163 6865 2061 7469 . # cache ati\n-0002a3e0: 6d65 2061 6e64 206d 7469 6d65 2069 6e20 me and mtime in \n-0002a3f0: 6f62 6a65 6374 0a20 2020 206d 7920 2840 object. my (@\n-0002a400: 6174 696d 652c 2040 6d74 696d 652c 2024 atime, @mtime, $\n-0002a410: 7029 3b0a 2020 2020 666f 7265 6163 6820 p);. foreach \n-0002a420: 2470 2028 407b 2473 656c 662d 3e7b 2770 $p (@{$self->{'p\n-0002a430: 6172 616d 277d 7d29 0a20 2020 207b 0a09 aram'}}). {..\n-0002a440: 6d79 2028 2461 7469 6d65 2c20 246d 7469 my ($atime, $mti\n-0002a450: 6d65 2920 3d20 2873 7461 7428 2470 2929 me) = (stat($p))\n-0002a460: 5b38 2c20 395d 3b0a 0970 7573 6820 4061 [8, 9];..push @a\n-0002a470: 7469 6d65 2c20 2461 7469 6d65 3b0a 0970 time, $atime;..p\n-0002a480: 7573 6820 406d 7469 6d65 2c20 246d 7469 ush @mtime, $mti\n-0002a490: 6d65 3b0a 2020 2020 7d0a 0a20 2020 2023 me;. }.. #\n-0002a4a0: 2073 746f 7265 2069 6e66 6f72 6d61 7469 store informati\n-0002a4b0: 6f6e 2074 6f20 7265 7374 6f72 6520 6174 on to restore at\n-0002a4c0: 696d 6520 2861 6e64 206d 7469 6d65 290a ime (and mtime).\n-0002a4d0: 2020 2020 407b 2473 656c 662d 3e7b 2761 @{$self->{'a\n-0002a4e0: 6c6c 5061 7261 6d27 7d7d 203d 2040 7b24 llParam'}} = @{$\n-0002a4f0: 7365 6c66 2d3e 7b27 7061 7261 6d27 7d7d self->{'param'}}\n-0002a500: 3b0a 2020 2020 2473 656c 662d 3e7b 2761 ;. $self->{'a\n-0002a510: 7469 6d65 277d 203d 205c 4061 7469 6d65 time'} = \\@atime\n-0002a520: 3b0a 2020 2020 2473 656c 662d 3e7b 276d ;. $self->{'m\n-0002a530: 7469 6d65 277d 203d 205c 406d 7469 6d65 time'} = \\@mtime\n-0002a540: 3b0a 0a20 2020 2024 7365 6c66 2d3e 5f73 ;.. $self->_s\n-0002a550: 7461 7274 4a6f 6228 293b 0a0a 2020 2020 tartJob();.. \n-0002a560: 7265 7475 726e 2024 7365 6c66 3b0a 7d0a return $self;.}.\n-0002a570: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n-0002a580: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002a590: 2323 2323 2323 2323 2323 0a73 7562 205f ##########.sub _\n-0002a5a0: 7374 6172 744a 6f62 0a7b 0a20 2020 206d startJob.{. m\n-0002a5b0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-0002a5c0: 0a0a 2020 2020 2473 656c 662d 3e7b 2766 .. $self->{'f\n-0002a5d0: 6f72 6b27 7d20 3d20 756e 6465 663b 0a0a ork'} = undef;..\n-0002a5e0: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n-0002a5f0: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n-0002a600: 3b0a 0a20 2020 2064 6f0a 2020 2020 7b0a ;.. do. {.\n-0002a610: 096d 7920 246c 203d 2030 3b20 2020 2020 .my $l = 0; \n-0002a620: 2023 2061 6b6b 756d 756c 6965 7274 6520 # akkumulierte \n-0002a630: 4cc3 a46e 6765 2064 6572 2050 6172 616d L..nge der Param\n-0002a640: 7465 7220 696e 2042 7974 650a 096d 7920 ter in Byte..my \n-0002a650: 2469 3b0a 096d 7920 2470 6172 616d 203d $i;..my $param =\n-0002a660: 2024 7365 6c66 2d3e 7b27 7061 7261 6d27 $self->{'param'\n-0002a670: 7d3b 2020 2020 2320 506f 696e 7465 7220 }; # Pointer \n-0002a680: 6175 6620 5061 7261 6d65 7465 7220 5665 auf Parameter Ve\n-0002a690: 6b74 6f72 0a0a 0966 6f72 2028 2469 203d ktor...for ($i =\n-0002a6a0: 2030 203b 2024 6920 3c20 4024 7061 7261 0 ; $i < @$para\n-0002a6b0: 6d20 3b20 2469 2b2b 290a 097b 0a09 2020 m ; $i++)..{.. \n-0002a6c0: 2020 6d79 2024 6c31 203d 2031 202b 206c my $l1 = 1 + l\n-0002a6d0: 656e 6774 6820 2424 7061 7261 6d5b 2469 ength $$param[$i\n-0002a6e0: 5d3b 2020 2020 2320 3120 4279 7465 2066 ]; # 1 Byte f\n-0002a6f0: c3bc 7220 275c 3027 2069 6e20 430a 0920 ..r '\\0' in C.. \n-0002a700: 2020 2069 6620 2824 6c20 2b20 246c 3120 if ($l + $l1 \n-0002a710: 3e20 246d 6169 6e3a 3a65 7865 6350 6172 > $main::execPar\n-0002a720: 616d 4c65 6e67 7468 290a 0920 2020 207b amLength).. {\n-0002a730: 0a09 096c 6173 743b 0a09 2020 2020 7d0a ...last;.. }.\n-0002a740: 0920 2020 2024 6c20 2b3d 2024 6c31 3b0a . $l += $l1;.\n-0002a750: 097d 0a0a 0969 6620 2824 6920 3d3d 2030 .}...if ($i == 0\n-0002a760: 2920 2020 2020 2023 2064 6572 2065 7273 ) # der ers\n-0002a770: 7465 2070 61c3 9f74 20c3 bc62 6572 6861 te pa..t ..berha\n-0002a780: 7570 7420 6e69 6368 7420 7265 696e 0a09 upt nicht rein..\n-0002a790: 7b20 2020 2020 2020 2020 2020 2020 2020 { \n-0002a7a0: 2020 2320 2869 7374 2061 6c6c 6569 6e65 # (ist alleine\n-0002a7b0: 2073 6368 6f6e 207a 7520 6c61 6e67 290a schon zu lang).\n-0002a7c0: 0920 2020 206d 7920 2461 6b74 5061 7220 . my $aktPar \n-0002a7d0: 3d20 7368 6966 7420 407b 2473 656c 662d = shift @{$self-\n-0002a7e0: 3e7b 2770 6172 616d 277d 7d3b 2020 2023 >{'param'}}; #\n-0002a7f0: 2065 7274 656e 2022 7765 6777 6572 6665 erten \"wegwerfe\n-0002a800: 6e22 0a09 2020 2020 2470 724c 6f67 2d3e n\".. $prLog->\n-0002a810: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0002a820: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-0002a830: 2720 3d3e 205b 2270 6172 616d 6574 6572 ' => [\"parameter\n-0002a840: 2074 6f20 6c6f 6e67 3a20 6361 6e6e 6f74 to long: cannot\n-0002a850: 2065 7865 6320 2220 2e0a 0909 0909 2020 exec \" ...... \n-0002a860: 2020 2022 6d64 3573 756d 2024 616b 7450 \"md5sum $aktP\n-0002a870: 6172 225d 293b 0a09 2020 2020 7265 7475 ar\"]);.. retu\n-0002a880: 726e 2069 6620 407b 2473 656c 662d 3e7b rn if @{$self->{\n-0002a890: 2770 6172 616d 277d 7d20 3d3d 2030 3b0a 'param'}} == 0;.\n-0002a8a0: 097d 0a09 656c 7365 2020 2020 2020 2020 .}..else \n-0002a8b0: 2023 206f 6b2c 2064 6965 206d c3b6 676c # ok, die m..gl\n-0002a8c0: 6963 6865 6e20 6175 7320 6465 6d20 6772 ichen aus dem gr\n-0002a8d0: 6fc3 9f65 6e20 5665 6b74 6f72 2072 6175 o..en Vektor rau\n-0002a8e0: 7368 6f6c 656e 0a09 7b0a 0920 2020 206d sholen..{.. m\n-0002a8f0: 7920 2840 616b 7450 6172 2920 3d20 7370 y (@aktPar) = sp\n-0002a900: 6c69 6365 2840 7b24 7365 6c66 2d3e 7b27 lice(@{$self->{'\n-0002a910: 7061 7261 6d27 7d7d 2c20 302c 2024 6929 param'}}, 0, $i)\n-0002a920: 3b0a 0920 2020 2024 6d61 696e 3a3a 7374 ;.. $main::st\n-0002a930: 6174 2d3e 696e 6372 5f6e 6f46 6f72 6b73 at->incr_noForks\n-0002a940: 4d44 3528 293b 0a09 2020 2020 246d 6169 MD5();.. $mai\n-0002a950: 6e3a 3a73 7461 742d 3e61 6464 5f6e 6f4d n::stat->add_noM\n-0002a960: 4435 6564 4669 6c65 7328 7363 616c 6172 D5edFiles(scalar\n-0002a970: 2040 616b 7450 6172 293b 0a09 2020 2020 @aktPar);.. \n-0002a980: 2473 656c 662d 3e7b 2766 6f72 6b27 7d20 $self->{'fork'} \n-0002a990: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new(\n-0002a9a0: 272d 6578 6563 2720 3d3e 2027 6d64 3573 '-exec' => 'md5s\n-0002a9b0: 756d 272c 0a09 0909 0909 2020 2020 272d um',...... '-\n-0002a9c0: 7061 7261 6d27 203d 3e20 5b40 616b 7450 param' => [@aktP\n-0002a9d0: 6172 5d2c 0a09 0909 0909 2020 2020 272d ar],...... '-\n-0002a9e0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0002a9f0: 2c0a 0909 0909 0920 2020 2027 2d77 6f72 ,...... '-wor\n-0002aa00: 6b69 6e67 4469 7227 203d 3e20 272e 272c kingDir' => '.',\n-0002aa10: 0a09 0909 0909 2020 2020 272d 6f75 7452 ...... '-outR\n-0002aa20: 616e 646f 6d27 203d 3e0a 0909 0909 0920 andom' =>...... \n-0002aa30: 2020 2024 7365 6c66 2d3e 7b27 746d 7064 $self->{'tmpd\n-0002aa40: 6972 277d 202e 2027 2f66 6f72 6b2d 6d64 ir'} . '/fork-md\n-0002aa50: 352d 2729 3b0a 0920 2020 2023 2041 6e7a 5-');.. # Anz\n-0002aa60: 6168 6c20 4279 7465 7320 6265 7265 6368 ahl Bytes berech\n-0002aa70: 6e65 6e0a 0920 2020 206d 7920 2473 756d nen.. my $sum\n-0002aa80: 203d 2030 3b0a 0920 2020 206d 7920 2470 = 0;.. my $p\n-0002aa90: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $\n-0002aaa0: 7020 2840 616b 7450 6172 290a 0920 2020 p (@aktPar).. \n-0002aab0: 207b 0a09 0924 7375 6d20 2b3d 2028 7374 {...$sum += (st\n-0002aac0: 6174 2824 7029 295b 375d 3b0a 0920 2020 at($p))[7];.. \n-0002aad0: 207d 0a09 2020 2020 246d 6169 6e3a 3a73 }.. $main::s\n-0002aae0: 7461 742d 3e61 6464 5375 6d4d 4435 5375 tat->addSumMD5Su\n-0002aaf0: 6d28 2473 756d 290a 0909 6966 2028 2473 m($sum)...if ($s\n-0002ab00: 756d 293b 0a09 2020 2020 7265 7475 726e um);.. return\n-0002ab10: 3b0a 097d 0a0a 2020 2020 7d20 7768 696c ;..}.. } whil\n-0002ab20: 6520 2824 7365 6c66 2d3e 7b27 666f 726b e ($self->{'fork\n-0002ab30: 277d 203d 3d20 756e 6465 6629 3b0a 7d0a '} == undef);.}.\n-0002ab40: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-0002ab50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002ab60: 2323 2323 2323 2323 2323 230a 2320 7265 ###########.# re\n-0002ab70: 7475 726e 7320 3120 6966 2070 726f 6365 turns 1 if proce\n-0002ab80: 7373 2073 7469 6c6c 2072 756e 6e69 6e67 ss still running\n-0002ab90: 0a23 2072 6574 7572 6e73 2030 2069 6620 .# returns 0 if \n-0002aba0: 7072 6f63 6573 7320 6973 206e 6f74 2072 process is not r\n-0002abb0: 756e 6e69 6e67 0a73 7562 2070 726f 6365 unning.sub proce\n-0002abc0: 7373 5275 6e73 0a7b 0a20 2020 206d 7920 ssRuns.{. my \n-0002abd0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;..\n-0002abe0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{\n-0002abf0: 2766 6f72 6b27 7d29 2020 2020 2320 5072 'fork'}) # Pr\n-0002ac00: 6f7a 6573 7320 6e6f 6368 206e 6963 6874 ozess noch nicht\n-0002ac10: 2061 7573 6765 7765 7274 6574 0a20 2020 ausgewertet. \n-0002ac20: 207b 0a09 6966 2028 2473 656c 662d 3e7b {..if ($self->{\n-0002ac30: 2766 6f72 6b27 7d2d 3e70 726f 6365 7373 'fork'}->process\n-0002ac40: 5275 6e73 2829 2920 2023 204a 6f62 206c Runs()) # Job l\n-0002ac50: c3a4 7566 7420 6e6f 6368 0a09 7b0a 0920 ..uft noch..{.. \n-0002ac60: 2020 2072 6574 7572 6e20 313b 0a09 7d0a return 1;..}.\n-0002ac70: 0965 6c73 6520 2020 2020 2020 2020 2020 .else \n-0002ac80: 2020 2020 2020 2020 2023 204a 6f62 2069 # Job i\n-0002ac90: 7374 2066 6572 7469 670a 097b 0a09 2020 st fertig..{.. \n-0002aca0: 2020 7075 7368 2040 7b24 7365 6c66 2d3e push @{$self->\n-0002acb0: 7b27 7265 7375 6c74 5354 4445 5252 277d {'resultSTDERR'}\n-0002acc0: 7d2c 2040 7b24 7365 6c66 2d3e 7b27 666f }, @{$self->{'fo\n-0002acd0: 726b 277d 2d3e 6765 7453 5444 4552 5228 rk'}->getSTDERR(\n-0002ace0: 297d 3b0a 0920 2020 2070 7573 6820 407b )};.. push @{\n-0002acf0: 2473 656c 662d 3e7b 2772 6573 756c 7453 $self->{'resultS\n-0002ad00: 5444 4f55 5427 7d7d 2c20 407b 2473 656c TDOUT'}}, @{$sel\n-0002ad10: 662d 3e7b 2766 6f72 6b27 7d2d 3e67 6574 f->{'fork'}->get\n-0002ad20: 5354 444f 5554 2829 7d3b 0a0a 0920 2020 STDOUT()};... \n-0002ad30: 2069 6620 2840 7b24 7365 6c66 2d3e 7b27 if (@{$self->{'\n-0002ad40: 7061 7261 6d27 7d7d 203e 2030 2920 2020 param'}} > 0) \n-0002ad50: 2020 2320 6e6f 6368 2077 6173 20c3 bc62 # noch was ..b\n-0002ad60: 7269 670a 0920 2020 207b 0a09 0924 7365 rig.. {...$se\n-0002ad70: 6c66 2d3e 5f73 7461 7274 4a6f 6228 293b lf->_startJob();\n-0002ad80: 0a09 0972 6574 7572 6e20 313b 0a09 2020 ...return 1;.. \n-0002ad90: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. \n-0002ada0: 2020 207b 0a09 0972 6574 7572 6e20 303b {...return 0;\n-0002adb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002adc0: 2020 2023 2066 6572 7469 6721 0a09 2020 # fertig!.. \n-0002add0: 2020 7d0a 097d 0a20 2020 207d 0a20 2020 }..}. }. \n-0002ade0: 2065 6c73 650a 2020 2020 7b0a 0972 6574 else. {..ret\n-0002adf0: 7572 6e20 303b 0a20 2020 207d 0a7d 0a0a urn 0;. }.}..\n-0002ae00: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0002ae10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002ae20: 2323 2323 2323 2323 230a 7375 6220 6765 #########.sub ge\n-0002ae30: 7453 5444 4552 520a 7b0a 2020 2020 6d79 tSTDERR.{. my\n-0002ae40: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-0002ae50: 0a20 2020 2072 6574 7572 6e20 2473 656c . return $sel\n-0002ae60: 662d 3e7b 2772 6573 756c 7453 5444 4552 f->{'resultSTDER\n-0002ae70: 5227 7d3b 0a7d 0a0a 0a23 2323 2323 2323 R'};.}...#######\n-0002ae80: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002ae90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002aea0: 230a 7375 6220 6765 7453 5444 4f55 540a #.sub getSTDOUT.\n-0002aeb0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n-0002aec0: 2073 6869 6674 3b0a 0a20 2020 2072 6574 shift;.. ret\n-0002aed0: 7572 6e20 2473 656c 662d 3e7b 2772 6573 urn $self->{'res\n-0002aee0: 756c 7453 5444 4f55 5427 7d3b 0a7d 0a0a ultSTDOUT'};.}..\n-0002aef0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0002af00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002af10: 2323 2323 2323 2323 230a 7375 6220 4445 #########.sub DE\n-0002af20: 5354 524f 590a 7b0a 2020 2020 6d79 2024 STROY.{. my $\n-0002af30: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. \n-0002af40: 2020 206d 7920 2461 7469 6d65 203d 2024 my $atime = $\n-0002af50: 7365 6c66 2d3e 7b27 6174 696d 6527 7d3b self->{'atime'};\n-0002af60: 0a20 2020 206d 7920 246d 7469 6d65 203d . my $mtime =\n-0002af70: 2024 7365 6c66 2d3e 7b27 6d74 696d 6527 $self->{'mtime'\n-0002af80: 7d3b 0a20 2020 206d 7920 2470 6172 616d };. my $param\n-0002af90: 203d 2024 7365 6c66 2d3e 7b27 616c 6c50 = $self->{'allP\n-0002afa0: 6172 616d 277d 3b0a 2020 2020 6d79 2024 aram'};. my $\n-0002afb0: 693b 0a20 2020 2066 6f72 2028 2469 203d i;. for ($i =\n-0002afc0: 2030 203b 2024 6920 3c20 4024 7061 7261 0 ; $i < @$para\n-0002afd0: 6d20 3b20 2469 2b2b 290a 2020 2020 7b0a m ; $i++). {.\n-0002afe0: 0975 7469 6d65 2024 2461 7469 6d65 5b24 .utime $$atime[$\n-0002aff0: 695d 2c20 2424 6d74 696d 655b 2469 5d2c i], $$mtime[$i],\n-0002b000: 2024 2470 6172 616d 5b24 695d 0a09 2020 $$param[$i].. \n-0002b010: 2020 6966 2024 7365 6c66 2d3e 7b27 7265 if $self->{'re\n-0002b020: 7365 7441 7469 6d65 277d 3b0a 2020 2020 setAtime'};. \n-0002b030: 7d0a 7d0a 0a23 2323 2323 2323 2323 2323 }.}..###########\n-0002b040: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002b050: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002b060: 2323 2323 2323 230a 7061 636b 6167 6520 #######.package \n-0002b070: 5363 6865 6475 6c65 723b 0a0a 7573 6520 Scheduler;..use \n-0002b080: 494f 3a3a 4669 6c65 3b0a 7573 6520 7374 IO::File;.use st\n-0002b090: 7269 6374 3b0a 7573 6520 7761 726e 696e rict;.use warnin\n-0002b0a0: 6773 3b0a 0a73 7562 206e 6577 0a7b 0a20 gs;..sub new.{. \n-0002b0b0: 2020 206d 7920 2463 6c61 7373 203d 2073 my $class = s\n-0002b0c0: 6869 6674 3b0a 0a20 2020 206d 7920 2473 hift;.. my $s\n-0002b0d0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m\n-0002b0e0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = ('\n-0002b0f0: 2d61 6b74 4669 6c65 6e61 6d65 2720 2020 -aktFilename' \n-0002b100: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-0002b110: 2020 2027 2d6f 6c64 4669 6c65 6e61 6d65 '-oldFilename\n-0002b120: 2720 2020 2020 203d 3e20 756e 6465 662c ' => undef,\n-0002b130: 0a09 0920 2020 2027 2d66 6f6c 6c6f 774c ... '-followL\n-0002b140: 696e 6b73 2720 2020 2020 203d 3e20 756e inks' => un\n-0002b150: 6465 662c 0a09 0920 2020 2027 2d70 7265 def,... '-pre\n-0002b160: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries\n-0002b170: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... \n-0002b180: 2020 272d 7265 6164 4469 7241 6e64 4368 '-readDirAndCh\n-0002b190: 6563 6b27 2020 3d3e 2075 6e64 6566 2c0a eck' => undef,.\n-0002b1a0: 0909 2020 2020 272d 7365 7452 6573 6574 .. '-setReset\n-0002b1b0: 4469 7254 696d 6573 2720 3d3e 2075 6e64 DirTimes' => und\n-0002b1c0: 6566 2c0a 0909 2020 2020 272d 7061 7246 ef,... '-parF\n-0002b1d0: 6f72 6b43 6f70 7927 2020 2020 2020 3d3e orkCopy' =>\n-0002b1e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-0002b1f0: 6669 666f 436f 7079 2720 2020 2020 2020 fifoCopy' \n-0002b200: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-0002b210: 2020 272d 7061 7246 6f72 6b43 6f6d 7072 '-parForkCompr\n-0002b220: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,.\n-0002b230: 0909 2020 2020 272d 6e6f 436f 6d70 7265 .. '-noCompre\n-0002b240: 7373 2720 2020 2020 2020 3d3e 2075 6e64 ss' => und\n-0002b250: 6566 2c0a 0909 2020 2020 272d 6669 666f ef,... '-fifo\n-0002b260: 436f 6d70 7227 2020 2020 2020 2020 3d3e Compr' =>\n-0002b270: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-0002b280: 626c 6f63 6b43 6865 636b 5375 6d46 696c blockCheckSumFil\n-0002b290: 6527 3d3e 2075 6e64 6566 2c0a 0909 2020 e'=> undef,... \n-0002b2a0: 2020 272d 7061 7246 6f72 6b42 6c6f 636b '-parForkBlock\n-0002b2b0: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,.\n-0002b2c0: 0909 2020 2020 272d 6669 666f 426c 6f63 .. '-fifoBloc\n-0002b2d0: 6b27 2020 2020 2020 2020 3d3e 2075 6e64 k' => und\n-0002b2e0: 6566 2c0a 0909 2020 2020 272d 636f 6d70 ef,... '-comp\n-0002b2f0: 7265 7373 2720 2020 2020 2020 2020 3d3e ress' =>\n-0002b300: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-0002b310: 6c61 7465 4c69 6e6b 7327 2020 2020 2020 lateLinks' \n-0002b320: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-0002b330: 2020 272d 6c61 7465 436f 6d70 7265 7373 '-lateCompress\n-0002b340: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,.\n-0002b350: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002b360: 2020 2020 272d 6370 4973 476e 7527 2020 '-cpIsGnu' \n-0002b370: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef\n-0002b380: 2c0a 0909 2020 2020 272d 6c69 6e6b 5379 ,... '-linkSy\n-0002b390: 6d6c 696e 6b73 2720 2020 2020 3d3e 2075 mlinks' => u\n-0002b3a0: 6e64 6566 2c0a 0909 2020 2020 272d 7375 ndef,... '-su\n-0002b3b0: 7070 7265 7373 5761 726e 696e 6727 2020 ppressWarning' \n-0002b3c0: 3d3e 2075 6e64 6566 2c0a 2020 2020 2020 => undef,. \n-0002b3d0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-0002b3e0: 7072 6573 6572 7665 5065 726d 7327 2020 preservePerms' \n-0002b3f0: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-0002b400: 2020 272d 636f 6d70 7252 756c 6527 2020 '-comprRule' \n-0002b410: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-0002b420: 2020 2027 2d70 6f73 7466 6978 2720 2020 '-postfix' \n-0002b430: 2020 2020 2020 203d 3e20 756e 6465 662c => undef,\n-0002b440: 0a09 0920 2020 2027 2d74 6172 6765 7444 ... '-targetD\n-0002b450: 6972 2720 2020 2020 2020 203d 3e20 756e ir' => un\n-0002b460: 6465 662c 0a09 0920 2020 2027 2d61 6b74 def,... '-akt\n-0002b470: 496e 666f 4669 6c65 2720 2020 2020 203d InfoFile' =\n-0002b480: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... '\n-0002b490: 2d72 6573 6574 4174 696d 6527 2020 2020 -resetAtime' \n-0002b4a0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... \n-0002b4b0: 2020 2027 2d74 6d70 6469 7227 2020 2020 '-tmpdir' \n-0002b4c0: 2020 2020 2020 203d 3e20 756e 6465 662c => undef,\n-0002b4d0: 0a09 0920 2020 2027 2d70 724c 6f67 2720 ... '-prLog' \n-0002b4e0: 2020 2020 2020 2020 2020 203d 3e20 756e => un\n-0002b4f0: 6465 662c 0a09 0920 2020 2027 2d69 6e74 def,... '-int\n-0002b500: 6572 6e61 6c50 6970 6542 7566 5369 7a65 ernalPipeBufSize\n-0002b510: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... \n-0002b520: 2020 272d 6465 6275 674d 6f64 6527 2020 '-debugMode' \n-0002b530: 2020 2020 2020 3d3e 2030 0a09 0920 2020 => 0... \n-0002b540: 2029 3b0a 0a20 2020 2026 3a3a 6368 6563 );.. &::chec\n-0002b550: 6b4f 626a 6563 7450 6172 616d 7328 5c25 kObjectParams(\\%\n-0002b560: 7061 7261 6d73 2c20 5c40 5f2c 2027 5363 params, \\@_, 'Sc\n-0002b570: 6865 6475 6c65 723a 3a6e 6577 272c 0a09 heduler::new',..\n-0002b580: 0909 205b 272d 616b 7446 696c 656e 616d .. ['-aktFilenam\n-0002b590: 6527 2c20 272d 6f6c 6446 696c 656e 616d e', '-oldFilenam\n-0002b5a0: 6527 2c20 272d 666f 6c6c 6f77 4c69 6e6b e', '-followLink\n-0002b5b0: 7327 2c0a 0909 0920 2027 2d70 7265 7642 s',.... '-prevB\n-0002b5c0: 6163 6b75 704f 776e 5365 7269 6573 272c ackupOwnSeries',\n-0002b5d0: 2027 2d72 6561 6444 6972 416e 6443 6865 '-readDirAndChe\n-0002b5e0: 636b 272c 0a09 0909 2020 272d 7365 7452 ck',.... '-setR\n-0002b5f0: 6573 6574 4469 7254 696d 6573 272c 2027 esetDirTimes', '\n-0002b600: 2d70 6172 466f 726b 436f 7079 272c 2027 -parForkCopy', '\n-0002b610: 2d66 6966 6f43 6f70 7927 2c0a 0909 0920 -fifoCopy',.... \n-0002b620: 2027 2d70 6172 466f 726b 436f 6d70 7227 '-parForkCompr'\n-0002b630: 2c20 272d 6669 666f 436f 6d70 7227 2c20 , '-fifoCompr', \n-0002b640: 272d 7375 7070 7265 7373 5761 726e 696e '-suppressWarnin\n-0002b650: 6727 2c0a 0909 0920 2027 2d63 6f6d 7072 g',.... '-compr\n-0002b660: 5275 6c65 272c 2027 2d63 6f6d 7072 6573 Rule', '-compres\n-0002b670: 7327 2c20 272d 706f 7374 6669 7827 2c0a s', '-postfix',.\n-0002b680: 0909 0920 2027 2d63 6f6d 7072 6573 7327 ... '-compress'\n-0002b690: 2c20 272d 706f 7374 6669 7827 2c20 272d , '-postfix', '-\n-0002b6a0: 696e 7465 726e 616c 5069 7065 4275 6653 internalPipeBufS\n-0002b6b0: 697a 6527 2c0a 0909 0920 2027 2d74 6172 ize',.... '-tar\n-0002b6c0: 6765 7444 6972 272c 2027 2d61 6b74 496e getDir', '-aktIn\n-0002b6d0: 666f 4669 6c65 272c 2027 2d72 6573 6574 foFile', '-reset\n-0002b6e0: 4174 696d 6527 2c0a 0909 0920 2027 2d70 Atime',.... '-p\n-0002b6f0: 724c 6f67 272c 2027 2d6c 6174 654c 696e rLog', '-lateLin\n-0002b700: 6b73 272c 2027 2d6c 6174 6543 6f6d 7072 ks', '-lateCompr\n-0002b710: 6573 7327 5d29 3b0a 2020 2020 263a 3a73 ess']);. &::s\n-0002b720: 6574 5061 7261 6d73 4469 7265 6374 2824 etParamsDirect($\n-0002b730: 7365 6c66 2c20 5c25 7061 7261 6d73 293b self, \\%params);\n-0002b740: 0a0a 2020 2020 6d79 2028 2463 6f6d 7072 .. my ($compr\n-0002b750: 6573 7343 6f6d 6d61 6e64 2c20 406f 7074 essCommand, @opt\n-0002b760: 696f 6e73 2920 3d20 407b 2470 6172 616d ions) = @{$param\n-0002b770: 737b 272d 636f 6d70 7265 7373 277d 7d3b s{'-compress'}};\n-0002b780: 0a20 2020 2024 7365 6c66 2d3e 7b27 636f . $self->{'co\n-0002b790: 6d70 7265 7373 436f 6d6d 616e 6427 7d20 mpressCommand'} \n-0002b7a0: 3d20 2463 6f6d 7072 6573 7343 6f6d 6d61 = $compressComma\n-0002b7b0: 6e64 3b0a 2020 2020 2473 656c 662d 3e7b nd;. $self->{\n-0002b7c0: 2763 6f6d 7072 6573 734f 7074 696f 6e73 'compressOptions\n-0002b7d0: 277d 203d 205c 406f 7074 696f 6e73 3b0a '} = \\@options;.\n-0002b7e0: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self\n-0002b7f0: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...##\n-0002b800: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002b810: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0002b820: 2323 2323 2323 0a23 2049 6465 653a 0a23 ######.# Idee:.#\n-0002b830: 2020 2020 c39c 6265 7277 6163 6875 6e67 ..berwachung\n-0002b840: 2064 6572 2066 6f72 6b73 2069 6e20 7061 der forks in pa\n-0002b850: 7246 6f72 6b43 6f70 7920 756e 6420 7061 rForkCopy und pa\n-0002b860: 7246 6f72 6b43 6f6d 7072 0a23 2020 2020 rForkCompr.# \n-0002b870: 5765 6e6e 2064 6965 7365 206d 6974 206e Wenn diese mit n\n-0002b880: 6575 656e 2044 6174 656e 2067 6566 c3bc euen Daten gef..\n-0002b890: 7474 6572 7420 7775 7264 656e 2c20 4175 ttert wurden, Au\n-0002b8a0: 6666 c3bc 6c6c 656e 0a23 2020 2020 766f ff..llen.# vo\n-0002b8b0: 6e20 6669 666f 436f 7079 2075 6e64 2066 n fifoCopy und f\n-0002b8c0: 6966 6f43 6f6d 7072 20c3 bc62 6572 2072 ifoCompr ..ber r\n-0002b8d0: 6561 6444 6972 416e 6443 6865 636b 0a73 eadDirAndCheck.s\n-0002b8e0: 7562 206e 6f72 6d61 6c4f 7065 7261 7469 ub normalOperati\n-0002b8f0: 6f6e 0a7b 0a20 2020 206d 7920 2473 656c on.{. my $sel\n-0002b900: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. \n-0002b910: 6d79 2024 616b 7446 696c 656e 616d 6520 my $aktFilename \n-0002b920: 3d20 2473 656c 662d 3e7b 2761 6b74 4669 = $self->{'aktFi\n-0002b930: 6c65 6e61 6d65 277d 3b0a 2020 2020 6d79 lename'};. my\n-0002b940: 2024 6f6c 6446 696c 656e 616d 6520 3d20 $oldFilename = \n-0002b950: 2473 656c 662d 3e7b 276f 6c64 4669 6c65 $self->{'oldFile\n-0002b960: 6e61 6d65 277d 3b0a 2020 2020 6d79 2024 name'};. my $\n-0002b970: 666f 6c6c 6f77 4c69 6e6b 7320 3d20 2473 followLinks = $s\n-0002b980: 656c 662d 3e7b 2766 6f6c 6c6f 774c 696e elf->{'followLin\n-0002b990: 6b73 277d 3b0a 2020 2020 6d79 2024 7072 ks'};. my $pr\n-0002b9a0: 6576 4261 636b 7570 4f77 6e53 6572 6965 evBackupOwnSerie\n-0002b9b0: 7320 3d20 2473 656c 662d 3e7b 2770 7265 s = $self->{'pre\n-0002b9c0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries\n-0002b9d0: 277d 3b0a 2020 2020 6d79 2024 7265 6164 '};. my $read\n-0002b9e0: 4469 7241 6e64 4368 6563 6b20 3d20 2473 DirAndCheck = $s\n-0002b9f0: 656c 662d 3e7b 2772 6561 6444 6972 416e elf->{'readDirAn\n-0002ba00: 6443 6865 636b 277d 3b0a 2020 2020 6d79 dCheck'};. my\n-0002ba10: 2024 7365 7452 6573 6574 4469 7254 696d $setResetDirTim\n-0002ba20: 6573 203d 2024 7365 6c66 2d3e 7b27 7365 es = $self->{'se\n-0002ba30: 7452 6573 6574 4469 7254 696d 6573 277d tResetDirTimes'}\n-0002ba40: 3b0a 2020 2020 6d79 2024 7061 7246 6f72 ;. my $parFor\n-0002ba50: 6b43 6f70 7920 3d20 2473 656c 662d 3e7b kCopy = $self->{\n-0002ba60: 2770 6172 466f 726b 436f 7079 277d 3b0a 'parForkCopy'};.\n-0002ba70: 2020 2020 6d79 2024 6669 666f 436f 7079 my $fifoCopy\n-0002ba80: 203d 2024 7365 6c66 2d3e 7b27 6669 666f = $self->{'fifo\n-0002ba90: 436f 7079 277d 3b0a 2020 2020 6d79 2024 Copy'};. my $\n-0002baa0: 7061 7246 6f72 6b43 6f6d 7072 203d 2024 parForkCompr = $\n-0002bab0: 7365 6c66 2d3e 7b27 7061 7246 6f72 6b43 self->{'parForkC\n-0002bac0: 6f6d 7072 277d 3b0a 2020 2020 6d79 2024 ompr'};. my $\n-0002bad0: 6669 666f 436f 6d70 7220 3d20 2473 656c fifoCompr = $sel\n-0002bae0: 662d 3e7b 2766 6966 6f43 6f6d 7072 277d f->{'fifoCompr'}\n-0002baf0: 3b0a 2020 2020 6d79 2024 626c 6f63 6b43 ;. my $blockC\n-0002bb00: 6865 636b 5375 6d46 696c 6520 3d20 2473 heckSumFile = $s\n-0002bb10: 656c 662d 3e7b 2762 6c6f 636b 4368 6563 elf->{'blockChec\n-0002bb20: 6b53 756d 4669 6c65 277d 3b0a 2020 2020 kSumFile'};. \n-0002bb30: 6d79 2024 7061 7246 6f72 6b42 6c6f 636b my $parForkBlock\n-0002bb40: 203d 2024 7365 6c66 2d3e 7b27 7061 7246 = $self->{'parF\n-0002bb50: 6f72 6b42 6c6f 636b 277d 3b0a 2020 2020 orkBlock'};. \n-0002bb60: 6d79 2024 6669 666f 426c 6f63 6b20 3d20 my $fifoBlock = \n-0002bb70: 2473 656c 662d 3e7b 2766 6966 6f42 6c6f $self->{'fifoBlo\n-0002bb80: 636b 277d 3b0a 2020 2020 6d79 2024 636f ck'};. my $co\n-0002bb90: 6d70 7265 7373 203d 206a 6f69 6e28 2720 mpress = join(' \n-0002bba0: 272c 2040 7b24 7365 6c66 2d3e 7b27 636f ', @{$self->{'co\n-0002bbb0: 6d70 7265 7373 277d 7d29 3b0a 2020 2020 mpress'}});. \n-0002bbc0: 6d79 2024 636f 6d70 7265 7373 436f 6d6d my $compressComm\n-0002bbd0: 616e 6420 3d20 2473 656c 662d 3e7b 2763 and = $self->{'c\n-0002bbe0: 6f6d 7072 6573 7343 6f6d 6d61 6e64 277d ompressCommand'}\n-0002bbf0: 3b0a 2020 2020 6d79 2024 636f 6d70 7265 ;. my $compre\n-0002bc00: 7373 4f70 7469 6f6e 7320 3d20 2473 656c ssOptions = $sel\n-0002bc10: 662d 3e7b 2763 6f6d 7072 6573 734f 7074 f->{'compressOpt\n-0002bc20: 696f 6e73 277d 3b0a 2020 2020 6d79 2024 ions'};. my $\n-0002bc30: 706f 7374 6669 7820 3d20 2473 656c 662d postfix = $self-\n-0002bc40: 3e7b 2770 6f73 7466 6978 277d 3b0a 2020 >{'postfix'};. \n-0002bc50: 2020 6d79 2024 636f 6d70 7252 756c 6520 my $comprRule \n-0002bc60: 3d20 2473 656c 662d 3e7b 2763 6f6d 7072 = $self->{'compr\n-0002bc70: 5275 6c65 277d 3b0a 2020 2020 6d79 2024 Rule'};. my $\n-0002bc80: 7461 7267 6574 4469 7220 3d20 2473 656c targetDir = $sel\n-0002bc90: 662d 3e7b 2774 6172 6765 7444 6972 277d f->{'targetDir'}\n-0002bca0: 3b0a 2020 2020 6d79 2024 616b 7449 6e66 ;. my $aktInf\n-0002bcb0: 6f46 696c 6520 3d20 2473 656c 662d 3e7b oFile = $self->{\n-0002bcc0: 2761 6b74 496e 666f 4669 6c65 277d 3b0a 'aktInfoFile'};.\n-0002bcd0: 2020 2020 6d79 2024 7265 7365 7441 7469 my $resetAti\n-0002bce0: 6d65 203d 2024 7365 6c66 2d3e 7b27 7265 me = $self->{'re\n-0002bcf0: 7365 7441 7469 6d65 277d 3b0a 2020 2020 setAtime'};. \n-0002bd00: 6d79 2024 746d 7064 6972 203d 2024 7365 my $tmpdir = $se\n-0002bd10: 6c66 2d3e 7b27 746d 7064 6972 277d 3b0a lf->{'tmpdir'};.\n-0002bd20: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n-0002bd30: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n-0002bd40: 3b0a 2020 2020 6d79 2024 6465 6275 674d ;. my $debugM\n-0002bd50: 6f64 6520 3d20 2473 656c 662d 3e7b 2764 ode = $self->{'d\n-0002bd60: 6562 7567 4d6f 6465 277d 3b0a 2020 2020 ebugMode'};. \n-0002bd70: 6d79 2024 676e 7563 7020 3d20 2473 656c my $gnucp = $sel\n-0002bd80: 662d 3e7b 2763 7049 7347 6e75 277d 3b0a f->{'cpIsGnu'};.\n-0002bd90: 2020 2020 6d79 2024 6c69 6e6b 5379 6d6c my $linkSyml\n-0002bda0: 696e 6b73 203d 2024 7365 6c66 2d3e 7b27 inks = $self->{'\n-0002bdb0: 6c69 6e6b 5379 6d6c 696e 6b73 277d 3b0a linkSymlinks'};.\n-0002bdc0: 2020 2020 6d79 2024 6c61 7465 436f 6d70 my $lateComp\n-0002bdd0: 7265 7373 203d 2024 7365 6c66 2d3e 7b27 ress = $self->{'\n-0002bde0: 6c61 7465 436f 6d70 7265 7373 277d 3b0a lateCompress'};.\n-0002bdf0: 2020 2020 6d79 2024 6c61 7465 4c69 6e6b my $lateLink\n-0002be00: 7320 3d20 2473 656c 662d 3e7b 276c 6174 s = $self->{'lat\n-0002be10: 654c 696e 6b73 277d 3b0a 2020 2020 6d79 eLinks'};. my\n-0002be20: 2024 696e 7465 726e 616c 5069 7065 4275 $internalPipeBu\n-0002be30: 6653 697a 6520 3d20 2473 656c 662d 3e7b fSize = $self->{\n-0002be40: 2769 6e74 6572 6e61 6c50 6970 6542 7566 'internalPipeBuf\n-0002be50: 5369 7a65 277d 2c0a 2020 2020 6d79 2024 Size'},. my $\n-0002be60: 7375 7070 7265 7373 5761 726e 696e 6720 suppressWarning \n-0002be70: 3d20 2473 656c 662d 3e7b 2773 7570 7072 = $self->{'suppr\n-0002be80: 6573 7357 6172 6e69 6e67 277d 3b0a 0a20 essWarning'};.. \n-0002be90: 2020 2023 2073 6574 2073 6176 6520 7065 # set save pe\n-0002bea0: 726d 6973 7369 6f6e 730a 2020 2020 756d rmissions. um\n-0002beb0: 6173 6b28 3030 3737 293b 0a0a 2020 2020 ask(0077);.. \n-0002bec0: 6d79 2028 2561 6c6c 4261 636b 7570 4469 my (%allBackupDi\n-0002bed0: 7273 2920 3d20 2829 3b0a 0a23 7072 696e rs) = ();..#prin\n-0002bee0: 7420 222b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b t \"+++++++++++++\n-0002bef0: 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b ++++++++++++++++\n-0002bf00: 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b ++++++++++++++++\n-0002bf10: 2b2b 2b2b 2b5c 6e22 3b0a 2020 2020 6d79 +++++\\n\";. my\n-0002bf20: 2024 6469 7220 3d20 2473 656c 662d 3e7b $dir = $self->{\n-0002bf30: 2774 6172 6765 7444 6972 277d 3b0a 2020 'targetDir'};. \n-0002bf40: 2020 6d79 2024 6d69 7373 4c69 6e6b 7320 my $missLinks \n-0002bf50: 3d0a 096d 6973 7369 6e67 4c69 6e6b 732d =..missingLinks-\n-0002bf60: 3e6e 6577 2827 2d62 6163 6b75 7044 6972 >new('-backupDir\n-0002bf70: 2720 3d3e 2024 7072 6576 4261 636b 7570 ' => $prevBackup\n-0002bf80: 4f77 6e53 6572 6965 732c 2023 2024 6469 OwnSeries, # $di\n-0002bf90: 722c 0a09 272d 6d69 7373 696e 674c 696e r,..'-missingLin\n-0002bfa0: 6b46 696c 6527 203d 3e20 222e 6d64 3543 kFile' => \".md5C\n-0002bfb0: 6865 636b 5375 6d73 2e66 6169 6c22 2c0a heckSums.fail\",.\n-0002bfc0: 0927 2d6d 6973 7369 6e67 4c69 6e6b 426c .'-missingLinkBl\n-0002bfd0: 6f63 6b46 696c 6527 203d 3e20 222e 6d64 ockFile' => \".md\n-0002bfe0: 3542 6c6f 636b 4368 6563 6b53 756d 732e 5BlockCheckSums.\n-0002bff0: 6661 696c 222c 0a09 272d 7072 4c6f 6727 fail\",..'-prLog'\n-0002c000: 203d 3e20 2470 724c 6f67 293b 0a0a 2020 => $prLog);.. \n-0002c010: 2020 6d79 2025 666f 7263 6543 6f70 7943 my %forceCopyC\n-0002c020: 6f6d 7072 3b20 2020 2320 6265 6c6f 6e67 ompr; # belong\n-0002c030: 7320 746f 206d 6973 7369 6e67 4c69 6e6b s to missingLink\n-0002c040: 730a 2020 2020 2020 2020 2020 2020 2020 s. \n-0002c050: 2020 2020 2020 2020 2020 2020 2320 2466 # $f\n-0002c060: 6f72 6365 436f 7079 436f 6d70 727b 2466 orceCopyCompr{$f\n-0002c070: 696c 657d 203d 3e20 3120 2069 6620 696e ile} => 1 if in\n-0002c080: 2046 4641 494c 0a20 2020 206d 7920 246c FFAIL. my $l\n-0002c090: 6174 654c 696e 6b46 696c 6520 3d20 2224 ateLinkFile = \"$\n-0002c0a0: 7461 7267 6574 4469 722f 2e73 746f 7265 targetDir/.store\n-0002c0b0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link\n-0002c0c0: 4669 6c65 2e62 7a32 223b 0a20 2020 206d File.bz2\";. m\n-0002c0d0: 7920 2477 724c 6174 654c 696e 6b3b 0a0a y $wrLateLink;..\n-0002c0e0: 2020 2020 6d79 2040 6465 7644 6972 7320 my @devDirs \n-0002c0f0: 3d20 2829 3b0a 2020 2020 6966 2028 246c = ();. if ($l\n-0002c100: 6174 654c 696e 6b73 290a 2020 2020 7b0a ateLinks). {.\n-0002c110: 096d 7920 2473 203d 2024 6c61 7465 436f .my $s = $lateCo\n-0002c120: 6d70 7265 7373 203f 0a09 2020 2020 226c mpress ?.. \"l\n-0002c130: 6174 654c 696e 6b73 2061 6e64 206c 6174 ateLinks and lat\n-0002c140: 6543 6f6d 7072 6573 7320 6172 6522 203a eCompress are\" :\n-0002c150: 2022 6c61 7465 4c69 6e6b 7320 6973 223b \"lateLinks is\";\n-0002c160: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-0002c170: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-0002c180: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0002c190: 3e20 5b22 2473 2073 7769 7463 6865 6420 > [\"$s switched \n-0002c1a0: 6f6e 225d 293b 0a0a 0924 7772 4c61 7465 on\"]);...$wrLate\n-0002c1b0: 4c69 6e6b 203d 2070 6970 6554 6f46 6f72 Link = pipeToFor\n-0002c1c0: 6b2d 3e6e 6577 2827 2d65 7865 6327 203d k->new('-exec' =\n-0002c1d0: 3e20 2762 7a69 7032 272c 0a09 0909 0920 > 'bzip2',..... \n-0002c1e0: 2020 2020 2027 2d73 7464 6f75 7427 203d '-stdout' =\n-0002c1f0: 3e20 246c 6174 654c 696e 6b46 696c 652c > $lateLinkFile,\n-0002c200: 0a09 0909 0920 2020 2020 2027 2d6f 7574 ..... '-out\n-0002c210: 5261 6e64 6f6d 2720 3d3e 2022 2474 6d70 Random' => \"$tmp\n-0002c220: 6469 722f 7374 6275 5069 7065 546f 3132 dir/stbuPipeTo12\n-0002c230: 2d22 2c0a 0909 0909 2020 2020 2020 272d -\",..... '-\n-0002c240: 6465 6c53 7464 6f75 7427 203d 3e20 276e delStdout' => 'n\n-0002c250: 6f27 2c0a 0909 0909 2020 2020 2020 272d o',..... '-\n-0002c260: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0002c270: 293b 0a0a 0924 7772 4c61 7465 4c69 6e6b );...$wrLateLink\n-0002c280: 2d3e 7072 696e 7428 2223 206c 696e 6b20 ->print(\"# link \n-0002c290: 6d64 3573 756d 5c6e 235c 7465 7869 7374 md5sum\\n#\\texist\n-0002c2a0: 696e 6746 696c 655c 6e23 5c74 6e65 774c ingFile\\n#\\tnewL\n-0002c2b0: 696e 6b5c 6e22 2c0a 0909 2020 2022 2320 ink\\n\",... \"# \n-0002c2c0: 636f 6d70 7265 7373 206d 6435 7375 6d5c compress md5sum\\\n-0002c2d0: 6e23 5c74 6669 6c65 546f 436f 6d70 7265 n#\\tfileToCompre\n-0002c2e0: 7373 5c6e 2320 6469 7220 6469 724e 616d ss\\n# dir dirNam\n-0002c2f0: 655c 6e22 2c0a 0909 2020 2022 2320 7379 e\\n\",... \"# sy\n-0002c300: 6d6c 696e 6b20 6669 6c65 5c6e 235c 7474 mlink file\\n#\\tt\n-0002c310: 6172 6765 745c 6e22 2c0a 0909 2020 2022 arget\\n\",... \"\n-0002c320: 2320 6c69 6e6b 5379 6d6c 696e 6b20 6c69 # linkSymlink li\n-0002c330: 6e6b 5c6e 235c 7465 7869 7374 696e 6746 nk\\n#\\texistingF\n-0002c340: 696c 655c 6e23 5c74 6e65 774c 696e 6b5c ile\\n#\\tnewLink\\\n-0002c350: 6e22 293b 0a20 2020 207d 0a0a 2020 2020 n\");. }.. \n-0002c360: 6d79 2024 7072 6573 6572 7665 5065 726d my $preservePerm\n-0002c370: 7320 3d20 2473 656c 662d 3e7b 2770 7265 s = $self->{'pre\n-0002c380: 7365 7276 6550 6572 6d73 277d 3b0a 0a20 servePerms'};.. \n-0002c390: 2020 206d 7920 2466 696c 6573 4c65 6674 my $filesLeft\n-0002c3a0: 203d 2031 3b0a 2020 2020 6d79 2028 2569 = 1;. my (%i\n-0002c3b0: 6e50 726f 6772 6573 7329 203d 2028 293b nProgress) = ();\n-0002c3c0: 2023 2024 696e 5072 6f67 7265 7373 7b24 # $inProgress{$\n-0002c3d0: 6d64 357d 203d 205b 5b24 6469 722c 2024 md5} = [[$dir, $\n-0002c3e0: 6669 6c65 2c20 246d 6435 2c20 2474 7970 file, $md5, $typ\n-0002c3f0: 6573 5d2c 0a20 2020 2020 2020 2020 2020 es],. \n-0002c400: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002c410: 2320 2020 2020 2020 2020 2020 2020 2020 # \n-0002c420: 2020 2020 2020 205b 2464 6972 2c20 2466 [$dir, $f\n-0002c430: 696c 652c 2024 6d64 352c 2024 7479 7065 ile, $md5, $type\n-0002c440: 735d 2c0a 2020 2020 2020 2020 2020 2020 s],. \n-0002c450: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-0002c460: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002c470: 2020 2020 2020 5b24 6469 722c 2024 6669 [$dir, $fi\n-0002c480: 6c65 2c20 246d 6435 2c20 2474 7970 6573 le, $md5, $types\n-0002c490: 5d5d 0a20 2020 2020 2020 2020 2020 2020 ]]. \n-0002c4a0: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-0002c4b0: 5075 6666 6572 2066 c3bc 7220 4461 7465 Puffer f..r Date\n-0002c4c0: 6965 6e2c 2064 6965 2067 6572 6164 6520 ien, die gerade \n-0002c4d0: 6b6f 6d70 7269 6d69 6572 7420 6f64 6572 komprimiert oder\n-0002c4e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-0002c4f0: 2020 2020 2020 2020 2020 2020 2320 6b6f # ko\n-0002c500: 7069 6572 7420 7765 7264 656e 2e20 2469 piert werden. $i\n-0002c510: 6e50 726f 6772 6573 737b 246d 6435 7d20 nProgress{$md5} \n-0002c520: 3d20 5b5d 2062 6564 6575 7465 742c 0a20 = [] bedeutet,. \n-0002c530: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002c540: 2020 2020 2020 2020 2020 2320 6461 c39f # da..\n-0002c550: 2065 696e 6520 4461 7465 6920 6d69 7420 eine Datei mit \n-0002c560: 6465 7220 6d64 352d 5375 6d6d 6520 696e der md5-Summe in\n-0002c570: 2042 6561 7262 6569 7475 6e67 0a20 2020 Bearbeitung. \n-0002c580: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002c590: 2020 2020 2020 2020 2320 6973 742c 2061 # ist, a\n-0002c5a0: 6265 7220 6b65 696e 6520 676c 6569 6368 ber keine gleich\n-0002c5b0: 6172 7469 6765 6e20 696e 2064 6572 2053 artigen in der S\n-0002c5c0: 6368 6c61 6e67 6520 7369 6e64 0a20 2020 chlange sind. \n-0002c5d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002c5e0: 2020 2020 2020 2020 2320 2d3e 2056 6172 # -> Var\n-0002c5f0: 6961 626c 6520 6973 7420 4d65 726b 6572 iable ist Merker\n-0002c600: 202b 2050 7566 6665 7220 7a75 676c 6569 + Puffer zuglei\n-0002c610: 6368 0a0a 2020 2020 6d79 2024 676e 7543 ch.. my $gnuC\n-0002c620: 6f70 7920 3d20 2763 7027 3b0a 2020 2020 opy = 'cp';. \n-0002c630: 6d79 2028 4067 6e75 436f 7079 5061 7253 my (@gnuCopyParS\n-0002c640: 7065 6369 616c 2920 3d20 2827 2d61 2729 pecial) = ('-a')\n-0002c650: 3b0a 0a20 2020 206d 7920 2462 6c6f 636b ;.. my $block\n-0002c660: 5061 7261 6c6c 656c 203d 2030 3b20 2023 Parallel = 0; #\n-0002c670: 2062 6c6f 636b 2a20 6669 6c65 7320 6172 block* files ar\n-0002c680: 6520 6e6f 7420 7265 6164 2069 6e20 7061 e not read in pa\n-0002c690: 7261 6c6c 656c 2074 6f20 6f74 6865 7273 rallel to others\n-0002c6a0: 0a20 2020 206d 7920 2466 696c 653b 0a20 . my $file;. \n-0002c6b0: 2020 2023 206d 6169 6e20 6c6f 6f70 0a20 # main loop. \n-0002c6c0: 2020 2077 6869 6c65 2028 2466 696c 6573 while ($files\n-0002c6d0: 4c65 6674 206f 720a 2020 2020 2020 2020 Left or. \n-0002c6e0: 2020 2024 6669 666f 436f 7079 2d3e 6765 $fifoCopy->ge\n-0002c6f0: 744e 6f55 7365 6445 6e74 7269 6573 2829 tNoUsedEntries()\n-0002c700: 203e 2030 206f 720a 2020 2020 2020 2020 > 0 or. \n-0002c710: 2020 2024 6669 666f 436f 6d70 722d 3e67 $fifoCompr->g\n-0002c720: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries(\n-0002c730: 2920 3e20 3020 6f72 0a09 2020 2024 6669 ) > 0 or.. $fi\n-0002c740: 666f 426c 6f63 6b2d 3e67 6574 4e6f 5573 foBlock->getNoUs\n-0002c750: 6564 456e 7472 6965 7328 2920 3e20 3020 edEntries() > 0 \n-0002c760: 6f72 0a20 2020 2020 2020 2020 2020 2470 or. $p\n-0002c770: 6172 466f 726b 436f 7079 2d3e 6765 744e arForkCopy->getN\n-0002c780: 6f55 7365 6445 6e74 7269 6573 2829 203e oUsedEntries() >\n-0002c790: 2030 206f 720a 2020 2020 2020 2020 2020 0 or. \n-0002c7a0: 2024 7061 7246 6f72 6b43 6f6d 7072 2d3e $parForkCompr->\n-0002c7b0: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries\n-0002c7c0: 2829 203e 2030 206f 720a 0920 2020 2470 () > 0 or.. $p\n-0002c7d0: 6172 466f 726b 426c 6f63 6b2d 3e67 6574 arForkBlock->get\n-0002c7e0: 4e6f 5573 6564 456e 7472 6965 7328 2920 NoUsedEntries() \n-0002c7f0: 3e20 3029 0a20 2020 207b 0a62 6567 696e > 0). {.begin\n-0002c800: 4d61 696e 4c6f 6f70 4e6f 726d 616c 4f70 MainLoopNormalOp\n-0002c810: 6572 6174 696f 6e3a 3b0a 0a09 2320 5761 eration:;...# Wa\n-0002c820: 7274 6573 6368 6c61 6e67 656e 2066 c3bc rteschlangen f..\n-0002c830: 6c6c 656e 2073 6f6c 616e 6765 2050 6c61 llen solange Pla\n-0002c840: 747a 2069 7374 2075 6e64 2062 6973 2065 tz ist und bis e\n-0002c850: 696e 2046 6f72 6b0a 2020 2020 2020 2020 in Fork. \n-0002c860: 2320 6265 656e 6465 7420 6973 7420 6f64 # beendet ist od\n-0002c870: 6572 2065 696e 206e 6575 6572 2067 6573 er ein neuer ges\n-0002c880: 7461 7274 6574 2077 6572 6465 6e20 6b61 tartet werden ka\n-0002c890: 6e6e 2e0a 0977 6869 6c65 2028 2466 696c nn...while ($fil\n-0002c8a0: 6573 4c65 6674 2061 6e64 0a20 2020 2020 esLeft and. \n-0002c8b0: 2020 2020 2020 2020 2020 2466 6966 6f43 $fifoC\n-0002c8c0: 6f70 792d 3e67 6574 4e6f 4672 6565 456e opy->getNoFreeEn\n-0002c8d0: 7472 6965 7328 2920 3e20 3020 616e 640a tries() > 0 and.\n-0002c8e0: 2020 2020 2020 2020 2020 2020 2020 2024 $\n-0002c8f0: 6669 666f 436f 6d70 722d 3e67 6574 4e6f fifoCompr->getNo\n-0002c900: 4672 6565 456e 7472 6965 7328 2920 3e20 FreeEntries() > \n-0002c910: 3020 616e 640a 0920 2020 2020 2020 2466 0 and.. $f\n-0002c920: 6966 6f42 6c6f 636b 2d3e 6765 744e 6f46 ifoBlock->getNoF\n-0002c930: 7265 6545 6e74 7269 6573 2829 203e 2030 reeEntries() > 0\n-0002c940: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n-0002c950: 2020 2020 6e6f 7420 2470 6172 466f 726b not $parFork\n-0002c960: 436f 7079 2d3e 6a6f 6246 696e 6973 6865 Copy->jobFinishe\n-0002c970: 6428 2920 616e 640a 2020 2020 2020 2020 d() and. \n-0002c980: 2020 2020 2020 206e 6f74 2024 7061 7246 not $parF\n-0002c990: 6f72 6b43 6f6d 7072 2d3e 6a6f 6246 696e orkCompr->jobFin\n-0002c9a0: 6973 6865 6428 2920 616e 640a 0920 2020 ished() and.. \n-0002c9b0: 2020 2020 6e6f 7420 2470 6172 466f 726b not $parFork\n-0002c9c0: 426c 6f63 6b2d 3e6a 6f62 4669 6e69 7368 Block->jobFinish\n-0002c9d0: 6564 2829 2061 6e64 0a20 2020 2020 2020 ed() and. \n-0002c9e0: 2020 2020 2020 2020 6e6f 7420 2824 7061 not ($pa\n-0002c9f0: 7246 6f72 6b43 6f6d 7072 2d3e 6765 744e rForkCompr->getN\n-0002ca00: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() >\n-0002ca10: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. \n-0002ca20: 2020 2020 2020 2020 2020 2024 6669 666f $fifo\n-0002ca30: 436f 6d70 722d 3e67 6574 4e6f 5573 6564 Compr->getNoUsed\n-0002ca40: 456e 7472 6965 7328 2920 3e20 3029 2061 Entries() > 0) a\n-0002ca50: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. \n-0002ca60: 2020 6e6f 7420 2824 7061 7246 6f72 6b43 not ($parForkC\n-0002ca70: 6f70 792d 3e67 6574 4e6f 4672 6565 456e opy->getNoFreeEn\n-0002ca80: 7472 6965 7328 2920 3e20 3020 616e 640a tries() > 0 and.\n-0002ca90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002caa0: 2020 2020 2466 6966 6f43 6f70 792d 3e67 $fifoCopy->g\n-0002cab0: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries(\n-0002cac0: 2920 3e20 3029 2061 6e64 0a09 2020 2020 ) > 0) and.. \n-0002cad0: 2020 206e 6f74 2028 2470 6172 466f 726b not ($parFork\n-0002cae0: 426c 6f63 6b2d 3e67 6574 4e6f 4672 6565 Block->getNoFree\n-0002caf0: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an\n-0002cb00: 640a 0909 2020 2020 2466 6966 6f42 6c6f d... $fifoBlo\n-0002cb10: 636b 2d3e 6765 744e 6f55 7365 6445 6e74 ck->getNoUsedEnt\n-0002cb20: 7269 6573 2829 203e 2030 2929 0a20 2020 ries() > 0)). \n-0002cb30: 2020 2020 207b 0a09 2020 2020 6d79 2028 {.. my (\n-0002cb40: 2464 6972 2c20 246d 6435 2c20 2474 7970 $dir, $md5, $typ\n-0002cb50: 6529 3b0a 0920 2020 206d 7920 246e 203d e);.. my $n =\n-0002cb60: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $\n-0002cb70: 6d64 352c 2024 7479 7065 2920 3d0a 0909 md5, $type) =...\n-0002cb80: 2472 6561 6444 6972 416e 6443 6865 636b $readDirAndCheck\n-0002cb90: 2d3e 6e65 7874 2829 3b0a 0920 2020 2069 ->next();.. i\n-0002cba0: 6620 2824 6e20 3d3d 2030 2920 2020 2020 f ($n == 0) \n-0002cbb0: 2020 2020 2320 6e69 7820 6d65 6872 207a # nix mehr z\n-0002cbc0: 7520 686f 6c65 6e21 0a09 2020 2020 7b0a u holen!.. {.\n-0002cbd0: 0909 2466 696c 6573 4c65 6674 203d 2030 ..$filesLeft = 0\n-0002cbe0: 3b0a 0909 6c61 7374 3b0a 0920 2020 207d ;...last;.. }\n-0002cbf0: 0a23 2320 2020 2070 7269 6e74 2022 2b2b .## print \"++\n-0002cc00: 2b2b 2b2b 2474 7970 653a 206d 6435 7375 ++++$type: md5su\n-0002cc10: 6d20 2824 6669 6c65 2920 3d20 246d 6435 m ($file) = $md5\n-0002cc20: 5c6e 223b 0a23 0920 2020 2024 7072 4c6f \\n\";.#. $prLo\n-0002cc30: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0002cc40: 203d 3e20 2744 272c 0a23 0909 0920 2027 => 'D',.#... '\n-0002cc50: 2d73 7472 2720 3d3e 205b 223c 2466 696c -str' => [\"<$fil\n-0002cc60: 653e 206b 6f6d 6d74 225d 293b 0a0a 0920 e> kommt\"]);... \n-0002cc70: 2020 2069 6620 2864 6566 696e 6564 2824 if (defined($\n-0002cc80: 6669 6c65 2920 616e 640a 0909 2474 7970 file) and...$typ\n-0002cc90: 6520 6571 2027 6627 2061 6e64 0a09 0924 e eq 'f' and...$\n-0002cca0: 6d69 7373 4c69 6e6b 732d 3e63 6865 636b missLinks->check\n-0002ccb0: 7375 6d46 6169 6c73 2827 2d63 6865 636b sumFails('-check\n-0002ccc0: 7375 6d27 203d 3e20 246d 6435 2929 0a09 sum' => $md5))..\n-0002ccd0: 2020 2020 7b20 2020 2020 2020 2020 2020 { \n-0002cce0: 2020 2320 666f 756e 6420 6f6e 6520 6f66 # found one of\n-0002ccf0: 2074 6865 2027 6661 6669 6c27 2063 6865 the 'fafil' che\n-0002cd00: 636b 7375 6d73 0a23 0970 7269 6e74 2022 cksums.#.print \"\n-0002cd10: 6368 6563 6b73 756d 2068 6974 2028 246d checksum hit ($m\n-0002cd20: 6435 2920 2f2f 206c 6174 654c 696e 6b73 d5) // lateLinks\n-0002cd30: 203d 2024 6c61 7465 4c69 6e6b 735c 6e22 = $lateLinks\\n\"\n-0002cd40: 3b0a 0909 6966 2028 246c 6174 654c 696e ;...if ($lateLin\n-0002cd50: 6b73 290a 0909 7b0a 2324 7072 4c6f 672d ks)...{.#$prLog-\n-0002cd60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0002cd70: 3e20 2744 272c 0a23 0920 2020 2020 2027 > 'D',.#. '\n-0002cd80: 2d73 7472 2720 3d3e 205b 2246 4149 4c20 -str' => [\"FAIL \n-0002cd90: 4849 5420 2074 7970 653d 3c53 7479 7065 HIT type= // file=<$file\n-0002cdb0: 3e22 5d29 3b0a 2020 2466 6f72 6365 436f >\"]);. $forceCo\n-0002cdc0: 7079 436f 6d70 727b 2466 696c 657d 203d pyCompr{$file} =\n-0002cdd0: 2031 3b0a 0909 2020 2020 2470 724c 6f67 1;... $prLog\n-0002cde0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-0002cdf0: 3d3e 2027 4927 2c0a 2020 2020 2020 2020 => 'I',. \n-0002ce00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002ce10: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n-0002ce20: 0909 0909 2020 5b22 636f 7272 6563 7469 .... [\"correcti\n-0002ce30: 6e67 203c 2464 6972 2f24 6669 6c65 3e22 ng <$dir/$file>\"\n-0002ce40: 5d29 3b0a 0a09 097d 0a09 2020 2020 7d0a ]);....}.. }.\n-0002ce50: 0a23 2323 2323 2323 2323 2121 2121 2121 .#########!!!!!!\n-0002ce60: 2121 0a23 6966 2028 2474 7970 6520 6571 !!.#if ($type eq\n-0002ce70: 2027 7265 7065 6174 2729 0a23 7b0a 2320 'repeat').#{.# \n-0002ce80: 2020 2070 7269 6e74 2022 676f 7420 7265 print \"got re\n-0002ce90: 7065 6174 2024 7479 7065 203c 2464 6972 peat $type <$dir\n-0002cea0: 3e5c 6e22 3b0a 237d 0a23 656c 7365 0a23 >\\n\";.#}.#else.#\n-0002ceb0: 7b0a 2320 2020 206d 7920 246d 203d 2028 {.# my $m = (\n-0002cec0: 246d 6435 203f 2024 6d64 3520 3a20 2275 $md5 ? $md5 : \"u\n-0002ced0: 6e64 6566 2229 3b0a 2320 2020 2070 7269 ndef\");.# pri\n-0002cee0: 6e74 2022 676f 7420 6669 6c65 4469 7220 nt \"got fileDir \n-0002cef0: 2474 7970 6520 246d 203c 2464 6972 3e20 $type $m <$dir> \n-0002cf00: 3c24 6669 6c65 3e5c 6e22 3b0a 237d 0a09 <$file>\\n\";.#}..\n-0002cf10: 2020 2020 6c61 7374 2069 6620 2824 7479 last if ($ty\n-0002cf20: 7065 2065 7120 2772 6570 6561 7427 293b pe eq 'repeat');\n-0002cf30: 2023 204d 4435 5375 6d20 6cc3 a475 6674 # MD5Sum l..uft\n-0002cf40: 206e 6f63 680a 0a09 2020 2020 6966 2028 noch... if (\n-0002cf50: 2466 696c 6520 3d7e 202f 5c6e 2f20 616e $file =~ /\\n/ an\n-0002cf60: 640a 0909 6e6f 7420 6578 6973 7473 2024 d...not exists $\n-0002cf70: 2473 7570 7072 6573 7357 6172 6e69 6e67 $suppressWarning\n-0002cf80: 7b27 6669 6c65 4e61 6d65 5769 7468 4c69 {'fileNameWithLi\n-0002cf90: 6e65 4665 6564 277d 290a 0920 2020 207b neFeed'}).. {\n-0002cfa0: 0a09 096d 7920 2466 203d 2024 6669 6c65 ...my $f = $file\n-0002cfb0: 3b0a 0909 2466 203d 7e20 732f 5c6e 2f5c ;...$f =~ s/\\n/\\\n-0002cfc0: 5c6e 2f67 3b0a 0909 2470 724c 6f67 2d3e \\n/g;...$prLog->\n-0002cfd0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0002cfe0: 2027 5727 2c0a 0909 0920 2020 2020 2027 'W',.... '\n-0002cff0: 2d73 7472 2720 3d3e 205b 223c 2464 6972 -str' => [\"<$dir\n-0002d000: 2f24 663e 2068 6173 205c 5c6e 2069 6e20 /$f> has \\\\n in \n-0002d010: 7468 6520 6669 6c65 206e 616d 6522 5d29 the file name\"])\n-0002d020: 0a09 2020 2020 7d0a 0a20 2020 2020 2020 .. }.. \n-0002d030: 2020 2020 2023 204f 6b2c 2077 6972 2068 # Ok, wir h\n-0002d040: 6162 656e 2077 6173 207a 7520 6265 6172 aben was zu bear\n-0002d050: 6265 6974 656e 0a20 2020 2020 2020 2020 beiten. \n-0002d060: 2020 2024 6d61 696e 3a3a 7469 6e79 5761 $main::tinyWa\n-0002d070: 6974 5363 6865 6475 6c65 722d 3e72 6573 itScheduler->res\n-0002d080: 6574 2829 3b0a 0a09 2020 2020 2320 5265 et();... # Re\n-0002d090: 6368 7465 2065 7463 2e20 6465 7220 4f72 chte etc. der Or\n-0002d0a0: 6967 696e 616c 6461 7465 6920 6c65 7365 iginaldatei lese\n-0002d0b0: 6e0a 0920 2020 206d 7920 2824 6465 762c n.. my ($dev,\n-0002d0c0: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, \n-0002d0d0: 2475 6964 2c20 2467 6964 2c20 2473 697a $uid, $gid, $siz\n-0002d0e0: 652c 2024 6174 696d 652c 0a09 0924 6d74 e, $atime,...$mt\n-0002d0f0: 696d 652c 2024 6374 696d 6529 3b0a 0920 ime, $ctime);.. \n-0002d100: 2020 206d 7920 245f 6465 7074 6820 3d20 my $_depth = \n-0002d110: 2d31 3b0a 0a09 2020 2020 6966 2028 6e6f -1;... if (no\n-0002d120: 7420 2d6c 2022 2464 6972 2f24 6669 6c65 t -l \"$dir/$file\n-0002d130: 2220 616e 6420 6e6f 7420 2d65 2022 2464 \" and not -e \"$d\n-0002d140: 6972 2f24 6669 6c65 2229 0a09 2020 2020 ir/$file\").. \n-0002d150: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin\n-0002d160: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n-0002d170: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-0002d180: 2720 3d3e 205b 223c 2464 6972 2f24 6669 ' => [\"<$dir/$fi\n-0002d190: 6c65 3e20 7265 6d6f 7665 6420 6475 7269 le> removed duri\n-0002d1a0: 6e67 2062 6163 6b75 7022 5d29 3b0a 0909 ng backup\"]);...\n-0002d1b0: 6e65 7874 3b0a 0920 2020 207d 0a0a 0920 next;.. }... \n-0002d1c0: 2020 2028 2464 6576 2c20 2469 6e6f 6465 ($dev, $inode\n-0002d1d0: 2c20 246d 6f64 652c 2024 7569 642c 2024 , $mode, $uid, $\n-0002d1e0: 6769 642c 2024 7369 7a65 2c20 2461 7469 gid, $size, $ati\n-0002d1f0: 6d65 2c0a 0920 2020 2020 246d 7469 6d65 me,.. $mtime\n-0002d200: 2c20 2463 7469 6d65 2920 3d0a 0909 2028 , $ctime) =... (\n-0002d210: 7374 6174 2822 2464 6972 2f24 6669 6c65 stat(\"$dir/$file\n-0002d220: 2229 295b 302c 312c 322c 342c 352c 372c \"))[0,1,2,4,5,7,\n-0002d230: 382c 392c 3130 5d3b 0a23 7072 696e 7420 8,9,10];.#print \n-0002d240: 226c 6f6f 703a 203c 2474 7970 653e 2024 \"loop: <$type> $\n-0002d250: 6469 723a 2f3a 2466 696c 655c 6e22 3b0a dir:/:$file\\n\";.\n-0002d260: 0920 2020 2069 6620 2824 7479 7065 2065 . if ($type e\n-0002d270: 7120 2764 2729 0a09 2020 2020 7b0a 0909 q 'd').. {...\n-0002d280: 6d79 2028 4064 756d 6d79 293b 0a09 0924 my (@dummy);...$\n-0002d290: 5f64 6570 7468 203d 2028 4064 756d 6d79 _depth = (@dummy\n-0002d2a0: 2920 3d20 2466 696c 6520 3d7e 206d 232f ) = $file =~ m#/\n-0002d2b0: 2367 3b0a 0909 6966 2028 245f 6465 7074 #g;...if ($_dept\n-0002d2c0: 6820 2b20 3120 3c3d 2024 666f 6c6c 6f77 h + 1 <= $follow\n-0002d2d0: 4c69 6e6b 7320 616e 640a 0909 2020 2020 Links and... \n-0002d2e0: 2d6c 2022 2464 6972 2f24 6669 6c65 2229 -l \"$dir/$file\")\n-0002d2f0: 0a09 097b 0a09 0920 2020 2024 5f64 6570 ...{... $_dep\n-0002d300: 7468 203d 2031 3b0a 0909 7d0a 0909 656c th = 1;...}...el\n-0002d310: 7365 0a09 097b 0a09 0920 2020 2024 5f64 se...{... $_d\n-0002d320: 6570 7468 203d 202d 313b 0a09 097d 0a09 epth = -1;...}..\n-0002d330: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($\n-0002d340: 5f64 6570 7468 203d 3d20 2d31 290a 0920 _depth == -1).. \n-0002d350: 2020 207b 0a09 0928 2464 6576 2c20 2469 {...($dev, $i\n-0002d360: 6e6f 6465 2c20 246d 6f64 652c 2024 7569 node, $mode, $ui\n-0002d370: 642c 2024 6769 642c 2024 7369 7a65 2c20 d, $gid, $size, \n-0002d380: 2461 7469 6d65 2c0a 0909 2024 6d74 696d $atime,... $mtim\n-0002d390: 652c 2024 6374 696d 6529 203d 0a09 0920 e, $ctime) =... \n-0002d3a0: 2020 2020 286c 7374 6174 2822 2464 6972 (lstat(\"$dir\n-0002d3b0: 2f24 6669 6c65 2229 295b 302c 312c 322c /$file\"))[0,1,2,\n-0002d3c0: 342c 352c 372c 382c 392c 3130 5d3b 0a09 4,5,7,8,9,10];..\n-0002d3d0: 2020 2020 7d0a 2020 2020 2020 2020 2020 }. \n-0002d3e0: 2020 6966 2028 6e6f 7420 6465 6669 6e65 if (not define\n-0002d3f0: 6420 2464 6576 290a 0920 2020 207b 0a09 d $dev).. {..\n-0002d400: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0002d410: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n-0002d420: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0002d430: 3e20 5b22 6361 6e6e 6f74 2073 7461 7420 > [\"cannot stat \n-0002d440: 3c24 6669 6c65 3e3a 2024 2122 5d29 3b0a <$file>: $!\"]);.\n-0002d450: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002d460: 6e65 7874 3b0a 2020 2020 2020 2020 2020 next;. \n-0002d470: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. \n-0002d480: 246d 6f64 6520 263d 2030 3737 3737 3b0a $mode &= 07777;.\n-0002d490: 0a09 2020 2020 6966 2028 2466 696c 6520 .. if ($file \n-0002d4a0: 6571 2024 616b 7449 6e66 6f46 696c 6520 eq $aktInfoFile \n-0002d4b0: 6f72 2024 6669 6c65 2065 7120 2224 616b or $file eq \"$ak\n-0002d4c0: 7449 6e66 6f46 696c 652e 627a 3222 290a tInfoFile.bz2\").\n-0002d4d0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog-\n-0002d4e0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0002d4f0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... \n-0002d500: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => [\"cann\n-0002d510: 6f74 2068 616e 646c 6520 3c24 6669 6c65 ot handle <$file\n-0002d520: 3e2c 2022 202e 0a09 0909 0909 2022 636f >, \" ....... \"co\n-0002d530: 6c6c 6973 696f 6e20 7769 7468 2069 6e66 llision with inf\n-0002d540: 6f20 6669 6c65 225d 293b 0a09 096e 6578 o file\"]);...nex\n-0002d550: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... \n-0002d560: 6966 2028 2474 7970 6520 6571 2027 6427 if ($type eq 'd'\n-0002d570: 2920 2020 2020 2020 2020 2020 2023 2064 ) # d\n-0002d580: 6972 6563 746f 7279 2061 6e6c 6567 656e irectory anlegen\n-0002d590: 0a09 2020 2020 7b0a 0909 6966 2028 246c .. {...if ($l\n-0002d5a0: 6174 654c 696e 6b73 2061 6e64 206e 6f74 ateLinks and not\n-0002d5b0: 0a09 0920 2020 2028 6465 6669 6e65 6428 ... (defined(\n-0002d5c0: 2466 696c 6529 2061 6e64 2065 7869 7374 $file) and exist\n-0002d5d0: 7320 2466 6f72 6365 436f 7079 436f 6d70 s $forceCopyComp\n-0002d5e0: 727b 2466 696c 657d 2929 0a09 097b 0a09 r{$file}))...{..\n-0002d5f0: 0920 2020 206d 7920 246c 6174 6544 6972 . my $lateDir\n-0002d600: 203d 2024 6669 6c65 3b0a 0909 2020 2020 = $file;... \n-0002d610: 246c 6174 6544 6972 203d 7e20 732f 5c6e $lateDir =~ s/\\n\n-0002d620: 2f5c 302f 6f67 3b0a 0909 2020 2020 2477 /\\0/og;... $w\n-0002d630: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print\n-0002d640: 2822 6469 7220 246c 6174 6544 6972 5c6e (\"dir $lateDir\\n\n-0002d650: 2229 3b0a 0909 7d0a 0909 656c 7365 0a09 \");...}...else..\n-0002d660: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog-\n-0002d670: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0002d680: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s\n-0002d690: 7472 2720 3d3e 0a09 0909 0920 205b 2263 tr' =>..... [\"c\n-0002d6a0: 616e 6e6f 7420 6372 6561 7465 2064 6972 annot create dir\n-0002d6b0: 6563 746f 7279 203c 2474 6172 6765 7444 ectory <$targetD\n-0002d6c0: 6972 2f24 6669 6c65 3e22 5d2c 0a09 0909 ir/$file>\"],....\n-0002d6d0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n-0002d6e0: 0a09 0909 756e 6c65 7373 206d 6b64 6972 ....unless mkdir\n-0002d6f0: 2022 2474 6172 6765 7444 6972 2f24 6669 \"$targetDir/$fi\n-0002d700: 6c65 222c 2030 3730 303b 0a0a 0909 2020 le\", 0700;.... \n-0002d710: 2020 6966 2028 2470 7265 7365 7276 6550 if ($preserveP\n-0002d720: 6572 6d73 290a 0909 2020 2020 7b0a 0909 erms)... {...\n-0002d730: 0963 686f 776e 2024 7569 642c 2024 6769 .chown $uid, $gi\n-0002d740: 642c 2022 2474 6172 6765 7444 6972 2f24 d, \"$targetDir/$\n-0002d750: 6669 6c65 223b 0a09 0909 2473 6574 5265 file\";....$setRe\n-0002d760: 7365 7444 6972 5469 6d65 732d 3e61 6464 setDirTimes->add\n-0002d770: 4469 7228 2466 696c 652c 2024 6174 696d Dir($file, $atim\n-0002d780: 652c 2024 6d74 696d 652c 2024 6d6f 6465 e, $mtime, $mode\n-0002d790: 293b 0a09 0920 2020 207d 0a09 0920 2020 );... }... \n-0002d7a0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-0002d7b0: 2d6b 696e 6427 203d 3e20 2744 272c 0a09 -kind' => 'D',..\n-0002d7c0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n-0002d7d0: 0909 0920 205b 2263 7265 6174 6564 2064 ... [\"created d\n-0002d7e0: 6972 6563 746f 7279 203c 2474 6172 6765 irectory <$targe\n-0002d7f0: 7444 6972 2f24 6669 6c65 225d 290a 0909 tDir/$file\"])...\n-0002d800: 0969 6620 2824 6465 6275 674d 6f64 6520 .if ($debugMode \n-0002d810: 3e20 3029 3b0a 0909 7d0a 0a09 0924 6d61 > 0);...}....$ma\n-0002d820: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n-0002d830: 6f44 6972 7328 2475 6964 2c20 2467 6964 oDirs($uid, $gid\n-0002d840: 293b 0a0a 0909 2461 6b74 4669 6c65 6e61 );....$aktFilena\n-0002d850: 6d65 2d3e 7374 6f72 6544 6972 2827 2d64 me->storeDir('-d\n-0002d860: 6972 2720 3d3e 2024 6669 6c65 2c0a 0909 ir' => $file,...\n-0002d870: 0909 2020 2020 2020 2027 2d64 6576 2720 .. '-dev' \n-0002d880: 3d3e 2024 6465 762c 0a09 0909 0920 2020 => $dev,..... \n-0002d890: 2020 2020 272d 696e 6f64 6527 203d 3e20 '-inode' => \n-0002d8a0: 2469 6e6f 6465 2c0a 0909 0909 2020 2020 $inode,..... \n-0002d8b0: 2020 2027 2d63 7469 6d65 2720 3d3e 2024 '-ctime' => $\n-0002d8c0: 6374 696d 652c 0a09 0909 0920 2020 2020 ctime,..... \n-0002d8d0: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m\n-0002d8e0: 7469 6d65 2c0a 0909 0909 2020 2020 2020 time,..... \n-0002d8f0: 2027 2d61 7469 6d65 2720 3d3e 2024 6174 '-atime' => $at\n-0002d900: 696d 652c 0a09 0909 0920 2020 2020 2020 ime,..... \n-0002d910: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,.\n-0002d920: 0909 0909 2020 2020 2020 2027 2d67 6964 .... '-gid\n-0002d930: 2720 3d3e 2024 6769 642c 0a09 0909 0920 ' => $gid,..... \n-0002d940: 2020 2020 2020 272d 6d6f 6465 2720 3d3e '-mode' =>\n-0002d950: 2024 6d6f 6465 293b 0a09 096e 6578 743b $mode);...next;\n-0002d960: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if\n-0002d970: 2028 2474 7970 6520 6571 2027 6c27 2920 ($type eq 'l') \n-0002d980: 2020 2020 2020 2020 2020 2023 2073 796d # sym\n-0002d990: 626f 6c69 6320 6c69 6e6b 0a09 2020 2020 bolic link.. \n-0002d9a0: 7b0a 0909 6d79 2024 6c20 3d20 7265 6164 {...my $l = read\n-0002d9b0: 6c69 6e6b 2022 2464 6972 2f24 6669 6c65 link \"$dir/$file\n-0002d9c0: 223b 0a0a 0909 6966 2028 246c 696e 6b53 \";....if ($linkS\n-0002d9d0: 796d 6c69 6e6b 7329 0a09 097b 0a09 0920 ymlinks)...{... \n-0002d9e0: 2020 2069 6620 2824 7072 6576 4261 636b if ($prevBack\n-0002d9f0: 7570 4f77 6e53 6572 6965 7320 616e 640a upOwnSeries and.\n-0002da00: 0909 092d 6c20 2224 7072 6576 4261 636b ...-l \"$prevBack\n-0002da10: 7570 4f77 6e53 6572 6965 732f 2466 696c upOwnSeries/$fil\n-0002da20: 6522 290a 0909 2020 2020 7b0a 0909 096d e\")... {....m\n-0002da30: 7920 246c 5f70 7265 7620 3d20 7265 6164 y $l_prev = read\n-0002da40: 6c69 6e6b 2022 2470 7265 7642 6163 6b75 link \"$prevBacku\n-0002da50: 704f 776e 5365 7269 6573 2f24 6669 6c65 pOwnSeries/$file\n-0002da60: 223b 0a0a 0909 0969 6620 2824 6c20 6571 \";.....if ($l eq\n-0002da70: 2024 6c5f 7072 6576 290a 0909 097b 0a09 $l_prev)....{..\n-0002da80: 0909 2020 2020 6966 2028 246c 6174 654c .. if ($lateL\n-0002da90: 696e 6b73 2061 6e64 206e 6f74 0a09 0909 inks and not....\n-0002daa0: 0928 6465 6669 6e65 6428 2466 696c 6529 .(defined($file)\n-0002dab0: 2061 6e64 2065 7869 7374 7320 2466 6f72 and exists $for\n-0002dac0: 6365 436f 7079 436f 6d70 727b 2466 696c ceCopyCompr{$fil\n-0002dad0: 657d 2929 0a09 0909 2020 2020 7b0a 0909 e})).... {...\n-0002dae0: 0909 6d79 2024 5f6f 6c64 203d 2022 2470 ..my $_old = \"$p\n-0002daf0: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri\n-0002db00: 6573 2f24 6669 6c65 223b 0a09 0909 0924 es/$file\";.....$\n-0002db10: 5f6f 6c64 203d 203a 3a72 656c 5061 7468 _old = ::relPath\n-0002db20: 2824 7461 7267 6574 4469 722c 2024 5f6f ($targetDir, $_o\n-0002db30: 6c64 293b 0a09 0909 0924 5f6f 6c64 203d ld);.....$_old =\n-0002db40: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 0909 ~ s/\\n/\\0/og;...\n-0002db50: 0909 6d79 2024 5f6e 6577 203d 2024 6669 ..my $_new = $fi\n-0002db60: 6c65 3b0a 0909 0909 245f 6e65 7720 3d7e le;.....$_new =~\n-0002db70: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 s/\\n/\\0/og;....\n-0002db80: 0924 7772 4c61 7465 4c69 6e6b 2d3e 7072 .$wrLateLink->pr\n-0002db90: 696e 7428 0a09 0909 0920 2020 2022 6c69 int(..... \"li\n-0002dba0: 6e6b 5379 6d6c 696e 6b20 246c 5c6e 245f nkSymlink $l\\n$_\n-0002dbb0: 6f6c 645c 6e24 5f6e 6577 5c6e 2229 3b0a old\\n$_new\\n\");.\n-0002dbc0: 0909 0909 2673 746f 7265 5379 6d4c 696e ....&storeSymLin\n-0002dbd0: 6b49 6e66 6f73 2824 7569 642c 2024 6769 kInfos($uid, $gi\n-0002dbe0: 642c 2024 7461 7267 6574 4469 722c 0a09 d, $targetDir,..\n-0002dbf0: 0909 0909 0920 2020 2466 696c 652c 2024 ..... $file, $\n-0002dc00: 6465 762c 2024 696e 6f64 652c 0a09 0909 dev, $inode,....\n-0002dc10: 0909 0920 2020 2463 7469 6d65 2c20 246d ... $ctime, $m\n-0002dc20: 7469 6d65 2c20 2461 7469 6d65 2c0a 0909 time, $atime,...\n-0002dc30: 0909 0909 2020 2024 616b 7446 696c 656e .... $aktFilen\n-0002dc40: 616d 652c 2024 6465 6275 674d 6f64 652c ame, $debugMode,\n-0002dc50: 0a09 0909 0909 0920 2020 2470 724c 6f67 ....... $prLog\n-0002dc60: 293b 0a09 0909 096e 6578 743b 0a09 0909 );.....next;....\n-0002dc70: 2020 2020 7d0a 0909 0920 2020 2024 7072 }.... $pr\n-0002dc80: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0002dc90: 6427 203d 3e20 2744 272c 0a09 0909 0909 d' => 'D',......\n-0002dca0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n-0002dcb0: 0920 205b 226c 696e 6b20 2470 7265 7642 . [\"link $prevB\n-0002dcc0: 6163 6b75 704f 776e 5365 7269 6573 2f24 ackupOwnSeries/$\n-0002dcd0: 6669 6c65 2220 2e0a 0909 0909 0920 2022 file\" ....... \"\n-0002dce0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-0002dcf0: 225d 290a 0909 0909 6966 2024 6465 6275 \"]).....if $debu\n-0002dd00: 674d 6f64 6520 3e3d 2032 3b0a 0909 0920 gMode >= 2;.... \n-0002dd10: 2020 206d 7920 2468 6c20 3d20 2d31 3b0a my $hl = -1;.\n-0002dd20: 0909 0920 2020 2069 6620 2824 6d61 7848 ... if ($maxH\n-0002dd30: 6172 644c 696e 6b73 203e 2030 290a 0909 ardLinks > 0)...\n-0002dd40: 0920 2020 207b 0a09 0909 0924 686c 203d . {.....$hl =\n-0002dd50: 2028 6c73 7461 7428 2224 7072 6576 4261 (lstat(\"$prevBa\n-0002dd60: 636b 7570 4f77 6e53 6572 6965 732f 2466 ckupOwnSeries/$f\n-0002dd70: 696c 6522 2929 5b33 5d3b 0a23 7072 696e ile\"))[3];.#prin\n-0002dd80: 7420 2273 796d 6c69 6e6b 3a20 2470 7265 t \"symlink: $pre\n-0002dd90: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries\n-0002dda0: 2f24 6669 6c65 3a20 2468 6c20 6861 7264 /$file: $hl hard\n-0002ddb0: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL\n-0002ddc0: 696e 6b73 295c 6e22 3b0a 0909 0920 2020 inks)\\n\";.... \n-0002ddd0: 207d 0a09 0909 2020 2020 6966 2028 2468 }.... if ($h\n-0002dde0: 6c20 3c20 246d 6178 4861 7264 4c69 6e6b l < $maxHardLink\n-0002ddf0: 7320 616e 640a 0909 0909 6c69 6e6b 2022 s and.....link \"\n-0002de00: 2470 7265 7642 6163 6b75 704f 776e 5365 $prevBackupOwnSe\n-0002de10: 7269 6573 2f24 6669 6c65 222c 0a09 0909 ries/$file\",....\n-0002de20: 0922 2474 6172 6765 7444 6972 2f24 6669 .\"$targetDir/$fi\n-0002de30: 6c65 2229 0a09 0909 2020 2020 7b0a 0909 le\").... {...\n-0002de40: 0909 2663 6861 6e67 6553 796d 6c69 6e6b ..&changeSymlink\n-0002de50: 5065 726d 7328 2475 6964 2c20 2467 6964 Perms($uid, $gid\n-0002de60: 2c20 2474 6172 6765 7444 6972 2c0a 0909 , $targetDir,...\n-0002de70: 0909 0909 2020 2020 2466 696c 652c 2024 .... $file, $\n-0002de80: 746d 7064 6972 2c20 2470 724c 6f67 290a tmpdir, $prLog).\n-0002de90: 0909 0909 2020 2020 6966 2028 2470 7265 .... if ($pre\n-0002dea0: 7365 7276 6550 6572 6d73 293b 0a09 0909 servePerms);....\n-0002deb0: 0926 7374 6f72 6553 796d 4c69 6e6b 496e .&storeSymLinkIn\n-0002dec0: 666f 7328 2475 6964 2c20 2467 6964 2c20 fos($uid, $gid, \n-0002ded0: 2474 6172 6765 7444 6972 2c0a 0909 0909 $targetDir,.....\n-0002dee0: 0909 2020 2024 6669 6c65 2c20 2464 6576 .. $file, $dev\n-0002def0: 2c20 2469 6e6f 6465 2c0a 0909 0909 0909 , $inode,.......\n-0002df00: 2020 2024 6374 696d 652c 2024 6d74 696d $ctime, $mtim\n-0002df10: 652c 2024 6174 696d 652c 0a09 0909 0909 e, $atime,......\n-0002df20: 0920 2020 2461 6b74 4669 6c65 6e61 6d65 . $aktFilename\n-0002df30: 2c20 2464 6562 7567 4d6f 6465 2c0a 0909 , $debugMode,...\n-0002df40: 0909 0909 2020 2024 7072 4c6f 6729 3b0a .... $prLog);.\n-0002df50: 0909 0909 6e65 7874 3b0a 0a09 0909 2020 ....next;..... \n-0002df60: 2020 7d0a 0909 097d 0a09 0920 2020 207d }....}... }\n-0002df70: 0a09 097d 0a09 0969 6620 2824 6c61 7465 ...}...if ($late\n-0002df80: 4c69 6e6b 7320 616e 6420 6e6f 740a 0909 Links and not...\n-0002df90: 2020 2020 2864 6566 696e 6564 2824 6669 (defined($fi\n-0002dfa0: 6c65 2920 616e 6420 6578 6973 7473 2024 le) and exists $\n-0002dfb0: 666f 7263 6543 6f70 7943 6f6d 7072 7b24 forceCopyCompr{$\n-0002dfc0: 6669 6c65 7d29 290a 0909 7b0a 0909 2020 file}))...{... \n-0002dfd0: 2020 6d79 2024 5f66 696c 6520 3d20 2224 my $_file = \"$\n-0002dfe0: 6669 6c65 223b 0a09 0920 2020 2024 5f66 file\";... $_f\n-0002dff0: 696c 6520 3d7e 2073 2f5c 6e2f 5c30 2f6f ile =~ s/\\n/\\0/o\n-0002e000: 673b 0a09 0920 2020 206d 7920 245f 6c20 g;... my $_l \n-0002e010: 3d20 246c 3b0a 0909 2020 2020 246c 203d = $l;... $l =\n-0002e020: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 0909 ~ s/\\n/\\0/og;...\n-0002e030: 2020 2020 2477 724c 6174 654c 696e 6b2d $wrLateLink-\n-0002e040: 3e70 7269 6e74 2822 7379 6d6c 696e 6b20 >print(\"symlink \n-0002e050: 245f 6669 6c65 5c6e 246c 5c6e 2229 3b0a $_file\\n$l\\n\");.\n-0002e060: 0909 7d0a 0909 656c 7365 0a09 097b 0a09 ..}...else...{..\n-0002e070: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-0002e080: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-0002e090: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' \n-0002e0a0: 3d3e 205b 2263 616e 6e6f 7420 6372 6561 => [\"cannot crea\n-0002e0b0: 7465 2073 796d 6c69 6e6b 2066 726f 6d20 te symlink from \n-0002e0c0: 2220 2e0a 0909 0909 0920 2020 2020 223c \" ....... \"<\n-0002e0d0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-0002e0e0: 3e20 2d3e 2024 6c22 5d2c 0a09 0909 0920 > -> $l\"],..... \n-0002e0f0: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1)..\n-0002e100: 0909 756e 6c65 7373 2073 796d 6c69 6e6b ..unless symlink\n-0002e110: 2024 6c2c 2022 2474 6172 6765 7444 6972 $l, \"$targetDir\n-0002e120: 2f24 6669 6c65 223b 0a0a 0909 2020 2020 /$file\";.... \n-0002e130: 6966 2028 2470 7265 7365 7276 6550 6572 if ($preservePer\n-0002e140: 6d73 290a 0909 2020 2020 7b0a 0909 0926 ms)... {....&\n-0002e150: 6368 616e 6765 5379 6d6c 696e 6b50 6572 changeSymlinkPer\n-0002e160: 6d73 2824 7569 642c 2024 6769 642c 2024 ms($uid, $gid, $\n-0002e170: 7461 7267 6574 4469 722c 0a09 0909 2020 targetDir,.... \n-0002e180: 2020 2466 696c 652c 2024 746d 7064 6972 $file, $tmpdir\n-0002e190: 2c20 2470 724c 6f67 293b 0a09 0920 2020 , $prLog);... \n-0002e1a0: 207d 0a09 097d 0a0a 0909 2673 746f 7265 }...}....&store\n-0002e1b0: 5379 6d4c 696e 6b49 6e66 6f73 2824 7569 SymLinkInfos($ui\n-0002e1c0: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target\n-0002e1d0: 4469 722c 2024 6669 6c65 2c20 2464 6576 Dir, $file, $dev\n-0002e1e0: 2c0a 0909 0909 2020 2024 696e 6f64 652c ,..... $inode,\n-0002e1f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n-0002e200: 2024 6174 696d 652c 0a09 0909 0920 2020 $atime,..... \n-0002e210: 2461 6b74 4669 6c65 6e61 6d65 2c20 2464 $aktFilename, $d\n-0002e220: 6562 7567 4d6f 6465 2c20 2470 724c 6f67 ebugMode, $prLog\n-0002e230: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. \n-0002e240: 7d0a 0a09 2020 2020 6966 2028 2474 7970 }... if ($typ\n-0002e250: 6520 6571 2027 7027 290a 0920 2020 207b e eq 'p').. {\n-0002e260: 0a09 096d 7920 2824 6374 696d 652c 2024 ...my ($ctime, $\n-0002e270: 6d74 696d 652c 2024 6174 696d 6529 203d mtime, $atime) =\n-0002e280: 0a09 0920 2020 2028 7374 6174 2822 2464 ... (stat(\"$d\n-0002e290: 6972 2f24 6669 6c65 2229 295b 3130 2c20 ir/$file\"))[10, \n-0002e2a0: 392c 2038 5d3b 0a0a 0909 263a 3a6d 616b 9, 8];....&::mak\n-0002e2b0: 6546 696c 6550 6174 6843 6163 6865 2822 eFilePathCache(\"\n-0002e2c0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-0002e2d0: 222c 2024 7072 4c6f 6729 2069 6620 246c \", $prLog) if $l\n-0002e2e0: 6174 654c 696e 6b73 3b0a 0a09 0969 6620 ateLinks;....if \n-0002e2f0: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc\n-0002e300: 6869 7665 7220 616e 6420 2461 7263 6869 hiver and $archi\n-0002e310: 7665 5479 7065 7320 3d7e 202f 702f 290a veTypes =~ /p/).\n-0002e320: 0909 7b0a 0909 2020 2020 263a 3a63 7265 ..{... &::cre\n-0002e330: 6174 6541 7263 6869 7665 4672 6f6d 4669 ateArchiveFromFi\n-0002e340: 6c65 2824 6669 6c65 2c20 2464 6972 2c20 le($file, $dir, \n-0002e350: 2474 6172 6765 7444 6972 2c0a 0909 0909 $targetDir,.....\n-0002e360: 0920 2020 2020 2473 7065 6369 616c 5479 . $specialTy\n-0002e370: 7065 4172 6368 6976 6572 2c20 2470 724c peArchiver, $prL\n-0002e380: 6f67 2c0a 0909 0909 0920 2020 2020 2474 og,...... $t\n-0002e390: 6d70 6469 7229 3b0a 0909 7d0a 0909 656c mpdir);...}...el\n-0002e3a0: 7365 0a09 097b 0a09 0920 2020 206d 7920 se...{... my \n-0002e3b0: 246d 6b6e 6f64 203d 2066 6f72 6b50 726f $mknod = forkPro\n-0002e3c0: 632d 3e6e 6577 2827 2d65 7865 6327 203d c->new('-exec' =\n-0002e3d0: 3e20 276d 6b6e 6f64 272c 0a09 0909 0909 > 'mknod',......\n-0002e3e0: 2020 2020 2020 272d 7061 7261 6d27 203d '-param' =\n-0002e3f0: 3e20 5b22 2474 6172 6765 7444 6972 2f24 > [\"$targetDir/$\n-0002e400: 6669 6c65 222c 2027 7027 5d2c 0a09 0909 file\", 'p'],....\n-0002e410: 0909 2020 2020 2020 272d 6f75 7452 616e .. '-outRan\n-0002e420: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => \"$tmpdir\n-0002e430: 2f6d 6b6e 6f64 2d22 2c0a 0909 0909 0920 /mknod-\",...... \n-0002e440: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n-0002e450: 2024 7072 4c6f 6729 3b0a 0909 2020 2020 $prLog);... \n-0002e460: 246d 6b6e 6f64 2d3e 7761 6974 2829 3b0a $mknod->wait();.\n-0002e470: 0909 2020 2020 6d79 2024 6f75 7420 3d20 .. my $out = \n-0002e480: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU\n-0002e490: 5428 293b 0a09 0920 2020 2024 7072 4c6f T();... $prLo\n-0002e4a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0002e4b0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n-0002e4c0: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n-0002e4d0: 2253 5444 4f55 5420 6f66 203c 6d6b 6e6f \"STDOUT of :\", @$out])\n-0002e500: 0a09 0909 6966 2028 4024 6f75 7420 3e20 ....if (@$out > \n-0002e510: 3029 3b0a 0909 2020 2020 246f 7574 203d 0);... $out =\n-0002e520: 2024 6d6b 6e6f 642d 3e67 6574 5354 4445 $mknod->getSTDE\n-0002e530: 5252 2829 3b0a 0909 2020 2020 2470 724c RR();... $prL\n-0002e540: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0002e550: 2720 3d3e 2027 4527 2c0a 0909 0909 2020 ' => 'E',..... \n-0002e560: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... \n-0002e570: 5b22 5354 4445 5252 206f 6620 3c6d 6b6e [\"STDERR of :\", @$out])\n-0002e5a0: 0a09 0909 6966 2028 4024 6f75 7420 3e20 ....if (@$out > \n-0002e5b0: 3029 3b0a 0909 7d0a 0a09 0969 6620 2824 0);...}....if ($\n-0002e5c0: 7072 6573 6572 7665 5065 726d 7329 0a09 preservePerms)..\n-0002e5d0: 097b 0a09 0920 2020 2063 686f 776e 2024 .{... chown $\n-0002e5e0: 7569 642c 2024 6769 642c 2022 2474 6172 uid, $gid, \"$tar\n-0002e5f0: 6765 7444 6972 2f24 6669 6c65 223b 0a09 getDir/$file\";..\n-0002e600: 0920 2020 2063 686d 6f64 2024 6d6f 6465 . chmod $mode\n-0002e610: 2c20 2224 7461 7267 6574 4469 722f 2466 , \"$targetDir/$f\n-0002e620: 696c 6522 3b0a 0909 2020 2020 7574 696d ile\";... utim\n-0002e630: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n-0002e640: 2c20 2224 6469 722f 2466 696c 6522 2069 , \"$dir/$file\" i\n-0002e650: 6620 2472 6573 6574 4174 696d 653b 3b0a f $resetAtime;;.\n-0002e660: 0909 2020 2020 7574 696d 6520 2461 7469 .. utime $ati\n-0002e670: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, \"$ta\n-0002e680: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file\";.\n-0002e690: 0909 7d0a 0909 246d 6169 6e3a 3a73 7461 ..}...$main::sta\n-0002e6a0: 742d 3e69 6e63 725f 6e6f 4e61 6d65 6450 t->incr_noNamedP\n-0002e6b0: 6970 6573 2824 7569 642c 2024 6769 6429 ipes($uid, $gid)\n-0002e6c0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin\n-0002e6d0: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D'\n-0002e6e0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-0002e6f0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [\"\n-0002e700: 6372 6561 7465 6420 6e61 6d65 6420 7069 created named pi\n-0002e710: 7065 203c 2474 6172 6765 7444 6972 2f24 pe <$targetDir/$\n-0002e720: 6669 6c65 225d 290a 0909 2020 2020 6966 file\"])... if\n-0002e730: 2028 2464 6562 7567 4d6f 6465 203e 3d20 ($debugMode >= \n-0002e740: 3229 3b0a 0909 2461 6b74 4669 6c65 6e61 2);...$aktFilena\n-0002e750: 6d65 2d3e 7374 6f72 654e 616d 6564 5069 me->storeNamedPi\n-0002e760: 7065 2827 2d70 6970 6527 203d 3e20 2466 pe('-pipe' => $f\n-0002e770: 696c 652c 0a09 0909 0909 2020 2020 2027 ile,...... '\n-0002e780: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,..\n-0002e790: 0909 0909 2020 2020 2027 2d69 6e6f 6465 .... '-inode\n-0002e7a0: 2720 3d3e 2024 696e 6f64 652c 0a09 0909 ' => $inode,....\n-0002e7b0: 0909 2020 2020 2027 2d63 7469 6d65 2720 .. '-ctime' \n-0002e7c0: 3d3e 2024 6374 696d 652c 0a09 0909 0909 => $ctime,......\n-0002e7d0: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' =>\n-0002e7e0: 2024 6d74 696d 652c 0a09 0909 0909 2020 $mtime,...... \n-0002e7f0: 2020 2027 2d61 7469 6d65 2720 3d3e 2024 '-atime' => $\n-0002e800: 6174 696d 652c 0a09 0909 0909 2020 2020 atime,...... \n-0002e810: 2027 2d75 6964 2720 3d3e 2024 7569 642c '-uid' => $uid,\n-0002e820: 0a09 0909 0909 2020 2020 2027 2d67 6964 ...... '-gid\n-0002e830: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,......\n-0002e840: 2020 2020 2027 2d6d 6f64 6527 203d 3e20 '-mode' => \n-0002e850: 246d 6f64 6529 3b0a 0909 6e65 7874 3b0a $mode);...next;.\n-0002e860: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if \n-0002e870: 2824 7479 7065 2065 7120 2753 2720 6f72 ($type eq 'S' or\n-0002e880: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-0002e890: 2024 7479 7065 2065 7120 2762 2720 6f72 $type eq 'b' or\n-0002e8a0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-0002e8b0: 2024 7479 7065 2065 7120 2763 2729 0a09 $type eq 'c')..\n-0002e8c0: 2020 2020 7b0a 0909 263a 3a6d 616b 6546 {...&::makeF\n-0002e8d0: 696c 6550 6174 6843 6163 6865 2822 2474 ilePathCache(\"$t\n-0002e8e0: 6172 6765 7444 6972 2f24 6669 6c65 222c argetDir/$file\",\n-0002e8f0: 2024 7072 4c6f 6729 2069 6620 246c 6174 $prLog) if $lat\n-0002e900: 654c 696e 6b73 3b0a 0a09 0969 6620 2824 eLinks;....if ($\n-0002e910: 7370 6563 6961 6c54 7970 6541 7263 6869 specialTypeArchi\n-0002e920: 7665 7220 616e 6420 2461 7263 6869 7665 ver and $archive\n-0002e930: 5479 7065 7320 3d7e 202f 702f 290a 0909 Types =~ /p/)...\n-0002e940: 7b0a 0909 2020 2020 263a 3a63 7265 6174 {... &::creat\n-0002e950: 6541 7263 6869 7665 4672 6f6d 4669 6c65 eArchiveFromFile\n-0002e960: 2824 6669 6c65 2c20 2464 6972 2c20 2474 ($file, $dir, $t\n-0002e970: 6172 6765 7444 6972 2c0a 0909 0909 0920 argetDir,...... \n-0002e980: 2020 2020 2473 7065 6369 616c 5479 7065 $specialType\n-0002e990: 4172 6368 6976 6572 2c20 2470 724c 6f67 Archiver, $prLog\n-0002e9a0: 2c0a 0909 0909 0920 2020 2020 2474 6d70 ,...... $tmp\n-0002e9b0: 6469 7229 3b0a 0909 7d0a 0909 656c 7365 dir);...}...else\n-0002e9c0: 0a09 097b 0a09 0920 2020 2024 676e 7563 ...{... $gnuc\n-0002e9d0: 7020 6f72 0a09 0909 2470 724c 6f67 2d3e p or....$prLog->\n-0002e9e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0002e9f0: 2027 4527 2c0a 0909 0909 2020 2020 2020 'E',..... \n-0002ea00: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... \n-0002ea10: 2020 2020 5b22 6e6f 2067 6e75 6370 3a20 [\"no gnucp: \n-0002ea20: 696e 7465 726e 616c 2065 7272 6f72 3a20 internal error: \n-0002ea30: 2220 2e0a 0909 0909 2020 2020 2020 2022 \" ...... \"\n-0002ea40: 6361 6e6e 6f74 2073 6176 6520 6669 6c65 cannot save file\n-0002ea50: 2074 7965 7320 5362 6370 2c20 2220 2e0a tyes Sbcp, \" ..\n-0002ea60: 0909 0909 2020 2020 2020 2273 6574 206f .... \"set o\n-0002ea70: 7074 696f 6e20 6370 4973 476e 7520 6966 ption cpIsGnu if\n-0002ea80: 2067 6e75 6370 2069 7320 7573 6564 225d gnucp is used\"]\n-0002ea90: 2c0a 0909 0909 2020 2020 2020 272d 6578 ,..... '-ex\n-0002eaa0: 6974 2720 3d3e 2031 293b 0a0a 0909 2020 it' => 1);.... \n-0002eab0: 2020 6d79 2024 6370 203d 2066 6f72 6b50 my $cp = forkP\n-0002eac0: 726f 632d 3e6e 6577 2827 2d65 7865 6327 roc->new('-exec'\n-0002ead0: 203d 3e20 2467 6e75 436f 7079 2c0a 0909 => $gnuCopy,...\n-0002eae0: 0909 0920 2020 272d 7061 7261 6d27 203d ... '-param' =\n-0002eaf0: 3e20 5b40 676e 7543 6f70 7950 6172 5370 > [@gnuCopyParSp\n-0002eb00: 6563 6961 6c2c 0a09 0909 0909 0909 2224 ecial,........\"$\n-0002eb10: 6469 722f 2466 696c 6522 2c0a 0909 0909 dir/$file\",.....\n-0002eb20: 0909 0922 2474 6172 6765 7444 6972 2f24 ...\"$targetDir/$\n-0002eb30: 6669 6c65 225d 2c0a 0909 0909 0920 2020 file\"],...... \n-0002eb40: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => \n-0002eb50: 2224 746d 7064 6972 2f67 6e75 6370 2d22 \"$tmpdir/gnucp-\"\n-0002eb60: 2c0a 0909 0909 0920 2020 272d 7072 4c6f ,...... '-prLo\n-0002eb70: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n-0002eb80: 0920 2020 2024 6370 2d3e 7761 6974 2829 . $cp->wait()\n-0002eb90: 3b0a 0909 2020 2020 6d79 2024 6f75 7420 ;... my $out \n-0002eba0: 3d20 2463 702d 3e67 6574 5354 444f 5554 = $cp->getSTDOUT\n-0002ebb0: 2829 3b0a 0909 2020 2020 2470 724c 6f67 ();... $prLog\n-0002ebc0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-0002ebd0: 3d3e 2027 4527 2c0a 0909 0909 2020 272d => 'E',..... '-\n-0002ebe0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-0002ebf0: 5354 444f 5554 206f 6620 3c24 676e 7543 STDOUT of <$gnuC\n-0002ec00: 6f70 7920 4067 6e75 436f 7079 5061 7253 opy @gnuCopyParS\n-0002ec10: 7065 6369 616c 203c 2464 6972 2f24 6669 pecial <$dir/$fi\n-0002ec20: 6c65 3e20 2220 2e0a 0909 0909 2020 2022 le> \" ...... \"\n-0002ec30: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil\n-0002ec40: 653e 3a22 2c20 4024 6f75 745d 290a 0909 e>:\", @$out])...\n-0002ec50: 0969 6620 2840 246f 7574 203e 2030 293b .if (@$out > 0);\n-0002ec60: 0a09 0920 2020 2024 6f75 7420 3d20 2463 ... $out = $c\n-0002ec70: 702d 3e67 6574 5354 4445 5252 2829 3b0a p->getSTDERR();.\n-0002ec80: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-0002ec90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-0002eca0: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str'\n-0002ecb0: 203d 3e0a 0909 0909 2020 5b22 5354 4445 =>..... [\"STDE\n-0002ecc0: 5252 206f 6620 3c24 676e 7543 6f70 7920 RR of <$gnuCopy \n-0002ecd0: 4067 6e75 436f 7079 5061 7253 7065 6369 @gnuCopyParSpeci\n-0002ece0: 616c 203c 2464 6972 2f24 6669 6c65 3e22 al <$dir/$file>\"\n-0002ecf0: 202e 0a09 0909 0920 2020 223c 2474 6172 ...... \"<$tar\n-0002ed00: 6765 7444 6972 2f24 6469 723e 3a22 2c20 getDir/$dir>:\", \n-0002ed10: 4024 6f75 745d 290a 0909 0969 6620 2840 @$out])....if (@\n-0002ed20: 246f 7574 203e 2030 293b 0a09 097d 0a0a $out > 0);...}..\n-0002ed30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002ed40: 6966 2028 2470 7265 7365 7276 6550 6572 if ($preservePer\n-0002ed50: 6d73 290a 0909 7b0a 2020 2020 2020 2020 ms)...{. \n-0002ed60: 2020 2020 2020 2020 2020 2020 6368 6f77 chow\n-0002ed70: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, \"$\n-0002ed80: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n-0002ed90: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-0002eda0: 2020 2020 2020 6368 6d6f 6420 246d 6f64 chmod $mod\n-0002edb0: 652c 2022 2474 6172 6765 7444 6972 2f24 e, \"$targetDir/$\n-0002edc0: 6669 6c65 223b 0a20 2020 2020 2020 2020 file\";. \n-0002edd0: 2020 2020 2020 2020 2020 2075 7469 6d65 utime\n-0002ede0: 2024 6174 696d 652c 2024 6d74 696d 652c $atime, $mtime,\n-0002edf0: 2022 2464 6972 2f24 6669 6c65 2220 6966 \"$dir/$file\" if\n-0002ee00: 2024 7265 7365 7441 7469 6d65 3b3b 0a20 $resetAtime;;. \n-0002ee10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002ee20: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime,\n-0002ee30: 2024 6d74 696d 652c 2022 2474 6172 6765 $mtime, \"$targe\n-0002ee40: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file\";. \n-0002ee50: 2020 2020 2020 2020 2020 2020 207d 0a0a }..\n-0002ee60: 0909 246d 6169 6e3a 3a73 7461 742d 3e69 ..$main::stat->i\n-0002ee70: 6e63 725f 6e6f 536f 636b 6574 7328 2475 ncr_noSockets($u\n-0002ee80: 6964 2c20 2467 6964 2920 6966 2024 7479 id, $gid) if $ty\n-0002ee90: 7065 2065 7120 2253 223b 0a09 0924 6d61 pe eq \"S\";...$ma\n-0002eea0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n-0002eeb0: 6f42 6c6f 636b 4465 7628 2475 6964 2c20 oBlockDev($uid, \n-0002eec0: 2467 6964 2920 6966 2024 7479 7065 2065 $gid) if $type e\n-0002eed0: 7120 2262 223b 0a09 0924 6d61 696e 3a3a q \"b\";...$main::\n-0002eee0: 7374 6174 2d3e 696e 6372 5f6e 6f43 6861 stat->incr_noCha\n-0002eef0: 7244 6576 2824 7569 642c 2024 6769 6429 rDev($uid, $gid)\n-0002ef00: 2069 6620 2474 7970 6520 6571 2022 6322 if $type eq \"c\"\n-0002ef10: 3b0a 0a09 0924 7072 4c6f 672d 3e70 7269 ;....$prLog->pri\n-0002ef20: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D\n-0002ef30: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-0002ef40: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n-0002ef50: 2263 7265 6174 6564 2073 7065 6369 616c \"created special\n-0002ef60: 2066 696c 6520 2824 7479 7065 2920 3c24 file ($type) <$\n-0002ef70: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n-0002ef80: 5d29 0a09 0920 2020 2069 6620 2824 6465 ])... if ($de\n-0002ef90: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);..\n-0002efa0: 0909 2461 6b74 4669 6c65 6e61 6d65 2d3e ..$aktFilename->\n-0002efb0: 7374 6f72 6553 7065 6369 616c 2827 2d6e storeSpecial('-n\n-0002efc0: 616d 6527 203d 3e20 2466 696c 652c 0a20 ame' => $file,. \n-0002efd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002efe0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002eff0: 2020 2020 2020 2020 2020 272d 7479 7065 '-type\n-0002f000: 2720 3d3e 2024 7479 7065 2c0a 2020 2020 ' => $type,. \n-0002f010: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f020: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f030: 2020 2020 2020 2027 2d64 6576 2720 3d3e '-dev' =>\n-0002f040: 2024 6465 762c 0a20 2020 2020 2020 2020 $dev,. \n-0002f050: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f060: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f070: 2020 272d 696e 6f64 6527 203d 3e20 2469 '-inode' => $i\n-0002f080: 6e6f 6465 2c0a 2020 2020 2020 2020 2020 node,. \n-0002f090: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f0a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f0b0: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct\n-0002f0c0: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. \n-0002f0d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f0e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f0f0: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti\n-0002f100: 6d65 2c0a 2020 2020 2020 2020 2020 2020 me,. \n-0002f110: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f120: 2020 2020 2020 2020 2020 2020 2020 2027 '\n-0002f130: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim\n-0002f140: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. \n-0002f150: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f160: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-0002f170: 7569 6427 203d 3e20 2475 6964 2c0a 2020 uid' => $uid,. \n-0002f180: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f190: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f1a0: 2020 2020 2020 2020 2027 2d67 6964 2720 '-gid' \n-0002f1b0: 3d3e 2024 6769 642c 0a20 2020 2020 2020 => $gid,. \n-0002f1c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f1d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f1e0: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $\n-0002f1f0: 6d6f 6465 293b 0a09 096e 6578 743b 0a09 mode);...next;..\n-0002f200: 2020 2020 7d0a 0a09 2020 2020 6966 2028 }... if (\n-0002f210: 2474 7970 6520 6571 2027 6266 2729 2020 $type eq 'bf') \n-0002f220: 2020 2320 626c 6f63 6b20 6669 6c65 0a09 # block file..\n-0002f230: 2020 2020 7b0a 2370 7269 6e74 2022 2d30 {.#print \"-0\n-0002f240: 2e31 2d20 626c 6f63 6b46 696c 653a 203c .1- blockFile: <\n-0002f250: 2474 6172 6765 7444 6972 3e3c 2466 696c $targetDir><$fil\n-0002f260: 653e 203c 246d 6435 3e5c 6e22 3b0a 0909 e> <$md5>\\n\";...\n-0002f270: 246d 6169 6e3a 3a73 7461 742d 3e69 6e63 $main::stat->inc\n-0002f280: 725f 6e6f 426c 6f63 6b65 6446 696c 6573 r_noBlockedFiles\n-0002f290: 2829 3b0a 0909 6966 2028 7265 6628 246d ();...if (ref($m\n-0002f2a0: 6435 2920 6571 2027 4152 5241 5927 290a d5) eq 'ARRAY').\n-0002f2b0: 0909 7b0a 0909 2020 2020 6d79 2028 2472 ..{... my ($r\n-0002f2c0: 756c 6542 532c 2024 7275 6c65 436f 6d70 uleBS, $ruleComp\n-0002f2d0: 7265 7373 2c20 2470 6172 616c 6c65 6c2c ress, $parallel,\n-0002f2e0: 2040 7275 6c65 5265 6164 290a 0909 093d @ruleRead)....=\n-0002f2f0: 2040 246d 6435 3b0a 0909 2020 2020 2462 @$md5;... $b\n-0002f300: 6c6f 636b 5061 7261 6c6c 656c 203d 2024 lockParallel = $\n-0002f310: 7061 7261 6c6c 656c 3b0a 0909 2020 2020 parallel;... \n-0002f320: 2466 6966 6f42 6c6f 636b 2d3e 6164 6428 $fifoBlock->add(\n-0002f330: 272d 7661 6c75 6527 203d 3e0a 0909 0909 '-value' =>.....\n-0002f340: 2020 2020 5b27 6669 6c65 272c 2024 6469 ['file', $di\n-0002f350: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, \n-0002f360: 2467 6964 2c0a 0909 0909 2020 2020 2024 $gid,..... $\n-0002f370: 6d6f 6465 2c20 2464 6576 2c20 2469 6e6f mode, $dev, $ino\n-0002f380: 6465 2c20 2463 7469 6d65 2c20 246d 7469 de, $ctime, $mti\n-0002f390: 6d65 2c0a 0909 0909 2020 2020 2024 6174 me,..... $at\n-0002f3a0: 696d 652c 2024 7369 7a65 2c20 2472 756c ime, $size, $rul\n-0002f3b0: 6542 532c 2024 7275 6c65 436f 6d70 7265 eBS, $ruleCompre\n-0002f3c0: 7373 2c0a 0909 0909 2020 2020 5c40 7275 ss,..... \\@ru\n-0002f3d0: 6c65 5265 6164 5d29 3b0a 0909 7d0a 0909 leRead]);...}...\n-0002f3e0: 656c 7365 2020 2320 6e6f 7468 696e 6720 else # nothing \n-0002f3f0: 6861 7320 6368 616e 6765 640a 0909 7b0a has changed...{.\n-0002f400: 0909 2020 2020 263a 3a6d 616b 6546 696c .. &::makeFil\n-0002f410: 6550 6174 6843 6163 6865 2822 2474 6172 ePathCache(\"$tar\n-0002f420: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file\", $\n-0002f430: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL\n-0002f440: 696e 6b73 3b0a 0a09 0920 2020 206d 6b64 inks;.... mkd\n-0002f450: 6972 2022 2474 6172 6765 7444 6972 2f24 ir \"$targetDir/$\n-0002f460: 6669 6c65 222c 2030 3730 3020 6f72 0a09 file\", 0700 or..\n-0002f470: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-0002f480: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-0002f490: 0909 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-0002f4a0: 203d 3e0a 0909 0909 2020 2020 2020 5b22 =>..... [\"\n-0002f4b0: 6361 6e6e 6f74 206d 6b64 6972 203c 2474 cannot mkdir <$t\n-0002f4c0: 6172 6765 7444 6972 2f24 6669 6c65 3e22 argetDir/$file>\"\n-0002f4d0: 5d2c 0a09 0909 0920 2020 2020 2027 2d65 ],..... '-e\n-0002f4e0: 7869 7427 203d 3e20 3129 3b0a 0909 2020 xit' => 1);... \n-0002f4f0: 2020 246d 6169 6e3a 3a73 7461 742d 3e69 $main::stat->i\n-0002f500: 6e63 725f 6e6f 4469 7273 2824 7569 642c ncr_noDirs($uid,\n-0002f510: 2024 6769 6429 3b0a 0a09 0920 2020 206d $gid);.... m\n-0002f520: 7920 2824 782c 2024 6261 636b 7570 4469 y ($x, $backupDi\n-0002f530: 7229 3b0a 0909 2020 2020 2824 782c 2024 r);... ($x, $\n-0002f540: 782c 2024 782c 2024 6261 636b 7570 4469 x, $x, $backupDi\n-0002f550: 722c 2024 7829 203d 0a09 0909 246f 6c64 r, $x) =....$old\n-0002f560: 4669 6c65 6e61 6d65 2d3e 6765 7446 696c Filename->getFil\n-0002f570: 656e 616d 6528 246d 6435 293b 0a0a 0909 ename($md5);....\n-0002f580: 2020 2020 6966 2028 246c 6174 654c 696e if ($lateLin\n-0002f590: 6b73 2061 6e64 206e 6f74 0a09 0909 2864 ks and not....(d\n-0002f5a0: 6566 696e 6564 2824 6669 6c65 2920 616e efined($file) an\n-0002f5b0: 6420 6578 6973 7473 2024 666f 7263 6543 d exists $forceC\n-0002f5c0: 6f70 7943 6f6d 7072 7b24 6669 6c65 7d29 opyCompr{$file})\n-0002f5d0: 290a 0909 2020 2020 7b0a 0909 096d 7920 )... {....my \n-0002f5e0: 2466 726f 6d20 3d20 2224 6261 636b 7570 $from = \"$backup\n-0002f5f0: 4469 722f 2466 696c 6522 3b0a 0909 096d Dir/$file\";....m\n-0002f600: 7920 2474 6f20 3d20 2224 7461 7267 6574 y $to = \"$target\n-0002f610: 4469 722f 2466 696c 6522 3b0a 0909 096d Dir/$file\";....m\n-0002f620: 7920 2468 6c20 3d20 2d31 3b0a 0909 0969 y $hl = -1;....i\n-0002f630: 6620 2824 6d61 7848 6172 644c 696e 6b73 f ($maxHardLinks\n-0002f640: 2020 3e20 3029 0a09 0909 7b0a 0909 0920 > 0)....{.... \n-0002f650: 2020 2024 686c 203d 2028 7374 6174 2822 $hl = (stat(\"\n-0002f660: 2466 726f 6d2f 2462 6c6f 636b 4368 6563 $from/$blockChec\n-0002f670: 6b53 756d 4669 6c65 2e62 7a32 2229 295b kSumFile.bz2\"))[\n-0002f680: 335d 3b0a 2370 7269 6e74 2022 2d30 2e31 3];.#print \"-0.1\n-0002f690: 2e31 2d20 2466 726f 6d2f 2462 6c6f 636b .1- $from/$block\n-0002f6a0: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2\n-0002f6b0: 3a20 2468 6c20 6861 7264 6c69 6e6b 7320 : $hl hardlinks \n-0002f6c0: 2824 6d61 7848 6172 644c 696e 6b73 295c ($maxHardLinks)\\\n-0002f6d0: 6e22 3b0a 0909 097d 0a23 7072 696e 7420 n\";....}.#print \n-0002f6e0: 222d 302e 312e 322d 206c 696e 6b20 2466 \"-0.1.2- link $f\n-0002f6f0: 726f 6d2f 2462 6c6f 636b 4368 6563 6b53 rom/$blockCheckS\n-0002f700: 756d 4669 6c65 2e62 7a32 203c 2d20 2474 umFile.bz2 <- $t\n-0002f710: 6f2f 2462 6c6f 636b 4368 6563 6b53 756d o/$blockCheckSum\n-0002f720: 4669 6c65 2e62 7a32 5c6e 223b 0a09 0909 File.bz2\\n\";....\n-0002f730: 6d79 2024 686c 436f 7079 203d 2030 3b0a my $hlCopy = 0;.\n-0002f740: 0909 0969 6620 2824 686c 203c 2024 6d61 ...if ($hl < $ma\n-0002f750: 7848 6172 644c 696e 6b73 2920 2023 2062 xHardLinks) # b\n-0002f760: 656c 6f77 206e 756d 6265 7220 6f66 2061 elow number of a\n-0002f770: 6c6c 6f77 6564 2068 6172 6420 6c69 6e6b llowed hard link\n-0002f780: 730a 0909 097b 0a09 0909 2020 2020 756e s....{.... un\n-0002f790: 6c65 7373 2028 6c69 6e6b 2022 2466 726f less (link \"$fro\n-0002f7a0: 6d2f 2462 6c6f 636b 4368 6563 6b53 756d m/$blockCheckSum\n-0002f7b0: 4669 6c65 2e62 7a32 222c 0a09 0909 0920 File.bz2\",..... \n-0002f7c0: 2020 2022 2474 6f2f 2462 6c6f 636b 4368 \"$to/$blockCh\n-0002f7d0: 6563 6b53 756d 4669 6c65 2e62 7a32 2229 eckSumFile.bz2\")\n-0002f7e0: 0a09 0909 2020 2020 7b0a 0909 0909 2468 .... {.....$h\n-0002f7f0: 6c43 6f70 7920 3d20 313b 2020 2023 2074 lCopy = 1; # t\n-0002f800: 7279 2074 6f20 6861 7264 206c 696e 6b20 ry to hard link \n-0002f810: 7761 7320 6e6f 7420 7375 6363 6573 7366 was not successf\n-0002f820: 756c 6c0a 0909 0920 2020 207d 0a09 0909 ull.... }....\n-0002f830: 7d0a 0909 0965 6c73 6520 2020 2320 7265 }....else # re\n-0002f840: 6163 6865 6420 6e75 6d62 6572 206f 6620 ached number of \n-0002f850: 616c 6c6f 7765 6420 6861 7264 206c 696e allowed hard lin\n-0002f860: 6b73 0a09 0909 7b0a 0909 0920 2020 2024 ks....{.... $\n-0002f870: 686c 436f 7079 203d 2031 3b20 2020 2023 hlCopy = 1; #\n-0002f880: 2064 6f6e 2774 2074 7279 2074 6f20 6861 don't try to ha\n-0002f890: 7264 206c 696e 6b20 2d3e 2063 6f70 7920 rd link -> copy \n-0002f8a0: 6669 6c65 0a09 0909 7d0a 2309 0909 756e file....}.#...un\n-0002f8b0: 6c65 7373 2028 6c69 6e6b 2022 2466 726f less (link \"$fro\n-0002f8c0: 6d2f 2462 6c6f 636b 4368 6563 6b53 756d m/$blockCheckSum\n-0002f8d0: 4669 6c65 2e62 7a32 222c 0a23 0909 0909 File.bz2\",.#....\n-0002f8e0: 2224 746f 2f24 626c 6f63 6b43 6865 636b \"$to/$blockCheck\n-0002f8f0: 5375 6d46 696c 652e 627a 3222 290a 0a20 SumFile.bz2\").. \n-0002f900: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002f910: 2020 2020 2020 2069 6620 2824 686c 436f if ($hlCo\n-0002f920: 7079 290a 0909 097b 0a09 0909 2020 2020 py)....{.... \n-0002f930: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-0002f940: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-0002f950: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n-0002f960: 0909 0909 2020 5b22 6361 6e6e 6f74 206c .... [\"cannot l\n-0002f970: 696e 6b2f 636f 7079 2022 202e 0a09 0909 ink/copy \" .....\n-0002f980: 0909 2020 2022 3c24 6672 6f6d 2f24 626c .. \"<$from/$bl\n-0002f990: 6f63 6b43 6865 636b 5375 6d46 696c 652e ockCheckSumFile.\n-0002f9a0: 627a 323e 222e 0a09 0909 0909 2020 2022 bz2>\"....... \"\n-0002f9b0: 203c 2474 6f2f 2462 6c6f 636b 4368 6563 <$to/$blockChec\n-0002f9c0: 6b53 756d 4669 6c65 2e62 7a32 3e22 5d2c kSumFile.bz2>\"],\n-0002f9d0: 0a09 0909 0909 2020 272d 6578 6974 2720 ...... '-exit' \n-0002f9e0: 3d3e 2031 290a 0909 0909 756e 6c65 7373 => 1).....unless\n-0002f9f0: 2028 263a 3a63 6f70 7946 696c 6528 2224 (&::copyFile(\"$\n-0002fa00: 6672 6f6d 2f24 626c 6f63 6b43 6865 636b from/$blockCheck\n-0002fa10: 5375 6d46 696c 652e 627a 3222 2c0a 0909 SumFile.bz2\",...\n-0002fa20: 0909 0909 2020 2020 2224 746f 2f24 626c .... \"$to/$bl\n-0002fa30: 6f63 6b43 6865 636b 5375 6d46 696c 652e ockCheckSumFile.\n-0002fa40: 627a 3222 2c0a 0909 0909 0909 2020 2020 bz2\",....... \n-0002fa50: 2470 724c 6f67 2929 0a0a 0909 097d 0a09 $prLog)).....}..\n-0002fa60: 0909 2466 726f 6d20 3d20 3a3a 7265 6c50 ..$from = ::relP\n-0002fa70: 6174 6828 2474 6172 6765 7444 6972 2c20 ath($targetDir, \n-0002fa80: 2466 726f 6d29 3b0a 0909 0924 6672 6f6d $from);....$from\n-0002fa90: 203d 7e20 732f 5c6e 2f5c 302f 6f67 3b0a =~ s/\\n/\\0/og;.\n-0002faa0: 0909 0924 746f 203d 203a 3a72 656c 5061 ...$to = ::relPa\n-0002fab0: 7468 2824 7461 7267 6574 4469 722c 2024 th($targetDir, $\n-0002fac0: 746f 293b 0a09 0909 2474 6f20 3d7e 2073 to);....$to =~ s\n-0002fad0: 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 2477 /\\n/\\0/og;....$w\n-0002fae0: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print\n-0002faf0: 2822 6c69 6e6b 626c 6f63 6b5c 6e24 6672 (\"linkblock\\n$fr\n-0002fb00: 6f6d 5c6e 2474 6f5c 6e22 293b 0a09 0909 om\\n$to\\n\");....\n-0002fb10: 246d 6169 6e3a 3a73 7461 742d 3e69 6e63 $main::stat->inc\n-0002fb20: 725f 6e6f 4c61 7465 4c69 6e6b 7328 2475 r_noLateLinks($u\n-0002fb30: 6964 2c20 2467 6964 293b 0a09 0920 2020 id, $gid);... \n-0002fb40: 207d 0a09 0920 2020 2065 6c73 650a 0909 }... else...\n-0002fb50: 2020 2020 7b0a 2370 7269 6e74 2022 2d30 {.#print \"-0\n-0002fb60: 2e32 2068 6172 6420 6c69 6e6b 2024 6261 .2 hard link $ba\n-0002fb70: 636b 7570 4469 722f 2466 696c 6520 2474 ckupDir/$file $t\n-0002fb80: 6172 6765 7444 6972 2f24 6669 6c65 5c6e argetDir/$file\\n\n-0002fb90: 223b 0a09 0909 263a 3a68 6172 644c 696e \";....&::hardLin\n-0002fba0: 6b44 6972 2822 2462 6163 6b75 7044 6972 kDir(\"$backupDir\n-0002fbb0: 2f24 6669 6c65 222c 0a09 0909 0920 2020 /$file\",..... \n-0002fbc0: 2020 2020 2224 7461 7267 6574 4469 722f \"$targetDir/\n-0002fbd0: 2466 696c 6522 2c20 272e 2a27 2c0a 0909 $file\", '.*',...\n-0002fbe0: 0909 2020 2020 2020 2024 7569 642c 2024 .. $uid, $\n-0002fbf0: 6769 642c 2024 6d6f 6465 2c20 2470 724c gid, $mode, $prL\n-0002fc00: 6f67 2c0a 0909 0909 2020 2020 2020 2024 og,..... $\n-0002fc10: 6d61 7848 6172 644c 696e 6b73 2c0a 0909 maxHardLinks,...\n-0002fc20: 0909 2020 2020 2020 2022 2e6d 6435 426c .. \".md5Bl\n-0002fc30: 6f63 6b43 6865 636b 5375 6d73 2e62 7a32 ockCheckSums.bz2\n-0002fc40: 2229 3b0a 0909 2020 2020 7d0a 0909 2020 \");... }... \n-0002fc50: 2020 6d79 2024 626c 6f63 6b4d 4435 4669 my $blockMD5Fi\n-0002fc60: 6c65 203d 2022 2474 6172 6765 7444 6972 le = \"$targetDir\n-0002fc70: 2f24 6669 6c65 2f24 626c 6f63 6b43 6865 /$file/$blockChe\n-0002fc80: 636b 5375 6d46 696c 652e 627a 3222 3b0a ckSumFile.bz2\";.\n-0002fc90: 0909 2020 2020 6d79 2024 626c 6f63 6b20 .. my $block \n-0002fca0: 3d20 7069 7065 4672 6f6d 466f 726b 2d3e = pipeFromFork->\n-0002fcb0: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => '\n-0002fcc0: 627a 6970 3227 2c0a 0909 0909 0909 2020 bzip2',....... \n-0002fcd0: 272d 7061 7261 6d27 203d 3e20 5b27 2d64 '-param' => ['-d\n-0002fce0: 275d 2c0a 0909 0909 0909 2020 272d 7374 '],....... '-st\n-0002fcf0: 6469 6e27 203d 3e20 2462 6c6f 636b 4d44 din' => $blockMD\n-0002fd00: 3546 696c 652c 0a09 0909 0909 0920 2027 5File,....... '\n-0002fd10: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>..\n-0002fd20: 0909 0909 0920 2022 2474 6d70 6469 722f ..... \"$tmpdir/\n-0002fd30: 7374 6275 5069 7065 4672 6f6d 3131 2d22 stbuPipeFrom11-\"\n-0002fd40: 2c0a 0909 0909 0909 2020 272d 7072 4c6f ,....... '-prLo\n-0002fd50: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n-0002fd60: 0920 2020 206d 7920 246c 3b0a 0909 2020 . my $l;... \n-0002fd70: 2020 7768 696c 6520 2824 6c20 3d20 2462 while ($l = $b\n-0002fd80: 6c6f 636b 2d3e 7265 6164 2829 290a 0909 lock->read())...\n-0002fd90: 2020 2020 7b0a 0909 0963 686f 7020 246c {....chop $l\n-0002fda0: 3b0a 0909 096d 7920 2824 626c 6f63 6b4d ;....my ($blockM\n-0002fdb0: 4435 2c20 2463 6f6d 7072 2c20 2462 6c6f D5, $compr, $blo\n-0002fdc0: 636b 4669 6c65 6e61 6d65 290a 0909 0920 ckFilename).... \n-0002fdd0: 2020 203d 2073 706c 6974 282f 5c73 2f2c = split(/\\s/,\n-0002fde0: 2024 6c2c 2033 293b 0a23 7072 696e 7420 $l, 3);.#print \n-0002fdf0: 2262 6c6f 636b 4d44 3520 3d20 2462 6c6f \"blockMD5 = $blo\n-0002fe00: 636b 4d44 352c 2063 6f6d 7072 203d 2024 ckMD5, compr = $\n-0002fe10: 636f 6d70 722c 2062 6c6f 636b 4669 6c65 compr, blockFile\n-0002fe20: 6e61 6d65 203d 2024 626c 6f63 6b46 696c name = $blockFil\n-0002fe30: 656e 616d 655c 6e22 3b0a 0909 2020 2020 ename\\n\";... \n-0002fe40: 7d0a 0909 2020 2020 6d79 2024 6f75 7420 }... my $out \n-0002fe50: 3d20 2462 6c6f 636b 2d3e 6765 7453 5444 = $block->getSTD\n-0002fe60: 4552 5228 293b 0a09 0920 2020 2069 6620 ERR();... if \n-0002fe70: 2840 246f 7574 290a 0909 2020 2020 7b0a (@$out)... {.\n-0002fe80: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-0002fe90: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-0002fea0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str\n-0002feb0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [\n-0002fec0: 2272 6561 6469 6e67 2066 726f 6d20 2462 \"reading from $b\n-0002fed0: 6c6f 636b 4d44 3546 696c 6520 6765 6e65 lockMD5File gene\n-0002fee0: 7261 7465 6422 2c0a 0909 0909 2020 2020 rated\",..... \n-0002fef0: 2020 2040 246f 7574 5d29 3b0a 0909 0972 @$out]);....r\n-0002ff00: 6574 7572 6e20 303b 0a09 0920 2020 207d eturn 0;... }\n-0002ff10: 0a09 0920 2020 2024 626c 6f63 6b2d 3e63 ... $block->c\n-0002ff20: 6c6f 7365 2829 3b0a 0a09 0920 2020 2069 lose();.... i\n-0002ff30: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm\n-0002ff40: 7329 0a09 0920 2020 207b 0a09 0909 6368 s)... {....ch\n-0002ff50: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n-0002ff60: 2224 7461 7267 6574 4469 722f 2466 696c \"$targetDir/$fil\n-0002ff70: 6522 3b0a 0909 096d 7920 246d 203d 2024 e\";....my $m = $\n-0002ff80: 6d6f 6465 3b0a 0909 0924 6d20 263d 2030 mode;....$m &= 0\n-0002ff90: 3737 373b 2020 2020 2320 7374 7269 7020 777; # strip \n-0002ffa0: 7370 6563 6961 6c20 7065 726d 6973 7369 special permissi\n-0002ffb0: 6f6e 730a 0909 0924 6d20 7c3d 2030 3131 ons....$m |= 011\n-0002ffc0: 313b 2020 2020 2320 6164 6420 6469 7265 1; # add dire\n-0002ffd0: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission\n-0002ffe0: 730a 0909 0963 686d 6f64 2024 6d2c 2022 s....chmod $m, \"\n-0002fff0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-00030000: 223b 0a09 0909 7574 696d 6520 2461 7469 \";....utime $ati\n-00030010: 6d65 2c20 246d 7469 6d65 2c20 2244 6972 me, $mtime, \"Dir\n-00030020: 2f24 6669 6c65 2220 6966 2024 7265 7365 /$file\" if $rese\n-00030030: 7441 7469 6d65 3b3b 0a09 0909 7574 696d tAtime;;....utim\n-00030040: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n-00030050: 2c20 2224 7461 7267 6574 4469 722f 2466 , \"$targetDir/$f\n-00030060: 696c 6522 3b0a 0909 2020 2020 7d0a 0a09 ile\";... }...\n-00030070: 0920 2020 2024 616b 7446 696c 656e 616d . $aktFilenam\n-00030080: 652d 3e73 746f 7265 2827 2d66 696c 656e e->store('-filen\n-00030090: 616d 6527 203d 3e20 2466 696c 652c 2320 ame' => $file,# \n-000300a0: 7370 6569 6368 6572 7420 696e 2064 626d speichert in dbm\n-000300b0: 0a09 0909 0909 272d 6d64 3573 756d 2720 ......'-md5sum' \n-000300c0: 3d3e 2024 6d64 352c 2020 2023 202e 6d64 => $md5, # .md\n-000300d0: 3573 756d 2d44 6174 6569 0a09 0909 0909 5sum-Datei......\n-000300e0: 272d 636f 6d70 7227 203d 3e20 2762 272c '-compr' => 'b',\n-000300f0: 0a09 0909 0909 272d 6465 7627 203d 3e20 ......'-dev' => \n-00030100: 2464 6576 2c0a 0909 0909 0927 2d69 6e6f $dev,......'-ino\n-00030110: 6465 2720 3d3e 2024 696e 6f64 652c 0a09 de' => $inode,..\n-00030120: 0909 0909 272d 696e 6f64 6542 6163 6b75 ....'-inodeBacku\n-00030130: 7027 203d 3e20 302c 0a09 0909 0909 272d p' => 0,......'-\n-00030140: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n-00030150: 2c0a 0909 0909 0927 2d6d 7469 6d65 2720 ,......'-mtime' \n-00030160: 3d3e 2024 6d74 696d 652c 0a09 0909 0909 => $mtime,......\n-00030170: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti\n-00030180: 6d65 2c0a 0909 0909 0927 2d61 7469 6d65 me,......'-atime\n-00030190: 2720 3d3e 2024 6174 696d 652c 0a09 0909 ' => $atime,....\n-000301a0: 0909 272d 7369 7a65 2720 3d3e 2024 7369 ..'-size' => $si\n-000301b0: 7a65 2c0a 0909 0909 0927 2d75 6964 2720 ze,......'-uid' \n-000301c0: 3d3e 2024 7569 642c 0a09 0909 0909 272d => $uid,......'-\n-000301d0: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,...\n-000301e0: 0909 0927 2d6d 6f64 6527 203d 3e20 246d ...'-mode' => $m\n-000301f0: 6f64 6529 3b0a 0909 7d0a 0909 6e65 7874 ode);...}...next\n-00030200: 3b0a 0a09 2020 2020 7d0a 0a09 2020 2020 ;... }... \n-00030210: 230a 0920 2020 2023 2028 2474 7970 6520 #.. # ($type \n-00030220: 6571 2027 6627 2920 2d3e 206e 6f72 6d61 eq 'f') -> norma\n-00030230: 6c20 6669 6c65 0a09 2020 2020 230a 0920 l file.. #.. \n-00030240: 2020 2024 6d61 696e 3a3a 7374 6174 2d3e $main::stat->\n-00030250: 6164 6453 756d 4f72 6967 4669 6c65 7328 addSumOrigFiles(\n-00030260: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi\n-00030270: 6429 3b0a 0a09 2020 2020 6d79 2028 2463 d);... my ($c\n-00030280: 6f6d 7072 4f6c 642c 2024 6c69 6e6b 4669 omprOld, $linkFi\n-00030290: 6c65 2c20 246e 6577 4669 6c65 2c20 246f le, $newFile, $o\n-000302a0: 6c64 4669 6c65 293b 0a09 2020 2020 6d79 ldFile);.. my\n-000302b0: 2028 2469 6e6f 6465 4261 636b 7570 2c20 ($inodeBackup, \n-000302c0: 2462 6163 6b75 7044 6972 496e 6465 782c $backupDirIndex,\n-000302d0: 2024 6261 636b 7570 4469 7229 3b0a 0920 $backupDir);.. \n-000302e0: 2020 206d 7920 2469 6e74 6572 6e61 6c4f my $internalO\n-000302f0: 6c64 3b0a 0920 2020 2069 6620 2824 7479 ld;.. if ($ty\n-00030300: 7065 2065 7120 2766 6e65 7727 2920 2020 pe eq 'fnew') \n-00030310: 2020 2320 7072 6576 696f 7573 2062 6163 # previous bac\n-00030320: 6b75 7020 7769 7468 2074 6869 730a 0920 kup with this.. \n-00030330: 2020 207b 2020 2020 2020 2020 2020 2020 { \n-00030340: 2020 2020 2020 2020 2020 2020 2320 6669 # fi\n-00030350: 6c65 2077 6173 2064 6f6e 6520 6173 2062 le was done as b\n-00030360: 6c6f 636b 6564 2066 696c 652c 0a09 0924 locked file,...$\n-00030370: 6c69 6e6b 4669 6c65 203d 2075 6e64 6566 linkFile = undef\n-00030380: 3b20 2020 2320 736f 2066 6f72 6365 2063 ; # so force c\n-00030390: 6f6d 7072 6573 7320 6f72 2063 6f70 790a ompress or copy.\n-000303a0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n-000303b0: 0a09 2020 2020 7b0a 0909 2320 6a65 747a .. {...# jetz\n-000303c0: 7420 696e 2044 424d 2d46 696c 6573 206e t in DBM-Files n\n-000303d0: 6163 6873 6568 656e 2075 6e64 206c 696e achsehen und lin\n-000303e0: 6b65 6e0a 0909 6966 2028 2828 2469 6e6f ken...if ((($ino\n-000303f0: 6465 4261 636b 7570 2c20 2463 6f6d 7072 deBackup, $compr\n-00030400: 4f6c 642c 2024 6261 636b 7570 4469 7249 Old, $backupDirI\n-00030410: 6e64 6578 2c0a 0909 2020 2020 2020 2462 ndex,... $b\n-00030420: 6163 6b75 7044 6972 2c20 246c 696e 6b46 ackupDir, $linkF\n-00030430: 696c 6529 203d 0a09 0920 2020 2020 246f ile) =... $o\n-00030440: 6c64 4669 6c65 6e61 6d65 2d3e 6765 7446 ldFilename->getF\n-00030450: 696c 656e 616d 6528 246d 6435 2929 203d ilename($md5)) =\n-00030460: 3d20 3529 0a09 097b 0a23 7072 696e 7420 = 5)...{.#print \n-00030470: 222d 302e 382d 3c62 6163 6b75 7044 6972 \"-0.8- \\n\";... if \n-000304d0: 2824 6261 636b 7570 4469 7249 6e64 6578 ($backupDirIndex\n-000304e0: 2021 3d20 3129 2020 2320 6964 656e 7469 != 1) # identi\n-000304f0: 6361 6c20 6669 6c65 2069 7320 696e 2061 cal file is in a\n-00030500: 6e6f 7468 6572 2073 6572 6965 730a 0909 nother series...\n-00030510: 2020 2020 7b20 2020 2020 2020 2020 2020 { \n-00030520: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00030530: 202d 2d3e 2072 6563 616c 6320 6d64 3520 --> recalc md5 \n-00030540: 7375 6d0a 2370 7269 6e74 2022 2d30 2e39 sum.#print \"-0.9\n-00030550: 2d24 6d61 696e 3a3a 736f 7572 6365 4469 -$main::sourceDi\n-00030560: 722f 2466 696c 652d 5c6e 223b 0a09 0909 r/$file-\\n\";....\n-00030570: 246d 6435 203d 2026 3a3a 6361 6c63 4d44 $md5 = &::calcMD\n-00030580: 3528 2224 6d61 696e 3a3a 736f 7572 6365 5(\"$main::source\n-00030590: 4469 722f 2466 696c 6522 2c20 2470 724c Dir/$file\", $prL\n-000305a0: 6f67 293b 0a09 0909 246d 6169 6e3a 3a73 og);....$main::s\n-000305b0: 7461 742d 3e61 6464 5f6e 6f4d 4435 6564 tat->add_noMD5ed\n-000305c0: 4669 6c65 7328 3129 3b0a 0909 0975 6e6c Files(1);....unl\n-000305d0: 6573 7320 2824 6d64 3529 0a09 0909 7b0a ess ($md5)....{.\n-000305e0: 0909 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-000305f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00030600: 2757 272c 0a09 0909 0909 2020 272d 7374 'W',...... '-st\n-00030610: 7227 203d 3e0a 0909 0920 205b 2266 696c r' =>.... [\"fil\n-00030620: 6520 3c24 6d61 696e 3a3a 736f 7572 6365 e <$main::source\n-00030630: 4469 722f 2466 696c 653e 2064 656c 6574 Dir/$file> delet\n-00030640: 6564 2064 7572 696e 6720 6261 636b 7570 ed during backup\n-00030650: 2028 3629 225d 290a 0909 0909 756e 6c65 (6)\"]).....unle\n-00030660: 7373 2065 7869 7374 7320 2424 7375 7070 ss exists $$supp\n-00030670: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n-00030680: 6543 6861 6e67 6527 7d3b 0a09 0909 2020 eChange'};.... \n-00030690: 2020 6e65 7874 3b0a 0909 097d 0a09 0920 next;....}... \n-000306a0: 2020 207d 0a0a 0909 2020 2020 246e 6577 }.... $new\n-000306b0: 4669 6c65 203d 2022 2474 6172 6765 7444 File = \"$targetD\n-000306c0: 6972 2f24 6669 6c65 223b 0a09 0920 2020 ir/$file\";... \n-000306d0: 2024 6f6c 6446 696c 6520 3d20 2224 6261 $oldFile = \"$ba\n-000306e0: 636b 7570 4469 722f 246c 696e 6b46 696c ckupDir/$linkFil\n-000306f0: 6522 3b0a 0909 2020 2020 2469 6e74 6572 e\";... $inter\n-00030700: 6e61 6c4f 6c64 203d 2028 2462 6163 6b75 nalOld = ($backu\n-00030710: 7044 6972 496e 6465 7820 3d3d 2030 2920 pDirIndex == 0) \n-00030720: 3f0a 0909 0927 696e 7465 726e 616c 2720 ?....'internal' \n-00030730: 3a20 276f 6c64 273b 0a23 7072 696e 7420 : 'old';.#print \n-00030740: 222d 312d 2024 6e65 7746 696c 6520 246f \"-1- $newFile $o\n-00030750: 6c64 4669 6c65 5c6e 223b 0a23 7072 696e ldFile\\n\";.#prin\n-00030760: 7420 2224 7461 7267 6574 4469 7228 2466 t \"$targetDir($f\n-00030770: 696c 6529 2024 6261 636b 7570 4469 7228 ile) $backupDir(\n-00030780: 246c 696e 6b46 696c 6529 2024 6261 636b $linkFile) $back\n-00030790: 7570 4469 7249 6e64 6578 5c6e 223b 0a09 upDirIndex\\n\";..\n-000307a0: 0920 2020 206d 7920 2824 782c 2024 6f6c . my ($x, $ol\n-000307b0: 6453 697a 6529 3b0a 0909 2020 2020 6966 dSize);... if\n-000307c0: 2028 2462 6163 6b75 7044 6972 496e 6465 ($backupDirInde\n-000307d0: 7820 3d3d 2030 2920 2023 2066 6972 7374 x == 0) # first\n-000307e0: 206f 6363 7572 7265 6e63 650a 0909 2020 occurrence... \n-000307f0: 2020 7b20 2020 2020 2020 2020 2020 2020 { \n-00030800: 2020 2020 2020 2020 2020 2020 2023 2069 # i\n-00030810: 6e20 736f 7572 6365 4469 720a 2370 7269 n sourceDir.#pri\n-00030820: 6e74 2022 312e 325c 6e22 3b0a 0909 0969 nt \"1.2\\n\";....i\n-00030830: 6620 282d 6520 2224 6d61 696e 3a3a 736f f (-e \"$main::so\n-00030840: 7572 6365 4469 722f 246c 696e 6b46 696c urceDir/$linkFil\n-00030850: 6522 290a 0909 097b 0a09 0909 2020 2020 e\")....{.... \n-00030860: 246f 6c64 5369 7a65 203d 2028 7374 6174 $oldSize = (stat\n-00030870: 2822 246d 6169 6e3a 3a73 6f75 7263 6544 (\"$main::sourceD\n-00030880: 6972 2f24 6c69 6e6b 4669 6c65 2229 295b ir/$linkFile\"))[\n-00030890: 375d 3b0a 2370 7269 6e74 2022 312e 335c 7];.#print \"1.3\\\n-000308a0: 6e22 3b0a 0909 097d 0a09 0909 656c 7365 n\";....}....else\n-000308b0: 0a09 0909 7b0a 0909 0920 2020 2024 6f6c ....{.... $ol\n-000308c0: 6453 697a 6520 3d20 2d31 3b0a 2370 7269 dSize = -1;.#pri\n-000308d0: 6e74 2022 312e 345c 6e22 3b0a 0909 097d nt \"1.4\\n\";....}\n-000308e0: 0a09 0920 2020 207d 0a23 0909 2020 2020 ... }.#.. \n-000308f0: 656c 7369 6620 2824 6261 636b 7570 4469 elsif ($backupDi\n-00030900: 7249 6e64 6578 2021 3d20 3129 2020 2020 rIndex != 1) \n-00030910: 2320 6669 6c65 2066 6f75 6e64 2069 6e20 # file found in \n-00030920: 6f74 6865 7220 6261 636b 7570 2073 6572 other backup ser\n-00030930: 6965 730a 2309 0920 2020 207b 0a23 0909 ies.#.. {.#..\n-00030940: 0924 6c69 6e6b 4669 6c65 203d 2075 6e64 .$linkFile = und\n-00030950: 6566 3b0a 2309 0909 246f 6c64 5369 7a65 ef;.#...$oldSize\n-00030960: 203d 202d 313b 0a23 7072 696e 7420 2231 = -1;.#print \"1\n-00030970: 2e31 5c6e 223b 0a23 0909 2020 2020 7d0a .1\\n\";.#.. }.\n-00030980: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... \n-00030990: 207b 0a23 7072 696e 7420 2231 2e35 5c6e {.#print \"1.5\\n\n-000309a0: 223b 0a09 0909 2824 782c 2024 782c 2024 \";....($x, $x, $\n-000309b0: 782c 2024 6f6c 6453 697a 652c 2024 7829 x, $oldSize, $x)\n-000309c0: 203d 0a09 0909 2020 2020 246f 6c64 4669 =.... $oldFi\n-000309d0: 6c65 6e61 6d65 2d3e 6765 7449 6e6f 6465 lename->getInode\n-000309e0: 6261 636b 7570 436f 6d70 7243 7469 6d65 backupComprCtime\n-000309f0: 4d74 696d 6553 697a 654d 4435 2824 6c69 MtimeSizeMD5($li\n-00030a00: 6e6b 4669 6c65 293b 0a09 0920 2020 207d nkFile);... }\n-00030a10: 0a09 0920 2020 2069 6620 2824 6f6c 6453 ... if ($oldS\n-00030a20: 697a 6520 213d 2024 7369 7a65 2061 6e64 ize != $size and\n-00030a30: 2024 6f6c 6453 697a 6520 3e20 2d31 290a $oldSize > -1).\n-00030a40: 0909 2020 2020 7b0a 0909 096d 7920 2463 .. {....my $c\n-00030a50: 6f6d 6d65 6e74 203d 2024 636f 6d70 724f omment = $comprO\n-00030a60: 6c64 2065 7120 2775 273f 2027 2720 3a0a ld eq 'u'? '' :.\n-00030a70: 0909 0920 2020 2027 2028 7769 7468 2075 ... ' (with u\n-00030a80: 6e63 6f6d 7072 6573 7365 6420 6669 6c65 ncompressed file\n-00030a90: 7320 6672 6f6d 2062 6163 6b75 7029 273b s from backup)';\n-00030aa0: 0a09 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin\n-00030ab0: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n-00030ac0: 2c0a 0909 0909 2020 2020 2020 272d 7374 ,..... '-st\n-00030ad0: 7227 203d 3e0a 0909 0909 2020 2020 2020 r' =>..... \n-00030ae0: 5b22 706f 7373 6962 6c65 2068 6173 6820 [\"possible hash \n-00030af0: 636f 6c6c 6973 696f 6e20 6265 7477 6565 collision betwee\n-00030b00: 6e22 2c0a 0909 0909 2020 2020 2020 223c n\",..... \"<\n-00030b10: 246f 6c64 4669 6c65 3e20 2873 697a 6520 $oldFile> (size \n-00030b20: 3d20 246f 6c64 5369 7a65 2920 616e 6422 = $oldSize) and\"\n-00030b30: 2c0a 0909 0909 2020 2020 2020 223c 246e ,..... \"<$n\n-00030b40: 6577 4669 6c65 3e20 2873 697a 6520 3d20 ewFile> (size = \n-00030b50: 2473 697a 6529 222c 0a09 0909 0920 2020 $size)\",..... \n-00030b60: 2020 2020 226e 6f74 206c 696e 6b65 642c \"not linked,\n-00030b70: 2063 6865 636b 206d 6435 2073 756d 7324 check md5 sums$\n-00030b80: 636f 6d6d 656e 7422 5d29 0a09 0909 2020 comment\"]).... \n-00030b90: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists \n-00030ba0: 2424 7375 7070 7265 7373 5761 726e 696e $$suppressWarnin\n-00030bb0: 677b 2768 6173 6843 6f6c 6c69 7369 6f6e g{'hashCollision\n-00030bc0: 277d 3b0a 0909 0924 6c69 6e6b 4669 6c65 '};....$linkFile\n-00030bd0: 203d 2075 6e64 6566 3b20 2020 2320 646f = undef; # do\n-00030be0: 206e 6f74 206c 696e 6b0a 0909 2020 2020 not link... \n-00030bf0: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else \n-00030c00: 2020 2020 2020 2020 2023 2044 6174 6569 # Datei\n-00030c10: 2069 7374 206e 6f63 6820 6e69 6368 7420 ist noch nicht \n-00030c20: 6265 6b61 6e6e 740a 0909 7b0a 0909 2020 bekannt...{... \n-00030c30: 2020 246c 696e 6b46 696c 6520 3d20 756e $linkFile = un\n-00030c40: 6465 663b 0a09 097d 0a09 2020 2020 7d0a def;...}.. }.\n-00030c50: 0a23 7072 696e 7420 222d 2d2d 2d2d 2d2d .#print \"-------\n-00030c60: 2d2d 2d2d 2d2d 2024 6469 722f 2466 696c ------ $dir/$fil\n-00030c70: 6524 706f 7374 6669 785c 6e22 3b0a 2020 e$postfix\\n\";. \n-00030c80: 2020 2020 2020 2020 2020 6966 2028 246c if ($l\n-00030c90: 696e 6b46 696c 6520 616e 640a 2020 2020 inkFile and. \n-00030ca0: 2020 2020 2020 2020 2020 2020 2463 6f6d $com\n-00030cb0: 7072 4f6c 6420 6571 2027 6327 2061 6e64 prOld eq 'c' and\n-00030cc0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00030cd0: 202d 6520 2224 6469 722f 2466 696c 6524 -e \"$dir/$file$\n-00030ce0: 706f 7374 6669 7822 290a 0920 2020 207b postfix\").. {\n-00030cf0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00030d00: 2024 6c69 6e6b 4669 6c65 203d 2075 6e64 $linkFile = und\n-00030d10: 6566 3b0a 2370 7269 6e74 2022 2d2d 2d2d ef;.#print \"----\n-00030d20: 2d2d 2d2d 2d2d 2d2d 2d20 666f 756e 6420 --------- found \n-00030d30: 7468 6174 2066 696c 655c 6e22 3b0a 2020 that file\\n\";. \n-00030d40: 2020 2020 2020 2020 2020 7d0a 0a23 7072 }..#pr\n-00030d50: 696e 7420 222d 322d 5c6e 223b 0a09 2020 int \"-2-\\n\";.. \n-00030d60: 2020 6966 2028 246c 696e 6b46 696c 6529 if ($linkFile)\n-00030d70: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print \"\n-00030d80: 2d33 2d5c 6e22 3b0a 2020 2020 2020 2020 -3-\\n\";. \n-00030d90: 2020 2020 2020 2020 2320 416c 7465 2044 # Alte D\n-00030da0: 6174 6569 206b 6f6d 7072 696d 6965 7274 atei komprimiert\n-00030db0: 0a09 0969 6620 2824 636f 6d70 724f 6c64 ...if ($comprOld\n-00030dc0: 2065 7120 2763 2729 0a09 097b 0a20 2020 eq 'c')...{. \n-00030dd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00030de0: 2024 6e65 7746 696c 6520 2e3d 2024 706f $newFile .= $po\n-00030df0: 7374 6669 783b 0a20 2020 2020 2020 2020 stfix;. \n-00030e00: 2020 2020 2020 2020 2020 2024 6f6c 6446 $oldF\n-00030e10: 696c 6520 2e3d 2024 706f 7374 6669 783b ile .= $postfix;\n-00030e20: 0a09 097d 0a0a 2020 2020 2020 2020 2020 ...}.. \n-00030e30: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n-00030e40: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00030e50: 4427 2c0a 2020 2020 2020 2020 2020 2020 D',. \n-00030e60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00030e70: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. \n-00030e80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00030e90: 2020 2020 2020 2020 2020 5b22 6c69 6e6b [\"link\n-00030ea0: 2024 6f6c 6446 696c 6520 246e 6577 4669 $oldFile $newFi\n-00030eb0: 6c65 225d 290a 2020 2020 2020 2020 2020 le\"]). \n-00030ec0: 2020 2020 2020 2020 2020 6966 2028 2464 if ($d\n-00030ed0: 6562 7567 4d6f 6465 203e 3d20 3229 3b0a ebugMode >= 2);.\n-00030ee0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00030ef0: 2023 2043 6865 636b 2065 7869 7374 656e # Check existen\n-00030f00: 6365 2c20 6c61 7465 4c69 6e6b 7320 6e6f ce, lateLinks no\n-00030f10: 7420 7365 7420 616e 6420 6f6c 6446 696c t set and oldFil\n-00030f20: 6520 646f 6573 206e 6f74 2065 7869 7374 e does not exist\n-00030f30: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00030f40: 2075 6e6c 6573 7320 2824 6c61 7465 4c69 unless ($lateLi\n-00030f50: 6e6b 7320 6f72 2024 6f6c 6446 696c 6529 nks or $oldFile)\n-00030f60: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo\n-00030f70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00030f80: 203d 3e20 2757 272c 0a09 0909 0920 2027 => 'W',..... '\n-00030f90: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [\n-00030fa0: 2228 7769 7468 206f 6c64 2920 6361 6e6e \"(with old) cann\n-00030fb0: 6f74 206c 696e 6b20 2876 6961 206d 6435 ot link (via md5\n-00030fc0: 2920 2220 2e0a 0909 0909 2020 2022 3c24 ) \" ...... \"<$\n-00030fd0: 6f6c 6446 696c 653e 203c 246e 6577 4669 oldFile> <$newFi\n-00030fe0: 6c65 3e22 5d29 0a09 0909 6966 2028 2464 le>\"])....if ($d\n-00030ff0: 6562 7567 4d6f 6465 203e 3d20 3129 3b0a ebugMode >= 1);.\n-00031000: 0909 2020 2020 246c 696e 6b46 696c 6520 .. $linkFile \n-00031010: 3d20 756e 6465 663b 0a09 0920 2020 2024 = undef;... $\n-00031020: 6f6c 6446 696c 656e 616d 652d 3e64 656c oldFilename->del\n-00031030: 6574 6545 6e74 7279 2824 6d64 352c 2020 eteEntry($md5, \n-00031040: 2020 2320 696e 205a 756b 756e 6674 206e # in Zukunft n\n-00031050: 6963 6874 206d 6568 720a 0909 0909 0920 icht mehr...... \n-00031060: 2020 2020 2024 6669 6c65 293b 2020 2320 $file); # \n-00031070: 6d69 7420 6469 6573 6572 2044 6174 6569 mit dieser Datei\n-00031080: 206c 696e 6b65 6e0a 2020 2020 2020 2020 linken. \n-00031090: 2020 2020 2020 2020 7d0a 0a20 2020 2020 }.. \n-000310a0: 2020 2020 2020 2020 2020 2023 2049 6e20 # In \n-000310b0: 4461 7465 6920 7363 6872 6569 6265 6e0a Datei schreiben.\n-000310c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000310d0: 6966 2028 246c 6174 654c 696e 6b73 2061 if ($lateLinks a\n-000310e0: 6e64 206e 6f74 0a09 0920 2020 2028 6465 nd not... (de\n-000310f0: 6669 6e65 6428 2466 696c 6529 2061 6e64 fined($file) and\n-00031100: 2065 7869 7374 7320 2466 6f72 6365 436f exists $forceCo\n-00031110: 7079 436f 6d70 727b 2466 696c 657d 2929 pyCompr{$file}))\n-00031120: 0a09 097b 0a09 0920 2020 202b 2b24 616c ...{... ++$al\n-00031130: 6c42 6163 6b75 7044 6972 737b 2462 6163 lBackupDirs{$bac\n-00031140: 6b75 7044 6972 7d0a 0909 2020 2020 2020 kupDir}... \n-00031150: 2020 6966 2024 6261 636b 7570 4469 7220 if $backupDir \n-00031160: 6e65 2024 7461 7267 6574 4469 723b 0a09 ne $targetDir;..\n-00031170: 0920 2020 206d 7920 2465 7869 7374 696e . my $existin\n-00031180: 6746 696c 6520 3d20 3a3a 7265 6c50 6174 gFile = ::relPat\n-00031190: 6828 2474 6172 6765 7444 6972 2c20 246f h($targetDir, $o\n-000311a0: 6c64 4669 6c65 293b 0a09 0920 2020 206d ldFile);... m\n-000311b0: 7920 246e 6577 4c69 6e6b 203d 203a 3a72 y $newLink = ::r\n-000311c0: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi\n-000311d0: 722c 2024 6e65 7746 696c 6529 3b0a 0a09 r, $newFile);...\n-000311e0: 0920 2020 2024 6578 6973 7469 6e67 4669 . $existingFi\n-000311f0: 6c65 203d 7e20 732f 5c6e 2f5c 302f 6f67 le =~ s/\\n/\\0/og\n-00031200: 3b0a 0909 2020 2020 246e 6577 4c69 6e6b ;... $newLink\n-00031210: 203d 7e20 732f 5c6e 2f5c 302f 6f67 3b0a =~ s/\\n/\\0/og;.\n-00031220: 0909 2020 2020 2477 724c 6174 654c 696e .. $wrLateLin\n-00031230: 6b2d 3e70 7269 6e74 2822 6c69 6e6b 2024 k->print(\"link $\n-00031240: 6d64 355c 6e24 6578 6973 7469 6e67 4669 md5\\n$existingFi\n-00031250: 6c65 5c6e 246e 6577 4c69 6e6b 5c6e 2229 le\\n$newLink\\n\")\n-00031260: 3b0a 0a09 0920 2020 2024 6d61 696e 3a3a ;.... $main::\n-00031270: 7374 6174 2d3e 696e 6372 5f6e 6f4c 6174 stat->incr_noLat\n-00031280: 654c 696e 6b73 2824 7569 642c 2024 6769 eLinks($uid, $gi\n-00031290: 6429 3b0a 0a20 2020 2020 2020 2020 2020 d);.. \n-000312a0: 2020 2020 2020 2020 2023 2053 6368 7265 # Schre\n-000312b0: 6962 656e 2064 6572 2049 6e66 6f72 6d61 iben der Informa\n-000312c0: 7469 6f6e 656e 0a20 2020 2020 2020 2020 tionen. \n-000312d0: 2020 2020 2020 2020 2020 2024 616b 7446 $aktF\n-000312e0: 696c 656e 616d 652d 3e73 746f 7265 2827 ilename->store('\n-000312f0: 2d66 696c 656e 616d 6527 203d 3e20 2466 -filename' => $f\n-00031300: 696c 652c 0a20 2020 2020 2020 2020 2020 ile,. \n-00031310: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031320: 2020 2020 2020 2020 2020 2020 2027 2d6d '-m\n-00031330: 6435 7375 6d27 203d 3e20 246d 6435 2c0a d5sum' => $md5,.\n-00031340: 0909 0909 0927 2d63 6f6d 7072 2720 3d3e .....'-compr' =>\n-00031350: 2024 636f 6d70 724f 6c64 2c0a 0909 0909 $comprOld,.....\n-00031360: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev,\n-00031370: 0a09 0909 0909 272d 696e 6f64 6527 203d ......'-inode' =\n-00031380: 3e20 2469 6e6f 6465 2c0a 0909 0909 0927 > $inode,......'\n-00031390: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' =>\n-000313a0: 2024 696e 6f64 6542 6163 6b75 702c 0a09 $inodeBackup,..\n-000313b0: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => \n-000313c0: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m\n-000313d0: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime,\n-000313e0: 0a09 0909 0909 272d 6174 696d 6527 203d ......'-atime' =\n-000313f0: 3e20 2461 7469 6d65 2c0a 0909 0909 0927 > $atime,......'\n-00031400: 2d73 697a 6527 203d 3e20 2473 697a 652c -size' => $size,\n-00031410: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => \n-00031420: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid\n-00031430: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,......\n-00031440: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode\n-00031450: 2c0a 0909 0909 0927 2d73 746f 7265 496e ,......'-storeIn\n-00031460: 4442 4d27 203d 3e20 3020 2023 2069 6e20 DBM' => 0 # in \n-00031470: 6462 6d20 7369 6e6e 6c6f 730a 2020 2020 dbm sinnlos. \n-00031480: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031490: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000314a0: 2020 2029 3b0a 2020 2020 2020 2020 2020 );. \n-000314b0: 2020 2020 2020 7d0a 0909 656c 7365 2020 }...else \n-000314c0: 2320 4f64 6572 2064 6972 656b 7420 6c69 # Oder direkt li\n-000314d0: 6e6b 656e 0a09 097b 0a09 0920 2020 206d nken...{... m\n-000314e0: 7920 2468 6c20 3d20 2d31 3b0a 0909 2020 y $hl = -1;... \n-000314f0: 2020 6966 2028 246d 6178 4861 7264 4c69 if ($maxHardLi\n-00031500: 6e6b 7320 3e20 3029 0a09 0920 2020 207b nks > 0)... {\n-00031510: 0a09 0909 2468 6c20 3d20 2873 7461 7428 ....$hl = (stat(\n-00031520: 246f 6c64 4669 6c65 2929 5b33 5d3b 0a23 $oldFile))[3];.#\n-00031530: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00031540: 2321 2121 2121 2121 2121 2121 2121 2121 #!!!!!!!!!!!!!!!\n-00031550: 2121 210a 2370 7269 6e74 2022 2d33 2e35 !!!.#print \"-3.5\n-00031560: 2d20 246f 6c64 4669 6c65 202d 3e20 246e - $oldFile -> $n\n-00031570: 6577 4669 6c65 3a20 2468 6c20 6861 7264 ewFile: $hl hard\n-00031580: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL\n-00031590: 696e 6b73 295c 6e22 3b0a 0909 2020 2020 inks)\\n\";... \n-000315a0: 7d0a 0909 2020 2020 6966 2028 2468 6c20 }... if ($hl \n-000315b0: 3c20 246d 6178 4861 7264 4c69 6e6b 7320 < $maxHardLinks \n-000315c0: 616e 6420 6c69 6e6b 2024 6f6c 6446 696c and link $oldFil\n-000315d0: 652c 2024 6e65 7746 696c 6529 0a23 0909 e, $newFile).#..\n-000315e0: 2020 2020 6966 2028 6c69 6e6b 2024 6f6c if (link $ol\n-000315f0: 6446 696c 652c 2024 6e65 7746 696c 6529 dFile, $newFile)\n-00031600: 0a09 0920 2020 207b 0a09 0909 6966 2028 ... {....if (\n-00031610: 2470 7265 7365 7276 6550 6572 6d73 290a $preservePerms).\n-00031620: 0909 097b 0a09 0909 2020 2020 6368 6f77 ...{.... chow\n-00031630: 6e20 2475 6964 2c20 2467 6964 2c20 246e n $uid, $gid, $n\n-00031640: 6577 4669 6c65 3b0a 0909 0920 2020 2063 ewFile;.... c\n-00031650: 686d 6f64 2024 6d6f 6465 2c20 246e 6577 hmod $mode, $new\n-00031660: 4669 6c65 3b0a 0909 097d 0a0a 0909 0923 File;....}.....#\n-00031670: 2053 6368 7265 6962 656e 2064 6572 2049 Schreiben der I\n-00031680: 6e66 6f72 6d61 7469 6f6e 656e 0a09 0909 nformationen....\n-00031690: 2461 6b74 4669 6c65 6e61 6d65 2d3e 7374 $aktFilename->st\n-000316a0: 6f72 6528 272d 6669 6c65 6e61 6d65 2720 ore('-filename' \n-000316b0: 3d3e 2024 6669 6c65 2c0a 0909 0909 0920 => $file,...... \n-000316c0: 2020 2027 2d6d 6435 7375 6d27 203d 3e20 '-md5sum' => \n-000316d0: 246d 6435 2c0a 0909 0909 0920 2020 2027 $md5,...... '\n-000316e0: 2d63 6f6d 7072 2720 3d3e 2024 636f 6d70 -compr' => $comp\n-000316f0: 724f 6c64 2c0a 0909 0909 0920 2020 2027 rOld,...... '\n-00031700: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,..\n-00031710: 0909 0909 2020 2020 272d 696e 6f64 6527 .... '-inode'\n-00031720: 203d 3e20 2469 6e6f 6465 2c0a 0909 0909 => $inode,.....\n-00031730: 0920 2020 2027 2d69 6e6f 6465 4261 636b . '-inodeBack\n-00031740: 7570 2720 3d3e 2024 696e 6f64 6542 6163 up' => $inodeBac\n-00031750: 6b75 702c 0a09 0909 0909 2020 2020 272d kup,...... '-\n-00031760: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n-00031770: 2c0a 0909 0909 0920 2020 2027 2d6d 7469 ,...... '-mti\n-00031780: 6d65 2720 3d3e 2024 6d74 696d 652c 0a09 me' => $mtime,..\n-00031790: 0909 0909 2020 2020 272d 6174 696d 6527 .... '-atime'\n-000317a0: 203d 3e20 2461 7469 6d65 2c0a 0909 0909 => $atime,.....\n-000317b0: 0920 2020 2027 2d73 697a 6527 203d 3e20 . '-size' => \n-000317c0: 2473 697a 652c 0a09 0909 0909 2020 2020 $size,...... \n-000317d0: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,.\n-000317e0: 0909 0909 0920 2020 2027 2d67 6964 2720 ..... '-gid' \n-000317f0: 3d3e 2024 6769 642c 0a09 0909 0909 2020 => $gid,...... \n-00031800: 2020 272d 6d6f 6465 2720 3d3e 2024 6d6f '-mode' => $mo\n-00031810: 6465 2c0a 0909 0909 0920 2020 2027 2d73 de,...... '-s\n-00031820: 746f 7265 496e 4442 4d27 203d 3e20 3020 toreInDBM' => 0 \n-00031830: 2023 2069 6e20 6462 6d20 7369 6e6e 6c6f # in dbm sinnlo\n-00031840: 730a 0909 0920 2020 2029 3b0a 0909 0969 s.... );....i\n-00031850: 6620 2824 636f 6d70 724f 6c64 2065 7120 f ($comprOld eq \n-00031860: 2775 2729 0a09 0909 7b0a 0909 0920 2020 'u')....{.... \n-00031870: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad\n-00031880: 6453 756d 556e 6368 616e 6765 6443 6f70 dSumUnchangedCop\n-00031890: 7928 2473 697a 6529 3b0a 0909 097d 0a09 y($size);....}..\n-000318a0: 0909 656c 7365 2020 2023 2024 636f 6d70 ..else # $comp\n-000318b0: 724f 6c64 2065 7120 2763 270a 0909 097b rOld eq 'c'....{\n-000318c0: 0a09 0909 2020 2020 246d 6169 6e3a 3a73 .... $main::s\n-000318d0: 7461 742d 3e61 6464 5375 6d55 6e63 6861 tat->addSumUncha\n-000318e0: 6e67 6564 436f 6d70 7228 2473 697a 6529 ngedCompr($size)\n-000318f0: 3b0a 0909 097d 0a09 0920 2020 207d 0a09 ;....}... }..\n-00031900: 0920 2020 2065 6c73 650a 0909 2020 2020 . else... \n-00031910: 7b0a 0909 0924 7072 4c6f 672d 3e70 7269 {....$prLog->pri\n-00031920: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W\n-00031930: 272c 0a09 0909 0920 2020 2020 2027 2d73 ',..... '-s\n-00031940: 7472 2720 3d3e 0a09 0909 0920 2020 2020 tr' =>..... \n-00031950: 205b 2228 7769 7468 206f 6c64 2920 6361 [\"(with old) ca\n-00031960: 6e6e 6f74 206c 696e 6b20 2876 6961 206d nnot link (via m\n-00031970: 6435 2920 2220 2e0a 0909 0909 2020 2020 d5) \" ...... \n-00031980: 2020 2022 3c24 6f6c 6446 696c 653e 203c \"<$oldFile> <\n-00031990: 246e 6577 4669 6c65 3e22 5d29 0a09 0909 $newFile>\"])....\n-000319a0: 2020 2020 6966 2028 2464 6562 7567 4d6f if ($debugMo\n-000319b0: 6465 203e 3d20 3129 3b0a 0909 0924 6c69 de >= 1);....$li\n-000319c0: 6e6b 4669 6c65 203d 2075 6e64 6566 3b20 nkFile = undef; \n-000319d0: 2020 2020 2020 2020 2320 3d3e 206b 6f70 # => kop\n-000319e0: 6965 7265 6e20 6f64 6572 206b 6f6d 7072 ieren oder kompr\n-000319f0: 696d 6965 7265 6e0a 0909 0924 6f6c 6446 imieren....$oldF\n-00031a00: 696c 656e 616d 652d 3e64 656c 6574 6545 ilename->deleteE\n-00031a10: 6e74 7279 2824 6d64 352c 2020 2020 2320 ntry($md5, # \n-00031a20: 696e 205a 756b 756e 6674 206e 6963 6874 in Zukunft nicht\n-00031a30: 206d 6568 720a 0909 0909 0909 2020 2466 mehr....... $f\n-00031a40: 696c 6529 3b20 2023 206d 6974 2064 6965 ile); # mit die\n-00031a50: 7365 7220 4461 7465 6920 6c69 6e6b 656e ser Datei linken\n-00031a60: 0a09 0920 2020 207d 0a09 097d 0a0a 2020 ... }...}.. \n-00031a70: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-00031a80: 5374 6174 7320 6e75 7220 7765 6e6e 2077 Stats nur wenn w\n-00031a90: 6972 6b6c 6963 6820 6765 6c69 6e6b 740a irklich gelinkt.\n-00031aa0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031ab0: 6966 2028 6465 6669 6e65 6420 246c 696e if (defined $lin\n-00031ac0: 6b46 696c 6529 0a09 097b 0a20 2020 2020 kFile)...{. \n-00031ad0: 2020 2020 2020 2020 2020 2020 2020 2069 i\n-00031ae0: 6620 2824 636f 6d70 724f 6c64 2065 7120 f ($comprOld eq \n-00031af0: 2775 2729 0a09 0920 2020 207b 0a20 2020 'u')... {. \n-00031b00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031b10: 2020 2020 2069 6620 2824 696e 7465 726e if ($intern\n-00031b20: 616c 4f6c 6420 6571 2027 696e 7465 726e alOld eq 'intern\n-00031b30: 616c 2729 0a09 0909 7b0a 2020 2020 2020 al')....{. \n-00031b40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031b50: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta\n-00031b60: 742d 3e61 6464 5375 6d4c 696e 6b65 6449 t->addSumLinkedI\n-00031b70: 6e74 6572 6e61 6c43 6f70 7928 2473 697a nternalCopy($siz\n-00031b80: 6529 3b0a 2020 2020 2020 2020 2020 2020 e);. \n-00031b90: 2020 2020 2020 2020 2020 2020 7d0a 2020 }. \n-00031ba0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031bb0: 2020 2020 2020 656c 7365 0a09 0909 7b0a else....{.\n-00031bc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031bd0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai\n-00031be0: 6e3a 3a73 7461 742d 3e61 6464 5375 6d4c n::stat->addSumL\n-00031bf0: 696e 6b65 644f 6c64 436f 7079 2824 7369 inkedOldCopy($si\n-00031c00: 7a65 293b 0a20 2020 2020 2020 2020 2020 ze);. \n-00031c10: 2020 2020 2020 2020 2020 2020 207d 0a20 }. \n-00031c20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031c30: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n-00031c40: 2020 2020 2020 2020 2065 6c73 650a 0909 else...\n-00031c50: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. \n-00031c60: 2020 2020 2020 2020 2020 2020 2020 6966 if\n-00031c70: 2028 2469 6e74 6572 6e61 6c4f 6c64 2065 ($internalOld e\n-00031c80: 7120 2769 6e74 6572 6e61 6c27 290a 0909 q 'internal')...\n-00031c90: 097b 0a20 2020 2020 2020 2020 2020 2020 .{. \n-00031ca0: 2020 2020 2020 2020 2020 2020 2020 2024 $\n-00031cb0: 6d61 696e 3a3a 7374 6174 2d3e 6164 6453 main::stat->addS\n-00031cc0: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal\n-00031cd0: 436f 6d70 7228 2473 697a 6529 3b0a 2020 Compr($size);. \n-00031ce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031cf0: 2020 2020 2020 7d0a 2020 2020 2020 2020 }. \n-00031d00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031d10: 656c 7365 0a09 0909 7b0a 2020 2020 2020 else....{. \n-00031d20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031d30: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta\n-00031d40: 742d 3e61 6464 5375 6d4c 696e 6b65 644f t->addSumLinkedO\n-00031d50: 6c64 436f 6d70 7228 2473 697a 6529 3b0a ldCompr($size);.\n-00031d60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031d70: 2020 2020 2020 2020 7d0a 2020 2020 2020 }. \n-00031d80: 2020 2020 2020 2020 2020 2020 2020 7d0a }.\n-00031d90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00031da0: 7d0a 0920 2020 207d 0a0a 2020 2020 2020 }.. }.. \n-00031db0: 2020 2020 2020 2320 6578 6973 7469 6572 # existier\n-00031dc0: 7420 6e6f 6368 206e 6963 6874 2c20 636f t noch nicht, co\n-00031dd0: 7079 206f 6465 7220 636f 6d70 7265 7373 py oder compress\n-00031de0: 0a23 7072 696e 7420 222d 2034 202d 5c6e .#print \"- 4 -\\n\n-00031df0: 223b 0a09 2020 2020 6966 2028 6e6f 7420 \";.. if (not \n-00031e00: 6465 6669 6e65 6420 246c 696e 6b46 696c defined $linkFil\n-00031e10: 6529 0a09 2020 2020 7b0a 2370 7269 6e74 e).. {.#print\n-00031e20: 2022 2d20 3520 2d5c 6e22 3b0a 0909 6966 \"- 5 -\\n\";...if\n-00031e30: 2028 6578 6973 7473 2024 696e 5072 6f67 (exists $inProg\n-00031e40: 7265 7373 7b24 6d64 357d 2920 2320 4175 ress{$md5}) # Au\n-00031e50: 6620 4b6f 6d70 7265 7373 696f 6e2f 4b6f f Kompression/Ko\n-00031e60: 7069 6520 7761 7274 656e 0a09 097b 0a23 pie warten...{.#\n-00031e70: 7072 696e 7420 222d 2036 202d 5c6e 223b print \"- 6 -\\n\";\n-00031e80: 0a09 0920 2020 2070 7573 6820 407b 2469 ... push @{$i\n-00031e90: 6e50 726f 6772 6573 737b 246d 6435 7d7d nProgress{$md5}}\n-00031ea0: 2c20 5b24 6469 722c 2024 6669 6c65 2c20 , [$dir, $file, \n-00031eb0: 246d 6435 2c20 2766 275d 3b0a 0909 2020 $md5, 'f'];... \n-00031ec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00031ed0: 272d 6b69 6e64 2720 3d3e 2027 4427 2c0a '-kind' => 'D',.\n-00031ee0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n-00031ef0: 5b22 666f 756e 6420 6964 656e 7469 6361 [\"found identica\n-00031f00: 6c20 6669 6c65 2074 6f20 3c24 6669 6c65 l file to <$file\n-00031f10: 3e22 5d29 0a09 0909 6966 2024 6465 6275 >\"])....if $debu\n-00031f20: 674d 6f64 6520 3e3d 2033 3b0a 0909 2020 gMode >= 3;... \n-00031f30: 2020 6e65 7874 3b0a 0909 7d0a 0a20 2020 next;...}.. \n-00031f40: 2020 2020 2020 2020 2020 2020 2024 696e $in\n-00031f50: 5072 6f67 7265 7373 7b24 6d64 357d 203d Progress{$md5} =\n-00031f60: 205b 5d3b 2020 2023 206d 6572 6b65 6e2c []; # merken,\n-00031f70: 2077 6972 6420 6b6f 7069 6572 742f 6b6f wird kopiert/ko\n-00031f80: 6d70 7269 6d69 6572 740a 0a09 0926 3a3a mprimiert....&::\n-00031f90: 6d61 6b65 4669 6c65 5061 7468 4361 6368 makeFilePathCach\n-00031fa0: 6528 2224 7461 7267 6574 4469 722f 2466 e(\"$targetDir/$f\n-00031fb0: 696c 6522 2c20 2470 724c 6f67 2920 6966 ile\", $prLog) if\n-00031fc0: 2024 6c61 7465 4c69 6e6b 733b 0a0a 2370 $lateLinks;..#p\n-00031fd0: 7269 6e74 2022 2d20 3720 2d5c 6e22 3b0a rint \"- 7 -\\n\";.\n-00031fe0: 0909 6e6f 2077 6172 6e69 6e67 7320 276e ..no warnings 'n\n-00031ff0: 6577 6c69 6e65 273b 0a09 0969 6620 2828 ewline';...if ((\n-00032000: 2463 6f6d 7072 5275 6c65 2d3e 6861 734c $comprRule->hasL\n-00032010: 696e 6528 2920 3d3d 2031 2061 6e64 0a09 ine() == 1 and..\n-00032020: 0920 2020 2020 2463 6f6d 7072 5275 6c65 . $comprRule\n-00032030: 2d3e 6368 6563 6b52 756c 6528 2466 696c ->checkRule($fil\n-00032040: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode,\n-00032050: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n-00032060: 0a09 0909 0909 2020 2020 2020 2475 6964 ...... $uid\n-00032070: 2c20 2467 6964 2c20 2474 7970 6529 203d , $gid, $type) =\n-00032080: 3d20 3129 0a09 0920 2020 206f 7220 2d65 = 1)... or -e\n-00032090: 2022 2464 6972 2f24 6669 6c65 2470 6f73 \"$dir/$file$pos\n-000320a0: 7466 6978 2229 2023 2044 6174 6569 2068 tfix\") # Datei h\n-000320b0: 6174 206e 6963 6874 202e 627a 322c 2065 at nicht .bz2, e\n-000320c0: 730a 0909 7b20 2020 2020 2020 2020 2020 s...{ \n-000320d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000320e0: 2020 2020 2320 6578 6973 7469 6572 7420 # existiert \n-000320f0: 6162 6572 2044 6174 6569 206d 6974 202e aber Datei mit .\n-00032100: 627a 320a 0909 2020 2020 6966 2028 2d65 bz2... if (-e\n-00032110: 2022 2464 6972 2f24 6669 6c65 2470 6f73 \"$dir/$file$pos\n-00032120: 7466 6978 2229 0a09 0920 2020 207b 0a23 tfix\")... {.#\n-00032130: 7072 696e 7420 222d 2038 202d 5c6e 223b print \"- 8 -\\n\";\n-00032140: 0a09 0909 2466 6966 6f43 6f70 792d 3e61 ....$fifoCopy->a\n-00032150: 6464 2827 2d76 616c 7565 2720 3d3e 0a09 dd('-value' =>..\n-00032160: 0909 0920 2020 2020 2020 5b24 6469 722c ... [$dir,\n-00032170: 2024 6669 6c65 2c20 2475 6964 2c20 2467 $file, $uid, $g\n-00032180: 6964 2c20 246d 6f64 652c 0a09 0909 0909 id, $mode,......\n-00032190: 246d 6435 2c20 2763 6f70 7927 5d29 3b0a $md5, 'copy']);.\n-000321a0: 0909 2020 2020 7d0a 0909 2020 2020 656c .. }... el\n-000321b0: 7369 6620 2824 6c61 7465 436f 6d70 7265 sif ($lateCompre\n-000321c0: 7373 290a 0909 2020 2020 7b0a 2370 7269 ss)... {.#pri\n-000321d0: 6e74 2022 2d20 3920 2d5c 6e22 3b0a 0909 nt \"- 9 -\\n\";...\n-000321e0: 0924 6669 666f 436f 7079 2d3e 6164 6428 .$fifoCopy->add(\n-000321f0: 272d 7661 6c75 6527 203d 3e0a 0909 0909 '-value' =>.....\n-00032200: 2020 2020 2020 205b 2464 6972 2c20 2466 [$dir, $f\n-00032210: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid,\n-00032220: 2024 6d6f 6465 2c0a 0909 0909 0924 6d64 $mode,......$md\n-00032230: 352c 2027 636f 6d70 7227 5d29 3b0a 0909 5, 'compr']);...\n-00032240: 2020 2020 7d0a 0909 2020 2020 656c 7365 }... else\n-00032250: 2020 2023 2063 6f6d 7072 6573 7320 6669 # compress fi\n-00032260: 6c65 0a09 0920 2020 207b 0a23 7072 696e le... {.#prin\n-00032270: 7420 222d 2031 3020 2d5c 6e22 3b0a 0909 t \"- 10 -\\n\";...\n-00032280: 0924 6669 666f 436f 6d70 722d 3e61 6464 .$fifoCompr->add\n-00032290: 2827 2d76 616c 7565 2720 3d3e 0a09 0909 ('-value' =>....\n-000322a0: 0909 5b24 6469 722c 2024 6669 6c65 2c20 ..[$dir, $file, \n-000322b0: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod\n-000322c0: 652c 0a09 0909 0909 2024 6d64 352c 2027 e,...... $md5, '\n-000322d0: 636f 6d70 7227 5d29 3b0a 0909 2020 2020 compr']);... \n-000322e0: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else \n-000322f0: 2020 2023 2063 6f70 7920 6669 6c65 0a09 # copy file..\n-00032300: 097b 0a23 7072 696e 7420 222d 2031 3120 .{.#print \"- 11 \n-00032310: 2d5c 6e22 3b0a 0909 2020 2020 2466 6966 -\\n\";... $fif\n-00032320: 6f43 6f70 792d 3e61 6464 2827 2d76 616c oCopy->add('-val\n-00032330: 7565 2720 3d3e 0a09 0909 0920 2020 5b24 ue' =>..... [$\n-00032340: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid\n-00032350: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,..\n-00032360: 0909 0920 2020 2024 6d64 352c 2027 636f ... $md5, 'co\n-00032370: 7079 275d 293b 0a20 2020 2020 2020 2020 py']);. \n-00032380: 2020 2020 2020 207d 0a09 2020 2020 7d0a }.. }.\n-00032390: 097d 2023 2045 6e64 6520 5363 686c 6569 .} # Ende Schlei\n-000323a0: 6665 2057 6172 7465 7363 686c 6167 656e fe Warteschlagen\n-000323b0: 2066 c3bc 6c6c 656e 0a0a 2020 2020 2020 f..llen.. \n-000323c0: 2020 2320 416c 7465 204b 6f70 6965 722d # Alte Kopier-\n-000323d0: 4a6f 6273 2061 6268 6f6c 656e 0a20 2020 Jobs abholen. \n-000323e0: 2020 2020 2066 6f72 6561 6368 206d 7920 foreach my \n-000323f0: 2469 2028 2470 6172 466f 726b 436f 7079 $i ($parForkCopy\n-00032400: 2d3e 6368 6563 6b41 6c6c 2829 290a 2020 ->checkAll()). \n-00032410: 2020 2020 2020 7b0a 2020 2020 2020 2020 {. \n-00032420: 2020 2020 2320 5765 2064 6964 2073 6f6d # We did som\n-00032430: 6574 6869 6e67 0a20 2020 2020 2020 2020 ething. \n-00032440: 2020 2024 6d61 696e 3a3a 7469 6e79 5761 $main::tinyWa\n-00032450: 6974 5363 6865 6475 6c65 722d 3e72 6573 itScheduler->res\n-00032460: 6574 2829 3b0a 0a20 2020 2020 2020 2020 et();.. \n-00032470: 2020 206d 7920 2473 7464 6572 7220 3d20 my $stderr = \n-00032480: 2469 2d3e 6765 7453 5444 4552 5228 293b $i->getSTDERR();\n-00032490: 0a20 2020 2020 2020 2020 2020 206d 7920 . my \n-000324a0: 2824 6465 762c 2024 696e 6f64 652c 2024 ($dev, $inode, $\n-000324b0: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid\n-000324c0: 2c20 2467 6964 2c20 246d 6f64 652c 2024 , $gid, $mode, $\n-000324d0: 6d64 352c 0a20 2020 2020 2020 2020 2020 md5,. \n-000324e0: 2020 2020 2024 6374 696d 652c 2024 6d74 $ctime, $mt\n-000324f0: 696d 652c 2024 6174 696d 652c 2024 7369 ime, $atime, $si\n-00032500: 7a65 2c20 2463 6f6d 7072 2c20 2474 6d70 ze, $compr, $tmp\n-00032510: 4d44 3546 696c 6529 203d 0a20 2020 2020 MD5File) =. \n-00032520: 2020 2020 2020 2020 2020 2020 2020 2040 @\n-00032530: 7b24 692d 3e67 6574 2827 2d77 6861 7427 {$i->get('-what'\n-00032540: 203d 3e20 2769 6e66 6f27 297d 3b0a 0a09 => 'info')};...\n-00032550: 2020 2020 6966 2028 263a 3a77 6169 7446 if (&::waitF\n-00032560: 6f72 4669 6c65 2822 2474 6172 6765 7444 orFile(\"$targetD\n-00032570: 6972 2f24 6669 6c65 2229 290a 0920 2020 ir/$file\")).. \n-00032580: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n-00032590: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000325a0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-000325b0: 7227 203d 3e20 5b22 3c24 7461 7267 6574 r' => [\"<$target\n-000325c0: 4469 722f 2466 696c 653e 2077 6173 206e Dir/$file> was n\n-000325d0: 6f74 2063 7265 6174 6564 2028 3129 225d ot created (1)\"]\n-000325e0: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. \n-000325f0: 7d0a 2020 2020 2020 2020 2020 2020 6966 }. if\n-00032600: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms\n-00032610: 2061 6e64 206e 6f74 2024 6c61 7465 4c69 and not $lateLi\n-00032620: 6e6b 7329 0a09 2020 2020 7b0a 2020 2020 nks).. {. \n-00032630: 2020 2020 2020 2020 2020 2020 6368 6f77 chow\n-00032640: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, \"$\n-00032650: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n-00032660: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-00032670: 2020 6368 6d6f 6420 246d 6f64 652c 2022 chmod $mode, \"\n-00032680: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file\n-00032690: 223b 0a20 2020 2020 2020 2020 2020 2020 \";. \n-000326a0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime,\n-000326b0: 2024 6d74 696d 652c 2022 2464 6972 2f24 $mtime, \"$dir/$\n-000326c0: 6669 6c65 2220 6966 2024 7265 7365 7441 file\" if $resetA\n-000326d0: 7469 6d65 3b0a 2020 2020 2020 2020 2020 time;. \n-000326e0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati\n-000326f0: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, \"$ta\n-00032700: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file\";.\n-00032710: 2020 2020 2020 2020 2020 2020 7d0a 0a20 }.. \n-00032720: 2020 2020 2020 2020 2020 206d 7920 2469 my $i\n-00032730: 6e6f 6465 4261 636b 7570 203d 2028 7374 nodeBackup = (st\n-00032740: 6174 2822 2474 6172 6765 7444 6972 2f24 at(\"$targetDir/$\n-00032750: 6669 6c65 2229 295b 315d 3b0a 0920 2020 file\"))[1];.. \n-00032760: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = \n-00032770: 3020 756e 6c65 7373 2024 696e 6f64 6542 0 unless $inodeB\n-00032780: 6163 6b75 703b 2020 2023 2069 6620 7469 ackup; # if ti\n-00032790: 6d69 6e67 2069 7373 7565 2c0a 0920 2020 ming issue,.. \n-000327a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000327b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000327c0: 2020 2020 2020 2020 2023 2076 616c 7565 # value\n-000327d0: 2069 7320 6e6f 7420 7573 6564 2061 7420 is not used at \n-000327e0: 616c 6c0a 0a20 2020 2020 2020 2020 2020 all.. \n-000327f0: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > \n-00032800: 3029 0a20 2020 2020 2020 2020 2020 207b 0). {\n-00032810: 0a09 0975 6e6c 6573 7320 282d 6520 2224 ...unless (-e \"$\n-00032820: 6469 722f 2466 696c 6522 2920 2320 6669 dir/$file\") # fi\n-00032830: 6c65 2077 6173 2064 656c 6574 6564 2064 le was deleted d\n-00032840: 7572 696e 6720 636f 7079 696e 670a 0909 uring copying...\n-00032850: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog->\n-00032860: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00032870: 2027 5727 2c0a 0909 0909 2020 272d 7374 'W',..... '-st\n-00032880: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... [\"fi\n-00032890: 6c65 203c 2464 6972 2f24 6669 6c65 3e20 le <$dir/$file> \n-000328a0: 6465 6c65 7465 6420 6475 7269 6e67 2062 deleted during b\n-000328b0: 6163 6b75 7020 2832 2922 5d29 3b0a 0909 ackup (2)\"]);...\n-000328c0: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... \n-000328d0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-000328e0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-000328f0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n-00032900: 0a09 0909 0920 205b 2263 6f70 7969 6e67 ..... [\"copying\n-00032910: 203c 2464 6972 2f24 6669 6c65 3e20 2d3e <$dir/$file> ->\n-00032920: 203c 2474 6172 6765 7444 6972 2f24 6669 <$targetDir/$fi\n-00032930: 6c65 3e22 202e 0a09 0909 0920 2020 2220 le>\" ...... \" \n-00032940: 6765 6e65 7261 7465 6420 7468 6520 666f generated the fo\n-00032950: 6c6c 6f77 696e 6720 6572 726f 7220 6d65 llowing error me\n-00032960: 7373 6167 6573 3a22 2c0a 0909 0909 2020 ssages:\",..... \n-00032970: 2040 2473 7464 6572 725d 293b 0a09 097d @$stderr]);...}\n-00032980: 0a09 0975 6e6c 696e 6b20 2224 7461 7267 ...unlink \"$targ\n-00032990: 6574 4469 722f 2466 696c 6522 3b0a 2020 etDir/$file\";. \n-000329a0: 2020 2020 2020 2020 2020 2020 2020 6e65 ne\n-000329b0: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. \n-000329c0: 7d0a 0a09 2020 2020 6c6f 6361 6c20 2a54 }... local *T\n-000329d0: 4d50 4d44 353b 0a09 2020 2020 756e 6c65 MPMD5;.. unle\n-000329e0: 7373 2028 263a 3a77 6169 7446 6f72 4669 ss (&::waitForFi\n-000329f0: 6c65 2824 746d 704d 4435 4669 6c65 2920 le($tmpMD5File) \n-00032a00: 3d3d 2030 2061 6e64 0a09 096f 7065 6e28 == 0 and...open(\n-00032a10: 544d 504d 4435 2c20 2474 6d70 4d44 3546 TMPMD5, $tmpMD5F\n-00032a20: 696c 6529 290a 0920 2020 207b 0a09 0924 ile)).. {...$\n-00032a30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00032a40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00032a50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00032a60: 5b22 6361 6e6e 6f74 2072 6561 6420 7265 [\"cannot read re\n-00032a70: 6361 6c63 6564 206d 6435 7375 6d20 2220 calced md5sum \" \n-00032a80: 2e0a 0909 0909 0920 226f 6620 3c24 7461 ....... \"of <$ta\n-00032a90: 7267 6574 4469 722f 2466 696c 653e 2220 rgetDir/$file>\" \n-00032aa0: 2e0a 0909 0909 0920 223b 2066 696c 6520 ....... \"; file \n-00032ab0: 6973 206e 6f74 2062 6163 6b65 6420 7570 is not backed up\n-00032ac0: 2028 3129 225d 293b 0a09 096e 6578 743b (1)\"]);...next;\n-00032ad0: 0a09 2020 2020 7d0a 0920 2020 206d 7920 .. }.. my \n-00032ae0: 246c 6173 744d 4435 203d 203c 544d 504d $lastMD5 = ;.. chomp \n-00032b00: 246c 6173 744d 4435 3b0a 0920 2020 206d $lastMD5;.. m\n-00032b10: 7920 246c 6173 7453 697a 6520 3d20 3c54 y $lastSize = ;.. cho\n-00032b30: 6d70 2024 6c61 7374 5369 7a65 3b0a 0920 mp $lastSize;.. \n-00032b40: 2020 2063 6c6f 7365 2854 4d50 4d44 3529 close(TMPMD5)\n-00032b50: 3b0a 0920 2020 2075 6e6c 696e 6b20 2474 ;.. unlink $t\n-00032b60: 6d70 4d44 3546 696c 653b 0a0a 0920 2020 mpMD5File;... \n-00032b70: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad\n-00032b80: 645f 6e6f 4d44 3565 6446 696c 6573 2831 d_noMD5edFiles(1\n-00032b90: 293b 0a09 2020 2020 756e 6c65 7373 2028 );.. unless (\n-00032ba0: 246c 6173 744d 4435 290a 0920 2020 207b $lastMD5).. {\n-00032bb0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00032bc0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W',\n-00032bd0: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-00032be0: 203d 3e0a 0909 0920 2020 2020 205b 2266 =>.... [\"f\n-00032bf0: 696c 6520 3c24 6469 722f 2466 696c 653e ile <$dir/$file>\n-00032c00: 2064 656c 6574 6564 2064 7572 696e 6720 deleted during \n-00032c10: 6261 636b 7570 2028 3329 225d 290a 0909 backup (3)\"])...\n-00032c20: 2020 2020 756e 6c65 7373 2065 7869 7374 unless exist\n-00032c30: 7320 2424 7375 7070 7265 7373 5761 726e s $$suppressWarn\n-00032c40: 696e 677b 2766 696c 6543 6861 6e67 6527 ing{'fileChange'\n-00032c50: 7d3b 0a09 096e 6578 743b 0a09 2020 2020 };...next;.. \n-00032c60: 7d0a 0920 2020 2069 6620 2824 6c61 7374 }.. if ($last\n-00032c70: 4d44 3520 6e65 2024 6d64 3520 6f72 2024 MD5 ne $md5 or $\n-00032c80: 6c61 7374 5369 7a65 2021 3d20 2473 697a lastSize != $siz\n-00032c90: 6529 0a09 2020 2020 7b0a 0909 2470 724c e).. {...$prL\n-00032ca0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00032cb0: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... \n-00032cc0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>....\n-00032cd0: 2020 2020 2020 5b22 6669 6c65 203c 2464 [\"file <$d\n-00032ce0: 6972 2f24 6669 6c65 3e20 6368 616e 6765 ir/$file> change\n-00032cf0: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup\"\n-00032d00: 5d29 0a09 0920 2020 2075 6e6c 6573 7320 ])... unless \n-00032d10: 6578 6973 7473 2024 2473 7570 7072 6573 exists $$suppres\n-00032d20: 7357 6172 6e69 6e67 7b27 6669 6c65 4368 sWarning{'fileCh\n-00032d30: 616e 6765 277d 3b0a 0909 246d 6435 203d ange'};...$md5 =\n-00032d40: 2024 6c61 7374 4d44 353b 0a09 0924 7369 $lastMD5;...$si\n-00032d50: 7a65 203d 2024 6c61 7374 5369 7a65 3b0a ze = $lastSize;.\n-00032d60: 0920 2020 207d 0a0a 2020 2020 2020 2020 . }.. \n-00032d70: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00032d80: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D'\n-00032d90: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00032da0: 2020 2020 2020 2020 2020 2020 272d 7374 '-st\n-00032db0: 7227 203d 3e0a 2020 2020 2020 2020 2020 r' =>. \n-00032dc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032dd0: 5b22 6669 6e69 7368 6564 2063 6f70 7920 [\"finished copy \n-00032de0: 3c24 6469 722f 2466 696c 653e 2022 202e <$dir/$file> \" .\n-00032df0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00032e00: 2020 2020 2020 2020 2020 2020 223c 2474 \"<$t\n-00032e10: 6172 6765 7444 6972 2f24 6669 6c65 3e22 argetDir/$file>\"\n-00032e20: 5d29 0a20 2020 2020 2020 2020 2020 2020 ]). \n-00032e30: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod\n-00032e40: 6520 3e3d 2032 293b 0a0a 2020 2020 2020 e >= 2);.. \n-00032e50: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta\n-00032e60: 742d 3e69 6e63 725f 6e6f 466f 726b 7343 t->incr_noForksC\n-00032e70: 5028 293b 0a20 2020 2020 2020 2020 2020 P();. \n-00032e80: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad\n-00032e90: 6453 756d 4e65 7743 6f70 7928 2473 697a dSumNewCopy($siz\n-00032ea0: 6529 3b0a 0a20 2020 2020 2020 2020 2020 e);.. \n-00032eb0: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s\n-00032ec0: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename'\n-00032ed0: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp\n-00032ee0: 6569 6368 6572 7420 696e 2064 626d 0a20 eichert in dbm. \n-00032ef0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032f00: 2020 2020 2020 2020 2020 2020 2020 2027 '\n-00032f10: 2d6d 6435 7375 6d27 203d 3e20 246d 6435 -md5sum' => $md5\n-00032f20: 2c20 2020 2020 2320 2e6d 6435 7375 6d2d , # .md5sum-\n-00032f30: 4461 7465 690a 2020 2020 2020 2020 2020 Datei. \n-00032f40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032f50: 2020 2020 2020 272d 636f 6d70 7227 203d '-compr' =\n-00032f60: 3e20 2463 6f6d 7072 2c0a 2020 2020 2020 > $compr,. \n-00032f70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032f80: 2020 2020 2020 2020 2020 272d 6465 7627 '-dev'\n-00032f90: 203d 3e20 2464 6576 2c0a 2020 2020 2020 => $dev,. \n-00032fa0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032fb0: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod\n-00032fc0: 6527 203d 3e20 2469 6e6f 6465 2c0a 2020 e' => $inode,. \n-00032fd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00032fe0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00032ff0: 696e 6f64 6542 6163 6b75 7027 203d 3e20 inodeBackup' => \n-00033000: 2469 6e6f 6465 4261 636b 7570 2c0a 2020 $inodeBackup,. \n-00033010: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033020: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00033030: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime\n-00033040: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00033050: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033060: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m\n-00033070: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. \n-00033080: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033090: 2020 2020 2020 272d 6174 696d 6527 203d '-atime' =\n-000330a0: 3e20 2461 7469 6d65 2c0a 2020 2020 2020 > $atime,. \n-000330b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000330c0: 2020 2020 2020 2020 2020 272d 7369 7a65 '-size\n-000330d0: 2720 3d3e 2024 7369 7a65 2c0a 2020 2020 ' => $size,. \n-000330e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000330f0: 2020 2020 2020 2020 2020 2020 272d 7569 '-ui\n-00033100: 6427 203d 3e20 2475 6964 2c0a 2020 2020 d' => $uid,. \n-00033110: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033120: 2020 2020 2020 2020 2020 2020 272d 6769 '-gi\n-00033130: 6427 203d 3e20 2467 6964 2c0a 2020 2020 d' => $gid,. \n-00033140: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033150: 2020 2020 2020 2020 2020 2020 272d 6d6f '-mo\n-00033160: 6465 2720 3d3e 2024 6d6f 6465 293b 0a0a de' => $mode);..\n-00033170: 0a20 2020 2020 2020 2020 2020 2069 6620 . if \n-00033180: 2865 7869 7374 7320 2469 6e50 726f 6772 (exists $inProgr\n-00033190: 6573 737b 246d 6435 7d20 616e 640a 2020 ess{$md5} and. \n-000331a0: 2020 2020 2020 2020 2020 2020 2020 407b @{\n-000331b0: 2469 6e50 726f 6772 6573 737b 246d 6435 $inProgress{$md5\n-000331c0: 7d7d 203e 2030 2920 2023 2067 6570 7566 }} > 0) # gepuf\n-000331d0: 6665 7274 6520 4669 6c65 7320 6d69 740a ferte Files mit.\n-000331e0: 2020 2020 2020 2020 2020 2020 7b20 2020 { \n-000331f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00033200: 2020 2020 2020 2020 2020 2023 2067 6c65 # gle\n-00033210: 6963 6865 7220 6d64 3520 5375 6d6d 6520 icher md5 Summe \n-00033220: 6265 6172 6265 6974 656e 0a20 2020 2020 bearbeiten. \n-00033230: 2020 2020 2020 2020 2020 2024 6669 6c65 $file\n-00033240: 734c 6566 7420 3d20 313b 0a20 2020 2020 sLeft = 1;. \n-00033250: 2020 2020 2020 2020 2020 2024 7265 6164 $read\n-00033260: 4469 7241 6e64 4368 6563 6b2d 3e70 7573 DirAndCheck->pus\n-00033270: 6862 6163 6b28 2469 6e50 726f 6772 6573 hback($inProgres\n-00033280: 737b 246d 6435 7d2c 2024 7072 4c6f 672c s{$md5}, $prLog,\n-00033290: 0a09 0920 2020 2024 6465 6275 674d 6f64 ... $debugMod\n-000332a0: 6520 3e3d 2033 203f 2031 203a 2030 293b e >= 3 ? 1 : 0);\n-000332b0: 0a20 2020 2020 2020 2020 2020 207d 0a20 . }. \n-000332c0: 2020 2020 2020 2020 2020 2064 656c 6574 delet\n-000332d0: 6520 2469 6e50 726f 6772 6573 737b 246d e $inProgress{$m\n-000332e0: 6435 7d3b 0a20 2020 2020 2020 207d 0a0a d5};. }..\n-000332f0: 0923 206e 6575 6520 426c 6f63 6b2d 6d64 .# neue Block-md\n-00033300: 3520 4a6f 6273 2065 696e 68c3 a467 656e 5 Jobs einh..gen\n-00033310: 0a09 7768 696c 6520 2824 7061 7246 6f72 ..while ($parFor\n-00033320: 6b42 6c6f 636b 2d3e 6765 744e 6f46 7265 kBlock->getNoFre\n-00033330: 6545 6e74 7269 6573 2829 203e 2030 2061 eEntries() > 0 a\n-00033340: 6e64 0a09 2020 2020 2020 2024 6669 666f nd.. $fifo\n-00033350: 426c 6f63 6b2d 3e67 6574 4e6f 5573 6564 Block->getNoUsed\n-00033360: 456e 7472 6965 7328 2920 3e20 3029 0a09 Entries() > 0)..\n-00033370: 7b0a 2020 2020 2020 2020 2020 2020 2320 {. # \n-00033380: 5765 2064 6964 2073 6f6d 6574 6869 6e67 We did something\n-00033390: 0a20 2020 2020 2020 2020 2020 2024 6d61 . $ma\n-000333a0: 696e 3a3a 7469 6e79 5761 6974 5363 6865 in::tinyWaitSche\n-000333b0: 6475 6c65 722d 3e72 6573 6574 2829 3b0a duler->reset();.\n-000333c0: 0a09 2020 2020 6d79 2028 2464 6576 6669 .. my ($devfi\n-000333d0: 6c65 2c20 4070 6172 616d 2920 3d20 407b le, @param) = @{\n-000333e0: 2466 6966 6f42 6c6f 636b 2d3e 6765 7428 $fifoBlock->get(\n-000333f0: 297d 3b0a 0a09 2020 2020 2320 616c 6c65 )};... # alle\n-00033400: 206d 6435 2053 756d 6d65 6e20 6265 7265 md5 Summen bere\n-00033410: 6368 6e65 6e2c 0a23 7072 696e 7420 222d chnen,.#print \"-\n-00033420: 3131 2d20 6368 6563 6b42 6c6f 636b 2c20 11- checkBlock, \n-00033430: 6669 666f 426c 6f63 6b2d 3e67 6574 3a20 fifoBlock->get: \n-00033440: 2464 6576 6669 6c65 5c6e 223b 0a09 2020 $devfile\\n\";.. \n-00033450: 2020 6d79 2024 746d 704e 616d 6520 3d20 my $tmpName = \n-00033460: 263a 3a75 6e69 7146 696c 654e 616d 6528 &::uniqFileName(\n-00033470: 2224 746d 7064 6972 2f73 746f 7265 4261 \"$tmpdir/storeBa\n-00033480: 636b 7570 2d62 6c6f 636b 2e22 293b 0a23 ckup-block.\");.#\n-00033490: 7072 696e 7420 222d 3132 2d5c 6e22 3b0a print \"-12-\\n\";.\n-000334a0: 0920 2020 2069 6620 2824 6465 7666 696c . if ($devfil\n-000334b0: 6520 6571 2027 6669 6c65 2729 0a09 2020 e eq 'file').. \n-000334c0: 2020 7b0a 0909 6d79 2028 2464 6972 2c20 {...my ($dir, \n-000334d0: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi\n-000334e0: 642c 2024 6d6f 6465 2c20 2464 6576 2c0a d, $mode, $dev,.\n-000334f0: 0909 2020 2020 2469 6e6f 6465 2c20 2463 .. $inode, $c\n-00033500: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a\n-00033510: 7469 6d65 2c20 2473 697a 652c 2024 6368 time, $size, $ch\n-00033520: 6563 6b42 6c6f 636b 7342 532c 0a09 0920 eckBlocksBS,... \n-00033530: 2020 2024 636f 6d70 7265 7373 426c 6f63 $compressBloc\n-00033540: 6b2c 2024 626c 6f63 6b52 6561 6429 203d k, $blockRead) =\n-00033550: 2028 4070 6172 616d 293b 0a0a 0909 756e (@param);....un\n-00033560: 6c65 7373 2028 246c 6174 654c 696e 6b73 less ($lateLinks\n-00033570: 290a 0909 7b0a 0909 2020 2020 6d6b 6469 )...{... mkdi\n-00033580: 7220 2224 7461 7267 6574 4469 722f 2466 r \"$targetDir/$f\n-00033590: 696c 6522 206f 720a 0909 0924 7072 4c6f ile\" or....$prLo\n-000335a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000335b0: 203d 3e20 2745 272c 0a09 0909 0920 2020 => 'E',..... \n-000335c0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-000335d0: 616e 6e6f 7420 6d6b 6469 7220 3c24 7461 annot mkdir <$ta\n-000335e0: 7267 6574 4469 722f 2466 696c 653e 225d rgetDir/$file>\"]\n-000335f0: 2c0a 0909 0909 2020 2020 2020 272d 6578 ,..... '-ex\n-00033600: 6974 2720 3d3e 2031 293b 0a09 0920 2020 it' => 1);... \n-00033610: 2063 686f 776e 2024 7569 642c 2024 6769 chown $uid, $gi\n-00033620: 642c 2022 2474 6172 6765 7444 6972 2f24 d, \"$targetDir/$\n-00033630: 6669 6c65 223b 0a09 097d 0a0a 0909 2470 file\";...}....$p\n-00033640: 6172 466f 726b 426c 6f63 6b2d 3e61 6464 arForkBlock->add\n-00033650: 5f6e 6f62 6c6f 636b 2827 2d66 756e 6374 _noblock('-funct\n-00033660: 696f 6e27 203d 3e20 5c26 3a3a 6361 6c63 ion' => \\&::calc\n-00033670: 426c 6f63 6b4d 4435 5375 6d73 2c0a 0909 BlockMD5Sums,...\n-00033680: 0909 0920 2020 272d 6675 6e63 5061 7227 ... '-funcPar'\n-00033690: 203d 3e20 5b22 2464 6972 2f24 6669 6c65 => [\"$dir/$file\n-000336a0: 222c 2024 7461 7267 6574 4469 722c 0a09 \", $targetDir,..\n-000336b0: 0909 0909 0909 2020 2466 696c 652c 2024 ...... $file, $\n-000336c0: 6368 6563 6b42 6c6f 636b 7342 532c 0a09 checkBlocksBS,..\n-000336d0: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres\n-000336e0: 7342 6c6f 636b 2c0a 0909 0909 0909 0920 sBlock,........ \n-000336f0: 2024 626c 6f63 6b52 6561 642c 0a09 0909 $blockRead,....\n-00033700: 0909 0909 2020 2463 6f6d 7072 6573 7343 .... $compressC\n-00033710: 6f6d 6d61 6e64 2c0a 0909 0909 0909 0920 ommand,........ \n-00033720: 2024 636f 6d70 7265 7373 4f70 7469 6f6e $compressOption\n-00033730: 732c 0a09 0909 0909 0909 2020 2470 6f73 s,........ $pos\n-00033740: 7466 6978 2c0a 0909 0909 0909 0920 2024 tfix,........ $\n-00033750: 6f6c 6446 696c 656e 616d 652c 2024 6c61 oldFilename, $la\n-00033760: 7465 4c69 6e6b 732c 0a09 0909 0909 0909 teLinks,........\n-00033770: 2020 246c 6174 6543 6f6d 7072 6573 732c $lateCompress,\n-00033780: 0a09 0909 0909 0909 2020 246e 6f43 6f6d ........ $noCom\n-00033790: 7072 6573 732c 2024 7072 4c6f 672c 0a09 press, $prLog,..\n-000337a0: 0909 0909 0909 2020 2474 6d70 4e61 6d65 ...... $tmpName\n-000337b0: 2c0a 0909 0909 0909 0920 2024 626c 6f63 ,........ $bloc\n-000337c0: 6b43 6865 636b 5375 6d46 696c 652c 0a09 kCheckSumFile,..\n-000337d0: 0909 0909 0909 2020 2463 7469 6d65 2c20 ...... $ctime, \n-000337e0: 246d 7469 6d65 2c0a 0909 0909 0909 0920 $mtime,........ \n-000337f0: 2024 696e 7465 726e 616c 5069 7065 4275 $internalPipeBu\n-00033800: 6653 697a 655d 2c0a 0909 0909 0920 2020 fSize],...... \n-00033810: 272d 696e 666f 2720 3d3e 205b 2464 6576 '-info' => [$dev\n-00033820: 2c20 2469 6e6f 6465 2c20 2464 6972 2c0a , $inode, $dir,.\n-00033830: 0909 0909 0909 2020 2020 2020 2024 6669 ...... $fi\n-00033840: 6c65 2c20 2475 6964 2c20 2467 6964 2c0a le, $uid, $gid,.\n-00033850: 0909 0909 0909 2020 2020 2020 2024 6d6f ...... $mo\n-00033860: 6465 2c0a 0909 0909 0909 2020 2020 2020 de,....... \n-00033870: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n-00033880: 0a09 0909 0909 0920 2020 2020 2020 2461 ....... $a\n-00033890: 7469 6d65 2c20 2473 697a 652c 0a09 0909 time, $size,....\n-000338a0: 0909 0920 2020 2020 2020 2463 6f6d 7072 ... $compr\n-000338b0: 6573 7342 6c6f 636b 2c0a 0909 0909 0909 essBlock,.......\n-000338c0: 2020 2020 2020 2024 746d 704e 616d 655d $tmpName]\n-000338d0: 293b 0a0a 0909 2470 724c 6f67 2d3e 7072 );....$prLog->pr\n-000338e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000338f0: 4927 2c0a 0909 0920 2020 2020 2027 2d73 I',.... '-s\n-00033900: 7472 2720 3d3e 205b 2273 6176 696e 6720 tr' => [\"saving \n-00033910: 626c 6f63 6b65 6420 6669 6c65 203c 2466 blocked file <$f\n-00033920: 696c 653e 2028 2220 2e0a 0909 0920 2020 ile> (\" ..... \n-00033930: 2020 2028 263a 3a68 756d 616e 5265 6164 (&::humanRead\n-00033940: 6162 6c65 2824 7369 7a65 2929 5b30 5d20 able($size))[0] \n-00033950: 2e20 2729 275d 293b 0a09 2020 2020 7d0a . ')']);.. }.\n-00033960: 0920 2020 2065 6c73 6966 2028 2464 6576 . elsif ($dev\n-00033970: 6669 6c65 2065 7120 2764 6576 6963 6527 file eq 'device'\n-00033980: 290a 0920 2020 207b 0a09 096d 7920 2824 ).. {...my ($\n-00033990: 6465 7669 6365 2c20 2472 656c 4469 722c device, $relDir,\n-000339a0: 2024 626c 6f63 6b53 697a 652c 2024 636f $blockSize, $co\n-000339b0: 6d70 7265 7373 426c 6f63 6b2c 2024 7061 mpressBlock, $pa\n-000339c0: 7261 6c6c 656c 290a 0909 2020 2020 3d20 rallel)... = \n-000339d0: 2840 7061 7261 6d29 3b0a 0909 2462 6c6f (@param);...$blo\n-000339e0: 636b 5061 7261 6c6c 656c 203d 2024 7061 ckParallel = $pa\n-000339f0: 7261 6c6c 656c 3b0a 0909 6d79 2024 7265 rallel;...my $re\n-00033a00: 6c44 6972 3220 3d20 2464 6576 6963 653b lDir2 = $device;\n-00033a10: 0a09 0924 7265 6c44 6972 3220 3d7e 2073 ...$relDir2 =~ s\n-00033a20: 2f5c 2f2f 5f2f 673b 0a09 0924 7265 6c44 /\\//_/g;...$relD\n-00033a30: 6972 3220 3d7e 2073 2f5c 415f 2a28 2e2a ir2 =~ s/\\A_*(.*\n-00033a40: 295f 2a5c 5a2f 2431 2f3b 0a23 7072 696e )_*\\Z/$1/;.#prin\n-00033a50: 7420 225c 6e56 4f52 206d 616b 6544 6972 t \"\\nVOR makeDir\n-00033a60: 5061 7468 4361 6368 6520 2474 6172 6765 PathCache $targe\n-00033a70: 7444 6972 2f24 7265 6c44 6972 2f24 7265 tDir/$relDir/$re\n-00033a80: 6c44 6972 325c 6e5c 7464 6576 6963 653d lDir2\\n\\tdevice=\n-00033a90: 2464 6576 6963 655c 6e5c 7474 6172 6765 $device\\n\\ttarge\n-00033aa0: 7444 6972 3d24 7461 7267 6574 4469 725c tDir=$targetDir\\\n-00033ab0: 6e22 3b0a 0909 4064 6576 4469 7273 203d n\";...@devDirs =\n-00033ac0: 0a09 0920 2020 2026 3a3a 6d61 6b65 4469 ... &::makeDi\n-00033ad0: 7250 6174 6843 6163 6865 2822 2474 6172 rPathCache(\"$tar\n-00033ae0: 6765 7444 6972 2f24 7265 6c44 6972 2f24 getDir/$relDir/$\n-00033af0: 7265 6c44 6972 3222 2c0a 0909 0909 0924 relDir2\",......$\n-00033b00: 7072 4c6f 6729 3b0a 0a23 0909 666f 7265 prLog);..#..fore\n-00033b10: 6163 6820 6d79 2024 6420 2840 6465 7644 ach my $d (@devD\n-00033b20: 6972 7329 0a23 0909 7b0a 2309 0920 2020 irs).#..{.#.. \n-00033b30: 2070 7269 6e74 2022 5c74 2464 5c6e 223b print \"\\t$d\\n\";\n-00033b40: 0a23 0909 7d0a 2370 7269 6e74 2022 4e41 .#..}.#print \"NA\n-00033b50: 4348 206d 616b 6544 6972 5061 7468 4361 CH makeDirPathCa\n-00033b60: 6368 6520 2474 6172 6765 7444 6972 2f24 che $targetDir/$\n-00033b70: 7265 6c44 6972 2f24 7265 6c44 6972 325c relDir/$relDir2\\\n-00033b80: 6e22 3b0a 0909 2470 6172 466f 726b 426c n\";...$parForkBl\n-00033b90: 6f63 6b2d 3e61 6464 5f6e 6f62 6c6f 636b ock->add_noblock\n-00033ba0: 2827 2d66 756e 6374 696f 6e27 203d 3e20 ('-function' => \n-00033bb0: 5c26 3a3a 6361 6c63 426c 6f63 6b4d 4435 \\&::calcBlockMD5\n-00033bc0: 5375 6d73 2c0a 0909 0909 0920 2020 272d Sums,...... '-\n-00033bd0: 6675 6e63 5061 7227 203d 3e20 5b24 6465 funcPar' => [$de\n-00033be0: 7669 6365 2c20 2474 6172 6765 7444 6972 vice, $targetDir\n-00033bf0: 2c0a 0909 0909 0909 0920 2022 2472 656c ,........ \"$rel\n-00033c00: 4469 722f 2472 656c 4469 7232 222c 0a09 Dir/$relDir2\",..\n-00033c10: 0909 0909 0909 2020 2462 6c6f 636b 5369 ...... $blockSi\n-00033c20: 7a65 2c0a 0909 0909 0909 0920 2024 636f ze,........ $co\n-00033c30: 6d70 7265 7373 426c 6f63 6b2c 0a09 0909 mpressBlock,....\n-00033c40: 0909 0909 2020 5b27 6464 272c 2022 6273 .... ['dd', \"bs\n-00033c50: 3d24 626c 6f63 6b53 697a 6522 5d2c 0a09 =$blockSize\"],..\n-00033c60: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres\n-00033c70: 7343 6f6d 6d61 6e64 2c0a 0909 0909 0909 sCommand,.......\n-00033c80: 0920 2024 636f 6d70 7265 7373 4f70 7469 . $compressOpti\n-00033c90: 6f6e 732c 0a09 0909 0909 0909 2020 2470 ons,........ $p\n-00033ca0: 6f73 7466 6978 2c0a 0909 0909 0909 0920 ostfix,........ \n-00033cb0: 2024 6f6c 6446 696c 656e 616d 652c 2024 $oldFilename, $\n-00033cc0: 6c61 7465 4c69 6e6b 732c 0a09 0909 0909 lateLinks,......\n-00033cd0: 0909 2020 246c 6174 6543 6f6d 7072 6573 .. $lateCompres\n-00033ce0: 732c 0a09 0909 0909 0909 2020 246e 6f43 s,........ $noC\n-00033cf0: 6f6d 7072 6573 732c 2024 7072 4c6f 672c ompress, $prLog,\n-00033d00: 0a09 0909 0909 0909 2020 2474 6d70 4e61 ........ $tmpNa\n-00033d10: 6d65 2c0a 0909 0909 0909 0920 2024 626c me,........ $bl\n-00033d20: 6f63 6b43 6865 636b 5375 6d46 696c 652c ockCheckSumFile,\n-00033d30: 0a09 0909 0909 0909 2020 302c 2030 2c0a ........ 0, 0,.\n-00033d40: 0909 0909 0909 0920 2024 696e 7465 726e ....... $intern\n-00033d50: 616c 5069 7065 4275 6653 697a 655d 2c0a alPipeBufSize],.\n-00033d60: 0909 0909 0920 2020 272d 696e 666f 2720 ..... '-info' \n-00033d70: 3d3e 205b 2744 4556 4943 4527 2c20 302c => ['DEVICE', 0,\n-00033d80: 2024 6465 7669 6365 2c0a 0909 0909 0909 $device,.......\n-00033d90: 2020 2020 2020 2022 2472 656c 4469 722f \"$relDir/\n-00033da0: 2472 656c 4469 7232 222c 0a09 0909 0909 $relDir2\",......\n-00033db0: 0920 2020 2020 2020 302c 2030 2c0a 0909 . 0, 0,...\n-00033dc0: 0909 0909 2020 2020 2020 2030 3630 302c .... 0600,\n-00033dd0: 0a09 0909 0909 0920 2020 2020 2020 302c ....... 0,\n-00033de0: 2030 2c0a 0909 0909 0909 2020 2020 2020 0,....... \n-00033df0: 2030 2c20 302c 0a09 0909 0909 0920 2020 0, 0,....... \n-00033e00: 2020 2020 2463 6f6d 7072 6573 7342 6c6f $compressBlo\n-00033e10: 636b 2c0a 0909 0909 0909 2020 2020 2020 ck,....... \n-00033e20: 2024 746d 704e 616d 655d 293b 0a09 0924 $tmpName]);...$\n-00033e30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00033e40: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',....\n-00033e50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00033e60: 5b22 7361 7669 6e67 2064 6576 6963 6520 [\"saving device \n-00033e70: 3c24 6465 7669 6365 3e20 746f 2022 202e <$device> to \" .\n-00033e80: 0a09 0909 0909 2022 2474 6172 6765 7444 ...... \"$targetD\n-00033e90: 6972 2f24 7265 6c44 6972 2f24 7265 6c44 ir/$relDir/$relD\n-00033ea0: 6972 3222 5d29 3b0a 0920 2020 207d 0a09 ir2\"]);.. }..\n-00033eb0: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {.\n-00033ec0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00033ed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00033ee0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00033ef0: 3d3e 205b 2261 7373 6572 7469 6f6e 203c => [\"assertion <\n-00033f00: 2464 6576 6669 6c65 3e20 4070 6172 616d $devfile> @param\n-00033f10: 225d 2c0a 0909 0920 2020 2020 2027 2d65 \"],.... '-e\n-00033f20: 7869 7427 203d 3e20 3129 3b0a 0920 2020 xit' => 1);.. \n-00033f30: 207d 0a23 7072 696e 7420 222d 3133 2d5c }.#print \"-13-\\\n-00033f40: 6e22 3b0a 097d 0a23 7072 696e 7420 222d n\";..}.#print \"-\n-00033f50: 3134 2d5c 6e22 3b0a 0a20 2020 2020 2020 14-\\n\";.. \n-00033f60: 2023 206e 6575 6520 4b6f 7069 6572 2d4a # neue Kopier-J\n-00033f70: 6f62 7320 6569 6e68 c3a4 6e67 656e 0a20 obs einh..ngen. \n-00033f80: 2020 2020 2020 2077 6869 6c65 2028 2470 while ($p\n-00033f90: 6172 466f 726b 436f 7079 2d3e 6765 744e arForkCopy->getN\n-00033fa0: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() >\n-00033fb0: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. \n-00033fc0: 2020 2020 2020 2466 6966 6f43 6f70 792d $fifoCopy-\n-00033fd0: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie\n-00033fe0: 7328 2920 3e20 3029 0a20 2020 2020 2020 s() > 0). \n-00033ff0: 207b 0a20 2020 2020 2020 2020 2020 2023 {. #\n-00034000: 2057 6520 6469 6420 736f 6d65 7468 696e We did somethin\n-00034010: 670a 2020 2020 2020 2020 2020 2020 246d g. $m\n-00034020: 6169 6e3a 3a74 696e 7957 6169 7453 6368 ain::tinyWaitSch\n-00034030: 6564 756c 6572 2d3e 7265 7365 7428 293b eduler->reset();\n-00034040: 0a0a 2020 2020 2020 2020 2020 2020 6d79 .. my\n-00034050: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $\n-00034060: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode\n-00034070: 2c20 246d 6435 2c20 2463 6f70 7943 6f6d , $md5, $copyCom\n-00034080: 7072 2920 3d0a 2020 2020 2020 2020 2020 pr) =. \n-00034090: 2020 2020 2020 407b 2466 6966 6f43 6f70 @{$fifoCop\n-000340a0: 792d 3e67 6574 2829 7d3b 2020 2020 2320 y->get()}; # \n-000340b0: 636f 7079 436f 6d70 7220 6973 2066 6f72 copyCompr is for\n-000340c0: 206c 6174 6543 6f6d 7072 6573 7369 6f6e lateCompression\n-000340d0: 0a09 2020 2020 756e 6c65 7373 2028 2d65 .. unless (-e\n-000340e0: 2022 2464 6972 2f24 6669 6c65 2229 2020 \"$dir/$file\") \n-000340f0: 2020 2320 6669 6c65 2077 6173 2064 656c # file was del\n-00034100: 6574 6564 2064 7572 696e 6720 7761 6974 eted during wait\n-00034110: 2069 6e20 7175 6575 650a 0920 2020 207b in queue.. {\n-00034120: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00034130: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W',\n-00034140: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-00034150: 203d 3e0a 0909 0920 2020 2020 205b 2266 =>.... [\"f\n-00034160: 696c 6520 3c24 6469 722f 2466 696c 653e ile <$dir/$file>\n-00034170: 2064 656c 6574 6564 2064 7572 696e 6720 deleted during \n-00034180: 6261 636b 7570 2028 3429 225d 293b 0a09 backup (4)\"]);..\n-00034190: 096e 6578 743b 0a09 2020 2020 7d0a 2370 .next;.. }.#p\n-000341a0: 7269 6e74 2022 2d31 352d 2466 696c 655c rint \"-15-$file\\\n-000341b0: 6e22 3b0a 2020 2020 2020 2020 2020 2020 n\";. \n-000341c0: 6d79 2028 2464 6576 2c20 2469 6e6f 6465 my ($dev, $inode\n-000341d0: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime\n-000341e0: 2c20 2461 7469 6d65 2c20 2473 697a 6529 , $atime, $size)\n-000341f0: 203d 0a20 2020 2020 2020 2020 2020 2020 =. \n-00034200: 2020 2028 6c73 7461 7428 2224 6469 722f (lstat(\"$dir/\n-00034210: 2466 696c 6522 2929 5b30 2c20 312c 2031 $file\"))[0, 1, 1\n-00034220: 302c 2039 2c20 382c 2037 5d3b 0a20 2020 0, 9, 8, 7];. \n-00034230: 2020 2020 2020 2020 2024 6d6f 6465 2026 $mode &\n-00034240: 3d20 3037 3737 373b 0a0a 0920 2020 206d = 07777;... m\n-00034250: 7920 2463 6f6d 7072 203d 2027 7527 3b0a y $compr = 'u';.\n-00034260: 2370 7269 6e74 2022 636f 7079 436f 6d70 #print \"copyComp\n-00034270: 7220 3d20 3c24 636f 7079 436f 6d70 723e r = <$copyCompr>\n-00034280: 5c6e 223b 0a09 2020 2020 6966 2028 2463 \\n\";.. if ($c\n-00034290: 6f70 7943 6f6d 7072 2065 7120 2763 6f6d opyCompr eq 'com\n-000342a0: 7072 2729 0a09 2020 2020 7b0a 2370 7269 pr').. {.#pri\n-000342b0: 6e74 2022 2d31 362d 5c6e 223b 0a09 0924 nt \"-16-\\n\";...$\n-000342c0: 636f 6d70 7220 3d20 2763 273b 0a09 0923 compr = 'c';...#\n-000342d0: 2027 636f 6d70 7265 7373 2720 7265 6665 'compress' refe\n-000342e0: 7273 2074 6f20 656e 7472 7920 696e 202e rs to entry in .\n-000342f0: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf\n-00034300: 6f0a 0909 6d79 2024 6578 6973 7469 6e67 o...my $existing\n-00034310: 4669 6c65 203d 2024 6669 6c65 3b0a 0909 File = $file;...\n-00034320: 2465 7869 7374 696e 6746 696c 6520 3d7e $existingFile =~\n-00034330: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0924 s/\\n/\\0/og;...$\n-00034340: 7772 4c61 7465 4c69 6e6b 2d3e 7072 696e wrLateLink->prin\n-00034350: 7428 2263 6f6d 7072 6573 7320 246d 6435 t(\"compress $md5\n-00034360: 5c6e 2465 7869 7374 696e 6746 696c 655c \\n$existingFile\\\n-00034370: 6e22 293b 0a09 2020 2020 7d0a 0a20 2020 n\");.. }.. \n-00034380: 2020 2020 2020 2020 2069 6620 2824 7369 if ($si\n-00034390: 7a65 203c 3d20 246d 6169 6e3a 3a6d 696e ze <= $main::min\n-000343a0: 436f 7079 5769 7468 466f 726b 2920 2320 CopyWithFork) # \n-000343b0: 6469 7265 6b74 206b 6f70 6965 7265 6e20 direkt kopieren \n-000343c0: 286f 686e 6520 666f 726b 290a 2020 2020 (ohne fork). \n-000343d0: 2020 2020 2020 2020 7b0a 2370 7269 6e74 {.#print\n-000343e0: 2022 2d31 372d 5c6e 223b 0a20 2020 2020 \"-17-\\n\";. \n-000343f0: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo\n-00034400: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00034410: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. \n-00034420: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034430: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' =>\n-00034440: 205b 2263 6f70 7920 2464 6972 2f24 6669 [\"copy $dir/$fi\n-00034450: 6c65 2024 7461 7267 6574 4469 722f 2466 le $targetDir/$f\n-00034460: 696c 6522 5d29 0a20 2020 2020 2020 2020 ile\"]). \n-00034470: 2020 2020 2020 2020 2020 2069 6620 2824 if ($\n-00034480: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2);\n-00034490: 0a0a 2020 2020 2020 2020 2020 2020 2020 .. \n-000344a0: 2020 756e 6c65 7373 2028 263a 3a63 6f70 unless (&::cop\n-000344b0: 7946 696c 6528 2224 6469 722f 2466 696c yFile(\"$dir/$fil\n-000344c0: 6522 2c20 2224 7461 7267 6574 4469 722f e\", \"$targetDir/\n-000344d0: 2466 696c 6522 2c20 2470 724c 6f67 2929 $file\", $prLog))\n-000344e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-000344f0: 207b 0a20 2020 2020 2020 2020 2020 2020 {. \n-00034500: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p\n-00034510: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00034520: 2745 272c 0a20 2020 2020 2020 2020 2020 'E',. \n-00034530: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034540: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' =>\n-00034550: 205b 2263 6f75 6c64 206e 6f74 2063 6f70 [\"could not cop\n-00034560: 7920 2464 6972 2f24 6669 6c65 2022 202e y $dir/$file \" .\n-00034570: 0a09 0909 0909 2020 2020 2022 2474 6172 ...... \"$tar\n-00034580: 6765 7444 6972 2f24 6669 6c65 225d 293b getDir/$file\"]);\n-00034590: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-000345a0: 2020 2020 206e 6578 743b 0a20 2020 2020 next;. \n-000345b0: 2020 2020 2020 2020 2020 207d 0a0a 0909 }....\n-000345c0: 6d79 2024 6c61 7374 4d44 3520 3d20 263a my $lastMD5 = &:\n-000345d0: 3a63 616c 634d 4435 2822 2464 6972 2f24 :calcMD5(\"$dir/$\n-000345e0: 6669 6c65 2229 3b0a 0909 6966 2028 2464 file\");...if ($d\n-000345f0: 6562 7567 4d6f 6465 203e 3d20 3329 0a09 ebugMode >= 3)..\n-00034600: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog-\n-00034610: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00034620: 3e20 2744 272c 0a09 0909 0920 2027 2d73 > 'D',..... '-s\n-00034630: 7472 2720 3d3e 205b 226d 6435 7375 6d20 tr' => [\"md5sum \n-00034640: 2872 6563 616c 6329 2024 6469 722f 2466 (recalc) $dir/$f\n-00034650: 696c 6522 5d29 3b0a 0909 7d0a 0909 246d ile\"]);...}...$m\n-00034660: 6169 6e3a 3a73 7461 742d 3e61 6464 5f6e ain::stat->add_n\n-00034670: 6f4d 4435 6564 4669 6c65 7328 3129 3b0a oMD5edFiles(1);.\n-00034680: 0909 756e 6c65 7373 2028 246c 6173 744d ..unless ($lastM\n-00034690: 4435 290a 0909 7b0a 0909 2020 2020 2470 D5)...{... $p\n-000346a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-000346b0: 6e64 2720 3d3e 2027 5727 2c0a 0909 0909 nd' => 'W',.....\n-000346c0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n-000346d0: 2020 5b22 6669 6c65 203c 2464 6972 2f24 [\"file <$dir/$\n-000346e0: 6669 6c65 3e20 6465 6c65 7465 6420 6475 file> deleted du\n-000346f0: 7269 6e67 2062 6163 6b75 7020 2835 2922 ring backup (5)\"\n-00034700: 5d29 0a09 0909 756e 6c65 7373 2065 7869 ])....unless exi\n-00034710: 7374 7320 2424 7375 7070 7265 7373 5761 sts $$suppressWa\n-00034720: 726e 696e 677b 2766 696c 6543 6861 6e67 rning{'fileChang\n-00034730: 6527 7d3b 0a0a 0909 2020 2020 6e65 7874 e'};.... next\n-00034740: 3b0a 0909 7d0a 0909 6966 2028 246c 6173 ;...}...if ($las\n-00034750: 744d 4435 206e 6520 246d 6435 290a 0909 tMD5 ne $md5)...\n-00034760: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog->\n-00034770: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00034780: 2027 5727 2c0a 0909 0909 2020 272d 7374 'W',..... '-st\n-00034790: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... [\"fi\n-000347a0: 6c65 203c 2464 6972 2f24 6669 6c65 3e20 le <$dir/$file> \n-000347b0: 6368 616e 6765 6420 6475 7269 6e67 2062 changed during b\n-000347c0: 6163 6b75 7022 5d29 0a09 0909 756e 6c65 ackup\"])....unle\n-000347d0: 7373 2065 7869 7374 7320 2424 7375 7070 ss exists $$supp\n-000347e0: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil\n-000347f0: 6543 6861 6e67 6527 7d3b 0a0a 0909 2020 eChange'};.... \n-00034800: 2020 246d 6435 203d 2027 6727 2078 2033 $md5 = 'g' x 3\n-00034810: 323b 0a09 097d 0a0a 2020 2020 2020 2020 2;...}.. \n-00034820: 2020 2020 2020 2020 6966 2028 2470 7265 if ($pre\n-00034830: 7365 7276 6550 6572 6d73 2061 6e64 206e servePerms and n\n-00034840: 6f74 2024 6c61 7465 4c69 6e6b 7329 0a09 ot $lateLinks)..\n-00034850: 097b 0a20 2020 2020 2020 2020 2020 2020 .{. \n-00034860: 2020 2020 2020 2063 686f 776e 2024 7569 chown $ui\n-00034870: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, \"$targe\n-00034880: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file\";. \n-00034890: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000348a0: 2063 686d 6f64 2024 6d6f 6465 2c20 2224 chmod $mode, \"$\n-000348b0: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n-000348c0: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-000348d0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati\n-000348e0: 6d65 2c20 246d 7469 6d65 2c20 2224 6469 me, $mtime, \"$di\n-000348f0: 722f 2466 696c 6522 2069 6620 2472 6573 r/$file\" if $res\n-00034900: 6574 4174 696d 653b 0a20 2020 2020 2020 etAtime;. \n-00034910: 2020 2020 2020 2020 2020 2020 2075 7469 uti\n-00034920: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim\n-00034930: 652c 2022 2474 6172 6765 7444 6972 2f24 e, \"$targetDir/$\n-00034940: 6669 6c65 223b 0a20 2020 2020 2020 2020 file\";. \n-00034950: 2020 2020 2020 207d 0a0a 2020 2020 2020 }.. \n-00034960: 2020 2020 2020 2020 2020 6d79 2024 696e my $in\n-00034970: 6f64 6542 6163 6b75 7020 3d20 2873 7461 odeBackup = (sta\n-00034980: 7428 2224 7461 7267 6574 4469 722f 2466 t(\"$targetDir/$f\n-00034990: 696c 6522 2929 5b31 5d3b 0a09 0924 696e ile\"))[1];...$in\n-000349a0: 6f64 6542 6163 6b75 7020 3d20 3020 756e odeBackup = 0 un\n-000349b0: 6c65 7373 2024 696e 6f64 6542 6163 6b75 less $inodeBacku\n-000349c0: 703b 2020 2023 2069 6620 7469 6d69 6e67 p; # if timing\n-000349d0: 2069 7373 7565 2c0a 0920 2020 2020 2020 issue,.. \n-000349e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000349f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034a00: 2020 2020 2023 2076 616c 7565 2069 7320 # value is \n-00034a10: 6e6f 7420 7573 6564 2061 7420 616c 6c0a not used at all.\n-00034a20: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00034a30: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s\n-00034a40: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename'\n-00034a50: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp\n-00034a60: 6569 6368 6572 7420 696e 2064 626d 0a20 eichert in dbm. \n-00034a70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034a80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034a90: 2020 2027 2d6d 6435 7375 6d27 203d 3e20 '-md5sum' => \n-00034aa0: 246d 6435 2c20 2020 2020 2320 2e6d 6435 $md5, # .md5\n-00034ab0: 7375 6d2d 4461 7465 690a 2020 2020 2020 sum-Datei. \n-00034ac0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034ad0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00034ae0: 636f 6d70 7227 203d 3e20 2463 6f6d 7072 compr' => $compr\n-00034af0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00034b00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034b10: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => \n-00034b20: 2464 6576 2c0a 2020 2020 2020 2020 2020 $dev,. \n-00034b30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034b40: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod\n-00034b50: 6527 203d 3e20 2469 6e6f 6465 2c0a 2020 e' => $inode,. \n-00034b60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034b70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034b80: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup'\n-00034b90: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup\n-00034ba0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00034bb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034bc0: 2020 2020 2020 272d 6374 696d 6527 203d '-ctime' =\n-00034bd0: 3e20 2463 7469 6d65 2c0a 2020 2020 2020 > $ctime,. \n-00034be0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034bf0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00034c00: 6d74 696d 6527 203d 3e20 246d 7469 6d65 mtime' => $mtime\n-00034c10: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00034c20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034c30: 2020 2020 2020 272d 6174 696d 6527 203d '-atime' =\n-00034c40: 3e20 2461 7469 6d65 2c0a 2020 2020 2020 > $atime,. \n-00034c50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034c60: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00034c70: 7369 7a65 2720 3d3e 2024 7369 7a65 2c0a size' => $size,.\n-00034c80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034c90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034ca0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u\n-00034cb0: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. \n-00034cc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034cd0: 2020 2020 2020 2020 272d 6769 6427 203d '-gid' =\n-00034ce0: 3e20 2467 6964 2c0a 2020 2020 2020 2020 > $gid,. \n-00034cf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034d00: 2020 2020 2020 2020 2020 2020 272d 6d6f '-mo\n-00034d10: 6465 2720 3d3e 2024 6d6f 6465 293b 0a0a de' => $mode);..\n-00034d20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034d30: 246d 6169 6e3a 3a73 7461 742d 3e61 6464 $main::stat->add\n-00034d40: 5375 6d4e 6577 436f 7079 2824 7369 7a65 SumNewCopy($size\n-00034d50: 293b 0a0a 2020 2020 2020 2020 2020 2020 );.. \n-00034d60: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $\n-00034d70: 696e 5072 6f67 7265 7373 7b24 6d64 357d inProgress{$md5}\n-00034d80: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n-00034d90: 2020 2020 2020 2020 2040 7b24 696e 5072 @{$inPr\n-00034da0: 6f67 7265 7373 7b24 6d64 357d 7d20 3e20 ogress{$md5}} > \n-00034db0: 3029 2020 2320 6765 7075 6666 6572 7465 0) # gepufferte\n-00034dc0: 2046 696c 6573 206d 6974 0a20 2020 2020 Files mit. \n-00034dd0: 2020 2020 2020 2020 2020 207b 2020 2020 { \n-00034de0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034df0: 2020 2020 2020 2020 2020 2320 676c 6569 # glei\n-00034e00: 6368 6572 206d 6435 2053 756d 6d65 2062 cher md5 Summe b\n-00034e10: 6561 7262 6569 7465 6e0a 2020 2020 2020 earbeiten. \n-00034e20: 2020 2020 2020 2020 2020 2020 2020 2466 $f\n-00034e30: 696c 6573 4c65 6674 203d 2031 3b0a 2020 ilesLeft = 1;. \n-00034e40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034e50: 2020 2472 6561 6444 6972 416e 6443 6865 $readDirAndChe\n-00034e60: 636b 2d3e 7075 7368 6261 636b 2824 696e ck->pushback($in\n-00034e70: 5072 6f67 7265 7373 7b24 6d64 357d 2c20 Progress{$md5}, \n-00034e80: 2470 724c 6f67 2c0a 0909 0924 6465 6275 $prLog,....$debu\n-00034e90: 674d 6f64 6520 3e3d 2033 203f 2031 203a gMode >= 3 ? 1 :\n-00034ea0: 2030 293b 0a20 2020 2020 2020 2020 2020 0);. \n-00034eb0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. \n-00034ec0: 2020 2020 2020 2064 656c 6574 6520 2469 delete $i\n-00034ed0: 6e50 726f 6772 6573 737b 246d 6435 7d3b nProgress{$md5};\n-00034ee0: 0a20 2020 2020 2020 2020 2020 207d 0a20 . }. \n-00034ef0: 2020 2020 2020 2020 2020 2065 6c73 6520 else \n-00034f00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034f10: 2020 2020 2020 2020 2320 6d69 7420 666f # mit fo\n-00034f20: 726b 2f63 702c 7273 796e 6320 6b6f 7069 rk/cp,rsync kopi\n-00034f30: 6572 656e 0a20 2020 2020 2020 2020 2020 eren. \n-00034f40: 207b 0a20 2020 2020 2020 2020 2020 2020 {. \n-00034f50: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00034f60: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D',\n-00034f70: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00034f80: 2020 2020 2020 2020 2020 2020 2020 2027 '\n-00034f90: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. \n-00034fa0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034fb0: 2020 2020 2020 205b 2263 6f70 7920 2464 [\"copy $d\n-00034fc0: 6972 2f24 6669 6c65 2024 7461 7267 6574 ir/$file $target\n-00034fd0: 4469 722f 2466 696c 6522 5d29 0a20 2020 Dir/$file\"]). \n-00034fe0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00034ff0: 2069 6620 2824 6465 6275 674d 6f64 6520 if ($debugMode \n-00035000: 3e3d 2032 293b 0a0a 2309 0969 6620 2824 >= 2);..#..if ($\n-00035010: 6c61 7465 4c69 6e6b 7353 7769 7463 6865 lateLinksSwitche\n-00035020: 644f 6666 290a 2309 097b 0a23 0909 2020 dOff).#..{.#.. \n-00035030: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil\n-00035040: 6529 203d 0a23 0909 0926 3a3a 7370 6c69 e) =.#...&::spli\n-00035050: 7446 696c 6544 6972 2822 2474 6172 6765 tFileDir(\"$targe\n-00035060: 7444 6972 2f24 6669 6c65 2229 3b0a 2309 tDir/$file\");.#.\n-00035070: 0920 2020 2026 3a3a 6d61 6b65 4469 7250 . &::makeDirP\n-00035080: 6174 6828 2464 6972 2c20 2470 724c 6f67 ath($dir, $prLog\n-00035090: 293b 0a23 0909 7d0a 0909 0a09 096d 7920 );.#..}......my \n-000350a0: 2474 6d70 4d44 3546 696c 6520 3d20 263a $tmpMD5File = &:\n-000350b0: 3a75 6e69 7146 696c 654e 616d 6528 2224 :uniqFileName(\"$\n-000350c0: 746d 7064 6972 2f73 746f 7265 4261 636b tmpdir/storeBack\n-000350d0: 7570 2d6d 6435 2e22 293b 0a09 0924 7061 up-md5.\");...$pa\n-000350e0: 7246 6f72 6b43 6f70 792d 3e61 6464 5f6e rForkCopy->add_n\n-000350f0: 6f62 6c6f 636b 2827 2d65 7865 6327 203d oblock('-exec' =\n-00035100: 3e20 246d 6169 6e3a 3a73 7462 754d 6435 > $main::stbuMd5\n-00035110: 6370 2c0a 0909 0909 0920 2027 2d70 6172 cp,...... '-par\n-00035120: 616d 2720 3d3e 0a09 0909 0909 2020 5b22 am' =>...... [\"\n-00035130: 2464 6972 2f24 6669 6c65 222c 0a09 0909 $dir/$file\",....\n-00035140: 0909 2020 2224 7461 7267 6574 4469 722f .. \"$targetDir/\n-00035150: 2466 696c 6522 2c20 2474 6d70 4d44 3546 $file\", $tmpMD5F\n-00035160: 696c 655d 2c0a 2020 2020 2020 2020 2020 ile],. \n-00035170: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035180: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035190: 272d 776f 726b 696e 6744 6972 2720 3d3e '-workingDir' =>\n-000351a0: 2027 2e27 2c0a 2020 2020 2020 2020 2020 '.',. \n-000351b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000351c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000351d0: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => \n-000351e0: 2224 746d 7064 6972 2f73 7464 6572 7222 \"$tmpdir/stderr\"\n-000351f0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00035200: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035210: 2020 2020 2020 2020 2020 2020 272d 696e '-in\n-00035220: 666f 2720 3d3e 0a20 2020 2020 2020 2020 fo' =>. \n-00035230: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035240: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035250: 205b 2464 6576 2c20 2469 6e6f 6465 2c20 [$dev, $inode, \n-00035260: 2464 6972 2c20 2466 696c 652c 2024 7569 $dir, $file, $ui\n-00035270: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. \n-00035280: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035290: 2020 2020 2020 2020 2020 2020 2020 2467 $g\n-000352a0: 6964 2c20 246d 6f64 652c 2024 6d64 352c id, $mode, $md5,\n-000352b0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n-000352c0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-000352d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000352e0: 2020 2020 2020 2020 2020 2020 2461 7469 $ati\n-000352f0: 6d65 2c20 2473 697a 652c 2024 636f 6d70 me, $size, $comp\n-00035300: 722c 2024 746d 704d 4435 4669 6c65 5d29 r, $tmpMD5File])\n-00035310: 0a09 0920 2020 206f 7220 6469 6520 224d ... or die \"M\n-00035320: 7573 7420 6e6f 7420 6861 7070 656e 2028 ust not happen (\n-00035330: 636f 7079 2922 3b0a 2020 2020 2020 2020 copy)\";. \n-00035340: 2020 2020 7d0a 2020 2020 2020 2020 7d0a }. }.\n-00035350: 2370 7269 6e74 2022 2d31 382d 5c6e 223b #print \"-18-\\n\";\n-00035360: 0a0a 2020 2020 2020 2020 2320 4b6f 6d70 .. # Komp\n-00035370: 7269 6d69 6572 204a 6f62 7320 6162 686f rimier Jobs abho\n-00035380: 6c65 6e0a 2020 2020 2020 2020 666f 7265 len. fore\n-00035390: 6163 6820 6d79 2024 6920 2824 7061 7246 ach my $i ($parF\n-000353a0: 6f72 6b43 6f6d 7072 2d3e 6368 6563 6b41 orkCompr->checkA\n-000353b0: 6c6c 2829 290a 2020 2020 2020 2020 7b0a ll()). {.\n-000353c0: 2370 7269 6e74 2022 2d31 392d 5c6e 223b #print \"-19-\\n\";\n-000353d0: 0a20 2020 2020 2020 2020 2020 2023 2057 . # W\n-000353e0: 6520 6469 6420 736f 6d65 7468 696e 670a e did something.\n-000353f0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai\n-00035400: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched\n-00035410: 756c 6572 2d3e 7265 7365 7428 293b 0a0a uler->reset();..\n-00035420: 2020 2020 2020 2020 2020 2020 6d79 2024 my $\n-00035430: 7374 6465 7272 203d 2024 692d 3e67 6574 stderr = $i->get\n-00035440: 5354 4445 5252 2829 3b0a 2020 2020 2020 STDERR();. \n-00035450: 2020 2020 2020 6d79 2028 2464 6576 2c20 my ($dev, \n-00035460: 2469 6e6f 6465 2c20 2464 6972 2c20 2466 $inode, $dir, $f\n-00035470: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid,\n-00035480: 2024 6d6f 6465 2c20 246d 6435 2c0a 0909 $mode, $md5,...\n-00035490: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, \n-000354a0: 2461 7469 6d65 2c20 2473 697a 652c 2024 $atime, $size, $\n-000354b0: 746d 704d 4435 4669 6c65 2920 3d0a 0909 tmpMD5File) =...\n-000354c0: 2020 2020 407b 2469 2d3e 6765 7428 272d @{$i->get('-\n-000354d0: 7768 6174 2720 3d3e 2027 696e 666f 2729 what' => 'info')\n-000354e0: 7d3b 0a0a 2370 7269 6e74 2022 3130 2e31 };..#print \"10.1\n-000354f0: 2024 7461 7267 6574 4469 723a 2f3a 2466 $targetDir:/:$f\n-00035500: 696c 653a 2470 6f73 7466 6978 5c6e 223b ile:$postfix\\n\";\n-00035510: 0a0a 0920 2020 2069 6620 2826 3a3a 7761 ... if (&::wa\n-00035520: 6974 466f 7246 696c 6528 2224 7461 7267 itForFile(\"$targ\n-00035530: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post\n-00035540: 6669 7822 2929 0a09 2020 2020 7b0a 0909 fix\")).. {...\n-00035550: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00035560: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00035570: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00035580: 205b 223c 2474 6172 6765 7444 6972 2f24 [\"<$targetDir/$\n-00035590: 6669 6c65 2470 6f73 7466 6978 3e20 2220 file$postfix> \" \n-000355a0: 2e0a 0909 0909 0920 2277 6173 206e 6f74 ....... \"was not\n-000355b0: 2063 7265 6174 6564 2028 3229 225d 293b created (2)\"]);\n-000355c0: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }.\n-000355d0: 0a20 2020 2020 2020 2020 2020 2069 6620 . if \n-000355e0: 2824 7072 6573 6572 7665 5065 726d 7320 ($preservePerms \n-000355f0: 616e 6420 6e6f 7420 246c 6174 654c 696e and not $lateLin\n-00035600: 6b73 290a 0920 2020 207b 0a20 2020 2020 ks).. {. \n-00035610: 2020 2020 2020 2020 2020 2063 686f 776e chown\n-00035620: 2024 7569 642c 2024 6769 642c 2022 2474 $uid, $gid, \"$t\n-00035630: 6172 6765 7444 6972 2f24 6669 6c65 2470 argetDir/$file$p\n-00035640: 6f73 7466 6978 223b 0a20 2020 2020 2020 ostfix\";. \n-00035650: 2020 2020 2020 2020 2063 686d 6f64 2024 chmod $\n-00035660: 6d6f 6465 2c20 2224 7461 7267 6574 4469 mode, \"$targetDi\n-00035670: 722f 2466 696c 6524 706f 7374 6669 7822 r/$file$postfix\"\n-00035680: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-00035690: 2020 7574 696d 6520 2461 7469 6d65 2c20 utime $atime, \n-000356a0: 246d 7469 6d65 2c20 2224 6469 722f 2466 $mtime, \"$dir/$f\n-000356b0: 696c 6522 2069 6620 2472 6573 6574 4174 ile\" if $resetAt\n-000356c0: 696d 653b 0a20 2020 2020 2020 2020 2020 ime;. \n-000356d0: 2020 2020 2075 7469 6d65 2024 6174 696d utime $atim\n-000356e0: 652c 2024 6d74 696d 652c 2022 2474 6172 e, $mtime, \"$tar\n-000356f0: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos\n-00035700: 7466 6978 223b 0a20 2020 2020 2020 2020 tfix\";. \n-00035710: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n-00035720: 206d 7920 2469 6e6f 6465 4261 636b 7570 my $inodeBackup\n-00035730: 203d 2028 7374 6174 2822 2474 6172 6765 = (stat(\"$targe\n-00035740: 7444 6972 2f24 6669 6c65 2470 6f73 7466 tDir/$file$postf\n-00035750: 6978 2229 295b 315d 3b0a 0920 2020 2024 ix\"))[1];.. $\n-00035760: 696e 6f64 6542 6163 6b75 7020 3d20 3020 inodeBackup = 0 \n-00035770: 756e 6c65 7373 2024 696e 6f64 6542 6163 unless $inodeBac\n-00035780: 6b75 703b 2020 2023 2069 6620 7469 6d69 kup; # if timi\n-00035790: 6e67 2069 7373 7565 2c0a 0920 2020 2020 ng issue,.. \n-000357a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000357b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000357c0: 2020 2020 2020 2023 2076 616c 7565 2069 # value i\n-000357d0: 7320 6e6f 7420 7573 6564 2061 7420 616c s not used at al\n-000357e0: 6c0a 0a20 2020 2020 2020 2020 2020 2069 l.. i\n-000357f0: 6620 2840 2473 7464 6572 7220 3e20 3029 f (@$stderr > 0)\n-00035800: 0a20 2020 2020 2020 2020 2020 207b 0a09 . {..\n-00035810: 0975 6e6c 6573 7320 282d 6520 2224 6469 .unless (-e \"$di\n-00035820: 722f 2466 696c 6522 2920 2320 6669 6c65 r/$file\") # file\n-00035830: 2077 6173 2064 656c 6574 6564 2064 7572 was deleted dur\n-00035840: 696e 6720 636f 6d70 7265 7373 696f 6e0a ing compression.\n-00035850: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog\n-00035860: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00035870: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n-00035880: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-00035890: 6669 6c65 203c 2464 6972 2f24 6669 6c65 file <$dir/$file\n-000358a0: 3e20 6465 6c65 7465 6420 6475 7269 6e67 > deleted during\n-000358b0: 2062 6163 6b75 7020 2836 2922 5d29 3b0a backup (6)\"]);.\n-000358c0: 0909 7d0a 0909 656c 7365 0a09 097b 0a09 ..}...else...{..\n-000358d0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-000358e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000358f0: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' \n-00035900: 3d3e 0a09 0909 0920 205b 2263 6f6d 7072 =>..... [\"compr\n-00035910: 6573 7369 6e67 203c 2464 6972 2f24 6669 essing <$dir/$fi\n-00035920: 6c65 3e20 2d3e 2022 202e 0a09 0909 0920 le> -> \" ...... \n-00035930: 2020 223c 2474 6172 6765 7444 6972 2f24 \"<$targetDir/$\n-00035940: 6669 6c65 2470 6f73 7466 6978 3e22 202e file$postfix>\" .\n-00035950: 0a09 0909 0920 2020 2220 6765 6e65 7261 ..... \" genera\n-00035960: 7465 6420 7468 6520 666f 6c6c 6f77 696e ted the followin\n-00035970: 6720 6572 726f 7220 6d65 7373 6167 6573 g error messages\n-00035980: 3a22 2c0a 0909 0909 2020 2040 2473 7464 :\",..... @$std\n-00035990: 6572 725d 293b 0a09 097d 0a09 0975 6e6c err]);...}...unl\n-000359a0: 696e 6b20 2224 7461 7267 6574 4469 722f ink \"$targetDir/\n-000359b0: 2466 696c 6524 706f 7374 6669 7822 3b0a $file$postfix\";.\n-000359c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000359d0: 6e65 7874 3b0a 2020 2020 2020 2020 2020 next;. \n-000359e0: 2020 7d0a 0a09 2020 2020 6c6f 6361 6c20 }... local \n-000359f0: 2a54 4d50 4d44 353b 0a09 2020 2020 756e *TMPMD5;.. un\n-00035a00: 6c65 7373 2028 263a 3a77 6169 7446 6f72 less (&::waitFor\n-00035a10: 4669 6c65 2824 746d 704d 4435 4669 6c65 File($tmpMD5File\n-00035a20: 2920 3d3d 2030 2061 6e64 0a09 096f 7065 ) == 0 and...ope\n-00035a30: 6e28 544d 504d 4435 2c20 2474 6d70 4d44 n(TMPMD5, $tmpMD\n-00035a40: 3546 696c 6529 290a 0920 2020 207b 0a09 5File)).. {..\n-00035a50: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00035a60: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00035a70: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00035a80: 3e20 5b22 6361 6e6e 6f74 2072 6561 6420 > [\"cannot read \n-00035a90: 7265 6361 6c63 6564 206d 6435 7375 6d20 recalced md5sum \n-00035aa0: 2220 2e0a 0909 0909 0920 226f 6620 3c24 \" ....... \"of <$\n-00035ab0: 7461 7267 6574 4469 722f 2466 696c 653e targetDir/$file>\n-00035ac0: 2220 2e0a 0909 0920 2020 2020 2022 3b20 \" ..... \"; \n-00035ad0: 6669 6c65 2069 7320 6e6f 7420 6261 636b file is not back\n-00035ae0: 6564 2075 7020 2832 2922 5d29 3b0a 0909 ed up (2)\"]);...\n-00035af0: 756e 6c69 6e6b 2024 746d 704d 4435 4669 unlink $tmpMD5Fi\n-00035b00: 6c65 3b0a 0909 6e65 7874 3b0a 0920 2020 le;...next;.. \n-00035b10: 207d 0a23 0920 2020 2075 6e6c 6573 7320 }.#. unless \n-00035b20: 2826 3a3a 7761 6974 466f 7246 696c 6528 (&::waitForFile(\n-00035b30: 2474 6d70 4d44 3546 696c 6529 206f 720a $tmpMD5File) or.\n-00035b40: 2309 0920 2020 206f 7065 6e28 544d 504d #.. open(TMPM\n-00035b50: 4435 2c20 2474 6d70 4d44 3546 696c 6529 D5, $tmpMD5File)\n-00035b60: 290a 2309 2020 2020 7b0a 2309 0924 7072 ).#. {.#..$pr\n-00035b70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00035b80: 6427 203d 3e20 2745 272c 0a23 0909 0920 d' => 'E',.#... \n-00035b90: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00035ba0: 2263 616e 6e6f 7420 7265 6164 2072 6563 \"cannot read rec\n-00035bb0: 616c 6365 6420 6d64 3573 756d 2022 202e alced md5sum \" .\n-00035bc0: 0a23 0909 0909 0920 226f 6620 3c24 7461 .#..... \"of <$ta\n-00035bd0: 7267 6574 4469 722f 2466 696c 653e 2220 rgetDir/$file>\" \n-00035be0: 2e0a 2309 0909 2020 2020 2020 223b 2066 ..#... \"; f\n-00035bf0: 696c 6520 6973 206e 6f74 2062 6163 6b65 ile is not backe\n-00035c00: 6420 7570 225d 293b 0a23 0909 6e65 7874 d up\"]);.#..next\n-00035c10: 3b0a 2309 2020 2020 7d0a 0920 2020 206d ;.#. }.. m\n-00035c20: 7920 246c 6173 744d 4435 203d 203c 544d y $lastMD5 = ;.. my $\n-00035c40: 6c61 7374 5369 7a65 203d 203c 544d 504d lastSize = ;.. close(\n-00035c60: 544d 504d 4435 293b 0a09 2020 2020 6966 TMPMD5);.. if\n-00035c70: 2028 286e 6f74 2064 6566 696e 6564 2024 ((not defined $\n-00035c80: 6c61 7374 4d44 3529 206f 7220 286e 6f74 lastMD5) or (not\n-00035c90: 2064 6566 696e 6564 2024 6c61 7374 5369 defined $lastSi\n-00035ca0: 7a65 2929 0a09 2020 2020 7b0a 0909 2470 ze)).. {...$p\n-00035cb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00035cc0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-00035cd0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00035ce0: 2263 616e 6e6f 7420 7265 6164 2072 6563 \"cannot read rec\n-00035cf0: 616c 6365 6420 6d64 3573 756d 2022 202e alced md5sum \" .\n-00035d00: 0a09 0909 0909 2022 6f66 203c 2474 6172 ...... \"of <$tar\n-00035d10: 6765 7444 6972 2f24 6669 6c65 3e22 202e getDir/$file>\" .\n-00035d20: 0a09 0909 2020 2020 2020 223b 2066 696c .... \"; fil\n-00035d30: 6520 6973 206e 6f74 2062 6163 6b65 6420 e is not backed \n-00035d40: 7570 2028 3329 225d 293b 0a09 0975 6e6c up (3)\"]);...unl\n-00035d50: 696e 6b20 2474 6d70 4d44 3546 696c 653b ink $tmpMD5File;\n-00035d60: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }.\n-00035d70: 0920 2020 2075 6e6c 696e 6b20 2474 6d70 . unlink $tmp\n-00035d80: 4d44 3546 696c 653b 0a09 2020 2020 6368 MD5File;.. ch\n-00035d90: 6f6d 7020 246c 6173 744d 4435 3b0a 0920 omp $lastMD5;.. \n-00035da0: 2020 2063 686f 6d70 2024 6c61 7374 5369 chomp $lastSi\n-00035db0: 7a65 3b0a 0a09 2020 2020 246d 6169 6e3a ze;... $main:\n-00035dc0: 3a73 7461 742d 3e61 6464 5f6e 6f4d 4435 :stat->add_noMD5\n-00035dd0: 6564 4669 6c65 7328 3129 3b0a 0920 2020 edFiles(1);.. \n-00035de0: 2075 6e6c 6573 7320 2824 6c61 7374 4d44 unless ($lastMD\n-00035df0: 3529 0a09 2020 2020 7b0a 0909 2470 724c 5).. {...$prL\n-00035e00: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00035e10: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... \n-00035e20: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>....\n-00035e30: 2020 2020 2020 5b22 6669 6c65 203c 2464 [\"file <$d\n-00035e40: 6972 2f24 6669 6c65 3e20 6465 6c65 7465 ir/$file> delete\n-00035e50: 6420 6475 7269 6e67 2062 6163 6b75 7020 d during backup \n-00035e60: 2837 2922 5d29 0a09 0920 2020 2075 6e6c (7)\"])... unl\n-00035e70: 6573 7320 6578 6973 7473 2024 2473 7570 ess exists $$sup\n-00035e80: 7072 6573 7357 6172 6e69 6e67 7b27 6669 pressWarning{'fi\n-00035e90: 6c65 4368 616e 6765 277d 3b0a 0909 6e65 leChange'};...ne\n-00035ea0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. \n-00035eb0: 6966 2028 246c 6173 744d 4435 206e 6520 if ($lastMD5 ne \n-00035ec0: 246d 6435 206f 7220 246c 6173 7453 697a $md5 or $lastSiz\n-00035ed0: 6520 213d 2024 7369 7a65 290a 0920 2020 e != $size).. \n-00035ee0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n-00035ef0: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W\n-00035f00: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00035f10: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n-00035f20: 2266 696c 6520 3c24 6469 722f 2466 696c \"file <$dir/$fil\n-00035f30: 653e 2063 6861 6e67 6564 2064 7572 696e e> changed durin\n-00035f40: 6720 6261 636b 7570 225d 290a 0909 2020 g backup\"])... \n-00035f50: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists \n-00035f60: 2424 7375 7070 7265 7373 5761 726e 696e $$suppressWarnin\n-00035f70: 677b 2766 696c 6543 6861 6e67 6527 7d3b g{'fileChange'};\n-00035f80: 0a09 0924 6d64 3520 3d20 246c 6173 744d ...$md5 = $lastM\n-00035f90: 4435 3b0a 0909 2473 697a 6520 3d20 246c D5;...$size = $l\n-00035fa0: 6173 7453 697a 653b 0a09 2020 2020 7d0a astSize;.. }.\n-00035fb0: 0a20 2020 2020 2020 2020 2020 2024 7072 . $pr\n-00035fc0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00035fd0: 6427 203d 3e20 2744 272c 0a20 2020 2020 d' => 'D',. \n-00035fe0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00035ff0: 2020 2020 2027 2d73 7472 2720 3d3e 0a20 '-str' =>. \n-00036000: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036010: 2020 2020 2020 2020 205b 2266 696e 6973 [\"finis\n-00036020: 6865 6420 2463 6f6d 7072 6573 7320 3c24 hed $compress <$\n-00036030: 6469 722f 2466 696c 653e 2022 202e 0a20 dir/$file> \" .. \n-00036040: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036050: 2020 2020 2020 2020 2020 223c 2474 6172 \"<$tar\n-00036060: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos\n-00036070: 7466 6978 3e22 5d29 0a20 2020 2020 2020 tfix>\"]). \n-00036080: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de\n-00036090: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);..\n-000360a0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai\n-000360b0: 6e3a 3a73 7461 742d 3e69 6e63 725f 6e6f n::stat->incr_no\n-000360c0: 466f 726b 7343 6f6d 7072 6573 7328 293b ForksCompress();\n-000360d0: 0a09 2020 2020 6d79 2024 636f 6d70 7253 .. my $comprS\n-000360e0: 697a 6520 3d20 2873 7461 7428 2224 7461 ize = (stat(\"$ta\n-000360f0: 7267 6574 4469 722f 2466 696c 6524 706f rgetDir/$file$po\n-00036100: 7374 6669 7822 2929 5b37 5d3b 0a20 2020 stfix\"))[7];. \n-00036110: 2020 2020 2020 2020 2024 6d61 696e 3a3a $main::\n-00036120: 7374 6174 2d3e 6164 6453 756d 4e65 7743 stat->addSumNewC\n-00036130: 6f6d 7072 2824 636f 6d70 7253 697a 652c ompr($comprSize,\n-00036140: 2024 7369 7a65 293b 0a0a 2370 7269 6e74 $size);..#print\n-00036150: 2022 2d20 3232 202d 2066 696c 6520 3d20 \"- 22 - file = \n-00036160: 3c24 6669 6c65 3e5c 6e22 3b0a 2020 2020 <$file>\\n\";. \n-00036170: 2020 2020 2020 2020 2461 6b74 4669 6c65 $aktFile\n-00036180: 6e61 6d65 2d3e 7374 6f72 6528 272d 6669 name->store('-fi\n-00036190: 6c65 6e61 6d65 2720 3d3e 2024 6669 6c65 lename' => $file\n-000361a0: 2c20 2023 2073 7065 6963 6865 7274 2069 , # speichert i\n-000361b0: 6e20 6462 6d0a 2020 2020 2020 2020 2020 n dbm. \n-000361c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000361d0: 2020 2020 2020 272d 6d64 3573 756d 2720 '-md5sum' \n-000361e0: 3d3e 2024 6d64 352c 2020 2020 2023 202e => $md5, # .\n-000361f0: 6d64 3573 756d 2d44 6174 6569 0a20 2020 md5sum-Datei. \n-00036200: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036210: 2020 2020 2020 2020 2020 2020 2027 2d63 '-c\n-00036220: 6f6d 7072 2720 3d3e 2027 6327 2c0a 2020 ompr' => 'c',. \n-00036230: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036240: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00036250: 6465 7627 203d 3e20 2464 6576 2c0a 2020 dev' => $dev,. \n-00036260: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036270: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00036280: 696e 6f64 6527 203d 3e20 2469 6e6f 6465 inode' => $inode\n-00036290: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-000362a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000362b0: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup'\n-000362c0: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup\n-000362d0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-000362e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000362f0: 2020 272d 6374 696d 6527 203d 3e20 2463 '-ctime' => $c\n-00036300: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. \n-00036310: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036320: 2020 2020 2020 272d 6d74 696d 6527 203d '-mtime' =\n-00036330: 3e20 246d 7469 6d65 2c0a 2020 2020 2020 > $mtime,. \n-00036340: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036350: 2020 2020 2020 2020 2020 272d 6d74 696d '-mtim\n-00036360: 6527 203d 3e20 246d 7469 6d65 2c0a 2020 e' => $mtime,. \n-00036370: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036380: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00036390: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime\n-000363a0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-000363b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000363c0: 2020 272d 7369 7a65 2720 3d3e 2024 7369 '-size' => $si\n-000363d0: 7a65 2c0a 2020 2020 2020 2020 2020 2020 ze,. \n-000363e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000363f0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u\n-00036400: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. \n-00036410: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036420: 2020 2020 272d 6769 6427 203d 3e20 2467 '-gid' => $g\n-00036430: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. \n-00036440: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036450: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $\n-00036460: 6d6f 6465 293b 0a0a 2020 2020 2020 2020 mode);.. \n-00036470: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $\n-00036480: 696e 5072 6f67 7265 7373 7b24 6d64 357d inProgress{$md5}\n-00036490: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. \n-000364a0: 2020 2020 2040 7b24 696e 5072 6f67 7265 @{$inProgre\n-000364b0: 7373 7b24 6d64 357d 7d20 3e20 3029 2020 ss{$md5}} > 0) \n-000364c0: 2320 6765 7075 6666 6572 7465 2046 696c # gepufferte Fil\n-000364d0: 6573 206d 6974 0a20 2020 2020 2020 2020 es mit. \n-000364e0: 2020 207b 2020 2020 2020 2020 2020 2020 { \n-000364f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00036500: 2020 2320 676c 6569 6368 6572 206d 6435 # gleicher md5\n-00036510: 2053 756d 6d65 2062 6561 7262 6569 7465 Summe bearbeite\n-00036520: 6e0a 2020 2020 2020 2020 2020 2020 2020 n. \n-00036530: 2020 2466 696c 6573 4c65 6674 203d 2031 $filesLeft = 1\n-00036540: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. \n-00036550: 2020 2472 6561 6444 6972 416e 6443 6865 $readDirAndChe\n-00036560: 636b 2d3e 7075 7368 6261 636b 2824 696e ck->pushback($in\n-00036570: 5072 6f67 7265 7373 7b24 6d64 357d 2c20 Progress{$md5}, \n-00036580: 2470 724c 6f67 2c0a 0909 2020 2020 2464 $prLog,... $d\n-00036590: 6562 7567 4d6f 6465 203e 3d20 3320 3f20 ebugMode >= 3 ? \n-000365a0: 3120 3a20 3029 3b0a 2020 2020 2020 2020 1 : 0);. \n-000365b0: 2020 2020 7d0a 2020 2020 2020 2020 2020 }. \n-000365c0: 2020 6465 6c65 7465 2024 696e 5072 6f67 delete $inProg\n-000365d0: 7265 7373 7b24 6d64 357d 3b0a 2020 2020 ress{$md5};. \n-000365e0: 2020 2020 7d0a 2370 7269 6e74 2022 2d32 }.#print \"-2\n-000365f0: 332d 5c6e 223b 0a0a 2020 2020 2020 2020 3-\\n\";.. \n-00036600: 2320 426c 6f63 6b2d 6d64 3520 4a6f 6273 # Block-md5 Jobs\n-00036610: 2061 6268 6f6c 656e 0a09 7768 696c 6520 abholen..while \n-00036620: 2831 290a 2020 2020 2020 2020 7b0a 0920 (1). {.. \n-00036630: 2020 206d 7920 2469 3b0a 0920 2020 2069 my $i;.. i\n-00036640: 6620 2824 626c 6f63 6b50 6172 616c 6c65 f ($blockParalle\n-00036650: 6c29 0a09 2020 2020 7b0a 0909 2469 203d l).. {...$i =\n-00036660: 2024 7061 7246 6f72 6b42 6c6f 636b 2d3e $parForkBlock->\n-00036670: 6368 6563 6b4f 6e65 2829 3b0a 0920 2020 checkOne();.. \n-00036680: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00036690: 2020 7b0a 0909 2469 203d 2024 7061 7246 {...$i = $parF\n-000366a0: 6f72 6b42 6c6f 636b 2d3e 7761 6974 466f orkBlock->waitFo\n-000366b0: 7241 6c6c 4a6f 6273 2829 3b0a 0920 2020 rAllJobs();.. \n-000366c0: 207d 0a09 2020 2020 6c61 7374 2075 6e6c }.. last unl\n-000366d0: 6573 7320 2469 3b0a 0a20 2020 2020 2020 ess $i;.. \n-000366e0: 2020 2020 2023 2057 6520 6469 6420 736f # We did so\n-000366f0: 6d65 7468 696e 670a 0920 2020 2024 6d61 mething.. $ma\n-00036700: 696e 3a3a 7469 6e79 5761 6974 5363 6865 in::tinyWaitSche\n-00036710: 6475 6c65 722d 3e72 6573 6574 2829 3b0a duler->reset();.\n-00036720: 0a09 2020 2020 6d79 2028 2464 6576 2c20 .. my ($dev, \n-00036730: 2469 6e6f 6465 2c20 2464 6972 2c20 2466 $inode, $dir, $f\n-00036740: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid,\n-00036750: 0a09 0924 6d6f 6465 2c20 2463 7469 6d65 ...$mode, $ctime\n-00036760: 2c20 246d 7469 6d65 2c20 2461 7469 6d65 , $mtime, $atime\n-00036770: 2c20 2473 697a 652c 2024 636f 6d70 7265 , $size, $compre\n-00036780: 7373 426c 6f63 6b2c 0a09 0924 746d 704e ssBlock,...$tmpN\n-00036790: 616d 6529 203d 0a09 0920 2020 2040 7b24 ame) =... @{$\n-000367a0: 692d 3e67 6574 2827 2d77 6861 7427 203d i->get('-what' =\n-000367b0: 3e20 2769 6e66 6f27 297d 3b0a 0920 2020 > 'info')};.. \n-000367c0: 2063 686f 776e 2024 7569 642c 2024 6769 chown $uid, $gi\n-000367d0: 642c 2024 6669 6c65 3b0a 0920 2020 2024 d, $file;.. $\n-000367e0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes\n-000367f0: 2d3e 6164 6444 6972 2824 6669 6c65 2c20 ->addDir($file, \n-00036800: 2461 7469 6d65 2c20 246d 7469 6d65 2c0a $atime, $mtime,.\n-00036810: 0909 0909 2020 2020 2020 2828 246d 6f64 .... (($mod\n-00036820: 6520 2620 3037 3737 2920 7c20 3031 3131 e & 0777) | 0111\n-00036830: 2929 3b0a 0a09 2020 2020 756e 6c65 7373 ));... unless\n-00036840: 2028 2d72 2024 746d 704e 616d 6529 0a09 (-r $tmpName)..\n-00036850: 2020 2020 7b0a 0909 2320 6d65 7373 6167 {...# messag\n-00036860: 6520 6973 2069 6d70 6f72 7461 6e74 2074 e is important t\n-00036870: 6f20 696e 6372 656d 656e 7420 4552 524f o increment ERRO\n-00036880: 5220 636f 756e 7465 7220 696e 2070 724c R counter in prL\n-00036890: 6f67 0a09 0923 2045 7272 6f72 206d 6573 og...# Error mes\n-000368a0: 7361 6765 2069 6e20 6361 6c63 426c 6f63 sage in calcBloc\n-000368b0: 6b4d 4435 5375 6d73 2069 7320 6361 6c6c kMD5Sums is call\n-000368c0: 6564 2069 6e20 666f 726b 210a 0909 2470 ed in fork!...$p\n-000368d0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-000368e0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-000368f0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00036900: 2273 6b69 7070 696e 6720 626c 6f63 6b65 \"skipping blocke\n-00036910: 6420 6669 6c65 225d 293b 0a09 096e 6578 d file\"]);...nex\n-00036920: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... \n-00036930: 6c6f 6361 6c20 2a42 4c4f 434b 3b0a 0920 local *BLOCK;.. \n-00036940: 2020 2075 6e6c 6573 7320 2826 3a3a 7761 unless (&::wa\n-00036950: 6974 466f 7246 696c 6528 2474 6d70 4e61 itForFile($tmpNa\n-00036960: 6d65 2920 3d3d 2030 2061 6e64 0a09 0920 me) == 0 and... \n-00036970: 2020 206f 7065 6e28 424c 4f43 4b2c 2022 open(BLOCK, \"\n-00036980: 3c20 2474 6d70 4e61 6d65 2229 290a 0920 < $tmpName\")).. \n-00036990: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n-000369a0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-000369b0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-000369c0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-000369d0: 206f 7065 6e20 3c24 746d 704e 616d 653e open <$tmpName>\n-000369e0: 225d 2c0a 0909 0920 2020 2020 2027 2d61 \"],.... '-a\n-000369f0: 6464 2720 3d3e 205b 5f5f 4649 4c45 5f5f dd' => [__FILE__\n-00036a00: 2c20 5f5f 4c49 4e45 5f5f 5d2c 0a09 0909 , __LINE__],....\n-00036a10: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00036a20: 2031 293b 0a09 2020 2020 7d0a 0920 2020 1);.. }.. \n-00036a30: 206d 7920 2824 7374 6174 536f 7572 6365 my ($statSource\n-00036a40: 5369 7a65 2c20 2473 7461 7453 7462 7553 Size, $statStbuS\n-00036a50: 697a 652c 2024 7374 6174 4e6f 466f 726b ize, $statNoFork\n-00036a60: 7343 502c 2024 7374 6174 4e6f 466f 726b sCP, $statNoFork\n-00036a70: 7343 6f6d 7072 6573 732c 0a09 0924 7374 sCompress,...$st\n-00036a80: 6174 4e6f 426c 6f63 6b73 2c20 2473 7461 atNoBlocks, $sta\n-00036a90: 744e 6f4c 6174 654c 696e 6b73 2c20 2461 tNoLateLinks, $a\n-00036aa0: 6c6c 4d44 352c 2024 626c 6f63 6b4d 4435 llMD5, $blockMD5\n-00036ab0: 2c0a 0909 2462 6c6f 636b 4669 6c65 6e61 ,...$blockFilena\n-00036ac0: 6d65 2c20 246c 2c20 246e 6f57 6172 6e69 me, $l, $noWarni\n-00036ad0: 6e67 732c 2024 6e6f 4572 726f 7273 2c0a ngs, $noErrors,.\n-00036ae0: 0909 246e 6f42 6c6f 636b 436f 6d70 7243 ..$noBlockComprC\n-00036af0: 6865 636b 436f 6d70 722c 2024 6e6f 426c heckCompr, $noBl\n-00036b00: 6f63 6b43 6f6d 7072 4368 6563 6b43 7029 ockComprCheckCp)\n-00036b10: 3b0a 0a09 2020 2020 7768 696c 6520 2824 ;... while ($\n-00036b20: 6c20 3d20 3c42 4c4f 434b 3e29 0a09 2020 l = ).. \n-00036b30: 2020 7b0a 0909 6368 6f70 2024 6c3b 0a09 {...chop $l;..\n-00036b40: 096d 7920 2466 6972 7374 3b0a 0909 2824 .my $first;...($\n-00036b50: 6669 7273 742c 2024 6c29 203d 2073 706c first, $l) = spl\n-00036b60: 6974 282f 5c73 2f2c 2024 6c2c 2032 293b it(/\\s/, $l, 2);\n-00036b70: 0a09 0969 6620 2824 6669 7273 7420 6571 ...if ($first eq\n-00036b80: 2027 616c 6c4d 4435 2729 0a09 097b 0a09 'allMD5')...{..\n-00036b90: 0920 2020 2028 2461 6c6c 4d44 352c 2024 . ($allMD5, $\n-00036ba0: 7374 6174 536f 7572 6365 5369 7a65 2c20 statSourceSize, \n-00036bb0: 2473 7461 7453 7462 7553 697a 652c 2024 $statStbuSize, $\n-00036bc0: 7374 6174 4e6f 466f 726b 7343 502c 0a09 statNoForksCP,..\n-00036bd0: 0920 2020 2020 2473 7461 744e 6f46 6f72 . $statNoFor\n-00036be0: 6b73 436f 6d70 7265 7373 2c20 2473 7461 ksCompress, $sta\n-00036bf0: 744e 6f42 6c6f 636b 732c 2024 7374 6174 tNoBlocks, $stat\n-00036c00: 4e6f 4c61 7465 4c69 6e6b 732c 0a09 0920 NoLateLinks,... \n-00036c10: 2020 2020 246e 6f57 6172 6e69 6e67 732c $noWarnings,\n-00036c20: 2024 6e6f 4572 726f 7273 2c20 246e 6f42 $noErrors, $noB\n-00036c30: 6c6f 636b 436f 6d70 7243 6865 636b 436f lockComprCheckCo\n-00036c40: 6d70 722c 0a09 0920 2020 2020 246e 6f42 mpr,... $noB\n-00036c50: 6c6f 636b 436f 6d70 7243 6865 636b 4370 lockComprCheckCp\n-00036c60: 2920 3d0a 0909 0920 7370 6c69 7428 2f5c ) =.... split(/\\\n-00036c70: 732f 2c20 246c 293b 0a23 7072 696e 7420 s/, $l);.#print \n-00036c80: 2273 6574 7469 6e67 2061 6c6c 4d44 355c \"setting allMD5\\\n-00036c90: 6e22 3b0a 0909 7d0a 0909 656c 7369 6620 n\";...}...elsif \n-00036ca0: 2824 6669 7273 7420 6571 2027 6c69 6e6b ($first eq 'link\n-00036cb0: 2729 0a09 097b 0a09 0920 2020 2024 7772 ')...{... $wr\n-00036cc0: 4c61 7465 4c69 6e6b 2d3e 7072 696e 7428 LateLink->print(\n-00036cd0: 2224 6669 7273 7420 246c 5c6e 2229 3b20 \"$first $l\\n\"); \n-00036ce0: 2020 2020 2320 276c 696e 6b20 6d64 3527 # 'link md5'\n-00036cf0: 0a09 0920 2020 206d 7920 2465 7869 7374 ... my $exist\n-00036d00: 696e 6746 696c 6520 3d20 3c42 4c4f 434b ingFile = ;... chop $e\n-00036d20: 7869 7374 696e 6746 696c 653b 0a09 0920 xistingFile;... \n-00036d30: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00036d40: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00036d50: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n-00036d60: 0a09 0909 0920 205b 2266 696c 6520 3c24 ..... [\"file <$\n-00036d70: 746d 704e 616d 653e 2065 6e64 7320 756e tmpName> ends un\n-00036d80: 6578 7065 6374 6564 2061 7420 6c69 6e65 expected at line\n-00036d90: 2024 2e22 5d2c 0a09 0909 0920 2027 2d65 $.\"],..... '-e\n-00036da0: 7869 7427 203d 3e20 3129 0a09 0909 756e xit' => 1)....un\n-00036db0: 6c65 7373 2024 6578 6973 7469 6e67 4669 less $existingFi\n-00036dc0: 6c65 3b0a 0909 2020 2020 2465 7869 7374 le;... $exist\n-00036dd0: 696e 6746 696c 6520 3d20 3a3a 7265 6c50 ingFile = ::relP\n-00036de0: 6174 6828 2474 6172 6765 7444 6972 2c20 ath($targetDir, \n-00036df0: 2465 7869 7374 696e 6746 696c 6529 3b0a $existingFile);.\n-00036e00: 0909 2020 2020 2465 7869 7374 696e 6746 .. $existingF\n-00036e10: 696c 6520 3d7e 2073 2f5c 6e2f 5c30 2f6f ile =~ s/\\n/\\0/o\n-00036e20: 673b 0a09 0920 2020 2024 7772 4c61 7465 g;... $wrLate\n-00036e30: 4c69 6e6b 2d3e 7072 696e 7428 2224 6578 Link->print(\"$ex\n-00036e40: 6973 7469 6e67 4669 6c65 5c6e 2229 3b0a istingFile\\n\");.\n-00036e50: 0909 2020 2020 6d79 2024 6e65 774c 696e .. my $newLin\n-00036e60: 6b20 3d20 3c42 4c4f 434b 3e3b 0a09 0920 k = ;... \n-00036e70: 2020 2063 686f 7020 246e 6577 4c69 6e6b chop $newLink\n-00036e80: 3b0a 0909 2020 2020 2470 724c 6f67 2d3e ;... $prLog->\n-00036e90: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00036ea0: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st\n-00036eb0: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... [\"fi\n-00036ec0: 6c65 203c 2474 6d70 4e61 6d65 3e20 656e le <$tmpName> en\n-00036ed0: 6473 2075 6e65 7870 6563 7465 6420 6174 ds unexpected at\n-00036ee0: 206c 696e 6520 242e 225d 2c0a 0909 0909 line $.\"],.....\n-00036ef0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n-00036f00: 0909 0975 6e6c 6573 7320 246e 6577 4c69 ...unless $newLi\n-00036f10: 6e6b 3b0a 0909 2020 2020 246e 6577 4c69 nk;... $newLi\n-00036f20: 6e6b 203d 203a 3a72 656c 5061 7468 2824 nk = ::relPath($\n-00036f30: 7461 7267 6574 4469 722c 2024 6e65 774c targetDir, $newL\n-00036f40: 696e 6b29 3b0a 0909 2020 2020 246e 6577 ink);... $new\n-00036f50: 4c69 6e6b 203d 7e20 732f 5c6e 2f5c 302f Link =~ s/\\n/\\0/\n-00036f60: 6f67 3b0a 0909 2020 2020 2477 724c 6174 og;... $wrLat\n-00036f70: 654c 696e 6b2d 3e70 7269 6e74 2822 246e eLink->print(\"$n\n-00036f80: 6577 4c69 6e6b 5c6e 2229 3b0a 2370 7269 ewLink\\n\");.#pri\n-00036f90: 6e74 2022 626c 6f63 6b6c 6174 656c 696e nt \"blocklatelin\n-00036fa0: 6b73 3a20 2466 6972 7374 2024 6c2c 2024 ks: $first $l, $\n-00036fb0: 6578 6973 7469 6e67 4669 6c65 202d 3e20 existingFile -> \n-00036fc0: 246e 6577 4c69 6e6b 5c6e 223b 0a09 097d $newLink\\n\";...}\n-00036fd0: 0a09 0965 6c73 6966 2028 2466 6972 7374 ...elsif ($first\n-00036fe0: 2065 7120 2763 6f6d 7072 6573 7327 290a eq 'compress').\n-00036ff0: 0909 7b0a 0909 2020 2020 2477 724c 6174 ..{... $wrLat\n-00037000: 654c 696e 6b2d 3e70 7269 6e74 2822 2466 eLink->print(\"$f\n-00037010: 6972 7374 2024 6c5c 6e22 293b 2020 2023 irst $l\\n\"); #\n-00037020: 2027 636f 6d70 7265 7373 206d 6435 270a 'compress md5'.\n-00037030: 0909 2020 2020 6d79 2024 6578 6973 7469 .. my $existi\n-00037040: 6e67 4669 6c65 203d 203c 424c 4f43 4b3e ngFile = \n-00037050: 3b0a 0909 2020 2020 6368 6f70 2024 6578 ;... chop $ex\n-00037060: 6973 7469 6e67 4669 6c65 3b0a 0909 2020 istingFile;... \n-00037070: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00037080: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00037090: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-000370a0: 0909 0909 2020 5b22 6669 6c65 203c 2474 .... [\"file <$t\n-000370b0: 6d70 4e61 6d65 3e20 656e 6473 2075 6e65 mpName> ends une\n-000370c0: 7870 6563 7465 6420 6174 206c 696e 6520 xpected at line \n-000370d0: 242e 225d 2c0a 0909 0909 2020 272d 6578 $.\"],..... '-ex\n-000370e0: 6974 2720 3d3e 2031 290a 0909 0975 6e6c it' => 1)....unl\n-000370f0: 6573 7320 2465 7869 7374 696e 6746 696c ess $existingFil\n-00037100: 653b 0a09 0920 2020 2024 6578 6973 7469 e;... $existi\n-00037110: 6e67 4669 6c65 203d 203a 3a72 656c 5061 ngFile = ::relPa\n-00037120: 7468 2824 7461 7267 6574 4469 722c 2024 th($targetDir, $\n-00037130: 6578 6973 7469 6e67 4669 6c65 293b 0a09 existingFile);..\n-00037140: 0920 2020 2024 6578 6973 7469 6e67 4669 . $existingFi\n-00037150: 6c65 203d 7e20 732f 5c6e 2f5c 302f 6f67 le =~ s/\\n/\\0/og\n-00037160: 3b0a 0909 2020 2020 2477 724c 6174 654c ;... $wrLateL\n-00037170: 696e 6b2d 3e70 7269 6e74 2822 2465 7869 ink->print(\"$exi\n-00037180: 7374 696e 6746 696c 655c 6e22 293b 0a09 stingFile\\n\");..\n-00037190: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{...\n-000371a0: 2020 2020 6d79 2024 636f 6d70 723b 0a09 my $compr;..\n-000371b0: 0920 2020 2028 2462 6c6f 636b 4d44 352c . ($blockMD5,\n-000371c0: 2024 636f 6d70 722c 2024 626c 6f63 6b46 $compr, $blockF\n-000371d0: 696c 656e 616d 6529 203d 0a09 0909 2824 ilename) =....($\n-000371e0: 6669 7273 742c 2073 706c 6974 282f 5c73 first, split(/\\s\n-000371f0: 2f2c 2024 6c2c 2032 2929 3b0a 0909 2020 /, $l, 2));... \n-00037200: 2020 246f 6c64 4669 6c65 6e61 6d65 2d3e $oldFilename->\n-00037210: 7365 7442 6c6f 636b 4669 6c65 6e61 6d65 setBlockFilename\n-00037220: 436f 6d70 7228 2462 6c6f 636b 4d44 352c Compr($blockMD5,\n-00037230: 0a09 0909 0909 0920 2020 2224 7461 7267 ....... \"$targ\n-00037240: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile\n-00037250: 6e61 6d65 222c 0a09 0909 0909 0909 2463 name\",........$c\n-00037260: 6f6d 7072 293b 0a23 7072 696e 7420 2262 ompr);.#print \"b\n-00037270: 6c6f 636b 4d44 3520 3d20 2462 6c6f 636b lockMD5 = $block\n-00037280: 4d44 352c 2062 6c6f 636b 4669 6c65 6e61 MD5, blockFilena\n-00037290: 6d65 203d 2024 626c 6f63 6b46 696c 656e me = $blockFilen\n-000372a0: 616d 655c 6e22 3b0a 0909 2020 2020 6368 ame\\n\";... ch\n-000372b0: 6d6f 6420 246d 6f64 652c 2022 2474 6172 mod $mode, \"$tar\n-000372c0: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil\n-000372d0: 656e 616d 6522 3b0a 0909 2020 2020 6368 ename\";... ch\n-000372e0: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n-000372f0: 2224 7461 7267 6574 4469 722f 2462 6c6f \"$targetDir/$blo\n-00037300: 636b 4669 6c65 6e61 6d65 223b 0a09 097d ckFilename\";...}\n-00037310: 0a09 2020 2020 7d0a 2370 7269 6e74 2022 .. }.#print \"\n-00037320: 616c 6c4d 4435 203d 2024 616c 6c4d 4435 allMD5 = $allMD5\n-00037330: 2c20 7374 6174 536f 7572 6365 5369 7a65 , statSourceSize\n-00037340: 203d 2024 7374 6174 536f 7572 6365 5369 = $statSourceSi\n-00037350: 7a65 2c20 7374 6174 5374 6275 5369 7a65 ze, statStbuSize\n-00037360: 203d 2024 7374 6174 5374 6275 5369 7a65 = $statStbuSize\n-00037370: 5c6e 2220 2e0a 2320 2020 2022 7374 6174 \\n\" ..# \"stat\n-00037380: 4e6f 466f 726b 7343 5020 3d20 2473 7461 NoForksCP = $sta\n-00037390: 744e 6f46 6f72 6b73 4350 2c20 7374 6174 tNoForksCP, stat\n-000373a0: 4e6f 466f 726b 7343 6f6d 7072 6573 7320 NoForksCompress \n-000373b0: 3d20 2473 7461 744e 6f46 6f72 6b73 436f = $statNoForksCo\n-000373c0: 6d70 7265 7373 5c6e 2220 2e0a 2320 2020 mpress\\n\" ..# \n-000373d0: 2022 7374 6174 4e6f 426c 6f63 6b73 203d \"statNoBlocks =\n-000373e0: 2024 7374 6174 4e6f 426c 6f63 6b73 2c20 $statNoBlocks, \n-000373f0: 7374 6174 4e6f 4c61 7465 4c69 6e6b 7320 statNoLateLinks \n-00037400: 3d20 2473 7461 744e 6f4c 6174 654c 696e = $statNoLateLin\n-00037410: 6b73 5c6e 2220 2e0a 2320 2020 2022 6e6f ks\\n\" ..# \"no\n-00037420: 5761 726e 696e 6773 203d 2024 6e6f 5761 Warnings = $noWa\n-00037430: 726e 696e 6773 2c20 6e6f 4572 726f 7273 rnings, noErrors\n-00037440: 203d 2024 6e6f 4572 726f 7273 5c6e 2220 = $noErrors\\n\" \n-00037450: 2e0a 2320 2020 2022 6e6f 426c 6f63 6b43 ..# \"noBlockC\n-00037460: 6f6d 7072 4368 6563 6b43 6f6d 7072 203d omprCheckCompr =\n-00037470: 2024 6e6f 426c 6f63 6b43 6f6d 7072 4368 $noBlockComprCh\n-00037480: 6563 6b43 6f6d 7072 2c20 6e6f 426c 6f63 eckCompr, noBloc\n-00037490: 6b43 6f6d 7072 4368 6563 6b43 7020 3d20 kComprCheckCp = \n-000374a0: 246e 6f42 6c6f 636b 436f 6d70 7243 6865 $noBlockComprChe\n-000374b0: 636b 4370 5c6e 223b 0a09 2020 2020 636c ckCp\\n\";.. cl\n-000374c0: 6f73 6528 424c 4f43 4b29 3b0a 0920 2020 ose(BLOCK);.. \n-000374d0: 2075 6e6c 696e 6b20 2474 6d70 4e61 6d65 unlink $tmpName\n-000374e0: 3b0a 0a09 2020 2020 246d 6169 6e3a 3a73 ;... $main::s\n-000374f0: 7461 742d 3e61 6464 5375 6d4f 7269 6746 tat->addSumOrigF\n-00037500: 696c 6573 2824 7374 6174 536f 7572 6365 iles($statSource\n-00037510: 5369 7a65 2c20 2475 6964 2c20 2467 6964 Size, $uid, $gid\n-00037520: 293b 0a09 2020 2020 246d 6169 6e3a 3a73 );.. $main::s\n-00037530: 7461 742d 3e61 6464 5375 6d4d 4435 5375 tat->addSumMD5Su\n-00037540: 6d28 2473 7461 7453 6f75 7263 6553 697a m($statSourceSiz\n-00037550: 6529 3b0a 0920 2020 2024 6d61 696e 3a3a e);.. $main::\n-00037560: 7374 6174 2d3e 696e 6372 5f6e 6f4c 6174 stat->incr_noLat\n-00037570: 654c 696e 6b73 2824 7569 642c 2024 6769 eLinks($uid, $gi\n-00037580: 642c 2024 7374 6174 4e6f 4c61 7465 4c69 d, $statNoLateLi\n-00037590: 6e6b 7329 3b0a 0920 2020 2024 6d61 696e nks);.. $main\n-000375a0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF\n-000375b0: 6f72 6b73 4350 2824 7374 6174 4e6f 466f orksCP($statNoFo\n-000375c0: 726b 7343 5029 3b0a 0920 2020 2024 6d61 rksCP);.. $ma\n-000375d0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n-000375e0: 6f46 6f72 6b73 436f 6d70 7265 7373 2824 oForksCompress($\n-000375f0: 7374 6174 4e6f 466f 726b 7343 6f6d 7072 statNoForksCompr\n-00037600: 6573 7329 3b0a 0920 2020 2024 6d61 696e ess);.. $main\n-00037610: 3a3a 7374 6174 2d3e 6164 6453 756d 426c ::stat->addSumBl\n-00037620: 6f63 6b43 6f6d 7072 4368 6563 6b43 6f6d ockComprCheckCom\n-00037630: 7072 2824 6e6f 426c 6f63 6b43 6f6d 7072 pr($noBlockCompr\n-00037640: 4368 6563 6b43 6f6d 7072 293b 0a09 2020 CheckCompr);.. \n-00037650: 2020 246d 6169 6e3a 3a73 7461 742d 3e61 $main::stat->a\n-00037660: 6464 5375 6d42 6c6f 636b 436f 6d70 7243 ddSumBlockComprC\n-00037670: 6865 636b 4370 2824 6e6f 426c 6f63 6b43 heckCp($noBlockC\n-00037680: 6f6d 7072 4368 6563 6b43 7029 3b0a 0920 omprCheckCp);.. \n-00037690: 2020 2024 7072 4c6f 672d 3e61 6464 456e $prLog->addEn\n-000376a0: 636f 756e 7465 7228 272d 6b69 6e64 2720 counter('-kind' \n-000376b0: 3d3e 2027 4527 2c0a 0909 0909 2027 2d61 => 'E',..... '-a\n-000376c0: 6464 2720 3d3e 2024 6e6f 4572 726f 7273 dd' => $noErrors\n-000376d0: 293b 0a09 2020 2020 2470 724c 6f67 2d3e );.. $prLog->\n-000376e0: 6164 6445 6e63 6f75 6e74 6572 2827 2d6b addEncounter('-k\n-000376f0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n-00037700: 0920 272d 6164 6427 203d 3e20 246e 6f57 . '-add' => $noW\n-00037710: 6172 6e69 6e67 7329 3b0a 0a09 2020 2020 arnings);... \n-00037720: 6966 2028 2463 6f6d 7072 6573 7342 6c6f if ($compressBlo\n-00037730: 636b 2065 7120 2775 2720 6f72 2024 6c61 ck eq 'u' or $la\n-00037740: 7465 436f 6d70 7265 7373 290a 0920 2020 teCompress).. \n-00037750: 207b 0a09 0924 6d61 696e 3a3a 7374 6174 {...$main::stat\n-00037760: 2d3e 6164 6453 756d 4e65 7743 6f70 7928 ->addSumNewCopy(\n-00037770: 2473 7461 7453 7462 7553 697a 6529 3b0a $statStbuSize);.\n-00037780: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n-00037790: 0a09 2020 2020 7b0a 0909 246d 6169 6e3a .. {...$main:\n-000377a0: 3a73 7461 742d 3e61 6464 5375 6d4e 6577 :stat->addSumNew\n-000377b0: 436f 6d70 7228 2473 7461 7453 7462 7553 Compr($statStbuS\n-000377c0: 697a 652c 2024 7374 6174 536f 7572 6365 ize, $statSource\n-000377d0: 5369 7a65 293b 0a09 2020 2020 7d0a 0920 Size);.. }.. \n-000377e0: 2020 2024 6d61 696e 3a3a 7374 6174 2d3e $main::stat->\n-000377f0: 6164 645f 6e6f 4d44 3565 6446 696c 6573 add_noMD5edFiles\n-00037800: 2824 7374 6174 4e6f 426c 6f63 6b73 202b ($statNoBlocks +\n-00037810: 2031 293b 0a09 2020 2020 246d 6169 6e3a 1);.. $main:\n-00037820: 3a73 7461 742d 3e69 6e63 725f 6e6f 466f :stat->incr_noFo\n-00037830: 726b 734d 4435 2829 3b0a 2309 2020 2020 rksMD5();.#. \n-00037840: 7072 696e 7420 222c 2c2c 2c2c 2c2c 2c2c print \",,,,,,,,,\n-00037850: 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c ,,,,,,,,,,,,,,,,\n-00037860: 2c2c 2c2c 2c2c 2066 696c 6520 3d20 3c24 ,,,,,, file = <$\n-00037870: 6669 6c65 3e5c 6e22 3b0a 2309 2020 2020 file>\\n\";.#. \n-00037880: 7072 696e 7420 2264 6576 4469 7273 203d print \"devDirs =\n-00037890: 2040 6465 7644 6972 735c 6e22 3b0a 2309 @devDirs\\n\";.#.\n-000378a0: 2020 2020 7072 696e 7420 2274 6172 6765 print \"targe\n-000378b0: 7444 6972 203d 2024 7461 7267 6574 4469 tDir = $targetDi\n-000378c0: 725c 6e22 3b0a 0920 2020 2023 7772 6974 r\\n\";.. #writ\n-000378d0: 6520 7061 7468 2074 6f20 626c 6f63 6b65 e path to blocke\n-000378e0: 6420 6669 6c65 2069 6e20 6368 6563 6b73 d file in checks\n-000378f0: 756d 2066 696c 650a 0920 2020 2070 6f70 um file.. pop\n-00037900: 2040 6465 7644 6972 733b 2020 2023 2072 @devDirs; # r\n-00037910: 656d 6f76 6520 6469 722d 6669 6c65 2065 emove dir-file e\n-00037920: 6e74 7279 2066 726f 6d20 6765 6e65 7261 ntry from genera\n-00037930: 7465 6420 6c69 7374 0a09 2020 2020 666f ted list.. fo\n-00037940: 7265 6163 6820 6d79 2024 6465 7644 6972 reach my $devDir\n-00037950: 2028 4064 6576 4469 7273 290a 0920 2020 (@devDirs).. \n-00037960: 207b 0a09 096d 7920 2472 7020 3d20 263a {...my $rp = &:\n-00037970: 3a72 656c 5061 7468 2824 7461 7267 6574 :relPath($target\n-00037980: 4469 722c 2024 6465 7644 6972 293b 0a09 Dir, $devDir);..\n-00037990: 0924 616b 7446 696c 656e 616d 652d 3e73 .$aktFilename->s\n-000379a0: 746f 7265 4469 7228 272d 6469 7227 2020 toreDir('-dir' \n-000379b0: 203d 3e20 2472 702c 2020 2320 6162 7320 => $rp, # abs \n-000379c0: 7061 7468 0a09 0909 0920 2020 2020 2020 path..... \n-000379d0: 272d 6465 7627 2020 203d 3e20 302c 0a09 '-dev' => 0,..\n-000379e0: 0909 0920 2020 2020 2020 272d 696e 6f64 ... '-inod\n-000379f0: 6527 203d 3e20 302c 0a09 0909 0920 2020 e' => 0,..... \n-00037a00: 2020 2020 272d 6374 696d 6527 203d 3e20 '-ctime' => \n-00037a10: 2463 7469 6d65 2c0a 0909 0909 2020 2020 $ctime,..... \n-00037a20: 2020 2027 2d6d 7469 6d65 2720 3d3e 2024 '-mtime' => $\n-00037a30: 6d74 696d 652c 0a09 0909 0920 2020 2020 mtime,..... \n-00037a40: 2020 272d 6174 696d 6527 203d 3e20 2461 '-atime' => $a\n-00037a50: 7469 6d65 2c0a 0909 0909 2020 2020 2020 time,..... \n-00037a60: 2027 2d75 6964 2720 2020 3d3e 2024 7569 '-uid' => $ui\n-00037a70: 642c 0a09 0909 0920 2020 2020 2020 272d d,..... '-\n-00037a80: 6769 6427 2020 203d 3e20 2467 6964 2c0a gid' => $gid,.\n-00037a90: 0909 0909 2020 2020 2020 2027 2d6d 6f64 .... '-mod\n-00037aa0: 6527 2020 3d3e 2024 6d6f 6465 293b 0a09 e' => $mode);..\n-00037ab0: 2020 2020 7d0a 0920 2020 2040 6465 7644 }.. @devD\n-00037ac0: 6972 7320 3d20 2829 3b0a 0920 2020 2024 irs = ();.. $\n-00037ad0: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto\n-00037ae0: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' =\n-00037af0: 3e20 2466 696c 652c 2020 2320 7370 6569 > $file, # spei\n-00037b00: 6368 6572 7420 696e 2064 626d 0a09 0909 chert in dbm....\n-00037b10: 0927 2d6d 6435 7375 6d27 203d 3e20 2461 .'-md5sum' => $a\n-00037b20: 6c6c 4d44 352c 2020 2320 2e6d 6435 7375 llMD5, # .md5su\n-00037b30: 6d2d 4461 7465 690a 0909 0909 272d 636f m-Datei.....'-co\n-00037b40: 6d70 7227 203d 3e20 2762 272c 0a09 0909 mpr' => 'b',....\n-00037b50: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev,\n-00037b60: 0a09 0909 0927 2d69 6e6f 6465 2720 3d3e .....'-inode' =>\n-00037b70: 2024 696e 6f64 652c 0a09 0909 0927 2d69 $inode,.....'-i\n-00037b80: 6e6f 6465 4261 636b 7570 2720 3d3e 2030 nodeBackup' => 0\n-00037b90: 2c0a 0909 0909 272d 6374 696d 6527 203d ,.....'-ctime' =\n-00037ba0: 3e20 2463 7469 6d65 2c0a 0909 0909 272d > $ctime,.....'-\n-00037bb0: 6d74 696d 6527 203d 3e20 246d 7469 6d65 mtime' => $mtime\n-00037bc0: 2c0a 0909 0909 272d 6d74 696d 6527 203d ,.....'-mtime' =\n-00037bd0: 3e20 246d 7469 6d65 2c0a 0909 0909 272d > $mtime,.....'-\n-00037be0: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime\n-00037bf0: 2c0a 0909 0909 272d 7369 7a65 2720 3d3e ,.....'-size' =>\n-00037c00: 2024 7369 7a65 2c0a 0909 0909 272d 7569 $size,.....'-ui\n-00037c10: 6427 203d 3e20 2475 6964 2c0a 0909 0909 d' => $uid,.....\n-00037c20: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,.\n-00037c30: 0909 0909 272d 6d6f 6465 2720 3d3e 2024 ....'-mode' => $\n-00037c40: 6d6f 6465 293b 0a09 7d0a 2370 7269 6e74 mode);..}.#print\n-00037c50: 2022 2d32 352d 5c6e 223b 0a20 2020 2020 \"-25-\\n\";. \n-00037c60: 2020 2023 206e 6575 6520 4b6f 6d70 7269 # neue Kompri\n-00037c70: 6d69 6572 2d4a 6f62 7320 6569 6e68 c3a4 mier-Jobs einh..\n-00037c80: 6e67 656e 0a20 2020 2020 2020 2077 6869 ngen. whi\n-00037c90: 6c65 2028 2470 6172 466f 726b 436f 6d70 le ($parForkComp\n-00037ca0: 722d 3e67 6574 4e6f 4672 6565 456e 7472 r->getNoFreeEntr\n-00037cb0: 6965 7328 2920 3e20 3020 616e 640a 2020 ies() > 0 and. \n-00037cc0: 2020 2020 2020 2020 2020 2020 2024 6669 $fi\n-00037cd0: 666f 436f 6d70 722d 3e67 6574 4e6f 5573 foCompr->getNoUs\n-00037ce0: 6564 456e 7472 6965 7328 2920 3e20 3029 edEntries() > 0)\n-00037cf0: 0a20 2020 2020 2020 207b 0a20 2020 2020 . {. \n-00037d00: 2020 2020 2020 2023 2057 6520 6469 6420 # We did \n-00037d10: 736f 6d65 7468 696e 670a 2020 2020 2020 something. \n-00037d20: 2020 2020 2020 246d 6169 6e3a 3a74 696e $main::tin\n-00037d30: 7957 6169 7453 6368 6564 756c 6572 2d3e yWaitScheduler->\n-00037d40: 7265 7365 7428 293b 0a0a 2020 2020 2020 reset();.. \n-00037d50: 2020 2020 2020 6d79 2028 2464 6972 2c20 my ($dir, \n-00037d60: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi\n-00037d70: 642c 2024 6d6f 6465 2c20 246d 6435 2920 d, $mode, $md5) \n-00037d80: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. \n-00037d90: 2020 407b 2466 6966 6f43 6f6d 7072 2d3e @{$fifoCompr->\n-00037da0: 6765 7428 297d 3b0a 0920 2020 2075 6e6c get()};.. unl\n-00037db0: 6573 7320 282d 6520 2224 6469 722f 2466 ess (-e \"$dir/$f\n-00037dc0: 696c 6522 2920 2020 2023 2066 696c 6520 ile\") # file \n-00037dd0: 7761 7320 6465 6c65 7465 6420 6475 7269 was deleted duri\n-00037de0: 6e67 2077 6169 7420 696e 2071 7565 7565 ng wait in queue\n-00037df0: 0a09 2020 2020 7b0a 0909 2470 724c 6f67 .. {...$prLog\n-00037e00: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00037e10: 3d3e 2027 5727 2c0a 0909 0920 2020 2020 => 'W',.... \n-00037e20: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... \n-00037e30: 2020 2020 5b22 6669 6c65 203c 2464 6972 [\"file <$dir\n-00037e40: 2f24 6669 6c65 3e20 6465 6c65 7465 6420 /$file> deleted \n-00037e50: 6475 7269 6e67 2062 6163 6b75 7020 2838 during backup (8\n-00037e60: 2922 5d29 3b0a 0909 6e65 7874 3b0a 0920 )\"]);...next;.. \n-00037e70: 2020 207d 0a20 2020 2020 2020 2020 2020 }. \n-00037e80: 206d 7920 2824 6465 762c 2024 696e 6f64 my ($dev, $inod\n-00037e90: 652c 2024 6374 696d 652c 2024 6d74 696d e, $ctime, $mtim\n-00037ea0: 652c 2024 6174 696d 652c 2024 7369 7a65 e, $atime, $size\n-00037eb0: 2920 3d0a 2020 2020 2020 2020 2020 2020 ) =. \n-00037ec0: 2020 2020 2873 7461 7428 2224 6469 722f (stat(\"$dir/\n-00037ed0: 2466 696c 6522 2929 5b30 2c20 312c 2031 $file\"))[0, 1, 1\n-00037ee0: 302c 2039 2c20 382c 2037 5d3b 0a20 2020 0, 9, 8, 7];. \n-00037ef0: 2020 2020 2020 2020 2024 6d6f 6465 2026 $mode &\n-00037f00: 3d20 3037 3737 373b 0a0a 2020 2020 2020 = 07777;.. \n-00037f10: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr\n-00037f20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00037f30: 4427 2c0a 2020 2020 2020 2020 2020 2020 D',. \n-00037f40: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00037f50: 7374 7227 203d 3e20 5b22 2463 6f6d 7072 str' => [\"$compr\n-00037f60: 6573 7320 3c20 2464 6972 2f24 6669 6c65 ess < $dir/$file\n-00037f70: 203e 2022 202e 0a20 2020 2020 2020 2020 > \" .. \n-00037f80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00037f90: 2020 2020 2020 2020 2020 2020 2224 7461 \"$ta\n-00037fa0: 7267 6574 4469 722f 2466 696c 6524 706f rgetDir/$file$po\n-00037fb0: 7374 6669 7822 5d29 0a20 2020 2020 2020 stfix\"]). \n-00037fc0: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de\n-00037fd0: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);..\n-00037fe0: 2309 2020 2020 6966 2028 246c 6174 654c #. if ($lateL\n-00037ff0: 696e 6b73 5377 6974 6368 6564 4f66 6629 inksSwitchedOff)\n-00038000: 0a23 0920 2020 207b 0a23 0909 6d79 2028 .#. {.#..my (\n-00038010: 2464 6972 2c20 2466 696c 6529 203d 0a23 $dir, $file) =.#\n-00038020: 0909 2020 2020 263a 3a73 706c 6974 4669 .. &::splitFi\n-00038030: 6c65 4469 7228 2224 7461 7267 6574 4469 leDir(\"$targetDi\n-00038040: 722f 2466 696c 6524 706f 7374 6669 7822 r/$file$postfix\"\n-00038050: 293b 0a23 0909 263a 3a6d 616b 6544 6972 );.#..&::makeDir\n-00038060: 5061 7468 2824 6469 722c 2024 7072 4c6f Path($dir, $prLo\n-00038070: 6729 3b0a 2309 2020 2020 7d0a 0a09 2020 g);.#. }... \n-00038080: 2020 6d79 2024 746d 704d 4435 4669 6c65 my $tmpMD5File\n-00038090: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa\n-000380a0: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me(\"$tmpdir/stor\n-000380b0: 6542 6163 6b75 702d 6d64 352e 2229 3b0a eBackup-md5.\");.\n-000380c0: 0920 2020 2024 7061 7246 6f72 6b43 6f6d . $parForkCom\n-000380d0: 7072 2d3e 6164 645f 6e6f 626c 6f63 6b28 pr->add_noblock(\n-000380e0: 272d 6578 6563 2720 3d3e 2024 6d61 696e '-exec' => $main\n-000380f0: 3a3a 7374 6275 4d64 3545 7865 632c 0a20 ::stbuMd5Exec,. \n-00038100: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00038110: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00038120: 7061 7261 6d27 203d 3e20 5b24 636f 6d70 param' => [$comp\n-00038130: 7265 7373 436f 6d6d 616e 642c 2022 2464 ressCommand, \"$d\n-00038140: 6972 2f24 6669 6c65 222c 0a09 0909 2020 ir/$file\",.... \n-00038150: 2020 2020 2022 2474 6172 6765 7444 6972 \"$targetDir\n-00038160: 2f24 6669 6c65 2470 6f73 7466 6978 222c /$file$postfix\",\n-00038170: 0a09 0909 2020 2020 2020 2024 746d 704d .... $tmpM\n-00038180: 4435 4669 6c65 2c20 2474 6d70 6469 722c D5File, $tmpdir,\n-00038190: 0a09 0909 2020 2020 2020 2040 2463 6f6d .... @$com\n-000381a0: 7072 6573 734f 7074 696f 6e73 5d2c 0a20 pressOptions],. \n-000381b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000381c0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-000381d0: 776f 726b 696e 6744 6972 2720 3d3e 2027 workingDir' => '\n-000381e0: 2e27 2c0a 2020 2020 2020 2020 2020 2020 .',. \n-000381f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00038200: 2020 2027 2d6f 7574 5261 6e64 6f6d 2720 '-outRandom' \n-00038210: 3d3e 2022 2474 6d70 6469 722f 7374 6465 => \"$tmpdir/stde\n-00038220: 7272 222c 0a20 2020 2020 2020 2020 2020 rr\",. \n-00038230: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00038240: 2020 2020 272d 696e 666f 2720 3d3e 0a20 '-info' =>. \n-00038250: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00038260: 2020 2020 2020 2020 2020 2020 2020 5b24 [$\n-00038270: 6465 762c 2024 696e 6f64 652c 2024 6469 dev, $inode, $di\n-00038280: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, \n-00038290: 2467 6964 2c0a 2020 2020 2020 2020 2020 $gid,. \n-000382a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000382b0: 2020 2020 2020 246d 6f64 652c 2024 6d64 $mode, $md\n-000382c0: 352c 2024 6374 696d 652c 2024 6d74 696d 5, $ctime, $mtim\n-000382d0: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. \n-000382e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000382f0: 2020 2024 6174 696d 652c 2024 7369 7a65 $atime, $size\n-00038300: 2c20 2474 6d70 4d44 3546 696c 655d 290a , $tmpMD5File]).\n-00038310: 0909 6f72 2064 6965 2022 6d75 7374 206e ..or die \"must n\n-00038320: 6f74 2068 6170 7065 6e20 2863 6f6d 7072 ot happen (compr\n-00038330: 2922 3b0a 0a0a 2020 2020 2020 2020 7d0a )\";... }.\n-00038340: 0a20 2020 2020 2020 2024 6d61 696e 3a3a . $main::\n-00038350: 7374 6174 2d3e 6368 6563 6b50 7269 6e74 stat->checkPrint\n-00038360: 5469 6d65 5072 6f67 7265 7373 5265 706f TimeProgressRepo\n-00038370: 7274 2829 3b0a 2020 2020 2020 2020 2320 rt();. # \n-00038380: 5761 6974 2069 6e20 6361 7365 2077 6520 Wait in case we \n-00038390: 6469 6420 6e6f 7468 696e 6720 696e 2074 did nothing in t\n-000383a0: 6869 7320 6c6f 6f70 2072 756e 0a20 2020 his loop run. \n-000383b0: 2020 2020 2024 6d61 696e 3a3a 7469 6e79 $main::tiny\n-000383c0: 5761 6974 5363 6865 6475 6c65 722d 3e77 WaitScheduler->w\n-000383d0: 6169 7428 293b 0a20 2020 207d 0a23 7072 ait();. }.#pr\n-000383e0: 696e 7420 222d 3236 2d5c 6e22 3b0a 0a20 int \"-26-\\n\";.. \n-000383f0: 2020 2069 6620 2825 696e 5072 6f67 7265 if (%inProgre\n-00038400: 7373 290a 2020 2020 7b0a 096d 7920 246d ss). {..my $m\n-00038410: 6435 3b0a 0924 7072 4c6f 672d 3e70 7269 d5;..$prLog->pri\n-00038420: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D\n-00038430: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-00038440: 2720 3d3e 205b 2272 6570 6561 7420 6368 ' => [\"repeat ch\n-00038450: 6563 6b69 6e67 206f 6620 6964 656e 7469 ecking of identi\n-00038460: 6361 6c20 6669 6c65 7322 5d29 0a09 2020 cal files\"]).. \n-00038470: 2020 6966 2024 6465 6275 674d 6f64 6520 if $debugMode \n-00038480: 3e3d 2033 3b0a 0966 6f72 6561 6368 2024 >= 3;..foreach $\n-00038490: 6d64 3520 286b 6579 7320 2569 6e50 726f md5 (keys %inPro\n-000384a0: 6772 6573 7329 0a09 7b0a 0920 2020 2024 gress)..{.. $\n-000384b0: 7265 6164 4469 7241 6e64 4368 6563 6b2d readDirAndCheck-\n-000384c0: 3e70 7573 6862 6163 6b28 2469 6e50 726f >pushback($inPro\n-000384d0: 6772 6573 737b 246d 6435 7d2c 2024 7072 gress{$md5}, $pr\n-000384e0: 4c6f 672c 0a09 0924 6465 6275 674d 6f64 Log,...$debugMod\n-000384f0: 6520 3e3d 2033 203f 2031 203a 2030 293b e >= 3 ? 1 : 0);\n-00038500: 0a09 7d0a 0928 2569 6e50 726f 6772 6573 ..}..(%inProgres\n-00038510: 7329 203d 2028 293b 0a09 6e6f 2077 6172 s) = ();..no war\n-00038520: 6e69 6e67 7320 2764 6570 7265 6361 7465 nings 'deprecate\n-00038530: 6427 3b0a 0967 6f74 6f20 6265 6769 6e4d d';..goto beginM\n-00038540: 6169 6e4c 6f6f 704e 6f72 6d61 6c4f 7065 ainLoopNormalOpe\n-00038550: 7261 7469 6f6e 3b0a 2020 2020 7d0a 2020 ration;. }. \n-00038560: 2020 246d 6169 6e3a 3a73 7461 742d 3e70 $main::stat->p\n-00038570: 7269 6e74 5072 6f67 7265 7373 5265 706f rintProgressRepo\n-00038580: 7274 2829 3b0a 0a23 7072 696e 7420 222d rt();..#print \"-\n-00038590: 3237 2d5c 6e22 3b0a 2020 2020 6966 2028 27-\\n\";. if (\n-000385a0: 246c 6174 654c 696e 6b73 2061 6e64 206e $lateLinks and n\n-000385b0: 6f74 0a09 2864 6566 696e 6564 2824 6669 ot..(defined($fi\n-000385c0: 6c65 2920 616e 6420 6578 6973 7473 2024 le) and exists $\n-000385d0: 666f 7263 6543 6f70 7943 6f6d 7072 7b24 forceCopyCompr{$\n-000385e0: 6669 6c65 7d29 290a 2020 2020 7b0a 2370 file})). {.#p\n-000385f0: 7269 6e74 2022 2d32 382d 5c6e 223b 0a09 rint \"-28-\\n\";..\n-00038600: 2477 724c 6174 654c 696e 6b2d 3e77 6169 $wrLateLink->wai\n-00038610: 7428 293b 0a23 7072 696e 7420 222d 3239 t();.#print \"-29\n-00038620: 2d5c 6e22 3b0a 096d 7920 246f 7574 203d -\\n\";..my $out =\n-00038630: 2024 7772 4c61 7465 4c69 6e6b 2d3e 6765 $wrLateLink->ge\n-00038640: 7453 5444 4552 5228 293b 0a09 6966 2028 tSTDERR();..if (\n-00038650: 4024 6f75 7429 0a09 7b0a 0920 2020 2024 @$out)..{.. $\n-00038660: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00038670: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00038680: 2020 272d 7374 7227 203d 3e20 5b22 7772 '-str' => [\"wr\n-00038690: 6974 696e 6720 6c61 7465 4c69 6e6b 7320 iting lateLinks \n-000386a0: 6669 6c65 2072 6570 6f72 7473 2065 7272 file reports err\n-000386b0: 6f72 733a 222c 0a09 0909 0920 2020 2020 ors:\",..... \n-000386c0: 4024 6f75 745d 293b 0a09 2020 2020 6578 @$out]);.. ex\n-000386d0: 6974 2031 3b0a 097d 0a09 2477 724c 6174 it 1;..}..$wrLat\n-000386e0: 654c 696e 6b2d 3e63 6c6f 7365 2829 3b0a eLink->close();.\n-000386f0: 0a23 7072 696e 7420 222d 3330 2d5c 6e22 .#print \"-30-\\n\"\n-00038700: 3b0a 0969 6620 2873 6361 6c61 7228 2561 ;..if (scalar(%a\n-00038710: 6c6c 4261 636b 7570 4469 7273 2929 0a09 llBackupDirs))..\n-00038720: 7b0a 2370 7269 6e74 2022 2d33 312d 5c6e {.#print \"-31-\\n\n-00038730: 223b 0a09 2020 2020 2320 6765 6e65 7261 \";.. # genera\n-00038740: 7465 2069 6e66 6f72 6d61 7469 6f6e 2074 te information t\n-00038750: 6861 7420 7265 6665 7265 6e63 6573 2068 hat references h\n-00038760: 6176 6520 746f 2062 6520 7265 736f 6c76 ave to be resolv\n-00038770: 6564 0a09 2020 2020 6d79 2024 746f 203d ed.. my $to =\n-00038780: 2022 2474 6172 6765 7444 6972 2f2e 7374 \"$targetDir/.st\n-00038790: 6f72 6542 6163 6b75 704c 696e 6b73 2f6c oreBackupLinks/l\n-000387a0: 696e 6b54 6f22 3b0a 0920 2020 206c 6f63 inkTo\";.. loc\n-000387b0: 616c 202a 544f 3b0a 0920 2020 206f 7065 al *TO;.. ope\n-000387c0: 6e28 544f 2c20 223e 222c 2024 746f 2920 n(TO, \">\", $to) \n-000387d0: 6f72 0a09 0924 7072 4c6f 672d 3e70 7269 or...$prLog->pri\n-000387e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000387f0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00038800: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => [\"cannot o\n-00038810: 7065 6e20 3c24 746f 3e22 5d2c 0a09 0909 pen <$to>\"],....\n-00038820: 2020 2020 2020 272d 6164 6427 203d 3e20 '-add' => \n-00038830: 5b5f 5f46 494c 455f 5f2c 205f 5f4c 494e [__FILE__, __LIN\n-00038840: 455f 5f5d 2c0a 0909 0920 2020 2020 2027 E__],.... '\n-00038850: 2d65 7869 7427 203d 3e20 3129 3b0a 0a09 -exit' => 1);...\n-00038860: 2020 2020 6d79 2024 6162 643b 0a09 2020 my $abd;.. \n-00038870: 2020 666f 7265 6163 6820 2461 6264 2028 foreach $abd (\n-00038880: 2561 6c6c 4261 636b 7570 4469 7273 290a %allBackupDirs).\n-00038890: 0920 2020 207b 0a23 7072 696e 7420 222d . {.#print \"-\n-000388a0: 3332 2d24 6162 642d 5c6e 223b 0a09 096d 32-$abd-\\n\";...m\n-000388b0: 7920 2472 656c 7061 7468 203d 203a 3a72 y $relpath = ::r\n-000388c0: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi\n-000388d0: 722c 2024 6162 6429 3b0a 0909 6e65 7874 r, $abd);...next\n-000388e0: 2069 6620 2472 656c 7061 7468 2065 7120 if $relpath eq \n-000388f0: 272e 273b 0a09 0969 6620 2821 7072 696e '.';...if (!prin\n-00038900: 7420 544f 2022 2472 656c 7061 7468 5c6e t TO \"$relpath\\n\n-00038910: 2229 0a09 097b 0a09 0920 2020 2024 7072 \")...{... $pr\n-00038920: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00038930: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-00038940: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-00038950: 6e6f 7420 7772 6974 6520 746f 203c 2474 not write to <$t\n-00038960: 6f3e 225d 2c0a 0909 0909 2020 272d 6578 o>\"],..... '-ex\n-00038970: 6974 2720 3d3e 2031 293b 0a09 0920 2020 it' => 1);... \n-00038980: 206e 6578 743b 0a09 097d 0a09 096d 7920 next;...}...my \n-00038990: 2469 203d 2030 3b0a 0909 6c6f 6361 6c20 $i = 0;...local \n-000389a0: 2a46 524f 4d3b 0a09 096d 7920 2466 726f *FROM;...my $fro\n-000389b0: 6d20 3d20 2224 6162 642f 2e73 746f 7265 m = \"$abd/.store\n-000389c0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link\n-000389d0: 4672 6f6d 223b 0a09 0924 692b 2b20 7768 From\";...$i++ wh\n-000389e0: 696c 6520 2d65 2022 2466 726f 6d24 6922 ile -e \"$from$i\"\n-000389f0: 3b0a 0909 6f70 656e 2846 524f 4d2c 2022 ;...open(FROM, \"\n-00038a00: 3e22 2c20 2224 6672 6f6d 2469 2229 206f >\", \"$from$i\") o\n-00038a10: 720a 0909 2020 2020 2470 724c 6f67 2d3e r... $prLog->\n-00038a20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00038a30: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st\n-00038a40: 7227 203d 3e20 5b22 6361 6e6e 6f74 2077 r' => [\"cannot w\n-00038a50: 7269 7465 2074 6f20 3c24 6672 6f6d 2469 rite to <$from$i\n-00038a60: 3e22 5d2c 0a09 0909 0920 2027 2d65 7869 >\"],..... '-exi\n-00038a70: 7427 203d 3e20 3129 3b0a 0909 2472 656c t' => 1);...$rel\n-00038a80: 7061 7468 203d 203a 3a72 656c 5061 7468 path = ::relPath\n-00038a90: 2824 6162 642c 2024 7461 7267 6574 4469 ($abd, $targetDi\n-00038aa0: 7229 3b0a 0909 6e65 7874 2069 6620 2472 r);...next if $r\n-00038ab0: 656c 7061 7468 2065 7120 272e 273b 0a09 elpath eq '.';..\n-00038ac0: 0970 7269 6e74 2046 524f 4d20 2224 7265 .print FROM \"$re\n-00038ad0: 6c70 6174 685c 6e22 206f 720a 0909 2020 lpath\\n\" or... \n-00038ae0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00038af0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00038b00: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n-00038b10: 5b22 6361 6e6e 6f74 2077 7269 7465 2074 [\"cannot write t\n-00038b20: 6f20 3c24 6672 6f6d 2469 3e22 5d2c 0a09 o <$from$i>\"],..\n-00038b30: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-00038b40: 3129 3b0a 0909 636c 6f73 6528 4652 4f4d 1);...close(FROM\n-00038b50: 2920 6f72 0a09 0920 2020 2024 7072 4c6f ) or... $prLo\n-00038b60: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00038b70: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n-00038b80: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => [\"canno\n-00038b90: 7420 636c 6f73 6520 3c24 6672 6f6d 2469 t close <$from$i\n-00038ba0: 3e22 5d2c 0a09 0909 0920 2027 2d65 7869 >\"],..... '-exi\n-00038bb0: 7427 203d 3e20 3129 3b0a 0920 2020 207d t' => 1);.. }\n-00038bc0: 0a09 2020 2020 636c 6f73 6528 544f 2920 .. close(TO) \n-00038bd0: 6f72 0a09 0924 7072 4c6f 672d 3e70 7269 or...$prLog->pri\n-00038be0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00038bf0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00038c00: 7227 203d 3e20 5b22 6361 6e6e 6f74 2063 r' => [\"cannot c\n-00038c10: 6c6f 7365 203c 2474 6f3e 225d 2c0a 0909 lose <$to>\"],...\n-00038c20: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00038c30: 3e20 3129 3b0a 097d 0a20 2020 207d 0a23 > 1);..}. }.#\n-00038c40: 7072 696e 7420 222d 3333 2d5c 6e22 3b0a print \"-33-\\n\";.\n-00038c50: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############\n-00038c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00038c70: 2323 2323 2323 2323 2323 2323 0a23 2068 ############.# h\n-00038c80: 656c 7065 7220 7375 6272 6f75 7469 6e65 elper subroutine\n-00038c90: 7320 696e 2070 6163 6b61 6765 2073 6368 s in package sch\n-00038ca0: 6564 756c 6572 0a73 7562 2063 6861 6e67 eduler.sub chang\n-00038cb0: 6553 796d 6c69 6e6b 5065 726d 730a 7b0a eSymlinkPerms.{.\n-00038cc0: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g\n-00038cd0: 6964 2c20 2474 6172 6765 7444 6972 2c20 id, $targetDir, \n-00038ce0: 2466 696c 652c 2024 746d 7064 6972 2c20 $file, $tmpdir, \n-00038cf0: 2470 724c 6f67 2920 3d20 2840 5f29 3b0a $prLog) = (@_);.\n-00038d00: 2020 2020 2320 536f 6d65 204f 5320 2865 # Some OS (e\n-00038d10: 672e 204c 696e 7578 2920 646f 206e 6f74 g. Linux) do not\n-00038d20: 2063 6861 6e67 6520 7468 6520 7379 6d6c change the syml\n-00038d30: 696e 6b20 6974 7365 6c66 0a20 2020 2023 ink itself. #\n-00038d40: 2077 6865 6e20 6361 6c6c 696e 6720 7468 when calling th\n-00038d50: 6520 7379 7374 656d 2063 616c 6c20 6368 e system call ch\n-00038d60: 6d6f 642e 2054 6865 7920 6368 616e 6765 mod. They change\n-00038d70: 2074 6865 206f 776e 6572 7368 6970 0a20 the ownership. \n-00038d80: 2020 2023 206f 6620 7468 6520 6669 6c65 # of the file\n-00038d90: 2072 6566 6572 7265 6420 746f 2062 7920 referred to by \n-00038da0: 7468 6520 7379 6d70 6f6c 6963 206c 696e the sympolic lin\n-00038db0: 6b2e 0a20 2020 2023 2054 6865 7265 666f k.. # Therefo\n-00038dc0: 7265 2c20 6c63 686f 776e 2068 6173 2074 re, lchown has t\n-00038dd0: 6f20 6265 2075 7365 640a 2020 2020 6d79 o be used. my\n-00038de0: 2024 6368 6f77 6e20 3d0a 0966 6f72 6b50 $chown =..forkP\n-00038df0: 726f 632d 3e6e 6577 2827 2d65 7865 6327 roc->new('-exec'\n-00038e00: 203d 3e20 2763 686f 776e 272c 0a09 0920 => 'chown',... \n-00038e10: 2020 2020 2027 2d70 6172 616d 2720 3d3e '-param' =>\n-00038e20: 205b 272d 6827 2c20 2224 7569 643a 2467 ['-h', \"$uid:$g\n-00038e30: 6964 222c 0a09 0909 0920 2020 2224 7461 id\",..... \"$ta\n-00038e40: 7267 6574 4469 722f 2466 696c 6522 5d2c rgetDir/$file\"],\n-00038e50: 0a09 0920 2020 2020 2027 2d6f 7574 5261 ... '-outRa\n-00038e60: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => \"$tmpdi\n-00038e70: 722f 6368 6f77 6e2d 222c 0a09 0920 2020 r/chown-\",... \n-00038e80: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $\n-00038e90: 7072 4c6f 6729 3b0a 2020 2020 2463 686f prLog);. $cho\n-00038ea0: 776e 2d3e 7761 6974 2829 3b0a 0a23 0909 wn->wait();..#..\n-00038eb0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $\n-00038ec0: 6d74 696d 652c 2022 2464 6972 2f24 6669 mtime, \"$dir/$fi\n-00038ed0: 6c65 2220 6966 2024 7265 7365 7441 7469 le\" if $resetAti\n-00038ee0: 6d65 3b0a 2309 0909 7574 696d 6520 2461 me;.#...utime $a\n-00038ef0: 7469 6d65 2c20 246d 7469 6d65 2c20 2224 time, $mtime, \"$\n-00038f00: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file\"\n-00038f10: 3b0a 2309 0909 5e5e 2075 7469 6d65 2063 ;.#...^^ utime c\n-00038f20: 6861 6e67 6573 206f 7269 6769 6e61 6c20 hanges original \n-00038f30: 6669 6c65 210a 7d0a 0a23 2323 2323 2323 file!.}..#######\n-00038f40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00038f50: 2323 2323 2323 230a 7375 6220 7374 6f72 #######.sub stor\n-00038f60: 6553 796d 4c69 6e6b 496e 666f 730a 7b0a eSymLinkInfos.{.\n-00038f70: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g\n-00038f80: 6964 2c20 2474 6172 6765 7444 6972 2c20 id, $targetDir, \n-00038f90: 2466 696c 652c 2024 6465 762c 2024 696e $file, $dev, $in\n-00038fa0: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt\n-00038fb0: 696d 652c 0a09 2461 7469 6d65 2c20 2461 ime,..$atime, $a\n-00038fc0: 6b74 4669 6c65 6e61 6d65 2c20 2464 6562 ktFilename, $deb\n-00038fd0: 7567 4d6f 6465 2c20 2470 724c 6f67 2920 ugMode, $prLog) \n-00038fe0: 3d20 2840 5f29 3b0a 0a20 2020 2024 6d61 = (@_);.. $ma\n-00038ff0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n\n-00039000: 6f53 796d 4c69 6e6b 7328 2475 6964 2c20 oSymLinks($uid, \n-00039010: 2467 6964 293b 0a20 2020 2024 7072 4c6f $gid);. $prLo\n-00039020: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00039030: 203d 3e20 2744 272c 0a09 0920 2027 2d73 => 'D',... '-s\n-00039040: 7472 2720 3d3e 0a09 0920 205b 2263 7265 tr' =>... [\"cre\n-00039050: 6174 6564 2073 796d 626f 6c69 6320 6c69 ated symbolic li\n-00039060: 6e6b 203c 2474 6172 6765 7444 6972 2f24 nk <$targetDir/$\n-00039070: 6669 6c65 225d 290a 0969 6620 2824 6465 file\"])..if ($de\n-00039080: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);..\n-00039090: 2020 2020 2461 6b74 4669 6c65 6e61 6d65 $aktFilename\n-000390a0: 2d3e 7374 6f72 6553 796d 6c69 6e6b 2827 ->storeSymlink('\n-000390b0: 2d73 796d 6c69 6e6b 2720 3d3e 2024 6669 -symlink' => $fi\n-000390c0: 6c65 2c0a 0909 0920 2020 2020 2020 272d le,.... '-\n-000390d0: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,...\n-000390e0: 0920 2020 2020 2020 272d 696e 6f64 6527 . '-inode'\n-000390f0: 203d 3e20 2469 6e6f 6465 2c0a 0909 0920 => $inode,.... \n-00039100: 2020 2020 2020 272d 6374 696d 6527 203d '-ctime' =\n-00039110: 3e20 2463 7469 6d65 2c0a 0909 0920 2020 > $ctime,.... \n-00039120: 2020 2020 272d 6d74 696d 6527 203d 3e20 '-mtime' => \n-00039130: 246d 7469 6d65 2c0a 0909 0920 2020 2020 $mtime,.... \n-00039140: 2020 272d 6174 696d 6527 203d 3e20 2461 '-atime' => $a\n-00039150: 7469 6d65 2c0a 0909 0920 2020 2020 2020 time,.... \n-00039160: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,.\n-00039170: 0909 0920 2020 2020 2020 272d 6769 6427 ... '-gid'\n-00039180: 203d 3e20 2467 6964 293b 0a7d 0a0a 0a23 => $gid);.}...#\n-00039190: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000391a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000391b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000391c0: 230a 7061 636b 6167 6520 5374 6174 6973 #.package Statis\n-000391d0: 7469 633b 0a6f 7572 2040 4953 4120 3d20 tic;.our @ISA = \n-000391e0: 7177 2820 7374 6174 6973 7469 6344 656c qw( statisticDel\n-000391f0: 6574 654f 6c64 4261 636b 7570 4469 7273 eteOldBackupDirs\n-00039200: 2029 3b0a 0a23 2323 2323 2323 2323 2323 );..###########\n-00039210: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00039220: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-00039230: 6220 6e65 770a 7b0a 2020 2020 6d79 2024 b new.{. my $\n-00039240: 636c 6173 7320 3d20 7368 6966 743b 0a0a class = shift;..\n-00039250: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params)\n-00039260: 203d 2028 272d 7374 6172 7444 6174 6527 = ('-startDate'\n-00039270: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde\n-00039280: 662c 0a09 0920 2020 2027 2d61 6b74 4461 f,... '-aktDa\n-00039290: 7465 2720 2020 2020 2020 2020 2020 3d3e te' =>\n-000392a0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-000392b0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil\n-000392c0: 6527 203d 3e20 756e 6465 662c 2020 2020 e' => undef, \n-000392d0: 2023 2046 6c61 670a 0909 2020 2020 272d # Flag... '-\n-000392e0: 6578 6365 7074 5375 6666 6978 2720 2020 exceptSuffix' \n-000392f0: 2020 203d 3e20 756e 6465 662c 2020 2020 => undef, \n-00039300: 2023 2046 696c 656e 616d 6520 2869 6620 # Filename (if \n-00039310: 7365 7429 0a09 0920 2020 2027 2d70 724c set)... '-prL\n-00039320: 6f67 2720 2020 2020 2020 2020 2020 2020 og' \n-00039330: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-00039340: 272d 7072 6f67 7265 7373 5265 706f 7274 '-progressReport\n-00039350: 2720 2020 203d 3e20 756e 6465 662c 0a09 ' => undef,..\n-00039360: 0920 2020 2027 2d70 726f 6772 6573 7344 . '-progressD\n-00039370: 656c 7461 5469 6d65 2720 3d3e 2030 2c0a eltaTime' => 0,.\n-00039380: 0909 2020 2020 272d 7769 7468 5573 6572 .. '-withUser\n-00039390: 4772 6f75 7053 7461 7427 203d 3e20 756e GroupStat' => un\n-000393a0: 6465 662c 0a09 0920 2020 2027 2d75 7365 def,... '-use\n-000393b0: 7247 726f 7570 5374 6174 4669 6c65 2720 rGroupStatFile' \n-000393c0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... \n-000393d0: 272d 636f 6d70 7265 7373 2720 2020 2020 '-compress' \n-000393e0: 2020 2020 203d 3e20 756e 6465 660a 0909 => undef...\n-000393f0: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c\n-00039400: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams\n-00039410: 285c 2570 6172 616d 732c 205c 405f 2c20 (\\%params, \\@_, \n-00039420: 2753 7461 7469 7374 6963 3a3a 6e65 7727 'Statistic::new'\n-00039430: 2c0a 0909 0920 5b27 2d70 724c 6f67 272c ,.... ['-prLog',\n-00039440: 2027 2d70 726f 6772 6573 7352 6570 6f72 '-progressRepor\n-00039450: 7427 2c0a 0909 0920 2027 2d77 6974 6855 t',.... '-withU\n-00039460: 7365 7247 726f 7570 5374 6174 272c 2027 serGroupStat', '\n-00039470: 2d75 7365 7247 726f 7570 5374 6174 4669 -userGroupStatFi\n-00039480: 6c65 272c 0a09 0909 2020 272d 636f 6d70 le',.... '-comp\n-00039490: 7265 7373 275d 293b 0a20 2020 206d 7920 ress']);. my \n-000394a0: 2473 656c 6620 3d0a 0973 7461 7469 7374 $self =..statist\n-000394b0: 6963 4465 6c65 7465 4f6c 6442 6163 6b75 icDeleteOldBacku\n-000394c0: 7044 6972 732d 3e6e 6577 2827 2d70 724c pDirs->new('-prL\n-000394d0: 6f67 2720 3d3e 2024 7061 7261 6d73 7b27 og' => $params{'\n-000394e0: 2d70 724c 6f67 277d 2c0a 0909 0909 0920 -prLog'},...... \n-000394f0: 2027 2d6b 696e 6427 203d 3e20 2753 2729 '-kind' => 'S')\n-00039500: 3b0a 0a20 2020 2026 3a3a 7365 7450 6172 ;.. &::setPar\n-00039510: 616d 7344 6972 6563 7428 2473 656c 662c amsDirect($self,\n-00039520: 205c 2570 6172 616d 7329 3b0a 0a20 2020 \\%params);.. \n-00039530: 2024 7365 6c66 2d3e 7b27 7573 6572 4772 $self->{'userGr\n-00039540: 6f75 7046 6c61 6727 7d20 3d20 2824 7365 oupFlag'} = ($se\n-00039550: 6c66 2d3e 7b27 7769 7468 5573 6572 4772 lf->{'withUserGr\n-00039560: 6f75 7053 7461 7427 7d20 6f72 0a09 0909 oupStat'} or....\n-00039570: 0924 7365 6c66 2d3e 7b27 7573 6572 4772 .$self->{'userGr\n-00039580: 6f75 7053 7461 7446 696c 6527 7d29 203f oupStatFile'}) ?\n-00039590: 2031 203a 2075 6e64 6566 3b0a 0a20 2020 1 : undef;.. \n-000395a0: 2069 6620 2824 7365 6c66 2d3e 7b27 7573 if ($self->{'us\n-000395b0: 6572 4772 6f75 7046 6c61 6727 7d29 0a20 erGroupFlag'}). \n-000395c0: 2020 207b 0a09 6d79 2028 2575 6964 5374 {..my (%uidSt\n-000395d0: 6174 496e 6f64 6573 2920 3d20 2829 3b0a atInodes) = ();.\n-000395e0: 096d 7920 2825 7569 6453 7461 7453 697a .my (%uidStatSiz\n-000395f0: 6529 203d 2028 293b 0a09 6d79 2028 2567 e) = ();..my (%g\n-00039600: 6964 5374 6174 496e 6f64 6573 2920 3d20 idStatInodes) = \n-00039610: 2829 3b0a 096d 7920 2825 6769 6453 7461 ();..my (%gidSta\n-00039620: 7453 697a 6529 203d 2028 293b 0a09 2473 tSize) = ();..$s\n-00039630: 656c 662d 3e7b 2775 6964 5374 6174 496e elf->{'uidStatIn\n-00039640: 6f64 6573 277d 203d 205c 2575 6964 5374 odes'} = \\%uidSt\n-00039650: 6174 496e 6f64 6573 3b0a 0924 7365 6c66 atInodes;..$self\n-00039660: 2d3e 7b27 7569 6453 7461 7453 697a 6527 ->{'uidStatSize'\n-00039670: 7d20 3d20 5c25 7569 6453 7461 7453 697a } = \\%uidStatSiz\n-00039680: 653b 0a09 2473 656c 662d 3e7b 2767 6964 e;..$self->{'gid\n-00039690: 5374 6174 496e 6f64 6573 277d 203d 205c StatInodes'} = \\\n-000396a0: 2567 6964 5374 6174 496e 6f64 6573 3b0a %gidStatInodes;.\n-000396b0: 0924 7365 6c66 2d3e 7b27 6769 6453 7461 .$self->{'gidSta\n-000396c0: 7453 697a 6527 7d20 3d20 5c25 6769 6453 tSize'} = \\%gidS\n-000396d0: 7461 7453 697a 653b 0a20 2020 207d 0a0a tatSize;. }..\n-000396e0: 2020 2020 6d79 2028 2575 6964 536f 7572 my (%uidSour\n-000396f0: 6365 2920 3d20 2829 3b20 2020 2020 2020 ce) = (); \n-00039700: 2320 4861 7368 206d 6974 206b 6579 203d # Hash mit key =\n-00039710: 2075 6964 2c20 7661 6c75 6520 3d20 7369 uid, value = si\n-00039720: 7a65 0a20 2020 206d 7920 2825 6769 6453 ze. my (%gidS\n-00039730: 6f75 7263 6529 203d 2028 293b 2020 2020 ource) = (); \n-00039740: 2020 2023 2048 6173 6820 6d69 7420 6b65 # Hash mit ke\n-00039750: 7920 3d20 6769 642c 2076 616c 7565 203d y = gid, value =\n-00039760: 2073 697a 650a 2020 2020 6d79 2028 2575 size. my (%u\n-00039770: 6964 4261 636b 7570 2920 3d20 2829 3b20 idBackup) = (); \n-00039780: 2020 2020 2020 2320 4861 7368 206d 6974 # Hash mit\n-00039790: 206b 6579 203d 2075 6964 2c20 7661 6c75 key = uid, valu\n-000397a0: 6520 3d20 7369 7a65 0a20 2020 206d 7920 e = size. my \n-000397b0: 2825 6769 6442 6163 6b75 7029 203d 2028 (%gidBackup) = (\n-000397c0: 293b 2020 2020 2020 2023 2048 6173 6820 ); # Hash \n-000397d0: 6d69 7420 6b65 7920 3d20 6769 642c 2076 mit key = gid, v\n-000397e0: 616c 7565 203d 2073 697a 650a 2020 2020 alue = size. \n-000397f0: 2473 656c 662d 3e7b 2775 6964 536f 7572 $self->{'uidSour\n-00039800: 6365 277d 203d 205c 2575 6964 536f 7572 ce'} = \\%uidSour\n-00039810: 6365 3b0a 2020 2020 2473 656c 662d 3e7b ce;. $self->{\n-00039820: 2767 6964 536f 7572 6365 277d 203d 205c 'gidSource'} = \\\n-00039830: 2567 6964 536f 7572 6365 3b0a 2020 2020 %gidSource;. \n-00039840: 2473 656c 662d 3e7b 2775 6964 4261 636b $self->{'uidBack\n-00039850: 7570 277d 203d 205c 2575 6964 4261 636b up'} = \\%uidBack\n-00039860: 7570 3b0a 2020 2020 2473 656c 662d 3e7b up;. $self->{\n-00039870: 2767 6964 4261 636b 7570 277d 203d 205c 'gidBackup'} = \\\n-00039880: 2567 6964 4261 636b 7570 3b0a 0a20 2020 %gidBackup;.. \n-00039890: 2024 7365 6c66 2d3e 7b27 6e6f 4469 7273 $self->{'noDirs\n-000398a0: 277d 203d 2030 3b20 2020 2020 2023 206e '} = 0; # n\n-000398b0: 756d 6265 7220 6f66 2064 6972 6563 746f umber of directo\n-000398c0: 7269 6573 2069 6e20 6261 636b 7570 0a20 ries in backup. \n-000398d0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 4669 $self->{'noFi\n-000398e0: 6c65 7327 7d20 3d20 303b 2020 2020 2023 les'} = 0; #\n-000398f0: 206f 7665 7261 6c6c 206e 756d 6265 7220 overall number \n-00039900: 6f66 2066 696c 6573 2069 6e20 6261 636b of files in back\n-00039910: 7570 0a20 2020 2024 7365 6c66 2d3e 7b27 up. $self->{'\n-00039920: 6e6f 5379 6d4c 696e 6b73 277d 203d 2030 noSymLinks'} = 0\n-00039930: 3b20 2023 206e 756d 6265 7220 6f66 2073 ; # number of s\n-00039940: 796d 626f 6c69 6320 6c69 6e6b 7320 696e ymbolic links in\n-00039950: 2062 6163 6b75 700a 2020 2020 2473 656c backup. $sel\n-00039960: 662d 3e7b 276e 6f4c 6174 654c 696e 6b73 f->{'noLateLinks\n-00039970: 277d 203d 2030 3b20 2320 6e75 6d62 6572 '} = 0; # number\n-00039980: 206f 6620 6669 6c65 7320 7769 7468 206c of files with l\n-00039990: 6174 654c 696e 6b73 2069 6e0a 2020 2020 ateLinks in. \n-000399a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000399b0: 2020 2020 2020 2020 2020 2020 2320 6261 # ba\n-000399c0: 636b 7570 2c20 6561 6368 2062 6c6f 636b ckup, each block\n-000399d0: 6564 2066 696c 6520 6672 6167 6d65 6e74 ed file fragment\n-000399e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-000399f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039a00: 2023 2069 6e63 7265 6173 6573 2074 6869 # increases thi\n-00039a10: 7320 6e75 6d62 6572 0a20 2020 2024 7365 s number. $se\n-00039a20: 6c66 2d3e 7b27 6e6f 4e61 6d65 6450 6970 lf->{'noNamedPip\n-00039a30: 6573 277d 203d 2030 3b23 206e 756d 6265 es'} = 0;# numbe\n-00039a40: 7220 6f66 206e 616d 6564 2070 6970 6573 r of named pipes\n-00039a50: 2069 6e20 6261 636b 7570 0a20 2020 2024 in backup. $\n-00039a60: 7365 6c66 2d3e 7b27 6e6f 536f 636b 6574 self->{'noSocket\n-00039a70: 7327 7d20 3d20 303b 2020 2023 206e 756d s'} = 0; # num\n-00039a80: 6265 7220 6f66 2073 6f63 6b65 7473 2069 ber of sockets i\n-00039a90: 6e20 6261 636b 7570 0a20 2020 2024 7365 n backup. $se\n-00039aa0: 6c66 2d3e 7b27 6e6f 4368 6172 4465 7627 lf->{'noCharDev'\n-00039ab0: 7d20 3d20 303b 2020 2023 206e 756d 6265 } = 0; # numbe\n-00039ac0: 7220 6f66 2063 6861 7261 6374 6572 2064 r of character d\n-00039ad0: 6576 6963 6573 2069 6e20 6261 636b 7570 evices in backup\n-00039ae0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no\n-00039af0: 426c 6f63 6b44 6576 277d 203d 2030 3b20 BlockDev'} = 0; \n-00039b00: 2023 206e 756d 6265 7220 6f66 2062 6c6f # number of blo\n-00039b10: 636b 2064 6576 6963 6573 2069 6e20 6261 ck devices in ba\n-00039b20: 636b 7570 0a20 2020 2024 7365 6c66 2d3e ckup. $self->\n-00039b30: 7b27 6e6f 4d44 3565 6446 696c 6573 277d {'noMD5edFiles'}\n-00039b40: 203d 2030 3b23 206e 756d 6265 7220 6f66 = 0;# number of\n-00039b50: 2066 696c 6573 2077 6865 7265 2061 6e20 files where an \n-00039b60: 6d64 3520 7375 6d20 7761 730a 2020 2020 md5 sum was. \n-00039b70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039b80: 2020 2020 2020 2020 2020 2020 2320 6361 # ca\n-00039b90: 6c63 756c 6174 6564 2c20 6561 6368 2062 lculated, each b\n-00039ba0: 6c6f 636b 6564 2066 696c 6520 6672 6167 locked file frag\n-00039bb0: 6d65 6e74 0a20 2020 2020 2020 2020 2020 ment. \n-00039bc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039bd0: 2020 2020 2023 2069 6e63 7265 6173 6573 # increases\n-00039be0: 2074 6869 7320 6e75 6d62 6572 0a20 2020 this number. \n-00039bf0: 2024 7365 6c66 2d3e 7b27 6e6f 496e 7465 $self->{'noInte\n-00039c00: 726e 616c 4c69 6e6b 6564 4669 6c65 7327 rnalLinkedFiles'\n-00039c10: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o\n-00039c20: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we\n-00039c30: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. \n-00039c40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039c50: 2020 2020 2020 2020 2020 2320 696e 7369 # insi\n-00039c60: 6465 2074 6865 206a 7573 7420 7275 6e6e de the just runn\n-00039c70: 696e 6720 6261 636b 7570 0a20 2020 2024 ing backup. $\n-00039c80: 7365 6c66 2d3e 7b27 6e6f 4f6c 644c 696e self->{'noOldLin\n-00039c90: 6b65 6446 696c 6573 277d 203d 2030 3b23 kedFiles'} = 0;#\n-00039ca0: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files\n-00039cb0: 2077 6869 6368 2077 6572 6520 6c69 6e6b which were link\n-00039cc0: 6564 0a20 2020 2020 2020 2020 2020 2020 ed. \n-00039cd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039ce0: 2020 2023 2074 6f20 6f74 6865 7220 6261 # to other ba\n-00039cf0: 636b 7570 730a 2020 2020 2473 656c 662d ckups. $self-\n-00039d00: 3e7b 2775 6e63 6861 6e67 6564 4669 6c65 >{'unchangedFile\n-00039d10: 7327 7d20 3d20 303b 2320 7369 7a65 206f s'} = 0;# size o\n-00039d20: 6620 6669 6c65 732c 2077 6865 7265 2073 f files, where s\n-00039d30: 697a 6520 616e 640a 2020 2020 2020 2020 ize and. \n-00039d40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039d50: 2020 2020 2020 2020 2320 7469 6d65 7374 # timest\n-00039d60: 616d 7020 7765 7265 206e 6f74 2063 6861 amp were not cha\n-00039d70: 6e67 6564 2073 696e 6365 2074 6865 0a20 nged since the. \n-00039d80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039d90: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00039da0: 206c 6173 7420 6261 636b 7570 2c20 7468 last backup, th\n-00039db0: 6579 2077 6572 6520 6469 7265 6374 6c79 ey were directly\n-00039dc0: 206c 696e 6b65 640a 2020 2020 2020 2020 linked. \n-00039dd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039de0: 2020 2020 2020 2020 2320 616e 6420 7468 # and th\n-00039df0: 6520 6d64 3520 7375 6d20 7761 7320 6e6f e md5 sum was no\n-00039e00: 7420 6361 6c63 756c 6174 6564 2061 6761 t calculated aga\n-00039e10: 696e 0a20 2020 2024 7365 6c66 2d3e 7b27 in. $self->{'\n-00039e20: 6e6f 436f 7069 6564 4669 6c65 7327 7d20 noCopiedFiles'} \n-00039e30: 3d20 303b 2320 6e75 6d62 6572 206f 6620 = 0;# number of \n-00039e40: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were\n-00039e50: 2063 6f70 6965 640a 2020 2020 2473 656c copied. $sel\n-00039e60: 662d 3e7b 276e 6f43 6f6d 7072 6573 7365 f->{'noCompresse\n-00039e70: 6446 696c 6573 277d 203d 2030 3b23 206e dFiles'} = 0;# n\n-00039e80: 756d 6265 7220 6f66 2066 696c 6573 2077 umber of files w\n-00039e90: 6869 6368 2077 6572 6520 636f 6d70 7265 hich were compre\n-00039ea0: 7373 6564 0a20 2020 2024 7365 6c66 2d3e ssed. $self->\n-00039eb0: 7b27 6e6f 466f 726b 734d 4435 277d 203d {'noForksMD5'} =\n-00039ec0: 2030 3b20 2023 206e 756d 6265 7220 6f66 0; # number of\n-00039ed0: 2066 6f72 6b73 2074 6f20 6361 6c63 6c75 forks to calclu\n-00039ee0: 6174 6564 2061 6e20 6d64 350a 2020 2020 ated an md5. \n-00039ef0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks\n-00039f00: 4350 277d 203d 2030 3b20 2020 2320 6e75 CP'} = 0; # nu\n-00039f10: 6d62 6572 206f 6620 666f 726b 7320 746f mber of forks to\n-00039f20: 2063 6f70 7920 6120 6669 6c65 0a20 2020 copy a file. \n-00039f30: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n-00039f40: 7343 6f6d 7072 6573 7327 7d20 3d20 303b sCompress'} = 0;\n-00039f50: 2320 6e75 6d62 6572 206f 6620 666f 726b # number of fork\n-00039f60: 7320 746f 2063 6f6d 7072 6573 7320 6120 s to compress a \n-00039f70: 6669 6c65 0a20 2020 2024 7365 6c66 2d3e file. $self->\n-00039f80: 7b27 6e6f 4578 636c 7564 6552 756c 6527 {'noExcludeRule'\n-00039f90: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o\n-00039fa0: 6620 6669 6c65 7320 6578 636c 7564 6564 f files excluded\n-00039fb0: 2062 6563 6175 7365 206f 660a 2020 2020 because of. \n-00039fc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00039fd0: 2020 2020 2020 2020 2020 2020 2320 6578 # ex\n-00039fe0: 636c 7564 6520 7275 6c65 0a20 2020 2024 clude rule. $\n-00039ff0: 7365 6c66 2d3e 7b27 7369 7a65 4578 636c self->{'sizeExcl\n-0003a000: 7564 6552 756c 6527 7d20 3d20 303b 2320 udeRule'} = 0;# \n-0003a010: 7369 7a65 206f 6620 6669 6c65 7320 6578 size of files ex\n-0003a020: 636c 7564 6564 2062 6563 6175 7365 206f cluded because o\n-0003a030: 660a 2020 2020 2020 2020 2020 2020 2020 f. \n-0003a040: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a050: 2020 2320 6578 636c 7564 6520 7275 6c65 # exclude rule\n-0003a060: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no\n-0003a070: 496e 636c 7564 6552 756c 6527 7d20 3d20 IncludeRule'} = \n-0003a080: 303b 2320 6e75 6d62 6572 206f 6620 6669 0;# number of fi\n-0003a090: 6c65 7320 696e 636c 7564 6564 2062 6563 les included bec\n-0003a0a0: 6175 7365 206f 660a 2020 2020 2020 2020 ause of. \n-0003a0b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a0c0: 2020 2020 2020 2020 2320 696e 636c 7564 # includ\n-0003a0d0: 6520 7275 6c65 0a20 2020 2024 7365 6c66 e rule. $self\n-0003a0e0: 2d3e 7b27 7369 7a65 496e 636c 7564 6552 ->{'sizeIncludeR\n-0003a0f0: 756c 6527 7d20 3d20 303b 2320 7369 7a65 ule'} = 0;# size\n-0003a100: 206f 6620 6669 6c65 7320 696e 636c 7564 of files includ\n-0003a110: 6564 2062 6563 6175 7365 206f 660a 2020 ed because of. \n-0003a120: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a130: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-0003a140: 696e 636c 7564 6520 7275 6c65 0a20 2020 include rule. \n-0003a150: 2024 7365 6c66 2d3e 7b27 6e6f 426c 6f63 $self->{'noBloc\n-0003a160: 6b65 6446 696c 6573 277d 203d 2030 3b23 kedFiles'} = 0;#\n-0003a170: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files\n-0003a180: 2074 7265 6174 6564 2061 7320 626c 6f63 treated as bloc\n-0003a190: 6b65 640a 2020 2020 2020 2020 2020 2020 ked. \n-0003a1a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a1b0: 2020 2020 2320 6669 6c65 7320 2862 6563 # files (bec\n-0003a1c0: 6175 7365 206f 6620 626c 6f63 6b65 6420 ause of blocked \n-0003a1d0: 7275 6c65 7329 0a20 2020 2024 7365 6c66 rules). $self\n-0003a1e0: 2d3e 7b27 6e6f 436f 6d70 7243 6865 636b ->{'noComprCheck\n-0003a1f0: 436f 6d70 7227 7d20 3d20 303b 2320 6e75 Compr'} = 0;# nu\n-0003a200: 6d62 6572 206f 6620 6669 6c65 7320 636f mber of files co\n-0003a210: 6d70 7265 7373 6564 2062 6563 6175 7365 mpressed because\n-0003a220: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-0003a230: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a240: 2023 206f 6620 434f 4d50 5245 5353 494f # of COMPRESSIO\n-0003a250: 4e5f 4348 4543 4b20 7275 6c65 0a20 2020 N_CHECK rule. \n-0003a260: 2024 7365 6c66 2d3e 7b27 6e6f 436f 6d70 $self->{'noComp\n-0003a270: 7243 6865 636b 4370 277d 203d 2030 3b23 rCheckCp'} = 0;#\n-0003a280: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files\n-0003a290: 2063 6f70 6965 6420 6265 6361 7573 650a copied because.\n-0003a2a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a2b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a2c0: 2320 6f66 2043 4f4d 5052 4553 5349 4f4e # of COMPRESSION\n-0003a2d0: 5f43 4845 434b 2072 756c 650a 2020 2020 _CHECK rule. \n-0003a2e0: 2473 656c 662d 3e7b 276e 6f42 6c6f 636b $self->{'noBlock\n-0003a2f0: 436f 6d70 7243 6865 636b 436f 6d70 7227 ComprCheckCompr'\n-0003a300: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o\n-0003a310: 6620 6669 6c65 7320 696e 2062 6c6f 636b f files in block\n-0003a320: 6564 0a20 2020 2020 2020 2020 2020 2020 ed. \n-0003a330: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a340: 2020 2023 2066 696c 6573 2064 6972 6563 # files direc\n-0003a350: 746f 7269 6573 2063 6f6d 7072 6573 7365 tories compresse\n-0003a360: 6420 6265 6361 7573 650a 2020 2020 2020 d because. \n-0003a370: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a380: 2020 2020 2020 2020 2020 2320 6f66 2043 # of C\n-0003a390: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK\n-0003a3a0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no\n-0003a3b0: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC\n-0003a3c0: 7027 7d20 3d20 303b 2320 6e75 6d62 6572 p'} = 0;# number\n-0003a3d0: 206f 6620 6669 6c65 7320 696e 2062 6c6f of files in blo\n-0003a3e0: 636b 6564 0a20 2020 2020 2020 2020 2020 cked. \n-0003a3f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a400: 2020 2020 2023 2066 696c 6573 2064 6972 # files dir\n-0003a410: 6563 746f 7269 6573 2063 6f70 6965 6420 ectories copied \n-0003a420: 6265 6361 7573 650a 2020 2020 2020 2020 because. \n-0003a430: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a440: 2020 2020 2020 2020 2320 6f66 2043 4f4d # of COM\n-0003a450: 5052 4553 5349 4f4e 5f43 4845 434b 0a0a PRESSION_CHECK..\n-0003a460: 2020 2020 2320 6469 736b 2073 7061 6365 # disk space\n-0003a470: 2072 656c 6174 6564 0a20 2020 2024 7365 related. $se\n-0003a480: 6c66 2d3e 7b27 7375 6d4f 7269 6746 696c lf->{'sumOrigFil\n-0003a490: 6573 277d 203d 2030 3b23 2073 697a 6520 es'} = 0;# size \n-0003a4a0: 6f66 2066 696c 6573 2069 6e20 736f 7572 of files in sour\n-0003a4b0: 6365 2064 6972 0a20 2020 2024 7365 6c66 ce dir. $self\n-0003a4c0: 2d3e 7b27 7375 6d4d 4435 5375 6d27 7d20 ->{'sumMD5Sum'} \n-0003a4d0: 3d20 303b 2020 2023 206e 756d 6265 7220 = 0; # number \n-0003a4e0: 6f66 2062 7974 6573 2066 6f72 2077 6869 of bytes for whi\n-0003a4f0: 6368 2061 6e20 6d64 3520 7375 6d0a 2020 ch an md5 sum. \n-0003a500: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a510: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-0003a520: 7761 7320 6361 6c63 756c 6174 6564 0a20 was calculated. \n-0003a530: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4c $self->{'sumL\n-0003a540: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop\n-0003a550: 7927 7d20 3d20 303b 2320 7369 7a65 206f y'} = 0;# size o\n-0003a560: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we\n-0003a570: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. \n-0003a580: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a590: 2020 2020 2020 2020 2020 2320 696e 7369 # insi\n-0003a5a0: 6465 2074 6865 206a 7573 7420 7275 6e6e de the just runn\n-0003a5b0: 696e 6720 6261 636b 7570 0a20 2020 2024 ing backup. $\n-0003a5c0: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke\n-0003a5d0: 6449 6e74 6572 6e61 6c43 6f6d 7072 277d dInternalCompr'}\n-0003a5e0: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f\n-0003a5f0: 696c 6573 2077 6869 6368 2077 6572 6520 iles which were \n-0003a600: 6c69 6e6b 6564 0a20 2020 2020 2020 2020 linked. \n-0003a610: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a620: 2020 2020 2020 2023 2074 6f20 6f74 6865 # to othe\n-0003a630: 7220 6261 636b 7570 730a 2020 2020 2473 r backups. $s\n-0003a640: 656c 662d 3e7b 2773 756d 4c69 6e6b 6564 elf->{'sumLinked\n-0003a650: 4f6c 6443 6f70 7927 7d20 3d20 303b 2320 OldCopy'} = 0;# \n-0003a660: 7369 7a65 206f 6620 6669 6c65 7320 7768 size of files wh\n-0003a670: 6963 6820 7765 7265 206c 696e 6b65 6420 ich were linked \n-0003a680: 746f 0a20 2020 2020 2020 2020 2020 2020 to. \n-0003a690: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a6a0: 2020 2023 206f 7468 6572 2028 6f6c 6429 # other (old)\n-0003a6b0: 2062 6163 6b75 7073 0a20 2020 2024 7365 backups. $se\n-0003a6c0: 6c66 2d3e 7b27 7375 6d4c 696e 6b65 644f lf->{'sumLinkedO\n-0003a6d0: 6c64 436f 6d70 7227 7d20 3d20 303b 2320 ldCompr'} = 0;# \n-0003a6e0: 7369 7a65 206f 6620 6669 6c65 7320 7768 size of files wh\n-0003a6f0: 6963 6820 7765 7265 206c 696e 6b65 6420 ich were linked \n-0003a700: 746f 0a20 2020 2020 2020 2020 2020 2020 to. \n-0003a710: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a720: 2020 2023 206f 7468 6572 2028 6f6c 6429 # other (old)\n-0003a730: 2062 6163 6b75 7073 0a20 2020 2024 7365 backups. $se\n-0003a740: 6c66 2d3e 7b27 7375 6d55 6e63 6861 6e67 lf->{'sumUnchang\n-0003a750: 6564 436f 7079 277d 203d 2030 3b23 2073 edCopy'} = 0;# s\n-0003a760: 697a 6520 6f66 2066 696c 6573 2c20 7768 ize of files, wh\n-0003a770: 6572 6520 7369 7a65 2061 6e64 0a20 2020 ere size and. \n-0003a780: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a790: 2020 2020 2020 2020 2020 2020 2023 2074 # t\n-0003a7a0: 696d 6573 7461 6d70 2077 6572 6520 6e6f imestamp were no\n-0003a7b0: 7420 6368 616e 6765 6420 7369 6e63 6520 t changed since \n-0003a7c0: 7468 650a 2020 2020 2020 2020 2020 2020 the. \n-0003a7d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a7e0: 2020 2020 2320 6c61 7374 2062 6163 6b75 # last backu\n-0003a7f0: 702c 2074 6865 7920 7765 7265 2064 6972 p, they were dir\n-0003a800: 6563 746c 7920 6c69 6e6b 6564 0a20 2020 ectly linked. \n-0003a810: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a820: 2020 2020 2020 2020 2020 2020 2023 2061 # a\n-0003a830: 6e64 2074 6865 206d 6435 2073 756d 2077 nd the md5 sum w\n-0003a840: 6173 206e 6f74 2063 616c 6375 6c61 7465 as not calculate\n-0003a850: 6420 6167 6169 6e0a 2020 2020 2473 656c d again. $sel\n-0003a860: 662d 3e7b 2773 756d 556e 6368 616e 6765 f->{'sumUnchange\n-0003a870: 6443 6f6d 7072 277d 203d 2030 3b23 2073 dCompr'} = 0;# s\n-0003a880: 697a 6520 6f66 2066 696c 6573 2c20 7768 ize of files, wh\n-0003a890: 6572 6520 7369 7a65 2061 6e64 0a20 2020 ere size and. \n-0003a8a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a8b0: 2020 2020 2020 2020 2020 2020 2023 2074 # t\n-0003a8c0: 696d 6573 7461 6d70 2077 6572 6520 6e6f imestamp were no\n-0003a8d0: 7420 6368 616e 6765 6420 7369 6e63 6520 t changed since \n-0003a8e0: 7468 650a 2020 2020 2020 2020 2020 2020 the. \n-0003a8f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a900: 2020 2020 2320 6c61 7374 2062 6163 6b75 # last backu\n-0003a910: 702c 2074 6865 7920 7765 7265 2064 6972 p, they were dir\n-0003a920: 6563 746c 7920 6c69 6e6b 6564 0a20 2020 ectly linked. \n-0003a930: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a940: 2020 2020 2020 2020 2020 2020 2023 2061 # a\n-0003a950: 6e64 2074 6865 206d 6435 2073 756d 2077 nd the md5 sum w\n-0003a960: 6173 206e 6f74 2063 616c 6375 6c61 7465 as not calculate\n-0003a970: 6420 6167 6169 6e0a 2020 2020 2473 656c d again. $sel\n-0003a980: 662d 3e7b 2773 756d 4e65 7743 6f70 7927 f->{'sumNewCopy'\n-0003a990: 7d20 3d20 303b 2020 2320 7375 6d20 6f66 } = 0; # sum of\n-0003a9a0: 206e 6577 6c79 2063 6f70 7969 6564 2066 newly copyied f\n-0003a9b0: 696c 6573 2069 6e74 6f20 7468 650a 2020 iles into the. \n-0003a9c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003a9d0: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-0003a9e0: 6261 636b 7570 0a20 2020 2024 7365 6c66 backup. $self\n-0003a9f0: 2d3e 7b27 7375 6d4e 6577 436f 6d70 7227 ->{'sumNewCompr'\n-0003aa00: 7d20 3d20 303b 2023 2073 756d 206f 6620 } = 0; # sum of \n-0003aa10: 6e65 776c 7920 636f 6d70 7265 7373 6564 newly compressed\n-0003aa20: 2066 696c 6573 2069 6e74 6f0a 2020 2020 files into. \n-0003aa30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003aa40: 2020 2020 2020 2020 2020 2020 2320 7468 # th\n-0003aa50: 6520 6261 636b 7570 2028 636f 6d70 7265 e backup (compre\n-0003aa60: 7373 6564 2073 697a 6529 0a20 2020 2024 ssed size). $\n-0003aa70: 7365 6c66 2d3e 7b27 7375 6d4e 6577 436f self->{'sumNewCo\n-0003aa80: 6d70 724f 7269 6753 697a 6527 7d20 3d20 mprOrigSize'} = \n-0003aa90: 303b 2320 7375 6d20 6f66 206e 6577 7920 0;# sum of newy \n-0003aaa0: 636f 6d70 7265 7373 6564 2066 696c 6573 compressed files\n-0003aab0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-0003aac0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003aad0: 2023 2069 6e74 6f20 7468 6520 6261 636b # into the back\n-0003aae0: 7570 2028 756e 636f 6d70 7265 7373 6564 up (uncompressed\n-0003aaf0: 2073 697a 6529 0a0a 2020 2020 2473 656c size).. $sel\n-0003ab00: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum\n-0003ab10: 277d 203d 2030 3b0a 2020 2020 2473 656c '} = 0;. $sel\n-0003ab20: 662d 3e7b 2773 756d 4442 4d46 696c 6573 f->{'sumDBMFiles\n-0003ab30: 277d 203d 2030 3b0a 0a20 2020 2024 7365 '} = 0;.. $se\n-0003ab40: 6c66 2d3e 7b27 7469 6d65 5072 6f67 7252 lf->{'timeProgrR\n-0003ab50: 6570 6f72 7427 7d20 3d0a 0928 2473 656c eport'} =..($sel\n-0003ab60: 662d 3e7b 2770 726f 6772 6573 7344 656c f->{'progressDel\n-0003ab70: 7461 5469 6d65 277d 203e 2030 2920 3f20 taTime'} > 0) ? \n-0003ab80: 7469 6d65 203a 2030 3b0a 0a20 2020 2062 time : 0;.. b\n-0003ab90: 6c65 7373 2024 7365 6c66 2c20 2463 6c61 less $self, $cla\n-0003aba0: 7373 3b0a 7d0a 0a0a 2323 2323 2323 2323 ss;.}...########\n-0003abb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003abc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003abd0: 0a73 7562 2069 6e63 725f 6e6f 4465 6c65 .sub incr_noDele\n-0003abe0: 7465 644f 6c64 4469 7273 0a7b 0a20 2020 tedOldDirs.{. \n-0003abf0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-0003ac00: 743b 0a0a 2020 2020 2473 656c 662d 3e73 t;.. $self->s\n-0003ac10: 7461 7469 7374 6963 4465 6c65 7465 4f6c tatisticDeleteOl\n-0003ac20: 6442 6163 6b75 7044 6972 733a 3a69 6e63 dBackupDirs::inc\n-0003ac30: 725f 6e6f 4465 6c65 7465 644f 6c64 4469 r_noDeletedOldDi\n-0003ac40: 7273 2829 3b0a 7d0a 0a0a 2323 2323 2323 rs();.}...######\n-0003ac50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003ac60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003ac70: 2323 0a73 7562 2069 6e63 725f 6e6f 4469 ##.sub incr_noDi\n-0003ac80: 7273 0a7b 0a20 2020 206d 7920 2473 656c rs.{. my $sel\n-0003ac90: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m\n-0003aca0: 7920 2824 7569 642c 2024 6769 6429 203d y ($uid, $gid) =\n-0003acb0: 2040 5f3b 0a0a 2020 2020 2b2b 2473 656c @_;.. ++$sel\n-0003acc0: 662d 3e7b 276e 6f44 6972 7327 7d3b 0a0a f->{'noDirs'};..\n-0003acd0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{\n-0003ace0: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'}\n-0003acf0: 290a 2020 2020 7b0a 092b 2b24 7365 6c66 ). {..++$self\n-0003ad00: 2d3e 7b27 7569 6453 7461 7449 6e6f 6465 ->{'uidStatInode\n-0003ad10: 7327 7d2d 3e7b 2475 6964 7d3b 0a09 2b2b s'}->{$uid};..++\n-0003ad20: 2473 656c 662d 3e7b 2767 6964 5374 6174 $self->{'gidStat\n-0003ad30: 496e 6f64 6573 277d 2d3e 7b24 6769 647d Inodes'}->{$gid}\n-0003ad40: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...####\n-0003ad50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003ad60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003ad70: 2323 2323 0a73 7562 2061 6464 5f6e 6f4d ####.sub add_noM\n-0003ad80: 4435 6564 4669 6c65 730a 7b0a 2020 2020 D5edFiles.{. \n-0003ad90: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-0003ada0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{'\n-0003adb0: 6e6f 4d44 3565 6446 696c 6573 277d 202b noMD5edFiles'} +\n-0003adc0: 3d20 7368 6966 743b 0a7d 0a0a 0a23 2323 = shift;.}...###\n-0003add0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003ade0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003adf0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n\n-0003ae00: 6f53 796d 4c69 6e6b 730a 7b0a 2020 2020 oSymLinks.{. \n-0003ae10: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-0003ae20: 3b0a 2020 2020 6d79 2028 2475 6964 2c20 ;. my ($uid, \n-0003ae30: 2467 6964 2920 3d20 405f 3b0a 0a20 2020 $gid) = @_;.. \n-0003ae40: 202b 2b24 7365 6c66 2d3e 7b27 6e6f 5379 ++$self->{'noSy\n-0003ae50: 6d4c 696e 6b73 277d 3b0a 2020 2020 2473 mLinks'};. $s\n-0003ae60: 656c 662d 3e61 6464 5375 6d4f 7269 6746 elf->addSumOrigF\n-0003ae70: 696c 6573 2830 2c20 2475 6964 2c20 2467 iles(0, $uid, $g\n-0003ae80: 6964 293b 0a7d 0a0a 2323 2323 2323 2323 id);.}..########\n-0003ae90: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003aea0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003aeb0: 0a73 7562 2069 6e63 725f 6e6f 4c61 7465 .sub incr_noLate\n-0003aec0: 4c69 6e6b 730a 7b0a 2020 2020 6d79 2024 Links.{. my $\n-0003aed0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n-0003aee0: 2020 6d79 2028 2475 6964 2c20 2467 6964 my ($uid, $gid\n-0003aef0: 2c20 246e 2920 3d20 405f 3b0a 2020 2020 , $n) = @_;. \n-0003af00: 246e 203d 2031 2075 6e6c 6573 7320 6465 $n = 1 unless de\n-0003af10: 6669 6e65 6420 246e 3b0a 0a20 2020 2024 fined $n;.. $\n-0003af20: 7365 6c66 2d3e 7b27 6e6f 4c61 7465 4c69 self->{'noLateLi\n-0003af30: 6e6b 7327 7d20 2b3d 2024 6e3b 0a7d 0a0a nks'} += $n;.}..\n-0003af40: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003af50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003af60: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in\n-0003af70: 6372 5f6e 6f4e 616d 6564 5069 7065 730a cr_noNamedPipes.\n-0003af80: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n-0003af90: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my (\n-0003afa0: 2475 6964 2c20 2467 6964 2920 3d20 405f $uid, $gid) = @_\n-0003afb0: 3b0a 0a20 2020 202b 2b24 7365 6c66 2d3e ;.. ++$self->\n-0003afc0: 7b27 6e6f 4e61 6d65 6450 6970 6573 277d {'noNamedPipes'}\n-0003afd0: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add\n-0003afe0: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, \n-0003aff0: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}..\n-0003b000: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003b010: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b020: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in\n-0003b030: 6372 5f6e 6f53 6f63 6b65 7473 0a7b 0a20 cr_noSockets.{. \n-0003b040: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n-0003b050: 6966 743b 0a20 2020 206d 7920 2824 7569 ift;. my ($ui\n-0003b060: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;..\n-0003b070: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n\n-0003b080: 6f53 6f63 6b65 7473 277d 3b0a 2020 2020 oSockets'};. \n-0003b090: 2473 656c 662d 3e61 6464 5375 6d4f 7269 $self->addSumOri\n-0003b0a0: 6746 696c 6573 2830 2c20 2475 6964 2c20 gFiles(0, $uid, \n-0003b0b0: 2467 6964 293b 0a7d 0a0a 0a23 2323 2323 $gid);.}...#####\n-0003b0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b0e0: 2323 230a 7375 6220 696e 6372 5f6e 6f43 ###.sub incr_noC\n-0003b0f0: 6861 7244 6576 0a7b 0a20 2020 206d 7920 harDev.{. my \n-0003b100: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. \n-0003b110: 2020 206d 7920 2824 7569 642c 2024 6769 my ($uid, $gi\n-0003b120: 6429 203d 2040 5f3b 0a0a 2020 2020 2b2b d) = @_;.. ++\n-0003b130: 2473 656c 662d 3e7b 276e 6f43 6861 7244 $self->{'noCharD\n-0003b140: 6576 277d 3b0a 2020 2020 2473 656c 662d ev'};. $self-\n-0003b150: 3e61 6464 5375 6d4f 7269 6746 696c 6573 >addSumOrigFiles\n-0003b160: 2830 2c20 2475 6964 2c20 2467 6964 293b (0, $uid, $gid);\n-0003b170: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n-0003b180: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b190: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-0003b1a0: 6220 696e 6372 5f6e 6f42 6c6f 636b 4465 b incr_noBlockDe\n-0003b1b0: 760a 7b0a 2020 2020 6d79 2024 7365 6c66 v.{. my $self\n-0003b1c0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-0003b1d0: 2028 2475 6964 2c20 2467 6964 2920 3d20 ($uid, $gid) = \n-0003b1e0: 405f 3b0a 0a20 2020 202b 2b24 7365 6c66 @_;.. ++$self\n-0003b1f0: 2d3e 7b27 6e6f 426c 6f63 6b44 6576 277d ->{'noBlockDev'}\n-0003b200: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add\n-0003b210: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, \n-0003b220: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}..\n-0003b230: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003b240: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b250: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in\n-0003b260: 6372 5f6e 6f46 6f72 6b73 4d44 350a 7b0a cr_noForksMD5.{.\n-0003b270: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n-0003b280: 6869 6674 3b0a 2020 2020 2b2b 2473 656c hift;. ++$sel\n-0003b290: 662d 3e7b 276e 6f46 6f72 6b73 4d44 3527 f->{'noForksMD5'\n-0003b2a0: 7d3b 0a7d 0a0a 0a23 2323 2323 2323 2323 };.}...#########\n-0003b2b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b2c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-0003b2d0: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks\n-0003b2e0: 4350 0a7b 0a20 2020 206d 7920 2473 656c CP.{. my $sel\n-0003b2f0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m\n-0003b300: 7920 246e 203d 2073 6869 6674 3b0a 2020 y $n = shift;. \n-0003b310: 2020 246e 203d 2031 2075 6e6c 6573 7320 $n = 1 unless \n-0003b320: 6465 6669 6e65 6420 246e 3b0a 0a20 2020 defined $n;.. \n-0003b330: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n-0003b340: 7343 5027 7d20 2b3d 2024 6e3b 0a7d 0a0a sCP'} += $n;.}..\n-0003b350: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003b360: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b370: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in\n-0003b380: 6372 5f6e 6f46 6f72 6b73 436f 6d70 7265 cr_noForksCompre\n-0003b390: 7373 0a7b 0a20 2020 206d 7920 2473 656c ss.{. my $sel\n-0003b3a0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m\n-0003b3b0: 7920 246e 203d 2073 6869 6674 3b0a 2020 y $n = shift;. \n-0003b3c0: 2020 246e 203d 2031 2075 6e6c 6573 7320 $n = 1 unless \n-0003b3d0: 6465 6669 6e65 6420 246e 3b0a 0a20 2020 defined $n;.. \n-0003b3e0: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n-0003b3f0: 7343 6f6d 7072 6573 7327 7d20 2b3d 2024 sCompress'} += $\n-0003b400: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...#########\n-0003b410: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b420: 2323 2323 2323 2323 2323 2323 2323 230a ###############.\n-0003b430: 7375 6220 696e 6372 5f6e 6f45 7863 6c75 sub incr_noExclu\n-0003b440: 6465 5275 6c65 0a7b 0a20 2020 206d 7920 deRule.{. my \n-0003b450: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. \n-0003b460: 2020 206d 7920 2473 697a 6520 3d20 7368 my $size = sh\n-0003b470: 6966 743b 0a20 2020 202b 2b24 7365 6c66 ift;. ++$self\n-0003b480: 2d3e 7b27 6e6f 4578 636c 7564 6552 756c ->{'noExcludeRul\n-0003b490: 6527 7d3b 0a20 2020 2024 7365 6c66 2d3e e'};. $self->\n-0003b4a0: 7b27 7369 7a65 4578 636c 7564 6552 756c {'sizeExcludeRul\n-0003b4b0: 6527 7d20 2b3d 2024 7369 7a65 3b0a 7d0a e'} += $size;.}.\n-0003b4c0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n-0003b4d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b4e0: 2323 2323 2323 2323 2323 0a73 7562 2069 ##########.sub i\n-0003b4f0: 6e63 725f 6e6f 496e 636c 7564 6552 756c ncr_noIncludeRul\n-0003b500: 650a 7b0a 2020 2020 6d79 2024 7365 6c66 e.{. my $self\n-0003b510: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-0003b520: 2024 7369 7a65 203d 2073 6869 6674 3b0a $size = shift;.\n-0003b530: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n\n-0003b540: 6f49 6e63 6c75 6465 5275 6c65 277d 3b0a oIncludeRule'};.\n-0003b550: 2020 2020 2473 656c 662d 3e7b 2773 697a $self->{'siz\n-0003b560: 6549 6e63 6c75 6465 5275 6c65 277d 202b eIncludeRule'} +\n-0003b570: 3d20 2473 697a 653b 0a7d 0a0a 0a23 2323 = $size;.}...###\n-0003b580: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b590: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b5a0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n\n-0003b5b0: 6f42 6c6f 636b 6564 4669 6c65 730a 7b0a oBlockedFiles.{.\n-0003b5c0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s\n-0003b5d0: 6869 6674 3b0a 2020 2020 2b2b 2473 656c hift;. ++$sel\n-0003b5e0: 662d 3e7b 276e 6f42 6c6f 636b 6564 4669 f->{'noBlockedFi\n-0003b5f0: 6c65 7327 7d3b 0a7d 0a0a 0a23 2323 2323 les'};.}...#####\n-0003b600: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b610: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b620: 2323 230a 7375 6220 696e 6372 5f6e 6f43 ###.sub incr_noC\n-0003b630: 6f6d 7072 4368 6563 6b43 6f6d 7072 0a7b omprCheckCompr.{\n-0003b640: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n-0003b650: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se\n-0003b660: 6c66 2d3e 7b27 6e6f 436f 6d70 7243 6865 lf->{'noComprChe\n-0003b670: 636b 436f 6d70 7227 7d3b 0a7d 0a0a 0a23 ckCompr'};.}...#\n-0003b680: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b690: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b6a0: 2323 2323 2323 230a 7375 6220 696e 6372 #######.sub incr\n-0003b6b0: 5f6e 6f43 6f6d 7072 4368 6563 6b43 700a _noComprCheckCp.\n-0003b6c0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n-0003b6d0: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s\n-0003b6e0: 656c 662d 3e7b 276e 6f43 6f6d 7072 4368 elf->{'noComprCh\n-0003b6f0: 6563 6b43 7027 7d3b 0a7d 0a0a 0a23 2323 eckCp'};.}...###\n-0003b700: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b710: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b720: 2323 2323 230a 7375 6220 6164 6453 756d #####.sub addSum\n-0003b730: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC\n-0003b740: 6f6d 7072 0a7b 0a20 2020 206d 7920 2473 ompr.{. my $s\n-0003b750: 656c 6620 3d20 7368 6966 743b 0a20 2020 elf = shift;. \n-0003b760: 206d 7920 246e 203d 2073 6869 6674 3b0a my $n = shift;.\n-0003b770: 2020 2020 2473 656c 662d 3e7b 276e 6f42 $self->{'noB\n-0003b780: 6c6f 636b 436f 6d70 7243 6865 636b 436f lockComprCheckCo\n-0003b790: 6d70 7227 7d20 2b3d 2024 6e3b 0a7d 0a0a mpr'} += $n;.}..\n-0003b7a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003b7b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b7c0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad\n-0003b7d0: 6453 756d 426c 6f63 6b43 6f6d 7072 4368 dSumBlockComprCh\n-0003b7e0: 6563 6b43 700a 7b0a 2020 2020 6d79 2024 eckCp.{. my $\n-0003b7f0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. \n-0003b800: 2020 6d79 2024 6e20 3d20 7368 6966 743b my $n = shift;\n-0003b810: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no\n-0003b820: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC\n-0003b830: 7027 7d20 2b3d 2024 6e3b 0a7d 0a0a 0a23 p'} += $n;.}...#\n-0003b840: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b850: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b860: 2323 2323 2323 230a 7375 6220 6164 6446 #######.sub addF\n-0003b870: 7265 6564 5370 6163 650a 7b0a 2020 2020 reedSpace.{. \n-0003b880: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift\n-0003b890: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7374 ;.. $self->st\n-0003b8a0: 6174 6973 7469 6344 656c 6574 654f 6c64 atisticDeleteOld\n-0003b8b0: 4261 636b 7570 4469 7273 3a3a 6164 6446 BackupDirs::addF\n-0003b8c0: 7265 6564 5370 6163 6528 405f 293b 0a7d reedSpace(@_);.}\n-0003b8d0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-0003b8e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003b8f0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n-0003b900: 6164 6453 756d 4f72 6967 4669 6c65 7320 addSumOrigFiles \n-0003b910: 2020 2020 2020 2320 696e 2062 7974 650a # in byte.\n-0003b920: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self =\n-0003b930: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my (\n-0003b940: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi\n-0003b950: 6429 203d 2040 5f3b 0a0a 2020 2020 2473 d) = @_;.. $s\n-0003b960: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi\n-0003b970: 6c65 7327 7d20 2b3d 2024 7369 7a65 3b0a les'} += $size;.\n-0003b980: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{'\n-0003b990: 6e6f 4669 6c65 7327 7d3b 0a20 2020 2024 noFiles'};. $\n-0003b9a0: 7365 6c66 2d3e 7072 696e 7450 726f 6772 self->printProgr\n-0003b9b0: 6573 7352 6570 6f72 7428 290a 0969 6620 essReport()..if \n-0003b9c0: 2824 7365 6c66 2d3e 7b27 7072 6f67 7265 ($self->{'progre\n-0003b9d0: 7373 5265 706f 7274 277d 2061 6e64 0a09 ssReport'} and..\n-0003b9e0: 2020 2020 2473 656c 662d 3e7b 276e 6f46 $self->{'noF\n-0003b9f0: 696c 6573 277d 2025 2024 7365 6c66 2d3e iles'} % $self->\n-0003ba00: 7b27 7072 6f67 7265 7373 5265 706f 7274 {'progressReport\n-0003ba10: 277d 203d 3d20 3029 3b0a 0a20 2020 2069 '} == 0);.. i\n-0003ba20: 6620 2824 7365 6c66 2d3e 7b27 7573 6572 f ($self->{'user\n-0003ba30: 4772 6f75 7046 6c61 6727 7d29 0a20 2020 GroupFlag'}). \n-0003ba40: 207b 0a0a 092b 2b24 7365 6c66 2d3e 7b27 {...++$self->{'\n-0003ba50: 7569 6453 7461 7449 6e6f 6465 7327 7d2d uidStatInodes'}-\n-0003ba60: 3e7b 2475 6964 7d3b 0a09 2b2b 2473 656c >{$uid};..++$sel\n-0003ba70: 662d 3e7b 2767 6964 5374 6174 496e 6f64 f->{'gidStatInod\n-0003ba80: 6573 277d 2d3e 7b24 6769 647d 3b0a 0924 es'}->{$gid};..$\n-0003ba90: 7365 6c66 2d3e 7b27 7569 6453 7461 7453 self->{'uidStatS\n-0003baa0: 697a 6527 7d2d 3e7b 2475 6964 7d20 2b3d ize'}->{$uid} +=\n-0003bab0: 2024 7369 7a65 3b0a 0924 7365 6c66 2d3e $size;..$self->\n-0003bac0: 7b27 6769 6453 7461 7453 697a 6527 7d2d {'gidStatSize'}-\n-0003bad0: 3e7b 2467 6964 7d20 2b3d 2024 7369 7a65 >{$gid} += $size\n-0003bae0: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...####\n-0003baf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bb00: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bb10: 2323 2323 0a73 7562 2070 7269 6e74 5072 ####.sub printPr\n-0003bb20: 6f67 7265 7373 5265 706f 7274 0a7b 0a20 ogressReport.{. \n-0003bb30: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh\n-0003bb40: 6966 743b 0a0a 2020 2020 6966 2028 2473 ift;.. if ($s\n-0003bb50: 656c 662d 3e7b 2770 726f 6772 6573 7352 elf->{'progressR\n-0003bb60: 6570 6f72 7427 7d20 3e20 3029 0a20 2020 eport'} > 0). \n-0003bb70: 207b 0a09 2473 656c 662d 3e5f 5f70 7269 {..$self->__pri\n-0003bb80: 6e74 5072 6f67 7265 7373 5265 706f 7274 ntProgressReport\n-0003bb90: 2829 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 ();. }.}...##\n-0003bba0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bbb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bbc0: 2323 2323 2323 0a73 7562 2063 6865 636b ######.sub check\n-0003bbd0: 5072 696e 7454 696d 6550 726f 6772 6573 PrintTimeProgres\n-0003bbe0: 7352 6570 6f72 740a 7b0a 2020 2020 6d79 sReport.{. my\n-0003bbf0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-0003bc00: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self->\n-0003bc10: 7b27 7469 6d65 5072 6f67 7252 6570 6f72 {'timeProgrRepor\n-0003bc20: 7427 7d20 3e20 3020 616e 640a 0974 696d t'} > 0 and..tim\n-0003bc30: 6520 3e3d 2024 7365 6c66 2d3e 7b27 7469 e >= $self->{'ti\n-0003bc40: 6d65 5072 6f67 7252 6570 6f72 7427 7d20 meProgrReport'} \n-0003bc50: 2b20 2473 656c 662d 3e7b 2770 726f 6772 + $self->{'progr\n-0003bc60: 6573 7344 656c 7461 5469 6d65 277d 290a essDeltaTime'}).\n-0003bc70: 2020 2020 7b0a 0924 7365 6c66 2d3e 5f5f {..$self->__\n-0003bc80: 7072 696e 7450 726f 6772 6573 7352 6570 printProgressRep\n-0003bc90: 6f72 7428 293b 0a20 2020 207d 0a7d 0a0a ort();. }.}..\n-0003bca0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003bcb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bcc0: 2323 2323 2323 2323 230a 7375 6220 5f5f #########.sub __\n-0003bcd0: 7072 696e 7450 726f 6772 6573 7352 6570 printProgressRep\n-0003bce0: 6f72 740a 7b0a 2020 2020 6d79 2024 7365 ort.{. my $se\n-0003bcf0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. \n-0003bd00: 206d 7920 2473 203d 2024 7365 6c66 2d3e my $s = $self->\n-0003bd10: 7b27 7375 6d4e 6577 436f 6d70 7227 7d20 {'sumNewCompr'} \n-0003bd20: 2b20 2473 656c 662d 3e7b 2773 756d 4e65 + $self->{'sumNe\n-0003bd30: 7743 6f70 7927 7d3b 0a20 2020 2024 7365 wCopy'};. $se\n-0003bd40: 6c66 2d3e 7b27 7072 4c6f 6727 7d2d 3e70 lf->{'prLog'}->p\n-0003bd50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0003bd60: 2750 272c 0a09 0909 2020 2020 272d 7374 'P',.... '-st\n-0003bd70: 7227 203d 3e0a 0909 0920 2020 205b 2473 r' =>.... [$s\n-0003bd80: 656c 662d 3e7b 276e 6f46 696c 6573 277d elf->{'noFiles'}\n-0003bd90: 202e 2027 2066 696c 6573 2070 726f 6365 . ' files proce\n-0003bda0: 7373 6564 2028 2720 2e0a 0909 0920 2020 ssed (' ..... \n-0003bdb0: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada\n-0003bdc0: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum\n-0003bdd0: 4f72 6967 4669 6c65 7327 7d29 295b 305d OrigFiles'}))[0]\n-0003bde0: 202e 0a09 0909 2020 2020 2027 2c20 2720 ..... ', ' \n-0003bdf0: 2e0a 0909 0920 2020 2020 2826 3a3a 6875 ..... (&::hu\n-0003be00: 6d61 6e52 6561 6461 626c 6528 2473 2929 manReadable($s))\n-0003be10: 5b30 5d20 2e20 2729 2028 2720 2e0a 0909 [0] . ') (' ....\n-0003be20: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s\n-0003be30: 756d 4f72 6967 4669 6c65 7327 7d20 2e20 umOrigFiles'} . \n-0003be40: 272c 2027 202e 2024 7320 2e20 2729 275d ', ' . $s . ')']\n-0003be50: 293b 0a0a 2020 2020 2473 656c 662d 3e7b );.. $self->{\n-0003be60: 2774 696d 6550 726f 6772 5265 706f 7274 'timeProgrReport\n-0003be70: 277d 203d 2074 696d 650a 0969 6620 2473 '} = time..if $s\n-0003be80: 656c 662d 3e7b 2774 696d 6550 726f 6772 elf->{'timeProgr\n-0003be90: 5265 706f 7274 277d 203e 2030 3b0a 7d0a Report'} > 0;.}.\n-0003bea0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..##############\n-0003beb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bec0: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a\n-0003bed0: 6464 5375 6d4d 4435 5375 6d20 2020 2020 ddSumMD5Sum \n-0003bee0: 2020 2320 696e 2062 7974 650a 7b0a 2020 # in byte.{. \n-0003bef0: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi\n-0003bf00: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self->\n-0003bf10: 7b27 7375 6d4d 4435 5375 6d27 7d20 2b3d {'sumMD5Sum'} +=\n-0003bf20: 2073 6869 6674 3b0a 7d0a 0a0a 2323 2323 shift;.}...####\n-0003bf30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bf40: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003bf50: 2323 2323 0a73 7562 2061 6464 5375 6d4c ####.sub addSumL\n-0003bf60: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop\n-0003bf70: 7920 2020 2320 6279 7465 0a7b 0a20 2020 y # byte.{. \n-0003bf80: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-0003bf90: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{\n-0003bfa0: 2773 756d 4c69 6e6b 6564 496e 7465 726e 'sumLinkedIntern\n-0003bfb0: 616c 436f 7079 277d 202b 3d20 7368 6966 alCopy'} += shif\n-0003bfc0: 743b 0a20 2020 202b 2b24 7365 6c66 2d3e t;. ++$self->\n-0003bfd0: 7b27 6e6f 496e 7465 726e 616c 4c69 6e6b {'noInternalLink\n-0003bfe0: 6564 4669 6c65 7327 7d3b 0a7d 0a0a 0a23 edFiles'};.}...#\n-0003bff0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c000: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c010: 2323 2323 2323 230a 7375 6220 6164 6453 #######.sub addS\n-0003c020: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal\n-0003c030: 436f 6d70 7220 2020 2320 6279 7465 0a7b Compr # byte.{\n-0003c040: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n-0003c050: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel\n-0003c060: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn\n-0003c070: 7465 726e 616c 436f 6d70 7227 7d20 2b3d ternalCompr'} +=\n-0003c080: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s\n-0003c090: 656c 662d 3e7b 276e 6f49 6e74 6572 6e61 elf->{'noInterna\n-0003c0a0: 6c4c 696e 6b65 6446 696c 6573 277d 3b0a lLinkedFiles'};.\n-0003c0b0: 7d0a 0a0a 0a23 2323 2323 2323 2323 2323 }....###########\n-0003c0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c0d0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-0003c0e0: 6220 6164 6453 756d 4c69 6e6b 6564 4f6c b addSumLinkedOl\n-0003c0f0: 6443 6f70 7920 2020 2320 6279 7465 0a7b dCopy # byte.{\n-0003c100: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = \n-0003c110: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel\n-0003c120: 662d 3e7b 2773 756d 4c69 6e6b 6564 4f6c f->{'sumLinkedOl\n-0003c130: 6443 6f70 7927 7d20 2b3d 2073 6869 6674 dCopy'} += shift\n-0003c140: 3b0a 2020 2020 2b2b 2473 656c 662d 3e7b ;. ++$self->{\n-0003c150: 276e 6f4f 6c64 4c69 6e6b 6564 4669 6c65 'noOldLinkedFile\n-0003c160: 7327 7d3b 0a7d 0a0a 0a23 2323 2323 2323 s'};.}...#######\n-0003c170: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c180: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c190: 230a 7375 6220 6164 6453 756d 4c69 6e6b #.sub addSumLink\n-0003c1a0: 6564 4f6c 6443 6f6d 7072 2020 2023 2062 edOldCompr # b\n-0003c1b0: 7974 650a 7b0a 2020 2020 6d79 2024 7365 yte.{. my $se\n-0003c1c0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. \n-0003c1d0: 2024 7365 6c66 2d3e 7b27 7375 6d4c 696e $self->{'sumLin\n-0003c1e0: 6b65 644f 6c64 436f 6d70 7227 7d20 2b3d kedOldCompr'} +=\n-0003c1f0: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s\n-0003c200: 656c 662d 3e7b 276e 6f4f 6c64 4c69 6e6b elf->{'noOldLink\n-0003c210: 6564 4669 6c65 7327 7d3b 0a7d 0a0a 0a23 edFiles'};.}...#\n-0003c220: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c230: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c240: 2323 2323 2323 230a 7375 6220 6164 6453 #######.sub addS\n-0003c250: 756d 556e 6368 616e 6765 6443 6f70 7920 umUnchangedCopy \n-0003c260: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m\n-0003c270: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-0003c280: 0a0a 2020 2020 2473 656c 662d 3e7b 2773 .. $self->{'s\n-0003c290: 756d 556e 6368 616e 6765 6443 6f70 7927 umUnchangedCopy'\n-0003c2a0: 7d20 2b3d 2073 6869 6674 3b0a 2020 2020 } += shift;. \n-0003c2b0: 2b2b 2473 656c 662d 3e7b 2775 6e63 6861 ++$self->{'uncha\n-0003c2c0: 6e67 6564 4669 6c65 7327 7d3b 0a7d 0a0a ngedFiles'};.}..\n-0003c2d0: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-0003c2e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c2f0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad\n-0003c300: 6453 756d 556e 6368 616e 6765 6443 6f6d dSumUnchangedCom\n-0003c310: 7072 2020 2023 2062 7974 650a 7b0a 2020 pr # byte.{. \n-0003c320: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi\n-0003c330: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self->\n-0003c340: 7b27 7375 6d55 6e63 6861 6e67 6564 436f {'sumUnchangedCo\n-0003c350: 6d70 7227 7d20 2b3d 2073 6869 6674 3b0a mpr'} += shift;.\n-0003c360: 2020 2020 2b2b 2473 656c 662d 3e7b 2775 ++$self->{'u\n-0003c370: 6e63 6861 6e67 6564 4669 6c65 7327 7d3b nchangedFiles'};\n-0003c380: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n-0003c390: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c3a0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-0003c3b0: 6220 6164 6453 756d 4e65 7743 6f70 7920 b addSumNewCopy \n-0003c3c0: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m\n-0003c3d0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-0003c3e0: 0a20 2020 206d 7920 2461 203d 2073 6869 . my $a = shi\n-0003c3f0: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self->\n-0003c400: 7b27 7375 6d4e 6577 436f 7079 277d 202b {'sumNewCopy'} +\n-0003c410: 3d20 2461 203f 2024 6120 3a20 303b 0a20 = $a ? $a : 0;. \n-0003c420: 2020 202b 2b24 7365 6c66 2d3e 7b27 6e6f ++$self->{'no\n-0003c430: 436f 7069 6564 4669 6c65 7327 7d3b 0a7d CopiedFiles'};.}\n-0003c440: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-0003c450: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c460: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n-0003c470: 6164 6453 756d 4e65 7743 6f6d 7072 2020 addSumNewCompr \n-0003c480: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my\n-0003c490: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-0003c4a0: 2020 2020 6d79 2024 6131 203d 2073 6869 my $a1 = shi\n-0003c4b0: 6674 3b0a 2020 2020 6d79 2024 6132 203d ft;. my $a2 =\n-0003c4c0: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se\n-0003c4d0: 6c66 2d3e 7b27 7375 6d4e 6577 436f 6d70 lf->{'sumNewComp\n-0003c4e0: 7227 7d20 2b3d 2024 6131 203f 2024 6131 r'} += $a1 ? $a1\n-0003c4f0: 203a 2030 3b0a 2020 2020 2473 656c 662d : 0;. $self-\n-0003c500: 3e7b 2773 756d 4e65 7743 6f6d 7072 4f72 >{'sumNewComprOr\n-0003c510: 6967 5369 7a65 277d 202b 3d20 2461 3220 igSize'} += $a2 \n-0003c520: 3f20 2461 3220 3a20 303b 0a20 2020 202b ? $a2 : 0;. +\n-0003c530: 2b24 7365 6c66 2d3e 7b27 6e6f 436f 6d70 +$self->{'noComp\n-0003c540: 7265 7373 6564 4669 6c65 7327 7d3b 0a7d ressedFiles'};.}\n-0003c550: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-0003c560: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c570: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n-0003c580: 6164 6453 756d 4442 4d46 696c 6573 2020 addSumDBMFiles \n-0003c590: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m\n-0003c5a0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift;\n-0003c5b0: 0a0a 2020 2020 2473 656c 662d 3e7b 2773 .. $self->{'s\n-0003c5c0: 756d 4442 4d46 696c 6573 277d 202b 3d20 umDBMFiles'} += \n-0003c5d0: 7368 6966 743b 0a7d 0a0a 0a23 2323 2323 shift;.}...#####\n-0003c5e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c5f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c600: 2323 230a 7375 6220 7365 7453 697a 654d ###.sub setSizeM\n-0003c610: 4435 4368 6563 6b53 756d 0a7b 0a20 2020 D5CheckSum.{. \n-0003c620: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-0003c630: 743b 0a20 2020 206d 7920 246d 6435 4368 t;. my $md5Ch\n-0003c640: 6563 6b53 756d 203d 2073 6869 6674 3b0a eckSum = shift;.\n-0003c650: 2020 2020 6d79 2024 636f 6d70 7265 7373 my $compress\n-0003c660: 4d44 3546 696c 6520 3d20 7368 6966 743b MD5File = shift;\n-0003c670: 0a0a 2020 2020 6966 2028 2463 6f6d 7072 .. if ($compr\n-0003c680: 6573 734d 4435 4669 6c65 2065 7120 2779 essMD5File eq 'y\n-0003c690: 6573 2729 0a20 2020 207b 0a09 2473 656c es'). {..$sel\n-0003c6a0: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum\n-0003c6b0: 277d 203d 2028 7374 6174 2822 246d 6435 '} = (stat(\"$md5\n-0003c6c0: 4368 6563 6b53 756d 2e62 7a32 2229 295b CheckSum.bz2\"))[\n-0003c6d0: 375d 3b0a 2020 2020 7d0a 2020 2020 656c 7];. }. el\n-0003c6e0: 7365 0a20 2020 207b 0a09 2473 656c 662d se. {..$self-\n-0003c6f0: 3e7b 276d 6435 4368 6563 6b53 756d 277d >{'md5CheckSum'}\n-0003c700: 203d 2028 7374 6174 2824 6d64 3543 6865 = (stat($md5Che\n-0003c710: 636b 5375 6d29 295b 375d 3b0a 2020 2020 ckSum))[7];. \n-0003c720: 7d0a 7d0a 0a0a 2323 2323 2323 2323 2323 }.}...##########\n-0003c730: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c740: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s\n-0003c750: 7562 2073 6574 5573 6564 5369 7a65 5175 ub setUsedSizeQu\n-0003c760: 6575 6573 0a7b 0a20 2020 206d 7920 2473 eues.{. my $s\n-0003c770: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. \n-0003c780: 2020 2473 656c 662d 3e7b 276d 6178 5573 $self->{'maxUs\n-0003c790: 6564 436f 7079 5175 6575 6527 7d20 3d20 edCopyQueue'} = \n-0003c7a0: 7368 6966 743b 0a20 2020 2024 7365 6c66 shift;. $self\n-0003c7b0: 2d3e 7b27 6d61 7855 7365 6443 6f6d 7072 ->{'maxUsedCompr\n-0003c7c0: 5175 6575 6527 7d20 3d20 7368 6966 743b Queue'} = shift;\n-0003c7d0: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...###########\n-0003c7e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003c7f0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su\n-0003c800: 6220 7072 696e 740a 7b0a 2020 2020 6d79 b print.{. my\n-0003c810: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;.\n-0003c820: 0a20 2020 206d 7920 2825 7061 7261 6d73 . my (%params\n-0003c830: 2920 3d20 2827 2d65 7854 7970 6573 2720 ) = ('-exTypes' \n-0003c840: 3d3e 205b 5d0a 0909 2020 2020 293b 0a0a => []... );..\n-0003c850: 2020 2020 263a 3a63 6865 636b 4f62 6a65 &::checkObje\n-0003c860: 6374 5061 7261 6d73 285c 2570 6172 616d ctParams(\\%param\n-0003c870: 732c 205c 405f 2c20 2753 7461 7469 7374 s, \\@_, 'Statist\n-0003c880: 6963 3a3a 7072 696e 7427 2c20 5b27 2d65 ic::print', ['-e\n-0003c890: 7854 7970 6573 275d 293b 0a0a 2020 2020 xTypes']);.. \n-0003c8a0: 6d79 2024 6578 5479 7065 7320 3d20 2470 my $exTypes = $p\n-0003c8b0: 6172 616d 737b 272d 6578 5479 7065 7327 arams{'-exTypes'\n-0003c8c0: 7d3b 0a20 2020 206d 7920 2840 6578 5479 };. my (@exTy\n-0003c8d0: 7065 732c 2024 6574 293b 0a20 2020 206d pes, $et);. m\n-0003c8e0: 7920 2565 7854 7970 6573 4c69 6e65 7320 y %exTypesLines \n-0003c8f0: 3d20 2827 5327 203d 3e20 2773 6f63 6b65 = ('S' => 'socke\n-0003c900: 7427 2c0a 0909 0927 6227 203d 3e20 2762 t',....'b' => 'b\n-0003c910: 6c6f 636b 2073 7065 6369 616c 272c 0a09 lock special',..\n-0003c920: 0909 2763 2720 3d3e 2027 6368 6172 2073 ..'c' => 'char s\n-0003c930: 7065 6369 616c 272c 0a09 0909 2766 2720 pecial',....'f' \n-0003c940: 3d3e 2027 706c 6169 6e20 6669 6c65 272c => 'plain file',\n-0003c950: 0a09 0909 2770 2720 3d3e 2027 6e61 6d65 ....'p' => 'name\n-0003c960: 6420 7069 7065 272c 0a09 0909 276c 2720 d pipe',....'l' \n-0003c970: 3d3e 2027 7379 6d62 6f6c 6963 206c 696e => 'symbolic lin\n-0003c980: 6b27 293b 0a20 2020 2066 6f72 6561 6368 k');. foreach\n-0003c990: 2024 6574 2028 6b65 7973 2025 2465 7854 $et (keys %$exT\n-0003c9a0: 7970 6573 290a 2020 2020 7b0a 0970 7573 ypes). {..pus\n-0003c9b0: 6820 4065 7854 7970 6573 2c20 7370 7269 h @exTypes, spri\n-0003c9c0: 6e74 6628 2225 3333 7322 2c20 2265 7863 ntf(\"%33s\", \"exc\n-0003c9d0: 6c75 6465 6420 2220 2e0a 0909 0920 2020 luded \" ..... \n-0003c9e0: 2020 2020 2465 7854 7970 6573 4c69 6e65 $exTypesLine\n-0003c9f0: 737b 2465 747d 202e 0a09 0909 2020 2020 s{$et} ..... \n-0003ca00: 2020 2022 7320 2824 6574 2920 3d20 2229 \"s ($et) = \")\n-0003ca10: 202e 2024 2465 7854 7970 6573 7b24 6574 . $$exTypes{$et\n-0003ca20: 7d3b 0a20 2020 207d 0a0a 2020 2020 6d79 };. }.. my\n-0003ca30: 2028 406c 293b 0a20 2020 206d 7920 2824 (@l);. my ($\n-0003ca40: 7573 6572 2c24 7379 7374 656d 2c24 6375 user,$system,$cu\n-0003ca50: 7365 722c 2463 7379 7374 656d 2920 3d20 ser,$csystem) = \n-0003ca60: 7469 6d65 733b 0a20 2020 206d 7920 2824 times;. my ($\n-0003ca70: 7472 656e 6e29 203d 2022 2d2d 2d2d 2d2d trenn) = \"------\n-0003ca80: 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d 2d2d -+----------+---\n-0003ca90: 2d2d 2d2d 2d2d 2d22 3b0a 2020 2020 7075 -------\";. pu\n-0003caa0: 7368 2040 6c2c 2073 7072 696e 7466 2822 sh @l, sprintf(\"\n-0003cab0: 252d 3773 7c25 3130 737c 2531 3073 222c %-7s|%10s|%10s\",\n-0003cac0: 2022 205b 7365 635d 222c 2022 7573 6572 \" [sec]\", \"user\n-0003cad0: 222c 2022 7379 7374 656d 2229 3b0a 2020 \", \"system\");. \n-0003cae0: 2020 7075 7368 2040 6c2c 2022 2474 7265 push @l, \"$tre\n-0003caf0: 6e6e 223b 0a20 2020 2070 7573 6820 406c nn\";. push @l\n-0003cb00: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf(\"%-7s|\n-0003cb10: 2531 302e 3266 7c25 3130 2e32 6622 2c20 %10.2f|%10.2f\", \n-0003cb20: 2270 726f 6365 7373 222c 2024 7573 6572 \"process\", $user\n-0003cb30: 2c20 2473 7973 7465 6d29 3b0a 2020 2020 , $system);. \n-0003cb40: 7075 7368 2040 6c2c 2073 7072 696e 7466 push @l, sprintf\n-0003cb50: 2822 252d 3773 7c25 3130 2e32 667c 2531 (\"%-7s|%10.2f|%1\n-0003cb60: 302e 3266 222c 2022 6368 696c 6473 222c 0.2f\", \"childs\",\n-0003cb70: 2024 6375 7365 722c 2024 6373 7973 7465 $cuser, $csyste\n-0003cb80: 6d29 3b0a 2020 2020 7075 7368 2040 6c2c m);. push @l,\n-0003cb90: 2022 2474 7265 6e6e 223b 0a20 2020 206d \"$trenn\";. m\n-0003cba0: 7920 2824 752c 2024 7329 203d 2028 2463 y ($u, $s) = ($c\n-0003cbb0: 7573 6572 202b 2024 7573 6572 2c20 2463 user + $user, $c\n-0003cbc0: 7379 7374 656d 202b 2024 7379 7374 656d system + $system\n-0003cbd0: 293b 0a20 2020 2024 7520 3d20 2e31 2069 );. $u = .1 i\n-0003cbe0: 6620 2475 202b 2024 7320 3d3d 2030 3b20 f $u + $s == 0; \n-0003cbf0: 2020 2020 2020 2320 6176 6f69 6420 6469 # avoid di\n-0003cc00: 7669 7369 6f6e 2062 7920 7a65 726f 0a20 vision by zero. \n-0003cc10: 2020 206d 7920 2475 735f 7374 7220 3d20 my $us_str = \n-0003cc20: 2664 6174 6554 6f6f 6c73 3a3a 7661 6c54 &dateTools::valT\n-0003cc30: 6f53 7472 2827 2d73 6563 2720 3d3e 2069 oStr('-sec' => i\n-0003cc40: 6e74 2824 7520 2b20 2473 202b 202e 3529 nt($u + $s + .5)\n-0003cc50: 293b 0a20 2020 2070 7573 6820 406c 2c20 );. push @l, \n-0003cc60: 7370 7269 6e74 6628 2225 2d37 737c 2531 sprintf(\"%-7s|%1\n-0003cc70: 302e 3266 7c25 3130 2e32 6620 3d3e 2025 0.2f|%10.2f => %\n-0003cc80: 2e32 6620 2824 7573 5f73 7472 2922 2c20 .2f ($us_str)\", \n-0003cc90: 2273 756d 222c 0a09 0920 2020 2020 2475 \"sum\",... $u\n-0003cca0: 2c20 2473 2c20 2475 202b 2024 7329 3b0a , $s, $u + $s);.\n-0003ccb0: 0a20 2020 206d 7920 2473 7461 7274 4461 . my $startDa\n-0003ccc0: 7465 203d 2024 7365 6c66 2d3e 7b27 7374 te = $self->{'st\n-0003ccd0: 6172 7444 6174 6527 7d3b 0a20 2020 206d artDate'};. m\n-0003cce0: 7920 2840 7374 6172 7444 6174 6529 203d y (@startDate) =\n-0003ccf0: 2028 293b 0a20 2020 2069 6620 2824 7374 ();. if ($st\n-0003cd00: 6172 7444 6174 6529 0a20 2020 207b 0a09 artDate). {..\n-0003cd10: 7075 7368 2040 7374 6172 7444 6174 652c push @startDate,\n-0003cd20: 2027 2020 2020 2020 2020 2020 2070 7265 ' pre\n-0003cd30: 636f 6d6d 616e 6420 6475 7261 7469 6f6e command duration\n-0003cd40: 203d 2027 202e 0a09 2020 2020 2473 7461 = ' ... $sta\n-0003cd50: 7274 4461 7465 2d3e 6465 6c74 6149 6e53 rtDate->deltaInS\n-0003cd60: 7472 2827 2d73 6563 6f6e 6444 6174 6527 tr('-secondDate'\n-0003cd70: 203d 3e20 2473 656c 662d 3e7b 2761 6b74 => $self->{'akt\n-0003cd80: 4461 7465 277d 293b 0a20 2020 207d 0a0a Date'});. }..\n-0003cd90: 2020 2020 6d79 2024 6445 6e64 203d 2064 my $dEnd = d\n-0003cda0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 293b ateTools->new();\n-0003cdb0: 0a20 2020 206d 7920 2462 6163 6b75 7044 . my $backupD\n-0003cdc0: 7572 6174 696f 6e20 3d0a 0924 7365 6c66 uration =..$self\n-0003cdd0: 2d3e 7b27 616b 7444 6174 6527 7d2d 3e64 ->{'aktDate'}->d\n-0003cde0: 656c 7461 496e 5365 6373 2827 2d73 6563 eltaInSecs('-sec\n-0003cdf0: 6f6e 6444 6174 6527 203d 3e20 2464 456e ondDate' => $dEn\n-0003ce00: 6429 3b0a 2020 2020 2462 6163 6b75 7044 d);. $backupD\n-0003ce10: 7572 6174 696f 6e20 3d20 3120 6966 2028 uration = 1 if (\n-0003ce20: 2462 6163 6b75 7044 7572 6174 696f 6e20 $backupDuration \n-0003ce30: 3d3d 2030 293b 2020 2023 204d 696e 696d == 0); # Minim\n-0003ce40: 616c 6572 2057 6572 740a 0a20 2020 206d aler Wert.. m\n-0003ce50: 7920 2473 756d 5461 7267 6574 416c 6c20 y $sumTargetAll \n-0003ce60: 3d0a 0924 7365 6c66 2d3e 7b27 7375 6d4c =..$self->{'sumL\n-0003ce70: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop\n-0003ce80: 7927 7d20 2b0a 0924 7365 6c66 2d3e 7b27 y'} +..$self->{'\n-0003ce90: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna\n-0003cea0: 6c43 6f6d 7072 277d 202b 0a09 2473 656c lCompr'} +..$sel\n-0003ceb0: 662d 3e7b 2773 756d 4c69 6e6b 6564 4f6c f->{'sumLinkedOl\n-0003cec0: 6443 6f70 7927 7d20 2b0a 0924 7365 6c66 dCopy'} +..$self\n-0003ced0: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld\n-0003cee0: 436f 6d70 7227 7d20 2b0a 0924 7365 6c66 Compr'} +..$self\n-0003cef0: 2d3e 7b27 7375 6d4e 6577 436f 7079 277d ->{'sumNewCopy'}\n-0003cf00: 202b 0a09 2473 656c 662d 3e7b 2773 756d +..$self->{'sum\n-0003cf10: 4e65 7743 6f6d 7072 277d 3b0a 0a20 2020 NewCompr'};.. \n-0003cf20: 206d 7920 2473 756d 5461 7267 6574 4e65 my $sumTargetNe\n-0003cf30: 7720 3d20 2473 656c 662d 3e7b 2773 756d w = $self->{'sum\n-0003cf40: 4e65 7743 6f70 7927 7d20 2b20 2473 656c NewCopy'} + $sel\n-0003cf50: 662d 3e7b 2773 756d 4e65 7743 6f6d 7072 f->{'sumNewCompr\n-0003cf60: 277d 3b0a 0a20 2020 206d 7920 246e 6577 '};.. my $new\n-0003cf70: 5573 6564 5370 6163 6520 3d20 2473 756d UsedSpace = $sum\n-0003cf80: 5461 7267 6574 4e65 7720 2b20 2473 656c TargetNew + $sel\n-0003cf90: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum\n-0003cfa0: 277d 202d 0a09 2473 656c 662d 3e7b 2762 '} -..$self->{'b\n-0003cfb0: 7974 6573 277d 3b0a 2020 2020 6d79 2024 ytes'};. my $\n-0003cfc0: 6e65 7755 7365 6453 7061 6365 4875 6d61 newUsedSpaceHuma\n-0003cfd0: 6e3b 0a20 2020 2069 6620 2824 6e65 7755 n;. if ($newU\n-0003cfe0: 7365 6453 7061 6365 203e 3d20 3029 0a20 sedSpace >= 0). \n-0003cff0: 2020 207b 0a09 2824 6e65 7755 7365 6453 {..($newUsedS\n-0003d000: 7061 6365 4875 6d61 6e29 203d 2026 3a3a paceHuman) = &::\n-0003d010: 6875 6d61 6e52 6561 6461 626c 6528 246e humanReadable($n\n-0003d020: 6577 5573 6564 5370 6163 6529 3b0a 2020 ewUsedSpace);. \n-0003d030: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n-0003d040: 207b 0a09 2824 6e65 7755 7365 6453 7061 {..($newUsedSpa\n-0003d050: 6365 4875 6d61 6e29 203d 2026 3a3a 6875 ceHuman) = &::hu\n-0003d060: 6d61 6e52 6561 6461 626c 6528 2d20 246e manReadable(- $n\n-0003d070: 6577 5573 6564 5370 6163 6529 3b0a 0924 ewUsedSpace);..$\n-0003d080: 6e65 7755 7365 6453 7061 6365 4875 6d61 newUsedSpaceHuma\n-0003d090: 6e20 3d20 222d 246e 6577 5573 6564 5370 n = \"-$newUsedSp\n-0003d0a0: 6163 6548 756d 616e 223b 0a20 2020 207d aceHuman\";. }\n-0003d0b0: 0a0a 2020 2020 6d79 2028 4075 675f 6c6f .. my (@ug_lo\n-0003d0c0: 6729 203d 2028 293b 0a20 2020 206d 7920 g) = ();. my \n-0003d0d0: 2840 7567 5f66 696c 6529 203d 2028 293b (@ug_file) = ();\n-0003d0e0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self->\n-0003d0f0: 7b27 7573 6572 4772 6f75 7046 6c61 6727 {'userGroupFlag'\n-0003d100: 7d29 0a20 2020 207b 0a09 6d79 2024 6b3b }). {..my $k;\n-0003d110: 0a09 6d79 2024 7569 6453 7461 7449 6e6f ..my $uidStatIno\n-0003d120: 6465 7320 3d20 2473 656c 662d 3e7b 2775 des = $self->{'u\n-0003d130: 6964 5374 6174 496e 6f64 6573 277d 3b0a idStatInodes'};.\n-0003d140: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor\n-0003d150: 7420 7b24 6120 3c3d 3e20 2462 7d20 6b65 t {$a <=> $b} ke\n-0003d160: 7973 2025 2475 6964 5374 6174 496e 6f64 ys %$uidStatInod\n-0003d170: 6573 290a 097b 0a09 2020 2020 6d79 2024 es)..{.. my $\n-0003d180: 6e61 6d65 203d 2067 6574 7077 7569 6428 name = getpwuid(\n-0003d190: 246b 293b 0a09 2020 2020 246e 616d 6520 $k);.. $name \n-0003d1a0: 3d20 272d 2720 756e 6c65 7373 2024 6e61 = '-' unless $na\n-0003d1b0: 6d65 3b0a 0920 2020 2070 7573 6820 4075 me;.. push @u\n-0003d1c0: 675f 6c6f 672c 2073 7072 696e 7466 2822 g_log, sprintf(\"\n-0003d1d0: 5553 4552 2049 4e4f 4445 2020 2536 6420 USER INODE %6d \n-0003d1e0: 2d20 2539 7320 3d20 256c 7522 2c0a 0909 - %9s = %lu\",...\n-0003d1f0: 0909 2020 2024 6b2c 2024 6e61 6d65 2c20 .. $k, $name, \n-0003d200: 2424 7569 6453 7461 7449 6e6f 6465 737b $$uidStatInodes{\n-0003d210: 246b 7d29 3b0a 0920 2020 2070 7573 6820 $k});.. push \n-0003d220: 4075 675f 6669 6c65 2c20 2255 5345 525f @ug_file, \"USER_\n-0003d230: 494e 4f44 4520 246b 2024 6e61 6d65 2022 INODE $k $name \"\n-0003d240: 202e 2024 2475 6964 5374 6174 496e 6f64 . $$uidStatInod\n-0003d250: 6573 7b24 6b7d 3b0a 097d 0a09 6d79 2024 es{$k};..}..my $\n-0003d260: 7569 6453 7461 7453 697a 6520 3d20 2473 uidStatSize = $s\n-0003d270: 656c 662d 3e7b 2775 6964 5374 6174 5369 elf->{'uidStatSi\n-0003d280: 7a65 277d 3b0a 0966 6f72 6561 6368 2024 ze'};..foreach $\n-0003d290: 6b20 2873 6f72 7420 7b24 6120 3c3d 3e20 k (sort {$a <=> \n-0003d2a0: 2462 7d20 6b65 7973 2025 2475 6964 5374 $b} keys %$uidSt\n-0003d2b0: 6174 5369 7a65 290a 097b 0a09 2020 2020 atSize)..{.. \n-0003d2c0: 6d79 2024 6e61 6d65 203d 2067 6574 7077 my $name = getpw\n-0003d2d0: 7569 6428 246b 293b 0a09 2020 2020 246e uid($k);.. $n\n-0003d2e0: 616d 6520 3d20 272d 2720 756e 6c65 7373 ame = '-' unless\n-0003d2f0: 2024 6e61 6d65 3b0a 0920 2020 2070 7573 $name;.. pus\n-0003d300: 6820 4075 675f 6c6f 672c 2073 7072 696e h @ug_log, sprin\n-0003d310: 7466 2822 5553 4552 2053 495a 4520 2020 tf(\"USER SIZE \n-0003d320: 2536 6420 2d20 2539 7320 3d20 2573 2028 %6d - %9s = %s (\n-0003d330: 256c 7529 222c 0a09 0909 0920 2024 6b2c %lu)\",..... $k,\n-0003d340: 2024 6e61 6d65 2c0a 0909 0909 2020 2826 $name,..... (&\n-0003d350: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable(\n-0003d360: 2424 7569 6453 7461 7453 697a 657b 246b $$uidStatSize{$k\n-0003d370: 7d29 295b 305d 2c0a 0909 0909 2020 2424 }))[0],..... $$\n-0003d380: 7569 6453 7461 7453 697a 657b 246b 7d29 uidStatSize{$k})\n-0003d390: 3b0a 0920 2020 2070 7573 6820 4075 675f ;.. push @ug_\n-0003d3a0: 6669 6c65 2c20 2255 5345 525f 5349 5a45 file, \"USER_SIZE\n-0003d3b0: 2024 6b20 246e 616d 6520 2220 2e20 2424 $k $name \" . $$\n-0003d3c0: 7569 6453 7461 7453 697a 657b 246b 7d3b uidStatSize{$k};\n-0003d3d0: 0a09 7d0a 0a09 6d79 2024 6769 6453 7461 ..}...my $gidSta\n-0003d3e0: 7449 6e6f 6465 7320 3d20 2473 656c 662d tInodes = $self-\n-0003d3f0: 3e7b 2767 6964 5374 6174 496e 6f64 6573 >{'gidStatInodes\n-0003d400: 277d 3b0a 0966 6f72 6561 6368 2024 6b20 '};..foreach $k \n-0003d410: 2873 6f72 7420 7b24 6120 3c3d 3e20 2462 (sort {$a <=> $b\n-0003d420: 7d20 6b65 7973 2025 2467 6964 5374 6174 } keys %$gidStat\n-0003d430: 496e 6f64 6573 290a 097b 0a09 2020 2020 Inodes)..{.. \n-0003d440: 6d79 2024 6772 6f75 7020 3d20 6765 7467 my $group = getg\n-0003d450: 7267 6964 2824 6b29 3b0a 0920 2020 2024 rgid($k);.. $\n-0003d460: 6772 6f75 7020 3d20 272d 2720 756e 6c65 group = '-' unle\n-0003d470: 7373 2024 6772 6f75 703b 0a09 2020 2020 ss $group;.. \n-0003d480: 7075 7368 2040 7567 5f6c 6f67 2c20 7370 push @ug_log, sp\n-0003d490: 7269 6e74 6628 2247 524f 5550 2049 4e4f rintf(\"GROUP INO\n-0003d4a0: 4445 2025 3664 202d 2025 3973 203d 2025 DE %6d - %9s = %\n-0003d4b0: 6c75 222c 0a09 0909 0920 2020 246b 2c20 lu\",..... $k, \n-0003d4c0: 2467 726f 7570 2c20 2424 6769 6453 7461 $group, $$gidSta\n-0003d4d0: 7449 6e6f 6465 737b 246b 7d29 3b0a 0920 tInodes{$k});.. \n-0003d4e0: 2020 2070 7573 6820 4075 675f 6669 6c65 push @ug_file\n-0003d4f0: 2c20 2247 524f 5550 5f49 4e4f 4445 2024 , \"GROUP_INODE $\n-0003d500: 6b20 2467 726f 7570 2022 202e 2024 2467 k $group \" . $$g\n-0003d510: 6964 5374 6174 496e 6f64 6573 7b24 6b7d idStatInodes{$k}\n-0003d520: 3b0a 097d 0a09 6d79 2024 6769 6453 7461 ;..}..my $gidSta\n-0003d530: 7453 697a 6520 3d20 2473 656c 662d 3e7b tSize = $self->{\n-0003d540: 2767 6964 5374 6174 5369 7a65 277d 3b0a 'gidStatSize'};.\n-0003d550: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor\n-0003d560: 7420 7b24 6120 3c3d 3e20 2462 7d20 6b65 t {$a <=> $b} ke\n-0003d570: 7973 2025 2467 6964 5374 6174 5369 7a65 ys %$gidStatSize\n-0003d580: 290a 097b 0a09 2020 2020 6d79 2024 6772 )..{.. my $gr\n-0003d590: 6f75 7020 3d20 6765 7467 7267 6964 2824 oup = getgrgid($\n-0003d5a0: 6b29 3b0a 0920 2020 2024 6772 6f75 7020 k);.. $group \n-0003d5b0: 3d20 272d 2720 756e 6c65 7373 2024 6772 = '-' unless $gr\n-0003d5c0: 6f75 703b 0a09 2020 2020 7075 7368 2040 oup;.. push @\n-0003d5d0: 7567 5f6c 6f67 2c20 7370 7269 6e74 6628 ug_log, sprintf(\n-0003d5e0: 2247 524f 5550 2053 495a 4520 2025 3664 \"GROUP SIZE %6d\n-0003d5f0: 202d 2025 3973 203d 2025 7320 2825 6c75 - %9s = %s (%lu\n-0003d600: 2922 2c0a 0909 0909 2020 246b 2c20 2467 )\",..... $k, $g\n-0003d610: 726f 7570 2c0a 0909 0909 2020 2826 3a3a roup,..... (&::\n-0003d620: 6875 6d61 6e52 6561 6461 626c 6528 2424 humanReadable($$\n-0003d630: 6769 6453 7461 7453 697a 657b 246b 7d29 gidStatSize{$k})\n-0003d640: 295b 305d 2c0a 0909 0909 2020 2424 6769 )[0],..... $$gi\n-0003d650: 6453 7461 7453 697a 657b 246b 7d29 3b0a dStatSize{$k});.\n-0003d660: 0920 2020 2070 7573 6820 4075 675f 6669 . push @ug_fi\n-0003d670: 6c65 2c20 2247 524f 5550 5f53 495a 4520 le, \"GROUP_SIZE \n-0003d680: 246b 2024 6772 6f75 7020 2220 2e20 2424 $k $group \" . $$\n-0003d690: 6769 6453 7461 7453 697a 657b 246b 7d3b gidStatSize{$k};\n-0003d6a0: 0a09 7d0a 0a23 0970 7269 6e74 2022 2323 ..}..#.print \"##\n-0003d6b0: 2323 2323 2323 2323 2323 2323 2323 235c ###############\\\n-0003d6c0: 6e22 3b0a 2309 7072 696e 7420 6a6f 696e n\";.#.print join\n-0003d6d0: 2822 5c6e 222c 2040 7567 5f6c 6f67 292c (\"\\n\", @ug_log),\n-0003d6e0: 2022 5c6e 223b 0a23 0970 7269 6e74 2022 \"\\n\";.#.print \"\n-0003d6f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003d700: 235c 6e22 3b0a 2309 7072 696e 7420 6a6f #\\n\";.#.print jo\n-0003d710: 696e 2822 5c6e 222c 2040 7567 5f66 696c in(\"\\n\", @ug_fil\n-0003d720: 6529 2c20 225c 6e22 3b0a 0a09 6d79 2024 e), \"\\n\";...my $\n-0003d730: 6669 6c65 203d 2024 7365 6c66 2d3e 7b27 file = $self->{'\n-0003d740: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil\n-0003d750: 6527 7d3b 0a09 6966 2028 2466 696c 6529 e'};..if ($file)\n-0003d760: 0a09 7b0a 0920 2020 206c 6f63 616c 202a ..{.. local *\n-0003d770: 4649 4c45 3b0a 0920 2020 2026 3a3a 6368 FILE;.. &::ch\n-0003d780: 6563 6b44 656c 5379 6d4c 696e 6b28 2466 eckDelSymLink($f\n-0003d790: 696c 652c 2024 7072 4c6f 672c 2030 7830 ile, $prLog, 0x0\n-0003d7a0: 3129 3b0a 0920 2020 2075 6e6c 6573 7320 1);.. unless \n-0003d7b0: 286f 7065 6e28 4649 4c45 2c20 223e 2024 (open(FILE, \"> $\n-0003d7c0: 6669 6c65 2229 290a 0920 2020 207b 0a09 file\")).. {..\n-0003d7d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0003d7e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-0003d7f0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0003d800: 3e20 5b22 6361 6e6e 6f74 2077 7269 7465 > [\"cannot write\n-0003d810: 2073 7461 7469 7374 6963 2074 6f20 3c24 statistic to <$\n-0003d820: 6669 6c65 3e22 5d29 3b0a 0909 676f 746f file>\"]);...goto\n-0003d830: 2065 6e64 5569 6447 6964 3b0a 0920 2020 endUidGid;.. \n-0003d840: 207d 0a09 2020 2020 7072 696e 7420 4649 }.. print FI\n-0003d850: 4c45 206a 6f69 6e28 225c 6e22 2c20 4075 LE join(\"\\n\", @u\n-0003d860: 675f 6669 6c65 292c 2022 5c6e 223b 0a09 g_file), \"\\n\";..\n-0003d870: 2020 2020 636c 6f73 6528 4649 4c45 293b close(FILE);\n-0003d880: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-0003d890: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-0003d8a0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' \n-0003d8b0: 3d3e 205b 2270 7269 6e74 6564 2075 7365 => [\"printed use\n-0003d8c0: 7247 726f 7570 5374 6174 4669 6c65 203c rGroupStatFile <\n-0003d8d0: 2466 696c 653e 225d 293b 0a09 7d0a 2020 $file>\"]);..}. \n-0003d8e0: 2020 2020 656e 6455 6964 4769 643a 3b0a endUidGid:;.\n-0003d8f0: 2020 2020 7d0a 0a20 2020 206d 7920 2840 }.. my (@\n-0003d900: 636f 6d70 7243 6865 636b 2920 3d20 2829 comprCheck) = ()\n-0003d910: 3b0a 2020 2020 6966 2028 2473 656c 662d ;. if ($self-\n-0003d920: 3e7b 276e 6f43 6f6d 7072 4368 6563 6b43 >{'noComprCheckC\n-0003d930: 6f6d 7072 277d 202b 2024 7365 6c66 2d3e ompr'} + $self->\n-0003d940: 7b27 6e6f 436f 6d70 7243 6865 636b 4370 {'noComprCheckCp\n-0003d950: 277d 203e 2030 290a 2020 2020 7b0a 0970 '} > 0). {..p\n-0003d960: 7573 6820 4063 6f6d 7072 4368 6563 6b2c ush @comprCheck,\n-0003d970: 0a09 2763 6f6d 7072 2064 7565 2074 6f20 ..'compr due to \n-0003d980: 434f 4d50 5245 5353 494f 4e5f 4348 4543 COMPRESSION_CHEC\n-0003d990: 4b20 3d20 2720 2e20 2473 656c 662d 3e7b K = ' . $self->{\n-0003d9a0: 276e 6f43 6f6d 7072 4368 6563 6b43 6f6d 'noComprCheckCom\n-0003d9b0: 7072 277d 2c0a 0927 2020 2063 7020 6475 pr'},..' cp du\n-0003d9c0: 6520 746f 2043 4f4d 5052 4553 5349 4f4e e to COMPRESSION\n-0003d9d0: 5f43 4845 434b 203d 2027 202e 2024 7365 _CHECK = ' . $se\n-0003d9e0: 6c66 2d3e 7b27 6e6f 436f 6d70 7243 6865 lf->{'noComprChe\n-0003d9f0: 636b 4370 277d 3b0a 2020 2020 7d0a 2020 ckCp'};. }. \n-0003da00: 2020 6d79 2028 4062 6c6f 636b 436f 6d70 my (@blockComp\n-0003da10: 7243 6865 636b 2920 3d20 2829 3b0a 2020 rCheck) = ();. \n-0003da20: 2020 6966 2028 2473 656c 662d 3e7b 276e if ($self->{'n\n-0003da30: 6f42 6c6f 636b 436f 6d70 7243 6865 636b oBlockComprCheck\n-0003da40: 436f 6d70 7227 7d20 2b20 2473 656c 662d Compr'} + $self-\n-0003da50: 3e7b 276e 6f42 6c6f 636b 436f 6d70 7243 >{'noBlockComprC\n-0003da60: 6865 636b 4370 277d 203e 2030 290a 2020 heckCp'} > 0). \n-0003da70: 2020 7b0a 0970 7573 6820 4062 6c6f 636b {..push @block\n-0003da80: 436f 6d70 7243 6865 636b 2c0a 0927 626c ComprCheck,..'bl\n-0003da90: 6f63 6b65 6446 696c 6573 3a20 636f 6d70 ockedFiles: comp\n-0003daa0: 2043 4f4d 5052 5f43 4845 434b 203d 2027 COMPR_CHECK = '\n-0003dab0: 202e 2024 7365 6c66 2d3e 7b27 6e6f 426c . $self->{'noBl\n-0003dac0: 6f63 6b43 6f6d 7072 4368 6563 6b43 6f6d ockComprCheckCom\n-0003dad0: 7072 277d 2c0a 0927 2020 626c 6f63 6b65 pr'},..' blocke\n-0003dae0: 6446 696c 6573 3a20 6370 2043 4f4d 5052 dFiles: cp COMPR\n-0003daf0: 5f43 4845 434b 203d 2027 202e 2024 7365 _CHECK = ' . $se\n-0003db00: 6c66 2d3e 7b27 6e6f 426c 6f63 6b43 6f6d lf->{'noBlockCom\n-0003db10: 7072 4368 6563 6b43 7027 7d3b 0a20 2020 prCheckCp'};. \n-0003db20: 207d 0a0a 2020 2020 2473 656c 662d 3e7b }.. $self->{\n-0003db30: 2770 724c 6f67 277d 2d3e 0a09 7072 696e 'prLog'}->..prin\n-0003db40: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S'\n-0003db50: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-0003db60: 3d3e 0a09 2020 2020 2020 5b40 6c2c 0a09 =>.. [@l,..\n-0003db70: 2020 2020 2020 2040 7567 5f6c 6f67 2c0a @ug_log,.\n-0003db80: 0920 2020 2020 2020 2720 2020 2020 2020 . ' \n-0003db90: 2020 2020 2020 2020 2020 2020 6469 7265 dire\n-0003dba0: 6374 6f72 6965 7320 3d20 2720 2e20 2473 ctories = ' . $s\n-0003dbb0: 656c 662d 3e7b 276e 6f44 6972 7327 7d2c elf->{'noDirs'},\n-0003dbc0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' \n-0003dbd0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003dbe0: 2020 2066 696c 6573 203d 2027 202e 2024 files = ' . $\n-0003dbf0: 7365 6c66 2d3e 7b27 6e6f 4669 6c65 7327 self->{'noFiles'\n-0003dc00: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' \n-0003dc10: 2020 2020 2020 2020 2020 2020 7379 6d62 symb\n-0003dc20: 6f6c 6963 206c 696e 6b73 203d 2027 202e olic links = ' .\n-0003dc30: 2024 7365 6c66 2d3e 7b27 6e6f 5379 6d4c $self->{'noSymL\n-0003dc40: 696e 6b73 277d 2c0a 0920 2020 2020 2020 inks'},.. \n-0003dc50: 2720 2020 2020 2020 2020 2020 2020 2020 ' \n-0003dc60: 2020 2020 206c 6174 6520 6c69 6e6b 7320 late links \n-0003dc70: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n\n-0003dc80: 6f4c 6174 654c 696e 6b73 277d 2c0a 0920 oLateLinks'},.. \n-0003dc90: 2020 2020 2020 2720 2020 2020 2020 2020 ' \n-0003dca0: 2020 2020 2020 2020 2020 6e61 6d65 6420 named \n-0003dcb0: 7069 7065 7320 3d20 2720 2e20 2473 656c pipes = ' . $sel\n-0003dcc0: 662d 3e7b 276e 6f4e 616d 6564 5069 7065 f->{'noNamedPipe\n-0003dcd0: 7327 7d2c 0a09 2020 2020 2020 2027 2020 s'},.. ' \n-0003dce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003dcf0: 2020 2020 2073 6f63 6b65 7473 203d 2027 sockets = '\n-0003dd00: 202e 2024 7365 6c66 2d3e 7b27 6e6f 536f . $self->{'noSo\n-0003dd10: 636b 6574 7327 7d2c 0a09 2020 2020 2020 ckets'},.. \n-0003dd20: 2027 2020 2020 2020 2020 2020 2020 2020 ' \n-0003dd30: 2020 2062 6c6f 636b 2064 6576 6963 6573 block devices\n-0003dd40: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{'\n-0003dd50: 6e6f 426c 6f63 6b44 6576 277d 2c0a 0920 noBlockDev'},.. \n-0003dd60: 2020 2020 2020 2720 2020 2020 2020 2020 ' \n-0003dd70: 2020 2020 6368 6172 6163 7465 7220 6465 character de\n-0003dd80: 7669 6365 7320 3d20 2720 2e20 2473 656c vices = ' . $sel\n-0003dd90: 662d 3e7b 276e 6f43 6861 7244 6576 277d f->{'noCharDev'}\n-0003dda0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n-0003ddb0: 6e65 7720 696e 7465 726e 616c 206c 696e new internal lin\n-0003ddc0: 6b65 6420 6669 6c65 7320 3d20 2720 2e0a ked files = ' ..\n-0003ddd0: 0920 2020 2020 2020 2020 2020 2473 656c . $sel\n-0003dde0: 662d 3e7b 276e 6f49 6e74 6572 6e61 6c4c f->{'noInternalL\n-0003ddf0: 696e 6b65 6446 696c 6573 277d 2c0a 0920 inkedFiles'},.. \n-0003de00: 2020 2020 2020 2720 2020 2020 2020 2020 ' \n-0003de10: 2020 2020 206f 6c64 206c 696e 6b65 6420 old linked \n-0003de20: 6669 6c65 7320 3d20 2720 2e20 2473 656c files = ' . $sel\n-0003de30: 662d 3e7b 276e 6f4f 6c64 4c69 6e6b 6564 f->{'noOldLinked\n-0003de40: 4669 6c65 7327 7d2c 0a09 2020 2020 2020 Files'},.. \n-0003de50: 2027 2020 2020 2020 2020 2020 2020 2020 ' \n-0003de60: 2075 6e63 6861 6e67 6564 2066 696c 6573 unchanged files\n-0003de70: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{'\n-0003de80: 756e 6368 616e 6765 6446 696c 6573 277d unchangedFiles'}\n-0003de90: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n-0003dea0: 2020 2020 2020 2020 2020 2020 2063 6f70 cop\n-0003deb0: 6965 6420 6669 6c65 7320 3d20 2720 2e20 ied files = ' . \n-0003dec0: 2473 656c 662d 3e7b 276e 6f43 6f70 6965 $self->{'noCopie\n-0003ded0: 6446 696c 6573 277d 2c0a 0920 2020 2020 dFiles'},.. \n-0003dee0: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n-0003def0: 2063 6f6d 7072 6573 7365 6420 6669 6c65 compressed file\n-0003df00: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{\n-0003df10: 276e 6f43 6f6d 7072 6573 7365 6446 696c 'noCompressedFil\n-0003df20: 6573 277d 2c0a 0920 2020 2020 2020 2720 es'},.. ' \n-0003df30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003df40: 626c 6f63 6b65 6420 6669 6c65 7320 3d20 blocked files = \n-0003df50: 2720 2e20 2473 656c 662d 3e7b 276e 6f42 ' . $self->{'noB\n-0003df60: 6c6f 636b 6564 4669 6c65 7327 7d2c 0a09 lockedFiles'},..\n-0003df70: 2020 2020 2020 2027 2020 2065 7863 6c75 ' exclu\n-0003df80: 6465 6420 6669 6c65 7320 6265 6361 7573 ded files becaus\n-0003df90: 6520 7275 6c65 203d 2027 202e 2024 7365 e rule = ' . $se\n-0003dfa0: 6c66 2d3e 7b27 6e6f 4578 636c 7564 6552 lf->{'noExcludeR\n-0003dfb0: 756c 6527 7d20 2e0a 0920 2020 2020 2020 ule'} ... \n-0003dfc0: 2720 2827 202e 2028 263a 3a68 756d 616e ' (' . (&::human\n-0003dfd0: 5265 6164 6162 6c65 2824 7365 6c66 2d3e Readable($self->\n-0003dfe0: 7b27 7369 7a65 4578 636c 7564 6552 756c {'sizeExcludeRul\n-0003dff0: 6527 7d29 295b 305d 202e 2027 2927 2c0a e'}))[0] . ')',.\n-0003e000: 0920 2020 2020 2020 2720 2020 696e 636c . ' incl\n-0003e010: 7564 6564 2066 696c 6573 2062 6563 6175 uded files becau\n-0003e020: 7365 2072 756c 6520 3d20 2720 2e20 2473 se rule = ' . $s\n-0003e030: 656c 662d 3e7b 276e 6f49 6e63 6c75 6465 elf->{'noInclude\n-0003e040: 5275 6c65 277d 202e 0a09 2020 2020 2020 Rule'} ... \n-0003e050: 2027 2028 2720 2e20 2826 3a3a 6875 6d61 ' (' . (&::huma\n-0003e060: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self-\n-0003e070: 3e7b 2773 697a 6549 6e63 6c75 6465 5275 >{'sizeIncludeRu\n-0003e080: 6c65 277d 2929 5b30 5d20 2e20 2729 272c le'}))[0] . ')',\n-0003e090: 0a09 2020 2020 2020 2040 636f 6d70 7243 .. @comprC\n-0003e0a0: 6865 636b 2c0a 0920 2020 2020 2020 4062 heck,.. @b\n-0003e0b0: 6c6f 636b 436f 6d70 7243 6865 636b 2c0a lockComprCheck,.\n-0003e0c0: 0920 2020 2020 2020 4065 7854 7970 6573 . @exTypes\n-0003e0d0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n-0003e0e0: 2020 206d 6178 2073 697a 6520 6f66 2063 max size of c\n-0003e0f0: 6f70 7920 7175 6575 6520 3d20 2720 2e20 opy queue = ' . \n-0003e100: 2473 656c 662d 3e7b 276d 6178 5573 6564 $self->{'maxUsed\n-0003e110: 436f 7079 5175 6575 6527 7d2c 0a09 2020 CopyQueue'},.. \n-0003e120: 2020 2020 2027 206d 6178 2073 697a 6520 ' max size \n-0003e130: 6f66 2063 6f6d 7072 6573 7369 6f6e 2071 of compression q\n-0003e140: 7565 7565 203d 2027 202e 2024 7365 6c66 ueue = ' . $self\n-0003e150: 2d3e 7b27 6d61 7855 7365 6443 6f6d 7072 ->{'maxUsedCompr\n-0003e160: 5175 6575 6527 7d2c 0a0a 0920 2020 2020 Queue'},... \n-0003e170: 2020 2720 2020 2020 2020 2020 2020 6361 ' ca\n-0003e180: 6c63 756c 6174 6564 206d 6435 2073 756d lculated md5 sum\n-0003e190: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{\n-0003e1a0: 276e 6f4d 4435 6564 4669 6c65 7327 7d2c 'noMD5edFiles'},\n-0003e1b0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' \n-0003e1c0: 2020 2020 2020 2020 2020 2020 2066 6f72 for\n-0003e1d0: 6b73 2074 6f74 616c 203d 2027 202e 2028 ks total = ' . (\n-0003e1e0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks\n-0003e1f0: 4d44 3527 7d20 2b0a 0909 0909 0909 2020 MD5'} +....... \n-0003e200: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n-0003e210: 7343 5027 7d20 2b0a 0909 0909 0909 2020 sCP'} +....... \n-0003e220: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork\n-0003e230: 7343 6f6d 7072 6573 7327 7d20 2b0a 0909 sCompress'} +...\n-0003e240: 0909 0909 2020 2024 7365 6c66 2d3e 7b27 .... $self->{'\n-0003e250: 6e6f 4e61 6d65 6450 6970 6573 277d 292c noNamedPipes'}),\n-0003e260: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' \n-0003e270: 2020 2020 2020 2020 2020 2020 2020 2066 f\n-0003e280: 6f72 6b73 206d 6435 203d 2027 202e 2024 orks md5 = ' . $\n-0003e290: 7365 6c66 2d3e 7b27 6e6f 466f 726b 734d self->{'noForksM\n-0003e2a0: 4435 277d 2c0a 0920 2020 2020 2020 2720 D5'},.. ' \n-0003e2b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0003e2c0: 2020 2066 6f72 6b73 2063 6f70 7920 3d20 forks copy = \n-0003e2d0: 2720 2e20 2473 656c 662d 3e7b 276e 6f46 ' . $self->{'noF\n-0003e2e0: 6f72 6b73 4350 277d 2c0a 0920 2020 2020 orksCP'},.. \n-0003e2f0: 2020 7370 7269 6e74 6628 2225 3333 7322 sprintf(\"%33s\"\n-0003e300: 2c20 2266 6f72 6b73 2022 202e 206a 6f69 , \"forks \" . joi\n-0003e310: 6e28 2720 272c 2040 7b24 7365 6c66 2d3e n(' ', @{$self->\n-0003e320: 7b27 636f 6d70 7265 7373 277d 7d29 0a09 {'compress'}})..\n-0003e330: 0920 2020 2020 2020 2e20 2220 3d20 2229 . . \" = \")\n-0003e340: 202e 2024 7365 6c66 2d3e 7b27 6e6f 466f . $self->{'noFo\n-0003e350: 726b 7343 6f6d 7072 6573 7327 7d2c 0a0a rksCompress'},..\n-0003e360: 0920 2020 2020 2020 2720 2020 2020 2020 . ' \n-0003e370: 2020 2020 2020 2020 2020 7375 6d20 6f66 sum of\n-0003e380: 2073 6f75 7263 6520 3d20 2720 2e0a 0920 source = ' ... \n-0003e390: 2020 2020 2020 2020 2020 2826 3a3a 6875 (&::hu\n-0003e3a0: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel\n-0003e3b0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile\n-0003e3c0: 7327 7d29 295b 305d 202e 0a09 2020 2020 s'}))[0] ... \n-0003e3d0: 2020 2020 2020 2027 2028 2720 2e20 2473 ' (' . $s\n-0003e3e0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi\n-0003e3f0: 6c65 7327 7d20 2e20 2729 272c 0a09 2020 les'} . ')',.. \n-0003e400: 2020 2020 2027 2020 2020 2020 2020 2020 ' \n-0003e410: 2020 2073 756d 206f 6620 7461 7267 6574 sum of target\n-0003e420: 2061 6c6c 203d 2027 202e 0a09 2020 2020 all = ' ... \n-0003e430: 2020 2020 2020 2028 263a 3a68 756d 616e (&::human\n-0003e440: 5265 6164 6162 6c65 2824 7375 6d54 6172 Readable($sumTar\n-0003e450: 6765 7441 6c6c 2929 5b30 5d20 2e20 2220 getAll))[0] . \" \n-0003e460: 2824 7375 6d54 6172 6765 7441 6c6c 2922 ($sumTargetAll)\"\n-0003e470: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' \n-0003e480: 2020 2020 2020 2020 7375 6d20 6f66 2074 sum of t\n-0003e490: 6172 6765 7420 616c 6c20 3d20 2720 2e20 arget all = ' . \n-0003e4a0: 7370 7269 6e74 6628 2225 2e32 6625 2522 sprintf(\"%.2f%%\"\n-0003e4b0: 2c0a 0909 2020 2026 7065 7263 656e 7428 ,... &percent(\n-0003e4c0: 2473 656c 662d 3e7b 2773 756d 4f72 6967 $self->{'sumOrig\n-0003e4d0: 4669 6c65 7327 7d2c 2024 7375 6d54 6172 Files'}, $sumTar\n-0003e4e0: 6765 7441 6c6c 2929 2c0a 0920 2020 2020 getAll)),.. \n-0003e4f0: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n-0003e500: 7375 6d20 6f66 2074 6172 6765 7420 6e65 sum of target ne\n-0003e510: 7720 3d20 2720 2e0a 0920 2020 2020 2020 w = ' ... \n-0003e520: 2020 2020 2826 3a3a 6875 6d61 6e52 6561 (&::humanRea\n-0003e530: 6461 626c 6528 2473 756d 5461 7267 6574 dable($sumTarget\n-0003e540: 4e65 7729 295b 305d 202e 2022 2028 2473 New))[0] . \" ($s\n-0003e550: 756d 5461 7267 6574 4e65 7729 222c 0a09 umTargetNew)\",..\n-0003e560: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n-0003e570: 2020 2020 2073 756d 206f 6620 7461 7267 sum of targ\n-0003e580: 6574 206e 6577 203d 2027 202e 2020 7370 et new = ' . sp\n-0003e590: 7269 6e74 6628 2225 2e32 6625 2522 2c0a rintf(\"%.2f%%\",.\n-0003e5a0: 0909 2020 2026 7065 7263 656e 7428 2473 .. &percent($s\n-0003e5b0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi\n-0003e5c0: 6c65 7327 7d2c 2024 7375 6d54 6172 6765 les'}, $sumTarge\n-0003e5d0: 744e 6577 2929 2c0a 0920 2020 2020 2020 tNew)),.. \n-0003e5e0: 2720 2020 2020 2020 2020 2020 2073 756d ' sum\n-0003e5f0: 206f 6620 6d64 3565 6420 6669 6c65 7320 of md5ed files \n-0003e600: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... \n-0003e610: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada\n-0003e620: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum\n-0003e630: 4d44 3553 756d 277d 2929 5b30 5d20 2e0a MD5Sum'}))[0] ..\n-0003e640: 0920 2020 2020 2020 2020 2020 2720 2827 . ' ('\n-0003e650: 202e 2024 7365 6c66 2d3e 7b27 7375 6d4d . $self->{'sumM\n-0003e660: 4435 5375 6d27 7d20 2e20 2729 272c 0a09 D5Sum'} . ')',..\n-0003e670: 2020 2020 2020 2027 2020 2020 2020 2020 ' \n-0003e680: 2020 2020 7375 6d20 6f66 206d 6435 6564 sum of md5ed\n-0003e690: 2066 696c 6573 203d 2027 202e 2073 7072 files = ' . spr\n-0003e6a0: 696e 7466 2822 252e 3266 2525 222c 0a09 intf(\"%.2f%%\",..\n-0003e6b0: 0920 2020 2670 6572 6365 6e74 2824 7365 . &percent($se\n-0003e6c0: 6c66 2d3e 7b27 7375 6d4f 7269 6746 696c lf->{'sumOrigFil\n-0003e6d0: 6573 277d 2c0a 0909 0920 2020 2024 7365 es'},.... $se\n-0003e6e0: 6c66 2d3e 7b27 7375 6d4d 4435 5375 6d27 lf->{'sumMD5Sum'\n-0003e6f0: 7d29 292c 0a09 2020 2020 2020 2027 2020 })),.. ' \n-0003e700: 2020 7375 6d20 696e 7465 726e 616c 206c sum internal l\n-0003e710: 696e 6b65 6420 2863 6f70 7929 203d 2027 inked (copy) = '\n-0003e720: 202e 0a09 2020 2020 2020 2020 2020 2028 ... (\n-0003e730: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable\n-0003e740: 2824 7365 6c66 2d3e 7b27 7375 6d4c 696e ($self->{'sumLin\n-0003e750: 6b65 6449 6e74 6572 6e61 6c43 6f70 7927 kedInternalCopy'\n-0003e760: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... \n-0003e770: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel\n-0003e780: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn\n-0003e790: 7465 726e 616c 436f 7079 277d 202e 2027 ternalCopy'} . '\n-0003e7a0: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' \n-0003e7b0: 7375 6d20 696e 7465 726e 616c 206c 696e sum internal lin\n-0003e7c0: 6b65 6420 2863 6f6d 7072 2920 3d20 2720 ked (compr) = ' \n-0003e7d0: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (&\n-0003e7e0: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable(\n-0003e7f0: 2473 656c 662d 3e7b 2773 756d 4c69 6e6b $self->{'sumLink\n-0003e800: 6564 496e 7465 726e 616c 436f 6d70 7227 edInternalCompr'\n-0003e810: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... \n-0003e820: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel\n-0003e830: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn\n-0003e840: 7465 726e 616c 436f 6d70 7227 7d20 2e20 ternalCompr'} . \n-0003e850: 2729 272c 0a09 2020 2020 2020 2027 2020 ')',.. ' \n-0003e860: 2020 2020 2020 2073 756d 206f 6c64 206c sum old l\n-0003e870: 696e 6b65 6420 2863 6f70 7929 203d 2027 inked (copy) = '\n-0003e880: 202e 0a09 2020 2020 2020 2020 2020 2028 ... (\n-0003e890: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable\n-0003e8a0: 2824 7365 6c66 2d3e 7b27 7375 6d4c 696e ($self->{'sumLin\n-0003e8b0: 6b65 644f 6c64 436f 7079 277d 2929 5b30 kedOldCopy'}))[0\n-0003e8c0: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... \n-0003e8d0: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{'\n-0003e8e0: 7375 6d4c 696e 6b65 644f 6c64 436f 7079 sumLinkedOldCopy\n-0003e8f0: 277d 202e 2027 2927 2c0a 0920 2020 2020 '} . ')',.. \n-0003e900: 2020 2720 2020 2020 2020 2073 756d 206f ' sum o\n-0003e910: 6c64 206c 696e 6b65 6420 2863 6f6d 7072 ld linked (compr\n-0003e920: 2920 3d20 2720 2e0a 0920 2020 2020 2020 ) = ' ... \n-0003e930: 2020 2020 2826 3a3a 6875 6d61 6e52 6561 (&::humanRea\n-0003e940: 6461 626c 6528 2473 656c 662d 3e7b 2773 dable($self->{'s\n-0003e950: 756d 4c69 6e6b 6564 4f6c 6443 6f6d 7072 umLinkedOldCompr\n-0003e960: 277d 2929 5b30 5d20 2e0a 0920 2020 2020 '}))[0] ... \n-0003e970: 2020 2020 2020 2720 2827 202e 2024 7365 ' (' . $se\n-0003e980: 6c66 2d3e 7b27 7375 6d4c 696e 6b65 644f lf->{'sumLinkedO\n-0003e990: 6c64 436f 6d70 7227 7d20 2e20 2729 272c ldCompr'} . ')',\n-0003e9a0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' \n-0003e9b0: 2020 2020 7375 6d20 756e 6368 616e 6765 sum unchange\n-0003e9c0: 6420 2863 6f70 7929 203d 2027 202e 0a09 d (copy) = ' ...\n-0003e9d0: 2020 2020 2020 2020 2020 2028 263a 3a68 (&::h\n-0003e9e0: 756d 616e 5265 6164 6162 6c65 2824 7365 umanReadable($se\n-0003e9f0: 6c66 2d3e 7b27 7375 6d55 6e63 6861 6e67 lf->{'sumUnchang\n-0003ea00: 6564 436f 7079 277d 2929 5b30 5d20 2e0a edCopy'}))[0] ..\n-0003ea10: 0920 2020 2020 2020 2020 2020 2720 2827 . ' ('\n-0003ea20: 202e 2024 7365 6c66 2d3e 7b27 7375 6d55 . $self->{'sumU\n-0003ea30: 6e63 6861 6e67 6564 436f 7079 277d 202e nchangedCopy'} .\n-0003ea40: 2027 2927 2c0a 0920 2020 2020 2020 2720 ')',.. ' \n-0003ea50: 2020 2020 2020 2020 7375 6d20 756e 6368 sum unch\n-0003ea60: 616e 6765 6420 2863 6f6d 7072 2920 3d20 anged (compr) = \n-0003ea70: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... \n-0003ea80: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl\n-0003ea90: 6528 2473 656c 662d 3e7b 2773 756d 556e e($self->{'sumUn\n-0003eaa0: 6368 616e 6765 6443 6f6d 7072 277d 2929 changedCompr'}))\n-0003eab0: 5b30 5d20 2e0a 0920 2020 2020 2020 2020 [0] ... \n-0003eac0: 2020 2720 2827 202e 2024 7365 6c66 2d3e ' (' . $self->\n-0003ead0: 7b27 7375 6d55 6e63 6861 6e67 6564 436f {'sumUnchangedCo\n-0003eae0: 6d70 7227 7d20 2e20 2729 272c 0a09 2020 mpr'} . ')',.. \n-0003eaf0: 2020 2020 2027 2020 2020 2020 2020 2020 ' \n-0003eb00: 2020 2020 2020 7375 6d20 6e65 7720 2863 sum new (c\n-0003eb10: 6f70 7929 203d 2027 202e 0a09 2020 2020 opy) = ' ... \n-0003eb20: 2020 2020 2020 2028 263a 3a68 756d 616e (&::human\n-0003eb30: 5265 6164 6162 6c65 2824 7365 6c66 2d3e Readable($self->\n-0003eb40: 7b27 7375 6d4e 6577 436f 7079 277d 2929 {'sumNewCopy'}))\n-0003eb50: 5b30 5d20 2e0a 0920 2020 2020 2020 2020 [0] ... \n-0003eb60: 2020 2720 2827 202e 2024 7365 6c66 2d3e ' (' . $self->\n-0003eb70: 7b27 7375 6d4e 6577 436f 7079 277d 202e {'sumNewCopy'} .\n-0003eb80: 2027 2927 2c0a 0920 2020 2020 2020 2720 ')',.. ' \n-0003eb90: 2020 2020 2020 2020 2020 2020 2020 7375 su\n-0003eba0: 6d20 6e65 7720 2863 6f6d 7072 2920 3d20 m new (compr) = \n-0003ebb0: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... \n-0003ebc0: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl\n-0003ebd0: 6528 2473 656c 662d 3e7b 2773 756d 4e65 e($self->{'sumNe\n-0003ebe0: 7743 6f6d 7072 277d 2929 5b30 5d20 2e0a wCompr'}))[0] ..\n-0003ebf0: 0920 2020 2020 2020 2020 2020 2720 2827 . ' ('\n-0003ec00: 202e 2024 7365 6c66 2d3e 7b27 7375 6d4e . $self->{'sumN\n-0003ec10: 6577 436f 6d70 7227 7d20 2e20 2729 272c ewCompr'} . ')',\n-0003ec20: 0a09 2020 2020 2020 2027 2020 2020 7375 .. ' su\n-0003ec30: 6d20 6e65 7720 2863 6f6d 7072 292c 206f m new (compr), o\n-0003ec40: 7269 6720 7369 7a65 203d 2027 202e 0a09 rig size = ' ...\n-0003ec50: 2020 2020 2020 2020 2020 2028 263a 3a68 (&::h\n-0003ec60: 756d 616e 5265 6164 6162 6c65 2824 7365 umanReadable($se\n-0003ec70: 6c66 2d3e 7b27 7375 6d4e 6577 436f 6d70 lf->{'sumNewComp\n-0003ec80: 724f 7269 6753 697a 6527 7d29 295b 305d rOrigSize'}))[0]\n-0003ec90: 202e 0a09 2020 2020 2020 2020 2020 2027 ... '\n-0003eca0: 2028 2720 2e20 2473 656c 662d 3e7b 2773 (' . $self->{'s\n-0003ecb0: 756d 4e65 7743 6f6d 7072 4f72 6967 5369 umNewComprOrigSi\n-0003ecc0: 7a65 277d 202e 2027 2927 2c0a 0920 2020 ze'} . ')',.. \n-0003ecd0: 2020 2020 2720 2020 2020 2020 2020 2020 ' \n-0003ece0: 2020 2020 2073 756d 206e 6577 202f 206f sum new / o\n-0003ecf0: 7269 6720 3d20 2720 2e20 7370 7269 6e74 rig = ' . sprint\n-0003ed00: 6628 2225 2e32 6625 2522 2c0a 0920 2020 f(\"%.2f%%\",.. \n-0003ed10: 2020 2020 2020 2020 2670 6572 6365 6e74 &percent\n-0003ed20: 2824 7365 6c66 2d3e 7b27 7375 6d4e 6577 ($self->{'sumNew\n-0003ed30: 436f 6d70 724f 7269 6753 697a 6527 7d0a ComprOrigSize'}.\n-0003ed40: 0909 0920 2020 202b 2024 7365 6c66 2d3e ... + $self->\n-0003ed50: 7b27 7375 6d4e 6577 436f 7079 277d 2c0a {'sumNewCopy'},.\n-0003ed60: 0909 0920 2020 2024 7365 6c66 2d3e 7b27 ... $self->{'\n-0003ed70: 7375 6d4e 6577 436f 6d70 7227 7d0a 0909 sumNewCompr'}...\n-0003ed80: 0920 2020 202b 2024 7365 6c66 2d3e 7b27 . + $self->{'\n-0003ed90: 7375 6d4e 6577 436f 7079 277d 2929 2c0a sumNewCopy'})),.\n-0003eda0: 0920 2020 2020 2020 2720 2020 2020 2073 . ' s\n-0003edb0: 697a 6520 6f66 206d 6435 4368 6563 6b53 ize of md5CheckS\n-0003edc0: 756d 2066 696c 6520 3d20 2720 2e0a 0920 um file = ' ... \n-0003edd0: 2020 2020 2020 2020 2020 2826 3a3a 6875 (&::hu\n-0003ede0: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel\n-0003edf0: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum\n-0003ee00: 277d 2929 5b30 5d20 2e0a 0920 2020 2020 '}))[0] ... \n-0003ee10: 2020 2020 2020 2720 2827 202e 2024 7365 ' (' . $se\n-0003ee20: 6c66 2d3e 7b27 6d64 3543 6865 636b 5375 lf->{'md5CheckSu\n-0003ee30: 6d27 7d20 2e20 2729 272c 0a09 2020 2020 m'} . ')',.. \n-0003ee40: 2020 2027 2020 2020 7369 7a65 206f 6620 ' size of \n-0003ee50: 7465 6d70 6f72 6172 7920 6462 2066 696c temporary db fil\n-0003ee60: 6573 203d 2027 202e 0a09 2020 2020 2020 es = ' ... \n-0003ee70: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe\n-0003ee80: 6164 6162 6c65 2824 7365 6c66 2d3e 7b27 adable($self->{'\n-0003ee90: 7375 6d44 424d 4669 6c65 7327 7d29 295b sumDBMFiles'}))[\n-0003eea0: 305d 202e 0a09 2020 2020 2020 2020 2020 0] ... \n-0003eeb0: 2027 2028 2720 2e20 2473 656c 662d 3e7b ' (' . $self->{\n-0003eec0: 2773 756d 4442 4d46 696c 6573 277d 202e 'sumDBMFiles'} .\n-0003eed0: 2027 2927 2c0a 0920 2020 2020 2020 4073 ')',.. @s\n-0003eee0: 7461 7274 4461 7465 2c0a 0920 2020 2020 tartDate,.. \n-0003eef0: 2020 2720 2020 2020 2020 2020 2020 6465 ' de\n-0003ef00: 6c65 7465 6420 6f6c 6420 6261 636b 7570 leted old backup\n-0003ef10: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{\n-0003ef20: 276e 6f44 656c 6574 6564 4f6c 6444 6972 'noDeletedOldDir\n-0003ef30: 7327 7d2c 0a09 2020 2020 2020 2027 2020 s'},.. ' \n-0003ef40: 2020 2020 2020 2020 2064 656c 6574 6564 deleted\n-0003ef50: 2064 6972 6563 746f 7269 6573 203d 2027 directories = '\n-0003ef60: 202e 2024 7365 6c66 2d3e 7b27 6469 7273 . $self->{'dirs\n-0003ef70: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' \n-0003ef80: 2020 2020 2020 2020 2020 2020 2020 6465 de\n-0003ef90: 6c65 7465 6420 6669 6c65 7320 3d20 2720 leted files = ' \n-0003efa0: 2e20 2473 656c 662d 3e7b 2766 696c 6573 . $self->{'files\n-0003efb0: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' \n-0003efc0: 2020 2020 2020 2028 6f6e 6c79 2920 7265 (only) re\n-0003efd0: 6d6f 7665 6420 6c69 6e6b 7320 3d20 2720 moved links = ' \n-0003efe0: 2e20 2473 656c 662d 3e7b 276c 696e 6b73 . $self->{'links\n-0003eff0: 277d 2c0a 0920 2020 2020 2020 2766 7265 '},.. 'fre\n-0003f000: 6564 2073 7061 6365 2069 6e20 6f6c 6420 ed space in old \n-0003f010: 6469 7265 6374 6f72 6965 7320 3d20 2720 directories = ' \n-0003f020: 2e0a 0920 2020 2020 2020 2826 3a3a 6875 ... (&::hu\n-0003f030: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel\n-0003f040: 662d 3e7b 2762 7974 6573 277d 2929 5b30 f->{'bytes'}))[0\n-0003f050: 5d20 2e20 2720 2827 202e 0a09 2020 2020 ] . ' (' ... \n-0003f060: 2020 2024 7365 6c66 2d3e 7b27 6279 7465 $self->{'byte\n-0003f070: 7327 7d20 2e20 2729 272c 0a09 2020 2020 s'} . ')',.. \n-0003f080: 2020 2022 2020 2020 2020 6164 642e 2075 \" add. u\n-0003f090: 7365 6420 7370 6163 6520 696e 2066 696c sed space in fil\n-0003f0a0: 6573 203d 2024 6e65 7755 7365 6453 7061 es = $newUsedSpa\n-0003f0b0: 6365 4875 6d61 6e20 2824 6e65 7755 7365 ceHuman ($newUse\n-0003f0c0: 6453 7061 6365 2922 2c0a 0920 2020 2020 dSpace)\",.. \n-0003f0d0: 2020 2720 2020 2020 2020 2020 2020 2020 ' \n-0003f0e0: 2020 6261 636b 7570 2064 7572 6174 696f backup duratio\n-0003f0f0: 6e20 3d20 2720 2e0a 0920 2020 2020 2020 n = ' ... \n-0003f100: 6461 7465 546f 6f6c 733a 3a76 616c 546f dateTools::valTo\n-0003f110: 5374 7228 272d 7365 6327 203d 3e20 2462 Str('-sec' => $b\n-0003f120: 6163 6b75 7044 7572 6174 696f 6e29 2c0a ackupDuration),.\n-0003f130: 0920 2020 2020 2020 276f 7665 7220 616c . 'over al\n-0003f140: 6c20 6669 6c65 732f 7365 6320 2872 6561 l files/sec (rea\n-0003f150: 6c20 7469 6d65 2920 3d20 2720 2e0a 0920 l time) = ' ... \n-0003f160: 2020 2020 2020 2020 2020 7370 7269 6e74 sprint\n-0003f170: 6628 2225 2e32 6622 2c20 2473 656c 662d f(\"%.2f\", $self-\n-0003f180: 3e7b 276e 6f46 696c 6573 277d 202f 2024 >{'noFiles'} / $\n-0003f190: 6261 636b 7570 4475 7261 7469 6f6e 292c backupDuration),\n-0003f1a0: 0a09 2020 2020 2020 2027 206f 7665 7220 .. ' over \n-0003f1b0: 616c 6c20 6669 6c65 732f 7365 6320 2843 all files/sec (C\n-0003f1c0: 5055 2074 696d 6529 203d 2027 202e 0a09 PU time) = ' ...\n-0003f1d0: 2020 2020 2020 2020 2020 2073 7072 696e sprin\n-0003f1e0: 7466 2822 252e 3266 222c 2024 7365 6c66 tf(\"%.2f\", $self\n-0003f1f0: 2d3e 7b27 6e6f 4669 6c65 7327 7d20 2f20 ->{'noFiles'} / \n-0003f200: 2824 7520 2b20 2473 2929 2c0a 0920 2020 ($u + $s)),.. \n-0003f210: 2020 2020 2720 2020 2020 2020 2020 2020 ' \n-0003f220: 2020 2020 2020 2020 2020 4350 5520 7573 CPU us\n-0003f230: 6167 6520 3d20 2720 2e0a 0920 2020 2020 age = ' ... \n-0003f240: 2020 2020 2020 7370 7269 6e74 6628 2225 sprintf(\"%\n-0003f250: 2e32 6625 2522 2c20 2824 7520 2b20 2473 .2f%%\", ($u + $s\n-0003f260: 2920 2f20 2462 6163 6b75 7044 7572 6174 ) / $backupDurat\n-0003f270: 696f 6e20 2a20 3130 3029 0a09 2020 2020 ion * 100).. \n-0003f280: 2020 205d 293b 0a0a 7d0a 0a0a 2323 2323 ]);..}...####\n-0003f290: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f2a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f2b0: 2323 2323 0a73 7562 2070 6572 6365 6e74 ####.sub percent\n-0003f2c0: 0a7b 0a20 2020 206d 7920 2824 6261 7365 .{. my ($base\n-0003f2d0: 2c20 2472 656c 2920 3d20 405f 3b0a 0a20 , $rel) = @_;.. \n-0003f2e0: 2020 2069 6620 2824 6261 7365 203d 3d20 if ($base == \n-0003f2f0: 3029 0a20 2020 207b 0a09 7265 7475 726e 0). {..return\n-0003f300: 2030 3b0a 2020 2020 7d0a 2020 2020 656c 0;. }. el\n-0003f310: 7365 0a20 2020 207b 0a09 7265 7475 726e se. {..return\n-0003f320: 2031 3030 202d 2028 2462 6173 6520 2d20 100 - ($base - \n-0003f330: 2472 656c 2920 2a20 3130 3020 2f20 2462 $rel) * 100 / $b\n-0003f340: 6173 653b 0a20 2020 207d 0a7d 0a0a 0a0a ase;. }.}....\n-0003f350: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f360: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f370: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f380: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f390: 2323 2323 2323 0a23 2073 746f 7265 7320 ######.# stores \n-0003f3a0: 4461 7465 7320 616e 6420 5469 6d65 7320 Dates and Times \n-0003f3b0: 6f66 2061 6c6c 2064 6972 6563 746f 7269 of all directori\n-0003f3c0: 6573 2069 6e20 6120 6669 6c65 0a23 2061 es in a file.# a\n-0003f3d0: 6674 6572 2062 6163 6b75 7020 7468 6973 fter backup this\n-0003f3e0: 2066 696c 6520 6973 2072 6561 6420 616e file is read an\n-0003f3f0: 6420 6469 7265 6374 6f72 7920 6174 696d d directory atim\n-0003f400: 6520 616e 6420 6d74 696d 6520 6172 6520 e and mtime are \n-0003f410: 7365 740a 7061 636b 6167 6520 7365 7452 set.package setR\n-0003f420: 6573 6574 4469 7254 696d 6573 3b0a 0a23 esetDirTimes;..#\n-0003f430: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f440: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f450: 2323 2323 2323 230a 7375 6220 6e65 770a #######.sub new.\n-0003f460: 7b0a 2020 2020 6d79 2024 636c 6173 7320 {. my $class \n-0003f470: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-0003f480: 2473 656c 6620 3d20 7b7d 3b0a 0a20 2020 $self = {};.. \n-0003f490: 206d 7920 2825 7061 7261 6d73 2920 3d20 my (%params) = \n-0003f4a0: 2827 2d74 6d70 4469 7227 2020 2020 3d3e ('-tmpDir' =>\n-0003f4b0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '-\n-0003f4c0: 736f 7572 6365 4469 7227 203d 3e20 756e sourceDir' => un\n-0003f4d0: 6465 662c 0a09 0920 2020 2027 2d74 6172 def,... '-tar\n-0003f4e0: 6765 7444 6972 2720 3d3e 2075 6e64 6566 getDir' => undef\n-0003f4f0: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog'\n-0003f500: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,..\n-0003f510: 0920 2020 2027 2d73 7264 7466 2720 2020 . '-srdtf' \n-0003f520: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... \n-0003f530: 2020 272d 646f 4e6f 7468 696e 6727 203d '-doNothing' =\n-0003f540: 3e20 302c 0a09 0920 2020 2027 2d72 6573 > 0,... '-res\n-0003f550: 6574 4174 696d 6527 203d 3e20 302c 0a09 etAtime' => 0,..\n-0003f560: 0920 2020 2027 2d70 7265 7365 7276 6550 . '-preserveP\n-0003f570: 6572 6d73 2720 3d3e 2075 6e64 6566 0a09 erms' => undef..\n-0003f580: 0920 2020 2029 3b0a 0a20 2020 2026 3a3a . );.. &::\n-0003f590: 6368 6563 6b4f 626a 6563 7450 6172 616d checkObjectParam\n-0003f5a0: 7328 5c25 7061 7261 6d73 2c20 5c40 5f2c s(\\%params, \\@_,\n-0003f5b0: 2027 7365 7452 6573 6574 4469 7254 696d 'setResetDirTim\n-0003f5c0: 6573 3a3a 6e65 7727 2c0a 0909 0920 5b27 es::new',.... ['\n-0003f5d0: 2d74 6d70 4469 7227 2c20 272d 736f 7572 -tmpDir', '-sour\n-0003f5e0: 6365 4469 7227 2c20 272d 7461 7267 6574 ceDir', '-target\n-0003f5f0: 4469 7227 2c20 272d 7072 4c6f 6727 2c0a Dir', '-prLog',.\n-0003f600: 0909 0920 2027 2d73 7264 7466 275d 293b ... '-srdtf']);\n-0003f610: 0a0a 2020 2020 263a 3a73 6574 5061 7261 .. &::setPara\n-0003f620: 6d73 4469 7265 6374 2824 7365 6c66 2c20 msDirect($self, \n-0003f630: 5c25 7061 7261 6d73 293b 0a0a 2020 2020 \\%params);.. \n-0003f640: 756e 6c65 7373 2028 2473 656c 662d 3e7b unless ($self->{\n-0003f650: 2764 6f4e 6f74 6869 6e67 277d 290a 2020 'doNothing'}). \n-0003f660: 2020 7b0a 096d 7920 2474 6d70 6669 6c65 {..my $tmpfile\n-0003f670: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa\n-0003f680: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me(\"$tmpdir/stor\n-0003f690: 6542 6163 6b75 702d 6469 7273 2e22 293b eBackup-dirs.\");\n-0003f6a0: 0a09 2473 656c 662d 3e7b 2774 6d70 6669 ..$self->{'tmpfi\n-0003f6b0: 6c65 277d 203d 2024 746d 7066 696c 653b le'} = $tmpfile;\n-0003f6c0: 0a09 6c6f 6361 6c20 2a46 494c 453b 0a09 ..local *FILE;..\n-0003f6d0: 263a 3a63 6865 636b 4465 6c53 796d 4c69 &::checkDelSymLi\n-0003f6e0: 6e6b 2824 746d 7066 696c 652c 2024 7072 nk($tmpfile, $pr\n-0003f6f0: 4c6f 672c 2030 7830 3129 3b0a 096f 7065 Log, 0x01);..ope\n-0003f700: 6e28 4649 4c45 2c20 223e 2024 746d 7066 n(FILE, \"> $tmpf\n-0003f710: 696c 6522 2920 6f72 0a09 2020 2020 2470 ile\") or.. $p\n-0003f720: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0003f730: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-0003f740: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-0003f750: 6e6f 7420 6f70 656e 203c 2474 6d70 6669 not open <$tmpfi\n-0003f760: 6c65 3e2c 2065 7869 7469 6e67 225d 2c0a le>, exiting\"],.\n-0003f770: 0909 0920 2027 2d61 6464 2720 3d3e 205b ... '-add' => [\n-0003f780: 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 __FILE__, __LINE\n-0003f790: 5f5f 5d2c 0a09 0909 2020 272d 6578 6974 __],.... '-exit\n-0003f7a0: 2720 3d3e 2031 293b 0a09 6368 6d6f 6420 ' => 1);..chmod \n-0003f7b0: 3036 3030 2c20 2474 6d70 6669 6c65 3b0a 0600, $tmpfile;.\n-0003f7c0: 0924 7365 6c66 2d3e 7b27 4649 4c45 277d .$self->{'FILE'}\n-0003f7d0: 203d 202a 4649 4c45 3b0a 2020 2020 7d0a = *FILE;. }.\n-0003f7e0: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self\n-0003f7f0: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...##\n-0003f800: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f810: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f820: 2323 2323 2323 0a73 7562 2061 6464 4469 ######.sub addDi\n-0003f830: 720a 7b0a 2020 2020 6d79 2024 7365 6c66 r.{. my $self\n-0003f840: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-0003f850: 2028 2472 656c 4669 6c65 2c20 2461 7469 ($relFile, $ati\n-0003f860: 6d65 2c20 246d 7469 6d65 2c20 246d 6f64 me, $mtime, $mod\n-0003f870: 6529 203d 2040 5f3b 0a0a 2020 2020 7265 e) = @_;.. re\n-0003f880: 7475 726e 2069 6620 2473 656c 662d 3e7b turn if $self->{\n-0003f890: 2764 6f4e 6f74 6869 6e67 277d 3b0a 0a20 'doNothing'};.. \n-0003f8a0: 2020 206c 6f63 616c 202a 4649 4c45 203d local *FILE =\n-0003f8b0: 2024 7365 6c66 2d3e 7b27 4649 4c45 277d $self->{'FILE'}\n-0003f8c0: 3b0a 2020 2020 2472 656c 4669 6c65 203d ;. $relFile =\n-0003f8d0: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 2020 ~ s/\\n/\\0/og;. \n-0003f8e0: 2020 7072 696e 7420 4649 4c45 2022 2461 print FILE \"$a\n-0003f8f0: 7469 6d65 2024 6d74 696d 6520 246d 6f64 time $mtime $mod\n-0003f900: 6520 2472 656c 4669 6c65 5c6e 223b 0a7d e $relFile\\n\";.}\n-0003f910: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-0003f920: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0003f930: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub \n-0003f940: 7772 6974 6554 696d 6573 0a7b 0a20 2020 writeTimes.{. \n-0003f950: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif\n-0003f960: 743b 0a0a 2020 2020 7265 7475 726e 2069 t;.. return i\n-0003f970: 6620 2473 656c 662d 3e7b 2764 6f4e 6f74 f $self->{'doNot\n-0003f980: 6869 6e67 277d 3b0a 0a20 2020 206d 7920 hing'};.. my \n-0003f990: 2473 6f75 7263 6544 6972 203d 2024 7365 $sourceDir = $se\n-0003f9a0: 6c66 2d3e 7b27 736f 7572 6365 4469 7227 lf->{'sourceDir'\n-0003f9b0: 7d3b 0a20 2020 206d 7920 2474 6172 6765 };. my $targe\n-0003f9c0: 7444 6972 203d 2024 7365 6c66 2d3e 7b27 tDir = $self->{'\n-0003f9d0: 7461 7267 6574 4469 7227 7d3b 0a20 2020 targetDir'};. \n-0003f9e0: 206c 6f63 616c 202a 4649 4c45 203d 2024 local *FILE = $\n-0003f9f0: 7365 6c66 2d3e 7b27 4649 4c45 277d 3b0a self->{'FILE'};.\n-0003fa00: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = \n-0003fa10: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'}\n-0003fa20: 3b0a 2020 2020 6d79 2024 746d 7066 696c ;. my $tmpfil\n-0003fa30: 6520 3d20 2473 656c 662d 3e7b 2774 6d70 e = $self->{'tmp\n-0003fa40: 6669 6c65 277d 3b0a 0a20 2020 2063 6c6f file'};.. clo\n-0003fa50: 7365 2846 494c 4529 206f 720a 0924 7072 se(FILE) or..$pr\n-0003fa60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0003fa70: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... \n-0003fa80: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-0003fa90: 616e 6e6f 7420 636c 6f73 6520 3c24 746d annot close <$tm\n-0003faa0: 7066 696c 653e 225d 293b 0a0a 2020 2020 pfile>\"]);.. \n-0003fab0: 6966 2028 2473 656c 662d 3e7b 2770 7265 if ($self->{'pre\n-0003fac0: 7365 7276 6550 6572 6d73 277d 290a 2020 servePerms'}). \n-0003fad0: 2020 7b0a 0975 6e6c 6573 7320 286f 7065 {..unless (ope\n-0003fae0: 6e28 4649 4c45 2c20 223c 2024 746d 7066 n(FILE, \"< $tmpf\n-0003faf0: 696c 6522 2929 0a09 7b0a 0920 2020 2024 ile\"))..{.. $\n-0003fb00: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-0003fb10: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-0003fb20: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n-0003fb30: 6e6e 6f74 2072 6561 6420 3c24 746d 7066 nnot read <$tmpf\n-0003fb40: 696c 653e 2c20 6361 6e6e 6f74 2073 6574 ile>, cannot set\n-0003fb50: 2061 7469 6d65 2022 202e 0a09 0909 0920 atime \" ...... \n-0003fb60: 2020 2020 2261 6e64 206d 7469 6d65 2066 \"and mtime f\n-0003fb70: 6f72 2064 6972 6563 746f 7269 6573 225d or directories\"]\n-0003fb80: 293b 0a09 2020 2020 7265 7475 726e 3b0a );.. return;.\n-0003fb90: 097d 0a0a 0975 6e6c 6573 7320 2865 6f66 .}...unless (eof\n-0003fba0: 2046 494c 4529 0a09 7b0a 0920 2020 2024 FILE)..{.. $\n-0003fbb0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-0003fbc0: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',....\n-0003fbd0: 2020 272d 7374 7227 203d 3e20 5b22 7365 '-str' => [\"se\n-0003fbe0: 7474 696e 6720 6174 696d 652c 206d 7469 tting atime, mti\n-0003fbf0: 6d65 206f 6620 6469 7265 6374 6f72 6965 me of directorie\n-0003fc00: 7320 2e2e 2e22 5d29 3b0a 097d 0a0a 096d s ...\"]);..}...m\n-0003fc10: 7920 246c 696e 653b 0a09 7768 696c 6520 y $line;..while \n-0003fc20: 2824 6c69 6e65 203d 203c 4649 4c45 3e29 ($line = )\n-0003fc30: 0a09 7b0a 0920 2020 2063 686f 7020 246c ..{.. chop $l\n-0003fc40: 696e 653b 0a09 2020 2020 6d79 2028 2461 ine;.. my ($a\n-0003fc50: 7469 6d65 2c20 246d 7469 6d65 2c20 246d time, $mtime, $m\n-0003fc60: 6f64 652c 2024 7265 6c46 696c 6529 203d ode, $relFile) =\n-0003fc70: 2073 706c 6974 282f 5c73 2f2c 2024 6c69 split(/\\s/, $li\n-0003fc80: 6e65 2c20 3429 3b0a 0920 2020 2024 7265 ne, 4);.. $re\n-0003fc90: 6c46 696c 6520 3d7e 2073 2f5c 302f 5c6e lFile =~ s/\\0/\\n\n-0003fca0: 2f6f 673b 0a09 2020 2020 6368 6d6f 6420 /og;.. chmod \n-0003fcb0: 246d 6f64 652c 2022 2474 6172 6765 7444 $mode, \"$targetD\n-0003fcc0: 6972 2f24 7265 6c46 696c 6522 3b0a 0920 ir/$relFile\";.. \n-0003fcd0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime,\n-0003fce0: 2024 6d74 696d 652c 2022 2473 6f75 7263 $mtime, \"$sourc\n-0003fcf0: 6544 6972 2f24 7265 6c46 696c 6522 2069 eDir/$relFile\" i\n-0003fd00: 6620 2473 656c 662d 3e7b 2772 6573 6574 f $self->{'reset\n-0003fd10: 4174 696d 6527 7d3b 0a09 2020 2020 7574 Atime'};.. ut\n-0003fd20: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti\n-0003fd30: 6d65 2c20 2224 7461 7267 6574 4469 722f me, \"$targetDir/\n-0003fd40: 2472 656c 4669 6c65 223b 0a09 7d0a 0a09 $relFile\";..}...\n-0003fd50: 636c 6f73 6528 4649 4c45 293b 0a20 2020 close(FILE);. \n-0003fd60: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n-0003fd70: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print\n-0003fd80: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-0003fd90: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-0003fda0: 3d3e 205b 2264 6972 6563 746f 7279 2070 => [\"directory p\n-0003fdb0: 6572 6d69 7373 696f 6e73 206e 6f74 2073 ermissions not s\n-0003fdc0: 6574 2062 6563 6175 7365 2022 202e 0a09 et because \" ...\n-0003fdd0: 0909 0920 2270 7265 7365 7276 6550 6572 ... \"preservePer\n-0003fde0: 6d73 206e 6f74 2073 6574 225d 293b 0a20 ms not set\"]);. \n-0003fdf0: 2020 207d 0a20 2020 2075 6e6c 696e 6b20 }. unlink \n-0003fe00: 2474 6d70 6669 6c65 3b0a 7d0a $tmpfile;.}.\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"}, {"source1": "./usr/bin/storeBackupCheckBackup", "source2": "./usr/bin/storeBackupCheckBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,2119 +1,4 @@\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 3232 290a 2320 2020 2020 2020 8-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;.\n-00000330: 7573 6520 7761 726e 696e 6773 3b0a 0a0a use warnings;...\n-00000340: 7573 6520 4469 6765 7374 3a3a 4d44 3520 use Digest::MD5 \n-00000350: 7177 286d 6435 5f68 6578 293b 0a75 7365 qw(md5_hex);.use\n-00000360: 2046 636e 746c 2071 7728 4f5f 5244 5752 Fcntl qw(O_RDWR\n-00000370: 204f 5f43 5245 4154 293b 0a75 7365 2046 O_CREAT);.use F\n-00000380: 696c 653a 3a43 6f70 793b 0a75 7365 2050 ile::Copy;.use P\n-00000390: 4f53 4958 3b0a 0a0a 7375 6220 6c69 6250 OSIX;...sub libP\n-000003a0: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi\n-000003b0: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. \n-000003c0: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. #\n-000003d0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel\n-000003e0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink \n-000003f0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol\n-00000400: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel.\n-00000410: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f\n-00000420: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil\n-00000430: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{.\n-00000440: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = \n-00000450: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file);\n-00000460: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst\n-00000470: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n\n-00000480: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e \"/\").. {...\n-00000490: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\\/]\n-000004a0: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. \n-000004b0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. \n-000004c0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li\n-000004d0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}...\n-000004e0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = \n-000004f0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n-00000500: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = \"\n-00000510: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file\";. }. \n-00000520: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p\n-00000530: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR \"<$f\n-00000540: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex\n-00000550: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\\n\";..exit 1\n-00000560: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di\n-00000570: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= \"/../lib\"; \n-00000580: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad\n-00000590: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth\n-000005a0: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old\n-000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005c0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old\n-000005d0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd\n-000005e0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {..\n-000005f0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b\n-00000600: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $\n-00000610: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $\n-00000620: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return\n-00000630: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir(\n-00000640: 2224 6162 7344 6972 2466 696c 6522 2929 \"$absDir$file\"))\n-00000650: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-00000660: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-00000670: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR \"<$dir> doe\n-00000680: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000690: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\\n\";. }.}\n-000006a0: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi\n-000006b0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name\n-000006c0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r\n-000006d0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam\n-000006e0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name\n-000006f0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\\//); # n\n-00000700: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat\n-00000710: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my (\n-00000720: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $\n-00000730: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\\/\n-00000740: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di\n-00000750: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir\n-00000760: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); \n-00000770: 2020 2020 2020 2020 2020 2023 2067 696c # gil\n-00000780: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f\n-00000790: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu\n-000007a0: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file)\n-000007b0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p\n-000007c0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath(\n-000007d0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN\n-000007e0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, \"$req\";...req\n-000007f0: 7569 7265 2027 6368 6563 6b50 6172 616d uire 'checkParam\n-00000800: 322e 706c 273b 0a72 6571 7569 7265 2027 2.pl';.require '\n-00000810: 6368 6563 6b4f 626a 5061 722e 706c 273b checkObjPar.pl';\n-00000820: 0a72 6571 7569 7265 2027 7072 4c6f 672e .require 'prLog.\n-00000830: 706c 273b 0a72 6571 7569 7265 2027 7665 pl';.require 've\n-00000840: 7273 696f 6e2e 706c 273b 0a72 6571 7569 rsion.pl';.requi\n-00000850: 7265 2027 6669 6c65 4469 722e 706c 273b re 'fileDir.pl';\n-00000860: 0a72 6571 7569 7265 2027 666f 726b 5072 .require 'forkPr\n-00000870: 6f63 2e70 6c27 3b0a 7265 7175 6972 6520 oc.pl';.require \n-00000880: 2768 756d 616e 5265 6164 2e70 6c27 3b0a 'humanRead.pl';.\n-00000890: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo\n-000008a0: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require \n-000008b0: 2765 7661 6c54 6f6f 6c73 2e70 6c27 3b0a 'evalTools.pl';.\n-000008c0: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa\n-000008d0: 636b 7570 4c69 622e 706c 273b 0a0a 6d79 ckupLib.pl';..my\n-000008e0: 2024 6368 6563 6b53 756d 4669 6c65 203d $checkSumFile =\n-000008f0: 2027 2e6d 6435 4368 6563 6b53 756d 7327 '.md5CheckSums'\n-00000900: 3b0a 0a6d 7920 2474 6d70 6469 7220 3d20 ;..my $tmpdir = \n-00000910: 272f 746d 7027 3b20 2020 2020 2020 2020 '/tmp'; \n-00000920: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v\n-00000930: 616c 7565 0a24 746d 7064 6972 203d 2024 alue.$tmpdir = $\n-00000940: 454e 567b 2754 4d50 4449 5227 7d20 6966 ENV{'TMPDIR'} if\n-00000950: 2064 6566 696e 6564 2024 454e 567b 2754 defined $ENV{'T\n-00000960: 4d50 4449 5227 7d3b 0a0a 0a3d 6865 6164 MPDIR'};...=head\n-00000970: 3120 4e41 4d45 0a0a 7374 6f72 6542 6163 1 NAME..storeBac\n-00000980: 6b75 7043 6865 636b 4261 636b 7570 2e70 kupCheckBackup.p\n-00000990: 6c20 2d20 6368 6563 6b73 2069 6620 6120 l - checks if a \n-000009a0: 6669 6c65 2069 6e20 7468 6520 6261 636b file in the back\n-000009b0: 7570 2069 7320 6d69 7373 696e 670a 6f72 up is missing.or\n-000009c0: 2063 6f72 7275 7074 6564 0a0a 3d68 6561 corrupted..=hea\n-000009d0: 6431 2053 594e 4f50 5349 530a 0a09 7374 d1 SYNOPSIS...st\n-000009e0: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa\n-000009f0: 636b 7570 2e70 6c20 2d63 2062 6163 6b75 ckup.pl -c backu\n-00000a00: 7044 6972 205b 2d70 206e 756d 6265 725d pDir [-p number]\n-00000a10: 205b 2d69 5d0a 0920 2020 2020 205b 2d77 [-i].. [-w\n-00000a20: 2066 696c 6550 7265 6669 785d 205b 2d2d filePrefix] [--\n-00000a30: 6c61 7374 4f66 4561 6368 5365 7269 6573 lastOfEachSeries\n-00000a40: 5d20 0a09 2020 2020 2020 5b2d 2d69 6e63 ] .. [--inc\n-00000a50: 6c75 6465 5265 6e61 6d65 6442 6163 6b75 ludeRenamedBacku\n-00000a60: 7073 5d20 5b2d 5420 746d 7064 6972 5d0a ps] [-T tmpdir].\n-00000a70: 0920 2020 2020 205b 2d2d 6c6f 6746 696c . [--logFil\n-00000a80: 650a 0920 2020 2020 2020 5b2d 2d70 6c75 e.. [--plu\n-00000a90: 734c 6f67 5374 646f 7574 5d20 5b2d 2d73 sLogStdout] [--s\n-00000aa0: 7570 7072 6573 7354 696d 655d 205b 2d6d uppressTime] [-m\n-00000ab0: 206d 6178 4669 6c65 6c65 6e5d 0a09 2020 maxFilelen].. \n-00000ac0: 2020 2020 205b 5b2d 6e20 6e6f 4f66 4f6c [[-n noOfOl\n-00000ad0: 6446 696c 6573 5d20 7c20 5b2d 2d73 6176 dFiles] | [--sav\n-00000ae0: 654c 6f67 735d 5d0a 0a3d 6865 6164 3120 eLogs]]..=head1 \n-00000af0: 4445 5343 5249 5054 494f 4e0a 0a54 6865 DESCRIPTION..The\n-00000b00: 2074 6f6f 6c20 6973 2069 6e74 656e 6465 tool is intende\n-00000b10: 6420 746f 2066 696e 6420 6669 6c65 7320 d to find files \n-00000b20: 696e 2074 6865 2073 6f75 7263 6520 7468 in the source th\n-00000b30: 6174 206d 6967 6874 2068 6176 6520 6368 at might have ch\n-00000b40: 616e 6765 6420 6f76 6572 0a74 696d 6520 anged over.time \n-00000b50: 7769 7468 6f75 7420 7468 6520 7573 6572 without the user\n-00000b60: 7320 696e 7465 7261 6374 696f 6e20 6f72 s interaction or\n-00000b70: 206b 6e6f 776c 6564 6765 2c20 666f 7220 knowledge, for \n-00000b80: 6578 616d 706c 6520 6279 2062 6974 2072 example by bit r\n-00000b90: 6f74 2e0a 0a49 5420 6361 6c63 756c 6174 ot...IT calculat\n-00000ba0: 6573 206d 6435 2073 756d 7320 6672 6f6d es md5 sums from\n-00000bb0: 2074 6865 2066 696c 6573 2069 6e20 7468 the files in th\n-00000bc0: 6520 6261 636b 7570 2061 6e64 2063 6f6d e backup and com\n-00000bd0: 7061 7265 730a 7468 656d 2077 6974 6820 pares.them with \n-00000be0: 6d64 3520 7375 6d73 2073 746f 7265 6420 md5 sums stored \n-00000bf0: 6279 2073 746f 7265 4261 636b 7570 2e70 by storeBackup.p\n-00000c00: 6c2e 0a49 7420 736f 2077 696c 6c20 7265 l..It so will re\n-00000c10: 636f 676e 697a 652c 2069 6620 6120 6669 cognize, if a fi\n-00000c20: 6c65 2069 6e20 7468 6520 6261 636b 7570 le in the backup\n-00000c30: 2069 7320 6d69 7373 696e 6720 6f72 2063 is missing or c\n-00000c40: 7572 7275 7074 6564 2e0a 4974 206f 6e6c urrupted..It onl\n-00000c50: 7920 6368 6563 6b73 2070 6c61 696e 2066 y checks plain f\n-00000c60: 696c 6573 2c20 6e6f 7420 7370 6563 6961 iles, not specia\n-00000c70: 6c20 6669 6c65 7320 6f72 2073 796d 626f l files or symbo\n-00000c80: 6c69 6320 6c69 6e6b 732e 0a0a 3d68 6561 lic links...=hea\n-00000c90: 6431 204f 5054 494f 4e53 0a0a 3d6f 7665 d1 OPTIONS..=ove\n-00000ca0: 7220 380a 0a3d 6974 656d 2042 3c2d 2d70 r 8..=item B<--p\n-00000cb0: 7269 6e74 3e0a 0a20 2020 2070 7269 6e74 rint>.. print\n-00000cc0: 2063 6f6e 6669 6775 7261 7469 6f6e 2070 configuration p\n-00000cd0: 6172 616d 6574 6572 7320 616e 6420 7374 arameters and st\n-00000ce0: 6f70 0a0a 3d69 7465 6d20 423c 2d2d 6368 op..=item B<--ch\n-00000cf0: 6563 6b44 6972 3e2c 2042 3c2d 633e 0a0a eckDir>, B<-c>..\n-00000d00: 2020 2020 6261 636b 7570 206f 7220 746f backup or to\n-00000d10: 7020 6f66 2062 6163 6b75 7073 2074 6f20 p of backups to \n-00000d20: 6368 6563 6b0a 0a3d 6974 656d 2042 3c2d check..=item B<-\n-00000d30: 2d62 6163 6b75 7052 6f6f 743e 2c20 423c -backupRoot>, B<\n-00000d40: 2d62 3e0a 0a20 2020 2072 6f6f 7420 6f66 -b>.. root of\n-00000d50: 2073 746f 7265 4261 636b 7570 2074 7265 storeBackup tre\n-00000d60: 652c 206e 6f72 6d61 6c6c 7920 6e6f 7420 e, normally not \n-00000d70: 6e65 6564 6564 0a0a 3d69 7465 6d20 423c needed..=item B<\n-00000d80: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v\n-00000d90: 3e0a 0a20 2020 2067 656e 6572 6174 6520 >.. generate \n-00000da0: 7374 6174 6973 7469 6373 0a0a 3d69 7465 statistics..=ite\n-00000db0: 6d20 423c 2d2d 7061 724a 6f62 733e 2c20 m B<--parJobs>, \n-00000dc0: 423c 2d70 3e0a 0a20 2020 206e 756d 6265 B<-p>.. numbe\n-00000dd0: 7220 6f66 2070 6172 616c 6c65 6c20 6a6f r of parallel jo\n-00000de0: 6273 2c20 6465 6661 756c 7420 3d20 6368 bs, default = ch\n-00000df0: 6f73 656e 2061 7574 6f6d 6174 6963 616c osen automatical\n-00000e00: 6c79 0a0a 3d69 7465 6d20 423c 2d2d 6c61 ly..=item B<--la\n-00000e10: 7374 4f66 4561 6368 5365 7269 6573 3e0a stOfEachSeries>.\n-00000e20: 0a20 2020 206f 6e6c 7920 6368 6563 6b20 . only check \n-00000e30: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup \n-00000e40: 6f66 2065 6163 6820 7365 7269 6573 2066 of each series f\n-00000e50: 6f75 6e64 0a0a 3d69 7465 6d20 423c 2d2d ound..=item B<--\n-00000e60: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa\n-00000e70: 636b 7570 733e 2c20 423c 2d69 3e0a 0a20 ckups>, B<-i>.. \n-00000e80: 2020 2069 6e63 6c75 6465 2072 656e 616d include renam\n-00000e90: 6564 2062 6163 6b75 7073 2069 6e74 6f20 ed backups into \n-00000ea0: 7468 6520 6368 6563 6b20 7265 6e61 6d65 the check rename\n-00000eb0: 6420 6261 636b 7570 7320 6d75 7374 0a20 d backups must. \n-00000ec0: 2020 2066 6f6c 6c6f 7720 7468 6520 636f follow the co\n-00000ed0: 6e76 656e 7469 6f6e 203c 6261 636b 7570 nvention -\n-00000ef0: 0a0a 3d69 7465 6d20 423c 2d2d 746d 7064 ..=item B<--tmpd\n-00000f00: 6972 3e2c 2042 3c2d 543e 0a0a 2020 2020 ir>, B<-T>.. \n-00000f10: 6469 7265 6374 6f72 7920 666f 7220 7465 directory for te\n-00000f20: 6d70 6f72 6172 7920 6669 6c65 732c 2064 mporary files, d\n-00000f30: 6566 6175 6c74 2069 7320 3c2f 746d 703e efault is \n-00000f40: 0a0a 3d69 7465 6d20 423c 2d2d 7772 6f6e ..=item B<--wron\n-00000f50: 6746 696c 6554 6162 6c65 733e 2c20 423c gFileTables>, B<\n-00000f60: 2d77 3e0a 0a20 2020 2077 7269 7465 2066 -w>.. write f\n-00000f70: 696c 656e 616d 6573 2077 6974 6820 6465 ilenames with de\n-00000f80: 7465 6374 6564 2066 6175 6c74 7320 696e tected faults in\n-00000f90: 2072 6567 756c 6172 2066 696c 6573 2066 regular files f\n-00000fa0: 6f72 0a20 2020 206c 6174 6572 2062 7567 or. later bug\n-00000fb0: 2066 6978 696e 6720 286e 6f74 2061 7574 fixing (not aut\n-00000fc0: 6f6d 6174 6564 290a 2020 2020 7061 7261 omated). para\n-00000fd0: 6d65 7465 7220 746f 2074 6869 7320 6f70 meter to this op\n-00000fe0: 7469 6f6e 2069 7320 6120 6669 6c65 2070 tion is a file p\n-00000ff0: 7265 6669 780a 2020 2020 6567 2e20 6966 refix. eg. if\n-00001000: 2074 6865 2066 696c 6520 7072 6566 6978 the file prefix\n-00001010: 2069 7320 272f 746d 702f 6275 6773 422d is '/tmp/bugsB-\n-00001020: 272c 2074 6865 2066 6f6c 6c6f 7769 6e67 ', the following\n-00001030: 2066 696c 6573 2061 7265 0a20 2020 2067 files are. g\n-00001040: 656e 6572 6174 6564 3a0a 2020 2020 2f74 enerated:. /t\n-00001050: 6d70 2f62 7567 7342 2d66 696c 6573 2e6d mp/bugsB-files.m\n-00001060: 6973 7369 6e67 2e74 7874 0a20 2020 202f issing.txt. /\n-00001070: 746d 702f 6275 6773 422d 6d64 3573 756d tmp/bugsB-md5sum\n-00001080: 732e 6d69 7373 696e 672e 7478 740a 2020 s.missing.txt. \n-00001090: 2020 2f74 6d70 2f62 7567 7342 2d6d 6435 /tmp/bugsB-md5\n-000010a0: 7375 6d73 2e77 726f 6e67 2e74 7874 0a20 sums.wrong.txt. \n-000010b0: 2020 2069 6620 796f 7520 6368 616e 6765 if you change\n-000010c0: 206f 7074 696f 6e20 746d 7064 6972 2074 option tmpdir t\n-000010d0: 6f20 736f 6d65 7468 696e 6720 656c 7365 o something else\n-000010e0: 2c20 7468 6973 2076 616c 7565 2077 696c , this value wil\n-000010f0: 6c20 6265 0a20 2020 2075 7365 6420 6865 l be. used he\n-00001100: 7265 2069 6e73 7465 6164 206f 6620 2f74 re instead of /t\n-00001110: 6d70 0a0a 3d69 7465 6d20 423c 2d2d 6c6f mp..=item B<--lo\n-00001120: 6746 696c 653e 2c20 423c 2d6c 3e0a 0a20 gFile>, B<-l>.. \n-00001130: 2020 206c 6f67 4669 6c65 2c20 4465 6661 logFile, Defa\n-00001140: 756c 743a 2073 7464 6f75 740a 0a3d 6974 ult: stdout..=it\n-00001150: 656d 2042 3c2d 2d70 6c75 734c 6f67 5374 em B<--plusLogSt\n-00001160: 646f 7574 3e0a 0a20 2020 2069 6620 796f dout>.. if yo\n-00001170: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log \n-00001180: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF\n-00001190: 696c 6520 796f 7520 6361 6e0a 2020 2020 ile you can. \n-000011a0: 6164 6469 7469 6f6e 616c 6c79 2070 7269 additionally pri\n-000011b0: 6e74 2074 6865 206f 7574 7075 7420 746f nt the output to\n-000011c0: 2053 5444 4f55 5420 7769 7468 2074 6869 STDOUT with thi\n-000011d0: 7320 666c 6167 0a0a 3d69 7465 6d20 423c s flag..=item B<\n-000011e0: 2d2d 7375 7070 7265 7373 5469 6d65 3e0a --suppressTime>.\n-000011f0: 0a20 2020 2073 7570 7072 6573 7320 6f75 . suppress ou\n-00001200: 7470 7574 206f 6620 7469 6d65 2069 6e20 tput of time in \n-00001210: 6c6f 6766 696c 650a 0a3d 6974 656d 2042 logfile..=item B\n-00001220: 3c2d 2d6d 6178 4669 6c65 6c65 6e3e 2c20 <--maxFilelen>, \n-00001230: 423c 2d6d 3e0a 0a20 2020 206d 6178 696d B<-m>.. maxim\n-00001240: 616c 206c 656e 6774 6820 6f66 206c 6f67 al length of log\n-00001250: 2066 696c 652c 2064 6566 6175 6c74 203d file, default =\n-00001260: 2031 6536 0a0a 3d69 7465 6d20 423c 2d2d 1e6..=item B<--\n-00001270: 6e6f 4f66 4f6c 6446 696c 6573 3e2c 2042 noOfOldFiles>, B\n-00001280: 3c2d 6e3e 0a0a 2020 2020 6e75 6d62 6572 <-n>.. number\n-00001290: 206f 6620 6f6c 6420 6c6f 6720 6669 6c65 of old log file\n-000012a0: 732c 2064 6566 6175 6c74 203d 2035 0a0a s, default = 5..\n-000012b0: 3d69 7465 6d20 423c 2d2d 7361 7665 4c6f =item B<--saveLo\n-000012c0: 6773 3e0a 0a20 2020 2073 6176 6520 6c6f gs>.. save lo\n-000012d0: 6720 6669 6c65 7320 7769 7468 2064 6174 g files with dat\n-000012e0: 6520 616e 6420 7469 6d65 2069 6e73 7465 e and time inste\n-000012f0: 6164 206f 6620 6465 6c65 7469 6e67 2074 ad of deleting t\n-00001300: 6865 0a20 2020 206f 6c64 2028 7769 7468 he. old (with\n-00001310: 205b 2d6e 6f4f 664f 6c64 4669 6c65 735d [-noOfOldFiles]\n-00001320: 290a 0a3d 6974 656d 2042 3c2d 2d63 6f6d )..=item B<--com\n-00001330: 7072 6573 7357 6974 683e 0a0a 2020 2020 pressWith>.. \n-00001340: 636f 6d70 7265 7373 2073 6176 6564 206c compress saved l\n-00001350: 6f67 2066 696c 6573 2028 652e 672e 2077 og files (e.g. w\n-00001360: 6974 6820 2767 7a69 7020 2d39 2729 2e0a ith 'gzip -9')..\n-00001370: 2020 2020 6465 6661 756c 7420 6973 2027 default is '\n-00001380: 627a 6970 3227 0a0a 3d62 6163 6b0a 0a3d bzip2'..=back..=\n-00001390: 6865 6164 3120 434f 5059 5249 4748 540a head1 COPYRIGHT.\n-000013a0: 0a43 6f70 7972 6967 6874 2028 6329 2032 .Copyright (c) 2\n-000013b0: 3030 382d 3230 3232 2062 7920 4865 696e 008-2022 by Hein\n-000013c0: 7a2d 4a6f 7365 6620 436c 6165 7320 2873 z-Josef Claes (s\n-000013d0: 6565 2052 4541 444d 4529 0a50 7562 6c69 ee README).Publi\n-000013e0: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G\n-000013f0: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi\n-00001400: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or \n-00001410: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio\n-00001420: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel\n-00001430: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te\n-00001440: 7874 2824 3029 3b0a 0a26 7072 696e 7456 xt($0);..&printV\n-00001450: 6572 7369 6f6e 285c 4041 5247 562c 2027 ersion(\\@ARGV, '\n-00001460: 2d56 272c 2027 2d2d 7665 7273 696f 6e27 -V', '--version'\n-00001470: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar\n-00001480: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara\n-00001490: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi\n-000014a0: 7374 7327 203d 3e20 276e 6f27 2c0a 0909 sts' => 'no',...\n-000014b0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [\n-000014c0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000014d0: 6d65 2720 3d3e 2027 6368 6563 6b42 6163 me' => 'checkBac\n-000014e0: 6b75 7027 2c0a 0909 0909 0920 2020 2027 kup',...... '\n-000014f0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001500: 2d63 272c 0a09 0909 0909 2020 2020 272d -c',...... '-\n-00001510: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001520: 6368 6563 6b44 6972 272c 0a09 0909 0909 checkDir',......\n-00001530: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00001540: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-00001550: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001560: 3d3e 2027 7665 7262 6f73 6527 2c0a 0909 => 'verbose',...\n-00001570: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001580: 6f6e 2720 3d3e 2027 2d76 272c 0a09 0909 on' => '-v',....\n-00001590: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-000015a0: 2720 3d3e 2027 2d2d 7665 7262 6f73 6527 ' => '--verbose'\n-000015b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-000015c0: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p\n-000015d0: 6172 4a6f 6273 272c 0a09 0909 0909 2020 arJobs',...... \n-000015e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-000015f0: 3e20 272d 7027 2c0a 0909 0909 0920 2020 > '-p',...... \n-00001600: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-00001610: 272d 2d70 6172 4a6f 6273 272c 0a09 0909 '--parJobs',....\n-00001620: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n-00001630: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... \n-00001640: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n-00001650: 275c 415b 312d 395d 5c64 2a5c 5a27 292c '\\A[1-9]\\d*\\Z'),\n-00001660: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001670: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri\n-00001680: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '-\n-00001690: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-000016a0: 2d70 7269 6e74 2729 2c0a 0909 0909 4f70 -print'),.....Op\n-000016b0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000016c0: 2720 3d3e 2027 6c61 7374 4f66 4561 6368 ' => 'lastOfEach\n-000016d0: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... \n-000016e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-000016f0: 3e20 272d 2d6c 6173 744f 6645 6163 6853 > '--lastOfEachS\n-00001700: 6572 6965 7327 292c 0a09 0909 094f 7074 eries'),.....Opt\n-00001710: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00001720: 203d 3e20 2769 6e63 6c75 6465 5265 6e61 => 'includeRena\n-00001730: 6d65 6442 6163 6b75 7073 272c 0a09 0909 medBackups',....\n-00001740: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00001750: 6e27 203d 3e20 272d 6927 2c0a 0909 0909 n' => '-i',.....\n-00001760: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00001770: 203d 3e0a 0909 0909 0920 2020 2027 2d2d =>...... '--\n-00001780: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa\n-00001790: 636b 7570 7327 292c 0a09 0909 094f 7074 ckups'),.....Opt\n-000017a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000017b0: 203d 3e20 2777 726f 6e67 4669 6c65 5461 => 'wrongFileTa\n-000017c0: 626c 6573 272c 0a09 0909 0909 2020 2020 bles',...... \n-000017d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000017e0: 272d 7727 2c0a 0909 0909 0920 2020 2027 '-w',...... '\n-000017f0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-00001800: 2d77 726f 6e67 4669 6c65 5461 626c 6573 -wrongFileTables\n-00001810: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00001820: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n-00001830: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00001840: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF\n-00001850: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n-00001860: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001870: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '-\n-00001880: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001890: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... \n-000018a0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-000018b0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-000018c0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no\n-000018d0: 7420 5b69 6e74 6572 6163 7469 7665 5d27 t [interactive]'\n-000018e0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-000018f0: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p\n-00001900: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',..\n-00001910: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00001920: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL\n-00001930: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',......\n-00001940: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00001950: 3e20 275b 6c6f 6746 696c 655d 2729 2c0a > '[logFile]'),.\n-00001960: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00001970: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp\n-00001980: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',......\n-00001990: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-000019a0: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT\n-000019b0: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio\n-000019c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000019d0: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',.\n-000019e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000019f0: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',..\n-00001a00: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00001a10: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil\n-00001a20: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... \n-00001a30: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e\n-00001a40: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa\n-00001a50: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\\A[e\\\n-00001a60: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\\Z',. \n-00001a70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001a80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001a90: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00001aa0: 3e27 5b6c 6f67 4669 6c65 5d27 292c 0a09 >'[logFile]'),..\n-00001ab0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001ac0: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO\n-00001ad0: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... \n-00001ae0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00001af0: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... \n-00001b00: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00001b10: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles\n-00001b20: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-00001b30: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',..\n-00001b40: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n-00001b50: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\\A\\d+\\Z',\n-00001b60: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00001b70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001b80: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o\n-00001b90: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>\"[logF\n-00001ba0: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]\"),. \n-00001bb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001bc0: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00001bd0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001be0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',......\n-00001bf0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00001c00: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs'\n-00001c10: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00001c20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001c30: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00001c40: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no'\n-00001c50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00001c60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001c70: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00001c80: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo\n-00001c90: 6746 696c 655d 2729 2c0a 2020 2020 2020 gFile]'),. \n-00001ca0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001cb0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n-00001cc0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001cd0: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith',\n-00001ce0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00001cf0: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com\n-00001d00: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',.....\n-00001d10: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n-00001d20: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. \n-00001d30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001d40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001d50: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul\n-00001d60: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. \n-00001d70: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001d80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001d90: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl\n-00001da0: 795f 6966 2720 3d3e 275b 6c6f 6746 696c y_if' =>'[logFil\n-00001db0: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option\n-00001dc0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001dd0: 2027 746d 7064 6972 272c 0a09 0909 0909 'tmpdir',......\n-00001de0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00001df0: 203d 3e20 272d 5427 2c0a 0909 0909 0920 => '-T',...... \n-00001e00: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00001e10: 3e20 272d 2d74 6d70 6469 7227 2c0a 0909 > '--tmpdir',...\n-00001e20: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-00001e30: 2720 3d3e 2024 746d 7064 6972 292c 0a0a ' => $tmpdir),..\n-00001e40: 2320 6869 6464 656e 206f 7074 696f 6e73 # hidden options\n-00001e50: 0a23 2075 7365 6420 6279 2073 746f 7265 .# used by store\n-00001e60: 4261 636b 7570 4d6f 756e 742e 706c 0a09 BackupMount.pl..\n-00001e70: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001e80: 2d6e 616d 6527 203d 3e20 2777 7269 7465 -name' => 'write\n-00001e90: 546f 4e61 6d65 6450 6970 6527 2c0a 0909 ToNamedPipe',...\n-00001ea0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001eb0: 6f6e 2720 3d3e 2027 2d2d 7772 6974 6554 on' => '--writeT\n-00001ec0: 6f4e 616d 6564 5069 7065 272c 0a09 0909 oNamedPipe',....\n-00001ed0: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n-00001ee0: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... \n-00001ef0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => '\n-00001f00: 7965 7327 290a 0909 2020 2020 5d0a 2020 yes')... ]. \n-00001f10: 2020 293b 0a0a 0a24 4368 6563 6b50 6172 );...$CheckPar\n-00001f20: 2d3e 6368 6563 6b28 272d 6172 6776 2720 ->check('-argv' \n-00001f30: 3d3e 205c 4041 5247 562c 0a20 2020 2020 => \\@ARGV,. \n-00001f40: 2020 2020 2020 2020 2020 2020 272d 6865 '-he\n-00001f50: 6c70 2720 3d3e 2024 4865 6c70 0a20 2020 lp' => $Help. \n-00001f60: 2020 2020 2020 2020 2020 2020 2020 293b );\n-00001f70: 0a0a 2320 4175 7377 6572 7475 6e67 2064 ..# Auswertung d\n-00001f80: 6572 2050 6172 616d 6574 6572 0a6d 7920 er Parameter.my \n-00001f90: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP\n-00001fa0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00001fb0: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m\n-00001fc0: 7920 2462 6163 6b75 7044 6972 203d 2024 y $backupDir = $\n-00001fd0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001fe0: 5769 7468 5061 7228 2763 6865 636b 4261 WithPar('checkBa\n-00001ff0: 636b 7570 2729 3b0a 6d79 2024 7061 724a ckup');.my $parJ\n-00002000: 6f62 7320 3d20 2443 6865 636b 5061 722d obs = $CheckPar-\n-00002010: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00002020: 7061 724a 6f62 7327 293b 0a6d 7920 2476 parJobs');.my $v\n-00002030: 6572 626f 7365 203d 2024 4368 6563 6b50 erbose = $CheckP\n-00002040: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00002050: 7450 6172 2827 7665 7262 6f73 6527 293b tPar('verbose');\n-00002060: 0a6d 7920 246c 6173 744f 6645 6163 6853 .my $lastOfEachS\n-00002070: 6572 6965 7320 3d20 2443 6865 636b 5061 eries = $CheckPa\n-00002080: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-00002090: 5061 7228 276c 6173 744f 6645 6163 6853 Par('lastOfEachS\n-000020a0: 6572 6965 7327 293b 0a6d 7920 2469 6e63 eries');.my $inc\n-000020b0: 6c75 6465 5265 6e61 6d65 6442 6163 6b75 ludeRenamedBacku\n-000020c0: 7073 203d 0a20 2020 2024 4368 6563 6b50 ps =. $CheckP\n-000020d0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-000020e0: 7450 6172 2827 696e 636c 7564 6552 656e tPar('includeRen\n-000020f0: 616d 6564 4261 636b 7570 7327 293b 0a6d amedBackups');.m\n-00002100: 7920 2477 726f 6e67 4669 6c65 5461 626c y $wrongFileTabl\n-00002110: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-00002120: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w\n-00002130: 726f 6e67 4669 6c65 5461 626c 6573 2729 rongFileTables')\n-00002140: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = \n-00002150: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00002160: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil\n-00002170: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog\n-00002180: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP\n-00002190: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-000021a0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd\n-000021b0: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT\n-000021c0: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check\n-000021d0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-000021e0: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT\n-000021f0: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime\n-00002200: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? '\n-00002210: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my \n-00002220: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C\n-00002230: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00002240: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel\n-00002250: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl\n-00002260: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP\n-00002270: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00002280: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles'\n-00002290: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs \n-000022a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000022b0: 4f70 7457 6974 6850 6172 2827 7361 7665 OptWithPar('save\n-000022c0: 4c6f 6773 2729 3b0a 2473 6176 654c 6f67 Logs');.$saveLog\n-000022d0: 7320 3d20 2473 6176 654c 6f67 7320 3f20 s = $saveLogs ? \n-000022e0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my\n-000022f0: 2024 636f 6d70 7265 7373 5769 7468 203d $compressWith =\n-00002300: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00002310: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr\n-00002320: 6573 7357 6974 6827 293b 0a24 746d 7064 essWith');.$tmpd\n-00002330: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar->\n-00002340: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t\n-00002350: 6d70 6469 7227 293b 0a23 2068 6964 6465 mpdir');.# hidde\n-00002360: 6e20 6f70 7469 6f6e 730a 6d79 2024 7772 n options.my $wr\n-00002370: 6974 6554 6f4e 616d 6564 5069 7065 203d iteToNamedPipe =\n-00002380: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00002390: 7074 5769 7468 5061 7228 2777 7269 7465 ptWithPar('write\n-000023a0: 546f 4e61 6d65 6450 6970 6527 293b 0a0a ToNamedPipe');..\n-000023b0: 0a75 6e6c 6573 7320 2824 7061 724a 6f62 .unless ($parJob\n-000023c0: 7329 0a7b 0a20 2020 206c 6f63 616c 202a s).{. local *\n-000023d0: 4649 4c45 3b0a 2020 2020 6966 2028 6f70 FILE;. if (op\n-000023e0: 656e 2846 494c 452c 2022 2f70 726f 632f en(FILE, \"/proc/\n-000023f0: 6370 7569 6e66 6f22 2929 0a20 2020 207b cpuinfo\")). {\n-00002400: 0a09 6d79 2024 6c3b 0a09 2470 6172 4a6f ..my $l;..$parJo\n-00002410: 6273 203d 2031 3b0a 0977 6869 6c65 2028 bs = 1;..while (\n-00002420: 246c 203d 203c 4649 4c45 3e29 0a09 7b0a $l = )..{.\n-00002430: 0920 2020 2024 7061 724a 6f62 732b 2b20 . $parJobs++ \n-00002440: 6966 2024 6c20 3d7e 202f 7072 6f63 6573 if $l =~ /proces\n-00002450: 736f 722f 3b0a 097d 0a09 636c 6f73 6528 sor/;..}..close(\n-00002460: 4649 4c45 293b 0a09 2470 6172 4a6f 6273 FILE);..$parJobs\n-00002470: 202a 3d20 333b 0a20 2020 207d 0a20 2020 *= 3;. }. \n-00002480: 2024 7061 724a 6f62 7320 3d20 3320 6966 $parJobs = 3 if\n-00002490: 2024 7061 724a 6f62 7320 3c20 333b 0a7d $parJobs < 3;.}\n-000024a0: 0a0a 6966 2028 2470 7269 6e74 290a 7b0a ..if ($print).{.\n-000024b0: 2020 2020 2443 6865 636b 5061 722d 3e70 $CheckPar->p\n-000024c0: 7269 6e74 2829 3b0a 2020 2020 6578 6974 rint();. exit\n-000024d0: 2030 3b0a 7d0a 0a0a 6d79 2028 4070 6172 0;.}...my (@par\n-000024e0: 2920 3d20 2829 3b0a 6966 2028 6465 6669 ) = ();.if (defi\n-000024f0: 6e65 6420 246c 6f67 4669 6c65 290a 7b0a ned $logFile).{.\n-00002500: 2020 2020 7075 7368 2040 7061 722c 2028 push @par, (\n-00002510: 272d 6669 6c65 2720 3d3e 2024 6c6f 6746 '-file' => $logF\n-00002520: 696c 652c 0a09 0927 2d6d 756c 7469 7072 ile,...'-multipr\n-00002530: 696e 7427 203d 3e20 2779 6573 2729 3b0a int' => 'yes');.\n-00002540: 7d0a 656c 7365 0a7b 0a20 2020 2070 7573 }.else.{. pus\n-00002550: 6820 4070 6172 2c20 2827 2d66 696c 6564 h @par, ('-filed\n-00002560: 6573 6372 6970 746f 7227 2c20 2a53 5444 escriptor', *STD\n-00002570: 4f55 5429 3b0a 7d0a 0a6d 7920 2824 7072 OUT);.}..my ($pr\n-00002580: 4c6f 674b 696e 6429 203d 205b 2741 3a42 LogKind) = ['A:B\n-00002590: 4547 494e 272c 0a09 0920 2020 275a 3a45 EGIN',... 'Z:E\n-000025a0: 4e44 272c 0a09 0920 2020 2756 3a56 4552 ND',... 'V:VER\n-000025b0: 5349 4f4e 272c 0a09 0920 2020 2749 3a49 SION',... 'I:I\n-000025c0: 4e46 4f27 2c0a 0909 2020 2027 573a 5741 NFO',... 'W:WA\n-000025d0: 524e 494e 4727 2c0a 0909 2020 2027 453a RNING',... 'E:\n-000025e0: 4552 524f 5227 2c0a 0909 2020 2027 533a ERROR',... 'S:\n-000025f0: 5354 4154 4953 5449 4327 2c0a 0909 2020 STATISTIC',... \n-00002600: 2027 443a 4445 4255 4727 5d3b 0a6d 7920 'D:DEBUG'];.my \n-00002610: 2470 724c 6f67 3120 3d20 7072 696e 744c $prLog1 = printL\n-00002620: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' \n-00002630: 3d3e 2024 7072 4c6f 674b 696e 642c 0a09 => $prLogKind,..\n-00002640: 0909 2020 2040 7061 722c 0a09 0909 2020 .. @par,.... \n-00002650: 2027 2d77 6974 6854 696d 6527 203d 3e20 '-withTime' => \n-00002660: 2477 6974 6854 696d 652c 0a09 0909 2020 $withTime,.... \n-00002670: 2027 2d6d 6178 4669 6c65 6c65 6e27 203d '-maxFilelen' =\n-00002680: 3e20 246d 6178 4669 6c65 6c65 6e2c 0a09 > $maxFilelen,..\n-00002690: 0909 2020 2027 2d6e 6f4f 664f 6c64 4669 .. '-noOfOldFi\n-000026a0: 6c65 7327 203d 3e20 246e 6f4f 664f 6c64 les' => $noOfOld\n-000026b0: 4669 6c65 732c 0a09 0909 2020 2027 2d73 Files,.... '-s\n-000026c0: 6176 654c 6f67 7327 203d 3e20 2473 6176 aveLogs' => $sav\n-000026d0: 654c 6f67 732c 0a09 0909 2020 2027 2d63 eLogs,.... '-c\n-000026e0: 6f6d 7072 6573 7357 6974 6827 203d 3e20 ompressWith' => \n-000026f0: 2463 6f6d 7072 6573 7357 6974 682c 0a09 $compressWith,..\n-00002700: 0909 2020 2027 2d74 6d70 6469 7227 203d .. '-tmpdir' =\n-00002710: 3e20 2474 6d70 6469 7229 3b0a 0a6d 7920 > $tmpdir);..my \n-00002720: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo\n-00002730: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new('\n-00002740: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr\n-00002750: 4c6f 6731 5d29 3b0a 0a69 6620 2824 706c Log1]);..if ($pl\n-00002760: 7573 4c6f 6753 7464 6f75 7429 0a7b 0a20 usLogStdout).{. \n-00002770: 2020 206d 7920 2470 203d 2070 7269 6e74 my $p = print\n-00002780: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind'\n-00002790: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,.\n-000027a0: 0909 0920 2027 2d66 696c 6564 6573 6372 ... '-filedescr\n-000027b0: 6970 746f 7227 2c20 2a53 5444 4f55 542c iptor', *STDOUT,\n-000027c0: 0a09 0909 2020 272d 746d 7064 6972 2720 .... '-tmpdir' \n-000027d0: 3d3e 2024 746d 7064 6972 293b 0a20 2020 => $tmpdir);. \n-000027e0: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p\n-000027f0: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]);\n-00002800: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN\n-00002810: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. \n-00002820: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo\n-00002830: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' =\n-00002840: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,...\n-00002850: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $\n-00002860: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-00002870: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil\n-00002880: 656c 656e 2720 3d3e 2030 2c0a 0909 0920 elen' => 0,.... \n-00002890: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $\n-000028a0: 746d 7064 6972 293b 0a20 2020 2024 7072 tmpdir);. $pr\n-000028b0: 4c6f 672d 3e61 6464 2827 2d70 724c 6f67 Log->add('-prLog\n-000028c0: 7327 203d 3e20 5b24 6e70 5d29 3b0a 7d0a s' => [$np]);.}.\n-000028d0: 0a24 7072 4c6f 672d 3e66 6f72 6b28 2472 .$prLog->fork($r\n-000028e0: 6571 293b 0a0a 0a24 7072 4c6f 672d 3e70 eq);...$prLog->p\n-000028f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002900: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n-00002910: 7227 203d 3e20 5b22 6d69 7373 696e 6720 r' => [\"missing \n-00002920: 7061 7261 6d65 7465 7220 6261 636b 7570 parameter backup\n-00002930: 4469 725c 6e24 4865 6c70 225d 2c0a 0920 Dir\\n$Help\"],.. \n-00002940: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00002950: 3129 0a20 2020 2075 6e6c 6573 7320 6465 1). unless de\n-00002960: 6669 6e65 6420 2462 6163 6b75 7044 6972 fined $backupDir\n-00002970: 3b0a 2462 6163 6b75 7044 6972 203d 7e20 ;.$backupDir =~ \n-00002980: 732f 5c2f 2b5c 5a2f 2f3b 2020 2020 2020 s/\\/+\\Z//; \n-00002990: 2320 7265 6d6f 7665 202f 2061 7420 7468 # remove / at th\n-000029a0: 6520 656e 640a 2470 724c 6f67 2d3e 7072 e end.$prLog->pr\n-000029b0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000029c0: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str\n-000029d0: 2720 3d3e 205b 2262 6163 6b75 7044 6972 ' => [\"backupDir\n-000029e0: 2064 6972 6563 746f 7279 203c 2462 6163 directory <$bac\n-000029f0: 6b75 7044 6972 3e20 646f 6573 206e 6f74 kupDir> does not\n-00002a00: 2065 7869 7374 2022 202e 0a09 2020 2020 exist \" ... \n-00002a10: 2020 226f 7220 6973 206e 6f74 2061 6363 \"or is not acc\n-00002a20: 6573 6962 6c65 225d 2c0a 0920 2020 2020 esible\"],.. \n-00002a30: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). \n-00002a40: 2020 2075 6e6c 6573 7320 2d72 2024 6261 unless -r $ba\n-00002a50: 636b 7570 4469 723b 0a0a 2470 724c 6f67 ckupDir;..$prLog\n-00002a60: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00002a70: 3d3e 2027 4127 2c0a 0920 2020 2020 2027 => 'A',.. '\n-00002a80: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => [\"check\n-00002a90: 696e 6720 6261 636b 7570 7320 696e 203c ing backups in <\n-00002aa0: 2220 2e0a 0909 0920 3a3a 6162 736f 6c75 \" ..... ::absolu\n-00002ab0: 7465 5061 7468 2824 6261 636b 7570 4469 tePath($backupDi\n-00002ac0: 7229 202e 2022 3e22 5d29 3b0a 2470 724c r) . \">\"]);.$prL\n-00002ad0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002ae0: 2720 3d3e 2027 5627 2c0a 0920 2020 2020 ' => 'V',.. \n-00002af0: 2027 2d73 7472 2720 3d3e 205b 2273 746f '-str' => [\"sto\n-00002b00: 7265 4261 636b 7570 4368 6563 6b42 6163 reBackupCheckBac\n-00002b10: 6b75 702e 706c 2c20 246d 6169 6e3a 3a53 kup.pl, $main::S\n-00002b20: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO\n-00002b30: 4e22 5d29 3b0a 0a6d 7920 2840 6469 7273 N\"]);..my (@dirs\n-00002b40: 546f 4368 6563 6b29 203d 2026 3a3a 7365 ToCheck) = &::se\n-00002b50: 6c65 6374 4261 636b 7570 4469 7273 2824 lectBackupDirs($\n-00002b60: 6261 636b 7570 4469 722c 2024 696e 636c backupDir, $incl\n-00002b70: 7564 6552 656e 616d 6564 4261 636b 7570 udeRenamedBackup\n-00002b80: 732c 0a09 0909 0909 2463 6865 636b 5375 s,......$checkSu\n-00002b90: 6d46 696c 652c 2024 7072 4c6f 672c 0a09 mFile, $prLog,..\n-00002ba0: 0909 0909 246c 6173 744f 6645 6163 6853 ....$lastOfEachS\n-00002bb0: 6572 6965 7329 3b0a 0a28 406d 6169 6e3a eries);..(@main:\n-00002bc0: 3a63 6c65 616e 7570 2920 3d20 2824 7072 :cleanup) = ($pr\n-00002bd0: 4c6f 672c 2075 6e64 6566 293b 0a24 5349 Log, undef);.$SI\n-00002be0: 477b 494e 547d 203d 205c 2663 6c65 616e G{INT} = \\&clean\n-00002bf0: 7570 3b0a 2453 4947 7b54 4552 4d7d 203d up;.$SIG{TERM} =\n-00002c00: 205c 2663 6c65 616e 7570 3b0a 0a0a 6d79 \\&cleanup;...my\n-00002c10: 2024 7061 7246 6f72 6b20 3d20 7061 7261 $parFork = para\n-00002c20: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('-\n-00002c30: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => \n-00002c40: 2470 6172 4a6f 6273 2c0a 0909 0909 272d $parJobs,.....'-\n-00002c50: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-00002c60: 293b 0a6d 7920 2474 696e 7953 6368 6564 );.my $tinySched\n-00002c70: 203d 2074 696e 7957 6169 7453 6368 6564 = tinyWaitSched\n-00002c80: 756c 6572 2d3e 6e65 7728 272d 7072 4c6f uler->new('-prLo\n-00002c90: 6727 203d 3e20 2470 724c 6f67 293b 0a0a g' => $prLog);..\n-00002ca0: 6d79 2024 7263 7366 203d 2075 6e64 6566 my $rcsf = undef\n-00002cb0: 3b20 2020 2020 2020 2320 706f 696e 7465 ; # pointe\n-00002cc0: 7220 746f 2072 6561 6443 6865 636b 5375 r to readCheckSu\n-00002cd0: 6d46 696c 6520 6f62 6a65 6374 0a6d 7920 mFile object.my \n-00002ce0: 2824 6d65 7461 2c20 2470 6f73 7466 6978 ($meta, $postfix\n-00002cf0: 2c20 2475 6e63 6f6d 7072 2c20 4075 6e63 , $uncompr, @unc\n-00002d00: 6f6d 7072 5061 722c 0a20 2020 2024 7370 omprPar,. $sp\n-00002d10: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive\n-00002d20: 722c 2024 6172 6368 6976 6554 7970 6573 r, $archiveTypes\n-00002d30: 293b 0a6d 7920 2464 6972 546f 4368 6563 );.my $dirToChec\n-00002d40: 6b20 3d20 756e 6465 663b 0a6d 7920 246a k = undef;.my $j\n-00002d50: 6f62 546f 446f 203d 2031 3b0a 6d79 2024 obToDo = 1;.my $\n-00002d60: 7061 7246 6f72 6b54 6f44 6f20 3d20 303b parForkToDo = 0;\n-00002d70: 0a23 2073 7461 7469 7374 6963 616c 2064 .# statistical d\n-00002d80: 6174 6120 7065 7220 6261 636b 7570 3a0a ata per backup:.\n-00002d90: 6d79 2024 6368 6563 6b65 6446 696c 6573 my $checkedFiles\n-00002da0: 203d 2030 3b0a 6d79 2024 6368 6563 6b65 = 0;.my $checke\n-00002db0: 6446 696c 6573 5369 7a65 203d 2030 3b20 dFilesSize = 0; \n-00002dc0: 2320 7573 6573 2073 697a 6520 6f66 2064 # uses size of d\n-00002dd0: 6174 6120 696e 2062 6163 6b75 7020 2865 ata in backup (e\n-00002de0: 672e 2063 6f6d 7072 6573 7365 6429 0a6d g. compressed).m\n-00002df0: 7920 246c 696e 6b65 6446 696c 6573 203d y $linkedFiles =\n-00002e00: 2030 3b0a 6d79 2024 6c69 6e6b 6564 4669 0;.my $linkedFi\n-00002e10: 6c65 7353 697a 6520 3d20 303b 2020 2320 lesSize = 0; # \n-00002e20: 7573 6573 2073 697a 6520 6f66 2064 6174 uses size of dat\n-00002e30: 6120 696e 2062 6163 6b75 7020 2865 672e a in backup (eg.\n-00002e40: 2063 6f6d 7072 6573 7365 6429 0a23 2073 compressed).# s\n-00002e50: 756d 7320 6f66 2073 7461 7469 7374 6963 ums of statistic\n-00002e60: 616c 2064 6174 613a 0a6d 7920 2463 6865 al data:.my $che\n-00002e70: 636b 6564 4669 6c65 7341 6c6c 203d 2030 ckedFilesAll = 0\n-00002e80: 3b0a 6d79 2024 6368 6563 6b65 6446 696c ;.my $checkedFil\n-00002e90: 6573 5369 7a65 416c 6c20 3d20 303b 0a6d esSizeAll = 0;.m\n-00002ea0: 7920 246c 696e 6b65 6446 696c 6573 416c y $linkedFilesAl\n-00002eb0: 6c20 3d20 303b 0a6d 7920 246c 696e 6b65 l = 0;.my $linke\n-00002ec0: 6446 696c 6573 5369 7a65 416c 6c20 3d20 dFilesSizeAll = \n-00002ed0: 303b 0a0a 0a24 6d61 696e 3a3a 7766 7420 0;...$main::wft \n-00002ee0: 3d0a 2020 2020 7772 6974 6542 7567 7354 =. writeBugsT\n-00002ef0: 6f46 696c 6573 2d3e 6e65 7728 272d 6669 oFiles->new('-fi\n-00002f00: 6c65 5072 6566 6978 2720 3d3e 2024 7772 lePrefix' => $wr\n-00002f10: 6f6e 6746 696c 6554 6162 6c65 732c 0a09 ongFileTables,..\n-00002f20: 0909 2020 272d 6261 636b 7570 4469 7227 .. '-backupDir'\n-00002f30: 203d 3e20 263a 3a61 6273 6f6c 7574 6550 => &::absoluteP\n-00002f40: 6174 6828 2462 6163 6b75 7044 6972 292c ath($backupDir),\n-00002f50: 0a09 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' =\n-00002f60: 3e20 2470 724c 6f67 293b 0a0a 2320 2575 > $prLog);..# %u\n-00002f70: 7365 6449 6e6f 6465 730a 2323 2069 6620 sedInodes.## if \n-00002f80: 696e 6f64 6520 7761 7320 6368 6563 6b65 inode was checke\n-00002f90: 642c 2074 6865 2069 6e6f 6465 2069 7320 d, the inode is \n-00002fa0: 7573 6564 2061 7320 6b65 792c 2076 616c used as key, val\n-00002fb0: 7565 2073 6574 2074 6f20 6d64 3573 756d ue set to md5sum\n-00002fc0: 0a23 2320 6966 206d 6435 7375 6d20 6368 .## if md5sum ch\n-00002fd0: 6563 6b20 6f66 2066 696c 6520 6861 7320 eck of file has \n-00002fe0: 6469 6666 6572 656e 7420 7661 6c75 6520 different value \n-00002ff0: 7468 6174 2073 746f 7265 6420 696e 202e that stored in .\n-00003000: 6d64 3543 6865 636b 5375 6d73 2c0a 2323 md5CheckSums,.##\n-00003010: 2069 6e6f 6465 2069 7320 6d61 726b 6564 inode is marked\n-00003020: 2061 7320 2763 6f72 7275 7074 2720 616e as 'corrupt' an\n-00003030: 6420 6465 6c65 7465 6420 6672 6f6d 2074 d deleted from t\n-00003040: 6861 7420 7461 626c 6520 2873 6f20 616c hat table (so al\n-00003050: 6c20 6166 6665 6374 6564 0a23 2320 6669 l affected.## fi\n-00003060: 6c65 7320 6172 6520 7265 706f 7274 6564 les are reported\n-00003070: 290a 2320 2566 696c 6573 4672 6f6d 4d44 ).# %filesFromMD\n-00003080: 3543 6865 636b 5375 6d46 696c 650a 2323 5CheckSumFile.##\n-00003090: 206b 6579 203d 2072 656c 6174 6976 6520 key = relative \n-000030a0: 6669 6c65 6e61 6d65 0a23 2320 7661 6c75 filename.## valu\n-000030b0: 6520 7072 652d 7365 7420 746f 2031 2c20 e pre-set to 1, \n-000030c0: 7468 656e 2063 6861 6e67 6564 2074 6f20 then changed to \n-000030d0: 3220 6966 2066 696c 6520 6973 206e 6f74 2 if file is not\n-000030e0: 2061 2062 6c6f 636b 6564 2066 696c 650a a blocked file.\n-000030f0: 2323 2073 7562 2063 6865 636b 416c 6c46 ## sub checkAllF\n-00003100: 696c 6573 2063 6865 636b 732c 2069 6620 iles checks, if \n-00003110: 616c 6c20 6669 6c65 7320 696e 2074 6865 all files in the\n-00003120: 2062 6163 6b75 7020 6172 6520 696e 2074 backup are in t\n-00003130: 6869 7320 6861 7368 0a23 2025 7573 6564 his hash.# %used\n-00003140: 426c 6f63 6b49 6e6f 6465 730a 2323 2073 BlockInodes.## s\n-00003150: 746f 7265 7320 696e 6f64 6573 2061 6c72 tores inodes alr\n-00003160: 6561 6479 2075 7365 6420 696e 2062 6c6f eady used in blo\n-00003170: 636b 730a 6d79 2028 2575 7365 6449 6e6f cks.my (%usedIno\n-00003180: 6465 732c 2025 6669 6c65 7346 726f 6d4d des, %filesFromM\n-00003190: 4435 4368 6563 6b53 756d 4669 6c65 2c20 D5CheckSumFile, \n-000031a0: 2470 7265 7644 6972 546f 4368 6563 6b2c $prevDirToCheck,\n-000031b0: 0a20 2020 2025 7573 6564 426c 6f63 6b49 . %usedBlockI\n-000031c0: 6e6f 6465 7329 3b0a 0a77 6869 6c65 2028 nodes);..while (\n-000031d0: 6465 6669 6e65 6428 2472 6373 6629 206f defined($rcsf) o\n-000031e0: 7220 246a 6f62 546f 446f 203e 2030 206f r $jobToDo > 0 o\n-000031f0: 7220 2470 6172 466f 726b 546f 446f 203e r $parForkToDo >\n-00003200: 2030 290a 7b0a 2370 7269 6e74 2022 2d2d 0).{.#print \"--\n-00003210: 6f2d 2d30 2d2d 6a6f 6254 6f44 6f3d 246a o--0--jobToDo=$j\n-00003220: 6f62 546f 446f 2d70 6172 466f 726b 546f obToDo-parForkTo\n-00003230: 446f 3d24 7061 7246 6f72 6b54 6f44 6f2d Do=$parForkToDo-\n-00003240: 5c6e 223b 0a20 2020 2023 2323 2323 2323 \\n\";. #######\n-00003250: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003260: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003270: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003280: 2323 2323 230a 2020 2020 6d79 2024 6f6c #####. my $ol\n-00003290: 6420 3d20 2470 6172 466f 726b 2d3e 6368 d = $parFork->ch\n-000032a0: 6563 6b4f 6e65 2829 3b0a 2020 2020 6966 eckOne();. if\n-000032b0: 2028 246f 6c64 290a 2020 2020 7b0a 096d ($old). {..m\n-000032c0: 7920 2824 746d 704e 2c20 2466 6e29 203d y ($tmpN, $fn) =\n-000032d0: 2040 7b24 6f6c 642d 3e67 6574 2827 2d77 @{$old->get('-w\n-000032e0: 6861 7427 203d 3e20 2769 6e66 6f27 297d hat' => 'info')}\n-000032f0: 3b0a 2370 7269 6e74 2022 2d2d 6f2d 2d31 ;.#print \"--o--1\n-00003300: 2d24 666e 2d5c 6e22 3b0a 096c 6f63 616c -$fn-\\n\";..local\n-00003310: 202a 494e 3b0a 0975 6e6c 6573 7320 2826 *IN;..unless (&\n-00003320: 3a3a 7761 6974 466f 7246 696c 6528 2474 ::waitForFile($t\n-00003330: 6d70 4e29 206f 720a 0909 6f70 656e 2849 mpN) or...open(I\n-00003340: 4e2c 2022 3c20 2474 6d70 4e22 2929 0a09 N, \"< $tmpN\"))..\n-00003350: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p\n-00003360: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00003370: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str'\n-00003380: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => [\"cannot ope\n-00003390: 6e20 7465 6d70 6f72 6172 7920 696e 666f n temporary info\n-000033a0: 726d 6174 696f 6e20 6669 6c65 2022 202e rmation file \" .\n-000033b0: 0a09 0909 0920 2020 2020 223c 2474 6d70 ..... \"<$tmp\n-000033c0: 4e3e 206f 6620 3c24 666e 3e22 5d29 3b0a N> of <$fn>\"]);.\n-000033d0: 0920 2020 206e 6578 743b 0a09 7d0a 2370 . next;..}.#p\n-000033e0: 7269 6e74 2022 2d2d 6f2d 2d32 2d5c 6e22 rint \"--o--2-\\n\"\n-000033f0: 3b0a 096d 7920 246c 3b0a 0977 6869 6c65 ;..my $l;..while\n-00003400: 2028 246c 203d 203c 494e 3e29 0a09 7b0a ($l = )..{.\n-00003410: 0920 2020 2063 686f 7020 246c 3b0a 2370 . chop $l;.#p\n-00003420: 7269 6e74 2022 2d2d 6f2d 2d33 2d2d 246c rint \"--o--3--$l\n-00003430: 5c6e 223b 0a09 2020 2020 6d79 2028 2477 \\n\";.. my ($w\n-00003440: 6861 742c 2040 6c29 203d 2073 706c 6974 hat, @l) = split\n-00003450: 282f 5c73 2f2c 2024 6c2c 2032 293b 0a09 (/\\s/, $l, 2);..\n-00003460: 2020 2020 6966 2028 2477 6861 7420 6571 if ($what eq\n-00003470: 2027 636f 7272 7570 7427 290a 0920 2020 'corrupt').. \n-00003480: 207b 0a09 0964 656c 6574 6520 2475 7365 {...delete $use\n-00003490: 6449 6e6f 6465 737b 246c 5b30 5d7d 3b0a dInodes{$l[0]};.\n-000034a0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-000034b0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-000034c0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-000034d0: 3d3e 0a09 0909 2020 2020 2020 5b22 6d64 =>.... [\"md\n-000034e0: 3520 7375 6d20 6d69 736d 6174 6368 2066 5 sum mismatch f\n-000034f0: 6f72 203c 2466 6e3e 225d 293b 0a09 0924 or <$fn>\"]);...$\n-00003500: 6d61 696e 3a3a 7766 742d 3e70 7269 6e74 main::wft->print\n-00003510: 2822 2466 6e22 2c20 276d 6435 5772 6f6e (\"$fn\", 'md5Wron\n-00003520: 6727 293b 0a09 2020 2020 7d0a 0920 2020 g');.. }.. \n-00003530: 2065 6c73 6966 2028 2477 6861 7420 6571 elsif ($what eq\n-00003540: 2027 6572 726f 7273 2729 0a09 2020 2020 'errors').. \n-00003550: 7b0a 0909 2470 724c 6f67 2d3e 6164 6445 {...$prLog->addE\n-00003560: 6e63 6f75 6e74 6572 2827 2d6b 696e 6427 ncounter('-kind'\n-00003570: 203d 3e20 2745 272c 0a09 0909 0920 2020 => 'E',..... \n-00003580: 2020 272d 6164 6427 203d 3e20 246c 5b30 '-add' => $l[0\n-00003590: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. \n-000035a0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq \n-000035b0: 2763 6865 636b 6564 4669 6c65 7327 290a 'checkedFiles').\n-000035c0: 0920 2020 207b 0a09 0924 6368 6563 6b65 . {...$checke\n-000035d0: 6446 696c 6573 202b 3d20 246c 5b30 5d3b dFiles += $l[0];\n-000035e0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-000035f0: 6966 2028 2477 6861 7420 6571 2027 6368 if ($what eq 'ch\n-00003600: 6563 6b65 6446 696c 6573 5369 7a65 2729 eckedFilesSize')\n-00003610: 0a09 2020 2020 7b0a 0909 2463 6865 636b .. {...$check\n-00003620: 6564 4669 6c65 7353 697a 6520 2b3d 2024 edFilesSize += $\n-00003630: 6c5b 305d 3b0a 0920 2020 207d 0a09 2020 l[0];.. }.. \n-00003640: 2020 656c 7369 6620 2824 7768 6174 2065 elsif ($what e\n-00003650: 7120 276c 696e 6b65 6446 696c 6573 2729 q 'linkedFiles')\n-00003660: 0a09 2020 2020 7b0a 0909 246c 696e 6b65 .. {...$linke\n-00003670: 6446 696c 6573 202b 3d20 246c 5b30 5d3b dFiles += $l[0];\n-00003680: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-00003690: 6966 2028 2477 6861 7420 6571 2027 6c69 if ($what eq 'li\n-000036a0: 6e6b 6564 4669 6c65 7353 697a 6527 290a nkedFilesSize').\n-000036b0: 0920 2020 207b 0a09 0924 6c69 6e6b 6564 . {...$linked\n-000036c0: 4669 6c65 7353 697a 6520 2b3d 2024 6c5b FilesSize += $l[\n-000036d0: 305d 3b0a 0920 2020 207d 0a09 2020 2020 0];.. }.. \n-000036e0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq \n-000036f0: 2763 616c 6365 6449 6e6f 6465 7327 290a 'calcedInodes').\n-00003700: 0920 2020 207b 0a09 0977 6869 6c65 2028 . {...while (\n-00003710: 246c 203d 203c 494e 3e29 0a09 097b 0a09 $l = )...{..\n-00003720: 0920 2020 2063 686f 7020 246c 3b0a 0909 . chop $l;...\n-00003730: 2020 2020 6d79 2028 2469 6e6f 6465 2c20 my ($inode, \n-00003740: 246d 6435 2920 3d20 7370 6c69 7428 2f5c $md5) = split(/\\\n-00003750: 732f 2c20 246c 2c20 3229 3b0a 0909 2020 s/, $l, 2);... \n-00003760: 2020 2475 7365 6442 6c6f 636b 496e 6f64 $usedBlockInod\n-00003770: 6573 7b24 696e 6f64 657d 203d 2024 6d64 es{$inode} = $md\n-00003780: 353b 0a09 097d 0a09 096c 6173 743b 0a09 5;...}...last;..\n-00003790: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else.\n-000037a0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog-\n-000037b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000037c0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... \n-000037d0: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... \n-000037e0: 2020 205b 2275 6e6b 6e6f 776e 2063 6f6d [\"unknown com\n-000037f0: 6d61 6e64 203c 2477 6861 743e 2069 6e20 mand <$what> in \n-00003800: 696e 666f 726d 6174 696f 6e20 6669 6c65 information file\n-00003810: 2022 202e 0a09 0909 2020 2020 2020 2022 \" ..... \"\n-00003820: 3c24 746d 704e 3e20 6f66 2024 666e 225d <$tmpN> of $fn\"]\n-00003830: 293b 0a09 2020 2020 7d0a 097d 0a0a 0963 );.. }..}...c\n-00003840: 6c6f 7365 2849 4e29 3b0a 0975 6e6c 696e lose(IN);..unlin\n-00003850: 6b20 2474 6d70 4e3b 0a20 2020 207d 0a23 k $tmpN;. }.#\n-00003860: 7072 696e 7420 222d 2d6f 2d2d 342d 5c6e print \"--o--4-\\n\n-00003870: 223b 0a0a 2020 2020 2323 2323 2323 2323 \";.. ########\n-00003880: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003890: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000038a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000038b0: 2323 2323 0a20 2020 2024 6a6f 6254 6f44 ####. $jobToD\n-000038c0: 6f20 3d20 4064 6972 7354 6f43 6865 636b o = @dirsToCheck\n-000038d0: 3b0a 2020 2020 6966 2028 2824 7263 7366 ;. if (($rcsf\n-000038e0: 206f 7220 246a 6f62 546f 446f 203e 2030 or $jobToDo > 0\n-000038f0: 2920 616e 6420 2470 6172 466f 726b 2d3e ) and $parFork->\n-00003900: 6765 744e 6f46 7265 6545 6e74 7269 6573 getNoFreeEntries\n-00003910: 2829 203e 2030 290a 2020 2020 7b0a 2370 () > 0). {.#p\n-00003920: 7269 6e74 2022 2d2d 2d2d 302d 2d2d 2d6f rint \"----0----o\n-00003930: 7065 6e20 2464 6972 546f 4368 6563 6b2f pen $dirToCheck/\n-00003940: 2463 6865 636b 5375 6d46 696c 655c 6e22 $checkSumFile\\n\"\n-00003950: 3b0a 2370 7269 6e74 2022 2d2d 2d6a 6f62 ;.#print \"---job\n-00003960: 546f 446f 203d 2024 6a6f 6254 6f44 6f2c ToDo = $jobToDo,\n-00003970: 2066 7265 6545 6e74 7269 6573 3d22 2c20 freeEntries=\", \n-00003980: 2470 6172 466f 726b 2d3e 6765 744e 6f46 $parFork->getNoF\n-00003990: 7265 6545 6e74 7269 6573 2829 2c20 222c reeEntries(), \",\n-000039a0: 2075 7365 6445 6e74 7269 6573 3d22 2c20 usedEntries=\", \n-000039b0: 2470 6172 466f 726b 2d3e 6765 744e 6f55 $parFork->getNoU\n-000039c0: 7365 6445 6e74 7269 6573 2829 2c20 225c sedEntries(), \"\\\n-000039d0: 6e22 3b0a 0a09 756e 6c65 7373 2028 2472 n\";...unless ($r\n-000039e0: 6373 6629 0a09 7b0a 2370 7269 6e74 2022 csf)..{.#print \"\n-000039f0: 2d2d 2d30 2e30 352d 2d2d 5c6e 223b 0a09 ---0.05---\\n\";..\n-00003a00: 2020 2020 2320 5761 6974 2075 6e74 696c # Wait until\n-00003a10: 2061 6c6c 2066 696c 6573 206f 6620 7468 all files of th\n-00003a20: 6520 7072 6576 696f 7573 2061 6374 7561 e previous actua\n-00003a30: 6c20 6261 636b 7570 0a09 2020 2020 2320 l backup.. # \n-00003a40: 6172 6520 6361 6c63 756c 6174 6564 2e20 are calculated. \n-00003a50: 446f 2074 6869 7320 736f 200a 0920 2020 Do this so .. \n-00003a60: 2069 6620 2824 7061 7246 6f72 6b2d 3e67 if ($parFork->g\n-00003a70: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries(\n-00003a80: 2920 213d 2030 290a 0920 2020 207b 0a09 ) != 0).. {..\n-00003a90: 0924 7469 6e79 5363 6865 642d 3e77 6169 .$tinySched->wai\n-00003aa0: 7428 293b 0a09 096e 6578 743b 0a09 2020 t();...next;.. \n-00003ab0: 2020 7d0a 0920 2020 2023 206f 6b2c 2061 }.. # ok, a\n-00003ac0: 6c6c 2066 696c 6573 206f 6620 6f6c 6420 ll files of old \n-00003ad0: 6261 636b 7570 2061 7265 2066 696e 6973 backup are finis\n-00003ae0: 6865 642c 0a09 2020 2020 2320 6e6f 7720 hed,.. # now \n-00003af0: 6265 6769 6e20 7769 7468 2074 6865 206e begin with the n\n-00003b00: 6578 7420 6f6e 650a 0920 2020 2069 6620 ext one.. if \n-00003b10: 2824 7665 7262 6f73 6529 0a09 2020 2020 ($verbose).. \n-00003b20: 7b0a 0909 2670 7269 6e74 5374 6174 2824 {...&printStat($\n-00003b30: 7072 4c6f 672c 2027 272c 2024 6368 6563 prLog, '', $chec\n-00003b40: 6b65 6446 696c 6573 2c20 2463 6865 636b kedFiles, $check\n-00003b50: 6564 4669 6c65 7353 697a 652c 0a09 0909 edFilesSize,....\n-00003b60: 2020 2024 6c69 6e6b 6564 4669 6c65 732c $linkedFiles,\n-00003b70: 2024 6c69 6e6b 6564 4669 6c65 7353 697a $linkedFilesSiz\n-00003b80: 6529 0a09 0920 2020 2069 6620 2463 6865 e)... if $che\n-00003b90: 636b 6564 4669 6c65 7353 697a 6520 2b20 ckedFilesSize + \n-00003ba0: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize\n-00003bb0: 203e 2030 3b0a 0909 2020 2020 2020 2020 > 0;... \n-00003bc0: 2320 6176 6f69 6420 6669 7273 7420 7072 # avoid first pr\n-00003bd0: 696e 746f 7574 2062 6566 6f72 6520 616e intout before an\n-00003be0: 7920 6368 6563 6b73 0a09 2020 2020 7d0a y checks.. }.\n-00003bf0: 0920 2020 2024 6368 6563 6b65 6446 696c . $checkedFil\n-00003c00: 6573 416c 6c20 2b3d 2024 6368 6563 6b65 esAll += $checke\n-00003c10: 6446 696c 6573 3b0a 0920 2020 2024 6368 dFiles;.. $ch\n-00003c20: 6563 6b65 6446 696c 6573 5369 7a65 416c eckedFilesSizeAl\n-00003c30: 6c20 2b3d 2024 6368 6563 6b65 6446 696c l += $checkedFil\n-00003c40: 6573 5369 7a65 3b0a 0920 2020 2024 6c69 esSize;.. $li\n-00003c50: 6e6b 6564 4669 6c65 7341 6c6c 202b 3d20 nkedFilesAll += \n-00003c60: 246c 696e 6b65 6446 696c 6573 3b0a 0920 $linkedFiles;.. \n-00003c70: 2020 2024 6c69 6e6b 6564 4669 6c65 7353 $linkedFilesS\n-00003c80: 697a 6541 6c6c 202b 3d20 246c 696e 6b65 izeAll += $linke\n-00003c90: 6446 696c 6573 5369 7a65 3b0a 0a09 2020 dFilesSize;... \n-00003ca0: 2020 2463 6865 636b 6564 4669 6c65 7320 $checkedFiles \n-00003cb0: 3d20 303b 0a09 2020 2020 2463 6865 636b = 0;.. $check\n-00003cc0: 6564 4669 6c65 7353 697a 6520 3d20 303b edFilesSize = 0;\n-00003cd0: 0a09 2020 2020 246c 696e 6b65 6446 696c .. $linkedFil\n-00003ce0: 6573 203d 2030 3b0a 0920 2020 2024 6c69 es = 0;.. $li\n-00003cf0: 6e6b 6564 4669 6c65 7353 697a 6520 3d20 nkedFilesSize = \n-00003d00: 303b 0a0a 2370 7269 6e74 2022 2d2d 2d30 0;..#print \"---0\n-00003d10: 2e31 2d2d 2d5c 6e22 3b0a 0920 2020 2024 .1---\\n\";.. $\n-00003d20: 7072 6576 4469 7254 6f43 6865 636b 203d prevDirToCheck =\n-00003d30: 2024 6469 7254 6f43 6865 636b 3b0a 0920 $dirToCheck;.. \n-00003d40: 2020 2024 6469 7254 6f43 6865 636b 203d $dirToCheck =\n-00003d50: 2073 6869 6674 2040 6469 7273 546f 4368 shift @dirsToCh\n-00003d60: 6563 6b3b 0a09 2020 2020 6c61 7374 2075 eck;.. last u\n-00003d70: 6e6c 6573 7320 2464 6972 546f 4368 6563 nless $dirToChec\n-00003d80: 6b3b 0a0a 2370 7269 6e74 2022 2d2d 2d30 k;..#print \"---0\n-00003d90: 2e32 2d2d 2d5c 6e22 3b0a 0a09 2020 2020 .2---\\n\";... \n-00003da0: 2663 6865 636b 416c 6c46 696c 6573 2824 &checkAllFiles($\n-00003db0: 7072 6576 4469 7254 6f43 6865 636b 2c20 prevDirToCheck, \n-00003dc0: 5c25 6669 6c65 7346 726f 6d4d 4435 4368 \\%filesFromMD5Ch\n-00003dd0: 6563 6b53 756d 4669 6c65 2c0a 0909 0920 eckSumFile,.... \n-00003de0: 2020 2470 724c 6f67 290a 0909 6966 2025 $prLog)...if %\n-00003df0: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec\n-00003e00: 6b53 756d 4669 6c65 3b0a 0920 2020 2025 kSumFile;.. %\n-00003e10: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec\n-00003e20: 6b53 756d 4669 6c65 203d 2028 293b 0a0a kSumFile = ();..\n-00003e30: 0920 2020 2024 7263 7366 203d 2072 6561 . $rcsf = rea\n-00003e40: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n\n-00003e50: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil\n-00003e60: 6527 203d 3e0a 0909 0909 0920 2022 2464 e' =>...... \"$d\n-00003e70: 6972 546f 4368 6563 6b2f 2463 6865 636b irToCheck/$check\n-00003e80: 5375 6d46 696c 6522 2c0a 0909 0909 0920 SumFile\",...... \n-00003e90: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr\n-00003ea0: 4c6f 672c 0a09 0909 0909 2020 272d 746d Log,...... '-tm\n-00003eb0: 7064 6972 2720 3d3e 2024 746d 7064 6972 pdir' => $tmpdir\n-00003ec0: 293b 0a09 2020 2020 2470 6f73 7466 6978 );.. $postfix\n-00003ed0: 203d 2024 7263 7366 2d3e 6765 7449 6e66 = $rcsf->getInf\n-00003ee0: 6f57 6974 6850 6172 2827 706f 7374 6669 oWithPar('postfi\n-00003ef0: 7827 293b 0a09 2020 2020 6d79 2024 7772 x');.. my $wr\n-00003f00: 6974 6545 7863 6c75 6465 4c6f 6720 3d20 iteExcludeLog = \n-00003f10: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi\n-00003f20: 7468 5061 7228 2777 7269 7465 4578 636c thPar('writeExcl\n-00003f30: 7564 654c 6f67 2729 3b0a 0920 2020 206d udeLog');.. m\n-00003f40: 7920 246c 6f67 496e 4261 636b 7570 4469 y $logInBackupDi\n-00003f50: 7220 3d20 2472 6373 662d 3e67 6574 496e r = $rcsf->getIn\n-00003f60: 666f 5769 7468 5061 7228 276c 6f67 496e foWithPar('logIn\n-00003f70: 4261 636b 7570 4469 7227 293b 0a09 2020 BackupDir');.. \n-00003f80: 2020 6d79 2024 636f 6d70 7265 7373 4c6f my $compressLo\n-00003f90: 6749 6e42 6163 6b75 7044 6972 203d 0a09 gInBackupDir =..\n-00003fa0: 0924 7263 7366 2d3e 6765 7449 6e66 6f57 .$rcsf->getInfoW\n-00003fb0: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress\n-00003fc0: 4c6f 6749 6e42 6163 6b75 7044 6972 2729 LogInBackupDir')\n-00003fd0: 3b0a 0920 2020 206d 7920 246c 6f67 496e ;.. my $logIn\n-00003fe0: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam\n-00003ff0: 6520 3d0a 0909 2472 6373 662d 3e67 6574 e =...$rcsf->get\n-00004000: 496e 666f 5769 7468 5061 7228 276c 6f67 InfoWithPar('log\n-00004010: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-00004020: 616d 6527 293b 0a09 2020 2020 246c 6f67 ame');.. $log\n-00004030: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN\n-00004040: 616d 6520 2e3d 2027 2e62 7a32 270a 0909 ame .= '.bz2'...\n-00004050: 6966 2024 636f 6d70 7265 7373 4c6f 6749 if $compressLogI\n-00004060: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y\n-00004070: 6573 273b 0a09 2020 2020 2028 2475 6e63 es';.. ($unc\n-00004080: 6f6d 7072 2c20 4075 6e63 6f6d 7072 5061 ompr, @uncomprPa\n-00004090: 7229 203d 2040 7b24 7263 7366 2d3e 6765 r) = @{$rcsf->ge\n-000040a0: 7449 6e66 6f57 6974 6850 6172 2827 756e tInfoWithPar('un\n-000040b0: 636f 6d70 7265 7373 2729 7d3b 0a09 2020 compress')};.. \n-000040c0: 2020 2461 7263 6869 7665 5479 7065 7320 $archiveTypes \n-000040d0: 3d20 2472 6373 662d 3e67 6574 496e 666f = $rcsf->getInfo\n-000040e0: 5769 7468 5061 7228 2761 7263 6869 7665 WithPar('archive\n-000040f0: 5479 7065 7327 293b 0a09 2020 2020 2461 Types');.. $a\n-00004100: 7263 6869 7665 5479 7065 7320 3d20 2727 rchiveTypes = ''\n-00004110: 2075 6e6c 6573 7320 2461 7263 6869 7665 unless $archive\n-00004120: 5479 7065 733b 0a09 2020 2020 2473 7065 Types;.. $spe\n-00004130: 6369 616c 5479 7065 4172 6368 6976 6572 cialTypeArchiver\n-00004140: 203d 0a09 0924 7263 7366 2d3e 6765 7449 =...$rcsf->getI\n-00004150: 6e66 6f57 6974 6850 6172 2827 7370 6563 nfoWithPar('spec\n-00004160: 6961 6c54 7970 6541 7263 6869 7665 7227 ialTypeArchiver'\n-00004170: 293b 0a0a 0920 2020 2024 6669 6c65 7346 );... $filesF\n-00004180: 726f 6d4d 4435 4368 6563 6b53 756d 4669 romMD5CheckSumFi\n-00004190: 6c65 7b27 2e6d 6435 426c 6f63 6b43 6865 le{'.md5BlockChe\n-000041a0: 636b 5375 6d73 2e62 7a32 277d 203d 2031 ckSums.bz2'} = 1\n-000041b0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro\n-000041c0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile\n-000041d0: 7b27 2e6d 6435 4368 6563 6b53 756d 732e {'.md5CheckSums.\n-000041e0: 627a 3227 7d20 3d20 313b 0a09 2020 2020 bz2'} = 1;.. \n-000041f0: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che\n-00004200: 636b 5375 6d46 696c 657b 272e 6d64 3543 ckSumFile{'.md5C\n-00004210: 6865 636b 5375 6d73 277d 203d 2031 3b0a heckSums'} = 1;.\n-00004220: 0920 2020 2024 6669 6c65 7346 726f 6d4d . $filesFromM\n-00004230: 4435 4368 6563 6b53 756d 4669 6c65 7b27 D5CheckSumFile{'\n-00004240: 2e6d 6435 4368 6563 6b53 756d 732e 4669 .md5CheckSums.Fi\n-00004250: 6e69 7368 6564 277d 203d 2031 3b0a 0920 nished'} = 1;.. \n-00004260: 2020 2024 6669 6c65 7346 726f 6d4d 4435 $filesFromMD5\n-00004270: 4368 6563 6b53 756d 4669 6c65 7b27 2e6d CheckSumFile{'.m\n-00004280: 6435 4368 6563 6b53 756d 732e 696e 666f d5CheckSums.info\n-00004290: 277d 203d 2031 3b0a 0920 2020 2024 6669 '} = 1;.. $fi\n-000042a0: 6c65 7346 726f 6d4d 4435 4368 6563 6b53 lesFromMD5CheckS\n-000042b0: 756d 4669 6c65 7b27 2e6d 6435 4368 6563 umFile{'.md5Chec\n-000042c0: 6b53 756d 732e 6661 696c 277d 203d 2031 kSums.fail'} = 1\n-000042d0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro\n-000042e0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile\n-000042f0: 7b27 2e73 746f 7265 4261 636b 7570 4c69 {'.storeBackupLi\n-00004300: 6e6b 7327 7d20 3d20 313b 0a09 2020 2020 nks'} = 1;.. \n-00004310: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che\n-00004320: 636b 5375 6d46 696c 657b 272e 7374 6f72 ckSumFile{'.stor\n-00004330: 6542 6163 6b75 702e 6e6f 7453 6176 6564 eBackup.notSaved\n-00004340: 2e62 7a32 277d 203d 2031 0a09 0969 6620 .bz2'} = 1...if \n-00004350: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog\n-00004360: 2065 7120 2779 6573 273b 0a09 2020 2020 eq 'yes';.. \n-00004370: 6966 2028 246c 6f67 496e 4261 636b 7570 if ($logInBackup\n-00004380: 4469 7220 6571 2027 7965 7327 290a 0920 Dir eq 'yes').. \n-00004390: 2020 207b 0a09 0969 6620 2824 6c6f 6749 {...if ($logI\n-000043a0: 6e42 6163 6b75 7044 6972 4669 6c65 4e61 nBackupDirFileNa\n-000043b0: 6d65 290a 0909 7b0a 0909 2020 2020 2466 me)...{... $f\n-000043c0: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check\n-000043d0: 5375 6d46 696c 657b 246c 6f67 496e 4261 SumFile{$logInBa\n-000043e0: 636b 7570 4469 7246 696c 654e 616d 657d ckupDirFileName}\n-000043f0: 203d 2031 3b0a 0909 7d0a 0909 656c 7365 = 1;...}...else\n-00004400: 0a09 097b 0a09 0920 2020 2024 6669 6c65 ...{... $file\n-00004410: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum\n-00004420: 4669 6c65 7b27 2e73 746f 7265 4261 636b File{'.storeBack\n-00004430: 7570 2e6c 6f67 277d 203d 2031 3b0a 0909 up.log'} = 1;...\n-00004440: 2020 2020 2466 696c 6573 4672 6f6d 4d44 $filesFromMD\n-00004450: 3543 6865 636b 5375 6d46 696c 657b 272e 5CheckSumFile{'.\n-00004460: 7374 6f72 6542 6163 6b75 702e 6e6f 7453 storeBackup.notS\n-00004470: 6176 6564 2e62 7a32 277d 203d 2031 3b0a aved.bz2'} = 1;.\n-00004480: 0a09 0920 2020 2024 6669 6c65 7346 726f ... $filesFro\n-00004490: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile\n-000044a0: 7b27 2e73 746f 7265 4261 636b 7570 2e6c {'.storeBackup.l\n-000044b0: 6f67 2e62 7a32 277d 203d 2031 0a09 0909 og.bz2'} = 1....\n-000044c0: 6966 2024 636f 6d70 7265 7373 4c6f 6749 if $compressLogI\n-000044d0: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y\n-000044e0: 6573 273b 0a09 097d 0a09 2020 2020 7d0a es';...}.. }.\n-000044f0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00004500: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00004510: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' \n-00004520: 3d3e 205b 222d 2d20 6368 6563 6b69 6e67 => [\"-- checking\n-00004530: 203c 2464 6972 546f 4368 6563 6b3e 202e <$dirToCheck> .\n-00004540: 2e2e 225d 293b 0a23 0909 6966 2024 7665 ..\"]);.#..if $ve\n-00004550: 7262 6f73 653b 0a09 7d0a 096d 7920 2824 rbose;..}..my ($\n-00004560: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n-00004570: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n-00004580: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n-00004590: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime,\n-000045a0: 0a09 2020 2020 2473 697a 652c 2024 7569 .. $size, $ui\n-000045b0: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, \n-000045c0: 2466 293b 0a09 6966 2028 2828 246d 6435 $f);..if ((($md5\n-000045d0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de\n-000045e0: 7649 6e6f 6465 2c20 2469 6e6f 6465 4261 vInode, $inodeBa\n-000045f0: 636b 7570 2c20 2463 7469 6d65 2c20 246d ckup, $ctime, $m\n-00004600: 7469 6d65 2c20 2461 7469 6d65 2c0a 0909 time, $atime,...\n-00004610: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g\n-00004620: 6964 2c20 246d 6f64 652c 2024 6629 203d id, $mode, $f) =\n-00004630: 2024 7263 7366 2d3e 6e65 7874 4c69 6e65 $rcsf->nextLine\n-00004640: 2829 2920 3e20 3029 0a09 7b0a 0920 2020 ()) > 0)..{.. \n-00004650: 2024 6620 2e3d 2024 706f 7374 6669 7820 $f .= $postfix \n-00004660: 6966 2024 636f 6d70 7220 6571 2027 6327 if $compr eq 'c'\n-00004670: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro\n-00004680: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile\n-00004690: 7b24 667d 203d 2031 3b0a 0920 2020 2069 {$f} = 1;.. i\n-000046a0: 6620 2824 6465 7649 6e6f 6465 203d 7e20 f ($devInode =~ \n-000046b0: 2f5c 4144 4556 4943 452f 2920 2020 2320 /\\ADEVICE/) # \n-000046c0: 7374 6f72 6520 7061 7468 2074 6f20 7361 store path to sa\n-000046d0: 7665 6420 6465 7669 6365 0a09 2020 2020 ved device.. \n-000046e0: 7b0a 0909 666f 7265 6163 6820 6d79 2024 {...foreach my $\n-000046f0: 7020 2826 6765 7452 656c 5061 7468 7328 p (&getRelPaths(\n-00004700: 2466 2929 0a09 097b 0a09 0920 2020 2024 $f))...{... $\n-00004710: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec\n-00004720: 6b53 756d 4669 6c65 7b24 707d 203d 2031 kSumFile{$p} = 1\n-00004730: 3b0a 0909 7d0a 0920 2020 207d 0a23 7072 ;...}.. }.#pr\n-00004740: 696e 7420 226e 6577 2066 696c 6520 3c24 int \"new file <$\n-00004750: 663e 5c6e 223b 0a23 7072 696e 7420 2220 f>\\n\";.#print \" \n-00004760: 2020 2024 6469 7254 6f43 6865 636b 2f24 $dirToCheck/$\n-00004770: 6368 6563 6b53 756d 4669 6c65 5c6e 223b checkSumFile\\n\";\n-00004780: 0a09 2020 2020 6d79 2024 6669 6c65 6e61 .. my $filena\n-00004790: 6d65 203d 2022 2464 6972 546f 4368 6563 me = \"$dirToChec\n-000047a0: 6b2f 2466 223b 0a09 2020 2020 6966 2028 k/$f\";.. if (\n-000047b0: 6c65 6e67 7468 2824 6d64 3573 756d 2920 length($md5sum) \n-000047c0: 3d3d 2033 3229 0a09 2020 2020 7b0a 2370 == 32).. {.#p\n-000047d0: 7269 6e74 2022 2d31 2d24 636f 6d70 722d rint \"-1-$compr-\n-000047e0: 246d 6435 7375 6d2d 5c6e 223b 0a09 0969 $md5sum-\\n\";...i\n-000047f0: 6620 2824 636f 6d70 7220 6e65 2027 6227 f ($compr ne 'b'\n-00004800: 290a 0909 7b0a 0909 2020 2020 2466 696c )...{... $fil\n-00004810: 6573 4672 6f6d 4d44 3543 6865 636b 5375 esFromMD5CheckSu\n-00004820: 6d46 696c 657b 2466 7d20 3d20 323b 2023 mFile{$f} = 2; #\n-00004830: 206e 6f74 2061 2062 6c6f 636b 6564 2066 not a blocked f\n-00004840: 696c 650a 0909 2020 2020 6d79 2028 2469 ile... my ($i\n-00004850: 6e6f 6465 2c20 2473 697a 6542 6163 6b75 node, $sizeBacku\n-00004860: 7029 203d 2028 7374 6174 2824 6669 6c65 p) = (stat($file\n-00004870: 6e61 6d65 2929 5b31 2c37 5d3b 0a23 7072 name))[1,7];.#pr\n-00004880: 696e 7420 222d 322d 2069 6e6f 6465 203d int \"-2- inode =\n-00004890: 2024 696e 6f64 652c 2024 665c 6e22 3b0a $inode, $f\\n\";.\n-000048a0: 0909 2020 2020 6966 2028 2469 6e6f 6465 .. if ($inode\n-000048b0: 290a 0909 2020 2020 7b0a 2370 7269 6e74 )... {.#print\n-000048c0: 2022 2d32 2e35 2d20 696e 6f64 6573 203d \"-2.5- inodes =\n-000048d0: 2022 2c20 6a6f 696e 2827 2027 2c20 6b65 \", join(' ', ke\n-000048e0: 7973 2025 7573 6564 496e 6f64 6573 292c ys %usedInodes),\n-000048f0: 2022 5c6e 223b 0a09 0909 6966 2028 6578 \"\\n\";....if (ex\n-00004900: 6973 7473 2024 7573 6564 496e 6f64 6573 ists $usedInodes\n-00004910: 7b24 696e 6f64 657d 290a 0909 097b 0a23 {$inode})....{.#\n-00004920: 7072 696e 7420 222d 332d 5c6e 223b 0a09 print \"-3-\\n\";..\n-00004930: 0909 2020 2020 2b2b 246c 696e 6b65 6446 .. ++$linkedF\n-00004940: 696c 6573 3b0a 0909 0920 2020 2024 6c69 iles;.... $li\n-00004950: 6e6b 6564 4669 6c65 7353 697a 6520 2b3d nkedFilesSize +=\n-00004960: 2024 7369 7a65 4261 636b 7570 3b0a 2370 $sizeBackup;.#p\n-00004970: 7269 6e74 2022 2d33 2e31 2d22 2c20 2824 rint \"-3.1-\", ($\n-00004980: 7573 6564 496e 6f64 6573 7b24 696e 6f64 usedInodes{$inod\n-00004990: 657d 203f 2024 7573 6564 496e 6f64 6573 e} ? $usedInodes\n-000049a0: 7b24 696e 6f64 657d 203a 2027 756e 6465 {$inode} : 'unde\n-000049b0: 6627 2920 2c20 225c 6e22 3b0a 0909 0920 f') , \"\\n\";.... \n-000049c0: 2020 2069 6620 2824 7573 6564 496e 6f64 if ($usedInod\n-000049d0: 6573 7b24 696e 6f64 657d 206e 6520 246d es{$inode} ne $m\n-000049e0: 6435 7375 6d29 0a09 0909 2020 2020 7b0a d5sum).... {.\n-000049f0: 0909 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin\n-00004a00: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00004a10: 2c0a 0909 0909 0920 2020 2020 2027 2d73 ,...... '-s\n-00004a20: 7472 2720 3d3e 0a09 2020 2020 2020 2020 tr' =>.. \n-00004a30: 2020 2020 2020 5b22 6361 6c63 756c 6174 [\"calculat\n-00004a40: 6564 206d 6435 2073 756d 206f 6620 3c24 ed md5 sum of <$\n-00004a50: 6469 7254 6f43 6865 636b 2f24 663e 2069 dirToCheck/$f> i\n-00004a60: 7320 2220 2e0a 0909 2020 2020 2020 2022 s \" .... \"\n-00004a70: 6469 6666 6572 656e 7420 6672 6f6d 2074 different from t\n-00004a80: 6865 206f 6e65 2069 6e20 2220 2e0a 0909 he one in \" ....\n-00004a90: 2020 2020 2020 2022 3c24 6469 7254 6f43 \"<$dirToC\n-00004aa0: 6865 636b 2f2e 6d64 3542 6c6f 636b 4368 heck/.md5BlockCh\n-00004ab0: 6563 6b53 756d 733e 2028 3129 225d 293b eckSums> (1)\"]);\n-00004ac0: 0a09 0909 0924 6d61 696e 3a3a 7766 742d .....$main::wft-\n-00004ad0: 3e70 7269 6e74 2822 2464 6972 546f 4368 >print(\"$dirToCh\n-00004ae0: 6563 6b2f 2466 222c 0a09 0909 0909 0920 eck/$f\",....... \n-00004af0: 2027 6d64 3557 726f 6e67 2729 3b0a 0909 'md5Wrong');...\n-00004b00: 0920 2020 207d 0a09 0909 2020 2020 656c . }.... el\n-00004b10: 7365 0a09 0909 2020 2020 7b0a 0909 0909 se.... {.....\n-00004b20: 2475 7365 6449 6e6f 6465 737b 2469 6e6f $usedInodes{$ino\n-00004b30: 6465 7d20 3d20 246d 6435 7375 6d3b 0a09 de} = $md5sum;..\n-00004b40: 0909 2020 2020 7d0a 2370 7269 6e74 2022 .. }.#print \"\n-00004b50: 2d33 2e32 2d22 2c20 2475 7365 6449 6e6f -3.2-\", $usedIno\n-00004b60: 6465 737b 2469 6e6f 6465 7d2c 2022 5c6e des{$inode}, \"\\n\n-00004b70: 223b 0a09 0909 2020 2020 6e65 7874 3b0a \";.... next;.\n-00004b80: 0909 097d 0a09 0909 656c 7365 0a09 0909 ...}....else....\n-00004b90: 7b0a 2370 7269 6e74 2022 2d33 2e33 2d22 {.#print \"-3.3-\"\n-00004ba0: 2c20 2824 7573 6564 496e 6f64 6573 7b24 , ($usedInodes{$\n-00004bb0: 696e 6f64 657d 203f 2024 7573 6564 496e inode} ? $usedIn\n-00004bc0: 6f64 6573 7b24 696e 6f64 657d 203a 2027 odes{$inode} : '\n-00004bd0: 756e 6465 6627 2920 2c20 225c 6e22 3b0a undef') , \"\\n\";.\n-00004be0: 0909 0920 2020 2024 7573 6564 496e 6f64 ... $usedInod\n-00004bf0: 6573 7b24 696e 6f64 657d 203d 2024 6d64 es{$inode} = $md\n-00004c00: 3573 756d 3b0a 2370 7269 6e74 2022 2d33 5sum;.#print \"-3\n-00004c10: 2e34 2d22 2c20 2475 7365 6449 6e6f 6465 .4-\", $usedInode\n-00004c20: 737b 2469 6e6f 6465 7d2c 2022 5c6e 223b s{$inode}, \"\\n\";\n-00004c30: 0a09 0909 7d09 0920 2020 207d 0a09 097d ....}.. }...}\n-00004c40: 0a23 7072 696e 7420 222d 332e 352d 6669 .#print \"-3.5-fi\n-00004c50: 6c65 7346 726f 6d4d 4435 4368 6563 6b53 lesFromMD5CheckS\n-00004c60: 756d 4669 6c65 5c7b 2466 5c7d 3d22 2c20 umFile\\{$f\\}=\", \n-00004c70: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che\n-00004c80: 636b 5375 6d46 696c 657b 2466 7d2c 2022 ckSumFile{$f}, \"\n-00004c90: 2d5c 6e22 3b0a 2370 7269 6e74 2022 5c74 -\\n\";.#print \"\\t\n-00004ca0: 6465 7649 6e6f 6465 3d3c 2464 6576 496e devInode=<$devIn\n-00004cb0: 6f64 653e 5c6e 223b 0a09 0975 6e6c 6573 ode>\\n\";...unles\n-00004cc0: 7320 282d 6520 2466 696c 656e 616d 6529 s (-e $filename)\n-00004cd0: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo\n-00004ce0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00004cf0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... '\n-00004d00: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => [\"file \n-00004d10: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m\n-00004d20: 6973 7369 6e67 225d 293b 0a09 0920 2020 issing\"]);... \n-00004d30: 2024 6d61 696e 3a3a 7766 742d 3e70 7269 $main::wft->pri\n-00004d40: 6e74 2824 6669 6c65 6e61 6d65 2c20 2766 nt($filename, 'f\n-00004d50: 696c 654d 6973 7369 6e67 2729 3b0a 2370 ileMissing');.#p\n-00004d60: 7269 6e74 2022 2d34 2d5c 6e22 3b0a 0909 rint \"-4-\\n\";...\n-00004d70: 2020 2020 6e65 7874 3b0a 0909 7d0a 0909 next;...}...\n-00004d80: 6966 2028 696e 6465 7828 2775 6362 272c if (index('ucb',\n-00004d90: 2024 636f 6d70 7229 203c 2030 290a 0909 $compr) < 0)...\n-00004da0: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog->\n-00004db0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00004dc0: 2027 4527 2c0a 0909 0909 2020 272d 7072 'E',..... '-pr\n-00004dd0: 696e 7427 203d 3e0a 0909 0909 2020 5b22 int' =>..... [\"\n-00004de0: 756e 6b6e 6f77 6e20 7661 6c75 6520 636f unknown value co\n-00004df0: 6d70 7220 3d3c 2463 6f6d 7072 3e20 6174 mpr =<$compr> at\n-00004e00: 203c 2220 2e0a 0909 0909 2020 2022 2464 <\" ...... \"$d\n-00004e10: 6972 546f 4368 6563 6b2f 2463 6865 636b irToCheck/$check\n-00004e20: 5375 6d46 696c 653e 2c20 6669 6c65 6e61 SumFile>, filena\n-00004e30: 6d65 203d 203c 2466 3e22 5d29 3b0a 2370 me = <$f>\"]);.#p\n-00004e40: 7269 6e74 2022 2d35 2d5c 6e22 3b0a 0909 rint \"-5-\\n\";...\n-00004e50: 2020 2020 6e65 7874 3b0a 0909 7d0a 0a23 next;...}..#\n-00004e60: 7072 696e 7420 222d 362d 5c6e 223b 0a09 print \"-6-\\n\";..\n-00004e70: 096d 7920 2474 6d70 4e61 6d65 203d 2026 .my $tmpName = &\n-00004e80: 3a3a 756e 6971 4669 6c65 4e61 6d65 2822 ::uniqFileName(\"\n-00004e90: 2474 6d70 6469 722f 7374 6f72 6542 6163 $tmpdir/storeBac\n-00004ea0: 6b75 702d 626c 6f63 6b2e 2229 3b0a 0909 kup-block.\");...\n-00004eb0: 2470 6172 466f 726b 2d3e 6164 645f 6e6f $parFork->add_no\n-00004ec0: 626c 6f63 6b28 272d 6675 6e63 7469 6f6e block('-function\n-00004ed0: 2720 3d3e 205c 2663 6865 636b 4d44 352c ' => \\&checkMD5,\n-00004ee0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun\n-00004ef0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... \n-00004f00: 2020 205b 2464 6972 546f 4368 6563 6b2c [$dirToCheck,\n-00004f10: 2024 6669 6c65 6e61 6d65 2c20 246d 6435 $filename, $md5\n-00004f20: 7375 6d2c 2024 636f 6d70 722c 0a09 0909 sum, $compr,....\n-00004f30: 0920 2020 2020 2020 2470 6f73 7466 6978 . $postfix\n-00004f40: 2c20 2475 6e63 6f6d 7072 2c20 5c40 756e , $uncompr, \\@un\n-00004f50: 636f 6d70 7250 6172 2c0a 0909 0909 2020 comprPar,..... \n-00004f60: 2020 2020 205c 2575 7365 6442 6c6f 636b \\%usedBlock\n-00004f70: 496e 6f64 6573 2c0a 0909 0909 2020 2020 Inodes,..... \n-00004f80: 2020 2031 302a 3130 3234 2a2a 322c 2024 10*1024**2, $\n-00004f90: 746d 704e 616d 652c 2024 7072 4c6f 675d tmpName, $prLog]\n-00004fa0: 2c0a 0909 0909 2020 2020 2020 272d 696e ,..... '-in\n-00004fb0: 666f 2720 3d3e 205b 2474 6d70 4e61 6d65 fo' => [$tmpName\n-00004fc0: 2c20 2466 696c 656e 616d 655d 293b 0a09 , $filename]);..\n-00004fd0: 2020 2020 7d0a 0920 2020 2065 6c73 6966 }.. elsif\n-00004fe0: 2028 246d 6435 7375 6d20 6571 2027 6469 ($md5sum eq 'di\n-00004ff0: 7227 290a 0920 2020 207b 0a09 0924 7072 r').. {...$pr\n-00005000: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00005010: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n-00005020: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00005030: 6469 7265 6374 6f72 7920 3c24 6669 6c65 directory <$file\n-00005040: 6e61 6d65 3e20 6973 206d 6973 7369 6e67 name> is missing\n-00005050: 225d 290a 0909 2020 2020 756e 6c65 7373 \"])... unless\n-00005060: 202d 6520 2466 696c 656e 616d 653b 0a09 -e $filename;..\n-00005070: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00005080: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00005090: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-000050a0: 3e20 5b22 3c24 6669 6c65 6e61 6d65 3e20 > [\"<$filename> \n-000050b0: 6973 206e 6f74 2061 2064 6972 6563 746f is not a directo\n-000050c0: 7279 2122 5d29 0a09 0920 2020 2075 6e6c ry!\"])... unl\n-000050d0: 6573 7320 2d64 2024 6669 6c65 6e61 6d65 ess -d $filename\n-000050e0: 3b0a 0920 2020 207d 0a09 2020 2020 656c ;.. }.. el\n-000050f0: 7369 6620 2824 6d64 3573 756d 2065 7120 sif ($md5sum eq \n-00005100: 2773 796d 6c69 6e6b 2729 0a09 2020 2020 'symlink').. \n-00005110: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin\n-00005120: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00005130: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-00005140: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [\"\n-00005150: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m\n-00005160: 6973 7369 6e67 206f 7220 6e6f 7420 6120 issing or not a \n-00005170: 7379 6d6c 6e6b 2122 5d29 0a09 0920 2020 symlnk!\"])... \n-00005180: 2075 6e6c 6573 7320 2d6c 2024 6669 6c65 unless -l $file\n-00005190: 6e61 6d65 3b0a 0920 2020 207d 0a09 2020 name;.. }.. \n-000051a0: 2020 656c 7369 6620 2824 6d64 3573 756d elsif ($md5sum\n-000051b0: 2065 7120 2770 6970 6527 290a 0920 2020 eq 'pipe').. \n-000051c0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n-000051d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000051e0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-000051f0: 7227 203d 3e20 5b22 6e61 6d65 6420 7069 r' => [\"named pi\n-00005200: 7065 203c 2466 696c 656e 616d 6520 6973 pe <$filename is\n-00005210: 206d 6973 7369 6e67 3e22 5d29 0a09 0920 missing>\"])... \n-00005220: 2020 2075 6e6c 6573 7320 2d65 2024 6669 unless -e $fi\n-00005230: 6c65 6e61 6d65 3b0a 0909 756e 6c65 7373 lename;...unless\n-00005240: 2028 2473 7065 6369 616c 5479 7065 4172 ($specialTypeAr\n-00005250: 6368 6976 6572 2061 6e64 0a09 0920 2020 chiver and... \n-00005260: 2024 6172 6368 6976 6554 7970 6573 203d $archiveTypes =\n-00005270: 7e20 2f70 2f29 0a09 097b 0a09 0920 2020 ~ /p/)...{... \n-00005280: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-00005290: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000052a0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-000052b0: 223c 2466 696c 656e 616d 653e 2069 7320 \"<$filename> is \n-000052c0: 6e6f 7420 6120 6e61 6d65 6420 7069 7065 not a named pipe\n-000052d0: 2122 5d29 0a09 0909 756e 6c65 7373 202d !\"])....unless -\n-000052e0: 7020 2466 696c 656e 616d 653b 0a09 097d p $filename;...}\n-000052f0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-00005300: 6966 2028 246d 6435 7375 6d20 6571 2027 if ($md5sum eq '\n-00005310: 736f 636b 6574 2729 0a09 2020 2020 7b0a socket').. {.\n-00005320: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00005330: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00005340: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00005350: 3d3e 205b 2273 6f63 6b65 7420 3c24 6669 => [\"socket <$fi\n-00005360: 6c65 6e61 6d65 3e20 6973 206d 6973 7369 lename> is missi\n-00005370: 6e67 225d 290a 0909 2020 2020 756e 6c65 ng\"])... unle\n-00005380: 7373 202d 6520 2466 696c 656e 616d 653b ss -e $filename;\n-00005390: 0a09 0975 6e6c 6573 7320 2824 7370 6563 ...unless ($spec\n-000053a0: 6961 6c54 7970 6541 7263 6869 7665 7220 ialTypeArchiver \n-000053b0: 616e 640a 0909 2020 2020 2461 7263 6869 and... $archi\n-000053c0: 7665 5479 7065 7320 3d7e 202f 532f 290a veTypes =~ /S/).\n-000053d0: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog\n-000053e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000053f0: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n-00005400: 2027 2d73 7472 2720 3d3e 205b 223c 2466 '-str' => [\"<$f\n-00005410: 696c 656e 616d 653e 2069 7320 6e6f 7420 ilename> is not \n-00005420: 6120 736f 636b 6574 2122 5d29 0a09 0920 a socket!\"])... \n-00005430: 2020 2075 6e6c 6573 7320 2d53 2024 6669 unless -S $fi\n-00005440: 6c65 6e61 6d65 3b0a 0909 7d0a 0920 2020 lename;...}.. \n-00005450: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($\n-00005460: 6d64 3573 756d 2065 7120 2762 6c6f 636b md5sum eq 'block\n-00005470: 6465 7627 290a 0920 2020 207b 0a09 0924 dev').. {...$\n-00005480: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00005490: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-000054a0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-000054b0: 5b22 626c 6f63 6b20 6465 7669 6365 203c [\"block device <\n-000054c0: 2466 696c 656e 616d 653e 2069 7320 6d69 $filename> is mi\n-000054d0: 7373 696e 6722 5d29 0a09 0920 2020 2075 ssing\"])... u\n-000054e0: 6e6c 6573 7320 2d65 2024 6669 6c65 6e61 nless -e $filena\n-000054f0: 6d65 3b0a 0909 756e 6c65 7373 2028 2473 me;...unless ($s\n-00005500: 7065 6369 616c 5479 7065 4172 6368 6976 pecialTypeArchiv\n-00005510: 6572 2061 6e64 0a09 0920 2020 2024 6172 er and... $ar\n-00005520: 6368 6976 6554 7970 6573 203d 7e20 2f70 chiveTypes =~ /p\n-00005530: 2f29 0a09 097b 0a09 0920 2020 2024 7072 /)...{... $pr\n-00005540: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00005550: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-00005560: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n-00005570: 205b 223c 2466 696c 656e 616d 653e 2069 [\"<$filename> i\n-00005580: 7320 6e6f 7420 6120 626c 6f63 6b20 6465 s not a block de\n-00005590: 7669 6365 2122 5d29 0a09 0909 756e 6c65 vice!\"])....unle\n-000055a0: 7373 202d 6220 2466 696c 656e 616d 653b ss -b $filename;\n-000055b0: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. \n-000055c0: 2065 6c73 6966 2028 246d 6435 7375 6d20 elsif ($md5sum \n-000055d0: 6571 2027 6368 6172 6465 7627 290a 0920 eq 'chardev').. \n-000055e0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n-000055f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00005600: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-00005610: 7374 7227 203d 3e20 5b22 6368 6172 2064 str' => [\"char d\n-00005620: 6576 6963 6520 3c24 6669 6c65 6e61 6d65 evice <$filename\n-00005630: 3e20 6973 206d 6973 7369 6e67 225d 290a > is missing\"]).\n-00005640: 0909 2020 2020 756e 6c65 7373 202d 6520 .. unless -e \n-00005650: 2466 696c 656e 616d 653b 0a09 0975 6e6c $filename;...unl\n-00005660: 6573 7320 2824 7370 6563 6961 6c54 7970 ess ($specialTyp\n-00005670: 6541 7263 6869 7665 7220 616e 640a 0909 eArchiver and...\n-00005680: 2020 2020 2461 7263 6869 7665 5479 7065 $archiveType\n-00005690: 7320 3d7e 202f 702f 290a 0909 7b0a 0909 s =~ /p/)...{...\n-000056a0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-000056b0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-000056c0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' =\n-000056d0: 3e0a 0909 0909 2020 5b22 3c24 6669 6c65 >..... [\"<$file\n-000056e0: 6e61 6d65 3e20 6973 206e 6f74 2061 2063 name> is not a c\n-000056f0: 6861 7220 6465 7669 6365 2122 5d29 0a09 har device!\"])..\n-00005700: 0909 756e 6c65 7373 202d 6320 2466 696c ..unless -c $fil\n-00005710: 656e 616d 653b 0a09 097d 0a09 2020 2020 ename;...}.. \n-00005720: 7d0a 0a23 7072 696e 7420 222d 3130 2d24 }..#print \"-10-$\n-00005730: 665c 6e22 3b0a 0920 2020 2024 7469 6e79 f\\n\";.. $tiny\n-00005740: 5363 6865 642d 3e72 6573 6574 2829 3b0a Sched->reset();.\n-00005750: 097d 0a09 656c 7365 0a09 7b0a 2370 7269 .}..else..{.#pri\n-00005760: 6e74 2022 2d31 312d 2072 6373 6620 3d20 nt \"-11- rcsf = \n-00005770: 756e 6465 665c 6e22 3b0a 0920 2020 2024 undef\\n\";.. $\n-00005780: 7263 7366 203d 2075 6e64 6566 3b0a 097d rcsf = undef;..}\n-00005790: 0a23 7072 696e 7420 222d 3130 2d5c 6e22 .#print \"-10-\\n\"\n-000057a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 2323 ;. }.. ###\n-000057b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000057c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000057d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000057e0: 2323 2323 2323 2323 230a 2020 2020 2474 #########. $t\n-000057f0: 696e 7953 6368 6564 2d3e 7761 6974 2829 inySched->wait()\n-00005800: 3b0a 0a20 2020 2024 7061 7246 6f72 6b54 ;.. $parForkT\n-00005810: 6f44 6f20 3d20 2470 6172 466f 726b 2d3e oDo = $parFork->\n-00005820: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries\n-00005830: 2829 3b0a 2370 7269 6e74 2022 3220 7061 ();.#print \"2 pa\n-00005840: 7246 6f72 6b54 6f44 6f20 3d20 2470 6172 rForkToDo = $par\n-00005850: 466f 726b 546f 446f 5c6e 223b 0a7d 2020 ForkToDo\\n\";.} \n-00005860: 2020 2023 2065 6e64 206f 6620 676c 6f62 # end of glob\n-00005870: 616c 2077 6869 6c65 206c 6f6f 7020 6f76 al while loop ov\n-00005880: 6572 2061 6c6c 206a 6f62 730a 0a26 6368 er all jobs..&ch\n-00005890: 6563 6b41 6c6c 4669 6c65 7328 2464 6972 eckAllFiles($dir\n-000058a0: 546f 4368 6563 6b2c 205c 2566 696c 6573 ToCheck, \\%files\n-000058b0: 4672 6f6d 4d44 3543 6865 636b 5375 6d46 FromMD5CheckSumF\n-000058c0: 696c 652c 0a09 2020 2020 2020 2024 7072 ile,.. $pr\n-000058d0: 4c6f 6729 0a20 2020 2069 6620 2566 696c Log). if %fil\n-000058e0: 6573 4672 6f6d 4d44 3543 6865 636b 5375 esFromMD5CheckSu\n-000058f0: 6d46 696c 653b 0a0a 0a69 6620 2824 7665 mFile;...if ($ve\n-00005900: 7262 6f73 6529 0a7b 0a20 2020 2026 7072 rbose).{. &pr\n-00005910: 696e 7453 7461 7428 2470 724c 6f67 2c20 intStat($prLog, \n-00005920: 2727 2c20 2463 6865 636b 6564 4669 6c65 '', $checkedFile\n-00005930: 732c 2024 6368 6563 6b65 6446 696c 6573 s, $checkedFiles\n-00005940: 5369 7a65 2c0a 0920 2020 2020 2020 246c Size,.. $l\n-00005950: 696e 6b65 6446 696c 6573 2c20 246c 696e inkedFiles, $lin\n-00005960: 6b65 6446 696c 6573 5369 7a65 293b 0a0a kedFilesSize);..\n-00005970: 2020 2020 2463 6865 636b 6564 4669 6c65 $checkedFile\n-00005980: 7341 6c6c 202b 3d20 2463 6865 636b 6564 sAll += $checked\n-00005990: 4669 6c65 733b 0a20 2020 2024 6368 6563 Files;. $chec\n-000059a0: 6b65 6446 696c 6573 5369 7a65 416c 6c20 kedFilesSizeAll \n-000059b0: 2b3d 2024 6368 6563 6b65 6446 696c 6573 += $checkedFiles\n-000059c0: 5369 7a65 3b0a 2020 2020 246c 696e 6b65 Size;. $linke\n-000059d0: 6446 696c 6573 416c 6c20 2b3d 2024 6c69 dFilesAll += $li\n-000059e0: 6e6b 6564 4669 6c65 733b 0a20 2020 2024 nkedFiles;. $\n-000059f0: 6c69 6e6b 6564 4669 6c65 7353 697a 6541 linkedFilesSizeA\n-00005a00: 6c6c 202b 3d20 246c 696e 6b65 6446 696c ll += $linkedFil\n-00005a10: 6573 5369 7a65 3b0a 2020 2020 2670 7269 esSize;. &pri\n-00005a20: 6e74 5374 6174 2824 7072 4c6f 672c 2027 ntStat($prLog, '\n-00005a30: 6f76 6572 616c 6c27 2c20 2463 6865 636b overall', $check\n-00005a40: 6564 4669 6c65 7341 6c6c 2c20 2463 6865 edFilesAll, $che\n-00005a50: 636b 6564 4669 6c65 7353 697a 6541 6c6c ckedFilesSizeAll\n-00005a60: 2c0a 0920 2020 2020 2020 246c 696e 6b65 ,.. $linke\n-00005a70: 6446 696c 6573 416c 6c2c 2024 6c69 6e6b dFilesAll, $link\n-00005a80: 6564 4669 6c65 7353 697a 6541 6c6c 293b edFilesSizeAll);\n-00005a90: 0a7d 0a0a 6d79 2024 656e 6320 3d20 2470 .}..my $enc = $p\n-00005aa0: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere\n-00005ab0: 6428 272d 6b69 6e64 2720 3d3e 2027 5727 d('-kind' => 'W'\n-00005ac0: 293b 0a6d 7920 2453 203d 2024 656e 6320 );.my $S = $enc \n-00005ad0: 3e20 3120 3f20 2753 2720 3a20 2727 3b0a > 1 ? 'S' : '';.\n-00005ae0: 6966 2028 2465 6e63 290a 7b0a 2020 2020 if ($enc).{. \n-00005af0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00005b00: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n-00005b10: 2020 272d 7374 7227 203d 3e20 5b22 2d2d '-str' => [\"--\n-00005b20: 2024 656e 6320 5741 524e 494e 4724 5320 $enc WARNING$S \n-00005b30: 4f43 4355 5252 4544 2044 5552 494e 4720 OCCURRED DURING \n-00005b40: 5448 4520 4348 4543 4b21 202d 2d22 5d29 THE CHECK! --\"])\n-00005b50: 0a7d 0a65 6c73 650a 7b0a 2020 2020 2470 .}.else.{. $p\n-00005b60: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00005b70: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... \n-00005b80: 272d 7374 7227 203d 3e20 5b22 2d2d 206e '-str' => [\"-- n\n-00005b90: 6f20 5741 524e 494e 4753 204f 4343 5552 o WARNINGS OCCUR\n-00005ba0: 5245 4420 4455 5249 4e47 2054 4845 2043 RED DURING THE C\n-00005bb0: 4845 434b 2120 2d2d 225d 293b 0a7d 0a0a HECK! --\"]);.}..\n-00005bc0: 2465 6e63 203d 2024 7072 4c6f 672d 3e65 $enc = $prLog->e\n-00005bd0: 6e63 6f75 6e74 6572 6564 2827 2d6b 696e ncountered('-kin\n-00005be0: 6427 203d 3e20 2745 2729 3b0a 2453 203d d' => 'E');.$S =\n-00005bf0: 2024 656e 6320 3e20 3120 3f20 2753 2720 $enc > 1 ? 'S' \n-00005c00: 3a20 2727 3b0a 6966 2028 2465 6e63 290a : '';.if ($enc).\n-00005c10: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr\n-00005c20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005c30: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' =\n-00005c40: 3e20 5b22 2d2d 2024 656e 6320 4552 524f > [\"-- $enc ERRO\n-00005c50: 5224 5320 4f43 4355 5252 4544 2044 5552 R$S OCCURRED DUR\n-00005c60: 494e 4720 5448 4520 4348 4543 4b21 202d ING THE CHECK! -\n-00005c70: 2d22 5d29 3b0a 7d0a 656c 7365 0a7b 0a20 -\"]);.}.else.{. \n-00005c80: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00005c90: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00005ca0: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00005cb0: 222d 2d20 6e6f 2045 5252 4f52 5320 4f43 \"-- no ERRORS OC\n-00005cc0: 4355 5252 4544 2044 5552 494e 4720 5448 CURRED DURING TH\n-00005cd0: 4520 4348 4543 4b21 202d 2d22 5d29 3b0a E CHECK! --\"]);.\n-00005ce0: 7d0a 0a0a 0a69 6620 2824 7072 4c6f 672d }....if ($prLog-\n-00005cf0: 3e65 6e63 6f75 6e74 6572 6564 2827 2d6b >encountered('-k\n-00005d00: 696e 6427 203d 3e20 2245 2229 290a 7b0a ind' => \"E\")).{.\n-00005d10: 2020 2020 6578 6974 2031 3b0a 7d0a 656c exit 1;.}.el\n-00005d20: 7365 0a7b 0a20 2020 2024 7072 4c6f 672d se.{. $prLog-\n-00005d30: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00005d40: 3e20 275a 272c 0a09 0920 2027 2d73 7472 > 'Z',... '-str\n-00005d50: 2720 3d3e 205b 2263 6865 636b 696e 6720 ' => [\"checking \n-00005d60: 6261 636b 7570 7320 696e 203c 2220 2e0a backups in <\" ..\n-00005d70: 0909 0920 2020 2020 3a3a 6162 736f 6c75 ... ::absolu\n-00005d80: 7465 5061 7468 2824 6261 636b 7570 4469 tePath($backupDi\n-00005d90: 7229 202e 2022 3e22 5d29 3b0a 2020 2020 r) . \">\"]);. \n-00005da0: 6578 6974 2030 3b0a 7d0a 0a0a 2323 2323 exit 0;.}...####\n-00005db0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005dc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005de0: 2323 2323 2323 2323 0a23 2063 6865 636b ########.# check\n-00005df0: 7320 6361 6c63 756c 6174 6564 206d 6435 s calculated md5\n-00005e00: 2073 756d 2061 6761 696e 7374 2073 746f sum against sto\n-00005e10: 7265 6420 6f6e 6528 7329 0a23 2074 6869 red one(s).# thi\n-00005e20: 7320 6675 6e63 7469 6f6e 2069 7320 6361 s function is ca\n-00005e30: 6c6c 6564 2066 6f72 2061 6c6c 2066 696c lled for all fil\n-00005e40: 6573 2028 626c 6f63 6b65 6420 616e 6420 es (blocked and \n-00005e50: 6e6f 6e2d 626c 6f63 6b65 640a 7375 6220 non-blocked.sub \n-00005e60: 6368 6563 6b4d 4435 0a7b 0a20 2020 206d checkMD5.{. m\n-00005e70: 7920 2824 6469 7254 6f43 6865 636b 2c20 y ($dirToCheck, \n-00005e80: 2466 2c20 246d 6435 7375 6d2c 2024 636f $f, $md5sum, $co\n-00005e90: 6d70 722c 2024 706f 7374 6669 782c 2024 mpr, $postfix, $\n-00005ea0: 756e 636f 6d70 722c 2024 756e 636f 6d70 uncompr, $uncomp\n-00005eb0: 7250 6172 2c0a 0924 7573 6564 426c 6f63 rPar,..$usedBloc\n-00005ec0: 6b49 6e6f 6465 732c 2024 626c 6f63 6b53 kInodes, $blockS\n-00005ed0: 697a 652c 2024 746d 704e 616d 652c 2024 ize, $tmpName, $\n-00005ee0: 7072 4c6f 6729 203d 2040 5f3b 0a0a 2020 prLog) = @_;.. \n-00005ef0: 2020 6d79 2028 2569 6e6f 6465 326d 6435 my (%inode2md5\n-00005f00: 293b 2020 2023 2073 746f 7265 2063 616c ); # store cal\n-00005f10: 6375 6c61 7465 6420 6d64 3520 7375 6d20 culated md5 sum \n-00005f20: 6f66 206e 6577 2069 6e6f 6465 730a 0a20 of new inodes.. \n-00005f30: 2020 2023 2073 7461 7469 7374 6963 616c # statistical\n-00005f40: 2064 6174 6120 7065 7220 6368 6563 6b4d data per checkM\n-00005f50: 4435 0a20 2020 206d 7920 2463 6865 636b D5. my $check\n-00005f60: 6564 4669 6c65 7320 3d20 303b 0a20 2020 edFiles = 0;. \n-00005f70: 206d 7920 2463 6865 636b 6564 4669 6c65 my $checkedFile\n-00005f80: 7353 697a 6520 3d20 303b 0a20 2020 206d sSize = 0;. m\n-00005f90: 7920 246c 696e 6b65 6446 696c 6573 203d y $linkedFiles =\n-00005fa0: 2030 3b0a 2020 2020 6d79 2024 6c69 6e6b 0;. my $link\n-00005fb0: 6564 4669 6c65 7353 697a 6520 3d20 303b edFilesSize = 0;\n-00005fc0: 0a0a 2020 2020 6c6f 6361 6c20 2a4f 5554 .. local *OUT\n-00005fd0: 3b0a 2020 2020 6f70 656e 284f 5554 2c20 ;. open(OUT, \n-00005fe0: 223e 2024 746d 704e 616d 6522 2920 6f72 \"> $tmpName\") or\n-00005ff0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00006000: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00006010: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00006020: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > [\"cannot open \n-00006030: 3c24 746d 704e 616d 653e 225d 2c0a 0909 <$tmpName>\"],...\n-00006040: 2020 2020 2020 272d 6164 6427 203d 3e20 '-add' => \n-00006050: 5b5f 5f46 494c 455f 5f2c 205f 5f4c 494e [__FILE__, __LIN\n-00006060: 455f 5f5d 2c0a 0909 2020 2020 2020 272d E__],... '-\n-00006070: 6578 6974 2720 3d3e 2031 293b 0a0a 2370 exit' => 1);..#p\n-00006080: 7269 6e74 2022 6368 6563 6b4d 4435 202d rint \"checkMD5 -\n-00006090: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2466 2d2d ------------$f--\n-000060a0: 2d2d 2d2d 2d2d 2d2d 2c20 246d 6435 7375 --------, $md5su\n-000060b0: 6d2c 2022 2c20 6c65 6e67 7468 2824 6d64 m, \", length($md\n-000060c0: 3573 756d 292c 2022 2c20 636f 6d70 723d 5sum), \", compr=\n-000060d0: 2463 6f6d 7072 5c6e 223b 0a20 2020 206d $compr\\n\";. m\n-000060e0: 7920 246e 7245 7272 6f72 7320 3d20 303b y $nrErrors = 0;\n-000060f0: 0a20 2020 2069 6620 286c 656e 6774 6828 . if (length(\n-00006100: 246d 6435 7375 6d29 203d 3d20 3332 290a $md5sum) == 32).\n-00006110: 2020 2020 7b0a 0969 6620 2824 636f 6d70 {..if ($comp\n-00006120: 7220 6571 2027 7527 206f 7220 2463 6f6d r eq 'u' or $com\n-00006130: 7072 2065 7120 2763 2729 0a09 7b0a 0920 pr eq 'c')..{.. \n-00006140: 2020 206d 7920 246d 6435 416c 6c20 3d20 my $md5All = \n-00006150: 4469 6765 7374 3a3a 4d44 352d 3e6e 6577 Digest::MD5->new\n-00006160: 2829 3b0a 0920 2020 206c 6f63 616c 202a ();.. local *\n-00006170: 4649 4c45 3b0a 0920 2020 206d 7920 2466 FILE;.. my $f\n-00006180: 696c 6549 6e20 3d20 756e 6465 663b 0a09 ileIn = undef;..\n-00006190: 2020 2020 756e 6c65 7373 2028 2d65 2024 unless (-e $\n-000061a0: 6629 0a09 2020 2020 7b0a 0909 2470 724c f).. {...$prL\n-000061b0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000061c0: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n-000061d0: 2020 2027 2d73 7472 2720 3d3e 205b 2266 '-str' => [\"f\n-000061e0: 696c 6520 3c24 663e 2069 7320 6d69 7373 ile <$f> is miss\n-000061f0: 696e 6722 5d29 3b0a 0909 246d 6169 6e3a ing\"]);...$main:\n-00006200: 3a77 6674 2d3e 7072 696e 7428 2466 2c20 :wft->print($f, \n-00006210: 2766 696c 654d 6973 7369 6e67 2729 3b0a 'fileMissing');.\n-00006220: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;..\n-00006230: 0970 7269 6e74 204f 5554 2022 6572 726f .print OUT \"erro\n-00006240: 7273 2024 6e72 4572 726f 7273 5c6e 223b rs $nrErrors\\n\";\n-00006250: 0a09 0972 6574 7572 6e20 313b 0a09 2020 ...return 1;.. \n-00006260: 2020 7d0a 0920 2020 2069 6620 2824 636f }.. if ($co\n-00006270: 6d70 7220 6571 2027 7527 290a 0920 2020 mpr eq 'u').. \n-00006280: 207b 0a09 0975 6e6c 6573 7320 2873 7973 {...unless (sys\n-00006290: 6f70 656e 2846 494c 452c 2024 662c 204f open(FILE, $f, O\n-000062a0: 5f52 444f 4e4c 5929 290a 0909 7b0a 0909 _RDONLY))...{...\n-000062b0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-000062c0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-000062d0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' =\n-000062e0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > [\"cannot open \n-000062f0: 3c24 663e 225d 2c0a 0909 0909 2020 272d <$f>\"],..... '-\n-00006300: 6164 6427 203d 3e20 5b5f 5f46 494c 455f add' => [__FILE_\n-00006310: 5f2c 205f 5f4c 494e 455f 5f5d 293b 0a09 _, __LINE__]);..\n-00006320: 0920 2020 202b 2b24 6e72 4572 726f 7273 . ++$nrErrors\n-00006330: 3b0a 0909 2020 2020 7072 696e 7420 4f55 ;... print OU\n-00006340: 5420 2265 7272 6f72 7320 246e 7245 7272 T \"errors $nrErr\n-00006350: 6f72 735c 6e22 3b0a 0909 2020 2020 7265 ors\\n\";... re\n-00006360: 7475 726e 2031 3b0a 0909 7d0a 0920 2020 turn 1;...}.. \n-00006370: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00006380: 2020 7b0a 0909 2466 696c 6549 6e20 3d0a {...$fileIn =.\n-00006390: 0909 2020 2020 7069 7065 4672 6f6d 466f .. pipeFromFo\n-000063a0: 726b 2d3e 6e65 7728 272d 6578 6563 2720 rk->new('-exec' \n-000063b0: 3d3e 2024 756e 636f 6d70 722c 0a09 0909 => $uncompr,....\n-000063c0: 0920 2020 2020 2027 2d70 6172 616d 2720 . '-param' \n-000063d0: 3d3e 205c 4075 6e63 6f6d 7072 5061 722c => \\@uncomprPar,\n-000063e0: 0a09 0909 0920 2020 2020 2027 2d73 7464 ..... '-std\n-000063f0: 696e 2720 3d3e 2024 662c 0a09 0909 0920 in' => $f,..... \n-00006400: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom\n-00006410: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => \"$tmpdir/st\n-00006420: 6275 5069 7065 4672 6f6d 3130 2d22 2c0a buPipeFrom10-\",.\n-00006430: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n-00006440: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n-00006450: 2020 2020 7d0a 0a09 2020 2020 6d79 2028 }... my (\n-00006460: 2469 6e6f 6465 2c20 2473 697a 6529 203d $inode, $size) =\n-00006470: 2028 7374 6174 2824 6629 295b 312c 375d (stat($f))[1,7]\n-00006480: 3b0a 0920 2020 202b 2b24 6368 6563 6b65 ;.. ++$checke\n-00006490: 6446 696c 6573 3b0a 0920 2020 2024 6368 dFiles;.. $ch\n-000064a0: 6563 6b65 6446 696c 6573 5369 7a65 202b eckedFilesSize +\n-000064b0: 3d20 2473 697a 653b 0a09 2020 2020 6d79 = $size;.. my\n-000064c0: 2024 6275 6666 6572 3b0a 0920 2020 2077 $buffer;.. w\n-000064d0: 6869 6c65 2028 2466 696c 6549 6e20 3f20 hile ($fileIn ? \n-000064e0: 2466 696c 6549 6e2d 3e73 7973 7265 6164 $fileIn->sysread\n-000064f0: 285c 2462 7566 6665 722c 2024 626c 6f63 (\\$buffer, $bloc\n-00006500: 6b53 697a 6529 203a 0a09 0920 2020 7379 kSize) :... sy\n-00006510: 7372 6561 6428 4649 4c45 2c20 2462 7566 sread(FILE, $buf\n-00006520: 6665 722c 2024 626c 6f63 6b53 697a 6529 fer, $blockSize)\n-00006530: 290a 0920 2020 207b 0a09 0924 6d64 3541 ).. {...$md5A\n-00006540: 6c6c 2d3e 6164 6428 2462 7566 6665 7229 ll->add($buffer)\n-00006550: 3b0a 0920 2020 207d 0a0a 0920 2020 2069 ;.. }... i\n-00006560: 6620 2824 6d64 3573 756d 206e 6520 246d f ($md5sum ne $m\n-00006570: 6435 416c 6c2d 3e68 6578 6469 6765 7374 d5All->hexdigest\n-00006580: 2829 290a 0920 2020 207b 0a09 0970 7269 ()).. {...pri\n-00006590: 6e74 204f 5554 2022 636f 7272 7570 7420 nt OUT \"corrupt \n-000065a0: 2469 6e6f 6465 2024 665c 6e22 3b0a 0920 $inode $f\\n\";.. \n-000065b0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n-000065c0: 2020 2020 7b0a 0909 2320 7265 6164 790a {...# ready.\n-000065d0: 0920 2020 207d 0a09 2020 2020 6966 2028 . }.. if (\n-000065e0: 2466 696c 6549 6e29 0a09 2020 2020 7b0a $fileIn).. {.\n-000065f0: 0909 2466 696c 6549 6e2d 3e63 6c6f 7365 ..$fileIn->close\n-00006600: 2829 3b0a 0909 2466 696c 6549 6e20 3d20 ();...$fileIn = \n-00006610: 756e 6465 663b 0a09 2020 2020 7d0a 0920 undef;.. }.. \n-00006620: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n-00006630: 0963 6c6f 7365 2846 494c 4529 3b0a 0920 .close(FILE);.. \n-00006640: 2020 207d 0a09 7d20 2020 2020 2020 2020 }..} \n-00006650: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-00006660: 6966 2028 2463 6f6d 7072 2065 7120 2775 if ($compr eq 'u\n-00006670: 2720 6f72 2024 636f 6d70 7220 6571 2027 ' or $compr eq '\n-00006680: 6327 290a 0965 6c73 6966 2028 2463 6f6d c')..elsif ($com\n-00006690: 7072 2065 7120 2762 2729 0a09 7b0a 2370 pr eq 'b')..{.#p\n-000066a0: 7269 6e74 2022 7374 6172 7420 6368 6563 rint \"start chec\n-000066b0: 6b69 6e67 2062 6c6f 636b 6564 2066 696c king blocked fil\n-000066c0: 6520 2466 5c6e 223b 0a09 2020 2020 2320 e $f\\n\";.. # \n-000066d0: 7265 6164 2061 6c6c 2066 696c 6573 2069 read all files i\n-000066e0: 6e20 6469 7265 6374 6f72 790a 0920 2020 n directory.. \n-000066f0: 206c 6f63 616c 202a 4449 523b 0a09 2020 local *DIR;.. \n-00006700: 2020 756e 6c65 7373 2028 6f70 656e 6469 unless (opendi\n-00006710: 7228 4449 522c 2024 6629 290a 0920 2020 r(DIR, $f)).. \n-00006720: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n-00006730: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00006740: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00006750: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => [\"cannot o\n-00006760: 7065 6e20 3c24 663e 225d 2c0a 0909 0920 pen <$f>\"],.... \n-00006770: 2020 2020 2027 2d61 6464 2720 3d3e 205b '-add' => [\n-00006780: 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 __FILE__, __LINE\n-00006790: 5f5f 5d29 3b0a 0909 2b2b 246e 7245 7272 __]);...++$nrErr\n-000067a0: 6f72 733b 0a09 0970 7269 6e74 204f 5554 ors;...print OUT\n-000067b0: 2022 6572 726f 7273 2024 6e72 4572 726f \"errors $nrErro\n-000067c0: 7273 5c6e 223b 0a09 0972 6574 7572 6e20 rs\\n\";...return \n-000067d0: 313b 0a09 2020 2020 7d0a 0920 2020 206d 1;.. }.. m\n-000067e0: 7920 2824 656e 7472 792c 2040 656e 7472 y ($entry, @entr\n-000067f0: 6965 7329 3b0a 0920 2020 2077 6869 6c65 ies);.. while\n-00006800: 2028 2465 6e74 7279 203d 2072 6561 6464 ($entry = readd\n-00006810: 6972 2044 4952 2920 2023 206f 6e65 2065 ir DIR) # one e\n-00006820: 6e74 7279 2070 6572 2069 6e6f 6465 0a09 ntry per inode..\n-00006830: 2020 2020 7b0a 0909 6e65 7874 2075 6e6c {...next unl\n-00006840: 6573 7320 2465 6e74 7279 203d 7e20 2f5c ess $entry =~ /\\\n-00006850: 415c 642f 3b0a 0909 0a09 0970 7573 6820 A\\d/;......push \n-00006860: 4065 6e74 7269 6573 2c20 2465 6e74 7279 @entries, $entry\n-00006870: 3b0a 0920 2020 207d 0a09 2020 2020 636c ;.. }.. cl\n-00006880: 6f73 6528 4449 5229 3b0a 0920 2020 206d ose(DIR);.. m\n-00006890: 7920 2466 696c 6549 6e20 3d0a 0909 7069 y $fileIn =...pi\n-000068a0: 7065 4672 6f6d 466f 726b 2d3e 6e65 7728 peFromFork->new(\n-000068b0: 272d 6578 6563 2720 3d3e 2027 627a 6970 '-exec' => 'bzip\n-000068c0: 3227 2c0a 0909 0909 2020 272d 7061 7261 2',..... '-para\n-000068d0: 6d27 203d 3e20 5b27 2d64 275d 2c0a 0909 m' => ['-d'],...\n-000068e0: 0909 2020 272d 7374 6469 6e27 203d 3e20 .. '-stdin' => \n-000068f0: 2224 662f 2e6d 6435 426c 6f63 6b43 6865 \"$f/.md5BlockChe\n-00006900: 636b 5375 6d73 2e62 7a32 222c 0a09 0909 ckSums.bz2\",....\n-00006910: 0920 2027 2d6f 7574 5261 6e64 6f6d 2720 . '-outRandom' \n-00006920: 3d3e 2022 2474 6d70 6469 722f 7374 6275 => \"$tmpdir/stbu\n-00006930: 5069 7065 4672 6f6d 3131 2d22 2c0a 0909 PipeFrom11-\",...\n-00006940: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => \n-00006950: 2470 724c 6f67 293b 0a0a 0920 2020 206d $prLog);... m\n-00006960: 7920 246c 3b0a 0920 2020 2077 6869 6c65 y $l;.. while\n-00006970: 2028 246c 203d 2024 6669 6c65 496e 2d3e ($l = $fileIn->\n-00006980: 7265 6164 2829 290a 0920 2020 207b 0a09 read()).. {..\n-00006990: 0963 686f 6d70 2024 6c3b 0a09 096d 7920 .chomp $l;...my \n-000069a0: 2824 6c5f 6d64 352c 2024 6c5f 636f 6d70 ($l_md5, $l_comp\n-000069b0: 722c 2024 6c5f 662c 2024 6e29 3b0a 0909 r, $l_f, $n);...\n-000069c0: 246e 203d 2028 246c 5f6d 6435 2c20 246c $n = ($l_md5, $l\n-000069d0: 5f63 6f6d 7072 2c20 246c 5f66 2920 3d20 _compr, $l_f) = \n-000069e0: 7370 6c69 7428 2f5c 732f 2c20 246c 2c20 split(/\\s/, $l, \n-000069f0: 3329 3b0a 0909 6966 2028 246e 2021 3d20 3);...if ($n != \n-00006a00: 3329 0a09 097b 0a09 0920 2020 202b 2b24 3)...{... ++$\n-00006a10: 6e72 4572 726f 7273 3b0a 0909 2020 2020 nrErrors;... \n-00006a20: 7072 696e 7420 4f55 5420 2265 7272 6f72 print OUT \"error\n-00006a30: 7320 246e 7245 7272 6f72 735c 6e22 3b0a s $nrErrors\\n\";.\n-00006a40: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00006a50: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00006a60: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str'\n-00006a70: 203d 3e0a 0909 0909 2020 5b22 7374 7261 =>..... [\"stra\n-00006a80: 6e67 6520 6c69 6e65 2069 6e20 3c24 662f nge line in <$f/\n-00006a90: 2e6d 6435 426c 6f63 6b43 6865 636b 5375 .md5BlockCheckSu\n-00006aa0: 6d73 2e62 7a32 3e20 2220 2e0a 0909 0909 ms.bz2> \" ......\n-00006ab0: 2020 2022 696e 206c 696e 6520 2220 2e20 \"in line \" . \n-00006ac0: 2466 696c 6549 6e2d 3e67 6574 2827 2d77 $fileIn->get('-w\n-00006ad0: 6861 7427 203d 3e20 276c 696e 654e 7227 hat' => 'lineNr'\n-00006ae0: 2920 2e0a 0909 0909 2020 2022 3a22 2c20 ) ...... \":\", \n-00006af0: 225c 743c 246c 3e22 5d29 3b0a 0909 7d0a \"\\t<$l>\"]);...}.\n-00006b00: 0a09 0969 6620 282d 6520 2224 6469 7254 ...if (-e \"$dirT\n-00006b10: 6f43 6865 636b 2f24 6c5f 6622 290a 0909 oCheck/$l_f\")...\n-00006b20: 7b0a 0909 2020 2020 6d79 2024 696e 6f64 {... my $inod\n-00006b30: 6520 3d20 2873 7461 7428 2224 6469 7254 e = (stat(\"$dirT\n-00006b40: 6f43 6865 636b 2f24 6c5f 6622 2929 5b31 oCheck/$l_f\"))[1\n-00006b50: 5d3b 0a09 0920 2020 2069 6620 2865 7869 ];... if (exi\n-00006b60: 7374 7320 2475 7365 6442 6c6f 636b 496e sts $usedBlockIn\n-00006b70: 6f64 6573 7b24 696e 6f64 657d 2061 6e64 odes{$inode} and\n-00006b80: 0a09 0909 2475 7365 6442 6c6f 636b 496e ....$usedBlockIn\n-00006b90: 6f64 6573 7b24 696e 6f64 657d 206e 6520 odes{$inode} ne \n-00006ba0: 246c 5f6d 6435 290a 0909 2020 2020 7b0a $l_md5)... {.\n-00006bb0: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00006bc0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00006bd0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str\n-00006be0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [\n-00006bf0: 2263 616c 6375 6c61 7465 6420 6d64 3520 \"calculated md5 \n-00006c00: 7375 6d20 6f66 203c 2464 6972 546f 4368 sum of <$dirToCh\n-00006c10: 6563 6b2f 246c 5f66 3e20 2220 2e0a 0909 eck/$l_f> \" ....\n-00006c20: 0909 2020 2020 2020 2269 7320 6469 6666 .. \"is diff\n-00006c30: 6572 656e 7420 6672 6f6d 2074 6865 206f erent from the o\n-00006c40: 6e65 2069 6e20 7468 6520 6368 6563 6b73 ne in the checks\n-00006c50: 756d 2022 202e 0a09 0909 0920 2020 2020 um \" ...... \n-00006c60: 2020 2266 696c 6520 3c24 662f 2e6d 6435 \"file <$f/.md5\n-00006c70: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b\n-00006c80: 7a32 3e20 2833 2922 5d29 3b0a 0909 0924 z2> (3)\"]);....$\n-00006c90: 696e 6f64 6532 6d64 357b 2469 6e6f 6465 inode2md5{$inode\n-00006ca0: 7d20 3d20 2424 7573 6564 426c 6f63 6b49 } = $$usedBlockI\n-00006cb0: 6e6f 6465 737b 2469 6e6f 6465 7d3b 0a09 nodes{$inode};..\n-00006cc0: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;..\n-00006cd0: 0920 2020 207d 0a09 0920 2020 2065 6c73 . }... els\n-00006ce0: 650a 0909 2020 2020 7b0a 0909 0924 696e e... {....$in\n-00006cf0: 6f64 6532 6d64 357b 2469 6e6f 6465 7d20 ode2md5{$inode} \n-00006d00: 3d20 246c 5f6d 6435 3b0a 0909 2020 2020 = $l_md5;... \n-00006d10: 7d0a 0909 7d0a 0909 656c 7365 0a09 097b }...}...else...{\n-00006d20: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-00006d30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00006d40: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str\n-00006d50: 2720 3d3e 205b 2266 696c 6520 3c24 6469 ' => [\"file <$di\n-00006d60: 7254 6f43 6865 636b 2f24 6c5f 663e 2069 rToCheck/$l_f> i\n-00006d70: 7320 6d69 7373 696e 6722 5d29 3b0a 0909 s missing\"]);...\n-00006d80: 2020 2020 246d 6169 6e3a 3a77 6674 2d3e $main::wft->\n-00006d90: 7072 696e 7428 2224 6469 7254 6f43 6865 print(\"$dirToChe\n-00006da0: 636b 2f24 6c5f 6622 2c20 2766 696c 654d ck/$l_f\", 'fileM\n-00006db0: 6973 7369 6e67 2729 3b0a 0909 2020 2020 issing');... \n-00006dc0: 2b2b 246e 7245 7272 6f72 733b 0a09 097d ++$nrErrors;...}\n-00006dd0: 0a09 2020 2020 7d0a 0920 2020 2024 6669 .. }.. $fi\n-00006de0: 6c65 496e 2d3e 636c 6f73 6528 293b 0a09 leIn->close();..\n-00006df0: 2020 2020 2466 696c 6549 6e20 3d20 756e $fileIn = un\n-00006e00: 6465 663b 0a0a 0920 2020 206d 7920 246d def;... my $m\n-00006e10: 6435 416c 6c20 3d20 4469 6765 7374 3a3a d5All = Digest::\n-00006e20: 4d44 352d 3e6e 6577 2829 3b0a 0920 2020 MD5->new();.. \n-00006e30: 2066 6f72 6561 6368 2024 656e 7472 7920 foreach $entry \n-00006e40: 2873 6f72 7420 4065 6e74 7269 6573 2920 (sort @entries) \n-00006e50: 2023 206c 6f6f 7020 6f76 6572 2061 6c6c # loop over all\n-00006e60: 2066 696c 6573 2069 6e20 6261 636b 7570 files in backup\n-00006e70: 0a09 2020 2020 7b0a 0909 6d79 2028 2469 .. {...my ($i\n-00006e80: 6e6f 6465 2c20 2473 697a 6529 203d 2028 node, $size) = (\n-00006e90: 7374 6174 2822 2466 2f24 656e 7472 7922 stat(\"$f/$entry\"\n-00006ea0: 2929 5b31 2c37 5d3b 0a0a 0909 6d79 2024 ))[1,7];....my $\n-00006eb0: 6361 6c63 4d44 3520 3d20 303b 0a09 0969 calcMD5 = 0;...i\n-00006ec0: 6620 2865 7869 7374 7320 2424 7573 6564 f (exists $$used\n-00006ed0: 426c 6f63 6b49 6e6f 6465 737b 2469 6e6f BlockInodes{$ino\n-00006ee0: 6465 7d29 0a09 097b 0a23 7072 696e 7420 de})...{.#print \n-00006ef0: 222b 2b2b 2b2b 2b2b 2b2b 696e 6f64 6520 \"+++++++++inode \n-00006f00: 616c 7265 6164 7920 6361 6c63 756c 6174 already calculat\n-00006f10: 6564 3a20 2469 6e6f 6465 203d 2022 2c0a ed: $inode = \",.\n-00006f20: 2320 2475 7365 6442 6c6f 636b 496e 6f64 # $usedBlockInod\n-00006f30: 6573 7b24 696e 6f64 657d 2c20 225c 6e22 es{$inode}, \"\\n\"\n-00006f40: 3b0a 0909 2020 2020 2b2b 246c 696e 6b65 ;... ++$linke\n-00006f50: 6446 696c 6573 3b0a 0909 2020 2020 246c dFiles;... $l\n-00006f60: 696e 6b65 6446 696c 6573 5369 7a65 202b inkedFilesSize +\n-00006f70: 3d20 2473 697a 653b 0a09 097d 0a09 0965 = $size;...}...e\n-00006f80: 6c73 650a 0909 7b0a 0909 2020 2020 2b2b lse...{... ++\n-00006f90: 2463 6865 636b 6564 4669 6c65 733b 0a09 $checkedFiles;..\n-00006fa0: 0920 2020 2024 6368 6563 6b65 6446 696c . $checkedFil\n-00006fb0: 6573 5369 7a65 202b 3d20 2473 697a 653b esSize += $size;\n-00006fc0: 0a09 0920 2020 2024 6361 6c63 4d44 3520 ... $calcMD5 \n-00006fd0: 3d20 313b 0a09 097d 0a0a 0909 6c6f 6361 = 1;...}....loca\n-00006fe0: 6c20 2a46 524f 4d3b 0a09 096d 7920 2466 l *FROM;...my $f\n-00006ff0: 696c 6549 6e20 3d20 756e 6465 663b 0a09 ileIn = undef;..\n-00007000: 0969 6620 2824 656e 7472 7920 3d7e 202f .if ($entry =~ /\n-00007010: 2470 6f73 7466 6978 5c5a 2f29 2020 2020 $postfix\\Z/) \n-00007020: 2320 636f 6d70 7265 7373 6564 2062 6c6f # compressed blo\n-00007030: 636b 0a09 097b 0a09 0920 2020 2024 6669 ck...{... $fi\n-00007040: 6c65 496e 203d 0a09 0909 7069 7065 4672 leIn =....pipeFr\n-00007050: 6f6d 466f 726b 2d3e 6e65 7728 272d 6578 omFork->new('-ex\n-00007060: 6563 2720 3d3e 2024 756e 636f 6d70 722c ec' => $uncompr,\n-00007070: 0a09 0909 0909 2020 272d 7061 7261 6d27 ...... '-param'\n-00007080: 203d 3e20 5c40 756e 636f 6d70 7250 6172 => \\@uncomprPar\n-00007090: 2c0a 0909 0909 0920 2027 2d73 7464 696e ,...... '-stdin\n-000070a0: 2720 3d3e 2022 2466 2f24 656e 7472 7922 ' => \"$f/$entry\"\n-000070b0: 2c0a 0909 0909 0920 2027 2d6f 7574 5261 ,...... '-outRa\n-000070c0: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => \"$tmpdi\n-000070d0: 722f 7374 6275 5069 7065 4672 6f6d 3132 r/stbuPipeFrom12\n-000070e0: 2d22 2c0a 0909 0909 0920 2027 2d70 724c -\",...... '-prL\n-000070f0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);.\n-00007100: 0909 7d0a 0909 656c 7365 2020 2020 2020 ..}...else \n-00007110: 2020 2020 2023 2062 6c6f 636b 206e 6f74 # block not\n-00007120: 2063 6f6d 7072 6573 7365 640a 0909 7b0a compressed...{.\n-00007130: 0909 2020 2020 756e 6c65 7373 2028 7379 .. unless (sy\n-00007140: 736f 7065 6e28 4652 4f4d 2c20 2224 662f sopen(FROM, \"$f/\n-00007150: 2465 6e74 7279 222c 204f 5f52 444f 4e4c $entry\", O_RDONL\n-00007160: 5929 290a 0909 2020 2020 7b0a 0909 0924 Y))... {....$\n-00007170: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00007180: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00007190: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000071a0: 205b 2263 616e 6e6f 7420 7265 6164 203c [\"cannot read <\n-000071b0: 2466 2f24 656e 7472 793e 225d 293b 0a09 $f/$entry>\"]);..\n-000071c0: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;..\n-000071d0: 0909 7072 696e 7420 4f55 5420 2265 7272 ..print OUT \"err\n-000071e0: 6f72 7320 246e 7245 7272 6f72 735c 6e22 ors $nrErrors\\n\"\n-000071f0: 3b0a 0909 0972 6574 7572 6e20 313b 0a09 ;....return 1;..\n-00007200: 0920 2020 207d 0a09 097d 0a09 096d 7920 . }...}...my \n-00007210: 2462 7566 6665 723b 0a09 096d 7920 246d $buffer;...my $m\n-00007220: 6435 426c 6f63 6b20 3d20 4469 6765 7374 d5Block = Digest\n-00007230: 3a3a 4d44 352d 3e6e 6577 2829 2069 6620 ::MD5->new() if \n-00007240: 2463 616c 634d 4435 3b0a 0909 7768 696c $calcMD5;...whil\n-00007250: 6520 2824 6669 6c65 496e 203f 2024 7369 e ($fileIn ? $si\n-00007260: 7a65 203d 2024 6669 6c65 496e 2d3e 7379 ze = $fileIn->sy\n-00007270: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\\$buffer, \n-00007280: 2462 6c6f 636b 5369 7a65 2920 3a0a 0909 $blockSize) :...\n-00007290: 2020 2020 2020 2073 7973 7265 6164 2846 sysread(F\n-000072a0: 524f 4d2c 2024 6275 6666 6572 2c20 2462 ROM, $buffer, $b\n-000072b0: 6c6f 636b 5369 7a65 2929 0a09 097b 0a09 lockSize))...{..\n-000072c0: 0920 2020 2024 6d64 3541 6c6c 2d3e 6164 . $md5All->ad\n-000072d0: 6428 2462 7566 6665 7229 3b0a 0909 2020 d($buffer);... \n-000072e0: 2020 246d 6435 426c 6f63 6b2d 3e61 6464 $md5Block->add\n-000072f0: 2824 6275 6666 6572 2920 6966 2024 6361 ($buffer) if $ca\n-00007300: 6c63 4d44 353b 0a09 097d 0a09 0969 6620 lcMD5;...}...if \n-00007310: 2824 6669 6c65 496e 290a 0909 7b0a 0909 ($fileIn)...{...\n-00007320: 2020 2020 2466 696c 6549 6e2d 3e63 6c6f $fileIn->clo\n-00007330: 7365 2829 3b0a 0909 2020 2020 2466 696c se();... $fil\n-00007340: 6549 6e20 3d20 756e 6465 663b 0a09 097d eIn = undef;...}\n-00007350: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... \n-00007360: 2020 636c 6f73 6528 4649 4c45 293b 0a09 close(FILE);..\n-00007370: 097d 0a0a 0909 6d79 2024 6469 6765 7374 .}....my $digest\n-00007380: 203d 2024 6d64 3542 6c6f 636b 2d3e 6865 = $md5Block->he\n-00007390: 7864 6967 6573 7428 2920 6966 2024 6361 xdigest() if $ca\n-000073a0: 6c63 4d44 353b 0a09 0969 6620 2824 6361 lcMD5;...if ($ca\n-000073b0: 6c63 4d44 3529 0a09 097b 0a09 0920 2020 lcMD5)...{... \n-000073c0: 2024 2475 7365 6442 6c6f 636b 496e 6f64 $$usedBlockInod\n-000073d0: 6573 7b24 696e 6f64 657d 203d 2024 6469 es{$inode} = $di\n-000073e0: 6765 7374 3b0a 0909 7d0a 2370 7269 6e74 gest;...}.#print\n-000073f0: 2022 2466 2f24 656e 7472 793a 5c6e 223b \"$f/$entry:\\n\";\n-00007400: 0a23 7072 696e 7420 225c 7424 6469 6765 .#print \"\\t$dige\n-00007410: 7374 203d 2064 6967 6573 745c 6e22 3b0a st = digest\\n\";.\n-00007420: 2370 7269 6e74 2022 5c74 222c 2024 696e #print \"\\t\", $in\n-00007430: 6f64 6532 6d64 357b 2469 6e6f 6465 7d2c ode2md5{$inode},\n-00007440: 2022 203d 2069 6e6f 6465 2028 2469 6e6f \" = inode ($ino\n-00007450: 6465 295c 2069 6620 2463 616c 634d 4435 de)\\ if $calcMD5\n-00007460: 5c6e 223b 0a09 0969 6620 286e 6f74 2065 \\n\";...if (not e\n-00007470: 7869 7374 7320 2469 6e6f 6465 326d 6435 xists $inode2md5\n-00007480: 7b24 696e 6f64 657d 290a 0909 7b0a 0909 {$inode})...{...\n-00007490: 2020 2020 2b2b 246e 7245 7272 6f72 733b ++$nrErrors;\n-000074a0: 0a23 0909 2020 2020 7072 696e 7420 4f55 .#.. print OU\n-000074b0: 5420 2265 7272 6f72 7320 246e 7245 7272 T \"errors $nrErr\n-000074c0: 6f72 735c 6e22 3b0a 0909 2020 2020 2470 ors\\n\";... $p\n-000074d0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-000074e0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n-000074f0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n-00007500: 2020 5b22 3c24 662f 2465 6e74 7279 3e20 [\"<$f/$entry> \n-00007510: 6973 206d 6973 7369 6e67 2069 6e20 2220 is missing in \" \n-00007520: 2e0a 0909 0909 2020 2022 3c24 662f 2e6d ...... \"<$f/.m\n-00007530: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n-00007540: 2e62 7a32 3e22 5d29 3b0a 0909 2020 2020 .bz2>\"]);... \n-00007550: 246d 6169 6e3a 3a77 6674 2d3e 7072 696e $main::wft->prin\n-00007560: 7428 2224 662f 2465 6e74 7279 222c 2027 t(\"$f/$entry\", '\n-00007570: 6d64 354d 6973 7369 6e67 2729 3b0a 0909 md5Missing');...\n-00007580: 7d0a 0909 656c 7369 6620 2824 6361 6c63 }...elsif ($calc\n-00007590: 4d44 3520 616e 6420 2464 6967 6573 7420 MD5 and $digest \n-000075a0: 6e65 2024 696e 6f64 6532 6d64 357b 2469 ne $inode2md5{$i\n-000075b0: 6e6f 6465 7d29 0a09 097b 0a09 0920 2020 node})...{... \n-000075c0: 202b 2b24 6e72 4572 726f 7273 3b0a 0909 ++$nrErrors;...\n-000075d0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-000075e0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-000075f0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' =\n-00007600: 3e0a 0909 0909 2020 5b22 6361 6c63 756c >..... [\"calcul\n-00007610: 6174 6564 206d 6435 2073 756d 206f 6620 ated md5 sum of \n-00007620: 3c24 662f 2465 6e74 7279 3e20 6973 2022 <$f/$entry> is \"\n-00007630: 202e 0a09 0909 0920 2020 2264 6966 6665 ...... \"diffe\n-00007640: 7265 6e74 2066 726f 6d20 7468 6520 6f6e rent from the on\n-00007650: 6520 696e 2022 202e 0a09 0909 0920 2020 e in \" ...... \n-00007660: 223c 2466 2f2e 6d64 3542 6c6f 636b 4368 \"<$f/.md5BlockCh\n-00007670: 6563 6b53 756d 732e 627a 323e 2028 3229 eckSums.bz2> (2)\n-00007680: 225d 293b 0a09 0920 2020 2024 6d61 696e \"]);... $main\n-00007690: 3a3a 7766 742d 3e70 7269 6e74 2822 2466 ::wft->print(\"$f\n-000076a0: 2f24 656e 7472 7922 2c20 276d 6435 5772 /$entry\", 'md5Wr\n-000076b0: 6f6e 6727 293b 0a0a 0909 7d0a 0920 2020 ong');....}.. \n-000076c0: 207d 0a0a 0920 2020 2069 6620 2824 6d64 }... if ($md\n-000076d0: 3573 756d 206e 6520 246d 6435 416c 6c2d 5sum ne $md5All-\n-000076e0: 3e68 6578 6469 6765 7374 2829 290a 0920 >hexdigest()).. \n-000076f0: 2020 207b 0a09 096d 7920 2469 6e6f 6465 {...my $inode\n-00007700: 203d 2028 7374 6174 2824 6629 295b 315d = (stat($f))[1]\n-00007710: 3b0a 0909 7072 696e 7420 4f55 5420 2263 ;...print OUT \"c\n-00007720: 6f72 7275 7074 2024 696e 6f64 6522 3b0a orrupt $inode\";.\n-00007730: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n-00007740: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print \"\n-00007750: 656e 6420 6368 6563 6b69 6e67 2062 6c6f end checking blo\n-00007760: 636b 6564 2066 696c 6520 2466 5c6e 223b cked file $f\\n\";\n-00007770: 0a09 0923 2072 6561 6479 0a09 2020 2020 ...# ready.. \n-00007780: 7d0a 2370 7269 6e74 2022 6368 6563 6b65 }.#print \"checke\n-00007790: 6420 3c24 663e 5c6e 223b 0a09 7d0a 2020 d <$f>\\n\";..}. \n-000077a0: 2020 7d0a 0a20 2020 2070 7269 6e74 204f }.. print O\n-000077b0: 5554 2022 6572 726f 7273 2024 6e72 4572 UT \"errors $nrEr\n-000077c0: 726f 7273 5c6e 223b 0a20 2020 2070 7269 rors\\n\";. pri\n-000077d0: 6e74 204f 5554 2022 6368 6563 6b65 6446 nt OUT \"checkedF\n-000077e0: 696c 6573 2024 6368 6563 6b65 6446 696c iles $checkedFil\n-000077f0: 6573 5c6e 223b 0a20 2020 2070 7269 6e74 es\\n\";. print\n-00007800: 204f 5554 2022 6368 6563 6b65 6446 696c OUT \"checkedFil\n-00007810: 6573 5369 7a65 2024 6368 6563 6b65 6446 esSize $checkedF\n-00007820: 696c 6573 5369 7a65 5c6e 223b 0a20 2020 ilesSize\\n\";. \n-00007830: 2070 7269 6e74 204f 5554 2022 6c69 6e6b print OUT \"link\n-00007840: 6564 4669 6c65 7320 246c 696e 6b65 6446 edFiles $linkedF\n-00007850: 696c 6573 5c6e 223b 0a20 2020 2070 7269 iles\\n\";. pri\n-00007860: 6e74 204f 5554 2022 6c69 6e6b 6564 4669 nt OUT \"linkedFi\n-00007870: 6c65 7353 697a 6520 246c 696e 6b65 6446 lesSize $linkedF\n-00007880: 696c 6573 5369 7a65 5c6e 223b 0a0a 2020 ilesSize\\n\";.. \n-00007890: 2020 7072 696e 7420 4f55 5420 2263 616c print OUT \"cal\n-000078a0: 6365 6449 6e6f 6465 735c 6e22 3b0a 2020 cedInodes\\n\";. \n-000078b0: 2020 6d79 2024 693b 0a20 2020 2066 6f72 my $i;. for\n-000078c0: 6561 6368 2024 6920 286b 6579 7320 2569 each $i (keys %i\n-000078d0: 6e6f 6465 326d 6435 290a 2020 2020 7b0a node2md5). {.\n-000078e0: 0970 7269 6e74 204f 5554 2022 2469 2022 .print OUT \"$i \"\n-000078f0: 2c20 2469 6e6f 6465 326d 6435 7b24 697d , $inode2md5{$i}\n-00007900: 2c20 225c 6e22 3b0a 2020 2020 7d0a 0a20 , \"\\n\";. }.. \n-00007910: 2020 2063 6c6f 7365 284f 5554 293b 0a23 close(OUT);.#\n-00007920: 2020 2020 7379 7374 656d 2822 6361 7420 system(\"cat \n-00007930: 2474 6d70 4e61 6d65 2229 3b0a 2020 2020 $tmpName\");. \n-00007940: 7265 7475 726e 2030 3b0a 7d0a 0a0a 2323 return 0;.}...##\n-00007950: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007960: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007970: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007980: 2323 2323 2323 2323 2323 0a23 2063 6865 ##########.# che\n-00007990: 636b 2069 6620 616c 6c20 6669 6c65 7320 ck if all files \n-000079a0: 696e 2024 6469 7220 6172 6520 696e 2074 in $dir are in t\n-000079b0: 6865 2068 6173 680a 2320 616e 6420 6966 he hash.# and if\n-000079c0: 2066 696c 6573 2069 6e20 2464 6972 2061 files in $dir a\n-000079d0: 7265 206d 6973 7369 6e67 2069 6e20 7468 re missing in th\n-000079e0: 6520 6861 7368 0a73 7562 2063 6865 636b e hash.sub check\n-000079f0: 416c 6c46 696c 6573 0a7b 0a20 2020 206d AllFiles.{. m\n-00007a00: 7920 2824 6469 722c 2024 7265 6c46 696c y ($dir, $relFil\n-00007a10: 6573 2c20 2470 724c 6f67 2920 3d20 405f es, $prLog) = @_\n-00007a20: 3b0a 0a23 7072 696e 7420 222d 312d 206b ;..#print \"-1- k\n-00007a30: 6579 7320 7265 6c46 696c 6573 3d5c 6e5c eys relFiles=\\n\\\n-00007a40: 7422 2c20 6a6f 696e 2822 5c6e 5c74 222c t\", join(\"\\n\\t\",\n-00007a50: 2073 6f72 7420 6b65 7973 2025 2472 656c sort keys %$rel\n-00007a60: 4669 6c65 7329 2c20 225c 6e22 3b0a 2020 Files), \"\\n\";. \n-00007a70: 2020 265f 6368 6563 6b41 6c6c 4669 6c65 &_checkAllFile\n-00007a80: 7328 6c65 6e67 7468 2824 6469 7229 2b31 s(length($dir)+1\n-00007a90: 2c20 2464 6972 2c20 2472 656c 4669 6c65 , $dir, $relFile\n-00007aa0: 732c 2024 7072 4c6f 6729 3b0a 7d0a 0a0a s, $prLog);.}...\n-00007ab0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007ac0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007ad0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007ae0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub\n-00007af0: 205f 6368 6563 6b41 6c6c 4669 6c65 730a _checkAllFiles.\n-00007b00: 7b0a 2020 2020 6d79 2028 246c 656e 6774 {. my ($lengt\n-00007b10: 682c 2024 6469 722c 2024 7265 6c46 696c h, $dir, $relFil\n-00007b20: 6573 2c20 2470 724c 6f67 2920 3d20 405f es, $prLog) = @_\n-00007b30: 3b0a 0a23 7072 696e 7420 222d 322d 205f ;..#print \"-2- _\n-00007b40: 6368 6563 6b41 6c6c 4669 6c65 733a 2024 checkAllFiles: $\n-00007b50: 6c65 6e67 7468 2c20 2464 6972 5c6e 223b length, $dir\\n\";\n-00007b60: 0a0a 2020 2020 6d79 2024 7265 6c20 3d20 .. my $rel = \n-00007b70: 756e 6465 663b 0a20 2020 2069 6620 286c undef;. if (l\n-00007b80: 656e 6774 6828 2464 6972 2920 3e20 246c ength($dir) > $l\n-00007b90: 656e 6774 6829 0a20 2020 207b 0a09 2472 ength). {..$r\n-00007ba0: 656c 203d 2073 7562 7374 7228 2464 6972 el = substr($dir\n-00007bb0: 2c20 246c 656e 6774 6829 3b0a 2370 7269 , $length);.#pri\n-00007bc0: 6e74 2022 5c74 2d33 2d20 7365 7431 2072 nt \"\\t-3- set1 r\n-00007bd0: 656c 203c 2472 656c 3e5c 6e22 3b0a 2020 el <$rel>\\n\";. \n-00007be0: 2020 7d0a 2020 2020 6966 2028 2472 656c }. if ($rel\n-00007bf0: 290a 2020 2020 7b0a 2370 7269 6e74 2022 ). {.#print \"\n-00007c00: 5c74 2d34 2d20 6368 6563 6b31 2d3e 203c \\t-4- check1-> <\n-00007c10: 2472 656c 3e5c 6e22 3b0a 0975 6e6c 6573 $rel>\\n\";..unles\n-00007c20: 7320 2865 7869 7374 7320 2424 7265 6c46 s (exists $$relF\n-00007c30: 696c 6573 7b24 7265 6c7d 290a 097b 0a09 iles{$rel})..{..\n-00007c40: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00007c50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00007c60: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-00007c70: 0a09 0909 2020 5b22 3c24 6469 722f 2472 .... [\"<$dir/$r\n-00007c80: 656c 3e20 6973 206e 6f74 206c 6973 7465 el> is not liste\n-00007c90: 6420 696e 202e 6d64 3543 6865 636b 5375 d in .md5CheckSu\n-00007ca0: 6d20 2831 2922 5d29 3b0a 0920 2020 2024 m (1)\"]);.. $\n-00007cb0: 6d61 696e 3a3a 7766 742d 3e70 7269 6e74 main::wft->print\n-00007cc0: 2822 2464 6972 2f24 7265 6c22 2c20 276d (\"$dir/$rel\", 'm\n-00007cd0: 6435 4d69 7373 696e 6727 293b 0a09 7d0a d5Missing');..}.\n-00007ce0: 2020 2020 7d0a 0a20 2020 206c 6f63 616c }.. local\n-00007cf0: 202a 4449 523b 0a20 2020 2075 6e6c 6573 *DIR;. unles\n-00007d00: 7320 286f 7065 6e64 6972 2844 4952 2c20 s (opendir(DIR, \n-00007d10: 2464 6972 2929 0a20 2020 207b 0a09 2470 $dir)). {..$p\n-00007d20: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00007d30: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n-00007d40: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00007d50: 6361 6e6e 6f74 206f 7065 6e64 6972 203c cannot opendir <\n-00007d60: 2464 6972 3e22 5d29 3b0a 0972 6574 7572 $dir>\"]);..retur\n-00007d70: 6e3b 0a20 2020 207d 0a20 2020 206d 7920 n;. }. my \n-00007d80: 2465 3b0a 2020 2020 7768 696c 6520 2824 $e;. while ($\n-00007d90: 6520 3d20 7265 6164 6469 7220 4449 5229 e = readdir DIR)\n-00007da0: 0a20 2020 207b 0a09 6e65 7874 2069 6620 . {..next if \n-00007db0: 2824 6520 6571 2027 2e27 206f 7220 2465 ($e eq '.' or $e\n-00007dc0: 2065 7120 272e 2e27 293b 0a09 6d79 2024 eq '..');..my $\n-00007dd0: 6465 203d 2022 2464 6972 2f24 6522 3b0a de = \"$dir/$e\";.\n-00007de0: 2370 7269 6e74 2022 5c74 2d35 2d20 6465 #print \"\\t-5- de\n-00007df0: 203c 2464 653e 5c6e 223b 0a0a 2320 646f <$de>\\n\";..# do\n-00007e00: 6e27 7420 6361 7265 2061 626f 7574 2062 n't care about b\n-00007e10: 6c6f 636b 6564 2066 696c 6573 2c20 7468 locked files, th\n-00007e20: 6579 2061 7265 2061 6c72 6561 6479 2063 ey are already c\n-00007e30: 6865 636b 0a23 2069 6e20 7375 6220 6368 heck.# in sub ch\n-00007e40: 6563 6b4d 4435 0a0a 0924 7265 6c20 3d20 eckMD5...$rel = \n-00007e50: 7375 6273 7472 2824 6465 2c20 246c 656e substr($de, $len\n-00007e60: 6774 6829 3b0a 2370 7269 6e74 2022 5c74 gth);.#print \"\\t\n-00007e70: 2d31 302d 2073 6574 3220 7265 6c20 3c24 -10- set2 rel <$\n-00007e80: 7265 6c3e 5c6e 223b 0a09 756e 6c65 7373 rel>\\n\";..unless\n-00007e90: 2028 6578 6973 7473 2024 2472 656c 4669 (exists $$relFi\n-00007ea0: 6c65 737b 2472 656c 7d29 0a09 7b0a 0920 les{$rel})..{.. \n-00007eb0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00007ec0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00007ed0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-00007ee0: 0909 0920 205b 223c 2464 6972 2f24 7265 ... [\"<$dir/$re\n-00007ef0: 6c3e 2069 7320 6e6f 7420 6c69 7374 6564 l> is not listed\n-00007f00: 2069 6e20 2e6d 6435 4368 6563 6b53 756d in .md5CheckSum\n-00007f10: 2028 3229 225d 293b 0a09 2020 2020 246d (2)\"]);.. $m\n-00007f20: 6169 6e3a 3a77 6674 2d3e 7072 696e 7428 ain::wft->print(\n-00007f30: 2224 6469 722f 2472 656c 222c 2027 6d64 \"$dir/$rel\", 'md\n-00007f40: 354d 6973 7369 6e67 2729 3b0a 097d 0a20 5Missing');..}. \n-00007f50: 2020 207d 0a20 2020 2063 6c6f 7365 6469 }. closedi\n-00007f60: 7228 4449 5229 206f 720a 0924 7072 4c6f r(DIR) or..$prLo\n-00007f70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00007f80: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n-00007f90: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-00007fa0: 6e6f 7420 636c 6f73 6564 6972 203c 2464 not closedir <$d\n-00007fb0: 6972 3e22 5d29 3b0a 7d0a 0a0a 2323 2323 ir>\"]);.}...####\n-00007fc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007fd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00007fe0: 2323 2323 2323 2323 2323 2323 2323 0a23 ##############.#\n-00007ff0: 2070 6163 6b61 6765 2070 7269 6e74 4c6f package printLo\n-00008000: 674d 756c 7469 706c 6520 6e65 6564 7320 gMultiple needs \n-00008010: 7468 6973 2066 756e 6374 696f 6e0a 7375 this function.su\n-00008020: 6220 636c 6561 6e75 700a 7b0a 2020 2020 b cleanup.{. \n-00008030: 6d79 2024 7369 676e 616d 6520 3d20 7368 my $signame = sh\n-00008040: 6966 743b 0a20 2020 206d 7920 2465 7869 ift;. my $exi\n-00008050: 7420 3d20 2873 6869 6674 2829 207c 7c20 t = (shift() || \n-00008060: 3129 3b0a 0a20 2020 2065 7869 7420 2465 1);.. exit $e\n-00008070: 7869 743b 0a7d 0a0a 0a23 2323 2323 2323 xit;.}...#######\n-00008080: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00008090: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000080a0: 2323 2323 2323 2323 2323 230a 2320 7072 ###########.# pr\n-000080b0: 696e 7420 7374 6174 6973 7469 6361 6c20 int statistical \n-000080c0: 6461 7461 0a73 7562 2070 7269 6e74 5374 data.sub printSt\n-000080d0: 6174 0a7b 0a20 2020 206d 7920 2824 7072 at.{. my ($pr\n-000080e0: 4c6f 672c 2024 7465 7874 2c20 2463 6865 Log, $text, $che\n-000080f0: 636b 6564 4669 6c65 732c 2024 6368 6563 ckedFiles, $chec\n-00008100: 6b65 6446 696c 6573 5369 7a65 2c0a 0924 kedFilesSize,..$\n-00008110: 6c69 6e6b 6564 4669 6c65 732c 2024 6c69 linkedFiles, $li\n-00008120: 6e6b 6564 4669 6c65 7353 697a 6529 203d nkedFilesSize) =\n-00008130: 2028 405f 293b 0a0a 2020 2020 6d79 2024 (@_);.. my $\n-00008140: 6368 6563 6b50 203d 2030 3b0a 0a20 2020 checkP = 0;.. \n-00008150: 2024 6368 6563 6b50 203d 2069 6e74 2824 $checkP = int($\n-00008160: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize\n-00008170: 202a 2031 3030 3030 202f 0a09 0920 2028 * 10000 /... (\n-00008180: 2463 6865 636b 6564 4669 6c65 7353 697a $checkedFilesSiz\n-00008190: 6520 2b20 246c 696e 6b65 6446 696c 6573 e + $linkedFiles\n-000081a0: 5369 7a65 2920 2b2e 3529 202f 2031 3030 Size) +.5) / 100\n-000081b0: 0a09 0920 2069 6620 2824 6368 6563 6b65 ... if ($checke\n-000081c0: 6446 696c 6573 5369 7a65 202b 2024 6c69 dFilesSize + $li\n-000081d0: 6e6b 6564 4669 6c65 7353 697a 6529 203e nkedFilesSize) >\n-000081e0: 2030 3b0a 0a20 2020 2024 7072 4c6f 672d 0;.. $prLog-\n-000081f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00008200: 3e20 2753 272c 0a09 0920 2027 2d73 7472 > 'S',... '-str\n-00008210: 2720 3d3e 205b 2224 7465 7874 2063 6865 ' => [\"$text che\n-00008220: 636b 6564 2024 6368 6563 6b65 6446 696c cked $checkedFil\n-00008230: 6573 2066 696c 6573 2028 2220 2e0a 0909 es files (\" ....\n-00008240: 0920 2020 2020 2826 3a3a 6875 6d61 6e52 . (&::humanR\n-00008250: 6561 6461 626c 6528 2463 6865 636b 6564 eadable($checked\n-00008260: 4669 6c65 7353 697a 6529 295b 305d 202e FilesSize))[0] .\n-00008270: 0a09 0909 2020 2020 2022 2920 2822 202e .... \") (\" .\n-00008280: 2024 6368 6563 6b50 202e 2022 2529 222c $checkP . \"%)\",\n-00008290: 0a09 0909 2020 2020 2022 2474 6578 7420 .... \"$text \n-000082a0: 6c69 6e6b 6564 2066 696c 6573 2077 6572 linked files wer\n-000082b0: 6520 246c 696e 6b65 6446 696c 6573 2028 e $linkedFiles (\n-000082c0: 2220 2e20 0a09 0909 2020 2020 2028 263a \" . .... (&:\n-000082d0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($\n-000082e0: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize)\n-000082f0: 295b 305d 202e 2022 2922 5d29 3b0a 7d0a )[0] . \")\"]);.}.\n-00008300: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-00008310: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00008320: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00008330: 2323 230a 2320 6765 7420 616c 6c20 6469 ###.# get all di\n-00008340: 7265 6374 6f72 6965 7320 746f 2061 2067 rectories to a g\n-00008350: 6976 656e 2072 656c 6174 6976 6520 7061 iven relative pa\n-00008360: 7468 2c20 6567 2e0a 2320 3c61 2f62 2f2f th, eg..# -> \n-00008380: 3c61 2f62 2f63 3e0a 7375 6220 6765 7452 .sub getR\n-00008390: 656c 5061 7468 730a 7b0a 2020 2020 6d79 elPaths.{. my\n-000083a0: 2024 7061 7468 203d 2073 6869 6674 3b0a $path = shift;.\n-000083b0: 0a20 2020 2024 7061 7468 203d 7e20 7323 . $path =~ s#\n-000083c0: 2f2f 232f 2367 3b0a 200a 2020 2020 6d79 //#/#g;. . my\n-000083d0: 2028 4070 6172 7473 2920 3d20 7370 6c69 (@parts) = spli\n-000083e0: 7428 272f 272c 2024 7061 7468 293b 0a20 t('/', $path);. \n-000083f0: 2020 206d 7920 2840 7265 7329 3b0a 2020 my (@res);. \n-00008400: 2020 666f 7220 286d 7920 246e 203d 2030 for (my $n = 0\n-00008410: 203b 2024 6e20 3c20 4070 6172 7473 203b ; $n < @parts ;\n-00008420: 2024 6e2b 2b29 0a20 2020 207b 0a09 7075 $n++). {..pu\n-00008430: 7368 2040 7265 732c 206a 6f69 6e28 272f sh @res, join('/\n-00008440: 272c 2040 7061 7274 735b 302e 2e24 6e5d ', @parts[0..$n]\n-00008450: 293b 0a20 2020 207d 0a0a 2020 2020 7265 );. }.. re\n-00008460: 7475 726e 2040 7265 733b 0a7d 0a turn @res;.}.\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"}, {"source1": "./usr/bin/storeBackupCheckSource", "source2": "./usr/bin/storeBackupCheckSource", "has_internal_linenos": true, "unified_diff": "@@ -1,832 +1,4 @@\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: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# \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 ..#...$mai\n-00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n-00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n-00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use \n-00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn\n-00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib\n-00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f\n-00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. \n-00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. \n-00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se\n-00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink\n-000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo\n-000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel\n-000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f \n-000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh\n-000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file)..\n-000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link \n-00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file\n-00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub\n-00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1)\n-00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne \"/\").. {.\n-00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\\\n-00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. \n-00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. \n-00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f\n-00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. \n-00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, \n-000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF\n-000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);..\n-000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = \"/$file\"\n-000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR \"<$file> do\n-00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\\n\"\n-00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. }\n-00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= \"/\n-00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib\"; \n-00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den\n-00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. \n-00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = `\n-00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c\n-00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. \n-00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir\n-000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs\n-000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir;\n-000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir;\n-000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli\n-000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir(\"$absDi\n-00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file\"));. }\n-00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n-00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR \"<\n-00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e\n-00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\\n\"\n-00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp\n-00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. \n-00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif\n-00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return (\n-00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle\n-000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\\//\n-000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf\n-000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname.\n-000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $\n-000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~\n-000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\\/(.*)$/s\n-00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/'\n-00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '')\n-00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; \n-00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall\n-00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename\n-00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di\n-00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my \n-00000770: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = \n-00000780: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un\n-00000790: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, \"$re\n-000007a0: 7122 3b0a 0a0a 0a72 6571 7569 7265 2027 q\";....require '\n-000007b0: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl';\n-000007c0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO\n-000007d0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi\n-000007e0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r\n-000007f0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version.\n-00000800: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi\n-00000810: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi\n-00000820: 7265 2027 7374 6f72 6542 6163 6b75 704c re 'storeBackupL\n-00000830: 6962 2e70 6c27 3b0a 0a6d 7920 2463 6865 ib.pl';..my $che\n-00000840: 636b 5375 6d46 696c 6520 3d20 272e 6d64 ckSumFile = '.md\n-00000850: 3543 6865 636b 5375 6d73 273b 0a0a 0a3d 5CheckSums';...=\n-00000860: 6865 6164 3120 4e41 4d45 0a0a 7374 6f72 head1 NAME..stor\n-00000870: 6542 6163 6b75 7043 6865 636b 536f 7572 eBackupCheckSour\n-00000880: 6365 2e70 6c20 2d20 636f 6d70 6172 6573 ce.pl - compares\n-00000890: 2075 6e63 6861 6765 6420 6669 6c65 7320 unchaged files \n-000008a0: 696e 2073 6f75 7263 6520 7769 7468 2074 in source with t\n-000008b0: 6865 6972 0a20 2020 2020 2020 2020 2020 heir. \n-000008c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000008d0: 206d 6435 2073 756d 7320 696e 2074 6865 md5 sums in the\n-000008e0: 2062 6163 6b75 700a 0a3d 6865 6164 3120 backup..=head1 \n-000008f0: 4445 5343 5249 5054 494f 4e0a 0a54 6865 DESCRIPTION..The\n-00000900: 2074 6f6f 6c20 6973 2069 6e74 656e 6465 tool is intende\n-00000910: 6420 746f 2066 696e 6420 6669 6c65 7320 d to find files \n-00000920: 696e 2074 6865 2073 6f75 7263 6520 7468 in the source th\n-00000930: 6174 206d 6967 6874 2068 6176 6520 6368 at might have ch\n-00000940: 616e 6765 6420 6f76 6572 200a 7469 6d65 anged over .time\n-00000950: 2077 6974 686f 7574 2074 6865 2075 7365 without the use\n-00000960: 7273 2069 6e74 6572 6163 7469 6f6e 206f rs interaction o\n-00000970: 7220 6b6e 6f77 6c65 6467 652c 2066 6f72 r knowledge, for\n-00000980: 2065 7861 6d70 6c65 2062 7920 6269 7420 example by bit \n-00000990: 726f 742e 0a0a 4966 2061 2066 696c 6520 rot...If a file \n-000009a0: 6973 2075 6e63 6861 6e67 6564 2028 7361 is unchanged (sa\n-000009b0: 6d65 2063 7469 6d65 2c20 6d74 696d 652c me ctime, mtime,\n-000009c0: 2073 697a 6529 2069 6e20 7468 6520 736f size) in the so\n-000009d0: 7572 6365 2064 6972 6563 746f 7279 0a63 urce directory.c\n-000009e0: 6f6d 7061 7265 6420 746f 2074 6865 2062 ompared to the b\n-000009f0: 6163 6b75 702c 2069 743a 0a0a 2d20 7072 ackup, it:..- pr\n-00000a00: 696e 7473 2061 6e20 4552 524f 5220 6d65 ints an ERROR me\n-00000a10: 7373 6167 6520 6966 2074 6865 206d 6435 ssage if the md5\n-00000a20: 2073 756d 2064 6966 6665 7273 0a0a 2d20 sum differs..- \n-00000a30: 7072 696e 7473 2061 2057 4152 4e49 4e47 prints a WARNING\n-00000a40: 2069 6620 7065 726d 6973 7369 6f6e 732c if permissions,\n-00000a50: 2075 6964 206f 7220 6769 6420 6469 6666 uid or gid diff\n-00000a60: 6572 730a 0a2d 2070 7269 6e74 7320 4d49 ers..- prints MI\n-00000a70: 5353 494e 4720 6966 2066 696c 6520 6973 SSING if file is\n-00000a80: 206e 6f74 2069 6e20 7468 6520 736f 7572 not in the sour\n-00000a90: 6365 2064 6972 6563 746f 7279 2028 6f70 ce directory (op\n-00000aa0: 7469 6f6e 202d 7629 0a0a 2d20 7072 696e tion -v)..- prin\n-00000ab0: 7473 2049 4e46 4f20 6966 2066 696c 6520 ts INFO if file \n-00000ac0: 6973 2069 6465 6e74 6963 616c 2028 6f70 is identical (op\n-00000ad0: 7469 6f6e 202d 7629 0a0a 3d68 6561 6431 tion -v)..=head1\n-00000ae0: 2053 594e 4f50 5349 530a 0a20 2020 2073 SYNOPSIS.. s\n-00000af0: 746f 7265 4261 636b 7570 4368 6563 6b53 toreBackupCheckS\n-00000b00: 6f75 7263 652e 706c 202d 7320 736f 7572 ource.pl -s sour\n-00000b10: 6365 4469 7220 2d62 2073 696e 676c 6542 ceDir -b singleB\n-00000b20: 6163 6b75 7044 6972 205b 2d76 5d0a 0920 ackupDir [-v].. \n-00000b30: 2020 2020 205b 2d77 2066 696c 6550 7265 [-w filePre\n-00000b40: 6669 785d 0a09 2020 2020 2020 5b2d 2d6c fix].. [--l\n-00000b50: 6f67 4669 6c65 0a09 2020 2020 2020 205b ogFile.. [\n-00000b60: 2d2d 706c 7573 4c6f 6753 7464 6f75 745d --plusLogStdout]\n-00000b70: 205b 2d2d 7375 7070 7265 7373 5469 6d65 [--suppressTime\n-00000b80: 5d20 5b2d 6d20 6d61 7846 696c 656c 656e ] [-m maxFilelen\n-00000b90: 5d0a 0920 2020 2020 2020 5b5b 2d6e 206e ].. [[-n n\n-00000ba0: 6f4f 664f 6c64 4669 6c65 735d 207c 205b oOfOldFiles] | [\n-00000bb0: 2d2d 7361 7665 4c6f 6773 5d5d 0a0a 3d68 --saveLogs]]..=h\n-00000bc0: 6561 6431 204f 5054 494f 4e53 0a0a 3d6f ead1 OPTIONS..=o\n-00000bd0: 7665 7220 380a 0a3d 6974 656d 2042 3c2d ver 8..=item B<-\n-00000be0: 2d73 6f75 7263 6544 6972 3e2c 2042 3c2d -sourceDir>, B<-\n-00000bf0: 733e 0a0a 2020 2020 736f 7572 6365 2064 s>.. source d\n-00000c00: 6972 6563 746f 7279 206f 6620 6261 636b irectory of back\n-00000c10: 7570 2077 6865 6e20 7275 6e6e 696e 6720 up when running \n-00000c20: 7374 6f72 6542 6163 6b75 702e 706c 0a0a storeBackup.pl..\n-00000c30: 3d69 7465 6d20 423c 2d2d 7369 6e67 6c65 =item B<--single\n-00000c40: 4261 636b 7570 4469 723e 2c20 423c 2d62 BackupDir>, B<-b\n-00000c50: 3e0a 0a20 2020 2064 6972 6563 746f 7279 >.. directory\n-00000c60: 206f 6620 7468 6520 6261 636b 7570 2074 of the backup t\n-00000c70: 6f20 636f 6d70 6169 7265 2073 6f75 7263 o compaire sourc\n-00000c80: 6544 6972 2077 6974 680a 2020 2020 7468 eDir with. th\n-00000c90: 6973 206d 7573 7420 6265 202a 6f6e 652a is must be *one*\n-00000ca0: 2073 696e 676c 6520 6261 636b 7570 2064 single backup d\n-00000cb0: 6972 6563 746f 7279 0a20 2020 2028 6567 irectory. (eg\n-00000cc0: 2e20 3230 3132 2e30 382e 3038 5f30 322e . 2012.08.08_02.\n-00000cd0: 3030 2e31 3129 0a0a 3d69 7465 6d20 423c 00.11)..=item B<\n-00000ce0: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v\n-00000cf0: 3e0a 0a20 2020 2061 6c73 6f20 7072 696e >.. also prin\n-00000d00: 7420 706f 7369 7469 7665 206d 6573 7361 t positive messa\n-00000d10: 6765 7320 2866 696c 6520 6973 2069 6465 ges (file is ide\n-00000d20: 6e74 6963 616c 2069 6e20 736f 7572 6365 ntical in source\n-00000d30: 2061 6e64 2062 6163 6b75 7029 0a0a 3d69 and backup)..=i\n-00000d40: 7465 6d20 423c 2d2d 7772 6f6e 6746 696c tem B<--wrongFil\n-00000d50: 6554 6162 6c65 733e 2c20 423c 2d77 3e0a eTables>, B<-w>.\n-00000d60: 0a20 2020 2077 7269 7465 2066 696c 656e . write filen\n-00000d70: 616d 6573 2077 6974 6820 6465 7465 6374 ames with detect\n-00000d80: 6564 2066 6175 6c74 7320 696e 2072 6567 ed faults in reg\n-00000d90: 756c 6172 2066 696c 6573 2066 6f72 0a20 ular files for. \n-00000da0: 2020 206c 6174 6572 2062 7567 2066 6978 later bug fix\n-00000db0: 696e 6720 286e 6f74 2061 7574 6f6d 6174 ing (not automat\n-00000dc0: 6564 290a 2020 2020 7061 7261 6d65 7465 ed). paramete\n-00000dd0: 7220 746f 2074 6869 7320 6f70 7469 6f6e r to this option\n-00000de0: 2069 7320 6120 6669 6c65 2070 7265 6669 is a file prefi\n-00000df0: 780a 2020 2020 6567 2e20 6966 2074 6865 x. eg. if the\n-00000e00: 2066 696c 6520 7072 6566 6978 2069 7320 file prefix is \n-00000e10: 272f 746d 702f 6275 6773 532d 272c 2074 '/tmp/bugsS-', t\n-00000e20: 6865 2066 6f6c 6c6f 7769 6e67 2066 696c he following fil\n-00000e30: 6573 2061 7265 0a20 2020 2067 656e 6572 es are. gener\n-00000e40: 6174 6564 3a0a 2020 2020 2f74 6d70 2f62 ated:. /tmp/b\n-00000e50: 7567 7353 2d66 696c 6573 2e6d 6973 7369 ugsS-files.missi\n-00000e60: 6e67 2e74 7874 0a20 2020 202f 746d 702f ng.txt. /tmp/\n-00000e70: 6275 6773 532d 6d64 3573 756d 732e 7772 bugsS-md5sums.wr\n-00000e80: 6f6e 672e 7478 740a 0a3d 6974 656d 2042 ong.txt..=item B\n-00000e90: 3c2d 2d6c 6f67 4669 6c65 3e2c 2042 3c2d <--logFile>, B<-\n-00000ea0: 6c3e 0a0a 2020 2020 6c6f 6746 696c 652c l>.. logFile,\n-00000eb0: 2044 6566 6175 6c74 3a20 7374 646f 7574 Default: stdout\n-00000ec0: 0a0a 3d69 7465 6d20 423c 2d2d 706c 7573 ..=item B<--plus\n-00000ed0: 4c6f 6753 7464 6f75 743e 0a0a 2020 2020 LogStdout>.. \n-00000ee0: 6966 2079 6f75 2073 7065 6369 6679 2061 if you specify a\n-00000ef0: 206c 6f67 2066 696c 6520 7769 7468 202d log file with -\n-00000f00: 2d6c 6f67 4669 6c65 2079 6f75 2063 616e -logFile you can\n-00000f10: 0a20 2020 2061 6464 6974 696f 6e61 6c6c . additionall\n-00000f20: 7920 7072 696e 7420 7468 6520 6f75 7470 y print the outp\n-00000f30: 7574 2074 6f20 5354 444f 5554 2077 6974 ut to STDOUT wit\n-00000f40: 6820 7468 6973 2066 6c61 670a 0a3d 6974 h this flag..=it\n-00000f50: 656d 2042 3c2d 2d73 7570 7072 6573 7354 em B<--suppressT\n-00000f60: 696d 653e 0a0a 2020 2020 7375 7070 7265 ime>.. suppre\n-00000f70: 7373 206f 7574 7075 7420 6f66 2074 696d ss output of tim\n-00000f80: 6520 696e 206c 6f67 6669 6c65 0a0a 3d69 e in logfile..=i\n-00000f90: 7465 6d20 423c 2d2d 6d61 7846 696c 656c tem B<--maxFilel\n-00000fa0: 656e 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 en>, B<-m>.. \n-00000fb0: 6d61 7869 6d61 6c20 6c65 6e67 7468 206f maximal length o\n-00000fc0: 6620 6c6f 6720 6669 6c65 2c20 6465 6661 f log file, defa\n-00000fd0: 756c 7420 3d20 3165 360a 0a3d 6974 656d ult = 1e6..=item\n-00000fe0: 2042 3c2d 2d6e 6f4f 664f 6c64 4669 6c65 B<--noOfOldFile\n-00000ff0: 733e 2c20 423c 2d6e 3e0a 0a20 2020 206e s>, B<-n>.. n\n-00001000: 756d 6265 7220 6f66 206f 6c64 206c 6f67 umber of old log\n-00001010: 2066 696c 6573 2c20 6465 6661 756c 7420 files, default \n-00001020: 3d20 350a 0a3d 6974 656d 2042 3c2d 2d73 = 5..=item B<--s\n-00001030: 6176 654c 6f67 733e 0a0a 2020 2020 7361 aveLogs>.. sa\n-00001040: 7665 206c 6f67 2066 696c 6573 2077 6974 ve log files wit\n-00001050: 6820 6461 7465 2061 6e64 2074 696d 6520 h date and time \n-00001060: 696e 7374 6561 6420 6f66 2064 656c 6574 instead of delet\n-00001070: 696e 6720 7468 650a 2020 2020 6f6c 6420 ing the. old \n-00001080: 2877 6974 6820 5b2d 6e6f 4f66 4f6c 6446 (with [-noOfOldF\n-00001090: 696c 6573 5d29 0a0a 3d69 7465 6d20 423c iles])..=item B<\n-000010a0: 2d2d 636f 6d70 7265 7373 5769 7468 3e0a --compressWith>.\n-000010b0: 0a20 2020 2063 6f6d 7072 6573 7320 7361 . compress sa\n-000010c0: 7665 6420 6c6f 6720 6669 6c65 7320 2865 ved log files (e\n-000010d0: 2e67 2e20 7769 7468 2027 677a 6970 202d .g. with 'gzip -\n-000010e0: 3927 292e 0a20 2020 2064 6566 6175 6c74 9').. default\n-000010f0: 2069 7320 2762 7a69 7032 270a 0a3d 6261 is 'bzip2'..=ba\n-00001100: 636b 0a0a 3d68 6561 6431 2043 4f50 5952 ck..=head1 COPYR\n-00001110: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright \n-00001120: 2863 2920 3230 3132 2d32 3032 3220 6279 (c) 2012-2022 by\n-00001130: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla\n-00001140: 6573 2028 7365 6520 5245 4144 4d45 292e es (see README).\n-00001150: 0a50 7562 6c69 7368 6564 2075 6e64 6572 .Published under\n-00001160: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General\n-00001170: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License \n-00001180: 7633 206f 7220 616e 7920 6c61 7465 7220 v3 or any later \n-00001190: 7665 7273 696f 6e0a 0a3d 6375 740a 0a6d version..=cut..m\n-000011a0: 7920 2448 656c 7020 3d20 263a 3a67 6574 y $Help = &::get\n-000011b0: 506f 6432 5465 7874 2824 3029 3b0a 0a26 Pod2Text($0);..&\n-000011c0: 7072 696e 7456 6572 7369 6f6e 285c 4041 printVersion(\\@A\n-000011d0: 5247 562c 2027 2d56 272c 2027 2d2d 7665 RGV, '-V', '--ve\n-000011e0: 7273 696f 6e27 293b 0a0a 6d79 2024 4368 rsion');..my $Ch\n-000011f0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che\n-00001200: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a\n-00001210: 6c6c 6f77 4c69 7374 7327 203d 3e20 276e llowLists' => 'n\n-00001220: 6f27 2c0a 0909 2020 2020 272d 6c69 7374 o',... '-list\n-00001230: 2720 3d3e 205b 4f70 7469 6f6e 2d3e 6e65 ' => [Option->ne\n-00001240: 7728 272d 6e61 6d65 2720 3d3e 2027 7369 w('-name' => 'si\n-00001250: 6e67 6c65 4261 636b 7570 4469 7227 2c0a ngleBackupDir',.\n-00001260: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001270: 7469 6f6e 2720 3d3e 2027 2d62 272c 0a09 tion' => '-b',..\n-00001280: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00001290: 6173 2720 3d3e 2027 2d2d 7369 6e67 6c65 as' => '--single\n-000012a0: 4261 636b 7570 4469 7227 2c0a 0909 0909 BackupDir',.....\n-000012b0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-000012c0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... \n-000012d0: 2027 2d6d 7573 745f 6265 2720 3d3e 2027 '-must_be' => '\n-000012e0: 7965 7327 292c 0a20 2020 2020 2020 2020 yes'),. \n-000012f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001300: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n\n-00001310: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's\n-00001320: 6f75 7263 6544 6972 272c 0a09 0909 0909 ourceDir',......\n-00001330: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00001340: 203d 3e20 272d 7327 2c0a 0909 0909 0920 => '-s',...... \n-00001350: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00001360: 3e20 272d 2d73 6f75 7263 6544 6972 272c > '--sourceDir',\n-00001370: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-00001380: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',....\n-00001390: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be'\n-000013a0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-000013b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000013c0: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose'\n-000013d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000013e0: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v',\n-000013f0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00001400: 6c69 6173 2720 3d3e 2027 2d2d 7665 7262 lias' => '--verb\n-00001410: 6f73 6527 292c 0a09 0909 094f 7074 696f ose'),.....Optio\n-00001420: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001430: 3e20 2777 726f 6e67 4669 6c65 5461 626c > 'wrongFileTabl\n-00001440: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '-\n-00001450: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001460: 7727 2c0a 0909 0909 0920 2020 2027 2d63 w',...... '-c\n-00001470: 6c5f 616c 6961 7327 203d 3e20 272d 2d77 l_alias' => '--w\n-00001480: 726f 6e67 4669 6c65 5461 626c 6573 272c rongFileTables',\n-00001490: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-000014a0: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n-000014b0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000014c0: 6e61 6d65 2720 3d3e 2027 6c6f 6746 696c name' => 'logFil\n-000014d0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n-000014e0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d6c l_option' => '-l\n-000014f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001500: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6c6f _alias' => '--lo\n-00001510: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n-00001520: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n-00001530: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o\n-00001540: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not \n-00001550: 5b69 6e74 6572 6163 7469 7665 5d27 292c [interactive]'),\n-00001560: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001570: 2827 2d6e 616d 6527 203d 3e20 2770 6c75 ('-name' => 'plu\n-00001580: 734c 6f67 5374 646f 7574 272c 0a09 0909 sLogStdout',....\n-00001590: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-000015a0: 6e27 203d 3e20 272d 2d70 6c75 734c 6f67 n' => '--plusLog\n-000015b0: 5374 646f 7574 272c 0a09 0909 0909 2020 Stdout',...... \n-000015c0: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => \n-000015d0: 275b 6c6f 6746 696c 655d 2729 2c0a 0909 '[logFile]'),...\n-000015e0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000015f0: 6e61 6d65 2720 3d3e 2027 7375 7070 7265 name' => 'suppre\n-00001600: 7373 5469 6d65 272c 0a09 0909 0909 2020 ssTime',...... \n-00001610: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00001620: 3e20 272d 2d73 7570 7072 6573 7354 696d > '--suppressTim\n-00001630: 6527 292c 0a09 0909 094f 7074 696f 6e2d e'),.....Option-\n-00001640: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00001650: 276d 6178 4669 6c65 6c65 6e27 2c0a 0909 'maxFilelen',...\n-00001660: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001670: 6f6e 2720 3d3e 2027 2d6d 272c 0a09 0909 on' => '-m',....\n-00001680: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-00001690: 2720 3d3e 2027 2d2d 6d61 7846 696c 656c ' => '--maxFilel\n-000016a0: 656e 272c 0a09 0909 0909 2020 2020 272d en',...... '-\n-000016b0: 6465 6661 756c 7427 203d 3e20 3165 362c default' => 1e6,\n-000016c0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt\n-000016d0: 6572 6e27 203d 3e20 275c 415b 655c 645d ern' => '\\A[e\\d]\n-000016e0: 2b5c 5a27 2c0a 2020 2020 2020 2020 2020 +\\Z',. \n-000016f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001700: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001710: 2020 272d 6f6e 6c79 5f69 6627 203d 3e27 '-only_if' =>'\n-00001720: 5b6c 6f67 4669 6c65 5d27 292c 0a09 0909 [logFile]'),....\n-00001730: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00001740: 616d 6527 203d 3e20 276e 6f4f 664f 6c64 ame' => 'noOfOld\n-00001750: 4669 6c65 7327 2c0a 0909 0909 0920 2020 Files',...... \n-00001760: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001770: 2027 2d6e 272c 0a09 0909 0909 2020 2020 '-n',...... \n-00001780: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001790: 2d2d 6e6f 4f66 4f6c 6446 696c 6573 272c --noOfOldFiles',\n-000017a0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-000017b0: 756c 7427 203d 3e20 2735 272c 0a09 0909 ult' => '5',....\n-000017c0: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-000017d0: 203d 3e20 275c 415c 642b 5c5a 272c 0a20 => '\\A\\d+\\Z',. \n-000017e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000017f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001800: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl\n-00001810: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>\"[logFil\n-00001820: 655d 2229 2c0a 2020 2020 2020 2020 2020 e]\"),. \n-00001830: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001840: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne\n-00001850: 7728 272d 6e61 6d65 2720 3d3e 2027 7361 w('-name' => 'sa\n-00001860: 7665 4c6f 6773 272c 0a09 0909 0909 2020 veLogs',...... \n-00001870: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00001880: 3e20 272d 2d73 6176 654c 6f67 7327 2c0a > '--saveLogs',.\n-00001890: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000018a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000018b0: 2020 2020 2020 2020 2020 2020 272d 6465 '-de\n-000018c0: 6661 756c 7427 203d 3e20 276e 6f27 2c0a fault' => 'no',.\n-000018d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000018e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000018f0: 2020 2020 2020 2020 2020 2020 272d 6f6e '-on\n-00001900: 6c79 5f69 6627 203d 3e20 275b 6c6f 6746 ly_if' => '[logF\n-00001910: 696c 655d 2729 2c0a 2020 2020 2020 2020 ile]'),. \n-00001920: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001930: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00001940: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001950: 636f 6d70 7265 7373 5769 7468 272c 0a09 compressWith',..\n-00001960: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00001970: 696f 6e27 203d 3e20 272d 2d63 6f6d 7072 ion' => '--compr\n-00001980: 6573 7357 6974 6827 2c0a 0909 0909 0920 essWith',...... \n-00001990: 2020 2027 2d71 756f 7465 4576 616c 2720 '-quoteEval' \n-000019a0: 3d3e 2027 7965 7327 2c0a 2020 2020 2020 => 'yes',. \n-000019b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000019c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000019d0: 2020 2020 2020 272d 6465 6661 756c 7427 '-default'\n-000019e0: 203d 3e20 2762 7a69 7032 272c 0a20 2020 => 'bzip2',. \n-000019f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001a00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001a10: 2020 2020 2020 2020 2027 2d6f 6e6c 795f '-only_\n-00001a20: 6966 2720 3d3e 275b 6c6f 6746 696c 655d if' =>'[logFile]\n-00001a30: 2729 2c0a 2320 6869 6464 656e 206f 7074 '),.# hidden opt\n-00001a40: 696f 6e73 0a23 2075 7365 6420 6279 2073 ions.# used by s\n-00001a50: 746f 7265 4261 636b 7570 4d6f 756e 742e toreBackupMount.\n-00001a60: 706c 0a09 0909 094f 7074 696f 6e2d 3e6e pl.....Option->n\n-00001a70: 6577 2827 2d6e 616d 6527 203d 3e20 2777 ew('-name' => 'w\n-00001a80: 7269 7465 546f 4e61 6d65 6450 6970 6527 riteToNamedPipe'\n-00001a90: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001aa0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7772 option' => '--wr\n-00001ab0: 6974 6554 6f4e 616d 6564 5069 7065 272c iteToNamedPipe',\n-00001ac0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-00001ad0: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',....\n-00001ae0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' \n-00001af0: 3d3e 2027 7965 7327 290a 0909 0909 5d29 => 'yes').....])\n-00001b00: 3b0a 0a24 4368 6563 6b50 6172 2d3e 6368 ;..$CheckPar->ch\n-00001b10: 6563 6b28 272d 6172 6776 2720 3d3e 205c eck('-argv' => \\\n-00001b20: 4041 5247 562c 0a20 2020 2020 2020 2020 @ARGV,. \n-00001b30: 2020 2020 2020 2020 272d 6865 6c70 2720 '-help' \n-00001b40: 3d3e 2024 4865 6c70 0a20 2020 2020 2020 => $Help. \n-00001b50: 2020 2020 2020 2020 2020 293b 0a0a 0a6d );...m\n-00001b60: 7920 2473 696e 676c 6542 6163 6b75 7044 y $singleBackupD\n-00001b70: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar->\n-00001b80: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s\n-00001b90: 696e 676c 6542 6163 6b75 7044 6972 2729 ingleBackupDir')\n-00001ba0: 3b0a 6d79 2024 736f 7572 6365 4469 7220 ;.my $sourceDir \n-00001bb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001bc0: 4f70 7457 6974 6850 6172 2827 736f 7572 OptWithPar('sour\n-00001bd0: 6365 4469 7227 293b 0a6d 7920 2476 6572 ceDir');.my $ver\n-00001be0: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar\n-00001bf0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00001c00: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m\n-00001c10: 7920 2477 726f 6e67 4669 6c65 5461 626c y $wrongFileTabl\n-00001c20: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-00001c30: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w\n-00001c40: 726f 6e67 4669 6c65 5461 626c 6573 2729 rongFileTables')\n-00001c50: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = \n-00001c60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001c70: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil\n-00001c80: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog\n-00001c90: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP\n-00001ca0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00001cb0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd\n-00001cc0: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT\n-00001cd0: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check\n-00001ce0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00001cf0: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT\n-00001d00: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime\n-00001d10: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? '\n-00001d20: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my \n-00001d30: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C\n-00001d40: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00001d50: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel\n-00001d60: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl\n-00001d70: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP\n-00001d80: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00001d90: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles'\n-00001da0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs \n-00001db0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001dc0: 4f70 7457 6974 6850 6172 2827 7361 7665 OptWithPar('save\n-00001dd0: 4c6f 6773 2729 3b0a 2473 6176 654c 6f67 Logs');.$saveLog\n-00001de0: 7320 3d20 2473 6176 654c 6f67 7320 3f20 s = $saveLogs ? \n-00001df0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my\n-00001e00: 2024 636f 6d70 7265 7373 5769 7468 203d $compressWith =\n-00001e10: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00001e20: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr\n-00001e30: 6573 7357 6974 6827 293b 0a23 2068 6964 essWith');.# hid\n-00001e40: 6465 6e20 6f70 7469 6f6e 730a 6d79 2024 den options.my $\n-00001e50: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-00001e60: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00001e70: 744f 7074 5769 7468 5061 7228 2777 7269 tOptWithPar('wri\n-00001e80: 7465 546f 4e61 6d65 6450 6970 6527 293b teToNamedPipe');\n-00001e90: 0a0a 0a6d 7920 2840 7061 7229 203d 2028 ...my (@par) = (\n-00001ea0: 293b 0a69 6620 2864 6566 696e 6564 2024 );.if (defined $\n-00001eb0: 6c6f 6746 696c 6529 0a7b 0a20 2020 2070 logFile).{. p\n-00001ec0: 7573 6820 4070 6172 2c20 2827 2d66 696c ush @par, ('-fil\n-00001ed0: 6527 203d 3e20 246c 6f67 4669 6c65 2c0a e' => $logFile,.\n-00001ee0: 0909 272d 6d75 6c74 6970 7269 6e74 2720 ..'-multiprint' \n-00001ef0: 3d3e 2027 7965 7327 293b 0a7d 0a65 6c73 => 'yes');.}.els\n-00001f00: 650a 7b0a 2020 2020 7075 7368 2040 7061 e.{. push @pa\n-00001f10: 722c 2028 272d 6669 6c65 6465 7363 7269 r, ('-filedescri\n-00001f20: 7074 6f72 272c 202a 5354 444f 5554 293b ptor', *STDOUT);\n-00001f30: 0a7d 0a0a 6d79 2028 2470 724c 6f67 4b69 .}..my ($prLogKi\n-00001f40: 6e64 2920 3d20 5b27 413a 4245 4749 4e27 nd) = ['A:BEGIN'\n-00001f50: 2c0a 0909 2020 2027 5a3a 454e 4427 2c0a ,... 'Z:END',.\n-00001f60: 0909 2020 2027 493a 494e 464f 272c 0a09 .. 'I:INFO',..\n-00001f70: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION',\n-00001f80: 0a09 0920 2020 2757 3a57 4152 4e49 4e47 ... 'W:WARNING\n-00001f90: 272c 0a09 0920 2020 2745 3a45 5252 4f52 ',... 'E:ERROR\n-00001fa0: 275d 3b0a 6d79 2024 7072 696e 744c 6f67 '];.my $printLog\n-00001fb0: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new\n-00001fc0: 2827 2d6b 696e 6427 203d 3e20 2470 724c ('-kind' => $prL\n-00001fd0: 6f67 4b69 6e64 2c0a 0909 0920 2020 2020 ogKind,.... \n-00001fe0: 4070 6172 2c0a 0909 0920 2020 2020 272d @par,.... '-\n-00001ff0: 7769 7468 5469 6d65 2720 3d3e 2024 7769 withTime' => $wi\n-00002000: 7468 5469 6d65 2c0a 0909 0920 2020 2020 thTime,.... \n-00002010: 272d 6d61 7846 696c 656c 656e 2720 3d3e '-maxFilelen' =>\n-00002020: 2024 6d61 7846 696c 656c 656e 2c0a 0909 $maxFilelen,...\n-00002030: 0920 2020 2020 272d 6e6f 4f66 4f6c 6446 . '-noOfOldF\n-00002040: 696c 6573 2720 3d3e 2024 6e6f 4f66 4f6c iles' => $noOfOl\n-00002050: 6446 696c 6573 2c0a 0909 0920 2020 2020 dFiles,.... \n-00002060: 272d 7361 7665 4c6f 6773 2720 3d3e 2024 '-saveLogs' => $\n-00002070: 7361 7665 4c6f 6773 2c0a 0909 0920 2020 saveLogs,.... \n-00002080: 2020 272d 636f 6d70 7265 7373 5769 7468 '-compressWith\n-00002090: 2720 3d3e 2024 636f 6d70 7265 7373 5769 ' => $compressWi\n-000020a0: 7468 293b 0a0a 6d79 2024 7072 4c6f 6720 th);..my $prLog \n-000020b0: 3d20 7072 696e 744c 6f67 4d75 6c74 6970 = printLogMultip\n-000020c0: 6c65 2d3e 6e65 7728 272d 7072 4c6f 6773 le->new('-prLogs\n-000020d0: 2720 3d3e 205b 2470 7269 6e74 4c6f 675d ' => [$printLog]\n-000020e0: 293b 0a0a 6966 2028 2470 6c75 734c 6f67 );..if ($plusLog\n-000020f0: 5374 646f 7574 290a 7b0a 2020 2020 6d79 Stdout).{. my\n-00002100: 2024 7020 3d20 7072 696e 744c 6f67 2d3e $p = printLog->\n-00002110: 6e65 7728 272d 6b69 6e64 2720 3d3e 2024 new('-kind' => $\n-00002120: 7072 4c6f 674b 696e 642c 0a09 0909 2020 prLogKind,.... \n-00002130: 272d 6669 6c65 6465 7363 7269 7074 6f72 '-filedescriptor\n-00002140: 272c 202a 5354 444f 5554 293b 0a20 2020 ', *STDOUT);. \n-00002150: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p\n-00002160: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]);\n-00002170: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN\n-00002180: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. \n-00002190: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo\n-000021a0: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' =\n-000021b0: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,...\n-000021c0: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $\n-000021d0: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-000021e0: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil\n-000021f0: 656c 656e 2720 3d3e 2030 293b 0a20 2020 elen' => 0);. \n-00002200: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p\n-00002210: 724c 6f67 7327 203d 3e20 5b24 6e70 5d29 rLogs' => [$np])\n-00002220: 3b0a 7d0a 0a0a 2470 724c 6f67 2d3e 7072 ;.}...$prLog->pr\n-00002230: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00002240: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str\n-00002250: 2720 3d3e 205b 2263 616e 6e6f 7420 6163 ' => [\"cannot ac\n-00002260: 6365 7373 2073 6f75 7263 6544 6972 203c cess sourceDir <\n-00002270: 2473 6f75 7263 6544 6972 3e22 5d2c 0a09 $sourceDir>\"],..\n-00002280: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00002290: 2031 290a 2020 2020 756e 6c65 7373 202d 1). unless -\n-000022a0: 6420 2473 6f75 7263 6544 6972 3b0a 0a24 d $sourceDir;..$\n-000022b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-000022c0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n-000022d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-000022e0: 7468 6973 2069 7320 6e6f 7420 6120 6675 this is not a fu\n-000022f0: 6c6c 2062 6163 6b75 7022 2c0a 0909 0920 ll backup\",.... \n-00002300: 2270 6c65 6173 6520 7275 6e20 7374 6f72 \"please run stor\n-00002310: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac\n-00002320: 6b75 702e 706c 206f 6e20 3c24 7369 6e67 kup.pl on <$sing\n-00002330: 6c65 4261 636b 7570 4469 723e 225d 2c0a leBackupDir>\"],.\n-00002340: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00002350: 3e20 3129 0a20 2020 2069 6620 2d65 2022 > 1). if -e \"\n-00002360: 2473 696e 676c 6542 6163 6b75 7044 6972 $singleBackupDir\n-00002370: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin\n-00002380: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2\"\n-00002390: 3b0a 0a0a 2840 6d61 696e 3a3a 636c 6561 ;...(@main::clea\n-000023a0: 6e75 7029 203d 2028 2470 724c 6f67 2c20 nup) = ($prLog, \n-000023b0: 756e 6465 6629 3b0a 2453 4947 7b49 4e54 undef);.$SIG{INT\n-000023c0: 7d20 3d20 5c26 636c 6561 6e75 703b 0a24 } = \\&cleanup;.$\n-000023d0: 5349 477b 5445 524d 7d20 3d20 5c26 636c SIG{TERM} = \\&cl\n-000023e0: 6561 6e75 703b 0a0a 0a24 7072 4c6f 672d eanup;...$prLog-\n-000023f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00002400: 3e20 2741 272c 0a09 2020 2020 2020 272d > 'A',.. '-\n-00002410: 7374 7227 203d 3e20 5b22 636f 6d70 6172 str' => [\"compar\n-00002420: 696e 6720 3c24 7369 6e67 6c65 4261 636b ing <$singleBack\n-00002430: 7570 4469 723e 2077 6974 6820 3c24 736f upDir> with <$so\n-00002440: 7572 6365 4469 723e 225d 293b 0a24 7072 urceDir>\"]);.$pr\n-00002450: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00002460: 6427 203d 3e20 2756 272c 0a09 2020 2020 d' => 'V',.. \n-00002470: 2020 272d 7374 7227 203d 3e20 5b22 7374 '-str' => [\"st\n-00002480: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo\n-00002490: 7572 6365 2e70 6c2c 2024 6d61 696e 3a3a urce.pl, $main::\n-000024a0: 5354 4f52 4542 4143 4b55 5056 4552 5349 STOREBACKUPVERSI\n-000024b0: 4f4e 225d 293b 0a0a 0a6d 7920 2472 6373 ON\"]);...my $rcs\n-000024c0: 6620 3d20 7265 6164 4368 6563 6b53 756d f = readCheckSum\n-000024d0: 4669 6c65 2d3e 6e65 7728 272d 6368 6563 File->new('-chec\n-000024e0: 6b53 756d 4669 6c65 2720 3d3e 0a09 0909 kSumFile' =>....\n-000024f0: 0920 2224 7369 6e67 6c65 4261 636b 7570 . \"$singleBackup\n-00002500: 4469 722f 2463 6865 636b 5375 6d46 696c Dir/$checkSumFil\n-00002510: 6522 2c0a 0909 0909 2027 2d70 724c 6f67 e\",..... '-prLog\n-00002520: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a24 ' => $prLog);..$\n-00002530: 6d61 696e 3a3a 7766 7420 3d0a 2020 2020 main::wft =. \n-00002540: 7772 6974 6542 7567 7354 6f46 696c 6573 writeBugsToFiles\n-00002550: 2d3e 6e65 7728 272d 6669 6c65 5072 6566 ->new('-filePref\n-00002560: 6978 2720 3d3e 2024 7772 6f6e 6746 696c ix' => $wrongFil\n-00002570: 6554 6162 6c65 732c 0a09 0909 2020 272d eTables,.... '-\n-00002580: 6261 636b 7570 4469 7227 203d 3e20 263a backupDir' => &:\n-00002590: 3a61 6273 6f6c 7574 6550 6174 6828 2473 :absolutePath($s\n-000025a0: 6f75 7263 6544 6972 292c 0a09 0909 2020 ourceDir),.... \n-000025b0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-000025c0: 6f67 2c0a 0909 0920 2027 2d6d 6435 4d69 og,.... '-md5Mi\n-000025d0: 7373 696e 6727 203d 3e20 3029 3b0a 0a6d ssing' => 0);..m\n-000025e0: 7920 2824 6d64 3573 756d 2c20 2463 6f6d y ($md5sum, $com\n-000025f0: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $\n-00002600: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct\n-00002610: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at\n-00002620: 696d 652c 0a20 2020 2024 7369 7a65 2c20 ime,. $size, \n-00002630: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod\n-00002640: 652c 2024 6669 6c65 6e61 6d65 293b 0a77 e, $filename);.w\n-00002650: 6869 6c65 2028 2828 246d 6435 7375 6d2c hile ((($md5sum,\n-00002660: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno\n-00002670: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup\n-00002680: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime\n-00002690: 2c20 2461 7469 6d65 2c0a 0920 2473 697a , $atime,.. $siz\n-000026a0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $\n-000026b0: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename)\n-000026c0: 203d 2024 7263 7366 2d3e 6e65 7874 4c69 = $rcsf->nextLi\n-000026d0: 6e65 2829 2920 3e20 3029 0a7b 0a20 2020 ne()) > 0).{. \n-000026e0: 2069 6620 2824 6465 7649 6e6f 6465 203d if ($devInode =\n-000026f0: 7e20 2f5c 4144 4556 4943 452f 290a 2020 ~ /\\ADEVICE/). \n-00002700: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri\n-00002710: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00002720: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-00002730: 2720 3d3e 205b 2269 676e 6f72 696e 6720 ' => [\"ignoring \n-00002740: 7374 6f72 6564 2064 6576 6963 6520 3c24 stored device <$\n-00002750: 6669 6c65 6e61 6d65 3e22 5d29 0a09 2020 filename>\"]).. \n-00002760: 2020 6966 2024 7665 7262 6f73 653b 0a09 if $verbose;..\n-00002770: 6e65 7874 3b0a 2020 2020 7d0a 0a20 2020 next;. }.. \n-00002780: 206d 7920 2466 203d 2022 2473 6f75 7263 my $f = \"$sourc\n-00002790: 6544 6972 2f24 6669 6c65 6e61 6d65 223b eDir/$filename\";\n-000027a0: 0a20 2020 2069 6620 286c 656e 6774 6828 . if (length(\n-000027b0: 246d 6435 7375 6d29 203d 3d20 3332 2920 $md5sum) == 32) \n-000027c0: 2020 2320 6e6f 726d 616c 2066 696c 650a # normal file.\n-000027d0: 2020 2020 7b0a 0923 2063 6865 636b 2069 {..# check i\n-000027e0: 6620 6974 2065 7869 7374 7320 7769 7468 f it exists with\n-000027f0: 2073 616d 6520 7469 6d65 2073 7461 6d70 same time stamp\n-00002800: 2069 6e20 736f 7572 6365 4469 720a 0969 in sourceDir..i\n-00002810: 6620 282d 6520 2466 290a 097b 0a09 2020 f (-e $f)..{.. \n-00002820: 2020 756e 6c65 7373 2028 2d72 2024 6629 unless (-r $f)\n-00002830: 0a09 2020 2020 7b0a 0909 2470 724c 6f67 .. {...$prLog\n-00002840: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00002850: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n-00002860: 2027 2d73 7472 2720 3d3e 205b 2266 696c '-str' => [\"fil\n-00002870: 6520 3c24 663e 2065 7869 7374 7320 6275 e <$f> exists bu\n-00002880: 7420 6973 2075 6e72 6561 6461 626c 6522 t is unreadable\"\n-00002890: 5d29 3b0a 0909 246d 6169 6e3a 3a77 6674 ]);...$main::wft\n-000028a0: 2d3e 7072 696e 7428 263a 3a61 6273 6f6c ->print(&::absol\n-000028b0: 7574 6550 6174 6828 2466 292c 2027 6669 utePath($f), 'fi\n-000028c0: 6c65 4d69 7373 696e 6727 293b 0a0a 0909 leMissing');....\n-000028d0: 6e65 7874 3b0a 0920 2020 207d 0a09 2020 next;.. }.. \n-000028e0: 2020 6d79 2028 2461 6374 4d6f 6465 2c20 my ($actMode, \n-000028f0: 2461 6374 5569 642c 2024 6163 7447 6964 $actUid, $actGid\n-00002900: 2c20 2461 6374 4374 696d 652c 2024 6163 , $actCtime, $ac\n-00002910: 744d 7469 6d65 2c0a 0909 2461 6374 4174 tMtime,...$actAt\n-00002920: 696d 652c 2024 6163 7453 697a 6529 203d ime, $actSize) =\n-00002930: 0a09 0920 2020 2028 7374 6174 2824 6629 ... (stat($f)\n-00002940: 295b 322c 2034 2c20 352c 2031 302c 2039 )[2, 4, 5, 10, 9\n-00002950: 2c20 382c 2037 5d3b 0a09 2020 2020 2461 , 8, 7];.. $a\n-00002960: 6374 4d6f 6465 203d 2030 2075 6e6c 6573 ctMode = 0 unles\n-00002970: 7320 2461 6374 4d6f 6465 3b0a 0920 2020 s $actMode;.. \n-00002980: 2024 6163 744d 6f64 6520 263d 2030 3737 $actMode &= 077\n-00002990: 3737 3b0a 0a09 2020 2020 6966 2028 2463 77;... if ($c\n-000029a0: 7469 6d65 203d 3d20 2461 6374 4374 696d time == $actCtim\n-000029b0: 6520 616e 6420 246d 7469 6d65 203d 3d20 e and $mtime == \n-000029c0: 2461 6374 4d74 696d 6520 616e 640a 0909 $actMtime and...\n-000029d0: 2473 697a 6520 3d3d 2024 6163 7453 697a $size == $actSiz\n-000029e0: 6529 0a09 2020 2020 7b0a 0909 6d79 2024 e).. {...my $\n-000029f0: 6163 744d 6435 203d 2026 3a3a 6361 6c63 actMd5 = &::calc\n-00002a00: 4d44 3528 2466 2c20 2470 724c 6f67 293b MD5($f, $prLog);\n-00002a10: 0a0a 0909 756e 6c65 7373 2028 2461 6374 ....unless ($act\n-00002a20: 4d64 3529 0a09 097b 0a09 0920 2020 2024 Md5)...{... $\n-00002a30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002a40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00002a50: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => [\"c\n-00002a60: 616e 6e6f 7420 6361 6c63 756c 6174 6520 annot calculate \n-00002a70: 6d64 3520 7375 6d20 6f66 203c 2466 3e22 md5 sum of <$f>\"\n-00002a80: 5d29 3b0a 0909 2020 2020 6e65 7874 3b0a ]);... next;.\n-00002a90: 0909 7d0a 0909 6966 2028 246d 6435 7375 ..}...if ($md5su\n-00002aa0: 6d20 6571 2024 6163 744d 6435 2920 2020 m eq $actMd5) \n-00002ab0: 2320 6c6f 6f6b 7320 676f 6f64 0a09 097b # looks good...{\n-00002ac0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-00002ad0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002ae0: 2749 272c 0a09 0909 0920 2027 2d73 7472 'I',..... '-str\n-00002af0: 2720 3d3e 205b 223c 2466 3e20 6964 656e ' => [\"<$f> iden\n-00002b00: 7469 6361 6c20 746f 2062 6163 6b75 7022 tical to backup\"\n-00002b10: 5d29 0a09 0909 6966 2024 7665 7262 6f73 ])....if $verbos\n-00002b20: 653b 0a0a 0909 2020 2020 2470 724c 6f67 e;.... $prLog\n-00002b30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00002b40: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n-00002b50: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-00002b60: 3c24 663e 2068 6173 2073 616d 6520 6d64 <$f> has same md\n-00002b70: 3520 7375 6d20 6275 7420 6469 6666 6572 5 sum but differ\n-00002b80: 656e 7420 7065 726d 6973 7369 6f6e 7320 ent permissions \n-00002b90: 2220 2e0a 0909 0909 2020 2022 7468 616e \" ...... \"than\n-00002ba0: 2069 6e20 6261 636b 7570 225d 290a 0909 in backup\"])...\n-00002bb0: 0969 6620 2824 6d6f 6465 206e 6520 2461 .if ($mode ne $a\n-00002bc0: 6374 4d6f 6465 293b 0a09 0920 2020 2024 ctMode);... $\n-00002bd0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002be0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n-00002bf0: 0920 2027 2d73 7472 2720 3d3e 0a09 0909 . '-str' =>....\n-00002c00: 0920 205b 223c 2466 3e20 6861 7320 7361 . [\"<$f> has sa\n-00002c10: 6d65 206d 6435 2073 756d 2062 7574 2064 me md5 sum but d\n-00002c20: 6966 6665 7265 6e74 2075 6964 2022 202e ifferent uid \" .\n-00002c30: 0a09 0909 0920 2020 2274 6861 6e20 696e ..... \"than in\n-00002c40: 2062 6163 6b75 7022 5d29 0a09 0909 6966 backup\"])....if\n-00002c50: 2028 2475 6964 206e 6520 2461 6374 5569 ($uid ne $actUi\n-00002c60: 6429 3b0a 0909 2020 2020 2470 724c 6f67 d);... $prLog\n-00002c70: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00002c80: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n-00002c90: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-00002ca0: 3c24 663e 2068 6173 2073 616d 6520 6d64 <$f> has same md\n-00002cb0: 3520 7375 6d20 6275 7420 6469 6666 6572 5 sum but differ\n-00002cc0: 656e 7420 6769 6420 2220 2e0a 0909 0909 ent gid \" ......\n-00002cd0: 2020 2022 7468 616e 2069 6e20 6261 636b \"than in back\n-00002ce0: 7570 225d 290a 0909 0969 6620 2824 6769 up\"])....if ($gi\n-00002cf0: 6420 6e65 2024 6163 7447 6964 293b 0a09 d ne $actGid);..\n-00002d00: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{...\n-00002d10: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00002d20: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00002d30: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' =\n-00002d40: 3e0a 0909 0909 2020 5b22 3c24 663e 2068 >..... [\"<$f> h\n-00002d50: 6173 2073 616d 6520 6374 696d 6520 2f20 as same ctime / \n-00002d60: 6d74 696d 6520 2f20 7369 7a65 2022 202e mtime / size \" .\n-00002d70: 0a09 0909 0920 2020 2261 7320 696e 2062 ..... \"as in b\n-00002d80: 6163 6b75 7020 6275 7420 6469 6666 6572 ackup but differ\n-00002d90: 656e 7420 6d64 3520 7375 6d73 3a20 2461 ent md5 sums: $a\n-00002da0: 6374 4d64 3520 696e 2022 202e 0a09 0909 ctMd5 in \" .....\n-00002db0: 0920 2020 2273 6f75 7263 6544 6972 203b . \"sourceDir ;\n-00002dc0: 2024 6d64 3573 756d 2069 6e20 6261 636b $md5sum in back\n-00002dd0: 7570 225d 293b 0a09 0920 2020 2024 6d61 up\"]);... $ma\n-00002de0: 696e 3a3a 7766 742d 3e70 7269 6e74 2826 in::wft->print(&\n-00002df0: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($\n-00002e00: 6629 2c20 276d 6435 5772 6f6e 6727 293b f), 'md5Wrong');\n-00002e10: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. \n-00002e20: 2065 6c73 650a 0920 2020 207b 0a09 096d else.. {...m\n-00002e30: 7920 2461 6374 4d64 3520 3d20 2824 7369 y $actMd5 = ($si\n-00002e40: 7a65 203d 3d20 2461 6374 5369 7a65 2920 ze == $actSize) \n-00002e50: 3f20 263a 3a63 616c 634d 4435 2824 662c ? &::calcMD5($f,\n-00002e60: 2024 7072 4c6f 6729 203a 2030 3b0a 0909 $prLog) : 0;...\n-00002e70: 6966 2028 246d 6435 7375 6d20 6571 2024 if ($md5sum eq $\n-00002e80: 6163 744d 6435 290a 0909 7b0a 0909 2020 actMd5)...{... \n-00002e90: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00002ea0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00002eb0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-00002ec0: 0909 0909 2020 5b22 3c24 663e 2068 6173 .... [\"<$f> has\n-00002ed0: 2064 6966 6665 7265 6e74 2063 7469 6d65 different ctime\n-00002ee0: 202f 206d 7469 6d65 2073 697a 6520 2220 / mtime size \" \n-00002ef0: 2e0a 0909 0909 2020 2022 6275 7420 7361 ...... \"but sa\n-00002f00: 6d65 206d 6435 2073 756d 225d 290a 0909 me md5 sum\"])...\n-00002f10: 0969 6620 2476 6572 626f 7365 3b0a 0909 .if $verbose;...\n-00002f20: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... \n-00002f30: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00002f40: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00002f50: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n-00002f60: 205b 223c 2466 3e20 6469 6666 6572 7320 [\"<$f> differs \n-00002f70: 6672 6f6d 2062 6163 6b75 7022 5d29 0a09 from backup\"])..\n-00002f80: 0909 6966 2024 7665 7262 6f73 650a 0909 ..if $verbose...\n-00002f90: 7d0a 0920 2020 207d 0a09 7d0a 0965 6c73 }.. }..}..els\n-00002fa0: 650a 097b 0a09 2020 2020 2470 724c 6f67 e..{.. $prLog\n-00002fb0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00002fc0: 3d3e 2027 4d27 2c0a 0909 0920 2027 2d73 => 'M',.... '-s\n-00002fd0: 7472 2720 3d3e 0a09 0909 2020 5b22 3c24 tr' =>.... [\"<$\n-00002fe0: 6669 6c65 6e61 6d65 3e20 6973 206d 6973 filename> is mis\n-00002ff0: 7369 6e67 2069 6e20 7468 6520 736f 7572 sing in the sour\n-00003000: 6365 2064 6972 6563 746f 7279 225d 290a ce directory\"]).\n-00003010: 0909 6966 2024 7665 7262 6f73 653b 0a09 ..if $verbose;..\n-00003020: 7d0a 2020 2020 7d0a 7d0a 0a6d 7920 2465 }. }.}..my $e\n-00003030: 6e63 203d 2024 7072 4c6f 672d 3e65 6e63 nc = $prLog->enc\n-00003040: 6f75 6e74 6572 6564 2827 2d6b 696e 6427 ountered('-kind'\n-00003050: 203d 3e20 2757 2729 3b0a 6d79 2024 5320 => 'W');.my $S \n-00003060: 3d20 2465 6e63 203e 2031 203f 2027 5327 = $enc > 1 ? 'S'\n-00003070: 203a 2027 273b 0a69 6620 2824 656e 6329 : '';.if ($enc)\n-00003080: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p\n-00003090: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-000030a0: 2757 272c 0a09 0920 2027 2d73 7472 2720 'W',... '-str' \n-000030b0: 3d3e 205b 222d 2d20 2465 6e63 2057 4152 => [\"-- $enc WAR\n-000030c0: 4e49 4e47 2453 204f 4343 5552 5245 4420 NING$S OCCURRED \n-000030d0: 4455 5249 4e47 2054 4845 2043 4845 434b DURING THE CHECK\n-000030e0: 2120 2d2d 225d 290a 7d0a 656c 7365 0a7b ! --\"]).}.else.{\n-000030f0: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00003100: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00003110: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' =>\n-00003120: 205b 222d 2d20 6e6f 2057 4152 4e49 4e47 [\"-- no WARNING\n-00003130: 5320 4f43 4355 5252 4544 2044 5552 494e S OCCURRED DURIN\n-00003140: 4720 5448 4520 4348 4543 4b21 202d 2d22 G THE CHECK! --\"\n-00003150: 5d29 3b0a 7d0a 0a24 656e 6320 3d20 2470 ]);.}..$enc = $p\n-00003160: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere\n-00003170: 6428 272d 6b69 6e64 2720 3d3e 2027 4527 d('-kind' => 'E'\n-00003180: 293b 0a24 5320 3d20 2465 6e63 203e 2031 );.$S = $enc > 1\n-00003190: 203f 2027 5327 203a 2027 273b 0a69 6620 ? 'S' : '';.if \n-000031a0: 2824 656e 6329 0a7b 0a20 2020 2024 7072 ($enc).{. $pr\n-000031b0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-000031c0: 6427 203d 3e20 2745 272c 0a09 0920 2027 d' => 'E',... '\n-000031d0: 2d73 7472 2720 3d3e 205b 222d 2d20 2465 -str' => [\"-- $e\n-000031e0: 6e63 2045 5252 4f52 2453 204f 4343 5552 nc ERROR$S OCCUR\n-000031f0: 5245 4420 4455 5249 4e47 2054 4845 2043 RED DURING THE C\n-00003200: 4845 434b 2120 2d2d 225d 293b 0a7d 0a65 HECK! --\"]);.}.e\n-00003210: 6c73 650a 7b0a 2020 2020 2470 724c 6f67 lse.{. $prLog\n-00003220: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00003230: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st\n-00003240: 7227 203d 3e20 5b22 2d2d 206e 6f20 4552 r' => [\"-- no ER\n-00003250: 524f 5253 204f 4343 5552 5245 4420 4455 RORS OCCURRED DU\n-00003260: 5249 4e47 2054 4845 2043 4845 434b 2120 RING THE CHECK! \n-00003270: 2d2d 225d 293b 0a7d 0a0a 2470 724c 6f67 --\"]);.}..$prLog\n-00003280: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00003290: 3d3e 2027 5a27 2c0a 0920 2020 2020 2027 => 'Z',.. '\n-000032a0: 2d73 7472 2720 3d3e 205b 2263 6f6d 7061 -str' => [\"compa\n-000032b0: 7269 6e67 203c 2473 696e 676c 6542 6163 ring <$singleBac\n-000032c0: 6b75 7044 6972 3e20 746f 203c 2473 6f75 kupDir> to <$sou\n-000032d0: 7263 6544 6972 3e22 5d29 3b0a 0a0a 6966 rceDir>\"]);...if\n-000032e0: 2028 2470 724c 6f67 2d3e 656e 636f 756e ($prLog->encoun\n-000032f0: 7465 7265 6428 272d 6b69 6e64 2720 3d3e tered('-kind' =>\n-00003300: 2022 4522 2929 0a7b 0a20 2020 2065 7869 \"E\")).{. exi\n-00003310: 7420 313b 0a7d 0a65 6c73 650a 7b0a 2020 t 1;.}.else.{. \n-00003320: 2020 6578 6974 2030 3b0a 7d0a 0a65 7869 exit 0;.}..exi\n-00003330: 7420 303b 0a0a 0a23 2323 2323 2323 2323 t 0;...#########\n-00003340: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003350: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003360: 2323 2323 2323 2323 230a 2320 7061 636b #########.# pack\n-00003370: 6167 6520 7072 696e 744c 6f67 4d75 6c74 age printLogMult\n-00003380: 6970 6c65 206e 6565 6473 2074 6869 7320 iple needs this \n-00003390: 6675 6e63 7469 6f6e 0a73 7562 2063 6c65 function.sub cle\n-000033a0: 616e 7570 0a7b 0a20 2020 206d 7920 2473 anup.{. my $s\n-000033b0: 6967 6e61 6d65 203d 2073 6869 6674 3b0a igname = shift;.\n-000033c0: 2020 2020 6d79 2024 6578 6974 203d 2028 my $exit = (\n-000033d0: 7368 6966 7428 2920 7c7c 2031 293b 0a0a shift() || 1);..\n-000033e0: 2020 2020 6578 6974 2024 6578 6974 3b0a exit $exit;.\n-000033f0: 7d0a }.\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 536f 7572 6365 0a pCheckSource.\n"}, {"source1": "./usr/bin/storeBackupConvertBackup", "source2": "./usr/bin/storeBackupConvertBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,677 +1,4 @@\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 3232 290a 2320 2020 2020 2020 2-2022).# \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 ..#...u\n-00000300: 7365 2049 4f3a 3a48 616e 646c 653b 0a75 se IO::Handle;.u\n-00000310: 7365 2073 7472 6963 743b 0a0a 7375 6220 se strict;..sub \n-00000320: 6c69 6250 6174 680a 7b0a 2020 2020 6d79 libPath.{. my\n-00000330: 2024 6669 6c65 203d 2073 6869 6674 3b0a $file = shift;.\n-00000340: 0a20 2020 206d 7920 2464 6972 3b0a 0a20 . my $dir;.. \n-00000350: 2020 2023 2046 616c 6c73 2044 6174 6569 # Falls Datei\n-00000360: 2073 656c 6273 7420 6569 6e20 7379 6d6c selbst ein syml\n-00000370: 696e 6b20 6973 742c 2073 6f6c 616e 6765 ink ist, solange\n-00000380: 2066 6f6c 6765 6e2c 2062 6973 2061 7566 folgen, bis auf\n-00000390: 6765 6cf6 7374 0a20 2020 2069 6620 282d gel.st. if (-\n-000003a0: 6620 2466 696c 6529 0a20 2020 207b 0a09 f $file). {..\n-000003b0: 7768 696c 6520 282d 6c20 2466 696c 6529 while (-l $file)\n-000003c0: 0a09 7b0a 0920 2020 206d 7920 246c 696e ..{.. my $lin\n-000003d0: 6b20 3d20 7265 6164 6c69 6e6b 2824 6669 k = readlink($fi\n-000003e0: 6c65 293b 0a0a 0920 2020 2069 6620 2873 le);... if (s\n-000003f0: 7562 7374 7228 246c 696e 6b2c 2030 2c20 ubstr($link, 0, \n-00000400: 3129 206e 6520 222f 2229 0a09 2020 2020 1) ne \"/\").. \n-00000410: 7b0a 0909 2466 696c 6520 3d7e 2073 2f5b {...$file =~ s/[\n-00000420: 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 ^\\/]+$/$link/;..\n-00000430: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else.\n-00000440: 0920 2020 207b 0a09 0924 6669 6c65 203d . {...$file =\n-00000450: 2024 6c69 6e6b 3b0a 0920 2020 207d 0a09 $link;.. }..\n-00000460: 7d0a 0a09 2824 6469 722c 2024 6669 6c65 }...($dir, $file\n-00000470: 2920 3d20 2673 706c 6974 4669 6c65 4469 ) = &splitFileDi\n-00000480: 7228 2466 696c 6529 3b0a 0924 6669 6c65 r($file);..$file\n-00000490: 203d 2022 2f24 6669 6c65 223b 0a20 2020 = \"/$file\";. \n-000004a0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n-000004b0: 7b0a 0970 7269 6e74 2053 5444 4552 5220 {..print STDERR \n-000004c0: 223c 2466 696c 653e 2064 6f65 7320 6e6f \"<$file> does no\n-000004d0: 7420 6578 6973 7421 5c6e 223b 0a09 6578 t exist!\\n\";..ex\n-000004e0: 6974 2031 3b0a 2020 2020 7d0a 0a20 2020 it 1;. }.. \n-000004f0: 2024 6469 7220 2e3d 2022 2f2e 2e2f 6c69 $dir .= \"/../li\n-00000500: 6222 3b20 2020 2020 2020 2020 2020 2320 b\"; # \n-00000510: 5066 6164 207a 7520 6465 6e20 4269 626c Pfad zu den Bibl\n-00000520: 696f 7468 656b 656e 0a20 2020 206d 7920 iotheken. my \n-00000530: 246f 6c64 4469 7220 3d20 602f 6269 6e2f $oldDir = `/bin/\n-00000540: 7077 6460 3b0a 2020 2020 6368 6f6d 7020 pwd`;. chomp \n-00000550: 246f 6c64 4469 723b 0a20 2020 2069 6620 $oldDir;. if \n-00000560: 2863 6864 6972 2024 6469 7229 0a20 2020 (chdir $dir). \n-00000570: 207b 0a09 6d79 2024 6162 7344 6972 203d {..my $absDir =\n-00000580: 2060 2f62 696e 2f70 7764 603b 0a09 6368 `/bin/pwd`;..ch\n-00000590: 6f70 2024 6162 7344 6972 3b0a 0963 6864 op $absDir;..chd\n-000005a0: 6972 2024 6f6c 6444 6972 3b0a 0a09 7265 ir $oldDir;...re\n-000005b0: 7475 726e 2028 2673 706c 6974 4669 6c65 turn (&splitFile\n-000005c0: 4469 7228 2224 6162 7344 6972 2466 696c Dir(\"$absDir$fil\n-000005d0: 6522 2929 3b0a 2020 2020 7d0a 2020 2020 e\"));. }. \n-000005e0: 656c 7365 0a20 2020 207b 0a09 7072 696e else. {..prin\n-000005f0: 7420 5354 4445 5252 2022 3c24 6469 723e t STDERR \"<$dir>\n-00000600: 2064 6f65 7320 6e6f 7420 6578 6973 742c does not exist,\n-00000610: 2065 7869 7469 6e67 5c6e 223b 0a20 2020 exiting\\n\";. \n-00000620: 207d 0a7d 0a73 7562 2073 706c 6974 4669 }.}.sub splitFi\n-00000630: 6c65 4469 720a 7b0a 2020 2020 6d79 2024 leDir.{. my $\n-00000640: 6e61 6d65 203d 2073 6869 6674 3b0a 0a20 name = shift;.. \n-00000650: 2020 2072 6574 7572 6e20 2827 2e27 2c20 return ('.', \n-00000660: 246e 616d 6529 2075 6e6c 6573 7320 2824 $name) unless ($\n-00000670: 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 2020 name =~/\\//); \n-00000680: 2023 206e 7572 2065 696e 6661 6368 6572 # nur einfacher\n-00000690: 2044 6174 6569 6e61 6d65 0a0a 2020 2020 Dateiname.. \n-000006a0: 6d79 2028 2464 6972 2c20 2466 696c 6529 my ($dir, $file)\n-000006b0: 203d 2024 6e61 6d65 203d 7e20 2f5e 282e = $name =~ /^(.\n-000006c0: 2a29 5c2f 282e 2a29 242f 733b 0a20 2020 *)\\/(.*)$/s;. \n-000006d0: 2024 6469 7220 3d20 272f 2720 6966 2028 $dir = '/' if (\n-000006e0: 2464 6972 2065 7120 2727 293b 2020 2020 $dir eq ''); \n-000006f0: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00000700: 2067 696c 742c 2066 616c 6c73 207a 2e42 gilt, falls z.B\n-00000710: 2e20 2f66 696c 656e 616d 650a 2020 2020 . /filename. \n-00000720: 7265 7475 726e 2028 2464 6972 2c20 2466 return ($dir, $f\n-00000730: 696c 6529 3b0a 7d0a 6d79 2028 2472 6571 ile);.}.my ($req\n-00000740: 2c20 2470 726f 6729 203d 2026 6c69 6250 , $prog) = &libP\n-00000750: 6174 6828 2430 293b 0a75 6e73 6869 6674 ath($0);.unshift\n-00000760: 2040 494e 432c 2022 2472 6571 223b 0a0a @INC, \"$req\";..\n-00000770: 0a72 6571 7569 7265 2027 7665 7273 696f .require 'versio\n-00000780: 6e2e 706c 273b 0a72 6571 7569 7265 2027 n.pl';.require '\n-00000790: 6669 6c65 4469 722e 706c 273b 0a0a 6d79 fileDir.pl';..my\n-000007a0: 2024 6d64 3543 6865 636b 5375 6d73 203d $md5CheckSums =\n-000007b0: 2027 2e6d 6435 4368 6563 6b53 756d 7327 '.md5CheckSums'\n-000007c0: 3b0a 0a3d 6865 6164 3120 4e41 4d45 0a0a ;..=head1 NAME..\n-000007d0: 7374 6f72 6542 6163 6b75 7043 6f6e 7665 storeBackupConve\n-000007e0: 7274 4261 636b 7570 2e70 6c20 2d20 636f rtBackup.pl - co\n-000007f0: 6e76 6572 7473 206f 6c64 2062 6163 6b75 nverts old backu\n-00000800: 7073 2063 7265 6174 6564 2077 6974 6820 ps created with \n-00000810: 7374 6f72 6542 6163 6b75 702e 706c 2074 storeBackup.pl t\n-00000820: 6f20 7468 6520 6e65 7765 7374 2076 6572 o the newest ver\n-00000830: 7369 6f6e 2c0a 0a3d 6865 6164 3120 5359 sion,..=head1 SY\n-00000840: 4e4f 5053 4953 0a0a 7374 6f72 6542 6163 NOPSIS..storeBac\n-00000850: 6b75 7043 6f6e 7665 7274 4261 636b 7570 kupConvertBackup\n-00000860: 2e70 6c20 7374 6f72 6542 6163 6b75 702d .pl storeBackup-\n-00000870: 6469 720a 0a3d 6865 6164 3120 4445 5343 dir..=head1 DESC\n-00000880: 5249 5054 494f 4e0a 0a54 6869 7320 7072 RIPTION..This pr\n-00000890: 6f67 7261 6d20 636f 6e76 6572 7473 206f ogram converts o\n-000008a0: 6c64 2062 6163 6b75 7073 2063 7265 6174 ld backups creat\n-000008b0: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac\n-000008c0: 6b75 702e 706c 2074 6f20 7468 6520 6e65 kup.pl to the ne\n-000008d0: 7765 7374 2076 6572 7369 6f6e 2c0a 6375 west version,.cu\n-000008e0: 7272 656e 746c 7920 7665 7273 696f 6e20 rrently version \n-000008f0: 312e 332e 0a79 6f75 2063 616e 2073 6565 1.3..you can see\n-00000900: 2074 6865 2076 6572 7369 6f6e 2062 7920 the version by \n-00000910: 7479 7069 6e67 3a0a 0a68 6561 6420 2d31 typing:..head -1\n-00000920: 203c 202e 2e2e 3c73 746f 7265 4261 636b < .../date_time\n-00000940: 2f2e 6d64 3543 6865 636b 5375 6d73 2e69 /.md5CheckSums.i\n-00000950: 6e66 6f0a 0a6f 7220 6966 2074 6861 7420 nfo..or if that \n-00000960: 6669 6c65 2064 6f65 7320 6e6f 7420 6578 file does not ex\n-00000970: 6973 743a 0a0a 627a 6970 3220 2d64 203c ist:..bzip2 -d <\n-00000980: 202e 2e2e 3c73 746f 7265 4261 636b 7570 .../date_time/.\n-000009a0: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2\n-000009b0: 207c 2068 6561 6420 2d31 0a0a 2869 6620 | head -1..(if \n-000009c0: 796f 7520 646f 206e 6f74 2073 6565 2027 you do not see '\n-000009d0: 2323 2376 6572 7369 6f6e 3d2e 2e2e 272c ###version=...',\n-000009e0: 2069 7420 6973 2076 6572 7369 6f6e 2031 it is version 1\n-000009f0: 2e30 0a0a 3d68 6561 6431 2043 4f50 5952 .0..=head1 COPYR\n-00000a00: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright \n-00000a10: 2863 2920 3230 3032 2d32 3032 3220 6279 (c) 2002-2022 by\n-00000a20: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla\n-00000a30: 6573 2028 7365 6520 5245 4144 4d45 290a es (see README).\n-00000a40: 5075 626c 6973 6865 6420 756e 6465 7220 Published under \n-00000a50: 7468 6520 474e 5520 4765 6e65 7261 6c20 the GNU General \n-00000a60: 5075 626c 6963 204c 6963 656e 7365 2076 Public License v\n-00000a70: 3320 6f72 2061 6e79 206c 6174 6572 2076 3 or any later v\n-00000a80: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my\n-00000a90: 2024 4865 6c70 203d 2026 3a3a 6765 7450 $Help = &::getP\n-00000aa0: 6f64 3254 6578 7428 2430 293b 0a0a 2670 od2Text($0);..&p\n-00000ab0: 7269 6e74 5665 7273 696f 6e28 5c40 4152 rintVersion(\\@AR\n-00000ac0: 4756 2c20 272d 5627 2c20 272d 2d76 6572 GV, '-V', '--ver\n-00000ad0: 7369 6f6e 2729 3b0a 0a64 6965 2024 4865 sion');..die $He\n-00000ae0: 6c70 2069 6620 2840 4152 4756 2021 3d20 lp if (@ARGV != \n-00000af0: 3129 3b0a 0a6d 7920 2464 6972 203d 2073 1);..my $dir = s\n-00000b00: 6869 6674 2040 4152 4756 3b0a 6469 6520 hift @ARGV;.die \n-00000b10: 2264 6972 6563 746f 7279 203c 2464 6972 \"directory <$dir\n-00000b20: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist\n-00000b30: 2220 756e 6c65 7373 2028 2d64 2024 6469 \" unless (-d $di\n-00000b40: 7229 3b0a 0a6f 7065 6e64 6972 2844 4952 r);..opendir(DIR\n-00000b50: 2c20 2464 6972 2920 6f72 0a20 2020 2064 , $dir) or. d\n-00000b60: 6965 2022 6361 6e6e 6f74 206f 7065 6e20 ie \"cannot open \n-00000b70: 3c24 6469 723e 223b 0a6d 7920 2824 656e <$dir>\";.my ($en\n-00000b80: 7472 792c 2040 656e 7472 6965 7329 3b0a try, @entries);.\n-00000b90: 7768 696c 6520 2824 656e 7472 7920 3d20 while ($entry = \n-00000ba0: 7265 6164 6469 7220 4449 5229 0a7b 0a20 readdir DIR).{. \n-00000bb0: 2020 206d 7920 2465 203d 2022 2464 6972 my $e = \"$dir\n-00000bc0: 2f24 656e 7472 7922 3b0a 2020 2020 6e65 /$entry\";. ne\n-00000bd0: 7874 2069 6620 282d 6c20 2465 2061 6e64 xt if (-l $e and\n-00000be0: 206e 6f74 202d 6420 2465 293b 0a20 2020 not -d $e);. \n-00000bf0: 2070 7573 6820 4065 6e74 7269 6573 2c20 push @entries, \n-00000c00: 2465 6e74 7279 3b0a 7d0a 636c 6f73 6564 $entry;.}.closed\n-00000c10: 6972 2844 4952 293b 0a0a 6d79 2024 666c ir(DIR);..my $fl\n-00000c20: 6167 203d 2030 3b0a 6d79 2024 6920 3d20 ag = 0;.my $i = \n-00000c30: 313b 0a66 6f72 6561 6368 2024 656e 7472 1;.foreach $entr\n-00000c40: 7920 2873 6f72 7420 4065 6e74 7269 6573 y (sort @entries\n-00000c50: 290a 7b0a 2020 2020 6e65 7874 2075 6e6c ).{. next unl\n-00000c60: 6573 7320 2465 6e74 7279 203d 7e0a 092f ess $entry =~../\n-00000c70: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \\A(\\d{4})\\.(\\d{2\n-00000c80: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\\.(\\d{2})_(\\d{\n-00000c90: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\\.(\\d{2})\\.(\\\n-00000ca0: 647b 327d 295c 5a2f 6f3b 0a0a 2020 2020 d{2})\\Z/o;.. \n-00000cb0: 2466 6c61 6720 3d20 313b 2020 2023 2069 $flag = 1; # i\n-00000cc0: 7267 656e 6465 696e 2064 6972 6563 746f rgendein directo\n-00000cd0: 7279 2067 6566 756e 6465 6e0a 0a20 2020 ry gefunden.. \n-00000ce0: 206d 7920 2465 203d 2022 2464 6972 2f24 my $e = \"$dir/$\n-00000cf0: 656e 7472 7922 3b0a 2020 2020 6d79 2024 entry\";. my $\n-00000d00: 636f 6d70 7265 7373 203d 2030 3b0a 0a61 compress = 0;..a\n-00000d10: 6761 696e 466f 724e 6578 7456 6572 7369 gainForNextVersi\n-00000d20: 6f6e 3a0a 2020 2020 6966 2028 2d66 2022 on:. if (-f \"\n-00000d30: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n-00000d40: 2e69 6e66 6f22 2920 2320 6162 2056 6572 .info\") # ab Ver\n-00000d50: 7369 6f6e 2031 2e32 0a20 2020 207b 0a09 sion 1.2. {..\n-00000d60: 6966 2028 2d66 2022 2465 2f24 6d64 3543 if (-f \"$e/$md5C\n-00000d70: 6865 636b 5375 6d73 2e62 7a32 2229 2020 heckSums.bz2\") \n-00000d80: 2320 6b6f 6d70 7269 6d69 6572 7465 2056 # komprimierte V\n-00000d90: 6572 7369 6f6e 206c 6965 6774 2076 6f72 ersion liegt vor\n-00000da0: 2c20 6e65 686d 656e 0a09 7b0a 0920 2020 , nehmen..{.. \n-00000db0: 2024 636f 6d70 7265 7373 203d 2031 3b0a $compress = 1;.\n-00000dc0: 097d 0a09 656c 7369 6620 282d 6620 2224 .}..elsif (-f \"$\n-00000dd0: 652f 246d 6435 4368 6563 6b53 756d 7322 e/$md5CheckSums\"\n-00000de0: 290a 097b 0a09 2020 2020 2463 6f6d 7072 )..{.. $compr\n-00000df0: 6573 7320 3d20 303b 0a09 7d0a 0965 6c73 ess = 0;..}..els\n-00000e00: 650a 097b 0a09 2020 2020 7072 696e 7420 e..{.. print \n-00000e10: 2263 616e 6e6f 7420 6f70 656e 203c 2465 \"cannot open <$e\n-00000e20: 2f24 6d64 3543 6865 636b 5375 6d73 5c5b /$md5CheckSums\\[\n-00000e30: 2e62 7a32 5c5d 3e5c 6e22 3b0a 0920 2020 .bz2\\]>\\n\";.. \n-00000e40: 206e 6578 743b 0a09 7d0a 0a09 6f70 656e next;..}...open\n-00000e50: 2849 4e46 4f2c 2022 2465 2f24 6d64 3543 (INFO, \"$e/$md5C\n-00000e60: 6865 636b 5375 6d73 2e69 6e66 6f22 2920 heckSums.info\") \n-00000e70: 6f72 0a09 2020 2020 6469 6520 2263 616e or.. die \"can\n-00000e80: 6e6f 7420 6f70 656e 203c 2465 2f24 6d64 not open <$e/$md\n-00000e90: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info\"\n-00000ea0: 3b0a 096d 7920 2476 3b0a 096d 7920 246c ;..my $v;..my $l\n-00000eb0: 203d 203c 494e 464f 3e3b 0a09 6368 6f70 = ;..chop\n-00000ec0: 2024 6c3b 0a09 6966 2028 246c 203d 7e20 $l;..if ($l =~ \n-00000ed0: 2f5e 7665 7273 696f 6e3d 285c 532b 292f /^version=(\\S+)/\n-00000ee0: 290a 097b 0a09 2020 2020 2476 203d 2024 )..{.. $v = $\n-00000ef0: 313b 0a09 7d0a 0965 6c73 650a 097b 0a09 1;..}..else..{..\n-00000f00: 2020 2020 7072 696e 7420 2263 616e 6e6f print \"canno\n-00000f10: 7420 6669 6e64 2076 6572 7369 6f6e 2069 t find version i\n-00000f20: 6e66 6f72 6d61 7469 6f6e 2069 6e20 2465 nformation in $e\n-00000f30: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i\n-00000f40: 6e66 6f5c 6e22 3b0a 0920 2020 206e 6578 nfo\\n\";.. nex\n-00000f50: 743b 0a09 7d0a 0969 6620 2824 7620 6571 t;..}..if ($v eq\n-00000f60: 2027 312e 3327 290a 097b 0a09 2020 2020 '1.3')..{.. \n-00000f70: 7072 696e 7420 2224 656e 7472 793a 2076 print \"$entry: v\n-00000f80: 6572 7369 6f6e 203c 2476 3e20 3d3e 206f ersion <$v> => o\n-00000f90: 6b2e 5c6e 223b 0a09 7d0a 0965 6c73 6966 k.\\n\";..}..elsif\n-00000fa0: 2028 2476 2065 7120 2731 2e32 2729 0a09 ($v eq '1.2')..\n-00000fb0: 7b0a 0920 2020 2070 7269 6e74 2022 2465 {.. print \"$e\n-00000fc0: 6e74 7279 3a20 7665 7273 696f 6e20 3c24 ntry: version <$\n-00000fd0: 763e 2063 6f6e 7665 7274 696e 6720 746f v> converting to\n-00000fe0: 2031 2e33 202e 2e2e 223b 0a09 2020 2020 1.3 ...\";.. \n-00000ff0: 5354 444f 5554 2d3e 6175 746f 666c 7573 STDOUT->autoflus\n-00001000: 6828 3129 3b0a 0920 2020 206d 7920 2824 h(1);.. my ($\n-00001010: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode\n-00001020: 293b 0a09 2020 2020 6966 2028 2463 6f6d );.. if ($com\n-00001030: 7072 6573 7320 3d3d 2031 290a 0920 2020 press == 1).. \n-00001040: 207b 0a09 0928 2475 6964 2c20 2467 6964 {...($uid, $gid\n-00001050: 2c20 246d 6f64 6529 203d 2028 7374 6174 , $mode) = (stat\n-00001060: 2822 2465 2f24 6d64 3543 6865 636b 5375 (\"$e/$md5CheckSu\n-00001070: 6d73 2e62 7a32 2229 295b 342c 2035 2c20 ms.bz2\"))[4, 5, \n-00001080: 325d 3b0a 0909 756e 6c69 6e6b 2022 2465 2];...unlink \"$e\n-00001090: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n\n-000010a0: 6577 2e62 7a32 222c 2022 2465 2f24 6d64 ew.bz2\", \"$e/$md\n-000010b0: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info\"\n-000010c0: 3b0a 0909 6f70 656e 2846 494c 452c 2022 ;...open(FILE, \"\n-000010d0: 627a 6970 3220 2d64 203c 205c 2724 652f bzip2 -d < \\'$e/\n-000010e0: 246d 6435 4368 6563 6b53 756d 732e 627a $md5CheckSums.bz\n-000010f0: 325c 2720 7c22 2920 6f72 0a09 0920 2020 2\\' |\") or... \n-00001100: 2064 6965 2022 6361 6e6e 6f74 206f 7065 die \"cannot ope\n-00001110: 6e20 2465 2f24 6d64 3543 6865 636b 5375 n $e/$md5CheckSu\n-00001120: 6d73 2e62 7a32 223b 0a09 096f 7065 6e28 ms.bz2\";...open(\n-00001130: 4e45 572c 2022 7c20 627a 6970 3220 3e20 NEW, \"| bzip2 > \n-00001140: 5c27 2465 2f24 6d64 3543 6865 636b 5375 \\'$e/$md5CheckSu\n-00001150: 6d73 2e6e 6577 2e62 7a32 5c27 2229 206f ms.new.bz2\\'\") o\n-00001160: 720a 0909 2020 2020 6469 6520 2263 616e r... die \"can\n-00001170: 6e6f 7420 627a 6970 3220 3e20 2465 2f24 not bzip2 > $e/$\n-00001180: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new\n-00001190: 2e62 7a32 223b 0a09 2020 2020 7d0a 0920 .bz2\";.. }.. \n-000011a0: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n-000011b0: 0928 2475 6964 2c20 2467 6964 2c20 246d .($uid, $gid, $m\n-000011c0: 6f64 6529 203d 2028 7374 6174 2822 2465 ode) = (stat(\"$e\n-000011d0: 2f24 6d64 3543 6865 636b 5375 6d73 2229 /$md5CheckSums\")\n-000011e0: 295b 342c 2035 2c20 325d 3b0a 0909 756e )[4, 5, 2];...un\n-000011f0: 6c69 6e6b 2022 2465 2f24 6d64 3543 6865 link \"$e/$md5Che\n-00001200: 636b 5375 6d73 2e6e 6577 222c 2022 2465 ckSums.new\", \"$e\n-00001210: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i\n-00001220: 6e66 6f22 3b0a 0909 6f70 656e 2846 494c nfo\";...open(FIL\n-00001230: 452c 2022 3c20 2465 2f24 6d64 3543 6865 E, \"< $e/$md5Che\n-00001240: 636b 5375 6d73 2229 206f 720a 0909 2020 ckSums\") or... \n-00001250: 2020 6469 6520 2263 616e 6e6f 7420 6f70 die \"cannot op\n-00001260: 656e 2024 652f 246d 6435 4368 6563 6b53 en $e/$md5CheckS\n-00001270: 756d 7322 3b0a 0909 6f70 656e 284e 4557 ums\";...open(NEW\n-00001280: 2c20 223e 2024 652f 246d 6435 4368 6563 , \"> $e/$md5Chec\n-00001290: 6b53 756d 732e 6e65 7722 2920 6f72 0a09 kSums.new\") or..\n-000012a0: 0920 2020 2064 6965 2022 6361 6e6e 6f74 . die \"cannot\n-000012b0: 2077 7269 7465 2024 652f 246d 6435 4368 write $e/$md5Ch\n-000012c0: 6563 6b53 756d 732e 6e65 7722 3b0a 0920 eckSums.new\";.. \n-000012d0: 2020 207d 0a09 2020 2020 246d 6f64 6520 }.. $mode \n-000012e0: 263d 2030 3737 3737 3b0a 0920 2020 2024 &= 07777;.. $\n-000012f0: 6c20 3d20 3c46 494c 453e 3b20 2020 2020 l = ; \n-00001300: 2320 6572 7374 6520 5a65 696c 6520 fc62 # erste Zeile .b\n-00001310: 6572 6c65 7365 6e0a 0920 2020 2070 7269 erlesen.. pri\n-00001320: 6e74 204e 4557 2022 2320 636f 6e74 656e nt NEW \"# conten\n-00001330: 7473 2f6d 6435 2063 6f6d 7072 2064 6576 ts/md5 compr dev\n-00001340: 2d69 6e6f 6465 2069 6e6f 6465 4261 636b -inode inodeBack\n-00001350: 7570 2063 7469 6d65 206d 7469 6d65 2061 up ctime mtime a\n-00001360: 7469 6d65 2073 697a 6520 7569 6420 6769 time size uid gi\n-00001370: 6420 6d6f 6465 2066 696c 656e 616d 655c d mode filename\\\n-00001380: 6e22 3b0a 0a09 2020 2020 6f70 656e 2849 n\";... open(I\n-00001390: 4e46 4f5f 4e45 572c 2022 3e20 2465 2f24 NFO_NEW, \"> $e/$\n-000013a0: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf\n-000013b0: 6f2e 6e65 7722 2920 6f72 0a09 0964 6965 o.new\") or...die\n-000013c0: 2022 6361 6e6e 6f74 2077 7269 7465 2024 \"cannot write $\n-000013d0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n-000013e0: 696e 666f 2e6e 6577 223b 0a0a 0920 2020 info.new\";... \n-000013f0: 2077 6869 6c65 2028 246c 203d 203c 4649 while ($l = ).. {...ch\n-00001410: 6f70 2024 6c3b 0a09 096d 7920 2824 6d64 op $l;...my ($md\n-00001420: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d\n-00001430: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB\n-00001440: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $\n-00001450: 6d74 696d 652c 2024 7369 7a65 2c0a 0909 mtime, $size,...\n-00001460: 2020 2020 2475 6964 2c20 2467 6964 2c20 $uid, $gid, \n-00001470: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename\n-00001480: 293b 0a09 096d 7920 2464 203d 2027 5b5c );...my $d = '[\\\n-00001490: 642d 5d27 3b20 2020 2020 2023 205c 6420 d-]'; # \\d \n-000014a0: 756e 6420 4d69 6e75 737a 6569 6368 656e und Minuszeichen\n-000014b0: 0a09 096d 7920 246e 203d 2028 246d 6435 ...my $n = ($md5\n-000014c0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de\n-000014d0: 7649 6e6f 6465 2c20 2469 6e6f 6465 4261 vInode, $inodeBa\n-000014e0: 636b 7570 2c20 2463 7469 6d65 2c0a 0909 ckup, $ctime,...\n-000014f0: 0920 246d 7469 6d65 2c20 2473 697a 652c . $mtime, $size,\n-00001500: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo\n-00001510: 6465 2c20 2466 696c 656e 616d 6529 203d de, $filename) =\n-00001520: 0a09 0909 2020 2020 2024 6c20 3d7e 202f .... $l =~ /\n-00001530: 5e28 5c77 2b29 5c73 2b28 5c77 2b29 5c73 ^(\\w+)\\s+(\\w+)\\s\n-00001540: 2b28 5c53 2b29 5c73 2b28 2464 2b29 5c73 +(\\S+)\\s+($d+)\\s\n-00001550: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n-00001560: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n-00001570: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\\s+($d+)\\s\n-00001580: 2b28 2e2a 292f 6f3b 0a09 0969 6620 2824 +(.*)/o;...if ($\n-00001590: 6e20 213d 2031 3129 0a09 097b 0a09 0920 n != 11)...{... \n-000015a0: 2020 2070 7269 6e74 2022 6361 6e6e 6f74 print \"cannot\n-000015b0: 2072 6561 6420 6c69 6e65 3a20 3c24 6c3e read line: <$l>\n-000015c0: 5c6e 223b 0a09 097d 0a0a 0909 6d79 2024 \\n\";...}....my $\n-000015d0: 6174 696d 6520 3d20 246d 7469 6d65 3b0a atime = $mtime;.\n-000015e0: 0909 7072 696e 7420 4e45 5720 2224 6d64 ..print NEW \"$md\n-000015f0: 3573 756d 2024 636f 6d70 7220 2464 6576 5sum $compr $dev\n-00001600: 496e 6f64 6520 2469 6e6f 6465 4261 636b Inode $inodeBack\n-00001610: 7570 2024 6374 696d 6520 2220 2e0a 0909 up $ctime \" ....\n-00001620: 2020 2020 2224 6d74 696d 6520 2461 7469 \"$mtime $ati\n-00001630: 6d65 2024 7369 7a65 2024 7569 6420 2467 me $size $uid $g\n-00001640: 6964 2024 6d6f 6465 2024 6669 6c65 6e61 id $mode $filena\n-00001650: 6d65 5c6e 223b 0a09 2020 2020 7d0a 0920 me\\n\";.. }.. \n-00001660: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);.\n-00001670: 0920 2020 2063 6c6f 7365 284e 4557 293b . close(NEW);\n-00001680: 0a09 2020 2020 7072 696e 7420 494e 464f .. print INFO\n-00001690: 5f4e 4557 2022 7665 7273 696f 6e3d 312e _NEW \"version=1.\n-000016a0: 335c 6e22 3b0a 0920 2020 206d 7920 2840 3\\n\";.. my (@\n-000016b0: 6c29 203d 203c 494e 464f 3e3b 0a09 2020 l) = ;.. \n-000016c0: 2020 7072 696e 7420 494e 464f 5f4e 4557 print INFO_NEW\n-000016d0: 2022 406c 223b 0a09 2020 2020 636c 6f73 \"@l\";.. clos\n-000016e0: 6528 494e 464f 5f4e 4557 293b 0a09 2020 e(INFO_NEW);.. \n-000016f0: 2020 7072 696e 7420 225c 6e22 3b0a 0920 print \"\\n\";.. \n-00001700: 2020 2069 6620 2824 636f 6d70 7265 7373 if ($compress\n-00001710: 203d 3d20 3129 0a09 2020 2020 7b0a 0909 == 1).. {...\n-00001720: 756e 6c69 6e6b 2022 2465 2f24 6d64 3543 unlink \"$e/$md5C\n-00001730: 6865 636b 5375 6d73 2e62 7a32 223b 0a09 heckSums.bz2\";..\n-00001740: 0972 656e 616d 6520 2224 652f 246d 6435 .rename \"$e/$md5\n-00001750: 4368 6563 6b53 756d 732e 6e65 772e 627a CheckSums.new.bz\n-00001760: 3222 2c20 2224 652f 246d 6435 4368 6563 2\", \"$e/$md5Chec\n-00001770: 6b53 756d 732e 627a 3222 3b0a 0909 6368 kSums.bz2\";...ch\n-00001780: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n-00001790: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n-000017a0: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2\";...chmod \n-000017b0: 246d 6f64 652c 2022 2465 2f24 6d64 3543 $mode, \"$e/$md5C\n-000017c0: 6865 636b 5375 6d73 2e62 7a32 223b 0a09 heckSums.bz2\";..\n-000017d0: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else.\n-000017e0: 0920 2020 207b 0a09 0975 6e6c 696e 6b20 . {...unlink \n-000017f0: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n-00001800: 7322 3b0a 0909 7265 6e61 6d65 2022 2465 s\";...rename \"$e\n-00001810: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n\n-00001820: 6577 222c 2022 2465 2f24 6d64 3543 6865 ew\", \"$e/$md5Che\n-00001830: 636b 5375 6d73 223b 0a09 0963 686f 776e ckSums\";...chown\n-00001840: 2024 7569 642c 2024 6769 642c 2022 2465 $uid, $gid, \"$e\n-00001850: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums\";\n-00001860: 0a09 0963 686d 6f64 2024 6d6f 6465 2c20 ...chmod $mode, \n-00001870: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n-00001880: 7322 3b0a 0920 2020 207d 0a09 2020 2020 s\";.. }.. \n-00001890: 6d6b 6469 7220 2224 652f 2e73 746f 7265 mkdir \"$e/.store\n-000018a0: 4261 636b 7570 4c69 6e6b 7322 2c20 3037 BackupLinks\", 07\n-000018b0: 3737 3b0a 0920 2020 2075 6e6c 696e 6b20 77;.. unlink \n-000018c0: 2224 652f 246d 6435 4368 6563 6b53 756d \"$e/$md5CheckSum\n-000018d0: 732e 696e 666f 223b 0a09 2020 2020 7265 s.info\";.. re\n-000018e0: 6e61 6d65 2022 2465 2f24 6d64 3543 6865 name \"$e/$md5Che\n-000018f0: 636b 5375 6d73 2e69 6e66 6f2e 6e65 7722 ckSums.info.new\"\n-00001900: 2c20 2224 652f 246d 6435 4368 6563 6b53 , \"$e/$md5CheckS\n-00001910: 756d 732e 696e 666f 223b 0a09 7d0a 0965 ums.info\";..}..e\n-00001920: 6c73 650a 097b 0a09 2020 2020 7072 696e lse..{.. prin\n-00001930: 7420 2224 656e 7472 793a 2075 6e73 7570 t \"$entry: unsup\n-00001940: 706f 7274 6564 2076 6572 7369 6f6e 203c ported version <\n-00001950: 2476 3e5c 6e22 3b0a 097d 0a09 636c 6f73 $v>\\n\";..}..clos\n-00001960: 6528 494e 464f 293b 0a20 2020 207d 0a20 e(INFO);. }. \n-00001970: 2020 2065 6c73 6520 2020 2020 2020 2020 else \n-00001980: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001990: 2020 2023 2056 6572 7369 6f6e 2031 2e30 # Version 1.0\n-000019a0: 2075 6e64 2031 2e31 0a20 2020 207b 0a09 und 1.1. {..\n-000019b0: 6966 2028 2d66 2022 2465 2f24 6d64 3543 if (-f \"$e/$md5C\n-000019c0: 6865 636b 5375 6d73 2e62 7a32 2229 2020 heckSums.bz2\") \n-000019d0: 2320 6b6f 6d70 7269 6d69 6572 7465 2056 # komprimierte V\n-000019e0: 6572 7369 6f6e 206c 6965 6774 2076 6f72 ersion liegt vor\n-000019f0: 2c20 6e65 686d 656e 0a09 7b0a 0920 2020 , nehmen..{.. \n-00001a00: 206f 7065 6e28 4649 4c45 2c20 2262 7a69 open(FILE, \"bzi\n-00001a10: 7032 202d 6420 3c20 5c27 2465 2f24 6d64 p2 -d < \\'$e/$md\n-00001a20: 3543 6865 636b 5375 6d73 2e62 7a32 5c27 5CheckSums.bz2\\'\n-00001a30: 207c 2229 3b0a 0920 2020 2024 636f 6d70 |\");.. $comp\n-00001a40: 7265 7373 203d 2031 3b0a 097d 0a09 656c ress = 1;..}..el\n-00001a50: 7369 6620 282d 6620 2465 2f24 6d64 3543 sif (-f $e/$md5C\n-00001a60: 6865 636b 5375 6d73 290a 097b 0a09 2020 heckSums)..{.. \n-00001a70: 2020 6f70 656e 2846 494c 452c 2022 3c20 open(FILE, \"< \n-00001a80: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n-00001a90: 2229 3b0a 097d 0a09 656c 7365 0a09 7b0a \");..}..else..{.\n-00001aa0: 0920 2020 2070 7269 6e74 2022 6361 6e6e . print \"cann\n-00001ab0: 6f74 206f 7065 6e20 3c24 652f 246d 6435 ot open <$e/$md5\n-00001ac0: 4368 6563 6b53 756d 735c 5b2e 627a 325c CheckSums\\[.bz2\\\n-00001ad0: 5d3e 5c6e 223b 0a09 2020 2020 6e65 7874 ]>\\n\";.. next\n-00001ae0: 3b0a 097d 0a09 6d79 2024 763b 0a09 6d79 ;..}..my $v;..my\n-00001af0: 2024 6c20 3d20 3c46 494c 453e 3b0a 0963 $l = ;..c\n-00001b00: 686f 7020 246c 3b0a 0969 6620 2824 6c20 hop $l;..if ($l \n-00001b10: 3d7e 202f 5e23 2323 7665 7273 696f 6e3d =~ /^###version=\n-00001b20: 282e 2a29 2f29 0a09 7b0a 0920 2020 2024 (.*)/)..{.. $\n-00001b30: 7620 3d20 2431 3b0a 097d 0a09 656c 7365 v = $1;..}..else\n-00001b40: 0a09 7b0a 0920 2020 2024 7620 3d20 2731 ..{.. $v = '1\n-00001b50: 2e30 273b 0a09 7d0a 0a09 6966 2028 2476 .0';..}...if ($v\n-00001b60: 2065 7120 2731 2e30 2729 0a09 7b0a 0920 eq '1.0')..{.. \n-00001b70: 2020 2070 7269 6e74 2022 2465 6e74 7279 print \"$entry\n-00001b80: 3a20 7665 7273 696f 6e20 3c24 763e 2063 : version <$v> c\n-00001b90: 6f6e 7665 7274 696e 6720 746f 2031 2e31 onverting to 1.1\n-00001ba0: 202e 2e2e 223b 0a09 2020 2020 5354 444f ...\";.. STDO\n-00001bb0: 5554 2d3e 6175 746f 666c 7573 6828 3129 UT->autoflush(1)\n-00001bc0: 3b0a 0920 2020 2069 6620 2824 636f 6d70 ;.. if ($comp\n-00001bd0: 7265 7373 203d 3d20 3129 0a09 2020 2020 ress == 1).. \n-00001be0: 7b0a 0909 756e 6c69 6e6b 2022 2465 2f24 {...unlink \"$e/$\n-00001bf0: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new\n-00001c00: 2e62 7a32 223b 0a09 096f 7065 6e28 4e45 .bz2\";...open(NE\n-00001c10: 572c 2022 7c20 627a 6970 3220 3e20 5c27 W, \"| bzip2 > \\'\n-00001c20: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n-00001c30: 2e6e 6577 2e62 7a32 5c27 2229 206f 720a .new.bz2\\'\") or.\n-00001c40: 0909 2020 2020 6469 6520 2263 616e 6e6f .. die \"canno\n-00001c50: 7420 627a 6970 3220 3e20 2465 2f24 6d64 t bzip2 > $e/$md\n-00001c60: 3543 6865 636b 5375 6d73 2e6e 6577 2e62 5CheckSums.new.b\n-00001c70: 7a32 223b 0a09 2020 2020 7d0a 0920 2020 z2\";.. }.. \n-00001c80: 2065 6c73 650a 0920 2020 207b 0a09 0975 else.. {...u\n-00001c90: 6e6c 696e 6b20 2224 652f 246d 6435 4368 nlink \"$e/$md5Ch\n-00001ca0: 6563 6b53 756d 732e 6e65 7722 3b0a 0909 eckSums.new\";...\n-00001cb0: 6f70 656e 284e 4557 2c20 223e 2024 652f open(NEW, \"> $e/\n-00001cc0: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne\n-00001cd0: 7722 2920 6f72 0a09 0920 2020 2064 6965 w\") or... die\n-00001ce0: 2022 6361 6e6e 6f74 2077 7269 7465 2024 \"cannot write $\n-00001cf0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n-00001d00: 6e65 7722 3b0a 0920 2020 207d 0a09 2020 new\";.. }.. \n-00001d10: 2020 7072 696e 7420 4e45 5720 2223 2323 print NEW \"###\n-00001d20: 7665 7273 696f 6e3d 312e 315c 6e22 3b0a version=1.1\\n\";.\n-00001d30: 0920 2020 2070 7269 6e74 204e 4557 2022 . print NEW \"\n-00001d40: 2323 2365 7863 6570 7444 6972 7353 6570 ###exceptDirsSep\n-00001d50: 3d2c 5c6e 223b 0a09 2020 2020 7072 696e =,\\n\";.. prin\n-00001d60: 7420 4e45 5720 2223 2323 6578 6365 7074 t NEW \"###except\n-00001d70: 4469 7273 3d5c 6e22 3b0a 0a09 2020 2020 Dirs=\\n\";... \n-00001d80: 6d79 2024 6920 3d20 303b 2020 2020 2320 my $i = 0; # \n-00001d90: 5ae4 686c 6572 2c20 6465 7220 696e 6f64 Z.hler, der inod\n-00001da0: 6573 2073 696d 756c 6965 7274 0a09 2020 es simuliert.. \n-00001db0: 2020 7768 696c 6520 2824 6c20 3d20 3c46 while ($l = ).. {...i\n-00001dd0: 6620 2824 6c20 3d7e 202f 5e23 2323 2f29 f ($l =~ /^###/)\n-00001de0: 0a09 097b 0a09 0920 2020 2070 7269 6e74 ...{... print\n-00001df0: 204e 4557 2024 6c3b 0a09 0920 2020 206e NEW $l;... n\n-00001e00: 6578 743b 0a09 097d 0a0a 0909 2469 2b2b ext;...}....$i++\n-00001e10: 3b0a 0909 6368 6f70 2024 6c3b 0a09 096d ;...chop $l;...m\n-00001e20: 7920 2824 6d64 3573 756d 2c20 2463 6f6d y ($md5sum, $com\n-00001e30: 7072 2c20 2463 7469 6d65 2c20 246d 7469 pr, $ctime, $mti\n-00001e40: 6d65 2c20 2473 697a 652c 2024 7569 642c me, $size, $uid,\n-00001e50: 2024 6769 642c 0a09 0920 2020 2024 6d6f $gid,... $mo\n-00001e60: 6465 2c20 2466 696c 656e 616d 6529 3b0a de, $filename);.\n-00001e70: 0909 6d79 2024 6420 3d20 275b 5c64 2d5d ..my $d = '[\\d-]\n-00001e80: 273b 2020 2020 2020 2320 5c64 2075 6e64 '; # \\d und\n-00001e90: 204d 696e 7573 7a65 6963 6865 6e0a 0909 Minuszeichen...\n-00001ea0: 6d79 2024 6e20 3d20 2824 6d64 3573 756d my $n = ($md5sum\n-00001eb0: 2c20 2463 6f6d 7072 2c20 2463 7469 6d65 , $compr, $ctime\n-00001ec0: 2c20 246d 7469 6d65 2c20 2473 697a 652c , $mtime, $size,\n-00001ed0: 2024 7569 642c 0a09 0909 2024 6769 642c $uid,.... $gid,\n-00001ee0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam\n-00001ef0: 6529 203d 0a09 0924 6c20 3d7e 202f 5e28 e) =...$l =~ /^(\n-00001f00: 5c77 2b29 5c73 2b28 5c77 2b29 5c73 2b28 \\w+)\\s+(\\w+)\\s+(\n-00001f10: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\\s+($d+)\\s+(\n-00001f20: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\\s+($d+)\\s+(\n-00001f30: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\\s+($d+)\\s+(\n-00001f40: 2e2a 292f 6f3b 0a09 0970 7269 6e74 204e .*)/o;...print N\n-00001f50: 4557 0a09 0920 2020 2022 246d 6435 7375 EW... \"$md5su\n-00001f60: 6d20 2463 6f6d 7072 2031 2d24 6920 2463 m $compr 1-$i $c\n-00001f70: 7469 6d65 2024 6d74 696d 6520 2473 697a time $mtime $siz\n-00001f80: 6520 2475 6964 2024 6769 6420 246d 6f64 e $uid $gid $mod\n-00001f90: 6520 2466 696c 656e 616d 655c 6e22 3b0a e $filename\\n\";.\n-00001fa0: 0920 2020 207d 0a09 2020 2020 636c 6f73 . }.. clos\n-00001fb0: 6528 4e45 5729 3b0a 0920 2020 2069 6620 e(NEW);.. if \n-00001fc0: 2824 636f 6d70 7265 7373 203d 3d20 3129 ($compress == 1)\n-00001fd0: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink\n-00001fe0: 2022 2465 2f24 6d64 3543 6865 636b 5375 \"$e/$md5CheckSu\n-00001ff0: 6d73 2e62 7a32 223b 0a09 0972 656e 616d ms.bz2\";...renam\n-00002000: 6520 2224 652f 246d 6435 4368 6563 6b53 e \"$e/$md5CheckS\n-00002010: 756d 732e 6e65 772e 627a 3222 2c20 2224 ums.new.bz2\", \"$\n-00002020: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n-00002030: 627a 3222 3b0a 0909 6368 6d6f 6420 3036 bz2\";...chmod 06\n-00002040: 3030 2c20 2224 652f 246d 6435 4368 6563 00, \"$e/$md5Chec\n-00002050: 6b53 756d 732e 627a 3222 3b0a 0920 2020 kSums.bz2\";.. \n-00002060: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00002070: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink \"$e\n-00002080: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums\";\n-00002090: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename \"$e/$m\n-000020a0: 6435 4368 6563 6b53 756d 732e 6e65 7722 d5CheckSums.new\"\n-000020b0: 2c20 2224 652f 246d 6435 4368 6563 6b53 , \"$e/$md5CheckS\n-000020c0: 756d 7322 3b0a 0909 6368 6d6f 6420 3036 ums\";...chmod 06\n-000020d0: 3030 2c20 2224 652f 246d 6435 4368 6563 00, \"$e/$md5Chec\n-000020e0: 6b53 756d 7322 3b0a 0920 2020 207d 0a09 kSums\";.. }..\n-000020f0: 2020 2020 7072 696e 7420 2220 6f6b 5c6e print \" ok\\n\n-00002100: 223b 0a0a 0920 2020 2067 6f74 6f20 6167 \";... goto ag\n-00002110: 6169 6e46 6f72 4e65 7874 5665 7273 696f ainForNextVersio\n-00002120: 6e3b 0a09 7d0a 0965 6c73 6966 2028 2476 n;..}..elsif ($v\n-00002130: 2065 7120 2731 2e31 2729 0a09 7b0a 0920 eq '1.1')..{.. \n-00002140: 2020 2070 7269 6e74 2022 2465 6e74 7279 print \"$entry\n-00002150: 3a20 7665 7273 696f 6e20 3c24 763e 2063 : version <$v> c\n-00002160: 6f6e 7665 7274 696e 6720 746f 2031 2e32 onverting to 1.2\n-00002170: 202e 2e2e 223b 0a09 2020 2020 5354 444f ...\";.. STDO\n-00002180: 5554 2d3e 6175 746f 666c 7573 6828 3129 UT->autoflush(1)\n-00002190: 3b0a 0920 2020 2069 6620 2824 636f 6d70 ;.. if ($comp\n-000021a0: 7265 7373 203d 3d20 3129 0a09 2020 2020 ress == 1).. \n-000021b0: 7b0a 0909 756e 6c69 6e6b 2022 2465 2f24 {...unlink \"$e/$\n-000021c0: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new\n-000021d0: 2e62 7a32 222c 2022 2465 2f24 6d64 3543 .bz2\", \"$e/$md5C\n-000021e0: 6865 636b 5375 6d73 2e69 6e66 6f22 3b0a heckSums.info\";.\n-000021f0: 0909 6f70 656e 284e 4557 2c20 227c 2062 ..open(NEW, \"| b\n-00002200: 7a69 7032 203e 205c 2724 652f 246d 6435 zip2 > \\'$e/$md5\n-00002210: 4368 6563 6b53 756d 732e 6e65 772e 627a CheckSums.new.bz\n-00002220: 325c 2722 2920 6f72 0a09 0920 2020 2064 2\\'\") or... d\n-00002230: 6965 2022 6361 6e6e 6f74 2062 7a69 7032 ie \"cannot bzip2\n-00002240: 203e 2024 652f 246d 6435 4368 6563 6b53 > $e/$md5CheckS\n-00002250: 756d 732e 6e65 772e 627a 3222 3b0a 0920 ums.new.bz2\";.. \n-00002260: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n-00002270: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink \"\n-00002280: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums\n-00002290: 2e6e 6577 222c 2022 2465 2f24 6d64 3543 .new\", \"$e/$md5C\n-000022a0: 6865 636b 5375 6d73 2e69 6e66 6f22 3b0a heckSums.info\";.\n-000022b0: 0909 6f70 656e 284e 4557 2c20 223e 2024 ..open(NEW, \"> $\n-000022c0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n-000022d0: 6e65 7722 2920 6f72 0a09 0920 2020 2064 new\") or... d\n-000022e0: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie \"cannot write\n-000022f0: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum\n-00002300: 732e 6e65 7722 3b0a 0920 2020 207d 0a09 s.new\";.. }..\n-00002310: 2020 2020 6f70 656e 2849 4e46 4f2c 2022 open(INFO, \"\n-00002320: 3e20 2465 2f24 6d64 3543 6865 636b 5375 > $e/$md5CheckSu\n-00002330: 6d73 2e69 6e66 6f22 2920 6f72 0a09 0964 ms.info\") or...d\n-00002340: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie \"cannot write\n-00002350: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum\n-00002360: 732e 696e 666f 223b 0a0a 0920 2020 2070 s.info\";... p\n-00002370: 7269 6e74 2049 4e46 4f20 2276 6572 7369 rint INFO \"versi\n-00002380: 6f6e 3d31 2e32 5c6e 223b 0a0a 0920 2020 on=1.2\\n\";... \n-00002390: 206d 7920 2470 6f73 7466 6978 3b0a 0920 my $postfix;.. \n-000023a0: 2020 2077 6869 6c65 2028 246c 203d 203c while ($l = <\n-000023b0: 4649 4c45 3e29 0a09 2020 2020 7b0a 0909 FILE>).. {...\n-000023c0: 6966 2028 246c 203d 7e20 2f5e 2323 2320 if ($l =~ /^### \n-000023d0: 2f29 2020 2023 2053 7061 6c74 656e 7665 /) # Spaltenve\n-000023e0: 727a 6569 6368 6e69 730a 0909 7b0a 0909 rzeichnis...{...\n-000023f0: 2020 2020 7072 696e 7420 4e45 5720 2223 print NEW \"#\n-00002400: 2063 6f6e 7465 6e74 732f 6d64 3520 636f contents/md5 co\n-00002410: 6d70 7220 6465 762d 696e 6f64 6520 696e mpr dev-inode in\n-00002420: 6f64 6542 6163 6b75 7020 2220 2e0a 0909 odeBackup \" ....\n-00002430: 0922 6374 696d 6520 6d74 696d 6520 7369 .\"ctime mtime si\n-00002440: 7a65 2075 6964 2067 6964 206d 6f64 6520 ze uid gid mode \n-00002450: 6669 6c65 6e61 6d65 5c6e 223b 0a09 0920 filename\\n\";... \n-00002460: 2020 206e 6578 743b 0a09 097d 0a09 0965 next;...}...e\n-00002470: 6c73 6966 2028 246c 203d 7e20 2f5e 2323 lsif ($l =~ /^##\n-00002480: 2328 2e2a 3f29 3d28 2e2a 292f 290a 0909 #(.*?)=(.*)/)...\n-00002490: 7b0a 0909 2020 2020 7072 696e 7420 494e {... print IN\n-000024a0: 464f 2022 2431 3d24 325c 6e22 3b0a 0909 FO \"$1=$2\\n\";...\n-000024b0: 2020 2020 2470 6f73 7466 6978 203d 2024 $postfix = $\n-000024c0: 3220 6966 2028 2431 2065 7120 2770 6f73 2 if ($1 eq 'pos\n-000024d0: 7466 6978 2729 3b0a 0909 2020 2020 6e65 tfix');... ne\n-000024e0: 7874 3b0a 0909 7d0a 0a09 0963 686f 7020 xt;...}....chop \n-000024f0: 246c 3b0a 0909 6d79 2028 246d 6435 7375 $l;...my ($md5su\n-00002500: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI\n-00002510: 6e6f 6465 2c20 2463 7469 6d65 2c20 246d node, $ctime, $m\n-00002520: 7469 6d65 2c20 2473 697a 652c 2024 7569 time, $size, $ui\n-00002530: 642c 2024 6769 642c 0a09 0920 2020 2024 d, $gid,... $\n-00002540: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename)\n-00002550: 3b0a 0909 6d79 2024 6420 3d20 275b 5c64 ;...my $d = '[\\d\n-00002560: 2d5d 273b 2020 2020 2020 2320 5c64 2075 -]'; # \\d u\n-00002570: 6e64 204d 696e 7573 7a65 6963 6865 6e0a nd Minuszeichen.\n-00002580: 0909 6d79 2024 6e20 3d20 2824 6d64 3573 ..my $n = ($md5s\n-00002590: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev\n-000025a0: 496e 6f64 652c 2024 6374 696d 652c 2024 Inode, $ctime, $\n-000025b0: 6d74 696d 652c 2024 7369 7a65 2c20 2475 mtime, $size, $u\n-000025c0: 6964 2c0a 0909 0920 2467 6964 2c20 246d id,.... $gid, $m\n-000025d0: 6f64 652c 2024 6669 6c65 6e61 6d65 2920 ode, $filename) \n-000025e0: 3d0a 0909 246c 203d 7e20 2f5e 285c 772b =...$l =~ /^(\\w+\n-000025f0: 295c 732b 285c 772b 295c 732b 285c 532b )\\s+(\\w+)\\s+(\\S+\n-00002600: 295c 732b 2824 642b 295c 732b 2824 642b )\\s+($d+)\\s+($d+\n-00002610: 295c 732b 2824 642b 295c 732b 2824 642b )\\s+($d+)\\s+($d+\n-00002620: 295c 732b 2824 642b 295c 732b 2824 642b )\\s+($d+)\\s+($d+\n-00002630: 295c 732b 282e 2a29 2f6f 3b0a 0909 2320 )\\s+(.*)/o;...# \n-00002640: 496e 6f64 6520 696d 2042 6163 6b75 7020 Inode im Backup \n-00002650: 6572 6d69 7474 656c 6e0a 0909 6d79 2024 ermitteln...my $\n-00002660: 696e 6f64 6542 6163 6b75 703b 0a09 096d inodeBackup;...m\n-00002670: 7920 2466 203d 2022 2465 2f24 6669 6c65 y $f = \"$e/$file\n-00002680: 6e61 6d65 223b 0a09 0924 6620 3d7e 2073 name\";...$f =~ s\n-00002690: 2f5c 5c30 412f 5c6e 2f6f 673b 2020 2020 /\\\\0A/\\n/og; \n-000026a0: 2320 275c 6e27 2077 6965 6465 7268 6572 # '\\n' wiederher\n-000026b0: 7374 656c 6c65 6e0a 0909 2466 203d 7e20 stellen...$f =~ \n-000026c0: 732f 5c5c 3543 2f5c 5c2f 6f67 3b20 2020 s/\\\\5C/\\\\/og; \n-000026d0: 2023 2027 5c5c 2720 7769 6564 6572 6865 # '\\\\' wiederhe\n-000026e0: 7273 7465 6c6c 656e 0a0a 0909 2466 202e rstellen....$f .\n-000026f0: 3d20 2470 6f73 7466 6978 2069 6620 2824 = $postfix if ($\n-00002700: 636f 6d70 7220 6571 2027 6327 293b 0a09 compr eq 'c');..\n-00002710: 0969 6620 2824 6d64 3573 756d 2065 7120 .if ($md5sum eq \n-00002720: 2773 796d 6c69 6e6b 2729 0a09 097b 0a09 'symlink')...{..\n-00002730: 0920 2020 2024 696e 6f64 6542 6163 6b75 . $inodeBacku\n-00002740: 7020 3d20 286c 7374 6174 2824 6629 295b p = (lstat($f))[\n-00002750: 315d 3b0a 0909 7d0a 0909 656c 7365 0a09 1];...}...else..\n-00002760: 097b 0a09 0920 2020 2024 696e 6f64 6542 .{... $inodeB\n-00002770: 6163 6b75 7020 3d20 2873 7461 7428 2466 ackup = (stat($f\n-00002780: 2929 5b31 5d3b 0a09 097d 0a0a 0909 7072 ))[1];...}....pr\n-00002790: 696e 7420 4e45 570a 0909 2020 2020 2224 int NEW... \"$\n-000027a0: 6d64 3573 756d 2024 636f 6d70 7220 2464 md5sum $compr $d\n-000027b0: 6576 496e 6f64 6520 2469 6e6f 6465 4261 evInode $inodeBa\n-000027c0: 636b 7570 2024 6374 696d 6520 246d 7469 ckup $ctime $mti\n-000027d0: 6d65 2022 202e 0a09 0920 2020 2020 2020 me \" .... \n-000027e0: 2224 7369 7a65 2024 7569 6420 2467 6964 \"$size $uid $gid\n-000027f0: 2024 6d6f 6465 2024 6669 6c65 6e61 6d65 $mode $filename\n-00002800: 5c6e 223b 0a09 2020 2020 7d0a 0920 2020 \\n\";.. }.. \n-00002810: 2063 6c6f 7365 284e 4557 293b 0a09 2020 close(NEW);.. \n-00002820: 2020 636c 6f73 6528 494e 464f 293b 0a09 close(INFO);..\n-00002830: 2020 2020 6368 6d6f 6420 3036 3030 2c20 chmod 0600, \n-00002840: 2224 6524 6d64 3543 6865 636b 5375 6d73 \"$e$md5CheckSums\n-00002850: 2e69 6e66 6f22 3b0a 0920 2020 2069 6620 .info\";.. if \n-00002860: 2824 636f 6d70 7265 7373 203d 3d20 3129 ($compress == 1)\n-00002870: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink\n-00002880: 2022 2465 2f24 6d64 3543 6865 636b 5375 \"$e/$md5CheckSu\n-00002890: 6d73 2e62 7a32 223b 0a09 0972 656e 616d ms.bz2\";...renam\n-000028a0: 6520 2224 652f 246d 6435 4368 6563 6b53 e \"$e/$md5CheckS\n-000028b0: 756d 732e 6e65 772e 627a 3222 2c20 2224 ums.new.bz2\", \"$\n-000028c0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums.\n-000028d0: 627a 3222 3b0a 0909 6368 6d6f 6420 3036 bz2\";...chmod 06\n-000028e0: 3030 2c20 2224 652f 246d 6435 4368 6563 00, \"$e/$md5Chec\n-000028f0: 6b53 756d 732e 627a 3222 3b0a 0920 2020 kSums.bz2\";.. \n-00002900: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00002910: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink \"$e\n-00002920: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums\";\n-00002930: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename \"$e/$m\n-00002940: 6435 4368 6563 6b53 756d 732e 6e65 7722 d5CheckSums.new\"\n-00002950: 2c20 2224 652f 246d 6435 4368 6563 6b53 , \"$e/$md5CheckS\n-00002960: 756d 7322 3b0a 0909 6368 6d6f 6420 3036 ums\";...chmod 06\n-00002970: 3030 2c20 2224 652f 246d 6435 4368 6563 00, \"$e/$md5Chec\n-00002980: 6b53 756d 7322 3b0a 0920 2020 207d 0a09 kSums\";.. }..\n-00002990: 2020 2020 7072 696e 7420 2220 6f6b 5c6e print \" ok\\n\n-000029a0: 223b 0a09 2020 2020 636c 6f73 6528 4649 \";.. close(FI\n-000029b0: 4c45 293b 0a09 7d0a 0965 6c73 650a 097b LE);..}..else..{\n-000029c0: 0a09 2020 2020 7072 696e 7420 2224 656e .. print \"$en\n-000029d0: 7472 793a 2075 6e73 7570 706f 7274 6564 try: unsupported\n-000029e0: 2076 6572 7369 6f6e 203c 2476 3e5c 6e22 version <$v>\\n\"\n-000029f0: 3b0a 097d 0a20 2020 207d 0a7d 0a0a 0a70 ;..}. }.}...p\n-00002a00: 7269 6e74 2022 4552 524f 523a 206e 6f20 rint \"ERROR: no \n-00002a10: 6261 636b 7570 2064 6972 6563 746f 7269 backup directori\n-00002a20: 6573 2066 6f75 6e64 5c6e 220a 2020 2020 es found\\n\". \n-00002a30: 756e 6c65 7373 2028 2466 6c61 6729 3b0a unless ($flag);.\n-00002a40: 0a .\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"}, {"source1": "./usr/bin/storeBackupDel", "source2": "./usr/bin/storeBackupDel", "has_internal_linenos": true, "unified_diff": "@@ -1,1322 +1,4 @@\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 3232 290a 2320 2020 2020 2020 3-2022).# \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 ..#...$mai\n-00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n-00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n-00000320: 0a75 7365 2073 7472 6963 743b 0a0a 7573 .use strict;..us\n-00000330: 6520 4663 6e74 6c20 7177 284f 5f52 4457 e Fcntl qw(O_RDW\n-00000340: 5220 4f5f 4352 4541 5429 3b0a 7573 6520 R O_CREAT);.use \n-00000350: 4669 6c65 3a3a 436f 7079 3b0a 7573 6520 File::Copy;.use \n-00000360: 504f 5349 583b 0a0a 7375 6220 6c69 6250 POSIX;..sub libP\n-00000370: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi\n-00000380: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. \n-00000390: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. #\n-000003a0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel\n-000003b0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink \n-000003c0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol\n-000003d0: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel.\n-000003e0: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f\n-000003f0: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil\n-00000400: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{.\n-00000410: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = \n-00000420: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file);\n-00000430: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst\n-00000440: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n\n-00000450: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e \"/\").. {...\n-00000460: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\\/]\n-00000470: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. \n-00000480: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. \n-00000490: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li\n-000004a0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}...\n-000004b0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = \n-000004c0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n-000004d0: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = \"\n-000004e0: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file\";. }. \n-000004f0: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p\n-00000500: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR \"<$f\n-00000510: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex\n-00000520: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\\n\";..exit 1\n-00000530: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di\n-00000540: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= \"/../lib\"; \n-00000550: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad\n-00000560: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth\n-00000570: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old\n-00000580: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-00000590: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old\n-000005a0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd\n-000005b0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {..\n-000005c0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b\n-000005d0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $\n-000005e0: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $\n-000005f0: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return\n-00000600: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir(\n-00000610: 2224 6162 7344 6972 2466 696c 6522 2929 \"$absDir$file\"))\n-00000620: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-00000630: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-00000640: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR \"<$dir> doe\n-00000650: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000660: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\\n\";. }.}\n-00000670: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi\n-00000680: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name\n-00000690: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r\n-000006a0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam\n-000006b0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name\n-000006c0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\\//); # n\n-000006d0: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat\n-000006e0: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my (\n-000006f0: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $\n-00000700: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\\/\n-00000710: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di\n-00000720: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir\n-00000730: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); \n-00000740: 2020 2020 2020 2020 2020 2023 2067 696c # gil\n-00000750: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f\n-00000760: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu\n-00000770: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file)\n-00000780: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p\n-00000790: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath(\n-000007a0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN\n-000007b0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, \"$req\";...req\n-000007c0: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku\n-000007d0: 704c 6962 2e70 6c27 3b0a 7265 7175 6972 pLib.pl';.requir\n-000007e0: 6520 2763 6865 636b 5061 7261 6d32 2e70 e 'checkParam2.p\n-000007f0: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che\n-00000800: 636b 4f62 6a50 6172 2e70 6c27 3b0a 7265 ckObjPar.pl';.re\n-00000810: 7175 6972 6520 2770 724c 6f67 2e70 6c27 quire 'prLog.pl'\n-00000820: 3b0a 7265 7175 6972 6520 2776 6572 7369 ;.require 'versi\n-00000830: 6f6e 2e70 6c27 3b0a 7265 7175 6972 6520 on.pl';.require \n-00000840: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';.\n-00000850: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir\n-00000860: 2e70 6c27 3b0a 7265 7175 6972 6520 2768 .pl';.require 'h\n-00000870: 756d 616e 5265 6164 2e70 6c27 3b0a 0a6d umanRead.pl';..m\n-00000880: 7920 246c 6f63 6b46 696c 6520 3d20 2824 y $lockFile = ($\n-00000890: 454e 567b 2755 5345 5227 7d20 6571 2027 ENV{'USER'} eq '\n-000008a0: 726f 6f74 2729 203f 2020 2020 2023 2064 root') ? # d\n-000008b0: 6566 6175 6c74 2076 616c 7565 0a09 0927 efault value...'\n-000008c0: 2f76 6172 2f6c 6f63 6b2f 7374 6f72 6542 /var/lock/storeB\n-000008d0: 6163 6b75 702e 6c6f 636b 2720 3a0a 0909 ackup.lock' :...\n-000008e0: 2445 4e56 7b27 484f 4d45 277d 202e 2027 $ENV{'HOME'} . '\n-000008f0: 2f73 746f 7265 4261 636b 7570 2e6c 6f63 /storeBackup.loc\n-00000900: 6b27 3b0a 6d79 2024 6b65 6570 416c 6c20 k';.my $keepAll \n-00000910: 3d20 2733 3064 273b 0a6d 7920 246b 6565 = '30d';.my $kee\n-00000920: 7044 7570 6c69 6361 7465 203d 2027 3764 pDuplicate = '7d\n-00000930: 273b 0a6d 7920 2463 6865 636b 5375 6d46 ';.my $checkSumF\n-00000940: 696c 6520 3d20 272e 6d64 3543 6865 636b ile = '.md5Check\n-00000950: 5375 6d73 273b 0a6d 7920 2463 686d 6f64 Sums';.my $chmod\n-00000960: 4d44 3546 696c 6520 3d20 2730 3630 3027 MD5File = '0600'\n-00000970: 3b0a 0a3d 6865 6164 3120 4e41 4d45 0a0a ;..=head1 NAME..\n-00000980: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p\n-00000990: 6c20 2d20 7468 6973 2070 726f 6772 616d l - this program\n-000009a0: 2064 656c 6574 6573 2062 6163 6b75 7073 deletes backups\n-000009b0: 2063 7265 6174 6564 2062 7920 7374 6f72 created by stor\n-000009c0: 6542 6163 6b75 700a 0a3d 6865 6164 3120 eBackup..=head1 \n-000009d0: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store\n-000009e0: 4261 636b 7570 4465 6c2e 706c 205b 2d66 BackupDel.pl [-f\n-000009f0: 2063 6f6e 6669 6746 696c 655d 205b 2d2d configFile] [--\n-00000a00: 7072 696e 745d 0a09 5b2d 6220 6261 636b print]..[-b back\n-00000a10: 7570 4469 7265 6374 6f72 795d 205b 2d53 upDirectory] [-S\n-00000a20: 2073 6572 6965 735d 205b 2d2d 646f 4e6f series] [--doNo\n-00000a30: 7444 656c 6574 655d 0a09 5b2d 2d64 656c tDelete]..[--del\n-00000a40: 6574 654e 6f74 4669 6e69 7368 6564 4469 eteNotFinishedDi\n-00000a50: 7273 5d20 5b2d 4c20 6c6f 636b 4669 6c65 rs] [-L lockFile\n-00000a60: 5d0a 095b 2d2d 6b65 6570 416c 6c20 7469 ]..[--keepAll ti\n-00000a70: 6d65 5065 7269 6f64 5d20 5b2d 2d6b 6565 mePeriod] [--kee\n-00000a80: 7057 6565 6b64 6179 2065 6e74 7279 5d20 pWeekday entry] \n-00000a90: 5b2d 2d6b 6565 7046 6972 7374 4f66 5965 [--keepFirstOfYe\n-00000aa0: 6172 5d0a 095b 2d2d 6b65 6570 4c61 7374 ar]..[--keepLast\n-00000ab0: 4f66 5965 6172 5d20 5b2d 2d6b 6565 7046 OfYear] [--keepF\n-00000ac0: 6972 7374 4f66 4d6f 6e74 685d 205b 2d2d irstOfMonth] [--\n-00000ad0: 6b65 6570 4c61 7374 4f66 4d6f 6e74 685d keepLastOfMonth]\n-00000ae0: 0a09 5b2d 2d6b 6565 7046 6972 7374 4f66 ..[--keepFirstOf\n-00000af0: 5765 656b 5d20 5b2d 2d6b 6565 704c 6173 Week] [--keepLas\n-00000b00: 744f 6657 6565 6b5d 0a09 5b2d 2d6b 6565 tOfWeek]..[--kee\n-00000b10: 7044 7570 6c69 6361 7465 5d20 5b2d 2d6b pDuplicate] [--k\n-00000b20: 6565 704d 696e 4e75 6d62 6572 5d20 5b2d eepMinNumber] [-\n-00000b30: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber].\n-00000b40: 095b 2d6c 206c 6f67 4669 6c65 0a09 205b .[-l logFile.. [\n-00000b50: 2d2d 706c 7573 4c6f 6753 7464 6f75 745d --plusLogStdout]\n-00000b60: 205b 2d2d 7375 7070 7265 7373 5469 6d65 [--suppressTime\n-00000b70: 5d20 5b2d 6d20 6d61 7846 696c 656c 656e ] [-m maxFilelen\n-00000b80: 5d0a 0920 5b5b 2d6e 206e 6f4f 664f 6c64 ].. [[-n noOfOld\n-00000b90: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save\n-00000ba0: 4c6f 6773 5d0a 0920 5b2d 2d63 6f6d 7072 Logs].. [--compr\n-00000bb0: 6573 7357 6974 6820 636f 6d70 7265 7373 essWith compress\n-00000bc0: 7072 6f67 5d5d 0a0a 3d68 6561 6431 2057 prog]]..=head1 W\n-00000bd0: 4152 4e49 4e47 0a0a 2020 2121 2120 5553 ARNING.. !!! US\n-00000be0: 4147 4520 494e 2050 4152 414c 4c45 4c20 AGE IN PARALLEL \n-00000bf0: 5749 5448 2073 746f 7265 4261 636b 7570 WITH storeBackup\n-00000c00: 2e70 6c20 4341 4e20 4445 5354 524f 5920 .pl CAN DESTROY \n-00000c10: 594f 5552 2042 4143 4b55 5053 2021 2121 YOUR BACKUPS !!!\n-00000c20: 0a0a 3d68 6561 6431 204f 5054 494f 4e53 ..=head1 OPTIONS\n-00000c30: 0a0a 3d6f 7665 7220 380a 0a3d 6974 656d ..=over 8..=item\n-00000c40: 2042 3c2d 2d66 696c 653e 2c20 423c 2d66 B<--file>, B<-f\n-00000c50: 3e0a 0a20 2020 2063 6f6e 6669 6775 7261 >.. configura\n-00000c60: 7469 6f6e 2066 696c 6520 2869 6e73 7465 tion file (inste\n-00000c70: 6164 206f 6620 7061 7261 6d65 7465 7273 ad of parameters\n-00000c80: 290a 0a3d 6974 656d 2042 3c2d 2d70 7269 )..=item B<--pri\n-00000c90: 6e74 3e0a 0a20 2020 2070 7269 6e74 2063 nt>.. print c\n-00000ca0: 6f6e 6669 6775 7261 7469 6f6e 2072 6561 onfiguration rea\n-00000cb0: 6420 6672 6f6d 2063 6f6e 6669 6775 7261 d from configura\n-00000cc0: 7469 6f6e 2066 696c 6520 616e 6420 7374 tion file and st\n-00000cd0: 6f70 0a0a 3d69 7465 6d20 423c 2d2d 6261 op..=item B<--ba\n-00000ce0: 636b 7570 4469 723e 2c20 423c 2d62 3e0a ckupDir>, B<-b>.\n-00000cf0: 0a20 2020 2074 6f70 206c 6576 656c 2064 . top level d\n-00000d00: 6972 6563 746f 7279 206f 6620 616c 6c20 irectory of all \n-00000d10: 6261 636b 7570 7320 286d 7573 7420 6578 backups (must ex\n-00000d20: 6973 7429 0a0a 3d69 7465 6d20 423c 2d2d ist)..=item B<--\n-00000d30: 7365 7269 6573 3e2c 2042 3c2d 533e 0a0a series>, B<-S>..\n-00000d40: 2020 2020 6469 7265 6374 6f72 7920 6f66 directory of\n-00000d50: 2062 6163 6b75 7020 7365 7269 6573 0a20 backup series. \n-00000d60: 2020 2073 616d 6520 7061 7261 6d65 7465 same paramete\n-00000d70: 7220 6173 2069 6e20 7374 6f72 6542 6163 r as in storeBac\n-00000d80: 6b75 7020 2f20 7265 6c61 7469 7665 2070 kup / relative p\n-00000d90: 6174 680a 2020 2020 6672 6f6d 2062 6163 ath. from bac\n-00000da0: 6b75 7044 6972 2c20 6465 6661 756c 7420 kupDir, default \n-00000db0: 6973 2027 6465 6661 756c 7427 0a0a 3d69 is 'default'..=i\n-00000dc0: 7465 6d20 423c 2d2d 6c6f 636b 4669 6c65 tem B<--lockFile\n-00000dd0: 3e2c 2042 3c2d 4c3e 0a0a 2020 2020 6c6f >, B<-L>.. lo\n-00000de0: 636b 2066 696c 652c 2069 6620 6578 6973 ck file, if exis\n-00000df0: 7473 2c20 6e65 7720 696e 7374 616e 6365 ts, new instance\n-00000e00: 7320 7769 6c6c 2066 696e 6973 6820 6966 s will finish if\n-00000e10: 0a20 2020 2061 6e20 6f6c 6420 6973 2061 . an old is a\n-00000e20: 6c72 6561 6479 2072 756e 6e69 6e67 2c20 lready running, \n-00000e30: 6465 6661 756c 7420 6973 2024 6c6f 636b default is $lock\n-00000e40: 4669 6c65 0a20 2020 2074 6869 7320 7479 File. this ty\n-00000e50: 7065 206f 6620 6c6f 636b 2066 696c 6573 pe of lock files\n-00000e60: 2064 6f65 7320 6e6f 7420 776f 726b 2061 does not work a\n-00000e70: 6372 6f73 7320 6d75 6c74 6970 6c65 2073 cross multiple s\n-00000e80: 6572 7665 7273 0a20 2020 2061 6e64 2069 ervers. and i\n-00000e90: 7320 6e6f 7420 6465 7369 676e 6564 2074 s not designed t\n-00000ea0: 6f20 7365 7061 7261 7465 2073 746f 7265 o separate store\n-00000eb0: 4261 636b 7570 2e70 6c20 616e 640a 2020 Backup.pl and. \n-00000ec0: 2020 7374 6f72 6542 6163 6b75 7055 7064 storeBackupUpd\n-00000ed0: 6174 6542 6163 6b75 702e 706c 206f 7220 ateBackup.pl or \n-00000ee0: 616e 7920 6f74 6865 7220 7374 6f72 6542 any other storeB\n-00000ef0: 6163 6b75 700a 2020 2020 7072 6f63 6573 ackup. proces\n-00000f00: 7320 696e 2061 2073 6570 6172 6174 6520 s in a separate \n-00000f10: 5049 4420 7370 6163 650a 2020 2020 4465 PID space. De\n-00000f20: 6661 756c 7420 6c6f 636b 2066 696c 6520 fault lock file \n-00000f30: 666f 7220 726f 6f74 2069 7320 696e 202f for root is in /\n-00000f40: 7661 722f 6c6f 636b 2c20 666f 7220 6f74 var/lock, for ot\n-00000f50: 6865 7273 2069 6e20 5c24 484f 4d45 0a0a hers in \\$HOME..\n-00000f60: 3d69 7465 6d20 423c 2d2d 646f 4e6f 7444 =item B<--doNotD\n-00000f70: 656c 6574 653e 0a0a 2020 2020 7465 7374 elete>.. test\n-00000f80: 206f 6e6c 792c 2064 6f20 6e6f 7420 6465 only, do not de\n-00000f90: 6c65 7465 2061 6e79 2062 6163 6b75 700a lete any backup.\n-00000fa0: 0a3d 6974 656d 2042 3c2d 2d64 656c 6574 .=item B<--delet\n-00000fb0: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs\n-00000fc0: 3e0a 0a20 2020 2064 656c 6574 6520 6f6c >.. delete ol\n-00000fd0: 6420 6261 636b 7570 7320 7768 6963 6820 d backups which \n-00000fe0: 7768 6572 6520 6e6f 7420 6669 6e69 7368 where not finish\n-00000ff0: 6564 0a20 2020 2074 6869 7320 7769 6c6c ed. this will\n-00001000: 206e 6f74 2068 6170 7065 6e20 6966 2064 not happen if d\n-00001010: 6f4e 6f74 4465 6c65 7465 2069 7320 7365 oNotDelete is se\n-00001020: 740a 0a3d 6974 656d 2042 3c2d 2d6b 6565 t..=item B<--kee\n-00001030: 7041 6c6c 3e0a 0a20 2020 206b 6565 7020 pAll>.. keep \n-00001040: 6261 636b 7570 7320 7768 6963 6820 6172 backups which ar\n-00001050: 6520 6e6f 7420 6f6c 6465 7220 7468 616e e not older than\n-00001060: 2074 6865 2073 7065 6369 6669 6564 2061 the specified a\n-00001070: 6d6f 756e 740a 2020 2020 6f66 2074 696d mount. of tim\n-00001080: 652e 2054 6869 7320 6973 206c 696b 6520 e. This is like \n-00001090: 6120 6465 6661 756c 7420 7661 6c75 6520 a default value \n-000010a0: 666f 7220 616c 6c20 6461 7973 2069 6e0a for all days in.\n-000010b0: 2020 2020 2d2d 6b65 6570 5765 656b 6461 --keepWeekda\n-000010c0: 792e 2042 6567 696e 7320 6465 6c65 7469 y. Begins deleti\n-000010d0: 6e67 2061 7420 7468 6520 656e 6420 6f66 ng at the end of\n-000010e0: 2074 6865 2073 6372 6970 740a 2020 2020 the script. \n-000010f0: 7468 6520 7469 6d65 2072 616e 6765 2068 the time range h\n-00001100: 6173 2074 6f20 6265 2073 7065 6369 6669 as to be specifi\n-00001110: 6564 2069 6e20 666f 726d 6174 2027 6468 ed in format 'dh\n-00001120: 6d73 272c 2065 2e67 2e0a 2020 2020 3130 ms', e.g.. 10\n-00001130: 6434 6820 6d65 616e 7320 3130 2064 6179 d4h means 10 day\n-00001140: 7320 616e 6420 3420 686f 7572 730a 2020 s and 4 hours. \n-00001150: 2020 6465 6661 756c 7420 3d20 246b 6565 default = $kee\n-00001160: 7041 6c6c 3b0a 0a3d 6974 656d 2042 3c2d pAll;..=item B<-\n-00001170: 2d6b 6565 7057 6565 6b64 6179 3e0a 0a09 -keepWeekday>...\n-00001180: 0920 2020 206b 6565 7020 6261 636b 7570 . keep backup\n-00001190: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif\n-000011a0: 6965 6420 6461 7973 2066 6f72 2074 6865 ied days for the\n-000011b0: 2073 7065 6369 6669 6564 0a09 0920 2020 specified... \n-000011c0: 2061 6d6f 756e 7420 6f66 2074 696d 652e amount of time.\n-000011d0: 204f 7665 7277 7269 7465 7320 7468 6520 Overwrites the \n-000011e0: 6465 6661 756c 7420 7661 6c75 6573 2063 default values c\n-000011f0: 686f 7365 6e20 696e 0a09 0920 2020 202d hosen in... -\n-00001200: 2d6b 6565 7041 6c6c 2e20 274d 6f6e 2c57 -keepAll. 'Mon,W\n-00001210: 6564 3a34 3064 2053 6174 3a36 3064 3130 ed:40d Sat:60d10\n-00001220: 6d27 206d 6561 6e73 3a0a 0909 096b 6565 m' means:....kee\n-00001230: 7020 6261 636b 7570 7320 6f66 204d 6f6e p backups of Mon\n-00001240: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days \n-00001250: 2b20 356d 696e 730a 0909 096b 6565 7020 + 5mins....keep \n-00001260: 6261 636b 7570 7320 6f66 2053 6174 2036 backups of Sat 6\n-00001270: 3064 6179 7320 2b20 3130 6d69 6e73 0a09 0days + 10mins..\n-00001280: 0909 6b65 6570 2062 6163 6b75 7073 206f ..keep backups o\n-00001290: 6620 7468 6520 7265 7374 206f 6620 7468 f the rest of th\n-000012a0: 6520 6461 7973 206c 696b 6520 7370 6369 e days like spci\n-000012b0: 6669 6564 2069 6e0a 0909 0909 2d2d 6b65 fied in.....--ke\n-000012c0: 6570 416c 6c20 2864 6566 6175 6c74 2024 epAll (default $\n-000012d0: 6b65 6570 416c 6c29 0a09 0920 2020 2069 keepAll)... i\n-000012e0: 6620 796f 7520 616c 736f 2075 7365 2074 f you also use t\n-000012f0: 6865 2027 6172 6368 6976 6520 666c 6167 he 'archive flag\n-00001300: 2720 6974 206d 6561 6e73 2074 6f20 6e6f ' it means to no\n-00001310: 740a 0909 2020 2020 6465 6c65 7465 2074 t... delete t\n-00001320: 6865 2061 6666 6563 7465 6420 6469 7265 he affected dire\n-00001330: 6374 6f72 6965 7320 7669 6120 2d2d 6b65 ctories via --ke\n-00001340: 6570 4d61 784e 756d 6265 723a 0a09 0920 epMaxNumber:... \n-00001350: 2020 2020 2020 6131 3064 3468 206d 6561 a10d4h mea\n-00001360: 6e73 2031 3020 6461 7973 2061 6e64 2034 ns 10 days and 4\n-00001370: 2068 6f75 7273 2061 6e64 2027 6172 6368 hours and 'arch\n-00001380: 6976 6520 666c 6167 270a 0909 2020 2020 ive flag'... \n-00001390: 652e 672e 2027 4d6f 6e2c 5765 643a 6134 e.g. 'Mon,Wed:a4\n-000013a0: 3064 2053 6174 3a36 3064 3130 6d27 206d 0d Sat:60d10m' m\n-000013b0: 6561 6e73 3a0a 0909 096b 6565 7020 6261 eans:....keep ba\n-000013c0: 636b 7570 7320 6f66 204d 6f6e 2061 6e64 ckups of Mon and\n-000013d0: 2057 6564 2034 3064 6179 7320 2b20 356d Wed 40days + 5m\n-000013e0: 696e 7320 2b20 2761 7263 6869 7665 270a ins + 'archive'.\n-000013f0: 0909 096b 6565 7020 6261 636b 7570 7320 ...keep backups \n-00001400: 6f66 2053 6174 2036 3064 6179 7320 2b20 of Sat 60days + \n-00001410: 3130 6d69 6e73 0a09 0909 6b65 6570 2062 10mins....keep b\n-00001420: 6163 6b75 7073 206f 6620 7468 6520 7265 ackups of the re\n-00001430: 7374 206f 6620 7468 6520 6461 7973 206c st of the days l\n-00001440: 696b 6520 7370 6563 6966 6965 6420 696e ike specified in\n-00001450: 0a09 0909 092d 2d6b 6565 7041 6c6c 2028 .....--keepAll (\n-00001460: 6465 6661 756c 7420 246b 6565 7041 6c6c default $keepAll\n-00001470: 290a 0a3d 6974 656d 2042 3c2d 2d6b 6565 )..=item B<--kee\n-00001480: 7046 6972 7374 4f66 5965 6172 3e0a 0a20 pFirstOfYear>.. \n-00001490: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete\n-000014a0: 2074 6865 2066 6972 7374 2062 6163 6b75 the first backu\n-000014b0: 7020 6f66 2061 2079 6561 720a 2020 2020 p of a year. \n-000014c0: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe\n-000014d0: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib\n-000014e0: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag\n-000014f0: 270a 0a3d 6974 656d 2042 3c2d 2d6b 6565 '..=item B<--kee\n-00001500: 704c 6173 744f 6659 6561 723e 0a0a 2020 pLastOfYear>.. \n-00001510: 2020 646f 206e 6f74 2064 656c 6574 6520 do not delete \n-00001520: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup \n-00001530: 6f66 2061 2079 6561 720a 2020 2020 666f of a year. fo\n-00001540: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri\n-00001550: 6f64 2077 6974 6820 706f 7373 6962 6c65 od with possible\n-00001560: 2027 6172 6368 6976 6520 666c 6167 270a 'archive flag'.\n-00001570: 0a3d 6974 656d 2042 3c2d 2d6b 6565 7046 .=item B<--keepF\n-00001580: 6972 7374 4f66 4d6f 6e74 683e 0a0a 2020 irstOfMonth>.. \n-00001590: 2020 646f 206e 6f74 2064 656c 6574 6520 do not delete \n-000015a0: 7468 6520 6669 7273 7420 6261 636b 7570 the first backup\n-000015b0: 206f 6620 6120 6d6f 6e74 680a 2020 2020 of a month. \n-000015c0: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe\n-000015d0: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib\n-000015e0: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag\n-000015f0: 270a 0a3d 6974 656d 2042 3c2d 2d6b 6565 '..=item B<--kee\n-00001600: 704c 6173 744f 664d 6f6e 7468 3e0a 0a20 pLastOfMonth>.. \n-00001610: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete\n-00001620: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup\n-00001630: 206f 6620 6120 6d6f 6e74 680a 2020 2020 of a month. \n-00001640: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe\n-00001650: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib\n-00001660: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag\n-00001670: 270a 0a3d 6974 656d 2042 3c2d 2d66 6972 '..=item B<--fir\n-00001680: 7374 4461 794f 6657 6565 6b3e 0a0a 2020 stDayOfWeek>.. \n-00001690: 2020 6465 6661 756c 743a 2027 5375 6e27 default: 'Sun'\n-000016a0: 2e20 5468 6973 2076 616c 7565 2069 7320 . This value is \n-000016b0: 7573 6564 2066 6f72 2063 616c 6375 6c61 used for calcula\n-000016c0: 7469 6e67 0a20 2020 202d 2d6b 6565 7046 ting. --keepF\n-000016d0: 6972 7374 4f66 5765 656b 2061 6e64 202d irstOfWeek and -\n-000016e0: 2d6b 6565 704c 6173 744f 6657 6565 6b0a -keepLastOfWeek.\n-000016f0: 0a3d 6974 656d 2042 3c2d 2d6b 6565 7046 .=item B<--keepF\n-00001700: 6972 7374 4f66 5765 656b 3e0a 0a20 2020 irstOfWeek>.. \n-00001710: 2064 6f20 6e6f 7420 6465 6c65 7465 2074 do not delete t\n-00001720: 6865 2066 6972 7374 2062 6163 6b75 7020 he first backup \n-00001730: 6f66 2061 2077 6565 6b0a 2020 2020 666f of a week. fo\n-00001740: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri\n-00001750: 6f64 2077 6974 6820 706f 7373 6962 6c65 od with possible\n-00001760: 2027 6172 6368 6976 6520 666c 6167 270a 'archive flag'.\n-00001770: 0a3d 6974 656d 2042 3c2d 2d6b 6565 704c .=item B<--keepL\n-00001780: 6173 744f 6657 6565 6b3e 0a0a 2020 2020 astOfWeek>.. \n-00001790: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th\n-000017a0: 6520 6c61 7374 2062 6163 6b75 7020 6f66 e last backup of\n-000017b0: 2061 2077 6565 6b0a 2020 2020 666f 726d a week. form\n-000017c0: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod\n-000017d0: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible '\n-000017e0: 6172 6368 6976 6520 666c 6167 270a 0a3d archive flag'..=\n-000017f0: 6974 656d 2042 3c2d 2d6b 6565 7044 7570 item B<--keepDup\n-00001800: 6c69 6361 7465 3e0a 0a20 2020 206b 6565 licate>.. kee\n-00001810: 7020 6d75 6c74 6970 6c65 2062 6163 6b75 p multiple backu\n-00001820: 7073 206f 6620 6f6e 6520 6461 7920 7570 ps of one day up\n-00001830: 2074 6f20 7469 6d65 5065 7269 6f64 0a20 to timePeriod. \n-00001840: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim\n-00001850: 6550 6572 696f 642c 2027 6172 6368 6976 ePeriod, 'archiv\n-00001860: 6520 666c 6167 2720 6973 206e 6f74 2070 e flag' is not p\n-00001870: 6f73 7369 626c 650a 2020 2020 6465 6661 ossible. defa\n-00001880: 756c 7420 3d20 246b 6565 7044 7570 6c69 ult = $keepDupli\n-00001890: 6361 7465 3b0a 0a3d 6974 656d 2042 3c2d cate;..=item B<-\n-000018a0: 2d6b 6565 704d 696e 4e75 6d62 6572 3e0a -keepMinNumber>.\n-000018b0: 0a20 2020 204b 6565 7020 7468 6174 206d . Keep that m\n-000018c0: 696d 696e 756d 206f 6620 6261 636b 7570 iminum of backup\n-000018d0: 732e 204d 756c 7469 706c 6520 6261 636b s. Multiple back\n-000018e0: 7570 7320 6f66 206f 6e65 0a20 2020 2064 ups of one. d\n-000018f0: 6179 2061 7265 2063 6f75 6e74 6564 2061 ay are counted a\n-00001900: 7320 6f6e 6520 6261 636b 7570 2e20 4465 s one backup. De\n-00001910: 6661 756c 7420 6973 2031 302e 0a0a 3d69 fault is 10...=i\n-00001920: 7465 6d20 423c 2d2d 6b65 6570 4d61 784e tem B<--keepMaxN\n-00001930: 756d 6265 723e 0a0a 2020 2020 5472 7920 umber>.. Try \n-00001940: 746f 206b 6565 7020 6f6e 6c79 2074 6861 to keep only tha\n-00001950: 7420 6d61 7869 6d75 6d20 6f66 2062 6163 t maximum of bac\n-00001960: 6b75 7073 2e20 4966 2079 6f75 2068 6176 kups. If you hav\n-00001970: 650a 2020 2020 6d6f 7265 2062 6163 6b75 e. more backu\n-00001980: 7073 2c20 7468 6520 666f 6c6c 6f77 696e ps, the followin\n-00001990: 6720 7365 7175 656e 6365 206f 6620 6465 g sequence of de\n-000019a0: 6c65 7469 6e67 2077 696c 6c0a 2020 2020 leting will. \n-000019b0: 6861 7070 656e 3a0a 0920 2020 202d 2064 happen:.. - d\n-000019c0: 656c 6574 6520 616c 6c20 6475 706c 6963 elete all duplic\n-000019d0: 6174 6573 206f 6620 6120 6461 792c 2062 ates of a day, b\n-000019e0: 6567 696e 6e69 6e67 2077 6974 6820 7468 eginning with th\n-000019f0: 650a 2020 2020 2020 2020 2020 2020 2020 e. \n-00001a00: 6f6c 6420 6f6e 6365 2c20 6578 6365 7074 old once, except\n-00001a10: 2074 6865 206f 6c64 6573 7420 6f66 2065 the oldest of e\n-00001a20: 7665 7279 2064 6179 0a09 2020 2020 2d20 very day.. - \n-00001a30: 6966 2074 6869 7320 6973 206e 6f74 2065 if this is not e\n-00001a40: 6e6f 7567 682c 2064 656c 6574 6520 7468 nough, delete th\n-00001a50: 6520 7265 7374 206f 6620 7468 6520 6261 e rest of the ba\n-00001a60: 636b 7570 730a 0920 2020 2020 2062 6567 ckups.. beg\n-00001a70: 696e 6e69 6e67 2077 6974 6820 7468 6520 inning with the \n-00001a80: 6f6c 6465 7374 2c20 6275 7420 2a6e 6576 oldest, but *nev\n-00001a90: 6572 2a20 6120 6261 636b 7570 2077 6974 er* a backup wit\n-00001aa0: 680a 0920 2020 2020 2074 6865 2027 6172 h.. the 'ar\n-00001ab0: 6368 6976 6520 666c 6167 2720 6f72 2074 chive flag' or t\n-00001ac0: 6865 206c 6173 7420 6261 636b 7570 0a0a he last backup..\n-00001ad0: 3d69 7465 6d20 423c 2d2d 6b65 6570 5265 =item B<--keepRe\n-00001ae0: 6c61 7469 7665 3e2c 2042 3c2d 523e 0a0a lative>, B<-R>..\n-00001af0: 2020 2020 416c 7465 726e 6174 6976 6520 Alternative \n-00001b00: 6465 6c65 7469 6f6e 2073 6368 656d 652e deletion scheme.\n-00001b10: 2049 6620 796f 7520 7573 6520 7468 6973 If you use this\n-00001b20: 206f 7074 696f 6e2c 2061 6c6c 206f 7468 option, all oth\n-00001b30: 6572 0a20 2020 206b 6565 7020 6f70 7469 er. keep opti\n-00001b40: 6f6e 7320 6172 6520 6967 6e6f 7265 642e ons are ignored.\n-00001b50: 2050 7265 7365 7276 6573 2062 6163 6b75 Preserves backu\n-00001b60: 7073 2064 6570 656e 6469 6e67 0a20 2020 ps depending. \n-00001b70: 206f 6e20 7468 6569 7220 2a72 656c 6174 on their *relat\n-00001b80: 6976 652a 2061 6765 2e20 4578 616d 706c ive* age. Exampl\n-00001b90: 653a 0a20 2020 202d 5220 2731 6420 3764 e:. -R '1d 7d\n-00001ba0: 2036 3164 2039 3264 270a 2020 2020 2020 61d 92d'. \n-00001bb0: 2020 7769 6c6c 2028 7472 7920 746f 2920 will (try to) \n-00001bc0: 656e 7375 7265 2074 6861 7420 7468 6572 ensure that ther\n-00001bd0: 6520 6973 2061 6c77 6179 730a 092d 204f e is always..- O\n-00001be0: 6e65 2062 6163 6b75 7020 6265 7477 6565 ne backup betwee\n-00001bf0: 6e20 3120 6461 7920 616e 6420 3720 6461 n 1 day and 7 da\n-00001c00: 7973 206f 6c64 0a09 2d20 4f6e 6520 6261 ys old..- One ba\n-00001c10: 636b 7570 2062 6574 7765 656e 2035 2064 ckup between 5 d\n-00001c20: 6179 7320 616e 6420 3220 6d6f 6e74 6873 ays and 2 months\n-00001c30: 206f 6c64 0a09 2d20 4f6e 6520 6261 636b old..- One back\n-00001c40: 7570 2062 6574 7765 656e 2032 206d 6f6e up between 2 mon\n-00001c50: 7468 7320 616e 6420 3320 6d6f 6e74 6873 ths and 3 months\n-00001c60: 206f 6c64 0a09 4966 2074 6865 7265 2069 old..If there i\n-00001c70: 7320 6e6f 2062 6163 6b75 7020 666f 7220 s no backup for \n-00001c80: 6120 7370 6563 6966 6965 6420 7469 6d65 a specified time\n-00001c90: 7370 616e 0a09 2865 2e67 2e20 6265 6361 span..(e.g. beca\n-00001ca0: 7573 6520 7468 6520 6c61 7374 2062 6163 use the last bac\n-00001cb0: 6b75 7020 7761 7320 646f 6e65 206d 6f72 kup was done mor\n-00001cc0: 6520 7468 616e 2032 2077 6565 6b73 0a09 e than 2 weeks..\n-00001cd0: 6167 6f29 2074 6865 206e 6578 7420 6f6c ago) the next ol\n-00001ce0: 6465 7220 6261 636b 7570 2077 696c 6c20 der backup will \n-00001cf0: 6265 2075 7365 6420 666f 7220 7468 6973 be used for this\n-00001d00: 2074 696d 6573 7061 6e2e 0a0a 3d69 7465 timespan...=ite\n-00001d10: 6d20 423c 2d2d 6c6f 6746 696c 653e 2c20 m B<--logFile>, \n-00001d20: 423c 2d6c 3e0a 0a20 2020 206c 6f67 2066 B<-l>.. log f\n-00001d30: 696c 6520 2864 6566 6175 6c74 2069 7320 ile (default is \n-00001d40: 5354 444f 5554 290a 0a3d 6974 656d 2042 STDOUT)..=item B\n-00001d50: 3c2d 2d70 6c75 734c 6f67 5374 646f 7574 <--plusLogStdout\n-00001d60: 3e0a 0a20 2020 2069 6620 796f 7520 7370 >.. if you sp\n-00001d70: 6563 6966 7920 6120 6c6f 6720 6669 6c65 ecify a log file\n-00001d80: 2077 6974 6820 2d2d 6c6f 6746 696c 6520 with --logFile \n-00001d90: 796f 7520 6361 6e0a 2020 2020 6164 6469 you can. addi\n-00001da0: 7469 6f6e 616c 6c79 2070 7269 6e74 2074 tionally print t\n-00001db0: 6865 206f 7574 7075 7420 746f 2053 5444 he output to STD\n-00001dc0: 4f55 5420 7769 7468 2074 6869 7320 666c OUT with this fl\n-00001dd0: 6167 0a0a 3d69 7465 6d20 423c 2d2d 7375 ag..=item B<--su\n-00001de0: 7070 7265 7373 5469 6d65 3e0a 0a20 2020 ppressTime>.. \n-00001df0: 2073 7570 7072 6573 7320 6f75 7470 7574 suppress output\n-00001e00: 206f 6620 7469 6d65 2069 6e20 6c6f 6766 of time in logf\n-00001e10: 696c 650a 0a3d 6974 656d 2042 3c2d 2d6d ile..=item B<--m\n-00001e20: 6178 4669 6c65 6c65 6e3e 2c20 423c 2d6d axFilelen>, B<-m\n-00001e30: 3e0a 0a20 2020 206d 6178 696d 616c 206c >.. maximal l\n-00001e40: 656e 6774 6820 6f66 2066 696c 652c 2064 ength of file, d\n-00001e50: 6566 6175 6c74 203d 2031 6536 0a0a 3d69 efault = 1e6..=i\n-00001e60: 7465 6d20 423c 2d2d 6e6f 4f66 4f6c 6446 tem B<--noOfOldF\n-00001e70: 696c 6573 3e2c 2042 3c2d 6e3e 0a0a 2020 iles>, B<-n>.. \n-00001e80: 2020 6e75 6d62 6572 206f 6620 6f6c 6420 number of old \n-00001e90: 6c6f 6720 6669 6c65 732c 2064 6566 6175 log files, defau\n-00001ea0: 6c74 203d 2035 0a0a 3d69 7465 6d20 423c lt = 5..=item B<\n-00001eb0: 2d2d 7361 7665 4c6f 6773 3e0a 0a20 2020 --saveLogs>.. \n-00001ec0: 2073 6176 6520 6c6f 6720 6669 6c65 7320 save log files \n-00001ed0: 7769 7468 2064 6174 6520 616e 6420 7469 with date and ti\n-00001ee0: 6d65 2069 6e73 7465 6164 206f 6620 6465 me instead of de\n-00001ef0: 6c65 7469 6e67 2074 6865 0a20 2020 206f leting the. o\n-00001f00: 6c64 2028 7769 7468 205b 2d6e 6f4f 664f ld (with [-noOfO\n-00001f10: 6c64 4669 6c65 735d 290a 0a3d 6974 656d ldFiles])..=item\n-00001f20: 2042 3c2d 2d63 6f6d 7072 6573 7357 6974 B<--compressWit\n-00001f30: 683e 0a0a 2020 2020 636f 6d70 7265 7373 h>.. compress\n-00001f40: 2073 6176 6564 206c 6f67 2066 696c 6573 saved log files\n-00001f50: 2028 652e 672e 2077 6974 6820 2767 7a69 (e.g. with 'gzi\n-00001f60: 7020 2d39 2729 0a20 2020 2064 6566 6175 p -9'). defau\n-00001f70: 6c74 2069 7320 2762 7a69 7032 270a 0a3d lt is 'bzip2'..=\n-00001f80: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP\n-00001f90: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh\n-00001fa0: 7420 2863 2920 3230 3033 2d32 3032 3220 t (c) 2003-2022 \n-00001fb0: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C\n-00001fc0: 6c61 6573 2028 7365 6520 5245 4144 4d45 laes (see README\n-00001fd0: 292e 0a50 7562 6c69 7368 6564 2075 6e64 )..Published und\n-00001fe0: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener\n-00001ff0: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens\n-00002000: 6520 7633 206f 7220 616e 7920 6c61 7465 e v3 or any late\n-00002010: 7220 7665 7273 696f 6e0a 0a3d 6375 740a r version..=cut.\n-00002020: 0a6d 7920 2448 656c 7020 3d20 263a 3a67 .my $Help = &::g\n-00002030: 6574 506f 6432 5465 7874 2824 3029 3b0a etPod2Text($0);.\n-00002040: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\\\n-00002050: 4041 5247 562c 2027 2d56 272c 2027 2d2d @ARGV, '-V', '--\n-00002060: 7665 7273 696f 6e27 293b 0a0a 6d79 2024 version');..my $\n-00002070: 7374 6172 7444 6174 6520 3d20 6461 7465 startDate = date\n-00002080: 546f 6f6c 732d 3e6e 6577 2829 3b0a 0a6d Tools->new();..m\n-00002090: 7920 2443 6865 636b 5061 7220 3d0a 2020 y $CheckPar =. \n-000020a0: 2020 4368 6563 6b50 6172 616d 2d3e 6e65 CheckParam->ne\n-000020b0: 7728 272d 616c 6c6f 774c 6973 7473 2720 w('-allowLists' \n-000020c0: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... '\n-000020d0: 2d63 6f6e 6669 6746 696c 6527 203d 3e20 -configFile' => \n-000020e0: 272d 6627 2c0a 0909 2020 2020 272d 6c69 '-f',... '-li\n-000020f0: 7374 2720 3d3e 205b 4f70 7469 6f6e 2d3e st' => [Option->\n-00002100: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00002110: 636f 6e66 6967 4669 6c65 272c 0a09 0909 configFile',....\n-00002120: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00002130: 6e27 203d 3e20 272d 6627 2c0a 0909 0909 n' => '-f',.....\n-00002140: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00002150: 203d 3e20 272d 2d66 696c 6527 2c0a 0909 => '--file',...\n-00002160: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n-00002170: 3d3e 2027 7965 7327 292c 0a20 2020 2020 => 'yes'),. \n-00002180: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002190: 2020 2020 2020 2020 2020 204f 7074 696f Optio\n-000021a0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000021b0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',......\n-000021c0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-000021d0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),.\n-000021e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000021f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002200: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00002210: 6d65 2720 3d3e 2027 6261 636b 7570 4469 me' => 'backupDi\n-00002220: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n-00002230: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b\n-00002240: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00002250: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba\n-00002260: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... \n-00002270: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-00002280: 2762 6163 6b75 7044 6972 272c 0a09 0909 'backupDir',....\n-00002290: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be'\n-000022a0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n-000022b0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-000022c0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-000022d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-000022e0: 3d3e 2027 7365 7269 6573 272c 0a09 0909 => 'series',....\n-000022f0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00002300: 6e27 203d 3e20 272d 5327 2c0a 0909 0909 n' => '-S',.....\n-00002310: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00002320: 203d 3e20 272d 2d73 6572 6965 7327 2c0a => '--series',.\n-00002330: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00002340: 7927 203d 3e20 2773 6572 6965 7327 2c0a y' => 'series',.\n-00002350: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n-00002360: 6c74 2720 3d3e 2027 6465 6661 756c 7427 lt' => 'default'\n-00002370: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-00002380: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l\n-00002390: 6f63 6b46 696c 6527 2c0a 0909 0909 0920 ockFile',...... \n-000023a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000023b0: 3d3e 2027 2d4c 272c 0a09 0909 0909 2020 => '-L',...... \n-000023c0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-000023d0: 2027 2d2d 6c6f 636b 4669 6c65 272c 0a09 '--lockFile',..\n-000023e0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-000023f0: 2720 3d3e 2027 6c6f 636b 4669 6c65 272c ' => 'lockFile',\n-00002400: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-00002410: 756c 7427 203d 3e20 246c 6f63 6b46 696c ult' => $lockFil\n-00002420: 6529 2c0a 0909 0909 4f70 7469 6f6e 2d3e e),.....Option->\n-00002430: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00002440: 646f 4e6f 7444 656c 6574 6527 2c0a 0909 doNotDelete',...\n-00002450: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00002460: 6f6e 2720 3d3e 2027 2d2d 646f 4e6f 7444 on' => '--doNotD\n-00002470: 656c 6574 6527 2c0a 0909 0909 0920 2020 elete',...... \n-00002480: 2027 2d63 665f 6b65 7927 203d 3e20 2764 '-cf_key' => 'd\n-00002490: 6f4e 6f74 4465 6c65 7465 272c 0a09 0909 oNotDelete',....\n-000024a0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n-000024b0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n-000024c0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n-000024d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-000024e0: 3d3e 2027 6465 6c65 7465 4e6f 7446 696e => 'deleteNotFin\n-000024f0: 6973 6865 6444 6972 7327 2c0a 0909 0909 ishedDirs',.....\n-00002500: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00002510: 2720 3d3e 2027 2d2d 6465 6c65 7465 4e6f ' => '--deleteNo\n-00002520: 7446 696e 6973 6865 6444 6972 7327 2c0a tFinishedDirs',.\n-00002530: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00002540: 7927 203d 3e20 2764 656c 6574 654e 6f74 y' => 'deleteNot\n-00002550: 4669 6e69 7368 6564 4469 7273 272c 0a09 FinishedDirs',..\n-00002560: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO\n-00002570: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes'\n-00002580: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op\n-00002590: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000025a0: 2720 3d3e 2027 6b65 6570 416c 6c27 2c0a ' => 'keepAll',.\n-000025b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000025c0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n-000025d0: 416c 6c27 2c0a 0909 0909 0920 2020 2027 All',...... '\n-000025e0: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee\n-000025f0: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... \n-00002600: 272d 6465 6661 756c 7427 203d 3e20 246b '-default' => $k\n-00002610: 6565 7041 6c6c 292c 0a09 0909 094f 7074 eepAll),.....Opt\n-00002620: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00002630: 203d 3e20 276b 6565 7057 6565 6b64 6179 => 'keepWeekday\n-00002640: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00002650: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n-00002660: 6565 7057 6565 6b64 6179 272c 0a09 0909 eepWeekday',....\n-00002670: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00002680: 3d3e 2027 6b65 6570 5765 656b 6461 7927 => 'keepWeekday'\n-00002690: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo\n-000026a0: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes'\n-000026b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-000026c0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k\n-000026d0: 6565 7046 6972 7374 4f66 5965 6172 272c eepFirstOfYear',\n-000026e0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-000026f0: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n-00002700: 7046 6972 7374 4f66 5965 6172 272c 0a09 pFirstOfYear',..\n-00002710: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-00002720: 2720 3d3e 2027 6b65 6570 4669 7273 744f ' => 'keepFirstO\n-00002730: 6659 6561 7227 2c0a 0909 0909 0920 2020 fYear',...... \n-00002740: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n-00002750: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option-\n-00002760: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00002770: 276b 6565 704c 6173 744f 6659 6561 7227 'keepLastOfYear'\n-00002780: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00002790: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke\n-000027a0: 6570 4c61 7374 4f66 5965 6172 272c 0a09 epLastOfYear',..\n-000027b0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key\n-000027c0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf\n-000027d0: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... \n-000027e0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-000027f0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00002800: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00002810: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth\n-00002820: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00002830: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k\n-00002840: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth'\n-00002850: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00002860: 6b65 7927 203d 3e20 276b 6565 7046 6972 key' => 'keepFir\n-00002870: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',.....\n-00002880: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-00002890: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n-000028a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000028b0: 203d 3e20 276b 6565 704c 6173 744f 664d => 'keepLastOfM\n-000028c0: 6f6e 7468 272c 0a09 0909 0909 2020 2020 onth',...... \n-000028d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000028e0: 272d 2d6b 6565 704c 6173 744f 664d 6f6e '--keepLastOfMon\n-000028f0: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n-00002900: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep\n-00002910: 4c61 7374 4f66 4d6f 6e74 6827 2c0a 0909 LastOfMonth',...\n-00002920: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n-00002930: 3d3e 2027 7965 7327 292c 0a20 2020 2020 => 'yes'),. \n-00002940: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002950: 2020 2020 2020 2020 2020 204f 7074 696f Optio\n-00002960: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00002970: 3e20 2766 6972 7374 4461 794f 6657 6565 > 'firstDayOfWee\n-00002980: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c\n-00002990: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-000029a0: 6669 7273 7444 6179 4f66 5765 656b 272c firstDayOfWeek',\n-000029b0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n-000029c0: 6579 2720 3d3e 2027 6669 7273 7444 6179 ey' => 'firstDay\n-000029d0: 4f66 5765 656b 272c 0a09 0909 0909 2020 OfWeek',...... \n-000029e0: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => \n-000029f0: 2753 756e 2729 2c0a 0909 0909 4f70 7469 'Sun'),.....Opti\n-00002a00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00002a10: 3d3e 2027 6b65 6570 4669 7273 744f 6657 => 'keepFirstOfW\n-00002a20: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... '\n-00002a30: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00002a40: 2d2d 6b65 6570 4669 7273 744f 6657 6565 --keepFirstOfWee\n-00002a50: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c\n-00002a60: 665f 6b65 7927 203d 3e20 276b 6565 7046 f_key' => 'keepF\n-00002a70: 6972 7374 4f66 5765 656b 272c 0a09 0909 irstOfWeek',....\n-00002a80: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' =\n-00002a90: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op\n-00002aa0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00002ab0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf\n-00002ac0: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... \n-00002ad0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00002ae0: 272d 2d6b 6565 704c 6173 744f 6657 6565 '--keepLastOfWee\n-00002af0: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c\n-00002b00: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL\n-00002b10: 6173 744f 6657 6565 6b27 2c0a 0909 0909 astOfWeek',.....\n-00002b20: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-00002b30: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. \n-00002b40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002b50: 2020 2020 2020 2020 204f 7074 696f 6e2d Option-\n-00002b60: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00002b70: 276b 6565 7044 7570 6c69 6361 7465 272c 'keepDuplicate',\n-00002b80: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00002b90: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee\n-00002ba0: 7044 7570 6c69 6361 7465 272c 0a09 0909 pDuplicate',....\n-00002bb0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00002bc0: 3d3e 2027 6b65 6570 4475 706c 6963 6174 => 'keepDuplicat\n-00002bd0: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d\n-00002be0: 6566 6175 6c74 2720 3d3e 2024 6b65 6570 efault' => $keep\n-00002bf0: 4475 706c 6963 6174 6529 2c0a 2020 2020 Duplicate),. \n-00002c00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002c10: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n-00002c20: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00002c30: 3d3e 2027 6b65 6570 4d69 6e4e 756d 6265 => 'keepMinNumbe\n-00002c40: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n-00002c50: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00002c60: 6b65 6570 4d69 6e4e 756d 6265 7227 2c0a keepMinNumber',.\n-00002c70: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00002c80: 7927 203d 3e20 276b 6565 704d 696e 4e75 y' => 'keepMinNu\n-00002c90: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... \n-00002ca0: 272d 6465 6661 756c 7427 203d 3e20 3130 '-default' => 10\n-00002cb0: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat\n-00002cc0: 7465 726e 2720 3d3e 2027 5c41 5c64 2b5c tern' => '\\A\\d+\\\n-00002cd0: 5a27 292c 0a20 2020 2020 2020 2020 2020 Z'),. \n-00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002cf0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n-00002d00: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee\n-00002d10: 704d 6178 4e75 6d62 6572 272c 0a09 0909 pMaxNumber',....\n-00002d20: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00002d30: 6e27 203d 3e20 272d 2d6b 6565 704d 6178 n' => '--keepMax\n-00002d40: 4e75 6d62 6572 272c 0a09 0909 0909 2020 Number',...... \n-00002d50: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-00002d60: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',.\n-00002d70: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n-00002d80: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... \n-00002d90: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' =>\n-00002da0: 2027 5c41 5c64 2b5c 5a27 292c 0a20 2020 '\\A\\d+\\Z'),. \n-00002db0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002dc0: 2020 2020 2020 2020 2020 2020 204f 7074 Opt\n-00002dd0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00002de0: 203d 3e20 276b 6565 7052 656c 6174 6976 => 'keepRelativ\n-00002df0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n-00002e00: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00002e10: 6b65 6570 5265 6c61 7469 7665 272c 0a09 keepRelative',..\n-00002e20: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00002e30: 6173 2720 3d3e 2027 2d52 272c 0a09 0909 as' => '-R',....\n-00002e40: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00002e50: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative\n-00002e60: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu\n-00002e70: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes\n-00002e80: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00002e90: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),.\n-00002ea0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00002eb0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF\n-00002ec0: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n-00002ed0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00002ee0: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '-\n-00002ef0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00002f00: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... \n-00002f10: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-00002f20: 276c 6f67 4669 6c65 272c 0a09 0909 0909 'logFile',......\n-00002f30: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00002f40: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-00002f50: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00002f60: 3d3e 2027 706c 7573 4c6f 6753 7464 6f75 => 'plusLogStdou\n-00002f70: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n-00002f80: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00002f90: 706c 7573 4c6f 6753 7464 6f75 7427 2c0a plusLogStdout',.\n-00002fa0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00002fb0: 7927 203d 3e20 2770 6c75 734c 6f67 5374 y' => 'plusLogSt\n-00002fc0: 646f 7574 272c 0a09 0909 0909 2020 2020 dout',...... \n-00002fd0: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n-00002fe0: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n-00002ff0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00003000: 7728 272d 6e61 6d65 2720 3d3e 2027 7375 w('-name' => 'su\n-00003010: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',....\n-00003020: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00003030: 6e27 203d 3e20 272d 2d73 7570 7072 6573 n' => '--suppres\n-00003040: 7354 696d 6527 2c0a 0909 0909 0920 2020 sTime',...... \n-00003050: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's\n-00003060: 7570 7072 6573 7354 696d 6527 2c0a 0909 uppressTime',...\n-00003070: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if\n-00003080: 2720 3d3e 2022 5b6c 6f67 4669 6c65 5d22 ' => \"[logFile]\"\n-00003090: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-000030a0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y\n-000030b0: 6573 272c 2027 6e6f 275d 292c 0a09 0909 es', 'no']),....\n-000030c0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-000030d0: 616d 6527 203d 3e20 276d 6178 4669 6c65 ame' => 'maxFile\n-000030e0: 6c65 6e27 2c0a 0909 0909 0920 2020 2027 len',...... '\n-000030f0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00003100: 2d6d 272c 0a09 0909 0909 2020 2020 272d -m',...... '-\n-00003110: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00003120: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',....\n-00003130: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00003140: 3d3e 2027 6d61 7846 696c 656c 656e 272c => 'maxFilelen',\n-00003150: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-00003160: 756c 7427 203d 3e20 3165 362c 0a09 0909 ult' => 1e6,....\n-00003170: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-00003180: 203d 3e20 275c 415b 655c 645d 2b5c 5a27 => '\\A[e\\d]+\\Z'\n-00003190: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl\n-000031a0: 795f 6966 2720 3d3e 2022 5b6c 6f67 4669 y_if' => \"[logFi\n-000031b0: 6c65 5d22 292c 0a09 0909 094f 7074 696f le]\"),.....Optio\n-000031c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000031d0: 3e20 276e 6f4f 664f 6c64 4669 6c65 7327 > 'noOfOldFiles'\n-000031e0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000031f0: 6f70 7469 6f6e 2720 3d3e 2027 2d6e 272c option' => '-n',\n-00003200: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00003210: 6c69 6173 2720 3d3e 2027 2d2d 6e6f 4f66 lias' => '--noOf\n-00003220: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',......\n-00003230: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' =>\n-00003240: 2027 6e6f 4f66 4f6c 6446 696c 6573 272c 'noOfOldFiles',\n-00003250: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-00003260: 756c 7427 203d 3e20 2735 272c 0a09 0909 ult' => '5',....\n-00003270: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-00003280: 203d 3e20 275c 415c 642b 5c5a 272c 0a09 => '\\A\\d+\\Z',..\n-00003290: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-000032a0: 6627 203d 3e22 5b6c 6f67 4669 6c65 5d22 f' =>\"[logFile]\"\n-000032b0: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. \n-000032c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000032d0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-000032e0: 2d6e 616d 6527 203d 3e20 2773 6176 654c -name' => 'saveL\n-000032f0: 6f67 7327 2c0a 0909 0909 0920 2020 2027 ogs',...... '\n-00003300: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00003310: 2d2d 7361 7665 4c6f 6773 272c 0a09 0909 --saveLogs',....\n-00003320: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00003330: 3d3e 2027 7361 7665 4c6f 6773 272c 0a09 => 'saveLogs',..\n-00003340: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-00003350: 6627 203d 3e20 225b 6c6f 6746 696c 655d f' => \"[logFile]\n-00003360: 222c 0a09 0909 0909 2020 2020 272d 6366 \",...... '-cf\n-00003370: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => ['\n-00003380: 7965 7327 2c20 276e 6f27 5d29 2c0a 2020 yes', 'no']),. \n-00003390: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000033a0: 2020 2020 2020 2020 2020 2020 2020 4f70 Op\n-000033b0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000033c0: 2720 3d3e 2027 636f 6d70 7265 7373 5769 ' => 'compressWi\n-000033d0: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n-000033e0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-000033f0: 2d63 6f6d 7072 6573 7357 6974 6827 2c0a -compressWith',.\n-00003400: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-00003410: 7927 203d 3e20 2763 6f6d 7072 6573 7357 y' => 'compressW\n-00003420: 6974 6827 2c0a 0909 0909 0920 2020 2027 ith',...... '\n-00003430: 2d71 756f 7465 4576 616c 2720 3d3e 2027 -quoteEval' => '\n-00003440: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-00003450: 2d64 6566 6175 6c74 2720 3d3e 2027 627a -default' => 'bz\n-00003460: 6970 3227 2c0a 0909 0909 0920 2020 2027 ip2',...... '\n-00003470: 2d6f 6e6c 795f 6966 2720 3d3e 225b 6c6f -only_if' =>\"[lo\n-00003480: 6746 696c 655d 2229 2c0a 2320 6869 6464 gFile]\"),.# hidd\n-00003490: 656e 206f 7074 696f 6e73 0a09 0909 094f en options.....O\n-000034a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-000034b0: 6527 203d 3e20 2770 7269 6e74 416c 6c27 e' => 'printAll'\n-000034c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000034d0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr\n-000034e0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... \n-000034f0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => '\n-00003500: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-00003510: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00003520: 3e20 2774 6f64 6179 4f70 7427 2c0a 0909 > 'todayOpt',...\n-00003530: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00003540: 6f6e 2720 3d3e 2027 2d2d 746f 6461 7927 on' => '--today'\n-00003550: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00003560: 6b65 7927 203d 3e20 2774 6f64 6179 272c key' => 'today',\n-00003570: 0a09 0909 0909 2020 2020 272d 6869 6464 ...... '-hidd\n-00003580: 656e 2720 3d3e 2027 7965 7327 2c0a 0909 en' => 'yes',...\n-00003590: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n-000035a0: 3d3e 2027 7965 7327 292c 0a23 2075 7365 => 'yes'),.# use\n-000035b0: 6420 6279 2073 746f 7265 4261 636b 7570 d by storeBackup\n-000035c0: 4d6f 756e 742e 706c 0a09 0909 094f 7074 Mount.pl.....Opt\n-000035d0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000035e0: 203d 3e20 2777 7269 7465 546f 4e61 6d65 => 'writeToName\n-000035f0: 6450 6970 6527 2c0a 0909 0909 0920 2020 dPipe',...... \n-00003600: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00003610: 2027 2d2d 7772 6974 6554 6f4e 616d 6564 '--writeToNamed\n-00003620: 5069 7065 272c 0a09 0909 0909 2020 2020 Pipe',...... \n-00003630: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00003640: 272c 0a09 0909 0909 2020 2020 272d 6869 ',...... '-hi\n-00003650: 6464 656e 2720 3d3e 2027 7965 7327 290a dden' => 'yes').\n-00003660: 0909 0909 5d0a 0909 2020 2020 293b 0a0a ....]... );..\n-00003670: 2443 6865 636b 5061 722d 3e63 6865 636b $CheckPar->check\n-00003680: 2827 2d61 7267 7627 203d 3e20 5c40 4152 ('-argv' => \\@AR\n-00003690: 4756 2c0a 2020 2020 2020 2020 2020 2020 GV,. \n-000036a0: 2020 2020 2027 2d68 656c 7027 203d 3e20 '-help' => \n-000036b0: 2448 656c 702c 0a20 2020 2020 2020 2020 $Help,. \n-000036c0: 2020 2020 2020 2020 272d 6967 6e6f 7265 '-ignore\n-000036d0: 4164 6469 7469 6f6e 616c 4b65 7973 2720 AdditionalKeys' \n-000036e0: 3d3e 2031 0a20 2020 2020 2020 2020 2020 => 1. \n-000036f0: 2020 2020 2020 293b 0a0a 2320 4175 7377 );..# Ausw\n-00003700: 6572 7475 6e67 2064 6572 2050 6172 616d ertung der Param\n-00003710: 6574 6572 0a6d 7920 2463 6f6e 6669 6746 eter.my $configF\n-00003720: 696c 6520 3d20 2443 6865 636b 5061 722d ile = $CheckPar-\n-00003730: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00003740: 636f 6e66 6967 4669 6c65 2729 3b0a 6d79 configFile');.my\n-00003750: 2024 7072 696e 7420 3d20 2443 6865 636b $print = $Check\n-00003760: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00003770: 7574 5061 7228 2770 7269 6e74 2729 3b0a utPar('print');.\n-00003780: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir =\n-00003790: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000037a0: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu\n-000037b0: 7044 6972 2729 3b0a 6d79 2024 7365 7269 pDir');.my $seri\n-000037c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-000037d0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s\n-000037e0: 6572 6965 7327 293b 0a0a 6d79 2024 6c6f eries');..my $lo\n-000037f0: 636b 4669 6c65 203d 2024 4368 6563 6b50 ckFile = $CheckP\n-00003800: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00003810: 7228 276c 6f63 6b46 696c 6527 293b 0a6d r('lockFile');.m\n-00003820: 7920 2464 6f4e 6f74 4465 6c65 7465 203d y $doNotDelete =\n-00003830: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003840: 7074 5769 7468 6f75 7450 6172 2827 646f ptWithoutPar('do\n-00003850: 4e6f 7444 656c 6574 6527 293b 0a6d 7920 NotDelete');.my \n-00003860: 2464 656c 6574 654e 6f74 4669 6e69 7368 $deleteNotFinish\n-00003870: 6564 4469 7273 203d 2024 4368 6563 6b50 edDirs = $CheckP\n-00003880: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00003890: 7450 6172 2827 6465 6c65 7465 4e6f 7446 tPar('deleteNotF\n-000038a0: 696e 6973 6865 6444 6972 7327 293b 0a24 inishedDirs');.$\n-000038b0: 6b65 6570 416c 6c20 3d20 2443 6865 636b keepAll = $Check\n-000038c0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-000038d0: 6172 2827 6b65 6570 416c 6c27 293b 0a6d ar('keepAll');.m\n-000038e0: 7920 246b 6565 7057 6565 6b64 6179 203d y $keepWeekday =\n-000038f0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003900: 7074 5769 7468 5061 7228 276b 6565 7057 ptWithPar('keepW\n-00003910: 6565 6b64 6179 2729 3b0a 246b 6565 7057 eekday');.$keepW\n-00003920: 6565 6b64 6179 203d 2022 4024 6b65 6570 eekday = \"@$keep\n-00003930: 5765 656b 6461 7922 2069 6620 6465 6669 Weekday\" if defi\n-00003940: 6e65 6420 246b 6565 7057 6565 6b64 6179 ned $keepWeekday\n-00003950: 3b0a 6d79 2024 6b65 6570 4669 7273 744f ;.my $keepFirstO\n-00003960: 6659 6561 7220 3d20 2443 6865 636b 5061 fYear = $CheckPa\n-00003970: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00003980: 2827 6b65 6570 4669 7273 744f 6659 6561 ('keepFirstOfYea\n-00003990: 7227 293b 0a6d 7920 246b 6565 704c 6173 r');.my $keepLas\n-000039a0: 744f 6659 6561 7220 3d20 2443 6865 636b tOfYear = $Check\n-000039b0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-000039c0: 6172 2827 6b65 6570 4c61 7374 4f66 5965 ar('keepLastOfYe\n-000039d0: 6172 2729 3b0a 6d79 2024 6b65 6570 4669 ar');.my $keepFi\n-000039e0: 7273 744f 664d 6f6e 7468 203d 2024 4368 rstOfMonth = $Ch\n-000039f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00003a00: 7468 5061 7228 276b 6565 7046 6972 7374 thPar('keepFirst\n-00003a10: 4f66 4d6f 6e74 6827 293b 0a6d 7920 246b OfMonth');.my $k\n-00003a20: 6565 704c 6173 744f 664d 6f6e 7468 203d eepLastOfMonth =\n-00003a30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003a40: 7074 5769 7468 5061 7228 276b 6565 704c ptWithPar('keepL\n-00003a50: 6173 744f 664d 6f6e 7468 2729 3b0a 6d79 astOfMonth');.my\n-00003a60: 2024 6669 7273 7444 6179 4f66 5765 656b $firstDayOfWeek\n-00003a70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00003a80: 744f 7074 5769 7468 5061 7228 2766 6972 tOptWithPar('fir\n-00003a90: 7374 4461 794f 6657 6565 6b27 293b 0a6d stDayOfWeek');.m\n-00003aa0: 7920 246b 6565 7046 6972 7374 4f66 5765 y $keepFirstOfWe\n-00003ab0: 656b 203d 2024 4368 6563 6b50 6172 2d3e ek = $CheckPar->\n-00003ac0: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k\n-00003ad0: 6565 7046 6972 7374 4f66 5765 656b 2729 eepFirstOfWeek')\n-00003ae0: 3b0a 6d79 2024 6b65 6570 4c61 7374 4f66 ;.my $keepLastOf\n-00003af0: 5765 656b 203d 2024 4368 6563 6b50 6172 Week = $CheckPar\n-00003b00: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00003b10: 276b 6565 704c 6173 744f 6657 6565 6b27 'keepLastOfWeek'\n-00003b20: 293b 0a24 6b65 6570 4475 706c 6963 6174 );.$keepDuplicat\n-00003b30: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n-00003b40: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke\n-00003b50: 6570 4475 706c 6963 6174 6527 293b 0a6d epDuplicate');.m\n-00003b60: 7920 246b 6565 704d 696e 4e75 6d62 6572 y $keepMinNumber\n-00003b70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00003b80: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee\n-00003b90: 704d 696e 4e75 6d62 6572 2729 3b0a 6d79 pMinNumber');.my\n-00003ba0: 2024 6b65 6570 4d61 784e 756d 6265 7220 $keepMaxNumber \n-00003bb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00003bc0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n-00003bd0: 4d61 784e 756d 6265 7227 293b 0a6d 7920 MaxNumber');.my \n-00003be0: 246b 6565 7052 656c 6174 6976 6520 3d20 $keepRelative = \n-00003bf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00003c00: 7457 6974 6850 6172 2827 6b65 6570 5265 tWithPar('keepRe\n-00003c10: 6c61 7469 7665 2729 3b0a 6d79 2024 6c6f lative');.my $lo\n-00003c20: 6746 696c 6520 3d20 2443 6865 636b 5061 gFile = $CheckPa\n-00003c30: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00003c40: 2827 6c6f 6746 696c 6527 293b 0a6d 7920 ('logFile');.my \n-00003c50: 2470 6c75 734c 6f67 5374 646f 7574 203d $plusLogStdout =\n-00003c60: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003c70: 7074 5769 7468 6f75 7450 6172 2827 706c ptWithoutPar('pl\n-00003c80: 7573 4c6f 6753 7464 6f75 7427 293b 0a6d usLogStdout');.m\n-00003c90: 7920 2477 6974 6854 696d 6520 3d20 6e6f y $withTime = no\n-00003ca0: 7420 2443 6865 636b 5061 722d 3e67 6574 t $CheckPar->get\n-00003cb0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s\n-00003cc0: 7570 7072 6573 7354 696d 6527 293b 0a24 uppressTime');.$\n-00003cd0: 7769 7468 5469 6d65 203d 2024 7769 7468 withTime = $with\n-00003ce0: 5469 6d65 203f 2027 7965 7327 203a 2027 Time ? 'yes' : '\n-00003cf0: 6e6f 273b 0a6d 7920 246d 6178 4669 6c65 no';.my $maxFile\n-00003d00: 6c65 6e20 3d20 2443 6865 636b 5061 722d len = $CheckPar-\n-00003d10: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00003d20: 6d61 7846 696c 656c 656e 2729 3b0a 6d79 maxFilelen');.my\n-00003d30: 2024 6e6f 4f66 4f6c 6446 696c 6573 203d $noOfOldFiles =\n-00003d40: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003d50: 7074 5769 7468 5061 7228 276e 6f4f 664f ptWithPar('noOfO\n-00003d60: 6c64 4669 6c65 7327 293b 0a6d 7920 2473 ldFiles');.my $s\n-00003d70: 6176 654c 6f67 7320 3d20 2443 6865 636b aveLogs = $Check\n-00003d80: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00003d90: 7574 5061 7228 2773 6176 654c 6f67 7327 utPar('saveLogs'\n-00003da0: 2920 3f20 2779 6573 2720 3a20 276e 6f27 ) ? 'yes' : 'no'\n-00003db0: 3b0a 6d79 2024 636f 6d70 7265 7373 5769 ;.my $compressWi\n-00003dc0: 7468 203d 2024 4368 6563 6b50 6172 2d3e th = $CheckPar->\n-00003dd0: 6765 744f 7074 5769 7468 5061 7228 2763 getOptWithPar('c\n-00003de0: 6f6d 7072 6573 7357 6974 6827 293b 0a23 ompressWith');.#\n-00003df0: 2068 6964 6465 6e20 6f70 7469 6f6e 730a hidden options.\n-00003e00: 6d79 2024 7072 696e 7441 6c6c 203d 2024 my $printAll = $\n-00003e10: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00003e20: 5769 7468 6f75 7450 6172 2827 7072 696e WithoutPar('prin\n-00003e30: 7441 6c6c 2729 3b0a 2470 7269 6e74 203d tAll');.$print =\n-00003e40: 2031 2069 6620 2470 7269 6e74 416c 6c3b 1 if $printAll;\n-00003e50: 0a6d 7920 2474 6f64 6179 4f70 7420 3d20 .my $todayOpt = \n-00003e60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00003e70: 7457 6974 6850 6172 2827 746f 6461 794f tWithPar('todayO\n-00003e80: 7074 2729 3b20 2023 2066 6f72 6d61 7420 pt'); # format \n-00003e90: 6c69 6b65 0a6d 7920 2477 7269 7465 546f like.my $writeTo\n-00003ea0: 4e61 6d65 6450 6970 6520 3d20 2443 6865 NamedPipe = $Che\n-00003eb0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00003ec0: 6850 6172 2827 7772 6974 6554 6f4e 616d hPar('writeToNam\n-00003ed0: 6564 5069 7065 2729 3b0a 2020 2020 2020 edPipe');. \n-00003ee0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003ef0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003f00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003f10: 2320 6261 636b 7570 2064 6972 206e 616d # backup dir nam\n-00003f20: 650a 0a69 6620 2824 7072 696e 7429 0a7b e..if ($print).{\n-00003f30: 0a20 2020 2024 4368 6563 6b50 6172 2d3e . $CheckPar->\n-00003f40: 7072 696e 7428 272d 7368 6f77 4869 6464 print('-showHidd\n-00003f50: 656e 2720 3d3e 2024 7072 696e 7441 6c6c en' => $printAll\n-00003f60: 293b 0a20 2020 2065 7869 7420 303b 0a7d );. exit 0;.}\n-00003f70: 0a0a 6d79 2024 7072 4c6f 6731 3b0a 6d79 ..my $prLog1;.my\n-00003f80: 2028 406b 696e 6429 203d 2028 2741 3a42 (@kind) = ('A:B\n-00003f90: 4547 494e 272c 2027 5a3a 454e 4427 2c27 EGIN', 'Z:END','\n-00003fa0: 493a 494e 464f 272c 2027 573a 5741 524e I:INFO', 'W:WARN\n-00003fb0: 494e 4727 2c20 2745 3a45 5252 4f52 272c ING', 'E:ERROR',\n-00003fc0: 0a09 2020 2020 2020 2753 3a53 5441 5449 .. 'S:STATI\n-00003fd0: 5354 4943 272c 2027 443a 4445 4255 4727 STIC', 'D:DEBUG'\n-00003fe0: 2c20 2756 3a56 4552 5349 4f4e 2729 3b0a , 'V:VERSION');.\n-00003ff0: 0a69 6620 2824 6c6f 6746 696c 6529 0a7b .if ($logFile).{\n-00004000: 0a20 2020 2024 7072 4c6f 6731 203d 2070 . $prLog1 = p\n-00004010: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k\n-00004020: 696e 6427 203d 3e20 5c40 6b69 6e64 2c0a ind' => \\@kind,.\n-00004030: 0909 0920 2020 2027 2d66 696c 6527 203d ... '-file' =\n-00004040: 3e20 246c 6f67 4669 6c65 2c0a 0909 0920 > $logFile,.... \n-00004050: 2020 2027 2d77 6974 6854 696d 6527 203d '-withTime' =\n-00004060: 3e20 2477 6974 6854 696d 652c 0a09 0909 > $withTime,....\n-00004070: 2020 2020 272d 6d61 7846 696c 656c 656e '-maxFilelen\n-00004080: 2720 3d3e 2024 6d61 7846 696c 656c 656e ' => $maxFilelen\n-00004090: 2c0a 0909 0920 2020 2027 2d6e 6f4f 664f ,.... '-noOfO\n-000040a0: 6c64 4669 6c65 7327 203d 3e20 246e 6f4f ldFiles' => $noO\n-000040b0: 664f 6c64 4669 6c65 7329 3b0a 7d0a 656c fOldFiles);.}.el\n-000040c0: 7365 0a7b 0a20 2020 2024 7072 4c6f 6731 se.{. $prLog1\n-000040d0: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new\n-000040e0: 2827 2d6b 696e 6427 203d 3e20 5c40 6b69 ('-kind' => \\@ki\n-000040f0: 6e64 293b 0a7d 0a0a 6d79 2024 7072 4c6f nd);.}..my $prLo\n-00004100: 6720 3d20 7072 696e 744c 6f67 4d75 6c74 g = printLogMult\n-00004110: 6970 6c65 2d3e 6e65 7728 272d 7072 4c6f iple->new('-prLo\n-00004120: 6773 2720 3d3e 205b 2470 724c 6f67 315d gs' => [$prLog1]\n-00004130: 293b 0a0a 6966 2028 2470 6c75 734c 6f67 );..if ($plusLog\n-00004140: 5374 646f 7574 290a 7b0a 2020 2020 6d79 Stdout).{. my\n-00004150: 2024 7020 3d20 7072 696e 744c 6f67 2d3e $p = printLog->\n-00004160: 6e65 7728 272d 6b69 6e64 2720 3d3e 205c new('-kind' => \\\n-00004170: 406b 696e 642c 2c0a 0909 0920 2027 2d66 @kind,,.... '-f\n-00004180: 696c 6564 6573 6372 6970 746f 7227 2c20 iledescriptor', \n-00004190: 2a53 5444 4f55 5429 3b0a 2020 2020 2470 *STDOUT);. $p\n-000041a0: 724c 6f67 2d3e 6164 6428 272d 7072 4c6f rLog->add('-prLo\n-000041b0: 6773 2720 3d3e 205b 2470 5d29 3b0a 7d0a gs' => [$p]);.}.\n-000041c0: 6966 2028 2477 7269 7465 546f 4e61 6d65 if ($writeToName\n-000041d0: 6450 6970 6529 0a7b 0a20 2020 206d 7920 dPipe).{. my \n-000041e0: 246e 7020 3d20 7072 696e 744c 6f67 2d3e $np = printLog->\n-000041f0: 6e65 7728 272d 6b69 6e64 2720 3d3e 205c new('-kind' => \\\n-00004200: 406b 696e 642c 0a09 0909 2020 2027 2d66 @kind,.... '-f\n-00004210: 696c 6527 203d 3e20 2477 7269 7465 546f ile' => $writeTo\n-00004220: 4e61 6d65 6450 6970 652c 0a09 0909 2020 NamedPipe,.... \n-00004230: 2027 2d6d 6178 4669 6c65 6c65 6e27 203d '-maxFilelen' =\n-00004240: 3e20 3029 3b0a 2020 2020 2470 724c 6f67 > 0);. $prLog\n-00004250: 2d3e 6164 6428 272d 7072 4c6f 6773 2720 ->add('-prLogs' \n-00004260: 3d3e 205b 246e 705d 293b 0a7d 0a0a 2840 => [$np]);.}..(@\n-00004270: 6d61 696e 3a3a 636c 6561 6e75 7029 203d main::cleanup) =\n-00004280: 2028 2470 724c 6f67 2c20 756e 6465 6629 ($prLog, undef)\n-00004290: 3b0a 2453 4947 7b49 4e54 7d20 3d20 5c26 ;.$SIG{INT} = \\&\n-000042a0: 636c 6561 6e75 703b 0a24 5349 477b 5445 cleanup;.$SIG{TE\n-000042b0: 524d 7d20 3d20 5c26 636c 6561 6e75 703b RM} = \\&cleanup;\n-000042c0: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-000042d0: 272d 6b69 6e64 2720 3d3e 2027 4127 2c0a '-kind' => 'A',.\n-000042e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000042f0: 0a09 2020 2020 2020 5b22 7374 6172 7469 .. [\"starti\n-00004300: 6e67 2064 656c 6574 696f 6e20 696e 203c ng deletion in <\n-00004310: 2462 6163 6b75 7044 6972 3e2c 2073 6572 $backupDir>, ser\n-00004320: 6965 7320 3c24 7365 7269 6573 3e22 5d29 ies <$series>\"])\n-00004330: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print(\n-00004340: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',.\n-00004350: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00004360: 205b 2273 746f 7265 4261 636b 7570 4465 [\"storeBackupDe\n-00004370: 6c2e 706c 2c20 246d 6169 6e3a 3a53 544f l.pl, $main::STO\n-00004380: 5245 4241 434b 5550 5645 5253 494f 4e22 REBACKUPVERSION\"\n-00004390: 5d29 3b0a 0a24 7072 4c6f 672d 3e70 7269 ]);..$prLog->pri\n-000043a0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000043b0: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-000043c0: 203d 3e20 5b22 6261 636b 7570 4469 7220 => [\"backupDir \n-000043d0: 6469 7265 6374 6f72 7920 3c24 6261 636b directory <$back\n-000043e0: 7570 4469 723e 2064 6f65 7320 6e6f 7420 upDir> does not \n-000043f0: 6578 6973 745c 6e24 4865 6c70 225d 2c0a exist\\n$Help\"],.\n-00004400: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00004410: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless \n-00004420: 2d65 2024 6261 636b 7570 4469 723b 0a0a -e $backupDir;..\n-00004430: 6d79 2024 7461 7267 6574 4469 7220 3d20 my $targetDir = \n-00004440: 2224 6261 636b 7570 4469 722f 2473 6572 \"$backupDir/$ser\n-00004450: 6965 7322 3b0a 2470 724c 6f67 2d3e 7072 ies\";.$prLog->pr\n-00004460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00004470: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str\n-00004480: 2720 3d3e 205b 2263 616e 6e6f 7420 7772 ' => [\"cannot wr\n-00004490: 6974 6520 746f 2074 6172 6765 7420 6469 ite to target di\n-000044a0: 7265 6374 6f72 7920 3c24 7461 7267 6574 rectory <$target\n-000044b0: 4469 723e 225d 2c0a 0920 2020 2020 2027 Dir>\"],.. '\n-000044c0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n-000044d0: 2075 6e6c 6573 7320 282d 7720 2474 6172 unless (-w $tar\n-000044e0: 6765 7444 6972 293b 0a24 7461 7267 6574 getDir);.$target\n-000044f0: 4469 7220 3d20 3a3a 6162 736f 6c75 7465 Dir = ::absolute\n-00004500: 5061 7468 2824 7461 7267 6574 4469 7229 Path($targetDir)\n-00004510: 3b0a 0a0a 6d79 2024 616c 6c4c 696e 6b73 ;...my $allLinks\n-00004520: 203d 206c 6174 654c 696e 6b73 2d3e 6e65 = lateLinks->ne\n-00004530: 7728 272d 6469 7273 2720 3d3e 205b 2474 w('-dirs' => [$t\n-00004540: 6172 6765 7444 6972 5d2c 0a09 0909 2020 argetDir],.... \n-00004550: 2020 2020 272d 6b69 6e64 2720 3d3e 2027 '-kind' => '\n-00004560: 7265 6375 7273 6976 6553 6561 7263 6827 recursiveSearch'\n-00004570: 2c0a 0909 0920 2020 2020 2027 2d76 6572 ,.... '-ver\n-00004580: 626f 7365 2720 3d3e 2030 2c0a 0909 0920 bose' => 0,.... \n-00004590: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' =>\n-000045a0: 2024 7072 4c6f 6729 3b0a 0a0a 230a 2320 $prLog);...#.# \n-000045b0: 6c6f 636b 2066 696c 6520 fc62 6572 7072 lock file .berpr\n-000045c0: fc66 656e 0a23 0a3a 3a63 6865 636b 4c6f .fen.#.::checkLo\n-000045d0: 636b 4669 6c65 2824 6c6f 636b 4669 6c65 ckFile($lockFile\n-000045e0: 2c20 2470 724c 6f67 293b 0a0a 6d79 2024 , $prLog);..my $\n-000045f0: 7374 6174 4465 6c4f 6c64 4261 636b 7570 statDelOldBackup\n-00004600: 4469 7273 203d 0a20 2020 2073 7461 7469 Dirs =. stati\n-00004610: 7374 6963 4465 6c65 7465 4f6c 6442 6163 sticDeleteOldBac\n-00004620: 6b75 7044 6972 732d 3e6e 6577 2827 2d70 kupDirs->new('-p\n-00004630: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-00004640: 3b0a 6d79 2024 746f 6461 7920 3d20 6461 ;.my $today = da\n-00004650: 7465 546f 6f6c 732d 3e6e 6577 2829 3b0a teTools->new();.\n-00004660: 6966 2028 2474 6f64 6179 4f70 7429 0a7b if ($todayOpt).{\n-00004670: 0a20 2020 2069 6620 2824 746f 6461 794f . if ($todayO\n-00004680: 7074 203d 7e20 2f5c 4128 5c64 7b34 7d29 pt =~ /\\A(\\d{4})\n-00004690: 5c2e 285c 647b 327d 295c 2e28 5c64 7b32 \\.(\\d{2})\\.(\\d{2\n-000046a0: 7d29 5f28 5c64 7b32 7d29 2e28 5c64 7b32 })_(\\d{2}).(\\d{2\n-000046b0: 7d29 2e28 5c64 7b32 7d29 5c5a 2f29 0a20 }).(\\d{2})\\Z/). \n-000046c0: 2020 207b 0a09 2474 6f64 6179 203d 2064 {..$today = d\n-000046d0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 272d ateTools->new('-\n-000046e0: 7965 6172 2720 3d3e 2024 312c 0a09 0909 year' => $1,....\n-000046f0: 0927 2d6d 6f6e 7468 2720 3d3e 2024 322c .'-month' => $2,\n-00004700: 0a09 0909 0927 2d64 6179 2720 3d3e 2024 .....'-day' => $\n-00004710: 332c 0a09 0909 0927 2d68 6f75 7227 203d 3,.....'-hour' =\n-00004720: 3e20 2434 2c0a 0909 0909 272d 6d69 6e27 > $4,.....'-min'\n-00004730: 203d 3e20 2435 2c0a 0909 0909 272d 7365 => $5,.....'-se\n-00004740: 6327 203d 3e20 2436 293b 0a09 2470 724c c' => $6);..$prL\n-00004750: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00004760: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... \n-00004770: 2020 272d 7374 7227 203d 3e0a 0909 2020 '-str' =>... \n-00004780: 2020 2020 5b22 2474 6f64 6179 4f70 7420 [\"$todayOpt \n-00004790: 286f 7074 696f 6e20 746f 6461 7929 2069 (option today) i\n-000047a0: 7320 6e6f 7420 6120 7661 6c69 6420 6461 s not a valid da\n-000047b0: 7465 225d 2c0a 0909 2020 2020 2020 272d te\"],... '-\n-000047c0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n-000047d0: 2075 6e6c 6573 7320 2474 6f64 6179 2d3e unless $today->\n-000047e0: 6973 5661 6c69 6428 293b 0a09 2470 724c isValid();..$prL\n-000047f0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00004800: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... \n-00004810: 2020 272d 7374 7227 203d 3e20 5b22 7365 '-str' => [\"se\n-00004820: 7474 696e 6720 746f 6461 7920 746f 2022 tting today to \"\n-00004830: 202e 0a09 0909 0920 2474 6f64 6179 2d3e ...... $today->\n-00004840: 6765 7444 6174 6554 696d 6528 295d 293b getDateTime()]);\n-00004850: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-00004860: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-00004870: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00004880: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-00004890: 7472 2720 3d3e 205b 2266 6f72 6d61 7420 tr' => [\"format \n-000048a0: 6572 726f 7220 6174 206f 7074 696f 6e20 error at option \n-000048b0: 746f 6461 792c 206d 7573 7420 6265 222c today, must be\",\n-000048c0: 0a09 0909 0920 2220 2059 5959 592e 4d4d ..... \" YYYY.MM\n-000048d0: 2e44 445f 4848 2e4d 4d2e 5353 225d 2c0a .DD_HH.MM.SS\"],.\n-000048e0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n-000048f0: 3d3e 2031 293b 0a20 2020 207d 0a7d 0a0a => 1);. }.}..\n-00004900: 6d79 2024 6465 6c4f 6c64 203d 0a20 2020 my $delOld =. \n-00004910: 2064 656c 6574 654f 6c64 4261 636b 7570 deleteOldBackup\n-00004920: 4469 7273 2d3e 6e65 7728 272d 7461 7267 Dirs->new('-targ\n-00004930: 6574 4469 7227 203d 3e20 2474 6172 6765 etDir' => $targe\n-00004940: 7444 6972 2c0a 0909 0920 2020 2020 272d tDir,.... '-\n-00004950: 646f 4e6f 7444 656c 6574 6527 203d 3e20 doNotDelete' => \n-00004960: 2464 6f4e 6f74 4465 6c65 7465 2c0a 0909 $doNotDelete,...\n-00004970: 0920 2020 2020 272d 6465 6c65 7465 4e6f . '-deleteNo\n-00004980: 7446 696e 6973 6865 6444 6972 7327 203d tFinishedDirs' =\n-00004990: 3e20 2464 656c 6574 654e 6f74 4669 6e69 > $deleteNotFini\n-000049a0: 7368 6564 4469 7273 2c0a 0909 0920 2020 shedDirs,.... \n-000049b0: 2020 272d 6368 6563 6b53 756d 4669 6c65 '-checkSumFile\n-000049c0: 2720 3d3e 2024 6368 6563 6b53 756d 4669 ' => $checkSumFi\n-000049d0: 6c65 2c0a 0909 0920 2020 2020 272d 7072 le,.... '-pr\n-000049e0: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,.\n-000049f0: 0909 0920 2020 2020 272d 746f 6461 7927 ... '-today'\n-00004a00: 203d 3e20 2474 6f64 6179 2c0a 0909 0920 => $today,.... \n-00004a10: 2020 2020 272d 6b65 6570 4669 7273 744f '-keepFirstO\n-00004a20: 6659 6561 7227 203d 3e20 246b 6565 7046 fYear' => $keepF\n-00004a30: 6972 7374 4f66 5965 6172 2c0a 0909 0920 irstOfYear,.... \n-00004a40: 2020 2020 272d 6b65 6570 4c61 7374 4f66 '-keepLastOf\n-00004a50: 5965 6172 2720 3d3e 2024 6b65 6570 4c61 Year' => $keepLa\n-00004a60: 7374 4f66 5965 6172 2c0a 0909 0920 2020 stOfYear,.... \n-00004a70: 2020 272d 6b65 6570 4669 7273 744f 664d '-keepFirstOfM\n-00004a80: 6f6e 7468 2720 3d3e 2024 6b65 6570 4669 onth' => $keepFi\n-00004a90: 7273 744f 664d 6f6e 7468 2c0a 0909 0920 rstOfMonth,.... \n-00004aa0: 2020 2020 272d 6b65 6570 4c61 7374 4f66 '-keepLastOf\n-00004ab0: 4d6f 6e74 6827 203d 3e20 246b 6565 704c Month' => $keepL\n-00004ac0: 6173 744f 664d 6f6e 7468 2c0a 0909 0920 astOfMonth,.... \n-00004ad0: 2020 2020 272d 6669 7273 7444 6179 4f66 '-firstDayOf\n-00004ae0: 5765 656b 2720 3d3e 2024 6669 7273 7444 Week' => $firstD\n-00004af0: 6179 4f66 5765 656b 2c0a 0909 0920 2020 ayOfWeek,.... \n-00004b00: 2020 272d 6b65 6570 4669 7273 744f 6657 '-keepFirstOfW\n-00004b10: 6565 6b27 203d 3e20 246b 6565 7046 6972 eek' => $keepFir\n-00004b20: 7374 4f66 5765 656b 2c0a 0909 0920 2020 stOfWeek,.... \n-00004b30: 2020 272d 6b65 6570 4c61 7374 4f66 5765 '-keepLastOfWe\n-00004b40: 656b 2720 3d3e 2024 6b65 6570 4c61 7374 ek' => $keepLast\n-00004b50: 4f66 5765 656b 2c0a 0909 0920 2020 2020 OfWeek,.... \n-00004b60: 272d 6b65 6570 416c 6c27 203d 3e20 246b '-keepAll' => $k\n-00004b70: 6565 7041 6c6c 2c0a 0909 0920 2020 2020 eepAll,.... \n-00004b80: 272d 6b65 6570 5265 6c61 7469 7665 2720 '-keepRelative' \n-00004b90: 3d3e 2024 6b65 6570 5265 6c61 7469 7665 => $keepRelative\n-00004ba0: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n-00004bb0: 5765 656b 6461 7927 203d 3e20 246b 6565 Weekday' => $kee\n-00004bc0: 7057 6565 6b64 6179 2c0a 0909 0920 2020 pWeekday,.... \n-00004bd0: 2020 272d 6b65 6570 4475 706c 6963 6174 '-keepDuplicat\n-00004be0: 6527 203d 3e20 246b 6565 7044 7570 6c69 e' => $keepDupli\n-00004bf0: 6361 7465 2c0a 0909 0920 2020 2020 272d cate,.... '-\n-00004c00: 6b65 6570 4d69 6e4e 756d 6265 7227 203d keepMinNumber' =\n-00004c10: 3e20 246b 6565 704d 696e 4e75 6d62 6572 > $keepMinNumber\n-00004c20: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep\n-00004c30: 4d61 784e 756d 6265 7227 203d 3e20 246b MaxNumber' => $k\n-00004c40: 6565 704d 6178 4e75 6d62 6572 2c0a 0909 eepMaxNumber,...\n-00004c50: 0920 2020 2020 272d 7374 6174 4465 6c4f . '-statDelO\n-00004c60: 6c64 4261 636b 7570 4469 7273 2720 3d3e ldBackupDirs' =>\n-00004c70: 2024 7374 6174 4465 6c4f 6c64 4261 636b $statDelOldBack\n-00004c80: 7570 4469 7273 2c0a 0909 0920 2020 2020 upDirs,.... \n-00004c90: 272d 6c61 7465 4c69 6e6b 7350 6172 616d '-lateLinksParam\n-00004ca0: 2720 3d3e 2075 6e64 6566 2c0a 0909 0920 ' => undef,.... \n-00004cb0: 2020 2020 272d 616c 6c4c 696e 6b73 2720 '-allLinks' \n-00004cc0: 3d3e 2024 616c 6c4c 696e 6b73 0a09 0909 => $allLinks....\n-00004cd0: 2020 2020 2029 3b0a 0a24 6465 6c4f 6c64 );..$delOld\n-00004ce0: 2d3e 6368 6563 6b42 6163 6b75 7073 2829 ->checkBackups()\n-00004cf0: 3b0a 0a24 6465 6c4f 6c64 2d3e 6465 6c65 ;..$delOld->dele\n-00004d00: 7465 4261 636b 7570 7328 293b 0a24 7374 teBackups();.$st\n-00004d10: 6174 4465 6c4f 6c64 4261 636b 7570 4469 atDelOldBackupDi\n-00004d20: 7273 2d3e 7072 696e 7428 293b 0a0a 2320 rs->print();..# \n-00004d30: 5374 6174 6973 7469 6b20 fc62 6572 2044 Statistik .ber D\n-00004d40: 6175 6572 2075 6e64 2043 5055 2d56 6572 auer und CPU-Ver\n-00004d50: 6272 6175 6368 0a0a 6d79 2028 406c 293b brauch..my (@l);\n-00004d60: 0a6d 7920 2824 7573 6572 2c24 7379 7374 .my ($user,$syst\n-00004d70: 656d 2c24 6375 7365 722c 2463 7379 7374 em,$cuser,$csyst\n-00004d80: 656d 2920 3d20 7469 6d65 733b 0a6d 7920 em) = times;.my \n-00004d90: 2824 7472 656e 6e29 203d 2022 2d2d 2d2d ($trenn) = \"----\n-00004da0: 2d2d 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d ---+----------+-\n-00004db0: 2d2d 2d2d 2d2d 2d2d 2d22 3b0a 7075 7368 ---------\";.push\n-00004dc0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf(\"%-\n-00004dd0: 3773 7c25 3130 737c 2531 3073 222c 2022 7s|%10s|%10s\", \"\n-00004de0: 205b 7365 635d 222c 2022 7573 6572 222c [sec]\", \"user\",\n-00004df0: 2022 7379 7374 656d 2229 3b0a 7075 7368 \"system\");.push\n-00004e00: 2040 6c2c 2022 2474 7265 6e6e 223b 0a70 @l, \"$trenn\";.p\n-00004e10: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf(\n-00004e20: 2225 2d37 737c 2531 302e 3266 7c25 3130 \"%-7s|%10.2f|%10\n-00004e30: 2e32 6622 2c20 2270 726f 6365 7373 222c .2f\", \"process\",\n-00004e40: 2024 7573 6572 2c20 2473 7973 7465 6d29 $user, $system)\n-00004e50: 3b0a 7075 7368 2040 6c2c 2073 7072 696e ;.push @l, sprin\n-00004e60: 7466 2822 252d 3773 7c25 3130 2e32 667c tf(\"%-7s|%10.2f|\n-00004e70: 2531 302e 3266 222c 2022 6368 696c 6473 %10.2f\", \"childs\n-00004e80: 222c 2024 6375 7365 722c 2024 6373 7973 \", $cuser, $csys\n-00004e90: 7465 6d29 3b0a 7075 7368 2040 6c2c 2022 tem);.push @l, \"\n-00004ea0: 2474 7265 6e6e 223b 0a6d 7920 2824 752c $trenn\";.my ($u,\n-00004eb0: 2024 7329 203d 2028 2463 7573 6572 202b $s) = ($cuser +\n-00004ec0: 2024 7573 6572 2c20 2463 7379 7374 656d $user, $csystem\n-00004ed0: 202b 2024 7379 7374 656d 293b 0a70 7573 + $system);.pus\n-00004ee0: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf(\"%\n-00004ef0: 2d37 737c 2531 302e 3266 7c25 3130 2e32 -7s|%10.2f|%10.2\n-00004f00: 6620 3d3e 2025 2e32 6622 2c20 2273 756d f => %.2f\", \"sum\n-00004f10: 222c 2024 752c 2024 732c 2024 7520 2b20 \", $u, $s, $u + \n-00004f20: 2473 293b 0a0a 6d79 2028 4073 7461 7274 $s);..my (@start\n-00004f30: 4461 7465 2920 3d20 2829 3b0a 6966 2028 Date) = ();.if (\n-00004f40: 2473 7461 7274 4461 7465 290a 7b0a 2020 $startDate).{. \n-00004f50: 2020 7075 7368 2040 7374 6172 7444 6174 push @startDat\n-00004f60: 652c 2027 2020 2020 2020 2020 2020 2070 e, ' p\n-00004f70: 7265 636f 6d6d 616e 6420 6475 7261 7469 recommand durati\n-00004f80: 6f6e 203d 2027 202e 0a09 2473 7461 7274 on = ' ...$start\n-00004f90: 4461 7465 2d3e 6465 6c74 6149 6e53 7472 Date->deltaInStr\n-00004fa0: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' =\n-00004fb0: 3e20 2473 7461 7274 4461 7465 293b 0a7d > $startDate);.}\n-00004fc0: 0a0a 6d79 2024 6445 6e64 203d 2064 6174 ..my $dEnd = dat\n-00004fd0: 6554 6f6f 6c73 2d3e 6e65 7728 293b 0a6d eTools->new();.m\n-00004fe0: 7920 2464 7572 6174 696f 6e20 3d20 2473 y $duration = $s\n-00004ff0: 7461 7274 4461 7465 2d3e 6465 6c74 6149 tartDate->deltaI\n-00005000: 6e53 6563 7328 272d 7365 636f 6e64 4461 nSecs('-secondDa\n-00005010: 7465 2720 3d3e 2024 6445 6e64 293b 0a24 te' => $dEnd);.$\n-00005020: 6475 7261 7469 6f6e 203d 2031 2069 6620 duration = 1 if \n-00005030: 2824 6475 7261 7469 6f6e 203d 3d20 3029 ($duration == 0)\n-00005040: 3b20 2020 2320 4d69 6e69 6d61 6c65 7220 ; # Minimaler \n-00005050: 5765 7274 0a0a 2470 724c 6f67 2d3e 7072 Wert..$prLog->pr\n-00005060: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005070: 5327 2c0a 0920 2020 2020 2027 2d73 7472 S',.. '-str\n-00005080: 2720 3d3e 0a09 2020 2020 2020 5b27 2020 ' =>.. [' \n-00005090: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000050a0: 2020 2020 6475 7261 7469 6f6e 203d 2027 duration = '\n-000050b0: 202e 0a09 2020 2020 2020 2064 6174 6554 ... dateT\n-000050c0: 6f6f 6c73 3a3a 7661 6c54 6f53 7472 2827 ools::valToStr('\n-000050d0: 2d73 6563 2720 3d3e 2024 6475 7261 7469 -sec' => $durati\n-000050e0: 6f6e 292c 0a09 2020 2020 2020 2040 6c0a on),.. @l.\n-000050f0: 0920 2020 2020 2020 5d29 3b0a 0a24 7072 . ]);..$pr\n-00005100: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00005110: 6427 203d 3e20 2749 272c 0a09 2020 2020 d' => 'I',.. \n-00005120: 2020 272d 7374 7227 203d 3e20 5b22 7265 '-str' => [\"re\n-00005130: 6d6f 7669 6e67 206c 6f63 6b20 6669 6c65 moving lock file\n-00005140: 203c 246c 6f63 6b46 696c 653e 225d 293b <$lockFile>\"]);\n-00005150: 0a75 6e6c 696e 6b20 246c 6f63 6b46 696c .unlink $lockFil\n-00005160: 653b 0a0a 2470 724c 6f67 2d3e 7072 696e e;..$prLog->prin\n-00005170: 7428 272d 6b69 6e64 2720 3d3e 2027 5a27 t('-kind' => 'Z'\n-00005180: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-00005190: 3d3e 0a09 2020 2020 2020 5b22 6669 6e69 =>.. [\"fini\n-000051a0: 7368 6564 2064 656c 6574 696f 6e20 696e shed deletion in\n-000051b0: 203c 2462 6163 6b75 7044 6972 3e2c 2073 <$backupDir>, s\n-000051c0: 6572 6965 7320 3c24 7365 7269 6573 3e22 eries <$series>\"\n-000051d0: 5d29 3b0a 0a0a 6578 6974 2030 3b0a 0a0a ]);...exit 0;...\n-000051e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000051f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005200: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005210: 2323 0a23 2070 6163 6b61 6765 2070 7269 ##.# package pri\n-00005220: 6e74 4c6f 674d 756c 7469 706c 6520 6e65 ntLogMultiple ne\n-00005230: 6564 7320 7468 6973 2066 756e 6374 696f eds this functio\n-00005240: 6e0a 7375 6220 636c 6561 6e75 700a 7b0a n.sub cleanup.{.\n-00005250: 2020 2020 6d79 2024 7369 676e 616d 6520 my $signame \n-00005260: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-00005270: 2465 7869 7420 3d20 2873 6869 6674 2829 $exit = (shift()\n-00005280: 207c 7c20 3129 3b0a 0a20 2020 2065 7869 || 1);.. exi\n-00005290: 7420 2465 7869 743b 0a7d 0a t $exit;.}.\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"}, {"source1": "./usr/bin/storeBackupMergeIsolatedBackup", "source2": "./usr/bin/storeBackupMergeIsolatedBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,904 +1,5 @@\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: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# \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 ..#...$mai\n-00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n-00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n-00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use \n-00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn\n-00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib\n-00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f\n-00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. \n-00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. \n-00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se\n-00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink\n-000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo\n-000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel\n-000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f \n-000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh\n-000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file)..\n-000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link \n-00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file\n-00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub\n-00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1)\n-00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne \"/\").. {.\n-00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\\\n-00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. \n-00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. \n-00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f\n-00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. \n-00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, \n-000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF\n-000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);..\n-000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = \"/$file\"\n-000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR \"<$file> do\n-00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\\n\"\n-00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. }\n-00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= \"/\n-00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib\"; \n-00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den\n-00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. \n-00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = `\n-00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c\n-00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. \n-00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir\n-000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs\n-000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir;\n-000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir;\n-000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli\n-000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir(\"$absDi\n-00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file\"));. }\n-00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n-00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR \"<\n-00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e\n-00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\\n\"\n-00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp\n-00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. \n-00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif\n-00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return (\n-00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle\n-000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\\//\n-000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf\n-000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname.\n-000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $\n-000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~\n-000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\\/(.*)$/s\n-00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/'\n-00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '')\n-00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; \n-00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall\n-00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename\n-00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di\n-00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my \n-00000770: 2875 6e73 6869 6674 2040 494e 432c 2022 (unshift @INC, \"\n-00000780: 2472 6571 223b 0a24 7265 712c 2024 7072 $req\";.$req, $pr\n-00000790: 6f67 2920 3d20 266c 6962 5061 7468 2824 og) = &libPath($\n-000007a0: 3029 3b0a 0a0a 0a72 6571 7569 7265 2027 0);....require '\n-000007b0: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl';\n-000007c0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO\n-000007d0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi\n-000007e0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r\n-000007f0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version.\n-00000800: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi\n-00000810: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi\n-00000820: 7265 2027 666f 726b 5072 6f63 2e70 6c27 re 'forkProc.pl'\n-00000830: 3b0a 0a6d 7920 2474 6d70 6469 7220 3d20 ;..my $tmpdir = \n-00000840: 272f 746d 7027 3b20 2020 2020 2020 2020 '/tmp'; \n-00000850: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v\n-00000860: 616c 7565 0a24 746d 7064 6972 203d 2024 alue.$tmpdir = $\n-00000870: 454e 567b 2754 4d50 4449 5227 7d20 6966 ENV{'TMPDIR'} if\n-00000880: 2064 6566 696e 6564 2024 454e 567b 2754 defined $ENV{'T\n-00000890: 4d50 4449 5227 7d3b 0a0a 0a3d 6865 6164 MPDIR'};...=head\n-000008a0: 3120 4e41 4d45 0a0a 7374 6f72 6542 6163 1 NAME..storeBac\n-000008b0: 6b75 704d 6572 6765 4973 6f6c 6174 6564 kupMergeIsolated\n-000008c0: 4261 636b 7570 2e70 6c20 2d20 636f 7079 Backup.pl - copy\n-000008d0: 2069 736f 6c61 7465 6420 6261 636b 7570 isolated backup\n-000008e0: 7320 746f 206d 6169 6e20 6f6e 650a 0a3d s to main one..=\n-000008f0: 6865 6164 3120 4445 5343 5249 5054 494f head1 DESCRIPTIO\n-00000900: 4e0a 0a0a 0a3d 6865 6164 3120 5359 4e4f N....=head1 SYNO\n-00000910: 5053 4953 0a0a 6261 7365 6420 6f6e 2063 PSIS..based on c\n-00000920: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n-00000930: 653a 0a0a 7374 6f72 6542 6163 6b75 704d e:..storeBackupM\n-00000940: 6572 6765 4973 6f6c 6174 6564 4261 636b ergeIsolatedBack\n-00000950: 7570 2e70 6c20 2d66 2069 736f 6c61 7465 up.pl -f isolate\n-00000960: 436f 6e66 6967 4669 6c65 205b 2d76 5d20 ConfigFile [-v] \n-00000970: 5b2d 2d6d 6f76 655d 0a20 2020 2020 2020 [--move]. \n-00000980: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000990: 2020 2020 2020 2020 2020 205b 2d2d 666f [--fo\n-000009a0: 7263 655d 205b 2d54 2074 6d70 6469 725d rce] [-T tmpdir]\n-000009b0: 0a0a 6e6f 2063 6f6e 6669 6775 7261 7469 ..no configurati\n-000009c0: 6f6e 2066 696c 653a 0a0a 2020 2020 7374 on file:.. st\n-000009d0: 6f72 6542 6163 6b75 7053 6574 7570 4973 oreBackupSetupIs\n-000009e0: 6f6c 6174 6564 4d6f 6465 2e70 6c20 2d69 olatedMode.pl -i\n-000009f0: 2069 736f 6c61 7465 4261 636b 7570 4469 isolateBackupDi\n-00000a00: 7220 2d62 2062 6163 6b75 7044 6972 0a20 r -b backupDir. \n-00000a10: 2020 2009 0909 0920 2020 205b 2d53 2073 .... [-S s\n-00000a20: 6572 6965 735d 205b 2d76 5d20 5b2d 2d6d eries] [-v] [--m\n-00000a30: 6f76 655d 205b 2d2d 666f 7263 655d 0a20 ove] [--force]. \n-00000a40: 2020 2009 0909 0920 2020 205b 2d54 2074 .... [-T t\n-00000a50: 6d70 6469 725d 0a0a 3d68 6561 6431 204f mpdir]..=head1 O\n-00000a60: 5054 494f 4e53 0a0a 3d6f 7665 7220 380a PTIONS..=over 8.\n-00000a70: 0a3d 6974 656d 2042 3c2d 2d63 6f6e 6669 .=item B<--confi\n-00000a80: 6746 696c 653e 2c20 423c 2d66 3e0a 0a20 gFile>, B<-f>.. \n-00000a90: 2020 2063 6f6e 6669 6775 7261 7469 6f6e configuration\n-00000aa0: 2066 696c 6520 7573 6564 2066 6f72 2069 file used for i\n-00000ab0: 736f 6c61 7465 6420 6d6f 6465 2061 6e64 solated mode and\n-00000ac0: 0a20 2020 2067 656e 6572 6174 6564 2062 . generated b\n-00000ad0: 7920 7374 6f72 6542 6163 6b75 7053 6574 y storeBackupSet\n-00000ae0: 7570 4973 6f6c 6174 6564 4d6f 6465 2e70 upIsolatedMode.p\n-00000af0: 6c0a 2020 2020 2863 6f6e 7461 696e 7320 l. (contains \n-00000b00: 6b65 7920 226d 6572 6765 4261 636b 7570 key \"mergeBackup\n-00000b10: 4469 7222 2077 6869 6368 2070 6f69 6e74 Dir\" which point\n-00000b20: 7320 746f 2079 6f75 720a 2020 2020 6d61 s to your. ma\n-00000b30: 696e 2062 6163 6b75 7020 6469 7265 6374 in backup direct\n-00000b40: 6f72 7929 0a0a 3d69 7465 6d20 423c 2d2d ory)..=item B<--\n-00000b50: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir\n-00000b60: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6973 >, B<-i>.. is\n-00000b70: 6f6c 6174 6564 2062 6163 6b75 7020 6469 olated backup di\n-00000b80: 7265 6374 6f72 7920 6672 6f6d 2077 6869 rectory from whi\n-00000b90: 6368 206d 6574 6120 6461 7461 2068 6173 ch meta data has\n-00000ba0: 2074 6f20 6265 0a20 2020 2063 6f70 6965 to be. copie\n-00000bb0: 6420 746f 2062 6163 6b75 7044 6972 2e0a d to backupDir..\n-00000bc0: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu\n-00000bd0: 7044 6972 3e2c 2042 3c2d 623e 0a0a 2020 pDir>, B<-b>.. \n-00000be0: 2020 6261 636b 7570 2064 6972 6563 746f backup directo\n-00000bf0: 7279 2074 6f20 7768 6963 6820 796f 7572 ry to which your\n-00000c00: 2062 6163 6b75 7020 6461 7461 2068 6173 backup data has\n-00000c10: 2074 6f20 6265 0a20 2020 2063 6f70 6965 to be. copie\n-00000c20: 6420 2874 6f20 796f 7572 206d 6169 6e20 d (to your main \n-00000c30: 6261 636b 7570 2064 6972 6563 746f 7279 backup directory\n-00000c40: 290a 2020 2020 5468 6973 2069 7320 7468 ). This is th\n-00000c50: 6520 6469 7265 6374 6f72 7920 6672 6f6d e directory from\n-00000c60: 2077 6865 7265 2073 746f 7265 4261 636b where storeBack\n-00000c70: 7570 5365 7475 7049 736f 6c61 7465 644d upSetupIsolatedM\n-00000c80: 6f64 652e 706c 0a20 2020 2063 6f70 6965 ode.pl. copie\n-00000c90: 6420 7468 6520 6d65 7461 2064 6174 6120 d the meta data \n-00000ca0: 746f 2079 6f75 7220 6973 6f6c 6174 6564 to your isolated\n-00000cb0: 2062 6163 6b75 7020 6469 7265 6374 6f72 backup director\n-00000cc0: 790a 0a3d 6974 656d 2042 3c2d 2d73 6572 y..=item B<--ser\n-00000cd0: 6965 733e 2c20 423c 2d53 3e0a 0a20 2020 ies>, B<-S>.. \n-00000ce0: 2073 6572 6965 7320 6f66 2077 6869 6368 series of which\n-00000cf0: 206d 6574 6120 6461 7461 2068 6176 6520 meta data have \n-00000d00: 746f 2062 6520 636f 7069 6564 2074 6f20 to be copied to \n-00000d10: 7461 7267 6574 4469 722e 0a20 2020 2048 targetDir.. H\n-00000d20: 6173 2074 6f20 6265 2073 7065 6369 6669 as to be specifi\n-00000d30: 6564 2069 6620 6d6f 7265 2074 6861 6e20 ed if more than \n-00000d40: 6f6e 6520 7365 7269 6573 2065 7869 7374 one series exist\n-00000d50: 0a20 2020 2069 6e20 6261 636b 7570 4469 . in backupDi\n-00000d60: 720a 0a3d 6974 656d 2042 3c2d 2d76 6572 r..=item B<--ver\n-00000d70: 626f 7365 3e2c 2042 3c2d 763e 0a0a 2020 bose>, B<-v>.. \n-00000d80: 2020 6765 6e65 7261 7465 2076 6572 626f generate verbo\n-00000d90: 7365 206d 6573 7361 6765 730a 0a3d 6974 se messages..=it\n-00000da0: 656d 2042 3c2d 2d6d 6f76 653e 0a0a 2020 em B<--move>.. \n-00000db0: 2020 6d6f 7665 2069 6e73 7465 6164 206f move instead o\n-00000dc0: 6620 636f 7079 3b20 6f6e 6c79 2073 7570 f copy; only sup\n-00000dd0: 706f 7274 6564 2069 6620 6973 6f6c 6174 ported if isolat\n-00000de0: 6564 4261 636b 7570 4469 720a 2020 2020 edBackupDir. \n-00000df0: 616e 6420 6261 636b 7570 4469 7220 6172 and backupDir ar\n-00000e00: 6520 6f6e 2074 6865 2073 616d 6520 6669 e on the same fi\n-00000e10: 6c65 7379 7374 656d 0a0a 3d69 7465 6d20 lesystem..=item \n-00000e20: 423c 2d2d 666f 7263 653e 0a0a 2020 2020 B<--force>.. \n-00000e30: 666f 7263 6520 636f 7079 696e 673b 2064 force copying; d\n-00000e40: 6f20 6e6f 7420 6669 6e61 6c6c 7920 6173 o not finally as\n-00000e50: 6b0a 0a3d 6974 656d 2042 3c2d 2d74 6d70 k..=item B<--tmp\n-00000e60: 6469 723e 2c20 423c 2d54 3e0a 0a20 2020 dir>, B<-T>.. \n-00000e70: 2064 6972 6563 746f 7279 2066 6f72 2074 directory for t\n-00000e80: 656d 706f 7261 7279 2066 696c 6573 2c20 emporary files, \n-00000e90: 6465 6661 756c 7420 6973 203c 2f74 6d70 default is ..=back..=head1\n-00000eb0: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy\n-00000ec0: 7269 6768 7420 2863 2920 3230 3132 2d32 right (c) 2012-2\n-00000ed0: 3032 3220 6279 2048 6569 6e7a 2d4a 6f73 022 by Heinz-Jos\n-00000ee0: 6566 2043 6c61 6573 2028 7365 6520 5245 ef Claes (see RE\n-00000ef0: 4144 4d45 292e 0a50 7562 6c69 7368 6564 ADME)..Published\n-00000f00: 2075 6e64 6572 2074 6865 2047 4e55 2047 under the GNU G\n-00000f10: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li\n-00000f20: 6365 6e73 6520 7633 206f 7220 616e 7920 cense v3 or any \n-00000f30: 6c61 7465 7220 7665 7273 696f 6e0a 0a3d later version..=\n-00000f40: 6375 740a 0a6d 7920 2448 656c 7020 3d20 cut..my $Help = \n-00000f50: 263a 3a67 6574 506f 6432 5465 7874 2824 &::getPod2Text($\n-00000f60: 3029 3b0a 0a26 7072 696e 7456 6572 7369 0);..&printVersi\n-00000f70: 6f6e 285c 4041 5247 562c 2027 2d56 272c on(\\@ARGV, '-V',\n-00000f80: 2027 2d2d 7665 7273 696f 6e27 293b 0a0a '--version');..\n-00000f90: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. \n-00000fa0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n\n-00000fb0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists'\n-00000fc0: 203d 3e20 276e 6f27 2c0a 0909 2020 2020 => 'no',... \n-00000fd0: 272d 6c69 7374 2720 3d3e 205b 4f70 7469 '-list' => [Opti\n-00000fe0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00000ff0: 3d3e 2027 636f 6e66 6967 4669 6c65 272c => 'configFile',\n-00001000: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00001010: 7074 696f 6e27 203d 3e20 272d 6627 2c0a ption' => '-f',.\n-00001020: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n-00001030: 6961 7327 203d 3e20 272d 2d63 6f6e 6669 ias' => '--confi\n-00001040: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n-00001050: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n-00001060: 7327 2c0a 0909 2020 2020 272d 6f6e 6c79 s',... '-only\n-00001070: 5f69 6627 203d 3e20 276e 6f74 205b 6973 _if' => 'not [is\n-00001080: 6f6c 6174 6542 6163 6b75 7044 6972 5d20 olateBackupDir] \n-00001090: 616e 6420 6e6f 7420 5b62 6163 6b75 7044 and not [backupD\n-000010a0: 6972 5d27 292c 0a09 0909 094f 7074 696f ir]'),.....Optio\n-000010b0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000010c0: 3e20 2769 736f 6c61 7465 4261 636b 7570 > 'isolateBackup\n-000010d0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... '\n-000010e0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-000010f0: 2d69 272c 0a09 0909 0909 2020 2020 272d -i',...... '-\n-00001100: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001110: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir\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: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' \n-00001150: 3d3e 2027 5b62 6163 6b75 7044 6972 5d20 => '[backupDir] \n-00001160: 616e 6420 6e6f 7420 5b63 6f6e 6669 6746 and not [configF\n-00001170: 696c 655d 2729 2c0a 0909 0909 4f70 7469 ile]'),.....Opti\n-00001180: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001190: 3d3e 2027 6261 636b 7570 4469 7227 2c0a => 'backupDir',.\n-000011a0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000011b0: 7469 6f6e 2720 3d3e 2027 2d62 272c 0a09 tion' => '-b',..\n-000011c0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-000011d0: 6173 2720 3d3e 2027 2d2d 6261 636b 7570 as' => '--backup\n-000011e0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... '\n-000011f0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-00001200: 2c0a 0909 2020 2020 272d 6f6e 6c79 5f69 ,... '-only_i\n-00001210: 6627 203d 3e20 275b 6973 6f6c 6174 6542 f' => '[isolateB\n-00001220: 6163 6b75 7044 6972 5d20 616e 6420 6e6f ackupDir] and no\n-00001230: 7420 5b63 6f6e 6669 6746 696c 655d 2729 t [configFile]')\n-00001240: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00001250: 7728 272d 6e61 6d65 2720 3d3e 2027 7365 w('-name' => 'se\n-00001260: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... \n-00001270: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001280: 272d 5327 2c0a 0909 0909 0920 2020 2027 '-S',...... '\n-00001290: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-000012a0: 2d73 6572 6965 7327 2c0a 0909 0909 0920 -series',...... \n-000012b0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-000012c0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-000012d0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 5b69 -only_if' => '[i\n-000012e0: 736f 6c61 7465 4261 636b 7570 4469 725d solateBackupDir]\n-000012f0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00001300: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001310: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... \n-00001320: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00001330: 3d3e 2027 2d76 272c 0a09 0909 0909 2020 => '-v',...... \n-00001340: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00001350: 2027 2d2d 7665 7262 6f73 6527 292c 0a09 '--verbose'),..\n-00001360: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001370: 2d6e 616d 6527 203d 3e20 276d 6f76 6527 -name' => 'move'\n-00001380: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001390: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6d6f option' => '--mo\n-000013a0: 7665 2729 2c0a 0909 0909 4f70 7469 6f6e ve'),.....Option\n-000013b0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-000013c0: 2027 666f 7263 6527 2c0a 0909 0909 0920 'force',...... \n-000013d0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000013e0: 3d3e 2027 2d2d 666f 7263 6527 292c 0a09 => '--force'),..\n-000013f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001400: 2d6e 616d 6527 203d 3e20 2773 6b69 7053 -name' => 'skipS\n-00001410: 796e 6327 2c0a 0909 0909 0920 2020 2027 ync',...... '\n-00001420: 2d68 6964 6465 6e27 203d 3e20 2779 6573 -hidden' => 'yes\n-00001430: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001440: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s\n-00001450: 6b69 7053 796e 6327 292c 0a09 0909 094f kipSync'),.....O\n-00001460: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001470: 6527 203d 3e20 2774 6d70 6469 7227 2c0a e' => 'tmpdir',.\n-00001480: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001490: 7469 6f6e 2720 3d3e 2027 2d54 272c 0a09 tion' => '-T',..\n-000014a0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-000014b0: 6173 2720 3d3e 2027 2d2d 746d 7064 6972 as' => '--tmpdir\n-000014c0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-000014d0: 6661 756c 7427 203d 3e20 2474 6d70 6469 fault' => $tmpdi\n-000014e0: 7229 0a09 0909 095d 293b 0a0a 2443 6865 r).....]);..$Che\n-000014f0: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a\n-00001500: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \\@ARGV,.\n-00001510: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001520: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel\n-00001530: 700a 2020 2020 2020 2020 2020 2020 2020 p. \n-00001540: 2020 2029 3b0a 0a0a 6d79 2024 636f 6e66 );...my $conf\n-00001550: 6967 4669 6c65 203d 2024 4368 6563 6b50 igFile = $CheckP\n-00001560: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00001570: 7228 2763 6f6e 6669 6746 696c 6527 293b r('configFile');\n-00001580: 0a6d 7920 2469 736f 6c61 7465 4261 636b .my $isolateBack\n-00001590: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa\n-000015a0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-000015b0: 2827 6973 6f6c 6174 6542 6163 6b75 7044 ('isolateBackupD\n-000015c0: 6972 2729 3b0a 6d79 2024 6261 636b 7570 ir');.my $backup\n-000015d0: 4469 7220 3d20 2443 6865 636b 5061 722d Dir = $CheckPar-\n-000015e0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-000015f0: 6261 636b 7570 4469 7227 293b 0a6d 7920 backupDir');.my \n-00001600: 2473 6572 6965 7320 3d20 2443 6865 636b $series = $Check\n-00001610: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00001620: 6172 2827 7365 7269 6573 2729 3b20 2023 ar('series'); #\n-00001630: 206d 7573 7420 6265 2073 7065 6369 6669 must be specifi\n-00001640: 6564 2069 660a 2020 2020 2020 2020 2020 ed if. \n-00001650: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001660: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001670: 2020 2020 2020 2020 2320 6d6f 7265 2074 # more t\n-00001680: 6861 6e20 3120 7365 7269 6573 2065 7869 han 1 series exi\n-00001690: 7374 0a6d 7920 2476 6572 626f 7365 203d st.my $verbose =\n-000016a0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000016b0: 7074 5769 7468 6f75 7450 6172 2827 7665 ptWithoutPar('ve\n-000016c0: 7262 6f73 6527 293b 0a6d 7920 246d 6f76 rbose');.my $mov\n-000016d0: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n-000016e0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-000016f0: 276d 6f76 6527 293b 0a6d 7920 2466 6f72 'move');.my $for\n-00001700: 6365 203d 2024 4368 6563 6b50 6172 2d3e ce = $CheckPar->\n-00001710: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-00001720: 2827 666f 7263 6527 293b 0a6d 7920 2473 ('force');.my $s\n-00001730: 6b69 7053 796e 6320 3d20 2443 6865 636b kipSync = $Check\n-00001740: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00001750: 7574 5061 7228 2773 6b69 7053 796e 6327 utPar('skipSync'\n-00001760: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch\n-00001770: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00001780: 7468 5061 7228 2774 6d70 6469 7227 293b thPar('tmpdir');\n-00001790: 0a0a 6d79 2024 7072 4c6f 673b 0a6d 7920 ..my $prLog;.my \n-000017a0: 2824 7072 4c6f 674b 696e 6429 203d 205b ($prLogKind) = [\n-000017b0: 2741 3a42 4547 494e 272c 0a09 0920 2020 'A:BEGIN',... \n-000017c0: 275a 3a45 4e44 272c 0a09 0920 2020 2749 'Z:END',... 'I\n-000017d0: 3a49 4e46 4f27 2c0a 0909 2020 2027 573a :INFO',... 'W:\n-000017e0: 5741 524e 494e 4727 2c0a 0909 2020 2027 WARNING',... '\n-000017f0: 453a 4552 524f 5227 5d3b 0a24 7072 4c6f E:ERROR'];.$prLo\n-00001800: 6720 3d20 7072 696e 744c 6f67 2d3e 6e65 g = printLog->ne\n-00001810: 7728 272d 6b69 6e64 2720 3d3e 2024 7072 w('-kind' => $pr\n-00001820: 4c6f 674b 696e 642c 0a09 0920 2020 2020 LogKind,... \n-00001830: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $\n-00001840: 746d 7064 6972 293b 0a0a 0a24 7072 4c6f tmpdir);...$prLo\n-00001850: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00001860: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. \n-00001870: 272d 7374 7227 203d 3e20 5b22 706c 6561 '-str' => [\"plea\n-00001880: 7365 2064 6566 696e 6520 3c63 6f6e 6669 se define or \\n$H\n-000018b0: 656c 7022 5d2c 0a09 2020 2020 2020 272d elp\"],.. '-\n-000018c0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n-000018d0: 756e 6c65 7373 2028 2463 6f6e 6669 6746 unless ($configF\n-000018e0: 696c 6520 6f72 2024 6973 6f6c 6174 6542 ile or $isolateB\n-000018f0: 6163 6b75 7044 6972 293b 0a0a 0a69 6620 ackupDir);...if \n-00001900: 2824 636f 6e66 6967 4669 6c65 2920 2020 ($configFile) \n-00001910: 2020 2023 2072 6561 6420 6973 6f6c 6174 # read isolat\n-00001920: 6543 6f6e 6669 6746 696c 650a 7b0a 2020 eConfigFile.{. \n-00001930: 2020 6d79 2024 6973 6f6c 6174 6543 6f6e my $isolateCon\n-00001940: 6620 3d0a 0943 6865 636b 5061 7261 6d2d f =..CheckParam-\n-00001950: 3e6e 6577 2827 2d63 6f6e 6669 6746 696c >new('-configFil\n-00001960: 6527 203d 3e20 272d 6627 2c0a 0909 0927 e' => '-f',....'\n-00001970: 2d6c 6973 7427 203d 3e20 5b0a 0909 0920 -list' => [.... \n-00001980: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-00001990: 2d6e 616d 6527 203d 3e20 2769 736f 6c61 -name' => 'isola\n-000019a0: 7465 436f 6e66 6967 4669 6c65 272c 0a09 teConfigFile',..\n-000019b0: 0909 0909 272d 636c 5f6f 7074 696f 6e27 ....'-cl_option'\n-000019c0: 203d 3e20 272d 6627 2c0a 0909 0909 0927 => '-f',......'\n-000019d0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-000019e0: 292c 0a09 0909 2020 2020 4f70 7469 6f6e ),.... Option\n-000019f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001a00: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',...\n-00001a10: 0909 0927 2d63 665f 6b65 7927 203d 3e20 ...'-cf_key' => \n-00001a20: 2762 6163 6b75 7044 6972 272c 0a09 0909 'backupDir',....\n-00001a30: 0909 272d 7061 7261 6d27 203d 3e20 2779 ..'-param' => 'y\n-00001a40: 6573 2729 2c0a 0909 0920 2020 204f 7074 es'),.... Opt\n-00001a50: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00001a60: 203d 3e20 276d 6572 6765 4261 636b 7570 => 'mergeBackup\n-00001a70: 4469 7227 2c0a 0909 0909 0927 2d63 665f Dir',......'-cf_\n-00001a80: 6b65 7927 203d 3e20 276d 6572 6765 4261 key' => 'mergeBa\n-00001a90: 636b 7570 4469 7227 2c0a 0909 0909 0927 ckupDir',......'\n-00001aa0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-00001ab0: 292c 0a09 0909 2020 2020 4f70 7469 6f6e ),.... Option\n-00001ac0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001ad0: 2027 7365 7269 6573 272c 0a09 0909 0909 'series',......\n-00001ae0: 272d 6366 5f6b 6579 2720 3d3e 2027 7365 '-cf_key' => 'se\n-00001af0: 7269 6573 272c 0a09 0909 0909 272d 6465 ries',......'-de\n-00001b00: 6661 756c 7427 203d 3e20 2764 6566 6175 fault' => 'defau\n-00001b10: 6c74 2729 0a09 0909 5d29 3b0a 2020 2020 lt')....]);. \n-00001b20: 2469 736f 6c61 7465 436f 6e66 2d3e 6368 $isolateConf->ch\n-00001b30: 6563 6b28 272d 6172 6776 2720 3d3e 205b eck('-argv' => [\n-00001b40: 272d 6627 203d 3e20 2463 6f6e 6669 6746 '-f' => $configF\n-00001b50: 696c 655d 2c0a 0909 0927 2d68 656c 7027 ile],....'-help'\n-00001b60: 203d 3e20 2263 616e 6e6f 7420 7265 6164 => \"cannot read\n-00001b70: 2066 696c 6520 3c24 636f 6e66 6967 4669 file <$configFi\n-00001b80: 6c65 3e5c 6e22 2c0a 0909 0927 2d69 676e le>\\n\",....'-ign\n-00001b90: 6f72 6541 6464 6974 696f 6e61 6c4b 6579 oreAdditionalKey\n-00001ba0: 7327 203d 3e20 3129 3b0a 0a20 2020 2024 s' => 1);.. $\n-00001bb0: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir\n-00001bc0: 203d 2024 6973 6f6c 6174 6543 6f6e 662d = $isolateConf-\n-00001bd0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00001be0: 6261 636b 7570 4469 7227 293b 0a20 2020 backupDir');. \n-00001bf0: 2024 6261 636b 7570 4469 7220 3d20 2469 $backupDir = $i\n-00001c00: 736f 6c61 7465 436f 6e66 2d3e 6765 744f solateConf->getO\n-00001c10: 7074 5769 7468 5061 7228 276d 6572 6765 ptWithPar('merge\n-00001c20: 4261 636b 7570 4469 7227 293b 0a20 2020 BackupDir');. \n-00001c30: 2024 7365 7269 6573 203d 2024 6973 6f6c $series = $isol\n-00001c40: 6174 6543 6f6e 662d 3e67 6574 4f70 7457 ateConf->getOptW\n-00001c50: 6974 6850 6172 2827 7365 7269 6573 2729 ithPar('series')\n-00001c60: 3b0a 0a20 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p\n-00001c70: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00001c80: 2749 272c 0a09 0920 2027 2d73 7472 2720 'I',... '-str' \n-00001c90: 3d3e 205b 2265 7874 7261 6374 6564 2066 => [\"extracted f\n-00001ca0: 726f 6d20 2469 736f 6c61 7465 4261 636b rom $isolateBack\n-00001cb0: 7570 4469 723a 222c 0a09 0909 2020 2020 upDir:\",.... \n-00001cc0: 2022 5c74 6261 636b 7570 4469 7220 3d20 \"\\tbackupDir = \n-00001cd0: 3c24 6261 636b 7570 4469 723e 222c 0a09 <$backupDir>\",..\n-00001ce0: 0909 2020 2020 2022 5c74 6973 6f6c 6174 .. \"\\tisolat\n-00001cf0: 6542 6163 6b75 7044 6972 203d 203c 2469 eBackupDir = <$i\n-00001d00: 736f 6c61 7465 4261 636b 7570 4469 723e solateBackupDir>\n-00001d10: 222c 0a09 0909 2020 2020 2022 5c74 7365 \",.... \"\\tse\n-00001d20: 7269 6573 203d 203c 2473 6572 6965 733e ries = <$series>\n-00001d30: 225d 290a 0969 6620 2476 6572 626f 7365 \"])..if $verbose\n-00001d40: 3b0a 7d0a 656c 7369 6620 286e 6f74 2024 ;.}.elsif (not $\n-00001d50: 7365 7269 6573 2920 2020 2020 2320 6e6f series) # no\n-00001d60: 2063 6f6e 6669 6720 6669 6c65 2c20 7365 config file, se\n-00001d70: 7269 6573 206e 6f74 2073 6574 2c20 7472 ries not set, tr\n-00001d80: 7920 746f 0a7b 2020 2020 2020 2020 2020 y to.{ \n-00001d90: 2020 2020 2020 2020 2020 2020 2023 2064 # d\n-00001da0: 6574 6563 7420 6e61 6d65 206f 6620 7365 etect name of se\n-00001db0: 7269 6573 0a09 6c6f 6361 6c20 2a44 4952 ries..local *DIR\n-00001dc0: 3b0a 096f 7065 6e64 6972 2844 4952 2c20 ;..opendir(DIR, \n-00001dd0: 2469 736f 6c61 7465 4261 636b 7570 4469 $isolateBackupDi\n-00001de0: 7229 206f 720a 0920 2020 2024 7072 4c6f r) or.. $prLo\n-00001df0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00001e00: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n-00001e10: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-00001e20: 206f 7065 6e64 6972 203c 2469 736f 6c61 opendir <$isola\n-00001e30: 7465 4261 636b 7570 4469 723e 2c20 6578 teBackupDir>, ex\n-00001e40: 6974 696e 6722 5d2c 0a09 0909 2020 272d iting\"],.... '-\n-00001e50: 6578 6974 2720 3d3e 2031 293b 0a09 6d79 exit' => 1);..my\n-00001e60: 2028 2465 6e74 7279 2c20 4065 6e74 7269 ($entry, @entri\n-00001e70: 6573 293b 0a09 7768 696c 6520 2824 656e es);..while ($en\n-00001e80: 7472 7920 3d20 7265 6164 6469 7220 4449 try = readdir DI\n-00001e90: 5229 0a09 7b0a 0920 2020 206e 6578 7420 R)..{.. next \n-00001ea0: 6966 2028 2465 6e74 7279 2065 7120 272e if ($entry eq '.\n-00001eb0: 2720 6f72 2024 656e 7472 7920 6571 2027 ' or $entry eq '\n-00001ec0: 2e2e 2729 3b0a 0920 2020 206d 7920 2465 ..');.. my $e\n-00001ed0: 203d 2022 2462 6163 6b75 7044 6972 2f24 = \"$backupDir/$\n-00001ee0: 656e 7472 7922 3b0a 0920 2020 206e 6578 entry\";.. nex\n-00001ef0: 7420 6966 2028 2d6c 2024 6520 616e 6420 t if (-l $e and \n-00001f00: 6e6f 7420 2d64 2024 6529 3b20 2020 2320 not -d $e); # \n-00001f10: 6f6e 6c79 2064 6972 6563 746f 7269 6573 only directories\n-00001f20: 0a09 2020 2020 6e65 7874 2075 6e6c 6573 .. next unles\n-00001f30: 7320 2d64 2024 653b 0a09 2020 2020 6966 s -d $e;.. if\n-00001f40: 2028 2465 6e74 7279 203d 7e0a 0909 2f5c ($entry =~.../\\\n-00001f50: 4128 5c64 7b34 7d29 5c2e 285c 647b 327d A(\\d{4})\\.(\\d{2}\n-00001f60: 295c 2e28 5c64 7b32 7d29 5f28 5c64 7b32 )\\.(\\d{2})_(\\d{2\n-00001f70: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\\.(\\d{2})\\.(\\d\n-00001f80: 7b32 7d29 5c5a 2f6f 290a 0920 2020 207b {2})\\Z/o).. {\n-00001f90: 0a09 0924 7365 7269 6573 203d 2027 2e27 ...$series = '.'\n-00001fa0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin\n-00001fb0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n-00001fc0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-00001fd0: 2720 3d3e 205b 2266 6f75 6e64 2073 6572 ' => [\"found ser\n-00001fe0: 6965 7320 3c2e 3e20 696e 203c 2469 736f ies <.> in <$iso\n-00001ff0: 6c61 7465 4261 636b 7570 4469 723e 225d lateBackupDir>\"]\n-00002000: 293b 0a09 096c 6173 743b 0a09 2020 2020 );...last;.. \n-00002010: 7d0a 0920 2020 2070 7573 6820 4065 6e74 }.. push @ent\n-00002020: 7269 6573 2c20 2465 6e74 7279 3b0a 097d ries, $entry;..}\n-00002030: 0a09 636c 6f73 6564 6972 2844 4952 293b ..closedir(DIR);\n-00002040: 0a0a 0975 6e6c 6573 7320 2824 7365 7269 ...unless ($seri\n-00002050: 6573 290a 097b 0a09 2020 2020 2470 724c es)..{.. $prL\n-00002060: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002070: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-00002080: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-00002090: 666f 756e 6420 6d6f 7265 2074 6861 6e20 found more than \n-000020a0: 6f6e 6520 6261 636b 7570 2073 6572 6965 one backup serie\n-000020b0: 7320 696e 203c 2469 736f 6c61 7465 4261 s in <$isolateBa\n-000020c0: 636b 7570 4469 723e 222c 0a09 0909 2020 ckupDir>\",.... \n-000020d0: 2022 2c20 706c 6561 7365 2073 7065 6369 \", please speci\n-000020e0: 6679 2073 6572 6965 7320 7769 7468 206f fy series with o\n-000020f0: 7074 696f 6e20 2d2d 7365 7269 6573 3b20 ption --series; \n-00002100: 666f 756e 643a 222c 0a09 0909 2020 2073 found:\",.... s\n-00002110: 6f72 7420 4065 6e74 7269 6573 5d2c 0a09 ort @entries],..\n-00002120: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n-00002130: 290a 0909 6966 2040 656e 7472 6965 7320 )...if @entries \n-00002140: 3e20 313b 0a09 7d0a 0924 7072 4c6f 672d > 1;..}..$prLog-\n-00002150: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00002160: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-00002170: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-00002180: 205b 226e 6f20 7365 7269 6573 2066 6f75 [\"no series fou\n-00002190: 6e64 2069 6e20 3c24 6973 6f6c 6174 6542 nd in <$isolateB\n-000021a0: 6163 6b75 7044 6972 3e2c 2065 7869 7469 ackupDir>, exiti\n-000021b0: 6e67 225d 2c0a 0909 2020 2020 2020 272d ng\"],... '-\n-000021c0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. \n-000021d0: 2069 6620 4065 6e74 7269 6573 203d 3d20 if @entries == \n-000021e0: 303b 0a0a 0924 7365 7269 6573 203d 2024 0;...$series = $\n-000021f0: 656e 7472 6965 735b 305d 3b0a 7d0a 0a24 entries[0];.}..$\n-00002200: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002210: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. \n-00002220: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00002230: 6964 656e 7469 6669 6564 2073 6572 6965 identified serie\n-00002240: 7320 3c24 7365 7269 6573 3e22 5d29 0a20 s <$series>\"]). \n-00002250: 2020 2069 6620 2476 6572 626f 7365 3b0a if $verbose;.\n-00002260: 0a23 0a23 206c 6f61 6420 6261 636b 7570 .#.# load backup\n-00002270: 2064 6972 6563 746f 7269 6573 0a23 0a6d directories.#.m\n-00002280: 7920 2824 6d65 7461 4461 7461 4261 636b y ($metaDataBack\n-00002290: 7570 2c20 4069 736f 6c61 7442 6163 6b75 up, @isolatBacku\n-000022a0: 7073 293b 0a7b 0a20 2020 206c 6f63 616c ps);.{. local\n-000022b0: 202a 4449 523b 0a20 2020 206d 7920 2469 *DIR;. my $i\n-000022c0: 736f 6c44 6972 203d 2022 2469 736f 6c61 solDir = \"$isola\n-000022d0: 7465 4261 636b 7570 4469 722f 2473 6572 teBackupDir/$ser\n-000022e0: 6965 7322 3b0a 2020 2020 6f70 656e 6469 ies\";. opendi\n-000022f0: 7228 4449 522c 2024 6973 6f6c 4469 7229 r(DIR, $isolDir)\n-00002300: 206f 720a 0924 7072 4c6f 672d 3e70 7269 or..$prLog->pri\n-00002310: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00002320: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-00002330: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => [\"cannot op\n-00002340: 656e 6469 7220 3c24 6973 6f6c 4469 723e endir <$isolDir>\n-00002350: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting\"],... \n-00002360: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00002370: 3129 3b0a 2020 2020 6d79 2028 2465 6e74 1);. my ($ent\n-00002380: 7279 2c20 4065 6e74 7269 6573 293b 0a20 ry, @entries);. \n-00002390: 2020 2077 6869 6c65 2028 2465 6e74 7279 while ($entry\n-000023a0: 203d 2072 6561 6464 6972 2044 4952 290a = readdir DIR).\n-000023b0: 2020 2020 7b0a 096e 6578 7420 6966 2028 {..next if (\n-000023c0: 2d6c 2024 656e 7472 7920 616e 6420 6e6f -l $entry and no\n-000023d0: 7420 2d64 2024 656e 7472 7929 3b20 2020 t -d $entry); \n-000023e0: 2320 6f6e 6c79 2064 6972 6563 746f 7269 # only directori\n-000023f0: 6573 0a09 7075 7368 2040 656e 7472 6965 es..push @entrie\n-00002400: 732c 2024 656e 7472 790a 0920 2020 2069 s, $entry.. i\n-00002410: 6620 2465 6e74 7279 203d 7e0a 0920 2020 f $entry =~.. \n-00002420: 202f 5c41 285c 647b 347d 295c 2e28 5c64 /\\A(\\d{4})\\.(\\d\n-00002430: 7b32 7d29 5c2e 285c 647b 327d 295f 285c {2})\\.(\\d{2})_(\\\n-00002440: 647b 327d 295c 2e28 5c64 7b32 7d29 5c2e d{2})\\.(\\d{2})\\.\n-00002450: 285c 647b 327d 295c 5a2f 6f3b 0a20 2020 (\\d{2})\\Z/o;. \n-00002460: 207d 0a20 2020 2063 6c6f 7365 6469 7228 }. closedir(\n-00002470: 4449 5229 3b0a 0a20 2020 2024 7072 4c6f DIR);.. $prLo\n-00002480: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00002490: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-000024a0: 7472 2720 3d3e 0a09 0920 205b 2264 6964 tr' =>... [\"did\n-000024b0: 6e27 7420 6669 6e64 2061 2062 6163 6b75 n't find a backu\n-000024c0: 7020 696e 2024 6973 6f6c 4469 722c 2065 p in $isolDir, e\n-000024d0: 7869 7469 6e67 225d 2c0a 0909 2020 272d xiting\"],... '-\n-000024e0: 6578 6974 2720 3d3e 2031 290a 0969 6620 exit' => 1)..if \n-000024f0: 4065 6e74 7269 6573 203c 2032 3b0a 0a20 @entries < 2;.. \n-00002500: 2020 2028 246d 6574 6144 6174 6142 6163 ($metaDataBac\n-00002510: 6b75 702c 2040 6973 6f6c 6174 4261 636b kup, @isolatBack\n-00002520: 7570 7329 203d 2073 6f72 7420 2840 656e ups) = sort (@en\n-00002530: 7472 6965 7329 3b0a 0a23 7072 696e 7420 tries);..#print \n-00002540: 226d 6574 6144 6174 6142 6163 6b75 7020 \"metaDataBackup \n-00002550: 3d20 246d 6574 6144 6174 6142 6163 6b75 = $metaDataBacku\n-00002560: 705c 6e22 3b0a 2370 7269 6e74 2022 6973 p\\n\";.#print \"is\n-00002570: 6f6c 6174 4261 636b 7570 7320 3d20 4069 olatBackups = @i\n-00002580: 736f 6c61 7442 6163 6b75 7073 5c6e 223b solatBackups\\n\";\n-00002590: 0a7d 0a0a 230a 2320 646f 7562 6c65 2063 .}..#.# double c\n-000025a0: 6865 636b 206d 6574 6144 6174 6142 6163 heck metaDataBac\n-000025b0: 6b75 7020 696e 2069 736f 6c61 7465 4261 kup in isolateBa\n-000025c0: 636b 7570 4469 7220 3d3d 2062 6163 6b75 ckupDir == backu\n-000025d0: 7044 6972 0a23 0a7b 0a20 2020 206d 7920 pDir.#.{. my \n-000025e0: 246d 6574 6149 736f 6c20 3d20 2224 6973 $metaIsol = \"$is\n-000025f0: 6f6c 6174 6542 6163 6b75 7044 6972 2f24 olateBackupDir/$\n-00002600: 7365 7269 6573 2f24 6d65 7461 4461 7461 series/$metaData\n-00002610: 4261 636b 7570 223b 0a20 2020 206d 7920 Backup\";. my \n-00002620: 246d 6574 614f 7269 6720 3d20 2224 6261 $metaOrig = \"$ba\n-00002630: 636b 7570 4469 722f 2473 6572 6965 732f ckupDir/$series/\n-00002640: 246d 6574 6144 6174 6142 6163 6b75 7022 $metaDataBackup\"\n-00002650: 3b0a 0a23 7072 696e 7420 226d 6574 6149 ;..#print \"metaI\n-00002660: 736f 6c20 3d20 246d 6574 6149 736f 6c5c sol = $metaIsol\\\n-00002670: 6e22 3b0a 2370 7269 6e74 2022 6d65 7461 n\";.#print \"meta\n-00002680: 4f72 6967 203d 2024 6d65 7461 4f72 6967 Orig = $metaOrig\n-00002690: 5c6e 223b 0a0a 2020 2020 2470 724c 6f67 \\n\";.. $prLog\n-000026a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000026b0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n-000026c0: 7227 203d 3e0a 2020 2020 205b 2266 6f75 r' =>. [\"fou\n-000026d0: 6e64 206d 6574 6120 6461 7461 206f 6620 nd meta data of \n-000026e0: 6261 636b 7570 203c 246d 6574 6144 6174 backup <$metaDat\n-000026f0: 6142 6163 6b75 703e 2069 6e20 3c24 6973 aBackup> in <$is\n-00002700: 6f6c 6174 6542 6163 6b75 7044 6972 2f24 olateBackupDir/$\n-00002710: 7365 7269 6573 3e2c 222e 0a20 2020 2020 series>,\".. \n-00002720: 2220 6275 7420 6361 6e6e 6f74 2066 696e \" but cannot fin\n-00002730: 6420 3c24 6d65 7461 4461 7461 4261 636b d <$metaDataBack\n-00002740: 7570 3e20 696e 203c 2462 6163 6b75 7044 up> in <$backupD\n-00002750: 6972 2f24 7365 7269 6573 3e22 5d2c 0a09 ir/$series>\"],..\n-00002760: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n-00002770: 0a09 756e 6c65 7373 202d 6420 246d 6574 ..unless -d $met\n-00002780: 614f 7269 673b 0a0a 2020 2020 6d79 2024 aOrig;.. my $\n-00002790: 6620 3d20 756e 6465 663b 0a20 2020 2069 f = undef;. i\n-000027a0: 6620 282d 6620 2224 6d65 7461 4973 6f6c f (-f \"$metaIsol\n-000027b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2229 /.md5CheckSums\")\n-000027c0: 0a20 2020 207b 0a09 2466 203d 2022 2e6d . {..$f = \".m\n-000027d0: 6435 4368 6563 6b53 756d 7322 3b0a 2020 d5CheckSums\";. \n-000027e0: 2020 7d0a 2020 2020 656c 7369 6620 282d }. elsif (-\n-000027f0: 6620 2224 6d65 7461 4973 6f6c 2f2e 6d64 f \"$metaIsol/.md\n-00002800: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2\")\n-00002810: 0a20 2020 207b 0a09 2466 203d 2022 2e6d . {..$f = \".m\n-00002820: 6435 4368 6563 6b53 756d 732e 627a 3222 d5CheckSums.bz2\"\n-00002830: 3b0a 2020 2020 7d0a 2020 2020 2470 724c ;. }. $prL\n-00002840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002850: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '-\n-00002860: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-00002870: 2072 6561 6420 3c24 6d65 7461 4973 6f6c read <$metaIsol\n-00002880: 2f2e 6d64 3543 6865 636b 5375 6d73 5b2e /.md5CheckSums[.\n-00002890: 627a 325d 3e22 5d2c 0a09 0920 2027 2d65 bz2]>\"],... '-e\n-000028a0: 7869 7427 203d 3e20 3129 0a09 756e 6c65 xit' => 1)..unle\n-000028b0: 7373 2024 663b 0a20 2020 2024 7072 4c6f ss $f;. $prLo\n-000028c0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000028d0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-000028e0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-000028f0: 7265 6164 203c 246d 6574 614f 7269 672f read <$metaOrig/\n-00002900: 2466 3e22 5d2c 0a09 0920 2027 2d65 7869 $f>\"],... '-exi\n-00002910: 7427 203d 3e20 3129 0a09 756e 6c65 7373 t' => 1)..unless\n-00002920: 202d 6620 2224 6d65 7461 4f72 6967 2f24 -f \"$metaOrig/$\n-00002930: 6622 3b0a 0a20 2020 206d 7920 2469 736f f\";.. my $iso\n-00002940: 6c4d 6435 203d 2026 3a3a 6361 6c63 4d44 lMd5 = &::calcMD\n-00002950: 3528 2224 6d65 7461 4973 6f6c 2f24 6622 5(\"$metaIsol/$f\"\n-00002960: 2c20 2470 724c 6f67 293b 0a20 2020 206d , $prLog);. m\n-00002970: 7920 246f 7269 674d 6435 203d 2026 3a3a y $origMd5 = &::\n-00002980: 6361 6c63 4d44 3528 2224 6d65 7461 4f72 calcMD5(\"$metaOr\n-00002990: 6967 2f24 6622 2c20 2470 724c 6f67 293b ig/$f\", $prLog);\n-000029a0: 0a23 7072 696e 7420 2269 736f 6c4d 6435 .#print \"isolMd5\n-000029b0: 203d 2024 6973 6f6c 4d64 355c 6e22 3b0a = $isolMd5\\n\";.\n-000029c0: 2370 7269 6e74 2022 6f72 6967 4d64 3520 #print \"origMd5 \n-000029d0: 3d20 246f 7269 674d 6435 5c6e 223b 0a20 = $origMd5\\n\";. \n-000029e0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-000029f0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00002a00: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00002a10: 2224 6620 6469 6666 6572 7320 696e 203c \"$f differs in <\n-00002a20: 246d 6574 6149 736f 6c3e 2061 6e64 203c $metaIsol> and <\n-00002a30: 246d 6574 614f 7269 673e 2c20 6578 6974 $metaOrig>, exit\n-00002a40: 696e 6722 5d2c 0a09 0920 2027 2d65 7869 ing\"],... '-exi\n-00002a50: 7427 203d 3e20 3129 0a09 756e 6c65 7373 t' => 1)..unless\n-00002a60: 2024 6973 6f6c 4d64 3520 6571 2024 6f72 $isolMd5 eq $or\n-00002a70: 6967 4d64 353b 0a7d 0a0a 756e 6c65 7373 igMd5;.}..unless\n-00002a80: 2028 2466 6f72 6365 290a 7b0a 2020 2020 ($force).{. \n-00002a90: 6d79 2024 616e 7377 6572 203d 2027 7965 my $answer = 'ye\n-00002aa0: 7327 3b0a 2020 2020 646f 0a20 2020 207b s';. do. {\n-00002ab0: 0a09 7072 696e 7420 2269 6e20 6469 7265 ..print \"in dire\n-00002ac0: 6374 6f72 7920 3c24 6973 6f6c 6174 6542 ctory <$isolateB\n-00002ad0: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series\n-00002ae0: 3e2c 2063 6f70 795c 6e5c 743c 222c 0a09 >, copy\\n\\t<\",..\n-00002af0: 6a6f 696e 2822 3e5c 6e5c 743c 222c 4069 join(\">\\n\\t<\",@i\n-00002b00: 736f 6c61 7442 6163 6b75 7073 292c 2022 solatBackups), \"\n-00002b10: 3e5c 6e74 6f5c 6e5c 743c 2462 6163 6b75 >\\nto\\n\\t<$backu\n-00002b20: 7044 6972 2f24 7365 7269 6573 3e5c 6e22 pDir/$series>\\n\"\n-00002b30: 2c0a 0922 3f5c 6e79 6573 202f 206e 6f20 ,..\"?\\nyes / no \n-00002b40: 2d3e 2022 3b0a 0924 616e 7377 6572 203d -> \";..$answer =\n-00002b50: 203c 5354 4449 4e3e 3b0a 0963 686f 6d70 ;..chomp\n-00002b60: 2024 616e 7377 6572 3b0a 2020 2020 7d20 $answer;. } \n-00002b70: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n\n-00002b80: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans\n-00002b90: 7765 7220 6e65 2027 6e6f 2729 3b0a 0a20 wer ne 'no');.. \n-00002ba0: 2020 2065 7869 7420 3020 6966 2024 616e exit 0 if $an\n-00002bb0: 7377 6572 2065 7120 276e 6f27 3b0a 7d0a swer eq 'no';.}.\n-00002bc0: 0a7b 0a20 2020 206d 7920 2824 7461 7267 .{. my ($targ\n-00002bd0: 6574 4c69 6e6b 4672 6f6d 2c20 2474 6172 etLinkFrom, $tar\n-00002be0: 6765 7443 6f75 6e74 2920 3d0a 0926 3a3a getCount) =..&::\n-00002bf0: 7265 6164 4c69 6e6b 4672 6f6d 456e 7472 readLinkFromEntr\n-00002c00: 6965 7328 2224 6261 636b 7570 4469 722f ies(\"$backupDir/\n-00002c10: 2473 6572 6965 732f 246d 6574 6144 6174 $series/$metaDat\n-00002c20: 6142 6163 6b75 7022 2c20 2470 724c 6f67 aBackup\", $prLog\n-00002c30: 293b 0a20 2020 206d 7920 2824 6d65 7267 );. my ($merg\n-00002c40: 654c 696e 6b46 726f 6d2c 2024 6d65 7267 eLinkFrom, $merg\n-00002c50: 6543 6f75 6e74 2920 3d0a 0926 3a3a 7265 eCount) =..&::re\n-00002c60: 6164 4c69 6e6b 4672 6f6d 456e 7472 6965 adLinkFromEntrie\n-00002c70: 7328 2224 6973 6f6c 6174 6542 6163 6b75 s(\"$isolateBacku\n-00002c80: 7044 6972 2f24 7365 7269 6573 2f24 6d65 pDir/$series/$me\n-00002c90: 7461 4461 7461 4261 636b 7570 222c 2024 taDataBackup\", $\n-00002ca0: 7072 4c6f 6729 3b0a 2020 2020 666f 7265 prLog);. fore\n-00002cb0: 6163 6820 6d79 2024 6c66 2028 736f 7274 ach my $lf (sort\n-00002cc0: 206b 6579 7320 2524 6d65 7267 654c 696e keys %$mergeLin\n-00002cd0: 6b46 726f 6d29 0a20 2020 207b 0a09 756e kFrom). {..un\n-00002ce0: 6c65 7373 2028 6578 6973 7473 2024 2474 less (exists $$t\n-00002cf0: 6172 6765 744c 696e 6b46 726f 6d7b 246c argetLinkFrom{$l\n-00002d00: 667d 290a 097b 0a09 2020 2020 6c6f 6361 f})..{.. loca\n-00002d10: 6c20 2a46 494c 453b 0a09 2020 2020 6d79 l *FILE;.. my\n-00002d20: 2024 6620 3d20 2224 6261 636b 7570 4469 $f = \"$backupDi\n-00002d30: 722f 2473 6572 6965 732f 246d 6574 6144 r/$series/$metaD\n-00002d40: 6174 6142 6163 6b75 702f 2e73 746f 7265 ataBackup/.store\n-00002d50: 4261 636b 7570 4c69 6e6b 7322 3b0a 0920 BackupLinks\";.. \n-00002d60: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00002d70: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00002d80: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-00002d90: 0909 0920 205b 2261 646a 7573 7469 6e67 ... [\"adjusting\n-00002da0: 2072 6566 6572 6e63 6520 3c24 6c66 3e20 refernce <$lf> \n-00002db0: 696e 203c 2466 2f24 7461 7267 6574 436f in <$f/$targetCo\n-00002dc0: 756e 743e 225d 293b 0a09 2020 2020 6f70 unt>\"]);.. op\n-00002dd0: 656e 2846 494c 452c 2027 3e27 2c20 2224 en(FILE, '>', \"$\n-00002de0: 662f 6c69 6e6b 4672 6f6d 2474 6172 6765 f/linkFrom$targe\n-00002df0: 7443 6f75 6e74 2229 206f 720a 0909 2470 tCount\") or...$p\n-00002e00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00002e10: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-00002e20: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00002e30: 2263 616e 6e6f 7420 7772 6974 6520 3c24 \"cannot write <$\n-00002e40: 662f 2474 6172 6765 7443 6f75 6e74 3e22 f/$targetCount>\"\n-00002e50: 5d2c 0a09 0909 2020 2020 2020 272d 6164 ],.... '-ad\n-00002e60: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__,\n-00002e70: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... \n-00002e80: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00002e90: 3129 3b0a 0920 2020 2070 7269 6e74 2046 1);.. print F\n-00002ea0: 494c 4520 2224 6c66 5c6e 223b 0a09 2020 ILE \"$lf\\n\";.. \n-00002eb0: 2020 636c 6f73 6528 4649 4c45 292c 0a09 close(FILE),..\n-00002ec0: 2020 2020 2b2b 2474 6172 6765 7443 6f75 ++$targetCou\n-00002ed0: 6e74 3b0a 097d 0a20 2020 207d 0a7d 0a0a nt;..}. }.}..\n-00002ee0: 230a 2320 6368 6563 6b73 2066 6f72 206f #.# checks for o\n-00002ef0: 7074 696f 6e20 2d2d 6d6f 7665 0a23 0a24 ption --move.#.$\n-00002f00: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002f10: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n-00002f20: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00002f30: 6469 7265 6374 6f72 7920 3c24 6973 6f6c directory <$isol\n-00002f40: 6174 6542 6163 6b75 7044 6972 2f24 7365 ateBackupDir/$se\n-00002f50: 7269 6573 3e20 646f 6573 206e 6f74 2065 ries> does not e\n-00002f60: 7869 7422 5d2c 0a09 2020 2020 2020 272d xit\"],.. '-\n-00002f70: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). \n-00002f80: 756e 6c65 7373 202d 6520 2224 6973 6f6c unless -e \"$isol\n-00002f90: 6174 6542 6163 6b75 7044 6972 2f24 7365 ateBackupDir/$se\n-00002fa0: 7269 6573 223b 0a24 7072 4c6f 672d 3e70 ries\";.$prLog->p\n-00002fb0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00002fc0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n-00002fd0: 7227 203d 3e20 5b22 6469 7265 6374 6f72 r' => [\"director\n-00002fe0: 7920 3c24 6261 636b 7570 4469 722f 2473 y <$backupDir/$s\n-00002ff0: 6572 6965 733e 2064 6f65 7320 6e6f 7420 eries> does not \n-00003000: 6578 6974 225d 2c0a 0920 2020 2020 2027 exit\"],.. '\n-00003010: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n-00003020: 2075 6e6c 6573 7320 2d65 2022 2462 6163 unless -e \"$bac\n-00003030: 6b75 7044 6972 2f24 7365 7269 6573 223b kupDir/$series\";\n-00003040: 0a0a 6966 2028 246d 6f76 6529 0a7b 0a20 ..if ($move).{. \n-00003050: 2020 206d 7920 2464 3120 3d20 2873 7461 my $d1 = (sta\n-00003060: 7428 2224 6973 6f6c 6174 6542 6163 6b75 t(\"$isolateBacku\n-00003070: 7044 6972 2f24 7365 7269 6573 2229 295b pDir/$series\"))[\n-00003080: 305d 3b0a 2020 2020 6d79 2024 6432 203d 0];. my $d2 =\n-00003090: 2028 7374 6174 2822 2462 6163 6b75 7044 (stat(\"$backupD\n-000030a0: 6972 2f24 7365 7269 6573 2229 295b 305d ir/$series\"))[0]\n-000030b0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr\n-000030c0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000030d0: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' =\n-000030e0: 3e20 5b22 6973 6f6c 6174 6564 4261 636b > [\"isolatedBack\n-000030f0: 7570 4469 7220 3c24 6973 6f6c 6174 6542 upDir <$isolateB\n-00003100: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series\n-00003110: 3e20 616e 6420 2220 2e0a 0909 2020 2262 > and \" .... \"b\n-00003120: 6163 6b75 7044 6972 203c 2462 6163 6b75 ackupDir <$backu\n-00003130: 7044 6972 2f24 7365 7269 6573 3e20 6172 pDir/$series> ar\n-00003140: 6520 6e6f 7420 6f6e 2074 6865 2073 616d e not on the sam\n-00003150: 6520 6669 6c65 7379 7374 656d 222c 0a09 e filesystem\",..\n-00003160: 0909 2020 2020 2022 7573 6167 6520 6f66 .. \"usage of\n-00003170: 206f 7074 696f 6e20 2d2d 6d6f 7665 2069 option --move i\n-00003180: 7320 6e6f 7420 7375 7070 706f 7274 6564 s not suppported\n-00003190: 225d 2c0a 0909 2020 272d 6578 6974 2720 \"],... '-exit' \n-000031a0: 3d3e 2031 290a 0969 6620 2464 3120 213d => 1)..if $d1 !=\n-000031b0: 2024 6432 3b0a 7d0a 0a23 0a23 2063 6f70 $d2;.}..#.# cop\n-000031c0: 7920 6461 7461 2066 726f 6d20 6973 6f6c y data from isol\n-000031d0: 6174 6564 2062 6163 6b75 7020 746f 2062 ated backup to b\n-000031e0: 6163 6b75 7044 6972 0a23 0a24 7072 4c6f ackupDir.#.$prLo\n-000031f0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00003200: 203d 3e20 2749 272c 0a09 2020 2020 2020 => 'I',.. \n-00003210: 272d 7374 7227 203d 3e20 5b22 636f 7079 '-str' => [\"copy\n-00003220: 696e 6720 6461 7461 202e 202e 202e 225d ing data . . .\"]\n-00003230: 293b 0a0a 6d79 2024 643b 0a66 6f72 6561 );..my $d;.forea\n-00003240: 6368 2024 6420 2840 6973 6f6c 6174 4261 ch $d (@isolatBa\n-00003250: 636b 7570 7329 0a7b 0a20 2020 2024 7072 ckups).{. $pr\n-00003260: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00003270: 6427 203d 3e20 2749 272c 0a09 0920 2027 d' => 'I',... '\n-00003280: 2d73 7472 2720 3d3e 205b 2263 6f70 7969 -str' => [\"copyi\n-00003290: 6e67 203c 2469 736f 6c61 7465 4261 636b ng <$isolateBack\n-000032a0: 7570 4469 722f 2473 6572 6965 732f 2464 upDir/$series/$d\n-000032b0: 3e20 746f 2022 202e 0a09 0909 2020 2020 > to \" ..... \n-000032c0: 2022 3c24 6261 636b 7570 4469 722f 2473 \"<$backupDir/$s\n-000032d0: 6572 6965 733e 225d 290a 0969 6620 2476 eries>\"])..if $v\n-000032e0: 6572 626f 7365 3b0a 0a20 2020 2069 6620 erbose;.. if \n-000032f0: 2824 6d6f 7665 290a 2020 2020 7b0a 0926 ($move). {..&\n-00003300: 3a3a 6d76 436f 6d6d 2822 2469 736f 6c61 ::mvComm(\"$isola\n-00003310: 7465 4261 636b 7570 4469 722f 2473 6572 teBackupDir/$ser\n-00003320: 6965 732f 2464 2220 3d3e 2022 2462 6163 ies/$d\" => \"$bac\n-00003330: 6b75 7044 6972 2f24 7365 7269 6573 222c kupDir/$series\",\n-00003340: 0a09 0920 2022 2474 6d70 6469 722f 7374 ... \"$tmpdir/st\n-00003350: 6275 4d65 7267 652d 222c 2024 7072 4c6f buMerge-\", $prLo\n-00003360: 6729 3b0a 2020 2020 7d0a 2020 2020 656c g);. }. el\n-00003370: 7365 0a20 2020 207b 0a09 263a 3a63 6f70 se. {..&::cop\n-00003380: 7944 6972 2822 2469 736f 6c61 7465 4261 yDir(\"$isolateBa\n-00003390: 636b 7570 4469 722f 2473 6572 6965 732f ckupDir/$series/\n-000033a0: 2464 2220 3d3e 2022 2462 6163 6b75 7044 $d\" => \"$backupD\n-000033b0: 6972 2f24 7365 7269 6573 222c 0a09 0920 ir/$series\",... \n-000033c0: 2020 2224 746d 7064 6972 2f73 7462 754d \"$tmpdir/stbuM\n-000033d0: 6572 6765 2d22 2c20 2470 724c 6f67 2c20 erge-\", $prLog, \n-000033e0: 3029 3b0a 2020 2020 7d0a 7d0a 230a 2320 0);. }.}.#.# \n-000033f0: 636f 7079 2028 616e 6420 6368 6563 6b20 copy (and check \n-00003400: 666f 7220 6e75 6d62 6572 696e 6729 206c for numbering) l\n-00003410: 696e 6b46 726f 6d20 6669 6c65 7320 6261 inkFrom files ba\n-00003420: 636b 2074 6f20 7265 6665 7265 6e63 6520 ck to reference \n-00003430: 6469 7265 6374 6f72 790a 230a 0a75 6e6c directory.#..unl\n-00003440: 6573 7320 2824 736b 6970 5379 6e63 290a ess ($skipSync).\n-00003450: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr\n-00003460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00003470: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' =\n-00003480: 3e20 5b22 7379 6e63 696e 6720 2e2e 2e22 > [\"syncing ...\"\n-00003490: 5d29 3b0a 2020 2020 7379 7374 656d 2022 ]);. system \"\n-000034a0: 2f62 696e 2f73 796e 6322 3b0a 7d0a 0a24 /bin/sync\";.}..$\n-000034b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-000034c0: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. \n-000034d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-000034e0: 6669 6e69 7368 6564 2063 6f70 7969 6e67 finished copying\n-000034f0: 2064 6174 6122 2c0a 0909 0920 2270 6c65 data\",.... \"ple\n-00003500: 6173 6520 7275 6e22 2c0a 0909 0920 225c ase run\",.... \"\\\n-00003510: 7473 746f 7265 4261 636b 7570 5570 6461 tstoreBackupUpda\n-00003520: 7465 4261 636b 7570 2e70 6c20 2d62 205c teBackup.pl -b \\\n-00003530: 2224 6261 636b 7570 4469 725c 2222 5d29 \"$backupDir\\\"\"])\n-00003540: 3b0a 0a0a 6578 6974 2030 3b0a 0a0a 2323 ;...exit 0;...##\n-00003550: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003560: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003570: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00003580: 0a73 7562 2072 6561 644c 696e 6b46 726f .sub readLinkFro\n-00003590: 6d45 6e74 7269 6573 0a7b 0a20 2020 206d mEntries.{. m\n-000035a0: 7920 2824 6469 722c 2024 7072 4c6f 6729 y ($dir, $prLog)\n-000035b0: 203d 2040 5f3b 0a0a 2020 2020 6c6f 6361 = @_;.. loca\n-000035c0: 6c20 2a44 4952 3b0a 2020 2020 6d79 2024 l *DIR;. my $\n-000035d0: 6420 3d20 2224 6469 722f 2e73 746f 7265 d = \"$dir/.store\n-000035e0: 4261 636b 7570 4c69 6e6b 7322 3b0a 2020 BackupLinks\";. \n-000035f0: 2020 6f70 656e 6469 7228 4449 522c 2024 opendir(DIR, $\n-00003600: 6429 206f 720a 0924 7072 4c6f 672d 3e70 d) or..$prLog->p\n-00003610: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00003620: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-00003630: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-00003640: 6f70 656e 6469 7220 3c24 6469 723e 225d opendir <$dir>\"]\n-00003650: 2c0a 0909 2020 2020 2020 272d 6164 6427 ,... '-add'\n-00003660: 203d 3e20 5b5f 5f46 494c 455f 5f2c 205f => [__FILE__, _\n-00003670: 5f4c 494e 455f 5f5d 2c0a 0909 2020 2020 _LINE__],... \n-00003680: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1);\n-00003690: 0a20 2020 206d 7920 2825 6c69 6e6b 4672 . my (%linkFr\n-000036a0: 6f6d 2c20 2465 6e74 7279 293b 0a20 2020 om, $entry);. \n-000036b0: 206d 7920 2463 6f75 6e74 203d 2030 3b0a my $count = 0;.\n-000036c0: 2020 2020 7768 696c 6520 2824 656e 7472 while ($entr\n-000036d0: 7920 3d20 7265 6164 6469 7220 4449 5229 y = readdir DIR)\n-000036e0: 0a20 2020 207b 0a09 6966 2028 2465 6e74 . {..if ($ent\n-000036f0: 7279 203d 7e20 2f5c 416c 696e 6b46 726f ry =~ /\\AlinkFro\n-00003700: 6d5c 642b 5c5a 2f29 0a09 7b0a 0920 2020 m\\d+\\Z/)..{.. \n-00003710: 2024 636f 756e 742b 2b3b 0a09 2020 2020 $count++;.. \n-00003720: 6c6f 6361 6c20 2a46 494c 453b 0a09 2020 local *FILE;.. \n-00003730: 2020 6f70 656e 2846 494c 452c 2027 3c27 open(FILE, '<'\n-00003740: 2c20 2224 642f 2465 6e74 7279 2229 206f , \"$d/$entry\") o\n-00003750: 720a 0909 2470 724c 6f67 2d3e 7072 696e r...$prLog->prin\n-00003760: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00003770: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-00003780: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => [\"cannot op\n-00003790: 656e 6469 7220 3c24 642f 2465 6e74 7279 endir <$d/$entry\n-000037a0: 3e22 5d2c 0a09 0909 2020 2020 2020 272d >\"],.... '-\n-000037b0: 6164 6427 203d 3e20 5b5f 5f46 494c 455f add' => [__FILE_\n-000037c0: 5f2c 205f 5f4c 494e 455f 5f5d 2c0a 0909 _, __LINE__],...\n-000037d0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-000037e0: 3e20 3129 3b0a 0920 2020 206d 7920 246c > 1);.. my $l\n-000037f0: 203d 203c 4649 4c45 3e3b 0a09 2020 2020 = ;.. \n-00003800: 6368 6f6d 7020 246c 3b0a 0920 2020 2024 chomp $l;.. $\n-00003810: 6c69 6e6b 4672 6f6d 7b24 6c7d 203d 2024 linkFrom{$l} = $\n-00003820: 656e 7472 793b 0a09 2020 2020 636c 6f73 entry;.. clos\n-00003830: 6528 4649 4c45 293b 0a09 7d0a 2020 2020 e(FILE);..}. \n-00003840: 7d0a 2020 2020 636c 6f73 6564 6972 2844 }. closedir(D\n-00003850: 4952 293b 0a0a 2020 2020 7265 7475 726e IR);.. return\n-00003860: 205c 256c 696e 6b46 726f 6d2c 2024 636f \\%linkFrom, $co\n-00003870: 756e 743b 0a7d 0a unt;.}.\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 6572 6765 4973 6f6c 6174 6564 4261 pMergeIsolatedBa\n+00000040: 636b 7570 0a ckup.\n"}, {"source1": "./usr/bin/storeBackupMount", "source2": "./usr/bin/storeBackupMount", "has_internal_linenos": true, "unified_diff": "@@ -1,1486 +1,4 @@\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 3232 290a 2320 2020 2020 2020 4-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a75 7365 2073 7472 6963 743b 0a75 ;..use strict;.u\n-00000330: 7365 204e 6574 3a3a 5069 6e67 3b0a 0a0a se Net::Ping;...\n-00000340: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. \n-00000350: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi\n-00000360: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir\n-00000370: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D\n-00000380: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein \n-00000390: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol\n-000003a0: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis\n-000003b0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i\n-000003c0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). \n-000003d0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f\n-000003e0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my \n-000003f0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink\n-00000400: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i\n-00000410: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link,\n-00000420: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne \"/\")..\n-00000430: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~\n-00000440: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\\/]+$/$link\n-00000450: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e\n-00000460: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi\n-00000470: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. \n-00000480: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $\n-00000490: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi\n-000004a0: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$\n-000004b0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = \"/$file\";\n-000004c0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-000004d0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD\n-000004e0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR \"<$file> doe\n-000004f0: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000500: 7469 6e67 215c 6e22 3b0a 2020 2020 2020 ting!\\n\";. \n-00000510: 2020 504f 5349 583a 3a5f 6578 6974 2032 POSIX::_exit 2\n-00000520: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di\n-00000530: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= \"/../lib\"; \n-00000540: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad\n-00000550: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth\n-00000560: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old\n-00000570: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-00000580: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old\n-00000590: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd\n-000005a0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {..\n-000005b0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b\n-000005c0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $\n-000005d0: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $\n-000005e0: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return\n-000005f0: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir(\n-00000600: 2224 6162 7344 6972 2466 696c 6522 2929 \"$absDir$file\"))\n-00000610: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-00000620: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-00000630: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR \"<$dir> doe\n-00000640: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000650: 7469 6e67 5c6e 223b 0a20 2020 2020 2020 ting\\n\";. \n-00000660: 2050 4f53 4958 3a3a 5f65 7869 7420 323b POSIX::_exit 2;\n-00000670: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl\n-00000680: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. \n-00000690: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift\n-000006a0: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return ('\n-000006b0: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles\n-000006c0: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\\//)\n-000006d0: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa\n-000006e0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname..\n-000006f0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f\n-00000700: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ \n-00000710: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\\/(.*)$/s;\n-00000720: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' \n-00000730: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq '');\n-00000740: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000750: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls\n-00000760: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename.\n-00000770: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir\n-00000780: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my (\n-00000790: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = &\n-000007a0: 6c69 6250 6174 6828 2430 293b 0a75 6e73 libPath($0);.uns\n-000007b0: 6869 6674 2040 494e 432c 2022 2472 6571 hift @INC, \"$req\n-000007c0: 223b 0a0a 0a72 6571 7569 7265 2027 6368 \";...require 'ch\n-000007d0: 6563 6b50 6172 616d 322e 706c 273b 0a72 eckParam2.pl';.r\n-000007e0: 6571 7569 7265 2027 6368 6563 6b4f 626a equire 'checkObj\n-000007f0: 5061 722e 706c 273b 0a72 6571 7569 7265 Par.pl';.require\n-00000800: 2027 7072 4c6f 672e 706c 273b 0a72 6571 'prLog.pl';.req\n-00000810: 7569 7265 2027 666f 726b 5072 6f63 2e70 uire 'forkProc.p\n-00000820: 6c27 3b0a 7265 7175 6972 6520 2764 6174 l';.require 'dat\n-00000830: 6554 6f6f 6c73 2e70 6c27 3b0a 7265 7175 eTools.pl';.requ\n-00000840: 6972 6520 2776 6572 7369 6f6e 2e70 6c27 ire 'version.pl'\n-00000850: 3b0a 7265 7175 6972 6520 2766 696c 6544 ;.require 'fileD\n-00000860: 6972 2e70 6c27 3b0a 0a24 6d61 696e 3a3a ir.pl';..$main::\n-00000870: 6578 6974 203d 2030 3b20 2020 2020 2020 exit = 0; \n-00000880: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000890: 2020 2020 2020 2020 2320 6578 6974 2073 # exit s\n-000008a0: 7461 7475 730a 0a6d 7920 2474 6d70 6469 tatus..my $tmpdi\n-000008b0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; \n-000008c0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau\n-000008d0: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir\n-000008e0: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR'\n-000008f0: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN\n-00000900: 567b 2754 4d50 4449 5227 7d3b 0a0a 3d68 V{'TMPDIR'};..=h\n-00000910: 6561 6431 204e 414d 450a 0a4d 6f75 6e74 ead1 NAME..Mount\n-00000920: 7320 6669 6c65 2073 7973 7465 6d73 2028 s file systems (\n-00000930: 6465 6669 6e65 6420 696e 202f 6574 632f defined in /etc/\n-00000940: 6673 7461 6229 2061 6e64 2073 7461 7274 fstab) and start\n-00000950: 7320 7374 6f72 6542 6163 6b75 700a 7265 s storeBackup.re\n-00000960: 6c61 7465 6420 7072 6f67 7261 6d73 0a69 lated programs.i\n-00000970: 6620 796f 7520 7573 6520 636f 6d6d 616e f you use comman\n-00000980: 6420 6c69 6e65 2c20 7468 6520 6f72 6465 d line, the orde\n-00000990: 7220 6f66 2065 7865 6375 7469 6f6e 2064 r of execution d\n-000009a0: 6570 656e 6473 206f 6e20 7468 6520 6f72 epends on the or\n-000009b0: 6465 720a 6f66 2074 6865 202d 2d73 746f der.of the --sto\n-000009c0: 7265 4261 636b 7570 2a20 6f70 7469 6f6e reBackup* option\n-000009d0: 730a 6966 2079 6f75 2075 7365 2074 6865 s.if you use the\n-000009e0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f\n-000009f0: 696c 652c 2074 6865 206f 6465 7220 6f66 ile, the oder of\n-00000a00: 2065 7865 6375 7469 6f6e 2064 6570 656e execution depen\n-00000a10: 6473 206f 6e0a 6f70 7469 6f6e 2027 6f72 ds on.option 'or\n-00000a20: 6465 724f 6645 7865 6375 7469 6f6e 270a derOfExecution'.\n-00000a30: 0a3d 6865 6164 3120 5359 4e4f 5053 4953 .=head1 SYNOPSIS\n-00000a40: 0a0a 2020 2020 2020 2020 7374 6f72 6542 .. storeB\n-00000a50: 6163 6b75 704d 6f75 6e74 2e70 6c20 2d2d ackupMount.pl --\n-00000a60: 6865 6c70 0a6f 720a 2020 2020 2020 2020 help.or. \n-00000a70: 7374 6f72 6542 6163 6b75 704d 6f75 6e74 storeBackupMount\n-00000a80: 2e70 6c20 2d67 2063 6f6e 6669 6746 696c .pl -g configFil\n-00000a90: 650a 6f72 0a20 2020 2020 2020 2073 746f e.or. sto\n-00000aa0: 7265 4261 636b 7570 4d6f 756e 742e 706c reBackupMount.pl\n-00000ab0: 202d 6620 636f 6e66 6967 4669 6c65 0a6f -f configFile.o\n-00000ac0: 720a 0973 746f 7265 4261 636b 7570 4d6f r..storeBackupMo\n-00000ad0: 756e 742e 706c 205b 2d73 2073 6572 7665 unt.pl [-s serve\n-00000ae0: 7273 5d20 5b2d 645d 205b 2d6c 206c 6f67 rs] [-d] [-l log\n-00000af0: 4669 6c65 0a09 2020 2020 2020 205b 2d2d File.. [--\n-00000b00: 7375 7070 7265 7373 5469 6d65 5d20 5b2d suppressTime] [-\n-00000b10: 6d20 6d61 7846 696c 656c 656e 5d0a 0920 m maxFilelen].. \n-00000b20: 2020 2020 2020 5b5b 2d6e 206e 6f4f 664f [[-n noOfO\n-00000b30: 6c64 4669 6c65 735d 207c 205b 2d2d 7361 ldFiles] | [--sa\n-00000b40: 7665 4c6f 6773 5d5d 0a09 2020 2020 2020 veLogs]].. \n-00000b50: 205b 2d2d 636f 6d70 7265 7373 5769 7468 [--compressWith\n-00000b60: 2063 6f6d 7072 6573 7370 726f 675d 5d0a compressprog]].\n-00000b70: 0920 2020 205b 2d2d 7374 6f72 6542 6163 . [--storeBac\n-00000b80: 6b75 7020 7374 6f72 6542 6163 6b75 702d kup storeBackup-\n-00000b90: 5061 7261 6d73 5d0a 0920 2020 205b 2d2d Params].. [--\n-00000ba0: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat\n-00000bb0: 6542 6163 6b75 7020 7374 6f72 6542 6163 eBackup storeBac\n-00000bc0: 6b75 7055 7064 6174 6542 6163 6b75 702d kupUpdateBackup-\n-00000bd0: 5061 7261 6d73 5d0a 0920 2020 205b 2d2d Params].. [--\n-00000be0: 7374 6f72 6542 6163 6b75 7043 6865 636b storeBackupCheck\n-00000bf0: 4261 636b 7570 2073 746f 7265 4261 636b Backup storeBack\n-00000c00: 7570 4368 6563 6b42 6163 6b75 702d 5061 upCheckBackup-Pa\n-00000c10: 7261 6d73 5d0a 0920 2020 205b 2d2d 7374 rams].. [--st\n-00000c20: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo\n-00000c30: 7572 6365 2073 746f 7265 4261 636b 7570 urce storeBackup\n-00000c40: 4368 6563 6b53 6f75 7263 652d 5061 7261 CheckSource-Para\n-00000c50: 6d73 5d0a 0920 2020 205b 2d2d 7374 6f72 ms].. [--stor\n-00000c60: 6542 6163 6b75 7044 656c 2073 746f 7265 eBackupDel store\n-00000c70: 4261 636b 7570 4465 6c2d 5061 7261 6d73 BackupDel-Params\n-00000c80: 5d0a 0920 2020 205b 2d2d 7072 696e 7441 ].. [--printA\n-00000c90: 6e64 5374 6f70 5d20 5b2d 6b20 6b69 6c6c ndStop] [-k kill\n-00000ca0: 5469 6d65 5d20 5b2d 5420 746d 7064 6972 Time] [-T tmpdir\n-00000cb0: 5d20 5b6d 6f75 6e74 506f 696e 7473 2e2e ] [mountPoints..\n-00000cc0: 2e5d 0a0a 3d68 6561 6431 2044 4553 4352 .]..=head1 DESCR\n-00000cd0: 4950 5449 4f4e 0a0a 5468 6973 2073 6372 IPTION..This scr\n-00000ce0: 6970 7420 646f 6573 2074 6865 2066 6f6c ipt does the fol\n-00000cf0: 6c6f 7769 6e67 3a0a 0a3d 6f76 6572 2034 lowing:..=over 4\n-00000d00: 0a0a 3d69 7465 6d20 2d20 6368 6563 6b73 ..=item - checks\n-00000d10: 2061 6e20 6e66 7320 7365 7276 6572 2077 an nfs server w\n-00000d20: 6974 6820 7069 6e67 0a0a 3d69 7465 6d20 ith ping..=item \n-00000d30: 2d20 6d6f 756e 7473 2074 6861 7420 7365 - mounts that se\n-00000d40: 7276 6572 2076 6961 2061 206c 6973 7420 rver via a list \n-00000d50: 6f66 206d 6f75 6e74 2070 6f69 6e74 730a of mount points.\n-00000d60: 0a3d 6974 656d 202d 2073 7461 7274 7320 .=item - starts \n-00000d70: 7374 6f72 6542 6163 6b75 7020 2877 6974 storeBackup (wit\n-00000d80: 6820 6120 636f 6e66 6967 2066 696c 6529 h a config file)\n-00000d90: 0a0a 3d69 7465 6d20 2d20 756d 6f75 6e74 ..=item - umount\n-00000da0: 7320 7468 6174 2073 6572 7665 720a 0a3d s that server..=\n-00000db0: 6261 636b 0a0a 3d68 6561 6431 204f 5054 back..=head1 OPT\n-00000dc0: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..=\n-00000dd0: 6974 656d 2042 3c2d 2d68 656c 703e 0a0a item B<--help>..\n-00000de0: 2020 2020 7368 6f77 2074 6869 7320 6865 show this he\n-00000df0: 6c70 0a0a 3d69 7465 6d20 423c 2d2d 6765 lp..=item B<--ge\n-00000e00: 6e65 7261 7465 3e2c 2042 3c2d 673e 0a0a nerate>, B<-g>..\n-00000e10: 2020 2020 6765 6e65 7261 7465 2061 2074 generate a t\n-00000e20: 656d 706c 6174 6520 6f66 2074 6865 2063 emplate of the c\n-00000e30: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n-00000e40: 650a 0a3d 6974 656d 2042 3c2d 2d66 696c e..=item B<--fil\n-00000e50: 653e 2c20 423c 2d66 3e0a 0a20 2020 2063 e>, B<-f>.. c\n-00000e60: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n-00000e70: 6520 2869 6e73 7465 6164 206f 6620 6f72 e (instead of or\n-00000e80: 2061 6464 6974 696f 6e61 6c6c 7920 746f additionally to\n-00000e90: 206f 7074 696f 6e73 0a20 2020 206f 6e20 options. on \n-00000ea0: 636f 6d6d 616e 6420 6c69 6e65 290a 0a3d command line)..=\n-00000eb0: 6974 656d 2042 3c2d 2d73 6572 7665 7273 item B<--servers\n-00000ec0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 6e61 >, B<-s>.. na\n-00000ed0: 6d65 2873 2920 6f72 2069 7020 6164 6472 me(s) or ip addr\n-00000ee0: 6573 7328 6573 2920 6f66 2074 6865 206e ess(es) of the n\n-00000ef0: 6673 2073 6572 7665 7228 7329 0a20 2020 fs server(s). \n-00000f00: 2054 6869 7320 6f70 7469 6f6e 2063 616e This option can\n-00000f10: 2062 6520 7265 7065 6174 6564 206d 756c be repeated mul\n-00000f20: 7469 706c 6520 7469 6d65 730a 0a3d 6974 tiple times..=it\n-00000f30: 656d 2042 3c2d 2d64 6562 7567 3e2c 2042 em B<--debug>, B\n-00000f40: 3c2d 643e 0a0a 2020 2020 6765 6e65 7261 <-d>.. genera\n-00000f50: 7465 2073 6f6d 6520 6465 6275 6720 6d65 te some debug me\n-00000f60: 7373 6167 6573 0a0a 3d69 7465 6d20 423c ssages..=item B<\n-00000f70: 2d2d 6c6f 6746 696c 653e 2c20 423c 2d6c --logFile>, B<-l\n-00000f80: 3e0a 0a20 2020 206c 6f67 4669 6c65 2066 >.. logFile f\n-00000f90: 6f72 2074 6869 7320 7072 6f63 6573 732e or this process.\n-00000fa0: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is \n-00000fb0: 5354 444f 5554 2e0a 0a3d 6974 656d 2042 STDOUT...=item B\n-00000fc0: 3c2d 2d73 7570 7072 6573 7354 696d 653e <--suppressTime>\n-00000fd0: 0a0a 2020 2020 7375 7070 7265 7373 206f .. suppress o\n-00000fe0: 7574 7075 7420 6f66 2074 696d 6520 696e utput of time in\n-00000ff0: 206c 6f67 6669 6c65 0a0a 3d69 7465 6d20 logfile..=item \n-00001000: 423c 2d2d 6d61 7846 696c 656c 656e 3e2c B<--maxFilelen>,\n-00001010: 2042 3c2d 6d3e 0a0a 2020 2020 6d61 7869 B<-m>.. maxi\n-00001020: 6d61 6c20 6c65 6e67 7468 206f 6620 6c6f mal length of lo\n-00001030: 6720 6669 6c65 2c20 6465 6661 756c 7420 g file, default \n-00001040: 3d20 3165 360a 0a3d 6974 656d 2042 3c2d = 1e6..=item B<-\n-00001050: 2d6e 6f4f 664f 6c64 4669 6c65 733e 2c20 -noOfOldFiles>, \n-00001060: 423c 2d6e 3e0a 0a20 2020 206e 756d 6265 B<-n>.. numbe\n-00001070: 7220 6f66 206f 6c64 206c 6f67 2066 696c r of old log fil\n-00001080: 6573 2c20 6465 6661 756c 7420 3d20 350a es, default = 5.\n-00001090: 0a3d 6974 656d 2042 3c2d 2d73 6176 654c .=item B<--saveL\n-000010a0: 6f67 733e 0a0a 2020 2020 7361 7665 206c ogs>.. save l\n-000010b0: 6f67 2066 696c 6573 2077 6974 6820 6461 og files with da\n-000010c0: 7465 2061 6e64 2074 696d 6520 696e 7374 te and time inst\n-000010d0: 6561 6420 6f66 2064 656c 6574 696e 6720 ead of deleting \n-000010e0: 7468 650a 2020 2020 6f6c 6420 2877 6974 the. old (wit\n-000010f0: 6820 5b2d 6e6f 4f66 4f6c 6446 696c 6573 h [-noOfOldFiles\n-00001100: 5d29 0a0a 3d69 7465 6d20 423c 2d2d 636f ])..=item B<--co\n-00001110: 6d70 7265 7373 5769 7468 3e0a 0a20 2020 mpressWith>.. \n-00001120: 2063 6f6d 7072 6573 7320 7361 7665 6420 compress saved \n-00001130: 6c6f 6720 6669 6c65 7320 2865 2e67 2e20 log files (e.g. \n-00001140: 7769 7468 2027 677a 6970 202d 3927 290a with 'gzip -9').\n-00001150: 2020 2020 6465 6661 756c 7420 6973 2027 default is '\n-00001160: 627a 6970 3227 0a20 2020 2054 6869 7320 bzip2'. This \n-00001170: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par\n-00001180: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line \n-00001190: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura\n-000011a0: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an\n-000011b0: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t\n-000011c0: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i\n-000011d0: 7465 6d20 423c 2d2d 7374 6f72 6542 6163 tem B<--storeBac\n-000011e0: 6b75 703e 0a0a 2020 2020 2020 7275 6e20 kup>.. run \n-000011f0: 7374 6f72 6542 6163 6b75 702e 706c 0a20 storeBackup.pl. \n-00001200: 2020 2020 2075 7365 2074 6869 7320 7061 use this pa\n-00001210: 7261 6d65 7465 7220 6173 206f 7074 696f rameter as optio\n-00001220: 6e73 2066 6f72 2073 746f 7265 4261 636b ns for storeBack\n-00001230: 7570 2e70 6c0a 2020 2020 2020 5468 6973 up.pl. This\n-00001240: 2070 6172 616d 6574 6572 2069 7320 7061 parameter is pa\n-00001250: 7273 6564 206c 696b 6520 7468 6520 6c69 rsed like the li\n-00001260: 6e65 2069 6e20 7468 650a 2020 2020 2020 ne in the. \n-00001270: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi\n-00001280: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally \n-00001290: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted\n-000012a0: 2c0a 2020 2020 2020 6567 2e20 272d 6620 ,. eg. '-f \n-000012b0: 7374 6275 2e63 6f6e 6627 0a0a 3d69 7465 stbu.conf'..=ite\n-000012c0: 6d20 423c 2d2d 7374 6f72 6542 6163 6b75 m B<--storeBacku\n-000012d0: 7055 7064 6174 6542 6163 6b75 703e 0a0a pUpdateBackup>..\n-000012e0: 2020 2020 2020 7275 6e20 7374 6f72 6542 run storeB\n-000012f0: 6163 6b75 7055 7064 6174 6542 6163 6b75 ackupUpdateBacku\n-00001300: 702e 706c 0a20 2020 2020 2075 7365 2074 p.pl. use t\n-00001310: 6869 7320 7061 7261 6d65 7465 7220 6173 his parameter as\n-00001320: 206f 7074 696f 6e73 2066 6f72 2073 746f options for sto\n-00001330: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa\n-00001340: 636b 7570 2e70 6c0a 2020 2020 2020 5468 ckup.pl. Th\n-00001350: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is \n-00001360: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the \n-00001370: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. \n-00001380: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration \n-00001390: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall\n-000013a0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot\n-000013b0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '-\n-000013c0: 6220 2f62 6163 6b75 7044 6972 270a 0a3d b /backupDir'..=\n-000013d0: 6974 656d 2042 3c2d 2d73 746f 7265 4261 item B<--storeBa\n-000013e0: 636b 7570 4368 6563 6b42 6163 6b75 703e ckupCheckBackup>\n-000013f0: 0a0a 2020 2020 2020 7275 6e20 7374 6f72 .. run stor\n-00001400: 6542 6163 6b75 7043 6865 636b 4261 636b eBackupCheckBack\n-00001410: 7570 2e70 6c0a 2020 2020 2020 7573 6520 up.pl. use \n-00001420: 7468 6973 2070 6172 616d 6574 6572 2061 this parameter a\n-00001430: 7320 6f70 7469 6f6e 7320 666f 7220 7374 s options for st\n-00001440: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa\n-00001450: 636b 7570 2e70 6c0a 2020 2020 2020 5468 ckup.pl. Th\n-00001460: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is \n-00001470: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the \n-00001480: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. \n-00001490: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration \n-000014a0: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall\n-000014b0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot\n-000014c0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '-\n-000014d0: 6320 2f62 6163 6b75 7044 6972 270a 0a3d c /backupDir'..=\n-000014e0: 6974 656d 2042 3c2d 2d73 746f 7265 4261 item B<--storeBa\n-000014f0: 636b 7570 4368 6563 6b53 6f75 7263 653e ckupCheckSource>\n-00001500: 0a0a 2020 2020 2020 7275 6e20 7374 6f72 .. run stor\n-00001510: 6542 6163 6b75 7043 6865 636b 536f 7572 eBackupCheckSour\n-00001520: 6365 2e70 6c0a 2020 2020 2020 7573 6520 ce.pl. use \n-00001530: 7468 6973 2070 6172 616d 6574 6572 2061 this parameter a\n-00001540: 7320 6f70 7469 6f6e 7320 666f 7220 7374 s options for st\n-00001550: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo\n-00001560: 7572 6365 2e70 6c0a 2020 2020 2020 5468 urce.pl. Th\n-00001570: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is \n-00001580: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the \n-00001590: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. \n-000015a0: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration \n-000015b0: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall\n-000015c0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot\n-000015d0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '-\n-000015e0: 7320 2f68 6f6d 652f 626f 6220 2d62 202f s /home/bob -b /\n-000015f0: 6261 636b 7570 4469 7227 0a0a 3d69 7465 backupDir'..=ite\n-00001600: 6d20 423c 2d2d 7374 6f72 6542 6163 6b75 m B<--storeBacku\n-00001610: 7044 656c 3e0a 0a20 2020 2020 2072 756e pDel>.. run\n-00001620: 2073 746f 7265 4261 636b 7570 4465 6c2e storeBackupDel.\n-00001630: 706c 0a20 2020 2020 2075 7365 2074 6869 pl. use thi\n-00001640: 7320 7061 7261 6d65 7465 7220 6173 206f s parameter as o\n-00001650: 7074 696f 6e73 2066 6f72 2073 746f 7265 ptions for store\n-00001660: 4261 636b 7570 4465 6c2e 706c 0a20 2020 BackupDel.pl. \n-00001670: 2020 2054 6869 7320 7061 7261 6d65 7465 This paramete\n-00001680: 7220 6973 2070 6172 7365 6420 6c69 6b65 r is parsed like\n-00001690: 2074 6865 206c 696e 6520 696e 2074 6865 the line in the\n-000016a0: 0a20 2020 2020 2063 6f6e 6669 6775 7261 . configura\n-000016b0: 7469 6f6e 2066 696c 6520 616e 6420 6e6f tion file and no\n-000016c0: 726d 616c 6c79 2068 6173 2074 6f20 6265 rmally has to be\n-000016d0: 2071 756f 7465 642c 0a20 2020 2020 2065 quoted,. e\n-000016e0: 672e 2027 2d66 2073 7462 752e 636f 6e66 g. '-f stbu.conf\n-000016f0: 270a 0a3d 6974 656d 2042 3c2d 2d70 7269 '..=item B<--pri\n-00001700: 6e74 416e 6453 746f 703e 2c20 423c 2d70 ntAndStop>, B<-p\n-00001710: 3e0a 0a20 2020 2020 2070 7269 6e74 206f >.. print o\n-00001720: 7074 696f 6e73 2061 6e64 2073 746f 7020 ptions and stop \n-00001730: 7072 6f63 6573 7369 6e67 0a0a 3d69 7465 processing..=ite\n-00001740: 6d20 423c 2d2d 6b69 6c6c 5469 6d65 3e20 m B<--killTime> \n-00001750: 423c 2d6b 3e0a 0a20 2020 2074 696d 6520 B<-k>.. time \n-00001760: 756e 7469 6c20 616e 7920 6f66 2074 6865 until any of the\n-00001770: 2070 726f 6772 616d 7320 7374 6172 7465 programs starte\n-00001780: 6420 7769 6c6c 2062 6520 6b69 6c6c 6564 d will be killed\n-00001790: 2e0a 2020 2020 6465 6661 756c 7420 6973 .. default is\n-000017a0: 2033 3635 2064 6179 732e 0a20 2020 2074 365 days.. t\n-000017b0: 6865 2074 696d 6520 7261 6e67 6520 6861 he time range ha\n-000017c0: 7320 746f 2062 6520 7370 6563 6966 6965 s to be specifie\n-000017d0: 6420 696e 2066 6f72 6d61 7420 2764 686d d in format 'dhm\n-000017e0: 7327 2c20 652e 672e 0a20 2020 2031 3064 s', e.g.. 10d\n-000017f0: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days\n-00001800: 2061 6e64 2034 2068 6f75 7273 0a0a 3d69 and 4 hours..=i\n-00001810: 7465 6d20 423c 2d2d 746d 7064 6972 3e2c tem B<--tmpdir>,\n-00001820: 2042 3c2d 543e 0a0a 2020 2020 6469 7265 B<-T>.. dire\n-00001830: 6374 6f72 7920 666f 7220 7465 6d70 6f72 ctory for tempor\n-00001840: 6172 7920 6669 6c65 732c 2064 6566 6175 ary files, defau\n-00001850: 6c74 2069 7320 3c2f 746d 703e 0a0a 3d69 lt is ..=i\n-00001860: 7465 6d20 463c 6d6f 756e 7450 6f69 6e74 tem F.. List of \n-00001880: 6d6f 756e 7420 706f 696e 7473 206e 6565 mount points nee\n-00001890: 6465 6420 746f 2070 6572 666f 726d 2074 ded to perform t\n-000018a0: 6865 2062 6163 6b75 702e 0a20 2020 2054 he backup.. T\n-000018b0: 6869 7320 6d75 7374 2062 6520 6120 6c69 his must be a li\n-000018c0: 7374 206f 6620 7061 7468 7320 7768 6963 st of paths whic\n-000018d0: 6820 6861 7665 2074 6f20 6265 0a20 2020 h have to be. \n-000018e0: 2064 6566 696e 6564 2069 6e20 2f65 7463 defined in /etc\n-000018f0: 2f66 7374 6162 2e0a 2020 2020 2d0a 2020 /fstab.. -. \n-00001900: 2020 6966 2079 6f75 2061 6464 2027 726f if you add 'ro\n-00001910: 2c27 206f 7220 2772 772c 2720 746f 2074 ,' or 'rw,' to t\n-00001920: 6865 2062 6567 696e 6e69 6e67 206f 6620 he beginning of \n-00001930: 6120 6d6f 756e 740a 2020 2020 706f 696e a mount. poin\n-00001940: 742c 2079 6f75 2063 616e 206f 7665 7277 t, you can overw\n-00001950: 7269 7465 2074 6861 7420 6f70 7469 6f6e rite that option\n-00001960: 2073 6574 2069 6e20 2f65 7463 2f66 7374 set in /etc/fst\n-00001970: 6162 0a0a 2020 2020 6578 616d 706c 653a ab.. example:\n-00001980: 0a20 2020 2072 6f2c 2f66 696c 6553 7973 . ro,/fileSys\n-00001990: 7465 6d54 6f52 6561 640a 2020 2020 2020 temToRead. \n-000019a0: 2077 696c 6c20 6d6f 756e 7420 2f66 696c will mount /fil\n-000019b0: 6553 7973 7465 6d54 6f52 6561 6420 7265 eSystemToRead re\n-000019c0: 6164 206f 6e6c 792c 2065 7665 6e20 6966 ad only, even if\n-000019d0: 2074 6865 0a20 2020 2020 2020 636f 7272 the. corr\n-000019e0: 6573 706f 6e64 696e 6720 656e 7472 7920 esponding entry \n-000019f0: 696e 202f 6574 632f 6673 7461 6220 6d6f in /etc/fstab mo\n-00001a00: 756e 7473 2069 7320 7265 6164 2f77 7269 unts is read/wri\n-00001a10: 7465 0a0a 2020 2020 6f6e 6c79 2072 6f6f te.. only roo\n-00001a20: 7420 6973 2061 6c6c 6f77 6564 2074 6f20 t is allowed to \n-00001a30: 7573 6520 7468 6973 2066 6561 7475 7265 use this feature\n-00001a40: 210a 0a3d 6261 636b 0a0a 3d68 6561 6431 !..=back..=head1\n-00001a50: 2045 5849 5420 5354 4154 5553 0a0a 3d6f EXIT STATUS..=o\n-00001a60: 7665 7220 340a 0a3d 6974 656d 2030 202d ver 4..=item 0 -\n-00001a70: 3e20 6576 6572 7974 6869 6e67 2069 7320 > everything is \n-00001a80: 6f6b 0a0a 3d69 7465 6d20 3120 2d3e 2065 ok..=item 1 -> e\n-00001a90: 7272 6f72 2066 726f 6d20 6361 6c6c 6564 rror from called\n-00001aa0: 2070 726f 6772 616d 0a0a 3d69 7465 6d20 program..=item \n-00001ab0: 3220 2d3e 2065 7272 6f72 2066 726f 6d20 2 -> error from \n-00001ac0: 7374 6f72 6542 6163 6b75 704d 6f75 6e74 storeBackupMount\n-00001ad0: 0a0a 3d69 7465 6d20 3320 2d3e 2065 7272 ..=item 3 -> err\n-00001ae0: 6f72 2066 726f 6d20 626f 7468 2070 726f or from both pro\n-00001af0: 6772 616d 730a 0a3d 6261 636b 0a0a 3d68 grams..=back..=h\n-00001b00: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT..\n-00001b10: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20\n-00001b20: 3034 2d32 3032 3220 6279 2048 6569 6e7a 04-2022 by Heinz\n-00001b30: 2d4a 6f73 6566 2043 6c61 6573 2028 7365 -Josef Claes (se\n-00001b40: 6520 5245 4144 4d45 292e 0a50 7562 6c69 e README)..Publi\n-00001b50: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G\n-00001b60: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi\n-00001b70: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or \n-00001b80: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio\n-00001b90: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel\n-00001ba0: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te\n-00001bb0: 7874 2824 3029 3b0a 0a6d 7920 2474 656d xt($0);..my $tem\n-00001bc0: 706c 6174 6543 6f6e 6669 6746 696c 6520 plateConfigFile \n-00001bd0: 3d20 3c3c 454f 433b 0a23 2063 6f6e 6669 = <new('-name' =>\n-000029f0: 2024 702c 0a09 0927 2d63 6c5f 6f70 7469 $p,...'-cl_opti\n-00002a00: 6f6e 2720 3d3e 2022 2d2d 2470 222c 0a09 on' => \"--$p\",..\n-00002a10: 0927 2d71 756f 7465 4576 616c 2720 3d3e .'-quoteEval' =>\n-00002a20: 2027 7965 7327 2c0a 0909 272d 6366 5f6b 'yes',...'-cf_k\n-00002a30: 6579 2720 3d3e 2024 702c 0a09 0927 2d70 ey' => $p,...'-p\n-00002a40: 6172 616d 2720 3d3e 2027 7965 7327 293b aram' => 'yes');\n-00002a50: 0a7d 0a6d 7920 2443 6865 636b 5061 7220 .}.my $CheckPar \n-00002a60: 3d0a 2020 2020 4368 6563 6b50 6172 616d =. CheckParam\n-00002a70: 2d3e 6e65 7728 272d 616c 6c6f 774c 6973 ->new('-allowLis\n-00002a80: 7473 2720 3d3e 2027 7965 7327 2c0a 2020 ts' => 'yes',. \n-00002a90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002aa0: 2020 272d 6c69 7374 4d61 7070 696e 6727 '-listMapping'\n-00002ab0: 203d 3e20 276d 6f75 6e74 506f 696e 7473 => 'mountPoints\n-00002ac0: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. \n-00002ad0: 2020 2020 2020 2027 2d63 6f6e 6669 6746 '-configF\n-00002ae0: 696c 6527 203d 3e20 272d 6627 2c0a 0909 ile' => '-f',...\n-00002af0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [\n-00002b00: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00002b10: 6d65 2720 3d3e 2027 6865 6c70 272c 0a09 me' => 'help',..\n-00002b20: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00002b30: 696f 6e27 203d 3e20 272d 2d68 656c 7027 ion' => '--help'\n-00002b40: 292c 0a0a 2020 2020 2020 2020 2020 2020 ),.. \n-00002b50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002b60: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n-00002b70: 272d 6e61 6d65 2720 3d3e 2027 636f 6e66 '-name' => 'conf\n-00002b80: 6967 4669 6c65 272c 0a09 0909 0909 2020 igFile',...... \n-00002b90: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00002ba0: 3e20 272d 6627 2c0a 0909 0909 0920 2020 > '-f',...... \n-00002bb0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-00002bc0: 272d 2d66 696c 6527 2c0a 0909 0909 0920 '--file',...... \n-00002bd0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-00002be0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-00002bf0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no\n-00002c00: 7420 5b67 656e 6572 6174 655d 2729 2c0a t [generate]'),.\n-00002c10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002c20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002c30: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00002c40: 6d65 2720 3d3e 2027 6765 6e65 7261 7465 me' => 'generate\n-00002c50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00002c60: 5f6f 7074 696f 6e27 203d 3e20 272d 6727 _option' => '-g'\n-00002c70: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00002c80: 616c 6961 7327 203d 3e20 272d 2d67 656e alias' => '--gen\n-00002c90: 6572 6174 6527 2c0a 0909 0909 0920 2020 erate',...... \n-00002ca0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n-00002cb0: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o\n-00002cc0: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not \n-00002cd0: 5b63 6f6e 6669 6746 696c 655d 2729 2c0a [configFile]'),.\n-00002ce0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00002cf0: 272d 6e61 6d65 2720 3d3e 2027 7365 7276 '-name' => 'serv\n-00002d00: 6572 7327 2c0a 0909 0909 0920 2020 2027 ers',...... '\n-00002d10: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00002d20: 2d73 272c 0a09 0909 0909 2020 2020 272d -s',...... '-\n-00002d30: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00002d40: 7365 7276 6572 7327 2c0a 0909 0909 0920 servers',...... \n-00002d50: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-00002d60: 2773 6572 7665 7273 272c 0a09 0909 0909 'servers',......\n-00002d70: 2020 2020 272d 6d75 6c74 6970 6c65 2720 '-multiple' \n-00002d80: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... \n-00002d90: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-00002da0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-00002db0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00002dc0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',......\n-00002dd0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00002de0: 203d 3e20 272d 6427 2c0a 0909 0909 0920 => '-d',...... \n-00002df0: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00002e00: 3e20 272d 2d64 6562 7567 272c 0a09 0909 > '--debug',....\n-00002e10: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00002e20: 3d3e 2027 6465 6275 6727 2c0a 0909 0909 => 'debug',.....\n-00002e30: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n-00002e40: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n-00002e50: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio\n-00002e60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00002e70: 3e20 276c 6f67 4669 6c65 272c 0a09 0909 > 'logFile',....\n-00002e80: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00002e90: 6e27 203d 3e20 272d 6c27 2c0a 0909 0909 n' => '-l',.....\n-00002ea0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-00002eb0: 203d 3e20 272d 2d6c 6f67 4669 6c65 272c => '--logFile',\n-00002ec0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n-00002ed0: 6579 2720 3d3e 2027 6c6f 6746 696c 6527 ey' => 'logFile'\n-00002ee0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n-00002ef0: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),..\n-00002f00: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00002f10: 2d6e 616d 6527 203d 3e20 2773 7570 7072 -name' => 'suppr\n-00002f20: 6573 7354 696d 6527 2c0a 0909 0909 0920 essTime',...... \n-00002f30: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00002f40: 3d3e 2027 2d2d 7375 7070 7265 7373 5469 => '--suppressTi\n-00002f50: 6d65 272c 0a09 0909 0909 2020 2020 272d me',...... '-\n-00002f60: 6366 5f6b 6579 2720 3d3e 2027 7375 7070 cf_key' => 'supp\n-00002f70: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',......\n-00002f80: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe\n-00002f90: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n\n-00002fa0: 6f27 5d29 2c0a 0909 0909 4f70 7469 6f6e o']),.....Option\n-00002fb0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00002fc0: 2027 6d61 7846 696c 656c 656e 272c 0a09 'maxFilelen',..\n-00002fd0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00002fe0: 696f 6e27 203d 3e20 272d 6d27 2c0a 0909 ion' => '-m',...\n-00002ff0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00003000: 7327 203d 3e20 272d 2d6d 6178 4669 6c65 s' => '--maxFile\n-00003010: 6c65 6e27 2c0a 0909 0909 0920 2020 2027 len',...... '\n-00003020: 2d63 665f 6b65 7927 203d 3e20 276d 6178 -cf_key' => 'max\n-00003030: 4669 6c65 6c65 6e27 2c0a 0909 0909 0920 Filelen',...... \n-00003040: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-00003050: 2031 6536 2c0a 0909 0909 0920 2020 2027 1e6,...... '\n-00003060: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\\A\n-00003070: 5b65 5c64 5d2b 5c5a 272c 0a09 0909 0909 [e\\d]+\\Z',......\n-00003080: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00003090: 3e20 225b 6c6f 6746 696c 655d 2229 2c0a > \"[logFile]\"),.\n-000030a0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-000030b0: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4f66 '-name' => 'noOf\n-000030c0: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',......\n-000030d0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-000030e0: 203d 3e20 272d 6e27 2c0a 0909 0909 0920 => '-n',...... \n-000030f0: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00003100: 3e20 272d 2d6e 6f4f 664f 6c64 4669 6c65 > '--noOfOldFile\n-00003110: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n-00003120: 665f 6b65 7927 203d 3e20 276e 6f4f 664f f_key' => 'noOfO\n-00003130: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... \n-00003140: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-00003150: 2027 3527 2c0a 0909 0909 0920 2020 2027 '5',...... '\n-00003160: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\\A\n-00003170: 5c64 2b5c 5a27 2c0a 0909 0909 0920 2020 \\d+\\Z',...... \n-00003180: 2027 2d6f 6e6c 795f 6966 2720 3d3e 225b '-only_if' =>\"[\n-00003190: 6c6f 6746 696c 655d 2229 2c0a 2020 2020 logFile]\"),. \n-000031a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000031b0: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n-000031c0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-000031d0: 3d3e 2027 7361 7665 4c6f 6773 272c 0a09 => 'saveLogs',..\n-000031e0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-000031f0: 696f 6e27 203d 3e20 272d 2d73 6176 654c ion' => '--saveL\n-00003200: 6f67 7327 2c0a 0909 0909 0920 2020 2027 ogs',...... '\n-00003210: 2d63 665f 6b65 7927 203d 3e20 2773 6176 -cf_key' => 'sav\n-00003220: 654c 6f67 7327 2c0a 0909 0909 0920 2020 eLogs',...... \n-00003230: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2022 '-only_if' => \"\n-00003240: 5b6c 6f67 4669 6c65 5d22 2c0a 0909 0909 [logFile]\",.....\n-00003250: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS\n-00003260: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', '\n-00003270: 6e6f 275d 292c 0a20 2020 2020 2020 2020 no']),. \n-00003280: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003290: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n\n-000032a0: 6577 2827 2d6e 616d 6527 203d 3e20 2763 ew('-name' => 'c\n-000032b0: 6f6d 7072 6573 7357 6974 6827 2c0a 0909 ompressWith',...\n-000032c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-000032d0: 6f6e 2720 3d3e 2027 2d2d 636f 6d70 7265 on' => '--compre\n-000032e0: 7373 5769 7468 272c 0a09 0909 0909 2020 ssWith',...... \n-000032f0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-00003300: 636f 6d70 7265 7373 5769 7468 272c 0a09 compressWith',..\n-00003310: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-00003320: 7427 203d 3e20 2762 7a69 7032 272c 0a09 t' => 'bzip2',..\n-00003330: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE\n-00003340: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',..\n-00003350: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-00003360: 6627 203d 3e22 5b6c 6f67 4669 6c65 5d22 f' =>\"[logFile]\"\n-00003370: 292c 0a09 0909 0940 7072 6f67 4f70 7473 ),.....@progOpts\n-00003380: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00003390: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr\n-000033a0: 696e 7441 6e64 5374 6f70 272c 0a09 0909 intAndStop',....\n-000033b0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-000033c0: 6e27 203d 3e20 272d 7027 2c0a 0909 0909 n' => '-p',.....\n-000033d0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-000033e0: 203d 3e20 272d 2d70 7269 6e74 416e 6453 => '--printAndS\n-000033f0: 746f 7027 292c 0a09 0909 094f 7074 696f top'),.....Optio\n-00003400: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00003410: 3e20 276b 696c 6c54 696d 6527 2c0a 0909 > 'killTime',...\n-00003420: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00003430: 6f6e 2720 3d3e 2027 2d6b 272c 0a09 0909 on' => '-k',....\n-00003440: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-00003450: 2720 3d3e 2027 2d2d 6b69 6c6c 5469 6d65 ' => '--killTime\n-00003460: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-00003470: 5f6b 6579 2720 3d3e 2027 6b69 6c6c 5469 _key' => 'killTi\n-00003480: 6d65 272c 0a09 0909 0909 2020 2020 272d me',...... '-\n-00003490: 6465 6661 756c 7427 203d 3e20 2733 3635 default' => '365\n-000034a0: 6427 292c 0a09 0909 094f 7074 696f 6e2d d'),.....Option-\n-000034b0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-000034c0: 2774 6d70 6469 7227 2c0a 0909 0909 0920 'tmpdir',...... \n-000034d0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000034e0: 3d3e 2027 2d54 272c 0a09 0909 0909 2020 => '-T',...... \n-000034f0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00003500: 2027 2d2d 746d 7064 6972 272c 0a09 0909 '--tmpdir',....\n-00003510: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00003520: 3d3e 2027 746d 7044 6972 272c 0a09 0909 => 'tmpDir',....\n-00003530: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-00003540: 203d 3e20 2474 6d70 6469 7229 2c0a 2020 => $tmpdir),. \n-00003550: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003560: 2020 2020 2020 2020 2020 2020 2020 4f70 Op\n-00003570: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00003580: 2720 3d3e 2027 6d6f 756e 7450 6f69 6e74 ' => 'mountPoint\n-00003590: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n-000035a0: 665f 6b65 7927 203d 3e20 276d 6f75 6e74 f_key' => 'mount\n-000035b0: 506f 696e 7473 272c 0a09 0909 0909 2020 Points',...... \n-000035c0: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' =>\n-000035d0: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. \n-000035e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000035f0: 2020 2020 2020 2020 204f 7074 696f 6e2d Option-\n-00003600: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00003610: 276f 7264 6572 4f66 4578 6563 7574 696f 'orderOfExecutio\n-00003620: 6e27 2c0a 0909 0909 0920 2020 2027 2d63 n',...... '-c\n-00003630: 665f 6b65 7927 203d 3e20 276f 7264 6572 f_key' => 'order\n-00003640: 4f66 4578 6563 7574 696f 6e27 2c0a 0909 OfExecution',...\n-00003650: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-00003660: 2720 3d3e 205c 4070 726f 6773 2c0a 0909 ' => \\@progs,...\n-00003670: 0909 0920 2020 2027 2d6d 756c 7469 706c ... '-multipl\n-00003680: 6527 203d 3e20 2779 6573 2729 0a09 0909 e' => 'yes')....\n-00003690: 095d 293b 0a24 4368 6563 6b50 6172 2d3e .]);.$CheckPar->\n-000036a0: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' =>\n-000036b0: 205c 4041 5247 562c 0a20 2020 2020 2020 \\@ARGV,. \n-000036c0: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help\n-000036d0: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. \n-000036e0: 2020 2020 2020 2020 2020 2020 293b 0a0a );..\n-000036f0: 6d79 2024 4865 6c70 203d 203c 3c45 4f48 my $Help = <ge\n-000037a0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n-000037b0: 6865 6c70 2729 3b0a 0a64 6965 2022 2446 help');..die \"$F\n-000037c0: 756c 6c48 656c 7022 2069 6620 2468 656c ullHelp\" if $hel\n-000037d0: 703b 0a0a 6d79 2028 2561 7267 466f 7250 p;..my (%argForP\n-000037e0: 726f 6773 293b 0a6d 7920 2463 6f6e 6669 rogs);.my $confi\n-000037f0: 6746 696c 6520 3d20 2443 6865 636b 5061 gFile = $CheckPa\n-00003800: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00003810: 2827 636f 6e66 6967 4669 6c65 2729 3b0a ('configFile');.\n-00003820: 6d79 2024 6765 6e65 7261 7465 436f 6e66 my $generateConf\n-00003830: 6967 4669 6c65 203d 2024 4368 6563 6b50 igFile = $CheckP\n-00003840: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00003850: 7228 2767 656e 6572 6174 6527 293b 0a6d r('generate');.m\n-00003860: 7920 2473 6572 7665 7273 203d 2024 4368 y $servers = $Ch\n-00003870: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00003880: 7468 5061 7228 2773 6572 7665 7273 2729 thPar('servers')\n-00003890: 3b0a 6d79 2024 6465 6275 6720 3d20 2443 ;.my $debug = $C\n-000038a0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-000038b0: 6974 686f 7574 5061 7228 2764 6562 7567 ithoutPar('debug\n-000038c0: 2729 3b0a 6d79 2024 6c6f 6746 696c 6520 ');.my $logFile \n-000038d0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000038e0: 4f70 7457 6974 6850 6172 2827 6c6f 6746 OptWithPar('logF\n-000038f0: 696c 6527 293b 0a6d 7920 2477 6974 6854 ile');.my $withT\n-00003900: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check\n-00003910: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00003920: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT\n-00003930: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime\n-00003940: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? '\n-00003950: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my \n-00003960: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C\n-00003970: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00003980: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel\n-00003990: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl\n-000039a0: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP\n-000039b0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-000039c0: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles'\n-000039d0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs \n-000039e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-000039f0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s\n-00003a00: 6176 654c 6f67 7327 293b 0a6d 7920 2463 aveLogs');.my $c\n-00003a10: 6f6d 7072 6573 7357 6974 6820 3d20 2443 ompressWith = $C\n-00003a20: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00003a30: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress\n-00003a40: 5769 7468 2729 3b0a 666f 7265 6163 6820 With');.foreach \n-00003a50: 6d79 2024 6120 2840 7072 6f67 7329 0a7b my $a (@progs).{\n-00003a60: 0a20 2020 2024 6172 6746 6f72 5072 6f67 . $argForProg\n-00003a70: 737b 2461 7d20 3d20 2443 6865 636b 5061 s{$a} = $CheckPa\n-00003a80: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00003a90: 2824 6129 3b0a 7d0a 6d79 2024 7072 696e ($a);.}.my $prin\n-00003aa0: 7441 6e64 5374 6f70 203d 2024 4368 6563 tAndStop = $Chec\n-00003ab0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00003ac0: 6f75 7450 6172 2827 7072 696e 7441 6e64 outPar('printAnd\n-00003ad0: 5374 6f70 2729 3b0a 6d79 2024 6b74 203d Stop');.my $kt =\n-00003ae0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003af0: 7074 5769 7468 5061 7228 276b 696c 6c54 ptWithPar('killT\n-00003b00: 696d 6527 293b 0a24 746d 7064 6972 203d ime');.$tmpdir =\n-00003b10: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003b20: 7074 5769 7468 5061 7228 2774 6d70 6469 ptWithPar('tmpdi\n-00003b30: 7227 293b 0a6d 7920 2840 6d6f 756e 7450 r');.my (@mountP\n-00003b40: 6f69 6e74 7329 203d 2024 4368 6563 6b50 oints) = $CheckP\n-00003b50: 6172 2d3e 6765 744c 6973 7450 6172 2829 ar->getListPar()\n-00003b60: 3b0a 6d79 2024 6f72 6465 724f 6645 7865 ;.my $orderOfExe\n-00003b70: 6375 7469 6f6e 203d 2024 4368 6563 6b50 cution = $CheckP\n-00003b80: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-00003b90: 7228 276f 7264 6572 4f66 4578 6563 7574 r('orderOfExecut\n-00003ba0: 696f 6e27 293b 0a0a 6966 2028 2467 656e ion');..if ($gen\n-00003bb0: 6572 6174 6543 6f6e 6669 6746 696c 6529 erateConfigFile)\n-00003bc0: 0a7b 0a20 2020 206d 7920 2461 6e73 7765 .{. my $answe\n-00003bd0: 7220 3d20 2779 6573 273b 0a20 2020 2069 r = 'yes';. i\n-00003be0: 6620 282d 6520 2467 656e 6572 6174 6543 f (-e $generateC\n-00003bf0: 6f6e 6669 6746 696c 6529 0a20 2020 207b onfigFile). {\n-00003c00: 0a09 646f 0a09 7b0a 0920 2020 2070 7269 ..do..{.. pri\n-00003c10: 6e74 2022 3c24 6765 6e65 7261 7465 436f nt \"<$generateCo\n-00003c20: 6e66 6967 4669 6c65 3e20 616c 7265 6164 nfigFile> alread\n-00003c30: 7920 6578 6973 7473 2e20 4f76 6572 7772 y exists. Overwr\n-00003c40: 6974 653f 5c6e 222c 0a09 2020 2020 2279 ite?\\n\",.. \"y\n-00003c50: 6573 202f 206e 6f20 2d3e 2022 3b0a 0920 es / no -> \";.. \n-00003c60: 2020 2024 616e 7377 6572 203d 203c 5354 $answer = ;.. chomp\n-00003c80: 2024 616e 7377 6572 3b0a 097d 2077 6869 $answer;..} whi\n-00003c90: 6c65 2028 2461 6e73 7765 7220 6e65 2027 le ($answer ne '\n-00003ca0: 7965 7327 2061 6e64 2024 616e 7377 6572 yes' and $answer\n-00003cb0: 206e 6520 276e 6f27 293b 0a20 2020 207d ne 'no');. }\n-00003cc0: 0a20 2020 2065 7869 7420 3020 6966 2024 . exit 0 if $\n-00003cd0: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';.\n-00003ce0: 0a20 2020 206c 6f63 616c 202a 4649 4c45 . local *FILE\n-00003cf0: 3b0a 2020 2020 6f70 656e 2846 494c 452c ;. open(FILE,\n-00003d00: 2022 3e20 2467 656e 6572 6174 6543 6f6e \"> $generateCon\n-00003d10: 6669 6746 696c 6522 2920 6f72 0a09 6469 figFile\") or..di\n-00003d20: 6520 2263 6f75 6c64 206e 6f74 2077 7269 e \"could not wri\n-00003d30: 7465 2074 6f20 3c24 6765 6e65 7261 7465 te to <$generate\n-00003d40: 436f 6e66 6967 4669 6c65 3e22 3b0a 2020 ConfigFile>\";. \n-00003d50: 2020 7072 696e 7420 4649 4c45 2024 7465 print FILE $te\n-00003d60: 6d70 6c61 7465 436f 6e66 6967 4669 6c65 mplateConfigFile\n-00003d70: 3b0a 2020 2020 636c 6f73 6528 4649 4c45 ;. close(FILE\n-00003d80: 293b 0a20 2020 2065 7869 7420 303b 0a7d );. exit 0;.}\n-00003d90: 0a0a 0a0a 2320 616e 616c 7973 6520 7061 ....# analyse pa\n-00003da0: 7261 6d65 7465 7220 6c69 7374 2066 6f72 rameter list for\n-00003db0: 2065 7874 6572 6e61 6c20 7072 6f67 7261 external progra\n-00003dc0: 6d73 0a6d 7920 2840 6f70 744f 7264 6572 ms.my (@optOrder\n-00003dd0: 2920 3d20 2829 3b0a 6966 2028 2463 6f6e ) = ();.if ($con\n-00003de0: 6669 6746 696c 6529 0a7b 0a20 2020 2028 figFile).{. (\n-00003df0: 406f 7074 4f72 6465 7229 203d 2028 4024 @optOrder) = (@$\n-00003e00: 6f72 6465 724f 6645 7865 6375 7469 6f6e orderOfExecution\n-00003e10: 290a 7d0a 656c 7365 0a7b 0a20 2020 2028 ).}.else.{. (\n-00003e20: 406f 7074 4f72 6465 7229 203d 2024 4368 @optOrder) = $Ch\n-00003e30: 6563 6b50 6172 2d3e 6765 744f 7074 4f72 eckPar->getOptOr\n-00003e40: 6465 7228 293b 0a7d 0a0a 6d79 2028 4070 der();.}..my (@p\n-00003e50: 726f 6773 546f 5374 6172 7429 203d 2028 rogsToStart) = (\n-00003e60: 293b 0a66 6f72 6561 6368 206d 7920 246f );.foreach my $o\n-00003e70: 2028 406f 7074 4f72 6465 7229 0a7b 0a20 (@optOrder).{. \n-00003e80: 2020 206e 6578 7420 756e 6c65 7373 2064 next unless d\n-00003e90: 6566 696e 6564 2024 6172 6746 6f72 5072 efined $argForPr\n-00003ea0: 6f67 737b 246f 7d3b 0a20 2020 2070 7573 ogs{$o};. pus\n-00003eb0: 6820 4070 726f 6773 546f 5374 6172 742c h @progsToStart,\n-00003ec0: 2024 6f3b 0a7d 0a0a 6966 2028 2470 7269 $o;.}..if ($pri\n-00003ed0: 6e74 416e 6453 746f 7029 0a7b 0a20 2020 ntAndStop).{. \n-00003ee0: 2024 4368 6563 6b50 6172 2d3e 7072 696e $CheckPar->prin\n-00003ef0: 7428 293b 0a20 2020 2070 7269 6e74 2022 t();. print \"\n-00003f00: 6f72 6465 7220 6f66 2065 7865 6375 7469 order of executi\n-00003f10: 6f6e 5c6e 223b 0a20 2020 2066 6f72 6561 on\\n\";. forea\n-00003f20: 6368 206d 7920 2470 2028 4070 726f 6773 ch my $p (@progs\n-00003f30: 546f 5374 6172 7429 0a20 2020 207b 0a09 ToStart). {..\n-00003f40: 7072 696e 7420 225c 7424 703a 203c 222c print \"\\t$p: <\",\n-00003f50: 206a 6f69 6e28 273e 203c 272c 2040 7b24 join('> <', @{$\n-00003f60: 6172 6746 6f72 5072 6f67 737b 2470 7d7d argForProgs{$p}}\n-00003f70: 292c 2022 3e5c 6e22 3b0a 2020 2020 7d0a ), \">\\n\";. }.\n-00003f80: 2020 2020 6578 6974 2030 3b0a 7d0a 0a64 exit 0;.}..d\n-00003f90: 6965 2022 2448 656c 7022 0a20 2020 2075 ie \"$Help\". u\n-00003fa0: 6e6c 6573 7320 4070 726f 6773 546f 5374 nless @progsToSt\n-00003fb0: 6172 743b 0a0a 0a6d 7920 2470 4c6f 6720 art;...my $pLog \n-00003fc0: 3d20 7072 696e 744c 6f67 2d3e 6e65 7728 = printLog->new(\n-00003fd0: 272d 746d 7064 6972 2720 3d3e 2024 746d '-tmpdir' => $tm\n-00003fe0: 7064 6972 293b 0a6d 7920 2466 6966 6f20 pdir);.my $fifo \n-00003ff0: 3d20 3a3a 756e 6971 4669 6c65 4e61 6d65 = ::uniqFileName\n-00004000: 2822 2474 6d70 6469 722f 7072 4c6f 672d (\"$tmpdir/prLog-\n-00004010: 2229 3b0a 504f 5349 583a 3a6d 6b66 6966 \");.POSIX::mkfif\n-00004020: 6f28 2466 6966 6f2c 2030 3630 3029 206f o($fifo, 0600) o\n-00004030: 720a 2020 2020 2470 4c6f 672d 3e70 7269 r. $pLog->pri\n-00004040: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00004050: 272c 0a09 0920 272d 7374 7227 203d 3e20 ',... '-str' => \n-00004060: 5b22 6361 6e6e 6f74 206d 6b6e 6f64 203c [\"cannot mknod <\n-00004070: 2466 6966 6f3e 2066 6f72 2073 746f 7265 $fifo> for store\n-00004080: 4261 636b 7570 4d6f 756e 742e 706c 225d BackupMount.pl\"]\n-00004090: 2c0a 0909 2027 2d65 7869 7427 203d 3e20 ,... '-exit' => \n-000040a0: 3229 3b0a 0a6d 7920 2840 6c6f 6741 7267 2);..my (@logArg\n-000040b0: 7329 203d 2028 293b 0a69 6620 2824 6c6f s) = ();.if ($lo\n-000040c0: 6746 696c 6529 0a7b 0a23 2020 2020 2840 gFile).{.# (@\n-000040d0: 6c6f 6741 7267 7329 203d 2028 272d 2d6f logArgs) = ('--o\n-000040e0: 7574 2720 3d3e 2024 6c6f 6746 696c 6529 ut' => $logFile)\n-000040f0: 3b0a 2020 2020 2840 6c6f 6741 7267 7329 ;. (@logArgs)\n-00004100: 203d 2028 272d 2d6f 7574 2720 3d3e 2024 = ('--out' => $\n-00004110: 6c6f 6746 696c 652c 0a09 0920 2027 2d2d logFile,... '--\n-00004120: 6d61 7846 696c 656c 656e 2720 3d3e 2024 maxFilelen' => $\n-00004130: 6d61 7846 696c 656c 656e 2c0a 0909 2020 maxFilelen,... \n-00004140: 272d 2d6e 6f4f 664f 6c64 4669 6c65 7327 '--noOfOldFiles'\n-00004150: 203d 3e20 246e 6f4f 664f 6c64 4669 6c65 => $noOfOldFile\n-00004160: 732c 0a09 0920 2027 2d2d 636f 6d70 7265 s,... '--compre\n-00004170: 7373 5769 7468 2720 3d3e 2024 636f 6d70 ssWith' => $comp\n-00004180: 7265 7373 5769 7468 293b 0a20 2020 2070 ressWith);. p\n-00004190: 7573 6820 406c 6f67 4172 6773 2c20 272d ush @logArgs, '-\n-000041a0: 2d73 6176 654c 6f67 7327 0969 6620 2473 -saveLogs'.if $s\n-000041b0: 6176 654c 6f67 733b 0a7d 0a6d 7920 246c aveLogs;.}.my $l\n-000041c0: 6f67 4420 3d20 666f 726b 5072 6f63 2d3e ogD = forkProc->\n-000041d0: 6e65 7728 272d 6578 6563 2720 3d3e 2022 new('-exec' => \"\n-000041e0: 2472 6571 2f73 7462 754c 6f67 2e70 6c22 $req/stbuLog.pl\"\n-000041f0: 2c0a 0909 0920 272d 7061 7261 6d27 203d ,.... '-param' =\n-00004200: 3e20 5b27 2d2d 7265 6164 4669 6c65 2720 > ['--readFile' \n-00004210: 3d3e 2024 6669 666f 2c0a 0909 0909 2020 => $fifo,..... \n-00004220: 2020 2020 406c 6f67 4172 6773 5d2c 0a09 @logArgs],..\n-00004230: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $\n-00004240: 704c 6f67 293b 0a0a 6d79 2024 7072 4c6f pLog);..my $prLo\n-00004250: 673b 0a6d 7920 2824 7072 4c6f 674b 696e g;.my ($prLogKin\n-00004260: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN',\n-00004270: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',..\n-00004280: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION',\n-00004290: 0a09 0920 2020 2749 3a49 4e46 4f27 2c0a ... 'I:INFO',.\n-000042a0: 0909 2020 2027 443a 4445 4255 4727 2c0a .. 'D:DEBUG',.\n-000042b0: 0909 2020 2027 573a 5741 524e 494e 4727 .. 'W:WARNING'\n-000042c0: 2c0a 0909 2020 2027 453a 4552 524f 5227 ,... 'E:ERROR'\n-000042d0: 5d3b 0a0a 6966 2028 246c 6f67 4669 6c65 ];..if ($logFile\n-000042e0: 290a 7b0a 2020 2020 2470 724c 6f67 203d ).{. $prLog =\n-000042f0: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new('\n-00004300: 2d66 696c 6527 203d 3e20 2466 6966 6f2c -file' => $fifo,\n-00004310: 0a09 0909 2020 2027 2d6b 696e 6427 203d .... '-kind' =\n-00004320: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,...\n-00004330: 0920 2020 272d 7769 7468 5469 6d65 2720 . '-withTime' \n-00004340: 3d3e 2024 7769 7468 5469 6d65 2c0a 0909 => $withTime,...\n-00004350: 0920 2020 272d 746d 7064 6972 2720 3d3e . '-tmpdir' =>\n-00004360: 2024 746d 7064 6972 293b 0a7d 0a65 6c73 $tmpdir);.}.els\n-00004370: 650a 7b0a 2020 2020 2470 724c 6f67 203d e.{. $prLog =\n-00004380: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new('\n-00004390: 2d6b 696e 6427 203d 3e20 2470 724c 6f67 -kind' => $prLog\n-000043a0: 4b69 6e64 2c0a 0909 0920 2020 272d 7769 Kind,.... '-wi\n-000043b0: 7468 5469 6d65 2720 3d3e 2024 7769 7468 thTime' => $with\n-000043c0: 5469 6d65 2c0a 0909 0920 2020 272d 746d Time,.... '-tm\n-000043d0: 7064 6972 2720 3d3e 2024 746d 7064 6972 pdir' => $tmpdir\n-000043e0: 293b 0a7d 0a0a 0a24 7072 4c6f 672d 3e70 );.}...$prLog->p\n-000043f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00004400: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n-00004410: 7227 203d 3e20 5b22 796f 7520 6d75 7374 r' => [\"you must\n-00004420: 2073 7065 6369 6679 2061 7420 6c65 6173 specify at leas\n-00004430: 7420 6f6e 6520 7072 6f67 7261 6d20 746f t one program to\n-00004440: 2065 7865 6375 7465 225d 290a 2020 2020 execute\"]). \n-00004450: 756e 6c65 7373 2040 7072 6f67 7354 6f53 unless @progsToS\n-00004460: 7461 7274 3b0a 0a0a 2470 724c 6f67 2d3e tart;...$prLog->\n-00004470: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00004480: 2027 4127 2c0a 0920 2020 2020 2027 2d73 'A',.. '-s\n-00004490: 7472 2720 3d3e 205b 2273 7461 7274 696e tr' => [\"startin\n-000044a0: 6720 7374 6f72 6542 6163 6b75 704d 6f75 g storeBackupMou\n-000044b0: 6e74 2e70 6c22 5d29 3b0a 2470 724c 6f67 nt.pl\"]);.$prLog\n-000044c0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000044d0: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. '\n-000044e0: 2d73 7472 2720 3d3e 205b 2273 746f 7265 -str' => [\"store\n-000044f0: 4261 636b 7570 4d6f 756e 742e 706c 2c20 BackupMount.pl, \n-00004500: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK\n-00004510: 5550 5645 5253 494f 4e22 5d29 3b0a 0a23 UPVERSION\"]);..#\n-00004520: 206b 696c 6c54 696d 6520 696e 2073 6563 killTime in sec\n-00004530: 6f6e 6473 3a0a 6d79 2024 6b69 6c6c 5469 onds:.my $killTi\n-00004540: 6d65 203d 2026 6461 7465 546f 6f6c 733a me = &dateTools:\n-00004550: 3a73 7472 546f 5365 6328 272d 7374 7227 :strToSec('-str'\n-00004560: 203d 3e20 246b 7429 3b0a 756e 6c65 7373 => $kt);.unless\n-00004570: 2028 6465 6669 6e65 6420 246b 696c 6c54 (defined $killT\n-00004580: 696d 6529 0a7b 0a20 2020 2024 7072 4c6f ime).{. $prLo\n-00004590: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000045a0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-000045b0: 7472 2720 3d3e 205b 2277 726f 6e67 2066 tr' => [\"wrong f\n-000045c0: 6f72 6d61 7420 6f66 2070 6172 616d 6574 ormat of paramet\n-000045d0: 6572 202d 2d6b 696c 6c54 696d 653a 203c er --killTime: <\n-000045e0: 246b 743e 225d 293b 0a20 2020 2065 7869 $kt>\"]);. exi\n-000045f0: 7420 323b 0a7d 0a0a 230a 2320 6368 6563 t 2;.}..#.# chec\n-00004600: 6b69 6e67 2069 6620 7265 7175 6972 6564 king if required\n-00004610: 2070 726f 6772 616d 7320 6172 6520 7468 programs are th\n-00004620: 6572 650a 230a 6d79 2028 2470 6174 6854 ere.#.my ($pathT\n-00004630: 6f42 696e 2920 3d20 7370 6c69 7446 696c oBin) = splitFil\n-00004640: 6544 6972 2824 3029 3b0a 6d79 2028 2570 eDir($0);.my (%p\n-00004650: 726f 674e 616d 6529 203d 2028 293b 0a66 rogName) = ();.f\n-00004660: 6f72 6561 6368 206d 7920 2470 2028 4070 oreach my $p (@p\n-00004670: 726f 6773 546f 5374 6172 7429 0a7b 0a20 rogsToStart).{. \n-00004680: 2020 2069 6620 282d 6520 2224 7061 7468 if (-e \"$path\n-00004690: 546f 4269 6e2f 2470 2229 0a20 2020 207b ToBin/$p\"). {\n-000046a0: 0a09 2470 726f 674e 616d 657b 2470 7d20 ..$progName{$p} \n-000046b0: 3d20 2224 7061 7468 546f 4269 6e2f 2470 = \"$pathToBin/$p\n-000046c0: 223b 2020 2020 2320 6465 6269 616e 2073 \"; # debian s\n-000046d0: 7472 6970 7320 272e 706c 270a 2020 2020 trips '.pl'. \n-000046e0: 7d0a 2020 2020 656c 7369 6620 282d 6520 }. elsif (-e \n-000046f0: 2224 7061 7468 546f 4269 6e2f 2470 2e70 \"$pathToBin/$p.p\n-00004700: 6c22 290a 2020 2020 7b0a 0924 7072 6f67 l\"). {..$prog\n-00004710: 4e61 6d65 7b24 707d 203d 2022 2470 6174 Name{$p} = \"$pat\n-00004720: 6854 6f42 696e 2f24 702e 706c 223b 0a20 hToBin/$p.pl\";. \n-00004730: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. \n-00004740: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri\n-00004750: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00004760: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-00004770: 2720 3d3e 205b 2263 616e 6e6f 7420 6669 ' => [\"cannot fi\n-00004780: 6e64 2024 7b70 7d5b 2e70 6c5d 2061 7420 nd ${p}[.pl] at \n-00004790: 3c24 7061 7468 546f 4269 6e3e 225d 293b <$pathToBin>\"]);\n-000047a0: 0a09 246d 6169 6e3a 3a65 7869 7420 3d20 ..$main::exit = \n-000047b0: 323b 0a20 2020 207d 0a7d 0a65 7869 7420 2;. }.}.exit \n-000047c0: 246d 6169 6e3a 3a65 7869 7420 6966 2024 $main::exit if $\n-000047d0: 6d61 696e 3a3a 6578 6974 3b0a 0a23 0a23 main::exit;..#.#\n-000047e0: 2074 6573 7420 7069 6e67 2074 6f20 7365 test ping to se\n-000047f0: 7276 6572 730a 230a 6966 2028 2473 6572 rvers.#.if ($ser\n-00004800: 7665 7273 290a 7b0a 2020 2020 666f 7265 vers).{. fore\n-00004810: 6163 6820 6d79 2024 7365 7276 6572 2028 ach my $server (\n-00004820: 4024 7365 7276 6572 7329 0a20 2020 207b @$servers). {\n-00004830: 0a09 6d79 2024 7020 3d20 4e65 743a 3a50 ..my $p = Net::P\n-00004840: 696e 672d 3e6e 6577 2827 7463 7027 2c20 ing->new('tcp', \n-00004850: 3529 3b20 2320 7761 6974 2061 206d 6178 5); # wait a max\n-00004860: 696d 756d 206f 6620 3520 7365 636f 6e64 imum of 5 second\n-00004870: 730a 0920 2020 2020 2020 2020 2020 2020 s.. \n-00004880: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00004890: 2020 2020 2023 2066 6f72 2072 6573 706f # for respo\n-000048a0: 6e73 650a 096d 7920 2472 6574 203d 2024 nse..my $ret = $\n-000048b0: 702d 3e70 696e 6728 2473 6572 7665 7229 p->ping($server)\n-000048c0: 3b0a 0969 6620 2824 7265 7420 3d3d 2031 ;..if ($ret == 1\n-000048d0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog\n-000048e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000048f0: 3d3e 2027 4927 2c0a 0909 0920 2027 2d73 => 'I',.... '-s\n-00004900: 7472 2720 3d3e 205b 2268 6f73 7420 3c24 tr' => [\"host <$\n-00004910: 7365 7276 6572 3e20 7265 6163 6861 626c server> reachabl\n-00004920: 6520 7669 6120 7463 702d 7069 6e67 225d e via tcp-ping\"]\n-00004930: 293b 0a09 7d0a 0965 6c73 650a 097b 0a09 );..}..else..{..\n-00004940: 2020 2020 246d 6169 6e3a 3a65 7869 7420 $main::exit \n-00004950: 7c3d 2032 3b0a 0920 2020 2024 7072 4c6f |= 2;.. $prLo\n-00004960: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00004970: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n-00004980: 7374 7227 203d 3e0a 0909 0920 205b 2268 str' =>.... [\"h\n-00004990: 6f73 7420 3c24 7365 7276 6572 3e20 6e6f ost <$server> no\n-000049a0: 7420 7265 6163 6861 626c 6520 7669 6120 t reachable via \n-000049b0: 7463 702d 7069 6e67 225d 293b 0a09 7d0a tcp-ping\"]);..}.\n-000049c0: 2020 2020 7d0a 2020 2020 2470 724c 6f67 }. $prLog\n-000049d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000049e0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n-000049f0: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => [\"exiting\"\n-00004a00: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' =\n-00004a10: 3e20 246d 6169 6e3a 3a65 7869 7429 0a09 > $main::exit)..\n-00004a20: 6966 2028 246d 6169 6e3a 3a65 7869 7429 if ($main::exit)\n-00004a30: 3b0a 7d0a 0a23 0a23 2063 6865 636b 696e ;.}..#.# checkin\n-00004a40: 6720 666f 7220 616c 7265 6164 7920 6d6f g for already mo\n-00004a50: 756e 7465 6420 6669 6c65 7379 7374 656d unted filesystem\n-00004a60: 730a 230a 6d79 2028 4061 4d29 203d 2060 s.#.my (@aM) = `\n-00004a70: 6d6f 756e 7460 3b0a 6d79 2028 2561 6c72 mount`;.my (%alr\n-00004a80: 6561 6479 4d6f 756e 7465 642c 2024 6d29 eadyMounted, $m)\n-00004a90: 3b0a 666f 7265 6163 6820 246d 2028 4061 ;.foreach $m (@a\n-00004aa0: 4d29 0a7b 0a20 2020 2024 6d20 3d7e 202f M).{. $m =~ /\n-00004ab0: 282e 2b3f 2920 6f6e 2028 2e2a 2920 7479 (.+?) on (.*) ty\n-00004ac0: 7065 202f 3b0a 2020 2020 2461 6c72 6561 pe /;. $alrea\n-00004ad0: 6479 4d6f 756e 7465 647b 2432 7d20 3d20 dyMounted{$2} = \n-00004ae0: 313b 0a7d 0a0a 230a 2320 6d6f 756e 7469 1;.}..#.# mounti\n-00004af0: 6e67 2074 6865 2066 696c 6520 7379 7374 ng the file syst\n-00004b00: 656d 730a 230a 6d79 2028 406d 6f75 6e74 ems.#.my (@mount\n-00004b10: 6564 2920 3d20 2829 3b0a 6d79 2024 6572 ed) = ();.my $er\n-00004b20: 726f 7220 3d20 303b 0a66 6f72 6561 6368 ror = 0;.foreach\n-00004b30: 2024 6d20 2840 6d6f 756e 7450 6f69 6e74 $m (@mountPoint\n-00004b40: 7329 0a7b 0a20 2020 206d 7920 2840 6f70 s).{. my (@op\n-00004b50: 7429 203d 2028 293b 0a20 2020 2069 6620 t) = ();. if \n-00004b60: 2824 6d20 3d7e 202f 5c41 2872 5b6f 775d ($m =~ /\\A(r[ow]\n-00004b70: 292c 282e 2a29 2f29 0a20 2020 207b 0a09 ),(.*)/). {..\n-00004b80: 2840 6f70 7429 203d 2028 272d 6f27 2c20 (@opt) = ('-o', \n-00004b90: 2431 293b 0a09 246d 203d 2024 323b 0a20 $1);..$m = $2;. \n-00004ba0: 2020 207d 0a0a 2020 2020 6966 2028 6578 }.. if (ex\n-00004bb0: 6973 7473 2024 616c 7265 6164 794d 6f75 ists $alreadyMou\n-00004bc0: 6e74 6564 7b24 6d7d 290a 2020 2020 7b0a nted{$m}). {.\n-00004bd0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00004be0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00004bf0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00004c00: 205b 223c 246d 3e20 6973 2061 6c72 6561 [\"<$m> is alrea\n-00004c10: 6479 206d 6f75 6e74 6564 225d 293b 0a09 dy mounted\"]);..\n-00004c20: 6e65 7874 3b0a 2020 2020 7d0a 0a20 2020 next;. }.. \n-00004c30: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-00004c40: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00004c50: 0920 2027 2d73 7472 2720 3d3e 205b 2274 . '-str' => [\"t\n-00004c60: 7279 696e 6720 746f 206d 6f75 6e74 2040 rying to mount @\n-00004c70: 6f70 7420 246d 225d 293b 0a20 2020 206d opt $m\"]);. m\n-00004c80: 7920 2466 7020 3d20 666f 726b 5072 6f63 y $fp = forkProc\n-00004c90: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' =>\n-00004ca0: 2027 6d6f 756e 7427 2c0a 0909 0920 2020 'mount',.... \n-00004cb0: 272d 7061 7261 6d27 203d 3e20 5b40 6f70 '-param' => [@op\n-00004cc0: 742c 2024 6d5d 2c0a 0909 0920 2020 272d t, $m],.... '-\n-00004cd0: 6f75 7452 616e 646f 6d27 203d 3e20 2224 outRandom' => \"$\n-00004ce0: 746d 7064 6972 2f64 6f53 746f 7265 4261 tmpdir/doStoreBa\n-00004cf0: 636b 7570 2d66 6f72 6b4d 6f75 6e74 2d22 ckup-forkMount-\"\n-00004d00: 2c0a 0909 0920 2020 272d 7072 4c6f 6727 ,.... '-prLog'\n-00004d10: 203d 3e20 2470 724c 6f67 293b 0a0a 2020 => $prLog);.. \n-00004d20: 2020 2320 7761 6974 2066 6f72 2061 206d # wait for a m\n-00004d30: 6178 696d 756d 206f 6620 3130 2073 6563 aximum of 10 sec\n-00004d40: 6f6e 6473 0a20 2020 2066 6f72 6561 6368 onds. foreach\n-00004d50: 2028 312e 2e32 3029 0a20 2020 207b 0a09 (1..20). {..\n-00004d60: 7365 6c65 6374 2875 6e64 6566 2c20 756e select(undef, un\n-00004d70: 6465 662c 2075 6e64 6566 2c20 302e 3529 def, undef, 0.5)\n-00004d80: 3b0a 0969 6620 2824 6670 2d3e 7072 6f63 ;..if ($fp->proc\n-00004d90: 6573 7352 756e 7328 2920 3d3d 2030 290a essRuns() == 0).\n-00004da0: 097b 0a09 2020 2020 6c61 7374 3b0a 097d .{.. last;..}\n-00004db0: 0a09 656c 7365 0a09 7b0a 0920 2020 2024 ..else..{.. $\n-00004dc0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00004dd0: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',....\n-00004de0: 2020 272d 7374 7227 203d 3e20 5b22 7761 '-str' => [\"wa\n-00004df0: 6974 696e 6720 666f 7220 6d6f 756e 7420 iting for mount \n-00004e00: 636f 6d6d 616e 6420 2e2e 2e22 5d29 0a09 command ...\"])..\n-00004e10: 0969 6620 2464 6562 7567 3b0a 097d 0a20 .if $debug;..}. \n-00004e20: 2020 207d 0a20 2020 206d 7920 246f 7574 }. my $out\n-00004e30: 3120 3d20 2466 702d 3e67 6574 5354 444f 1 = $fp->getSTDO\n-00004e40: 5554 2829 3b0a 2020 2020 6d79 2024 6f75 UT();. my $ou\n-00004e50: 7432 203d 2024 6670 2d3e 6765 7453 5444 t2 = $fp->getSTD\n-00004e60: 4552 5228 293b 0a20 2020 2024 6670 2d3e ERR();. $fp->\n-00004e70: 4445 5354 524f 5928 293b 0a20 2020 2069 DESTROY();. i\n-00004e80: 6620 2824 6670 2d3e 6765 7428 272d 7768 f ($fp->get('-wh\n-00004e90: 6174 2720 3d3e 2027 7374 6174 7573 2729 at' => 'status')\n-00004ea0: 2021 3d20 3020 2020 2023 206d 6f75 6e74 != 0 # mount\n-00004eb0: 206e 6f74 2073 7563 6365 7373 6675 6c6c not successfull\n-00004ec0: 0a09 6f72 2040 246f 7574 3220 3e20 3029 ..or @$out2 > 0)\n-00004ed0: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e\n-00004ee0: 7869 7420 7c3d 2032 3b0a 0924 6572 726f xit |= 2;..$erro\n-00004ef0: 7220 3d20 313b 0a0a 0924 7072 4c6f 672d r = 1;...$prLog-\n-00004f00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00004f10: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-00004f20: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => [\"could\n-00004f30: 206e 6f74 206d 6f75 6e74 2040 6f70 7420 not mount @opt \n-00004f40: 246d 225d 293b 0a09 2466 702d 3e73 6967 $m\"]);..$fp->sig\n-00004f50: 6e61 6c28 272d 7661 6c75 6527 203d 3e20 nal('-value' => \n-00004f60: 3929 3b0a 0a09 2675 6d6f 756e 7428 5c40 9);...&umount(\\@\n-00004f70: 6d6f 756e 7465 642c 205c 2561 6c72 6561 mounted, \\%alrea\n-00004f80: 6479 4d6f 756e 7465 642c 2024 6465 6275 dyMounted, $debu\n-00004f90: 6729 3b0a 0a09 2470 724c 6f67 2d3e 7072 g);...$prLog->pr\n-00004fa0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00004fb0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st\n-00004fc0: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => [\"exiting\"\n-00004fd0: 5d29 3b0a 0967 6f74 6f20 656e 644f 6650 ]);..goto endOfP\n-00004fe0: 726f 6772 616d 3b0a 2020 2020 7d0a 2020 rogram;. }. \n-00004ff0: 2020 656c 7365 0a20 2020 207b 0a09 7075 else. {..pu\n-00005000: 7368 2040 6d6f 756e 7465 642c 2024 6d3b sh @mounted, $m;\n-00005010: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00005020: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00005030: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00005040: 3e20 5b22 3c6d 6f75 6e74 2024 6d3e 2073 > [\" s\n-00005050: 7563 6365 7373 6675 6c6c 225d 293b 0a20 uccessfull\"]);. \n-00005060: 2020 207d 0a0a 2020 2020 2470 724c 6f67 }.. $prLog\n-00005070: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00005080: 3d3e 2027 5727 2c0a 0909 2020 272d 7374 => 'W',... '-st\n-00005090: 7227 203d 3e20 5b22 5354 444f 5554 206f r' => [\"STDOUT o\n-000050a0: 6620 3c6d 6f75 6e74 2024 6d3e 3a22 2c20 f :\", \n-000050b0: 4024 6f75 7431 5d29 0a09 6966 2028 4024 @$out1])..if (@$\n-000050c0: 6f75 7431 203e 2030 293b 0a20 2020 2024 out1 > 0);. $\n-000050d0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-000050e0: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-000050f0: 2027 2d73 7472 2720 3d3e 205b 2253 5444 '-str' => [\"STD\n-00005100: 4552 5220 6f66 203c 6d6f 756e 7420 246d ERR of :\", @$out2])..i\n-00005120: 6620 2840 246f 7574 3220 3e20 3029 3b0a f (@$out2 > 0);.\n-00005130: 0a20 2020 2069 6620 2840 246f 7574 3229 . if (@$out2)\n-00005140: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e\n-00005150: 7869 7420 7c3d 2032 3b0a 0924 7072 4c6f xit |= 2;..$prLo\n-00005160: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00005170: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n-00005180: 2027 2d73 7472 2720 3d3e 205b 2265 7869 '-str' => [\"exi\n-00005190: 7469 6e67 225d 293b 0a09 676f 746f 2065 ting\"]);..goto e\n-000051a0: 6e64 4f66 5072 6f67 7261 6d3b 0a20 2020 ndOfProgram;. \n-000051b0: 207d 0a7d 0a69 6620 2824 6572 726f 7220 }.}.if ($error \n-000051c0: 3d3d 2031 290a 7b0a 2020 2020 2470 724c == 1).{. $prL\n-000051d0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000051e0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '-\n-000051f0: 7374 7227 203d 3e20 5b22 6578 6974 696e str' => [\"exitin\n-00005200: 6722 5d29 3b0a 2020 2020 676f 746f 2065 g\"]);. goto e\n-00005210: 6e64 4f66 5072 6f67 7261 6d3b 0a7d 0a0a ndOfProgram;.}..\n-00005220: 0a23 0a23 2073 7461 7274 2070 726f 6772 .#.# start progr\n-00005230: 616d 730a 230a 666f 7265 6163 6820 6d79 ams.#.foreach my\n-00005240: 2024 7020 2840 7072 6f67 7354 6f53 7461 $p (@progsToSta\n-00005250: 7274 290a 7b0a 2020 2020 6d79 2024 7072 rt).{. my $pr\n-00005260: 6f67 203d 2024 7072 6f67 4e61 6d65 7b24 og = $progName{$\n-00005270: 707d 3b0a 2020 2020 6d79 2024 7061 7261 p};. my $para\n-00005280: 6d73 203d 2024 6172 6746 6f72 5072 6f67 ms = $argForProg\n-00005290: 737b 2470 7d3b 0a0a 2020 2020 2470 724c s{$p};.. $prL\n-000052a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000052b0: 2720 3d3e 2027 4927 2c0a 0909 2020 272d ' => 'I',... '-\n-000052c0: 7374 7227 203d 3e20 5b22 7374 6172 7469 str' => [\"starti\n-000052d0: 6e67 2024 7072 6f67 2040 2470 6172 616d ng $prog @$param\n-000052e0: 7322 5d29 3b0a 2020 2020 6d79 2024 7374 s\"]);. my $st\n-000052f0: 6275 203d 2066 6f72 6b50 726f 632d 3e6e bu = forkProc->n\n-00005300: 6577 2827 2d65 7865 6327 203d 3e20 2224 ew('-exec' => \"$\n-00005310: 7072 6f67 222c 0a09 0909 2020 2020 2027 prog\",.... '\n-00005320: 2d70 6172 616d 2720 3d3e 205b 4024 7061 -param' => [@$pa\n-00005330: 7261 6d73 2c0a 0909 0909 0920 2027 2d2d rams,...... '--\n-00005340: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-00005350: 2720 3d3e 2024 6669 666f 5d2c 0a09 0909 ' => $fifo],....\n-00005360: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom\n-00005370: 2720 3d3e 2022 2474 6d70 6469 722f 646f ' => \"$tmpdir/do\n-00005380: 5374 6f72 6542 6163 6b75 702d 7374 6275 StoreBackup-stbu\n-00005390: 2d22 2c0a 0909 0920 2020 2020 272d 7072 -\",.... '-pr\n-000053a0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-000053b0: 0a0a 2020 2020 6966 2028 246b 696c 6c54 .. if ($killT\n-000053c0: 696d 6529 0a20 2020 207b 0a09 6d79 2024 ime). {..my $\n-000053d0: 7265 6164 7920 3d20 303b 0a09 666f 7265 ready = 0;..fore\n-000053e0: 6163 6820 2831 2e2e 246b 696c 6c54 696d ach (1..$killTim\n-000053f0: 6529 0a09 7b0a 0920 2020 2073 6c65 6570 e)..{.. sleep\n-00005400: 2031 3b0a 0920 2020 2069 6620 2824 7374 1;.. if ($st\n-00005410: 6275 2d3e 7072 6f63 6573 7352 756e 7328 bu->processRuns(\n-00005420: 2920 3d3d 2030 290a 0920 2020 207b 0a09 ) == 0).. {..\n-00005430: 0924 7265 6164 7920 3d20 313b 0a09 096d .$ready = 1;...m\n-00005440: 7920 2473 7461 7475 733b 0a23 0909 6966 y $status;.#..if\n-00005450: 2028 2473 7461 7475 7320 3d20 2473 7462 ($status = $stb\n-00005460: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' =\n-00005470: 3e20 2773 7461 7475 7327 2929 0a09 0969 > 'status'))...i\n-00005480: 6620 2824 6d61 696e 3a3a 6578 6974 207c f ($main::exit |\n-00005490: 3d20 2473 7461 7475 7320 3d20 2473 7462 = $status = $stb\n-000054a0: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' =\n-000054b0: 3e20 2773 7461 7475 7327 2929 0a09 097b > 'status'))...{\n-000054c0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-000054d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-000054e0: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str\n-000054f0: 2720 3d3e 0a09 0909 0920 205b 223c 2470 ' =>..... [\"<$p\n-00005500: 726f 673e 2065 7869 7465 6420 7769 7468 rog> exited with\n-00005510: 2073 7461 7475 7320 3c24 7374 6174 7573 status <$status\n-00005520: 3e22 2c0a 0909 0909 2020 2022 6578 6974 >\",..... \"exit\n-00005530: 696e 6722 5d29 3b0a 0909 2020 2020 676f ing\"]);... go\n-00005540: 746f 2065 6e64 4f66 5072 6f67 7261 6d3b to endOfProgram;\n-00005550: 0a09 097d 0a09 096c 6173 743b 0a09 2020 ...}...last;.. \n-00005560: 2020 7d0a 097d 0a09 6966 2028 2472 6561 }..}..if ($rea\n-00005570: 6479 203d 3d20 3029 2020 2020 2020 2320 dy == 0) # \n-00005580: 6475 7261 7469 6f6e 2074 6f6f 206c 6f6e duration too lon\n-00005590: 670a 097b 0a09 2020 2020 2470 724c 6f67 g..{.. $prLog\n-000055a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000055b0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n-000055c0: 7472 2720 3d3e 205b 2274 696d 6520 6c69 tr' => [\"time li\n-000055d0: 6d69 7420 3c24 6b74 3e20 6578 6365 6564 mit <$kt> exceed\n-000055e0: 6564 2066 6f72 2022 202e 0a09 0909 0920 ed for \" ...... \n-000055f0: 2020 2020 223c 2470 726f 6720 4024 7061 \"<$prog @$pa\n-00005600: 7261 6d73 3e22 5d29 3b0a 0920 2020 2024 rams>\"]);.. $\n-00005610: 7374 6275 2d3e 7369 676e 616c 2827 2d76 stbu->signal('-v\n-00005620: 616c 7565 2720 3d3e 2032 293b 2020 2020 alue' => 2); \n-00005630: 2023 2053 4947 494e 540a 0920 2020 2024 # SIGINT.. $\n-00005640: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1;\n-00005650: 0a09 2020 2020 736c 6565 7020 3130 3b20 .. sleep 10; \n-00005660: 2020 2020 2020 2020 2023 2074 696d 6520 # time \n-00005670: 666f 7220 7072 6f67 7261 6d20 746f 2066 for program to f\n-00005680: 696e 6973 680a 0920 2020 2075 6e6c 696e inish.. unlin\n-00005690: 6b20 2466 6966 6f3b 0a09 2020 2020 2470 k $fifo;.. $p\n-000056a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-000056b0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-000056c0: 2027 2d73 7472 2720 3d3e 205b 2274 6572 '-str' => [\"ter\n-000056d0: 6d69 6e61 7469 6e67 2065 7865 6375 7469 minating executi\n-000056e0: 6f6e 225d 293b 0a09 2020 2020 676f 746f on\"]);.. goto\n-000056f0: 2065 6e64 4f66 5072 6f67 7261 6d3b 0a09 endOfProgram;..\n-00005700: 7d0a 2020 2020 7d0a 7d0a 0a65 6e64 4f66 }. }.}..endOf\n-00005710: 5072 6f67 7261 6d3a 3b0a 0a75 6e6c 696e Program:;..unlin\n-00005720: 6b20 2466 6966 6f3b 0a0a 2675 6d6f 756e k $fifo;..&umoun\n-00005730: 7428 5c40 6d6f 756e 7465 642c 205c 2561 t(\\@mounted, \\%a\n-00005740: 6c72 6561 6479 4d6f 756e 7465 642c 2024 lreadyMounted, $\n-00005750: 6465 6275 6729 3b0a 0a24 7072 4c6f 672d debug);..$prLog-\n-00005760: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00005770: 3e20 275a 272c 0a09 2020 2020 2020 272d > 'Z',.. '-\n-00005780: 7374 7227 203d 3e20 5b22 6669 6e69 7368 str' => [\"finish\n-00005790: 6564 2073 746f 7265 4261 636b 7570 4d6f ed storeBackupMo\n-000057a0: 756e 742e 706c 225d 293b 0a0a 2470 724c unt.pl\"]);..$prL\n-000057b0: 6f67 2d3e 5f5f 7265 616c 6c79 5072 696e og->__reallyPrin\n-000057c0: 7428 5b27 5f5f 4649 4e49 5348 5f5f 275d t(['__FINISH__']\n-000057d0: 290a 2020 2020 6966 2028 246c 6f67 4669 ). if ($logFi\n-000057e0: 6c65 293b 0a0a 736c 6565 7020 313b 0a0a le);..sleep 1;..\n-000057f0: 6b69 6c6c 2031 392c 2024 6c6f 6744 2d3e kill 19, $logD->\n-00005800: 6765 7428 272d 7768 6174 2720 3d3e 2027 get('-what' => '\n-00005810: 7069 6427 293b 0a0a 6578 6974 2024 6d61 pid');..exit $ma\n-00005820: 696e 3a3a 6578 6974 3b0a 0a0a 0a0a 2323 in::exit;.....##\n-00005830: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005840: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005850: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005860: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005870: 2323 2323 0a73 7562 2075 6d6f 756e 740a ####.sub umount.\n-00005880: 7b0a 2020 2020 6d79 2028 246d 6f75 6e74 {. my ($mount\n-00005890: 6564 2c20 2461 6c72 6561 6479 4d6f 756e ed, $alreadyMoun\n-000058a0: 7465 642c 2024 6465 6275 6729 203d 2040 ted, $debug) = @\n-000058b0: 5f3b 0a0a 2020 2020 666f 7265 6163 6820 _;.. foreach \n-000058c0: 246d 2028 7265 7665 7273 6520 4024 6d6f $m (reverse @$mo\n-000058d0: 756e 7465 6429 0a20 2020 207b 0a09 6966 unted). {..if\n-000058e0: 2028 6578 6973 7473 2024 616c 7265 6164 (exists $alread\n-000058f0: 794d 6f75 6e74 6564 7b24 6d7d 290a 097b yMounted{$m})..{\n-00005900: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00005910: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005920: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' \n-00005930: 3d3e 0a09 0909 2020 5b22 646f 206e 6f74 =>.... [\"do not\n-00005940: 2075 6d6f 756e 7420 3c24 6d3e 2c20 7761 umount <$m>, wa\n-00005950: 7320 616c 7265 6164 7920 6d6f 756e 7465 s already mounte\n-00005960: 6422 5d29 3b0a 0920 2020 206e 6578 743b d\"]);.. next;\n-00005970: 0a09 7d0a 0924 7072 4c6f 672d 3e70 7269 ..}..$prLog->pri\n-00005980: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00005990: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-000059a0: 2720 3d3e 205b 2274 7279 696e 6720 746f ' => [\"trying to\n-000059b0: 203c 756d 6f75 6e74 2024 6d3e 225d 293b \"]);\n-000059c0: 0a09 736c 6565 7020 353b 0a09 6d79 2024 ..sleep 5;..my $\n-000059d0: 756d 203d 2066 6f72 6b50 726f 632d 3e6e um = forkProc->n\n-000059e0: 6577 2827 2d65 7865 6327 203d 3e20 2775 ew('-exec' => 'u\n-000059f0: 6d6f 756e 7427 2c0a 0909 0920 2020 2020 mount',.... \n-00005a00: 2020 272d 7061 7261 6d27 203d 3e20 5b24 '-param' => [$\n-00005a10: 6d5d 2c0a 0909 0920 2020 2020 2020 272d m],.... '-\n-00005a20: 6f75 7452 616e 646f 6d27 203d 3e0a 0909 outRandom' =>...\n-00005a30: 0920 2020 2020 2020 2224 746d 7064 6972 . \"$tmpdir\n-00005a40: 2f64 6f53 746f 7265 4261 636b 7570 2d66 /doStoreBackup-f\n-00005a50: 6f72 6b4d 6f75 6e74 2d22 2c0a 0909 0920 orkMount-\",.... \n-00005a60: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' =\n-00005a70: 3e20 2470 724c 6f67 293b 0a0a 0923 2077 > $prLog);...# w\n-00005a80: 6169 7420 666f 7220 6120 6d61 7869 6d75 ait for a maximu\n-00005a90: 6d20 6f66 2036 3020 7365 636f 6e64 730a m of 60 seconds.\n-00005aa0: 0966 6f72 6561 6368 2028 312e 2e31 3230 .foreach (1..120\n-00005ab0: 290a 097b 0a09 2020 2020 7365 6c65 6374 )..{.. select\n-00005ac0: 2075 6e64 6566 2c20 756e 6465 662c 2075 undef, undef, u\n-00005ad0: 6e64 6566 2c20 302e 353b 0a09 2020 2020 ndef, 0.5;.. \n-00005ae0: 6966 2028 2475 6d2d 3e70 726f 6365 7373 if ($um->process\n-00005af0: 5275 6e73 2829 203d 3d20 3029 0a09 2020 Runs() == 0).. \n-00005b00: 2020 7b0a 0909 6c61 7374 3b0a 0920 2020 {...last;.. \n-00005b10: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00005b20: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr\n-00005b30: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005b40: 4427 2c0a 0909 0920 2020 2020 2027 2d73 D',.... '-s\n-00005b50: 7472 2720 3d3e 205b 2277 6169 7469 6e67 tr' => [\"waiting\n-00005b60: 2066 6f72 2075 6d6f 756e 7420 636f 6d6d for umount comm\n-00005b70: 616e 6420 2e2e 2e22 5d29 0a09 0920 2020 and ...\"])... \n-00005b80: 2069 6620 2464 6562 7567 3b0a 0920 2020 if $debug;.. \n-00005b90: 207d 0a09 7d0a 0924 756d 2d3e 4445 5354 }..}..$um->DEST\n-00005ba0: 524f 5928 293b 0a09 6966 2028 2475 6d2d ROY();..if ($um-\n-00005bb0: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => \n-00005bc0: 2773 7461 7475 7327 2920 213d 2030 2920 'status') != 0) \n-00005bd0: 2020 2023 2075 6d6f 756e 7420 6e6f 7420 # umount not \n-00005be0: 7375 6363 6573 7366 756c 6c0a 097b 0a09 successfull..{..\n-00005bf0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-00005c00: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00005c10: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-00005c20: 205b 2263 6f75 6c64 206e 6f74 203c 756d [\"could not \"]);.. \n-00005c40: 2020 2475 6d2d 3e73 6967 6e61 6c28 272d $um->signal('-\n-00005c50: 7661 6c75 6527 203d 3e20 3929 3b0a 0920 value' => 9);.. \n-00005c60: 2020 2024 6d61 696e 3a3a 6578 6974 207c $main::exit |\n-00005c70: 3d20 323b 0a09 7d0a 0965 6c73 650a 097b = 2;..}..else..{\n-00005c80: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00005c90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00005ca0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' \n-00005cb0: 3d3e 205b 223c 756d 6f75 6e74 3e20 246d => [\" $m\n-00005cc0: 2073 7563 6365 7373 6675 6c6c 225d 293b successfull\"]);\n-00005cd0: 0a09 7d0a 2020 2020 7d0a 7d0a ..}. }.}.\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"}, {"source1": "./usr/bin/storeBackupRecover", "source2": "./usr/bin/storeBackupRecover", "has_internal_linenos": true, "unified_diff": "@@ -1,1704 +1,4 @@\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 3232 290a 2320 2020 2020 2020 2-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;.\n-00000330: 7573 6520 4663 6e74 6c3b 0a75 7365 2044 use Fcntl;.use D\n-00000340: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md\n-00000350: 355f 6865 7829 3b0a 0a0a 7375 6220 6c69 5_hex);...sub li\n-00000360: 6250 6174 680a 7b0a 2020 2020 6d79 2024 bPath.{. my $\n-00000370: 6669 6c65 203d 2073 6869 6674 3b0a 0a20 file = shift;.. \n-00000380: 2020 206d 7920 2464 6972 3b0a 0a20 2020 my $dir;.. \n-00000390: 2023 2046 616c 6c73 2044 6174 6569 2073 # Falls Datei s\n-000003a0: 656c 6273 7420 6569 6e20 7379 6d6c 696e elbst ein symlin\n-000003b0: 6b20 6973 742c 2073 6f6c 616e 6765 2066 k ist, solange f\n-000003c0: 6f6c 6765 6e2c 2062 6973 2061 7566 6765 olgen, bis aufge\n-000003d0: 6cc3 b673 740a 2020 2020 6966 2028 2d66 l..st. if (-f\n-000003e0: 2024 6669 6c65 290a 2020 2020 7b0a 0977 $file). {..w\n-000003f0: 6869 6c65 2028 2d6c 2024 6669 6c65 290a hile (-l $file).\n-00000400: 097b 0a09 2020 2020 6d79 2024 6c69 6e6b .{.. my $link\n-00000410: 203d 2072 6561 646c 696e 6b28 2466 696c = readlink($fil\n-00000420: 6529 3b0a 0a09 2020 2020 6966 2028 7375 e);... if (su\n-00000430: 6273 7472 2824 6c69 6e6b 2c20 302c 2031 bstr($link, 0, 1\n-00000440: 2920 6e65 2022 2f22 290a 0920 2020 207b ) ne \"/\").. {\n-00000450: 0a09 0924 6669 6c65 203d 7e20 732f 5b5e ...$file =~ s/[^\n-00000460: 5c2f 5d2b 242f 246c 696e 6b2f 3b0a 0920 \\/]+$/$link/;.. \n-00000470: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else..\n-00000480: 2020 2020 7b0a 0909 2466 696c 6520 3d20 {...$file = \n-00000490: 246c 696e 6b3b 0a09 2020 2020 7d0a 097d $link;.. }..}\n-000004a0: 0a0a 0928 2464 6972 2c20 2466 696c 6529 ...($dir, $file)\n-000004b0: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir\n-000004c0: 2824 6669 6c65 293b 0a09 2466 696c 6520 ($file);..$file \n-000004d0: 3d20 222f 2466 696c 6522 3b0a 2020 2020 = \"/$file\";. \n-000004e0: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. {\n-000004f0: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR \"\n-00000500: 3c24 6669 6c65 3e20 646f 6573 206e 6f74 <$file> does not\n-00000510: 2065 7869 7374 215c 6e22 3b0a 0965 7869 exist!\\n\";..exi\n-00000520: 7420 313b 0a20 2020 207d 0a0a 2020 2020 t 1;. }.. \n-00000530: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= \"/../lib\n-00000540: 223b 2020 2020 2020 2020 2020 2023 2050 \"; # P\n-00000550: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli\n-00000560: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $\n-00000570: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p\n-00000580: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $\n-00000590: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if (\n-000005a0: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). \n-000005b0: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = \n-000005c0: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho\n-000005d0: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi\n-000005e0: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret\n-000005f0: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD\n-00000600: 6972 2822 2461 6273 4469 7224 6669 6c65 ir(\"$absDir$file\n-00000610: 2229 293b 0a20 2020 207d 0a20 2020 2065 \"));. }. e\n-00000620: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print\n-00000630: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR \"<$dir> \n-00000640: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, \n-00000650: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\\n\";. \n-00000660: 7d0a 7d0a 7375 6220 7370 6c69 7446 696c }.}.sub splitFil\n-00000670: 6544 6972 0a7b 0a20 2020 206d 7920 246e eDir.{. my $n\n-00000680: 616d 6520 3d20 7368 6966 743b 0a0a 2020 ame = shift;.. \n-00000690: 2020 7265 7475 726e 2028 272e 272c 2024 return ('.', $\n-000006a0: 6e61 6d65 2920 756e 6c65 7373 2028 246e name) unless ($n\n-000006b0: 616d 6520 3d7e 2f5c 2f2f 293b 2020 2020 ame =~/\\//); \n-000006c0: 2320 6e75 7220 6569 6e66 6163 6865 7220 # nur einfacher \n-000006d0: 4461 7465 696e 616d 650a 0a20 2020 206d Dateiname.. m\n-000006e0: 7920 2824 6469 722c 2024 6669 6c65 2920 y ($dir, $file) \n-000006f0: 3d20 246e 616d 6520 3d7e 202f 5e28 2e2a = $name =~ /^(.*\n-00000700: 295c 2f28 2e2a 2924 2f73 3b0a 2020 2020 )\\/(.*)$/s;. \n-00000710: 2464 6972 203d 2027 2f27 2069 6620 2824 $dir = '/' if ($\n-00000720: 6469 7220 6571 2027 2729 3b20 2020 2020 dir eq ''); \n-00000730: 2020 2020 2020 2020 2020 2020 2020 2320 # \n-00000740: 6769 6c74 2c20 6661 6c6c 7320 7a2e 422e gilt, falls z.B.\n-00000750: 202f 6669 6c65 6e61 6d65 0a20 2020 2072 /filename. r\n-00000760: 6574 7572 6e20 2824 6469 722c 2024 6669 eturn ($dir, $fi\n-00000770: 6c65 293b 0a7d 0a6d 7920 2824 7265 712c le);.}.my ($req,\n-00000780: 2024 7072 6f67 2920 3d20 266c 6962 5061 $prog) = &libPa\n-00000790: 7468 2824 3029 3b0a 756e 7368 6966 7420 th($0);.unshift \n-000007a0: 4049 4e43 2c20 2224 7265 7122 3b0a 0a0a @INC, \"$req\";...\n-000007b0: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa\n-000007c0: 636b 7570 476c 6f62 2e70 6c27 3b0a 7265 ckupGlob.pl';.re\n-000007d0: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara\n-000007e0: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require \n-000007f0: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl'\n-00000800: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog\n-00000810: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v\n-00000820: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ\n-00000830: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl'\n-00000840: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP\n-00000850: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require\n-00000860: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib\n-00000870: 2e70 6c27 3b0a 0a0a 6d79 2024 6d64 3543 .pl';...my $md5C\n-00000880: 6865 636b 5375 6d56 6572 7369 6f6e 203d heckSumVersion =\n-00000890: 2027 312e 3127 3b0a 6d79 2024 6e6f 5265 '1.1';.my $noRe\n-000008a0: 7374 6f72 6550 6172 616c 6c65 6c20 3d20 storeParallel = \n-000008b0: 3132 3b0a 6d79 2024 6368 6563 6b53 756d 12;.my $checkSum\n-000008c0: 4669 6c65 203d 2027 2e6d 6435 4368 6563 File = '.md5Chec\n-000008d0: 6b53 756d 7327 3b0a 6d79 2024 6578 6974 kSums';.my $exit\n-000008e0: 203d 2030 3b0a 0a6d 7920 2474 6d70 6469 = 0;..my $tmpdi\n-000008f0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; \n-00000900: 2020 2020 2020 2020 2023 2064 6566 6175 # defau\n-00000910: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir\n-00000920: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR'\n-00000930: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN\n-00000940: 567b 2754 4d50 4449 5227 7d3b 0a0a 3d68 V{'TMPDIR'};..=h\n-00000950: 6561 6431 204e 414d 450a 0a73 746f 7265 ead1 NAME..store\n-00000960: 4261 636b 7570 5265 636f 7665 722e 706c BackupRecover.pl\n-00000970: 202d 2072 6563 6f76 6572 7320 6669 6c65 - recovers file\n-00000980: 7320 7361 7665 6420 7769 7468 2073 746f s saved with sto\n-00000990: 7265 4261 636b 7570 2e70 6c2e 0a0a 3d68 reBackup.pl...=h\n-000009a0: 6561 6431 2053 594e 4f50 5349 530a 0a09 ead1 SYNOPSIS...\n-000009b0: 7374 6f72 6542 6163 6b75 7052 6563 6f76 storeBackupRecov\n-000009c0: 6572 2e70 6c20 2d72 2072 6573 746f 7265 er.pl -r restore\n-000009d0: 205b 2d62 2072 6f6f 745d 202d 7420 7461 [-b root] -t ta\n-000009e0: 7267 6574 4469 7220 5b2d 2d66 6c61 745d rgetDir [--flat]\n-000009f0: 0a09 095b 2d6f 5d20 5b2d 2d74 6d70 6469 ...[-o] [--tmpdi\n-00000a00: 725d 205b 2d2d 6e6f 4861 7264 4c69 6e6b r] [--noHardLink\n-00000a10: 735d 205b 2d70 206e 756d 6265 725d 205b s] [-p number] [\n-00000a20: 2d76 5d20 5b2d 6e5d 0a09 095b 2d2d 6370 -v] [-n]...[--cp\n-00000a30: 4973 476e 755d 205b 2d2d 6e6f 476e 7543 IsGnu] [--noGnuC\n-00000a40: 705d 205b 2d73 5d0a 0a3d 6865 6164 3120 p] [-s]..=head1 \n-00000a50: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8\n-00000a60: 0a0a 3d69 7465 6d20 423c 2d2d 7265 7374 ..=item B<--rest\n-00000a70: 6f72 6554 7265 653e 2c20 423c 2d72 3e0a oreTree>, B<-r>.\n-00000a80: 0a20 2020 2066 696c 6520 6f72 2028 7061 . file or (pa\n-00000a90: 7274 206f 6629 2074 6865 2074 7265 6520 rt of) the tree \n-00000aa0: 746f 2072 6573 746f 7265 0a20 2020 2077 to restore. w\n-00000ab0: 6865 6e20 7265 7374 6f72 696e 6720 6120 hen restoring a \n-00000ac0: 6669 6c65 2c20 7468 6520 6669 6c65 206e file, the file n\n-00000ad0: 616d 6520 696e 2074 6865 2062 6163 6b75 ame in the backu\n-00000ae0: 7020 6861 730a 2020 2020 746f 2062 6520 p has. to be \n-00000af0: 7573 6564 2028 6567 2e20 7769 7468 2063 used (eg. with c\n-00000b00: 6f6d 7072 6573 7369 6f6e 2073 7566 6669 ompression suffi\n-00000b10: 7829 0a0a 3d69 7465 6d20 423c 2d2d 6261 x)..=item B<--ba\n-00000b20: 636b 7570 526f 6f74 3e2c 2042 3c2d 623e ckupRoot>, B<-b>\n-00000b30: 0a0a 2020 2020 726f 6f74 206f 6620 7374 .. root of st\n-00000b40: 6f72 6542 6163 6b75 7020 7472 6565 2c20 oreBackup tree, \n-00000b50: 6e6f 726d 616c 6c79 206e 6f74 206e 6565 normally not nee\n-00000b60: 6465 640a 0a3d 6974 656d 2042 3c2d 2d74 ded..=item B<--t\n-00000b70: 6172 6765 7444 6972 3e2c 2042 3c2d 743e argetDir>, B<-t>\n-00000b80: 0a0a 2020 2020 6469 7265 6374 6f72 7920 .. directory \n-00000b90: 666f 7220 756e 7061 636b 696e 670a 0a3d for unpacking..=\n-00000ba0: 6974 656d 2042 3c2d 2d66 6c61 743e 0a0a item B<--flat>..\n-00000bb0: 2020 2020 646f 206e 6f74 2063 7265 6174 do not creat\n-00000bc0: 6520 7375 6264 6972 6563 746f 7269 6573 e subdirectories\n-00000bd0: 0a0a 3d69 7465 6d20 423c 2d2d 6f76 6572 ..=item B<--over\n-00000be0: 7772 6974 653e 2c20 423c 2d6f 3e0a 0a20 write>, B<-o>.. \n-00000bf0: 2020 206f 7665 7277 7269 7465 2065 7869 overwrite exi\n-00000c00: 7374 696e 6720 6669 6c65 730a 0a3d 6974 sting files..=it\n-00000c10: 656d 2042 3c2d 2d74 6d70 6469 723e 2c20 em B<--tmpdir>, \n-00000c20: 423c 2d54 3e0a 0a20 2020 2064 6972 6563 B<-T>.. direc\n-00000c30: 746f 7279 2066 6f72 2074 656d 706f 7261 tory for tempora\n-00000c40: 7279 2066 696c 652c 2064 6566 6175 6c74 ry file, default\n-00000c50: 2069 7320 3c24 746d 7064 6972 3e0a 0a3d is <$tmpdir>..=\n-00000c60: 6974 656d 2042 3c2d 2d6e 6f48 6172 644c item B<--noHardL\n-00000c70: 696e 6b73 3e0a 0a20 2020 2064 6f20 6e6f inks>.. do no\n-00000c80: 7420 7265 636f 6e73 7472 7563 7420 6861 t reconstruct ha\n-00000c90: 7264 206c 696e 6b73 2069 6e20 7265 7374 rd links in rest\n-00000ca0: 6f72 6520 7472 6565 0a0a 3d69 7465 6d20 ore tree..=item \n-00000cb0: 423c 2d2d 6e6f 5265 7374 6f72 6550 6172 B<--noRestorePar\n-00000cc0: 616c 6c65 6c3e 2c20 423c 2d70 3e0a 0a20 allel>, B<-p>.. \n-00000cd0: 2020 206d 6178 206e 6f20 6f66 2070 6172 max no of par\n-00000ce0: 616c 656c 6c20 7072 6f67 7261 6d73 2074 alell programs t\n-00000cf0: 6f20 756e 7061 636b 2c20 6465 6661 756c o unpack, defaul\n-00000d00: 7420 6973 2031 320a 2020 2020 7265 6475 t is 12. redu\n-00000d10: 6365 2074 6869 7320 6e75 6d62 6572 2069 ce this number i\n-00000d20: 6620 796f 7520 6172 6520 7265 7374 6f72 f you are restor\n-00000d30: 696e 6720 626c 6f63 6b65 6420 6669 6c65 ing blocked file\n-00000d40: 730a 2020 2020 616e 6420 7468 6520 7379 s. and the sy\n-00000d50: 7374 656d 2068 6173 2069 6e73 7566 6669 stem has insuffi\n-00000d60: 6369 656e 7420 5241 4d0a 0a3d 6974 656d cient RAM..=item\n-00000d70: 2042 3c2d 2d76 6572 626f 7365 3e2c 2042 B<--verbose>, B\n-00000d80: 3c2d 763e 0a0a 2020 2020 7072 696e 7420 <-v>.. print \n-00000d90: 7665 7262 6f73 6520 6d65 7373 6167 6573 verbose messages\n-00000da0: 0a0a 3d69 7465 6d20 423c 2d2d 6e6f 5265 ..=item B<--noRe\n-00000db0: 7374 6f72 6564 3e2c 2042 3c2d 6e3e 0a0a stored>, B<-n>..\n-00000dc0: 2020 2020 7072 696e 7420 6e75 6d62 6572 print number\n-00000dd0: 206f 6620 7265 7374 6f72 6564 2064 6972 of restored dir\n-00000de0: 732c 2068 6172 646c 696e 6b73 2c20 7379 s, hardlinks, sy\n-00000df0: 6d6c 696e 6b73 2c20 6669 6c65 732c 202e mlinks, files, .\n-00000e00: 2e2e 0a0a 3d69 7465 6d20 423c 2d2d 6e6f ....=item B<--no\n-00000e10: 476e 7543 703e 0a0a 2020 2020 6f76 6572 GnuCp>.. over\n-00000e20: 7772 6974 6520 696e 666f 726d 6174 696f write informatio\n-00000e30: 6e20 696e 2062 6163 6b75 703a 2079 6f75 n in backup: you\n-00000e40: 2064 6f20 6e6f 7420 6861 7665 2067 6e75 do not have gnu\n-00000e50: 6370 0a20 2020 2069 6e73 7461 6c6c 6564 cp. installed\n-00000e60: 0a20 2020 2028 6f6e 6c79 2072 656c 6576 . (only relev\n-00000e70: 616e 7420 666f 7220 736f 636b 6574 732c ant for sockets,\n-00000e80: 2062 6c6f 636b 2061 6e64 2063 6861 7261 block and chara\n-00000e90: 6374 6572 2064 6576 6963 6573 290a 0a3d cter devices)..=\n-00000ea0: 6974 656d 2042 3c2d 2d63 7265 6174 6553 item B<--createS\n-00000eb0: 7061 7273 6546 696c 6573 3e2c 2042 3c2d parseFiles>, B<-\n-00000ec0: 733e 0a0a 2020 2020 6372 6561 7465 7320 s>.. creates \n-00000ed0: 7370 6172 7365 2066 696c 6520 6672 6f6d sparse file from\n-00000ee0: 2062 6c6f 636b 6564 2066 696c 6573 2069 blocked files i\n-00000ef0: 6620 6675 6c6c 2062 6c6f 636b 6573 0a20 f full blockes. \n-00000f00: 2020 2061 7265 2066 696c 6c65 6420 7769 are filled wi\n-00000f10: 7468 207a 6572 6f73 0a0a 3d62 6163 6b0a th zeros..=back.\n-00000f20: 0a3d 6865 6164 3120 434f 5059 5249 4748 .=head1 COPYRIGH\n-00000f30: 540a 0a43 6f70 7972 6967 6874 2028 6329 T..Copyright (c)\n-00000f40: 2032 3030 322d 3230 3232 2062 7920 4865 2002-2022 by He\n-00000f50: 696e 7a2d 4a6f 7365 6620 436c 6165 7320 inz-Josef Claes \n-00000f60: 2873 6565 2052 4541 444d 4529 2e0a 5075 (see README)..Pu\n-00000f70: 626c 6973 6865 6420 756e 6465 7220 7468 blished under th\n-00000f80: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu\n-00000f90: 626c 6963 204c 6963 656e 7365 2076 3320 blic License v3 \n-00000fa0: 6f72 2061 6e79 206c 6174 6572 2076 6572 or any later ver\n-00000fb0: 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 2024 sion..=cut..my $\n-00000fc0: 4865 6c70 203d 2026 3a3a 6765 7450 6f64 Help = &::getPod\n-00000fd0: 3254 6578 7428 2430 293b 0a0a 2670 7269 2Text($0);..&pri\n-00000fe0: 6e74 5665 7273 696f 6e28 5c40 4152 4756 ntVersion(\\@ARGV\n-00000ff0: 2c20 272d 5627 2c20 272d 2d76 6572 7369 , '-V', '--versi\n-00001000: 6f6e 2729 3b0a 0a6d 7920 2443 6865 636b on');..my $Check\n-00001010: 5061 7220 3d0a 2020 2020 4368 6563 6b50 Par =. CheckP\n-00001020: 6172 616d 2d3e 6e65 7728 272d 616c 6c6f aram->new('-allo\n-00001030: 774c 6973 7473 2720 3d3e 2027 6e6f 272c wLists' => 'no',\n-00001040: 0a09 0920 2020 2027 2d6c 6973 7427 203d ... '-list' =\n-00001050: 3e20 5b4f 7074 696f 6e2d 3e6e 6577 2827 > [Option->new('\n-00001060: 2d6e 616d 6527 203d 3e20 2772 6573 746f -name' => 'resto\n-00001070: 7265 5472 6565 272c 0a09 0909 0909 2020 reTree',...... \n-00001080: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00001090: 3e20 272d 7227 2c0a 0909 0909 0920 2020 > '-r',...... \n-000010a0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-000010b0: 272d 2d72 6573 746f 7265 5472 6565 272c '--restoreTree',\n-000010c0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-000010d0: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',....\n-000010e0: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be'\n-000010f0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-00001100: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001110: 6d65 2720 3d3e 2027 6261 636b 7570 526f me' => 'backupRo\n-00001120: 6f74 272c 0a09 0909 0909 2020 2020 272d ot',...... '-\n-00001130: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001140: 6227 2c0a 0909 0909 0920 2020 2027 2d63 b',...... '-c\n-00001150: 6c5f 616c 6961 7327 203d 3e20 272d 2d62 l_alias' => '--b\n-00001160: 6163 6b75 7052 6f6f 7427 2c0a 0909 0909 ackupRoot',.....\n-00001170: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n-00001180: 3d3e 2027 2729 2c0a 0909 0909 4f70 7469 => ''),.....Opti\n-00001190: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-000011a0: 3d3e 2027 7461 7267 6574 4469 7227 2c0a => 'targetDir',.\n-000011b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000011c0: 7469 6f6e 2720 3d3e 2027 2d74 272c 0a09 tion' => '-t',..\n-000011d0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-000011e0: 6173 2720 3d3e 2027 2d2d 7461 7267 6574 as' => '--target\n-000011f0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... '\n-00001200: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes'\n-00001210: 2c0a 0909 0909 0920 2020 2027 2d6d 7573 ,...... '-mus\n-00001220: 745f 6265 2720 3d3e 2027 7965 7327 292c t_be' => 'yes'),\n-00001230: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001240: 2827 2d6e 616d 6527 203d 3e20 2766 6c61 ('-name' => 'fla\n-00001250: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c\n-00001260: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00001270: 666c 6174 2729 2c0a 0909 0909 4f70 7469 flat'),.....Opti\n-00001280: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001290: 3d3e 2027 6f76 6572 7772 6974 6527 2c0a => 'overwrite',.\n-000012a0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000012b0: 7469 6f6e 2720 3d3e 2027 2d6f 272c 0a09 tion' => '-o',..\n-000012c0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-000012d0: 6173 2720 3d3e 2027 2d2d 6f76 6572 7772 as' => '--overwr\n-000012e0: 6974 6527 292c 0a09 0909 094f 7074 696f ite'),.....Optio\n-000012f0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001300: 3e20 2774 6d70 4469 7227 2c0a 0909 0909 > 'tmpDir',.....\n-00001310: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00001320: 2720 3d3e 2027 2d54 272c 0a09 0909 0909 ' => '-T',......\n-00001330: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n-00001340: 3d3e 2027 2d2d 746d 7064 6972 272c 0a09 => '--tmpdir',..\n-00001350: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-00001360: 7427 203d 3e20 2474 6d70 6469 7229 2c0a t' => $tmpdir),.\n-00001370: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00001380: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4861 '-name' => 'noHa\n-00001390: 7264 4c69 6e6b 7327 2c0a 0909 0909 0920 rdLinks',...... \n-000013a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000013b0: 3d3e 2027 2d2d 6e6f 4861 7264 4c69 6e6b => '--noHardLink\n-000013c0: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option-\n-000013d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-000013e0: 276e 6f52 6573 746f 7265 5061 7261 6c6c 'noRestoreParall\n-000013f0: 656c 272c 0a09 0909 0909 2020 2020 272d el',...... '-\n-00001400: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001410: 7027 2c0a 0909 0909 0920 2020 2027 2d63 p',...... '-c\n-00001420: 6c5f 616c 6961 7327 203d 3e20 272d 2d6e l_alias' => '--n\n-00001430: 6f52 6573 746f 7265 5061 7261 6c6c 656c oRestoreParallel\n-00001440: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00001450: 7474 6572 6e27 203d 3e20 275c 415c 642b ttern' => '\\A\\d+\n-00001460: 5c5a 272c 0a09 0909 0909 2020 2020 272d \\Z',...... '-\n-00001470: 6465 6661 756c 7427 203d 3e20 246e 6f52 default' => $noR\n-00001480: 6573 746f 7265 5061 7261 6c6c 656c 292c estoreParallel),\n-00001490: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-000014a0: 2827 2d6e 616d 6527 203d 3e20 2776 6572 ('-name' => 'ver\n-000014b0: 626f 7365 272c 0a09 0909 0909 2020 2020 bose',...... \n-000014c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000014d0: 272d 7627 2c0a 0909 0909 0920 2020 2027 '-v',...... '\n-000014e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-000014f0: 2d76 6572 626f 7365 2729 2c0a 0909 0909 -verbose'),.....\n-00001500: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001510: 6d65 2720 3d3e 2027 6e6f 5265 7374 6f72 me' => 'noRestor\n-00001520: 6564 272c 0a09 0909 0909 2020 2020 272d ed',...... '-\n-00001530: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001540: 6e27 2c0a 0909 0909 0920 2020 2027 2d63 n',...... '-c\n-00001550: 6c5f 616c 6961 7327 203d 3e20 272d 2d6e l_alias' => '--n\n-00001560: 6f52 6573 746f 7265 6427 292c 0a09 0909 oRestored'),....\n-00001570: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00001580: 616d 6527 203d 3e20 276e 6f47 6e75 4370 ame' => 'noGnuCp\n-00001590: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-000015a0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6e _option' => '--n\n-000015b0: 6f47 6e75 4370 2729 2c0a 0909 0909 4f70 oGnuCp'),.....Op\n-000015c0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000015d0: 2720 3d3e 2027 6372 6561 7465 5370 6172 ' => 'createSpar\n-000015e0: 7365 4669 6c65 7327 2c0a 0909 0909 0920 seFiles',...... \n-000015f0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00001600: 3d3e 2027 2d2d 6372 6561 7465 5370 6172 => '--createSpar\n-00001610: 7365 4669 6c65 7327 2c0a 0909 0909 0920 seFiles',...... \n-00001620: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00001630: 3e20 272d 7327 290a 0909 0909 5d0a 0909 > '-s').....]...\n-00001640: 2020 2020 293b 0a0a 2443 6865 636b 5061 );..$CheckPa\n-00001650: 722d 3e63 6865 636b 2827 2d61 7267 7627 r->check('-argv'\n-00001660: 203d 3e20 5c40 4152 4756 2c0a 2020 2020 => \\@ARGV,. \n-00001670: 2020 2020 2020 2020 2020 2020 2027 2d68 '-h\n-00001680: 656c 7027 203d 3e20 2448 656c 700a 2020 elp' => $Help. \n-00001690: 2020 2020 2020 2020 2020 2020 2020 2029 )\n-000016a0: 3b0a 0a23 2041 7573 7765 7274 756e 6720 ;..# Auswertung \n-000016b0: 6465 7220 5061 7261 6d65 7465 720a 6d79 der Parameter.my\n-000016c0: 2024 7265 7374 6f72 6554 7265 6520 3d20 $restoreTree = \n-000016d0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-000016e0: 7457 6974 6850 6172 2827 7265 7374 6f72 tWithPar('restor\n-000016f0: 6554 7265 6527 293b 0a6d 7920 2462 6163 eTree');.my $bac\n-00001700: 6b75 7052 6f6f 7420 3d20 2443 6865 636b kupRoot = $Check\n-00001710: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00001720: 6172 2827 6261 636b 7570 526f 6f74 2729 ar('backupRoot')\n-00001730: 3b0a 6d79 2024 7461 7267 6574 4469 7220 ;.my $targetDir \n-00001740: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001750: 4f70 7457 6974 6850 6172 2827 7461 7267 OptWithPar('targ\n-00001760: 6574 4469 7227 293b 0a6d 7920 2466 6c61 etDir');.my $fla\n-00001770: 7420 3d20 2443 6865 636b 5061 722d 3e67 t = $CheckPar->g\n-00001780: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00001790: 2766 6c61 7427 293b 0a6d 7920 246f 7665 'flat');.my $ove\n-000017a0: 7277 7269 7465 203d 2024 4368 6563 6b50 rwrite = $CheckP\n-000017b0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-000017c0: 7450 6172 2827 6f76 6572 7772 6974 6527 tPar('overwrite'\n-000017d0: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch\n-000017e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000017f0: 7468 5061 7228 2774 6d70 4469 7227 293b thPar('tmpDir');\n-00001800: 0a6d 7920 246e 6f48 6172 644c 696e 6b73 .my $noHardLinks\n-00001810: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00001820: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n-00001830: 6e6f 4861 7264 4c69 6e6b 7327 293b 0a6d noHardLinks');.m\n-00001840: 7920 246e 6f52 6573 746f 7265 5061 7261 y $noRestorePara\n-00001850: 6c6c 656c 203d 2024 4368 6563 6b50 6172 llel = $CheckPar\n-00001860: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00001870: 276e 6f52 6573 746f 7265 5061 7261 6c6c 'noRestoreParall\n-00001880: 656c 2729 3b0a 6d79 2024 7665 7262 6f73 el');.my $verbos\n-00001890: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n-000018a0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-000018b0: 2776 6572 626f 7365 2729 3b0a 6d79 2024 'verbose');.my $\n-000018c0: 6e6f 5265 7374 6f72 6564 203d 2024 4368 noRestored = $Ch\n-000018d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000018e0: 7468 6f75 7450 6172 2827 6e6f 5265 7374 thoutPar('noRest\n-000018f0: 6f72 6564 2729 3b0a 6d79 2024 6e6f 476e ored');.my $noGn\n-00001900: 7543 7020 3d20 2443 6865 636b 5061 722d uCp = $CheckPar-\n-00001910: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00001920: 7228 276e 6f47 6e75 4370 2729 3b0a 6d79 r('noGnuCp');.my\n-00001930: 2024 6372 6561 7465 5370 6172 7365 4669 $createSparseFi\n-00001940: 6c65 7320 3d20 2443 6865 636b 5061 722d les = $CheckPar-\n-00001950: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00001960: 7228 2763 7265 6174 6553 7061 7273 6546 r('createSparseF\n-00001970: 696c 6573 2729 3b0a 0a0a 6d79 2024 7072 iles');...my $pr\n-00001980: 4c6f 6720 3d20 7072 696e 744c 6f67 2d3e Log = printLog->\n-00001990: 6e65 7728 272d 6b69 6e64 2720 3d3e 205b new('-kind' => [\n-000019a0: 2749 3a49 4e46 4f27 2c20 2757 3a57 4152 'I:INFO', 'W:WAR\n-000019b0: 4e49 4e47 272c 2027 453a 4552 524f 5227 NING', 'E:ERROR'\n-000019c0: 2c0a 0909 0909 2020 2020 2020 2753 3a53 ,..... 'S:S\n-000019d0: 5441 5449 5354 4943 272c 2027 443a 4445 TATISTIC', 'D:DE\n-000019e0: 4255 4727 2c20 2756 3a56 4552 5349 4f4e BUG', 'V:VERSION\n-000019f0: 275d 2c0a 0909 0920 2027 2d74 6d70 6469 '],.... '-tmpdi\n-00001a00: 7227 203d 3e20 2474 6d70 6469 7229 3b0a r' => $tmpdir);.\n-00001a10: 2470 724c 6f67 2d3e 666f 726b 2824 7265 $prLog->fork($re\n-00001a20: 7129 3b0a 0a24 7072 4c6f 672d 3e70 7269 q);..$prLog->pri\n-00001a30: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00001a40: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-00001a50: 203d 3e20 5b22 7461 7267 6574 2064 6972 => [\"target dir\n-00001a60: 6563 746f 7279 203c 2474 6172 6765 7444 ectory <$targetD\n-00001a70: 6972 3e20 646f 6573 206e 6f74 2065 7869 ir> does not exi\n-00001a80: 7374 225d 2c0a 0920 2020 2020 2027 2d65 st\"],.. '-e\n-00001a90: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u\n-00001aa0: 6e6c 6573 7320 282d 6420 2474 6172 6765 nless (-d $targe\n-00001ab0: 7444 6972 293b 0a0a 2470 724c 6f67 2d3e tDir);..$prLog->\n-00001ac0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00001ad0: 2027 5627 2c0a 0920 2020 2020 2027 2d73 'V',.. '-s\n-00001ae0: 7472 2720 3d3e 205b 2273 746f 7265 4261 tr' => [\"storeBa\n-00001af0: 636b 7570 5265 636f 7665 722e 706c 2c20 ckupRecover.pl, \n-00001b00: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK\n-00001b10: 5550 5645 5253 494f 4e22 5d29 0a20 2020 UPVERSION\"]). \n-00001b20: 2069 6620 2476 6572 626f 7365 3b0a 0a65 if $verbose;..e\n-00001b30: 7661 6c20 2275 7365 2044 425f 4669 6c65 val \"use DB_File\n-00001b40: 223b 0a69 6620 2824 4029 0a7b 0a20 2020 \";.if ($@).{. \n-00001b50: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-00001b60: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00001b70: 0920 2027 2d73 7472 2720 3d3e 205b 2270 . '-str' => [\"p\n-00001b80: 6c65 6173 6520 696e 7374 616c 6c20 4442 lease install DB\n-00001b90: 5f46 696c 6520 6672 6f6d 2022 202e 0a09 _File from \" ...\n-00001ba0: 0909 2020 2020 2022 4350 414e 2066 6f72 .. \"CPAN for\n-00001bb0: 2062 6574 7465 7220 7065 7266 6f72 6d61 better performa\n-00001bc0: 6e63 6522 5d29 0a09 6966 2024 7665 7262 nce\"])..if $verb\n-00001bd0: 6f73 653b 0a7d 0a0a 6d79 2024 7274 203d ose;.}..my $rt =\n-00001be0: 2024 7265 7374 6f72 6554 7265 653b 0a6d $restoreTree;.m\n-00001bf0: 7920 2472 6573 746f 7265 5472 6565 203d y $restoreTree =\n-00001c00: 2026 6162 736f 6c75 7465 5061 7468 2824 &absolutePath($\n-00001c10: 7265 7374 6f72 6554 7265 6529 3b0a 2472 restoreTree);.$r\n-00001c20: 6573 746f 7265 5472 6565 203d 2024 3120 estoreTree = $1 \n-00001c30: 6966 2024 7265 7374 6f72 6554 7265 6520 if $restoreTree \n-00001c40: 3d7e 202f 282e 2a29 5c2f 242f 3b20 2023 =~ /(.*)\\/$/; #\n-00001c50: 2072 656d 6f76 6520 7472 6169 6c69 6e67 remove trailing\n-00001c60: 2027 2f27 0a0a 230a 2320 6d64 3543 6865 '/'..#.# md5Che\n-00001c70: 636b 5375 6d20 2d20 4461 7465 6920 6669 ckSum - Datei fi\n-00001c80: 6e64 656e 0a24 7072 4c6f 672d 3e70 7269 nden.$prLog->pri\n-00001c90: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00001ca0: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-00001cb0: 203d 3e20 5b22 6469 7265 6374 6f72 7920 => [\"directory \n-00001cc0: 6f72 2066 696c 6520 3c24 7274 3e20 646f or file <$rt> do\n-00001cd0: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist\"],.\n-00001ce0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00001cf0: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless \n-00001d00: 282d 6520 2472 7429 3b0a 6d79 2024 6973 (-e $rt);.my $is\n-00001d10: 4669 6c65 203d 2031 2069 6620 282d 6620 File = 1 if (-f \n-00001d20: 2472 7429 3b0a 0a69 6620 2824 6261 636b $rt);..if ($back\n-00001d30: 7570 526f 6f74 290a 7b0a 2020 2020 2470 upRoot).{. $p\n-00001d40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00001d50: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n-00001d60: 272d 7374 7227 203d 3e20 5b22 6469 7265 '-str' => [\"dire\n-00001d70: 6374 6f72 7920 3c24 6261 636b 7570 526f ctory <$backupRo\n-00001d80: 6f74 3e20 646f 6573 206e 6f74 2065 7869 ot> does not exi\n-00001d90: 7422 5d2c 0a09 0920 2027 2d65 7869 7427 t\"],... '-exit'\n-00001da0: 203d 3e20 3129 0a09 756e 6c65 7373 2028 => 1)..unless (\n-00001db0: 2d64 2024 6261 636b 7570 526f 6f74 293b -d $backupRoot);\n-00001dc0: 0a20 2020 2024 6261 636b 7570 526f 6f74 . $backupRoot\n-00001dd0: 203d 2026 6162 736f 6c75 7465 5061 7468 = &absolutePath\n-00001de0: 2824 6261 636b 7570 526f 6f74 293b 0a7d ($backupRoot);.}\n-00001df0: 0a65 6c73 650a 7b0a 2020 2020 6d79 2024 .else.{. my $\n-00001e00: 6469 7220 3d20 2472 6573 746f 7265 5472 dir = $restoreTr\n-00001e10: 6565 3b0a 2020 2020 2464 6972 203d 7e20 ee;. $dir =~ \n-00001e20: 732f 285c 2f5c 2e29 2a24 2f2f 3b20 2020 s/(\\/\\.)*$//; \n-00001e30: 2020 2023 2072 656d 6f76 6520 7472 6169 # remove trai\n-00001e40: 6c69 6e67 202f 2e0a 0a20 2020 2024 6261 ling /... $ba\n-00001e50: 636b 7570 526f 6f74 203d 2075 6e64 6566 ckupRoot = undef\n-00001e60: 3b0a 2020 2020 646f 0a20 2020 207b 0a09 ;. do. {..\n-00001e70: 2464 6972 203d 7e20 732f 5c2f 5c2e 5c2f $dir =~ s/\\/\\.\\/\n-00001e80: 2f5c 2f2f 673b 2020 2023 2073 7562 7374 /\\//g; # subst\n-00001e90: 6974 7574 6520 2f2e 2f20 2d3e 202f 0a0a itute /./ -> /..\n-00001ea0: 0923 2066 6573 7473 7465 6c6c 656e 2c20 .# feststellen, \n-00001eb0: 6f62 2065 696e 6520 2e6d 6435 7375 6d20 ob eine .md5sum \n-00001ec0: 4461 7465 6920 766f 7268 616e 6465 6e20 Datei vorhanden \n-00001ed0: 6973 740a 0969 6620 282d 6620 2224 6469 ist..if (-f \"$di\n-00001ee0: 722f 2463 6865 636b 5375 6d46 696c 6522 r/$checkSumFile\"\n-00001ef0: 206f 7220 2d66 2022 2464 6972 2f24 6368 or -f \"$dir/$ch\n-00001f00: 6563 6b53 756d 4669 6c65 2e62 7a32 2229 eckSumFile.bz2\")\n-00001f10: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog-\n-00001f20: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00001f30: 3e20 2749 272c 0a09 0909 2020 272d 7374 > 'I',.... '-st\n-00001f40: 7227 203d 3e20 5b22 666f 756e 6420 696e r' => [\"found in\n-00001f50: 666f 2066 696c 6520 3c24 6368 6563 6b53 fo file <$checkS\n-00001f60: 756d 4669 6c65 3e20 696e 2022 202e 0a09 umFile> in \" ...\n-00001f70: 0909 0920 2020 2020 2264 6972 6563 746f ... \"directo\n-00001f80: 7279 203c 2464 6972 3e22 5d29 0a09 0969 ry <$dir>\"])...i\n-00001f90: 6620 2824 7665 7262 6f73 6529 3b0a 0920 f ($verbose);.. \n-00001fa0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00001fb0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00001fc0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-00001fd0: 0909 0920 205b 2266 6f75 6e64 2069 6e66 ... [\"found inf\n-00001fe0: 6f20 6669 6c65 203c 2463 6865 636b 5375 o file <$checkSu\n-00001ff0: 6d46 696c 653e 2061 2073 6563 6f6e 6420 mFile> a second \n-00002000: 7469 6d65 2069 6e20 2220 2e0a 0909 0920 time in \" ..... \n-00002010: 2020 223c 2464 6972 3e2c 2066 6972 7374 \"<$dir>, first\n-00002020: 2074 696d 6520 666f 756e 6420 696e 203c time found in <\n-00002030: 2462 6163 6b75 7052 6f6f 743e 225d 2c0a $backupRoot>\"],.\n-00002040: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-00002050: 3129 0a09 0969 6620 2824 6261 636b 7570 1)...if ($backup\n-00002060: 526f 6f74 293b 0a0a 0920 2020 2024 6261 Root);... $ba\n-00002070: 636b 7570 526f 6f74 203d 2024 6469 723b ckupRoot = $dir;\n-00002080: 0a09 7d0a 0a09 2824 6469 722c 2024 5f29 ..}...($dir, $_)\n-00002090: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir\n-000020a0: 2824 6469 7229 3b0a 2020 2020 7d20 7768 ($dir);. } wh\n-000020b0: 696c 6520 2824 6469 7220 6e65 2027 2f27 ile ($dir ne '/'\n-000020c0: 293b 0a0a 0a20 2020 2024 7072 4c6f 672d );... $prLog-\n-000020d0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000020e0: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n-000020f0: 2720 3d3e 205b 2264 6964 206e 6f74 2066 ' => [\"did not f\n-00002100: 696e 6420 696e 666f 2066 696c 6520 3c24 ind info file <$\n-00002110: 6368 6563 6b53 756d 4669 6c65 3e22 5d2c checkSumFile>\"],\n-00002120: 0a09 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-00002130: 3129 0a09 756e 6c65 7373 2028 2462 6163 1)..unless ($bac\n-00002140: 6b75 7052 6f6f 7429 3b0a 7d0a 0a24 7265 kupRoot);.}..$re\n-00002150: 7374 6f72 6554 7265 6520 3d20 7375 6273 storeTree = subs\n-00002160: 7472 2824 7265 7374 6f72 6554 7265 652c tr($restoreTree,\n-00002170: 206c 656e 6774 6828 2462 6163 6b75 7052 length($backupR\n-00002180: 6f6f 7429 202b 2031 293b 0a0a 0a23 205e oot) + 1);...# ^\n-00002190: 5e5e 0a23 2024 6261 636b 7570 526f 6f74 ^^.# $backupRoot\n-000021a0: 2062 6569 6e68 616c 7465 7420 6a65 747a beinhaltet jetz\n-000021b0: 7420 6465 6e20 5066 6164 207a 756d 2041 t den Pfad zum A\n-000021c0: 7263 6869 760a 2320 2472 6573 746f 7265 rchiv.# $restore\n-000021d0: 5472 6565 2062 6569 6e68 616c 7465 7420 Tree beinhaltet \n-000021e0: 6a65 747a 7420 6465 6e20 7265 6c61 7469 jetzt den relati\n-000021f0: 7665 6e20 5066 6164 2069 6e6e 6572 6861 ven Pfad innerha\n-00002200: 6c62 2064 6573 2041 7263 6869 7673 0a0a lb des Archivs..\n-00002210: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00002220: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. \n-00002230: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00002240: 2263 616e 6e6f 7420 7265 7374 6f72 6520 \"cannot restore \n-00002250: 3c24 6261 636b 7570 526f 6f74 3e20 6265 <$backupRoot> be\n-00002260: 6361 7573 6520 6f66 2075 6e72 6573 6f6c cause of unresol\n-00002270: 7665 6420 6c69 6e6b 7322 2c0a 0920 2020 ved links\",.. \n-00002280: 2020 2022 7275 6e20 7374 6f72 6542 6163 \"run storeBac\n-00002290: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup.\n-000022a0: 706c 2074 6f20 7265 736f 6c76 6522 5d2c pl to resolve\"],\n-000022b0: 0a09 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n-000022c0: 3d3e 2031 290a 2020 2020 6966 202d 6520 => 1). if -e \n-000022d0: 2224 6261 636b 7570 526f 6f74 2f2e 7374 \"$backupRoot/.st\n-000022e0: 6f72 6542 6163 6b75 704c 696e 6b73 2f6c oreBackupLinks/l\n-000022f0: 696e 6b46 696c 652e 627a 3222 3b0a 0a6d inkFile.bz2\";..m\n-00002300: 7920 2825 7365 7450 6572 6d44 6972 7329 y (%setPermDirs)\n-00002310: 3b0a 756e 6c65 7373 2028 2466 6c61 7429 ;.unless ($flat)\n-00002320: 0a7b 0a20 2020 2023 2053 7562 7472 6565 .{. # Subtree\n-00002330: 2075 6e74 6572 2064 656d 205a 6965 6c64 unter dem Zield\n-00002340: 6972 6563 746f 7279 2065 727a 6575 6765 irectory erzeuge\n-00002350: 6e0a 2020 2020 263a 3a6d 616b 6546 696c n. &::makeFil\n-00002360: 6550 6174 6828 2224 7461 7267 6574 4469 ePath(\"$targetDi\n-00002370: 722f 2472 6573 746f 7265 5472 6565 222c r/$restoreTree\",\n-00002380: 2024 7072 4c6f 6729 3b0a 0a20 2020 206d $prLog);.. m\n-00002390: 7920 2840 6429 203d 2073 706c 6974 282f y (@d) = split(/\n-000023a0: 5c2f 2b2f 2c20 2472 6573 746f 7265 5472 \\/+/, $restoreTr\n-000023b0: 6565 293b 0a20 2020 206d 7920 2469 3b0a ee);. my $i;.\n-000023c0: 2020 2020 666f 7220 2824 6920 3d20 3020 for ($i = 0 \n-000023d0: 3b20 2469 203c 2040 6420 3b20 2469 2b2b ; $i < @d ; $i++\n-000023e0: 290a 2020 2020 7b0a 0924 7365 7450 6572 ). {..$setPer\n-000023f0: 6d44 6972 737b 6a6f 696e 2827 2f27 2c20 mDirs{join('/', \n-00002400: 4064 5b30 2e2e 2469 5d29 7d20 3d20 313b @d[0..$i])} = 1;\n-00002410: 0a20 2020 207d 0a7d 0a0a 230a 2320 4a65 . }.}..#.# Je\n-00002420: 7a74 2049 6e66 6f66 696c 6520 6569 6e6c zt Infofile einl\n-00002430: 6573 656e 2075 6e64 2064 6965 2067 6577 esen und die gew\n-00002440: c3bc 6e73 6368 7465 6e20 4461 7465 6965 ..nschten Dateie\n-00002450: 6e20 6175 7373 6f72 7469 6572 656e 0a23 n aussortieren.#\n-00002460: 0a0a 6d79 2024 7263 7366 203d 2072 6561 ..my $rcsf = rea\n-00002470: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n\n-00002480: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil\n-00002490: 6527 203d 3e0a 0909 0909 2022 2462 6163 e' =>..... \"$bac\n-000024a0: 6b75 7052 6f6f 742f 2463 6865 636b 5375 kupRoot/$checkSu\n-000024b0: 6d46 696c 6522 2c0a 0909 0909 2027 2d70 mFile\",..... '-p\n-000024c0: 724c 6f67 2720 3d3e 2024 7072 4c6f 672c rLog' => $prLog,\n-000024d0: 0a09 0909 0920 272d 746d 7064 6972 2720 ..... '-tmpdir' \n-000024e0: 3d3e 2024 746d 7064 6972 293b 0a0a 6d79 => $tmpdir);..my\n-000024f0: 2024 666f 726b 203d 2070 6172 616c 6c65 $fork = paralle\n-00002500: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max\n-00002510: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no\n-00002520: 5265 7374 6f72 6550 6172 616c 6c65 6c2c RestoreParallel,\n-00002530: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog\n-00002540: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a6d ' => $prLog);..m\n-00002550: 7920 2824 756e 636f 6d70 722c 2040 756e y ($uncompr, @un\n-00002560: 636f 6d70 7250 6172 2920 3d20 407b 2472 comprPar) = @{$r\n-00002570: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith\n-00002580: 5061 7228 2775 6e63 6f6d 7072 6573 7327 Par('uncompress'\n-00002590: 297d 3b0a 6d79 2028 2463 702c 2040 6370 )};.my ($cp, @cp\n-000025a0: 5061 7229 203d 2028 2763 7027 2c20 272d Par) = ('cp', '-\n-000025b0: 6450 5227 293b 0a6d 7920 2470 6f73 7466 dPR');.my $postf\n-000025c0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI\n-000025d0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post\n-000025e0: 6669 7827 293b 0a6d 7920 2467 6e75 6370 fix');.my $gnucp\n-000025f0: 203d 2024 7263 7366 2d3e 6765 7449 6e66 = $rcsf->getInf\n-00002600: 6f57 6974 6850 6172 2827 6370 4973 476e oWithPar('cpIsGn\n-00002610: 7527 293b 0a24 676e 7563 7020 3d20 2824 u');.$gnucp = ($\n-00002620: 676e 7563 7020 6571 2027 7965 7327 2920 gnucp eq 'yes') \n-00002630: 3f20 3120 3a20 303b 0a24 676e 7563 7020 ? 1 : 0;.$gnucp \n-00002640: 3d20 3020 6966 2024 6e6f 476e 7543 703b = 0 if $noGnuCp;\n-00002650: 0a6d 7920 2461 7263 6869 7665 5479 7065 .my $archiveType\n-00002660: 7320 3d20 2472 6373 662d 3e67 6574 496e s = $rcsf->getIn\n-00002670: 666f 5769 7468 5061 7228 2761 7263 6869 foWithPar('archi\n-00002680: 7665 5479 7065 7327 293b 0a6d 7920 2473 veTypes');.my $s\n-00002690: 7065 6369 616c 5479 7065 4172 6368 6976 pecialTypeArchiv\n-000026a0: 6572 203d 2024 7263 7366 2d3e 6765 7449 er = $rcsf->getI\n-000026b0: 6e66 6f57 6974 6850 6172 2827 7370 6563 nfoWithPar('spec\n-000026c0: 6961 6c54 7970 6541 7263 6869 7665 7227 ialTypeArchiver'\n-000026d0: 293b 0a0a 246d 6169 6e3a 3a49 4f43 6f6d );..$main::IOCom\n-000026e0: 7072 6573 7344 6972 6563 7420 3d20 303b pressDirect = 0;\n-000026f0: 0a69 6620 2824 756e 636f 6d70 7220 6571 .if ($uncompr eq\n-00002700: 2027 627a 6970 3227 206f 7220 2475 6e63 'bzip2' or $unc\n-00002710: 6f6d 7072 2065 7120 2762 756e 7a69 7032 ompr eq 'bunzip2\n-00002720: 2729 0a7b 0a20 2020 2065 7661 6c20 2275 ').{. eval \"u\n-00002730: 7365 2049 4f3a 3a55 6e63 6f6d 7072 6573 se IO::Uncompres\n-00002740: 733a 3a42 756e 7a69 7032 2071 7728 6275 s::Bunzip2 qw(bu\n-00002750: 6e7a 6970 3229 223b 0a20 2020 2069 6620 nzip2)\";. if \n-00002760: 2824 4029 0a20 2020 207b 0a09 2470 724c ($@). {..$prL\n-00002770: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002780: 2720 3d3e 2027 4927 2c0a 0909 2020 2020 ' => 'I',... \n-00002790: 2020 272d 7374 7227 203d 3e20 5b22 706c '-str' => [\"pl\n-000027a0: 6561 7365 2069 6e73 7461 6c6c 2049 4f3a ease install IO:\n-000027b0: 3a55 6e63 6f6d 7072 6573 733a 3a42 756e :Uncompress::Bun\n-000027c0: 7a69 7032 2066 726f 6d20 2220 2e0a 0909 zip2 from \" ....\n-000027d0: 0909 2022 4350 414e 2066 6f72 2062 6574 .. \"CPAN for bet\n-000027e0: 7465 7220 7065 7266 6f72 6d61 6e63 6522 ter performance\"\n-000027f0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el\n-00002800: 7365 0a20 2020 207b 0a09 246d 6169 6e3a se. {..$main:\n-00002810: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec\n-00002820: 7420 3d20 313b 0a20 2020 207d 0a7d 0a0a t = 1;. }.}..\n-00002830: 2320 6462 6d2d 4669 6c65 20c3 b666 666e # dbm-File ..ffn\n-00002840: 656e 0a6d 7920 2544 424d 4861 7264 4c69 en.my %DBMHardLi\n-00002850: 6e6b 3b20 2020 2020 2020 2023 206b 6579 nk; # key\n-00002860: 3a20 6465 762d 696e 6f64 6520 286f 6465 : dev-inode (ode\n-00002870: 7220 756e 6465 6629 2c20 7661 6c75 653a r undef), value:\n-00002880: 2066 696c 656e 616d 650a 6d79 2025 6861 filename.my %ha\n-00002890: 7354 6f42 654c 696e 6b65 6420 3d20 2829 sToBeLinked = ()\n-000028a0: 3b20 2320 6869 6572 2077 6572 6465 6e20 ; # hier werden \n-000028b0: 6469 6520 7a75 206c 696e 6b65 6e64 656e die zu linkenden\n-000028c0: 2044 6174 6569 656e 2067 6573 616d 6d65 Dateien gesamme\n-000028d0: 6c74 2c0a 2020 2020 2020 2020 2020 2020 lt,. \n-000028e0: 2020 2020 2020 2020 2020 2020 2320 6269 # bi\n-000028f0: 7320 6469 6520 5265 6665 7265 6e7a 6461 s die Referenzda\n-00002900: 7465 6920 766f 6c6c 7374 c3a4 6e64 6967 tei vollst..ndig\n-00002910: 207a 7572 c3bc 636b 6765 7369 6368 6572 zur..ckgesicher\n-00002920: 7420 6973 740a 756e 6c65 7373 2028 246e t ist.unless ($n\n-00002930: 6f48 6172 644c 696e 6b73 290a 7b0a 2020 oHardLinks).{. \n-00002940: 2020 6462 6d6f 7065 6e28 2544 424d 4861 dbmopen(%DBMHa\n-00002950: 7264 4c69 6e6b 2c20 2224 746d 7064 6972 rdLink, \"$tmpdir\n-00002960: 2f73 7462 7265 636f 7665 722e 2424 222c /stbrecover.$$\",\n-00002970: 2030 3630 3029 3b0a 7d0a 0a6d 7920 246e 0600);.}..my $n\n-00002980: 6f46 696c 6573 436f 7079 203d 2030 3b0a oFilesCopy = 0;.\n-00002990: 6d79 2024 6e6f 4669 6c65 7343 6f6d 7072 my $noFilesCompr\n-000029a0: 203d 2030 3b0a 6d79 2024 6e6f 4669 6c65 = 0;.my $noFile\n-000029b0: 7342 6c6f 636b 6564 203d 2030 3b0a 6d79 sBlocked = 0;.my\n-000029c0: 2024 6e6f 5379 6d4c 696e 6b73 203d 2030 $noSymLinks = 0\n-000029d0: 3b0a 6d79 2024 6e6f 4e61 6d65 6450 6970 ;.my $noNamedPip\n-000029e0: 6573 203d 2030 3b0a 6d79 2024 6e6f 536f es = 0;.my $noSo\n-000029f0: 636b 6574 7320 3d20 303b 0a6d 7920 246e ckets = 0;.my $n\n-00002a00: 6f42 6c6f 636b 4465 7673 203d 2030 3b0a oBlockDevs = 0;.\n-00002a10: 6d79 2024 6e6f 4368 6172 4465 7673 203d my $noCharDevs =\n-00002a20: 2030 3b0a 6d79 2024 6e6f 4469 7273 203d 0;.my $noDirs =\n-00002a30: 2030 3b0a 6d79 2024 6861 7264 4c69 6e6b 0;.my $hardLink\n-00002a40: 7320 3d20 303b 0a0a 2472 6573 746f 7265 s = 0;..$restore\n-00002a50: 5472 6565 203d 2027 2720 6966 2024 7265 Tree = '' if $re\n-00002a60: 7374 6f72 6554 7265 6520 6571 2027 2e27 storeTree eq '.'\n-00002a70: 3b0a 6d79 2024 6c72 6573 746f 7265 5472 ;.my $lrestoreTr\n-00002a80: 6565 203d 206c 656e 6774 6828 2472 6573 ee = length($res\n-00002a90: 746f 7265 5472 6565 293b 0a0a 6d79 2024 toreTree);..my $\n-00002aa0: 746d 7044 6972 4669 6c65 203d 2026 3a3a tmpDirFile = &::\n-00002ab0: 756e 6971 4669 6c65 4e61 6d65 2822 2474 uniqFileName(\"$t\n-00002ac0: 6d70 6469 722f 7374 6275 5265 632e 2229 mpdir/stbuRec.\")\n-00002ad0: 3b0a 263a 3a63 6865 636b 4465 6c53 796d ;.&::checkDelSym\n-00002ae0: 4c69 6e6b 2824 746d 7044 6972 4669 6c65 Link($tmpDirFile\n-00002af0: 2c20 2470 724c 6f67 2c20 3078 3031 293b , $prLog, 0x01);\n-00002b00: 0a6c 6f63 616c 202a 4449 5246 494c 453b .local *DIRFILE;\n-00002b10: 0a6f 7065 6e28 4449 5246 494c 452c 2027 .open(DIRFILE, '\n-00002b20: 3e27 2c20 2474 6d70 4469 7246 696c 6529 >', $tmpDirFile)\n-00002b30: 206f 720a 2020 2020 2470 724c 6f67 2d3e or. $prLog->\n-00002b40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00002b50: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str'\n-00002b60: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => [\"cannot ope\n-00002b70: 6e20 3c24 746d 7044 6972 4669 6c65 3e2c n <$tmpDirFile>,\n-00002b80: 2065 7869 7469 6e67 225d 2c0a 0909 2020 exiting\"],... \n-00002b90: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL\n-00002ba0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 2c0a E__, __LINE__],.\n-00002bb0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n-00002bc0: 293b 0a63 686d 6f64 2030 3630 302c 2024 );.chmod 0600, $\n-00002bd0: 746d 7044 6972 4669 6c65 3b0a 0a6d 7920 tmpDirFile;..my \n-00002be0: 2824 6d64 3573 756d 2c20 2463 6f6d 7072 ($md5sum, $compr\n-00002bf0: 2c20 2464 6576 496e 6f64 652c 2024 696e , $devInode, $in\n-00002c00: 6f64 6542 6163 6b75 702c 2024 6374 696d odeBackup, $ctim\n-00002c10: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim\n-00002c20: 652c 0a20 2020 2024 7369 7a65 2c20 2475 e,. $size, $u\n-00002c30: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode,\n-00002c40: 2024 6669 6c65 6e61 6d65 293b 0a23 7072 $filename);.#pr\n-00002c50: 696e 7420 2272 6573 746f 7265 5472 6565 int \"restoreTree\n-00002c60: 203d 203c 2472 6573 746f 7265 5472 6565 = <$restoreTree\n-00002c70: 3e5c 6e22 3b0a 2370 7269 6e74 2022 6c72 >\\n\";.#print \"lr\n-00002c80: 6573 746f 7265 5472 6565 203d 203c 246c estoreTree = <$l\n-00002c90: 7265 7374 6f72 6554 7265 653e 5c6e 223b restoreTree>\\n\";\n-00002ca0: 0a23 7072 696e 7420 2269 7346 696c 6520 .#print \"isFile \n-00002cb0: 3d20 3c24 6973 4669 6c65 3e5c 6e22 3b0a = <$isFile>\\n\";.\n-00002cc0: 7768 696c 6520 2828 2824 6d64 3573 756d while ((($md5sum\n-00002cd0: 2c20 2463 6f6d 7072 2c20 2464 6576 496e , $compr, $devIn\n-00002ce0: 6f64 652c 2024 696e 6f64 6542 6163 6b75 ode, $inodeBacku\n-00002cf0: 702c 2024 6374 696d 652c 2024 6d74 696d p, $ctime, $mtim\n-00002d00: 652c 2024 6174 696d 652c 0a09 2024 7369 e, $atime,.. $si\n-00002d10: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, \n-00002d20: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename\n-00002d30: 2920 3d20 2472 6373 662d 3e6e 6578 744c ) = $rcsf->nextL\n-00002d40: 696e 6528 2929 203e 2030 290a 7b0a 2020 ine()) > 0).{. \n-00002d50: 2020 6d79 2024 6620 3d20 2466 696c 656e my $f = $filen\n-00002d60: 616d 653b 0a20 2020 2069 6620 2865 7869 ame;. if (exi\n-00002d70: 7374 7328 2473 6574 5065 726d 4469 7273 sts($setPermDirs\n-00002d80: 7b24 667d 2929 0a20 2020 207b 0a09 6368 {$f})). {..ch\n-00002d90: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n-00002da0: 2224 7461 7267 6574 4469 722f 2466 223b \"$targetDir/$f\";\n-00002db0: 0a09 6368 6d6f 6420 246d 6f64 652c 2022 ..chmod $mode, \"\n-00002dc0: 2474 6172 6765 7444 6972 2f24 6622 3b0a $targetDir/$f\";.\n-00002dd0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $\n-00002de0: 6d74 696d 652c 2022 2474 6172 6765 7444 mtime, \"$targetD\n-00002df0: 6972 2f24 6622 3b0a 2020 2020 7d0a 2020 ir/$f\";. }. \n-00002e00: 2020 6966 2028 2469 7346 696c 6520 616e if ($isFile an\n-00002e10: 6420 6c65 6e67 7468 2824 6d64 3573 756d d length($md5sum\n-00002e20: 2920 3d3d 2033 3229 0a20 2020 207b 0a09 ) == 32). {..\n-00002e30: 2466 202e 3d20 2470 6f73 7466 6978 2069 $f .= $postfix i\n-00002e40: 6620 2824 636f 6d70 7220 6571 2027 6327 f ($compr eq 'c'\n-00002e50: 293b 0a20 2020 207d 0a23 7072 696e 7420 );. }.#print \n-00002e60: 2266 726f 6d20 2e6d 6435 4368 6563 6b53 \"from .md5CheckS\n-00002e70: 756d 733a 203c 2466 3e20 3c24 7265 7374 ums: <$f> <$rest\n-00002e80: 6f72 6554 7265 653e 2024 6c72 6573 746f oreTree> $lresto\n-00002e90: 7265 5472 6565 5c6e 223b 0a20 2020 2069 reTree\\n\";. i\n-00002ea0: 6620 2824 7265 7374 6f72 6554 7265 6520 f ($restoreTree \n-00002eb0: 6571 2027 270a 096f 7220 2224 7265 7374 eq ''..or \"$rest\n-00002ec0: 6f72 6554 7265 652f 2220 6571 2073 7562 oreTree/\" eq sub\n-00002ed0: 7374 7228 2224 662f 222c 2030 2c20 246c str(\"$f/\", 0, $l\n-00002ee0: 7265 7374 6f72 6554 7265 6520 2b20 3129 restoreTree + 1)\n-00002ef0: 0a09 6f72 2028 2469 7346 696c 6520 616e ..or ($isFile an\n-00002f00: 6420 2472 6573 746f 7265 5472 6565 2065 d $restoreTree e\n-00002f10: 7120 2466 2929 0a20 2020 207b 0a23 7072 q $f)). {.#pr\n-00002f20: 696e 7420 222d 2d2d 3e20 7265 7374 6f72 int \"---> restor\n-00002f30: 6521 5c6e 223b 0a09 6d79 2024 7461 7267 e!\\n\";..my $targ\n-00002f40: 6574 4669 6c65 3b0a 0969 6620 2824 666c etFile;..if ($fl\n-00002f50: 6174 290a 097b 0a09 2020 2020 2824 5f2c at)..{.. ($_,\n-00002f60: 2024 7461 7267 6574 4669 6c65 2920 3d20 $targetFile) = \n-00002f70: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n-00002f80: 696c 656e 616d 6529 3b0a 0920 2020 2024 ilename);.. $\n-00002f90: 7461 7267 6574 4669 6c65 203d 2022 2474 targetFile = \"$t\n-00002fa0: 6172 6765 7444 6972 2f24 7461 7267 6574 argetDir/$target\n-00002fb0: 4669 6c65 223b 0a09 7d0a 0965 6c73 650a File\";..}..else.\n-00002fc0: 097b 0a09 2020 2020 2474 6172 6765 7446 .{.. $targetF\n-00002fd0: 696c 6520 3d20 2224 7461 7267 6574 4469 ile = \"$targetDi\n-00002fe0: 722f 2466 696c 656e 616d 6522 3b0a 097d r/$filename\";..}\n-00002ff0: 0a09 2474 6172 6765 7446 696c 6520 3d7e ..$targetFile =~\n-00003000: 2073 2f5c 2f2b 2f5c 2f2f 673b 2020 2020 s/\\/+/\\//g; \n-00003010: 2020 2020 2320 2f2f 202d 3e20 2f0a 0a09 # // -> /...\n-00003020: 6966 2028 6e6f 7420 246f 7665 7277 7269 if (not $overwri\n-00003030: 7465 2061 6e64 202d 6520 2474 6172 6765 te and -e $targe\n-00003040: 7446 696c 6529 0a09 7b0a 0920 2020 2024 tFile)..{.. $\n-00003050: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003060: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n-00003070: 2020 272d 7374 7227 203d 3e20 5b22 7461 '-str' => [\"ta\n-00003080: 7267 6574 3120 2474 6172 6765 7446 696c rget1 $targetFil\n-00003090: 6520 616c 7265 6164 7920 6578 6973 7473 e already exists\n-000030a0: 225d 293b 0a09 2020 2020 6e65 7874 3b0a \"]);.. next;.\n-000030b0: 097d 0a0a 096d 7920 2475 7365 476e 7543 .}...my $useGnuC\n-000030c0: 7020 3d20 2467 6e75 6370 2061 6e64 2028 p = $gnucp and (\n-000030d0: 246d 6435 7375 6d20 6571 2027 736f 636b $md5sum eq 'sock\n-000030e0: 6574 2720 6f72 0a09 0909 0920 2020 246d et' or..... $m\n-000030f0: 6435 7375 6d20 6571 2027 626c 6f63 6b64 d5sum eq 'blockd\n-00003100: 6576 2720 6f72 0a09 0909 0920 2020 246d ev' or..... $m\n-00003110: 6435 7375 6d20 6571 2027 6368 6172 6465 d5sum eq 'charde\n-00003120: 7627 293b 0a0a 0969 6620 2824 6d64 3573 v');...if ($md5s\n-00003130: 756d 2065 7120 2764 6972 2729 0a09 7b0a um eq 'dir')..{.\n-00003140: 0920 2020 2069 6620 286e 6f74 2024 666c . if (not $fl\n-00003150: 6174 2061 6e64 206e 6f74 202d 6520 2474 at and not -e $t\n-00003160: 6172 6765 7446 696c 6529 0a09 2020 2020 argetFile).. \n-00003170: 7b0a 0909 2b2b 246e 6f44 6972 733b 0a09 {...++$noDirs;..\n-00003180: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00003190: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000031a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-000031b0: 3e0a 0909 0920 2020 2020 205b 2263 616e >.... [\"can\n-000031c0: 6e6f 7420 6372 6561 7465 2064 6972 6563 not create direc\n-000031d0: 746f 7279 203c 2474 6172 6765 7446 696c tory <$targetFil\n-000031e0: 653e 225d 2c0a 0909 0920 2020 2020 2027 e>\"],.... '\n-000031f0: 2d65 7869 7427 203d 3e20 3129 0a09 0920 -exit' => 1)... \n-00003200: 2020 2075 6e6c 6573 7320 6d6b 6469 7220 unless mkdir \n-00003210: 2474 6172 6765 7446 696c 653b 0a09 0963 $targetFile;...c\n-00003220: 686f 776e 2024 7569 642c 2024 6769 642c hown $uid, $gid,\n-00003230: 2024 7461 7267 6574 4669 6c65 3b0a 2309 $targetFile;.#.\n-00003240: 0963 686d 6f64 2024 6d6f 6465 2c20 2474 .chmod $mode, $t\n-00003250: 6172 6765 7446 696c 653b 0a23 0909 7574 argetFile;.#..ut\n-00003260: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti\n-00003270: 6d65 2c20 2474 6172 6765 7446 696c 653b me, $targetFile;\n-00003280: 0a0a 0909 6d79 2024 7772 203d 2024 7461 ....my $wr = $ta\n-00003290: 7267 6574 4669 6c65 3b0a 0909 2477 7220 rgetFile;...$wr \n-000032a0: 3d7e 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 =~ s/\\n/\\0/og;..\n-000032b0: 0970 7269 6e74 2044 4952 4649 4c45 2022 .print DIRFILE \"\n-000032c0: 2461 7469 6d65 2024 6d74 696d 6520 246d $atime $mtime $m\n-000032d0: 6f64 6520 2477 725c 6e22 3b0a 0a09 0924 ode $wr\\n\";....$\n-000032e0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-000032f0: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',....\n-00003300: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00003310: 5b22 6d6b 6469 7220 2474 6172 6765 7446 [\"mkdir $targetF\n-00003320: 696c 6522 5d29 0a09 0920 2020 2069 6620 ile\"])... if \n-00003330: 2824 7665 7262 6f73 6529 3b0a 0920 2020 ($verbose);.. \n-00003340: 207d 0a09 7d0a 0965 6c73 6966 2028 246d }..}..elsif ($m\n-00003350: 6435 7375 6d20 6571 2027 7379 6d6c 696e d5sum eq 'symlin\n-00003360: 6b27 290a 097b 0a09 2020 2020 756e 6c65 k')..{.. unle\n-00003370: 7373 2028 246e 6f48 6172 644c 696e 6b73 ss ($noHardLinks\n-00003380: 290a 0920 2020 207b 0a09 0969 6620 2864 ).. {...if (d\n-00003390: 6566 696e 6564 2824 4442 4d48 6172 644c efined($DBMHardL\n-000033a0: 696e 6b7b 2464 6576 496e 6f64 657d 2929 ink{$devInode}))\n-000033b0: 2020 2023 206d 7573 7320 6e75 7220 6765 # muss nur ge\n-000033c0: 6c69 6e6b 7420 7765 7264 656e 0a09 097b linkt werden...{\n-000033d0: 0a09 0920 2020 2069 6620 286c 696e 6b20 ... if (link \n-000033e0: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de\n-000033f0: 7649 6e6f 6465 7d2c 2024 7461 7267 6574 vInode}, $target\n-00003400: 4669 6c65 290a 0909 2020 2020 7b0a 0909 File)... {...\n-00003410: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00003420: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00003430: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00003440: 3d3e 0a09 0909 0920 2020 2020 205b 226c =>..... [\"l\n-00003450: 696e 6b20 2220 2e20 2444 424d 4861 7264 ink \" . $DBMHard\n-00003460: 4c69 6e6b 7b24 6465 7649 6e6f 6465 7d20 Link{$devInode} \n-00003470: 2e0a 0909 0909 2020 2020 2020 2022 2024 ...... \" $\n-00003480: 7461 7267 6574 4669 6c65 225d 290a 0909 targetFile\"])...\n-00003490: 0920 2020 2069 6620 2476 6572 626f 7365 . if $verbose\n-000034a0: 3b0a 2309 0909 7574 696d 6520 2461 7469 ;.#...utime $ati\n-000034b0: 6d65 2c20 246d 7469 6d65 2c20 2466 3b0a me, $mtime, $f;.\n-000034c0: 0909 092b 2b24 6861 7264 4c69 6e6b 733b ...++$hardLinks;\n-000034d0: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e\n-000034e0: 6c73 650a 0909 2020 2020 7b0a 0909 0924 lse... {....$\n-000034f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003500: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00003510: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00003520: 0a09 0909 0920 2020 2020 205b 2266 6169 ..... [\"fai\n-00003530: 6c65 643a 206c 696e 6b20 2220 2e0a 0909 led: link \" ....\n-00003540: 0909 2020 2020 2020 2024 4442 4d48 6172 .. $DBMHar\n-00003550: 644c 696e 6b7b 2464 6576 496e 6f64 657d dLink{$devInode}\n-00003560: 202e 0a09 0909 0920 2020 2020 2020 2220 ...... \" \n-00003570: 2474 6172 6765 7446 696c 6522 5d29 3b0a $targetFile\"]);.\n-00003580: 0909 0924 6578 6974 203d 2031 3b0a 0909 ...$exit = 1;...\n-00003590: 2020 2020 7d0a 0909 2020 2020 676f 746f }... goto\n-000035a0: 2063 6f6e 744c 6f6f 703b 0a09 097d 0a09 contLoop;...}..\n-000035b0: 0965 6c73 650a 0909 7b0a 0909 2020 2020 .else...{... \n-000035c0: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de\n-000035d0: 7649 6e6f 6465 7d20 3d20 2474 6172 6765 vInode} = $targe\n-000035e0: 7446 696c 653b 0a09 097d 0a09 2020 2020 tFile;...}.. \n-000035f0: 7d0a 0920 2020 206d 7920 246c 696e 6b54 }.. my $linkT\n-00003600: 6f20 3d20 7265 6164 6c69 6e6b 2022 2462 o = readlink \"$b\n-00003610: 6163 6b75 7052 6f6f 742f 2466 696c 656e ackupRoot/$filen\n-00003620: 616d 6522 3b0a 0a09 2020 2020 2b2b 246e ame\";... ++$n\n-00003630: 6f53 796d 4c69 6e6b 733b 0a09 2020 2020 oSymLinks;.. \n-00003640: 7379 6d6c 696e 6b20 246c 696e 6b54 6f2c symlink $linkTo,\n-00003650: 2024 7461 7267 6574 4669 6c65 3b0a 0a09 $targetFile;...\n-00003660: 2020 2020 2320 6265 6920 6569 6e69 6765 # bei einige\n-00003670: 6e20 4265 7472 6965 6273 7379 7374 656d n Betriebssystem\n-00003680: 2028 7a2e 422e 204c 696e 7578 2920 7769 (z.B. Linux) wi\n-00003690: 7264 2062 6569 2041 7566 7275 660a 0920 rd bei Aufruf.. \n-000036a0: 2020 2023 2064 6573 2053 7973 7465 6d63 # des Systemc\n-000036b0: 616c 6c73 2063 686d 6f64 2062 6569 2073 alls chmod bei s\n-000036c0: 796d 6c69 6e6b 7320 6e69 6368 7420 6465 ymlinks nicht de\n-000036d0: 7220 5379 6d6c 696e 6b20 7365 6c62 7374 r Symlink selbst\n-000036e0: 0a09 2020 2020 2320 6765 6165 6e64 6572 .. # geaender\n-000036f0: 742c 2073 6f6e 6465 726e 2064 6965 2044 t, sondern die D\n-00003700: 6174 6569 2c20 6175 6620 6469 6520 6572 atei, auf die er\n-00003710: 2076 6572 7765 6973 742e 0a09 2020 2020 verweist... \n-00003720: 2320 2864 616e 6e20 6d75 7373 206c 6368 # (dann muss lch\n-00003730: 6f77 6e20 6765 6e6f 6d6d 656e 2077 6572 own genommen wer\n-00003740: 6465 6e20 2d3e 2049 6e6b 6f6d 7061 7469 den -> Inkompati\n-00003750: 6269 6c69 7461 6574 656e 213f 290a 0920 bilitaeten!?).. \n-00003760: 2020 206d 7920 2463 686f 776e 203d 2066 my $chown = f\n-00003770: 6f72 6b50 726f 632d 3e6e 6577 2827 2d65 orkProc->new('-e\n-00003780: 7865 6327 203d 3e20 2763 686f 776e 272c xec' => 'chown',\n-00003790: 0a09 0909 0920 2020 2020 2027 2d70 6172 ..... '-par\n-000037a0: 616d 2720 3d3e 205b 272d 6827 2c20 2224 am' => ['-h', \"$\n-000037b0: 7569 643a 2467 6964 222c 0a09 0909 0909 uid:$gid\",......\n-000037c0: 0920 2020 2224 7461 7267 6574 4669 6c65 . \"$targetFile\n-000037d0: 225d 2c0a 0909 0909 2020 2020 2020 272d \"],..... '-\n-000037e0: 6f75 7452 616e 646f 6d27 203d 3e20 2224 outRandom' => \"$\n-000037f0: 746d 7064 6972 2f63 686f 776e 2d22 2c0a tmpdir/chown-\",.\n-00003800: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo\n-00003810: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);..\n-00003820: 2020 2020 2463 686f 776e 2d3e 7761 6974 $chown->wait\n-00003830: 2829 3b0a 2309 2020 2020 7574 696d 6520 ();.#. utime \n-00003840: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, \n-00003850: 2474 6172 6765 7446 696c 653b 0a09 2020 $targetFile;.. \n-00003860: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00003870: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00003880: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00003890: 226c 6e20 2d73 2024 6c69 6e6b 546f 2024 \"ln -s $linkTo $\n-000038a0: 7461 7267 6574 4669 6c65 225d 290a 0909 targetFile\"])...\n-000038b0: 6966 2028 2476 6572 626f 7365 293b 0a09 if ($verbose);..\n-000038c0: 7d0a 0965 6c73 6966 2028 246d 6435 7375 }..elsif ($md5su\n-000038d0: 6d20 6571 2027 7069 7065 2729 0a09 7b0a m eq 'pipe')..{.\n-000038e0: 0920 2020 2069 6620 2824 7370 6563 6961 . if ($specia\n-000038f0: 6c54 7970 6541 7263 6869 7665 7220 616e lTypeArchiver an\n-00003900: 640a 0909 2461 7263 6869 7665 5479 7065 d...$archiveType\n-00003910: 7320 3d7e 202f 702f 290a 0920 2020 207b s =~ /p/).. {\n-00003920: 0a09 0926 3a3a 6578 7472 6163 7446 696c ...&::extractFil\n-00003930: 6546 726f 6d41 7263 6869 7665 2824 6669 eFromArchive($fi\n-00003940: 6c65 6e61 6d65 2c20 2474 6172 6765 7444 lename, $targetD\n-00003950: 6972 2c20 2462 6163 6b75 7052 6f6f 742c ir, $backupRoot,\n-00003960: 0a09 0920 2020 2024 7370 6563 6961 6c54 ... $specialT\n-00003970: 7970 6541 7263 6869 7665 722c 2024 7072 ypeArchiver, $pr\n-00003980: 4c6f 672c 2024 746d 7064 6972 293b 0a09 Log, $tmpdir);..\n-00003990: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-000039a0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-000039b0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-000039c0: 3e0a 0920 2020 2020 5b22 2473 7065 6369 >.. [\"$speci\n-000039d0: 616c 5479 7065 4172 6368 6976 6572 2024 alTypeArchiver $\n-000039e0: 6261 636b 7570 526f 6f74 2f24 6669 6c65 backupRoot/$file\n-000039f0: 6e61 6d65 202d 3e20 2474 6172 6765 7446 name -> $targetF\n-00003a00: 696c 6522 5d29 0a09 0920 2020 2069 6620 ile\"])... if \n-00003a10: 2824 7665 7262 6f73 6529 3b0a 0920 2020 ($verbose);.. \n-00003a20: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00003a30: 2020 7b0a 0909 6d79 2024 6d6b 6e6f 6420 {...my $mknod \n-00003a40: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new(\n-00003a50: 272d 6578 6563 2720 3d3e 2027 6d6b 6e6f '-exec' => 'mkno\n-00003a60: 6427 2c0a 0909 0909 0920 2027 2d70 6172 d',...... '-par\n-00003a70: 616d 2720 3d3e 205b 2224 7461 7267 6574 am' => [\"$target\n-00003a80: 4669 6c65 222c 2027 7027 5d2c 0a09 0909 File\", 'p'],....\n-00003a90: 0909 2020 272d 6f75 7452 616e 646f 6d27 .. '-outRandom'\n-00003aa0: 203d 3e20 2224 746d 7064 6972 2f6d 6b6e => \"$tmpdir/mkn\n-00003ab0: 6f64 2d22 2c0a 0909 0909 0920 2027 2d70 od-\",...... '-p\n-00003ac0: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-00003ad0: 3b0a 0909 246d 6b6e 6f64 2d3e 7761 6974 ;...$mknod->wait\n-00003ae0: 2829 3b0a 0909 6d79 2024 6f75 7420 3d20 ();...my $out = \n-00003af0: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU\n-00003b00: 5428 293b 0a09 0924 7072 4c6f 672d 3e70 T();...$prLog->p\n-00003b10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00003b20: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-00003b30: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n-00003b40: 205b 2253 5444 4f55 5420 6f66 203c 6d6b [\"STDOUT of :\", @$out])...\n-00003b70: 2020 2020 6966 2028 4024 6f75 7420 3e20 if (@$out > \n-00003b80: 3029 3b0a 0909 246f 7574 203d 2024 6d6b 0);...$out = $mk\n-00003b90: 6e6f 642d 3e67 6574 5354 4445 5252 2829 nod->getSTDERR()\n-00003ba0: 3b0a 0909 6966 2028 4024 6f75 7420 3e20 ;...if (@$out > \n-00003bb0: 3029 0a09 097b 0a09 0920 2020 2024 7072 0)...{... $pr\n-00003bc0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00003bd0: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-00003be0: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n-00003bf0: 205b 2253 5444 4552 5220 6f66 203c 6d6b [\"STDERR of :\", @$out]);..\n-00003c20: 0909 2465 7869 7420 3d20 313b 0a09 097d ..$exit = 1;...}\n-00003c30: 0a09 0963 686f 776e 2024 7569 642c 2024 ...chown $uid, $\n-00003c40: 6769 642c 2024 7461 7267 6574 4669 6c65 gid, $targetFile\n-00003c50: 3b0a 0909 6368 6d6f 6420 246d 6f64 652c ;...chmod $mode,\n-00003c60: 2024 7461 7267 6574 4669 6c65 3b0a 0909 $targetFile;...\n-00003c70: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m\n-00003c80: 7469 6d65 2c20 2474 6172 6765 7446 696c time, $targetFil\n-00003c90: 653b 0a09 0924 7072 4c6f 672d 3e70 7269 e;...$prLog->pri\n-00003ca0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00003cb0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00003cc0: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n-00003cd0: 226d 6b6e 6f64 2024 7461 7267 6574 4669 \"mknod $targetFi\n-00003ce0: 6c65 2070 225d 290a 0909 2020 2020 6966 le p\"])... if\n-00003cf0: 2028 2476 6572 626f 7365 293b 0a0a 0920 ($verbose);... \n-00003d00: 2020 207d 0a09 7d0a 0965 6c73 6966 2028 }..}..elsif (\n-00003d10: 6c65 6e67 7468 2824 6d64 3573 756d 2920 length($md5sum) \n-00003d20: 3d3d 2033 3220 6f72 2020 2020 2020 2020 == 32 or \n-00003d30: 2020 2020 2320 6e6f 726d 616c 2066 696c # normal fil\n-00003d40: 650a 0920 2020 2020 2020 2475 7365 476e e.. $useGn\n-00003d50: 7543 7020 6f72 2024 7370 6563 6961 6c54 uCp or $specialT\n-00003d60: 7970 6541 7263 6869 7665 7229 2020 2320 ypeArchiver) # \n-00003d70: 7370 6563 6961 6c20 6669 6c65 0a09 7b0a special file..{.\n-00003d80: 2320 4964 6565 207a 7572 204c c3b6 7375 # Idee zur L..su\n-00003d90: 6e67 2064 6573 2070 6172 616c 6c65 6c69 ng des paralleli\n-00003da0: 74c3 a474 732d 5072 6f62 6c65 6d73 2062 t..ts-Problems b\n-00003db0: 6569 6d20 5a75 72c3 bc63 6b73 6963 6865 eim Zur..cksiche\n-00003dc0: 726e 0a23 2069 6e20 5665 7262 696e 6475 rn.# in Verbindu\n-00003dd0: 6e67 206d 6974 2064 656d 2053 6574 7a65 ng mit dem Setze\n-00003de0: 6e20 6465 7220 6861 7264 206c 696e 6b73 n der hard links\n-00003df0: 3a0a 2320 6572 7374 6520 4461 7465 693a :.# erste Datei:\n-00003e00: 0a23 2064 6576 2d69 6e6f 6465 203d 3e20 .# dev-inode => \n-00003e10: 272e 2720 696e 2064 626d 2d66 696c 6520 '.' in dbm-file \n-00003e20: 2825 4442 4d48 6172 644c 696e 6b29 0a23 (%DBMHardLink).#\n-00003e30: 2066 6f72 6b2d 3e61 6464 5f62 6c6f 636b fork->add_block\n-00003e40: 0a23 2077 656e 6e20 6665 7274 6967 2c20 .# wenn fertig, \n-00003e50: 6461 6e6e 2064 6576 2d69 6e6f 6465 203d dann dev-inode =\n-00003e60: 3e20 6669 6c65 6e61 6d65 2069 6e20 6462 > filename in db\n-00003e70: 6d2d 6669 6c65 0a23 0a23 207a 7765 6974 m-file.#.# zweit\n-00003e80: 6520 4461 7465 6920 2868 6172 6420 6c69 e Datei (hard li\n-00003e90: 6e6b 290a 2320 6e61 6368 7365 6865 6e20 nk).# nachsehen \n-00003ea0: 696e 2064 626d 2d66 696c 650a 2320 7765 in dbm-file.# we\n-00003eb0: 6e6e 2027 2e27 202d 3e20 696e 2057 6172 nn '.' -> in War\n-00003ec0: 7465 7363 686c 616e 6765 2068 c3a4 6e67 teschlange h..ng\n-00003ed0: 656e 2028 6861 7368 290a 2320 7765 6e6e en (hash).# wenn\n-00003ee0: 2066 696c 656e 616d 6520 2d3e 206c 696e filename -> lin\n-00003ef0: 6b65 6e0a 2320 756e 7465 6e20 696d 6d65 ken.# unten imme\n-00003f00: 7220 5761 7274 6573 6368 6c61 6e67 6520 r Warteschlange \n-00003f10: 696e 2064 626d 2d66 696c 6520 c3bc 6265 in dbm-file ..be\n-00003f20: 7270 72c3 bc66 656e 0a09 2020 2020 6d79 rpr..fen.. my\n-00003f30: 2028 246f 6c64 2c20 246e 6577 2920 3d20 ($old, $new) = \n-00003f40: 2875 6e64 6566 2c20 756e 6465 6629 3b0a (undef, undef);.\n-00003f50: 0a09 2020 2020 756e 6c65 7373 2028 246e .. unless ($n\n-00003f60: 6f48 6172 644c 696e 6b73 2920 2320 4861 oHardLinks) # Ha\n-00003f70: 7264 204c 696e 6b20 c3bc 6265 7270 72c3 rd Link ..berpr.\n-00003f80: bc66 656e 0a09 2020 2020 7b0a 0909 6966 .fen.. {...if\n-00003f90: 2028 6465 6669 6e65 6428 2444 424d 4861 (defined($DBMHa\n-00003fa0: 7264 4c69 6e6b 7b24 6465 7649 6e6f 6465 rdLink{$devInode\n-00003fb0: 7d29 2920 2020 2320 6d75 7373 206e 7572 })) # muss nur\n-00003fc0: 2067 656c 696e 6b74 2077 6572 6465 6e0a gelinkt werden.\n-00003fd0: 0909 7b0a 0909 2020 2020 2468 6173 546f ..{... $hasTo\n-00003fe0: 4265 4c69 6e6b 6564 7b24 7461 7267 6574 BeLinked{$target\n-00003ff0: 4669 6c65 7d20 3d20 5b24 6465 7649 6e6f File} = [$devIno\n-00004000: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, \n-00004010: 246d 6f64 652c 0a09 0909 0909 0920 2020 $mode,....... \n-00004020: 2461 7469 6d65 2c20 246d 7469 6d65 5d3b $atime, $mtime];\n-00004030: 0a09 0920 2020 2024 6861 7264 4c69 6e6b ... $hardLink\n-00004040: 732b 2b3b 0a09 0920 2020 2067 6f74 6f20 s++;... goto \n-00004050: 636f 6e74 4c6f 6f70 3b0a 0909 7d0a 0909 contLoop;...}...\n-00004060: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $\n-00004070: 4442 4d48 6172 644c 696e 6b7b 2464 6576 DBMHardLink{$dev\n-00004080: 496e 6f64 657d 203d 2027 2e27 3b20 2020 Inode} = '.'; \n-00004090: 2320 6973 7420 696e 2042 6561 7262 6569 # ist in Bearbei\n-000040a0: 7475 6e67 0a09 097d 0a09 2020 2020 7d0a tung...}.. }.\n-000040b0: 0920 2020 2069 6620 2824 636f 6d70 7220 . if ($compr \n-000040c0: 6571 2027 7527 2920 2020 2023 2077 6173 eq 'u') # was\n-000040d0: 206e 6f74 2063 6f6d 7072 6573 7365 642c not compressed,\n-000040e0: 2061 6c73 6f20 7661 6c69 6420 666f 7220 also valid for \n-000040f0: 736f 636b 6574 2c0a 0920 2020 207b 2020 socket,.. { \n-00004100: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00004110: 2020 2023 2062 6c6f 636b 6465 762c 2063 # blockdev, c\n-00004120: 6861 7264 6576 0a09 0969 6620 286e 6f74 hardev...if (not\n-00004130: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and \n-00004140: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile).\n-00004150: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog\n-00004160: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00004170: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n-00004180: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-00004190: 7461 7267 6574 3220 2474 6172 6765 7446 target2 $targetF\n-000041a0: 696c 6520 616c 7265 6164 7920 6578 6973 ile already exis\n-000041b0: 7473 3a22 2c0a 0909 0909 2020 2022 5c74 ts:\",..... \"\\t\n-000041c0: 2463 7020 4063 7050 6172 2024 6261 636b $cp @cpPar $back\n-000041d0: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename\n-000041e0: 2022 202e 0a09 0909 0920 2020 2224 7461 \" ...... \"$ta\n-000041f0: 7267 6574 4669 6c65 225d 293b 0a09 097d rgetFile\"]);...}\n-00004200: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... \n-00004210: 2020 246e 6f46 696c 6573 436f 7079 2b2b $noFilesCopy++\n-00004220: 2075 6e6c 6573 7320 2475 7365 476e 7543 unless $useGnuC\n-00004230: 703b 0a09 0920 2020 2024 6e6f 536f 636b p;... $noSock\n-00004240: 6574 732b 2b20 6966 2024 6d64 3573 756d ets++ if $md5sum\n-00004250: 2065 7120 2773 6f63 6b65 7427 3b0a 0909 eq 'socket';...\n-00004260: 2020 2020 246e 6f42 6c6f 636b 4465 7673 $noBlockDevs\n-00004270: 2b2b 2069 6620 246d 6435 7375 6d20 6571 ++ if $md5sum eq\n-00004280: 2027 626c 6f63 6b64 6576 273b 0a09 0920 'blockdev';... \n-00004290: 2020 2024 6e6f 4368 6172 4465 7673 2b2b $noCharDevs++\n-000042a0: 2069 6620 246d 6435 7375 6d20 6571 2027 if $md5sum eq '\n-000042b0: 6368 6172 6465 7627 3b0a 0a09 0920 2020 chardev';.... \n-000042c0: 2069 6620 2824 7370 6563 6961 6c54 7970 if ($specialTyp\n-000042d0: 6541 7263 6869 7665 7220 616e 640a 0909 eArchiver and...\n-000042e0: 096c 656e 6774 6828 246d 6435 7375 6d29 .length($md5sum)\n-000042f0: 203c 2033 3229 0a23 0909 0924 6172 6368 < 32).#...$arch\n-00004300: 6976 6554 7970 6573 203d 7e20 2f5b 5362 iveTypes =~ /[Sb\n-00004310: 635d 2f29 0a09 0920 2020 207b 0a09 0909 c]/)... {....\n-00004320: 263a 3a65 7874 7261 6374 4669 6c65 4672 &::extractFileFr\n-00004330: 6f6d 4172 6368 6976 6528 2466 696c 656e omArchive($filen\n-00004340: 616d 652c 2024 7461 7267 6574 4469 722c ame, $targetDir,\n-00004350: 2024 6261 636b 7570 526f 6f74 2c0a 0909 $backupRoot,...\n-00004360: 0909 0909 2020 2473 7065 6369 616c 5479 .... $specialTy\n-00004370: 7065 4172 6368 6976 6572 2c20 2470 724c peArchiver, $prL\n-00004380: 6f67 2c0a 0909 0909 0909 2020 2474 6d70 og,....... $tmp\n-00004390: 6469 7229 3b0a 0a09 0909 2470 724c 6f67 dir);.....$prLog\n-000043a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000043b0: 3d3e 2027 4927 2c0a 0909 0909 2020 2020 => 'I',..... \n-000043c0: 2020 272d 7374 7227 203d 3e0a 0909 2020 '-str' =>... \n-000043d0: 2020 2020 5b22 2473 7065 6369 616c 5479 [\"$specialTy\n-000043e0: 7065 4172 6368 6976 6572 2024 6261 636b peArchiver $back\n-000043f0: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename\n-00004400: 202d 3e20 2474 6172 6765 7446 696c 6522 -> $targetFile\"\n-00004410: 5d29 0a09 0909 2020 2020 6966 2028 2476 ]).... if ($v\n-00004420: 6572 626f 7365 293b 0a09 0920 2020 207d erbose);... }\n-00004430: 0a09 0920 2020 2065 6c73 650a 0909 2020 ... else... \n-00004440: 2020 7b0a 0909 096d 7920 2470 6172 203d {....my $par =\n-00004450: 205b 4063 7050 6172 2c20 2224 6261 636b [@cpPar, \"$back\n-00004460: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename\n-00004470: 222c 2022 2474 6172 6765 7446 696c 6522 \", \"$targetFile\"\n-00004480: 5d3b 0a09 0909 2824 6f6c 642c 2024 6e65 ];....($old, $ne\n-00004490: 7729 203d 0a09 0909 2020 2020 2466 6f72 w) =.... $for\n-000044a0: 6b2d 3e61 6464 5f62 6c6f 636b 2827 2d65 k->add_block('-e\n-000044b0: 7865 6327 203d 3e20 2463 702c 0a09 0909 xec' => $cp,....\n-000044c0: 0909 2020 2020 2027 2d70 6172 616d 2720 .. '-param' \n-000044d0: 3d3e 2024 7061 722c 0a09 0909 0909 2020 => $par,...... \n-000044e0: 2020 2027 2d6f 7574 5261 6e64 6f6d 2720 '-outRandom' \n-000044f0: 3d3e 2022 2474 6d70 6469 722f 7265 636f => \"$tmpdir/reco\n-00004500: 7665 722d 222c 0a09 0909 0909 2020 2020 ver-\",...... \n-00004510: 2027 2d69 6e66 6f27 203d 3e20 5b24 7461 '-info' => [$ta\n-00004520: 7267 6574 4669 6c65 2c20 2475 6964 2c20 rgetFile, $uid, \n-00004530: 2467 6964 2c20 246d 6f64 652c 0a09 0909 $gid, $mode,....\n-00004540: 0909 0909 2024 6174 696d 652c 2024 6d74 .... $atime, $mt\n-00004550: 696d 652c 2024 6465 7649 6e6f 6465 2c0a ime, $devInode,.\n-00004560: 0909 0909 0909 0920 5b24 6370 2c20 4024 ....... [$cp, @$\n-00004570: 7061 725d 5d29 3b0a 0909 0924 7072 4c6f par]]);....$prLo\n-00004580: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00004590: 203d 3e20 2749 272c 0a09 0909 0920 2020 => 'I',..... \n-000045a0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>....\n-000045b0: 0920 2020 2020 205b 2263 7020 2462 6163 . [\"cp $bac\n-000045c0: 6b75 7052 6f6f 742f 2466 696c 656e 616d kupRoot/$filenam\n-000045d0: 6520 2474 6172 6765 7446 696c 6522 5d29 e $targetFile\"])\n-000045e0: 0a09 0909 2020 2020 6966 2028 2476 6572 .... if ($ver\n-000045f0: 626f 7365 293b 0a09 0920 2020 207d 0a09 bose);... }..\n-00004600: 097d 0a09 2020 2020 7d0a 0920 2020 2065 .}.. }.. e\n-00004610: 6c73 6966 2028 2463 6f6d 7072 2065 7120 lsif ($compr eq \n-00004620: 2763 2729 2020 2020 2020 2020 2020 2320 'c') # \n-00004630: 7761 7220 6b6f 6d70 7269 6d69 6572 740a war komprimiert.\n-00004640: 0920 2020 207b 0a09 0969 6620 286e 6f74 . {...if (not\n-00004650: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and \n-00004660: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile).\n-00004670: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog\n-00004680: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00004690: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '-\n-000046a0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [\"\n-000046b0: 7461 7267 6574 3320 2474 6172 6765 7446 target3 $targetF\n-000046c0: 696c 6520 616c 7265 6164 7920 6578 6973 ile already exis\n-000046d0: 7473 3a22 2c0a 0909 0909 2020 2022 5c74 ts:\",..... \"\\t\n-000046e0: 2475 6e63 6f6d 7072 2040 756e 636f 6d70 $uncompr @uncomp\n-000046f0: 7250 6172 2022 202e 0a09 0909 0920 2020 rPar \" ...... \n-00004700: 223c 2024 6261 636b 7570 526f 6f74 2f24 \"< $backupRoot/$\n-00004710: 6669 6c65 6e61 6d65 2470 6f73 7466 6978 filename$postfix\n-00004720: 2022 202e 0a09 0909 0920 2020 223e 2024 \" ...... \"> $\n-00004730: 7461 7267 6574 4669 6c65 225d 293b 0a09 targetFile\"]);..\n-00004740: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{...\n-00004750: 2020 2020 2b2b 246e 6f46 696c 6573 436f ++$noFilesCo\n-00004760: 6d70 723b 0a09 0920 2020 206d 7920 2463 mpr;... my $c\n-00004770: 6f6d 6d20 3d20 5b24 756e 636f 6d70 722c omm = [$uncompr,\n-00004780: 2040 756e 636f 6d70 7250 6172 2c20 273c @uncomprPar, '<\n-00004790: 272c 0a09 0909 0922 2462 6163 6b75 7052 ',.....\"$backupR\n-000047a0: 6f6f 742f 2466 696c 656e 616d 6524 706f oot/$filename$po\n-000047b0: 7374 6669 7822 2c20 273e 272c 0a09 0909 stfix\", '>',....\n-000047c0: 0924 7461 7267 6574 4669 6c65 5d3b 0a09 .$targetFile];..\n-000047d0: 0920 2020 2028 246f 6c64 2c20 246e 6577 . ($old, $new\n-000047e0: 2920 3d0a 0909 0924 666f 726b 2d3e 6164 ) =....$fork->ad\n-000047f0: 645f 626c 6f63 6b28 272d 6578 6563 2720 d_block('-exec' \n-00004800: 3d3e 2024 756e 636f 6d70 722c 0a09 0909 => $uncompr,....\n-00004810: 0920 2020 272d 7061 7261 6d27 203d 3e20 . '-param' => \n-00004820: 5c40 756e 636f 6d70 7250 6172 2c0a 0909 \\@uncomprPar,...\n-00004830: 0909 2020 2027 2d73 7464 696e 2720 3d3e .. '-stdin' =>\n-00004840: 2022 2462 6163 6b75 7052 6f6f 742f 2466 \"$backupRoot/$f\n-00004850: 696c 656e 616d 6524 706f 7374 6669 7822 ilename$postfix\"\n-00004860: 2c0a 0909 0909 2020 2027 2d73 7464 6f75 ,..... '-stdou\n-00004870: 7427 203d 3e20 2224 7461 7267 6574 4669 t' => \"$targetFi\n-00004880: 6c65 222c 0a09 0909 0920 2020 272d 6465 le\",..... '-de\n-00004890: 6c53 7464 6f75 7427 203d 3e20 276e 6f27 lStdout' => 'no'\n-000048a0: 2c0a 0909 0909 2020 2027 2d6f 7574 5261 ,..... '-outRa\n-000048b0: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => \"$tmpdi\n-000048c0: 722f 7265 636f 7665 722d 222c 0a09 0909 r/recover-\",....\n-000048d0: 0920 2020 272d 696e 666f 2720 3d3e 205b . '-info' => [\n-000048e0: 2474 6172 6765 7446 696c 652c 2024 7569 $targetFile, $ui\n-000048f0: 642c 2024 6769 642c 2024 6d6f 6465 2c0a d, $gid, $mode,.\n-00004900: 0909 0909 0920 2020 2020 2020 2461 7469 ..... $ati\n-00004910: 6d65 2c20 246d 7469 6d65 2c20 2464 6576 me, $mtime, $dev\n-00004920: 496e 6f64 652c 2024 636f 6d6d 5d29 3b0a Inode, $comm]);.\n-00004930: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00004940: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00004950: 4927 2c0a 0909 0909 2020 272d 7374 7227 I',..... '-str'\n-00004960: 203d 3e20 5b22 2475 6e63 6f6d 7072 2040 => [\"$uncompr @\n-00004970: 756e 636f 6d70 7250 6172 203c 2022 202e uncomprPar < \" .\n-00004980: 0a09 0909 0909 2020 2020 2022 2462 6163 ...... \"$bac\n-00004990: 6b75 7052 6f6f 742f 2466 696c 656e 616d kupRoot/$filenam\n-000049a0: 6524 706f 7374 6669 7820 3e20 2220 2e0a e$postfix > \" ..\n-000049b0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... \"$targ\n-000049c0: 6574 4669 6c65 225d 290a 0909 0969 6620 etFile\"])....if \n-000049d0: 2824 7665 7262 6f73 6529 3b0a 0909 7d0a ($verbose);...}.\n-000049e0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi\n-000049f0: 6620 2824 636f 6d70 7220 6571 2027 6227 f ($compr eq 'b'\n-00004a00: 2920 2020 2020 2020 2320 626c 6f63 6b65 ) # blocke\n-00004a10: 6420 6669 6c65 0a09 2020 2020 7b0a 2309 d file.. {.#.\n-00004a20: 0970 7269 6e74 2022 2464 6576 496e 6f64 .print \"$devInod\n-00004a30: 6520 2d20 2474 6172 6765 7446 696c 6520 e - $targetFile \n-00004a40: 2d20 2466 696c 656e 616d 655c 6e22 3b0a - $filename\\n\";.\n-00004a50: 2309 0969 6620 2824 6465 7649 6e6f 6465 #..if ($devInode\n-00004a60: 203d 7e20 2f5c 4144 4556 4943 452d 5c64 =~ /\\ADEVICE-\\d\n-00004a70: 2b2f 290a 2309 097b 0a23 0909 2020 2020 +/).#..{.#.. \n-00004a80: 6d79 2028 2464 2c20 2466 2920 3d20 263a my ($d, $f) = &:\n-00004a90: 3a73 706c 6974 4669 6c65 4469 7228 2224 :splitFileDir(\"$\n-00004aa0: 7461 7267 6574 4469 722f 2466 696c 656e targetDir/$filen\n-00004ab0: 616d 6522 293b 0a23 0909 2020 2020 263a ame\");.#.. &:\n-00004ac0: 3a6d 616b 6544 6972 5061 7468 2824 642c :makeDirPath($d,\n-00004ad0: 2024 7072 4c6f 6729 3b0a 2309 097d 0a09 $prLog);.#..}..\n-00004ae0: 092b 2b24 6e6f 4669 6c65 7342 6c6f 636b .++$noFilesBlock\n-00004af0: 6564 3b0a 0909 6d79 2024 636f 6d6d 203d ed;...my $comm =\n-00004b00: 205b 2263 7020 2862 6c6f 636b 222c 2022 [\"cp (block\", \"\n-00004b10: 2462 6163 6b75 7052 6f6f 742f 2466 696c $backupRoot/$fil\n-00004b20: 656e 616d 6524 706f 7374 6669 7822 2c0a ename$postfix\",.\n-00004b30: 0909 0920 2020 2022 2474 6172 6765 7446 ... \"$targetF\n-00004b40: 696c 6522 5d3b 0a09 0928 246f 6c64 2c20 ile\"];...($old, \n-00004b50: 246e 6577 2920 3d0a 0909 2020 2020 2466 $new) =... $f\n-00004b60: 6f72 6b2d 3e61 6464 5f62 6c6f 636b 2827 ork->add_block('\n-00004b70: 2d66 756e 6374 696f 6e27 203d 3e20 5c26 -function' => \\&\n-00004b80: 756e 636f 6d70 7265 7373 4361 7442 6c6f uncompressCatBlo\n-00004b90: 636b 2c0a 0909 0909 2020 2020 2027 2d66 ck,..... '-f\n-00004ba0: 756e 6350 6172 2720 3d3e 205b 2224 6261 uncPar' => [\"$ba\n-00004bb0: 636b 7570 526f 6f74 2f24 6669 6c65 6e61 ckupRoot/$filena\n-00004bc0: 6d65 222c 0a09 0909 0920 2020 2020 2462 me\",..... $b\n-00004bd0: 6163 6b75 7052 6f6f 742c 2024 6372 6561 ackupRoot, $crea\n-00004be0: 7465 5370 6172 7365 4669 6c65 732c 0a09 teSparseFiles,..\n-00004bf0: 0909 0920 2020 2020 2474 6172 6765 7446 ... $targetF\n-00004c00: 696c 652c 2027 5c41 5c64 2e2a 272c 2024 ile, '\\A\\d.*', $\n-00004c10: 756e 636f 6d70 722c 205c 4075 6e63 6f6d uncompr, \\@uncom\n-00004c20: 7072 5061 722c 0a09 0909 0920 2020 2020 prPar,..... \n-00004c30: 2470 6f73 7466 6978 2c20 2473 697a 652c $postfix, $size,\n-00004c40: 2024 7072 4c6f 675d 2c0a 0909 0909 2020 $prLog],..... \n-00004c50: 2020 2027 2d69 6e66 6f27 203d 3e20 5b24 '-info' => [$\n-00004c60: 7461 7267 6574 4669 6c65 2c20 2475 6964 targetFile, $uid\n-00004c70: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,..\n-00004c80: 0909 0909 0920 2461 7469 6d65 2c20 246d ..... $atime, $m\n-00004c90: 7469 6d65 2c20 2464 6576 496e 6f64 652c time, $devInode,\n-00004ca0: 2024 636f 6d6d 5d29 3b0a 0909 2470 724c $comm]);...$prL\n-00004cb0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00004cc0: 2720 3d3e 2027 4927 2c0a 0909 0920 2020 ' => 'I',.... \n-00004cd0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-00004ce0: 7020 2862 6c6f 636b 6564 2920 2220 2e0a p (blocked) \" ..\n-00004cf0: 0909 0909 0920 2020 2020 2224 6261 636b ..... \"$back\n-00004d00: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename\n-00004d10: 2470 6f73 7466 6978 2022 202e 0a09 0909 $postfix \" .....\n-00004d20: 0909 2020 2020 2022 2474 6172 6765 7446 .. \"$targetF\n-00004d30: 696c 6522 5d29 0a09 0909 6966 2028 2476 ile\"])....if ($v\n-00004d40: 6572 626f 7365 293b 0a09 2020 2020 7d0a erbose);.. }.\n-00004d50: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. {\n-00004d60: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00004d70: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00004d80: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-00004d90: 203d 3e0a 0909 0920 2020 2020 205b 2275 =>.... [\"u\n-00004da0: 6e6b 6e6f 7720 636f 6d70 7220 666c 6167 nknow compr flag\n-00004db0: 203c 2463 6f6d 7072 3e20 696e 202e 6d64 <$compr> in .md\n-00004dc0: 3543 6865 636b 5375 6d73 2022 202e 0a09 5CheckSums \" ...\n-00004dd0: 0909 2020 2020 2020 2022 666f 7220 6669 .. \"for fi\n-00004de0: 6c65 203c 2462 6163 6b75 7052 6f6f 742f le <$backupRoot/\n-00004df0: 2466 696c 656e 616d 653e 225d 293b 0a09 $filename>\"]);..\n-00004e00: 0924 6578 6974 203d 2031 3b0a 0920 2020 .$exit = 1;.. \n-00004e10: 207d 0a09 2020 2020 6966 2028 246f 6c64 }.. if ($old\n-00004e20: 290a 0920 2020 207b 0a09 096d 7920 2824 ).. {...my ($\n-00004e30: 662c 2024 6f55 6964 2c20 246f 4769 642c f, $oUid, $oGid,\n-00004e40: 2024 6f4d 6f64 652c 2024 6f41 7469 6d65 $oMode, $oAtime\n-00004e50: 2c20 246f 4d74 696d 652c 2024 6f44 6576 , $oMtime, $oDev\n-00004e60: 496e 6f64 6529 203d 0a09 0920 2020 2040 Inode) =... @\n-00004e70: 7b24 6f6c 642d 3e67 6574 2827 2d77 6861 {$old->get('-wha\n-00004e80: 7427 203d 3e20 2769 6e66 6f27 297d 3b0a t' => 'info')};.\n-00004e90: 0909 756e 6c65 7373 2028 246e 6f48 6172 ..unless ($noHar\n-00004ea0: 644c 696e 6b73 290a 0909 7b20 2020 2020 dLinks)...{ \n-00004eb0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00004ec0: 2020 2020 2020 2020 2020 2020 2320 4669 # Fi\n-00004ed0: 6c65 2069 6e20 4442 4d20 7665 726d 6572 le in DBM vermer\n-00004ee0: 6b65 6e0a 0909 2020 2020 2444 424d 4861 ken... $DBMHa\n-00004ef0: 7264 4c69 6e6b 7b24 6f44 6576 496e 6f64 rdLink{$oDevInod\n-00004f00: 657d 203d 2024 663b 0a09 097d 0a09 0963 e} = $f;...}...c\n-00004f10: 686f 776e 2024 6f55 6964 2c20 246f 4769 hown $oUid, $oGi\n-00004f20: 642c 2024 663b 0a09 0963 686d 6f64 2024 d, $f;...chmod $\n-00004f30: 6f4d 6f64 652c 2024 663b 0a09 0975 7469 oMode, $f;...uti\n-00004f40: 6d65 2024 6f41 7469 6d65 2c20 246f 4d74 me $oAtime, $oMt\n-00004f50: 696d 652c 2024 663b 0a09 2020 2020 7d0a ime, $f;.. }.\n-00004f60: 0a09 2020 2020 676f 746f 2066 696e 6973 .. goto finis\n-00004f70: 6820 6966 2024 6973 4669 6c65 3b20 2020 h if $isFile; \n-00004f80: 2023 2061 7566 68c3 b672 656e 2c20 6973 # aufh..ren, is\n-00004f90: 7420 6e75 7220 5f65 696e 655f 2044 6174 t nur _eine_ Dat\n-00004fa0: 6569 0a09 7d0a 0965 6c73 6520 2020 2023 ei..}..else #\n-00004fb0: 2075 6e6b 6e6f 776e 2074 7970 650a 097b unknown type..{\n-00004fc0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-00004fd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00004fe0: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' \n-00004ff0: 3d3e 0a09 0909 2020 5b22 756e 6b6e 6f77 =>.... [\"unknow\n-00005000: 6e20 656e 7472 7920 3c24 6d64 3573 756d n entry <$md5sum\n-00005010: 3e20 666f 7220 6669 6c65 203c 2466 696c > for file <$fil\n-00005020: 656e 616d 653e 3a22 5d29 3b0a 0920 2020 ename>:\"]);.. \n-00005030: 2024 6578 6974 203d 2031 3b0a 097d 0a20 $exit = 1;..}. \n-00005040: 2020 207d 0a0a 636f 6e74 4c6f 6f70 3a3b }..contLoop:;\n-00005050: 0a23 206e 6163 6873 6568 656e 2c20 6f62 .# nachsehen, ob\n-00005060: 206f 6666 656e 6520 4c69 6e6b 7320 6765 offene Links ge\n-00005070: 7365 747a 7420 7765 7264 656e 206b c3b6 setzt werden k..\n-00005080: 6e6e 656e 0a20 2020 2026 7365 7448 6172 nnen. &setHar\n-00005090: 644c 696e 6b73 285c 2568 6173 546f 4265 dLinks(\\%hasToBe\n-000050a0: 4c69 6e6b 6564 2c20 5c25 4442 4d48 6172 Linked, \\%DBMHar\n-000050b0: 644c 696e 6b2c 2024 7072 4c6f 672c 2024 dLink, $prLog, $\n-000050c0: 7665 7262 6f73 6529 0a09 756e 6c65 7373 verbose)..unless\n-000050d0: 2024 6e6f 4861 7264 4c69 6e6b 733b 0a0a $noHardLinks;..\n-000050e0: 7d0a 0a66 696e 6973 683a 3b0a 0a6d 7920 }..finish:;..my \n-000050f0: 246a 6f62 3b0a 7768 696c 6520 2824 6a6f $job;.while ($jo\n-00005100: 6220 3d20 2466 6f72 6b2d 3e77 6169 7446 b = $fork->waitF\n-00005110: 6f72 416c 6c4a 6f62 7328 2929 0a7b 0a20 orAllJobs()).{. \n-00005120: 2020 206d 7920 2824 662c 2024 6f55 6964 my ($f, $oUid\n-00005130: 2c20 246f 4769 642c 2024 6f4d 6f64 652c , $oGid, $oMode,\n-00005140: 2024 6f41 7469 6d65 2c20 246f 4d74 696d $oAtime, $oMtim\n-00005150: 652c 2024 6f44 6576 496e 6f64 652c 2024 e, $oDevInode, $\n-00005160: 636f 6d6d 2920 3d0a 0940 7b24 6a6f 622d comm) =..@{$job-\n-00005170: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => \n-00005180: 2769 6e66 6f27 297d 3b0a 0a20 2020 2069 'info')};.. i\n-00005190: 6620 2872 6566 2824 6a6f 6229 2065 7120 f (ref($job) eq \n-000051a0: 2766 6f72 6b50 726f 6327 290a 2020 2020 'forkProc'). \n-000051b0: 7b0a 096d 7920 246f 7574 203d 2024 6a6f {..my $out = $jo\n-000051c0: 622d 3e67 6574 5354 4445 5252 2829 3b0a b->getSTDERR();.\n-000051d0: 0969 6620 2840 246f 7574 203e 2030 290a .if (@$out > 0).\n-000051e0: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog->\n-000051f0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00005200: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-00005210: 2720 3d3e 205b 2253 5444 4552 5220 6f66 ' => [\"STDERR of\n-00005220: 3a20 4024 636f 6d6d 222c 2040 246f 7574 : @$comm\", @$out\n-00005230: 5d29 3b0a 0920 2020 2024 6578 6974 203d ]);.. $exit =\n-00005240: 2031 3b0a 097d 0a09 6966 2028 246a 6f62 1;..}..if ($job\n-00005250: 2d3e 6765 7428 272d 7768 6174 2720 3d3e ->get('-what' =>\n-00005260: 2027 7374 6174 7573 2729 290a 097b 0a09 'status'))..{..\n-00005270: 2020 2020 2465 7869 7420 3d20 313b 0a09 $exit = 1;..\n-00005280: 7d0a 2020 2020 7d0a 0a20 2020 2075 6e6c }. }.. unl\n-00005290: 6573 7320 2824 6e6f 4861 7264 4c69 6e6b ess ($noHardLink\n-000052a0: 7329 0a20 2020 207b 2020 2020 2020 2020 s). { \n-000052b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000052c0: 2020 2020 2020 2020 2023 2046 696c 6520 # File \n-000052d0: 696e 2044 424d 2076 6572 6d65 726b 656e in DBM vermerken\n-000052e0: 0a09 2444 424d 4861 7264 4c69 6e6b 7b24 ..$DBMHardLink{$\n-000052f0: 6f44 6576 496e 6f64 657d 203d 2024 663b oDevInode} = $f;\n-00005300: 0a20 2020 207d 0a20 2020 2063 686f 776e . }. chown\n-00005310: 2024 6f55 6964 2c20 246f 4769 642c 2024 $oUid, $oGid, $\n-00005320: 663b 0a20 2020 2063 686d 6f64 2024 6f4d f;. chmod $oM\n-00005330: 6f64 652c 2024 663b 0a20 2020 2075 7469 ode, $f;. uti\n-00005340: 6d65 2024 6f41 7469 6d65 2c20 246f 4d74 me $oAtime, $oMt\n-00005350: 696d 652c 2024 660a 7d0a 0a75 6e6c 6573 ime, $f.}..unles\n-00005360: 7320 2824 6e6f 4861 7264 4c69 6e6b 7329 s ($noHardLinks)\n-00005370: 0a7b 0a20 2020 2026 7365 7448 6172 644c .{. &setHardL\n-00005380: 696e 6b73 285c 2568 6173 546f 4265 4c69 inks(\\%hasToBeLi\n-00005390: 6e6b 6564 2c20 5c25 4442 4d48 6172 644c nked, \\%DBMHardL\n-000053a0: 696e 6b2c 2024 7072 4c6f 672c 2024 7665 ink, $prLog, $ve\n-000053b0: 7262 6f73 6529 3b0a 2020 2020 6462 6d63 rbose);. dbmc\n-000053c0: 6c6f 7365 2825 4442 4d48 6172 644c 696e lose(%DBMHardLin\n-000053d0: 6b29 3b0a 2020 2020 756e 6c69 6e6b 2022 k);. unlink \"\n-000053e0: 2474 6d70 6469 722f 7374 6272 6563 6f76 $tmpdir/stbrecov\n-000053f0: 6572 2e24 2422 3b0a 7d0a 0a23 2073 6574 er.$$\";.}..# set\n-00005400: 2061 7469 6d65 2c20 6d74 696d 652c 206d atime, mtime, m\n-00005410: 6f64 6520 6f66 2064 6972 6563 746f 7269 ode of directori\n-00005420: 6573 0a63 6c6f 7365 2844 4952 4649 4c45 es.close(DIRFILE\n-00005430: 293b 0a75 6e6c 6573 7320 286f 7065 6e28 );.unless (open(\n-00005440: 4449 5246 494c 452c 2027 3c27 2c20 2474 DIRFILE, '<', $t\n-00005450: 6d70 4469 7246 696c 6529 290a 7b0a 2020 mpDirFile)).{. \n-00005460: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00005470: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00005480: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-00005490: 6361 6e6e 6f74 2072 6561 6420 3c24 746d cannot read <$tm\n-000054a0: 7044 6972 4669 6c65 3e2c 2063 616e 6e6f pDirFile>, canno\n-000054b0: 7420 7365 7420 2220 2e0a 0909 0920 2020 t set \" ..... \n-000054c0: 2020 2261 7469 6d65 2061 6e64 206d 7469 \"atime and mti\n-000054d0: 6d65 2066 6f72 2064 6972 6563 746f 7269 me for directori\n-000054e0: 6573 225d 293b 0a20 2020 2024 6578 6974 es\"]);. $exit\n-000054f0: 203d 2031 3b0a 7d0a 656c 7365 0a7b 0a20 = 1;.}.else.{. \n-00005500: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00005510: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00005520: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00005530: 2273 6574 7469 6e67 2061 7469 6d65 2c20 \"setting atime, \n-00005540: 6d74 696d 6520 6f66 2064 6972 6563 746f mtime of directo\n-00005550: 7269 6573 202e 2e2e 225d 290a 0969 6620 ries ...\"])..if \n-00005560: 2476 6572 626f 7365 3b0a 0a20 2020 206d $verbose;.. m\n-00005570: 7920 246c 696e 653b 0a20 2020 2077 6869 y $line;. whi\n-00005580: 6c65 2028 246c 696e 6520 3d20 3c44 4952 le ($line = ). {..ch\n-000055a0: 6f70 2024 6c69 6e65 3b0a 096d 7920 2824 op $line;..my ($\n-000055b0: 6174 696d 652c 2024 6d74 696d 652c 2024 atime, $mtime, $\n-000055c0: 6d6f 6465 2c20 2464 6629 203d 2073 706c mode, $df) = spl\n-000055d0: 6974 282f 5c73 2f2c 2024 6c69 6e65 2c20 it(/\\s/, $line, \n-000055e0: 3429 3b0a 0924 6466 203d 7e20 732f 5c30 4);..$df =~ s/\\0\n-000055f0: 2f5c 6e2f 6f67 3b0a 0963 686d 6f64 2024 /\\n/og;..chmod $\n-00005600: 6d6f 6465 2c20 2464 663b 0a09 7574 696d mode, $df;..utim\n-00005610: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n-00005620: 2c20 2464 663b 0a09 7574 696d 6520 2461 , $df;..utime $a\n-00005630: 7469 6d65 2c20 246d 7469 6d65 2c20 2464 time, $mtime, $d\n-00005640: 663b 0a20 2020 207d 0a20 2020 2063 6c6f f;. }. clo\n-00005650: 7365 2844 4952 4649 4c45 293b 0a7d 0a75 se(DIRFILE);.}.u\n-00005660: 6e6c 696e 6b20 2474 6d70 4469 7246 696c nlink $tmpDirFil\n-00005670: 653b 0a0a 2470 724c 6f67 2d3e 7072 696e e;..$prLog->prin\n-00005680: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n-00005690: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-000056a0: 3d3e 0a09 2020 2020 2020 5b6a 6f69 6e28 =>.. [join(\n-000056b0: 272c 2027 2c0a 0909 2020 2020 2824 6e6f ', ',... ($no\n-000056c0: 4469 7273 203f 2022 246e 6f44 6972 7320 Dirs ? \"$noDirs \n-000056d0: 6469 7273 2220 3a20 2829 292c 0a09 0920 dirs\" : ()),... \n-000056e0: 2020 2028 2468 6172 644c 696e 6b73 203f ($hardLinks ?\n-000056f0: 2022 2468 6172 644c 696e 6b73 2068 6172 \"$hardLinks har\n-00005700: 646c 696e 6b73 2220 3a20 2829 292c 0a09 dlinks\" : ()),..\n-00005710: 0920 2020 2028 246e 6f53 796d 4c69 6e6b . ($noSymLink\n-00005720: 7320 3f20 2224 6e6f 5379 6d4c 696e 6b73 s ? \"$noSymLinks\n-00005730: 2073 796d 6c69 6e6b 7322 203a 2028 2929 symlinks\" : ())\n-00005740: 2c0a 0909 2020 2020 2824 6e6f 4e61 6d65 ,... ($noName\n-00005750: 6450 6970 6573 203f 2022 246e 6f4e 616d dPipes ? \"$noNam\n-00005760: 6564 5069 7065 7320 6e61 6d65 6420 7069 edPipes named pi\n-00005770: 7065 7322 203a 2028 2929 2c0a 0909 2020 pes\" : ()),... \n-00005780: 2020 2824 6e6f 536f 636b 6574 7320 3f20 ($noSockets ? \n-00005790: 2224 6e6f 536f 636b 6574 7320 736f 636b \"$noSockets sock\n-000057a0: 6574 7322 203a 2028 2929 2c0a 0909 2020 ets\" : ()),... \n-000057b0: 2020 2824 6e6f 426c 6f63 6b44 6576 7320 ($noBlockDevs \n-000057c0: 3f20 2224 6e6f 426c 6f63 6b44 6576 7320 ? \"$noBlockDevs \n-000057d0: 626c 6f63 6b20 6465 7673 2220 3a20 2829 block devs\" : ()\n-000057e0: 292c 0a09 0920 2020 2028 246e 6f43 6861 ),... ($noCha\n-000057f0: 7244 6576 7320 3f20 2224 6e6f 4368 6172 rDevs ? \"$noChar\n-00005800: 4465 7673 2063 6861 7220 6465 7673 2220 Devs char devs\" \n-00005810: 3a20 2829 292c 0a09 0920 2020 2028 246e : ()),... ($n\n-00005820: 6f46 696c 6573 436f 7079 203f 2022 246e oFilesCopy ? \"$n\n-00005830: 6f46 696c 6573 436f 7079 2063 6f70 6965 oFilesCopy copie\n-00005840: 6422 203a 2028 2929 2c0a 0909 2020 2020 d\" : ()),... \n-00005850: 2824 6e6f 4669 6c65 7343 6f6d 7072 203f ($noFilesCompr ?\n-00005860: 2022 246e 6f46 696c 6573 436f 6d70 7220 \"$noFilesCompr \n-00005870: 756e 636f 6d70 7265 7373 6564 2220 3a20 uncompressed\" : \n-00005880: 2829 292c 0a09 0920 2020 2028 246e 6f46 ()),... ($noF\n-00005890: 696c 6573 426c 6f63 6b65 6420 3f20 2224 ilesBlocked ? \"$\n-000058a0: 6e6f 4669 6c65 7342 6c6f 636b 6564 2063 noFilesBlocked c\n-000058b0: 6174 2062 6c6f 636b 6564 2066 696c 6573 at blocked files\n-000058c0: 2220 3a20 2829 2929 5d0a 2020 2020 290a \" : ()))]. ).\n-000058d0: 2020 2020 6966 2028 246e 6f52 6573 746f if ($noResto\n-000058e0: 7265 6429 3b0a 0a65 7869 7420 2465 7869 red);..exit $exi\n-000058f0: 743b 0a0a 0a23 2323 2323 2323 2323 2323 t;...###########\n-00005900: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005910: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005920: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005930: 230a 7375 6220 7365 7448 6172 644c 696e #.sub setHardLin\n-00005940: 6b73 0a7b 0a20 2020 206d 7920 2824 6861 ks.{. my ($ha\n-00005950: 7354 6f42 654c 696e 6b65 642c 2024 4442 sToBeLinked, $DB\n-00005960: 4d48 6172 644c 696e 6b2c 2024 7072 4c6f MHardLink, $prLo\n-00005970: 672c 2024 7665 7262 6f73 6529 203d 2040 g, $verbose) = @\n-00005980: 5f3b 0a0a 2020 2020 6d79 2024 663b 0a20 _;.. my $f;. \n-00005990: 2020 2066 6f72 6561 6368 2024 6620 286b foreach $f (k\n-000059a0: 6579 7320 2524 6861 7354 6f42 654c 696e eys %$hasToBeLin\n-000059b0: 6b65 6429 0a20 2020 207b 0a09 6d79 2028 ked). {..my (\n-000059c0: 2464 692c 2024 7569 642c 2024 6769 642c $di, $uid, $gid,\n-000059d0: 2024 6d6f 6465 2c20 2461 7469 6d65 2c20 $mode, $atime, \n-000059e0: 246d 7469 6d65 2920 3d20 407b 2424 6861 $mtime) = @{$$ha\n-000059f0: 7354 6f42 654c 696e 6b65 647b 2466 7d7d sToBeLinked{$f}}\n-00005a00: 3b0a 0969 6620 2864 6566 696e 6564 2824 ;..if (defined($\n-00005a10: 2444 424d 4861 7264 4c69 6e6b 7b24 6469 $DBMHardLink{$di\n-00005a20: 7d29 2061 6e64 2024 2444 424d 4861 7264 }) and $$DBMHard\n-00005a30: 4c69 6e6b 7b24 6469 7d20 6e65 2027 2e27 Link{$di} ne '.'\n-00005a40: 290a 097b 0a09 2020 2020 6d79 2024 6f6c )..{.. my $ol\n-00005a50: 6446 203d 2024 2444 424d 4861 7264 4c69 dF = $$DBMHardLi\n-00005a60: 6e6b 7b24 6469 7d3b 0a09 2020 2020 6966 nk{$di};.. if\n-00005a70: 2028 2d65 2024 6629 0a09 2020 2020 7b0a (-e $f).. {.\n-00005a80: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00005a90: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',.\n-00005aa0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00005ab0: 3d3e 205b 2263 616e 6e6f 7420 6c69 6e6b => [\"cannot link\n-00005ac0: 203c 2466 3e20 746f 2069 7473 656c 6622 <$f> to itself\"\n-00005ad0: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. \n-00005ae0: 656c 7365 0a09 2020 2020 7b09 090a 0909 else.. {.....\n-00005af0: 6966 2028 6c69 6e6b 2024 6f6c 6446 2c20 if (link $oldF, \n-00005b00: 2466 290a 0909 7b0a 0909 2020 2020 2470 $f)...{... $p\n-00005b10: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00005b20: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',.....\n-00005b30: 2020 272d 7374 7227 203d 3e20 5b22 6c69 '-str' => [\"li\n-00005b40: 6e6b 2024 6f6c 6446 2024 6622 5d29 0a09 nk $oldF $f\"])..\n-00005b50: 0909 6966 2028 2476 6572 626f 7365 293b ..if ($verbose);\n-00005b60: 0a09 0920 2020 2063 686f 776e 2024 7569 ... chown $ui\n-00005b70: 642c 2024 6769 642c 2024 663b 0a09 0920 d, $gid, $f;... \n-00005b80: 2020 2063 686d 6f64 2024 6d6f 6465 2c20 chmod $mode, \n-00005b90: 2466 3b0a 0909 2020 2020 7574 696d 6520 $f;... utime \n-00005ba0: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, \n-00005bb0: 2466 3b0a 0909 7d0a 0909 656c 7365 0a09 $f;...}...else..\n-00005bc0: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog-\n-00005bd0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00005be0: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s\n-00005bf0: 7472 2720 3d3e 205b 2266 6169 6c65 643a tr' => [\"failed:\n-00005c00: 206c 696e 6b20 246f 6c64 4620 2466 225d link $oldF $f\"]\n-00005c10: 293b 0a09 097d 0a09 2020 2020 7d0a 0920 );...}.. }.. \n-00005c20: 2020 2064 656c 6574 6520 2424 6861 7354 delete $$hasT\n-00005c30: 6f42 654c 696e 6b65 647b 2466 7d3b 0a09 oBeLinked{$f};..\n-00005c40: 7d0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 }. }.}...####\n-00005c50: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00005c70: 2323 2323 0a73 7562 2075 6e63 6f6d 7072 ####.sub uncompr\n-00005c80: 6573 7343 6174 426c 6f63 6b0a 7b0a 2020 essCatBlock.{. \n-00005c90: 2020 6d79 2024 6672 6f6d 4469 7220 3d20 my $fromDir = \n-00005ca0: 7368 6966 743b 0a20 2020 206d 7920 2462 shift;. my $b\n-00005cb0: 6163 6b75 7052 6f6f 7420 3d20 7368 6966 ackupRoot = shif\n-00005cc0: 743b 0a20 2020 206d 7920 2463 7265 6174 t;. my $creat\n-00005cd0: 6553 7061 7273 6546 696c 6573 203d 2073 eSparseFiles = s\n-00005ce0: 6869 6674 3b0a 2020 2020 6d79 2024 746f hift;. my $to\n-00005cf0: 4669 6c65 203d 2073 6869 6674 3b0a 2020 File = shift;. \n-00005d00: 2020 6d79 2024 6d61 736b 203d 2073 6869 my $mask = shi\n-00005d10: 6674 3b0a 2020 2020 6d79 2024 756d 636f ft;. my $umco\n-00005d20: 6d70 7220 3d20 7368 6966 743b 0a20 2020 mpr = shift;. \n-00005d30: 206d 7920 2475 6e63 6f6d 7072 5061 7220 my $uncomprPar \n-00005d40: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my \n-00005d50: 2470 6f73 7466 6978 203d 2073 6869 6674 $postfix = shift\n-00005d60: 3b0a 2020 2020 6d79 2024 7369 7a65 203d ;. my $size =\n-00005d70: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $\n-00005d80: 7072 4c6f 6720 3d20 7368 6966 743b 0a0a prLog = shift;..\n-00005d90: 2020 2020 6d79 2024 6e42 6c6f 636b 7320 my $nBlocks \n-00005da0: 3d20 303b 0a20 2020 206d 7920 2840 656e = 0;. my (@en\n-00005db0: 7472 6965 732c 2040 6d64 352c 2040 636f tries, @md5, @co\n-00005dc0: 6d70 7229 3b0a 0a20 2020 206d 7920 2466 mpr);.. my $f\n-00005dd0: 696c 6549 6e20 3d0a 0970 6970 6546 726f ileIn =..pipeFro\n-00005de0: 6d46 6f72 6b2d 3e6e 6577 2827 2d65 7865 mFork->new('-exe\n-00005df0: 6327 203d 3e20 2762 7a69 7032 272c 0a09 c' => 'bzip2',..\n-00005e00: 0909 2020 272d 7061 7261 6d27 203d 3e20 .. '-param' => \n-00005e10: 5b27 2d64 275d 2c0a 0909 0920 2027 2d73 ['-d'],.... '-s\n-00005e20: 7464 696e 2720 3d3e 2022 2466 726f 6d44 tdin' => \"$fromD\n-00005e30: 6972 2f2e 6d64 3542 6c6f 636b 4368 6563 ir/.md5BlockChec\n-00005e40: 6b53 756d 732e 627a 3222 2c0a 0909 0920 kSums.bz2\",.... \n-00005e50: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n-00005e60: 2022 2474 6d70 6469 722f 7374 6275 5069 \"$tmpdir/stbuPi\n-00005e70: 7065 4672 6f6d 3131 2d22 2c0a 0909 0920 peFrom11-\",.... \n-00005e80: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr\n-00005e90: 4c6f 6729 3b0a 2020 2020 6d79 2024 6c3b Log);. my $l;\n-00005ea0: 0a20 2020 2077 6869 6c65 2028 246c 203d . while ($l =\n-00005eb0: 2024 6669 6c65 496e 2d3e 7265 6164 2829 $fileIn->read()\n-00005ec0: 290a 2020 2020 7b0a 096d 7920 2824 6c5f ). {..my ($l_\n-00005ed0: 6d64 352c 2024 6c5f 636f 6d70 722c 2024 md5, $l_compr, $\n-00005ee0: 6c5f 662c 2024 6e29 3b0a 0963 686f 6d70 l_f, $n);..chomp\n-00005ef0: 2024 6c3b 0a09 246e 203d 2028 246c 5f6d $l;..$n = ($l_m\n-00005f00: 6435 2c20 246c 5f63 6f6d 7072 2c20 246c d5, $l_compr, $l\n-00005f10: 5f66 2920 3d20 7370 6c69 7428 2f5c 732f _f) = split(/\\s/\n-00005f20: 2c20 246c 2c20 3329 3b0a 0969 6620 2824 , $l, 3);..if ($\n-00005f30: 6e20 213d 2033 290a 097b 0a09 2020 2020 n != 3)..{.. \n-00005f40: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00005f50: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00005f60: 0920 2027 2d73 7472 2720 3d3e 0a09 0909 . '-str' =>....\n-00005f70: 2020 5b22 7374 7261 6e67 6520 6c69 6e65 [\"strange line\n-00005f80: 2069 6e20 3c24 6672 6f6d 4469 722f 2e6d in <$fromDir/.m\n-00005f90: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums\n-00005fa0: 2e62 7a32 3e20 2220 2e0a 0909 0920 2020 .bz2> \" ..... \n-00005fb0: 2269 6e20 6c69 6e65 2022 202e 2024 6669 \"in line \" . $fi\n-00005fc0: 6c65 496e 2d3e 6765 7428 272d 7768 6174 leIn->get('-what\n-00005fd0: 2720 3d3e 2027 6c69 6e65 4e72 2729 202e ' => 'lineNr') .\n-00005fe0: 0a09 0909 2020 2022 3a22 2c20 225c 743c .... \":\", \"\\t<\n-00005ff0: 246c 3e22 5d29 3b0a 0920 2020 2072 6574 $l>\"]);.. ret\n-00006000: 7572 6e20 313b 0a09 7d0a 092b 2b24 6e42 urn 1;..}..++$nB\n-00006010: 6c6f 636b 733b 0a09 7075 7368 2040 6d64 locks;..push @md\n-00006020: 352c 2024 6c5f 6d64 353b 0a09 7075 7368 5, $l_md5;..push\n-00006030: 2040 636f 6d70 722c 2024 6c5f 636f 6d70 @compr, $l_comp\n-00006040: 723b 0a09 7075 7368 2040 656e 7472 6965 r;..push @entrie\n-00006050: 732c 2024 6c5f 663b 0a20 2020 207d 0a20 s, $l_f;. }. \n-00006060: 2020 2024 6669 6c65 496e 2d3e 636c 6f73 $fileIn->clos\n-00006070: 6528 293b 0a20 2020 2024 6669 6c65 496e e();. $fileIn\n-00006080: 203d 2075 6e64 6566 3b0a 0a20 2020 2026 = undef;.. &\n-00006090: 3a3a 6372 6561 7465 5370 6172 7365 4669 ::createSparseFi\n-000060a0: 6c65 2824 746f 4669 6c65 2c20 2473 697a le($toFile, $siz\n-000060b0: 652c 2024 7072 4c6f 6729 206f 7220 6578 e, $prLog) or ex\n-000060c0: 6974 2031 3b0a 0a20 2020 206d 7920 246d it 1;.. my $m\n-000060d0: 6435 6e75 6c6c 203d 2027 273b 0a0a 2020 d5null = '';.. \n-000060e0: 2020 6d79 2024 7265 7420 3d20 303b 0a20 my $ret = 0;. \n-000060f0: 2020 206c 6f63 616c 202a 544f 3b0a 2020 local *TO;. \n-00006100: 2020 756e 6c65 7373 2028 7379 736f 7065 unless (sysope\n-00006110: 6e28 544f 2c20 2474 6f46 696c 652c 204f n(TO, $toFile, O\n-00006120: 5f43 5245 4154 207c 204f 5f57 524f 4e4c _CREAT | O_WRONL\n-00006130: 5929 290a 2020 2020 7b0a 0924 7072 4c6f Y)). {..$prLo\n-00006140: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00006150: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n-00006160: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-00006170: 6e6f 7420 7772 6974 6520 746f 203c 2474 not write to <$t\n-00006180: 6f46 696c 653e 225d 293b 0a09 2472 6574 oFile>\"]);..$ret\n-00006190: 203d 2031 3b0a 2020 2020 7d0a 0a20 2020 = 1;. }.. \n-000061a0: 206d 7920 2462 6c6f 636b 5369 7a65 203d my $blockSize =\n-000061b0: 2030 3b0a 2020 2020 666f 7220 286d 7920 0;. for (my \n-000061c0: 2469 426c 6f63 6b20 3d20 3020 3b20 2469 $iBlock = 0 ; $i\n-000061d0: 426c 6f63 6b20 3c20 4065 6e74 7269 6573 Block < @entries\n-000061e0: 203b 202b 2b24 6942 6c6f 636b 290a 2020 ; ++$iBlock). \n-000061f0: 2020 7b0a 096d 7920 2465 6e74 7279 203d {..my $entry =\n-00006200: 2024 656e 7472 6965 735b 2469 426c 6f63 $entries[$iBloc\n-00006210: 6b5d 3b0a 096d 7920 246d 6435 203d 2024 k];..my $md5 = $\n-00006220: 6d64 355b 2469 426c 6f63 6b5d 3b0a 096d md5[$iBlock];..m\n-00006230: 7920 2463 6f6d 7072 203d 2024 636f 6d70 y $compr = $comp\n-00006240: 725b 2469 426c 6f63 6b5d 3b0a 096d 7920 r[$iBlock];..my \n-00006250: 2461 6374 5365 656b 506f 7320 3d20 2462 $actSeekPos = $b\n-00006260: 6c6f 636b 5369 7a65 202a 2024 6942 6c6f lockSize * $iBlo\n-00006270: 636b 3b0a 0a09 7379 7373 6565 6b28 544f ck;...sysseek(TO\n-00006280: 2c20 2461 6374 5365 656b 506f 732c 2030 , $actSeekPos, 0\n-00006290: 293b 0a0a 096e 6578 7420 6966 2028 246d );...next if ($m\n-000062a0: 6435 2065 7120 246d 6435 6e75 6c6c 293b d5 eq $md5null);\n-000062b0: 0a0a 096d 7920 2462 7566 6665 723b 0a09 ...my $buffer;..\n-000062c0: 6c6f 6361 6c20 2a46 524f 4d3b 0a09 6d79 local *FROM;..my\n-000062d0: 2024 6669 6c65 496e 203d 2075 6e64 6566 $fileIn = undef\n-000062e0: 3b0a 0969 6620 2824 636f 6d70 7220 6571 ;..if ($compr eq\n-000062f0: 2027 6327 2920 2020 2020 2020 2320 636f 'c') # co\n-00006300: 6d70 7265 7373 6564 2062 6c6f 636b 0a09 mpressed block..\n-00006310: 7b0a 0920 2020 2069 6620 2824 6d61 696e {.. if ($main\n-00006320: 3a3a 494f 436f 6d70 7265 7373 4469 7265 ::IOCompressDire\n-00006330: 6374 290a 0920 2020 207b 0a09 096d 7920 ct).. {...my \n-00006340: 2469 6e70 7574 203d 2022 2462 6163 6b75 $input = \"$backu\n-00006350: 7052 6f6f 742f 2465 6e74 7279 223b 0a09 pRoot/$entry\";..\n-00006360: 096d 7920 2475 6320 3d20 6e65 7720 494f .my $uc = new IO\n-00006370: 3a3a 556e 636f 6d70 7265 7373 3a3a 4275 ::Uncompress::Bu\n-00006380: 6e7a 6970 3220 2469 6e70 7574 3b0a 0909 nzip2 $input;...\n-00006390: 7768 696c 6520 2824 7563 2d3e 7265 6164 while ($uc->read\n-000063a0: 2824 6275 6666 6572 2c20 3130 2a31 3032 ($buffer, 10*102\n-000063b0: 342a 2a32 2929 0a09 097b 0a09 0920 2020 4**2))...{... \n-000063c0: 206d 7920 246e 3b0a 0909 2020 2020 756e my $n;... un\n-000063d0: 6c65 7373 2028 246e 203d 2073 7973 7772 less ($n = syswr\n-000063e0: 6974 6528 544f 2c20 2462 7566 6665 7229 ite(TO, $buffer)\n-000063f0: 290a 0909 2020 2020 7b0a 0909 0924 7072 )... {....$pr\n-00006400: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00006410: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-00006420: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00006430: 2277 7269 7469 6e67 2074 6f20 3c24 746f \"writing to <$to\n-00006440: 4669 6c65 3e20 6661 696c 6564 225d 293b File> failed\"]);\n-00006450: 0a09 0909 2472 6574 203d 2031 3b0a 0909 ....$ret = 1;...\n-00006460: 2020 2020 7d0a 0909 2020 2020 2462 6c6f }... $blo\n-00006470: 636b 5369 7a65 202b 3d20 246e 2069 6620 ckSize += $n if \n-00006480: 2469 426c 6f63 6b20 3d3d 2030 3b0a 0909 $iBlock == 0;...\n-00006490: 7d0a 0920 2020 207d 0a09 2020 2020 656c }.. }.. el\n-000064a0: 7365 0a09 2020 2020 7b0a 0909 2466 696c se.. {...$fil\n-000064b0: 6549 6e20 3d0a 0909 2020 2020 7069 7065 eIn =... pipe\n-000064c0: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('-\n-000064d0: 6578 6563 2720 3d3e 2024 756e 636f 6d70 exec' => $uncomp\n-000064e0: 722c 0a09 0909 0920 2020 2020 2027 2d70 r,..... '-p\n-000064f0: 6172 616d 2720 3d3e 205c 4075 6e63 6f6d aram' => \\@uncom\n-00006500: 7072 5061 722c 0a09 0909 0920 2020 2020 prPar,..... \n-00006510: 2027 2d73 7464 696e 2720 3d3e 2022 2462 '-stdin' => \"$b\n-00006520: 6163 6b75 7052 6f6f 742f 2465 6e74 7279 ackupRoot/$entry\n-00006530: 222c 0a09 0909 0920 2020 2020 2027 2d6f \",..... '-o\n-00006540: 7574 5261 6e64 6f6d 2720 3d3e 2022 2474 utRandom' => \"$t\n-00006550: 6d70 6469 722f 7374 6275 5069 7065 4672 mpdir/stbuPipeFr\n-00006560: 6f6d 3131 2d22 2c0a 0909 0909 2020 2020 om11-\",..... \n-00006570: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n-00006580: 724c 6f67 293b 0a09 0977 6869 6c65 2028 rLog);...while (\n-00006590: 2466 696c 6549 6e2d 3e73 7973 7265 6164 $fileIn->sysread\n-000065a0: 285c 2462 7566 6665 722c 2031 302a 3130 (\\$buffer, 10*10\n-000065b0: 3234 2a2a 3229 290a 0909 7b0a 0909 2020 24**2))...{... \n-000065c0: 2020 6d79 2024 6e3b 0a09 0920 2020 2075 my $n;... u\n-000065d0: 6e6c 6573 7320 2824 6e20 3d20 7379 7377 nless ($n = sysw\n-000065e0: 7269 7465 2854 4f2c 2024 6275 6666 6572 rite(TO, $buffer\n-000065f0: 2929 0a09 0920 2020 207b 0a09 0909 2470 ))... {....$p\n-00006600: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00006610: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n-00006620: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00006630: 5b22 7772 6974 696e 6720 746f 203c 2474 [\"writing to <$t\n-00006640: 6f46 696c 653e 2066 6169 6c65 6422 5d29 oFile> failed\"])\n-00006650: 3b0a 0909 0924 7265 7420 3d20 313b 0a09 ;....$ret = 1;..\n-00006660: 0920 2020 207d 0a09 0920 2020 2024 626c . }... $bl\n-00006670: 6f63 6b53 697a 6520 2b3d 2024 6e20 6966 ockSize += $n if\n-00006680: 2024 6942 6c6f 636b 203d 3d20 303b 0a09 $iBlock == 0;..\n-00006690: 097d 0a09 2020 2020 7d0a 097d 0a09 656c .}.. }..}..el\n-000066a0: 7365 2020 2020 2020 2020 2020 2023 2062 se # b\n-000066b0: 6c6f 636b 206e 6f74 2063 6f6d 7072 6573 lock not compres\n-000066c0: 7365 640a 097b 0a09 2020 2020 756e 6c65 sed..{.. unle\n-000066d0: 7373 2028 7379 736f 7065 6e28 4652 4f4d ss (sysopen(FROM\n-000066e0: 2c20 2224 6261 636b 7570 526f 6f74 2f24 , \"$backupRoot/$\n-000066f0: 656e 7472 7922 2c20 4f5f 5244 4f4e 4c59 entry\", O_RDONLY\n-00006700: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL\n-00006710: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00006720: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... \n-00006730: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => [\"c\n-00006740: 616e 6e6f 7420 7265 6164 203c 2462 6163 annot read <$bac\n-00006750: 6b75 7052 6f6f 742f 2465 6e74 7279 3e22 kupRoot/$entry>\"\n-00006760: 5d29 3b0a 0909 7265 7475 726e 2031 3b0a ]);...return 1;.\n-00006770: 0920 2020 207d 0a09 2020 2020 7768 696c . }.. whil\n-00006780: 6520 2873 7973 7265 6164 2846 524f 4d2c e (sysread(FROM,\n-00006790: 2024 6275 6666 6572 2c20 3130 2a31 3032 $buffer, 10*102\n-000067a0: 342a 2a32 2929 0a09 2020 2020 7b0a 0909 4**2)).. {...\n-000067b0: 6d79 2024 6e3b 0a09 0975 6e6c 6573 7320 my $n;...unless \n-000067c0: 2824 6e20 3d20 7379 7377 7269 7465 2854 ($n = syswrite(T\n-000067d0: 4f2c 2024 6275 6666 6572 2929 0a09 097b O, $buffer))...{\n-000067e0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-000067f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00006800: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str\n-00006810: 2720 3d3e 205b 2277 7269 7469 6e67 2074 ' => [\"writing t\n-00006820: 6f20 3c24 746f 4669 6c65 3e20 6661 696c o <$toFile> fail\n-00006830: 6564 225d 293b 0a09 0920 2020 2024 7265 ed\"]);... $re\n-00006840: 7420 3d20 313b 0a09 097d 0a09 0924 626c t = 1;...}...$bl\n-00006850: 6f63 6b53 697a 6520 2b3d 2024 6e20 6966 ockSize += $n if\n-00006860: 2024 6942 6c6f 636b 203d 3d20 303b 0a09 $iBlock == 0;..\n-00006870: 2020 2020 7d0a 097d 0a0a 0969 6620 2824 }..}...if ($\n-00006880: 6669 6c65 496e 290a 097b 0a09 2020 2020 fileIn)..{.. \n-00006890: 2466 696c 6549 6e2d 3e63 6c6f 7365 2829 $fileIn->close()\n-000068a0: 3b0a 0920 2020 2024 6669 6c65 496e 203d ;.. $fileIn =\n-000068b0: 2075 6e64 6566 3b0a 097d 0a09 656c 7365 undef;..}..else\n-000068c0: 0a09 7b0a 0920 2020 2063 6c6f 7365 2846 ..{.. close(F\n-000068d0: 524f 4d29 3b0a 097d 0a0a 0969 6620 2824 ROM);..}...if ($\n-000068e0: 6942 6c6f 636b 203d 3d20 3029 0a09 7b0a iBlock == 0)..{.\n-000068f0: 0920 2020 2024 6d64 356e 756c 6c20 3d20 . $md5null = \n-00006900: 263a 3a63 616c 634d 4435 6e75 6c6c 2824 &::calcMD5null($\n-00006910: 626c 6f63 6b53 697a 6529 0a09 0969 6620 blockSize)...if \n-00006920: 2463 7265 6174 6553 7061 7273 6546 696c $createSparseFil\n-00006930: 6573 3b0a 097d 0a20 2020 207d 0a20 2020 es;..}. }. \n-00006940: 2063 6c6f 7365 2854 4f29 3b0a 2020 2020 close(TO);. \n-00006950: 7265 7475 726e 2024 7265 743b 0a7d 0a0a return $ret;.}..\n-00006960: 0a23 2323 2323 2323 2323 2323 2323 2323 .###############\n-00006970: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006980: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00006990: 2323 2323 2323 2323 2323 2323 230a 2320 #############.# \n-000069a0: 6361 6c63 206d 6435 2073 756d 206f 6620 calc md5 sum of \n-000069b0: 626c 6f63 6b20 7769 7468 2024 7369 7a65 block with $size\n-000069c0: 2074 696d 6520 7a65 726f 0a73 7562 2063 time zero.sub c\n-000069d0: 616c 634d 4435 6e75 6c6c 0a7b 0a20 2020 alcMD5null.{. \n-000069e0: 206d 7920 2473 697a 6520 3d20 7368 6966 my $size = shif\n-000069f0: 743b 0a0a 2020 2020 6d79 2024 6e75 6c6c t;.. my $null\n-00006a00: 203d 2070 6163 6b28 2743 272c 2030 2920 = pack('C', 0) \n-00006a10: 7820 2473 697a 653b 0a0a 2020 2020 6d79 x $size;.. my\n-00006a20: 2024 6d64 3520 3d20 4469 6765 7374 3a3a $md5 = Digest::\n-00006a30: 4d44 352d 3e6e 6577 2829 3b0a 2020 2020 MD5->new();. \n-00006a40: 246d 6435 2d3e 6164 6428 246e 756c 6c29 $md5->add($null)\n-00006a50: 3b0a 2020 2020 7265 7475 726e 2024 6d64 ;. return $md\n-00006a60: 352d 3e68 6578 6469 6765 7374 2829 3b0a 5->hexdigest();.\n-00006a70: 7d0a }.\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"}, {"source1": "./usr/bin/storeBackupReplicationWizard", "source2": "./usr/bin/storeBackupReplicationWizard", "has_internal_linenos": true, "unified_diff": "@@ -1,1217 +1,5 @@\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: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a75 7365 2073 7472 6963 743b 0a75 ;..use strict;.u\n-00000330: 7365 204e 6574 3a3a 5069 6e67 3b0a 7573 se Net::Ping;.us\n-00000340: 6520 504f 5349 583b 0a0a 0a73 7562 206c e POSIX;...sub l\n-00000350: 6962 5061 7468 0a7b 0a20 2020 206d 7920 ibPath.{. my \n-00000360: 2466 696c 6520 3d20 7368 6966 743b 0a0a $file = shift;..\n-00000370: 2020 2020 6d79 2024 6469 723b 0a0a 2020 my $dir;.. \n-00000380: 2020 2320 4661 6c6c 7320 4461 7465 6920 # Falls Datei \n-00000390: 7365 6c62 7374 2065 696e 2073 796d 6c69 selbst ein symli\n-000003a0: 6e6b 2069 7374 2c20 736f 6c61 6e67 6520 nk ist, solange \n-000003b0: 666f 6c67 656e 2c20 6269 7320 6175 6667 folgen, bis aufg\n-000003c0: 656c c3b6 7374 0a20 2020 2069 6620 282d el..st. if (-\n-000003d0: 6620 2466 696c 6529 0a20 2020 207b 0a09 f $file). {..\n-000003e0: 7768 696c 6520 282d 6c20 2466 696c 6529 while (-l $file)\n-000003f0: 0a09 7b0a 0920 2020 206d 7920 246c 696e ..{.. my $lin\n-00000400: 6b20 3d20 7265 6164 6c69 6e6b 2824 6669 k = readlink($fi\n-00000410: 6c65 293b 0a0a 0920 2020 2069 6620 2873 le);... if (s\n-00000420: 7562 7374 7228 246c 696e 6b2c 2030 2c20 ubstr($link, 0, \n-00000430: 3129 206e 6520 222f 2229 0a09 2020 2020 1) ne \"/\").. \n-00000440: 7b0a 0909 2466 696c 6520 3d7e 2073 2f5b {...$file =~ s/[\n-00000450: 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 ^\\/]+$/$link/;..\n-00000460: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else.\n-00000470: 0920 2020 207b 0a09 0924 6669 6c65 203d . {...$file =\n-00000480: 2024 6c69 6e6b 3b0a 0920 2020 207d 0a09 $link;.. }..\n-00000490: 7d0a 0a09 2824 6469 722c 2024 6669 6c65 }...($dir, $file\n-000004a0: 2920 3d20 2673 706c 6974 4669 6c65 4469 ) = &splitFileDi\n-000004b0: 7228 2466 696c 6529 3b0a 0924 6669 6c65 r($file);..$file\n-000004c0: 203d 2022 2f24 6669 6c65 223b 0a20 2020 = \"/$file\";. \n-000004d0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. \n-000004e0: 7b0a 0970 7269 6e74 2053 5444 4552 5220 {..print STDERR \n-000004f0: 223c 2466 696c 653e 2064 6f65 7320 6e6f \"<$file> does no\n-00000500: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting\n-00000510: 215c 6e22 3b0a 2020 2020 2020 2020 504f !\\n\";. PO\n-00000520: 5349 583a 3a5f 6578 6974 2032 3b0a 2020 SIX::_exit 2;. \n-00000530: 2020 7d0a 0a20 2020 2024 6469 7220 2e3d }.. $dir .=\n-00000540: 2022 2f2e 2e2f 6c69 6222 3b20 2020 2020 \"/../lib\"; \n-00000550: 2020 2020 2020 2320 5066 6164 207a 7520 # Pfad zu \n-00000560: 6465 6e20 4269 626c 696f 7468 656b 656e den Bibliotheken\n-00000570: 0a20 2020 206d 7920 246f 6c64 4469 7220 . my $oldDir \n-00000580: 3d20 602f 6269 6e2f 7077 6460 3b0a 2020 = `/bin/pwd`;. \n-00000590: 2020 6368 6f6d 7020 246f 6c64 4469 723b chomp $oldDir;\n-000005a0: 0a20 2020 2069 6620 2863 6864 6972 2024 . if (chdir $\n-000005b0: 6469 7229 0a20 2020 207b 0a09 6d79 2024 dir). {..my $\n-000005c0: 6162 7344 6972 203d 2060 2f62 696e 2f70 absDir = `/bin/p\n-000005d0: 7764 603b 0a09 6368 6f70 2024 6162 7344 wd`;..chop $absD\n-000005e0: 6972 3b0a 0963 6864 6972 2024 6f6c 6444 ir;..chdir $oldD\n-000005f0: 6972 3b0a 0a09 7265 7475 726e 2028 2673 ir;...return (&s\n-00000600: 706c 6974 4669 6c65 4469 7228 2224 6162 plitFileDir(\"$ab\n-00000610: 7344 6972 2466 696c 6522 2929 3b0a 2020 sDir$file\"));. \n-00000620: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. \n-00000630: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR\n-00000640: 2022 3c24 6469 723e 2064 6f65 7320 6e6f \"<$dir> does no\n-00000650: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting\n-00000660: 5c6e 223b 0a20 2020 2020 2020 2050 4f53 \\n\";. POS\n-00000670: 4958 3a3a 5f65 7869 7420 323b 0a20 2020 IX::_exit 2;. \n-00000680: 207d 0a7d 0a73 7562 2073 706c 6974 4669 }.}.sub splitFi\n-00000690: 6c65 4469 720a 7b0a 2020 2020 6d79 2024 leDir.{. my $\n-000006a0: 6e61 6d65 203d 2073 6869 6674 3b0a 0a20 name = shift;.. \n-000006b0: 2020 2072 6574 7572 6e20 2827 2e27 2c20 return ('.', \n-000006c0: 246e 616d 6529 2075 6e6c 6573 7320 2824 $name) unless ($\n-000006d0: 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 2020 name =~/\\//); \n-000006e0: 2023 206e 7572 2065 696e 6661 6368 6572 # nur einfacher\n-000006f0: 2044 6174 6569 6e61 6d65 0a0a 2020 2020 Dateiname.. \n-00000700: 6d79 2028 2464 6972 2c20 2466 696c 6529 my ($dir, $file)\n-00000710: 203d 2024 6e61 6d65 203d 7e20 2f5e 282e = $name =~ /^(.\n-00000720: 2a29 5c2f 282e 2a29 242f 733b 0a20 2020 *)\\/(.*)$/s;. \n-00000730: 2024 6469 7220 3d20 272f 2720 6966 2028 $dir = '/' if (\n-00000740: 2464 6972 2065 7120 2727 293b 2020 2020 $dir eq ''); \n-00000750: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00000760: 2067 696c 742c 2066 616c 6c73 207a 2e42 gilt, falls z.B\n-00000770: 2e20 2f66 696c 656e 616d 650a 2020 2020 . /filename. \n-00000780: 7265 7475 726e 2028 2464 6972 2c20 2466 return ($dir, $f\n-00000790: 696c 6529 3b0a 7d0a 6d79 2028 2472 6571 ile);.}.my ($req\n-000007a0: 2c20 2470 726f 6729 203d 2026 6c69 6250 , $prog) = &libP\n-000007b0: 6174 6828 2430 293b 0a75 6e73 6869 6674 ath($0);.unshift\n-000007c0: 2040 494e 432c 2022 2472 6571 223b 0a0a @INC, \"$req\";..\n-000007d0: 0a72 6571 7569 7265 2027 7370 6c69 744c .require 'splitL\n-000007e0: 696e 652e 706c 273b 0a72 6571 7569 7265 ine.pl';.require\n-000007f0: 2027 6368 6563 6b50 6172 616d 322e 706c 'checkParam2.pl\n-00000800: 273b 0a72 6571 7569 7265 2027 6368 6563 ';.require 'chec\n-00000810: 6b4f 626a 5061 722e 706c 273b 0a72 6571 kObjPar.pl';.req\n-00000820: 7569 7265 2027 7072 4c6f 672e 706c 273b uire 'prLog.pl';\n-00000830: 0a72 6571 7569 7265 2027 666f 726b 5072 .require 'forkPr\n-00000840: 6f63 2e70 6c27 3b0a 7265 7175 6972 6520 oc.pl';.require \n-00000850: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';.\n-00000860: 7265 7175 6972 6520 2776 6572 7369 6f6e require 'version\n-00000870: 2e70 6c27 3b0a 7265 7175 6972 6520 2774 .pl';.require 't\n-00000880: 6169 6c2e 706c 273b 0a72 6571 7569 7265 ail.pl';.require\n-00000890: 2027 6669 6c65 4469 722e 706c 273b 0a0a 'fileDir.pl';..\n-000008a0: 6d79 2024 746d 7064 6972 203d 2027 2f74 my $tmpdir = '/t\n-000008b0: 6d70 273b 2020 2020 2020 2020 2020 2020 mp'; \n-000008c0: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu\n-000008d0: 650a 2474 6d70 6469 7220 3d20 2445 4e56 e.$tmpdir = $ENV\n-000008e0: 7b27 544d 5044 4952 277d 2069 6620 6465 {'TMPDIR'} if de\n-000008f0: 6669 6e65 6420 2445 4e56 7b27 544d 5044 fined $ENV{'TMPD\n-00000900: 4952 277d 3b0a 0a0a 6d79 2024 636f 6d6d IR'};...my $comm\n-00000910: 656e 744d 6173 7465 7242 6163 6b75 7020 entMasterBackup \n-00000920: 3d0a 2020 2020 2254 6865 206d 6173 7465 =. \"The maste\n-00000930: 7220 6261 636b 7570 2069 7320 7468 6520 r backup is the \n-00000940: 6261 636b 7570 2079 6f75 2073 7065 6369 backup you speci\n-00000950: 6679 2077 6974 6820 6f70 7469 6f6e 2027 fy with option '\n-00000960: 736f 7572 6365 4469 7227 206f 6620 2220 sourceDir' of \" \n-00000970: 2e0a 2020 2020 2273 746f 7265 4261 636b .. \"storeBack\n-00000980: 7570 2e70 6c20 286f 7220 6d61 7962 6520 up.pl (or maybe \n-00000990: 272d 7327 206f 6e20 7468 6520 636f 6d6d '-s' on the comm\n-000009a0: 616e 6420 6c69 6e65 292e 5c6e 4974 2069 and line).\\nIt i\n-000009b0: 7320 7468 6520 6261 7365 2022 202e 0a20 s the base \" .. \n-000009c0: 2020 2022 6469 7265 6374 6f72 7920 666f \"directory fo\n-000009d0: 7220 7265 706c 6963 6174 696f 6e28 7329 r replication(s)\n-000009e0: 3b20 7468 6973 206d 6561 6e73 2061 6674 ; this means aft\n-000009f0: 6572 2072 6570 6c69 6361 7469 6f6e 2074 er replication t\n-00000a00: 6f20 7468 6520 6465 6c74 6120 2220 2e0a o the delta \" ..\n-00000a10: 2020 2020 2263 6163 6865 2064 6972 6563 \"cache direc\n-00000a20: 746f 7279 2079 6f75 2062 6163 6b75 7073 tory you backups\n-00000a30: 2077 696c 6c20 7468 6520 7374 6f72 6564 will the stored\n-00000a40: 2061 7420 7468 6973 2070 6c61 6365 206c at this place l\n-00000a50: 696b 6520 7769 7468 6f75 7420 2220 2e0a ike without \" ..\n-00000a60: 2020 2020 2261 6e79 2072 6570 6c69 6361 \"any replica\n-00000a70: 7469 6f6e 2e22 3b0a 6d79 2024 636f 6d6d tion.\";.my $comm\n-00000a80: 656e 7442 6163 6b75 7043 6f70 7920 3d0a entBackupCopy =.\n-00000a90: 2020 2020 2254 6865 2062 6163 6b75 7020 \"The backup \n-00000aa0: 636f 7079 2069 7320 6120 636f 7079 2072 copy is a copy r\n-00000ab0: 6561 6c69 7a65 6420 7669 6120 7265 706c ealized via repl\n-00000ac0: 6963 6174 696f 6e20 6672 6f6d 2074 6865 ication from the\n-00000ad0: 206d 6173 7465 7220 2220 2e0a 2020 2020 master \" .. \n-00000ae0: 2262 6163 6b75 7020 6469 7265 6374 6f72 \"backup director\n-00000af0: 792e 2054 6865 2064 656c 7461 7320 286e y. The deltas (n\n-00000b00: 6577 2066 696c 6573 2920 636f 6d70 6172 ew files) compar\n-00000b10: 6564 2074 6f20 7468 6520 7072 6576 696f ed to the previo\n-00000b20: 7573 2022 202e 0a20 2020 2022 6261 636b us \" .. \"back\n-00000b30: 7570 2873 2920 6973 2072 6570 6c69 6361 up(s) is replica\n-00000b40: 7465 6420 746f 2074 6865 2064 656c 7461 ted to the delta\n-00000b50: 2063 6163 6865 2064 6972 6563 746f 7279 cache directory\n-00000b60: 2061 6e64 2074 6865 6e20 746f 2074 6865 and then to the\n-00000b70: 2022 202e 0a20 2020 2022 6261 636b 7570 \" .. \"backup\n-00000b80: 2063 6f70 7920 6469 7265 6374 6f72 7920 copy directory \n-00000b90: 6d65 6e74 696f 6e65 6420 6865 7265 2e22 mentioned here.\"\n-00000ba0: 3b0a 6d79 2024 636f 6d6d 656e 7443 6163 ;.my $commentCac\n-00000bb0: 6865 4469 7220 3d0a 2020 2020 2254 6865 heDir =. \"The\n-00000bc0: 2064 656c 7461 2063 6163 6865 2064 6972 delta cache dir\n-00000bd0: 6563 746f 7279 2069 7320 7468 6520 706c ectory is the pl\n-00000be0: 6163 6520 746f 2074 656d 706f 7261 7269 ace to temporari\n-00000bf0: 6c79 2073 746f 7265 2079 6f75 7220 2220 ly store your \" \n-00000c00: 2e0a 2020 2020 2263 6861 6e67 6573 2066 .. \"changes f\n-00000c10: 726f 6d20 6261 636b 7570 2074 6f20 6261 rom backup to ba\n-00000c20: 636b 7570 2062 6566 6f72 6520 7468 6579 ckup before they\n-00000c30: 2077 696c 6c20 6265 2063 6f70 6965 6420 will be copied \n-00000c40: 746f 2079 6f75 7220 2220 2e0a 2020 2020 to your \" .. \n-00000c50: 2262 6163 6b75 7020 636f 7079 2028 6f6e \"backup copy (on\n-00000c60: 2061 6e20 6578 7465 726e 616c 2064 6973 an external dis\n-00000c70: 6b29 223b 0a0a 3d68 6561 6431 204e 414d k)\";..=head1 NAM\n-00000c80: 450a 0a73 746f 7265 4261 636b 7570 5265 E..storeBackupRe\n-00000c90: 706c 6963 6174 696f 6e57 697a 6172 642e plicationWizard.\n-00000ca0: 706c 202d 2063 7265 6174 6573 2063 6f6e pl - creates con\n-00000cb0: 6669 6775 7261 7469 6f6e 2066 696c 6573 figuration files\n-00000cc0: 2066 6f72 2072 6570 6c69 6361 7469 6f6e for replication\n-00000cd0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI\n-00000ce0: 530a 0a20 2020 2073 746f 7265 4261 636b S.. storeBack\n-00000cf0: 7570 5265 706c 6963 6174 696f 6e57 697a upReplicationWiz\n-00000d00: 6172 642e 706c 205b 2d6d 206d 6173 7465 ard.pl [-m maste\n-00000d10: 7242 6163 6b75 7044 6972 5d0a 2020 2020 rBackupDir]. \n-00000d20: 2020 2020 2020 5b2d 6320 6261 636b 7570 [-c backup\n-00000d30: 436f 7079 4469 725d 205b 2d64 2064 656c CopyDir] [-d del\n-00000d40: 7461 4361 6368 6544 6972 5d20 5b2d 5320 taCacheDir] [-S \n-00000d50: 7365 7269 6573 5d20 5b2d 5420 746d 7064 series] [-T tmpd\n-00000d60: 6972 5d0a 0a3d 6865 6164 3120 4445 5343 ir]..=head1 DESC\n-00000d70: 5249 5054 494f 4e0a 0a49 6620 796f 7520 RIPTION..If you \n-00000d80: 646f 206e 6f74 2073 7065 6369 6679 206f do not specify o\n-00000d90: 6e65 206f 6620 7468 6520 6469 7265 6374 ne of the direct\n-00000da0: 6f72 6965 732c 2074 6865 7920 7769 6c6c ories, they will\n-00000db0: 2062 6520 6173 6b65 6420 696e 7465 7261 be asked intera\n-00000dc0: 6374 6976 652e 0a54 6869 7320 2277 697a ctive..This \"wiz\n-00000dd0: 6172 6422 2063 616e 2062 6520 7573 6564 ard\" can be used\n-00000de0: 2066 6f72 2073 696d 706c 6520 636f 6e66 for simple conf\n-00000df0: 6967 7572 6174 696f 6e73 206f 6e6c 792e igurations only.\n-00000e00: 2049 7420 616c 6c6f 7773 2074 6f20 6372 It allows to cr\n-00000e10: 6561 7465 0a63 6f6e 6669 6775 7261 7469 eate.configurati\n-00000e20: 6f6e 2066 696c 6573 2066 6f72 202a 6f6e on files for *on\n-00000e30: 652a 2072 6570 6c69 6361 7469 6f6e 206f e* replication o\n-00000e40: 6620 6d75 6c74 6970 6c65 2073 6572 6965 f multiple serie\n-00000e50: 7320 746f 2065 672e 202a 6f6e 652a 0a65 s to eg. *one*.e\n-00000e60: 7874 6572 6e61 6c20 6469 736b 2e0a 0a49 xternal disk...I\n-00000e70: 6620 7468 6520 6469 7265 6374 6f72 6965 f the directorie\n-00000e80: 7320 7370 6563 6966 6965 6420 646f 206e s specified do n\n-00000e90: 6f74 2065 7869 7374 2c20 6974 2077 696c ot exist, it wil\n-00000ea0: 6c20 6173 6b20 7768 6574 6865 7220 796f l ask whether yo\n-00000eb0: 7520 7761 6e74 2074 6f0a 6372 6561 7465 u want to.create\n-00000ec0: 2074 6865 6d0a 0a3d 6865 6164 3120 4f50 them..=head1 OP\n-00000ed0: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8..\n-00000ee0: 3d69 7465 6d20 423c 2d2d 6d61 7374 6572 =item B<--master\n-00000ef0: 4261 636b 7570 4469 723e 2c20 423c 2d6d BackupDir>, B<-m\n-00000f00: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level\n-00000f10: 2064 6972 6563 746f 7279 206f 6620 7468 directory of th\n-00000f20: 6520 6d61 7374 6572 2062 6163 6b75 700a e master backup.\n-00000f30: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu\n-00000f40: 7043 6f70 7944 6972 3e2c 2042 3c2d 633e pCopyDir>, B<-c>\n-00000f50: 0a0a 2020 2020 746f 7020 6c65 7665 6c20 .. top level \n-00000f60: 6469 7265 6374 6f72 7920 6f66 2074 6865 directory of the\n-00000f70: 2062 6163 6b75 7020 636f 7079 2028 6567 backup copy (eg\n-00000f80: 2e20 6578 7465 726e 616c 2064 6973 6b29 . external disk)\n-00000f90: 0a0a 3d69 7465 6d20 423c 2d2d 6465 6c74 ..=item B<--delt\n-00000fa0: 6143 6163 6865 4469 723e 2c20 423c 2d64 aCacheDir>, B<-d\n-00000fb0: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level\n-00000fc0: 2064 6972 6563 746f 7279 206f 6620 7468 directory of th\n-00000fd0: 6520 6465 6c74 6120 6361 6368 650a 0a3d e delta cache..=\n-00000fe0: 6974 656d 2042 3c2d 2d73 6572 6965 733e item B<--series>\n-00000ff0: 2c20 423c 2d53 3e0a 0a20 2020 2073 6572 , B<-S>.. ser\n-00001000: 6965 7320 746f 2062 6520 7265 706c 6963 ies to be replic\n-00001010: 6174 6564 0a20 2020 2075 7365 2074 6869 ated. use thi\n-00001020: 7320 7061 7261 6d65 7465 7220 6d75 6c74 s parameter mult\n-00001030: 6970 6c65 2074 696d 6573 2066 6f72 206d iple times for m\n-00001040: 756c 7469 706c 6520 7365 7269 6573 0a0a ultiple series..\n-00001050: 3d69 7465 6d20 423c 2d2d 746d 7064 6972 =item B<--tmpdir\n-00001060: 3e2c 2042 3c2d 543e 0a0a 2020 2020 6469 >, B<-T>.. di\n-00001070: 7265 6374 6f72 7920 666f 7220 7465 6d70 rectory for temp\n-00001080: 6f72 6172 7920 6669 6c65 732c 2064 6566 orary files, def\n-00001090: 6175 6c74 2069 7320 3c2f 746d 703e 0a0a ault is ..\n-000010a0: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO\n-000010b0: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig\n-000010c0: 6874 2028 6329 2032 3031 322d 3230 3232 ht (c) 2012-2022\n-000010d0: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef \n-000010e0: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM\n-000010f0: 4529 2e0a 5075 626c 6973 6865 6420 756e E)..Published un\n-00001100: 6465 7220 7468 6520 474e 5520 4765 6e65 der the GNU Gene\n-00001110: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen\n-00001120: 7365 2076 3320 6f72 2061 6e79 206c 6174 se v3 or any lat\n-00001130: 6572 2076 6572 7369 6f6e 0a0a 3d63 7574 er version..=cut\n-00001140: 0a0a 6d79 2024 6269 6e50 6174 6820 3d20 ..my $binPath = \n-00001150: 263a 3a61 6273 6f6c 7574 6550 6174 6828 &::absolutePath(\n-00001160: 2224 7265 712f 2e2e 2f62 696e 2229 3b0a \"$req/../bin\");.\n-00001170: 0a6d 7920 2448 656c 7020 3d20 263a 3a67 .my $Help = &::g\n-00001180: 6574 506f 6432 5465 7874 2824 3029 3b0a etPod2Text($0);.\n-00001190: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\\\n-000011a0: 4041 5247 562c 2027 2d56 272c 2027 2d2d @ARGV, '-V', '--\n-000011b0: 7665 7273 696f 6e27 293b 0a0a 6d79 2024 version');..my $\n-000011c0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C\n-000011d0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new('\n-000011e0: 2d6c 6973 7427 203d 3e0a 0909 2020 2020 -list' =>... \n-000011f0: 5b4f 7074 696f 6e2d 3e6e 6577 2827 2d6e [Option->new('-n\n-00001200: 616d 6527 203d 3e20 276d 6173 7465 7242 ame' => 'masterB\n-00001210: 6163 6b75 7044 6972 272c 0a09 0909 0920 ackupDir',..... \n-00001220: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001230: 272d 6d27 2c0a 0909 0909 2027 2d63 6c5f '-m',..... '-cl_\n-00001240: 616c 6961 7327 203d 3e20 272d 2d6d 6173 alias' => '--mas\n-00001250: 7465 7242 6163 6b75 7044 6972 272c 0a09 terBackupDir',..\n-00001260: 0909 0920 272d 7061 7261 6d27 203d 3e20 ... '-param' => \n-00001270: 2779 6573 2729 2c0a 0909 2020 2020 204f 'yes'),... O\n-00001280: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001290: 6527 203d 3e20 2762 6163 6b75 7043 6f70 e' => 'backupCop\n-000012a0: 7944 6972 272c 0a09 0909 0920 272d 636c yDir',..... '-cl\n-000012b0: 5f6f 7074 696f 6e27 203d 3e20 272d 6327 _option' => '-c'\n-000012c0: 2c0a 0909 0909 2027 2d63 6c5f 616c 6961 ,..... '-cl_alia\n-000012d0: 7327 203d 3e20 272d 2d62 6163 6b75 7043 s' => '--backupC\n-000012e0: 6f70 7944 6972 272c 0a09 0909 0920 272d opyDir',..... '-\n-000012f0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n-00001300: 2c0a 0909 2020 2020 204f 7074 696f 6e2d ,... Option-\n-00001310: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00001320: 2764 656c 7461 4361 6368 6544 6972 272c 'deltaCacheDir',\n-00001330: 0a09 0909 0920 272d 636c 5f6f 7074 696f ..... '-cl_optio\n-00001340: 6e27 203d 3e20 272d 6427 2c0a 0909 0909 n' => '-d',.....\n-00001350: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => \n-00001360: 272d 2d64 656c 7461 4361 6368 6544 6972 '--deltaCacheDir\n-00001370: 272c 0a09 0909 0920 272d 7061 7261 6d27 ',..... '-param'\n-00001380: 203d 3e20 2779 6573 2729 2c0a 0909 2020 => 'yes'),... \n-00001390: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new('\n-000013a0: 2d6e 616d 6527 203d 3e20 2773 6572 6965 -name' => 'serie\n-000013b0: 7327 2c0a 0909 0909 2027 2d63 6c5f 6f70 s',..... '-cl_op\n-000013c0: 7469 6f6e 2720 3d3e 2027 2d53 272c 0a09 tion' => '-S',..\n-000013d0: 0909 0920 272d 636c 5f61 6c69 6173 2720 ... '-cl_alias' \n-000013e0: 3d3e 2027 2d2d 7365 7269 6573 272c 0a09 => '--series',..\n-000013f0: 0909 0920 272d 7061 7261 6d27 203d 3e20 ... '-param' => \n-00001400: 2779 6573 272c 0a09 0909 0920 272d 6d75 'yes',..... '-mu\n-00001410: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes'\n-00001420: 292c 0a09 0920 2020 2020 4f70 7469 6f6e ),... Option\n-00001430: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001440: 2027 746d 7064 6972 272c 0a09 0909 0920 'tmpdir',..... \n-00001450: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001460: 272d 5427 2c0a 0909 0909 2027 2d63 6c5f '-T',..... '-cl_\n-00001470: 616c 6961 7327 203d 3e20 272d 2d74 6d70 alias' => '--tmp\n-00001480: 6469 7227 2c0a 0909 0909 2027 2d64 6566 dir',..... '-def\n-00001490: 6175 6c74 2720 3d3e 2024 746d 7064 6972 ault' => $tmpdir\n-000014a0: 290a 0909 2020 2020 5d0a 2020 2020 293b )... ]. );\n-000014b0: 0a0a 2443 6865 636b 5061 722d 3e63 6865 ..$CheckPar->che\n-000014c0: 636b 2827 2d61 7267 7627 203d 3e20 5c40 ck('-argv' => \\@\n-000014d0: 4152 4756 2c0a 2020 2020 2020 2020 2020 ARGV,. \n-000014e0: 2020 2020 2020 2027 2d68 656c 7027 203d '-help' =\n-000014f0: 3e20 2448 656c 700a 2020 2020 2020 2020 > $Help. \n-00001500: 2020 2020 2020 2020 2029 3b0a 0a6d 7920 );..my \n-00001510: 2470 724c 6f67 3b0a 6d79 2028 2470 724c $prLog;.my ($prL\n-00001520: 6f67 4b69 6e64 2920 3d20 5b27 413a 4245 ogKind) = ['A:BE\n-00001530: 4749 4e27 2c0a 0909 2020 2027 5a3a 454e GIN',... 'Z:EN\n-00001540: 4427 2c0a 0909 2020 2027 563a 5645 5253 D',... 'V:VERS\n-00001550: 494f 4e27 2c0a 0909 2020 2027 493a 494e ION',... 'I:IN\n-00001560: 464f 272c 0a09 0920 2020 2744 3a44 4542 FO',... 'D:DEB\n-00001570: 5547 272c 0a09 0920 2020 2757 3a57 4152 UG',... 'W:WAR\n-00001580: 4e49 4e47 272c 0a09 0920 2020 2745 3a45 NING',... 'E:E\n-00001590: 5252 4f52 275d 3b0a 2470 724c 6f67 203d RROR'];.$prLog =\n-000015a0: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new('\n-000015b0: 2d6b 696e 6427 203d 3e20 2470 724c 6f67 -kind' => $prLog\n-000015c0: 4b69 6e64 293b 0a0a 0a23 2041 7573 7765 Kind);...# Auswe\n-000015d0: 7274 756e 6720 6465 7220 5061 7261 6d65 rtung der Parame\n-000015e0: 7465 720a 6d79 2024 6d61 7374 6572 4261 ter.my $masterBa\n-000015f0: 636b 7570 4469 7220 3d20 2443 6865 636b ckupDir = $Check\n-00001600: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00001610: 6172 2827 6d61 7374 6572 4261 636b 7570 ar('masterBackup\n-00001620: 4469 7227 293b 0a6d 7920 246d 6173 7465 Dir');.my $maste\n-00001630: 7242 6163 6b75 7044 6972 5072 6573 6574 rBackupDirPreset\n-00001640: 203d 2031 2069 6620 246d 6173 7465 7242 = 1 if $masterB\n-00001650: 6163 6b75 7044 6972 3b0a 6d79 2024 6261 ackupDir;.my $ba\n-00001660: 636b 7570 436f 7079 4469 7220 3d20 2443 ckupCopyDir = $C\n-00001670: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00001680: 6974 6850 6172 2827 6261 636b 7570 436f ithPar('backupCo\n-00001690: 7079 4469 7227 293b 0a6d 7920 2464 656c pyDir');.my $del\n-000016a0: 7461 4361 6368 6544 6972 203d 2024 4368 taCacheDir = $Ch\n-000016b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000016c0: 7468 5061 7228 2764 656c 7461 4361 6368 thPar('deltaCach\n-000016d0: 6544 6972 2729 3b0a 6d79 2024 7365 7269 eDir');.my $seri\n-000016e0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-000016f0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s\n-00001700: 6572 6965 7327 293b 0a28 4024 7365 7269 eries');.(@$seri\n-00001710: 6573 2920 3d20 736f 7274 2028 4024 7365 es) = sort (@$se\n-00001720: 7269 6573 2920 6966 2024 7365 7269 6573 ries) if $series\n-00001730: 3b0a 2474 6d70 6469 7220 3d20 2443 6865 ;.$tmpdir = $Che\n-00001740: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00001750: 6850 6172 2827 746d 7064 6972 2729 3b0a hPar('tmpdir');.\n-00001760: 0a23 0a23 2063 6865 636b 2069 6620 7061 .#.# check if pa\n-00001770: 7261 6d65 7465 7273 2061 7265 2073 6574 rameters are set\n-00001780: 0a23 0a24 6d61 7374 6572 4261 636b 7570 .#.$masterBackup\n-00001790: 4469 7220 3d20 263a 3a63 6865 636b 4469 Dir = &::checkDi\n-000017a0: 7228 246d 6173 7465 7242 6163 6b75 7044 r($masterBackupD\n-000017b0: 6972 2c20 276d 6173 7465 7220 6261 636b ir, 'master back\n-000017c0: 7570 2064 6972 6563 746f 7279 272c 0a09 up directory',..\n-000017d0: 0909 2020 2020 2020 2024 636f 6d6d 656e .. $commen\n-000017e0: 744d 6173 7465 7242 6163 6b75 702c 2024 tMasterBackup, $\n-000017f0: 7072 4c6f 6729 3b0a 2462 6163 6b75 7043 prLog);.$backupC\n-00001800: 6f70 7944 6972 203d 2026 3a3a 6368 6563 opyDir = &::chec\n-00001810: 6b44 6972 2824 6261 636b 7570 436f 7079 kDir($backupCopy\n-00001820: 4469 722c 2027 6261 636b 7570 2063 6f70 Dir, 'backup cop\n-00001830: 7920 6469 7265 6374 6f72 7927 2c0a 0909 y directory',...\n-00001840: 0920 2020 2020 2463 6f6d 6d65 6e74 4261 . $commentBa\n-00001850: 636b 7570 436f 7079 2c20 2470 724c 6f67 ckupCopy, $prLog\n-00001860: 293b 0a24 6465 6c74 6143 6163 6865 4469 );.$deltaCacheDi\n-00001870: 7220 3d20 263a 3a63 6865 636b 4469 7228 r = &::checkDir(\n-00001880: 2464 656c 7461 4361 6368 6544 6972 2c20 $deltaCacheDir, \n-00001890: 2764 656c 7461 2063 6163 6865 2064 6972 'delta cache dir\n-000018a0: 6563 746f 7279 272c 0a09 0909 2020 2020 ectory',.... \n-000018b0: 2024 636f 6d6d 656e 7443 6163 6865 4469 $commentCacheDi\n-000018c0: 722c 2024 7072 4c6f 6729 3b0a 0a24 6d61 r, $prLog);..$ma\n-000018d0: 7374 6572 4261 636b 7570 4469 7220 3d20 sterBackupDir = \n-000018e0: 263a 3a61 6273 6f6c 7574 6550 6174 6828 &::absolutePath(\n-000018f0: 246d 6173 7465 7242 6163 6b75 7044 6972 $masterBackupDir\n-00001900: 293b 0a24 6261 636b 7570 436f 7079 4469 );.$backupCopyDi\n-00001910: 7220 3d20 263a 3a61 6273 6f6c 7574 6550 r = &::absoluteP\n-00001920: 6174 6828 2462 6163 6b75 7043 6f70 7944 ath($backupCopyD\n-00001930: 6972 293b 0a24 6465 6c74 6143 6163 6865 ir);.$deltaCache\n-00001940: 4469 7220 3d20 263a 3a61 6273 6f6c 7574 Dir = &::absolut\n-00001950: 6550 6174 6828 2464 656c 7461 4361 6368 ePath($deltaCach\n-00001960: 6544 6972 293b 0a0a 6d79 2024 7772 6974 eDir);..my $writ\n-00001970: 7465 6e43 6f6e 6646 696c 6573 203d 2030 tenConfFiles = 0\n-00001980: 3b0a 0a28 406d 6169 6e3a 3a63 6c65 616e ;..(@main::clean\n-00001990: 7570 2920 3d20 2824 7072 4c6f 672c 2075 up) = ($prLog, u\n-000019a0: 6e64 6566 293b 0a24 5349 477b 494e 547d ndef);.$SIG{INT}\n-000019b0: 203d 205c 2663 6c65 616e 7570 3b0a 2453 = \\&cleanup;.$S\n-000019c0: 4947 7b54 4552 4d7d 203d 205c 2663 6c65 IG{TERM} = \\&cle\n-000019d0: 616e 7570 3b0a 0a23 0a23 2063 6865 636b anup;..#.# check\n-000019e0: 2069 6620 6261 636b 7570 2064 6972 6563 if backup direc\n-000019f0: 746f 7269 6573 2061 7265 2064 6966 6665 tories are diffe\n-00001a00: 7265 6e74 0a23 0a24 7072 4c6f 672d 3e70 rent.#.$prLog->p\n-00001a10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00001a20: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st\n-00001a30: 7227 203d 3e0a 0920 2020 2020 205b 2273 r' =>.. [\"s\n-00001a40: 616d 6520 7061 7468 2066 6f72 206d 6173 ame path for mas\n-00001a50: 7465 7220 6261 636b 7570 2064 6972 2c20 ter backup dir, \n-00001a60: 6261 636b 7570 2063 6f70 7920 6469 7220 backup copy dir \n-00001a70: 616e 6420 2220 2e0a 0920 2020 2020 2020 and \" ... \n-00001a80: 2264 656c 7461 2063 6163 6865 2064 6972 \"delta cache dir\n-00001a90: 2077 6572 6520 7370 6563 6966 6965 642e were specified.\n-00001aa0: 222c 0a09 2020 2020 2020 2022 506c 6561 \",.. \"Plea\n-00001ab0: 7365 2065 6e74 6572 2075 6e69 7175 6520 se enter unique \n-00001ac0: 7061 7468 7320 666f 7220 6561 6368 206f paths for each o\n-00001ad0: 6620 7468 656d 225d 2c0a 0920 2020 2020 f them\"],.. \n-00001ae0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). \n-00001af0: 2020 2069 6620 2824 6d61 7374 6572 4261 if ($masterBa\n-00001b00: 636b 7570 4469 7220 6571 2024 6261 636b ckupDir eq $back\n-00001b10: 7570 436f 7079 4469 7220 616e 640a 0924 upCopyDir and..$\n-00001b20: 6d61 7374 6572 4261 636b 7570 4469 7220 masterBackupDir \n-00001b30: 6571 2024 6465 6c74 6143 6163 6865 4469 eq $deltaCacheDi\n-00001b40: 7229 3b0a 2470 724c 6f67 2d3e 7072 696e r);.$prLog->prin\n-00001b50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00001b60: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-00001b70: 3d3e 0a09 2020 2020 2020 5b22 7361 6d65 =>.. [\"same\n-00001b80: 2070 6174 6820 666f 7220 6d61 7374 6572 path for master\n-00001b90: 2062 6163 6b75 7020 6469 7220 616e 6420 backup dir and \n-00001ba0: 6261 636b 7570 2063 6f70 7920 6469 7220 backup copy dir \n-00001bb0: 2220 2e0a 0920 2020 2020 2020 2277 6572 \" ... \"wer\n-00001bc0: 6520 7370 6563 6966 6965 642e 222c 0a09 e specified.\",..\n-00001bd0: 2020 2020 2020 2022 506c 6561 7365 2065 \"Please e\n-00001be0: 6e74 6572 2075 6e69 7175 6520 7061 7468 nter unique path\n-00001bf0: 7320 666f 7220 6561 6368 206f 6620 7468 s for each of th\n-00001c00: 656d 225d 2c0a 0920 2020 2020 2027 2d65 em\"],.. '-e\n-00001c10: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i\n-00001c20: 6620 2824 6d61 7374 6572 4261 636b 7570 f ($masterBackup\n-00001c30: 4469 7220 6571 2024 6261 636b 7570 436f Dir eq $backupCo\n-00001c40: 7079 4469 7229 3b0a 2470 724c 6f67 2d3e pyDir);.$prLog->\n-00001c50: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00001c60: 2027 4527 2c0a 0920 2020 2020 2027 2d73 'E',.. '-s\n-00001c70: 7472 2720 3d3e 0a09 2020 2020 2020 5b22 tr' =>.. [\"\n-00001c80: 7361 6d65 2070 6174 6820 666f 7220 6d61 same path for ma\n-00001c90: 7374 6572 2062 6163 6b75 7020 6469 7220 ster backup dir \n-00001ca0: 616e 6420 6465 6c74 6120 6361 6368 6520 and delta cache \n-00001cb0: 6469 7220 2220 2e0a 0920 2020 2020 2020 dir \" ... \n-00001cc0: 2277 6572 6520 7370 6563 6966 6965 642e \"were specified.\n-00001cd0: 222c 0a09 2020 2020 2020 2022 506c 6561 \",.. \"Plea\n-00001ce0: 7365 2065 6e74 6572 2075 6e69 7175 6520 se enter unique \n-00001cf0: 7061 7468 7320 666f 7220 6561 6368 206f paths for each o\n-00001d00: 6620 7468 656d 225d 2c0a 0920 2020 2020 f them\"],.. \n-00001d10: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). \n-00001d20: 2020 2069 6620 2824 6d61 7374 6572 4261 if ($masterBa\n-00001d30: 636b 7570 4469 7220 6571 2024 6465 6c74 ckupDir eq $delt\n-00001d40: 6143 6163 6865 4469 7229 3b0a 2470 724c aCacheDir);.$prL\n-00001d50: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00001d60: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. \n-00001d70: 2027 2d73 7472 2720 3d3e 0a09 2020 2020 '-str' =>.. \n-00001d80: 2020 5b22 7361 6d65 2070 6174 6820 666f [\"same path fo\n-00001d90: 7220 6261 636b 7570 2063 6f70 7920 6469 r backup copy di\n-00001da0: 7220 616e 6420 6465 6c74 6120 6361 6368 r and delta cach\n-00001db0: 6520 6469 7220 2220 2e0a 0920 2020 2020 e dir \" ... \n-00001dc0: 2020 2277 6572 6520 7370 6563 6966 6965 \"were specifie\n-00001dd0: 642e 222c 0a09 2020 2020 2020 2022 506c d.\",.. \"Pl\n-00001de0: 6561 7365 2065 6e74 6572 2075 6e69 7175 ease enter uniqu\n-00001df0: 6520 7061 7468 7320 666f 7220 6561 6368 e paths for each\n-00001e00: 206f 6620 7468 656d 225d 2c0a 0920 2020 of them\"],.. \n-00001e10: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n-00001e20: 0a20 2020 2069 6620 2824 6261 636b 7570 . if ($backup\n-00001e30: 436f 7079 4469 7220 6571 2024 6465 6c74 CopyDir eq $delt\n-00001e40: 6143 6163 6865 4469 7229 3b0a 0a23 0a23 aCacheDir);..#.#\n-00001e50: 2063 6865 636b 2069 6620 7468 6572 6527 check if there'\n-00001e60: 7320 6120 6261 636b 7570 2061 7420 246d s a backup at $m\n-00001e70: 6173 7465 7242 6163 6b75 7044 6972 0a23 asterBackupDir.#\n-00001e80: 0a6d 7920 2840 7365 7269 6573 466f 756e .my (@seriesFoun\n-00001e90: 6429 203d 2028 293b 0a7b 0a20 2020 2023 d) = ();.{. #\n-00001ea0: 2074 7279 2074 6f20 7265 6164 2073 6572 try to read ser\n-00001eb0: 6965 7320 6672 6f6d 206d 6173 7465 7220 ies from master \n-00001ec0: 6261 636b 7570 0a20 2020 206d 7920 2473 backup. my $s\n-00001ed0: 3b0a 2020 2020 6c6f 6361 6c20 2a44 4952 ;. local *DIR\n-00001ee0: 3b0a 2020 2020 6f70 656e 6469 7228 4449 ;. opendir(DI\n-00001ef0: 522c 2024 6d61 7374 6572 4261 636b 7570 R, $masterBackup\n-00001f00: 4469 7229 206f 720a 0924 7072 4c6f 672d Dir) or..$prLog-\n-00001f10: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00001f20: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-00001f30: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-00001f40: 205b 2263 616e 6e6f 7420 6f70 656e 6469 [\"cannot opendi\n-00001f50: 7220 3c24 6d61 7374 6572 4261 636b 7570 r <$masterBackup\n-00001f60: 4469 723e 225d 2c0a 0909 2020 2020 2020 Dir>\"],... \n-00001f70: 272d 6578 6974 2720 3d3e 2031 293b 0a20 '-exit' => 1);. \n-00001f80: 2020 2077 6869 6c65 2028 2473 203d 2072 while ($s = r\n-00001f90: 6561 6464 6972 2044 4952 290a 2020 2020 eaddir DIR). \n-00001fa0: 7b0a 096d 7920 2465 6e74 7279 203d 2022 {..my $entry = \"\n-00001fb0: 246d 6173 7465 7242 6163 6b75 7044 6972 $masterBackupDir\n-00001fc0: 2f24 7322 3b0a 096e 6578 7420 6966 2028 /$s\";..next if (\n-00001fd0: 2473 2065 7120 272e 2720 6f72 2024 7320 $s eq '.' or $s \n-00001fe0: 6571 2027 2e2e 2729 3b0a 096e 6578 7420 eq '..');..next \n-00001ff0: 6966 202d 6c20 2465 6e74 7279 2061 6e64 if -l $entry and\n-00002000: 206e 6f74 202d 6420 2465 6e74 7279 3b20 not -d $entry; \n-00002010: 2023 206f 6e6c 7920 6469 7265 6374 6f72 # only director\n-00002020: 6965 730a 096e 6578 7420 756e 6c65 7373 ies..next unless\n-00002030: 202d 6420 2465 6e74 7279 3b0a 0a09 7075 -d $entry;...pu\n-00002040: 7368 2040 7365 7269 6573 466f 756e 642c sh @seriesFound,\n-00002050: 2024 733b 0a20 2020 207d 0a20 2020 2063 $s;. }. c\n-00002060: 6c6f 7365 6469 7228 4449 5229 3b0a 2020 losedir(DIR);. \n-00002070: 2020 2840 7365 7269 6573 466f 756e 6429 (@seriesFound)\n-00002080: 203d 2073 6f72 7420 2840 7365 7269 6573 = sort (@series\n-00002090: 466f 756e 6429 3b0a 0a20 2020 2023 2063 Found);.. # c\n-000020a0: 6865 636b 2066 6f72 2065 7869 7374 696e heck for existin\n-000020b0: 6720 6261 636b 7570 730a 2020 2020 6d79 g backups. my\n-000020c0: 2028 4070 2920 3d20 2822 246d 6173 7465 (@p) = (\"$maste\n-000020d0: 7242 6163 6b75 7044 6972 2f2a 2f2a 2f2e rBackupDir/*/*/.\n-000020e0: 7374 6f72 6542 6163 6b75 704c 696e 6b73 storeBackupLinks\n-000020f0: 2229 3b0a 2020 2020 6d79 2028 4062 2920 \");. my (@b) \n-00002100: 3d20 3c40 703e 3b0a 0a20 2020 2075 6e6c = <@p>;.. unl\n-00002110: 6573 7320 2840 6229 0a20 2020 207b 0a09 ess (@b). {..\n-00002120: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00002130: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',...\n-00002140: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n-00002150: 0909 2020 2020 2020 5b22 6361 6e6e 6f74 .. [\"cannot\n-00002160: 2066 696e 6420 616e 7920 6578 6973 7469 find any existi\n-00002170: 6e67 2062 6163 6b75 7020 6174 2022 202e ng backup at \" .\n-00002180: 0a09 0920 2020 2020 2020 226d 6173 7465 ... \"maste\n-00002190: 7220 6261 636b 7570 2064 6972 6563 746f r backup directo\n-000021a0: 7279 203c 246d 6173 7465 7242 6163 6b75 ry <$masterBacku\n-000021b0: 7044 6972 3e22 5d29 3b0a 0975 6e6c 6573 pDir>\"]);..unles\n-000021c0: 7320 2824 6d61 7374 6572 4261 636b 7570 s ($masterBackup\n-000021d0: 4469 7250 7265 7365 7429 0a09 7b0a 0920 DirPreset)..{.. \n-000021e0: 2020 206d 7920 2461 6e73 7765 7220 3d20 my $answer = \n-000021f0: 756e 6465 663b 0a09 2020 2020 646f 0a09 undef;.. do..\n-00002200: 2020 2020 7b0a 0909 7072 696e 7420 225c {...print \"\\\n-00002210: 6e69 7320 7468 6973 206f 6b3f 5c6e 222c nis this ok?\\n\",\n-00002220: 0a09 0922 7965 7320 2f20 6e6f 202d 3e20 ...\"yes / no -> \n-00002230: 223b 0a09 0924 616e 7377 6572 203d 203c \";...$answer = <\n-00002240: 5354 4449 4e3e 3b0a 0909 6368 6f6d 7020 STDIN>;...chomp \n-00002250: 2461 6e73 7765 723b 0a09 2020 2020 7d20 $answer;.. } \n-00002260: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n\n-00002270: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans\n-00002280: 7765 7220 6e65 2027 6e6f 2729 3b0a 0920 wer ne 'no');.. \n-00002290: 2020 2065 7869 7420 3120 6966 2024 616e exit 1 if $an\n-000022a0: 7377 6572 2065 7120 276e 6f27 3b0a 097d swer eq 'no';..}\n-000022b0: 0a20 2020 207d 0a20 2020 2065 6c73 6520 . }. else \n-000022c0: 2020 2320 7468 6572 6520 6973 2073 6f6d # there is som\n-000022d0: 6574 6869 6e67 2069 6e20 7468 6520 6d61 ething in the ma\n-000022e0: 7374 6572 2062 6163 6b75 700a 2020 2020 ster backup. \n-000022f0: 7b0a 0975 6e6c 6573 7320 2824 7365 7269 {..unless ($seri\n-00002300: 6573 290a 097b 0a0a 0920 2020 206d 7920 es)..{... my \n-00002310: 2461 6e73 7765 7220 3d20 756e 6465 663b $answer = undef;\n-00002320: 0a09 2020 2020 646f 0a09 2020 2020 7b0a .. do.. {.\n-00002330: 0909 7072 696e 7420 225c 6e66 6f75 6e64 ..print \"\\nfound\n-00002340: 2073 6572 6965 7320 3c22 2c20 6a6f 696e series <\", join\n-00002350: 2827 3e20 3c27 2c20 4073 6572 6965 7346 ('> <', @seriesF\n-00002360: 6f75 6e64 292c 2022 3e5c 6e22 2c0a 0909 ound), \">\\n\",...\n-00002370: 2840 7365 7269 6573 466f 756e 6420 3d3d (@seriesFound ==\n-00002380: 2031 203f 2022 7265 706c 6963 6174 6520 1 ? \"replicate \n-00002390: 6974 3f5c 6e22 203a 2272 6570 6c69 6361 it?\\n\" :\"replica\n-000023a0: 7465 2074 6865 6d20 616c 6c3f 5c6e 2229 te them all?\\n\")\n-000023b0: 2c0a 0909 2279 6573 202f 206e 6f20 2d3e ,...\"yes / no ->\n-000023c0: 2022 3b0a 0909 2461 6e73 7765 7220 3d20 \";...$answer = \n-000023d0: 3c53 5444 494e 3e3b 0a09 0963 686f 6d70 ;...chomp\n-000023e0: 2024 616e 7377 6572 3b0a 0920 2020 207d $answer;.. }\n-000023f0: 2077 6869 6c65 2028 2461 6e73 7765 7220 while ($answer \n-00002400: 6e65 2027 7965 7327 2061 6e64 2024 616e ne 'yes' and $an\n-00002410: 7377 6572 206e 6520 276e 6f27 293b 0a0a swer ne 'no');..\n-00002420: 0920 2020 2069 6620 2824 616e 7377 6572 . if ($answer\n-00002430: 2065 7120 2779 6573 2729 0a09 2020 2020 eq 'yes').. \n-00002440: 7b0a 0909 2840 2473 6572 6965 7329 203d {...(@$series) =\n-00002450: 2040 7365 7269 6573 466f 756e 643b 0a09 @seriesFound;..\n-00002460: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else.\n-00002470: 0920 2020 207b 0a09 0970 7269 6e74 2022 . {...print \"\n-00002480: 5c6e 7479 7065 2073 6572 6965 7320 6e61 \\ntype series na\n-00002490: 6d65 7320 7365 7061 7261 7465 6420 6279 mes separated by\n-000024a0: 2062 6c61 6e6b 735c 6e22 2c0a 0909 2228 blanks\\n\",...\"(\n-000024b0: 7573 6520 7175 6f74 6573 2069 6620 7468 use quotes if th\n-000024c0: 6572 6520 6973 2061 2062 6c61 6e6b 2069 ere is a blank i\n-000024d0: 6e20 6120 6e61 6d65 295c 6e22 2c0a 0909 n a name)\\n\",...\n-000024e0: 222d 3e20 223b 0a09 096d 7920 2473 203d \"-> \";...my $s =\n-000024f0: 203c 5354 4449 4e3e 3b0a 0909 6368 6f6d ;...chom\n-00002500: 7020 2473 3b0a 0909 2473 6572 6965 7320 p $s;...$series \n-00002510: 3d20 2643 6f6e 6669 6746 696c 653a 3a73 = &ConfigFile::s\n-00002520: 706c 6974 5175 6f74 6564 4c69 6e65 2824 plitQuotedLine($\n-00002530: 732c 2027 272c 2031 293b 0a09 0928 4024 s, '', 1);...(@$\n-00002540: 7365 7269 6573 2920 3d20 736f 7274 2028 series) = sort (\n-00002550: 4024 7365 7269 6573 293b 0a09 2020 2020 @$series);.. \n-00002560: 7d0a 097d 0a20 2020 207d 0a7d 0a0a 2470 }..}. }.}..$p\n-00002570: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00002580: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. \n-00002590: 2020 2027 2d73 7472 2720 3d3e 205b 7363 '-str' => [sc\n-000025a0: 616c 6172 2040 2473 6572 6965 7320 2e20 alar @$series . \n-000025b0: 2220 7365 7269 6573 2063 686f 7365 6e3a \" series chosen:\n-000025c0: 222c 0a09 0909 2022 5c74 3c22 202e 206a \",.... \"\\t<\" . j\n-000025d0: 6f69 6e28 273e 203c 272c 2040 2473 6572 oin('> <', @$ser\n-000025e0: 6965 7329 202e 2022 3e22 5d29 0a20 2020 ies) . \">\"]). \n-000025f0: 2069 6620 2824 7365 7269 6573 293b 0a0a if ($series);..\n-00002600: 230a 2320 6368 6563 6b20 6966 2073 6572 #.# check if ser\n-00002610: 6965 7320 7370 6563 6966 6965 6420 6578 ies specified ex\n-00002620: 6973 740a 230a 7b0a 2020 2020 6d79 2028 ist.#.{. my (\n-00002630: 2573 6572 6965 7346 6f75 6e64 293b 0a20 %seriesFound);. \n-00002640: 2020 2066 6f72 6561 6368 206d 7920 2473 foreach my $s\n-00002650: 2028 4073 6572 6965 7346 6f75 6e64 290a (@seriesFound).\n-00002660: 2020 2020 7b0a 0924 7365 7269 6573 466f {..$seriesFo\n-00002670: 756e 647b 2473 7d20 3d20 313b 0a20 2020 und{$s} = 1;. \n-00002680: 207d 0a20 2020 206d 7920 2840 7346 6f75 }. my (@sFou\n-00002690: 6e64 2c20 4073 4e6f 7446 6f75 6e64 293b nd, @sNotFound);\n-000026a0: 0a20 2020 2066 6f72 6561 6368 206d 7920 . foreach my \n-000026b0: 2473 2028 4024 7365 7269 6573 290a 2020 $s (@$series). \n-000026c0: 2020 7b0a 0969 6620 2865 7869 7374 7320 {..if (exists \n-000026d0: 2473 6572 6965 7346 6f75 6e64 7b24 737d $seriesFound{$s}\n-000026e0: 290a 097b 0a09 2020 2020 7075 7368 2040 )..{.. push @\n-000026f0: 7346 6f75 6e64 2c20 2473 3b0a 097d 0a09 sFound, $s;..}..\n-00002700: 656c 7365 0a09 7b0a 0920 2020 2070 7573 else..{.. pus\n-00002710: 6820 4073 4e6f 7446 6f75 6e64 2c20 2473 h @sNotFound, $s\n-00002720: 3b0a 097d 0a20 2020 207d 0a20 2020 2069 ;..}. }. i\n-00002730: 6620 2840 2473 6572 6965 7320 3d3d 2030 f (@$series == 0\n-00002740: 290a 2020 2020 7b0a 0970 7269 6e74 2022 ). {..print \"\n-00002750: 5c6e 7479 7065 2073 6572 6965 7320 6e61 \\ntype series na\n-00002760: 6d65 7320 796f 7520 7761 6e74 2074 6f20 mes you want to \n-00002770: 7265 706c 6963 6174 6520 7365 7061 7261 replicate separa\n-00002780: 7465 6420 6279 2062 6c61 6e6b 735c 6e22 ted by blanks\\n\"\n-00002790: 2c0a 0922 2875 7365 2071 756f 7465 7320 ,..\"(use quotes \n-000027a0: 6966 2074 6865 7265 2069 7320 6120 626c if there is a bl\n-000027b0: 616e 6b20 696e 2061 206e 616d 6529 5c6e ank in a name)\\n\n-000027c0: 222c 0a09 222d 3e20 223b 0a09 6d79 2024 \",..\"-> \";..my $\n-000027d0: 7320 3d20 3c53 5444 494e 3e3b 0a09 6368 s = ;..ch\n-000027e0: 6f6d 7020 2473 3b0a 0924 7365 7269 6573 omp $s;..$series\n-000027f0: 203d 2026 436f 6e66 6967 4669 6c65 3a3a = &ConfigFile::\n-00002800: 7370 6c69 7451 756f 7465 644c 696e 6528 splitQuotedLine(\n-00002810: 2473 2c20 2727 2c20 3129 3b0a 0928 4024 $s, '', 1);..(@$\n-00002820: 7365 7269 6573 2920 3d20 736f 7274 2028 series) = sort (\n-00002830: 4024 7365 7269 6573 293b 0a20 2020 207d @$series);. }\n-00002840: 0a20 2020 2065 6c73 6966 2028 4073 4e6f . elsif (@sNo\n-00002850: 7446 6f75 6e64 290a 2020 2020 7b0a 096d tFound). {..m\n-00002860: 7920 2461 6e73 7765 7220 3d20 756e 6465 y $answer = unde\n-00002870: 663b 0a09 646f 0a09 7b0a 0920 2020 2070 f;..do..{.. p\n-00002880: 7269 6e74 0a09 2020 2020 225c 6e74 6865 rint.. \"\\nthe\n-00002890: 2066 6f6c 6c6f 7769 6e67 2073 656c 6563 following selec\n-000028a0: 7465 6420 7365 7269 6573 2077 6572 6520 ted series were \n-000028b0: 666f 756e 6420 6174 203c 246d 6173 7465 found at <$maste\n-000028c0: 7242 6163 6b75 7044 6972 3e3a 5c6e 222c rBackupDir>:\\n\",\n-000028d0: 0a09 2020 2020 225c 743c 222c 206a 6f69 .. \"\\t<\", joi\n-000028e0: 6e28 273e 203c 272c 2073 6f72 7420 4073 n('> <', sort @s\n-000028f0: 466f 756e 6429 2c20 223e 5c6e 222c 0a09 Found), \">\\n\",..\n-00002900: 2020 2020 2262 7574 2074 6865 2066 6f6c \"but the fol\n-00002910: 6c6f 7769 6e67 2073 656c 6563 7465 6420 lowing selected \n-00002920: 7365 7269 6573 2077 6572 6520 2a6e 6f74 series were *not\n-00002930: 2a20 666f 756e 643a 5c6e 222c 0a09 2020 * found:\\n\",.. \n-00002940: 2020 225c 743c 222c 206a 6f69 6e28 273e \"\\t<\", join('>\n-00002950: 203c 272c 2073 6f72 7420 4073 4e6f 7446 <', sort @sNotF\n-00002960: 6f75 6e64 292c 2022 3e5c 6e22 2c0a 0920 ound), \">\\n\",.. \n-00002970: 2020 2022 636f 6e74 696e 7565 2077 6974 \"continue wit\n-00002980: 6820 7468 6520 7365 6c65 6374 696f 6e2c h the selection,\n-00002990: 2073 746f 702c 2063 6861 6e67 653a 5c6e stop, change:\\n\n-000029a0: 222c 0a09 2020 2020 2263 6f6e 7469 6e75 \",.. \"continu\n-000029b0: 6520 2f20 7374 6f70 202f 2063 6861 6e67 e / stop / chang\n-000029c0: 6520 2d3e 2022 3b0a 0920 2020 2024 616e e -> \";.. $an\n-000029d0: 7377 6572 203d 203c 5354 4449 4e3e 3b0a swer = ;.\n-000029e0: 0920 2020 2063 686f 6d70 2024 616e 7377 . chomp $answ\n-000029f0: 6572 3b0a 097d 2077 6869 6c65 2028 2461 er;..} while ($a\n-00002a00: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin\n-00002a10: 7565 2720 616e 6420 2461 6e73 7765 7220 ue' and $answer \n-00002a20: 6e65 2027 7374 6f70 2720 616e 640a 0909 ne 'stop' and...\n-00002a30: 2024 616e 7377 6572 206e 6520 2763 6861 $answer ne 'cha\n-00002a40: 6e67 6527 293b 0a09 6966 2028 2461 6e73 nge');..if ($ans\n-00002a50: 7765 7220 6571 2027 7374 6f70 2729 0a09 wer eq 'stop')..\n-00002a60: 7b0a 0920 2020 2065 7869 7420 313b 0a09 {.. exit 1;..\n-00002a70: 7d0a 0965 6c73 6966 2028 2461 6e73 7765 }..elsif ($answe\n-00002a80: 7220 6571 2027 6368 616e 6765 2729 0a09 r eq 'change')..\n-00002a90: 7b0a 0920 2020 206d 7920 2461 6e73 7765 {.. my $answe\n-00002aa0: 7220 3d20 756e 6465 663b 0a09 2020 2020 r = undef;.. \n-00002ab0: 646f 0a09 2020 2020 7b0a 0909 7072 696e do.. {...prin\n-00002ac0: 7420 225c 6e66 6f75 6e64 2073 6572 6965 t \"\\nfound serie\n-00002ad0: 7320 3c22 2c20 6a6f 696e 2827 3e20 3c27 s <\", join('> <'\n-00002ae0: 2c20 4073 6572 6965 7346 6f75 6e64 292c , @seriesFound),\n-00002af0: 2022 3e5c 6e22 2c0a 0909 2272 6570 6c69 \">\\n\",...\"repli\n-00002b00: 6361 7465 2074 6865 6d20 616c 6c3f 5c6e cate them all?\\n\n-00002b10: 222c 0a09 0922 7965 7320 2f20 6e6f 202d \",...\"yes / no -\n-00002b20: 3e20 223b 0a09 0924 616e 7377 6572 203d > \";...$answer =\n-00002b30: 203c 5354 4449 4e3e 3b0a 0909 6368 6f6d ;...chom\n-00002b40: 7020 2461 6e73 7765 723b 0a09 2020 2020 p $answer;.. \n-00002b50: 7d20 7768 696c 6520 2824 616e 7377 6572 } while ($answer\n-00002b60: 206e 6520 2779 6573 2720 616e 6420 2461 ne 'yes' and $a\n-00002b70: 6e73 7765 7220 6e65 2027 6e6f 2729 3b0a nswer ne 'no');.\n-00002b80: 0a09 2020 2020 6966 2028 2461 6e73 7765 .. if ($answe\n-00002b90: 7220 6571 2027 7965 7327 290a 0920 2020 r eq 'yes').. \n-00002ba0: 207b 0a09 0928 4024 7365 7269 6573 2920 {...(@$series) \n-00002bb0: 3d20 4073 6572 6965 7346 6f75 6e64 3b0a = @seriesFound;.\n-00002bc0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n-00002bd0: 0a09 2020 2020 7b0a 0909 7072 696e 740a .. {...print.\n-00002be0: 0909 225c 6e74 7970 6520 7365 7269 6573 ..\"\\ntype series\n-00002bf0: 206e 616d 6573 2079 6f75 2077 616e 7420 names you want \n-00002c00: 746f 2072 6570 6c69 6361 7465 2073 6570 to replicate sep\n-00002c10: 6172 6174 6564 2062 7920 626c 616e 6b73 arated by blanks\n-00002c20: 5c6e 222c 0a09 0922 2875 7365 2071 756f \\n\",...\"(use quo\n-00002c30: 7465 7320 6966 2074 6865 7265 2069 7320 tes if there is \n-00002c40: 6120 626c 616e 6b20 696e 2061 206e 616d a blank in a nam\n-00002c50: 6529 5c6e 222c 0a09 0922 2d3e 2022 3b0a e)\\n\",...\"-> \";.\n-00002c60: 0909 6d79 2024 7320 3d20 3c53 5444 494e ..my $s = ;...chomp $s;..\n-00002c80: 0924 7365 7269 6573 203d 2026 436f 6e66 .$series = &Conf\n-00002c90: 6967 4669 6c65 3a3a 7370 6c69 7451 756f igFile::splitQuo\n-00002ca0: 7465 644c 696e 6528 2473 2c20 2727 2c20 tedLine($s, '', \n-00002cb0: 3129 3b0a 0909 2840 2473 6572 6965 7329 1);...(@$series)\n-00002cc0: 203d 2073 6f72 7420 2840 2473 6572 6965 = sort (@$serie\n-00002cd0: 7329 3b0a 0920 2020 207d 0a09 7d0a 2020 s);.. }..}. \n-00002ce0: 2020 7d0a 7d0a 0a23 0a23 2067 656e 6572 }.}..#.# gener\n-00002cf0: 6174 6520 636f 6e66 6967 7572 6174 696f ate configuratio\n-00002d00: 6e20 6669 6c65 730a 230a 6d79 2024 746d n files.#.my $tm\n-00002d10: 7044 6972 203d 2026 3a3a 756e 6971 4669 pDir = &::uniqFi\n-00002d20: 6c65 4e61 6d65 2822 2474 6d70 6469 722f leName(\"$tmpdir/\n-00002d30: 7374 6275 5257 2d22 293b 0a6d 6b64 6972 stbuRW-\");.mkdir\n-00002d40: 2024 746d 7044 6972 2c20 3037 3030 206f $tmpDir, 0700 o\n-00002d50: 720a 2020 2020 2470 724c 6f67 2d3e 7072 r. $prLog->pr\n-00002d60: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00002d70: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' =\n-00002d80: 3e20 5b22 6361 6e6e 6f74 2063 7265 6174 > [\"cannot creat\n-00002d90: 6520 7465 6d70 6f72 6172 7920 6469 7265 e temporary dire\n-00002da0: 6374 6f72 7920 3c24 746d 7044 6972 3e22 ctory <$tmpDir>\"\n-00002db0: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' =\n-00002dc0: 3e20 3129 3b0a 0a28 406d 6169 6e3a 3a63 > 1);..(@main::c\n-00002dd0: 6c65 616e 7570 2920 3d20 2824 7072 4c6f leanup) = ($prLo\n-00002de0: 672c 2024 746d 7044 6972 293b 0a0a 7b0a g, $tmpDir);..{.\n-00002df0: 2020 2020 6d79 2024 6620 3d20 666f 726b my $f = fork\n-00002e00: 5072 6f63 2d3e 6e65 7728 272d 6578 6563 Proc->new('-exec\n-00002e10: 2720 3d3e 2022 2462 696e 5061 7468 2f73 ' => \"$binPath/s\n-00002e20: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate\n-00002e30: 4261 636b 7570 2e70 6c22 2c0a 0909 0920 Backup.pl\",.... \n-00002e40: 2027 2d70 6172 616d 2720 3d3e 205b 272d '-param' => ['-\n-00002e50: 2d67 656e 4261 636b 7570 4261 7365 5472 -genBackupBaseTr\n-00002e60: 6565 436f 6e66 272c 2024 746d 7044 6972 eeConf', $tmpDir\n-00002e70: 5d2c 0a09 0909 2020 272d 6f75 7452 616e ],.... '-outRan\n-00002e80: 646f 6d27 203d 3e20 2224 746d 7044 6972 dom' => \"$tmpDir\n-00002e90: 2f73 7462 7555 7064 6174 652d 222c 0a09 /stbuUpdate-\",..\n-00002ea0: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => \n-00002eb0: 2470 724c 6f67 293b 0a20 2020 2024 662d $prLog);. $f-\n-00002ec0: 3e77 6169 7428 293b 0a20 2020 206d 7920 >wait();. my \n-00002ed0: 246f 7574 203d 2024 662d 3e67 6574 5354 $out = $f->getST\n-00002ee0: 444f 5554 2829 3b0a 2020 2020 2470 724c DOUT();. $prL\n-00002ef0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002f00: 2720 3d3e 2027 5727 2c0a 0909 2020 272d ' => 'W',... '-\n-00002f10: 7374 7227 203d 3e0a 0909 2020 5b22 5354 str' =>... [\"ST\n-00002f20: 444f 5554 206f 6620 3c24 6269 6e50 6174 DOUT of <$binPat\n-00002f30: 682f 7374 6f72 6542 6163 6b75 7055 7064 h/storeBackupUpd\n-00002f40: 6174 6542 6163 6b75 702e 706c 2022 202e ateBackup.pl \" .\n-00002f50: 0a09 0920 2020 222d 2d67 656e 4261 636b ... \"--genBack\n-00002f60: 7570 4261 7365 5472 6565 436f 6e66 3e3a upBaseTreeConf>:\n-00002f70: 222c 2040 246f 7574 5d29 0a09 6966 2028 \", @$out])..if (\n-00002f80: 4024 6f75 7420 3e20 3029 3b0a 2020 2020 @$out > 0);. \n-00002f90: 246f 7574 203d 2024 662d 3e67 6574 5354 $out = $f->getST\n-00002fa0: 4445 5252 2829 3b0a 2020 2020 2470 724c DERR();. $prL\n-00002fb0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002fc0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '-\n-00002fd0: 7374 7227 203d 3e0a 0909 2020 5b22 5354 str' =>... [\"ST\n-00002fe0: 4445 5252 206f 6620 3c24 6269 6e50 6174 DERR of <$binPat\n-00002ff0: 682f 7374 6f72 6542 6163 6b75 7055 7064 h/storeBackupUpd\n-00003000: 6174 6542 6163 6b75 702e 706c 2022 202e ateBackup.pl \" .\n-00003010: 0a09 0920 2020 222d 2d67 656e 4261 636b ... \"--genBack\n-00003020: 7570 4261 7365 5472 6565 436f 6e66 3e3a upBaseTreeConf>:\n-00003030: 222c 2040 246f 7574 5d2c 0a09 0920 2027 \", @$out],... '\n-00003040: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if\n-00003050: 2028 4024 6f75 7420 3e20 3029 3b0a 0a20 (@$out > 0);.. \n-00003060: 2020 2024 6620 3d20 666f 726b 5072 6f63 $f = forkProc\n-00003070: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' =>\n-00003080: 2022 2462 696e 5061 7468 2f73 746f 7265 \"$binPath/store\n-00003090: 4261 636b 7570 5570 6461 7465 4261 636b BackupUpdateBack\n-000030a0: 7570 2e70 6c22 2c0a 0909 2020 2020 2020 up.pl\",... \n-000030b0: 2027 2d70 6172 616d 2720 3d3e 205b 272d '-param' => ['-\n-000030c0: 2d67 656e 4465 6c74 6143 6163 6865 436f -genDeltaCacheCo\n-000030d0: 6e66 272c 2024 746d 7044 6972 5d2c 0a09 nf', $tmpDir],..\n-000030e0: 0920 2020 2020 2020 272d 6f75 7452 616e . '-outRan\n-000030f0: 646f 6d27 203d 3e20 2224 746d 7044 6972 dom' => \"$tmpDir\n-00003100: 2f73 7462 7555 7064 6174 652d 222c 0a09 /stbuUpdate-\",..\n-00003110: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog'\n-00003120: 203d 3e20 2470 724c 6f67 293b 0a20 2020 => $prLog);. \n-00003130: 2024 662d 3e77 6169 7428 293b 0a20 2020 $f->wait();. \n-00003140: 2024 6f75 7420 3d20 2466 2d3e 6765 7453 $out = $f->getS\n-00003150: 5444 4f55 5428 293b 0a20 2020 2024 7072 TDOUT();. $pr\n-00003160: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00003170: 6427 203d 3e20 2757 272c 0a09 0920 2027 d' => 'W',... '\n-00003180: 2d73 7472 2720 3d3e 0a09 0920 205b 2253 -str' =>... [\"S\n-00003190: 5444 4f55 5420 6f66 203c 2462 696e 5061 TDOUT of <$binPa\n-000031a0: 7468 2f73 746f 7265 4261 636b 7570 5570 th/storeBackupUp\n-000031b0: 6461 7465 4261 636b 7570 2e70 6c20 2220 dateBackup.pl \" \n-000031c0: 2e0a 0909 2020 2022 2d2d 6765 6e44 656c .... \"--genDel\n-000031d0: 7461 4361 6368 6543 6f6e 663e 3a22 2c20 taCacheConf>:\", \n-000031e0: 4024 6f75 745d 290a 0969 6620 2840 246f @$out])..if (@$o\n-000031f0: 7574 203e 2030 293b 0a20 2020 2024 6f75 ut > 0);. $ou\n-00003200: 7420 3d20 2466 2d3e 6765 7453 5444 4552 t = $f->getSTDER\n-00003210: 5228 293b 0a20 2020 2024 7072 4c6f 672d R();. $prLog-\n-00003220: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003230: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str\n-00003240: 2720 3d3e 0a09 0920 205b 2253 5444 4552 ' =>... [\"STDER\n-00003250: 5220 6f66 203c 2462 696e 5061 7468 2f73 R of <$binPath/s\n-00003260: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate\n-00003270: 4261 636b 7570 2e70 6c20 2220 2e0a 0909 Backup.pl \" ....\n-00003280: 2020 2022 2d2d 6765 6e44 656c 7461 4361 \"--genDeltaCa\n-00003290: 6368 6543 6f6e 663e 3a22 2c20 4024 6f75 cheConf>:\", @$ou\n-000032a0: 745d 2c0a 0909 2020 272d 6578 6974 2720 t],... '-exit' \n-000032b0: 3d3e 2031 290a 0969 6620 2840 246f 7574 => 1)..if (@$out\n-000032c0: 203e 2030 293b 0a7d 0a0a 230a 2320 636f > 0);.}..#.# co\n-000032d0: 7079 202f 2063 7265 6174 6520 636f 6e66 py / create conf\n-000032e0: 6967 7572 6174 696f 6e20 6669 6c65 7320 iguration files \n-000032f0: 6672 6f6d 2024 746d 7044 6972 2074 6f20 from $tmpDir to \n-00003300: 7468 6569 7220 6c6f 6361 7469 6f6e 0a23 their location.#\n-00003310: 0a23 2067 656e 6572 6174 6520 6d61 7374 .# generate mast\n-00003320: 6572 2062 6163 6b75 7020 636f 6e66 6967 er backup config\n-00003330: 7572 6174 696f 6e20 6669 6c65 0a7b 0a20 uration file.{. \n-00003340: 2020 206d 7920 2466 496e 203d 2022 2474 my $fIn = \"$t\n-00003350: 6d70 4469 722f 7374 6f72 6542 6163 6b75 mpDir/storeBacku\n-00003360: 7042 6173 6554 7265 652e 636f 6e66 223b pBaseTree.conf\";\n-00003370: 0a20 2020 206d 7920 2466 4f75 7420 3d20 . my $fOut = \n-00003380: 2224 6d61 7374 6572 4261 636b 7570 4469 \"$masterBackupDi\n-00003390: 722f 7374 6f72 6542 6163 6b75 7042 6173 r/storeBackupBas\n-000033a0: 6554 7265 652e 636f 6e66 223b 0a20 2020 eTree.conf\";. \n-000033b0: 206d 7920 2477 7269 7465 436f 6e66 6967 my $writeConfig\n-000033c0: 4669 6c65 203d 2031 3b0a 2020 2020 6966 File = 1;. if\n-000033d0: 2028 2d65 2024 664f 7574 290a 2020 2020 (-e $fOut). \n-000033e0: 7b0a 096d 7920 2461 6e73 7765 7220 3d20 {..my $answer = \n-000033f0: 756e 6465 663b 0a09 646f 0a09 7b0a 0920 undef;..do..{.. \n-00003400: 2020 2070 7269 6e74 2022 5c6e 436f 6e66 print \"\\nConf\n-00003410: 6967 7572 6174 696f 6e20 6669 6c65 2066 iguration file f\n-00003420: 6f72 206d 6173 7465 7220 6261 636b 7570 or master backup\n-00003430: 2064 6972 6563 746f 7279 5c6e 222c 0a09 directory\\n\",..\n-00003440: 2020 2020 223c 246d 6173 7465 7242 6163 \"<$masterBac\n-00003450: 6b75 7044 6972 3e20 616c 7265 6164 7920 kupDir> already \n-00003460: 6578 6973 7473 2e20 486f 7720 746f 2070 exists. How to p\n-00003470: 726f 6365 6564 3a5c 6e22 2c0a 0920 2020 roceed:\\n\",.. \n-00003480: 2022 6f76 6572 7772 6974 6520 2f20 636f \"overwrite / co\n-00003490: 6e74 696e 7565 202f 2073 746f 7020 2d3e ntinue / stop ->\n-000034a0: 2022 3b0a 0920 2020 2024 616e 7377 6572 \";.. $answer\n-000034b0: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. \n-000034c0: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;.\n-000034d0: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe\n-000034e0: 7220 6e65 2027 6f76 6572 7772 6974 6527 r ne 'overwrite'\n-000034f0: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne \n-00003500: 2773 746f 7027 2061 6e64 0a09 0920 2461 'stop' and... $a\n-00003510: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin\n-00003520: 7565 2729 3b0a 0969 6620 2824 616e 7377 ue');..if ($answ\n-00003530: 6572 2065 7120 2773 746f 7027 290a 097b er eq 'stop')..{\n-00003540: 0a09 2020 2020 6578 6974 2031 3b0a 097d .. exit 1;..}\n-00003550: 0a09 656c 7369 6620 2824 616e 7377 6572 ..elsif ($answer\n-00003560: 2065 7120 2763 6f6e 7469 6e75 6527 290a eq 'continue').\n-00003570: 097b 0a09 2020 2020 2477 7269 7465 436f .{.. $writeCo\n-00003580: 6e66 6967 4669 6c65 203d 2030 3b0a 097d nfigFile = 0;..}\n-00003590: 0a20 2020 207d 0a0a 2020 2020 6966 2028 . }.. if (\n-000035a0: 2477 7269 7465 436f 6e66 6967 4669 6c65 $writeConfigFile\n-000035b0: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;.\n-000035c0: 096c 6f63 616c 202a 494e 2c20 2a4f 5554 .local *IN, *OUT\n-000035d0: 3b0a 096f 7065 6e28 494e 2c20 273c 272c ;..open(IN, '<',\n-000035e0: 2024 6649 6e29 206f 720a 0920 2020 2024 $fIn) or.. $\n-000035f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003600: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00003610: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00003620: 2263 616e 6e6f 7420 6f70 656e 2074 656d \"cannot open tem\n-00003630: 706f 7261 7279 2066 696c 6520 3c24 6649 porary file <$fI\n-00003640: 6e3e 225d 2c0a 0909 0920 2027 2d65 7869 n>\"],.... '-exi\n-00003650: 7427 203d 3e20 3129 3b0a 096f 7065 6e28 t' => 1);..open(\n-00003660: 4f55 542c 2027 3e27 2c20 2466 4f75 7429 OUT, '>', $fOut)\n-00003670: 206f 720a 0920 2020 2024 7072 4c6f 672d or.. $prLog-\n-00003680: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003690: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n-000036a0: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => [\"cannot o\n-000036b0: 7065 6e20 6669 6c65 203c 2466 4f75 743e pen file <$fOut>\n-000036c0: 225d 2c0a 0909 0920 2027 2d65 7869 7427 \"],.... '-exit'\n-000036d0: 203d 3e20 3129 3b0a 0977 6869 6c65 2028 => 1);..while (\n-000036e0: 246c 203d 203c 494e 3e29 0a09 7b0a 0920 $l = )..{.. \n-000036f0: 2020 2063 686f 6d70 2024 6c3b 0a09 2020 chomp $l;.. \n-00003700: 2020 6966 2028 246c 203d 7e20 2f5c 413b if ($l =~ /\\A;\n-00003710: 2862 6163 6b75 7054 7265 654e 616d 6529 (backupTreeName)\n-00003720: 3d5c 732a 5c5a 2f29 0a09 2020 2020 7b0a =\\s*\\Z/).. {.\n-00003730: 0909 7072 696e 7420 4f55 5420 2224 313d ..print OUT \"$1=\n-00003740: 274d 6173 7465 7220 4261 636b 7570 275c 'Master Backup'\\\n-00003750: 6e22 3b0a 0920 2020 207d 0a09 2020 2020 n\";.. }.. \n-00003760: 656c 7369 6620 2824 6c20 3d7e 202f 5c41 elsif ($l =~ /\\A\n-00003770: 3b28 6261 636b 7570 5479 7065 293d 5c73 ;(backupType)=\\s\n-00003780: 2a5c 5a2f 290a 0920 2020 207b 0a09 0970 *\\Z/).. {...p\n-00003790: 7269 6e74 204f 5554 2022 2431 3d6d 6173 rint OUT \"$1=mas\n-000037a0: 7465 725c 6e22 3b0a 0920 2020 207d 0a09 ter\\n\";.. }..\n-000037b0: 2020 2020 656c 7369 6620 2824 6c20 3d7e elsif ($l =~\n-000037c0: 202f 5c41 3b28 7365 7269 6573 546f 4469 /\\A;(seriesToDi\n-000037d0: 7374 7269 6275 7465 293d 5c73 2a5c 5a2f stribute)=\\s*\\Z/\n-000037e0: 290a 0920 2020 207b 0a09 0970 7269 6e74 ).. {...print\n-000037f0: 204f 5554 2022 2431 3d27 222c 206a 6f69 OUT \"$1='\", joi\n-00003800: 6e28 275c 2720 5c27 272c 2040 2473 6572 n('\\' \\'', @$ser\n-00003810: 6965 7329 2c20 2227 5c6e 223b 0a09 2020 ies), \"'\\n\";.. \n-00003820: 2020 7d0a 0920 2020 2065 6c73 6966 2028 }.. elsif (\n-00003830: 246c 203d 7e20 2f5c 413b 2864 656c 7461 $l =~ /\\A;(delta\n-00003840: 4361 6368 6529 3d5c 732a 5c5a 2f29 0a09 Cache)=\\s*\\Z/)..\n-00003850: 2020 2020 7b0a 0909 7072 696e 7420 4f55 {...print OU\n-00003860: 5420 2224 313d 2464 656c 7461 4361 6368 T \"$1=$deltaCach\n-00003870: 6544 6972 5c6e 223b 0a09 2020 2020 7d0a eDir\\n\";.. }.\n-00003880: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. {\n-00003890: 0a09 0970 7269 6e74 204f 5554 2022 246c ...print OUT \"$l\n-000038a0: 5c6e 223b 0a09 2020 2020 7d0a 097d 0a09 \\n\";.. }..}..\n-000038b0: 636c 6f73 6528 494e 293b 0a09 636c 6f73 close(IN);..clos\n-000038c0: 6528 4f55 5429 3b0a 0924 7772 6974 7465 e(OUT);..$writte\n-000038d0: 6e43 6f6e 6646 696c 6573 207c 3d20 313b nConfFiles |= 1;\n-000038e0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-000038f0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00003900: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00003910: 3e0a 0909 2020 2020 2020 5b22 7772 6f74 >... [\"wrot\n-00003920: 6520 6d61 7374 6572 2062 6163 6b75 7020 e master backup \n-00003930: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi\n-00003940: 6c65 2022 202e 0a09 0920 2020 2020 2020 le \" .... \n-00003950: 223c 2466 4f75 743e 225d 293b 0a20 2020 \"<$fOut>\"]);. \n-00003960: 207d 0a7d 0a23 2067 656e 6572 6174 6520 }.}.# generate \n-00003970: 6261 636b 7570 2063 6f70 7920 636f 6e66 backup copy conf\n-00003980: 6967 7572 6174 696f 6e20 6669 6c65 0a7b iguration file.{\n-00003990: 0a20 2020 206d 7920 2466 496e 203d 2022 . my $fIn = \"\n-000039a0: 2474 6d70 4469 722f 7374 6f72 6542 6163 $tmpDir/storeBac\n-000039b0: 6b75 7042 6173 6554 7265 652e 636f 6e66 kupBaseTree.conf\n-000039c0: 223b 0a20 2020 206d 7920 2466 4f75 7420 \";. my $fOut \n-000039d0: 3d20 2224 6261 636b 7570 436f 7079 4469 = \"$backupCopyDi\n-000039e0: 722f 7374 6f72 6542 6163 6b75 7042 6173 r/storeBackupBas\n-000039f0: 6554 7265 652e 636f 6e66 223b 0a20 2020 eTree.conf\";. \n-00003a00: 206d 7920 2477 7269 7465 436f 6e66 6967 my $writeConfig\n-00003a10: 4669 6c65 203d 2031 3b0a 2020 2020 6966 File = 1;. if\n-00003a20: 2028 2d65 2024 664f 7574 290a 2020 2020 (-e $fOut). \n-00003a30: 7b0a 096d 7920 2461 6e73 7765 7220 3d20 {..my $answer = \n-00003a40: 756e 6465 663b 0a09 646f 0a09 7b0a 0920 undef;..do..{.. \n-00003a50: 2020 2070 7269 6e74 2022 5c6e 436f 6e66 print \"\\nConf\n-00003a60: 6967 7572 6174 696f 6e20 6669 6c65 2066 iguration file f\n-00003a70: 6f72 2062 6163 6b75 7020 636f 7079 2064 or backup copy d\n-00003a80: 6972 6563 746f 7279 5c6e 222c 0a09 2020 irectory\\n\",.. \n-00003a90: 2020 223c 2462 6163 6b75 7043 6f70 7944 \"<$backupCopyD\n-00003aa0: 6972 3e20 616c 7265 6164 7920 6578 6973 ir> already exis\n-00003ab0: 7473 2e20 486f 7720 746f 2070 726f 6365 ts. How to proce\n-00003ac0: 6564 3a5c 6e22 2c0a 0920 2020 2022 6f76 ed:\\n\",.. \"ov\n-00003ad0: 6572 7772 6974 6520 2f20 636f 6e74 696e erwrite / contin\n-00003ae0: 7565 202f 2073 746f 7020 2d3e 2022 3b0a ue / stop -> \";.\n-00003af0: 0920 2020 2024 616e 7377 6572 203d 203c . $answer = <\n-00003b00: 5354 4449 4e3e 3b0a 0920 2020 2063 686f STDIN>;.. cho\n-00003b10: 6d70 2024 616e 7377 6572 3b0a 097d 2077 mp $answer;..} w\n-00003b20: 6869 6c65 2028 2461 6e73 7765 7220 6e65 hile ($answer ne\n-00003b30: 2027 6f76 6572 7772 6974 6527 2061 6e64 'overwrite' and\n-00003b40: 2024 616e 7377 6572 206e 6520 2773 746f $answer ne 'sto\n-00003b50: 7027 2061 6e64 0a09 0920 2461 6e73 7765 p' and... $answe\n-00003b60: 7220 6e65 2027 636f 6e74 696e 7565 2729 r ne 'continue')\n-00003b70: 3b0a 0969 6620 2824 616e 7377 6572 2065 ;..if ($answer e\n-00003b80: 7120 2773 746f 7027 290a 097b 0a09 2020 q 'stop')..{.. \n-00003b90: 2020 6578 6974 2031 3b0a 097d 0a09 656c exit 1;..}..el\n-00003ba0: 7369 6620 2824 616e 7377 6572 2065 7120 sif ($answer eq \n-00003bb0: 2763 6f6e 7469 6e75 6527 290a 097b 0a09 'continue')..{..\n-00003bc0: 2020 2020 2477 7269 7465 436f 6e66 6967 $writeConfig\n-00003bd0: 4669 6c65 203d 2030 3b0a 097d 0a20 2020 File = 0;..}. \n-00003be0: 207d 0a0a 2020 2020 6966 2028 2477 7269 }.. if ($wri\n-00003bf0: 7465 436f 6e66 6967 4669 6c65 290a 2020 teConfigFile). \n-00003c00: 2020 7b0a 096d 7920 246c 3b0a 096c 6f63 {..my $l;..loc\n-00003c10: 616c 202a 494e 2c20 2a4f 5554 3b0a 096f al *IN, *OUT;..o\n-00003c20: 7065 6e28 494e 2c20 273c 272c 2024 6649 pen(IN, '<', $fI\n-00003c30: 6e29 206f 720a 0920 2020 2024 7072 4c6f n) or.. $prLo\n-00003c40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00003c50: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... \n-00003c60: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-00003c70: 6e6f 7420 6f70 656e 2074 656d 706f 7261 not open tempora\n-00003c80: 7279 2066 696c 6520 3c24 6649 6e3e 225d ry file <$fIn>\"]\n-00003c90: 2c0a 0909 0920 2027 2d65 7869 7427 203d ,.... '-exit' =\n-00003ca0: 3e20 3129 3b0a 096f 7065 6e28 4f55 542c > 1);..open(OUT,\n-00003cb0: 2027 3e27 2c20 2466 4f75 7429 206f 720a '>', $fOut) or.\n-00003cc0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00003cd0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00003ce0: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n-00003cf0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > [\"cannot open \n-00003d00: 6669 6c65 203c 2466 4f75 743e 225d 2c0a file <$fOut>\"],.\n-00003d10: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-00003d20: 3129 3b0a 0977 6869 6c65 2028 246c 203d 1);..while ($l =\n-00003d30: 203c 494e 3e29 0a09 7b0a 0920 2020 2063 )..{.. c\n-00003d40: 686f 6d70 2024 6c3b 0a09 2020 2020 6966 homp $l;.. if\n-00003d50: 2028 246c 203d 7e20 2f5c 413b 2862 6163 ($l =~ /\\A;(bac\n-00003d60: 6b75 7054 7265 654e 616d 6529 3d5c 732a kupTreeName)=\\s*\n-00003d70: 5c5a 2f29 0a09 2020 2020 7b0a 0909 7072 \\Z/).. {...pr\n-00003d80: 696e 7420 4f55 5420 2224 313d 2742 6163 int OUT \"$1='Bac\n-00003d90: 6b75 7020 436f 7079 275c 6e22 3b0a 0920 kup Copy'\\n\";.. \n-00003da0: 2020 207d 0a09 2020 2020 656c 7369 6620 }.. elsif \n-00003db0: 2824 6c20 3d7e 202f 5c41 3b28 6261 636b ($l =~ /\\A;(back\n-00003dc0: 7570 5479 7065 293d 5c73 2a5c 5a2f 290a upType)=\\s*\\Z/).\n-00003dd0: 0920 2020 207b 0a09 0970 7269 6e74 204f . {...print O\n-00003de0: 5554 2022 2431 3d63 6f70 795c 6e22 3b0a UT \"$1=copy\\n\";.\n-00003df0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi\n-00003e00: 6620 2824 6c20 3d7e 202f 5c41 3b28 7365 f ($l =~ /\\A;(se\n-00003e10: 7269 6573 546f 4469 7374 7269 6275 7465 riesToDistribute\n-00003e20: 293d 5c73 2a5c 5a2f 290a 0920 2020 207b )=\\s*\\Z/).. {\n-00003e30: 0a09 0970 7269 6e74 204f 5554 2022 2431 ...print OUT \"$1\n-00003e40: 3d27 222c 206a 6f69 6e28 275c 2720 5c27 ='\", join('\\' \\'\n-00003e50: 272c 2040 2473 6572 6965 7329 2c20 2227 ', @$series), \"'\n-00003e60: 5c6e 223b 0a09 2020 2020 7d0a 0920 2020 \\n\";.. }.. \n-00003e70: 2065 6c73 6966 2028 246c 203d 7e20 2f5c elsif ($l =~ /\\\n-00003e80: 413b 2864 656c 7461 4361 6368 6529 3d5c A;(deltaCache)=\\\n-00003e90: 732a 5c5a 2f29 0a09 2020 2020 7b0a 0909 s*\\Z/).. {...\n-00003ea0: 7072 696e 7420 4f55 5420 2224 313d 2464 print OUT \"$1=$d\n-00003eb0: 656c 7461 4361 6368 6544 6972 5c6e 223b eltaCacheDir\\n\";\n-00003ec0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-00003ed0: 650a 0920 2020 207b 0a09 0970 7269 6e74 e.. {...print\n-00003ee0: 204f 5554 2022 246c 5c6e 223b 0a09 2020 OUT \"$l\\n\";.. \n-00003ef0: 2020 7d0a 097d 0a09 636c 6f73 6528 494e }..}..close(IN\n-00003f00: 293b 0a09 636c 6f73 6528 4f55 5429 3b0a );..close(OUT);.\n-00003f10: 0924 7772 6974 7465 6e43 6f6e 6646 696c .$writtenConfFil\n-00003f20: 6573 207c 3d20 323b 0a09 2470 724c 6f67 es |= 2;..$prLog\n-00003f30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00003f40: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... \n-00003f50: 272d 7374 7227 203d 3e0a 0909 2020 2020 '-str' =>... \n-00003f60: 2020 5b22 7772 6f74 6520 6261 636b 7570 [\"wrote backup\n-00003f70: 2063 6f70 7920 636f 6e66 6967 7572 6174 copy configurat\n-00003f80: 696f 6e20 6669 6c65 2022 202e 0a09 0920 ion file \" .... \n-00003f90: 2020 2020 2020 223c 2466 4f75 743e 225d \"<$fOut>\"]\n-00003fa0: 293b 0a20 2020 207d 0a7d 0a23 2067 656e );. }.}.# gen\n-00003fb0: 6572 6174 6520 6261 636b 7570 2063 6f70 erate backup cop\n-00003fc0: 7920 636f 6e66 6967 7572 6174 696f 6e20 y configuration \n-00003fd0: 6669 6c65 0a7b 0a20 2020 206d 7920 2466 file.{. my $f\n-00003fe0: 496e 203d 2022 2474 6d70 4469 722f 6465 In = \"$tmpDir/de\n-00003ff0: 6c74 6143 6163 6865 2e63 6f6e 6622 3b0a ltaCache.conf\";.\n-00004000: 2020 2020 6d79 2024 664f 7574 203d 2022 my $fOut = \"\n-00004010: 2464 656c 7461 4361 6368 6544 6972 2f64 $deltaCacheDir/d\n-00004020: 656c 7461 4361 6368 652e 636f 6e66 223b eltaCache.conf\";\n-00004030: 0a20 2020 206d 7920 2477 7269 7465 436f . my $writeCo\n-00004040: 6e66 6967 4669 6c65 203d 2031 3b0a 2020 nfigFile = 1;. \n-00004050: 2020 6966 2028 2d65 2024 664f 7574 290a if (-e $fOut).\n-00004060: 2020 2020 7b0a 096d 7920 2461 6e73 7765 {..my $answe\n-00004070: 7220 3d20 756e 6465 663b 0a09 646f 0a09 r = undef;..do..\n-00004080: 7b0a 0920 2020 2070 7269 6e74 2022 5c6e {.. print \"\\n\n-00004090: 436f 6e66 6967 7572 6174 696f 6e20 6669 Configuration fi\n-000040a0: 6c65 2066 6f72 2064 656c 7461 2063 6163 le for delta cac\n-000040b0: 6865 2064 6972 6563 746f 7279 5c6e 222c he directory\\n\",\n-000040c0: 0a09 2020 2020 223c 2464 656c 7461 4361 .. \"<$deltaCa\n-000040d0: 6368 6544 6972 3e20 616c 7265 6164 7920 cheDir> already \n-000040e0: 6578 6973 7473 2e20 486f 7720 746f 2070 exists. How to p\n-000040f0: 726f 6365 6564 3a5c 6e22 2c0a 0920 2020 roceed:\\n\",.. \n-00004100: 2022 6f76 6572 7772 6974 6520 2f20 636f \"overwrite / co\n-00004110: 6e74 696e 7565 202f 2073 746f 7020 2d3e ntinue / stop ->\n-00004120: 2022 3b0a 0920 2020 2024 616e 7377 6572 \";.. $answer\n-00004130: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. \n-00004140: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;.\n-00004150: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe\n-00004160: 7220 6e65 2027 6f76 6572 7772 6974 6527 r ne 'overwrite'\n-00004170: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne \n-00004180: 2773 746f 7027 2061 6e64 0a09 0920 2461 'stop' and... $a\n-00004190: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin\n-000041a0: 7565 2729 3b0a 0969 6620 2824 616e 7377 ue');..if ($answ\n-000041b0: 6572 2065 7120 2773 746f 7027 290a 097b er eq 'stop')..{\n-000041c0: 0a09 2020 2020 6578 6974 2031 3b0a 097d .. exit 1;..}\n-000041d0: 0a09 656c 7369 6620 2824 616e 7377 6572 ..elsif ($answer\n-000041e0: 2065 7120 2763 6f6e 7469 6e75 6527 290a eq 'continue').\n-000041f0: 097b 0a09 2020 2020 2477 7269 7465 436f .{.. $writeCo\n-00004200: 6e66 6967 4669 6c65 203d 2030 3b0a 097d nfigFile = 0;..}\n-00004210: 0a20 2020 207d 0a0a 2020 2020 6966 2028 . }.. if (\n-00004220: 2477 7269 7465 436f 6e66 6967 4669 6c65 $writeConfigFile\n-00004230: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;.\n-00004240: 096c 6f63 616c 202a 494e 2c20 2a4f 5554 .local *IN, *OUT\n-00004250: 3b0a 096f 7065 6e28 494e 2c20 273c 272c ;..open(IN, '<',\n-00004260: 2024 6649 6e29 206f 720a 0920 2020 2024 $fIn) or.. $\n-00004270: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00004280: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00004290: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-000042a0: 2263 616e 6e6f 7420 6f70 656e 2074 656d \"cannot open tem\n-000042b0: 706f 7261 7279 2066 696c 6520 3c24 6649 porary file <$fI\n-000042c0: 6e3e 225d 2c0a 0909 0920 2027 2d65 7869 n>\"],.... '-exi\n-000042d0: 7427 203d 3e20 3129 3b0a 096f 7065 6e28 t' => 1);..open(\n-000042e0: 4f55 542c 2027 3e27 2c20 2466 4f75 7429 OUT, '>', $fOut)\n-000042f0: 206f 720a 0920 2020 2024 7072 4c6f 672d or.. $prLog-\n-00004300: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00004310: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st\n-00004320: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => [\"cannot o\n-00004330: 7065 6e20 6669 6c65 203c 2466 4f75 743e pen file <$fOut>\n-00004340: 225d 2c0a 0909 0920 2027 2d65 7869 7427 \"],.... '-exit'\n-00004350: 203d 3e20 3129 3b0a 0977 6869 6c65 2028 => 1);..while (\n-00004360: 246c 203d 203c 494e 3e29 0a09 7b0a 0920 $l = )..{.. \n-00004370: 2020 2063 686f 6d70 2024 6c3b 0a09 2020 chomp $l;.. \n-00004380: 2020 6966 2028 246c 203d 7e20 2f5c 413b if ($l =~ /\\A;\n-00004390: 2862 6163 6b75 7043 6f70 7930 293d 5c73 (backupCopy0)=\\s\n-000043a0: 2a5c 5a2f 290a 0920 2020 207b 0a09 0970 *\\Z/).. {...p\n-000043b0: 7269 6e74 204f 5554 2022 2431 3d27 4261 rint OUT \"$1='Ba\n-000043c0: 636b 7570 2043 6f70 7927 2220 2e0a 0909 ckup Copy'\" ....\n-000043d0: 2020 2020 2220 2722 2c20 6a6f 696e 2827 \" '\", join('\n-000043e0: 5c27 205c 2727 2c20 4024 7365 7269 6573 \\' \\'', @$series\n-000043f0: 292c 2022 275c 6e22 3b0a 0920 2020 207d ), \"'\\n\";.. }\n-00004400: 0a09 2020 2020 656c 7365 0a09 2020 2020 .. else.. \n-00004410: 7b0a 0909 7072 696e 7420 4f55 5420 2224 {...print OUT \"$\n-00004420: 6c5c 6e22 3b0a 0920 2020 207d 0a09 7d0a l\\n\";.. }..}.\n-00004430: 0963 6c6f 7365 2849 4e29 3b0a 0963 6c6f .close(IN);..clo\n-00004440: 7365 284f 5554 293b 0a09 2477 7269 7474 se(OUT);..$writt\n-00004450: 656e 436f 6e66 4669 6c65 7320 7c3d 2034 enConfFiles |= 4\n-00004460: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print\n-00004470: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00004480: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00004490: 3d3e 0a09 0920 2020 2020 205b 2277 726f =>... [\"wro\n-000044a0: 7465 2064 656c 7461 2063 6163 6865 2063 te delta cache c\n-000044b0: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil\n-000044c0: 6520 2220 2e0a 0909 2020 2020 2020 2022 e \" .... \"\n-000044d0: 3c24 664f 7574 3e22 5d29 3b0a 2020 2020 <$fOut>\"]);. \n-000044e0: 7d0a 7d0a 0a24 7072 4c6f 672d 3e70 7269 }.}..$prLog->pri\n-000044f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W\n-00004500: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-00004510: 203d 3e20 5b22 6e6f 7420 616c 6c20 636f => [\"not all co\n-00004520: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file\n-00004530: 7320 7765 7265 2077 7269 7474 656e 2c22 s were written,\"\n-00004540: 2c0a 0909 0920 2273 6f20 7468 6579 206d ,.... \"so they m\n-00004550: 6967 6874 2062 6520 696e 636f 6e73 6973 ight be inconsis\n-00004560: 7465 6e74 202d 2070 6c65 6173 6520 6368 tent - please ch\n-00004570: 6563 6b22 5d29 0a20 2020 2075 6e6c 6573 eck\"]). unles\n-00004580: 7320 2477 7269 7474 656e 436f 6e66 4669 s $writtenConfFi\n-00004590: 6c65 7320 3d3d 2028 317c 327c 3429 3b0a les == (1|2|4);.\n-000045a0: 0a23 2064 656c 6574 6520 7465 6d70 6f72 .# delete tempor\n-000045b0: 6172 7920 6669 6c65 7320 2f20 6469 7265 ary files / dire\n-000045c0: 6374 6f72 790a 756e 6c69 6e6b 2022 2474 ctory.unlink \"$t\n-000045d0: 6d70 4469 722f 7374 6f72 6542 6163 6b75 mpDir/storeBacku\n-000045e0: 7042 6173 6554 7265 652e 636f 6e66 222c pBaseTree.conf\",\n-000045f0: 2022 2474 6d70 4469 722f 6465 6c74 6143 \"$tmpDir/deltaC\n-00004600: 6163 6865 2e63 6f6e 6622 3b0a 726d 6469 ache.conf\";.rmdi\n-00004610: 7220 2474 6d70 4469 723b 0a0a 6578 6974 r $tmpDir;..exit\n-00004620: 2030 3b0a 0a0a 0a23 2323 2323 2323 2323 0;....#########\n-00004630: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004640: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004650: 2323 2323 2323 2323 230a 7375 6220 6368 #########.sub ch\n-00004660: 6563 6b44 6972 0a7b 0a20 2020 206d 7920 eckDir.{. my \n-00004670: 2824 6469 722c 2024 6e61 6d65 2c20 2463 ($dir, $name, $c\n-00004680: 6f6d 6d65 6e74 2c20 2470 724c 6f67 2920 omment, $prLog) \n-00004690: 3d20 405f 3b0a 0a20 2020 206d 7920 2463 = @_;.. my $c\n-000046a0: 203d 2022 5c6e 223b 0a20 2020 2066 6f72 = \"\\n\";. for\n-000046b0: 6561 6368 206d 7920 246c 2028 263a 3a73 each my $l (&::s\n-000046c0: 706c 6974 4c69 6e65 2824 636f 6d6d 656e plitLine($commen\n-000046d0: 742c 2037 392c 2027 5c73 2b27 2c20 225c t, 79, '\\s+', \"\\\n-000046e0: 6e22 2929 0a20 2020 207b 0a09 2463 202e n\")). {..$c .\n-000046f0: 3d20 2224 6c5c 6e22 3b0a 2020 2020 7d0a = \"$l\\n\";. }.\n-00004700: 0a20 2020 2075 6e6c 6573 7320 2824 6469 . unless ($di\n-00004710: 7229 0a20 2020 207b 0a09 7072 696e 7420 r). {..print \n-00004720: 2463 3b0a 0924 6320 3d20 756e 6465 663b $c;..$c = undef;\n-00004730: 0a09 6d79 2024 616e 7377 6572 203d 2027 ..my $answer = '\n-00004740: 273b 0a09 646f 0a09 7b0a 0920 2020 2070 ';..do..{.. p\n-00004750: 7269 6e74 2022 5c6e 246e 616d 6520 6973 rint \"\\n$name is\n-00004760: 206e 6f74 2079 6574 2064 6566 696e 6564 not yet defined\n-00004770: 2c20 706c 6561 7365 2065 6e74 6572 2070 , please enter p\n-00004780: 6174 685c 6e22 2c0a 0920 2020 2022 2d3e ath\\n\",.. \"->\n-00004790: 2022 3b0a 0920 2020 2024 616e 7377 6572 \";.. $answer\n-000047a0: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. \n-000047b0: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;.\n-000047c0: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe\n-000047d0: 7220 3d7e 202f 5c41 5c73 2a5c 5a2f 293b r =~ /\\A\\s*\\Z/);\n-000047e0: 0a0a 0924 6469 7220 3d20 2461 6e73 7765 ...$dir = $answe\n-000047f0: 723b 0a20 2020 207d 0a0a 2020 2020 756e r;. }.. un\n-00004800: 6c65 7373 2028 2d65 2024 6469 7229 0a20 less (-e $dir). \n-00004810: 2020 207b 0a09 7072 696e 7420 2463 2069 {..print $c i\n-00004820: 6620 2463 3b0a 096d 7920 2461 6e73 7765 f $c;..my $answe\n-00004830: 7220 3d20 756e 6465 663b 0a09 646f 0a09 r = undef;..do..\n-00004840: 7b0a 0920 2020 2070 7269 6e74 2022 5c6e {.. print \"\\n\n-00004850: 246e 616d 6520 646f 6573 206e 6f74 2065 $name does not e\n-00004860: 7869 7374 2061 7420 3c24 6469 723e 5c6e xist at <$dir>\\n\n-00004870: 222c 0a09 2020 2020 2273 686f 756c 6420 \",.. \"should \n-00004880: 4920 6372 6561 7465 2069 743f 5c6e 222c I create it?\\n\",\n-00004890: 0a09 2020 2020 2279 6573 202f 206e 6f20 .. \"yes / no \n-000048a0: 2d3e 2022 3b0a 0920 2020 2024 616e 7377 -> \";.. $answ\n-000048b0: 6572 203d 203c 5354 4449 4e3e 3b0a 0920 er = ;.. \n-000048c0: 2020 2063 686f 6d70 2024 616e 7377 6572 chomp $answer\n-000048d0: 3b0a 097d 2077 6869 6c65 2028 2461 6e73 ;..} while ($ans\n-000048e0: 7765 7220 6e65 2027 7965 7327 2061 6e64 wer ne 'yes' and\n-000048f0: 2024 616e 7377 6572 206e 6520 276e 6f27 $answer ne 'no'\n-00004900: 293b 0a0a 0965 7869 7420 3120 6966 2024 );...exit 1 if $\n-00004910: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';.\n-00004920: 0a09 263a 3a6d 616b 6544 6972 5061 7468 ..&::makeDirPath\n-00004930: 2824 6469 722c 2024 7072 4c6f 6729 206f ($dir, $prLog) o\n-00004940: 720a 0920 2020 2024 7072 4c6f 672d 3e70 r.. $prLog->p\n-00004950: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00004960: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str'\n-00004970: 203d 3e20 5b22 6361 6e6e 6f74 2063 7265 => [\"cannot cre\n-00004980: 6174 6520 246e 616d 6520 3c24 6469 723e ate $name <$dir>\n-00004990: 225d 2c0a 0909 0920 2027 2d65 7869 7427 \"],.... '-exit'\n-000049a0: 203d 3e20 3129 3b0a 0924 7072 4c6f 672d => 1);..$prLog-\n-000049b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000049c0: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n-000049d0: 2d73 7472 2720 3d3e 205b 2263 7265 6174 -str' => [\"creat\n-000049e0: 6564 2024 6e61 6d65 203c 2464 6972 3e22 ed $name <$dir>\"\n-000049f0: 5d29 3b0a 2020 2020 7d0a 0a20 2020 2072 ]);. }.. r\n-00004a00: 6574 7572 6e20 2464 6972 3b0a 7d0a 0a0a eturn $dir;.}...\n-00004a10: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004a20: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004a30: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004a40: 2323 0a73 7562 2063 6c65 616e 7570 0a7b ##.sub cleanup.{\n-00004a50: 0a20 2020 206d 7920 2473 6967 6e61 6d65 . my $signame\n-00004a60: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-00004a70: 2024 6578 6974 203d 2028 7368 6966 7428 $exit = (shift(\n-00004a80: 2920 7c7c 2031 293b 0a0a 2020 2020 6d79 ) || 1);.. my\n-00004a90: 2028 2470 724c 6f67 2c20 2474 6d70 4469 ($prLog, $tmpDi\n-00004aa0: 7229 203d 2028 406d 6169 6e3a 3a63 6c65 r) = (@main::cle\n-00004ab0: 616e 7570 293b 0a0a 2020 2020 7072 696e anup);.. prin\n-00004ac0: 7420 225c 6e22 3b0a 2020 2020 6966 2028 t \"\\n\";. if (\n-00004ad0: 2473 6967 6e61 6d65 290a 2020 2020 7b0a $signame). {.\n-00004ae0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog->\n-00004af0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00004b00: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. \n-00004b10: 2020 2020 2020 2020 2020 2020 272d 7374 '-st\n-00004b20: 7227 203d 3e20 5b22 6361 7567 6874 2073 r' => [\"caught s\n-00004b30: 6967 6e61 6c20 2473 6967 6e61 6d65 2c20 ignal $signame, \n-00004b40: 7465 726d 696e 6174 696e 6722 5d29 3b0a terminating\"]);.\n-00004b50: 2020 2020 7d0a 0a20 2020 2023 2064 656c }.. # del\n-00004b60: 6574 6520 7465 6d70 6f72 6172 7920 6669 ete temporary fi\n-00004b70: 6c65 7320 2f20 6469 7265 6374 6f72 790a les / directory.\n-00004b80: 2020 2020 6966 2028 2474 6d70 4469 7229 if ($tmpDir)\n-00004b90: 0a20 2020 207b 0a09 756e 6c69 6e6b 2022 . {..unlink \"\n-00004ba0: 2474 6d70 4469 722f 7374 6f72 6542 6163 $tmpDir/storeBac\n-00004bb0: 6b75 7042 6173 6554 7265 652e 636f 6e66 kupBaseTree.conf\n-00004bc0: 222c 2022 2474 6d70 4469 722f 6465 6c74 \", \"$tmpDir/delt\n-00004bd0: 6143 6163 6865 2e63 6f6e 6622 3b0a 0972 aCache.conf\";..r\n-00004be0: 6d64 6972 2024 746d 7044 6972 3b0a 2020 mdir $tmpDir;. \n-00004bf0: 2020 7d0a 0a20 2020 2065 7869 7420 2465 }.. exit $e\n-00004c00: 7869 743b 0a7d 0a xit;.}.\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 6570 6c69 6361 7469 6f6e 5769 7a61 pReplicationWiza\n+00000040: 7264 0a rd.\n"}, {"source1": "./usr/bin/storeBackupSearch", "source2": "./usr/bin/storeBackupSearch", "has_internal_linenos": true, "unified_diff": "@@ -1,1121 +1,4 @@\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 3232 290a 2320 2020 2020 2020 8-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;.\n-00000330: 0a0a 7375 6220 6c69 6250 6174 680a 7b0a ..sub libPath.{.\n-00000340: 2020 2020 6d79 2024 6669 6c65 203d 2073 my $file = s\n-00000350: 6869 6674 3b0a 0a20 2020 206d 7920 2464 hift;.. my $d\n-00000360: 6972 3b0a 0a20 2020 2023 2046 616c 6c73 ir;.. # Falls\n-00000370: 2044 6174 6569 2073 656c 6273 7420 6569 Datei selbst ei\n-00000380: 6e20 7379 6d6c 696e 6b20 6973 742c 2073 n symlink ist, s\n-00000390: 6f6c 616e 6765 2066 6f6c 6765 6e2c 2062 olange folgen, b\n-000003a0: 6973 2061 7566 6765 6cf6 7374 0a20 2020 is aufgel.st. \n-000003b0: 2069 6620 282d 6620 2466 696c 6529 0a20 if (-f $file). \n-000003c0: 2020 207b 0a09 7768 696c 6520 282d 6c20 {..while (-l \n-000003d0: 2466 696c 6529 0a09 7b0a 0920 2020 206d $file)..{.. m\n-000003e0: 7920 246c 696e 6b20 3d20 7265 6164 6c69 y $link = readli\n-000003f0: 6e6b 2824 6669 6c65 293b 0a0a 0920 2020 nk($file);... \n-00000400: 2069 6620 2873 7562 7374 7228 246c 696e if (substr($lin\n-00000410: 6b2c 2030 2c20 3129 206e 6520 222f 2229 k, 0, 1) ne \"/\")\n-00000420: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file \n-00000430: 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 =~ s/[^\\/]+$/$li\n-00000440: 6e6b 2f3b 0a09 2020 2020 7d0a 0920 2020 nk/;.. }.. \n-00000450: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$\n-00000460: 6669 6c65 203d 2024 6c69 6e6b 3b0a 0920 file = $link;.. \n-00000470: 2020 207d 0a09 7d0a 0a09 2824 6469 722c }..}...($dir,\n-00000480: 2024 6669 6c65 2920 3d20 2673 706c 6974 $file) = &split\n-00000490: 4669 6c65 4469 7228 2466 696c 6529 3b0a FileDir($file);.\n-000004a0: 0924 6669 6c65 203d 2022 2f24 6669 6c65 .$file = \"/$file\n-000004b0: 223b 0a20 2020 207d 0a20 2020 2065 6c73 \";. }. els\n-000004c0: 650a 2020 2020 7b0a 0970 7269 6e74 2053 e. {..print S\n-000004d0: 5444 4552 5220 223c 2466 696c 653e 2064 TDERR \"<$file> d\n-000004e0: 6f65 7320 6e6f 7420 6578 6973 7421 5c6e oes not exist!\\n\n-000004f0: 223b 0a09 6578 6974 2031 3b0a 2020 2020 \";..exit 1;. \n-00000500: 7d0a 0a20 2020 2024 6469 7220 2e3d 2022 }.. $dir .= \"\n-00000510: 2f2e 2e2f 6c69 6222 3b20 2020 2020 2020 /../lib\"; \n-00000520: 2020 2020 2320 5066 6164 207a 7520 6465 # Pfad zu de\n-00000530: 6e20 4269 626c 696f 7468 656b 656e 0a20 n Bibliotheken. \n-00000540: 2020 206d 7920 246f 6c64 4469 7220 3d20 my $oldDir = \n-00000550: 602f 6269 6e2f 7077 6460 3b0a 2020 2020 `/bin/pwd`;. \n-00000560: 6368 6f6d 7020 246f 6c64 4469 723b 0a20 chomp $oldDir;. \n-00000570: 2020 2069 6620 2863 6864 6972 2024 6469 if (chdir $di\n-00000580: 7229 0a20 2020 207b 0a09 6d79 2024 6162 r). {..my $ab\n-00000590: 7344 6972 203d 2060 2f62 696e 2f70 7764 sDir = `/bin/pwd\n-000005a0: 603b 0a09 6368 6f70 2024 6162 7344 6972 `;..chop $absDir\n-000005b0: 3b0a 0963 6864 6972 2024 6f6c 6444 6972 ;..chdir $oldDir\n-000005c0: 3b0a 0a09 7265 7475 726e 2028 2673 706c ;...return (&spl\n-000005d0: 6974 4669 6c65 4469 7228 2224 6162 7344 itFileDir(\"$absD\n-000005e0: 6972 2466 696c 6522 2929 3b0a 2020 2020 ir$file\"));. \n-000005f0: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. {\n-00000600: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR \"\n-00000610: 3c24 6469 723e 2064 6f65 7320 6e6f 7420 <$dir> does not \n-00000620: 6578 6973 742c 2065 7869 7469 6e67 5c6e exist, exiting\\n\n-00000630: 223b 0a20 2020 207d 0a7d 0a73 7562 2073 \";. }.}.sub s\n-00000640: 706c 6974 4669 6c65 4469 720a 7b0a 2020 plitFileDir.{. \n-00000650: 2020 6d79 2024 6e61 6d65 203d 2073 6869 my $name = shi\n-00000660: 6674 3b0a 0a20 2020 2072 6574 7572 6e20 ft;.. return \n-00000670: 2827 2e27 2c20 246e 616d 6529 2075 6e6c ('.', $name) unl\n-00000680: 6573 7320 2824 6e61 6d65 203d 7e2f 5c2f ess ($name =~/\\/\n-00000690: 2f29 3b20 2020 2023 206e 7572 2065 696e /); # nur ein\n-000006a0: 6661 6368 6572 2044 6174 6569 6e61 6d65 facher Dateiname\n-000006b0: 0a0a 2020 2020 6d79 2028 2464 6972 2c20 .. my ($dir, \n-000006c0: 2466 696c 6529 203d 2024 6e61 6d65 203d $file) = $name =\n-000006d0: 7e20 2f5e 282e 2a29 5c2f 282e 2a29 242f ~ /^(.*)\\/(.*)$/\n-000006e0: 733b 0a20 2020 2024 6469 7220 3d20 272f s;. $dir = '/\n-000006f0: 2720 6966 2028 2464 6972 2065 7120 2727 ' if ($dir eq ''\n-00000700: 293b 2020 2020 2020 2020 2020 2020 2020 ); \n-00000710: 2020 2020 2023 2067 696c 742c 2066 616c # gilt, fal\n-00000720: 6c73 207a 2e42 2e20 2f66 696c 656e 616d ls z.B. /filenam\n-00000730: 650a 2020 2020 7265 7475 726e 2028 2464 e. return ($d\n-00000740: 6972 2c20 2466 696c 6529 3b0a 7d0a 6d79 ir, $file);.}.my\n-00000750: 2028 2472 6571 2c20 2470 726f 6729 203d ($req, $prog) =\n-00000760: 2026 6c69 6250 6174 6828 2430 293b 0a75 &libPath($0);.u\n-00000770: 6e73 6869 6674 2040 494e 432c 2022 2472 nshift @INC, \"$r\n-00000780: 6571 223b 0a0a 0a72 6571 7569 7265 2027 eq\";...require '\n-00000790: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl';\n-000007a0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO\n-000007b0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi\n-000007c0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r\n-000007d0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version.\n-000007e0: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi\n-000007f0: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi\n-00000800: 7265 2027 666f 726b 5072 6f63 2e70 6c27 re 'forkProc.pl'\n-00000810: 3b0a 7265 7175 6972 6520 2768 756d 616e ;.require 'human\n-00000820: 5265 6164 2e70 6c27 3b0a 7265 7175 6972 Read.pl';.requir\n-00000830: 6520 2764 6174 6554 6f6f 6c73 2e70 6c27 e 'dateTools.pl'\n-00000840: 3b0a 7265 7175 6972 6520 2765 7661 6c54 ;.require 'evalT\n-00000850: 6f6f 6c73 2e70 6c27 3b0a 7265 7175 6972 ools.pl';.requir\n-00000860: 6520 2773 746f 7265 4261 636b 7570 4c69 e 'storeBackupLi\n-00000870: 622e 706c 273b 0a0a 6d79 2024 6368 6563 b.pl';..my $chec\n-00000880: 6b53 756d 4669 6c65 203d 2027 2e6d 6435 kSumFile = '.md5\n-00000890: 4368 6563 6b53 756d 7327 3b0a 0a6d 7920 CheckSums';..my \n-000008a0: 2474 6d70 6469 7220 3d20 272f 746d 7027 $tmpdir = '/tmp'\n-000008b0: 3b20 2020 2020 2020 2020 2020 2020 2023 ; #\n-000008c0: 2064 6566 6175 6c74 2076 616c 7565 0a24 default value.$\n-000008d0: 746d 7064 6972 203d 2024 454e 567b 2754 tmpdir = $ENV{'T\n-000008e0: 4d50 4449 5227 7d20 6966 2064 6566 696e MPDIR'} if defin\n-000008f0: 6564 2024 454e 567b 2754 4d50 4449 5227 ed $ENV{'TMPDIR'\n-00000900: 7d3b 0a0a 3d68 6561 6431 204e 414d 450a };..=head1 NAME.\n-00000910: 0a73 746f 7265 4261 636b 7570 5365 6172 .storeBackupSear\n-00000920: 6368 2e70 6c20 2d20 6c6f 6361 7465 7320 ch.pl - locates \n-00000930: 6469 6666 6572 656e 7420 7665 7273 696f different versio\n-00000940: 6e73 206f 6620 6120 6669 6c65 2073 6176 ns of a file sav\n-00000950: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac\n-00000960: 6b75 702e 706c 2e0a 0a3d 6865 6164 3120 kup.pl...=head1 \n-00000970: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store\n-00000980: 4261 636b 7570 5365 6172 6368 2e70 6c20 BackupSearch.pl \n-00000990: 2d67 2063 6f6e 6669 6746 696c 650a 0a09 -g configFile...\n-000009a0: 7374 6f72 6542 6163 6b75 7053 6561 7263 storeBackupSearc\n-000009b0: 682e 706c 202d 6220 6261 636b 7570 4469 h.pl -b backupDi\n-000009c0: 7244 6972 205b 2d66 2063 6f6e 6669 6746 rDir [-f configF\n-000009d0: 696c 655d 0a09 2020 2020 2020 5b2d 7320 ile].. [-s \n-000009e0: 7275 6c65 5d20 205b 2d2d 6162 7350 6174 rule] [--absPat\n-000009f0: 685d 205b 2d77 2066 696c 655d 205b 2d2d h] [-w file] [--\n-00000a00: 7061 724a 6f62 7320 6e75 6d62 6572 5d0a parJobs number].\n-00000a10: 0920 2020 2020 205b 2d64 206c 6576 656c . [-d level\n-00000a20: 5d20 5b2d 2d6f 6e63 655d 205b 2d2d 7072 ] [--once] [--pr\n-00000a30: 696e 745d 205b 2d54 2074 6d70 6469 725d int] [-T tmpdir]\n-00000a40: 205b 6261 636b 7570 526f 6f74 202e 202e [backupRoot . .\n-00000a50: 202e 5d0a 0a3d 6865 6164 3120 4445 5343 .]..=head1 DESC\n-00000a60: 5249 5054 494f 4e0a 0a59 6f75 206e 6565 RIPTION..You nee\n-00000a70: 6420 736f 6d65 2062 6173 6963 2075 6e64 d some basic und\n-00000a80: 6572 7374 616e 6469 6e67 206f 6620 6c69 erstanding of li\n-00000a90: 6e75 7820 616e 6420 7065 726c 2074 6f20 nux and perl to \n-00000aa0: 7573 6520 6974 2e0a 0a3d 6865 6164 3120 use it...=head1 \n-00000ab0: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8\n-00000ac0: 0a0a 3d69 7465 6d20 423c 2d2d 6765 6e65 ..=item B<--gene\n-00000ad0: 7261 7465 3e2c 2042 3c2d 673e 0a0a 2020 rate>, B<-g>.. \n-00000ae0: 2020 6765 6e65 7261 7465 2061 2063 6f6e generate a con\n-00000af0: 6669 6720 6669 6c65 0a0a 3d69 7465 6d20 fig file..=item \n-00000b00: 423c 2d2d 7072 696e 743e 0a0a 2020 2020 B<--print>.. \n-00000b10: 7072 696e 7420 636f 6e66 6967 7572 6174 print configurat\n-00000b20: 696f 6e20 7265 6164 2066 726f 6d20 636f ion read from co\n-00000b30: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file\n-00000b40: 2061 6e64 2073 746f 700a 0a3d 6974 656d and stop..=item\n-00000b50: 2042 3c2d 2d63 6f6e 6669 6746 696c 653e B<--configFile>\n-00000b60: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con\n-00000b70: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file \n-00000b80: 2869 6e73 7465 6164 206f 6620 6f72 0a20 (instead of or. \n-00000b90: 2020 2061 6464 6974 696f 6e61 6c6c 7920 additionally \n-00000ba0: 746f 2070 6172 616d 6574 6572 7329 0a0a to parameters)..\n-00000bb0: 3d69 7465 6d20 423c 2d2d 6261 636b 7570 =item B<--backup\n-00000bc0: 4469 723e 2042 3c2d 623e 0a0a 0909 2020 Dir> B<-b>.... \n-00000bd0: 2020 746f 7020 6c65 7665 6c20 6469 7265 top level dire\n-00000be0: 6374 6f72 7920 6f66 2061 6c6c 2062 6163 ctory of all bac\n-00000bf0: 6b75 7073 0a0a 3d69 7465 6d20 423c 2d2d kups..=item B<--\n-00000c00: 7365 6172 6368 5275 6c65 3e2c 2042 3c2d searchRule>, B<-\n-00000c10: 733e 0a0a 0909 2020 2020 7275 6c65 2066 s>.... rule f\n-00000c20: 6f72 2073 6561 7263 6869 6e67 0a09 0920 or searching... \n-00000c30: 2020 2073 6565 2052 4541 444d 453a 2027 see README: '\n-00000c40: 696e 636c 7564 696e 6720 2f20 6578 636c including / excl\n-00000c50: 7564 696e 6720 6669 6c65 7320 616e 6420 uding files and \n-00000c60: 6469 7265 6374 6f72 6965 7327 0a0a 3d69 directories'..=i\n-00000c70: 7465 6d20 423c 2d2d 6162 7350 6174 683e tem B<--absPath>\n-00000c80: 2c20 423c 2d61 3e0a 0a20 2020 2077 7269 , B<-a>.. wri\n-00000c90: 7465 2072 6573 756c 7420 7769 7468 2061 te result with a\n-00000ca0: 6273 6f6c 7574 6520 7061 7468 206e 616d bsolute path nam\n-00000cb0: 6573 0a0a 3d69 7465 6d20 423c 2d2d 7772 es..=item B<--wr\n-00000cc0: 6974 6554 6f46 696c 653e 2c20 423c 2d77 iteToFile>, B<-w\n-00000cd0: 3e0a 0a20 2020 2077 7269 7465 2073 6561 >.. write sea\n-00000ce0: 7263 6820 7265 7375 6c74 2061 6c73 6f20 rch result also \n-00000cf0: 746f 2066 696c 650a 0a3d 6974 656d 2042 to file..=item B\n-00000d00: 3c2d 2d70 6172 4a6f 6273 3e2c 2042 3c2d <--parJobs>, B<-\n-00000d10: 703e 0a0a 2020 2020 6e75 6d62 6572 206f p>.. number o\n-00000d20: 6620 7061 7261 6c6c 656c 206a 6f62 732c f parallel jobs,\n-00000d30: 2064 6566 6175 6c74 203d 2063 686f 7365 default = chose\n-00000d40: 6e20 6175 746f 6d61 7469 6361 6c6c 790a n automatically.\n-00000d50: 0a3d 6974 656d 2042 3c2d 2d64 6562 7567 .=item B<--debug\n-00000d60: 3e2c 2042 3c2d 643e 0a0a 2020 2020 6465 >, B<-d>.. de\n-00000d70: 6275 6720 6c65 7665 6c2c 2070 6f73 7369 bug level, possi\n-00000d80: 626c 6520 7661 6c75 6573 2061 7265 2030 ble values are 0\n-00000d90: 2c20 312c 2032 2c20 6465 6661 756c 7420 , 1, 2, default \n-00000da0: 3d20 300a 0a3d 6974 656d 2042 3c2d 2d6f = 0..=item B<--o\n-00000db0: 6e63 653e 2c20 423c 2d6f 3e0a 0a20 2020 nce>, B<-o>.. \n-00000dc0: 2073 686f 7720 6576 6572 7920 6669 6c65 show every file\n-00000dd0: 2066 6f75 6e64 206f 6e6c 7920 6f6e 6365 found only once\n-00000de0: 2028 6465 7065 6e64 696e 6720 6f6e 206d (depending on m\n-00000df0: 6435 2073 756d 290a 0a3d 6974 656d 2042 d5 sum)..=item B\n-00000e00: 3c2d 2d74 6d70 6469 723e 2c20 423c 2d54 <--tmpdir>, B<-T\n-00000e10: 3e0a 0a20 2020 2064 6972 6563 746f 7279 >.. directory\n-00000e20: 2066 6f72 2074 656d 706f 7261 7279 2066 for temporary f\n-00000e30: 696c 6573 2c20 6465 6661 756c 7420 6973 iles, default is\n-00000e40: 203c 2f74 6d70 3e0a 0a3d 6974 656d 2062 ..=item b\n-00000e50: 6163 6b75 7052 6f6f 740a 0a20 2020 2052 ackupRoot.. R\n-00000e60: 6f6f 7420 6469 7265 6374 6f72 6965 7320 oot directories \n-00000e70: 6f66 2062 6163 6b75 7073 2077 6865 7265 of backups where\n-00000e80: 2074 6f20 7365 6172 6368 2072 656c 6174 to search relat\n-00000e90: 6976 650a 2020 2020 746f 2062 6163 6b75 ive. to backu\n-00000ea0: 7044 6972 2e20 4966 206e 6f20 6469 7265 pDir. If no dire\n-00000eb0: 6374 6f72 6965 7320 6172 6520 7370 6563 ctories are spec\n-00000ec0: 6966 6965 642c 2061 6c6c 0a20 2020 2062 ified, all. b\n-00000ed0: 6163 6b75 7073 2062 656c 6f77 2062 6163 ackups below bac\n-00000ee0: 6b75 7044 6972 2061 7265 2063 686f 7365 kupDir are chose\n-00000ef0: 6e2e 0a0a 3d62 6163 6b0a 0a3d 6865 6164 n...=back..=head\n-00000f00: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop\n-00000f10: 7972 6967 6874 2028 6329 2032 3030 382d yright (c) 2008-\n-00000f20: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo\n-00000f30: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R\n-00000f40: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe\n-00000f50: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU \n-00000f60: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n-00000f70: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any\n-00000f80: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version..\n-00000f90: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help =\n-00000fa0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text(\n-00000fb0: 2430 293b 0a0a 6d79 2024 7465 6d70 6c61 $0);..my $templa\n-00000fc0: 7465 436f 6e66 6967 4669 6c65 203d 203c teConfigFile = <\n-00000fd0: 3c45 4f43 3b0a 2320 636f 6e66 6967 7572 &\n-00001560: 3a3a 5349 5a45 2822 334d 2229 2720 616e ::SIZE(\"3M\")' an\n-00001570: 6420 275c 2475 6964 2065 7120 2268 6a63 d '\\$uid eq \"hjc\n-00001580: 2227 2029 206f 720a 2320 2020 2028 2027 \"' ) or.# ( '\n-00001590: 5c24 6d74 696d 6520 3e20 263a 3a44 4154 \\$mtime > &::DAT\n-000015a0: 4528 2233 6434 6822 2927 2061 6e64 206e E(\"3d4h\")' and n\n-000015b0: 6f74 2027 5c24 6669 6c65 203d 7e20 6d23 ot '\\$file =~ m#\n-000015c0: 2f74 6d70 2f23 2720 2927 0a3b 7365 6172 /tmp/#' )'.;sear\n-000015d0: 6368 5275 6c65 3d0a 0a23 2072 6f6f 7420 chRule=..# root \n-000015e0: 6469 7265 6374 6f72 7920 6f66 2062 6163 directory of bac\n-000015f0: 6b75 7020 7265 6c61 7469 7665 2074 6f20 kup relative to \n-00001600: 6261 636b 7570 4469 7220 6469 7265 6374 backupDir direct\n-00001610: 6f72 790a 3b62 6163 6b75 7052 6f6f 743d ory.;backupRoot=\n-00001620: 0a0a 2320 6469 7265 6374 6f72 7920 666f ..# directory fo\n-00001630: 7220 7465 6d70 6f72 6172 7920 6669 6c65 r temporary file\n-00001640: 2c20 6465 6661 756c 7420 6973 202f 746d , default is /tm\n-00001650: 700a 3b74 6d70 4469 723d 0a0a 2320 7772 p.;tmpDir=..# wr\n-00001660: 6974 6520 7265 7375 6c74 2077 6974 6820 ite result with \n-00001670: 6162 736f 6c75 7465 2070 6174 6820 6e61 absolute path na\n-00001680: 6d65 730a 2320 6465 6661 756c 7420 6973 mes.# default is\n-00001690: 2027 6e6f 272c 2070 6f73 7369 626c 6520 'no', possible \n-000016a0: 7661 6c75 6573 2061 7265 2027 7965 7327 values are 'yes'\n-000016b0: 2061 6e64 2027 6e6f 270a 3b61 6273 5061 and 'no'.;absPa\n-000016c0: 7468 3d0a 0a23 2077 7269 7465 2073 6561 th=..# write sea\n-000016d0: 7263 6820 7265 7375 6c74 2061 6c73 6f20 rch result also \n-000016e0: 746f 2066 696c 650a 3b77 7269 7465 546f to file.;writeTo\n-000016f0: 4669 6c65 3d0a 0a23 206e 756d 6265 7220 File=..# number \n-00001700: 6f66 2070 6172 616c 6c65 6c20 6a6f 6273 of parallel jobs\n-00001710: 2c20 6465 6661 756c 7420 3d20 6368 6f73 , default = chos\n-00001720: 656e 2061 7574 6f6d 6174 6963 616c 6c79 en automatically\n-00001730: 0a3b 7061 724a 6f62 733d 0a0a 2320 6465 .;parJobs=..# de\n-00001740: 6275 6720 6c65 7665 6c2c 2070 6f73 7369 bug level, possi\n-00001750: 626c 6520 7661 6c75 6573 2061 7265 2030 ble values are 0\n-00001760: 2c20 312c 2032 2c20 6465 6661 756c 7420 , 1, 2, default \n-00001770: 3d20 300a 3b64 6562 7567 3d0a 0a23 2073 = 0.;debug=..# s\n-00001780: 686f 7720 6576 6572 7920 666f 756e 6420 how every found \n-00001790: 6669 6c65 206f 6e6c 7920 6f6e 6365 2028 file only once (\n-000017a0: 6465 7065 6e64 696e 6720 6f6e 206d 6435 depending on md5\n-000017b0: 2073 756d 290a 2320 6465 6661 756c 7420 sum).# default \n-000017c0: 6973 2027 6e6f 272c 2070 6f73 7369 626c is 'no', possibl\n-000017d0: 6520 7661 6c75 6573 2061 7265 2027 7965 e values are 'ye\n-000017e0: 7327 2061 6e64 2027 6e6f 270a 3b6f 6e63 s' and 'no'.;onc\n-000017f0: 653d 0a45 4f43 0a20 2020 203b 0a0a 0a26 e=.EOC. ;...&\n-00001800: 7072 696e 7456 6572 7369 6f6e 285c 4041 printVersion(\\@A\n-00001810: 5247 562c 2027 2d56 272c 2027 2d2d 7665 RGV, '-V', '--ve\n-00001820: 7273 696f 6e27 293b 0a0a 6d79 2024 4368 rsion');..my $Ch\n-00001830: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che\n-00001840: 636b 5061 7261 6d2d 3e6e 6577 2827 2d63 ckParam->new('-c\n-00001850: 6f6e 6669 6746 696c 6527 203d 3e20 272d onfigFile' => '-\n-00001860: 6627 2c0a 0909 2020 2020 272d 616c 6c6f f',... '-allo\n-00001870: 774c 6973 7473 2720 3d3e 2027 7965 7327 wLists' => 'yes'\n-00001880: 2c0a 2309 0920 2020 2027 2d6c 6973 744d ,.#.. '-listM\n-00001890: 6170 7069 6e67 2720 3d3e 2027 6261 636b apping' => 'back\n-000018a0: 7570 526f 6f74 272c 0a09 0920 2020 2027 upRoot',... '\n-000018b0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio\n-000018c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000018d0: 3e20 2763 6f6e 6669 6746 696c 6527 2c0a > 'configFile',.\n-000018e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000018f0: 7469 6f6e 2720 3d3e 2027 2d66 272c 0a09 tion' => '-f',..\n-00001900: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00001910: 6173 2720 3d3e 2027 2d2d 636f 6e66 6967 as' => '--config\n-00001920: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n-00001930: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00001940: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. \n-00001950: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001960: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new(\n-00001970: 272d 6e61 6d65 2720 3d3e 2027 6765 6e65 '-name' => 'gene\n-00001980: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... \n-00001990: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000019a0: 272d 6727 2c0a 0909 0909 0920 2020 2027 '-g',...... '\n-000019b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-000019c0: 2d67 656e 6572 6174 6527 2c0a 0909 0909 -generate',.....\n-000019d0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-000019e0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... \n-000019f0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a27 '-only_if' =>.'\n-00001a00: 6e6f 7420 5b63 6f6e 6669 6746 696c 655d not [configFile]\n-00001a10: 2061 6e64 206e 6f74 205b 6261 636b 7570 and not [backup\n-00001a20: 4469 725d 2061 6e64 206e 6f74 205b 6261 Dir] and not [ba\n-00001a30: 636b 7570 526f 6f74 5d20 616e 6420 6e6f ckupRoot] and no\n-00001a40: 7420 5b73 6561 7263 6852 756c 655d 2729 t [searchRule]')\n-00001a50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00001a60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001a70: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n-00001a80: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup\n-00001a90: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... '\n-00001aa0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001ab0: 2d62 272c 0a09 0909 0909 2020 2020 272d -b',...... '-\n-00001ac0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001ad0: 6261 636b 7570 4469 7227 2c0a 0909 0909 backupDir',.....\n-00001ae0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00001af0: 3e20 2762 6163 6b75 7044 6972 272c 0a09 > 'backupDir',..\n-00001b00: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00001b10: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-00001b20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001b30: 6d65 2720 3d3e 2027 7365 6172 6368 5275 me' => 'searchRu\n-00001b40: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '-\n-00001b50: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00001b60: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n-00001b70: 6c5f 616c 6961 7327 203d 3e20 272d 2d73 l_alias' => '--s\n-00001b80: 6561 7263 6852 756c 6527 2c0a 0909 0909 earchRule',.....\n-00001b90: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00001ba0: 3e20 2773 6561 7263 6852 756c 6527 2c0a > 'searchRule',.\n-00001bb0: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param\n-00001bc0: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',.....\n-00001bd0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n-00001be0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n-00001bf0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00001c00: 616d 6527 203d 3e20 2777 7269 7465 4162 ame' => 'writeAb\n-00001c10: 7350 6174 6827 2c0a 0909 0909 0920 2020 sPath',...... \n-00001c20: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001c30: 2027 2d61 272c 0a09 0909 0909 2020 2020 '-a',...... \n-00001c40: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001c50: 2d2d 6162 7350 6174 6827 2c0a 0909 0909 --absPath',.....\n-00001c60: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00001c70: 3e20 2761 6273 5061 7468 272c 0a09 0909 > 'absPath',....\n-00001c80: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt\n-00001c90: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', \n-00001ca0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti\n-00001cb0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001cc0: 3d3e 2027 7772 6974 6554 6f46 696c 6527 => 'writeToFile'\n-00001cd0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001ce0: 6f70 7469 6f6e 2720 3d3e 2027 2d77 272c option' => '-w',\n-00001cf0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00001d00: 6c69 6173 2720 3d3e 2027 2d2d 7772 6974 lias' => '--writ\n-00001d10: 6554 6f46 696c 6527 2c0a 0909 0909 0920 eToFile',...... \n-00001d20: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => \n-00001d30: 2777 7269 7465 546f 4669 6c65 272c 0a09 'writeToFile',..\n-00001d40: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00001d50: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-00001d60: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001d70: 6d65 2720 3d3e 2027 7061 724a 6f62 7327 me' => 'parJobs'\n-00001d80: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001d90: 6f70 7469 6f6e 2720 3d3e 2027 2d70 272c option' => '-p',\n-00001da0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00001db0: 6c69 6173 2720 3d3e 2027 2d2d 7061 724a lias' => '--parJ\n-00001dc0: 6f62 7327 2c0a 0909 0909 0920 2020 2027 obs',...... '\n-00001dd0: 2d63 665f 6b65 7927 203d 3e20 2770 6172 -cf_key' => 'par\n-00001de0: 4a6f 6273 272c 0a09 0909 0909 2020 2020 Jobs',...... \n-00001df0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00001e00: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00001e10: 7474 6572 6e27 203d 3e20 275c 415b 312d ttern' => '\\A[1-\n-00001e20: 395d 5c64 2a5c 5a27 292c 0a09 0909 094f 9]\\d*\\Z'),.....O\n-00001e30: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001e40: 6527 203d 3e20 2764 6562 7567 272c 0a09 e' => 'debug',..\n-00001e50: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00001e60: 696f 6e27 203d 3e20 272d 6427 2c0a 0909 ion' => '-d',...\n-00001e70: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00001e80: 7327 203d 3e20 272d 2d64 6562 7567 272c s' => '--debug',\n-00001e90: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k\n-00001ea0: 6579 2720 3d3e 2027 6465 6275 6727 2c0a ey' => 'debug',.\n-00001eb0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau\n-00001ec0: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... \n-00001ed0: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' =>\n-00001ee0: 2027 5c41 5b30 3132 5d5c 5a27 292c 0a09 '\\A[012]\\Z'),..\n-00001ef0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001f00: 2d6e 616d 6527 203d 3e20 276f 6e63 6527 -name' => 'once'\n-00001f10: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001f20: 6f70 7469 6f6e 2720 3d3e 2027 2d6f 272c option' => '-o',\n-00001f30: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-00001f40: 6c69 6173 2720 3d3e 2027 2d2d 6f6e 6365 lias' => '--once\n-00001f50: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-00001f60: 5f6b 6579 2720 3d3e 2027 6f6e 6365 272c _key' => 'once',\n-00001f70: 0a09 0909 0909 2020 2020 272d 6366 5f6e ...... '-cf_n\n-00001f80: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye\n-00001f90: 7327 2c20 276e 6f27 5d29 2c0a 0909 0909 s', 'no']),.....\n-00001fa0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001fb0: 6d65 2720 3d3e 2027 7072 696e 7427 2c0a me' => 'print',.\n-00001fc0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001fd0: 7469 6f6e 2720 3d3e 2027 2d2d 7072 696e tion' => '--prin\n-00001fe0: 7427 292c 0a09 0909 094f 7074 696f 6e2d t'),.....Option-\n-00001ff0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00002000: 2774 6d70 6469 7227 2c0a 0909 0909 0920 'tmpdir',...... \n-00002010: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00002020: 3d3e 2027 2d54 272c 0a09 0909 0909 2020 => '-T',...... \n-00002030: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00002040: 2027 2d2d 746d 7064 6972 272c 0a09 0909 '--tmpdir',....\n-00002050: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00002060: 3d3e 2027 746d 7044 6972 272c 0a09 0909 => 'tmpDir',....\n-00002070: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default'\n-00002080: 203d 3e20 2474 6d70 6469 7229 2c0a 0909 => $tmpdir),...\n-00002090: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000020a0: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup\n-000020b0: 526f 6f74 272c 0a09 0909 0909 2020 2020 Root',...... \n-000020c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000020d0: 272d 2d62 6163 6b75 7052 6f6f 7427 2c0a '--backupRoot',.\n-000020e0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-000020f0: 7927 203d 3e20 2762 6163 6b75 7052 6f6f y' => 'backupRoo\n-00002100: 7427 2c0a 0909 0909 0920 2020 2027 2d70 t',...... '-p\n-00002110: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'),\n-00002120: 0a23 2068 6964 6465 6e20 6f70 7469 6f6e .# hidden option\n-00002130: 730a 0909 0909 4f70 7469 6f6e 2d3e 6e65 s.....Option->ne\n-00002140: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr\n-00002150: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... \n-00002160: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00002170: 3e20 272d 2d70 7269 6e74 416c 6c27 2c0a > '--printAll',.\n-00002180: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde\n-00002190: 6e27 203d 3e20 2779 6573 2729 2c0a 0909 n' => 'yes'),...\n-000021a0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000021b0: 6e61 6d65 2720 3d3e 2027 7265 6164 4e6f name' => 'readNo\n-000021c0: 4c69 6e65 7327 2c0a 0909 0909 0920 2020 Lines',...... \n-000021d0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-000021e0: 2027 2d2d 7265 6164 4e6f 4c69 6e65 7327 '--readNoLines'\n-000021f0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00002200: 6b65 7927 203d 3e20 2772 6561 644e 6f4c key' => 'readNoL\n-00002210: 696e 6573 272c 0a09 0909 0909 2020 2020 ines',...... \n-00002220: 272d 6869 6464 656e 2720 3d3e 2027 7965 '-hidden' => 'ye\n-00002230: 7327 2c0a 0909 0909 0920 2020 2027 2d64 s',...... '-d\n-00002240: 6566 6175 6c74 2720 3d3e 2032 3030 3030 efault' => 20000\n-00002250: 290a 0909 2020 2020 5d0a 2020 2020 293b )... ]. );\n-00002260: 0a0a 0a24 4368 6563 6b50 6172 2d3e 6368 ...$CheckPar->ch\n-00002270: 6563 6b28 272d 6172 6776 2720 3d3e 205c eck('-argv' => \\\n-00002280: 4041 5247 562c 0a20 2020 2020 2020 2020 @ARGV,. \n-00002290: 2020 2020 2020 2020 272d 6865 6c70 2720 '-help' \n-000022a0: 3d3e 2024 4865 6c70 0a20 2020 2020 2020 => $Help. \n-000022b0: 2020 2020 2020 2020 2020 293b 0a0a 0a23 );...#\n-000022c0: 2041 7573 7765 7274 756e 6720 6465 7220 Auswertung der \n-000022d0: 5061 7261 6d65 7465 720a 6d79 2024 636f Parameter.my $co\n-000022e0: 6e66 6967 4669 6c65 203d 2024 4368 6563 nfigFile = $Chec\n-000022f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00002300: 5061 7228 2763 6f6e 6669 6746 696c 6527 Par('configFile'\n-00002310: 293b 0a6d 7920 2467 656e 6572 6174 6543 );.my $generateC\n-00002320: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che\n-00002330: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00002340: 6850 6172 2827 6765 6e65 7261 7465 2729 hPar('generate')\n-00002350: 3b0a 6d79 2024 7072 696e 7420 3d20 2443 ;.my $print = $C\n-00002360: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00002370: 6974 686f 7574 5061 7228 2770 7269 6e74 ithoutPar('print\n-00002380: 2729 3b0a 6d79 2024 6261 636b 7570 4469 ');.my $backupDi\n-00002390: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g\n-000023a0: 6574 4f70 7457 6974 6850 6172 2827 6261 etOptWithPar('ba\n-000023b0: 636b 7570 4469 7227 293b 0a6d 7920 2477 ckupDir');.my $w\n-000023c0: 7269 7465 546f 4669 6c65 203d 2024 4368 riteToFile = $Ch\n-000023d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000023e0: 7468 5061 7228 2777 7269 7465 546f 4669 thPar('writeToFi\n-000023f0: 6c65 2729 3b0a 6d79 2024 7365 6172 6368 le');.my $search\n-00002400: 5275 6c65 203d 2024 4368 6563 6b50 6172 Rule = $CheckPar\n-00002410: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00002420: 2773 6561 7263 6852 756c 6527 293b 2020 'searchRule'); \n-00002430: 2020 2320 7665 6374 6f72 0a6d 7920 2477 # vector.my $w\n-00002440: 7269 7465 4162 7350 6174 6820 3d20 2443 riteAbsPath = $C\n-00002450: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00002460: 6974 686f 7574 5061 7228 2777 7269 7465 ithoutPar('write\n-00002470: 4162 7350 6174 6827 293b 0a6d 7920 2470 AbsPath');.my $p\n-00002480: 6172 4a6f 6273 203d 2024 4368 6563 6b50 arJobs = $CheckP\n-00002490: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa\n-000024a0: 7228 2770 6172 4a6f 6273 2729 3b0a 6d79 r('parJobs');.my\n-000024b0: 2024 6465 6275 6720 3d20 2443 6865 636b $debug = $Check\n-000024c0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-000024d0: 6172 2827 6465 6275 6727 293b 0a6d 7920 ar('debug');.my \n-000024e0: 246f 6e63 6520 3d20 2443 6865 636b 5061 $once = $CheckPa\n-000024f0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-00002500: 5061 7228 276f 6e63 6527 293b 0a24 746d Par('once');.$tm\n-00002510: 7064 6972 203d 2024 4368 6563 6b50 6172 pdir = $CheckPar\n-00002520: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00002530: 2774 6d70 6469 7227 293b 0a6d 7920 2840 'tmpdir');.my (@\n-00002540: 6261 636b 7570 526f 6f74 2920 3d20 2824 backupRoot) = ($\n-00002550: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00002560: 5769 7468 5061 7228 2762 6163 6b75 7052 WithPar('backupR\n-00002570: 6f6f 7427 2929 3b0a 0a6d 7920 2470 7269 oot'));..my $pri\n-00002580: 6e74 416c 6c20 3d20 2443 6865 636b 5061 ntAll = $CheckPa\n-00002590: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-000025a0: 5061 7228 2770 7269 6e74 416c 6c27 293b Par('printAll');\n-000025b0: 0a24 7072 696e 7420 3d20 3120 6966 2024 .$print = 1 if $\n-000025c0: 7072 696e 7441 6c6c 3b0a 6d79 2024 7265 printAll;.my $re\n-000025d0: 6164 4e6f 4c69 6e65 7320 3d20 2443 6865 adNoLines = $Che\n-000025e0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-000025f0: 6850 6172 2827 7265 6164 4e6f 4c69 6e65 hPar('readNoLine\n-00002600: 7327 293b 0a0a 756e 6c65 7373 2028 2470 s');..unless ($p\n-00002610: 6172 4a6f 6273 290a 7b0a 2020 2020 6c6f arJobs).{. lo\n-00002620: 6361 6c20 2a46 494c 453b 0a20 2020 2069 cal *FILE;. i\n-00002630: 6620 286f 7065 6e28 4649 4c45 2c20 222f f (open(FILE, \"/\n-00002640: 7072 6f63 2f63 7075 696e 666f 2229 290a proc/cpuinfo\")).\n-00002650: 2020 2020 7b0a 096d 7920 246c 3b0a 0924 {..my $l;..$\n-00002660: 7061 724a 6f62 7320 3d20 313b 0a09 7768 parJobs = 1;..wh\n-00002670: 696c 6520 2824 6c20 3d20 3c46 494c 453e ile ($l = \n-00002680: 290a 097b 0a09 2020 2020 2470 6172 4a6f )..{.. $parJo\n-00002690: 6273 2b2b 2069 6620 246c 203d 7e20 2f70 bs++ if $l =~ /p\n-000026a0: 726f 6365 7373 6f72 2f3b 0a09 7d0a 0963 rocessor/;..}..c\n-000026b0: 6c6f 7365 2846 494c 4529 3b0a 2020 2020 lose(FILE);. \n-000026c0: 7d0a 2020 2020 2470 6172 4a6f 6273 203d }. $parJobs =\n-000026d0: 2032 2069 6620 2470 6172 4a6f 6273 203c 2 if $parJobs <\n-000026e0: 2032 3b0a 7d0a 0a69 6620 2824 6765 6e65 2;.}..if ($gene\n-000026f0: 7261 7465 436f 6e66 6967 4669 6c65 290a rateConfigFile).\n-00002700: 7b0a 2020 2020 6d79 2024 616e 7377 6572 {. my $answer\n-00002710: 203d 2027 7965 7327 3b0a 2020 2020 6966 = 'yes';. if\n-00002720: 2028 2d65 2024 6765 6e65 7261 7465 436f (-e $generateCo\n-00002730: 6e66 6967 4669 6c65 290a 2020 2020 7b0a nfigFile). {.\n-00002740: 0964 6f0a 097b 0a09 2020 2020 7072 696e .do..{.. prin\n-00002750: 7420 223c 2467 656e 6572 6174 6543 6f6e t \"<$generateCon\n-00002760: 6669 6746 696c 653e 2061 6c72 6561 6479 figFile> already\n-00002770: 2065 7869 7374 732e 204f 7665 7277 7269 exists. Overwri\n-00002780: 7465 3f5c 6e22 2c0a 0920 2020 2022 7965 te?\\n\",.. \"ye\n-00002790: 7320 2f20 6e6f 202d 3e20 223b 0a09 2020 s / no -> \";.. \n-000027a0: 2020 2461 6e73 7765 7220 3d20 3c53 5444 $answer = ;.. chomp \n-000027c0: 2461 6e73 7765 723b 0a09 7d20 7768 696c $answer;..} whil\n-000027d0: 6520 2824 616e 7377 6572 206e 6520 2779 e ($answer ne 'y\n-000027e0: 6573 2720 616e 6420 2461 6e73 7765 7220 es' and $answer \n-000027f0: 6e65 2027 6e6f 2729 3b0a 2020 2020 7d0a ne 'no');. }.\n-00002800: 2020 2020 6578 6974 2030 2069 6620 2461 exit 0 if $a\n-00002810: 6e73 7765 7220 6571 2027 6e6f 273b 0a0a nswer eq 'no';..\n-00002820: 2020 2020 6c6f 6361 6c20 2a46 494c 453b local *FILE;\n-00002830: 0a20 2020 206f 7065 6e28 4649 4c45 2c20 . open(FILE, \n-00002840: 223e 2024 6765 6e65 7261 7465 436f 6e66 \"> $generateConf\n-00002850: 6967 4669 6c65 2229 206f 720a 0964 6965 igFile\") or..die\n-00002860: 2022 636f 756c 6420 6e6f 7420 7772 6974 \"could not writ\n-00002870: 6520 746f 203c 2467 656e 6572 6174 6543 e to <$generateC\n-00002880: 6f6e 6669 6746 696c 653e 223b 0a20 2020 onfigFile>\";. \n-00002890: 2070 7269 6e74 2046 494c 4520 2474 656d print FILE $tem\n-000028a0: 706c 6174 6543 6f6e 6669 6746 696c 653b plateConfigFile;\n-000028b0: 0a20 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE)\n-000028c0: 3b0a 2020 2020 6578 6974 2030 3b0a 7d0a ;. exit 0;.}.\n-000028d0: 0a0a 6966 2028 2470 7269 6e74 290a 7b0a ..if ($print).{.\n-000028e0: 2020 2020 2443 6865 636b 5061 722d 3e70 $CheckPar->p\n-000028f0: 7269 6e74 2827 2d73 686f 7748 6964 6465 rint('-showHidde\n-00002900: 6e27 203d 3e20 2470 7269 6e74 416c 6c29 n' => $printAll)\n-00002910: 3b0a 7d0a 0a6d 7920 2470 724c 6f67 203d ;.}..my $prLog =\n-00002920: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new('\n-00002930: 2d6b 696e 6427 203d 3e20 5b27 493a 494e -kind' => ['I:IN\n-00002940: 464f 272c 2027 573a 5741 524e 494e 4727 FO', 'W:WARNING'\n-00002950: 2c20 2745 3a45 5252 4f52 272c 0a09 0909 , 'E:ERROR',....\n-00002960: 0920 2020 2020 2027 533a 5354 4154 4953 . 'S:STATIS\n-00002970: 5449 4327 2c20 2744 3a44 4542 5547 272c TIC', 'D:DEBUG',\n-00002980: 2027 563a 5645 5253 494f 4e27 5d2c 0a09 'V:VERSION'],..\n-00002990: 0909 2020 272d 746d 7064 6972 2720 3d3e .. '-tmpdir' =>\n-000029a0: 2024 746d 7064 6972 293b 0a24 6d61 696e $tmpdir);.$main\n-000029b0: 3a3a 5f5f 7072 4c6f 6720 3d20 2470 724c ::__prLog = $prL\n-000029c0: 6f67 3b20 2020 2320 7573 6564 2069 6e20 og; # used in \n-000029d0: 7275 6c65 730a 2470 724c 6f67 2d3e 666f rules.$prLog->fo\n-000029e0: 726b 2824 7265 7129 3b0a 0a24 7072 4c6f rk($req);..$prLo\n-000029f0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00002a00: 203d 3e20 2756 272c 0a09 2020 2020 2020 => 'V',.. \n-00002a10: 272d 7374 7227 203d 3e20 5b22 7374 6f72 '-str' => [\"stor\n-00002a20: 6542 6163 6b75 7053 6561 7263 682e 706c eBackupSearch.pl\n-00002a30: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA\n-00002a40: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION\"]);.\n-00002a50: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00002a60: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00002a70: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00002a80: 5b22 6d69 7373 696e 6720 7061 7261 6d65 [\"missing parame\n-00002a90: 7465 7273 2062 6163 6b75 7044 6972 2061 ters backupDir a\n-00002aa0: 6e64 2073 6561 7263 6852 756c 655c 6e24 nd searchRule\\n$\n-00002ab0: 4865 6c70 225d 2c0a 0920 2020 2020 2027 Help\"],.. '\n-00002ac0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n-00002ad0: 2075 6e6c 6573 7320 6465 6669 6e65 6420 unless defined \n-00002ae0: 2462 6163 6b75 7044 6972 2061 6e64 2064 $backupDir and d\n-00002af0: 6566 696e 6564 2024 7365 6172 6368 5275 efined $searchRu\n-00002b00: 6c65 3b0a 2470 724c 6f67 2d3e 7072 696e le;.$prLog->prin\n-00002b10: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-00002b20: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-00002b30: 3d3e 205b 226d 6973 7369 6e67 2070 6172 => [\"missing par\n-00002b40: 616d 6574 6572 2062 6163 6b75 7044 6972 ameter backupDir\n-00002b50: 5c6e 2448 656c 7022 5d2c 0a09 2020 2020 \\n$Help\"],.. \n-00002b60: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n-00002b70: 2020 2020 756e 6c65 7373 2064 6566 696e unless defin\n-00002b80: 6564 2024 6261 636b 7570 4469 723b 0a24 ed $backupDir;.$\n-00002b90: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002ba0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n-00002bb0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00002bc0: 6261 636b 7570 4469 7220 6469 7265 6374 backupDir direct\n-00002bd0: 6f72 7920 3c24 6261 636b 7570 4469 723e ory <$backupDir>\n-00002be0: 2064 6f65 7320 6e6f 7420 6578 6973 7420 does not exist \n-00002bf0: 2220 2e0a 0920 2020 2020 2022 6f72 2069 \" ... \"or i\n-00002c00: 7320 6e6f 7420 6163 6365 7369 626c 6522 s not accesible\"\n-00002c10: 5d2c 0a09 2020 2020 2020 272d 6578 6974 ],.. '-exit\n-00002c20: 2720 3d3e 2031 290a 2020 2020 756e 6c65 ' => 1). unle\n-00002c30: 7373 202d 7220 2462 6163 6b75 7044 6972 ss -r $backupDir\n-00002c40: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print(\n-00002c50: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00002c60: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00002c70: 205b 226d 6973 7369 6e67 2070 6172 616d [\"missing param\n-00002c80: 6574 6572 2073 6561 7263 6852 756c 655c eter searchRule\\\n-00002c90: 6e24 4865 6c70 225d 2c0a 0920 2020 2020 n$Help\"],.. \n-00002ca0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). \n-00002cb0: 2020 2075 6e6c 6573 7320 6465 6669 6e65 unless define\n-00002cc0: 6420 2473 6561 7263 6852 756c 653b 0a0a d $searchRule;..\n-00002cd0: 0a6d 7920 2473 5275 6c65 203d 2065 7661 .my $sRule = eva\n-00002ce0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new(\n-00002cf0: 272d 6c69 6e65 2720 3d3e 2024 7365 6172 '-line' => $sear\n-00002d00: 6368 5275 6c65 2c0a 0909 0920 2020 2020 chRule,.... \n-00002d10: 2020 272d 6b65 794e 616d 6527 203d 3e20 '-keyName' => \n-00002d20: 2773 6561 7263 6827 2c0a 0909 0920 2020 'search',.... \n-00002d30: 2020 2020 272d 6465 6275 6727 203d 3e20 '-debug' => \n-00002d40: 2464 6562 7567 2c0a 0909 0920 2020 2020 $debug,.... \n-00002d50: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n-00002d60: 724c 6f67 293b 0a0a 2470 724c 6f67 2d3e rLog);..$prLog->\n-00002d70: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00002d80: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s\n-00002d90: 7472 2720 3d3e 205b 2273 6561 7263 6869 tr' => [\"searchi\n-00002da0: 6e67 2077 6974 6820 7275 6c65 222c 2027 ng with rule\", '\n-00002db0: 2020 2720 2e0a 0909 0920 6a6f 696e 2827 ' ..... join('\n-00002dc0: 2027 2c20 407b 2473 5275 6c65 2d3e 6765 ', @{$sRule->ge\n-00002dd0: 744c 696e 6528 297d 295d 293b 0a0a 6966 tLine()})]);..if\n-00002de0: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. \n-00002df0: 6578 6974 2030 3b0a 7d0a 0a0a 6d79 2024 exit 0;.}...my $\n-00002e00: 616c 6c4c 696e 6b73 203d 206c 6174 654c allLinks = lateL\n-00002e10: 696e 6b73 2d3e 6e65 7728 272d 6469 7273 inks->new('-dirs\n-00002e20: 2720 3d3e 205b 2462 6163 6b75 7044 6972 ' => [$backupDir\n-00002e30: 5d2c 0a09 0909 2020 2020 2020 272d 6b69 ],.... '-ki\n-00002e40: 6e64 2720 3d3e 2027 7265 6375 7273 6976 nd' => 'recursiv\n-00002e50: 6553 6561 7263 6827 2c0a 0909 0920 2020 eSearch',.... \n-00002e60: 2020 2027 2d76 6572 626f 7365 2720 3d3e '-verbose' =>\n-00002e70: 2030 2c0a 0909 0920 2020 2020 2027 2d70 0,.... '-p\n-00002e80: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-00002e90: 3b0a 0a6d 7920 2461 6c6c 5374 6275 4469 ;..my $allStbuDi\n-00002ea0: 7273 203d 2024 616c 6c4c 696e 6b73 2d3e rs = $allLinks->\n-00002eb0: 6765 7441 6c6c 5374 6f72 6542 6163 6b75 getAllStoreBacku\n-00002ec0: 7044 6972 7328 293b 0a0a 0a23 2066 696c pDirs();...# fil\n-00002ed0: 7465 7220 7468 6520 7265 6c65 7661 6e74 ter the relevant\n-00002ee0: 2062 6163 6b75 7073 0a6d 7920 2840 6469 backups.my (@di\n-00002ef0: 7273 546f 5365 6172 6368 2920 3d20 2829 rsToSearch) = ()\n-00002f00: 3b0a 6966 2028 4062 6163 6b75 7052 6f6f ;.if (@backupRoo\n-00002f10: 7429 0a7b 0a20 2020 206d 7920 2464 3b0a t).{. my $d;.\n-00002f20: 2020 2020 666f 7265 6163 6820 2464 2028 foreach $d (\n-00002f30: 4062 6163 6b75 7052 6f6f 7429 0a20 2020 @backupRoot). \n-00002f40: 207b 0a09 756e 6c65 7373 2028 2464 203d {..unless ($d =\n-00002f50: 7e20 6d23 5c41 2f23 290a 097b 0a09 2020 ~ m#\\A/#)..{.. \n-00002f60: 2020 2464 203d 2022 2462 6163 6b75 7044 $d = \"$backupD\n-00002f70: 6972 2f24 6422 3b0a 097d 0a09 2470 724c ir/$d\";..}..$prL\n-00002f80: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002f90: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... \n-00002fa0: 2020 272d 7374 7227 203d 3e20 5b22 6469 '-str' => [\"di\n-00002fb0: 7265 6374 6f72 7920 3c24 643e 2064 6f65 rectory <$d> doe\n-00002fc0: 7320 6e6f 7420 6578 6973 7420 2220 2e0a s not exist \" ..\n-00002fd0: 0909 0909 2022 6f72 2069 7320 6e6f 7420 .... \"or is not \n-00002fe0: 6163 6365 7369 626c 6522 5d2c 0a09 0920 accesible\"],... \n-00002ff0: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00003000: 3129 0a09 2020 2020 756e 6c65 7373 202d 1).. unless -\n-00003010: 7220 2464 3b0a 0924 6420 3d20 263a 3a61 r $d;..$d = &::a\n-00003020: 6273 6f6c 7574 6550 6174 6828 2464 293b bsolutePath($d);\n-00003030: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00003040: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00003050: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00003060: 3e20 5b22 6469 7265 6374 6f72 7920 3c24 > [\"directory <$\n-00003070: 643e 2069 7320 6e6f 7420 6120 7375 6264 d> is not a subd\n-00003080: 6972 6563 746f 7279 2022 202e 0a09 0909 irectory \" .....\n-00003090: 0920 226f 6620 6261 636b 7570 4469 7220 . \"of backupDir \n-000030a0: 3c24 6261 636b 7570 4469 723e 225d 2c0a <$backupDir>\"],.\n-000030b0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' \n-000030c0: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles\n-000030d0: 7320 263a 3a69 7353 7562 4469 7228 2462 s &::isSubDir($b\n-000030e0: 6163 6b75 7044 6972 2c20 2464 293b 0a0a ackupDir, $d);..\n-000030f0: 0923 206e 6f77 2067 6574 2061 6c6c 2064 .# now get all d\n-00003100: 6972 7320 6672 6f6d 2040 2461 6c6c 5374 irs from @$allSt\n-00003110: 6275 4469 7273 2062 656c 6f77 2024 640a buDirs below $d.\n-00003120: 096d 7920 2461 3b0a 0966 6f72 6561 6368 .my $a;..foreach\n-00003130: 2024 6120 2840 2461 6c6c 5374 6275 4469 $a (@$allStbuDi\n-00003140: 7273 290a 097b 0a09 2020 2020 7075 7368 rs)..{.. push\n-00003150: 2040 6469 7273 546f 5365 6172 6368 2c20 @dirsToSearch, \n-00003160: 2461 0a09 0969 6620 2461 203d 7e20 2f5c $a...if $a =~ /\\\n-00003170: 4124 645c 2f2f 7320 6f72 2024 6120 3d7e A$d\\//s or $a =~\n-00003180: 202f 5c41 2464 5c7a 2f73 3b0a 097d 0a20 /\\A$d\\z/s;..}. \n-00003190: 2020 207d 0a20 2020 2028 4064 6972 7354 }. (@dirsT\n-000031a0: 6f53 6561 7263 6829 203d 2073 6f72 7420 oSearch) = sort \n-000031b0: 7b20 2461 2063 6d70 2024 6220 7d20 4064 { $a cmp $b } @d\n-000031c0: 6972 7354 6f53 6561 7263 683b 0a7d 0a65 irsToSearch;.}.e\n-000031d0: 6c73 650a 7b0a 2020 2020 2840 6469 7273 lse.{. (@dirs\n-000031e0: 546f 5365 6172 6368 2920 3d20 736f 7274 ToSearch) = sort\n-000031f0: 207b 2024 6120 636d 7020 2462 207d 2040 { $a cmp $b } @\n-00003200: 2461 6c6c 5374 6275 4469 7273 3b0a 7d0a $allStbuDirs;.}.\n-00003210: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00003220: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00003230: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00003240: 205b 226e 6f74 6869 6e67 2074 6f20 7365 [\"nothing to se\n-00003250: 6172 6368 2c20 6e6f 2062 6163 6b75 7020 arch, no backup \n-00003260: 6469 7265 6374 6f72 6965 7320 7370 6563 directories spec\n-00003270: 6966 6965 6422 5d2c 0a09 2020 2020 2020 ified\"],.. \n-00003280: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). \n-00003290: 2020 756e 6c65 7373 2040 6469 7273 546f unless @dirsTo\n-000032a0: 5365 6172 6368 3b0a 0a7b 0a20 2020 206d Search;..{. m\n-000032b0: 7920 2840 6f75 742c 2024 6429 3b0a 2020 y (@out, $d);. \n-000032c0: 2020 666f 7265 6163 6820 2464 2028 4064 foreach $d (@d\n-000032d0: 6972 7354 6f53 6561 7263 6829 0a20 2020 irsToSearch). \n-000032e0: 207b 0a09 7075 7368 2040 6f75 742c 2022 {..push @out, \"\n-000032f0: 2020 2464 223b 0a20 2020 207d 0a20 2020 $d\";. }. \n-00003300: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-00003310: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00003320: 0920 2027 2d73 7472 2720 3d3e 205b 2262 . '-str' => [\"b\n-00003330: 6163 6b75 7020 6469 7265 6374 6f72 6965 ackup directorie\n-00003340: 7320 746f 2073 6561 7263 6822 2c20 406f s to search\", @o\n-00003350: 7574 5d29 3b0a 7d0a 0a0a 6d79 2024 7061 ut]);.}...my $pa\n-00003360: 7246 6f72 6b20 3d20 7061 7261 6c6c 656c rFork = parallel\n-00003370: 466f 726b 2d3e 6e65 7728 272d 6d61 7850 Fork->new('-maxP\n-00003380: 6172 616c 6c65 6c27 203d 3e20 2470 6172 arallel' => $par\n-00003390: 4a6f 6273 2c0a 0909 0909 272d 7072 4c6f Jobs,.....'-prLo\n-000033a0: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m\n-000033b0: 7920 2474 696e 7953 6368 6564 203d 2074 y $tinySched = t\n-000033c0: 696e 7957 6169 7453 6368 6564 756c 6572 inyWaitScheduler\n-000033d0: 2d3e 6e65 7728 272d 7072 4c6f 6727 203d ->new('-prLog' =\n-000033e0: 3e20 2470 724c 6f67 293b 0a0a 230a 2320 > $prLog);..#.# \n-000033f0: 7365 6172 6368 2074 6872 6f75 6768 2061 search through a\n-00003400: 6c6c 2064 6972 6563 746f 7269 6573 2069 ll directories i\n-00003410: 6e20 4064 6972 7354 6f53 6561 7263 680a n @dirsToSearch.\n-00003420: 230a 6c6f 6361 6c20 2a46 494c 453b 0a6f #.local *FILE;.o\n-00003430: 7065 6e28 4649 4c45 2c20 223e 2024 7772 pen(FILE, \"> $wr\n-00003440: 6974 6554 6f46 696c 6522 2920 6f72 0a20 iteToFile\") or. \n-00003450: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-00003460: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-00003470: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00003480: 2263 616e 6e6f 7420 6f70 656e 203c 2477 \"cannot open <$w\n-00003490: 7269 7465 546f 4669 6c65 3e20 666f 7220 riteToFile> for \n-000034a0: 7772 6974 696e 6722 5d2c 0a09 0920 2027 writing\"],... '\n-000034b0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). \n-000034c0: 2069 6620 2477 7269 7465 546f 4669 6c65 if $writeToFile\n-000034d0: 3b0a 6d79 2028 2464 6972 546f 5365 6172 ;.my ($dirToSear\n-000034e0: 6368 2c20 256f 6e63 652c 2024 6e65 2c20 ch, %once, $ne, \n-000034f0: 246e 622c 2024 7329 3b0a 666f 7265 6163 $nb, $s);.foreac\n-00003500: 6820 2464 6972 546f 5365 6172 6368 2028 h $dirToSearch (\n-00003510: 4064 6972 7354 6f53 6561 7263 6829 0a7b @dirsToSearch).{\n-00003520: 0a20 2020 2075 6e6c 6573 7320 282d 7220 . unless (-r \n-00003530: 2224 6469 7254 6f53 6561 7263 682f 2463 \"$dirToSearch/$c\n-00003540: 6865 636b 5375 6d46 696c 6522 206f 720a heckSumFile\" or.\n-00003550: 0920 2020 202d 7220 2224 6469 7254 6f53 . -r \"$dirToS\n-00003560: 6561 7263 682f 2463 6865 636b 5375 6d46 earch/$checkSumF\n-00003570: 696c 652e 627a 3222 290a 2020 2020 7b0a ile.bz2\"). {.\n-00003580: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00003590: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000035a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000035b0: 205b 226e 6f20 7265 6164 6162 6c65 203c [\"no readable <\n-000035c0: 2463 6865 636b 5375 6d46 696c 653e 2069 $checkSumFile> i\n-000035d0: 6e20 2220 2e0a 0909 0909 2022 3c24 6469 n \" ...... \"<$di\n-000035e0: 7254 6f53 6561 7263 683e 202e 2e2e 2073 rToSearch> ... s\n-000035f0: 6b69 7070 696e 6722 5d29 3b0a 096e 6578 kipping\"]);..nex\n-00003600: 743b 0a20 2020 207d 0a23 2020 2020 6966 t;. }.# if\n-00003610: 2028 2d66 2022 2464 6972 546f 5365 6172 (-f \"$dirToSear\n-00003620: 6368 2f24 6368 6563 6b53 756d 4669 6c65 ch/$checkSumFile\n-00003630: 2e6e 6f74 4669 6e69 7368 6564 2229 0a20 .notFinished\"). \n-00003640: 2020 2075 6e6c 6573 7320 2826 3a3a 6368 unless (&::ch\n-00003650: 6563 6b49 6642 6163 6b75 7057 6173 4669 eckIfBackupWasFi\n-00003660: 6e69 7368 6564 2827 2d62 6163 6b75 7044 nished('-backupD\n-00003670: 6972 2720 3d3e 2022 2464 6972 546f 5365 ir' => \"$dirToSe\n-00003680: 6172 6368 222c 0a09 0909 0909 2020 2020 arch\",...... \n-00003690: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-000036a0: 6f67 2c0a 0909 0909 0927 2d63 6f75 6e74 og,......'-count\n-000036b0: 2720 3d3e 2034 3029 290a 2020 2020 7b0a ' => 40)). {.\n-000036c0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-000036d0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000036e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000036f0: 205b 2262 6163 6b75 7020 3c24 6469 7254 [\"backup <$dirT\n-00003700: 6f53 6561 7263 683e 206e 6f74 2066 696e oSearch> not fin\n-00003710: 6973 6865 6422 202e 0a09 0909 0920 2220 ished\" ...... \" \n-00003720: 2e2e 2e20 736b 6970 7069 6e67 225d 293b ... skipping\"]);\n-00003730: 0a09 6e65 7874 3b0a 2020 2020 7d0a 0a20 ..next;. }.. \n-00003740: 2020 2024 6e62 2b2b 3b0a 0a20 2020 2024 $nb++;.. $\n-00003750: 7320 3d20 223d 3d3d 2073 6561 7263 6869 s = \"=== searchi\n-00003760: 6e67 2069 6e20 3c24 6469 7254 6f53 6561 ng in <$dirToSea\n-00003770: 7263 683e 3a5c 6e22 3b0a 2020 2020 0a20 rch>:\\n\";. . \n-00003780: 2020 2070 7269 6e74 2024 733b 0a20 2020 print $s;. \n-00003790: 2070 7269 6e74 2046 494c 4520 2473 2069 print FILE $s i\n-000037a0: 6620 2477 7269 7465 546f 4669 6c65 2061 f $writeToFile a\n-000037b0: 6e64 206e 6f74 2024 7772 6974 6541 6273 nd not $writeAbs\n-000037c0: 5061 7468 3b0a 0a20 2020 206d 7920 2472 Path;.. my $r\n-000037d0: 6373 6620 3d0a 0972 6561 6443 6865 636b csf =..readCheck\n-000037e0: 5375 6d46 696c 652d 3e6e 6577 2827 2d63 SumFile->new('-c\n-000037f0: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => \n-00003800: 2224 6469 7254 6f53 6561 7263 682f 2463 \"$dirToSearch/$c\n-00003810: 6865 636b 5375 6d46 696c 6522 2c0a 0909 heckSumFile\",...\n-00003820: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' \n-00003830: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... \n-00003840: 2020 2020 272d 746d 7064 6972 2720 3d3e '-tmpdir' =>\n-00003850: 2024 746d 7064 6972 293b 0a23 2020 2020 $tmpdir);.# \n-00003860: 6d79 2024 6d65 7461 203d 2024 7263 7366 my $meta = $rcsf\n-00003870: 2d3e 6765 744d 6574 6156 616c 4669 656c ->getMetaValFiel\n-00003880: 6428 293b 0a23 2020 2020 6d79 2024 706f d();.# my $po\n-00003890: 7374 6669 7820 3d20 2824 246d 6574 617b stfix = ($$meta{\n-000038a0: 2770 6f73 7466 6978 277d 292d 3e5b 305d 'postfix'})->[0]\n-000038b0: 3b20 2020 2023 2070 6f73 7466 6978 2066 ; # postfix f\n-000038c0: 6f72 2063 6f6d 7072 6573 7369 6f6e 0a20 or compression. \n-000038d0: 2020 206d 7920 2470 6f73 7466 6978 203d my $postfix =\n-000038e0: 2024 7263 7366 2d3e 6765 7449 6e66 6f57 $rcsf->getInfoW\n-000038f0: 6974 6850 6172 2827 706f 7374 6669 7827 ithPar('postfix'\n-00003900: 293b 0a0a 2020 2020 6d79 2024 6a6f 6254 );.. my $jobT\n-00003910: 6f44 6f20 3d20 313b 0a20 2020 206d 7920 oDo = 1;. my \n-00003920: 2470 6172 466f 726b 546f 446f 203d 2031 $parForkToDo = 1\n-00003930: 3b0a 2020 2020 7768 696c 6520 2824 6a6f ;. while ($jo\n-00003940: 6254 6f44 6f20 3e20 3020 6f72 2024 7061 bToDo > 0 or $pa\n-00003950: 7246 6f72 6b54 6f44 6f20 3e20 3029 0a20 rForkToDo > 0). \n-00003960: 2020 207b 0a09 230a 0923 2063 6865 636b {..#..# check\n-00003970: 2066 6f72 206a 6f62 7320 646f 6e65 0a09 for jobs done..\n-00003980: 230a 096d 7920 246f 6c64 203d 2024 7061 #..my $old = $pa\n-00003990: 7246 6f72 6b2d 3e63 6865 636b 4f6e 6528 rFork->checkOne(\n-000039a0: 293b 0a09 6966 2028 246f 6c64 290a 097b );..if ($old)..{\n-000039b0: 0a09 2020 2020 6d79 2024 746d 704e 616d .. my $tmpNam\n-000039c0: 6520 3d20 246f 6c64 2d3e 6765 7428 272d e = $old->get('-\n-000039d0: 7768 6174 2720 3d3e 2027 696e 666f 2729 what' => 'info')\n-000039e0: 3b0a 0920 2020 206c 6f63 616c 202a 494e ;.. local *IN\n-000039f0: 3b0a 0920 2020 206f 7065 6e28 494e 2c20 ;.. open(IN, \n-00003a00: 2474 6d70 4e61 6d65 2920 6f72 0a09 0924 $tmpName) or...$\n-00003a10: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003a20: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',....\n-00003a30: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00003a40: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 [\"cannot open te\n-00003a50: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t\n-00003a60: 6d70 4e61 6d65 3e22 5d2c 0a09 0909 2020 mpName>\"],.... \n-00003a70: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n-00003a80: 293b 0a09 2020 2020 6d79 2024 6c3b 0a09 );.. my $l;..\n-00003a90: 2020 2020 7768 696c 6520 2824 6c20 3d20 while ($l = \n-00003aa0: 3c49 4e3e 290a 0920 2020 207b 0a09 0963 ).. {...c\n-00003ab0: 686f 7020 246c 3b0a 0909 6d79 2028 246d hop $l;...my ($m\n-00003ac0: 6435 7375 6d2c 2024 7369 7a65 2c20 246d d5sum, $size, $m\n-00003ad0: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt\n-00003ae0: 696d 652c 2024 7569 642c 2024 6769 642c ime, $uid, $gid,\n-00003af0: 0a09 0920 2020 2024 6669 6c65 6e61 6d65 ... $filename\n-00003b00: 2920 3d20 7370 6c69 7428 2f5c 732b 2f2c ) = split(/\\s+/,\n-00003b10: 2024 6c2c 2038 293b 0a0a 0909 6966 2028 $l, 8);....if (\n-00003b20: 246f 6e63 6529 0a09 097b 0a09 0920 2020 $once)...{... \n-00003b30: 206e 6578 7420 6966 2065 7869 7374 7320 next if exists \n-00003b40: 246f 6e63 657b 246d 6435 7375 6d7d 3b0a $once{$md5sum};.\n-00003b50: 0909 2020 2020 246f 6e63 657b 246d 6435 .. $once{$md5\n-00003b60: 7375 6d7d 203d 2031 3b0a 0909 7d0a 0a09 sum} = 1;...}...\n-00003b70: 0924 6669 6c65 6e61 6d65 203d 7e20 732f .$filename =~ s/\n-00003b80: 5c5c 3041 2f5c 6e2f 6f67 3b20 2020 2023 \\\\0A/\\n/og; #\n-00003b90: 2072 6573 746f 7265 2027 5c6e 270a 0909 restore '\\n'...\n-00003ba0: 2466 696c 656e 616d 6520 3d7e 2073 2f5c $filename =~ s/\\\n-00003bb0: 5c35 432f 5c5c 2f6f 673b 2020 2020 2320 \\5C/\\\\/og; # \n-00003bc0: 7265 7374 6f72 6520 275c 5c27 0a0a 0909 restore '\\\\'....\n-00003bd0: 6966 2028 2477 7269 7465 4162 7350 6174 if ($writeAbsPat\n-00003be0: 6829 0a09 097b 0a09 0920 2020 2024 7320 h)...{... $s \n-00003bf0: 3d20 2224 6469 7254 6f53 6561 7263 682f = \"$dirToSearch/\n-00003c00: 2466 696c 656e 616d 655c 6e22 3b0a 0909 $filename\\n\";...\n-00003c10: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... \n-00003c20: 2020 2024 7320 3d20 2224 6669 6c65 6e61 $s = \"$filena\n-00003c30: 6d65 5c6e 223b 0a09 097d 0a0a 0909 7072 me\\n\";...}....pr\n-00003c40: 696e 7420 2473 3b0a 0909 7072 696e 7420 int $s;...print \n-00003c50: 4649 4c45 2024 7320 6966 2024 7772 6974 FILE $s if $writ\n-00003c60: 6554 6f46 696c 653b 0a09 2020 2020 7d0a eToFile;.. }.\n-00003c70: 0920 2020 2063 6c6f 7365 2849 4e29 3b0a . close(IN);.\n-00003c80: 0920 2020 2075 6e6c 696e 6b20 2474 6d70 . unlink $tmp\n-00003c90: 4e61 6d65 3b0a 097d 0a0a 0923 0a09 2320 Name;..}...#..# \n-00003ca0: 7374 6172 7420 6120 6e65 7720 6a6f 620a start a new job.\n-00003cb0: 0923 0a09 6966 2028 246a 6f62 546f 446f .#..if ($jobToDo\n-00003cc0: 203e 2030 2061 6e64 2024 7061 7246 6f72 > 0 and $parFor\n-00003cd0: 6b2d 3e67 6574 4e6f 4672 6565 456e 7472 k->getNoFreeEntr\n-00003ce0: 6965 7328 2920 3e20 3029 0a09 7b0a 0920 ies() > 0)..{.. \n-00003cf0: 2020 206d 7920 2840 6c69 6e65 4275 6666 my (@lineBuff\n-00003d00: 6572 2c20 2469 293b 0a09 2020 2020 6d79 er, $i);.. my\n-00003d10: 2024 646f 6e65 203d 2030 3b0a 0920 2020 $done = 0;.. \n-00003d20: 2023 2072 6561 6420 2472 6561 644e 6f4c # read $readNoL\n-00003d30: 696e 6573 206c 696e 6573 0a09 2020 2020 ines lines.. \n-00003d40: 666f 7220 2824 646f 6e65 203d 2024 6920 for ($done = $i \n-00003d50: 3d20 3020 3b20 2469 203c 2024 7265 6164 = 0 ; $i < $read\n-00003d60: 4e6f 4c69 6e65 7320 3b20 2469 2b2b 290a NoLines ; $i++).\n-00003d70: 0920 2020 207b 0a09 096d 7920 246c 203d . {...my $l =\n-00003d80: 2024 7263 7366 2d3e 6e65 7874 4269 6e4c $rcsf->nextBinL\n-00003d90: 696e 6528 293b 0a09 0975 6e6c 6573 7320 ine();...unless \n-00003da0: 2824 6c29 0a09 097b 0a09 0920 2020 2024 ($l)...{... $\n-00003db0: 646f 6e65 203d 2031 3b0a 0909 2020 2020 done = 1;... \n-00003dc0: 6c61 7374 3b0a 0909 7d0a 0909 246e 652b last;...}...$ne+\n-00003dd0: 2b3b 0a09 0970 7573 6820 406c 696e 6542 +;...push @lineB\n-00003de0: 7566 6665 722c 2024 6c3b 0a09 2020 2020 uffer, $l;.. \n-00003df0: 7d0a 0920 2020 2024 6a6f 6254 6f44 6f20 }.. $jobToDo \n-00003e00: 3d20 406c 696e 6542 7566 6665 723b 0a09 = @lineBuffer;..\n-00003e10: 2020 2020 6d79 2024 746d 704e 616d 6520 my $tmpName \n-00003e20: 3d20 263a 3a75 6e69 7146 696c 654e 616d = &::uniqFileNam\n-00003e30: 6528 222f 2474 6d70 6469 722f 7374 6f72 e(\"/$tmpdir/stor\n-00003e40: 6542 6163 6b75 7053 6561 7263 682d 2229 eBackupSearch-\")\n-00003e50: 3b0a 0a09 2020 2020 6966 2028 246a 6f62 ;... if ($job\n-00003e60: 546f 446f 290a 0920 2020 207b 0a09 0924 ToDo).. {...$\n-00003e70: 7061 7246 6f72 6b2d 3e61 6464 5f6e 6f62 parFork->add_nob\n-00003e80: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function'\n-00003e90: 203d 3e20 5c26 6368 6563 6b52 756c 652c => \\&checkRule,\n-00003ea0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun\n-00003eb0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... \n-00003ec0: 2020 205b 2473 5275 6c65 2c20 5c40 6c69 [$sRule, \\@li\n-00003ed0: 6e65 4275 6666 6572 2c20 2470 724c 6f67 neBuffer, $prLog\n-00003ee0: 2c20 2463 6865 636b 5375 6d46 696c 652c , $checkSumFile,\n-00003ef0: 0a09 0909 0920 2020 2020 2020 2474 6d70 ..... $tmp\n-00003f00: 4e61 6d65 5d2c 0a09 0909 0920 2020 2020 Name],..... \n-00003f10: 2027 2d69 6e66 6f27 203d 3e20 2474 6d70 '-info' => $tmp\n-00003f20: 4e61 6d65 293b 0a09 0924 7469 6e79 5363 Name);...$tinySc\n-00003f30: 6865 642d 3e72 6573 6574 2829 3b0a 0920 hed->reset();.. \n-00003f40: 2020 207d 0a09 7d0a 0a09 230a 0923 2077 }..}...#..# w\n-00003f50: 6169 7420 0a09 230a 0924 7469 6e79 5363 ait ..#..$tinySc\n-00003f60: 6865 642d 3e77 6169 7428 293b 0a0a 0924 hed->wait();...$\n-00003f70: 7061 7246 6f72 6b54 6f44 6f20 3d20 2470 parForkToDo = $p\n-00003f80: 6172 466f 726b 2d3e 6765 744e 6f55 7365 arFork->getNoUse\n-00003f90: 6445 6e74 7269 6573 2829 3b0a 2020 2020 dEntries();. \n-00003fa0: 7d0a 7d0a 636c 6f73 6528 4649 4c45 2920 }.}.close(FILE) \n-00003fb0: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p\n-00003fc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00003fd0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n-00003fe0: 3d3e 205b 2263 616e 6e6f 7420 636c 6f73 => [\"cannot clos\n-00003ff0: 6520 3c24 7772 6974 6554 6f46 696c 653e e <$writeToFile>\n-00004000: 225d 2c0a 0909 2020 272d 6578 6974 2720 \"],... '-exit' \n-00004010: 3d3e 2031 290a 2020 2020 6966 2024 7772 => 1). if $wr\n-00004020: 6974 6554 6f46 696c 653b 0a0a 6d79 2024 iteToFile;..my $\n-00004030: 7320 3d20 2727 3b0a 2473 203d 2022 2c20 s = '';.$s = \", \n-00004040: 736b 6970 7065 6420 2220 2e20 7363 616c skipped \" . scal\n-00004050: 6172 2040 6469 7273 546f 5365 6172 6368 ar @dirsToSearch\n-00004060: 202d 2024 6e62 202e 2022 2062 6163 6b75 - $nb . \" backu\n-00004070: 7028 7329 220a 2020 2020 6966 2040 6469 p(s)\". if @di\n-00004080: 7273 546f 5365 6172 6368 203e 2024 6e62 rsToSearch > $nb\n-00004090: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print(\n-000040a0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-000040b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000040c0: 205b 2263 6865 636b 6564 2024 6e65 2065 [\"checked $ne e\n-000040d0: 6e74 7269 6573 2069 6e20 246e 6220 6261 ntries in $nb ba\n-000040e0: 636b 7570 7324 7322 5d29 3b0a 0a65 7869 ckups$s\"]);..exi\n-000040f0: 7420 303b 0a0a 0a0a 2323 2323 2323 2323 t 0;....########\n-00004100: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004110: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00004120: 0a73 7562 2063 6865 636b 5275 6c65 0a7b .sub checkRule.{\n-00004130: 0a20 2020 206d 7920 2473 5275 6c65 203d . my $sRule =\n-00004140: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $\n-00004150: 6c69 7374 4f66 4669 6c65 7320 3d20 7368 listOfFiles = sh\n-00004160: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL\n-00004170: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. \n-00004180: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile\n-00004190: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-000041a0: 2024 746d 7066 696c 6520 3d20 7368 6966 $tmpfile = shif\n-000041b0: 743b 0a0a 2020 2020 6c6f 6361 6c20 2a4f t;.. local *O\n-000041c0: 5554 3b0a 2020 2020 756e 6c65 7373 2028 UT;. unless (\n-000041d0: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, \"> $tm\n-000041e0: 7066 696c 6522 2929 0a20 2020 207b 0a09 pfile\")). {..\n-000041f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00004200: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00004210: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00004220: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 [\"cannot open te\n-00004230: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t\n-00004240: 6d70 6669 6c65 3e22 5d29 3b0a 0972 6574 mpfile>\"]);..ret\n-00004250: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; \n-00004260: 2020 2020 2020 2020 2020 2020 2020 2023 #\n-00004270: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. \n-00004280: 2020 6d79 2028 246c 293b 0a20 2020 206d my ($l);. m\n-00004290: 7920 2825 7479 7065 2920 3d20 2827 6469 y (%type) = ('di\n-000042a0: 7227 203d 3e20 2764 272c 0a09 0920 2027 r' => 'd',... '\n-000042b0: 7379 6d6c 696e 6b27 203d 3e20 276c 272c symlink' => 'l',\n-000042c0: 0a09 0920 2027 7069 7065 2720 3d3e 2027 ... 'pipe' => '\n-000042d0: 7027 2c0a 0909 2020 2773 6f63 6b65 7427 p',... 'socket'\n-000042e0: 203d 3e20 2773 272c 0a09 0920 2027 626c => 's',... 'bl\n-000042f0: 6f63 6b64 6576 2720 3d3e 2027 6227 2c0a ockdev' => 'b',.\n-00004300: 0909 2020 2763 6861 7264 6576 2720 3d3e .. 'chardev' =>\n-00004310: 2027 6327 293b 0a20 2020 206d 7920 2824 'c');. my ($\n-00004320: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, \n-00004330: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod\n-00004340: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime,\n-00004350: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime,\n-00004360: 0a09 2473 697a 652c 2024 7569 642c 2024 ..$size, $uid, $\n-00004370: 6769 642c 2024 6d6f 6465 2c20 2466 696c gid, $mode, $fil\n-00004380: 656e 616d 6529 3b0a 2020 2020 666f 7265 ename);. fore\n-00004390: 6163 6820 246c 2028 4024 6c69 7374 4f66 ach $l (@$listOf\n-000043a0: 4669 6c65 7329 0a20 2020 207b 0a09 6d79 Files). {..my\n-000043b0: 2028 4072 6574 2920 3d20 7265 6164 4368 (@ret) = readCh\n-000043c0: 6563 6b53 756d 4669 6c65 3a3a 6576 616c eckSumFile::eval\n-000043d0: 4269 6e4c 696e 6528 246c 2c20 2470 724c BinLine($l, $prL\n-000043e0: 6f67 2c20 2463 6865 636b 5375 6d46 696c og, $checkSumFil\n-000043f0: 6529 3b0a 096e 6578 7420 6966 2040 7265 e);..next if @re\n-00004400: 7420 213d 2031 323b 0a09 2824 6d64 3573 t != 12;..($md5s\n-00004410: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev\n-00004420: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac\n-00004430: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt\n-00004440: 696d 652c 2024 6174 696d 652c 0a09 2024 ime, $atime,.. $\n-00004450: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid\n-00004460: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena\n-00004470: 6d65 2920 3d20 4072 6574 3b0a 0a09 6d79 me) = @ret;...my\n-00004480: 2024 7479 7065 203d 2027 6627 3b0a 0924 $type = 'f';..$\n-00004490: 7479 7065 203d 2024 7479 7065 7b24 6d64 type = $type{$md\n-000044a0: 3573 756d 7d20 0969 6620 6578 6973 7473 5sum} .if exists\n-000044b0: 2024 7479 7065 7b24 6d64 3573 756d 7d3b $type{$md5sum};\n-000044c0: 0a09 6966 2028 2473 5275 6c65 2d3e 6368 ..if ($sRule->ch\n-000044d0: 6563 6b52 756c 6528 2466 696c 656e 616d eckRule($filenam\n-000044e0: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode,\n-000044f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime,\n-00004500: 2024 7569 642c 0a09 0909 2020 2020 2020 $uid,.... \n-00004510: 2467 6964 2c20 2474 7970 6529 203d 3d20 $gid, $type) == \n-00004520: 3129 0a09 7b0a 0920 2020 2024 6669 6c65 1)..{.. $file\n-00004530: 6e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 name =~ s/\\\\/\\\\5\n-00004540: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\\\' \n-00004550: 7374 6f72 6564 2061 7320 5c35 430a 0920 stored as \\5C.. \n-00004560: 2020 2024 6669 6c65 6e61 6d65 203d 7e20 $filename =~ \n-00004570: 732f 5c6e 2f5c 5c30 412f 736f 673b 2020 s/\\n/\\\\0A/sog; \n-00004580: 2023 2027 5c6e 2720 7374 6f72 6564 2061 # '\\n' stored a\n-00004590: 7320 5c30 410a 0a09 2020 2020 7072 696e s \\0A... prin\n-000045a0: 7420 4f55 5420 2224 6d64 3573 756d 2024 t OUT \"$md5sum $\n-000045b0: 7369 7a65 2024 6d6f 6465 2024 6374 696d size $mode $ctim\n-000045c0: 6520 246d 7469 6d65 2024 7569 6420 2467 e $mtime $uid $g\n-000045d0: 6964 2024 6669 6c65 6e61 6d65 5c6e 223b id $filename\\n\";\n-000045e0: 0a09 7d0a 2020 2020 7d0a 0a20 2020 2063 ..}. }.. c\n-000045f0: 6c6f 7365 284f 5554 293b 0a0a 2020 2020 lose(OUT);.. \n-00004600: 7265 7475 726e 2030 3b0a 7d0a return 0;.}.\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"}, {"source1": "./usr/bin/storeBackupSetupIsolatedMode", "source2": "./usr/bin/storeBackupSetupIsolatedMode", "has_internal_linenos": true, "unified_diff": "@@ -1,1051 +1,5 @@\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: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# \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 ..#...$mai\n-00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE\n-00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;..\n-00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use \n-00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn\n-00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib\n-00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f\n-00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. \n-00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. \n-00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se\n-00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink\n-000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo\n-000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel\n-000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f \n-000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh\n-000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file)..\n-000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link \n-00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file\n-00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub\n-00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1)\n-00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne \"/\").. {.\n-00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\\\n-00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. \n-00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. \n-00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f\n-00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. \n-00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, \n-000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF\n-000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);..\n-000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = \"/$file\"\n-000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR \"<$file> do\n-00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\\n\"\n-00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. }\n-00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= \"/\n-00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib\"; \n-00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den\n-00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. \n-00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = `\n-00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c\n-00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. \n-00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir\n-000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs\n-000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir;\n-000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir;\n-000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli\n-000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir(\"$absDi\n-00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file\"));. }\n-00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n-00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR \"<\n-00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e\n-00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\\n\"\n-00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp\n-00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. \n-00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif\n-00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return (\n-00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle\n-000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\\//\n-000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf\n-000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname.\n-000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $\n-000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~\n-000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\\/(.*)$/s\n-00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/'\n-00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '')\n-00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; \n-00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall\n-00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename\n-00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di\n-00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my \n-00000770: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = \n-00000780: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un\n-00000790: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, \"$re\n-000007a0: 7122 3b0a 0a0a 7265 7175 6972 6520 2763 q\";...require 'c\n-000007b0: 6865 636b 5061 7261 6d32 2e70 6c27 3b0a heckParam2.pl';.\n-000007c0: 7265 7175 6972 6520 2763 6865 636b 4f62 require 'checkOb\n-000007d0: 6a50 6172 2e70 6c27 3b0a 7265 7175 6972 jPar.pl';.requir\n-000007e0: 6520 2770 724c 6f67 2e70 6c27 3b0a 7265 e 'prLog.pl';.re\n-000007f0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p\n-00000800: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil\n-00000810: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir\n-00000820: 6520 2773 746f 7265 4261 636b 7570 4c69 e 'storeBackupLi\n-00000830: 622e 706c 273b 0a0a 0a3d 6865 6164 3120 b.pl';...=head1 \n-00000840: 4e41 4d45 0a0a 7374 6f72 6542 6163 6b75 NAME..storeBacku\n-00000850: 7053 6574 7570 4973 6f6c 6174 6564 4d6f pSetupIsolatedMo\n-00000860: 6465 2e70 6c20 2d20 636f 7079 206c 6173 de.pl - copy las\n-00000870: 7420 7374 6f72 6542 6163 6b75 7020 6d65 t storeBackup me\n-00000880: 7461 2064 6174 610a 6f66 2061 2073 6572 ta data.of a ser\n-00000890: 6965 7320 746f 2065 672e 2061 2073 7469 ies to eg. a sti\n-000008a0: 636b 0a0a 3d68 6561 6431 2044 4553 4352 ck..=head1 DESCR\n-000008b0: 4950 5449 4f4e 0a0a 636f 7069 6573 2074 IPTION..copies t\n-000008c0: 6865 206d 6574 6120 6461 7461 206f 6620 he meta data of \n-000008d0: 6120 6261 636b 7570 2074 6f20 616e 6f74 a backup to anot\n-000008e0: 6865 7220 6669 6c65 7379 7374 656d 2028 her filesystem (\n-000008f0: 6567 2e20 6120 6d65 6d6f 7279 0a73 7469 eg. a memory.sti\n-00000900: 636b 293b 206f 7074 696e 6f61 6c6c 7920 ck); optinoally \n-00000910: 6765 6e65 7261 7465 7320 6120 6375 7374 generates a cust\n-00000920: 6f6d 6973 6564 2076 6572 7369 6f6e 206f omised version o\n-00000930: 6620 7468 6520 7374 6f72 6542 6163 6b75 f the storeBacku\n-00000940: 700a 636f 6e66 6967 7572 6174 696f 6e20 p.configuration \n-00000950: 6669 6c65 0a54 6869 7320 6361 6e20 6265 file.This can be\n-00000960: 2075 7365 6420 746f 2067 656e 6572 6174 used to generat\n-00000970: 6520 696e 6372 656d 656e 7461 6c20 6261 e incremental ba\n-00000980: 636b 7570 2065 672e 2064 7572 696e 6720 ckup eg. during \n-00000990: 7472 6176 656c 2e0a 5468 6573 6520 6361 travel..These ca\n-000009a0: 6e20 6265 2069 6e74 6567 7261 7465 6420 n be integrated \n-000009b0: 696e 746f 2074 6865 2066 756c 6c20 6261 into the full ba\n-000009c0: 636b 7570 2076 6961 0a73 746f 7265 4261 ckup via.storeBa\n-000009d0: 636b 7570 4d65 7267 6549 736f 6c61 7465 ckupMergeIsolate\n-000009e0: 6442 6163 6b75 702e 706c 2061 6e64 2073 dBackup.pl and s\n-000009f0: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate\n-00000a00: 4261 636b 7570 2e70 6c0a 0a0a 3d68 6561 Backup.pl...=hea\n-00000a10: 6431 2053 594e 4f50 5349 530a 0a62 6173 d1 SYNOPSIS..bas\n-00000a20: 6564 206f 6e20 636f 6e66 6967 7572 6174 ed on configurat\n-00000a30: 696f 6e20 6669 6c65 3a0a 0a20 2020 2073 ion file:.. s\n-00000a40: 746f 7265 4261 636b 7570 5365 7475 7049 toreBackupSetupI\n-00000a50: 736f 6c61 7465 644d 6f64 652e 706c 202d solatedMode.pl -\n-00000a60: 6620 636f 6e66 6967 4669 6c65 202d 7420 f configFile -t \n-00000a70: 7461 7267 6574 4469 720a 2020 2020 0909 targetDir. ..\n-00000a80: 0909 5b2d 5320 7365 7269 6573 5d20 5b2d ..[-S series] [-\n-00000a90: 6720 6e65 7743 6f6e 6669 6746 696c 655d g newConfigFile]\n-00000aa0: 0a09 0909 095b 2d65 2065 7870 6c69 6369 .....[-e explici\n-00000ab0: 7442 6163 6b75 705d 205b 2d76 5d20 5b2d tBackup] [-v] [-\n-00000ac0: 465d 0a0a 0a6e 6f20 636f 6e66 6967 7572 F]...no configur\n-00000ad0: 6174 696f 6e20 6669 6c65 3a0a 0a20 2020 ation file:.. \n-00000ae0: 2073 746f 7265 4261 636b 7570 5365 7475 storeBackupSetu\n-00000af0: 7049 736f 6c61 7465 644d 6f64 652e 706c pIsolatedMode.pl\n-00000b00: 202d 6220 6261 636b 7570 4469 7220 2d74 -b backupDir -t\n-00000b10: 2074 6172 6765 7444 6972 0a20 2020 2009 targetDir. .\n-00000b20: 0909 095b 2d53 2073 6572 6965 735d 205b ...[-S series] [\n-00000b30: 2d65 2065 7870 6c69 6369 7442 6163 6b75 -e explicitBacku\n-00000b40: 705d 205b 2d76 5d20 5b2d 465d 0a0a 3d68 p] [-v] [-F]..=h\n-00000b50: 6561 6431 204f 5054 494f 4e53 0a0a 3d6f ead1 OPTIONS..=o\n-00000b60: 7665 7220 380a 0a3d 6974 656d 2042 3c2d ver 8..=item B<-\n-00000b70: 2d63 6f6e 6669 6746 696c 653e 2c20 423c -configFile>, B<\n-00000b80: 2d66 3e0a 0a20 2020 2028 6f72 6967 696e -f>.. (origin\n-00000b90: 616c 2c20 6e6f 6e2d 6973 6f6c 6174 6564 al, non-isolated\n-00000ba0: 206d 6f64 6529 2063 6f6e 6669 6775 7261 mode) configura\n-00000bb0: 7469 6f6e 2066 696c 6520 746f 2063 6f70 tion file to cop\n-00000bc0: 7920 666f 720a 2020 2020 6973 6f6c 6174 y for. isolat\n-00000bd0: 6564 206d 6f64 6520 616c 736f 2075 7365 ed mode also use\n-00000be0: 6420 746f 2067 6574 2076 616c 7565 2066 d to get value f\n-00000bf0: 6f72 2062 6163 6b75 7044 6972 2061 6e64 or backupDir and\n-00000c00: 2073 6572 6965 732e 0a20 2020 2059 6f75 series.. You\n-00000c10: 2063 616e 2061 6c73 6f20 7573 6520 616e can also use an\n-00000c20: 2061 6c72 6561 6479 2067 656e 6572 6174 already generat\n-00000c30: 6564 2063 6f6e 6669 6775 7261 7469 6f6e ed configuration\n-00000c40: 2066 696c 6520 746f 0a20 2020 2072 6570 file to. rep\n-00000c50: 6561 7420 7468 6520 7365 7420 7570 2077 eat the set up w\n-00000c60: 6974 6820 7468 6520 7361 6d65 2063 6f6e ith the same con\n-00000c70: 6669 6775 7261 7469 6f6e 2061 7320 696e figuration as in\n-00000c80: 2074 6865 2070 6173 742e 0a0a 3d69 7465 the past...=ite\n-00000c90: 6d20 423c 2d2d 7461 7267 6574 4469 723e m B<--targetDir>\n-00000ca0: 2c20 423c 2d74 3e0a 0a20 2020 2064 6972 , B<-t>.. dir\n-00000cb0: 6563 746f 7279 2077 6865 7265 2074 6f20 ectory where to \n-00000cc0: 7772 6974 6520 7468 6520 6e65 7720 636f write the new co\n-00000cd0: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file\n-00000ce0: 2066 6f72 0a20 2020 2069 736f 6c61 7465 for. isolate\n-00000cf0: 6420 6d6f 6465 2e20 416c 736f 2c20 7468 d mode. Also, th\n-00000d00: 6520 7365 7269 6573 2064 6972 6563 746f e series directo\n-00000d10: 7279 2069 7320 6372 6561 7465 6420 696e ry is created in\n-00000d20: 0a20 2020 2074 6172 6765 7444 6972 2061 . targetDir a\n-00000d30: 6e64 2074 6865 206d 6574 6120 6461 7461 nd the meta data\n-00000d40: 2066 726f 6d20 7468 6520 6c61 7374 2062 from the last b\n-00000d50: 6163 6b75 7020 696e 0a20 2020 2062 6163 ackup in. bac\n-00000d60: 6b75 7044 6972 2069 7320 636f 7069 6564 kupDir is copied\n-00000d70: 2074 6f20 7461 7267 6574 4469 722f 7365 to targetDir/se\n-00000d80: 7269 6573 0a0a 3d69 7465 6d20 423c 2d2d ries..=item B<--\n-00000d90: 6765 6e65 7261 7465 3e2c 2042 3c2d 673e generate>, B<-g>\n-00000da0: 0a0a 2020 2020 2870 6174 6820 616e 6429 .. (path and)\n-00000db0: 2066 696c 6520 6e61 6d65 206f 6620 7468 file name of th\n-00000dc0: 6520 636f 6e66 6967 7572 6174 696f 6e20 e configuration \n-00000dd0: 6669 6c65 2074 6f20 6765 6e65 7261 7465 file to generate\n-00000de0: 2e0a 2020 2020 4465 6661 756c 7420 6973 .. Default is\n-00000df0: 2069 736f 6c61 7465 2d3c 6e61 6d65 2073 isolate- in. \n-00000e20: 2074 6865 2073 616d 6520 6469 7265 6374 the same direct\n-00000e30: 6f72 7920 6173 2063 6f6e 6669 6746 696c ory as configFil\n-00000e40: 650a 0a3d 6974 656d 2042 3c2d 2d62 6163 e..=item B<--bac\n-00000e50: 6b75 7044 6972 3e2c 2042 3c2d 623e 0a0a kupDir>, B<-b>..\n-00000e60: 2020 2020 6261 636b 7570 2064 6972 6563 backup direc\n-00000e70: 746f 7279 2066 726f 6d20 7768 6963 6820 tory from which \n-00000e80: 6d65 7461 2064 6174 6120 6861 7665 2074 meta data have t\n-00000e90: 6f20 6265 0a20 2020 2063 6f70 6965 6420 o be. copied \n-00000ea0: 6567 2e20 6f6e 2061 6e20 7573 6220 7374 eg. on an usb st\n-00000eb0: 6963 6b2e 0a20 2020 2049 6620 6d6f 7265 ick.. If more\n-00000ec0: 2074 6861 6e20 6f6e 6520 7365 7269 6573 than one series\n-00000ed0: 2065 7869 7374 7320 696e 2074 6869 7320 exists in this \n-00000ee0: 6261 636b 7570 2c0a 2020 2020 796f 7520 backup,. you \n-00000ef0: 6861 7665 2074 6f20 7370 6563 6966 7920 have to specify \n-00000f00: 6f70 7469 6f6e 2073 6572 6965 7320 616c option series al\n-00000f10: 736f 0a0a 3d69 7465 6d20 423c 2d2d 7365 so..=item B<--se\n-00000f20: 7269 6573 3e2c 2042 3c2d 533e 0a0a 2020 ries>, B<-S>.. \n-00000f30: 2020 7365 7269 6573 206f 6620 7768 6963 series of whic\n-00000f40: 6820 6d65 7461 2064 6174 6120 6861 7665 h meta data have\n-00000f50: 2074 6f20 6265 2063 6f70 6965 6420 746f to be copied to\n-00000f60: 2074 6172 6765 7444 6972 2e0a 2020 2020 targetDir.. \n-00000f70: 4861 7320 746f 2062 6520 7370 6563 6966 Has to be specif\n-00000f80: 6965 6420 6966 206d 6f72 6520 7468 616e ied if more than\n-00000f90: 206f 6e65 2073 6572 6965 7320 6578 6973 one series exis\n-00000fa0: 740a 2020 2020 696e 2062 6163 6b75 7044 t. in backupD\n-00000fb0: 6972 0a0a 3d69 7465 6d20 423c 2d2d 6578 ir..=item B<--ex\n-00000fc0: 706c 6963 6974 4261 636b 7570 3e2c 2042 plicitBackup>, B\n-00000fd0: 3c2d 653e 0a0a 2020 2020 6578 706c 6963 <-e>.. explic\n-00000fe0: 6974 2042 6163 6b75 7020 7768 6963 6820 it Backup which \n-00000ff0: 6861 7320 746f 2062 6520 636f 7069 6564 has to be copied\n-00001000: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is \n-00001010: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup \n-00001020: 6f66 2074 6865 2073 7065 6369 6669 6564 of the specified\n-00001030: 2073 6572 6965 730a 0a3d 6974 656d 2042 series..=item B\n-00001040: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<-\n-00001050: 763e 0a0a 2020 2020 6765 6e65 7261 7465 v>.. generate\n-00001060: 2076 6572 626f 7365 206d 6573 7361 6765 verbose message\n-00001070: 730a 0a3d 6974 656d 2042 3c2d 2d66 6f72 s..=item B<--for\n-00001080: 6365 3e2c 2042 3c2d 463e 0a0a 2020 2020 ce>, B<-F>.. \n-00001090: 666f 7263 6520 7573 6167 6520 6f66 206c force usage of l\n-000010a0: 6173 7420 6261 636b 7570 2028 7769 7468 ast backup (with\n-000010b0: 206c 6174 654c 696e 6b73 292c 2065 7665 lateLinks), eve\n-000010c0: 6e20 6974 2069 6620 6861 730a 2020 2020 n it if has. \n-000010d0: 6e6f 7420 6265 656e 2063 6f6d 706c 6574 not been complet\n-000010e0: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac\n-000010f0: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup.\n-00001100: 706c 0a0a 3d62 6163 6b0a 0a3d 6865 6164 pl..=back..=head\n-00001110: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop\n-00001120: 7972 6967 6874 2028 6329 2032 3031 322d yright (c) 2012-\n-00001130: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo\n-00001140: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R\n-00001150: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe\n-00001160: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU \n-00001170: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n-00001180: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any\n-00001190: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version..\n-000011a0: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help =\n-000011b0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text(\n-000011c0: 2430 293b 0a0a 2670 7269 6e74 5665 7273 $0);..&printVers\n-000011d0: 696f 6e28 5c40 4152 4756 2c20 272d 5627 ion(\\@ARGV, '-V'\n-000011e0: 2c20 272d 2d76 6572 7369 6f6e 2729 3b0a , '--version');.\n-000011f0: 0a6d 7920 2443 6865 636b 5061 7220 3d0a .my $CheckPar =.\n-00001200: 2020 2020 4368 6563 6b50 6172 616d 2d3e CheckParam->\n-00001210: 6e65 7728 272d 616c 6c6f 774c 6973 7473 new('-allowLists\n-00001220: 2720 3d3e 2027 6e6f 272c 0a09 0920 2020 ' => 'no',... \n-00001230: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt\n-00001240: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00001250: 203d 3e20 2762 6163 6b75 7044 6972 272c => 'backupDir',\n-00001260: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00001270: 7074 696f 6e27 203d 3e20 272d 6227 2c0a ption' => '-b',.\n-00001280: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al\n-00001290: 6961 7327 203d 3e20 272d 2d62 6163 6b75 ias' => '--backu\n-000012a0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... \n-000012b0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-000012c0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-000012d0: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n-000012e0: 636f 6e66 6967 4669 6c65 5d27 292c 0a09 configFile]'),..\n-000012f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001300: 2d6e 616d 6527 203d 3e20 2773 6572 6965 -name' => 'serie\n-00001310: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c\n-00001320: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d53 l_option' => '-S\n-00001330: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001340: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7365 _alias' => '--se\n-00001350: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... \n-00001360: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00001370: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-00001380: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back\n-00001390: 7570 4469 725d 2729 2c0a 0909 0909 4f70 upDir]'),.....Op\n-000013a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000013b0: 2720 3d3e 2027 6578 706c 6963 6974 4261 ' => 'explicitBa\n-000013c0: 636b 7570 272c 0a09 0909 0909 2020 2020 ckup',...... \n-000013d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000013e0: 272d 6527 2c0a 0909 0909 0920 2020 2027 '-e',...... '\n-000013f0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-00001400: 2d65 7870 6c69 6369 7442 6163 6b75 7027 -explicitBackup'\n-00001410: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par\n-00001420: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),..\n-00001430: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00001440: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi\n-00001450: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... \n-00001460: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001470: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... \n-00001480: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001490: 2d2d 636f 6e66 6967 4669 6c65 272c 0a09 --configFile',..\n-000014a0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-000014b0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n-000014c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-000014d0: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi\n-000014e0: 725d 2729 2c0a 0909 0909 4f70 7469 6f6e r]'),.....Option\n-000014f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00001500: 2027 7461 7267 6574 4469 7227 2c0a 0909 'targetDir',...\n-00001510: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00001520: 6f6e 2720 3d3e 2027 2d74 272c 0a09 0909 on' => '-t',....\n-00001530: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-00001540: 2720 3d3e 2027 2d2d 7461 7267 6574 4469 ' => '--targetDi\n-00001550: 7227 2c0a 0909 0909 0920 2020 2027 2d70 r',...... '-p\n-00001560: 6172 616d 2720 3d3e 2027 7965 7327 2c0a aram' => 'yes',.\n-00001570: 2309 0909 0909 2020 2020 272d 6d75 7374 #..... '-must\n-00001580: 5f62 6527 203d 3e20 2779 6573 2729 2c0a _be' => 'yes'),.\n-00001590: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),.....\n-000015a0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000015b0: 6d65 2720 3d3e 2027 6765 6e65 7261 7465 me' => 'generate\n-000015c0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-000015d0: 5f6f 7074 696f 6e27 203d 3e20 272d 6727 _option' => '-g'\n-000015e0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000015f0: 616c 6961 7327 203d 3e20 272d 2d67 656e alias' => '--gen\n-00001600: 6572 6174 6527 2c0a 0909 0909 0920 2020 erate',...... \n-00001610: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye\n-00001620: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o\n-00001630: 6e6c 795f 6966 2720 3d3e 2027 5b63 6f6e nly_if' => '[con\n-00001640: 6669 6746 696c 655d 2729 2c0a 0909 0909 figFile]'),.....\n-00001650: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001660: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose'\n-00001670: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001680: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v',\n-00001690: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a\n-000016a0: 6c69 6173 2720 3d3e 2027 2d2d 7665 7262 lias' => '--verb\n-000016b0: 6f73 6527 292c 0a09 0909 094f 7074 696f ose'),.....Optio\n-000016c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-000016d0: 3e20 2766 6f72 6365 272c 0a09 0909 0909 > 'force',......\n-000016e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-000016f0: 203d 3e20 272d 4627 2c0a 0909 0909 0920 => '-F',...... \n-00001700: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' =\n-00001710: 3e20 272d 2d66 6f72 6365 2729 0a09 0909 > '--force')....\n-00001720: 095d 293b 0a0a 2443 6865 636b 5061 722d .]);..$CheckPar-\n-00001730: 3e63 6865 636b 2827 2d61 7267 7627 203d >check('-argv' =\n-00001740: 3e20 5c40 4152 4756 2c0a 2020 2020 2020 > \\@ARGV,. \n-00001750: 2020 2020 2020 2020 2020 2027 2d68 656c '-hel\n-00001760: 7027 203d 3e20 2448 656c 700a 2020 2020 p' => $Help. \n-00001770: 2020 2020 2020 2020 2020 2020 2029 3b0a );.\n-00001780: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir =\n-00001790: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000017a0: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu\n-000017b0: 7044 6972 2729 3b0a 6d79 2024 7365 7269 pDir');.my $seri\n-000017c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-000017d0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s\n-000017e0: 6572 6965 7327 293b 2020 2320 6d75 7374 eries'); # must\n-000017f0: 2062 6520 7370 6563 6966 6965 6420 6966 be specified if\n-00001800: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00001810: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001820: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001830: 2020 2023 206d 6f72 6520 7468 616e 2031 # more than 1\n-00001840: 2073 6572 6965 7320 6578 6973 740a 6d79 series exist.my\n-00001850: 2024 6578 706c 6963 6974 4261 636b 7570 $explicitBackup\n-00001860: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00001870: 744f 7074 5769 7468 5061 7228 2765 7870 tOptWithPar('exp\n-00001880: 6c69 6369 7442 6163 6b75 7027 293b 0a6d licitBackup');.m\n-00001890: 7920 2463 6f6e 6669 6746 696c 6520 3d20 y $configFile = \n-000018a0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-000018b0: 7457 6974 6850 6172 2827 636f 6e66 6967 tWithPar('config\n-000018c0: 4669 6c65 2729 3b0a 6d79 2024 6765 6e65 File');.my $gene\n-000018d0: 7261 7465 436f 6e66 6967 4669 6c65 203d rateConfigFile =\n-000018e0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-000018f0: 7074 5769 7468 5061 7228 2767 656e 6572 ptWithPar('gener\n-00001900: 6174 6527 293b 0a6d 7920 2474 6172 6765 ate');.my $targe\n-00001910: 7444 6972 203d 2024 4368 6563 6b50 6172 tDir = $CheckPar\n-00001920: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00001930: 2774 6172 6765 7444 6972 2729 3b0a 6d79 'targetDir');.my\n-00001940: 2024 7665 7262 6f73 6520 3d20 2443 6865 $verbose = $Che\n-00001950: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00001960: 686f 7574 5061 7228 2776 6572 626f 7365 houtPar('verbose\n-00001970: 2729 3b0a 6d79 2024 666f 7263 6520 3d20 ');.my $force = \n-00001980: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001990: 7457 6974 686f 7574 5061 7228 2766 6f72 tWithoutPar('for\n-000019a0: 6365 2729 3b0a 0a0a 6d79 2024 7072 4c6f ce');...my $prLo\n-000019b0: 673b 0a6d 7920 2824 7072 4c6f 674b 696e g;.my ($prLogKin\n-000019c0: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN',\n-000019d0: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',..\n-000019e0: 0920 2020 2749 3a49 4e46 4f27 2c0a 0909 . 'I:INFO',...\n-000019f0: 2020 2027 573a 5741 524e 494e 4727 2c0a 'W:WARNING',.\n-00001a00: 0909 2020 2027 453a 4552 524f 5227 5d3b .. 'E:ERROR'];\n-00001a10: 0a24 7072 4c6f 6720 3d20 7072 696e 744c .$prLog = printL\n-00001a20: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' \n-00001a30: 3d3e 2024 7072 4c6f 674b 696e 6429 3b0a => $prLogKind);.\n-00001a40: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00001a50: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00001a60: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00001a70: 205b 2270 6c65 6173 6520 6465 6669 6e65 [\"please define\n-00001a80: 203c 636f 6e66 6967 4669 6c65 3e20 6f72 or\n-00001a90: 203c 6261 636b 7570 4469 723e 225d 2c0a \"],.\n-00001aa0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00001ab0: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless \n-00001ac0: 2824 636f 6e66 6967 4669 6c65 206f 7220 ($configFile or \n-00001ad0: 2462 6163 6b75 7044 6972 293b 0a0a 0a6d $backupDir);...m\n-00001ae0: 7920 246f 7468 6572 4261 636b 7570 5365 y $otherBackupSe\n-00001af0: 7269 6573 203d 2075 6e64 6566 3b0a 6d79 ries = undef;.my\n-00001b00: 2024 6c61 7465 4c69 6e6b 7320 3d20 756e $lateLinks = un\n-00001b10: 6465 663b 0a6d 7920 246c 6174 6543 6f6d def;.my $lateCom\n-00001b20: 7072 6573 7320 3d20 756e 6465 663b 0a6d press = undef;.m\n-00001b30: 7920 2475 7365 4f6c 6443 6f6e 6669 6720 y $useOldConfig \n-00001b40: 3d20 303b 0a69 6620 2824 636f 6e66 6967 = 0;.if ($config\n-00001b50: 4669 6c65 2920 2020 2023 2067 6574 2069 File) # get i\n-00001b60: 6e66 6f72 6d61 7469 6f6e 2066 726f 6d20 nformation from \n-00001b70: 636f 6e66 6967 2066 696c 650a 7b0a 2020 config file.{. \n-00001b80: 2020 6d79 2024 636f 6e66 4f6c 6420 3d0a my $confOld =.\n-00001b90: 0943 6865 636b 5061 7261 6d2d 3e6e 6577 .CheckParam->new\n-00001ba0: 2827 2d63 6f6e 6669 6746 696c 6527 203d ('-configFile' =\n-00001bb0: 3e20 272d 6627 2c0a 0909 0927 2d6c 6973 > '-f',....'-lis\n-00001bc0: 7427 203d 3e20 5b0a 0909 0920 2020 204f t' => [.... O\n-00001bd0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001be0: 6527 203d 3e20 276f 6c64 436f 6e66 6967 e' => 'oldConfig\n-00001bf0: 4669 6c65 272c 0a09 0909 0909 272d 636c File',......'-cl\n-00001c00: 5f6f 7074 696f 6e27 203d 3e20 272d 6627 _option' => '-f'\n-00001c10: 2c0a 0909 0909 0927 2d70 6172 616d 2720 ,......'-param' \n-00001c20: 3d3e 2027 7965 7327 292c 0a09 0909 2020 => 'yes'),.... \n-00001c30: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n-00001c40: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup\n-00001c50: 4469 7227 2c0a 0909 0909 0927 2d63 665f Dir',......'-cf_\n-00001c60: 6b65 7927 203d 3e20 2762 6163 6b75 7044 key' => 'backupD\n-00001c70: 6972 272c 0a09 0909 0909 272d 7061 7261 ir',......'-para\n-00001c80: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n-00001c90: 0920 2020 204f 7074 696f 6e2d 3e6e 6577 . Option->new\n-00001ca0: 2827 2d6e 616d 6527 203d 3e20 2773 6572 ('-name' => 'ser\n-00001cb0: 6965 7327 2c0a 0909 0909 0927 2d63 665f ies',......'-cf_\n-00001cc0: 6b65 7927 203d 3e20 2773 6572 6965 7327 key' => 'series'\n-00001cd0: 2c0a 0909 0909 0927 2d64 6566 6175 6c74 ,......'-default\n-00001ce0: 2720 3d3e 2027 6465 6661 756c 7427 292c ' => 'default'),\n-00001cf0: 0a09 0909 2020 2020 4f70 7469 6f6e 2d3e .... Option->\n-00001d00: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001d10: 6c61 7465 4c69 6e6b 7327 2c0a 0909 0909 lateLinks',.....\n-00001d20: 0927 2d63 665f 6b65 7927 203d 3e20 276c .'-cf_key' => 'l\n-00001d30: 6174 654c 696e 6b73 272c 0a09 0909 0909 ateLinks',......\n-00001d40: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' =\n-00001d50: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no'])\n-00001d60: 2c0a 0909 0920 2020 204f 7074 696f 6e2d ,.... Option-\n-00001d70: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-00001d80: 276c 6174 6543 6f6d 7072 6573 7327 2c0a 'lateCompress',.\n-00001d90: 0909 0909 0927 2d6f 6e6c 795f 6966 2720 .....'-only_if' \n-00001da0: 3d3e 2027 5b6c 6174 654c 696e 6b73 5d27 => '[lateLinks]'\n-00001db0: 2c0a 0909 0909 0927 2d63 665f 6b65 7927 ,......'-cf_key'\n-00001dc0: 203d 3e20 276c 6174 6543 6f6d 7072 6573 => 'lateCompres\n-00001dd0: 7327 2c0a 0909 0909 0927 2d63 665f 6e6f s',......'-cf_no\n-00001de0: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes\n-00001df0: 272c 2027 6e6f 275d 292c 0a09 0909 2020 ', 'no']),.... \n-00001e00: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('-\n-00001e10: 6e61 6d65 2720 3d3e 2027 6d65 7267 6542 name' => 'mergeB\n-00001e20: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',......\n-00001e30: 272d 6366 5f6b 6579 2720 3d3e 2027 6d65 '-cf_key' => 'me\n-00001e40: 7267 6542 6163 6b75 7044 6972 272c 0a09 rgeBackupDir',..\n-00001e50: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => \n-00001e60: 2779 6573 2729 2c0a 0909 095d 293b 0a20 'yes'),....]);. \n-00001e70: 2020 2024 636f 6e66 4f6c 642d 3e63 6865 $confOld->che\n-00001e80: 636b 2827 2d61 7267 7627 203d 3e20 5b27 ck('-argv' => ['\n-00001e90: 2d66 2720 3d3e 2024 636f 6e66 6967 4669 -f' => $configFi\n-00001ea0: 6c65 5d2c 0a09 0920 2020 2027 2d68 656c le],... '-hel\n-00001eb0: 7027 203d 3e20 2263 616e 6e6f 7420 7265 p' => \"cannot re\n-00001ec0: 6164 2066 696c 6520 3c24 636f 6e66 6967 ad file <$config\n-00001ed0: 4669 6c65 3e5c 6e22 2c0a 0909 2020 2020 File>\\n\",... \n-00001ee0: 272d 6967 6e6f 7265 4164 6469 7469 6f6e '-ignoreAddition\n-00001ef0: 616c 4b65 7973 2720 3d3e 2031 293b 0a0a alKeys' => 1);..\n-00001f00: 2020 2020 6d79 2024 6d65 7267 6542 6163 my $mergeBac\n-00001f10: 6b75 7044 6972 203d 2024 636f 6e66 4f6c kupDir = $confOl\n-00001f20: 642d 3e67 6574 4f70 7457 6974 6850 6172 d->getOptWithPar\n-00001f30: 2827 6d65 7267 6542 6163 6b75 7044 6972 ('mergeBackupDir\n-00001f40: 2729 3b0a 2020 2020 6966 2028 246d 6572 ');. if ($mer\n-00001f50: 6765 4261 636b 7570 4469 7229 0a20 2020 geBackupDir). \n-00001f60: 207b 0a09 2462 6163 6b75 7044 6972 203d {..$backupDir =\n-00001f70: 2024 636f 6e66 4f6c 642d 3e67 6574 4f70 $confOld->getOp\n-00001f80: 7457 6974 6850 6172 2827 6d65 7267 6542 tWithPar('mergeB\n-00001f90: 6163 6b75 7044 6972 2729 3b0a 0924 7461 ackupDir');..$ta\n-00001fa0: 7267 6574 4469 7220 3d20 2463 6f6e 664f rgetDir = $confO\n-00001fb0: 6c64 2d3e 6765 744f 7074 5769 7468 5061 ld->getOptWithPa\n-00001fc0: 7228 2762 6163 6b75 7044 6972 2729 3b0a r('backupDir');.\n-00001fd0: 0924 7573 654f 6c64 436f 6e66 6967 203d .$useOldConfig =\n-00001fe0: 2031 3b0a 2020 2020 7d0a 2020 2020 656c 1;. }. el\n-00001ff0: 7365 0a20 2020 207b 0a09 2462 6163 6b75 se. {..$backu\n-00002000: 7044 6972 203d 2024 636f 6e66 4f6c 642d pDir = $confOld-\n-00002010: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00002020: 6261 636b 7570 4469 7227 293b 0a20 2020 backupDir');. \n-00002030: 207d 0a20 2020 2024 7365 7269 6573 203d }. $series =\n-00002040: 2024 636f 6e66 4f6c 642d 3e67 6574 4f70 $confOld->getOp\n-00002050: 7457 6974 6850 6172 2827 7365 7269 6573 tWithPar('series\n-00002060: 2729 3b0a 2020 2020 246c 6174 654c 696e ');. $lateLin\n-00002070: 6b73 203d 2024 636f 6e66 4f6c 642d 3e67 ks = $confOld->g\n-00002080: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar(\n-00002090: 276c 6174 654c 696e 6b73 2729 3b0a 2020 'lateLinks');. \n-000020a0: 2020 246c 6174 6543 6f6d 7072 6573 7320 $lateCompress \n-000020b0: 3d20 2463 6f6e 664f 6c64 2d3e 6765 744f = $confOld->getO\n-000020c0: 7074 5769 7468 6f75 7450 6172 2827 6c61 ptWithoutPar('la\n-000020d0: 7465 436f 6d70 7265 7373 2729 3b0a 7d0a teCompress');.}.\n-000020e0: 656c 7365 2020 2020 2023 2064 6f20 6e6f else # do no\n-000020f0: 7420 7265 6164 2063 6f6e 6669 6775 7261 t read configura\n-00002100: 7469 6f6e 2066 696c 650a 7b0a 2020 2020 tion file.{. \n-00002110: 756e 6c65 7373 2028 2473 6572 6965 7329 unless ($series)\n-00002120: 2020 2020 2320 6368 6563 6b20 6e61 6d65 # check name\n-00002130: 206f 6620 7365 7269 6573 0a20 2020 207b of series. {\n-00002140: 0a09 6c6f 6361 6c20 2a44 4952 3b0a 096f ..local *DIR;..o\n-00002150: 7065 6e64 6972 2844 4952 2c20 2462 6163 pendir(DIR, $bac\n-00002160: 6b75 7044 6972 2920 6f72 0a09 2020 2020 kupDir) or.. \n-00002170: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00002180: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-00002190: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => [\"c\n-000021a0: 616e 6e6f 7420 6f70 656e 6469 7220 3c24 annot opendir <$\n-000021b0: 6261 636b 7570 4469 723e 2c20 6578 6974 backupDir>, exit\n-000021c0: 696e 6722 5d2c 0a09 0909 2020 272d 6164 ing\"],.... '-ad\n-000021d0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__,\n-000021e0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... \n-000021f0: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);.\n-00002200: 096d 7920 2824 656e 7472 792c 2040 656e .my ($entry, @en\n-00002210: 7472 6965 7329 3b0a 0977 6869 6c65 2028 tries);..while (\n-00002220: 2465 6e74 7279 203d 2072 6561 6464 6972 $entry = readdir\n-00002230: 2044 4952 290a 097b 0a09 2020 2020 6e65 DIR)..{.. ne\n-00002240: 7874 2069 6620 2824 656e 7472 7920 6571 xt if ($entry eq\n-00002250: 2027 2e27 206f 7220 2465 6e74 7279 2065 '.' or $entry e\n-00002260: 7120 272e 2e27 293b 0a09 2020 2020 6d79 q '..');.. my\n-00002270: 2024 6520 3d20 2224 6261 636b 7570 4469 $e = \"$backupDi\n-00002280: 722f 2465 6e74 7279 223b 0a09 2020 2020 r/$entry\";.. \n-00002290: 6e65 7874 2069 6620 282d 6c20 2465 2061 next if (-l $e a\n-000022a0: 6e64 206e 6f74 202d 6420 2465 293b 2020 nd not -d $e); \n-000022b0: 2023 206f 6e6c 7920 6469 7265 6374 6f72 # only director\n-000022c0: 6965 730a 0920 2020 206e 6578 7420 756e ies.. next un\n-000022d0: 6c65 7373 202d 6420 2465 3b0a 0920 2020 less -d $e;.. \n-000022e0: 2070 7573 6820 4065 6e74 7269 6573 2c20 push @entries, \n-000022f0: 2465 6e74 7279 3b0a 097d 0a09 636c 6f73 $entry;..}..clos\n-00002300: 6564 6972 2844 4952 293b 0a0a 0924 7072 edir(DIR);...$pr\n-00002310: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00002320: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... \n-00002330: 2020 2027 2d73 7472 2720 3d3e 0a09 0920 '-str' =>... \n-00002340: 2020 2020 205b 226e 6f20 7365 7269 6573 [\"no series\n-00002350: 2066 6f75 6e64 2069 6e20 3c24 6261 636b found in <$back\n-00002360: 7570 4469 723e 2c20 6578 6974 696e 6722 upDir>, exiting\"\n-00002370: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi\n-00002380: 7427 203d 3e20 3129 0a09 2020 2020 6966 t' => 1).. if\n-00002390: 2040 656e 7472 6965 7320 3d3d 2030 3b0a @entries == 0;.\n-000023a0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-000023b0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-000023c0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000023d0: 0a09 0920 2020 2020 205b 2266 6f75 6e64 ... [\"found\n-000023e0: 206d 6f72 6520 7468 616e 206f 6e65 2062 more than one b\n-000023f0: 6163 6b75 7020 7365 7269 6573 2c20 706c ackup series, pl\n-00002400: 6561 7365 2073 7065 6369 6679 2022 2c0a ease specify \",.\n-00002410: 0909 2020 2020 2020 2273 6572 6965 7320 .. \"series \n-00002420: 7769 7468 206f 7074 696f 6e20 2d2d 7365 with option --se\n-00002430: 7269 6573 3b20 666f 756e 643a 222c 2073 ries; found:\", s\n-00002440: 6f72 7420 4065 6e74 7269 6573 5d2c 0a09 ort @entries],..\n-00002450: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' =\n-00002460: 3e20 3129 0a09 2020 2020 6966 2040 656e > 1).. if @en\n-00002470: 7472 6965 7320 3e20 313b 0a0a 0924 7365 tries > 1;...$se\n-00002480: 7269 6573 203d 2024 656e 7472 6965 735b ries = $entries[\n-00002490: 305d 3b0a 2020 2020 7d0a 7d0a 0a24 7072 0];. }.}..$pr\n-000024a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-000024b0: 6427 203d 3e20 2745 272c 0a09 2020 2020 d' => 'E',.. \n-000024c0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => [\"ba\n-000024d0: 636b 7570 2064 6972 6563 746f 7279 203c ckup directory <\n-000024e0: 2462 6163 6b75 7044 6972 3e20 646f 6573 $backupDir> does\n-000024f0: 206e 6f74 2065 7869 7374 225d 2c0a 0920 not exist\"],.. \n-00002500: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00002510: 3129 0a20 2020 2075 6e6c 6573 7320 282d 1). unless (-\n-00002520: 6420 2462 6163 6b75 7044 6972 293b 0a24 d $backupDir);.$\n-00002530: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002540: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. \n-00002550: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00002560: 706c 6561 7365 2073 7065 6369 6679 2074 please specify t\n-00002570: 6172 6765 7444 6972 225d 2c0a 0920 2020 argetDir\"],.. \n-00002580: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n-00002590: 0a20 2020 2075 6e6c 6573 7320 2824 7461 . unless ($ta\n-000025a0: 7267 6574 4469 7229 3b0a 2470 724c 6f67 rgetDir);.$prLog\n-000025b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000025c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. '\n-000025d0: 2d73 7472 2720 3d3e 205b 2274 6172 6765 -str' => [\"targe\n-000025e0: 7420 6469 7265 6374 6f72 7920 3c24 7461 t directory <$ta\n-000025f0: 7267 6574 4469 723e 2064 6f65 7320 6e6f rgetDir> does no\n-00002600: 7420 6578 6973 7422 5d2c 0a09 2020 2020 t exist\"],.. \n-00002610: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n-00002620: 2020 2020 756e 6c65 7373 2028 2d64 2024 unless (-d $\n-00002630: 7461 7267 6574 4469 7229 3b0a 2470 724c targetDir);.$prL\n-00002640: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00002650: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. \n-00002660: 2027 2d73 7472 2720 3d3e 0a09 2020 2020 '-str' =>.. \n-00002670: 2020 5b22 7365 7269 6573 2064 6972 6563 [\"series direc\n-00002680: 746f 7279 203c 2473 6572 6965 733e 2064 tory <$series> d\n-00002690: 6f65 7320 6e6f 7420 6578 6973 7420 696e oes not exist in\n-000026a0: 7369 6465 203c 2462 6163 6b75 7044 6972 side <$backupDir\n-000026b0: 3e22 5d2c 0a09 2020 2020 2020 272d 6578 >\"],.. '-ex\n-000026c0: 6974 2720 3d3e 2031 290a 2020 2020 756e it' => 1). un\n-000026d0: 6c65 7373 2028 2d64 2022 2462 6163 6b75 less (-d \"$backu\n-000026e0: 7044 6972 2f24 7365 7269 6573 2229 3b0a pDir/$series\");.\n-000026f0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00002700: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00002710: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00002720: 5b22 666f 756e 6420 7365 7269 6573 203c [\"found series <\n-00002730: 2473 6572 6965 733e 2069 6e20 6261 636b $series> in back\n-00002740: 7570 4469 7220 3c24 6261 636b 7570 4469 upDir <$backupDi\n-00002750: 723e 225d 290a 2020 2020 6966 2024 7665 r>\"]). if $ve\n-00002760: 7262 6f73 653b 0a0a 6d79 2024 7461 7267 rbose;..my $targ\n-00002770: 6574 5365 7269 6573 4469 7220 3d20 2224 etSeriesDir = \"$\n-00002780: 7461 7267 6574 4469 722f 2473 6572 6965 targetDir/$serie\n-00002790: 7322 3b0a 0a23 0a23 2064 6574 6563 7420 s\";..#.# detect \n-000027a0: 6c61 7374 2062 6163 6b75 700a 230a 6d79 last backup.#.my\n-000027b0: 2024 6c61 7374 4261 636b 7570 4469 7220 $lastBackupDir \n-000027c0: 3d20 756e 6465 663b 0a69 6620 2824 6578 = undef;.if ($ex\n-000027d0: 706c 6963 6974 4261 636b 7570 290a 7b0a plicitBackup).{.\n-000027e0: 2020 2020 246c 6173 7442 6163 6b75 7044 $lastBackupD\n-000027f0: 6972 203d 2022 2462 6163 6b75 7044 6972 ir = \"$backupDir\n-00002800: 2f24 7365 7269 6573 2f24 6578 706c 6963 /$series/$explic\n-00002810: 6974 4261 636b 7570 223b 0a20 2020 2024 itBackup\";. $\n-00002820: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00002830: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00002840: 2027 2d73 7472 2720 3d3e 205b 2265 7870 '-str' => [\"exp\n-00002850: 6c69 6369 7420 6261 636b 7570 203c 246c licit backup <$l\n-00002860: 6173 7442 6163 6b75 7044 6972 3e20 646f astBackupDir> do\n-00002870: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist\"],.\n-00002880: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n-00002890: 290a 0975 6e6c 6573 7320 2d64 2024 6c61 )..unless -d $la\n-000028a0: 7374 4261 636b 7570 4469 723b 0a7d 0a65 stBackupDir;.}.e\n-000028b0: 6c73 650a 7b0a 2020 2020 6c6f 6361 6c20 lse.{. local \n-000028c0: 2a44 4952 3b0a 2020 2020 6f70 656e 6469 *DIR;. opendi\n-000028d0: 7228 4449 522c 2022 2462 6163 6b75 7044 r(DIR, \"$backupD\n-000028e0: 6972 2f24 7365 7269 6573 2229 206f 720a ir/$series\") or.\n-000028f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00002900: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00002910: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00002920: 205b 2263 616e 6e6f 7420 6f70 656e 6469 [\"cannot opendi\n-00002930: 7220 3c24 6261 636b 7570 4469 722f 2473 r <$backupDir/$s\n-00002940: 6572 6965 733e 2c20 6578 6974 696e 6722 eries>, exiting\"\n-00002950: 5d2c 0a09 0920 2020 2020 2027 2d61 6464 ],... '-add\n-00002960: 2720 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 ' => [__FILE__, \n-00002970: 5f5f 4c49 4e45 5f5f 5d2c 0a09 0920 2020 __LINE__],... \n-00002980: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1)\n-00002990: 3b0a 2020 2020 6d79 2028 2465 6e74 7279 ;. my ($entry\n-000029a0: 2c20 4065 6e74 7269 6573 293b 0a20 2020 , @entries);. \n-000029b0: 2077 6869 6c65 2028 2465 6e74 7279 203d while ($entry =\n-000029c0: 2072 6561 6464 6972 2044 4952 290a 2020 readdir DIR). \n-000029d0: 2020 7b0a 096e 6578 7420 6966 2028 2d6c {..next if (-l\n-000029e0: 2024 656e 7472 7920 616e 6420 6e6f 7420 $entry and not \n-000029f0: 2d64 2024 656e 7472 7929 3b20 2020 2320 -d $entry); # \n-00002a00: 6f6e 6c79 2064 6972 6563 746f 7269 6573 only directories\n-00002a10: 0a09 7075 7368 2040 656e 7472 6965 732c ..push @entries,\n-00002a20: 2024 656e 7472 790a 0920 2020 2069 6620 $entry.. if \n-00002a30: 2465 6e74 7279 203d 7e0a 0920 2020 202f $entry =~.. /\n-00002a40: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \\A(\\d{4})\\.(\\d{2\n-00002a50: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\\.(\\d{2})_(\\d{\n-00002a60: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\\.(\\d{2})\\.(\\\n-00002a70: 647b 327d 295c 5a2f 6f3b 0a20 2020 207d d{2})\\Z/o;. }\n-00002a80: 0a20 2020 2063 6c6f 7365 6469 7228 4449 . closedir(DI\n-00002a90: 5229 3b0a 0a20 2020 2040 656e 7472 6965 R);.. @entrie\n-00002aa0: 7320 3d20 736f 7274 2040 656e 7472 6965 s = sort @entrie\n-00002ab0: 733b 2020 2020 2320 6e65 7765 7374 2062 s; # newest b\n-00002ac0: 6163 6b75 7020 6669 7273 740a 2020 2020 ackup first. \n-00002ad0: 6d79 2024 653b 0a20 2020 2066 6f72 6561 my $e;. forea\n-00002ae0: 6368 2024 6520 2840 656e 7472 6965 7329 ch $e (@entries)\n-00002af0: 0a20 2020 207b 0a23 0969 6620 282d 6520 . {.#.if (-e \n-00002b00: 2224 6261 636b 7570 4469 722f 2473 6572 \"$backupDir/$ser\n-00002b10: 6965 732f 2465 2f2e 6d64 3543 6865 636b ies/$e/.md5Check\n-00002b20: 5375 6d73 2e6e 6f74 6669 6e69 7368 6564 Sums.notfinished\n-00002b30: 2229 0a09 756e 6c65 7373 2028 263a 3a63 \")..unless (&::c\n-00002b40: 6865 636b 4966 4261 636b 7570 5761 7346 heckIfBackupWasF\n-00002b50: 696e 6973 6865 6428 272d 6261 636b 7570 inished('-backup\n-00002b60: 4469 7227 203d 3e20 2224 6261 636b 7570 Dir' => \"$backup\n-00002b70: 4469 722f 2473 6572 6965 732f 2465 222c Dir/$series/$e\",\n-00002b80: 0a09 0909 0909 2020 2020 272d 7072 4c6f ...... '-prLo\n-00002b90: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,...\n-00002ba0: 0920 2020 2027 2d63 6f75 6e74 2720 3d3e . '-count' =>\n-00002bb0: 2035 3029 290a 097b 0a09 2020 2020 2470 50))..{.. $p\n-00002bc0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00002bd0: 6e64 2720 3d3e 2027 5727 2c0a 0909 0920 nd' => 'W',.... \n-00002be0: 2027 2d73 7472 2720 3d3e 205b 223c 2462 '-str' => [\"<$b\n-00002bf0: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series\n-00002c00: 2f24 653e 206e 6f74 2066 696e 6973 6865 /$e> not finishe\n-00002c10: 6422 5d29 3b0a 097d 0a09 656c 7365 0a09 d\"]);..}..else..\n-00002c20: 7b0a 0920 2020 2024 6c61 7374 4261 636b {.. $lastBack\n-00002c30: 7570 4469 7220 3d20 2224 6261 636b 7570 upDir = \"$backup\n-00002c40: 4469 722f 2473 6572 6965 732f 2465 223b Dir/$series/$e\";\n-00002c50: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p\n-00002c60: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00002c70: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... \n-00002c80: 272d 7374 7227 203d 3e0a 0909 2020 5b22 '-str' =>... [\"\n-00002c90: 6e6f 2073 6572 6965 7320 666f 756e 6420 no series found \n-00002ca0: 696e 203c 2462 6163 6b75 7044 6972 3e2c in <$backupDir>,\n-00002cb0: 2065 7869 7469 6e67 225d 2c0a 0909 2020 exiting\"],... \n-00002cc0: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u\n-00002cd0: 6e6c 6573 7320 246c 6173 7442 6163 6b75 nless $lastBacku\n-00002ce0: 7044 6972 3b0a 0a20 2020 2024 7072 4c6f pDir;.. $prLo\n-00002cf0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00002d00: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-00002d10: 7472 2720 3d3e 0a20 2020 2020 2020 5b22 tr' =>. [\"\n-00002d20: 6c61 7374 2062 6163 6b75 7044 6972 203c last backupDir <\n-00002d30: 2462 6163 6b75 7044 6972 3e20 6e65 6564 $backupDir> need\n-00002d40: 7322 2c0a 0922 746f 2072 756e 2073 746f s\",..\"to run sto\n-00002d50: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa\n-00002d60: 636b 7570 2e70 6c2c 2022 2c0a 0922 706c ckup.pl, \",..\"pl\n-00002d70: 6561 7365 2064 6f20 736f 2061 6e64 2072 ease do so and r\n-00002d80: 6570 6561 7420 7275 6e6e 696e 6720 7468 epeat running th\n-00002d90: 6973 2070 726f 6772 616d 222c 0a09 226f is program\",..\"o\n-00002da0: 7220 7573 6520 6f70 7469 6f6e 202d 2d65 r use option --e\n-00002db0: 7870 6c69 6369 7442 6163 6b75 7020 6f72 xplicitBackup or\n-00002dc0: 206f 7074 696f 6e20 2d2d 666f 7263 6522 option --force\"\n-00002dd0: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' =\n-00002de0: 3e20 3129 0a09 6966 202d 6520 2224 6c61 > 1)..if -e \"$la\n-00002df0: 7374 4261 636b 7570 4469 722f 2e73 746f stBackupDir/.sto\n-00002e00: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li\n-00002e10: 6e6b 4669 6c65 2e62 7a32 220a 0961 6e64 nkFile.bz2\"..and\n-00002e20: 206e 6f74 2024 666f 7263 653b 0a0a 2020 not $force;.. \n-00002e30: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00002e40: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00002e50: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>...\n-00002e60: 2020 5b22 6c61 7374 2064 6972 6563 746f [\"last directo\n-00002e70: 7279 2077 6974 6820 6261 636b 7570 2069 ry with backup i\n-00002e80: 7320 3c24 6c61 7374 4261 636b 7570 4469 s <$lastBackupDi\n-00002e90: 723e 225d 290a 0969 6620 2476 6572 626f r>\"])..if $verbo\n-00002ea0: 7365 3b0a 7d0a 0a69 6620 2824 636f 6e66 se;.}..if ($conf\n-00002eb0: 6967 4669 6c65 2061 6e64 206e 6f74 2024 igFile and not $\n-00002ec0: 7573 654f 6c64 436f 6e66 6967 2920 2023 useOldConfig) #\n-00002ed0: 2063 6f70 7920 636f 6e66 6967 7572 6174 copy configurat\n-00002ee0: 696f 6e20 6669 6c65 0a7b 0a20 2020 2075 ion file.{. u\n-00002ef0: 6e6c 6573 7320 2824 6765 6e65 7261 7465 nless ($generate\n-00002f00: 436f 6e66 6967 4669 6c65 290a 2020 2020 ConfigFile). \n-00002f10: 7b0a 096d 7920 2824 625f 6469 722c 2024 {..my ($b_dir, $\n-00002f20: 625f 6669 6c65 2920 3d20 263a 3a73 706c b_file) = &::spl\n-00002f30: 6974 4669 6c65 4469 7228 2463 6f6e 6669 itFileDir($confi\n-00002f40: 6746 696c 6529 3b0a 0924 6765 6e65 7261 gFile);..$genera\n-00002f50: 7465 436f 6e66 6967 4669 6c65 203d 2022 teConfigFile = \"\n-00002f60: 2462 5f64 6972 2f69 736f 6c61 7465 2d24 $b_dir/isolate-$\n-00002f70: 625f 6669 6c65 223b 0a20 2020 207d 0a0a b_file\";. }..\n-00002f80: 2020 2020 6d79 2024 616e 7377 6572 203d my $answer =\n-00002f90: 2027 7965 7327 3b0a 2020 2020 6966 2028 'yes';. if (\n-00002fa0: 2d65 2024 6765 6e65 7261 7465 436f 6e66 -e $generateConf\n-00002fb0: 6967 4669 6c65 290a 2020 2020 7b0a 0964 igFile). {..d\n-00002fc0: 6f0a 097b 0a09 2020 2020 7072 696e 7420 o..{.. print \n-00002fd0: 223c 2467 656e 6572 6174 6543 6f6e 6669 \"<$generateConfi\n-00002fe0: 6746 696c 653e 2061 6c72 6561 6479 2065 gFile> already e\n-00002ff0: 7869 7374 732e 204f 7665 7277 7269 7465 xists. Overwrite\n-00003000: 3f5c 6e22 2c0a 0920 2020 2022 7965 7320 ?\\n\",.. \"yes \n-00003010: 2f20 6e6f 202d 3e20 223b 0a09 2020 2020 / no -> \";.. \n-00003020: 2461 6e73 7765 7220 3d20 3c53 5444 494e $answer = ;.. chomp $a\n-00003040: 6e73 7765 723b 0a09 7d20 7768 696c 6520 nswer;..} while \n-00003050: 2824 616e 7377 6572 206e 6520 2779 6573 ($answer ne 'yes\n-00003060: 2720 616e 6420 2461 6e73 7765 7220 6e65 ' and $answer ne\n-00003070: 2027 6e6f 2729 3b0a 2020 2020 7d0a 2020 'no');. }. \n-00003080: 2020 6578 6974 2030 2069 6620 2461 6e73 exit 0 if $ans\n-00003090: 7765 7220 6571 2027 6e6f 273b 0a0a 2020 wer eq 'no';.. \n-000030a0: 2020 2320 7265 6164 2063 6f6e 6669 6720 # read config \n-000030b0: 6669 6c65 2061 6e64 2063 6f70 790a 2020 file and copy. \n-000030c0: 2020 6c6f 6361 6c20 2a46 494c 453b 0a20 local *FILE;. \n-000030d0: 2020 206f 7065 6e28 4649 4c45 2c20 2463 open(FILE, $c\n-000030e0: 6f6e 6669 6746 696c 6529 206f 720a 0924 onfigFile) or..$\n-000030f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003100: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00003110: 2020 2020 2027 2d73 7472 2720 3d3e 2022 '-str' => \"\n-00003120: 6361 6e6e 6f74 206f 7065 6e20 3c24 636f cannot open <$co\n-00003130: 6e66 6967 4669 6c65 3e22 2c0a 0909 2020 nfigFile>\",... \n-00003140: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n-00003150: 293b 0a20 2020 206d 7920 2840 636f 6e66 );. my (@conf\n-00003160: 6967 4669 6c65 2920 3d20 3c46 494c 453e igFile) = \n-00003170: 3b0a 2020 2020 6368 6f6d 7020 4063 6f6e ;. chomp @con\n-00003180: 6669 6746 696c 653b 0a20 2020 2063 6c6f figFile;. clo\n-00003190: 7365 2846 494c 4529 3b0a 0a20 2020 206f se(FILE);.. o\n-000031a0: 7065 6e28 4649 4c45 2c20 273e 272c 2024 pen(FILE, '>', $\n-000031b0: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi\n-000031c0: 6c65 2920 6f72 0a09 2470 724c 6f67 2d3e le) or..$prLog->\n-000031d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-000031e0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n-000031f0: 7374 7227 203d 3e20 2263 616e 6e6f 7420 str' => \"cannot \n-00003200: 6f70 656e 203c 2467 656e 6572 6174 6543 open <$generateC\n-00003210: 6f6e 6669 6746 696c 653e 222c 0a09 0920 onfigFile>\",... \n-00003220: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => \n-00003230: 3129 3b0a 0a20 2020 206d 7920 2825 6368 1);.. my (%ch\n-00003240: 6563 6b4b 6579 7329 203d 2028 2762 6163 eckKeys) = ('bac\n-00003250: 6b75 7044 6972 2720 3d3e 2031 2c0a 0909 kupDir' => 1,...\n-00003260: 2020 2020 2020 2027 6c61 7465 4c69 6e6b 'lateLink\n-00003270: 7327 203d 3e20 3129 3b0a 2020 2020 6d79 s' => 1);. my\n-00003280: 2028 256b 6579 732c 2024 6c29 3b0a 2020 (%keys, $l);. \n-00003290: 2020 6d79 2028 4063 6629 203d 2028 4063 my (@cf) = (@c\n-000032a0: 6f6e 6669 6746 696c 6529 3b20 2020 2020 onfigFile); \n-000032b0: 2020 2320 776f 726b 696e 6720 636f 7079 # working copy\n-000032c0: 206f 6620 4063 6f6e 6669 6746 696c 650a of @configFile.\n-000032d0: 2020 2020 6d79 2024 6163 744b 6579 203d my $actKey =\n-000032e0: 2075 6e64 6566 3b0a 2020 2020 6d79 2024 undef;. my $\n-000032f0: 6920 3d20 303b 0a20 2020 206d 7920 2470 i = 0;. my $p\n-00003300: 7269 6e74 4e65 7874 4c69 6e65 203d 2031 rintNextLine = 1\n-00003310: 3b0a 2020 2020 6d79 2028 4063 6f6d 6d65 ;. my (@comme\n-00003320: 6e74 7329 203d 2028 293b 0a20 2020 2066 nts) = ();. f\n-00003330: 6f72 6561 6368 2024 6c20 2840 6366 290a oreach $l (@cf).\n-00003340: 2020 2020 7b0a 0924 692b 2b3b 0a0a 0969 {..$i++;...i\n-00003350: 6620 2824 6c20 3d7e 202f 5c41 5b23 5d2f f ($l =~ /\\A[#]/\n-00003360: 206f 7220 246c 203d 7e20 2f5c 415c 732a or $l =~ /\\A\\s*\n-00003370: 5c5a 2f29 2020 2320 636f 6d6d 656e 7420 \\Z/) # comment \n-00003380: 6f72 2065 6d70 7479 0a09 7b0a 0920 2020 or empty..{.. \n-00003390: 2070 7573 6820 4063 6f6d 6d65 6e74 732c push @comments,\n-000033a0: 2024 6c3b 0a09 2020 2020 2461 6374 4b65 $l;.. $actKe\n-000033b0: 7920 3d20 756e 6465 663b 0a09 2020 2020 y = undef;.. \n-000033c0: 6e65 7874 3b0a 097d 0a09 6966 2028 246c next;..}..if ($l\n-000033d0: 203d 7e20 2f5c 415c 732b 2f29 0a09 7b0a =~ /\\A\\s+/)..{.\n-000033e0: 0920 2020 2064 6965 2022 636f 6e74 696e . die \"contin\n-000033f0: 7565 206c 696e 6520 7769 7468 206e 6f20 ue line with no \n-00003400: 6b65 7920 6174 206c 696e 6520 2469 3a5c key at line $i:\\\n-00003410: 6e3c 222c 0a09 2020 2020 2463 6f6e 6669 n<\",.. $confi\n-00003420: 6746 696c 655b 2469 2d31 5d2c 2022 3e5c gFile[$i-1], \">\\\n-00003430: 6e22 2075 6e6c 6573 7320 2461 6374 4b65 n\" unless $actKe\n-00003440: 793b 0a09 2020 2020 246b 6579 737b 2461 y;.. $keys{$a\n-00003450: 6374 4b65 797d 7b27 6c69 6e65 277d 202e ctKey}{'line'} .\n-00003460: 3d20 2720 2720 2e20 246c 3b0a 0a09 2020 = ' ' . $l;... \n-00003470: 2020 7072 696e 7420 4649 4c45 2022 246c print FILE \"$l\n-00003480: 5c6e 220a 0909 6966 2024 7072 696e 744e \\n\"...if $printN\n-00003490: 6578 744c 696e 653b 0a09 7d0a 0965 6c73 extLine;..}..els\n-000034a0: 650a 097b 0a09 2020 2020 6d79 2028 2473 e..{.. my ($s\n-000034b0: 656d 6963 6f6c 6f6e 2c20 246b 6579 2c20 emicolon, $key, \n-000034c0: 246c 696e 6529 3b0a 0920 2020 2069 6620 $line);.. if \n-000034d0: 2828 2473 656d 6963 6f6c 6f6e 2c20 246b (($semicolon, $k\n-000034e0: 6579 2c20 246c 696e 6529 203d 2024 6c20 ey, $line) = $l \n-000034f0: 3d7e 202f 5c41 283b 3f29 282e 2b3f 295c =~ /\\A(;?)(.+?)\\\n-00003500: 732a 3d5c 732a 282e 2a29 5c5a 2f29 0a09 s*=\\s*(.*)\\Z/)..\n-00003510: 2020 2020 7b0a 0909 2461 6374 4b65 7920 {...$actKey \n-00003520: 3d20 246b 6579 3b0a 0909 246b 6579 737b = $key;...$keys{\n-00003530: 2461 6374 4b65 797d 7b27 6c69 6e65 277d $actKey}{'line'}\n-00003540: 203d 2024 6c69 6e65 3b0a 0909 246b 6579 = $line;...$key\n-00003550: 737b 2461 6374 4b65 797d 7b27 6c69 6e65 s{$actKey}{'line\n-00003560: 6e6f 277d 203d 2024 693b 0a0a 0909 6966 no'} = $i;....if\n-00003570: 2028 246b 6579 2065 7120 2762 6163 6b75 ($key eq 'backu\n-00003580: 7044 6972 2729 0a09 097b 0a09 0920 2020 pDir')...{... \n-00003590: 2024 7072 696e 744e 6578 744c 696e 6520 $printNextLine \n-000035a0: 3d20 313b 0a09 0920 2020 2070 7269 6e74 = 1;... print\n-000035b0: 2046 494c 4520 6a6f 696e 2822 5c6e 222c FILE join(\"\\n\",\n-000035c0: 2040 636f 6d6d 656e 7473 292c 0a09 0920 @comments),... \n-000035d0: 2020 2022 5c6e 246b 6579 3d5c 2224 7461 \"\\n$key=\\\"$ta\n-000035e0: 7267 6574 4469 725c 225c 6e5c 6e22 3b0a rgetDir\\\"\\n\\n\";.\n-000035f0: 0909 2020 2020 2320 6d65 7267 6542 6163 .. # mergeBac\n-00003600: 6b75 7044 6972 0a09 0920 2020 2070 7269 kupDir... pri\n-00003610: 6e74 2046 494c 450a 0909 0922 2320 6261 nt FILE....\"# ba\n-00003620: 636b 7570 4469 7220 666f 7220 6d65 7267 ckupDir for merg\n-00003630: 696e 6720 7468 6520 6261 636b 7570 7320 ing the backups \n-00003640: 6765 6e65 7261 7465 6420 696e 2022 2c0a generated in \",.\n-00003650: 0909 0922 6973 6f6c 6174 6564 206d 6f64 ...\"isolated mod\n-00003660: 655c 6e23 206c 6174 6572 2069 6e20 6d61 e\\n# later in ma\n-00003670: 696e 2062 6163 6b75 705c 6e22 2c0a 0909 in backup\\n\",...\n-00003680: 0922 6d65 7267 6542 6163 6b75 7044 6972 .\"mergeBackupDir\n-00003690: 3d24 6c69 6e65 5c6e 223b 0a09 0920 2020 =$line\\n\";... \n-000036a0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-000036b0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-000036c0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n-000036d0: 0920 2020 2020 205b 2224 6765 6e65 7261 . [\"$genera\n-000036e0: 7465 436f 6e66 6967 4669 6c65 3a20 6368 teConfigFile: ch\n-000036f0: 616e 6765 6420 3c62 6163 6b75 7044 6972 anged \" .... \"\n-00003710: 746f 2027 2474 6172 6765 7444 6972 2722 to '$targetDir'\"\n-00003720: 2c0a 0909 2020 2020 2020 2224 6765 6e65 ,... \"$gene\n-00003730: 7261 7465 436f 6e66 6967 4669 6c65 3a20 rateConfigFile: \n-00003740: 6372 6561 7465 6420 3c6d 6572 6765 4261 created \" .... \n-00003760: 2020 2020 2020 2261 7320 2724 6c69 6e65 \"as '$line\n-00003770: 2722 5d29 3b0a 0909 2020 2020 6465 6c65 '\"]);... dele\n-00003780: 7465 2024 6368 6563 6b4b 6579 737b 246b te $checkKeys{$k\n-00003790: 6579 7d3b 0a09 097d 0a09 0965 6c73 6966 ey};...}...elsif\n-000037a0: 2028 246b 6579 2065 7120 276d 6572 6765 ($key eq 'merge\n-000037b0: 4261 636b 7570 4469 7227 290a 0909 7b0a BackupDir')...{.\n-000037c0: 0909 2020 2020 2470 7269 6e74 4e65 7874 .. $printNext\n-000037d0: 4c69 6e65 203d 2030 3b0a 0909 2020 2020 Line = 0;... \n-000037e0: 7072 696e 7420 4649 4c45 206a 6f69 6e28 print FILE join(\n-000037f0: 225c 6e22 2c20 4063 6f6d 6d65 6e74 7329 \"\\n\", @comments)\n-00003800: 2c20 225c 6e3b 246b 6579 3d24 6c69 6e65 , \"\\n;$key=$line\n-00003810: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \\n\";... $prLo\n-00003820: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00003830: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... '\n-00003840: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. \n-00003850: 2020 0909 2020 5b22 2467 656e 6572 6174 .. [\"$generat\n-00003860: 6543 6f6e 6669 6746 696c 653a 2064 6973 eConfigFile: dis\n-00003870: 6162 6c65 6420 6578 6973 7469 6e67 206b abled existing k\n-00003880: 6579 2024 6b65 793d 246c 696e 6522 5d29 ey $key=$line\"])\n-00003890: 0a09 0909 6966 2028 2473 656d 6963 6f6c ....if ($semicol\n-000038a0: 6f6e 2065 7120 273b 2729 3b0a 0909 7d0a on eq ';');...}.\n-000038b0: 0909 656c 7369 6620 2824 6b65 7920 6571 ..elsif ($key eq\n-000038c0: 2027 6f74 6865 7242 6163 6b75 7053 6572 'otherBackupSer\n-000038d0: 6965 7327 290a 0909 7b0a 0909 2020 2020 ies')...{... \n-000038e0: 2470 7269 6e74 4e65 7874 4c69 6e65 203d $printNextLine =\n-000038f0: 2030 3b0a 0909 2020 2020 7072 696e 7420 0;... print \n-00003900: 4649 4c45 206a 6f69 6e28 225c 6e22 2c20 FILE join(\"\\n\", \n-00003910: 4063 6f6d 6d65 6e74 7329 2c0a 0909 2020 @comments),... \n-00003920: 2020 225c 6e24 6b65 793d 303a 2473 6572 \"\\n$key=0:$ser\n-00003930: 6965 735c 6e22 3b0a 0909 2020 2020 2470 ies\\n\";... $p\n-00003940: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00003950: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',.....\n-00003960: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. \n-00003970: 2020 2020 2009 0920 205b 2224 6765 6e65 .. [\"$gene\n-00003980: 7261 7465 436f 6e66 6967 4669 6c65 3a20 rateConfigFile: \n-00003990: 7365 7474 696e 6720 3c24 6b65 793e 2074 setting <$key> t\n-000039a0: 6f20 303a 2473 6572 6965 7322 5d29 3b0a o 0:$series\"]);.\n-000039b0: 0909 7d09 2020 2020 2020 0a09 0965 6c73 ..}. ...els\n-000039c0: 6966 2028 246b 6579 2065 7120 276c 6174 if ($key eq 'lat\n-000039d0: 654c 696e 6b73 2729 0a09 097b 0a09 0920 eLinks')...{... \n-000039e0: 2020 2024 7072 696e 744e 6578 744c 696e $printNextLin\n-000039f0: 6520 3d20 313b 0a09 0920 2020 2070 7269 e = 1;... pri\n-00003a00: 6e74 2046 494c 4520 6a6f 696e 2822 5c6e nt FILE join(\"\\n\n-00003a10: 222c 2040 636f 6d6d 656e 7473 292c 0a09 \", @comments),..\n-00003a20: 0920 2020 2022 5c6e 246b 6579 3d79 6573 . \"\\n$key=yes\n-00003a30: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \\n\";... $prLo\n-00003a40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00003a50: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... '\n-00003a60: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-00003a70: 205b 2224 6765 6e65 7261 7465 436f 6e66 [\"$generateConf\n-00003a80: 6967 4669 6c65 3a20 6368 616e 6765 6420 igFile: changed \n-00003a90: 3c24 6b65 793e 2074 6f20 2779 6573 2722 <$key> to 'yes'\"\n-00003aa0: 5d29 0a09 0909 756e 6c65 7373 2024 6c61 ])....unless $la\n-00003ab0: 7465 4c69 6e6b 733b 0a09 0920 2020 2064 teLinks;... d\n-00003ac0: 656c 6574 6520 2463 6865 636b 4b65 7973 elete $checkKeys\n-00003ad0: 7b24 6b65 797d 3b0a 0909 7d0a 0909 656c {$key};...}...el\n-00003ae0: 7369 6620 2824 6b65 7920 6571 2027 6c61 sif ($key eq 'la\n-00003af0: 7465 436f 6d70 7265 7373 2729 0a09 097b teCompress')...{\n-00003b00: 0a09 0920 2020 2024 7072 696e 744e 6578 ... $printNex\n-00003b10: 744c 696e 6520 3d20 313b 0a09 0920 2020 tLine = 1;... \n-00003b20: 2070 7269 6e74 2046 494c 4520 6a6f 696e print FILE join\n-00003b30: 2822 5c6e 222c 2040 636f 6d6d 656e 7473 (\"\\n\", @comments\n-00003b40: 292c 0a09 0920 2020 2022 5c6e 2473 656d ),... \"\\n$sem\n-00003b50: 6963 6f6c 6f6e 246b 6579 3d24 6c69 6e65 icolon$key=$line\n-00003b60: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \\n\";... $prLo\n-00003b70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00003b80: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... '\n-00003b90: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-00003ba0: 205b 2224 6765 6e65 7261 7465 436f 6e66 [\"$generateConf\n-00003bb0: 6967 4669 6c65 3a20 796f 7520 6d61 7920 igFile: you may \n-00003bc0: 7761 6e74 2074 6f20 6368 616e 6765 203c want to change <\n-00003bd0: 246b 6579 3e20 2220 2e0a 0909 2020 2020 $key> \" .... \n-00003be0: 2020 2022 746f 2027 6e6f 2722 5d29 0a09 \"to 'no'\"])..\n-00003bf0: 0909 6966 2024 6c61 7465 436f 6d70 7265 ..if $lateCompre\n-00003c00: 7373 3b0a 0909 7d0a 0909 656c 7369 6620 ss;...}...elsif \n-00003c10: 2824 6b65 7920 6571 2027 6b65 6570 4d69 ($key eq 'keepMi\n-00003c20: 6e4e 756d 6265 7227 290a 0909 7b0a 0909 nNumber')...{...\n-00003c30: 2020 2020 2470 7269 6e74 4e65 7874 4c69 $printNextLi\n-00003c40: 6e65 203d 2030 3b0a 0909 2020 2020 7072 ne = 0;... pr\n-00003c50: 696e 7420 4649 4c45 206a 6f69 6e28 225c int FILE join(\"\\\n-00003c60: 6e22 2c20 4063 6f6d 6d65 6e74 7329 2c0a n\", @comments),.\n-00003c70: 0909 2020 2020 225c 6e24 6b65 793d 3939 .. \"\\n$key=99\n-00003c80: 3939 395c 6e22 3b0a 0909 7d0a 0909 656c 999\\n\";...}...el\n-00003c90: 7369 6620 2824 6b65 7920 3d7e 202f 5c41 sif ($key =~ /\\A\n-00003ca0: 6b65 6570 2f29 0a09 097b 0a09 0920 2020 keep/)...{... \n-00003cb0: 2024 7072 696e 744e 6578 744c 696e 6520 $printNextLine \n-00003cc0: 3d20 303b 0a09 0920 2020 2070 7269 6e74 = 0;... print\n-00003cd0: 2046 494c 4520 6a6f 696e 2822 5c6e 222c FILE join(\"\\n\",\n-00003ce0: 2040 636f 6d6d 656e 7473 292c 0a09 0920 @comments),... \n-00003cf0: 2020 2022 5c6e 3b24 6b65 793d 246c 696e \"\\n;$key=$lin\n-00003d00: 655c 6e22 3b0a 0909 7d0a 0909 656c 7365 e\\n\";...}...else\n-00003d10: 0a09 097b 0a09 0920 2020 2024 7072 696e ...{... $prin\n-00003d20: 744e 6578 744c 696e 6520 3d20 313b 0a09 tNextLine = 1;..\n-00003d30: 0920 2020 2070 7269 6e74 2046 494c 4520 . print FILE \n-00003d40: 6a6f 696e 2822 5c6e 222c 2040 636f 6d6d join(\"\\n\", @comm\n-00003d50: 656e 7473 292c 2022 5c6e 2473 656d 6963 ents), \"\\n$semic\n-00003d60: 6f6c 6f6e 246b 6579 3d24 6c69 6e65 5c6e olon$key=$line\\n\n-00003d70: 223b 0a09 097d 0a0a 0909 2840 636f 6d6d \";...}....(@comm\n-00003d80: 656e 7473 2920 3d20 2829 3b0a 0920 2020 ents) = ();.. \n-00003d90: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-00003da0: 2020 7b0a 0909 6469 6520 2263 616e 6e6f {...die \"canno\n-00003db0: 7420 6964 656e 7469 6679 206c 696e 6520 t identify line \n-00003dc0: 2469 2069 6e20 6669 6c65 2024 636f 6e66 $i in file $conf\n-00003dd0: 6967 4669 6c65 3a5c 6e3c 222c 0a09 0924 igFile:\\n<\",...$\n-00003de0: 636f 6e66 6967 4669 6c65 5b24 692d 315d configFile[$i-1]\n-00003df0: 2c20 223e 5c6e 223b 0a09 2020 2020 7d0a , \">\\n\";.. }.\n-00003e00: 097d 0a20 2020 207d 0a20 2020 2063 6c6f .}. }. clo\n-00003e10: 7365 2846 494c 4529 3b0a 0a20 2020 2024 se(FILE);.. $\n-00003e20: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00003e30: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... \n-00003e40: 2027 2d73 7472 2720 3d3e 205b 2224 6765 '-str' => [\"$ge\n-00003e50: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile\n-00003e60: 3a20 636f 756c 646e 2774 2066 696e 6420 : couldn't find \n-00003e70: 6b65 7928 7329 203c 2220 2e0a 0909 0920 key(s) <\" ..... \n-00003e80: 2020 2020 6a6f 696e 2827 3e20 3c27 2c20 join('> <', \n-00003e90: 736f 7274 206b 6579 7320 2563 6865 636b sort keys %check\n-00003ea0: 4b65 7973 2920 2e20 223e 225d 2c0a 0909 Keys) . \">\"],...\n-00003eb0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n-00003ec0: 0969 6620 7363 616c 6172 286b 6579 7320 .if scalar(keys \n-00003ed0: 2563 6865 636b 4b65 7973 293b 0a7d 0a0a %checkKeys);.}..\n-00003ee0: 0a23 0a23 2063 6f70 7920 6d61 696e 2073 .#.# copy main s\n-00003ef0: 7065 6369 616c 2066 696c 6573 2061 6e64 pecial files and\n-00003f00: 2064 6972 6563 746f 7279 2073 7472 7563 directory struc\n-00003f10: 7475 7265 0a23 0a75 6e6c 6573 7320 282d ture.#.unless (-\n-00003f20: 6420 2474 6172 6765 7453 6572 6965 7344 d $targetSeriesD\n-00003f30: 6972 290a 7b0a 2020 2020 2470 724c 6f67 ir).{. $prLog\n-00003f40: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00003f50: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n-00003f60: 7227 203d 3e20 5b22 6361 6e6e 6f74 2063 r' => [\"cannot c\n-00003f70: 7265 6174 6520 6469 7265 6374 6f72 7920 reate directory \n-00003f80: 3c24 7461 7267 6574 5365 7269 6573 4469 <$targetSeriesDi\n-00003f90: 723e 225d 2c0a 0909 2020 272d 6578 6974 r>\"],... '-exit\n-00003fa0: 2720 3d3e 2031 290a 0975 6e6c 6573 7320 ' => 1)..unless \n-00003fb0: 6d6b 6469 7220 2474 6172 6765 7453 6572 mkdir $targetSer\n-00003fc0: 6965 7344 6972 2c20 3037 3535 3b0a 7d0a iesDir, 0755;.}.\n-00003fd0: 0a24 6c61 7374 4261 636b 7570 4469 7220 .$lastBackupDir \n-00003fe0: 3d7e 206d 232e 2a2f 282e 2b29 233b 0a6d =~ m#.*/(.+)#;.m\n-00003ff0: 7920 2474 6172 6765 7442 6163 6b75 7044 y $targetBackupD\n-00004000: 6972 203d 2022 2474 6172 6765 7453 6572 ir = \"$targetSer\n-00004010: 6965 7344 6972 2f24 3122 3b0a 6d6b 6469 iesDir/$1\";.mkdi\n-00004020: 7220 2474 6172 6765 7442 6163 6b75 7044 r $targetBackupD\n-00004030: 6972 3b0a 0a24 7072 4c6f 672d 3e70 7269 ir;..$prLog->pri\n-00004040: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00004050: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-00004060: 203d 3e20 5b22 6372 6561 7465 6420 6469 => [\"created di\n-00004070: 7265 6374 6f72 7920 3c24 7461 7267 6574 rectory <$target\n-00004080: 4261 636b 7570 4469 723e 225d 290a 2020 BackupDir>\"]). \n-00004090: 2020 6966 2024 7665 7262 6f73 653b 0a0a if $verbose;..\n-000040a0: 263a 3a63 6f70 7953 7462 7553 7065 6369 &::copyStbuSpeci\n-000040b0: 616c 4669 6c65 7328 246c 6173 7442 6163 alFiles($lastBac\n-000040c0: 6b75 7044 6972 2c20 2474 6172 6765 7442 kupDir, $targetB\n-000040d0: 6163 6b75 7044 6972 2c20 2470 724c 6f67 ackupDir, $prLog\n-000040e0: 2c20 2476 6572 626f 7365 2c0a 0909 0927 , $verbose,....'\n-000040f0: 2f74 6d70 2729 3b0a 0a24 7072 4c6f 672d /tmp');..$prLog-\n-00004100: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00004110: 3e20 2749 272c 0a09 2020 2020 2020 272d > 'I',.. '-\n-00004120: 7374 7227 203d 3e0a 0920 2020 2020 205b str' =>.. [\n-00004130: 2279 6f75 206d 6179 2077 616e 7420 746f \"you may want to\n-00004140: 2061 646a 7573 7420 3c24 6765 6e65 7261 adjust <$genera\n-00004150: 7465 436f 6e66 6967 4669 6c65 3e20 746f teConfigFile> to\n-00004160: 2079 6f75 7220 6e65 6564 7322 5d29 0a20 your needs\"]). \n-00004170: 2020 2069 6620 2824 636f 6e66 6967 4669 if ($configFi\n-00004180: 6c65 2061 6e64 206e 6f74 2024 7573 654f le and not $useO\n-00004190: 6c64 436f 6e66 6967 293b 0a0a 0a65 7869 ldConfig);...exi\n-000041a0: 7420 303b 0a0a t 0;..\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 6574 7570 4973 6f6c 6174 6564 4d6f pSetupIsolatedMo\n+00000040: 6465 0a de.\n"}, {"source1": "./usr/bin/storeBackupUpdateBackup", "source2": "./usr/bin/storeBackupUpdateBackup", "has_internal_linenos": true, "unified_diff": "@@ -1,3719 +1,4 @@\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 3229 0a23 2020 2020 2020 2020 8-202).# \n-00000050: 2020 2020 2020 2020 2068 6a63 6c61 6573 hjclaes\n-00000060: 4077 6562 2e64 650a 230a 2320 2020 5468 @web.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 P\n-00000300: 4f53 4958 3b0a 7573 6520 7374 7269 6374 OSIX;.use strict\n-00000310: 3b0a 7573 6520 7761 726e 696e 6773 3b0a ;.use warnings;.\n-00000320: 0a75 7365 2046 636e 746c 2071 7728 4f5f .use Fcntl qw(O_\n-00000330: 5244 5752 204f 5f43 5245 4154 293b 0a75 RDWR O_CREAT);.u\n-00000340: 7365 2050 4f53 4958 3b0a 0a24 6d61 696e se POSIX;..$main\n-00000350: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER\n-00000360: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;...\n-00000370: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. \n-00000380: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi\n-00000390: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir\n-000003a0: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D\n-000003b0: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein \n-000003c0: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol\n-000003d0: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis\n-000003e0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i\n-000003f0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). \n-00000400: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f\n-00000410: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my \n-00000420: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink\n-00000430: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i\n-00000440: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link,\n-00000450: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne \"/\")..\n-00000460: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~\n-00000470: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\\/]+$/$link\n-00000480: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e\n-00000490: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi\n-000004a0: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. \n-000004b0: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $\n-000004c0: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi\n-000004d0: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$\n-000004e0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = \"/$file\";\n-000004f0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-00000500: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD\n-00000510: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR \"<$file> doe\n-00000520: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\\n\";\n-00000530: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }.\n-00000540: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= \"/.\n-00000550: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib\"; \n-00000560: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den \n-00000570: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. \n-00000580: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/\n-00000590: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch\n-000005a0: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. \n-000005b0: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir)\n-000005c0: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD\n-000005d0: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`;\n-000005e0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;.\n-000005f0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;.\n-00000600: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split\n-00000610: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir(\"$absDir\n-00000620: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file\"));. }.\n-00000630: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n-00000640: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR \"<$\n-00000650: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex\n-00000660: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\\n\";\n-00000670: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl\n-00000680: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. \n-00000690: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift\n-000006a0: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return ('\n-000006b0: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles\n-000006c0: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\\//)\n-000006d0: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa\n-000006e0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname..\n-000006f0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f\n-00000700: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ \n-00000710: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\\/(.*)$/s;\n-00000720: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' \n-00000730: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq '');\n-00000740: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000750: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls\n-00000760: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename.\n-00000770: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir\n-00000780: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my (\n-00000790: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = &\n-000007a0: 6c69 6250 6174 6828 2430 293b 0a75 6e73 libPath($0);.uns\n-000007b0: 6869 6674 2040 494e 432c 2022 2472 6571 hift @INC, \"$req\n-000007c0: 223b 0a0a 7265 7175 6972 6520 2773 746f \";..require 'sto\n-000007d0: 7265 4261 636b 7570 4c69 622e 706c 273b reBackupLib.pl';\n-000007e0: 0a72 6571 7569 7265 2027 6368 6563 6b50 .require 'checkP\n-000007f0: 6172 616d 322e 706c 273b 0a72 6571 7569 aram2.pl';.requi\n-00000800: 7265 2027 6368 6563 6b4f 626a 5061 722e re 'checkObjPar.\n-00000810: 706c 273b 0a72 6571 7569 7265 2027 7072 pl';.require 'pr\n-00000820: 4c6f 672e 706c 273b 0a72 6571 7569 7265 Log.pl';.require\n-00000830: 2027 7665 7273 696f 6e2e 706c 273b 0a72 'version.pl';.r\n-00000840: 6571 7569 7265 2027 6461 7465 546f 6f6c equire 'dateTool\n-00000850: 732e 706c 273b 0a72 6571 7569 7265 2027 s.pl';.require '\n-00000860: 6669 6c65 4469 722e 706c 273b 0a72 6571 fileDir.pl';.req\n-00000870: 7569 7265 2027 6875 6d61 6e52 6561 642e uire 'humanRead.\n-00000880: 706c 273b 0a0a 6d79 2024 6c6f 636b 4669 pl';..my $lockFi\n-00000890: 6c65 203d 2028 2445 4e56 7b27 5553 4552 le = ($ENV{'USER\n-000008a0: 277d 2065 7120 2772 6f6f 7427 2920 3f20 '} eq 'root') ? \n-000008b0: 2020 2020 2320 6465 6661 756c 7420 7661 # default va\n-000008c0: 6c75 650a 0909 272f 7661 722f 6c6f 636b lue...'/var/lock\n-000008d0: 2f73 746f 7265 4261 636b 7570 2e6c 6f63 /storeBackup.loc\n-000008e0: 6b27 203a 0a09 0924 454e 567b 2748 4f4d k' :...$ENV{'HOM\n-000008f0: 4527 7d20 2e20 272f 7374 6f72 6542 6163 E'} . '/storeBac\n-00000900: 6b75 702e 6c6f 636b 273b 0a6d 7920 2463 kup.lock';.my $c\n-00000910: 6865 636b 5375 6d46 696c 6520 3d20 272e heckSumFile = '.\n-00000920: 6d64 3543 6865 636b 5375 6d73 273b 0a6d md5CheckSums';.m\n-00000930: 7920 2462 6c6f 636b 4368 6563 6b53 756d y $blockCheckSum\n-00000940: 4669 6c65 203d 2027 2e6d 6435 426c 6f63 File = '.md5Bloc\n-00000950: 6b43 6865 636b 5375 6d73 273b 0a6d 7920 kCheckSums';.my \n-00000960: 2462 6173 6554 7265 6543 6f6e 6620 3d20 $baseTreeConf = \n-00000970: 2273 746f 7265 4261 636b 7570 4261 7365 \"storeBackupBase\n-00000980: 5472 6565 2e63 6f6e 6622 3b0a 6d79 2024 Tree.conf\";.my $\n-00000990: 6465 6c74 6143 6163 6865 436f 6e66 203d deltaCacheConf =\n-000009a0: 2022 6465 6c74 6143 6163 6865 2e63 6f6e \"deltaCache.con\n-000009b0: 6622 3b0a 6d79 2024 7042 203d 2027 7072 f\";.my $pB = 'pr\n-000009c0: 6f63 6573 7365 6442 6163 6b75 7073 273b ocessedBackups';\n-000009d0: 0a6d 7920 2461 7263 6869 7665 4475 7261 .my $archiveDura\n-000009e0: 7469 6f6e 4465 6c74 6143 6163 6865 203d tionDeltaCache =\n-000009f0: 2027 3939 6427 3b0a 6d79 2024 6175 746f '99d';.my $auto\n-00000a00: 7265 7061 6972 4572 726f 7220 3d20 313b repairError = 1;\n-00000a10: 0a0a 3d68 6561 6431 204e 414d 450a 0a73 ..=head1 NAME..s\n-00000a20: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate\n-00000a30: 4261 636b 7570 2e70 6c20 2d20 7570 6461 Backup.pl - upda\n-00000a40: 7465 7320 2f20 6669 6e61 6c69 7a65 7320 tes / finalizes \n-00000a50: 6261 636b 7570 7320 6372 6561 7465 6420 backups created \n-00000a60: 6279 2073 746f 7265 4261 636b 7570 2e70 by storeBackup.p\n-00000a70: 6c20 7769 7468 206f 7074 696f 6e20 2d2d l with option --\n-00000a80: 6c61 7465 4c69 6e6b 2c20 2d2d 6c61 7465 lateLink, --late\n-00000a90: 436f 6d70 7265 7373 0a0a 3d68 6561 6431 Compress..=head1\n-00000aa0: 2053 594e 4f50 5349 530a 0a09 7374 6f72 SYNOPSIS...stor\n-00000ab0: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac\n-00000ac0: 6b75 702e 706c 202d 6220 6261 636b 7570 kup.pl -b backup\n-00000ad0: 4469 7265 6374 6f72 7920 5b2d 2d61 7574 Directory [--aut\n-00000ae0: 6f72 6570 6169 725d 0a09 2020 2020 2020 orepair].. \n-00000af0: 5b2d 2d70 7269 6e74 5d20 5b2d 2d76 6572 [--print] [--ver\n-00000b00: 626f 7365 5d20 5b2d 2d64 6562 7567 5d20 bose] [--debug] \n-00000b10: 5b2d 2d6c 6f63 6b46 696c 655d 205b 2d2d [--lockFile] [--\n-00000b20: 6e6f 436f 6d70 7265 7373 5d0a 0920 2020 noCompress].. \n-00000b30: 2020 205b 2d2d 7072 6f67 7265 7373 5265 [--progressRe\n-00000b40: 706f 7274 206e 756d 6265 725d 205b 2d2d port number] [--\n-00000b50: 6368 6563 6b4f 6e6c 795d 205b 2d2d 636f checkOnly] [--co\n-00000b60: 7079 4261 636b 7570 4f6e 6c79 5d0a 0920 pyBackupOnly].. \n-00000b70: 2020 2020 205b 2d2d 646f 6e74 436f 7079 [--dontCopy\n-00000b80: 4261 636b 7570 5d20 5b2d 4120 6172 6368 Backup] [-A arch\n-00000b90: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta\n-00000ba0: 4361 6368 655d 0a09 2020 2020 2020 5b2d Cache].. [-\n-00000bb0: 2d64 6f6e 7444 656c 496e 4465 6c74 6143 -dontDelInDeltaC\n-00000bc0: 6163 6865 5d20 5b2d 2d63 7265 6174 654e ache] [--createN\n-00000bd0: 6577 5365 7269 6573 5d0a 0920 2020 2020 ewSeries].. \n-00000be0: 205b 2d2d 6e6f 5761 726e 696e 6744 6966 [--noWarningDif\n-00000bf0: 6653 6572 6965 7349 6e42 6163 6b75 7043 fSeriesInBackupC\n-00000c00: 6f70 795d 205b 2d2d 6d61 7848 6172 644c opy] [--maxHardL\n-00000c10: 696e 6b73 5d0a 0920 2020 2020 205b 2d2d inks].. [--\n-00000c20: 6c6f 6746 696c 650a 0920 2020 2020 2020 logFile.. \n-00000c30: 5b2d 2d70 6c75 734c 6f67 5374 646f 7574 [--plusLogStdout\n-00000c40: 5d20 5b2d 2d73 7570 7072 6573 7354 696d ] [--suppressTim\n-00000c50: 655d 205b 2d6d 206d 6178 4669 6c65 6c65 e] [-m maxFilele\n-00000c60: 6e5d 0a09 2020 2020 2020 205b 5b2d 6e20 n].. [[-n \n-00000c70: 6e6f 4f66 4f6c 6446 696c 6573 5d20 7c20 noOfOldFiles] | \n-00000c80: 5b2d 2d73 6176 654c 6f67 735d 5d0a 0920 [--saveLogs]].. \n-00000c90: 2020 2020 2020 5b2d 2d63 6f6d 7072 6573 [--compres\n-00000ca0: 7357 6974 6820 636f 6d70 7265 7373 7072 sWith compresspr\n-00000cb0: 6f67 5d5d 0a0a 0973 746f 7265 4261 636b og]]...storeBack\n-00000cc0: 7570 5570 6461 7465 4261 636b 7570 2e70 upUpdateBackup.p\n-00000cd0: 6c20 2d2d 696e 7465 7261 6374 6976 6520 l --interactive \n-00000ce0: 2d2d 6261 636b 7570 4469 7220 746f 704c --backupDir topL\n-00000cf0: 6576 6c44 6972 0a09 2020 2020 2020 5b2d evlDir.. [-\n-00000d00: 2d61 7574 6f72 6570 6169 725d 205b 2d2d -autorepair] [--\n-00000d10: 7072 696e 745d 0a0a 0973 746f 7265 4261 print]...storeBa\n-00000d20: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup\n-00000d30: 2e70 6c20 2d2d 6765 6e42 6163 6b75 7042 .pl --genBackupB\n-00000d40: 6173 6554 7265 6543 6f6e 6620 6469 7265 aseTreeConf dire\n-00000d50: 6374 6f72 790a 0a09 7374 6f72 6542 6163 ctory...storeBac\n-00000d60: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup.\n-00000d70: 706c 202d 2d67 656e 4465 6c74 6143 6163 pl --genDeltaCac\n-00000d80: 6865 436f 6e66 2064 6972 6563 746f 7279 heConf directory\n-00000d90: 0a0a 3d68 6561 6431 2057 4152 4e49 4e47 ..=head1 WARNING\n-00000da0: 0a0a 2020 2121 2120 5553 4147 4520 494e .. !!! USAGE IN\n-00000db0: 2050 4152 414c 4c45 4c20 5749 5448 2073 PARALLEL WITH s\n-00000dc0: 746f 7265 4261 636b 7570 2e70 6c20 4341 toreBackup.pl CA\n-00000dd0: 4e20 4445 5354 524f 5920 594f 5552 2042 N DESTROY YOUR B\n-00000de0: 4143 4b55 5053 2021 2121 0a0a 3d68 6561 ACKUPS !!!..=hea\n-00000df0: 6431 204f 5054 494f 4e53 0a0a 3d6f 7665 d1 OPTIONS..=ove\n-00000e00: 7220 380a 0a3d 6974 656d 2042 3c2d 2d69 r 8..=item B<--i\n-00000e10: 6e74 6572 6163 7469 7665 3e2c 2042 3c2d nteractive>, B<-\n-00000e20: 693e 0a0a 2020 2020 696e 7465 7261 6374 i>.. interact\n-00000e30: 6976 6520 6d6f 6465 2066 6f72 2072 6570 ive mode for rep\n-00000e40: 6172 696e 6720 2f20 6465 6c65 7469 6e67 aring / deleting\n-00000e50: 2063 7572 7275 7074 6564 0a20 2020 2062 currupted. b\n-00000e60: 6163 6b75 7073 2063 7265 6174 6564 2077 ackups created w\n-00000e70: 6974 6820 6f70 7469 6f6e 2027 2d2d 6c61 ith option '--la\n-00000e80: 7465 4c69 6e6b 7327 0a0a 3d69 7465 6d20 teLinks'..=item \n-00000e90: 423c 2d2d 6261 636b 7570 4469 723e 2c20 B<--backupDir>, \n-00000ea0: 423c 2d62 3e0a 0a20 2020 2074 6f70 206c B<-b>.. top l\n-00000eb0: 6576 656c 2064 6972 6563 746f 7279 206f evel directory o\n-00000ec0: 6620 616c 6c20 6261 636b 7570 7320 286d f all backups (m\n-00000ed0: 7573 7420 6578 6973 7429 0a0a 3d69 7465 ust exist)..=ite\n-00000ee0: 6d20 423c 2d2d 6175 746f 7265 7061 6972 m B<--autorepair\n-00000ef0: 3e2c 2042 3c2d 613e 0a0a 2020 2020 7265 >, B<-a>.. re\n-00000f00: 7061 6972 2073 696d 706c 6520 696e 636f pair simple inco\n-00000f10: 6e73 6973 7465 6e63 6965 7320 6175 746f nsistencies auto\n-00000f20: 6d61 7469 6361 6c6c 7920 7769 7468 6f75 matically withou\n-00000f30: 740a 2020 2020 7265 7175 6573 7469 6e67 t. requesting\n-00000f40: 2074 6865 2061 6374 696f 6e0a 0a3d 6974 the action..=it\n-00000f50: 656d 2042 3c2d 2d70 7269 6e74 3e0a 0a20 em B<--print>.. \n-00000f60: 2020 2070 7269 6e74 2063 6f6e 6669 6775 print configu\n-00000f70: 7261 7469 6f6e 2072 6561 6420 6672 6f6d ration read from\n-00000f80: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f\n-00000f90: 696c 6520 616e 6420 7374 6f70 0a0a 3d69 ile and stop..=i\n-00000fa0: 7465 6d20 423c 2d2d 7665 7262 6f73 653e tem B<--verbose>\n-00000fb0: 2c20 423c 2d76 3e0a 0a20 2020 2076 6572 , B<-v>.. ver\n-00000fc0: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..=\n-00000fd0: 6974 656d 2042 3c2d 2d64 6562 7567 3e2c item B<--debug>,\n-00000fe0: 2042 3c2d 643e 0a0a 2020 2020 6765 6e65 B<-d>.. gene\n-00000ff0: 7261 7465 2064 6574 6169 6c65 6420 696e rate detailed in\n-00001000: 666f 726d 6174 696f 6e20 6162 6f75 7420 formation about \n-00001010: 7468 6520 6669 6c65 730a 2020 2020 7769 the files. wi\n-00001020: 7468 2074 6865 206c 696e 6b69 6e67 2069 th the linking i\n-00001030: 6e66 6f72 6d61 7469 6f6e 2069 6e20 6974 nformation in it\n-00001040: 0a0a 3d69 7465 6d20 423c 2d2d 6c6f 636b ..=item B<--lock\n-00001050: 4669 6c65 3e2c 2042 3c2d 4c3e 0a0a 2020 File>, B<-L>.. \n-00001060: 2020 6c6f 636b 2066 696c 652c 2069 6620 lock file, if \n-00001070: 6578 6973 742c 206e 6577 2069 6e73 7461 exist, new insta\n-00001080: 6e63 6573 2077 696c 6c20 6669 6e69 7368 nces will finish\n-00001090: 2069 660a 2020 2020 616e 206f 6c64 2069 if. an old i\n-000010a0: 7320 616c 7265 6164 7920 7275 6e6e 696e s already runnin\n-000010b0: 670a 2020 2020 4966 2073 6574 2074 6f20 g. If set to \n-000010c0: 7468 6520 7361 6d65 2066 696c 6520 6173 the same file as\n-000010d0: 2069 6e20 7374 6f72 6542 6163 6b75 7020 in storeBackup \n-000010e0: 6974 2077 696c 6c0a 2020 2020 7072 6576 it will. prev\n-000010f0: 656e 7420 2470 726f 6720 6672 6f6d 2072 ent $prog from r\n-00001100: 756e 6e69 6e67 2069 6e20 7061 7261 6c6c unning in parall\n-00001110: 656c 0a20 2020 2074 6f20 7374 6f72 6542 el. to storeB\n-00001120: 6163 6b75 702c 2064 6566 6175 6c74 2069 ackup, default i\n-00001130: 7320 246c 6f63 6b46 696c 650a 2020 2020 s $lockFile. \n-00001140: 7468 6973 2074 7970 6520 6f66 206c 6f63 this type of loc\n-00001150: 6b20 6669 6c65 7320 646f 6573 206e 6f74 k files does not\n-00001160: 2077 6f72 6b20 6163 726f 7373 206d 756c work across mul\n-00001170: 7469 706c 6520 7365 7276 6572 730a 2020 tiple servers. \n-00001180: 2020 616e 6420 6973 206e 6f74 2064 6573 and is not des\n-00001190: 6967 6e65 6420 746f 2073 6570 6172 6174 igned to separat\n-000011a0: 6520 7374 6f72 6542 6163 6b75 702e 706c e storeBackup.pl\n-000011b0: 2061 6e64 0a20 2020 2073 746f 7265 4261 and. storeBa\n-000011c0: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup\n-000011d0: 2e70 6c20 6f72 2061 6e79 206f 7468 6572 .pl or any other\n-000011e0: 2073 746f 7265 4261 636b 7570 0a20 2020 storeBackup. \n-000011f0: 2070 726f 6365 7373 2069 6e20 6120 7365 process in a se\n-00001200: 7061 7261 7465 2050 4944 2073 7061 6365 parate PID space\n-00001210: 0a20 2020 2044 6566 6175 6c74 206c 6f63 . Default loc\n-00001220: 6b20 6669 6c65 2066 6f72 2072 6f6f 7420 k file for root \n-00001230: 6973 2069 6e20 2f76 6172 2f6c 6f63 6b2c is in /var/lock,\n-00001240: 2066 6f72 206f 7468 6572 7320 696e 205c for others in \\\n-00001250: 2448 4f4d 450a 0a3d 6974 656d 2042 3c2d $HOME..=item B<-\n-00001260: 2d6e 6f43 6f6d 7072 6573 733e 0a0a 2020 -noCompress>.. \n-00001270: 2020 6d61 7869 6d61 6c20 6e75 6d62 6572 maximal number\n-00001280: 206f 6620 7061 7261 6c6c 656c 2063 6f6d of parallel com\n-00001290: 7072 6573 7320 6f70 6572 6174 696f 6e73 press operations\n-000012a0: 2c0a 2020 2020 6465 6661 756c 7420 3d20 ,. default = \n-000012b0: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic\n-000012c0: 616c 6c79 0a0a 3d69 7465 6d20 423c 2d2d ally..=item B<--\n-000012d0: 6368 6563 6b4f 6e6c 793e 2042 3c2d 633e checkOnly> B<-c>\n-000012e0: 0a0a 2020 2020 646f 206e 6f74 2070 6572 .. do not per\n-000012f0: 666f 726d 2061 6e79 2061 6374 696f 6e2c form any action,\n-00001300: 206f 6e6c 7920 6368 6563 6b20 636f 6e73 only check cons\n-00001310: 6973 7465 6e63 790a 0a3d 6974 656d 2042 istency..=item B\n-00001320: 3c2d 2d63 6f70 7942 6163 6b75 704f 6e6c <--copyBackupOnl\n-00001330: 793e 0a0a 2020 2020 6f6e 6c79 2064 6f20 y>.. only do \n-00001340: 7461 736b 2074 6f20 7265 706c 6963 6174 task to replicat\n-00001350: 6520 696e 6372 656d 656e 7461 6c20 286c e incremental (l\n-00001360: 6174 654c 696e 6b73 290a 2020 2020 6261 ateLinks). ba\n-00001370: 636b 7570 3b20 6e6f 2068 6172 6420 6c69 ckup; no hard li\n-00001380: 6e6b 696e 672c 2063 6f6d 7072 6573 7369 nking, compressi\n-00001390: 6f6e 2c20 6574 632e 0a0a 3d69 7465 6d20 on, etc...=item \n-000013a0: 423c 2d2d 646f 6e74 436f 7079 4261 636b B<--dontCopyBack\n-000013b0: 7570 3e0a 0a20 2020 2064 6f20 6e6f 7420 up>.. do not \n-000013c0: 646f 2061 6e79 2072 6570 6c69 6361 7469 do any replicati\n-000013d0: 6f6e 2074 6173 6b20 746f 2063 6f70 790a on task to copy.\n-000013e0: 2020 2020 696e 6372 656d 656e 7461 6c20 incremental \n-000013f0: 286c 6174 654c 696e 6b29 2062 6163 6b75 (lateLink) backu\n-00001400: 7073 0a20 2020 204e 4f54 453a 2069 6620 ps. NOTE: if \n-00001410: 7573 6564 206f 6e20 7468 6520 6d61 7374 used on the mast\n-00001420: 6572 2063 6163 6865 2c20 7468 6973 206f er cache, this o\n-00001430: 7074 696f 6e20 6469 7372 7570 7473 2074 ption disrupts t\n-00001440: 6865 2064 6174 610a 2020 2020 666c 6f77 he data. flow\n-00001450: 2066 6f72 2072 6570 6c69 6361 7469 6f6e for replication\n-00001460: 210a 0a3d 6974 656d 2042 3c2d 2d61 7263 !..=item B<--arc\n-00001470: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt\n-00001480: 6143 6163 6865 3e20 423c 2d41 3e0a 0a20 aCache> B<-A>.. \n-00001490: 2020 2044 7572 6174 696f 6e20 6166 7465 Duration afte\n-000014a0: 7220 7768 6963 6820 616c 7265 6164 7920 r which already \n-000014b0: 696e 2062 6163 6b75 7043 6f70 7920 636f in backupCopy co\n-000014c0: 7069 6564 2061 6e64 206c 696e 6b65 640a pied and linked.\n-000014d0: 2020 2020 6261 636b 7570 7320 7769 6c6c backups will\n-000014e0: 2062 6520 6465 6c65 7465 642e 2054 6869 be deleted. Thi\n-000014f0: 7320 6166 6665 6374 7320 616c 6c20 7365 s affects all se\n-00001500: 7269 6573 2069 6e0a 2020 2020 6465 6c74 ries in. delt\n-00001510: 6163 6163 6865 7320 7072 6f63 6573 7365 acaches processe\n-00001520: 6442 6163 6b75 7073 2064 6972 6563 746f dBackups directo\n-00001530: 7279 2e0a 2020 2020 5468 6520 6475 7261 ry.. The dura\n-00001540: 7469 6f6e 2068 6173 2074 6f20 6265 2073 tion has to be s\n-00001550: 7065 6369 6669 6564 2069 6e20 666f 726d pecified in form\n-00001560: 6174 2027 6468 6d73 272c 2065 672e 0a20 at 'dhms', eg.. \n-00001570: 2020 2031 3064 3468 206d 6561 6e73 2031 10d4h means 1\n-00001580: 3020 6461 7973 2061 6e64 2034 2068 6f75 0 days and 4 hou\n-00001590: 7273 2c20 6465 6661 756c 7420 6973 2039 rs, default is 9\n-000015a0: 3964 0a20 2020 2028 7369 6d69 6c61 7220 9d. (similar \n-000015b0: 746f 206f 7074 696f 6e20 6b65 6570 416c to option keepAl\n-000015c0: 6c20 696e 2073 746f 7265 4261 636b 7570 l in storeBackup\n-000015d0: 4465 6c2e 706c 290a 0a3d 6974 656d 2042 Del.pl)..=item B\n-000015e0: 3c2d 2d64 6f6e 7444 656c 496e 4465 6c74 <--dontDelInDelt\n-000015f0: 6143 6163 6865 3e0a 2020 2020 646f 206e aCache>. do n\n-00001600: 6f74 2064 656c 6574 6520 616e 7920 6261 ot delete any ba\n-00001610: 636b 7570 2069 6e20 6465 6c74 6143 6163 ckup in deltaCac\n-00001620: 6865 0a0a 3d69 7465 6d20 423c 2d2d 6372 he..=item B<--cr\n-00001630: 6561 7465 4e65 7753 6572 6965 733e 2042 eateNewSeries> B\n-00001640: 3c2d 433e 0a0a 2020 2020 4175 746f 6d61 <-C>.. Automa\n-00001650: 7469 6361 6c6c 7920 6372 6561 7465 206e tically create n\n-00001660: 6577 2073 6572 6965 7320 696e 2064 656c ew series in del\n-00001670: 7461 4361 6368 6520 616e 6420 7468 650a taCache and the.\n-00001680: 2020 2020 7265 706c 6963 6174 696f 6e20 replication \n-00001690: 6469 7265 6374 6f72 7920 2f20 6469 7265 directory / dire\n-000016a0: 6374 6f72 6965 732e 2054 6869 7320 6973 ctories. This is\n-000016b0: 2065 7370 6563 6961 6c6c 7920 7573 6566 especially usef\n-000016c0: 756c 0a20 2020 2069 6620 796f 7520 7573 ul. if you us\n-000016d0: 6520 7769 6c64 6361 7264 7320 746f 2073 e wildcards to s\n-000016e0: 7065 6369 6679 2073 6572 6965 7320 6e61 pecify series na\n-000016f0: 6d65 2077 6869 6368 2073 686f 756c 6420 me which should \n-00001700: 6265 0a20 2020 2061 6464 6564 2027 6f6e be. added 'on\n-00001710: 2074 6865 2066 6c79 270a 0a3d 6974 656d the fly'..=item\n-00001720: 2042 3c2d 2d70 726f 6772 6573 7352 6570 B<--progressRep\n-00001730: 6f72 743e 0a0a 2020 2020 7072 696e 7420 ort>.. print \n-00001740: 7072 6f67 7265 7373 2072 6570 6f72 743a progress report:\n-00001750: 0a0a 3d6f 7665 7220 340a 0a3d 6974 656d ..=over 4..=item\n-00001760: 2061 6674 6572 2065 6163 6820 276e 756d after each 'num\n-00001770: 6265 7227 2066 696c 6573 2077 6865 6e20 ber' files when \n-00001780: 636f 6d70 7265 7373 696e 670a 0a3d 6974 compressing..=it\n-00001790: 656d 2061 6674 6572 2065 6163 6820 276e em after each 'n\n-000017a0: 756d 6265 7220 2a20 3130 3030 2720 6669 umber * 1000' fi\n-000017b0: 6c65 7320 7768 656e 206c 696e 6b69 6e67 les when linking\n-000017c0: 0a0a 3d69 7465 6d20 6166 7465 7220 6561 ..=item after ea\n-000017d0: 6368 2027 6e75 6d62 6572 202a 2031 3030 ch 'number * 100\n-000017e0: 3030 2720 6669 6c65 7320 7768 656e 2070 00' files when p\n-000017f0: 6572 666f 726d 696e 6720 6368 6d6f 640a erforming chmod.\n-00001800: 0a3d 6261 636b 0a0a 3d69 7465 6d20 423c .=back..=item B<\n-00001810: 2d2d 6e6f 5761 726e 696e 6744 6966 6653 --noWarningDiffS\n-00001820: 6572 6965 7349 6e42 6163 6b75 7043 6f70 eriesInBackupCop\n-00001830: 793e 2c20 423c 2d4e 3e0a 0a20 2020 2064 y>, B<-N>.. d\n-00001840: 6f20 6e6f 7420 7772 6974 6520 6120 7761 o not write a wa\n-00001850: 726e 696e 6720 6966 2074 6865 7265 2069 rning if there i\n-00001860: 7320 6120 6469 6666 6572 656e 7420 7365 s a different se\n-00001870: 7420 6f66 2073 6572 6965 730a 2020 2020 t of series. \n-00001880: 696e 7369 6465 2074 6865 2062 6163 6b75 inside the backu\n-00001890: 7020 636f 7079 2028 7265 706c 6963 6174 p copy (replicat\n-000018a0: 696f 6e20 6469 7265 6374 6f72 7929 2074 ion directory) t\n-000018b0: 6861 6e20 696e 2074 6865 0a20 2020 2061 han in the. a\n-000018c0: 6374 7561 6c20 6465 6c74 6143 6163 6865 ctual deltaCache\n-000018d0: 0a0a 3d69 7465 6d20 423c 2d2d 6d61 7848 ..=item B<--maxH\n-000018e0: 6172 644c 696e 6b73 3e0a 0a20 2020 206d ardLinks>.. m\n-000018f0: 6178 696d 756d 206e 756d 6265 7220 6f66 aximum number of\n-00001900: 2068 6172 6420 6c69 6e6b 7320 746f 2075 hard links to u\n-00001910: 7365 0a20 2020 207a 6572 6f20 2864 6566 se. zero (def\n-00001920: 6175 6c74 2920 6d65 616e 7320 6c69 6d69 ault) means limi\n-00001930: 7420 6465 7065 6e64 7320 6f6e 2066 696c t depends on fil\n-00001940: 6520 7379 7374 656d 2075 7365 6420 6f6e e system used on\n-00001950: 6c79 0a0a 3d69 7465 6d20 423c 2d2d 6c6f ly..=item B<--lo\n-00001960: 6746 696c 653e 2c20 423c 2d6c 3e0a 0a20 gFile>, B<-l>.. \n-00001970: 2020 206c 6f67 4669 6c65 2c20 4465 6661 logFile, Defa\n-00001980: 756c 743a 2073 7464 6f75 740a 0a3d 6974 ult: stdout..=it\n-00001990: 656d 2042 3c2d 2d70 6c75 734c 6f67 5374 em B<--plusLogSt\n-000019a0: 646f 7574 3e0a 0a20 2020 2069 6620 796f dout>.. if yo\n-000019b0: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log \n-000019c0: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF\n-000019d0: 696c 6520 796f 7520 6361 6e0a 2020 2020 ile you can. \n-000019e0: 6164 6469 7469 6f6e 616c 6c79 2070 7269 additionally pri\n-000019f0: 6e74 2074 6865 206f 7574 7075 7420 746f nt the output to\n-00001a00: 2053 5444 4f55 5420 7769 7468 2074 6869 STDOUT with thi\n-00001a10: 7320 666c 6167 0a0a 3d69 7465 6d20 423c s flag..=item B<\n-00001a20: 2d2d 7375 7070 7265 7373 5469 6d65 3e0a --suppressTime>.\n-00001a30: 0a20 2020 2073 7570 7072 6573 7320 6f75 . suppress ou\n-00001a40: 7470 7574 206f 6620 7469 6d65 2069 6e20 tput of time in \n-00001a50: 6c6f 6766 696c 650a 0a3d 6974 656d 2042 logfile..=item B\n-00001a60: 3c2d 2d6d 6178 4669 6c65 6c65 6e3e 2c20 <--maxFilelen>, \n-00001a70: 423c 2d6d 3e0a 0a20 2020 206d 6178 696d B<-m>.. maxim\n-00001a80: 616c 206c 656e 6774 6820 6f66 206c 6f67 al length of log\n-00001a90: 2066 696c 652c 2064 6566 6175 6c74 203d file, default =\n-00001aa0: 2031 6536 0a0a 3d69 7465 6d20 423c 2d2d 1e6..=item B<--\n-00001ab0: 6e6f 4f66 4f6c 6446 696c 6573 3e2c 2042 noOfOldFiles>, B\n-00001ac0: 3c2d 6e3e 0a0a 2020 2020 6e75 6d62 6572 <-n>.. number\n-00001ad0: 206f 6620 6f6c 6420 6c6f 6720 6669 6c65 of old log file\n-00001ae0: 732c 2064 6566 6175 6c74 203d 2035 0a0a s, default = 5..\n-00001af0: 3d69 7465 6d20 423c 2d2d 7361 7665 4c6f =item B<--saveLo\n-00001b00: 6773 3e0a 0a20 2020 2073 6176 6520 6c6f gs>.. save lo\n-00001b10: 6720 6669 6c65 7320 7769 7468 2064 6174 g files with dat\n-00001b20: 6520 616e 6420 7469 6d65 2069 6e73 7465 e and time inste\n-00001b30: 6164 206f 6620 6465 6c65 7469 6e67 2074 ad of deleting t\n-00001b40: 6865 0a20 2020 206f 6c64 2028 7769 7468 he. old (with\n-00001b50: 205b 2d6e 6f4f 664f 6c64 4669 6c65 735d [-noOfOldFiles]\n-00001b60: 290a 0a3d 6974 656d 2042 3c2d 2d63 6f6d )..=item B<--com\n-00001b70: 7072 6573 7357 6974 683e 0a0a 2020 2020 pressWith>.. \n-00001b80: 636f 6d70 7265 7373 2073 6176 6564 206c compress saved l\n-00001b90: 6f67 2066 696c 6573 2028 652e 672e 2077 og files (e.g. w\n-00001ba0: 6974 6820 2767 7a69 7020 2d39 2729 2e0a ith 'gzip -9')..\n-00001bb0: 2020 2020 6465 6661 756c 7420 6973 2027 default is '\n-00001bc0: 627a 6970 3227 0a0a 3d69 7465 6d20 423c bzip2'..=item B<\n-00001bd0: 2d2d 6765 6e42 6163 6b75 7042 6173 6554 --genBackupBaseT\n-00001be0: 7265 6543 6f6e 663e 0a0a 2020 2020 6765 reeConf>.. ge\n-00001bf0: 6e65 7261 7465 2061 2074 656d 706c 6174 nerate a templat\n-00001c00: 6520 6f66 2074 6865 2062 6163 6b75 702d e of the backup-\n-00001c10: 636f 7079 2063 6f6e 6669 6775 7261 7469 copy configurati\n-00001c20: 6f6e 2066 696c 650a 2020 2020 666f 7220 on file. for \n-00001c30: 7468 6520 6261 636b 7570 2064 6972 6563 the backup direc\n-00001c40: 746f 7269 6573 2028 626f 7468 2073 6f75 tories (both sou\n-00001c50: 7263 6520 616e 6420 7461 7267 6574 290a rce and target).\n-00001c60: 0a3d 6974 656d 2042 3c2d 2d67 656e 4465 .=item B<--genDe\n-00001c70: 6c74 6143 6163 6865 436f 6e66 3e0a 0a20 ltaCacheConf>.. \n-00001c80: 2020 2067 656e 6572 6174 6520 6120 7465 generate a te\n-00001c90: 6d70 6c61 7465 206f 6620 7468 6520 6261 mplate of the ba\n-00001ca0: 636b 7570 2d63 6f70 7920 636f 6e66 6967 ckup-copy config\n-00001cb0: 7572 6174 696f 6e20 6669 6c65 0a20 2020 uration file. \n-00001cc0: 2066 6f72 2074 6865 2064 656c 7461 4361 for the deltaCa\n-00001cd0: 6368 6520 6469 7265 6374 6f72 790a 0a3d che directory..=\n-00001ce0: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP\n-00001cf0: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh\n-00001d00: 7420 2863 2920 3230 3038 2d32 3032 3220 t (c) 2008-2022 \n-00001d10: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C\n-00001d20: 6c61 6573 2e0a 5075 626c 6973 6865 6420 laes..Published \n-00001d30: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge\n-00001d40: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n-00001d50: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l\n-00001d60: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c\n-00001d70: 7574 0a0a 6d79 2024 4865 6c70 203d 2026 ut..my $Help = &\n-00001d80: 3a3a 6765 7450 6f64 3254 6578 7428 2430 ::getPod2Text($0\n-00001d90: 293b 0a0a 2670 7269 6e74 5665 7273 696f );..&printVersio\n-00001da0: 6e28 5c40 4152 4756 2c20 272d 5627 2c20 n(\\@ARGV, '-V', \n-00001db0: 272d 2d76 6572 7369 6f6e 2729 3b0a 0a6d '--version');..m\n-00001dc0: 7920 2473 7461 7274 4461 7465 203d 2064 y $startDate = d\n-00001dd0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 293b ateTools->new();\n-00001de0: 0a6d 7920 2443 6865 636b 5061 7220 3d0a .my $CheckPar =.\n-00001df0: 2020 2020 4368 6563 6b50 6172 616d 2d3e CheckParam->\n-00001e00: 6e65 7728 272d 6c69 7374 2720 3d3e 205b new('-list' => [\n-00001e10: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00001e20: 6d65 2720 3d3e 2027 6261 636b 7570 4469 me' => 'backupDi\n-00001e30: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n-00001e40: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b\n-00001e50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001e60: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba\n-00001e70: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... \n-00001e80: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-00001e90: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-00001ea0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001eb0: 3e20 2761 7574 6f72 6570 6169 7227 2c0a > 'autorepair',.\n-00001ec0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001ed0: 7469 6f6e 2720 3d3e 2027 2d2d 6175 746f tion' => '--auto\n-00001ee0: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... \n-00001ef0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00001f00: 2027 2d61 2729 2c0a 2020 2020 2020 2020 '-a'),. \n-00001f10: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001f20: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00001f30: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001f40: 7072 696e 7427 2c0a 0909 0909 0920 2020 print',...... \n-00001f50: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001f60: 2027 2d2d 7072 696e 7427 292c 0a09 0909 '--print'),....\n-00001f70: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00001f80: 616d 6527 203d 3e20 2769 6e74 6572 6163 ame' => 'interac\n-00001f90: 7469 7665 272c 0a09 0909 0909 2020 2020 tive',...... \n-00001fa0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001fb0: 272d 6927 2c0a 0909 0909 0920 2020 2027 '-i',...... '\n-00001fc0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '-\n-00001fd0: 2d69 6e74 6572 6163 7469 7665 2729 2c0a -interactive'),.\n-00001fe0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00001ff0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 636b '-name' => 'lock\n-00002000: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... \n-00002010: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00002020: 272d 4c27 2c0a 2020 2020 2020 2020 2020 '-L',. \n-00002030: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002040: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002050: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00002060: 2027 2d2d 6c6f 636b 4669 6c65 272c 0a09 '--lockFile',..\n-00002070: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-00002080: 6627 203d 3e20 276e 6f74 205b 696e 7465 f' => 'not [inte\n-00002090: 7261 6374 6976 655d 272c 0a20 2020 2020 ractive]',. \n-000020a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000020b0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000020c0: 2020 2020 2020 2027 2d64 6566 6175 6c74 '-default\n-000020d0: 2720 3d3e 2024 6c6f 636b 4669 6c65 292c ' => $lockFile),\n-000020e0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-000020f0: 2827 2d6e 616d 6527 203d 3e20 276e 6f43 ('-name' => 'noC\n-00002100: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... \n-00002110: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00002120: 3d3e 2027 2d2d 6e6f 436f 6d70 7265 7373 => '--noCompress\n-00002130: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa\n-00002140: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',..\n-00002150: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n-00002160: 6e27 203d 3e20 275c 415b 312d 395d 5c64 n' => '\\A[1-9]\\d\n-00002170: 2a5c 5a27 292c 0a09 0909 094f 7074 696f *\\Z'),.....Optio\n-00002180: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00002190: 3e20 2763 6865 636b 4f6e 6c79 272c 0a09 > 'checkOnly',..\n-000021a0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-000021b0: 696f 6e27 203d 3e20 272d 6327 2c0a 0909 ion' => '-c',...\n-000021c0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-000021d0: 7327 203d 3e20 272d 2d63 6865 636b 4f6e s' => '--checkOn\n-000021e0: 6c79 272c 0a09 0909 0909 2020 2020 272d ly',...... '-\n-000021f0: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not\n-00002200: 205b 696e 7465 7261 6374 6976 655d 2729 [interactive]')\n-00002210: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00002220: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co\n-00002230: 7079 4261 636b 7570 4f6e 6c79 272c 0a09 pyBackupOnly',..\n-00002240: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00002250: 696f 6e27 203d 3e20 272d 2d63 6f70 7942 ion' => '--copyB\n-00002260: 6163 6b75 704f 6e6c 7927 2c0a 0909 0909 ackupOnly',.....\n-00002270: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' \n-00002280: 3d3e 2027 6e6f 7420 5b69 6e74 6572 6163 => 'not [interac\n-00002290: 7469 7665 5d27 292c 0a09 0909 094f 7074 tive]'),.....Opt\n-000022a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000022b0: 203d 3e20 2764 6f6e 7443 6f70 7942 6163 => 'dontCopyBac\n-000022c0: 6b75 7027 2c0a 0909 0909 0920 2020 2027 kup',...... '\n-000022d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-000022e0: 2d2d 646f 6e74 436f 7079 4261 636b 7570 --dontCopyBackup\n-000022f0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-00002300: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n-00002310: 696e 7465 7261 6374 6976 655d 2729 2c0a interactive]'),.\n-00002320: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00002330: 272d 6e61 6d65 2720 3d3e 2027 6172 6368 '-name' => 'arch\n-00002340: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta\n-00002350: 4361 6368 6527 2c0a 0909 0909 0920 2020 Cache',...... \n-00002360: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00002370: 2027 2d41 272c 0a09 0909 0909 2020 2020 '-A',...... \n-00002380: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00002390: 2d2d 6172 6368 6976 6544 7572 6174 696f --archiveDuratio\n-000023a0: 6e44 656c 7461 4361 6368 6527 2c0a 0909 nDeltaCache',...\n-000023b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-000023c0: 203d 3e20 2761 7263 6869 7665 4475 7261 => 'archiveDura\n-000023d0: 7469 6f6e 4465 6c74 6143 6163 6865 272c tionDeltaCache',\n-000023e0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa\n-000023f0: 756c 7427 203d 3e20 2461 7263 6869 7665 ult' => $archive\n-00002400: 4475 7261 7469 6f6e 4465 6c74 6143 6163 DurationDeltaCac\n-00002410: 6865 2c0a 0909 0909 0920 2020 2027 2d6f he,...... '-o\n-00002420: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not \n-00002430: 5b69 6e74 6572 6163 7469 7665 5d27 292c [interactive]'),\n-00002440: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00002450: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002460: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n\n-00002470: 616d 6527 203d 3e20 2764 6f6e 7444 656c ame' => 'dontDel\n-00002480: 496e 4465 6c74 6143 6163 6865 272c 0a09 InDeltaCache',..\n-00002490: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-000024a0: 696f 6e27 203d 3e20 272d 2d64 6f6e 7444 ion' => '--dontD\n-000024b0: 656c 496e 4465 6c74 6143 6163 6865 272c elInDeltaCache',\n-000024c0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only\n-000024d0: 5f69 6627 203d 3e20 276e 6f74 205b 696e _if' => 'not [in\n-000024e0: 7465 7261 6374 6976 655d 2729 2c0a 0909 teractive]'),...\n-000024f0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-00002500: 6e61 6d65 2720 3d3e 2027 6372 6561 7465 name' => 'create\n-00002510: 4e65 7753 6572 6965 7327 2c0a 0909 0909 NewSeries',.....\n-00002520: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option\n-00002530: 2720 3d3e 2027 2d43 272c 0a09 0909 0909 ' => '-C',......\n-00002540: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00002550: 3e20 276e 6f74 205b 696e 7465 7261 6374 > 'not [interact\n-00002560: 6976 655d 272c 0a09 0909 0909 2020 2020 ive]',...... \n-00002570: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00002580: 2d2d 6372 6561 7465 4e65 7753 6572 6965 --createNewSerie\n-00002590: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option-\n-000025a0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => \n-000025b0: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport'\n-000025c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-000025d0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr\n-000025e0: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',..\n-000025f0: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul\n-00002600: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... \n-00002610: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => \n-00002620: 275c 415c 642b 5c5a 2729 2c0a 0909 0909 '\\A\\d+\\Z'),.....\n-00002630: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-00002640: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose'\n-00002650: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00002660: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v',\n-00002670: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only\n-00002680: 5f69 6627 203d 3e20 276e 6f74 205b 696e _if' => 'not [in\n-00002690: 7465 7261 6374 6976 655d 272c 0a09 0909 teractive]',....\n-000026a0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-000026b0: 2720 3d3e 2027 2d2d 7665 7262 6f73 6527 ' => '--verbose'\n-000026c0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-000026d0: 6577 2827 2d6e 616d 6527 203d 3e20 2764 ew('-name' => 'd\n-000026e0: 6562 7567 272c 0a09 0909 0909 2020 2020 ebug',...... \n-000026f0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00002700: 272d 2d64 6562 7567 272c 0a09 0909 0909 '--debug',......\n-00002710: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' \n-00002720: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... \n-00002730: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => \n-00002740: 276e 6f74 205b 696e 7465 7261 6374 6976 'not [interactiv\n-00002750: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option\n-00002760: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00002770: 2027 6e6f 5761 726e 696e 6744 6966 6653 'noWarningDiffS\n-00002780: 6572 6965 7349 6e42 6163 6b75 7043 6f70 eriesInBackupCop\n-00002790: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c\n-000027a0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d4e l_option' => '-N\n-000027b0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-000027c0: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [\n-000027d0: 696e 7465 7261 6374 6976 655d 272c 0a09 interactive]',..\n-000027e0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-000027f0: 6173 2720 3d3e 2027 2d2d 6e6f 5761 726e as' => '--noWarn\n-00002800: 696e 6744 6966 6653 6572 6965 7349 6e42 ingDiffSeriesInB\n-00002810: 6163 6b75 7043 6f70 7927 292c 0a09 0909 ackupCopy'),....\n-00002820: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00002830: 616d 6527 203d 3e20 276d 6178 4861 7264 ame' => 'maxHard\n-00002840: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... \n-00002850: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00002860: 2027 2d2d 6d61 7848 6172 644c 696e 6b73 '--maxHardLinks\n-00002870: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-00002880: 6661 756c 7427 203d 3e20 302c 0a09 0909 fault' => 0,....\n-00002890: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-000028a0: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\\A\\d+\\Z'),.\n-000028b0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-000028c0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF\n-000028d0: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... '\n-000028e0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-000028f0: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '-\n-00002900: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00002910: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... \n-00002920: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-00002930: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... '\n-00002940: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no\n-00002950: 7420 5b69 6e74 6572 6163 7469 7665 5d27 t [interactive]'\n-00002960: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n\n-00002970: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p\n-00002980: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',..\n-00002990: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-000029a0: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL\n-000029b0: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',......\n-000029c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-000029d0: 3e20 275b 6c6f 6746 696c 655d 2729 2c0a > '[logFile]'),.\n-000029e0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-000029f0: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp\n-00002a00: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',......\n-00002a10: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00002a20: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT\n-00002a30: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio\n-00002a40: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00002a50: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',.\n-00002a60: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00002a70: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',..\n-00002a80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00002a90: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil\n-00002aa0: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... \n-00002ab0: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e\n-00002ac0: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa\n-00002ad0: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\\A[e\\\n-00002ae0: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\\Z',. \n-00002af0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002b00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002b10: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00002b20: 3e27 5b6c 6f67 4669 6c65 5d27 292c 0a09 >'[logFile]'),..\n-00002b30: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new('\n-00002b40: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO\n-00002b50: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... \n-00002b60: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00002b70: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... \n-00002b80: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00002b90: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles\n-00002ba0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-00002bb0: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',..\n-00002bc0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter\n-00002bd0: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\\A\\d+\\Z',\n-00002be0: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00002bf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002c00: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o\n-00002c10: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>\"[logF\n-00002c20: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]\"),. \n-00002c30: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002c40: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00002c50: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00002c60: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',......\n-00002c70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option'\n-00002c80: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs'\n-00002c90: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00002ca0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002cb0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00002cc0: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no'\n-00002cd0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. \n-00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002cf0: 2020 2020 2020 2020 2020 2020 2020 272d '-\n-00002d00: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo\n-00002d10: 6746 696c 655d 2729 2c0a 2020 2020 2020 gFile]'),. \n-00002d20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002d30: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option\n-00002d40: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00002d50: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith',\n-00002d60: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o\n-00002d70: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com\n-00002d80: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',.....\n-00002d90: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval\n-00002da0: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. \n-00002db0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002dc0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002dd0: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul\n-00002de0: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. \n-00002df0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002e00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002e10: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl\n-00002e20: 795f 6966 2720 3d3e 275b 6c6f 6746 696c y_if' =>'[logFil\n-00002e30: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option\n-00002e40: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00002e50: 2027 6765 6e42 6163 6b75 7042 6173 6554 'genBackupBaseT\n-00002e60: 7265 6543 6f6e 6627 2c0a 0909 0909 0920 reeConf',...... \n-00002e70: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00002e80: 3d3e 2027 2d2d 6765 6e42 6163 6b75 7042 => '--genBackupB\n-00002e90: 6173 6554 7265 6543 6f6e 6627 2c0a 0909 aseTreeConf',...\n-00002ea0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00002eb0: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi\n-00002ec0: 725d 2061 6e64 206e 6f74 205b 6765 6e44 r] and not [genD\n-00002ed0: 656c 7461 4361 6368 6543 6f6e 665d 272c eltaCacheConf]',\n-00002ee0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-00002ef0: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),...\n-00002f00: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-00002f10: 6e61 6d65 2720 3d3e 2027 6765 6e44 656c name' => 'genDel\n-00002f20: 7461 4361 6368 6543 6f6e 6627 2c0a 0909 taCacheConf',...\n-00002f30: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-00002f40: 6f6e 2720 3d3e 2027 2d2d 6765 6e44 656c on' => '--genDel\n-00002f50: 7461 4361 6368 6543 6f6e 6627 2c0a 0909 taCacheConf',...\n-00002f60: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' =\n-00002f70: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi\n-00002f80: 725d 2061 6e64 206e 6f74 205b 6765 6e42 r] and not [genB\n-00002f90: 6163 6b75 7042 6173 6554 7265 6543 6f6e ackupBaseTreeCon\n-00002fa0: 665d 272c 0a09 0909 0909 2020 2020 272d f]',...... '-\n-00002fb0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes')\n-00002fc0: 2c0a 2320 6869 6464 656e 206f 7074 696f ,.# hidden optio\n-00002fd0: 6e73 0a23 2075 7365 6420 6279 2073 746f ns.# used by sto\n-00002fe0: 7265 4261 636b 7570 4d6f 756e 742e 706c reBackupMount.pl\n-00002ff0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00003000: 2827 2d6e 616d 6527 203d 3e20 2777 7269 ('-name' => 'wri\n-00003010: 7465 546f 4e61 6d65 6450 6970 6527 2c0a teToNamedPipe',.\n-00003020: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00003030: 7469 6f6e 2720 3d3e 2027 2d2d 7772 6974 tion' => '--writ\n-00003040: 6554 6f4e 616d 6564 5069 7065 272c 0a09 eToNamedPipe',..\n-00003050: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00003060: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',......\n-00003070: 2020 2020 272d 6869 6464 656e 2720 3d3e '-hidden' =>\n-00003080: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n-00003090: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-000030a0: 203d 3e20 2773 6b69 7053 796e 6327 2c0a => 'skipSync',.\n-000030b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-000030c0: 7469 6f6e 2720 3d3e 2027 2d2d 736b 6970 tion' => '--skip\n-000030d0: 5379 6e63 2729 0a09 0909 095d 0a09 0920 Sync').....]... \n-000030e0: 2020 2029 3b0a 0a24 4368 6563 6b50 6172 );..$CheckPar\n-000030f0: 2d3e 6368 6563 6b28 272d 6172 6776 2720 ->check('-argv' \n-00003100: 3d3e 205c 4041 5247 562c 0a20 2020 2020 => \\@ARGV,. \n-00003110: 2020 2020 2020 2020 2020 2020 272d 6865 '-he\n-00003120: 6c70 2720 3d3e 2024 4865 6c70 0a20 2020 lp' => $Help. \n-00003130: 2020 2020 2020 2020 2020 2020 2020 293b );\n-00003140: 0a0a 2320 4175 7377 6572 7475 6e67 2064 ..# Auswertung d\n-00003150: 6572 2050 6172 616d 6574 6572 0a6d 7920 er Parameter.my \n-00003160: 2461 7574 6f72 6570 6169 7220 3d20 2443 $autorepair = $C\n-00003170: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00003180: 6974 686f 7574 5061 7228 2761 7574 6f72 ithoutPar('autor\n-00003190: 6570 6169 7227 293b 0a6d 7920 2470 7269 epair');.my $pri\n-000031a0: 6e74 203d 2024 4368 6563 6b50 6172 2d3e nt = $CheckPar->\n-000031b0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-000031c0: 2827 7072 696e 7427 293b 0a6d 7920 2469 ('print');.my $i\n-000031d0: 6e74 6572 6163 7469 7665 203d 2024 4368 nteractive = $Ch\n-000031e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000031f0: 7468 6f75 7450 6172 2827 696e 7465 7261 thoutPar('intera\n-00003200: 6374 6976 6527 293b 0a6d 7920 2476 6572 ctive');.my $ver\n-00003210: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar\n-00003220: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00003230: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m\n-00003240: 7920 2464 6562 7567 203d 2024 4368 6563 y $debug = $Chec\n-00003250: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00003260: 6f75 7450 6172 2827 6465 6275 6727 293b outPar('debug');\n-00003270: 0a24 6c6f 636b 4669 6c65 203d 2024 4368 .$lockFile = $Ch\n-00003280: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00003290: 7468 5061 7228 276c 6f63 6b46 696c 6527 thPar('lockFile'\n-000032a0: 293b 0a6d 7920 246e 6f43 6f6d 7072 6573 );.my $noCompres\n-000032b0: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g\n-000032c0: 6574 4f70 7457 6974 6850 6172 2827 6e6f etOptWithPar('no\n-000032d0: 436f 6d70 7265 7373 2729 3b0a 6d79 2024 Compress');.my $\n-000032e0: 6368 6563 6b4f 6e6c 7920 3d20 2443 6865 checkOnly = $Che\n-000032f0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00003300: 686f 7574 5061 7228 2763 6865 636b 4f6e houtPar('checkOn\n-00003310: 6c79 2729 3b0a 6d79 2024 636f 7079 4261 ly');.my $copyBa\n-00003320: 636b 7570 4f6e 6c79 203d 2024 4368 6563 ckupOnly = $Chec\n-00003330: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00003340: 6f75 7450 6172 2827 636f 7079 4261 636b outPar('copyBack\n-00003350: 7570 4f6e 6c79 2729 3b0a 6d79 2024 646f upOnly');.my $do\n-00003360: 6e74 436f 7079 4261 636b 7570 203d 2024 ntCopyBackup = $\n-00003370: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00003380: 5769 7468 6f75 7450 6172 2827 646f 6e74 WithoutPar('dont\n-00003390: 436f 7079 4261 636b 7570 2729 3b0a 2461 CopyBackup');.$a\n-000033a0: 7263 6869 7665 4475 7261 7469 6f6e 4465 rchiveDurationDe\n-000033b0: 6c74 6143 6163 6865 203d 2024 4368 6563 ltaCache = $Chec\n-000033c0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-000033d0: 5061 7228 2761 7263 6869 7665 4475 7261 Par('archiveDura\n-000033e0: 7469 6f6e 4465 6c74 6143 6163 6865 2729 tionDeltaCache')\n-000033f0: 3b0a 6d79 2024 646f 6e74 4465 6c49 6e44 ;.my $dontDelInD\n-00003400: 656c 7461 4361 6368 6520 3d20 2443 6865 eltaCache = $Che\n-00003410: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00003420: 686f 7574 5061 7228 2764 6f6e 7444 656c houtPar('dontDel\n-00003430: 496e 4465 6c74 6143 6163 6865 2729 3b0a InDeltaCache');.\n-00003440: 6d79 2024 6372 6561 7465 4e65 7753 6572 my $createNewSer\n-00003450: 6965 7320 3d20 2443 6865 636b 5061 722d ies = $CheckPar-\n-00003460: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00003470: 7228 2763 7265 6174 654e 6577 5365 7269 r('createNewSeri\n-00003480: 6573 2729 3b0a 6d79 2024 7072 6f67 7265 es');.my $progre\n-00003490: 7373 5265 706f 7274 203d 2024 4368 6563 ssReport = $Chec\n-000034a0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-000034b0: 5061 7228 2770 726f 6772 6573 7352 6570 Par('progressRep\n-000034c0: 6f72 7427 293b 0a6d 7920 246e 6f57 6172 ort');.my $noWar\n-000034d0: 6e69 6e67 4469 6666 5365 7269 6573 496e ningDiffSeriesIn\n-000034e0: 4261 636b 7570 436f 7079 203d 0a20 2020 BackupCopy =. \n-000034f0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003500: 7074 5769 7468 6f75 7450 6172 2827 6e6f ptWithoutPar('no\n-00003510: 5761 726e 696e 6744 6966 6653 6572 6965 WarningDiffSerie\n-00003520: 7349 6e42 6163 6b75 7043 6f70 7927 293b sInBackupCopy');\n-00003530: 0a6d 7920 246d 6178 4861 7264 4c69 6e6b .my $maxHardLink\n-00003540: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g\n-00003550: 6574 4f70 7457 6974 6850 6172 2827 6d61 etOptWithPar('ma\n-00003560: 7848 6172 644c 696e 6b73 2729 3b0a 6d79 xHardLinks');.my\n-00003570: 2024 6c6f 6746 696c 6520 3d20 2443 6865 $logFile = $Che\n-00003580: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00003590: 6850 6172 2827 6c6f 6746 696c 6527 293b hPar('logFile');\n-000035a0: 0a6d 7920 2470 6c75 734c 6f67 5374 646f .my $plusLogStdo\n-000035b0: 7574 203d 2024 4368 6563 6b50 6172 2d3e ut = $CheckPar->\n-000035c0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar\n-000035d0: 2827 706c 7573 4c6f 6753 7464 6f75 7427 ('plusLogStdout'\n-000035e0: 293b 0a6d 7920 2477 6974 6854 696d 6520 );.my $withTime \n-000035f0: 3d20 6e6f 7420 2443 6865 636b 5061 722d = not $CheckPar-\n-00003600: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa\n-00003610: 7228 2773 7570 7072 6573 7354 696d 6527 r('suppressTime'\n-00003620: 293b 0a24 7769 7468 5469 6d65 203d 2024 );.$withTime = $\n-00003630: 7769 7468 5469 6d65 203f 2027 7965 7327 withTime ? 'yes'\n-00003640: 203a 2027 6e6f 273b 0a6d 7920 246d 6178 : 'no';.my $max\n-00003650: 4669 6c65 6c65 6e20 3d20 2443 6865 636b Filelen = $Check\n-00003660: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP\n-00003670: 6172 2827 6d61 7846 696c 656c 656e 2729 ar('maxFilelen')\n-00003680: 3b0a 6d79 2024 6e6f 4f66 4f6c 6446 696c ;.my $noOfOldFil\n-00003690: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar->\n-000036a0: 6765 744f 7074 5769 7468 5061 7228 276e getOptWithPar('n\n-000036b0: 6f4f 664f 6c64 4669 6c65 7327 293b 0a6d oOfOldFiles');.m\n-000036c0: 7920 2473 6176 654c 6f67 7320 3d20 2443 y $saveLogs = $C\n-000036d0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-000036e0: 6974 6850 6172 2827 7361 7665 4c6f 6773 ithPar('saveLogs\n-000036f0: 2729 3b0a 6d79 2024 636f 6d70 7265 7373 ');.my $compress\n-00003700: 5769 7468 203d 2024 4368 6563 6b50 6172 With = $CheckPar\n-00003710: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-00003720: 2763 6f6d 7072 6573 7357 6974 6827 293b 'compressWith');\n-00003730: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir =\n-00003740: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00003750: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu\n-00003760: 7044 6972 2729 3b0a 6d79 2024 6765 6e42 pDir');.my $genB\n-00003770: 6163 6b75 7042 6173 6554 7265 6543 6f6e ackupBaseTreeCon\n-00003780: 6620 3d20 2443 6865 636b 5061 722d 3e67 f = $CheckPar->g\n-00003790: 6574 4f70 7457 6974 6850 6172 2827 6765 etOptWithPar('ge\n-000037a0: 6e42 6163 6b75 7042 6173 6554 7265 6543 nBackupBaseTreeC\n-000037b0: 6f6e 6627 293b 0a6d 7920 2467 656e 4465 onf');.my $genDe\n-000037c0: 6c74 6143 6163 6865 436f 6e66 203d 2024 ltaCacheConf = $\n-000037d0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000037e0: 5769 7468 5061 7228 2767 656e 4465 6c74 WithPar('genDelt\n-000037f0: 6143 6163 6865 436f 6e66 2729 3b0a 2320 aCacheConf');.# \n-00003800: 6869 6464 656e 206f 7074 696f 6e73 0a6d hidden options.m\n-00003810: 7920 2477 7269 7465 546f 4e61 6d65 6450 y $writeToNamedP\n-00003820: 6970 6520 3d20 2443 6865 636b 5061 722d ipe = $CheckPar-\n-00003830: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00003840: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe\n-00003850: 2729 3b0a 6d79 2024 736b 6970 5379 6e63 ');.my $skipSync\n-00003860: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00003870: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n-00003880: 736b 6970 5379 6e63 2729 3b0a 0a0a 756e skipSync');...un\n-00003890: 6c65 7373 2028 246e 6f43 6f6d 7072 6573 less ($noCompres\n-000038a0: 7329 0a7b 0a20 2020 206c 6f63 616c 202a s).{. local *\n-000038b0: 4649 4c45 3b0a 2020 2020 6966 2028 6f70 FILE;. if (op\n-000038c0: 656e 2846 494c 452c 2022 2f70 726f 632f en(FILE, \"/proc/\n-000038d0: 6370 7569 6e66 6f22 2929 0a20 2020 207b cpuinfo\")). {\n-000038e0: 0a09 6d79 2024 6c3b 0a09 246e 6f43 6f6d ..my $l;..$noCom\n-000038f0: 7072 6573 7320 3d20 313b 0a09 7768 696c press = 1;..whil\n-00003900: 6520 2824 6c20 3d20 3c46 494c 453e 290a e ($l = ).\n-00003910: 097b 0a09 2020 2020 246e 6f43 6f6d 7072 .{.. $noCompr\n-00003920: 6573 732b 2b20 6966 2024 6c20 3d7e 202f ess++ if $l =~ /\n-00003930: 7072 6f63 6573 736f 722f 3b0a 097d 0a09 processor/;..}..\n-00003940: 636c 6f73 6528 4649 4c45 293b 0a20 2020 close(FILE);. \n-00003950: 207d 0a20 2020 2024 6e6f 436f 6d70 7265 }. $noCompre\n-00003960: 7373 203d 2032 2069 6620 246e 6f43 6f6d ss = 2 if $noCom\n-00003970: 7072 6573 7320 3c20 323b 0a7d 0a0a 6d79 press < 2;.}..my\n-00003980: 2024 7465 6d70 6c61 7465 4261 636b 7570 $templateBackup\n-00003990: 4261 7365 5472 6565 436f 6e66 203d 203c BaseTreeConf = <\n-000039a0: 3c45 4f43 3b0a 2320 636f 6e66 6967 7572 already ex\n-00004420: 6973 7473 2e20 4f76 6572 7772 6974 653f ists. Overwrite?\n-00004430: 5c6e 222c 0a09 2020 2020 2279 6573 202f \\n\",.. \"yes /\n-00004440: 206e 6f20 2d3e 2022 3b0a 0920 2020 2024 no -> \";.. $\n-00004450: 616e 7377 6572 203d 203c 5354 4449 4e3e answer = \n-00004460: 3b0a 0920 2020 2063 686f 6d70 2024 616e ;.. chomp $an\n-00004470: 7377 6572 3b0a 097d 2077 6869 6c65 2028 swer;..} while (\n-00004480: 2461 6e73 7765 7220 6e65 2027 7965 7327 $answer ne 'yes'\n-00004490: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne \n-000044a0: 276e 6f27 293b 0a20 2020 207d 0a20 2020 'no');. }. \n-000044b0: 2065 7869 7420 3020 6966 2024 616e 7377 exit 0 if $answ\n-000044c0: 6572 2065 7120 276e 6f27 3b0a 0a20 2020 er eq 'no';.. \n-000044d0: 206c 6f63 616c 202a 4649 4c45 3b0a 2020 local *FILE;. \n-000044e0: 2020 6f70 656e 2846 494c 452c 2027 3e27 open(FILE, '>'\n-000044f0: 2c20 2463 6f6e 664e 616d 6529 206f 720a , $confName) or.\n-00004500: 0964 6965 2022 636f 756c 6420 6e6f 7420 .die \"could not \n-00004510: 7772 6974 6520 746f 203c 2463 6f6e 664e write to <$confN\n-00004520: 616d 653e 223b 0a20 2020 2070 7269 6e74 ame>\";. print\n-00004530: 2046 494c 4520 2474 656d 706c 6174 653b FILE $template;\n-00004540: 0a20 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE)\n-00004550: 3b0a 2020 2020 6578 6974 2030 3b0a 7d0a ;. exit 0;.}.\n-00004560: 0a64 6965 2022 706c 6561 7365 2073 7065 .die \"please spe\n-00004570: 6369 6679 206f 7074 696f 6e20 3c62 6163 cify option \\n$Help\".\n-00004590: 2020 2020 756e 6c65 7373 2024 6261 636b unless $back\n-000045a0: 7570 4469 723b 0a0a 2462 6163 6b75 7044 upDir;..$backupD\n-000045b0: 6972 203d 7e20 732f 5c2f 2b24 2f2f 3b0a ir =~ s/\\/+$//;.\n-000045c0: 0a0a 6d79 2028 4070 6172 2920 3d20 2829 ..my (@par) = ()\n-000045d0: 3b0a 6966 2028 6465 6669 6e65 6420 246c ;.if (defined $l\n-000045e0: 6f67 4669 6c65 290a 7b0a 2020 2020 7075 ogFile).{. pu\n-000045f0: 7368 2040 7061 722c 2028 272d 6669 6c65 sh @par, ('-file\n-00004600: 2720 3d3e 2024 6c6f 6746 696c 652c 0a09 ' => $logFile,..\n-00004610: 0927 2d6d 756c 7469 7072 696e 7427 203d .'-multiprint' =\n-00004620: 3e20 2779 6573 2729 3b0a 7d0a 656c 7365 > 'yes');.}.else\n-00004630: 0a7b 0a20 2020 2070 7573 6820 4070 6172 .{. push @par\n-00004640: 2c20 2827 2d66 696c 6564 6573 6372 6970 , ('-filedescrip\n-00004650: 746f 7227 2c20 2a53 5444 4f55 5429 3b0a tor', *STDOUT);.\n-00004660: 7d0a 0a6d 7920 2824 7072 4c6f 674b 696e }..my ($prLogKin\n-00004670: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN',\n-00004680: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',..\n-00004690: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION',\n-000046a0: 0a09 0920 2020 2749 3a49 4e46 4f27 2c0a ... 'I:INFO',.\n-000046b0: 0909 2020 2027 573a 5741 524e 494e 4727 .. 'W:WARNING'\n-000046c0: 2c0a 0909 2020 2027 453a 4552 524f 5227 ,... 'E:ERROR'\n-000046d0: 2c0a 0909 2020 2027 503a 5052 4f47 5245 ,... 'P:PROGRE\n-000046e0: 5353 272c 0a09 0920 2020 2753 3a53 5441 SS',... 'S:STA\n-000046f0: 5449 5354 4943 272c 0a09 0920 2020 2744 TISTIC',... 'D\n-00004700: 3a44 4542 5547 275d 3b0a 6d79 2024 7072 :DEBUG'];.my $pr\n-00004710: 4c6f 6731 203d 2070 7269 6e74 4c6f 672d Log1 = printLog-\n-00004720: 3e6e 6577 2827 2d6b 696e 6427 203d 3e20 >new('-kind' => \n-00004730: 2470 724c 6f67 4b69 6e64 2c0a 0909 0920 $prLogKind,.... \n-00004740: 2020 4070 6172 2c0a 0909 0920 2020 272d @par,.... '-\n-00004750: 7769 7468 5469 6d65 2720 3d3e 2024 7769 withTime' => $wi\n-00004760: 7468 5469 6d65 2c0a 0909 0920 2020 272d thTime,.... '-\n-00004770: 6d61 7846 696c 656c 656e 2720 3d3e 2024 maxFilelen' => $\n-00004780: 6d61 7846 696c 656c 656e 2c0a 0909 0920 maxFilelen,.... \n-00004790: 2020 272d 6e6f 4f66 4f6c 6446 696c 6573 '-noOfOldFiles\n-000047a0: 2720 3d3e 2024 6e6f 4f66 4f6c 6446 696c ' => $noOfOldFil\n-000047b0: 6573 2c0a 0909 0920 2020 272d 7361 7665 es,.... '-save\n-000047c0: 4c6f 6773 2720 3d3e 2024 7361 7665 4c6f Logs' => $saveLo\n-000047d0: 6773 2c0a 0909 0920 2020 272d 636f 6d70 gs,.... '-comp\n-000047e0: 7265 7373 5769 7468 2720 3d3e 2024 636f ressWith' => $co\n-000047f0: 6d70 7265 7373 5769 7468 293b 0a0a 6d79 mpressWith);..my\n-00004800: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL\n-00004810: 6f67 4d75 6c74 6970 6c65 2d3e 6e65 7728 ogMultiple->new(\n-00004820: 272d 7072 4c6f 6773 2720 3d3e 205b 2470 '-prLogs' => [$p\n-00004830: 724c 6f67 315d 293b 0a24 7072 4c6f 672d rLog1]);.$prLog-\n-00004840: 3e66 6f72 6b28 2472 6571 293b 0a0a 6966 >fork($req);..if\n-00004850: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. \n-00004860: 2443 6865 636b 5061 722d 3e70 7269 6e74 $CheckPar->print\n-00004870: 2829 3b0a 2020 2020 6578 6974 2030 3b0a ();. exit 0;.\n-00004880: 7d0a 0a69 6620 2824 706c 7573 4c6f 6753 }..if ($plusLogS\n-00004890: 7464 6f75 7429 0a7b 0a20 2020 206d 7920 tdout).{. my \n-000048a0: 2470 203d 2070 7269 6e74 4c6f 672d 3e6e $p = printLog->n\n-000048b0: 6577 2827 2d6b 696e 6427 203d 3e20 2470 ew('-kind' => $p\n-000048c0: 724c 6f67 4b69 6e64 2c0a 0909 0920 2027 rLogKind,.... '\n-000048d0: 2d66 696c 6564 6573 6372 6970 746f 7227 -filedescriptor'\n-000048e0: 2c20 2a53 5444 4f55 5429 3b0a 2020 2020 , *STDOUT);. \n-000048f0: 2470 724c 6f67 2d3e 6164 6428 272d 7072 $prLog->add('-pr\n-00004900: 4c6f 6773 2720 3d3e 205b 2470 5d29 3b0a Logs' => [$p]);.\n-00004910: 7d0a 6966 2028 2477 7269 7465 546f 4e61 }.if ($writeToNa\n-00004920: 6d65 6450 6970 6529 0a7b 0a20 2020 206d medPipe).{. m\n-00004930: 7920 2470 6c20 3d20 2470 724c 6f67 3b0a y $pl = $prLog;.\n-00004940: 2020 2020 6d79 2024 6e70 203d 2070 7269 my $np = pri\n-00004950: 6e74 4c6f 672d 3e6e 6577 2827 2d6b 696e ntLog->new('-kin\n-00004960: 6427 203d 3e20 2470 724c 6f67 4b69 6e64 d' => $prLogKind\n-00004970: 2c0a 0909 0920 2020 272d 6669 6c65 2720 ,.... '-file' \n-00004980: 3d3e 2024 7772 6974 6554 6f4e 616d 6564 => $writeToNamed\n-00004990: 5069 7065 2c0a 0909 0920 2020 272d 6d61 Pipe,.... '-ma\n-000049a0: 7846 696c 656c 656e 2720 3d3e 2030 293b xFilelen' => 0);\n-000049b0: 0a20 2020 2024 7072 4c6f 6720 3d20 7072 . $prLog = pr\n-000049c0: 696e 744c 6f67 4d75 6c74 6970 6c65 2d3e intLogMultiple->\n-000049d0: 6e65 7728 272d 7072 4c6f 6773 2720 3d3e new('-prLogs' =>\n-000049e0: 205b 2470 6c2c 2024 6e70 5d29 3b0a 7d0a [$pl, $np]);.}.\n-000049f0: 0a69 6620 2824 696e 7465 7261 6374 6976 .if ($interactiv\n-00004a00: 6529 0a7b 0a20 2020 2024 7665 7262 6f73 e).{. $verbos\n-00004a10: 6520 3d20 313b 0a20 2020 2024 6465 6275 e = 1;. $debu\n-00004a20: 6720 3d20 313b 0a7d 0a0a 246d 6169 6e3a g = 1;.}..$main:\n-00004a30: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec\n-00004a40: 7420 3d20 303b 0a65 7661 6c20 2275 7365 t = 0;.eval \"use\n-00004a50: 2049 4f3a 3a43 6f6d 7072 6573 733a 3a42 IO::Compress::B\n-00004a60: 7a69 7032 2071 7728 627a 6970 3229 223b zip2 qw(bzip2)\";\n-00004a70: 0a69 6620 2824 4029 0a7b 0a20 2020 2024 .if ($@).{. $\n-00004a80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00004a90: 696e 6427 203d 3e20 2749 272c 0a09 0920 ind' => 'I',... \n-00004aa0: 2027 2d73 7472 2720 3d3e 0a09 0920 205b '-str' =>... [\n-00004ab0: 2270 6c65 6173 6520 696e 7374 616c 6c20 \"please install \n-00004ac0: 494f 3a3a 436f 6d70 7265 7373 3a3a 427a IO::Compress::Bz\n-00004ad0: 6970 3220 6672 6f6d 2022 202e 0a09 0920 ip2 from \" .... \n-00004ae0: 2020 2243 5041 4e20 666f 7220 6265 7474 \"CPAN for bett\n-00004af0: 6572 2070 6572 666f 726d 616e 6365 225d er performance\"]\n-00004b00: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. \n-00004b10: 246d 6169 6e3a 3a49 4f43 6f6d 7072 6573 $main::IOCompres\n-00004b20: 7344 6972 6563 7420 3d20 313b 0a7d 0a0a sDirect = 1;.}..\n-00004b30: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00004b40: 2d6b 696e 6427 203d 3e20 2741 272c 0a09 -kind' => 'A',..\n-00004b50: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>.\n-00004b60: 0920 2020 2020 205b 2263 6865 636b 696e . [\"checkin\n-00004b70: 6720 7265 6665 7265 6e63 6573 2061 6e64 g references and\n-00004b80: 2062 6163 6b75 7020 636f 7079 696e 6720 backup copying \n-00004b90: 696e 203c 2462 6163 6b75 7044 6972 3e22 in <$backupDir>\"\n-00004ba0: 5d29 3b0a 2470 724c 6f67 2d3e 7072 696e ]);.$prLog->prin\n-00004bb0: 7428 272d 6b69 6e64 2720 3d3e 2027 5627 t('-kind' => 'V'\n-00004bc0: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' \n-00004bd0: 3d3e 205b 2273 746f 7265 4261 636b 7570 => [\"storeBackup\n-00004be0: 5570 6461 7465 4261 636b 7570 2e70 6c2c UpdateBackup.pl,\n-00004bf0: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC\n-00004c00: 4b55 5056 4552 5349 4f4e 225d 293b 0a0a KUPVERSION\"]);..\n-00004c10: 263a 3a63 6865 636b 4c6f 636b 4669 6c65 &::checkLockFile\n-00004c20: 2824 6c6f 636b 4669 6c65 2c20 2470 724c ($lockFile, $prL\n-00004c30: 6f67 293b 0a0a 6578 6974 2031 0a20 2020 og);..exit 1. \n-00004c40: 2075 6e6c 6573 7320 2664 656c 6574 654f unless &deleteO\n-00004c50: 6c64 4261 636b 7570 4469 7273 3a3a 6368 ldBackupDirs::ch\n-00004c60: 6563 6b54 696d 6553 6361 6c65 466f 726d eckTimeScaleForm\n-00004c70: 6174 2827 6172 6368 6976 6544 7572 6174 at('archiveDurat\n-00004c80: 696f 6e44 656c 7461 4361 6368 6527 2c0a ionDeltaCache',.\n-00004c90: 0909 0909 0909 2020 2020 2020 2461 7263 ...... $arc\n-00004ca0: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt\n-00004cb0: 6143 6163 6865 2c0a 0909 0909 0909 2020 aCache,....... \n-00004cc0: 2020 2020 2470 724c 6f67 2c20 3029 3b0a $prLog, 0);.\n-00004cd0: 0a6d 7920 2825 7365 7269 6573 546f 436f .my (%seriesToCo\n-00004ce0: 7079 293b 2020 2023 2024 7365 7269 6573 py); # $series\n-00004cf0: 546f 436f 7079 7b73 6572 6965 737d 7b62 ToCopy{series}{b\n-00004d00: 6163 6b75 7043 6f70 794e 616d 657d 0a6d ackupCopyName}.m\n-00004d10: 7920 2464 656c 7461 4361 6368 6520 3d20 y $deltaCache = \n-00004d20: 756e 6465 663b 0a6d 7920 2462 6163 6b75 undef;.my $backu\n-00004d30: 7054 7970 6520 3d20 276e 6f6e 6527 3b0a pType = 'none';.\n-00004d40: 6966 2028 2d65 2022 2462 6163 6b75 7044 if (-e \"$backupD\n-00004d50: 6972 2f24 6261 7365 5472 6565 436f 6e66 ir/$baseTreeConf\n-00004d60: 2220 616e 6420 6e6f 7420 2464 6f6e 7443 \" and not $dontC\n-00004d70: 6f70 7942 6163 6b75 7029 0a7b 0a23 2072 opyBackup).{.# r\n-00004d80: 6561 6420 7374 6f72 6542 6163 6b75 7042 ead storeBackupB\n-00004d90: 6173 6554 7265 652e 636f 6e66 2069 6e20 aseTree.conf in \n-00004da0: 2462 6163 6b75 7044 6972 0a20 2020 206d $backupDir. m\n-00004db0: 7920 2824 6261 636b 7570 5472 6565 4e61 y ($backupTreeNa\n-00004dc0: 6d65 2c20 2473 6572 6965 7354 6f44 6973 me, $seriesToDis\n-00004dd0: 7472 6962 7574 6529 3b0a 2020 2020 2824 tribute);. ($\n-00004de0: 6261 636b 7570 5472 6565 4e61 6d65 2c20 backupTreeName, \n-00004df0: 2462 6163 6b75 7054 7970 652c 2024 7365 $backupType, $se\n-00004e00: 7269 6573 546f 4469 7374 7269 6275 7465 riesToDistribute\n-00004e10: 2c20 2464 656c 7461 4361 6368 6529 203d , $deltaCache) =\n-00004e20: 0a09 263a 3a72 6561 6442 6163 6b75 7044 ..&::readBackupD\n-00004e30: 6972 4261 7365 5472 6565 436f 6e66 2822 irBaseTreeConf(\"\n-00004e40: 2462 6163 6b75 7044 6972 2f24 6261 7365 $backupDir/$base\n-00004e50: 5472 6565 436f 6e66 222c 0a09 0909 0920 TreeConf\",..... \n-00004e60: 2020 2020 263a 3a61 6273 6f6c 7574 6550 &::absoluteP\n-00004e70: 6174 6828 2462 6163 6b75 7044 6972 292c ath($backupDir),\n-00004e80: 2024 7072 4c6f 6729 3b0a 0a23 7072 696e $prLog);..#prin\n-00004e90: 7420 222d 312d 2d2d 2d2d 2d2d 2d2d 2d2d t \"-1-----------\n-00004ea0: 2d2d 2d2d 2d3d 3d3d 3d3d 3d3d 2d2d 2d2d -----=======----\n-00004eb0: 2d2d 2d2d 2d2d 2d2d 5c6e 223b 0a20 2020 --------\\n\";. \n-00004ec0: 2023 2072 6570 6c61 6365 2077 696c 6463 # replace wildc\n-00004ed0: 6172 6473 2069 6e20 7265 706c 6963 6174 ards in replicat\n-00004ee0: 6564 2062 6163 6b75 700a 2020 2020 6d79 ed backup. my\n-00004ef0: 2028 4072 6561 6453 6572 6965 7329 203d (@readSeries) =\n-00004f00: 2026 3a3a 6576 616c 4578 6365 7074 696f &::evalExceptio\n-00004f10: 6e4c 6973 745f 506c 7573 4d69 6e75 7328 nList_PlusMinus(\n-00004f20: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib\n-00004f30: 7574 652c 0a09 0909 0909 2020 2020 263a ute,...... &:\n-00004f40: 3a61 6273 6f6c 7574 6550 6174 6828 2462 :absolutePath($b\n-00004f50: 6163 6b75 7044 6972 292c 0a09 0909 0920 ackupDir),..... \n-00004f60: 2020 2020 2022 2462 6163 6b75 7054 7265 \"$backupTre\n-00004f70: 654e 616d 6520 7365 7269 6573 222c 2027 eName series\", '\n-00004f80: 7365 7269 6573 272c 2031 2c0a 0909 0909 series', 1,.....\n-00004f90: 0920 2020 2075 6e64 6566 2c20 312c 2024 . undef, 1, $\n-00004fa0: 7072 4c6f 6729 3b0a 2370 7269 6e74 2022 prLog);.#print \"\n-00004fb0: 2d31 2e31 2d2d 2d2d 2d2d 7265 6164 5365 -1.1------readSe\n-00004fc0: 7269 6573 3d40 7265 6164 5365 7269 6573 ries=@readSeries\n-00004fd0: 5c6e 223b 0a0a 2370 7269 6e74 2022 6261 \\n\";..#print \"ba\n-00004fe0: 636b 7570 5472 6565 4e61 6d65 203d 203c ckupTreeName = <\n-00004ff0: 2462 6163 6b75 7054 7265 654e 616d 653e $backupTreeName>\n-00005000: 5c6e 223b 0a23 7072 696e 7420 2262 6163 \\n\";.#print \"bac\n-00005010: 6b75 7054 7970 6520 3d20 3c24 6261 636b kupType = <$back\n-00005020: 7570 5479 7065 3e5c 6e22 3b0a 2370 7269 upType>\\n\";.#pri\n-00005030: 6e74 2022 7365 7269 6573 546f 4469 7374 nt \"seriesToDist\n-00005040: 7269 6275 7465 203d 2028 4024 7365 7269 ribute = (@$seri\n-00005050: 6573 546f 4469 7374 7269 6275 7465 295c esToDistribute)\\\n-00005060: 6e22 3b0a 2370 7269 6e74 2022 6465 6c74 n\";.#print \"delt\n-00005070: 6143 6163 6865 203d 203c 2464 656c 7461 aCache = <$delta\n-00005080: 4361 6368 653e 5c6e 223b 0a0a 2020 2020 Cache>\\n\";.. \n-00005090: 2320 6176 6f69 6420 6465 6c74 6143 6163 # avoid deltaCac\n-000050a0: 6865 2061 6e64 2062 6163 6b75 7044 6972 he and backupDir\n-000050b0: 2074 6f20 6265 2073 7562 6469 7265 6374 to be subdirect\n-000050c0: 6f72 6965 7320 6f66 2065 6163 6820 6f74 ories of each ot\n-000050d0: 6865 720a 2020 2020 2470 724c 6f67 2d3e her. $prLog->\n-000050e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-000050f0: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str'\n-00005100: 203d 3e0a 0909 2020 5b22 6465 6c74 6143 =>... [\"deltaC\n-00005110: 6163 6865 203c 2464 656c 7461 4361 6368 ache <$deltaCach\n-00005120: 653e 2069 7320 6120 7375 6264 6972 6563 e> is a subdirec\n-00005130: 746f 7279 206f 6620 2220 2e0a 0909 2020 tory of \" .... \n-00005140: 2022 6261 636b 7570 4469 7220 3c24 6261 \"backupDir <$ba\n-00005150: 636b 7570 4469 723e 2c20 706c 6561 7365 ckupDir>, please\n-00005160: 2063 6861 6e67 6522 5d2c 0a09 0920 2027 change\"],... '\n-00005170: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if\n-00005180: 2026 3a3a 6973 5375 6244 6972 2824 6465 &::isSubDir($de\n-00005190: 6c74 6143 6163 6865 2c20 2462 6163 6b75 ltaCache, $backu\n-000051a0: 7044 6972 293b 0a20 2020 2024 7072 4c6f pDir);. $prLo\n-000051b0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-000051c0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s\n-000051d0: 7472 2720 3d3e 0a09 0920 205b 2262 6163 tr' =>... [\"bac\n-000051e0: 6b75 7044 6972 203c 2462 6163 6b75 7044 kupDir <$backupD\n-000051f0: 6972 3e20 6973 2061 2073 7562 6469 7265 ir> is a subdire\n-00005200: 6374 6f72 7920 6f66 2022 202e 0a09 0920 ctory of \" .... \n-00005210: 2020 2264 656c 7461 4361 6368 6520 3c24 \"deltaCache <$\n-00005220: 6465 6c74 6143 6163 6865 3e2c 2070 6c65 deltaCache>, ple\n-00005230: 6173 6520 6368 616e 6765 225d 2c0a 0909 ase change\"],...\n-00005240: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1).\n-00005250: 0969 6620 263a 3a69 7353 7562 4469 7228 .if &::isSubDir(\n-00005260: 2462 6163 6b75 7044 6972 2c20 2464 656c $backupDir, $del\n-00005270: 7461 4361 6368 6529 3b0a 0a20 2020 2069 taCache);.. i\n-00005280: 6620 2824 6261 636b 7570 5479 7065 2065 f ($backupType e\n-00005290: 7120 2763 6f70 7927 290a 2020 2020 7b0a q 'copy'). {.\n-000052a0: 2370 7269 6e74 2022 2d32 2d2d 2d2d 2d2d #print \"-2------\n-000052b0: 2d2d 2d2d 2d2d 2d2d 2d2d 3d3d 3d3d 3d3d ----------======\n-000052c0: 3d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 =------------\\n\"\n-000052d0: 3b0a 0923 2062 7569 6c64 2068 6173 6820 ;..# build hash \n-000052e0: 7769 7468 206c 6973 7420 6f66 2073 6572 with list of ser\n-000052f0: 6965 7320 696e 2072 6570 6c69 6361 7469 ies in replicati\n-00005300: 6f6e 2064 6972 6563 746f 7279 0a09 6d79 on directory..my\n-00005310: 2028 2572 6561 6453 6572 6965 7329 3b0a (%readSeries);.\n-00005320: 2370 7269 6e74 2022 7265 6164 5365 7269 #print \"readSeri\n-00005330: 6573 3d3c 4072 6561 6453 6572 6965 733e es=<@readSeries>\n-00005340: 5c6e 223b 0a09 666f 7265 6163 6820 6d79 \\n\";..foreach my\n-00005350: 2024 7220 2840 7265 6164 5365 7269 6573 $r (@readSeries\n-00005360: 290a 097b 0a23 7072 696e 7420 22df dfdf )..{.#print \"...\n-00005370: dfdf dfdf dfdf df24 72df dfdf dfdf 5c6e .......$r.....\\n\n-00005380: 223b 0a09 2020 2020 2472 6561 6453 6572 \";.. $readSer\n-00005390: 6965 737b 2472 7d20 3d20 313b 0a09 7d0a ies{$r} = 1;..}.\n-000053a0: 0a09 2320 7265 6164 2064 656c 7461 4361 ..# read deltaCa\n-000053b0: 6368 652e 636f 6e66 2069 6e20 2464 656c che.conf in $del\n-000053c0: 7461 4361 6368 650a 096d 7920 2463 7363 taCache..my $csc\n-000053d0: 4669 6c65 203d 2022 2464 656c 7461 4361 File = \"$deltaCa\n-000053e0: 6368 652f 2464 656c 7461 4361 6368 6543 che/$deltaCacheC\n-000053f0: 6f6e 6622 3b0a 096d 7920 2840 6263 2920 onf\";..my (@bc) \n-00005400: 3d20 263a 3a72 6561 6444 656c 7461 4361 = &::readDeltaCa\n-00005410: 6368 6543 6f6e 6628 2463 7363 4669 6c65 cheConf($cscFile\n-00005420: 2c20 2464 656c 7461 4361 6368 652c 2031 , $deltaCache, 1\n-00005430: 2c20 2470 724c 6f67 293b 0a0a 2370 7269 , $prLog);..#pri\n-00005440: 6e74 2022 2d32 2e35 2d2d 2d2d 2d2d 2d2d nt \"-2.5--------\n-00005450: 2d2d 2d2d 2d2d 2d2d 3d3d 3d3d 3d3d 3d2d --------=======-\n-00005460: 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 3b0a -----------\\n\";.\n-00005470: 0923 2067 656e 6572 6174 6520 6c69 7374 .# generate list\n-00005480: 2077 6974 6820 6578 6973 7469 6e67 2073 with existing s\n-00005490: 6572 6965 7320 696e 2044 656c 7461 2043 eries in Delta C\n-000054a0: 6163 6865 0a09 6d79 2028 406c 6973 7453 ache..my (@listS\n-000054b0: 6572 6965 7345 7869 7374 496e 4465 6c74 eriesExistInDelt\n-000054c0: 6129 203d 2028 293b 0a09 666f 7265 6163 a) = ();..foreac\n-000054d0: 6820 6d79 2024 6263 2028 4062 6329 0a09 h my $bc (@bc)..\n-000054e0: 7b0a 2370 7269 6e74 2022 3d3d 3d3e 2024 {.#print \"===> $\n-000054f0: 6263 5b30 5d5b 305d 202d 2d2d 2d2d 2d2d bc[0][0] -------\n-00005500: 2d2d 2024 6261 636b 7570 5472 6565 4e61 -- $backupTreeNa\n-00005510: 6d65 5c6e 223b 0a09 2020 2020 6966 2028 me\\n\";.. if (\n-00005520: 2462 635b 305d 5b30 5d20 6571 2024 6261 $bc[0][0] eq $ba\n-00005530: 636b 7570 5472 6565 4e61 6d65 290a 0920 ckupTreeName).. \n-00005540: 2020 207b 0a09 0928 406c 6973 7453 6572 {...(@listSer\n-00005550: 6965 7345 7869 7374 496e 4465 6c74 6129 iesExistInDelta)\n-00005560: 203d 2028 4024 6263 5b31 2e2e 4024 6263 = (@$bc[1..@$bc\n-00005570: 2d31 5d29 3b0a 0920 2020 207d 0a23 7072 -1]);.. }.#pr\n-00005580: 696e 7420 222d 332d 2d2d 2d2d 2d2d 2d2d int \"-3---------\n-00005590: 2d2b 4465 6c74 6120 4361 6368 6520 5365 -+Delta Cache Se\n-000055a0: 7269 6573 2b2b 2b2b 2b2b 406c 6973 7453 ries++++++@listS\n-000055b0: 6572 6965 7345 7869 7374 496e 4465 6c74 eriesExistInDelt\n-000055c0: 612b 2b5c 6e22 3b0a 097d 0a09 2320 6765 a++\\n\";..}..# ge\n-000055d0: 6e65 7261 7465 206d 6973 7369 6e67 2073 nerate missing s\n-000055e0: 6572 6965 7320 6469 7265 6374 6f72 6965 eries directorie\n-000055f0: 7320 696e 2072 6570 6c69 6361 7469 6f6e s in replication\n-00005600: 2064 6972 6563 746f 7279 0a09 2320 5468 directory..# Th\n-00005610: 6973 2068 6173 2074 6f20 6265 2064 6f6e is has to be don\n-00005620: 6520 276f 6e20 7468 6520 666c 7927 2061 e 'on the fly' a\n-00005630: 6c73 6f20 7768 656e 2075 7369 6e67 2077 lso when using w\n-00005640: 696c 6463 6172 6473 2069 6e20 7365 7269 ildcards in seri\n-00005650: 6573 206e 616d 6573 0a09 6d79 2024 6372 es names..my $cr\n-00005660: 6561 7465 5365 7269 6573 203d 2030 3b0a eateSeries = 0;.\n-00005670: 0966 6f72 6561 6368 206d 7920 2464 2028 .foreach my $d (\n-00005680: 406c 6973 7453 6572 6965 7345 7869 7374 @listSeriesExist\n-00005690: 496e 4465 6c74 6129 0a09 7b0a 2370 7269 InDelta)..{.#pri\n-000056a0: 6e74 2022 332e 3520 2d2d 203c 2464 3e20 nt \"3.5 -- <$d> \n-000056b0: 2d2d 2022 2c20 2864 6566 696e 6564 2024 -- \", (defined $\n-000056c0: 7265 6164 5365 7269 6573 7b24 647d 292c readSeries{$d}),\n-000056d0: 2022 5c6e 223b 0a09 2020 2020 6966 2028 \"\\n\";.. if (\n-000056e0: 2463 7265 6174 654e 6577 5365 7269 6573 $createNewSeries\n-000056f0: 2061 6e64 206e 6f74 2064 6566 696e 6564 and not defined\n-00005700: 2024 7265 6164 5365 7269 6573 7b24 647d $readSeries{$d}\n-00005710: 290a 0920 2020 207b 0a23 7072 696e 7420 ).. {.#print \n-00005720: 2233 2e36 2d2d 203c 2462 6163 6b75 7044 \"3.6-- <$backupD\n-00005730: 6972 2f24 643e 5c6e 223b 0a09 0965 7869 ir/$d>\\n\";...exi\n-00005740: 7420 310a 0909 2020 2020 756e 6c65 7373 t 1... unless\n-00005750: 2026 3a3a 6d61 6b65 4469 7250 6174 6828 &::makeDirPath(\n-00005760: 2224 6261 636b 7570 4469 722f 2464 222c \"$backupDir/$d\",\n-00005770: 2024 7072 4c6f 6729 3b0a 0909 2463 7265 $prLog);...$cre\n-00005780: 6174 6553 6572 6965 7320 3d20 313b 0a09 ateSeries = 1;..\n-00005790: 2020 2020 7d0a 097d 0a23 7072 696e 7420 }..}.#print \n-000057a0: 222d 342d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d \"-4-------------\n-000057b0: 2d2d 2d3d 3d3d 3d3d 3d3d 2d2d 2d2d 2d2d ---=======------\n-000057c0: 2d2d 2d2d 2d2d 5c6e 223b 0a23 7072 696e ------\\n\";.#prin\n-000057d0: 7420 222d 342e 312d 2d2d 2d2d 2d73 6572 t \"-4.1------ser\n-000057e0: 6965 7354 6f44 6973 7472 6962 7574 653d iesToDistribute=\n-000057f0: 4024 7365 7269 6573 546f 4469 7374 7269 @$seriesToDistri\n-00005800: 6275 7465 5c6e 223b 0a09 6966 2028 2463 bute\\n\";..if ($c\n-00005810: 7265 6174 6553 6572 6965 7329 0a09 7b0a reateSeries)..{.\n-00005820: 0920 2020 2023 2072 6570 6c61 6365 2077 . # replace w\n-00005830: 696c 6463 6172 6473 2069 6e20 7265 706c ildcards in repl\n-00005840: 6963 6174 6564 2062 6163 6b75 700a 0920 icated backup.. \n-00005850: 2020 2028 4072 6561 6453 6572 6965 7329 (@readSeries)\n-00005860: 203d 2026 3a3a 6576 616c 4578 6365 7074 = &::evalExcept\n-00005870: 696f 6e4c 6973 745f 506c 7573 4d69 6e75 ionList_PlusMinu\n-00005880: 7328 2473 6572 6965 7354 6f44 6973 7472 s($seriesToDistr\n-00005890: 6962 7574 652c 0a09 0909 0909 0920 2020 ibute,....... \n-000058a0: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath\n-000058b0: 2824 6261 636b 7570 4469 7229 2c0a 0909 ($backupDir),...\n-000058c0: 0909 0909 2020 2020 2224 6261 636b 7570 .... \"$backup\n-000058d0: 5472 6565 4e61 6d65 2073 6572 6965 7322 TreeName series\"\n-000058e0: 2c20 2773 6572 6965 7327 2c0a 0909 0909 , 'series',.....\n-000058f0: 0909 2020 2020 312c 2075 6e64 6566 2c20 .. 1, undef, \n-00005900: 312c 2024 7072 4c6f 6729 3b0a 097d 0a09 1, $prLog);..}..\n-00005910: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib\n-00005920: 7574 6520 3d5c 4072 6561 6453 6572 6965 ute =\\@readSerie\n-00005930: 733b 0a23 7072 696e 7420 222d 342e 322d s;.#print \"-4.2-\n-00005940: 2d2d 2d2d 2d73 6572 6965 7354 6f44 6973 -----seriesToDis\n-00005950: 7472 6962 7574 653d 4024 7365 7269 6573 tribute=@$series\n-00005960: 546f 4469 7374 7269 6275 7465 5c6e 223b ToDistribute\\n\";\n-00005970: 0a0a 0924 6175 746f 7265 7061 6972 4572 ...$autorepairEr\n-00005980: 726f 7220 3d20 303b 0a23 0923 2072 6561 ror = 0;.#.# rea\n-00005990: 6420 6465 6c74 6143 6163 6865 2e63 6f6e d deltaCache.con\n-000059a0: 6620 696e 2024 6465 6c74 6143 6163 6865 f in $deltaCache\n-000059b0: 0a23 096d 7920 2463 7363 4669 6c65 203d .#.my $cscFile =\n-000059c0: 2022 2464 656c 7461 4361 6368 652f 2464 \"$deltaCache/$d\n-000059d0: 656c 7461 4361 6368 6543 6f6e 6622 3b0a eltaCacheConf\";.\n-000059e0: 2309 6d79 2028 4062 6329 203d 2026 3a3a #.my (@bc) = &::\n-000059f0: 7265 6164 4465 6c74 6143 6163 6865 436f readDeltaCacheCo\n-00005a00: 6e66 2824 6373 6346 696c 652c 2024 6465 nf($cscFile, $de\n-00005a10: 6c74 6143 6163 6865 2c20 312c 2024 7072 ltaCache, 1, $pr\n-00005a20: 4c6f 6729 3b0a 0a09 2320 6368 6563 6b20 Log);...# check \n-00005a30: 636f 6e73 6973 7465 6e63 7920 6f66 2062 consistency of b\n-00005a40: 6163 6b75 7043 6f70 7920 616e 6420 6465 ackupCopy and de\n-00005a50: 6c74 6143 6163 6865 2063 6f6e 6669 6775 ltaCache configu\n-00005a60: 7261 7469 6f6e 0a09 6d79 2024 666f 756e ration..my $foun\n-00005a70: 6442 6163 6b75 7054 7265 654e 616d 6546 dBackupTreeNameF\n-00005a80: 6c61 6720 3d20 303b 0a09 666f 7265 6163 lag = 0;..foreac\n-00005a90: 6820 6d79 2024 6263 2028 4062 6329 0a09 h my $bc (@bc)..\n-00005aa0: 7b0a 0920 2020 206d 7920 2473 3b20 2020 {.. my $s; \n-00005ab0: 2320 7365 7420 6861 7368 2077 6974 6820 # set hash with \n-00005ac0: 616c 6c20 7365 7269 6573 2074 6f20 636f all series to co\n-00005ad0: 7079 2074 6f20 616c 6c20 6261 636b 7570 py to all backup\n-00005ae0: 436f 7069 6573 0a09 2020 2020 666f 7265 Copies.. fore\n-00005af0: 6163 6820 2473 2028 4024 6263 5b31 2e2e ach $s (@$bc[1..\n-00005b00: 4024 6263 2d31 5d29 0a09 2020 2020 7b0a @$bc-1]).. {.\n-00005b10: 0909 2473 6572 6965 7354 6f43 6f70 797b ..$seriesToCopy{\n-00005b20: 2473 7d7b 2424 6263 5b30 5d7d 203d 2031 $s}{$$bc[0]} = 1\n-00005b30: 3b0a 0920 2020 2020 2020 2020 2020 2020 ;.. \n-00005b40: 2020 2020 2020 2320 7365 7269 6573 2024 # series $\n-00005b50: 7320 6861 7320 746f 2062 6520 636f 7069 s has to be copi\n-00005b60: 6564 2074 6f20 2462 6163 6b75 7054 7265 ed to $backupTre\n-00005b70: 654e 616d 650a 2370 7269 6e74 2022 2323 eName.#print \"##\n-00005b80: 2323 7365 7420 2473 202d 3e20 222c 2024 ##set $s -> \", $\n-00005b90: 2462 635b 305d 2c20 2220 3d20 315c 6e22 $bc[0], \" = 1\\n\"\n-00005ba0: 3b0a 0920 2020 207d 0a0a 0920 2020 2069 ;.. }... i\n-00005bb0: 6620 2824 2462 635b 305d 2065 7120 2462 f ($$bc[0] eq $b\n-00005bc0: 6163 6b75 7054 7265 654e 616d 6529 0a09 ackupTreeName)..\n-00005bd0: 2020 2020 7b0a 0909 2470 724c 6f67 2d3e {...$prLog->\n-00005be0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00005bf0: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... '\n-00005c00: 2d73 7472 2720 3d3e 205b 2224 6373 6346 -str' => [\"$cscF\n-00005c10: 696c 653a 2062 6163 6b75 7044 6972 206e ile: backupDir n\n-00005c20: 616d 6520 3c22 202e 0a09 0909 0909 2024 ame <\" ....... $\n-00005c30: 2462 635b 305d 202e 2022 3e20 6465 6669 $bc[0] . \"> defi\n-00005c40: 6e65 6420 7477 6963 6522 5d2c 0a09 0909 ned twice\"],....\n-00005c50: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00005c60: 2031 290a 0909 2020 2020 6966 2024 666f 1)... if $fo\n-00005c70: 756e 6442 6163 6b75 7054 7265 654e 616d undBackupTreeNam\n-00005c80: 6546 6c61 6720 3d3d 2031 3b0a 0a09 0924 eFlag == 1;....$\n-00005c90: 666f 756e 6442 6163 6b75 7054 7265 654e foundBackupTreeN\n-00005ca0: 616d 6546 6c61 6720 3d20 313b 0a23 7072 ameFlag = 1;.#pr\n-00005cb0: 696e 7420 222d 2d40 2462 632d 2d5c 6e22 int \"--@$bc--\\n\"\n-00005cc0: 3b0a 0909 6d79 2028 2573 293b 0a09 0966 ;...my (%s);...f\n-00005cd0: 6f72 6561 6368 2024 7320 2840 2462 635b oreach $s (@$bc[\n-00005ce0: 312e 2e40 2462 632d 315d 290a 0909 7b0a 1..@$bc-1])...{.\n-00005cf0: 0909 2020 2020 2473 7b24 737d 203d 2031 .. $s{$s} = 1\n-00005d00: 3b0a 0909 7d0a 0909 666f 7265 6163 6820 ;...}...foreach \n-00005d10: 2473 2028 4024 7365 7269 6573 546f 4469 $s (@$seriesToDi\n-00005d20: 7374 7269 6275 7465 290a 0909 7b0a 2370 stribute)...{.#p\n-00005d30: 7269 6e74 2022 2d2d 2d72 656d 6f76 696e rint \"---removin\n-00005d40: 6720 7365 7269 6573 203c 2473 3e5c 6e22 g series <$s>\\n\"\n-00005d50: 3b0a 0909 2020 2020 6966 2028 6578 6973 ;... if (exis\n-00005d60: 7473 2024 737b 2473 7d29 0a09 0920 2020 ts $s{$s})... \n-00005d70: 207b 0a09 0909 6465 6c65 7465 2024 737b {....delete $s{\n-00005d80: 2473 7d3b 0a09 0920 2020 207d 0a09 0920 $s};... }... \n-00005d90: 2020 2065 6c73 650a 0909 2020 2020 7b0a else... {.\n-00005da0: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00005db0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W',\n-00005dc0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str\n-00005dd0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [\n-00005de0: 2224 6373 6346 696c 653a 2073 6572 6965 \"$cscFile: serie\n-00005df0: 7320 3c24 733e 2069 7320 6d69 7373 696e s <$s> is missin\n-00005e00: 6720 696e 203c 2220 2e0a 0909 0909 2020 g in <\" ...... \n-00005e10: 2020 2020 2024 2462 635b 305d 202e 2022 $$bc[0] . \"\n-00005e20: 3e2c 2064 6566 696e 6564 2069 6e20 2220 >, defined in \" \n-00005e30: 2e0a 0909 0909 2020 2020 2020 2022 2462 ...... \"$b\n-00005e40: 6163 6b75 7044 6972 2f24 6261 7365 5472 ackupDir/$baseTr\n-00005e50: 6565 436f 6e66 225d 290a 0909 0920 2020 eeConf\"]).... \n-00005e60: 2075 6e6c 6573 7320 246e 6f57 6172 6e69 unless $noWarni\n-00005e70: 6e67 4469 6666 5365 7269 6573 496e 4261 ngDiffSeriesInBa\n-00005e80: 636b 7570 436f 7079 3b0a 0909 2020 2020 ckupCopy;... \n-00005e90: 7d0a 0a09 097d 0a0a 0909 2470 724c 6f67 }....}....$prLog\n-00005ea0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00005eb0: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... \n-00005ec0: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... \n-00005ed0: 2020 2020 5b22 2462 6163 6b75 7044 6972 [\"$backupDir\n-00005ee0: 2f24 6261 7365 5472 6565 436f 6e66 2073 /$baseTreeConf s\n-00005ef0: 6572 6965 7320 3c22 202e 0a09 0909 2020 eries <\" ..... \n-00005f00: 2020 2020 206a 6f69 6e28 273e 3c27 2c20 join('><', \n-00005f10: 736f 7274 206b 6579 7320 2573 2920 2e20 sort keys %s) . \n-00005f20: 223e 206d 6973 7369 6e67 2069 6e20 3c22 \"> missing in <\"\n-00005f30: 202e 0a09 0909 2020 2020 2020 2024 2462 ..... $$b\n-00005f40: 635b 305d 202e 2022 3e2c 2064 6566 696e c[0] . \">, defin\n-00005f50: 6564 2069 6e20 2463 7363 4669 6c65 222c ed in $cscFile\",\n-00005f60: 0a09 0909 2020 2020 2020 2022 7573 6520 .... \"use \n-00005f70: 6f70 7469 6f6e 202d 2d63 7265 6174 654e option --createN\n-00005f80: 6577 5365 7269 6573 2069 6620 796f 7520 ewSeries if you \n-00005f90: 7761 6e74 2022 202e 0a09 0909 2020 2020 want \" ..... \n-00005fa0: 2020 2022 6d69 7373 696e 6720 7365 7269 \"missing seri\n-00005fb0: 6573 2074 6f20 6265 2063 7265 6174 6564 es to be created\n-00005fc0: 2061 7574 6f6d 6174 6963 616c 6c79 225d automatically\"]\n-00005fd0: 2c0a 0909 0920 2020 2020 2027 2d65 7869 ,.... '-exi\n-00005fe0: 7427 203d 3e20 3129 0a09 0920 2020 2069 t' => 1)... i\n-00005ff0: 6620 7363 616c 6172 206b 6579 7320 2573 f scalar keys %s\n-00006000: 3b0a 0920 2020 207d 0a09 7d0a 0a09 2320 ;.. }..}...# \n-00006010: 636f 7079 2062 6163 6b75 7020 6469 7265 copy backup dire\n-00006020: 6374 6f72 6965 7320 2873 7469 6c6c 2069 ctories (still i\n-00006030: 6e20 2462 6163 6b75 7054 7970 6520 6571 n $backupType eq\n-00006040: 2027 636f 7079 2729 0a09 6d79 2024 733b 'copy')..my $s;\n-00006050: 0a09 666f 7265 6163 6820 2473 2028 4024 ..foreach $s (@$\n-00006060: 7365 7269 6573 546f 4469 7374 7269 6275 seriesToDistribu\n-00006070: 7465 290a 097b 0a09 2020 2020 6e65 7874 te)..{.. next\n-00006080: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d \"$del\n-00006090: 7461 4361 6368 652f 2473 223b 0a0a 0920 taCache/$s\";... \n-000060a0: 2020 206d 6b64 6972 2022 2462 6163 6b75 mkdir \"$backu\n-000060b0: 7044 6972 2f24 7322 0a09 0975 6e6c 6573 pDir/$s\"...unles\n-000060c0: 7320 2d64 2022 2462 6163 6b75 7044 6972 s -d \"$backupDir\n-000060d0: 2f24 7322 3b0a 0a09 2020 2020 6d79 2028 /$s\";... my (\n-000060e0: 4064 6972 7329 203d 2026 3a3a 7265 6164 @dirs) = &::read\n-000060f0: 4469 7253 7462 7528 2224 6465 6c74 6143 DirStbu(\"$deltaC\n-00006100: 6163 6865 2f24 7322 2c20 5f5f 4649 4c45 ache/$s\", __FILE\n-00006110: 5f5f 2c20 5f5f 4c49 4e45 5f5f 2c0a 0909 __, __LINE__,...\n-00006120: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00006130: 275c 415c 647b 347d 5c2e 5c64 7b32 7d5c '\\A\\d{4}\\.\\d{2}\\\n-00006140: 2e5c 647b 327d 5f5c 647b 327d 5c2e 5c64 .\\d{2}_\\d{2}\\.\\d\n-00006150: 7b32 7d5c 2e5c 647b 327d 5c5a 272c 0a09 {2}\\.\\d{2}\\Z',..\n-00006160: 0909 0909 2470 724c 6f67 293b 0a09 2020 ....$prLog);.. \n-00006170: 2020 6d79 2024 643b 0a09 2020 2020 666f my $d;.. fo\n-00006180: 7265 6163 6820 2464 2028 4064 6972 7329 reach $d (@dirs)\n-00006190: 0a09 2020 2020 7b0a 0909 2320 7365 6172 .. {...# sear\n-000061a0: 6368 2069 6620 666c 6167 2066 696c 6520 ch if flag file \n-000061b0: 6973 2061 6c72 6561 6479 2063 6f6e 7461 is already conta\n-000061c0: 696e 696e 6720 7468 6973 2062 6163 6b75 ining this backu\n-000061d0: 7043 6f70 794e 616d 650a 0909 6c6f 6361 pCopyName...loca\n-000061e0: 6c20 2a46 494c 453b 0a09 0969 6620 282d l *FILE;...if (-\n-000061f0: 6420 2224 6465 6c74 6143 6163 6865 2f24 d \"$deltaCache/$\n-00006200: 732f 2464 2229 0a09 097b 0a23 7072 696e s/$d\")...{.#prin\n-00006210: 7420 223d 313d 2464 5c6e 223b 0a09 0920 t \"=1=$d\\n\";... \n-00006220: 2020 2069 6620 282d 6520 2224 6465 6c74 if (-e \"$delt\n-00006230: 6143 6163 6865 2f24 732f 2464 2e6e 6f74 aCache/$s/$d.not\n-00006240: 4669 6e69 7368 6564 2229 0a09 0920 2020 Finished\")... \n-00006250: 207b 0a23 7072 696e 7420 223d 323d 2464 {.#print \"=2=$d\n-00006260: 5c6e 223b 0a09 0909 2470 724c 6f67 2d3e \\n\";....$prLog->\n-00006270: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00006280: 2027 5727 2c0a 0909 0909 2020 2020 2020 'W',..... \n-00006290: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... \n-000062a0: 2020 2020 5b22 3c24 6465 6c74 6143 6163 [\"<$deltaCac\n-000062b0: 6865 2f24 732f 2464 3e20 6e6f 7420 6669 he/$s/$d> not fi\n-000062c0: 6e69 7368 6564 225d 293b 0a09 0909 6c61 nished\"]);....la\n-000062d0: 7374 3b20 2023 2064 6f20 6e6f 7420 636f st; # do not co\n-000062e0: 7079 206c 6174 6572 2062 6163 6b75 7073 py later backups\n-000062f0: 206f 720a 0909 0920 2020 2020 2020 2320 or.... # \n-00006300: 6861 7264 206c 696e 6b69 6e67 2077 696c hard linking wil\n-00006310: 6c20 7275 6e20 696e 746f 2070 726f 626c l run into probl\n-00006320: 656d 730a 0909 2020 2020 7d0a 0a09 0920 ems... }.... \n-00006330: 2020 206d 7920 2466 6f75 6e64 203d 2030 my $found = 0\n-00006340: 3b0a 0909 2020 2020 6966 2028 2d65 2022 ;... if (-e \"\n-00006350: 2464 656c 7461 4361 6368 652f 2473 2f24 $deltaCache/$s/$\n-00006360: 642e 636f 7069 6564 2229 0a09 0920 2020 d.copied\")... \n-00006370: 207b 0a09 0909 6f70 656e 2846 494c 452c {....open(FILE,\n-00006380: 2027 3c27 2c20 2224 6465 6c74 6143 6163 '<', \"$deltaCac\n-00006390: 6865 2f24 732f 2464 2e63 6f70 6965 6422 he/$s/$d.copied\"\n-000063a0: 2920 6f72 0a09 0909 2020 2020 2470 724c ) or.... $prL\n-000063b0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-000063c0: 2720 3d3e 2027 4527 2c0a 0909 0909 0920 ' => 'E',...... \n-000063d0: 2027 2d73 7472 2720 3d3e 0a09 0909 0909 '-str' =>......\n-000063e0: 2020 5b22 6361 6e6e 6f74 206f 7065 6e20 [\"cannot open \n-000063f0: 3c24 6465 6c74 6143 6163 6865 2f24 732f <$deltaCache/$s/\n-00006400: 2464 2e63 6f70 6965 643e 225d 2c0a 0909 $d.copied>\"],...\n-00006410: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-00006420: 3129 3b0a 0909 096d 7920 246c 3b0a 0909 1);....my $l;...\n-00006430: 0966 6f72 6561 6368 2024 6c20 283c 4649 .foreach $l ()....{.... \n-00006450: 2063 686f 6d70 2024 6c3b 0a09 0909 2020 chomp $l;.... \n-00006460: 2020 2466 6f75 6e64 203d 2031 0a09 0909 $found = 1....\n-00006470: 0969 6620 246c 2065 7120 2462 6163 6b75 .if $l eq $backu\n-00006480: 7054 7265 654e 616d 653b 0a09 0909 7d0a pTreeName;....}.\n-00006490: 0909 0963 6c6f 7365 2846 494c 4529 3b0a ...close(FILE);.\n-000064a0: 0909 2020 2020 7d0a 0a09 0920 2020 2069 .. }.... i\n-000064b0: 6620 2824 666f 756e 6429 0a09 0920 2020 f ($found)... \n-000064c0: 207b 0a09 0909 2470 724c 6f67 2d3e 7072 {....$prLog->pr\n-000064d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000064e0: 4927 2c0a 0909 0909 2020 2020 2020 272d I',..... '-\n-000064f0: 7374 7227 203d 3e0a 0909 0909 2020 2020 str' =>..... \n-00006500: 2020 5b22 3c24 6261 636b 7570 4469 722f [\"<$backupDir/\n-00006510: 2473 2f24 643e 2061 6c72 6561 6479 2063 $s/$d> already c\n-00006520: 6f70 6965 6422 5d29 0a09 0909 2020 2020 opied\"]).... \n-00006530: 6966 2024 7665 7262 6f73 653b 0a09 0909 if $verbose;....\n-00006540: 6e65 7874 3b0a 0909 2020 2020 7d0a 0909 next;... }...\n-00006550: 7d0a 0a23 7072 696e 7420 223d 333d 2464 }..#print \"=3=$d\n-00006560: 5c6e 223b 0a09 0924 7072 4c6f 672d 3e70 \\n\";...$prLog->p\n-00006570: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00006580: 2749 272c 0a09 0909 2020 2020 2020 272d 'I',.... '-\n-00006590: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... \n-000065a0: 205b 2263 6f70 7969 6e67 203c 2464 656c [\"copying <$del\n-000065b0: 7461 4361 6368 652f 2473 2f24 643e 2074 taCache/$s/$d> t\n-000065c0: 6f20 2220 2e0a 0909 0920 2020 2020 2020 o \" ..... \n-000065d0: 223c 2462 6163 6b75 7044 6972 2f24 733e \"<$backupDir/$s>\n-000065e0: 225d 293b 0a09 0926 3a3a 636f 7079 4469 \"]);...&::copyDi\n-000065f0: 7228 2224 6465 6c74 6143 6163 6865 2f24 r(\"$deltaCache/$\n-00006600: 732f 2464 2220 3d3e 2022 2462 6163 6b75 s/$d\" => \"$backu\n-00006610: 7044 6972 2f24 7322 2c0a 0909 0920 2020 pDir/$s\",.... \n-00006620: 222f 746d 702f 7374 6275 5570 6461 7465 \"/tmp/stbuUpdate\n-00006630: 4261 636b 7570 2d22 2c20 2470 724c 6f67 Backup-\", $prLog\n-00006640: 2c20 3029 3b0a 0909 6f70 656e 2846 494c , 0);...open(FIL\n-00006650: 452c 2027 3e3e 272c 2022 2464 656c 7461 E, '>>', \"$delta\n-00006660: 4361 6368 652f 2473 2f24 642e 636f 7069 Cache/$s/$d.copi\n-00006670: 6564 2229 206f 720a 0909 2020 2020 2470 ed\") or... $p\n-00006680: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00006690: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n-000066a0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n-000066b0: 2020 5b22 6361 6e6e 6f74 2077 7269 7465 [\"cannot write\n-000066c0: 203c 2464 656c 7461 4361 6368 652f 2473 <$deltaCache/$s\n-000066d0: 2f24 642e 636f 7069 6564 3e22 5d2c 0a09 /$d.copied>\"],..\n-000066e0: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-000066f0: 3129 3b0a 0909 7072 696e 7420 4649 4c45 1);...print FILE\n-00006700: 2022 2462 6163 6b75 7054 7265 654e 616d \"$backupTreeNam\n-00006710: 655c 6e22 3b0a 0909 636c 6f73 6528 4649 e\\n\";...close(FI\n-00006720: 4c45 293b 0a09 2020 2020 7d0a 2370 7269 LE);.. }.#pri\n-00006730: 6e74 2022 3d34 3d5c 6e22 3b0a 097d 0a23 nt \"=4=\\n\";..}.#\n-00006740: 7072 696e 7420 223d 353d 5c6e 223b 0a20 print \"=5=\\n\";. \n-00006750: 2020 207d 0a20 2020 2065 6c73 6966 2028 }. elsif (\n-00006760: 2462 6163 6b75 7054 7970 6520 6571 2027 $backupType eq '\n-00006770: 6d61 7374 6572 2729 0a20 2020 207b 0a09 master'). {..\n-00006780: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib\n-00006790: 7574 6520 3d20 5c40 7265 6164 5365 7269 ute = \\@readSeri\n-000067a0: 6573 3b0a 0a09 6d79 2024 733b 0a09 666f es;...my $s;..fo\n-000067b0: 7265 6163 6820 2473 2028 4024 7365 7269 reach $s (@$seri\n-000067c0: 6573 546f 4469 7374 7269 6275 7465 290a esToDistribute).\n-000067d0: 097b 0a09 2020 2020 756e 6c65 7373 2028 .{.. unless (\n-000067e0: 2d65 2022 2462 6163 6b75 7044 6972 2f24 -e \"$backupDir/$\n-000067f0: 7322 290a 0920 2020 207b 0a09 0924 7072 s\").. {...$pr\n-00006800: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00006810: 6427 203d 3e20 2757 272c 0a09 0909 2020 d' => 'W',.... \n-00006820: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>...\n-00006830: 0920 2020 2020 205b 2273 6572 6965 7320 . [\"series \n-00006840: 3c24 6261 636b 7570 5472 6565 4e61 6d65 <$backupTreeName\n-00006850: 2f24 733e 2064 6f65 7320 6e6f 7420 6578 /$s> does not ex\n-00006860: 6973 7422 5d29 3b0a 0909 6e65 7874 3b0a ist\"]);...next;.\n-00006870: 0920 2020 207d 0a0a 0920 2020 2024 7072 . }... $pr\n-00006880: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00006890: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n-000068a0: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [\n-000068b0: 226d 6173 7465 7220 6261 636b 7570 3a20 \"master backup: \n-000068c0: 6368 6563 6b69 6e67 203c 2462 6163 6b75 checking <$backu\n-000068d0: 7054 7265 654e 616d 652f 2473 3e22 5d29 pTreeName/$s>\"])\n-000068e0: 3b0a 0a09 2020 2020 6d79 2028 4064 6972 ;... my (@dir\n-000068f0: 7329 203d 2026 3a3a 7265 6164 4469 7253 s) = &::readDirS\n-00006900: 7462 7528 2224 6261 636b 7570 4469 722f tbu(\"$backupDir/\n-00006910: 2473 222c 205f 5f46 494c 455f 5f2c 205f $s\", __FILE__, _\n-00006920: 5f4c 494e 455f 5f2c 0a09 0909 2020 2020 _LINE__,.... \n-00006930: 2020 2027 5c41 5c64 7b34 7d5c 2e5c 647b '\\A\\d{4}\\.\\d{\n-00006940: 327d 5c2e 5c64 7b32 7d5f 5c64 7b32 7d5c 2}\\.\\d{2}_\\d{2}\\\n-00006950: 2e5c 647b 327d 5c2e 5c64 7b32 7d5c 5a27 .\\d{2}\\.\\d{2}\\Z'\n-00006960: 2c0a 0909 0909 0924 7072 4c6f 6729 3b0a ,......$prLog);.\n-00006970: 0920 2020 206d 7920 2465 6e74 7279 3b0a . my $entry;.\n-00006980: 0920 2020 2066 6f72 6561 6368 2024 656e . foreach $en\n-00006990: 7472 7920 2840 6469 7273 290a 0920 2020 try (@dirs).. \n-000069a0: 207b 0a09 096e 6578 740a 0909 2020 2020 {...next... \n-000069b0: 756e 6c65 7373 202d 6520 2224 6261 636b unless -e \"$back\n-000069c0: 7570 4469 722f 2473 2f24 656e 7472 792f upDir/$s/$entry/\n-000069d0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink\n-000069e0: 732f 6c69 6e6b 4669 6c65 2e62 7a32 223b s/linkFile.bz2\";\n-000069f0: 0a0a 0909 6966 2028 282d 6520 2224 6465 ....if ((-e \"$de\n-00006a00: 6c74 6143 6163 6865 2f24 732f 2465 6e74 ltaCache/$s/$ent\n-00006a10: 7279 2220 6f72 0a09 0920 2020 2020 2d65 ry\" or... -e\n-00006a20: 2022 2464 656c 7461 4361 6368 652f 2473 \"$deltaCache/$s\n-00006a30: 2f24 656e 7472 792e 636f 7069 6564 2229 /$entry.copied\")\n-00006a40: 2061 6e64 0a09 0920 2020 206e 6f74 202d and... not -\n-00006a50: 6520 2224 6465 6c74 6143 6163 6865 2f24 e \"$deltaCache/$\n-00006a60: 732f 2465 6e74 7279 2e6e 6f74 4669 6e69 s/$entry.notFini\n-00006a70: 7368 6564 2229 0a09 097b 0a09 0920 2020 shed\")...{... \n-00006a80: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-00006a90: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00006aa0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n-00006ab0: 0909 0920 205b 225c 7461 6c72 6561 6479 ... [\"\\talready\n-00006ac0: 2063 6f70 6965 6420 3c24 656e 7472 793e copied <$entry>\n-00006ad0: 2074 6f20 3c24 6465 6c74 6143 6163 6865 to <$deltaCache\n-00006ae0: 3e22 5d29 3b0a 0909 2020 2020 6e65 7874 >\"]);... next\n-00006af0: 3b0a 0909 7d0a 0a09 0924 7072 4c6f 672d ;...}....$prLog-\n-00006b00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00006b10: 3e20 2749 272c 0a09 0909 2020 2020 2020 > 'I',.... \n-00006b20: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... \n-00006b30: 2020 205b 225c 7463 6f70 7969 6e67 203c [\"\\tcopying <\n-00006b40: 2465 6e74 7279 3e20 746f 203c 2464 656c $entry> to <$del\n-00006b50: 7461 4361 6368 652f 2473 3e22 5d29 3b0a taCache/$s>\"]);.\n-00006b60: 0a09 096d 6b64 6972 2022 2464 656c 7461 ...mkdir \"$delta\n-00006b70: 4361 6368 652f 2473 220a 0909 2020 2020 Cache/$s\"... \n-00006b80: 756e 6c65 7373 202d 6520 2224 6465 6c74 unless -e \"$delt\n-00006b90: 6143 6163 6865 2f24 7322 3b0a 0a09 096f aCache/$s\";....o\n-00006ba0: 7065 6e28 4649 4c45 2c20 273e 272c 2022 pen(FILE, '>', \"\n-00006bb0: 2464 656c 7461 4361 6368 652f 2473 2f24 $deltaCache/$s/$\n-00006bc0: 656e 7472 792e 6e6f 7446 696e 6973 6865 entry.notFinishe\n-00006bd0: 6422 2920 6f72 0a09 0920 2020 2024 7072 d\") or... $pr\n-00006be0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00006bf0: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-00006c00: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... \n-00006c10: 205b 2263 616e 6e6f 7420 7772 6974 6520 [\"cannot write \n-00006c20: 3c24 6465 6c74 6143 6163 6865 2f24 732f <$deltaCache/$s/\n-00006c30: 2465 6e74 7279 2e6e 6f74 4669 6e69 7368 $entry.notFinish\n-00006c40: 6564 3e22 5d2c 0a09 0909 0920 2027 2d65 ed>\"],..... '-e\n-00006c50: 7869 7427 203d 3e20 3129 3b0a 0909 636c xit' => 1);...cl\n-00006c60: 6f73 6528 4649 4c45 293b 0a09 0926 3a3a ose(FILE);...&::\n-00006c70: 636f 7079 4469 7228 2224 6261 636b 7570 copyDir(\"$backup\n-00006c80: 4469 722f 2473 2f24 656e 7472 7922 203d Dir/$s/$entry\" =\n-00006c90: 3e20 2224 6465 6c74 6143 6163 6865 2f24 > \"$deltaCache/$\n-00006ca0: 7322 2c0a 0909 0920 2020 222f 746d 702f s\",.... \"/tmp/\n-00006cb0: 7374 6275 5570 6461 7465 4261 636b 7570 stbuUpdateBackup\n-00006cc0: 2d22 2c20 2470 724c 6f67 2c20 3029 3b0a -\", $prLog, 0);.\n-00006cd0: 0909 756e 6c69 6e6b 2022 2464 656c 7461 ..unlink \"$delta\n-00006ce0: 4361 6368 652f 2473 2f24 656e 7472 792e Cache/$s/$entry.\n-00006cf0: 6e6f 7446 696e 6973 6865 6422 3b0a 0920 notFinished\";.. \n-00006d00: 2020 207d 0a09 7d0a 0a20 2020 207d 0a20 }..}.. }. \n-00006d10: 2020 2065 6c73 6966 2028 2462 6163 6b75 elsif ($backu\n-00006d20: 7054 7970 6520 6571 2027 6e6f 6e65 2729 pType eq 'none')\n-00006d30: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n-00006d40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00006d50: 2027 4927 2c0a 0909 2020 2020 2020 272d 'I',... '-\n-00006d60: 7374 7227 203d 3e20 5b22 2462 6163 6b75 str' => [\"$backu\n-00006d70: 7044 6972 2f24 6261 7365 5472 6565 436f pDir/$baseTreeCo\n-00006d80: 6e66 3a20 6e6f 7468 696e 6720 746f 2064 nf: nothing to d\n-00006d90: 6f22 5d29 3b09 0a20 2020 207d 0a7d 2023 o\"]);.. }.} #\n-00006da0: 2065 6e64 2072 6561 6420 7374 6f72 6542 end read storeB\n-00006db0: 6163 6b75 7042 6173 6554 7265 652e 636f ackupBaseTree.co\n-00006dc0: 6e66 2069 6e20 2462 6163 6b75 7044 6972 nf in $backupDir\n-00006dd0: 0a0a 0a65 7869 7420 300a 2020 2020 6966 ...exit 0. if\n-00006de0: 2024 636f 7079 4261 636b 7570 4f6e 6c79 $copyBackupOnly\n-00006df0: 3b0a 0a0a 6966 2028 2469 6e74 6572 6163 ;...if ($interac\n-00006e00: 7469 7665 290a 7b0a 2020 2020 6d79 2024 tive).{. my $\n-00006e10: 616e 7377 6572 3b0a 2020 2020 646f 0a20 answer;. do. \n-00006e20: 2020 207b 0a09 7072 696e 7420 225c 6e42 {..print \"\\nB\n-00006e30: 6566 6f72 6520 7472 7969 6e67 2074 6f20 efore trying to \n-00006e40: 7265 7061 6972 2061 6e79 2064 616d 6167 repair any damag\n-00006e50: 6573 206f 6620 7468 6520 6261 636b 7570 es of the backup\n-00006e60: 5c6e 222c 0a09 2279 6f75 2073 686f 756c \\n\",..\"you shoul\n-00006e70: 6420 6d61 6b65 2061 2062 6163 6b75 7020 d make a backup \n-00006e80: 6f66 2074 6865 2066 696c 6573 2062 6565 of the files bee\n-00006e90: 696e 6720 6d61 6e69 7075 6c61 7465 6420 ing manipulated \n-00006ea0: 6279 5c6e 222c 0a09 2274 6869 7320 7072 by\\n\",..\"this pr\n-00006eb0: 6f67 7261 6d2e 2044 6f20 7468 6973 2062 ogram. Do this b\n-00006ec0: 7920 6567 2e20 6578 6563 7574 696e 675c y eg. executing\\\n-00006ed0: 6e22 2c0a 0922 2320 7461 7220 6366 202f n\",..\"# tar cf /\n-00006ee0: 7361 7665 506c 6163 652e 7461 7220 3c62 savePlace.tar /..st\n-00006f00: 6f72 6542 6163 6b75 704c 696e 6b73 5c6e oreBackupLinks\\n\n-00006f10: 222c 0a09 2266 6f72 2061 6c6c 2061 6666 \",..\"for all aff\n-00006f20: 6563 7465 6420 6261 636b 7570 2064 6972 ected backup dir\n-00006f30: 6563 746f 7269 6573 206f 7220 7369 6d70 ectories or simp\n-00006f40: 6c79 2061 6c6c 206f 6620 796f 7572 2062 ly all of your b\n-00006f50: 6163 6b75 7073 2e5c 6e22 2c0a 0922 636f ackups.\\n\",..\"co\n-00006f60: 6e74 696e 7565 3f5c 6e22 2c0a 0922 7965 ntinue?\\n\",..\"ye\n-00006f70: 7320 2f20 6e6f 2020 2d3e 2022 3b0a 0924 s / no -> \";..$\n-00006f80: 616e 7377 6572 203d 203c 5354 4449 4e3e answer = \n-00006f90: 3b0a 0963 686f 6d70 2024 616e 7377 6572 ;..chomp $answer\n-00006fa0: 3b0a 2020 2020 7d20 7768 696c 6520 2824 ;. } while ($\n-00006fb0: 616e 7377 6572 206e 6520 2779 6573 2720 answer ne 'yes' \n-00006fc0: 616e 6420 2461 6e73 7765 7220 6e65 2027 and $answer ne '\n-00006fd0: 6e6f 2729 3b0a 0a20 2020 2065 7869 7420 no');.. exit \n-00006fe0: 300a 0969 6620 2461 6e73 7765 7220 6571 0..if $answer eq\n-00006ff0: 2027 6e6f 273b 0a7d 0a0a 0a6d 7920 2461 'no';.}...my $a\n-00007000: 6c6c 4c69 6e6b 7320 3d20 6c61 7465 4c69 llLinks = lateLi\n-00007010: 6e6b 732d 3e6e 6577 2827 2d64 6972 7327 nks->new('-dirs'\n-00007020: 203d 3e20 5b24 6261 636b 7570 4469 725d => [$backupDir]\n-00007030: 2c0a 0909 0920 2020 2020 2027 2d6b 696e ,.... '-kin\n-00007040: 6427 203d 3e20 2772 6563 7572 7369 7665 d' => 'recursive\n-00007050: 5365 6172 6368 272c 0a09 0909 2020 2020 Search',.... \n-00007060: 2020 272d 6368 6563 6b4c 696e 6b46 726f '-checkLinkFro\n-00007070: 6d43 6f6e 7369 7374 656e 6379 2720 3d3e mConsistency' =>\n-00007080: 2031 2c0a 0909 0920 2020 2020 2027 2d76 1,.... '-v\n-00007090: 6572 626f 7365 2720 3d3e 2024 7665 7262 erbose' => $verb\n-000070a0: 6f73 652c 0a09 0909 2020 2020 2020 272d ose,.... '-\n-000070b0: 6465 6275 6727 203d 3e20 2464 6562 7567 debug' => $debug\n-000070c0: 2c0a 0909 0920 2020 2020 2027 2d70 724c ,.... '-prL\n-000070d0: 6f67 2720 3d3e 2024 7072 4c6f 672c 0a09 og' => $prLog,..\n-000070e0: 0909 2020 2020 2020 272d 696e 7465 7261 .. '-intera\n-000070f0: 6374 6976 6527 203d 3e20 2469 6e74 6572 ctive' => $inter\n-00007100: 6163 7469 7665 2c0a 0909 0920 2020 2020 active,.... \n-00007110: 2027 2d61 7574 6f72 6570 6169 7227 203d '-autorepair' =\n-00007120: 3e20 2461 7574 6f72 6570 6169 722c 0a09 > $autorepair,..\n-00007130: 0909 2020 2020 2020 272d 6175 746f 7265 .. '-autore\n-00007140: 7061 6972 4572 726f 7227 203d 3e20 2461 pairError' => $a\n-00007150: 7574 6f72 6570 6169 7245 7272 6f72 293b utorepairError);\n-00007160: 0a0a 0a69 6620 2824 6368 6563 6b4f 6e6c ...if ($checkOnl\n-00007170: 7929 0a7b 0a20 2020 2075 6e6c 696e 6b20 y).{. unlink \n-00007180: 246c 6f63 6b46 696c 653b 0a20 2020 2065 $lockFile;. e\n-00007190: 7869 7420 303b 0a7d 0a0a 6966 2028 2469 xit 0;.}..if ($i\n-000071a0: 6e74 6572 6163 7469 7665 290a 7b0a 2020 nteractive).{. \n-000071b0: 2020 6d79 2024 616e 7377 6572 3b0a 2020 my $answer;. \n-000071c0: 2020 646f 0a20 2020 207b 0a09 7072 696e do. {..prin\n-000071d0: 7420 225c 6e63 6f6e 7469 6e75 6520 7769 t \"\\ncontinue wi\n-000071e0: 7468 2075 7064 6174 696e 6720 7468 6520 th updating the \n-000071f0: 6261 636b 7570 2873 293f 5c6e 222c 0a09 backup(s)?\\n\",..\n-00007200: 2228 636f 6d70 7265 7373 696e 6720 616e \"(compressing an\n-00007210: 6420 7365 7474 696e 6720 6861 7264 206c d setting hard l\n-00007220: 696e 6b73 295c 6e22 2c0a 0922 7965 7320 inks)\\n\",..\"yes \n-00007230: 2f20 6e6f 2020 2d3e 2022 3b0a 0924 616e / no -> \";..$an\n-00007240: 7377 6572 203d 203c 5354 4449 4e3e 3b0a swer = ;.\n-00007250: 0963 686f 6d70 2024 616e 7377 6572 3b0a .chomp $answer;.\n-00007260: 2020 2020 7d20 7768 696c 6520 2824 616e } while ($an\n-00007270: 7377 6572 206e 6520 2779 6573 2720 616e swer ne 'yes' an\n-00007280: 6420 2461 6e73 7765 7220 6e65 2027 6e6f d $answer ne 'no\n-00007290: 2729 3b0a 0a20 2020 2065 7869 7420 300a ');.. exit 0.\n-000072a0: 0969 6620 2461 6e73 7765 7220 6571 2027 .if $answer eq '\n-000072b0: 6e6f 273b 0a7d 0a0a 230a 2320 7365 7420 no';.}..#.# set \n-000072c0: 6c69 6e6b 7320 616e 6420 636f 6d70 7265 links and compre\n-000072d0: 7373 2066 696c 6573 0a23 0a6d 7920 2475 ss files.#.my $u\n-000072e0: 7064 6174 6544 6972 466c 6167 203d 2030 pdateDirFlag = 0\n-000072f0: 3b0a 6d79 2028 406c 6174 654c 696e 6b44 ;.my (@lateLinkD\n-00007300: 6972 7329 3b0a 6d79 2024 6e75 6d62 6572 irs);.my $number\n-00007310: 4469 7273 546f 4c69 6e6b 203d 202d 313b DirsToLink = -1;\n-00007320: 0a6d 7920 246e 756d 6265 7244 6972 7354 .my $numberDirsT\n-00007330: 6f4c 696e 6b43 6f75 6e74 203d 2030 3b0a oLinkCount = 0;.\n-00007340: 7768 696c 6520 2828 2840 6c61 7465 4c69 while (((@lateLi\n-00007350: 6e6b 4469 7273 2920 3d20 2461 6c6c 4c69 nkDirs) = $allLi\n-00007360: 6e6b 732d 3e67 6574 416c 6c44 6972 7357 nks->getAllDirsW\n-00007370: 6974 684c 6174 654c 696e 6b73 2829 2920 ithLateLinks()) \n-00007380: 3e20 3029 0a7b 0a23 2020 2020 246e 756d > 0).{.# $num\n-00007390: 6265 7244 6972 7354 6f4c 696e 6b20 3d20 berDirsToLink = \n-000073a0: 406c 6174 654c 696e 6b44 6972 730a 2020 @lateLinkDirs. \n-000073b0: 2020 246e 756d 6265 7244 6972 7354 6f4c $numberDirsToL\n-000073c0: 696e 6b20 3d20 2461 6c6c 4c69 6e6b 732d ink = $allLinks-\n-000073d0: 3e67 6574 4e75 6d4c 696e 6b54 6f28 290a >getNumLinkTo().\n-000073e0: 0969 6620 246e 756d 6265 7244 6972 7354 .if $numberDirsT\n-000073f0: 6f4c 696e 6b20 3d3d 202d 313b 0a0a 2020 oLink == -1;.. \n-00007400: 2020 6d79 2024 643b 0a20 2020 2066 6f72 my $d;. for\n-00007410: 6561 6368 2024 6420 2873 6f72 7420 406c each $d (sort @l\n-00007420: 6174 654c 696e 6b44 6972 7329 0a20 2020 ateLinkDirs). \n-00007430: 207b 0a09 6d79 2024 6c69 6e6b 546f 4861 {..my $linkToHa\n-00007440: 7368 203d 2024 616c 6c4c 696e 6b73 2d3e sh = $allLinks->\n-00007450: 6765 744c 696e 6b54 6f48 6173 6828 293b getLinkToHash();\n-00007460: 0a09 6d79 2024 6c69 6e6b 4672 6f6d 4861 ..my $linkFromHa\n-00007470: 7368 203d 2024 616c 6c4c 696e 6b73 2d3e sh = $allLinks->\n-00007480: 6765 744c 696e 6b46 726f 6d48 6173 6828 getLinkFromHash(\n-00007490: 293b 0a0a 2320 2020 2020 2020 7072 696e );..# prin\n-000074a0: 7420 2263 6865 636b 696e 6720 3c24 643e t \"checking <$d>\n-000074b0: 5c6e 223b 0a20 2020 2020 2020 6966 2028 \\n\";. if (\n-000074c0: 2d65 2022 2464 2f2e 7374 6f72 6542 6163 -e \"$d/.storeBac\n-000074d0: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil\n-000074e0: 652e 627a 3222 290a 2020 2020 2020 207b e.bz2\"). {\n-000074f0: 0a23 0920 2020 7072 696e 7420 225c 7424 .#. print \"\\t$\n-00007500: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi\n-00007510: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2\n-00007520: 2065 7869 7374 735c 6e22 3b0a 0920 2020 exists\\n\";.. \n-00007530: 6d79 2024 6c69 6e6b 546f 4469 723b 0a09 my $linkToDir;..\n-00007540: 2020 206d 7920 246e 6565 6473 5570 6461 my $needsUpda\n-00007550: 7465 203d 2030 3b0a 0920 2020 6d79 2024 te = 0;.. my $\n-00007560: 6861 7368 203d 2024 246c 696e 6b54 6f48 hash = $$linkToH\n-00007570: 6173 687b 2464 7d3b 0a09 2020 2066 6f72 ash{$d};.. for\n-00007580: 6561 6368 2024 6c69 6e6b 546f 4469 7220 each $linkToDir \n-00007590: 2873 6f72 7420 6b65 7973 2025 2468 6173 (sort keys %$has\n-000075a0: 6829 0a09 2020 207b 0a23 0920 2020 2020 h).. {.#. \n-000075b0: 2020 7072 696e 7420 225c 745c 7463 6865 print \"\\t\\tche\n-000075c0: 636b 696e 6720 246c 696e 6b54 6f44 6972 cking $linkToDir\n-000075d0: 2066 6f72 206c 696e 6b46 696c 652e 627a for linkFile.bz\n-000075e0: 323a 2022 3b0a 0920 2020 2020 2020 6966 2: \";.. if\n-000075f0: 2028 2d65 2022 246c 696e 6b54 6f44 6972 (-e \"$linkToDir\n-00007600: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin\n-00007610: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2\"\n-00007620: 290a 0920 2020 2020 2020 7b0a 0909 2020 ).. {... \n-00007630: 2024 6e65 6564 7355 7064 6174 6520 3d20 $needsUpdate = \n-00007640: 313b 0a23 0909 2020 2070 7269 6e74 2022 1;.#.. print \"\n-00007650: 6e65 6564 7320 5570 6461 7465 215c 6e22 needs Update!\\n\"\n-00007660: 3b0a 0909 2020 206c 6173 743b 0a09 2020 ;... last;.. \n-00007670: 2020 2020 207d 0a09 2020 2020 2020 2065 }.. e\n-00007680: 6c73 650a 0920 2020 2020 2020 7b0a 2309 lse.. {.#.\n-00007690: 0920 2020 7072 696e 7420 226f 6b2c 2069 . print \"ok, i\n-000076a0: 7320 7570 6461 7465 645c 6e22 3b0a 0920 s updated\\n\";.. \n-000076b0: 2020 2020 2020 7d0a 0920 2020 7d0a 0920 }.. }.. \n-000076c0: 2020 6966 2028 246e 6565 6473 5570 6461 if ($needsUpda\n-000076d0: 7465 203d 3d20 3029 0a09 2020 207b 0a23 te == 0).. {.#\n-000076e0: 0920 2020 2020 2020 7072 696e 7420 2275 . print \"u\n-000076f0: 7064 6174 6520 2464 5c6e 223b 0a09 2020 pdate $d\\n\";.. \n-00007700: 207d 0a09 2020 2065 6c73 650a 0920 2020 }.. else.. \n-00007710: 7b0a 0920 2020 2020 2020 6e65 7874 3b0a {.. next;.\n-00007720: 0920 2020 7d0a 2020 2020 2020 207d 0a20 . }. }. \n-00007730: 2020 2020 2020 656c 7365 0a20 2020 2020 else. \n-00007740: 2020 7b0a 0920 2020 6e65 7874 3b0a 2020 {.. next;. \n-00007750: 2020 2020 207d 0a0a 0924 7570 6461 7465 }...$update\n-00007760: 4469 7246 6c61 6720 3d20 313b 0a09 2b2b DirFlag = 1;..++\n-00007770: 246e 756d 6265 7244 6972 7354 6f4c 696e $numberDirsToLin\n-00007780: 6b43 6f75 6e74 3b0a 093a 3a75 7064 6174 kCount;..::updat\n-00007790: 6542 6163 6b75 7044 6972 2824 642c 2024 eBackupDir($d, $\n-000077a0: 6e6f 436f 6d70 7265 7373 2c20 2470 726f noCompress, $pro\n-000077b0: 6772 6573 7352 6570 6f72 742c 2024 7072 gressReport, $pr\n-000077c0: 4c6f 672c 0a09 0909 2020 2469 6e74 6572 Log,.... $inter\n-000077d0: 6163 7469 7665 2c20 2224 6e75 6d62 6572 active, \"$number\n-000077e0: 4469 7273 546f 4c69 6e6b 436f 756e 742f DirsToLinkCount/\n-000077f0: 246e 756d 6265 7244 6972 7354 6f4c 696e $numberDirsToLin\n-00007800: 6b22 2c0a 0909 0920 2024 6261 636b 7570 k\",.... $backup\n-00007810: 5479 7065 293b 0a0a 0969 6620 282d 6520 Type);...if (-e \n-00007820: 2224 6261 636b 7570 4469 722f 2462 6173 \"$backupDir/$bas\n-00007830: 6554 7265 6543 6f6e 6622 290a 097b 0a09 eTreeConf\")..{..\n-00007840: 2020 2020 2320 7772 6974 6520 6d65 7373 # write mess\n-00007850: 6167 6520 7468 6174 2074 6869 7320 6261 age that this ba\n-00007860: 636b 7570 2069 7320 636f 6d70 6c65 7465 ckup is complete\n-00007870: 6420 746f 2064 656c 7461 4361 6368 650a d to deltaCache.\n-00007880: 0920 2020 2023 2028 6966 206e 6563 6573 . # (if neces\n-00007890: 7361 7279 290a 0920 2020 206d 7920 2461 sary).. my $a\n-000078a0: 6273 4261 636b 7570 4469 7220 3d20 263a bsBackupDir = &:\n-000078b0: 3a61 6273 6f6c 7574 6550 6174 6828 2462 :absolutePath($b\n-000078c0: 6163 6b75 7044 6972 293b 0a09 2020 2020 ackupDir);.. \n-000078d0: 6d79 2024 616b 7444 6972 203d 2026 3a3a my $aktDir = &::\n-000078e0: 6162 736f 6c75 7465 5061 7468 2824 6429 absolutePath($d)\n-000078f0: 3b0a 0a09 2020 2020 6d79 2028 2461 6b74 ;... my ($akt\n-00007900: 4261 636b 7570 4469 722c 2024 616b 7453 BackupDir, $aktS\n-00007910: 6572 6965 732c 2024 616b 7442 6163 6b75 eries, $aktBacku\n-00007920: 702c 2024 6e29 3b0a 0920 2020 2024 6e20 p, $n);.. $n \n-00007930: 3d20 2824 616b 7442 6163 6b75 7044 6972 = ($aktBackupDir\n-00007940: 2c20 2461 6b74 5365 7269 6573 2c20 2461 , $aktSeries, $a\n-00007950: 6b74 4261 636b 7570 2920 3d0a 0909 2461 ktBackup) =...$a\n-00007960: 6b74 4469 7220 3d7e 0a09 092f 5c41 2824 ktDir =~.../\\A($\n-00007970: 6162 7342 6163 6b75 7044 6972 295c 2f28 absBackupDir)\\/(\n-00007980: 2e2a 3f29 5c2f 285c 647b 347d 5c2e 5c64 .*?)\\/(\\d{4}\\.\\d\n-00007990: 7b32 7d5c 2e5c 647b 327d 5f5c 647b 327d {2}\\.\\d{2}_\\d{2}\n-000079a0: 5c2e 5c64 7b32 7d5c 2e5c 647b 327d 295c \\.\\d{2}\\.\\d{2})\\\n-000079b0: 5a2f 3b0a 0a23 7072 696e 7420 223c 2464 Z/;..#print \"<$d\n-000079c0: 3e20 3d3d 3e20 3c24 616b 7442 6163 6b75 > ==> <$aktBacku\n-000079d0: 7044 6972 3e20 3c24 616b 7453 6572 6965 pDir> <$aktSerie\n-000079e0: 733e 203c 2461 6b74 4261 636b 7570 3e5c s> <$aktBackup>\\\n-000079f0: 6e22 3b0a 0a09 2020 2020 6d79 2028 2462 n\";... my ($b\n-00007a00: 6163 6b75 7054 7265 654e 616d 652c 2024 ackupTreeName, $\n-00007a10: 6261 636b 7570 5479 7065 2c20 2473 6572 backupType, $ser\n-00007a20: 6965 7354 6f44 6973 7472 6962 7574 652c iesToDistribute,\n-00007a30: 2024 6465 6c74 6143 6163 6865 2920 3d0a $deltaCache) =.\n-00007a40: 0909 263a 3a72 6561 6442 6163 6b75 7044 ..&::readBackupD\n-00007a50: 6972 4261 7365 5472 6565 436f 6e66 2822 irBaseTreeConf(\"\n-00007a60: 2462 6163 6b75 7044 6972 2f24 6261 7365 $backupDir/$base\n-00007a70: 5472 6565 436f 6e66 222c 0a09 0909 0909 TreeConf\",......\n-00007a80: 2020 2020 2026 3a3a 6162 736f 6c75 7465 &::absolute\n-00007a90: 5061 7468 2824 6261 636b 7570 4469 7229 Path($backupDir)\n-00007aa0: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. \n-00007ab0: 2320 7265 706c 6163 6520 7769 6c64 6361 # replace wildca\n-00007ac0: 7264 730a 0920 2020 206d 7920 2840 7265 rds.. my (@re\n-00007ad0: 6164 5365 7269 6573 2920 3d20 263a 3a65 adSeries) = &::e\n-00007ae0: 7661 6c45 7863 6570 7469 6f6e 4c69 7374 valExceptionList\n-00007af0: 5f50 6c75 734d 696e 7573 2824 7365 7269 _PlusMinus($seri\n-00007b00: 6573 546f 4469 7374 7269 6275 7465 2c0a esToDistribute,.\n-00007b10: 0909 0909 0909 2020 2020 263a 3a61 6273 ...... &::abs\n-00007b20: 6f6c 7574 6550 6174 6828 2462 6163 6b75 olutePath($backu\n-00007b30: 7044 6972 292c 0a09 0909 0909 2020 2020 pDir),...... \n-00007b40: 2224 6261 636b 7570 5472 6565 4e61 6d65 \"$backupTreeName\n-00007b50: 2073 6572 6965 7322 2c20 2773 6572 6965 series\", 'serie\n-00007b60: 7327 2c20 302c 0a09 0909 0909 0920 2020 s', 0,....... \n-00007b70: 2075 6e64 6566 2c20 312c 2024 7072 4c6f undef, 1, $prLo\n-00007b80: 6729 3b0a 0920 2020 2024 7365 7269 6573 g);.. $series\n-00007b90: 546f 4469 7374 7269 6275 7465 203d 5c40 ToDistribute =\\@\n-00007ba0: 7265 6164 5365 7269 6573 3b0a 0a09 2020 readSeries;... \n-00007bb0: 2020 6d79 2024 666f 756e 6420 3d20 303b my $found = 0;\n-00007bc0: 0a09 2020 2020 666f 7265 6163 6820 6d79 .. foreach my\n-00007bd0: 2024 7320 2840 2473 6572 6965 7354 6f44 $s (@$seriesToD\n-00007be0: 6973 7472 6962 7574 6529 0a09 2020 2020 istribute).. \n-00007bf0: 7b0a 0909 6966 2028 2473 2065 7120 2461 {...if ($s eq $a\n-00007c00: 6b74 5365 7269 6573 290a 0909 7b0a 0909 ktSeries)...{...\n-00007c10: 2020 2020 2466 6f75 6e64 203d 2031 3b0a $found = 1;.\n-00007c20: 0909 2020 2020 6c61 7374 3b0a 0909 7d0a .. last;...}.\n-00007c30: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if \n-00007c40: 2824 666f 756e 6420 616e 6420 2462 6163 ($found and $bac\n-00007c50: 6b75 7054 7970 6520 6571 2027 636f 7079 kupType eq 'copy\n-00007c60: 2729 0a09 2020 2020 7b0a 2370 7269 6e74 ').. {.#print\n-00007c70: 2022 3c24 6261 636b 7570 5472 6565 4e61 \"<$backupTreeNa\n-00007c80: 6d65 3e20 2d2d 3e20 3c24 6465 6c74 6143 me> --> <$deltaC\n-00007c90: 6163 6865 3e20 2f20 3c24 616b 7453 6572 ache> / <$aktSer\n-00007ca0: 6965 733e 202f 203c 2461 6b74 4261 636b ies> / <$aktBack\n-00007cb0: 7570 3e20 2e6c 696e 6b65 645c 6e22 3b0a up> .linked\\n\";.\n-00007cc0: 0909 6f70 656e 2846 494c 452c 2027 3e3e ..open(FILE, '>>\n-00007cd0: 272c 2022 2464 656c 7461 4361 6368 652f ', \"$deltaCache/\n-00007ce0: 2461 6b74 5365 7269 6573 2f24 616b 7442 $aktSeries/$aktB\n-00007cf0: 6163 6b75 702e 6c69 6e6b 6564 2229 206f ackup.linked\") o\n-00007d00: 720a 0909 2020 2020 2470 724c 6f67 2d3e r... $prLog->\n-00007d10: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00007d20: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st\n-00007d30: 7227 203d 3e0a 0909 0909 2020 5b22 6361 r' =>..... [\"ca\n-00007d40: 6e6e 6f74 2077 7269 7465 2074 6f20 3c24 nnot write to <$\n-00007d50: 6465 6c74 6143 6163 6865 2f24 616b 7453 deltaCache/$aktS\n-00007d60: 6572 6965 732f 2461 6b74 4261 636b 7570 eries/$aktBackup\n-00007d70: 2e6c 696e 6b65 643e 225d 2c0a 0909 0909 .linked>\"],.....\n-00007d80: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1);\n-00007d90: 0a09 0970 7269 6e74 2046 494c 4520 2224 ...print FILE \"$\n-00007da0: 6261 636b 7570 5472 6565 4e61 6d65 5c6e backupTreeName\\n\n-00007db0: 223b 0a09 0963 6c6f 7365 2846 494c 4529 \";...close(FILE)\n-00007dc0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin\n-00007dd0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I'\n-00007de0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-00007df0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [\"\n-00007e00: 6d61 726b 6564 203c 2461 6b74 5365 7269 marked <$aktSeri\n-00007e10: 6573 2f24 616b 7442 6163 6b75 703e 2061 es/$aktBackup> a\n-00007e20: 7320 6c69 6e6b 6564 2022 202e 0a09 0909 s linked \" .....\n-00007e30: 2020 2020 2020 2022 696e 203c 2464 656c \"in <$del\n-00007e40: 7461 4361 6368 653e 225d 293b 0a09 2020 taCache>\"]);.. \n-00007e50: 2020 7d0a 0a0a 097d 0a0a 0a09 2320 6465 }....}....# de\n-00007e60: 6c65 7465 2070 726f 6365 7373 6564 2066 lete processed f\n-00007e70: 696c 6573 0a09 6d79 2024 6620 3d20 2224 iles..my $f = \"$\n-00007e80: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi\n-00007e90: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2\n-00007ea0: 223b 0a09 6966 2028 2875 6e6c 696e 6b20 \";..if ((unlink \n-00007eb0: 2466 2920 213d 2031 290a 097b 0a09 2020 $f) != 1)..{.. \n-00007ec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00007ed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00007ee0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00007ef0: 2231 2063 616e 6e6f 7420 6465 6c65 7465 \"1 cannot delete\n-00007f00: 203c 2466 3e22 5d29 3b0a 097d 0a09 656c <$f>\"]);..}..el\n-00007f10: 7365 0a09 7b0a 0920 2020 2024 7072 4c6f se..{.. $prLo\n-00007f20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00007f30: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '-\n-00007f40: 7374 7227 203d 3e20 5b22 3120 6465 6c65 str' => [\"1 dele\n-00007f50: 7465 6420 3c24 663e 225d 290a 0909 6966 ted <$f>\"])...if\n-00007f60: 2024 7665 7262 6f73 653b 0a09 7d0a 0a09 $verbose;..}...\n-00007f70: 2466 203d 2022 2464 2f2e 7374 6f72 6542 $f = \"$d/.storeB\n-00007f80: 6163 6b75 704c 696e 6b73 2f6c 696e 6b54 ackupLinks/linkT\n-00007f90: 6f22 3b0a 0969 6620 282d 6520 2466 290a o\";..if (-e $f).\n-00007fa0: 097b 0a09 2020 2020 6966 2028 2875 6e6c .{.. if ((unl\n-00007fb0: 696e 6b20 2466 2920 213d 2031 290a 0920 ink $f) != 1).. \n-00007fc0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p\n-00007fd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00007fe0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-00007ff0: 7374 7227 203d 3e20 5b22 3220 6361 6e6e str' => [\"2 cann\n-00008000: 6f74 2064 656c 6574 6520 3c24 663e 225d ot delete <$f>\"]\n-00008010: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e\n-00008020: 6c73 650a 0920 2020 207b 0a09 0924 7072 lse.. {...$pr\n-00008030: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-00008040: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... \n-00008050: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-00008060: 3220 6465 6c65 7465 6420 3c24 663e 225d 2 deleted <$f>\"]\n-00008070: 290a 0909 2020 2020 6966 2024 7665 7262 )... if $verb\n-00008080: 6f73 653b 0a09 2020 2020 7d0a 097d 0a0a ose;.. }..}..\n-00008090: 2309 7072 696e 7420 2264 656c 6574 6520 #.print \"delete \n-000080a0: 6c69 6e6b 546f 3a5c 6e22 3b0a 2320 2020 linkTo:\\n\";.# \n-000080b0: 2020 2020 7072 696e 7420 225c 7424 643a print \"\\t$d:\n-000080c0: 5c6e 223b 0a20 2020 2020 2020 206d 7920 \\n\";. my \n-000080d0: 246b 3b0a 096d 7920 2468 6173 6820 3d20 $k;..my $hash = \n-000080e0: 2424 6c69 6e6b 546f 4861 7368 7b24 647d $$linkToHash{$d}\n-000080f0: 3b0a 0966 6f72 6561 6368 2024 6b20 2873 ;..foreach $k (s\n-00008100: 6f72 7420 6b65 7973 2025 2468 6173 6829 ort keys %$hash)\n-00008110: 0a09 7b0a 0920 2020 2024 6620 3d20 2424 ..{.. $f = $$\n-00008120: 6861 7368 7b24 6b7d 3b0a 2309 2020 2020 hash{$k};.#. \n-00008130: 7072 696e 7420 225c 745c 7424 6b20 2d3e print \"\\t\\t$k ->\n-00008140: 2022 2c20 2424 6861 7368 7b24 6b7d 2c20 \", $$hash{$k}, \n-00008150: 225c 6e22 3b0a 0a09 2020 2020 6966 2028 \"\\n\";... if (\n-00008160: 2d65 2024 6629 0a09 2020 2020 7b0a 0909 -e $f).. {...\n-00008170: 6966 2028 2875 6e6c 696e 6b20 2466 2920 if ((unlink $f) \n-00008180: 213d 2031 290a 0909 7b0a 0909 2020 2020 != 1)...{... \n-00008190: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-000081a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-000081b0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-000081c0: 3320 6361 6e6e 6f74 2064 656c 6574 6520 3 cannot delete \n-000081d0: 3c24 663e 225d 293b 0a09 097d 0a09 0965 <$f>\"]);...}...e\n-000081e0: 6c73 650a 0909 7b0a 0909 2020 2020 2470 lse...{... $p\n-000081f0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00008200: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',.....\n-00008210: 2020 272d 7374 7227 203d 3e20 5b22 3320 '-str' => [\"3 \n-00008220: 6465 6c65 7465 6420 3c24 663e 225d 290a deleted <$f>\"]).\n-00008230: 0909 0969 6620 2476 6572 626f 7365 3b0a ...if $verbose;.\n-00008240: 0909 7d0a 0920 2020 207d 0a0a 0920 2020 ..}.. }... \n-00008250: 2024 6620 3d20 2424 6c69 6e6b 4672 6f6d $f = $$linkFrom\n-00008260: 4861 7368 7b24 6b7d 7b24 647d 3b0a 2309 Hash{$k}{$d};.#.\n-00008270: 2020 2020 7072 696e 7420 2264 656c 6574 print \"delet\n-00008280: 6520 6c69 6e6b 4672 6f6d 3a20 3c24 663e e linkFrom: <$f>\n-00008290: 5c6e 223b 0a09 2020 2020 6966 2028 2875 \\n\";.. if ((u\n-000082a0: 6e6c 696e 6b20 2466 2920 213d 2031 290a nlink $f) != 1).\n-000082b0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog-\n-000082c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-000082d0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... \n-000082e0: 272d 7374 7227 203d 3e20 5b22 3320 6361 '-str' => [\"3 ca\n-000082f0: 6e6e 6f74 2064 656c 6574 6520 3c24 663e nnot delete <$f>\n-00008300: 225d 293b 0a09 2020 2020 7d0a 0920 2020 \"]);.. }.. \n-00008310: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$\n-00008320: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-00008330: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',....\n-00008340: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => \n-00008350: 5b22 3320 6465 6c65 7465 6420 3c24 663e [\"3 deleted <$f>\n-00008360: 225d 290a 0909 2020 2020 6966 2024 7665 \"])... if $ve\n-00008370: 7262 6f73 653b 0a09 2020 2020 7d0a 0920 rbose;.. }.. \n-00008380: 2020 200a 097d 0a0a 2020 2020 2020 2020 ..}.. \n-00008390: 676f 746f 206e 6578 744c 6f6f 703b 0a20 goto nextLoop;. \n-000083a0: 2020 207d 0a0a 6e65 7874 4c6f 6f70 3a0a }..nextLoop:.\n-000083b0: 0a20 2020 2024 616c 6c4c 696e 6b73 203d . $allLinks =\n-000083c0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new(\n-000083d0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac\n-000083e0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... \n-000083f0: 2020 2027 2d6b 696e 6427 203d 3e20 2772 '-kind' => 'r\n-00008400: 6563 7572 7369 7665 5365 6172 6368 272c ecursiveSearch',\n-00008410: 0a09 0909 2020 2020 2020 2027 2d63 6865 .... '-che\n-00008420: 636b 4c69 6e6b 4672 6f6d 436f 6e73 6973 ckLinkFromConsis\n-00008430: 7465 6e63 7927 203d 3e20 312c 0a09 0909 tency' => 1,....\n-00008440: 2020 2020 2020 2027 2d76 6572 626f 7365 '-verbose\n-00008450: 2720 3d3e 2024 7665 7262 6f73 652c 0a09 ' => $verbose,..\n-00008460: 0909 2020 2020 2020 2027 2d64 6562 7567 .. '-debug\n-00008470: 2720 3d3e 2024 6465 6275 672c 0a09 0909 ' => $debug,....\n-00008480: 2020 2020 2020 2027 2d70 724c 6f67 2720 '-prLog' \n-00008490: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... \n-000084a0: 2020 2020 2027 2d69 6e74 6572 6163 7469 '-interacti\n-000084b0: 7665 2720 3d3e 2024 696e 7465 7261 6374 ve' => $interact\n-000084c0: 6976 6529 3b0a 0a7d 0a0a 2470 724c 6f67 ive);..}..$prLog\n-000084d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-000084e0: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. '\n-000084f0: 2d73 7472 2720 3d3e 205b 2265 7665 7279 -str' => [\"every\n-00008500: 7468 696e 6720 6973 2075 7064 6174 6564 thing is updated\n-00008510: 2c20 6e6f 7468 696e 6720 746f 2064 6f22 , nothing to do\"\n-00008520: 5d29 0a20 2020 2075 6e6c 6573 7320 2475 ]). unless $u\n-00008530: 7064 6174 6544 6972 466c 6167 3b0a 0a0a pdateDirFlag;...\n-00008540: 6966 2028 2d65 2022 2462 6163 6b75 7044 if (-e \"$backupD\n-00008550: 6972 2f24 6261 7365 5472 6565 436f 6e66 ir/$baseTreeConf\n-00008560: 2220 616e 6420 2464 656c 7461 4361 6368 \" and $deltaCach\n-00008570: 6529 0a7b 0a20 2020 2023 0a20 2020 2023 e).{. #. #\n-00008580: 206d 6f76 6520 6261 636b 7570 7320 7768 move backups wh\n-00008590: 6963 6820 6172 6520 636f 7069 6564 2028 ich are copied (\n-000085a0: 616e 6420 6c69 6e6b 6564 290a 2020 2020 and linked). \n-000085b0: 2320 746f 2061 6c6c 2062 6163 6b75 7043 # to all backupC\n-000085c0: 6f70 7920 6c6f 6361 7469 6f6e 730a 2020 opy locations. \n-000085d0: 2020 230a 2370 7269 6e74 2022 6b65 7973 #.#print \"keys\n-000085e0: 2069 6e20 7365 7269 6573 546f 436f 7079 in seriesToCopy\n-000085f0: 203d 2022 2c20 6a6f 696e 2822 2022 2c20 = \", join(\" \", \n-00008600: 6b65 7973 2025 7365 7269 6573 546f 436f keys %seriesToCo\n-00008610: 7079 292c 2022 5c6e 223b 0a20 2020 206d py), \"\\n\";. m\n-00008620: 7920 2473 3b0a 2020 2020 666f 7265 6163 y $s;. foreac\n-00008630: 6820 2473 2028 736f 7274 206b 6579 7320 h $s (sort keys \n-00008640: 2573 6572 6965 7354 6f43 6f70 7929 0a20 %seriesToCopy). \n-00008650: 2020 207b 0a23 7072 696e 7420 222b 2b2b {.#print \"+++\n-00008660: 2b2b 2b73 6572 6965 7320 2473 2b5c 6e22 +++series $s+\\n\"\n-00008670: 3b0a 096e 6578 740a 0920 2020 2075 6e6c ;..next.. unl\n-00008680: 6573 7320 2d64 2022 2464 656c 7461 4361 ess -d \"$deltaCa\n-00008690: 6368 652f 2473 223b 0a0a 0923 2072 6561 che/$s\";...# rea\n-000086a0: 6420 636f 7079 2070 726f 746f 636f 6c20 d copy protocol \n-000086b0: 6669 6c65 7320 696e 2062 6163 6b75 7043 files in backupC\n-000086c0: 6f70 7920 7461 7267 6574 0a09 6d79 2028 opy target..my (\n-000086d0: 4063 6f70 6965 6429 203d 0a09 2020 2020 @copied) =.. \n-000086e0: 263a 3a72 6561 6444 6972 5374 6275 2822 &::readDirStbu(\"\n-000086f0: 2464 656c 7461 4361 6368 652f 2473 222c $deltaCache/$s\",\n-00008700: 205f 5f46 494c 455f 5f2c 205f 5f4c 494e __FILE__, __LIN\n-00008710: 455f 5f2c 0a09 0909 2020 2027 5c41 5c64 E__,.... '\\A\\d\n-00008720: 7b34 7d5c 2e5c 647b 327d 5c2e 5c64 7b32 {4}\\.\\d{2}\\.\\d{2\n-00008730: 7d5f 5c64 7b32 7d5c 2e5c 647b 327d 5c2e }_\\d{2}\\.\\d{2}\\.\n-00008740: 5c64 7b32 7d5c 2e6c 696e 6b65 645c 5a27 \\d{2}\\.linked\\Z'\n-00008750: 2c0a 0909 0909 2020 2020 2020 2470 724c ,..... $prL\n-00008760: 6f67 293b 0a23 7072 696e 7420 222d 312d og);.#print \"-1-\n-00008770: 5c6e 223b 0a09 6d79 2028 406d 7573 7442 \\n\";..my (@mustB\n-00008780: 6543 6f70 6965 6429 203d 2073 6f72 7420 eCopied) = sort \n-00008790: 6b65 7973 2025 7b24 7365 7269 6573 546f keys %{$seriesTo\n-000087a0: 436f 7079 7b24 737d 7d3b 0a0a 0975 6e6c Copy{$s}};...unl\n-000087b0: 6573 7320 2840 636f 7069 6564 290a 097b ess (@copied)..{\n-000087c0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr\n-000087d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-000087e0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' \n-000087f0: 3d3e 0a09 0909 2020 5b22 5c74 6465 6c74 =>.... [\"\\tdelt\n-00008800: 6143 6163 6865 2070 6f6f 6c20 6f66 2073 aCache pool of s\n-00008810: 6572 6965 7320 3c24 733e 2069 7320 656d eries <$s> is em\n-00008820: 7074 793a 222c 0a09 0909 2020 2022 5c74 pty:\",.... \"\\t\n-00008830: 5c74 286d 7573 7420 6265 2063 6f70 6965 \\t(must be copie\n-00008840: 6420 746f 3a20 3c22 202e 0a09 0909 2020 d to: <\" ..... \n-00008850: 206a 6f69 6e28 273e 203c 272c 2040 6d75 join('> <', @mu\n-00008860: 7374 4265 436f 7069 6564 2920 2e20 273e stBeCopied) . '>\n-00008870: 2927 5d29 0a09 0969 6620 2476 6572 626f )'])...if $verbo\n-00008880: 7365 3b0a 0920 2020 206e 6578 743b 0a09 se;.. next;..\n-00008890: 7d0a 0a09 6d79 2024 633b 0a09 666f 7265 }...my $c;..fore\n-000088a0: 6163 6820 2463 2028 4063 6f70 6965 6429 ach $c (@copied)\n-000088b0: 2020 2023 206c 6f6f 7020 6f76 6572 2061 # loop over a\n-000088c0: 6c6c 202e 6c69 6e6b 6564 2066 696c 6573 ll .linked files\n-000088d0: 2069 6e20 7468 6973 2073 6572 6965 730a in this series.\n-000088e0: 097b 0a23 7072 696e 7420 222d 322d 2463 .{.#print \"-2-$c\n-000088f0: 2d5c 6e22 3b0a 0920 2020 206d 7920 2824 -\\n\";.. my ($\n-00008900: 6344 6972 2920 3d20 2463 203d 7e20 2f5e cDir) = $c =~ /^\n-00008910: 282e 2b29 5c2e 6c69 6e6b 6564 242f 3b0a (.+)\\.linked$/;.\n-00008920: 0920 2020 206c 6f63 616c 202a 4649 4c45 . local *FILE\n-00008930: 3b0a 0920 2020 206f 7065 6e28 4649 4c45 ;.. open(FILE\n-00008940: 2c20 273c 272c 2022 2464 656c 7461 4361 , '<', \"$deltaCa\n-00008950: 6368 652f 2473 2f24 6322 2920 6f72 0a09 che/$s/$c\") or..\n-00008960: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00008970: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-00008980: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00008990: 3e0a 0909 0920 2020 2020 205b 2263 616e >.... [\"can\n-000089a0: 6e6f 7420 6f70 656e 203c 2464 656c 7461 not open <$delta\n-000089b0: 4361 6368 652f 2473 2f24 633e 225d 2c0a Cache/$s/$c>\"],.\n-000089c0: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit'\n-000089d0: 203d 3e20 3129 3b0a 2370 7269 6e74 2022 => 1);.#print \"\n-000089e0: 5c74 3c22 2c20 6a6f 696e 2822 3e20 3c22 \\t<\", join(\"> <\"\n-000089f0: 2c20 406d 7573 7442 6543 6f70 6965 6429 , @mustBeCopied)\n-00008a00: 2c20 223e 5c6e 223b 0a23 7072 696e 7420 , \">\\n\";.#print \n-00008a10: 225c 7424 635c 6e22 3b0a 0920 2020 206d \"\\t$c\\n\";.. m\n-00008a20: 7920 2824 6c2c 2040 7265 616c 6c79 436f y ($l, @reallyCo\n-00008a30: 7069 6564 2c20 2572 6561 6c6c 7943 6f70 pied, %reallyCop\n-00008a40: 6965 6429 3b0a 0920 2020 2066 6f72 6561 ied);.. forea\n-00008a50: 6368 2024 6c20 283c 4649 4c45 3e29 0a09 ch $l ()..\n-00008a60: 2020 2020 7b0a 0909 6368 6f6d 7020 246c {...chomp $l\n-00008a70: 3b0a 0909 7075 7368 2040 7265 616c 6c79 ;...push @really\n-00008a80: 436f 7069 6564 2c20 246c 3b0a 0909 2472 Copied, $l;...$r\n-00008a90: 6561 6c6c 7943 6f70 6965 647b 246c 7d20 eallyCopied{$l} \n-00008aa0: 3d20 313b 0a09 2020 2020 7d0a 0920 2020 = 1;.. }.. \n-00008ab0: 2063 6c6f 7365 2846 494c 4529 3b0a 2370 close(FILE);.#p\n-00008ac0: 7269 6e74 2022 5c74 5c74 4072 6561 6c6c rint \"\\t\\t@reall\n-00008ad0: 7943 6f70 6965 645c 6e22 3b0a 0a09 2020 yCopied\\n\";... \n-00008ae0: 2020 6d79 2024 6d76 4177 6179 203d 2031 my $mvAway = 1\n-00008af0: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $\n-00008b00: 6c20 2840 6d75 7374 4265 436f 7069 6564 l (@mustBeCopied\n-00008b10: 290a 0920 2020 207b 0a09 0975 6e6c 6573 ).. {...unles\n-00008b20: 7320 2865 7869 7374 7320 2472 6561 6c6c s (exists $reall\n-00008b30: 7943 6f70 6965 647b 246c 7d29 0a09 097b yCopied{$l})...{\n-00008b40: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p\n-00008b50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00008b60: 2749 272c 0a09 0909 0920 2027 2d73 7472 'I',..... '-str\n-00008b70: 2720 3d3e 0a09 0909 0920 205b 2263 6f70 ' =>..... [\"cop\n-00008b80: 7969 6e67 206f 6620 7365 7269 6573 203c ying of series <\n-00008b90: 2473 3e20 746f 203c 2463 4469 723e 206e $s> to <$cDir> n\n-00008ba0: 6f74 2066 696e 6973 6865 643a 222c 0a09 ot finished:\",..\n-00008bb0: 0909 0920 2020 225c 746d 7573 7420 6265 ... \"\\tmust be\n-00008bc0: 2063 6f70 6965 6420 746f 3a20 3c22 202e copied to: <\" .\n-00008bd0: 0a09 0909 0920 2020 6a6f 696e 2827 3e20 ..... join('> \n-00008be0: 3c27 2c20 406d 7573 7442 6543 6f70 6965 <', @mustBeCopie\n-00008bf0: 6429 202e 2027 3e27 2c0a 0909 0909 2020 d) . '>',..... \n-00008c00: 2022 5c74 616c 7265 6164 7920 636f 7069 \"\\talready copi\n-00008c10: 6564 3a20 3c22 202e 0a09 0909 0920 2020 ed: <\" ...... \n-00008c20: 6a6f 696e 2827 3e20 3c27 2c20 4072 6561 join('> <', @rea\n-00008c30: 6c6c 7943 6f70 6965 6429 202e 2027 3e27 llyCopied) . '>'\n-00008c40: 5d29 0a09 0909 6966 2024 7665 7262 6f73 ])....if $verbos\n-00008c50: 653b 0a09 0920 2020 2024 6d76 4177 6179 e;... $mvAway\n-00008c60: 203d 2030 3b0a 0909 2020 2020 6c61 7374 = 0;... last\n-00008c70: 3b0a 0909 7d0a 0920 2020 207d 0a09 2020 ;...}.. }.. \n-00008c80: 2020 6966 2028 246d 7641 7761 7920 616e if ($mvAway an\n-00008c90: 640a 0909 2d64 2022 2464 656c 7461 4361 d...-d \"$deltaCa\n-00008ca0: 6368 652f 2473 2f24 6344 6972 2229 2020 che/$s/$cDir\") \n-00008cb0: 2320 6d76 2062 6163 6b75 700a 0920 2020 # mv backup.. \n-00008cc0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri\n-00008cd0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I\n-00008ce0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st\n-00008cf0: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [\n-00008d00: 2262 6163 6b75 7020 3c24 6465 6c74 6143 \"backup <$deltaC\n-00008d10: 6163 6865 2f24 732f 2463 4469 723e 2063 ache/$s/$cDir> c\n-00008d20: 6f70 6965 6420 746f 203c 2220 2e0a 0909 opied to <\" ....\n-00008d30: 0920 2020 2020 2020 6a6f 696e 2827 3e20 . join('> \n-00008d40: 3c27 2c20 4072 6561 6c6c 7943 6f70 6965 <', @reallyCopie\n-00008d50: 6429 202e 2027 3e27 2c0a 0909 0920 2020 d) . '>',.... \n-00008d60: 2020 2020 225c 746d 6f76 696e 6720 6261 \"\\tmoving ba\n-00008d70: 636b 7570 2074 6f20 3c24 6465 6c74 6143 ckup to <$deltaC\n-00008d80: 6163 6865 2f24 7042 2f24 733e 225d 293b ache/$pB/$s>\"]);\n-00008d90: 0a09 096d 6b64 6972 2022 2464 656c 7461 ...mkdir \"$delta\n-00008da0: 4361 6368 652f 2470 4222 0a09 0920 2020 Cache/$pB\"... \n-00008db0: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d \"$del\n-00008dc0: 7461 4361 6368 652f 2470 4222 3b0a 0909 taCache/$pB\";...\n-00008dd0: 6d6b 6469 7220 2224 6465 6c74 6143 6163 mkdir \"$deltaCac\n-00008de0: 6865 2f24 7042 2f24 7322 0a09 0920 2020 he/$pB/$s\"... \n-00008df0: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d \"$del\n-00008e00: 7461 4361 6368 652f 2470 422f 2473 223b taCache/$pB/$s\";\n-00008e10: 0a09 0926 3a3a 6d76 436f 6d6d 2822 2464 ...&::mvComm(\"$d\n-00008e20: 656c 7461 4361 6368 652f 2473 2f24 6344 eltaCache/$s/$cD\n-00008e30: 6972 2220 3d3e 2022 2464 656c 7461 4361 ir\" => \"$deltaCa\n-00008e40: 6368 652f 2470 422f 2473 222c 0a09 0909 che/$pB/$s\",....\n-00008e50: 2020 272f 746d 702f 6d76 436f 6d6d 2d27 '/tmp/mvComm-'\n-00008e60: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. \n-00008e70: 7d0a 097d 0a20 2020 207d 0a0a 2020 2020 }..}. }.. \n-00008e80: 230a 2020 2020 2320 6368 6563 6b20 6966 #. # check if\n-00008e90: 2062 6163 6b75 7073 2069 6e20 2464 656c backups in $del\n-00008ea0: 7461 4361 6368 652f 7072 6f63 6573 7365 taCache/processe\n-00008eb0: 6442 6163 6b75 7073 2068 6176 6520 746f dBackups have to\n-00008ec0: 2062 6520 6465 6c65 7465 640a 2020 2020 be deleted. \n-00008ed0: 230a 2020 2020 6d79 2024 6465 6c44 6174 #. my $delDat\n-00008ee0: 6520 3d20 6461 7465 546f 6f6c 732d 3e6e e = dateTools->n\n-00008ef0: 6577 2829 3b0a 2020 2020 2464 656c 4461 ew();. $delDa\n-00008f00: 7465 2d3e 7375 6228 272d 7374 7227 203d te->sub('-str' =\n-00008f10: 3e20 2461 7263 6869 7665 4475 7261 7469 > $archiveDurati\n-00008f20: 6f6e 4465 6c74 6143 6163 6865 293b 0a20 onDeltaCache);. \n-00008f30: 2020 206d 7920 2464 656c 4461 7465 5374 my $delDateSt\n-00008f40: 7220 3d20 2464 656c 4461 7465 2d3e 6765 r = $delDate->ge\n-00008f50: 7444 6174 6554 696d 6528 293b 0a0a 2020 tDateTime();.. \n-00008f60: 2020 6c6f 6361 6c20 2a44 4952 3b0a 2020 local *DIR;. \n-00008f70: 2020 6d79 2024 6373 7062 203d 2022 2464 my $cspb = \"$d\n-00008f80: 656c 7461 4361 6368 652f 2470 4222 3b0a eltaCache/$pB\";.\n-00008f90: 2020 2020 6d6b 6469 7220 2463 7370 620a mkdir $cspb.\n-00008fa0: 0975 6e6c 6573 7320 2d64 2024 6373 7062 .unless -d $cspb\n-00008fb0: 3b0a 2020 2020 6f70 656e 6469 7228 4449 ;. opendir(DI\n-00008fc0: 522c 2024 6373 7062 2920 6f72 0a09 2020 R, $cspb) or.. \n-00008fd0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-00008fe0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-00008ff0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-00009000: 2263 616e 6e6f 7420 6f70 656e 6469 7220 \"cannot opendir \n-00009010: 3c24 6373 7062 3e2c 2065 7869 7469 6e67 <$cspb>, exiting\n-00009020: 225d 2c0a 0909 0920 2027 2d61 6464 2720 \"],.... '-add' \n-00009030: 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 5f5f => [__FILE__, __\n-00009040: 4c49 4e45 5f5f 5d2c 0a09 0909 2020 272d LINE__],.... '-\n-00009050: 6578 6974 2720 3d3e 2031 293b 0a20 2020 exit' => 1);. \n-00009060: 206d 7920 2840 7365 7269 6573 293b 0a20 my (@series);. \n-00009070: 2020 2077 6869 6c65 2028 2473 203d 2072 while ($s = r\n-00009080: 6561 6464 6972 2044 4952 290a 2020 2020 eaddir DIR). \n-00009090: 7b0a 096e 6578 7420 6966 2028 2473 2065 {..next if ($s e\n-000090a0: 7120 272e 2720 6f72 2024 7320 6571 2027 q '.' or $s eq '\n-000090b0: 2e2e 2729 3b0a 096d 7920 2465 203d 2022 ..');..my $e = \"\n-000090c0: 2463 7370 622f 2473 223b 0a09 6e65 7874 $cspb/$s\";..next\n-000090d0: 2069 6620 282d 6c20 2465 2061 6e64 206e if (-l $e and n\n-000090e0: 6f74 202d 6420 2465 293b 2020 2023 206f ot -d $e); # o\n-000090f0: 6e6c 7920 6469 7265 6374 6f72 6965 730a nly directories.\n-00009100: 096e 6578 7420 756e 6c65 7373 202d 6420 .next unless -d \n-00009110: 2465 3b0a 0970 7573 6820 4073 6572 6965 $e;..push @serie\n-00009120: 732c 2024 733b 0a20 2020 207d 0a20 2020 s, $s;. }. \n-00009130: 2063 6c6f 7365 6469 7228 4449 5229 3b0a closedir(DIR);.\n-00009140: 0a20 2020 206d 7920 2464 656c 5374 7269 . my $delStri\n-00009150: 6e67 3b0a 2020 2020 6966 2028 2464 6f6e ng;. if ($don\n-00009160: 7444 656c 496e 4465 6c74 6143 6163 6865 tDelInDeltaCache\n-00009170: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog-\n-00009180: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00009190: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n-000091a0: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-000091b0: 205b 2264 6f20 6e6f 7420 6465 6c65 7465 [\"do not delete\n-000091c0: 2061 6e79 7468 696e 6720 696e 2064 656c anything in del\n-000091d0: 7461 4361 6368 6520 2220 2e0a 0909 2020 taCache \" .... \n-000091e0: 2020 2020 2022 3c24 6465 6c74 6143 6163 \"<$deltaCac\n-000091f0: 6865 3e20 7072 6f63 6573 7365 6442 6163 he> processedBac\n-00009200: 6b75 7073 2062 6563 6175 7365 2022 202e kups because \" .\n-00009210: 0a09 0920 2020 2020 2020 222d 2d64 6f6e ... \"--don\n-00009220: 7444 656c 496e 4465 6c74 6143 6163 6865 tDelInDeltaCache\n-00009230: 2069 7320 7365 7422 2c0a 0909 2020 2020 is set\",... \n-00009240: 2020 2022 5c74 6167 6520 666f 7220 6465 \"\\tage for de\n-00009250: 6c65 7469 6f6e 2069 7320 3e20 2461 7263 letion is > $arc\n-00009260: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt\n-00009270: 6143 6163 6865 2220 2e0a 0909 2020 2020 aCache\" .... \n-00009280: 2020 2022 2028 6465 6c65 7465 2062 6163 \" (delete bac\n-00009290: 6b75 7073 206f 6c64 6572 2074 6861 6e20 kups older than \n-000092a0: 2464 656c 4461 7465 5374 7229 225d 293b $delDateStr)\"]);\n-000092b0: 0a09 2464 656c 5374 7269 6e67 203d 2027 ..$delString = '\n-000092c0: 776f 756c 6420 6265 2064 656c 6574 6564 would be deleted\n-000092d0: 273b 0a20 2020 207d 0a20 2020 2065 6c73 ';. }. els\n-000092e0: 650a 2020 2020 7b0a 0924 7072 4c6f 672d e. {..$prLog-\n-000092f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00009300: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n-00009310: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... \n-00009320: 205b 2264 656c 6574 696e 6720 696e 2064 [\"deleting in d\n-00009330: 656c 7461 4361 6368 6520 2220 2e0a 0909 eltaCache \" ....\n-00009340: 2020 2020 2020 2022 3c24 6465 6c74 6143 \"<$deltaC\n-00009350: 6163 6865 3e20 7072 6f63 6573 7365 6442 ache> processedB\n-00009360: 6163 6b75 7073 222c 0a09 0920 2020 2020 ackups\",... \n-00009370: 2020 225c 7461 6765 2066 6f72 2064 656c \"\\tage for del\n-00009380: 6574 696f 6e20 6973 203e 2024 6172 6368 etion is > $arch\n-00009390: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta\n-000093a0: 4361 6368 6522 202e 0a09 0920 2020 2020 Cache\" .... \n-000093b0: 2020 2220 2864 656c 6574 6520 6261 636b \" (delete back\n-000093c0: 7570 7320 6f6c 6465 7220 7468 616e 2024 ups older than $\n-000093d0: 6465 6c44 6174 6553 7472 2922 5d29 3b0a delDateStr)\"]);.\n-000093e0: 0924 6465 6c53 7472 696e 6720 3d20 2764 .$delString = 'd\n-000093f0: 656c 6574 696e 6727 3b0a 2020 2020 7d0a eleting';. }.\n-00009400: 0a20 2020 206d 7920 2840 6465 6c44 6972 . my (@delDir\n-00009410: 7329 203d 2028 293b 0a20 2020 2066 6f72 s) = ();. for\n-00009420: 6561 6368 2024 7320 2840 7365 7269 6573 each $s (@series\n-00009430: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog-\n-00009440: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00009450: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n-00009460: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => [\"check\n-00009470: 696e 6720 7365 7269 6573 203c 2473 3e22 ing series <$s>\"\n-00009480: 5d29 3b0a 0a09 6d79 2024 6469 7273 203d ]);...my $dirs =\n-00009490: 0a09 2020 2020 616c 6c53 746f 7265 4261 .. allStoreBa\n-000094a0: 636b 7570 5365 7269 6573 2d3e 6e65 7728 ckupSeries->new(\n-000094b0: 272d 726f 6f74 4469 7227 203d 3e20 2224 '-rootDir' => \"$\n-000094c0: 6373 7062 2f24 7322 2c0a 0909 0909 2020 cspb/$s\",..... \n-000094d0: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi\n-000094e0: 6c65 2720 3d3e 2024 6368 6563 6b53 756d le' => $checkSum\n-000094f0: 4669 6c65 2c0a 0909 0909 2020 2020 2020 File,..... \n-00009500: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-00009510: 6f67 293b 0a23 0909 0909 2020 2020 2020 og);.#.... \n-00009520: 272d 6162 7350 6174 6827 203d 3e20 3029 '-absPath' => 0)\n-00009530: 3b0a 096d 7920 2840 6469 7273 2920 3d20 ;..my (@dirs) = \n-00009540: 2464 6972 732d 3e67 6574 416c 6c46 696e $dirs->getAllFin\n-00009550: 6973 6865 6444 6972 7328 293b 2020 2023 ishedDirs(); #\n-00009560: 206f 6c64 6573 7420 6669 7273 740a 096d oldest first..m\n-00009570: 7920 2464 3b0a 0966 6f72 6561 6368 2024 y $d;..foreach $\n-00009580: 6420 2840 6469 7273 290a 097b 0a09 2020 d (@dirs)..{.. \n-00009590: 2020 6d79 2028 2479 6561 722c 2024 6d6f my ($year, $mo\n-000095a0: 6e74 682c 2024 6461 792c 2024 686f 7572 nth, $day, $hour\n-000095b0: 2c20 246d 696e 2c20 2473 6563 2920 3d20 , $min, $sec) = \n-000095c0: 2464 203d 7e0a 0909 2f5c 4128 5c64 7b34 $d =~.../\\A(\\d{4\n-000095d0: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\\.(\\d{2})\\.(\\d\n-000095e0: 7b32 7d29 5f28 5c64 7b32 7d29 5c2e 285c {2})_(\\d{2})\\.(\\\n-000095f0: 647b 327d 295c 2e28 5c64 7b32 7d29 5c5a d{2})\\.(\\d{2})\\Z\n-00009600: 2f6f 3b0a 0920 2020 2069 6620 2824 6465 /o;.. if ($de\n-00009610: 6c44 6174 652d 3e63 6f6d 7061 7265 2827 lDate->compare('\n-00009620: 2d79 6561 7227 203d 3e20 2479 6561 722c -year' => $year,\n-00009630: 0a09 0909 0920 2027 2d6d 6f6e 7468 2720 ..... '-month' \n-00009640: 3d3e 2024 6d6f 6e74 682c 0a09 0909 0920 => $month,..... \n-00009650: 2027 2d64 6179 2720 3d3e 2024 6461 792c '-day' => $day,\n-00009660: 0a09 0909 0920 2027 2d68 6f75 7227 203d ..... '-hour' =\n-00009670: 3e20 2468 6f75 722c 0a09 0909 0920 2027 > $hour,..... '\n-00009680: 2d6d 696e 2720 3d3e 2024 6d69 6e2c 0a09 -min' => $min,..\n-00009690: 0909 0920 2027 2d73 6563 2720 3d3e 2024 ... '-sec' => $\n-000096a0: 7365 6329 203c 2030 290a 0920 2020 207b sec) < 0).. {\n-000096b0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-000096c0: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-000096d0: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-000096e0: 203d 3e20 5b22 5c74 6465 6c74 6143 6163 => [\"\\tdeltaCac\n-000096f0: 6865 3a20 2473 202d 3e20 2464 202d 2024 he: $s -> $d - $\n-00009700: 6465 6c53 7472 696e 6722 5d29 3b0a 0909 delString\"]);...\n-00009710: 7075 7368 2040 6465 6c44 6972 732c 2022 push @delDirs, \"\n-00009720: 2473 2f24 6422 3b0a 0920 2020 207d 0a09 $s/$d\";.. }..\n-00009730: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {.\n-00009740: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-00009750: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-00009760: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-00009770: 3d3e 205b 225c 7464 656c 7461 4361 6368 => [\"\\tdeltaCach\n-00009780: 653a 2024 7320 2d3e 2024 6420 2d20 6e6f e: $s -> $d - no\n-00009790: 7420 6f6c 6420 656e 6f75 6768 2074 6f20 t old enough to \n-000097a0: 6465 6c65 7465 225d 293b 0a09 2020 2020 delete\"]);.. \n-000097b0: 7d0a 097d 0a20 2020 207d 0a20 2020 2075 }..}. }. u\n-000097c0: 6e6c 6573 7320 2824 646f 6e74 4465 6c49 nless ($dontDelI\n-000097d0: 6e44 656c 7461 4361 6368 6529 0a20 2020 nDeltaCache). \n-000097e0: 207b 0a09 6d79 2028 2473 756d 4279 7465 {..my ($sumByte\n-000097f0: 732c 2024 7375 6d46 696c 6573 2920 3d20 s, $sumFiles) = \n-00009800: 2830 2c20 3029 3b0a 0966 6f72 6561 6368 (0, 0);..foreach\n-00009810: 206d 7920 2464 2028 4064 656c 4469 7273 my $d (@delDirs\n-00009820: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog\n-00009830: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00009840: 3d3e 2027 4927 2c0a 0909 0920 2027 2d73 => 'I',.... '-s\n-00009850: 7472 2720 3d3e 205b 2264 656c 6574 696e tr' => [\"deletin\n-00009860: 6720 2464 202e 2e2e 225d 293b 0a09 2020 g $d ...\"]);.. \n-00009870: 2020 756e 6c69 6e6b 2022 2464 656c 7461 unlink \"$delta\n-00009880: 4361 6368 652f 2464 2e63 6f70 6965 6422 Cache/$d.copied\"\n-00009890: 2c20 2224 6465 6c74 6143 6163 6865 2f24 , \"$deltaCache/$\n-000098a0: 642e 6c69 6e6b 6564 223b 0a09 2020 2020 d.linked\";.. \n-000098b0: 6d79 2024 7264 6420 3d20 7265 6375 7273 my $rdd = recurs\n-000098c0: 6976 6544 656c 4469 722d 3e6e 6577 2827 iveDelDir->new('\n-000098d0: 2d64 6972 2720 3d3e 2022 2463 7370 622f -dir' => \"$cspb/\n-000098e0: 2464 222c 0a09 0909 0909 2020 2027 2d70 $d\",...... '-p\n-000098f0: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-00009900: 3b0a 0920 2020 206d 7920 2824 6469 7273 ;.. my ($dirs\n-00009910: 2c20 2466 696c 6573 2c20 2462 7974 6573 , $files, $bytes\n-00009920: 2c20 246c 696e 6b73 2c20 2473 7461 7942 , $links, $stayB\n-00009930: 7974 6573 2920 3d0a 0909 2472 6464 2d3e ytes) =...$rdd->\n-00009940: 6765 7453 7461 7469 7374 6963 7328 293b getStatistics();\n-00009950: 0a09 2020 2020 2473 756d 4279 7465 7320 .. $sumBytes \n-00009960: 2b3d 2024 6279 7465 733b 0a09 2020 2020 += $bytes;.. \n-00009970: 2473 756d 4669 6c65 7320 2b3d 2024 6669 $sumFiles += $fi\n-00009980: 6c65 733b 0a09 2020 2020 6d79 2028 2462 les;.. my ($b\n-00009990: 2920 3d20 263a 3a68 756d 616e 5265 6164 ) = &::humanRead\n-000099a0: 6162 6c65 2824 6279 7465 7329 3b0a 0920 able($bytes);.. \n-000099b0: 2020 206d 7920 2824 7362 2920 3d20 263a my ($sb) = &:\n-000099c0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($\n-000099d0: 7374 6179 4279 7465 7329 3b0a 0920 2020 stayBytes);.. \n-000099e0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-000099f0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00009a00: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00009a10: 3e20 5b22 5c74 6672 6565 6420 2462 2028 > [\"\\tfreed $b (\n-00009a20: 2462 7974 6573 292c 2024 6669 6c65 7320 $bytes), $files \n-00009a30: 6669 6c65 7322 5d29 3b0a 097d 0a09 6d79 files\"]);..}..my\n-00009a40: 2028 2462 2920 3d20 263a 3a68 756d 616e ($b) = &::human\n-00009a50: 5265 6164 6162 6c65 2824 7375 6d42 7974 Readable($sumByt\n-00009a60: 6573 293b 0a09 2470 724c 6f67 2d3e 7072 es);..$prLog->pr\n-00009a70: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00009a80: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st\n-00009a90: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [\"\n-00009aa0: 7375 6d3a 2066 7265 6564 2024 6220 2824 sum: freed $b ($\n-00009ab0: 7375 6d42 7974 6573 292c 2024 7375 6d46 sumBytes), $sumF\n-00009ac0: 696c 6573 2066 696c 6573 225d 290a 0920 iles files\"]).. \n-00009ad0: 2020 2069 6620 2473 756d 4279 7465 733b if $sumBytes;\n-00009ae0: 0a0a 2020 2020 7d0a 7d0a 0a23 2053 7461 .. }.}..# Sta\n-00009af0: 7469 7374 696b 20fc 6265 7220 4461 7565 tistik .ber Daue\n-00009b00: 7220 756e 6420 4350 552d 5665 7262 7261 r und CPU-Verbra\n-00009b10: 7563 680a 0a6d 7920 2840 6c29 3b0a 6d79 uch..my (@l);.my\n-00009b20: 2028 2475 7365 722c 2473 7973 7465 6d2c ($user,$system,\n-00009b30: 2463 7573 6572 2c24 6373 7973 7465 6d29 $cuser,$csystem)\n-00009b40: 203d 2074 696d 6573 3b0a 6d79 2028 2474 = times;.my ($t\n-00009b50: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = \"-------\n-00009b60: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+----\n-00009b70: 2d2d 2d2d 2d2d 223b 0a70 7573 6820 406c ------\";.push @l\n-00009b80: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf(\"%-7s|\n-00009b90: 2531 3073 7c25 3130 7322 2c20 2220 5b73 %10s|%10s\", \" [s\n-00009ba0: 6563 5d22 2c20 2275 7365 7222 2c20 2273 ec]\", \"user\", \"s\n-00009bb0: 7973 7465 6d22 293b 0a70 7573 6820 406c ystem\");.push @l\n-00009bc0: 2c20 2224 7472 656e 6e22 3b0a 7075 7368 , \"$trenn\";.push\n-00009bd0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf(\"%-\n-00009be0: 3773 7c25 3130 2e32 667c 2531 302e 3266 7s|%10.2f|%10.2f\n-00009bf0: 222c 2022 7072 6f63 6573 7322 2c20 2475 \", \"process\", $u\n-00009c00: 7365 722c 2024 7379 7374 656d 293b 0a70 ser, $system);.p\n-00009c10: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf(\n-00009c20: 2225 2d37 737c 2531 302e 3266 7c25 3130 \"%-7s|%10.2f|%10\n-00009c30: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f\", \"childs\", \n-00009c40: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem\n-00009c50: 293b 0a70 7573 6820 406c 2c20 2224 7472 );.push @l, \"$tr\n-00009c60: 656e 6e22 3b0a 6d79 2028 2475 2c20 2473 enn\";.my ($u, $s\n-00009c70: 2920 3d20 2824 6375 7365 7220 2b20 2475 ) = ($cuser + $u\n-00009c80: 7365 722c 2024 6373 7973 7465 6d20 2b20 ser, $csystem + \n-00009c90: 2473 7973 7465 6d29 3b0a 7075 7368 2040 $system);.push @\n-00009ca0: 6c2c 2073 7072 696e 7466 2822 252d 3773 l, sprintf(\"%-7s\n-00009cb0: 7c25 3130 2e32 667c 2531 302e 3266 203d |%10.2f|%10.2f =\n-00009cc0: 3e20 252e 3266 222c 2022 7375 6d22 2c20 > %.2f\", \"sum\", \n-00009cd0: 2475 2c20 2473 2c20 2475 202b 2024 7329 $u, $s, $u + $s)\n-00009ce0: 3b0a 0a6d 7920 2840 7374 6172 7444 6174 ;..my (@startDat\n-00009cf0: 6529 203d 2028 293b 0a69 6620 2824 7374 e) = ();.if ($st\n-00009d00: 6172 7444 6174 6529 0a7b 0a20 2020 2070 artDate).{. p\n-00009d10: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, \n-00009d20: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec\n-00009d30: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration \n-00009d40: 3d20 2720 2e0a 0924 7374 6172 7444 6174 = ' ...$startDat\n-00009d50: 652d 3e64 656c 7461 496e 5374 7228 272d e->deltaInStr('-\n-00009d60: 7365 636f 6e64 4461 7465 2720 3d3e 2024 secondDate' => $\n-00009d70: 7374 6172 7444 6174 6529 3b0a 7d0a 0a6d startDate);.}..m\n-00009d80: 7920 2464 456e 6420 3d20 6461 7465 546f y $dEnd = dateTo\n-00009d90: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $\n-00009da0: 6475 7261 7469 6f6e 203d 2024 7374 6172 duration = $star\n-00009db0: 7444 6174 652d 3e64 656c 7461 496e 5365 tDate->deltaInSe\n-00009dc0: 6373 2827 2d73 6563 6f6e 6444 6174 6527 cs('-secondDate'\n-00009dd0: 203d 3e20 2464 456e 6429 3b0a 2464 7572 => $dEnd);.$dur\n-00009de0: 6174 696f 6e20 3d20 3120 6966 2028 2464 ation = 1 if ($d\n-00009df0: 7572 6174 696f 6e20 3d3d 2030 293b 2020 uration == 0); \n-00009e00: 2023 204d 696e 696d 616c 6572 2057 6572 # Minimaler Wer\n-00009e10: 740a 0a24 7072 4c6f 672d 3e70 7269 6e74 t..$prLog->print\n-00009e20: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S',\n-00009e30: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00009e40: 3e0a 0920 2020 2020 205b 2720 2020 2020 >.. [' \n-00009e50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00009e60: 2064 7572 6174 696f 6e20 3d20 2720 2e0a duration = ' ..\n-00009e70: 0920 2020 2020 2020 6461 7465 546f 6f6c . dateTool\n-00009e80: 733a 3a76 616c 546f 5374 7228 272d 7365 s::valToStr('-se\n-00009e90: 6327 203d 3e20 2464 7572 6174 696f 6e29 c' => $duration)\n-00009ea0: 2c0a 0920 2020 2020 2020 406c 0a09 2020 ,.. @l.. \n-00009eb0: 2020 2020 205d 293b 0a0a 756e 6c69 6e6b ]);..unlink\n-00009ec0: 2024 6c6f 636b 4669 6c65 3b0a 0a75 6e6c $lockFile;..unl\n-00009ed0: 6573 7320 2824 736b 6970 5379 6e63 290a ess ($skipSync).\n-00009ee0: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr\n-00009ef0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00009f00: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' =\n-00009f10: 3e20 5b22 7379 6e63 696e 6720 2e2e 2e22 > [\"syncing ...\"\n-00009f20: 5d29 3b0a 2020 2020 7379 7374 656d 2022 ]);. system \"\n-00009f30: 2f62 696e 2f73 796e 6322 3b0a 7d0a 0a0a /bin/sync\";.}...\n-00009f40: 6d79 2024 656e 6320 3d20 2470 724c 6f67 my $enc = $prLog\n-00009f50: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('-\n-00009f60: 6b69 6e64 2720 3d3e 2027 5727 293b 0a6d kind' => 'W');.m\n-00009f70: 7920 2453 203d 2024 656e 6320 3e20 3120 y $S = $enc > 1 \n-00009f80: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL\n-00009f90: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-00009fa0: 2720 3d3e 2027 5727 2c0a 0920 2020 2020 ' => 'W',.. \n-00009fb0: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => [\"-- \n-00009fc0: 2465 6e63 2057 4152 4e49 4e47 2453 204f $enc WARNING$S O\n-00009fd0: 4343 5552 5245 4420 4455 5249 4e47 2054 CCURRED DURING T\n-00009fe0: 4845 2042 4143 4b55 5021 202d 2d22 5d29 HE BACKUP! --\"])\n-00009ff0: 0a20 2020 2069 6620 2465 6e63 3b0a 0a24 . if $enc;..$\n-0000a000: 656e 6320 3d20 2470 724c 6f67 2d3e 656e enc = $prLog->en\n-0000a010: 636f 756e 7465 7265 6428 272d 6b69 6e64 countered('-kind\n-0000a020: 2720 3d3e 2027 4527 293b 0a24 5320 3d20 ' => 'E');.$S = \n-0000a030: 2465 6e63 203e 2031 203f 2027 5327 203a $enc > 1 ? 'S' :\n-0000a040: 2027 273b 0a24 7072 4c6f 672d 3e70 7269 '';.$prLog->pri\n-0000a050: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-0000a060: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str'\n-0000a070: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => [\"-- $enc ER\n-0000a080: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D\n-0000a090: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP\n-0000a0a0: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --\"]). if $\n-0000a0b0: 656e 633b 0a0a 0a24 7072 4c6f 672d 3e70 enc;...$prLog->p\n-0000a0c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000a0d0: 275a 272c 0a09 2020 2020 2020 272d 7374 'Z',.. '-st\n-0000a0e0: 7227 203d 3e0a 0920 2020 2020 205b 2263 r' =>.. [\"c\n-0000a0f0: 6865 636b 696e 6720 7265 6665 7265 6e63 hecking referenc\n-0000a100: 6573 2061 6e64 2063 6f70 7969 6e67 2069 es and copying i\n-0000a110: 6e20 3c24 6261 636b 7570 4469 723e 225d n <$backupDir>\"]\n-0000a120: 293b 0a0a 6578 6974 2030 3b0a 0a0a 2323 );..exit 0;...##\n-0000a130: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a140: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a150: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a160: 0a23 2070 6163 6b61 6765 2070 7269 6e74 .# package print\n-0000a170: 4c6f 674d 756c 7469 706c 6520 6e65 6564 LogMultiple need\n-0000a180: 7320 7468 6973 2066 756e 6374 696f 6e0a s this function.\n-0000a190: 7375 6220 636c 6561 6e75 700a 7b0a 2020 sub cleanup.{. \n-0000a1a0: 2020 6d79 2024 7369 676e 616d 6520 3d20 my $signame = \n-0000a1b0: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e\n-0000a1c0: 7869 7420 3d20 2873 6869 6674 2829 207c xit = (shift() |\n-0000a1d0: 7c20 3129 3b0a 0a20 2020 2065 7869 7420 | 1);.. exit \n-0000a1e0: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...#####\n-0000a1f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a200: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a210: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-0000a220: 2323 2323 2323 230a 7375 6220 7570 6461 #######.sub upda\n-0000a230: 7465 4261 636b 7570 4469 720a 7b0a 2020 teBackupDir.{. \n-0000a240: 2020 6d79 2024 6469 7220 3d20 7368 6966 my $dir = shif\n-0000a250: 743b 0a20 2020 206d 7920 246e 6f43 6f6d t;. my $noCom\n-0000a260: 7072 6573 7320 3d20 7368 6966 743b 0a20 press = shift;. \n-0000a270: 2020 206d 7920 2470 726f 6772 6573 7352 my $progressR\n-0000a280: 6570 6f72 7420 3d20 7368 6966 743b 0a20 eport = shift;. \n-0000a290: 2020 206d 7920 2470 724c 6f67 203d 2073 my $prLog = s\n-0000a2a0: 6869 6674 3b0a 2020 2020 6d79 2024 696e hift;. my $in\n-0000a2b0: 7465 7261 6374 6976 6520 3d20 7368 6966 teractive = shif\n-0000a2c0: 743b 0a20 2020 206d 7920 2463 6f75 6e74 t;. my $count\n-0000a2d0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my\n-0000a2e0: 2024 6261 636b 7570 5479 7065 203d 2073 $backupType = s\n-0000a2f0: 6869 6674 3b0a 0a20 2020 2023 0a20 2020 hift;.. #. \n-0000a300: 2023 2072 6561 6420 636f 6d70 7265 7373 # read compress\n-0000a310: 2066 726f 6d20 2e6d 6435 4368 6563 6b53 from .md5CheckS\n-0000a320: 756d 2e69 6e66 6f0a 2020 2020 230a 2020 um.info. #. \n-0000a330: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-0000a340: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-0000a350: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [\"\n-0000a360: 2824 636f 756e 7429 2075 7064 6174 696e ($count) updatin\n-0000a370: 6720 3c24 6469 723e 225d 293b 0a0a 2020 g <$dir>\"]);.. \n-0000a380: 2020 6d79 2024 7263 7366 203d 2072 6561 my $rcsf = rea\n-0000a390: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n\n-0000a3a0: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil\n-0000a3b0: 6527 203d 3e0a 0909 0909 2020 2020 2022 e' =>..... \"\n-0000a3c0: 2464 6972 2f2e 6d64 3543 6865 636b 5375 $dir/.md5CheckSu\n-0000a3d0: 6d73 222c 0a09 0909 0920 2020 2020 272d ms\",..... '-\n-0000a3e0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-0000a3f0: 293b 0a0a 2320 2020 206d 7920 246d 6574 );..# my $met\n-0000a400: 6120 3d20 2472 6373 662d 3e67 6574 4d65 a = $rcsf->getMe\n-0000a410: 7461 5661 6c46 6965 6c64 2829 3b0a 0a23 taValField();..#\n-0000a420: 2020 2020 6d79 2028 2463 6f6d 7072 2c20 my ($compr, \n-0000a430: 4063 6f6d 7072 5061 7229 203d 2040 7b24 @comprPar) = @{$\n-0000a440: 246d 6574 617b 2763 6f6d 7072 6573 7327 $meta{'compress'\n-0000a450: 7d7d 3b0a 2320 2020 206d 7920 2463 6f6d }};.# my $com\n-0000a460: 7072 506f 7374 6669 7820 3d20 2824 246d prPostfix = ($$m\n-0000a470: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})-\n-0000a480: 3e5b 305d 3b0a 2020 2020 6d79 2028 2463 >[0];. my ($c\n-0000a490: 6f6d 7072 2c20 4063 6f6d 7072 5061 7229 ompr, @comprPar)\n-0000a4a0: 203d 2040 7b24 7263 7366 2d3e 6765 7449 = @{$rcsf->getI\n-0000a4b0: 6e66 6f57 6974 6850 6172 2827 636f 6d70 nfoWithPar('comp\n-0000a4c0: 7265 7373 2729 7d3b 0a20 2020 206d 7920 ress')};. my \n-0000a4d0: 2463 6f6d 7072 506f 7374 6669 7820 3d20 $comprPostfix = \n-0000a4e0: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi\n-0000a4f0: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix')\n-0000a500: 3b0a 2370 7269 6e74 2022 636f 6d70 7220 ;.#print \"compr \n-0000a510: 3d20 3c24 636f 6d70 723e 2c20 636f 6d70 = <$compr>, comp\n-0000a520: 7250 6172 203d 203c 4063 6f6d 7072 5061 rPar = <@comprPa\n-0000a530: 723e 5c6e 223b 0a20 2020 206d 7920 246c r>\\n\";. my $l\n-0000a540: 696e 6b54 6f52 6563 656e 7420 3d20 2472 inkToRecent = $r\n-0000a550: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith\n-0000a560: 5061 7228 276c 696e 6b54 6f52 6563 656e Par('linkToRecen\n-0000a570: 7427 293b 0a23 7072 696e 7420 226c 696e t');.#print \"lin\n-0000a580: 6b54 6f52 6563 656e 7420 3d20 3c24 6c69 kToRecent = <$li\n-0000a590: 6e6b 546f 5265 6365 6e74 3e5c 6e22 3b0a nkToRecent>\\n\";.\n-0000a5a0: 0a20 2020 2023 0a20 2020 2023 2073 6574 . #. # set\n-0000a5b0: 206c 696e 6b73 2061 6e64 2063 6f6d 7072 links and compr\n-0000a5c0: 6573 730a 2020 2020 230a 2020 2020 6d79 ess. #. my\n-0000a5d0: 2028 256d 6435 546f 4669 6c65 293b 2020 (%md5ToFile); \n-0000a5e0: 2020 2020 2320 7374 6f72 6520 6d64 3573 # store md5s\n-0000a5f0: 756d 7320 6f66 2063 6f70 6965 6420 6669 ums of copied fi\n-0000a600: 6c65 7320 6265 6361 7573 650a 2020 2020 les because. \n-0000a610: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000a620: 2020 2020 2020 2320 6e75 6d62 6572 206f # number o\n-0000a630: 6620 6c69 6e6b 7320 6973 2065 7868 6175 f links is exhau\n-0000a640: 7374 6564 0a20 2020 206d 7920 2466 203d sted. my $f =\n-0000a650: 2022 2464 6972 2f2e 7374 6f72 6542 6163 \"$dir/.storeBac\n-0000a660: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil\n-0000a670: 652e 627a 3222 3b0a 0a20 2020 2072 6574 e.bz2\";.. ret\n-0000a680: 7572 6e20 756e 6c65 7373 202d 6520 2466 urn unless -e $f\n-0000a690: 3b0a 0a20 2020 2023 0a20 2020 2023 0a20 ;.. #. #. \n-0000a6a0: 2020 2023 0a20 2020 2024 7072 4c6f 672d #. $prLog-\n-0000a6b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0000a6c0: 3e20 2749 272c 0a09 0920 2027 2d73 7472 > 'I',... '-str\n-0000a6d0: 2720 3d3e 205b 2270 6861 7365 2031 3a20 ' => [\"phase 1: \n-0000a6e0: 6d6b 6469 722c 2073 796d 6c69 6e6b 2061 mkdir, symlink a\n-0000a6f0: 6e64 2063 6f6d 7072 6573 7369 6e67 2066 nd compressing f\n-0000a700: 696c 6573 225d 293b 0a0a 2020 2020 6d79 iles\"]);.. my\n-0000a710: 2024 6c3b 0a20 2020 206d 7920 2470 6172 $l;. my $par\n-0000a720: 466f 726b 5072 6f63 203d 2070 6172 616c ForkProc = paral\n-0000a730: 6c65 6c46 6f72 6b2d 3e6e 6577 2827 2d6d lelFork->new('-m\n-0000a740: 6178 5061 7261 6c6c 656c 2720 3d3e 2024 axParallel' => $\n-0000a750: 6e6f 436f 6d70 7265 7373 2c0a 0909 0909 noCompress,.....\n-0000a760: 0927 2d70 724c 6f67 2720 3d3e 2024 7072 .'-prLog' => $pr\n-0000a770: 4c6f 672c 0a09 0909 0909 272d 6669 7273 Log,......'-firs\n-0000a780: 7446 6173 7427 203d 3e20 312c 0a09 0909 tFast' => 1,....\n-0000a790: 0909 272d 6d61 7857 6169 7454 696d 6527 ..'-maxWaitTime'\n-0000a7a0: 203d 3e20 2e32 2c0a 0909 0909 0927 2d6e => .2,......'-n\n-0000a7b0: 6f4f 6657 6169 7453 7465 7073 2720 3d3e oOfWaitSteps' =>\n-0000a7c0: 2031 3030 293b 0a0a 2020 2020 6d79 2024 100);.. my $\n-0000a7d0: 6e6f 436f 6d70 7265 7373 6564 4669 6c65 noCompressedFile\n-0000a7e0: 7320 3d20 303b 0a20 2020 206d 7920 246e s = 0;. my $n\n-0000a7f0: 6f4d 6b64 6972 203d 2030 3b0a 2020 2020 oMkdir = 0;. \n-0000a800: 6d79 2024 6e6f 5379 6d4c 696e 6b20 3d20 my $noSymLink = \n-0000a810: 303b 0a20 2020 206d 7920 2824 6f6c 6453 0;. my ($oldS\n-0000a820: 697a 652c 2024 6e65 7753 697a 6529 203d ize, $newSize) =\n-0000a830: 2028 302c 2030 293b 0a20 2020 206d 7920 (0, 0);. my \n-0000a840: 246c 696e 6b46 696c 6520 3d20 7069 7065 $linkFile = pipe\n-0000a850: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('-\n-0000a860: 6578 6563 2720 3d3e 2027 627a 6970 3227 exec' => 'bzip2'\n-0000a870: 2c0a 0909 0909 2020 2020 2027 2d70 6172 ,..... '-par\n-0000a880: 616d 2720 3d3e 205b 272d 6427 5d2c 0a09 am' => ['-d'],..\n-0000a890: 0909 0920 2020 2020 272d 7374 6469 6e27 ... '-stdin'\n-0000a8a0: 203d 3e20 2466 2c0a 0909 0909 2020 2020 => $f,..... \n-0000a8b0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' =>\n-0000a8c0: 2027 2f74 6d70 2f73 7462 7550 6970 6546 '/tmp/stbuPipeF\n-0000a8d0: 726f 6d31 302d 272c 0a09 0909 0920 2020 rom10-',..... \n-0000a8e0: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p\n-0000a8f0: 724c 6f67 293b 0a0a 2020 2020 7768 696c rLog);.. whil\n-0000a900: 6520 2824 6c20 3d20 246c 696e 6b46 696c e ($l = $linkFil\n-0000a910: 652d 3e72 6561 6428 2929 0a20 2020 207b e->read()). {\n-0000a920: 0a09 6e65 7874 2069 6620 246c 203d 7e20 ..next if $l =~ \n-0000a930: 2f5e 232f 3b0a 0963 686f 6d70 2024 6c3b /^#/;..chomp $l;\n-0000a940: 0a09 6d79 2028 2477 6861 742c 2024 6d64 ..my ($what, $md\n-0000a950: 3529 203d 2073 706c 6974 282f 5c73 2b2f 5) = split(/\\s+/\n-0000a960: 2c20 246c 2c20 3229 3b0a 2370 7269 6e74 , $l, 2);.#print\n-0000a970: 2022 7768 6174 203d 2024 7768 6174 5c6e \"what = $what\\n\n-0000a980: 223b 0a0a 0969 6620 2824 7768 6174 2065 \";...if ($what e\n-0000a990: 7120 2764 6972 2729 0a09 7b0a 0920 2020 q 'dir')..{.. \n-0000a9a0: 2024 6d64 3520 3d7e 2073 2f5c 302f 5c6e $md5 =~ s/\\0/\\n\n-0000a9b0: 2f6f 673b 2020 2020 2320 6e61 6d65 206f /og; # name o\n-0000a9c0: 6620 6469 7265 6374 6f72 7921 0a09 2020 f directory!.. \n-0000a9d0: 2020 756e 6c65 7373 2028 2d64 2022 2464 unless (-d \"$d\n-0000a9e0: 6972 2f24 6d64 3522 290a 0920 2020 207b ir/$md5\").. {\n-0000a9f0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-0000aa00: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-0000aa10: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str'\n-0000aa20: 203d 3e0a 0909 0920 2020 2020 205b 2263 =>.... [\"c\n-0000aa30: 616e 6e6f 7420 6372 6561 7465 2064 6972 annot create dir\n-0000aa40: 6563 746f 7279 203c 2464 6972 2f24 6d64 ectory <$dir/$md\n-0000aa50: 353e 225d 2c0a 0909 0920 2020 2020 2027 5>\"],.... '\n-0000aa60: 2d65 7869 7427 203d 3e20 3129 0a09 0920 -exit' => 1)... \n-0000aa70: 2020 2075 6e6c 6573 7320 6d6b 6469 7220 unless mkdir \n-0000aa80: 2224 6469 722f 246d 6435 222c 2030 3730 \"$dir/$md5\", 070\n-0000aa90: 303b 0a09 2020 2020 7d0a 0920 2020 2024 0;.. }.. $\n-0000aaa0: 6e6f 4d6b 6469 722b 2b3b 0a09 7d0a 0965 noMkdir++;..}..e\n-0000aab0: 6c73 6966 2028 2477 6861 7420 6571 2027 lsif ($what eq '\n-0000aac0: 6c69 6e6b 2720 6f72 2024 7768 6174 2065 link' or $what e\n-0000aad0: 7120 276c 696e 6b62 6c6f 636b 2720 6f72 q 'linkblock' or\n-0000aae0: 0a09 2020 2020 2477 6861 7420 6571 2027 .. $what eq '\n-0000aaf0: 6c69 6e6b 5379 6d6c 696e 6b27 290a 097b linkSymlink')..{\n-0000ab00: 0a09 2020 2020 6d79 2024 6578 6973 7469 .. my $existi\n-0000ab10: 6e67 4669 6c65 203d 2024 6c69 6e6b 4669 ngFile = $linkFi\n-0000ab20: 6c65 2d3e 7265 6164 2829 3b0a 0920 2020 le->read();.. \n-0000ab30: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile =\n-0000ab40: 2022 2464 6972 2f24 6578 6973 7469 6e67 \"$dir/$existing\n-0000ab50: 4669 6c65 223b 0a09 2020 2020 2470 724c File\";.. $prL\n-0000ab60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0000ab70: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-0000ab80: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-0000ab90: 6669 6c65 203c 2466 3e20 656e 6473 2075 file <$f> ends u\n-0000aba0: 6e65 7870 6563 7465 6420 6174 206c 696e nexpected at lin\n-0000abb0: 6520 242e 225d 2c0a 0909 0920 2027 2d65 e $.\"],.... '-e\n-0000abc0: 7869 7427 203d 3e20 3129 0a09 0975 6e6c xit' => 1)...unl\n-0000abd0: 6573 7320 2465 7869 7374 696e 6746 696c ess $existingFil\n-0000abe0: 653b 0a0a 0920 2020 206d 7920 246e 6577 e;... my $new\n-0000abf0: 4c69 6e6b 203d 2024 6c69 6e6b 4669 6c65 Link = $linkFile\n-0000ac00: 2d3e 7265 6164 2829 3b0a 0920 2020 2024 ->read();.. $\n-0000ac10: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k\n-0000ac20: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',....\n-0000ac30: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... \n-0000ac40: 205b 2266 696c 6520 3c24 663e 2065 6e64 [\"file <$f> end\n-0000ac50: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at \n-0000ac60: 6c69 6e65 2024 2e22 5d2c 0a09 0909 2020 line $.\"],.... \n-0000ac70: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)...\n-0000ac80: 756e 6c65 7373 2024 6e65 774c 696e 6b3b unless $newLink;\n-0000ac90: 0a09 7d20 0a09 656c 7369 6620 2824 7768 ..} ..elsif ($wh\n-0000aca0: 6174 2065 7120 2773 796d 6c69 6e6b 2729 at eq 'symlink')\n-0000acb0: 0a09 7b0a 0920 2020 2024 6d64 3520 3d7e ..{.. $md5 =~\n-0000acc0: 2073 2f5c 302f 5c6e 2f6f 673b 2020 2020 s/\\0/\\n/og; \n-0000acd0: 2023 2066 696c 6520 286e 6f74 206d 6435 # file (not md5\n-0000ace0: 7375 6d29 0a09 2020 2020 246d 6435 203d sum).. $md5 =\n-0000acf0: 2022 2464 6972 2f24 6d64 3522 3b0a 0920 \"$dir/$md5\";.. \n-0000ad00: 2020 206d 7920 2474 6172 6765 7420 3d20 my $target = \n-0000ad10: 246c 696e 6b46 696c 652d 3e72 6561 6428 $linkFile->read(\n-0000ad20: 293b 0a09 2020 2020 2470 724c 6f67 2d3e );.. $prLog->\n-0000ad30: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000ad40: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-0000ad50: 2720 3d3e 0a09 0909 2020 5b22 6669 6c65 ' =>.... [\"file\n-0000ad60: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp\n-0000ad70: 6563 7465 6420 6174 206c 696e 6520 242e ected at line $.\n-0000ad80: 225d 2c0a 0909 0920 2027 2d65 7869 7427 \"],.... '-exit'\n-0000ad90: 203d 3e20 3129 0a09 0975 6e6c 6573 7320 => 1)...unless \n-0000ada0: 2474 6172 6765 743b 0a09 2020 2020 6368 $target;.. ch\n-0000adb0: 6f6d 7020 2474 6172 6765 743b 0a09 2020 omp $target;.. \n-0000adc0: 2020 2474 6172 6765 7420 3d7e 2073 2f5c $target =~ s/\\\n-0000add0: 302f 5c6e 2f6f 673b 0a09 2020 2020 2470 0/\\n/og;.. $p\n-0000ade0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0000adf0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... \n-0000ae00: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... \n-0000ae10: 5b22 6361 6e6e 6f74 2063 7265 6174 6520 [\"cannot create \n-0000ae20: 7379 6d6c 696e 6b20 6672 6f6d 203c 246d symlink from <$m\n-0000ae30: 6435 3e20 2d3e 203c 2474 6172 6765 743e d5> -> <$target>\n-0000ae40: 225d 290a 0909 756e 6c65 7373 2073 796d \"])...unless sym\n-0000ae50: 6c69 6e6b 2024 7461 7267 6574 2c20 246d link $target, $m\n-0000ae60: 6435 3b0a 0920 2020 2024 6e6f 5379 6d4c d5;.. $noSymL\n-0000ae70: 696e 6b2b 2b3b 0a09 7d0a 0965 6c73 6966 ink++;..}..elsif\n-0000ae80: 2028 2477 6861 7420 6571 2027 636f 6d70 ($what eq 'comp\n-0000ae90: 7265 7373 2729 0a09 7b0a 0920 2020 206d ress')..{.. m\n-0000aea0: 7920 2466 696c 6520 3d20 246c 696e 6b46 y $file = $linkF\n-0000aeb0: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. \n-0000aec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-0000aed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-0000aee0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>..\n-0000aef0: 0909 2020 5b22 6669 6c65 203c 2466 3e20 .. [\"file <$f> \n-0000af00: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected \n-0000af10: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $.\"],...\n-0000af20: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n-0000af30: 0a09 0975 6e6c 6573 7320 2466 696c 653b ...unless $file;\n-0000af40: 0a09 2020 2020 6368 6f6d 7020 2466 696c .. chomp $fil\n-0000af50: 653b 0a0a 0920 2020 2024 6669 6c65 203d e;... $file =\n-0000af60: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 ~ s/\\0/\\n/og;.. \n-0000af70: 2020 2024 6669 6c65 203d 2022 2464 6972 $file = \"$dir\n-0000af80: 2f24 6669 6c65 223b 2020 2020 2020 2020 /$file\"; \n-0000af90: 2320 6669 6c65 2074 6f20 636f 6d70 7265 # file to compre\n-0000afa0: 7373 0a09 2020 2020 6d79 2024 7374 203d ss.. my $st =\n-0000afb0: 2028 7374 6174 2824 6669 6c65 2929 5b37 (stat($file))[7\n-0000afc0: 5d3b 0a09 2020 2020 246f 6c64 5369 7a65 ];.. $oldSize\n-0000afd0: 202b 3d20 2473 7420 6966 2064 6566 696e += $st if defin\n-0000afe0: 6564 2024 7374 3b0a 0920 2020 2024 6e6f ed $st;.. $no\n-0000aff0: 436f 6d70 7265 7373 6564 4669 6c65 732b CompressedFiles+\n-0000b000: 2b3b 0a0a 0920 2020 2069 6620 2824 6d61 +;... if ($ma\n-0000b010: 696e 3a3a 494f 436f 6d70 7265 7373 4469 in::IOCompressDi\n-0000b020: 7265 6374 2061 6e64 0a09 0924 636f 6d70 rect and...$comp\n-0000b030: 7220 6571 2027 627a 6970 3227 290a 0920 r eq 'bzip2').. \n-0000b040: 2020 207b 0a09 096c 6f63 616c 202a 4649 {...local *FI\n-0000b050: 4c45 494e 3b0a 0909 7379 736f 7065 6e28 LEIN;...sysopen(\n-0000b060: 4649 4c45 494e 2c20 2466 696c 652c 204f FILEIN, $file, O\n-0000b070: 5f52 444f 4e4c 5929 206f 720a 0909 2020 _RDONLY) or... \n-0000b080: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print(\n-0000b090: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',.\n-0000b0a0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>.\n-0000b0b0: 0909 0909 2020 5b22 6361 6e6e 6f74 206f .... [\"cannot o\n-0000b0c0: 7065 6e20 3c24 6669 6c65 3e20 666f 7220 pen <$file> for \n-0000b0d0: 636f 6d70 7265 7373 696f 6e22 5d29 3b0a compression\"]);.\n-0000b0e0: 0909 6d79 2024 627a 203d 206e 6577 2049 ..my $bz = new I\n-0000b0f0: 4f3a 3a43 6f6d 7072 6573 733a 3a42 7a69 O::Compress::Bzi\n-0000b100: 7032 2822 2466 696c 6524 636f 6d70 7250 p2(\"$file$comprP\n-0000b110: 6f73 7466 6978 222c 0a09 0909 0909 0920 ostfix\",....... \n-0000b120: 426c 6f63 6b53 697a 6531 3030 4b20 3d3e BlockSize100K =>\n-0000b130: 2039 293b 0a09 096d 7920 2462 7566 6665 9);...my $buffe\n-0000b140: 723b 0a09 0977 6869 6c65 2028 7379 7372 r;...while (sysr\n-0000b150: 6561 6428 4649 4c45 494e 2c20 2462 7566 ead(FILEIN, $buf\n-0000b160: 6665 722c 2031 3032 3529 290a 0909 7b0a fer, 1025))...{.\n-0000b170: 0909 2020 2020 756e 6c65 7373 2028 2462 .. unless ($b\n-0000b180: 7a2d 3e73 7973 7772 6974 6528 2462 7566 z->syswrite($buf\n-0000b190: 6665 7229 290a 0909 2020 2020 7b0a 0909 fer))... {...\n-0000b1a0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0000b1b0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-0000b1c0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' \n-0000b1d0: 3d3e 0a09 0909 0920 2020 2020 205b 2277 =>..... [\"w\n-0000b1e0: 7269 7469 6e67 2074 6f20 3c24 6669 6c65 riting to <$file\n-0000b1f0: 2463 6f6d 7072 506f 7374 6669 783e 2066 $comprPostfix> f\n-0000b200: 6169 6c65 6422 5d29 3b0a 0909 2020 2020 ailed\"]);... \n-0000b210: 7d0a 0909 7d0a 0909 2462 7a2d 3e66 6c75 }...}...$bz->flu\n-0000b220: 7368 2829 3b0a 0909 2462 7a2d 3e65 6f66 sh();...$bz->eof\n-0000b230: 2829 3b0a 0909 636c 6f73 6528 4649 4c45 ();...close(FILE\n-0000b240: 494e 293b 0a0a 0909 246e 6577 5369 7a65 IN);....$newSize\n-0000b250: 202b 3d20 2873 7461 7428 2224 6669 6c65 += (stat(\"$file\n-0000b260: 2463 6f6d 7072 506f 7374 6669 7822 2929 $comprPostfix\"))\n-0000b270: 5b37 5d3b 0a09 0924 7072 4c6f 672d 3e70 [7];...$prLog->p\n-0000b280: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000b290: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '-\n-0000b2a0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-0000b2b0: 2064 656c 6574 6520 3c24 6669 6c65 3e22 delete <$file>\"\n-0000b2c0: 5d29 0a09 0920 2020 2069 6620 2875 6e6c ])... if (unl\n-0000b2d0: 696e 6b20 2466 696c 6529 2021 3d20 313b ink $file) != 1;\n-0000b2e0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els\n-0000b2f0: 650a 0920 2020 207b 0a09 096d 7920 2824 e.. {...my ($\n-0000b300: 6f6c 642c 2024 6e65 7729 203d 0a09 0920 old, $new) =... \n-0000b310: 2020 2024 7061 7246 6f72 6b50 726f 632d $parForkProc-\n-0000b320: 3e61 6464 5f62 6c6f 636b 2827 2d65 7865 >add_block('-exe\n-0000b330: 6327 203d 3e20 2463 6f6d 7072 2c0a 0909 c' => $compr,...\n-0000b340: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' \n-0000b350: 3d3e 205c 4063 6f6d 7072 5061 722c 0a09 => \\@comprPar,..\n-0000b360: 0909 0909 2020 2020 272d 6f75 7452 616e .... '-outRan\n-0000b370: 646f 6d27 203d 3e20 272f 746d 702f 627a dom' => '/tmp/bz\n-0000b380: 6970 322d 272c 0a09 0909 0909 2020 2020 ip2-',...... \n-0000b390: 272d 7374 6469 6e27 203d 3e20 2466 696c '-stdin' => $fil\n-0000b3a0: 652c 0a09 0909 0909 2020 2020 272d 7374 e,...... '-st\n-0000b3b0: 646f 7574 2720 3d3e 2022 2466 696c 6524 dout' => \"$file$\n-0000b3c0: 636f 6d70 7250 6f73 7466 6978 222c 0a09 comprPostfix\",..\n-0000b3d0: 0909 0909 2020 2020 272d 6465 6c53 7464 .... '-delStd\n-0000b3e0: 6f75 7427 203d 3e20 276e 6f27 2c0a 0909 out' => 'no',...\n-0000b3f0: 0909 0920 2020 2027 2d69 6e66 6f27 203d ... '-info' =\n-0000b400: 3e20 2466 696c 6529 3b0a 0909 6966 2028 > $file);...if (\n-0000b410: 246f 6c64 290a 0909 7b0a 0909 2020 2020 $old)...{... \n-0000b420: 6d79 2024 6620 3d20 246f 6c64 2d3e 6765 my $f = $old->ge\n-0000b430: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in\n-0000b440: 666f 2729 3b0a 0909 2020 2020 263a 3a77 fo');... &::w\n-0000b450: 6169 7446 6f72 4669 6c65 2822 2466 2463 aitForFile(\"$f$c\n-0000b460: 6f6d 7072 506f 7374 6669 7822 293b 0a09 omprPostfix\");..\n-0000b470: 0920 2020 206d 7920 246f 7574 203d 2024 . my $out = $\n-0000b480: 6f6c 642d 3e67 6574 5354 4445 5252 2829 old->getSTDERR()\n-0000b490: 3b0a 0909 2020 2020 2470 724c 6f67 2d3e ;... $prLog->\n-0000b4a0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000b4b0: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st\n-0000b4c0: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => [\"STDERR o\n-0000b4d0: 6620 3c24 636f 6d70 7220 4063 6f6d 7072 f <$compr @compr\n-0000b4e0: 5061 7220 2220 2e0a 0909 0909 0920 2020 Par \" ....... \n-0000b4f0: 2020 223c 2466 203e 2466 2463 6f6d 7072 \"<$f >$f$compr\n-0000b500: 506f 7374 6669 783e 3a22 2c20 4024 6f75 Postfix>:\", @$ou\n-0000b510: 745d 290a 0909 0969 6620 2840 246f 7574 t])....if (@$out\n-0000b520: 203e 2030 293b 0a09 0920 2020 2024 6e65 > 0);... $ne\n-0000b530: 7753 697a 6520 2b3d 2028 7374 6174 2822 wSize += (stat(\"\n-0000b540: 2466 2463 6f6d 7072 506f 7374 6669 7822 $f$comprPostfix\"\n-0000b550: 2929 5b37 5d3b 0a09 0920 2020 2024 7072 ))[7];... $pr\n-0000b560: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0000b570: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... \n-0000b580: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => [\"can\n-0000b590: 6e6f 7420 6465 6c65 7465 203c 2466 3e22 not delete <$f>\"\n-0000b5a0: 5d29 0a09 0909 6966 2028 756e 6c69 6e6b ])....if (unlink\n-0000b5b0: 2024 6629 2021 3d20 313b 0a09 097d 0a09 $f) != 1;...}..\n-0000b5c0: 2020 2020 7d0a 0920 2020 2024 7072 4c6f }.. $prLo\n-0000b5d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000b5e0: 203d 3e20 2753 272c 0a09 0909 2020 272d => 'S',.... '-\n-0000b5f0: 7374 7227 203d 3e0a 0909 0920 205b 2263 str' =>.... [\"c\n-0000b600: 6f6d 7072 6573 7365 6420 246e 6f43 6f6d ompressed $noCom\n-0000b610: 7072 6573 7365 6446 696c 6573 2066 696c pressedFiles fil\n-0000b620: 6573 225d 290a 0909 6966 2028 2470 726f es\"])...if ($pro\n-0000b630: 6772 6573 7352 6570 6f72 7420 616e 640a gressReport and.\n-0000b640: 0909 2020 2020 246e 6f43 6f6d 7072 6573 .. $noCompres\n-0000b650: 7365 6446 696c 6573 2025 2024 7072 6f67 sedFiles % $prog\n-0000b660: 7265 7373 5265 706f 7274 203d 3d20 3029 ressReport == 0)\n-0000b670: 3b0a 097d 0a09 656c 7365 0a09 7b0a 0920 ;..}..else..{.. \n-0000b680: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-0000b690: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-0000b6a0: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n-0000b6b0: 5b22 696c 6c65 6761 6c20 6b65 7977 6f72 [\"illegal keywor\n-0000b6c0: 6420 3c24 7768 6174 3e20 2220 2e0a 0909 d <$what> \" ....\n-0000b6d0: 0909 2020 2020 2022 6174 206c 696e 6520 .. \"at line \n-0000b6e0: 242e 2069 6e20 6669 6c65 203c 2466 3e3a $. in file <$f>:\n-0000b6f0: 222c 0a09 0909 0920 2020 2020 225c 743c \",..... \"\\t<\n-0000b700: 246c 3e22 5d2c 0a09 0909 2020 272d 6578 $l>\"],.... '-ex\n-0000b710: 6974 2720 3d3e 2031 293b 0a09 7d0a 2020 it' => 1);..}. \n-0000b720: 2020 7d0a 2020 2020 246c 696e 6b46 696c }. $linkFil\n-0000b730: 652d 3e77 6169 7428 293b 0a20 2020 206d e->wait();. m\n-0000b740: 7920 246f 7574 203d 2024 6c69 6e6b 4669 y $out = $linkFi\n-0000b750: 6c65 2d3e 6765 7453 5444 4552 5228 293b le->getSTDERR();\n-0000b760: 0a20 2020 2069 6620 2840 246f 7574 290a . if (@$out).\n-0000b770: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-0000b780: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000b790: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-0000b7a0: 7472 2720 3d3e 205b 2272 6561 6469 6e67 tr' => [\"reading\n-0000b7b0: 206c 696e 6b46 696c 6520 6669 6c65 2072 linkFile file r\n-0000b7c0: 6570 6f72 7473 2065 7272 6f72 733a 222c eports errors:\",\n-0000b7d0: 0a09 0909 0920 4024 6f75 745d 293b 0a09 ..... @$out]);..\n-0000b7e0: 6578 6974 2031 3b0a 2020 2020 7d0a 2020 exit 1;. }. \n-0000b7f0: 2020 246c 696e 6b46 696c 652d 3e63 6c6f $linkFile->clo\n-0000b800: 7365 2829 3b0a 2020 2020 6d79 2024 6f6c se();. my $ol\n-0000b810: 643b 0a20 2020 2077 6869 6c65 2028 246f d;. while ($o\n-0000b820: 6c64 203d 2024 7061 7246 6f72 6b50 726f ld = $parForkPro\n-0000b830: 632d 3e77 6169 7446 6f72 416c 6c4a 6f62 c->waitForAllJob\n-0000b840: 7328 2929 0a20 2020 207b 0a09 246e 6f43 s()). {..$noC\n-0000b850: 6f6d 7072 6573 7365 6446 696c 6573 2b2b ompressedFiles++\n-0000b860: 3b0a 0926 3a3a 7761 6974 466f 7246 696c ;..&::waitForFil\n-0000b870: 6528 2224 6624 636f 6d70 7250 6f73 7466 e(\"$f$comprPostf\n-0000b880: 6978 2229 3b0a 2009 6d79 2024 6620 3d20 ix\");. .my $f = \n-0000b890: 246f 6c64 2d3e 6765 7428 272d 7768 6174 $old->get('-what\n-0000b8a0: 2720 3d3e 2027 696e 666f 2729 3b0a 0924 ' => 'info');..$\n-0000b8b0: 6e65 7753 697a 6520 2b3d 2028 7374 6174 newSize += (stat\n-0000b8c0: 2822 2466 2463 6f6d 7072 506f 7374 6669 (\"$f$comprPostfi\n-0000b8d0: 7822 2929 5b37 5d3b 0a09 6d79 2024 6f75 x\"))[7];..my $ou\n-0000b8e0: 7420 3d20 246f 6c64 2d3e 6765 7453 5444 t = $old->getSTD\n-0000b8f0: 4552 5228 293b 0a09 2470 724c 6f67 2d3e ERR();..$prLog->\n-0000b900: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000b910: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '-\n-0000b920: 7374 7227 203d 3e20 5b22 5354 4445 5252 str' => [\"STDERR\n-0000b930: 206f 6620 3c24 636f 6d70 7220 4063 6f6d of <$compr @com\n-0000b940: 7072 5061 7220 2220 2e0a 0909 0909 2022 prPar \" ...... \"\n-0000b950: 3c24 6620 3e24 6624 636f 6d70 7250 6f73 <$f >$f$comprPos\n-0000b960: 7466 6978 3e3a 222c 2040 246f 7574 5d29 tfix>:\", @$out])\n-0000b970: 0a09 2020 2020 6966 2028 4024 6f75 7420 .. if (@$out \n-0000b980: 3e20 3029 3b0a 0924 7072 4c6f 672d 3e70 > 0);..$prLog->p\n-0000b990: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000b9a0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s\n-0000b9b0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-0000b9c0: 6465 6c65 7465 203c 2466 3e22 5d29 0a09 delete <$f>\"])..\n-0000b9d0: 2020 2020 6966 2028 756e 6c69 6e6b 2024 if (unlink $\n-0000b9e0: 6629 2021 3d20 313b 0a20 2020 207d 0a0a f) != 1;. }..\n-0000b9f0: 6966 2028 2462 6163 6b75 7054 7970 6520 if ($backupType \n-0000ba00: 6571 2027 636f 7079 2720 616e 6420 246c eq 'copy' and $l\n-0000ba10: 696e 6b54 6f52 6563 656e 7429 0a7b 0a20 inkToRecent).{. \n-0000ba20: 2020 206d 7920 2824 5f64 2c20 246c 696e my ($_d, $lin\n-0000ba30: 6b29 203d 2026 3a3a 7370 6c69 7446 696c k) = &::splitFil\n-0000ba40: 6544 6972 2824 6469 7229 3b0a 2370 7269 eDir($dir);.#pri\n-0000ba50: 6e74 2022 5f64 203d 203c 245f 643e 2c20 nt \"_d = <$_d>, \n-0000ba60: 6c69 6e6b 203d 203c 246c 696e 6b3e 5c6e link = <$link>\\n\n-0000ba70: 223b 0a20 2020 2069 6620 282d 6c20 2224 \";. if (-l \"$\n-0000ba80: 5f64 2f24 6c69 6e6b 546f 5265 6365 6e74 _d/$linkToRecent\n-0000ba90: 2229 0a20 2020 207b 0a09 756e 6c69 6e6b \"). {..unlink\n-0000baa0: 2022 245f 642f 246c 696e 6b54 6f52 6563 \"$_d/$linkToRec\n-0000bab0: 656e 7422 3b0a 0a09 2470 724c 6f67 2d3e ent\";...$prLog->\n-0000bac0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000bad0: 2027 5727 2c0a 0909 2020 2020 2020 272d 'W',... '-\n-0000bae0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => [\"cannot\n-0000baf0: 2063 7265 6174 6520 7379 6d6c 696e 6b20 create symlink \n-0000bb00: 6c69 6e6b 546f 5265 6365 6e74 2022 202e linkToRecent \" .\n-0000bb10: 0a09 0909 0920 223c 246c 696e 6b54 6f52 ..... \"<$linkToR\n-0000bb20: 6563 656e 743e 225d 290a 0920 2020 2075 ecent>\"]).. u\n-0000bb30: 6e6c 6573 7320 7379 6d6c 696e 6b20 246c nless symlink $l\n-0000bb40: 696e 6b2c 2022 245f 642f 246c 696e 6b54 ink, \"$_d/$linkT\n-0000bb50: 6f52 6563 656e 7422 3b0a 092b 2b24 6e6f oRecent\";..++$no\n-0000bb60: 5379 6d4c 696e 6b3b 0a23 7072 696e 7420 SymLink;.#print \n-0000bb70: 2231 2073 796d 6c69 6e6b 2024 6c69 6e6b \"1 symlink $link\n-0000bb80: 2c20 5f64 2f24 6c69 6e6b 546f 5265 6365 , _d/$linkToRece\n-0000bb90: 6e74 5c6e 223b 0a20 2020 207d 0a20 2020 nt\\n\";. }. \n-0000bba0: 2065 6c73 6966 2028 2d65 2022 245f 642f elsif (-e \"$_d/\n-0000bbb0: 246c 696e 6b54 6f52 6563 656e 7422 290a $linkToRecent\").\n-0000bbc0: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-0000bbd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000bbe0: 2757 272c 0a09 0920 2020 2020 2027 2d73 'W',... '-s\n-0000bbf0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => [\"cannot \n-0000bc00: 6465 6c65 7465 203c 246c 696e 6b54 6f52 delete <$linkToR\n-0000bc10: 6563 656e 743e 2022 202e 0a09 0909 0920 ecent> \" ...... \n-0000bc20: 2228 6f70 7469 6f6e 206c 696e 6b54 6f52 \"(option linkToR\n-0000bc30: 6563 656e 7429 3a20 2220 2e0a 0909 0909 ecent): \" ......\n-0000bc40: 2022 6973 206e 6f74 2061 2073 796d 626f \"is not a symbo\n-0000bc50: 6c69 6320 6c69 6e6b 2022 202e 0a09 0909 lic link \" .....\n-0000bc60: 0920 226f 7220 6e6f 2070 6572 6d69 7373 . \"or no permiss\n-0000bc70: 6f6e 7322 5d29 3b0a 2020 2020 7d0a 2020 ons\"]);. }. \n-0000bc80: 2020 656c 7365 2020 2020 2320 646f 6573 else # does\n-0000bc90: 206e 6f74 2065 7869 7374 2c20 6372 6561 not exist, crea\n-0000bca0: 7465 2061 206e 6577 206f 6e65 0a20 2020 te a new one. \n-0000bcb0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin\n-0000bcc0: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W'\n-0000bcd0: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n-0000bce0: 203d 3e20 5b22 6361 6e6e 6f74 2063 7265 => [\"cannot cre\n-0000bcf0: 6174 6520 7379 6d6c 696e 6b20 6c69 6e6b ate symlink link\n-0000bd00: 546f 5265 6365 6e74 2022 202e 0a09 0909 ToRecent \" .....\n-0000bd10: 0920 223c 246c 696e 6b54 6f52 6563 656e . \"<$linkToRecen\n-0000bd20: 743e 225d 290a 0920 2020 2075 6e6c 6573 t>\"]).. unles\n-0000bd30: 7320 7379 6d6c 696e 6b20 246c 696e 6b2c s symlink $link,\n-0000bd40: 2022 245f 642f 246c 696e 6b54 6f52 6563 \"$_d/$linkToRec\n-0000bd50: 656e 7422 3b0a 092b 2b24 6e6f 5379 6d4c ent\";..++$noSymL\n-0000bd60: 696e 6b3b 0a23 7072 696e 7420 2232 2073 ink;.#print \"2 s\n-0000bd70: 796d 6c69 6e6b 2024 6c69 6e6b 2c20 5f64 ymlink $link, _d\n-0000bd80: 2f24 6c69 6e6b 546f 5265 6365 6e74 5c6e /$linkToRecent\\n\n-0000bd90: 223b 0a20 2020 207d 0a7d 0a0a 2020 2020 \";. }.}.. \n-0000bda0: 6d79 2024 7065 7263 656e 7420 3d20 246f my $percent = $o\n-0000bdb0: 6c64 5369 7a65 203f 2024 6e65 7753 697a ldSize ? $newSiz\n-0000bdc0: 6520 2f20 246f 6c64 5369 7a65 202a 2031 e / $oldSize * 1\n-0000bdd0: 3030 203a 2030 3b0a 2020 2020 2470 724c 00 : 0;. $prL\n-0000bde0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0000bdf0: 2720 3d3e 2027 5327 2c0a 0909 2020 272d ' => 'S',... '-\n-0000be00: 7374 7227 203d 3e20 5b22 6372 6561 7465 str' => [\"create\n-0000be10: 6420 246e 6f4d 6b64 6972 2064 6972 6563 d $noMkdir direc\n-0000be20: 746f 7269 6573 222c 0a09 0909 2020 2020 tories\",.... \n-0000be30: 2022 6372 6561 7465 6420 246e 6f53 796d \"created $noSym\n-0000be40: 4c69 6e6b 2073 796d 626f 6c69 6320 6c69 Link symbolic li\n-0000be50: 6e6b 7322 2c0a 0909 0920 2020 2020 2263 nks\",.... \"c\n-0000be60: 6f6d 7072 6573 7365 6420 246e 6f43 6f6d ompressed $noCom\n-0000be70: 7072 6573 7365 6446 696c 6573 2066 696c pressedFiles fil\n-0000be80: 6573 222c 0a09 0909 2020 2020 2022 7573 es\",.... \"us\n-0000be90: 6564 2022 202e 2028 263a 3a68 756d 616e ed \" . (&::human\n-0000bea0: 5265 6164 6162 6c65 2824 6e65 7753 697a Readable($newSiz\n-0000beb0: 6529 295b 305d 202e 0a09 0909 2020 2020 e))[0] ..... \n-0000bec0: 2022 2069 6e73 7465 6164 206f 6620 2220 \" instead of \" \n-0000bed0: 2e20 2826 3a3a 6875 6d61 6e52 6561 6461 . (&::humanReada\n-0000bee0: 626c 6528 246f 6c64 5369 7a65 2929 5b30 ble($oldSize))[0\n-0000bef0: 5d20 2e0a 0909 0920 2020 2020 2220 2824 ] ..... \" ($\n-0000bf00: 6e65 7753 697a 6520 3c2d 2024 6f6c 6453 newSize <- $oldS\n-0000bf10: 697a 6520 3b20 2220 2e0a 0909 0920 2020 ize ; \" ..... \n-0000bf20: 2020 2873 7072 696e 7466 2022 252e 3166 (sprintf \"%.1f\n-0000bf30: 222c 2024 7065 7263 656e 7429 202e 2022 \", $percent) . \"\n-0000bf40: 2529 225d 293b 0a0a 2020 2020 230a 2020 %)\"]);.. #. \n-0000bf50: 2020 2320 7365 7420 6861 7264 206c 696e # set hard lin\n-0000bf60: 6b73 0a20 2020 2023 0a20 2020 2024 7072 ks. #. $pr\n-0000bf70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0000bf80: 6427 203d 3e20 2749 272c 0a09 0920 2027 d' => 'I',... '\n-0000bf90: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => [\"phase\n-0000bfa0: 2032 3a20 7365 7474 696e 6720 6861 7264 2: setting hard\n-0000bfb0: 206c 696e 6b73 225d 293b 0a0a 2020 2020 links\"]);.. \n-0000bfc0: 6d79 2024 7769 7468 426c 6f63 6b65 6446 my $withBlockedF\n-0000bfd0: 696c 6573 203d 2030 3b0a 2020 2020 6d79 iles = 0;. my\n-0000bfe0: 2024 6e6f 4861 7264 4c69 6e6b 7320 3d20 $noHardLinks = \n-0000bff0: 303b 0a20 2020 206d 7920 246e 6f43 6f70 0;. my $noCop\n-0000c000: 6965 6446 696c 6573 203d 2030 3b0a 2020 iedFiles = 0;. \n-0000c010: 2020 6d79 2024 7072 203d 2024 7072 6f67 my $pr = $prog\n-0000c020: 7265 7373 5265 706f 7274 202a 2032 3030 ressReport * 200\n-0000c030: 3b0a 2020 2020 246c 696e 6b46 696c 6520 ;. $linkFile \n-0000c040: 3d20 7069 7065 4672 6f6d 466f 726b 2d3e = pipeFromFork->\n-0000c050: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => '\n-0000c060: 627a 6970 3227 2c0a 0909 0909 2020 272d bzip2',..... '-\n-0000c070: 7061 7261 6d27 203d 3e20 5b27 2d64 275d param' => ['-d']\n-0000c080: 2c0a 0909 0909 2020 272d 7374 6469 6e27 ,..... '-stdin'\n-0000c090: 203d 3e20 2466 2c0a 0909 0909 2020 272d => $f,..... '-\n-0000c0a0: 6f75 7452 616e 646f 6d27 203d 3e20 272f outRandom' => '/\n-0000c0b0: 746d 702f 7374 6275 5069 7065 4672 6f6d tmp/stbuPipeFrom\n-0000c0c0: 3131 2d27 2c0a 0909 0909 2020 272d 7072 11-',..... '-pr\n-0000c0d0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-0000c0e0: 0a0a 2020 2020 6c6f 6361 6c20 2a42 4c4f .. local *BLO\n-0000c0f0: 434b 4d44 353b 0a20 2020 2069 6620 282d CKMD5;. if (-\n-0000c100: 6520 2224 6469 722f 2e6d 6435 426c 6f63 e \"$dir/.md5Bloc\n-0000c110: 6b43 6865 636b 5375 6d73 2229 2020 2320 kCheckSums\") # \n-0000c120: 6e6f 7720 2835 7468 2061 7072 696c 2032 now (5th april 2\n-0000c130: 3031 3229 2061 6c77 6179 7320 7772 6974 012) always writ\n-0000c140: 6573 0a20 2020 207b 2020 2020 2020 2020 es. { \n-0000c150: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c160: 2020 2020 2020 2020 2020 2320 636f 6d70 # comp\n-0000c170: 6c65 7465 2c20 636f 6d70 7265 7373 6564 lete, compressed\n-0000c180: 2066 696c 652e 2072 656d 6169 6e73 0a09 file. remains..\n-0000c190: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile\n-0000c1a0: 7320 3d20 313b 2020 2020 2020 2020 2023 s = 1; #\n-0000c1b0: 2066 6f72 2063 6f6d 7061 7469 6269 6c69 for compatibili\n-0000c1c0: 7479 0a09 6f70 656e 2842 4c4f 434b 4d44 ty..open(BLOCKMD\n-0000c1d0: 352c 2022 3e3e 222c 2022 2464 6972 2f2e 5, \">>\", \"$dir/.\n-0000c1e0: 6d64 3542 6c6f 636b 4368 6563 6b53 756d md5BlockCheckSum\n-0000c1f0: 7322 2920 6f72 0a09 2020 2020 2470 724c s\") or.. $prL\n-0000c200: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind\n-0000c210: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... '\n-0000c220: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [\"\n-0000c230: 6361 6e6e 6f74 2061 7070 656e 6420 746f cannot append to\n-0000c240: 203c 2464 6972 2f2e 6d64 3542 6c6f 636b <$dir/.md5Block\n-0000c250: 4368 6563 6b53 756d 733e 225d 2c0a 0909 CheckSums>\"],...\n-0000c260: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n-0000c270: 3b0a 2020 2020 7d0a 2020 2020 6d79 2024 ;. }. my $\n-0000c280: 6d69 7373 4c69 6e6b 7320 3d0a 096d 6973 missLinks =..mis\n-0000c290: 7369 6e67 4c69 6e6b 732d 3e6e 6577 2827 singLinks->new('\n-0000c2a0: 2d62 6163 6b75 7044 6972 2720 3d3e 2024 -backupDir' => $\n-0000c2b0: 6469 722c 0a09 0909 2020 272d 6d69 7373 dir,.... '-miss\n-0000c2c0: 696e 674c 696e 6b46 696c 6527 203d 3e20 ingLinkFile' => \n-0000c2d0: 222e 6d64 3543 6865 636b 5375 6d73 2e66 \".md5CheckSums.f\n-0000c2e0: 6169 6c22 2c0a 0909 2020 272d 6d69 7373 ail\",... '-miss\n-0000c2f0: 696e 674c 696e 6b42 6c6f 636b 4669 6c65 ingLinkBlockFile\n-0000c300: 2720 3d3e 2022 2e6d 6435 426c 6f63 6b43 ' => \".md5BlockC\n-0000c310: 6865 636b 5375 6d73 2e66 6169 6c22 2c0a heckSums.fail\",.\n-0000c320: 0909 0920 2027 2d70 724c 6f67 2720 3d3e ... '-prLog' =>\n-0000c330: 2024 7072 4c6f 6729 3b0a 0a20 2020 2077 $prLog);.. w\n-0000c340: 6869 6c65 2028 246c 203d 2024 6c69 6e6b hile ($l = $link\n-0000c350: 4669 6c65 2d3e 7265 6164 2829 290a 2020 File->read()). \n-0000c360: 2020 7b0a 096e 6578 7420 6966 2024 6c20 {..next if $l \n-0000c370: 3d7e 202f 5e23 2f3b 0a09 6368 6f6d 7020 =~ /^#/;..chomp \n-0000c380: 246c 3b0a 096d 7920 2824 7768 6174 2c20 $l;..my ($what, \n-0000c390: 246d 6435 2920 3d20 7370 6c69 7428 2f5c $md5) = split(/\\\n-0000c3a0: 732b 2f2c 2024 6c2c 2032 293b 0a09 6d79 s+/, $l, 2);..my\n-0000c3b0: 2024 6c69 6e65 4e72 203d 2024 6c69 6e6b $lineNr = $link\n-0000c3c0: 4669 6c65 2d3e 6765 7428 272d 7768 6174 File->get('-what\n-0000c3d0: 2720 3d3e 2027 6c69 6e65 4e72 2729 3b0a ' => 'lineNr');.\n-0000c3e0: 0969 6620 2824 7768 6174 2065 7120 276c .if ($what eq 'l\n-0000c3f0: 696e 6b27 290a 097b 0a09 2020 2020 6d79 ink')..{.. my\n-0000c400: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile =\n-0000c410: 2024 6c69 6e6b 4669 6c65 2d3e 7265 6164 $linkFile->read\n-0000c420: 2829 3b0a 0920 2020 2024 6578 6973 7469 ();.. $existi\n-0000c430: 6e67 4669 6c65 203d 2022 2464 6972 2f24 ngFile = \"$dir/$\n-0000c440: 6578 6973 7469 6e67 4669 6c65 223b 0a09 existingFile\";..\n-0000c450: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin\n-0000c460: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-0000c470: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' =>\n-0000c480: 205b 2266 696c 6520 3c24 663e 2065 6e64 [\"file <$f> end\n-0000c490: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at \n-0000c4a0: 6c69 6e65 2024 6c69 6e65 4e72 225d 2c0a line $lineNr\"],.\n-0000c4b0: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-0000c4c0: 3129 0a09 0975 6e6c 6573 7320 2465 7869 1)...unless $exi\n-0000c4d0: 7374 696e 6746 696c 653b 0a09 2020 2020 stingFile;.. \n-0000c4e0: 6368 6f6d 7020 2465 7869 7374 696e 6746 chomp $existingF\n-0000c4f0: 696c 653b 0a09 2020 2020 2465 7869 7374 ile;.. $exist\n-0000c500: 696e 6746 696c 6520 3d7e 2073 2f5c 302f ingFile =~ s/\\0/\n-0000c510: 5c6e 2f6f 673b 0a0a 0920 2020 206d 7920 \\n/og;... my \n-0000c520: 246e 6577 4c69 6e6b 203d 2024 6c69 6e6b $newLink = $link\n-0000c530: 4669 6c65 2d3e 7265 6164 2829 3b0a 0920 File->read();.. \n-0000c540: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-0000c550: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-0000c560: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => \n-0000c570: 5b22 6669 6c65 203c 2466 3e20 656e 6473 [\"file <$f> ends\n-0000c580: 2075 6e65 7870 6563 7465 6420 6174 206c unexpected at l\n-0000c590: 696e 6520 246c 696e 654e 7222 5d2c 0a09 ine $lineNr\"],..\n-0000c5a0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1\n-0000c5b0: 290a 0909 756e 6c65 7373 2024 6e65 774c )...unless $newL\n-0000c5c0: 696e 6b3b 0a09 2020 2020 6368 6f6d 7020 ink;.. chomp \n-0000c5d0: 246e 6577 4c69 6e6b 3b0a 0920 2020 2024 $newLink;.. $\n-0000c5e0: 6e65 774c 696e 6b20 3d7e 2073 2f5c 302f newLink =~ s/\\0/\n-0000c5f0: 5c6e 2f6f 673b 0a09 2020 2020 246e 6577 \\n/og;.. $new\n-0000c600: 4c69 6e6b 203d 2022 2464 6972 2f24 6e65 Link = \"$dir/$ne\n-0000c610: 774c 696e 6b22 3b0a 0920 2020 2024 6578 wLink\";.. $ex\n-0000c620: 6973 7469 6e67 4669 6c65 203d 2024 6d64 istingFile = $md\n-0000c630: 3554 6f46 696c 657b 246d 6435 7d20 6966 5ToFile{$md5} if\n-0000c640: 2065 7869 7374 7320 246d 6435 546f 4669 exists $md5ToFi\n-0000c650: 6c65 7b24 6d64 357d 3b0a 0920 2020 206d le{$md5};.. m\n-0000c660: 7920 2468 6c20 3d20 2d31 3b0a 0920 2020 y $hl = -1;.. \n-0000c670: 2069 6620 2824 6d61 7848 6172 644c 696e if ($maxHardLin\n-0000c680: 6b73 203e 2030 290a 0920 2020 207b 0a09 ks > 0).. {..\n-0000c690: 0924 686c 203d 2028 7374 6174 2824 6578 .$hl = (stat($ex\n-0000c6a0: 6973 7469 6e67 4669 6c65 2929 5b33 5d3b istingFile))[3];\n-0000c6b0: 0a23 7072 696e 7420 2224 6578 6973 7469 .#print \"$existi\n-0000c6c0: 6e67 4669 6c65 3a20 2468 6c20 6861 7264 ngFile: $hl hard\n-0000c6d0: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL\n-0000c6e0: 696e 6b73 295c 6e22 3b0a 0920 2020 207d inks)\\n\";.. }\n-0000c6f0: 0a09 2020 2020 6966 2028 2468 6c20 3c20 .. if ($hl < \n-0000c700: 246d 6178 4861 7264 4c69 6e6b 7320 616e $maxHardLinks an\n-0000c710: 6420 6c69 6e6b 2024 6578 6973 7469 6e67 d link $existing\n-0000c720: 4669 6c65 2c20 246e 6577 4c69 6e6b 290a File, $newLink).\n-0000c730: 0920 2020 207b 0a09 0924 6e6f 4861 7264 . {...$noHard\n-0000c740: 4c69 6e6b 732b 2b3b 0a09 0924 7072 4c6f Links++;...$prLo\n-0000c750: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000c760: 203d 3e20 2753 272c 0a09 0909 2020 2020 => 'S',.... \n-0000c770: 2020 272d 7374 7227 203d 3e20 5b22 6c69 '-str' => [\"li\n-0000c780: 6e6b 6564 2024 6e6f 4861 7264 4c69 6e6b nked $noHardLink\n-0000c790: 7320 6669 6c65 7322 5d29 0a09 0909 6966 s files\"])....if\n-0000c7a0: 2028 2470 7220 616e 6420 246e 6f48 6172 ($pr and $noHar\n-0000c7b0: 644c 696e 6b73 2025 2024 7072 203d 3d20 dLinks % $pr == \n-0000c7c0: 3029 3b0a 0920 2020 207d 0a09 2020 2020 0);.. }.. \n-0000c7d0: 656c 7365 0a09 2020 2020 7b0a 0909 2320 else.. {...# \n-0000c7e0: 636f 7079 2066 696c 650a 2020 2020 2020 copy file. \n-0000c7f0: 2020 2020 2020 2020 2020 756e 6c65 7373 unless\n-0000c800: 2028 263a 3a63 6f70 7946 696c 6528 2224 (&::copyFile(\"$\n-0000c810: 6578 6973 7469 6e67 4669 6c65 222c 2022 existingFile\", \"\n-0000c820: 246e 6577 4c69 6e6b 222c 2024 7072 4c6f $newLink\", $prLo\n-0000c830: 6729 290a 2020 2020 2020 2020 2020 2020 g)). \n-0000c840: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. \n-0000c850: 2020 2020 2020 2020 2020 2470 724c 6f67 $prLog\n-0000c860: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-0000c870: 3d3e 2027 4527 2c0a 2020 2020 2020 2020 => 'E',. \n-0000c880: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c890: 2020 2020 2020 2020 2020 272d 7374 7227 '-str'\n-0000c8a0: 203d 3e20 5b22 636f 756c 6420 6e6f 7420 => [\"could not \n-0000c8b0: 6c69 6e6b 2f63 6f70 7920 2220 2e0a 0909 link/copy \" ....\n-0000c8c0: 0909 0920 2020 2020 2224 6578 6973 7469 ... \"$existi\n-0000c8d0: 6e67 4669 6c65 2024 6e65 774c 696e 6b22 ngFile $newLink\"\n-0000c8e0: 5d29 3b0a 2309 0920 2020 2024 6d69 7373 ]);.#.. $miss\n-0000c8f0: 4c69 6e6b 732d 3e77 7269 7465 456e 7472 Links->writeEntr\n-0000c900: 7928 272d 6368 6563 6b73 756d 2720 3d3e y('-checksum' =>\n-0000c910: 2024 6d64 352c 0a23 0909 0909 0920 2020 $md5,.#..... \n-0000c920: 272d 6669 6c65 2720 3d3e 2024 6e65 774c '-file' => $newL\n-0000c930: 696e 6b29 3b0a 2020 2020 2020 2020 2020 ink);. \n-0000c940: 2020 2020 2020 2020 2020 6e65 7874 3b0a next;.\n-0000c950: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000c960: 7d0a 0909 246e 6f43 6f70 6965 6446 696c }...$noCopiedFil\n-0000c970: 6573 2b2b 3b0a 0909 246d 6435 546f 4669 es++;...$md5ToFi\n-0000c980: 6c65 7b24 6d64 357d 203d 2024 6e65 774c le{$md5} = $newL\n-0000c990: 696e 6b3b 0a09 2020 2020 7d0a 097d 0a09 ink;.. }..}..\n-0000c9a0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq \n-0000c9b0: 2764 6972 2729 0a09 7b0a 097d 0a09 656c 'dir')..{..}..el\n-0000c9c0: 7369 6620 2824 7768 6174 2065 7120 2763 sif ($what eq 'c\n-0000c9d0: 6f6d 7072 6573 7327 206f 7220 2477 6861 ompress' or $wha\n-0000c9e0: 7420 6571 2027 7379 6d6c 696e 6b27 290a t eq 'symlink').\n-0000c9f0: 097b 0a09 2020 2020 6d79 2024 6669 6c65 .{.. my $file\n-0000ca00: 203d 2024 6c69 6e6b 4669 6c65 2d3e 7265 = $linkFile->re\n-0000ca10: 6164 2829 3b0a 0920 2020 2024 7072 4c6f ad();.. $prLo\n-0000ca20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000ca30: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n-0000ca40: 7374 7227 203d 3e20 5b22 6669 6c65 203c str' => [\"file <\n-0000ca50: 2466 3e20 656e 6473 2075 6e65 7870 6563 $f> ends unexpec\n-0000ca60: 7465 6420 6174 206c 696e 6520 246c 696e ted at line $lin\n-0000ca70: 654e 7222 5d2c 0a09 0909 2020 272d 6578 eNr\"],.... '-ex\n-0000ca80: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle\n-0000ca90: 7373 2024 6669 6c65 3b0a 097d 0a09 656c ss $file;..}..el\n-0000caa0: 7369 6620 2824 7768 6174 2065 7120 276c sif ($what eq 'l\n-0000cab0: 696e 6b53 796d 6c69 6e6b 2729 0a09 7b0a inkSymlink')..{.\n-0000cac0: 0920 2020 206d 7920 2465 7869 7374 696e . my $existin\n-0000cad0: 6746 696c 6520 3d20 246c 696e 6b46 696c gFile = $linkFil\n-0000cae0: 652d 3e72 6561 6428 293b 0a09 2020 2020 e->read();.. \n-0000caf0: 2465 7869 7374 696e 6746 696c 6520 3d20 $existingFile = \n-0000cb00: 2224 6469 722f 2465 7869 7374 696e 6746 \"$dir/$existingF\n-0000cb10: 696c 6522 3b0a 0920 2020 2024 7072 4c6f ile\";.. $prLo\n-0000cb20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000cb30: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '-\n-0000cb40: 7374 7227 203d 3e20 5b22 6669 6c65 203c str' => [\"file <\n-0000cb50: 2466 3e20 656e 6473 2075 6e65 7870 6563 $f> ends unexpec\n-0000cb60: 7465 6420 6174 206c 696e 6520 246c 696e ted at line $lin\n-0000cb70: 654e 7222 5d2c 0a09 0909 2020 272d 6578 eNr\"],.... '-ex\n-0000cb80: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle\n-0000cb90: 7373 2024 6578 6973 7469 6e67 4669 6c65 ss $existingFile\n-0000cba0: 3b0a 0920 2020 2063 686f 6d70 2024 6578 ;.. chomp $ex\n-0000cbb0: 6973 7469 6e67 4669 6c65 3b0a 0920 2020 istingFile;.. \n-0000cbc0: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile =\n-0000cbd0: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0a09 ~ s/\\0/\\n/og;...\n-0000cbe0: 2020 2020 6d79 2024 6e65 774c 696e 6b20 my $newLink \n-0000cbf0: 3d20 246c 696e 6b46 696c 652d 3e72 6561 = $linkFile->rea\n-0000cc00: 6428 293b 0a09 2020 2020 2470 724c 6f67 d();.. $prLog\n-0000cc10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-0000cc20: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s\n-0000cc30: 7472 2720 3d3e 205b 2266 696c 6520 3c24 tr' => [\"file <$\n-0000cc40: 663e 2065 6e64 7320 756e 6578 7065 6374 f> ends unexpect\n-0000cc50: 6564 2061 7420 6c69 6e65 2024 6c69 6e65 ed at line $line\n-0000cc60: 4e72 225d 2c0a 0909 0920 2027 2d65 7869 Nr\"],.... '-exi\n-0000cc70: 7427 203d 3e20 3129 0a09 0975 6e6c 6573 t' => 1)...unles\n-0000cc80: 7320 246e 6577 4c69 6e6b 3b0a 0920 2020 s $newLink;.. \n-0000cc90: 2063 686f 6d70 2024 6e65 774c 696e 6b3b chomp $newLink;\n-0000cca0: 0a09 2020 2020 246e 6577 4c69 6e6b 203d .. $newLink =\n-0000ccb0: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 ~ s/\\0/\\n/og;.. \n-0000ccc0: 2020 2024 6e65 774c 696e 6b20 3d20 2224 $newLink = \"$\n-0000ccd0: 6469 722f 246e 6577 4c69 6e6b 223b 0a09 dir/$newLink\";..\n-0000cce0: 2020 2020 6d79 2024 686c 203d 202d 313b my $hl = -1;\n-0000ccf0: 0a09 2020 2020 6966 2028 246d 6178 4861 .. if ($maxHa\n-0000cd00: 7264 4c69 6e6b 7320 203e 2030 290a 0920 rdLinks > 0).. \n-0000cd10: 2020 207b 0a09 0924 686c 203d 2028 6c73 {...$hl = (ls\n-0000cd20: 7461 7428 2465 7869 7374 696e 6746 696c tat($existingFil\n-0000cd30: 6529 295b 335d 3b0a 2370 7269 6e74 2022 e))[3];.#print \"\n-0000cd40: 2465 7869 7374 696e 6746 696c 653a 2024 $existingFile: $\n-0000cd50: 686c 2068 6172 646c 696e 6b73 206f 6e20 hl hardlinks on \n-0000cd60: 7379 6d6c 696e 6b73 2028 246d 6178 4861 symlinks ($maxHa\n-0000cd70: 7264 4c69 6e6b 7329 5c6e 223b 0a09 2020 rdLinks)\\n\";.. \n-0000cd80: 2020 7d0a 0920 2020 2069 6620 2824 686c }.. if ($hl\n-0000cd90: 203c 2024 6d61 7848 6172 644c 696e 6b73 < $maxHardLinks\n-0000cda0: 2061 6e64 206c 696e 6b20 2465 7869 7374 and link $exist\n-0000cdb0: 696e 6746 696c 652c 2024 6e65 774c 696e ingFile, $newLin\n-0000cdc0: 6b29 0a09 2020 2020 7b0a 0909 246e 6f48 k).. {...$noH\n-0000cdd0: 6172 644c 696e 6b73 2b2b 3b0a 0909 2470 ardLinks++;...$p\n-0000cde0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0000cdf0: 6e64 2720 3d3e 2027 5327 2c0a 0909 0920 nd' => 'S',.... \n-0000ce00: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-0000ce10: 226c 696e 6b65 6420 246e 6f48 6172 644c \"linked $noHardL\n-0000ce20: 696e 6b73 2066 696c 6573 225d 290a 0909 inks files\"])...\n-0000ce30: 0969 6620 2824 7072 2061 6e64 2024 6e6f .if ($pr and $no\n-0000ce40: 4861 7264 4c69 6e6b 7320 2520 2470 7220 HardLinks % $pr \n-0000ce50: 3d3d 2030 293b 0a09 2020 2020 7d0a 0920 == 0);.. }.. \n-0000ce60: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n-0000ce70: 0923 2063 7265 6174 6520 7379 6d6c 696e .# create symlin\n-0000ce80: 6b0a 0909 2470 724c 6f67 2d3e 7072 696e k...$prLog->prin\n-0000ce90: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E'\n-0000cea0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str\n-0000ceb0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [\"\n-0000cec0: 6361 6e6e 6f74 2063 7265 6174 6520 7379 cannot create sy\n-0000ced0: 6d6c 696e 6b20 6672 6f6d 203c 246e 6577 mlink from <$new\n-0000cee0: 4c69 6e6b 3e20 2d3e 203c 246d 6435 3e22 Link> -> <$md5>\"\n-0000cef0: 5d29 0a09 0975 6e6c 6573 7320 7379 6d6c ])...unless syml\n-0000cf00: 696e 6b20 246d 6435 2c20 246e 6577 4c69 ink $md5, $newLi\n-0000cf10: 6e6b 3b0a 0920 2020 2024 6e6f 5379 6d4c nk;.. $noSymL\n-0000cf20: 696e 6b2b 2b3b 0a09 2020 2020 7d0a 097d ink++;.. }..}\n-0000cf30: 0a09 656c 7369 6620 2824 7768 6174 2065 ..elsif ($what e\n-0000cf40: 7120 276c 696e 6b62 6c6f 636b 2729 0a09 q 'linkblock')..\n-0000cf50: 7b0a 0920 2020 206d 7920 2465 7869 7374 {.. my $exist\n-0000cf60: 696e 6746 696c 6520 3d20 246c 696e 6b46 ingFile = $linkF\n-0000cf70: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. \n-0000cf80: 2020 2465 7869 7374 696e 6746 696c 6520 $existingFile \n-0000cf90: 3d20 2224 6469 722f 2465 7869 7374 696e = \"$dir/$existin\n-0000cfa0: 6746 696c 6522 3b0a 0920 2020 2024 7072 gFile\";.. $pr\n-0000cfb0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0000cfc0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n-0000cfd0: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => [\"file\n-0000cfe0: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp\n-0000cff0: 6563 7465 6420 6174 206c 696e 6520 246c ected at line $l\n-0000d000: 696e 654e 7222 5d2c 0a09 0909 2020 272d ineNr\"],.... '-\n-0000d010: 6578 6974 2720 3d3e 2031 290a 0909 756e exit' => 1)...un\n-0000d020: 6c65 7373 2024 6578 6973 7469 6e67 4669 less $existingFi\n-0000d030: 6c65 3b0a 0920 2020 2063 686f 6d70 2024 le;.. chomp $\n-0000d040: 6578 6973 7469 6e67 4669 6c65 3b0a 0920 existingFile;.. \n-0000d050: 2020 2024 6578 6973 7469 6e67 4669 6c65 $existingFile\n-0000d060: 203d 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a =~ s/\\0/\\n/og;.\n-0000d070: 0a09 2020 2020 6d79 2024 6e65 774c 696e .. my $newLin\n-0000d080: 6b20 3d20 246c 696e 6b46 696c 652d 3e72 k = $linkFile->r\n-0000d090: 6561 6428 293b 0a09 2020 2020 246e 6577 ead();.. $new\n-0000d0a0: 4c69 6e6b 203d 2022 2464 6972 2f24 6e65 Link = \"$dir/$ne\n-0000d0b0: 774c 696e 6b22 3b0a 0920 2020 2024 7072 wLink\";.. $pr\n-0000d0c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin\n-0000d0d0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... \n-0000d0e0: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => [\"file\n-0000d0f0: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp\n-0000d100: 6563 7465 6420 6174 206c 696e 6520 246c ected at line $l\n-0000d110: 696e 654e 7222 5d2c 0a09 0909 2020 272d ineNr\"],.... '-\n-0000d120: 6578 6974 2720 3d3e 2031 290a 0909 756e exit' => 1)...un\n-0000d130: 6c65 7373 2024 6e65 774c 696e 6b3b 0a09 less $newLink;..\n-0000d140: 2020 2020 6368 6f6d 7020 246e 6577 4c69 chomp $newLi\n-0000d150: 6e6b 3b0a 0920 2020 2024 6e65 774c 696e nk;.. $newLin\n-0000d160: 6b20 3d7e 2073 2f5c 302f 5c6e 2f6f 673b k =~ s/\\0/\\n/og;\n-0000d170: 0a0a 0920 2020 2024 6e6f 4861 7264 4c69 ... $noHardLi\n-0000d180: 6e6b 7320 2b3d 0a09 0926 3a3a 6861 7264 nks +=...&::hard\n-0000d190: 4c69 6e6b 4469 7228 2465 7869 7374 696e LinkDir($existin\n-0000d1a0: 6746 696c 652c 2024 6e65 774c 696e 6b2c gFile, $newLink,\n-0000d1b0: 2027 5c41 5c64 2e2a 272c 0a09 0909 2020 '\\A\\d.*',.... \n-0000d1c0: 2020 2020 2075 6e64 6566 2c20 756e 6465 undef, unde\n-0000d1d0: 662c 2075 6e64 6566 2c20 2470 724c 6f67 f, undef, $prLog\n-0000d1e0: 2c20 246d 6178 4861 7264 4c69 6e6b 732c , $maxHardLinks,\n-0000d1f0: 0a09 0909 2020 2020 2020 2022 2e6d 6435 .... \".md5\n-0000d200: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b\n-0000d210: 7a32 2229 3b0a 0a09 2020 2020 6966 2028 z2\");... if (\n-0000d220: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile\n-0000d230: 7329 0a09 2020 2020 7b0a 0909 6d79 2024 s).. {...my $\n-0000d240: 626c 6f63 6b4c 6f63 616c 203d 0a09 0920 blockLocal =... \n-0000d250: 2020 2070 6970 6546 726f 6d46 6f72 6b2d pipeFromFork-\n-0000d260: 3e6e 6577 2827 2d65 7865 6327 203d 3e20 >new('-exec' => \n-0000d270: 2762 7a69 7032 272c 0a09 0909 0920 2020 'bzip2',..... \n-0000d280: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [\n-0000d290: 272d 6427 5d2c 0a09 0909 0920 2020 2020 '-d'],..... \n-0000d2a0: 2027 2d73 7464 696e 2720 3d3e 2022 246e '-stdin' => \"$n\n-0000d2b0: 6577 4c69 6e6b 2f2e 6d64 3542 6c6f 636b ewLink/.md5Block\n-0000d2c0: 4368 6563 6b53 756d 732e 627a 3222 2c0a CheckSums.bz2\",.\n-0000d2d0: 0909 0909 2020 2020 2020 272d 6f75 7452 .... '-outR\n-0000d2e0: 616e 646f 6d27 203d 3e20 272f 746d 702f andom' => '/tmp/\n-0000d2f0: 7374 6275 5069 7065 4672 6f6d 3132 2d27 stbuPipeFrom12-'\n-0000d300: 2c0a 0909 0909 2020 2020 2020 272d 7072 ,..... '-pr\n-0000d310: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-0000d320: 0a0a 0909 6d79 2024 6c3b 0a09 0977 6869 ....my $l;...whi\n-0000d330: 6c65 2028 246c 203d 2024 626c 6f63 6b4c le ($l = $blockL\n-0000d340: 6f63 616c 2d3e 7265 6164 2829 290a 0909 ocal->read())...\n-0000d350: 7b0a 0909 2020 2020 7072 696e 7420 424c {... print BL\n-0000d360: 4f43 4b4d 4435 2024 6c3b 0a09 097d 0a09 OCKMD5 $l;...}..\n-0000d370: 0924 626c 6f63 6b4c 6f63 616c 2d3e 7761 .$blockLocal->wa\n-0000d380: 6974 2829 3b0a 0909 6d79 2024 6f75 7420 it();...my $out \n-0000d390: 3d20 2462 6c6f 636b 4c6f 6361 6c2d 3e67 = $blockLocal->g\n-0000d3a0: 6574 5354 4445 5252 2829 3b0a 0909 6966 etSTDERR();...if\n-0000d3b0: 2028 4024 6f75 7429 0a09 097b 0a09 0920 (@$out)...{... \n-0000d3c0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print\n-0000d3d0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E',\n-0000d3e0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' =>\n-0000d3f0: 205b 2272 6561 6469 6e67 206c 696e 6b46 [\"reading linkF\n-0000d400: 696c 6520 6669 6c65 2072 6570 6f72 7473 ile file reports\n-0000d410: 2065 7272 6f72 733a 222c 0a09 0909 0909 errors:\",......\n-0000d420: 2020 2020 2040 246f 7574 5d29 3b0a 0909 @$out]);...\n-0000d430: 2020 2020 6578 6974 2031 3b0a 0909 7d0a exit 1;...}.\n-0000d440: 0909 2462 6c6f 636b 4c6f 6361 6c2d 3e63 ..$blockLocal->c\n-0000d450: 6c6f 7365 2829 3b0a 0920 2020 207d 0a09 lose();.. }..\n-0000d460: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. \n-0000d470: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-0000d480: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',...\n-0000d490: 0920 2027 2d73 7472 2720 3d3e 205b 2269 . '-str' => [\"i\n-0000d4a0: 6c6c 6567 616c 206b 6579 776f 7264 203c llegal keyword <\n-0000d4b0: 2477 6861 743e 2022 202e 0a09 0909 0920 $what> \" ...... \n-0000d4c0: 2020 2020 2261 7420 6c69 6e65 2024 6c69 \"at line $li\n-0000d4d0: 6e65 4e72 2069 6e20 6669 6c65 203c 2466 neNr in file <$f\n-0000d4e0: 3e3a 222c 0a09 0909 2020 2020 2020 2020 >:\",.... \n-0000d4f0: 2020 2020 2022 5c74 3c24 6c3e 225d 2c0a \"\\t<$l>\"],.\n-0000d500: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => \n-0000d510: 3129 3b0a 097d 0a0a 2020 2020 7d0a 2020 1);..}.. }. \n-0000d520: 2020 6966 2028 2477 6974 6842 6c6f 636b if ($withBlock\n-0000d530: 6564 4669 6c65 7329 0a20 2020 207b 0a09 edFiles). {..\n-0000d540: 636c 6f73 6528 424c 4f43 4b4d 4435 2920 close(BLOCKMD5) \n-0000d550: 6f72 0a09 2020 2020 2470 724c 6f67 2d3e or.. $prLog->\n-0000d560: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000d570: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-0000d580: 2720 3d3e 0a09 0909 2020 5b22 6361 6e6e ' =>.... [\"cann\n-0000d590: 6f74 2063 6c6f 7365 2066 696c 6520 3c24 ot close file <$\n-0000d5a0: 6469 722f 2e6d 6435 426c 6f63 6b43 6865 dir/.md5BlockChe\n-0000d5b0: 636b 5375 6d73 3e22 5d2c 0a09 0909 2020 ckSums>\"],.... \n-0000d5c0: 272d 6578 6974 2720 3d3e 2031 293b 0a20 '-exit' => 1);. \n-0000d5d0: 2020 207d 0a20 2020 2024 6c69 6e6b 4669 }. $linkFi\n-0000d5e0: 6c65 2d3e 7761 6974 2829 3b0a 2020 2020 le->wait();. \n-0000d5f0: 246f 7574 203d 2024 6c69 6e6b 4669 6c65 $out = $linkFile\n-0000d600: 2d3e 6765 7453 5444 4552 5228 293b 0a20 ->getSTDERR();. \n-0000d610: 2020 2069 6620 2840 246f 7574 290a 2020 if (@$out). \n-0000d620: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri\n-0000d630: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-0000d640: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str\n-0000d650: 2720 3d3e 205b 2272 6561 6469 6e67 206c ' => [\"reading l\n-0000d660: 696e 6b46 696c 6520 6669 6c65 2072 6570 inkFile file rep\n-0000d670: 6f72 7473 2065 7272 6f72 733a 222c 0a09 orts errors:\",..\n-0000d680: 0909 0920 4024 6f75 745d 293b 0a09 6578 ... @$out]);..ex\n-0000d690: 6974 2031 3b0a 2020 2020 7d0a 2020 2020 it 1;. }. \n-0000d6a0: 246c 696e 6b46 696c 652d 3e63 6c6f 7365 $linkFile->close\n-0000d6b0: 2829 3b0a 2020 2020 2470 724c 6f67 2d3e ();. $prLog->\n-0000d6c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000d6d0: 2027 5327 2c0a 0909 2020 272d 7374 7227 'S',... '-str'\n-0000d6e0: 203d 3e20 5b22 6c69 6e6b 6564 2024 6e6f => [\"linked $no\n-0000d6f0: 4861 7264 4c69 6e6b 7320 6669 6c65 7322 HardLinks files\"\n-0000d700: 5d29 3b0a 2020 2020 2470 724c 6f67 2d3e ]);. $prLog->\n-0000d710: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000d720: 2027 5327 2c0a 0909 2020 272d 7374 7227 'S',... '-str'\n-0000d730: 203d 3e20 5b22 636f 7069 6564 2024 6e6f => [\"copied $no\n-0000d740: 436f 7069 6564 4669 6c65 7320 6669 6c65 CopiedFiles file\n-0000d750: 7322 5d29 0a09 6966 2024 6e6f 436f 7069 s\"])..if $noCopi\n-0000d760: 6564 4669 6c65 733b 0a0a 2020 2020 6d79 edFiles;.. my\n-0000d770: 2024 636f 6d70 724d 6435 426c 6f63 6b43 $comprMd5BlockC\n-0000d780: 6865 636b 5375 6d73 3b0a 2020 2020 6966 heckSums;. if\n-0000d790: 2028 2477 6974 6842 6c6f 636b 6564 4669 ($withBlockedFi\n-0000d7a0: 6c65 7320 616e 6420 2d65 2022 2464 6972 les and -e \"$dir\n-0000d7b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2e62 /.md5CheckSums.b\n-0000d7c0: 7a32 2229 0a20 2020 207b 0a09 2320 636f z2\"). {..# co\n-0000d7d0: 6d70 7265 7373 202e 6d64 3542 6c6f 636b mpress .md5Block\n-0000d7e0: 4368 6563 6b53 756d 730a 0924 636f 6d70 CheckSums..$comp\n-0000d7f0: 724d 6435 426c 6f63 6b43 6865 636b 5375 rMd5BlockCheckSu\n-0000d800: 6d73 203d 0a09 2020 2020 666f 726b 5072 ms =.. forkPr\n-0000d810: 6f63 2d3e 6e65 7728 272d 6578 6563 2720 oc->new('-exec' \n-0000d820: 3d3e 2027 627a 6970 3227 2c0a 0909 0920 => 'bzip2',.... \n-0000d830: 2027 2d70 6172 616d 2720 3d3e 205b 2224 '-param' => [\"$\n-0000d840: 6469 722f 2e6d 6435 426c 6f63 6b43 6865 dir/.md5BlockChe\n-0000d850: 636b 5375 6d73 225d 2c0a 0909 0920 2027 ckSums\"],.... '\n-0000d860: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>..\n-0000d870: 0909 2020 272f 746d 702f 7374 6275 2d63 .. '/tmp/stbu-c\n-0000d880: 6f6d 7072 2d27 2c0a 0909 0920 2027 2d70 ompr-',.... '-p\n-0000d890: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog)\n-0000d8a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 0a20 ;. }.. #. \n-0000d8b0: 2020 2023 2073 6574 2066 696c 6520 7065 # set file pe\n-0000d8c0: 726d 6973 7369 6f6e 730a 2020 2020 230a rmissions. #.\n-0000d8d0: 2020 2020 6d79 2024 7072 6573 6572 7665 my $preserve\n-0000d8e0: 5065 726d 7320 3d0a 0924 7263 7366 2d3e Perms =..$rcsf->\n-0000d8f0: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar('\n-0000d900: 7072 6573 6572 7665 5065 726d 7327 2920 preservePerms') \n-0000d910: 6571 2027 6e6f 2720 3f20 3020 3a20 313b eq 'no' ? 0 : 1;\n-0000d920: 0a20 2020 2024 7072 203d 2024 7072 6f67 . $pr = $prog\n-0000d930: 7265 7373 5265 706f 7274 202a 2032 3030 ressReport * 200\n-0000d940: 303b 0a20 2020 2069 6620 2824 7072 6573 0;. if ($pres\n-0000d950: 6572 7665 5065 726d 7329 0a20 2020 207b ervePerms). {\n-0000d960: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-0000d970: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',.\n-0000d980: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0000d990: 3e20 5b22 7068 6173 6520 333a 2073 6574 > [\"phase 3: set\n-0000d9a0: 7469 6e67 2066 696c 6520 7065 726d 6973 ting file permis\n-0000d9b0: 7369 6f6e 7322 5d29 3b0a 096d 7920 2463 sions\"]);..my $c\n-0000d9c0: 6f6d 7072 506f 7374 6669 7820 3d20 2472 omprPostfix = $r\n-0000d9d0: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith\n-0000d9e0: 5061 7228 2770 6f73 7466 6978 2729 3b0a Par('postfix');.\n-0000d9f0: 0a09 6d79 2024 6e6f 4669 6c65 7320 3d20 ..my $noFiles = \n-0000da00: 303b 0a09 6d79 2024 7263 7366 203d 2072 0;..my $rcsf = r\n-0000da10: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile-\n-0000da20: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF\n-0000da30: 696c 6527 203d 3e20 2224 6469 722f 2e6d ile' => \"$dir/.m\n-0000da40: 6435 4368 6563 6b53 756d 7322 2c0a 0909 d5CheckSums\",...\n-0000da50: 0909 0920 272d 7072 4c6f 6727 203d 3e20 ... '-prLog' => \n-0000da60: 2470 724c 6f67 293b 0a09 6d79 2028 246d $prLog);..my ($m\n-0000da70: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $\n-0000da80: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode\n-0000da90: 4261 636b 7570 2c20 2463 7469 6d65 2c20 Backup, $ctime, \n-0000daa0: 246d 7469 6d65 2c20 2461 7469 6d65 2c0a $mtime, $atime,.\n-0000dab0: 0920 2020 2024 7369 7a65 2c20 2475 6964 . $size, $uid\n-0000dac0: 2c20 2467 6964 2c20 246d 6f64 652c 2024 , $gid, $mode, $\n-0000dad0: 6629 3b0a 0977 6869 6c65 2028 2828 246d f);..while ((($m\n-0000dae0: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $\n-0000daf0: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode\n-0000db00: 4261 636b 7570 2c20 2463 7469 6d65 2c20 Backup, $ctime, \n-0000db10: 246d 7469 6d65 2c0a 0909 2024 6174 696d $mtime,... $atim\n-0000db20: 652c 2024 7369 7a65 2c20 2475 6964 2c20 e, $size, $uid, \n-0000db30: 2467 6964 2c20 246d 6f64 652c 2024 6629 $gid, $mode, $f)\n-0000db40: 203d 2024 7263 7366 2d3e 6e65 7874 4c69 = $rcsf->nextLi\n-0000db50: 6e65 2829 2920 3e20 3029 0a09 7b0a 0920 ne()) > 0)..{.. \n-0000db60: 2020 206d 7920 2466 696c 6520 3d20 2224 my $file = \"$\n-0000db70: 6469 722f 2466 223b 0a09 2020 2020 6e65 dir/$f\";.. ne\n-0000db80: 7874 2069 6620 2824 6d64 3573 756d 2065 xt if ($md5sum e\n-0000db90: 7120 2764 6972 2729 3b0a 0a09 2020 2020 q 'dir');... \n-0000dba0: 2466 696c 6520 2e3d 2024 636f 6d70 7250 $file .= $comprP\n-0000dbb0: 6f73 7466 6978 2069 6620 2463 6f6d 7072 ostfix if $compr\n-0000dbc0: 2065 7120 2763 273b 0a0a 0920 2020 2069 eq 'c';... i\n-0000dbd0: 6620 286e 6f74 202d 6c20 2466 696c 6520 f (not -l $file \n-0000dbe0: 616e 6420 6e6f 7420 2d65 2024 6669 6c65 and not -e $file\n-0000dbf0: 290a 0920 2020 207b 0a09 0924 7072 4c6f ).. {...$prLo\n-0000dc00: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000dc10: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... \n-0000dc20: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => [\"ca\n-0000dc30: 6e6e 6f74 2061 6363 6573 7320 3c24 6669 nnot access <$fi\n-0000dc40: 6c65 3e22 5d29 3b0a 0909 246d 6973 734c le>\"]);...$missL\n-0000dc50: 696e 6b73 2d3e 7772 6974 6545 6e74 7279 inks->writeEntry\n-0000dc60: 2827 2d63 6865 636b 7375 6d27 203d 3e20 ('-checksum' => \n-0000dc70: 246d 6435 7375 6d2c 0a09 0909 0920 2020 $md5sum,..... \n-0000dc80: 2020 2020 272d 6669 6c65 2720 3d3e 2024 '-file' => $\n-0000dc90: 6629 3b0a 0909 6e65 7874 3b0a 0920 2020 f);...next;.. \n-0000dca0: 207d 0a09 2020 2020 246e 6f46 696c 6573 }.. $noFiles\n-0000dcb0: 2b2b 3b0a 0920 2020 2024 7072 4c6f 672d ++;.. $prLog-\n-0000dcc0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-0000dcd0: 3e20 2753 272c 0a09 0909 2020 272d 7374 > 'S',.... '-st\n-0000dce0: 7227 203d 3e20 5b22 7365 7420 7065 726d r' => [\"set perm\n-0000dcf0: 6973 7369 6f6e 7320 6f66 2024 6e6f 4669 issions of $noFi\n-0000dd00: 6c65 7320 6669 6c65 7322 5d29 0a09 0909 les files\"])....\n-0000dd10: 6966 2028 2470 7220 616e 6420 246e 6f46 if ($pr and $noF\n-0000dd20: 696c 6573 2025 2024 7072 203d 3d20 3029 iles % $pr == 0)\n-0000dd30: 3b0a 0a09 2020 2020 6e65 7874 2069 6620 ;... next if \n-0000dd40: 246d 6435 7375 6d20 6571 2027 7379 6d6c $md5sum eq 'syml\n-0000dd50: 696e 6b27 3b0a 0a09 2020 2020 7574 696d ink';... utim\n-0000dd60: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime\n-0000dd70: 2c20 2466 696c 653b 0a09 2020 2020 6368 , $file;.. ch\n-0000dd80: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, \n-0000dd90: 2466 696c 653b 0a09 2020 2020 6966 2028 $file;.. if (\n-0000dda0: 2463 6f6d 7072 2065 7120 2762 2729 2020 $compr eq 'b') \n-0000ddb0: 2020 2020 2020 2023 2062 6c6f 636b 2066 # block f\n-0000ddc0: 696c 650a 0920 2020 207b 0a09 096c 6f63 ile.. {...loc\n-0000ddd0: 616c 202a 4246 4449 523b 0a09 0969 6620 al *BFDIR;...if \n-0000dde0: 286f 7065 6e64 6972 2842 4644 4952 2c20 (opendir(BFDIR, \n-0000ddf0: 2466 696c 6529 290a 0909 7b0a 0909 2020 $file))...{... \n-0000de00: 2020 6d79 2024 6266 656e 7472 793b 0a09 my $bfentry;..\n-0000de10: 0920 2020 2077 6869 6c65 2028 2462 6665 . while ($bfe\n-0000de20: 6e74 7279 203d 2072 6561 6464 6972 2042 ntry = readdir B\n-0000de30: 4644 4952 290a 0909 2020 2020 7b0a 0909 FDIR)... {...\n-0000de40: 0969 6620 2824 6266 656e 7472 7920 3d7e .if ($bfentry =~\n-0000de50: 202f 5c41 5c2e 6d64 3542 6c6f 636b 4368 /\\A\\.md5BlockCh\n-0000de60: 6563 6b53 756d 732f 290a 0909 097b 0a09 eckSums/)....{..\n-0000de70: 0909 2020 2020 6368 6d6f 6420 3036 3434 .. chmod 0644\n-0000de80: 2c20 2224 6669 6c65 2f24 6266 656e 7472 , \"$file/$bfentr\n-0000de90: 7922 3b0a 0909 097d 0a09 0909 656c 7365 y\";....}....else\n-0000dea0: 0a09 0909 7b0a 0909 0920 2020 2075 7469 ....{.... uti\n-0000deb0: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim\n-0000dec0: 652c 2022 2466 696c 652f 2462 6665 6e74 e, \"$file/$bfent\n-0000ded0: 7279 223b 0a09 0909 2020 2020 6368 6f77 ry\";.... chow\n-0000dee0: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, \"$\n-0000def0: 6669 6c65 2f24 6266 656e 7472 7922 3b0a file/$bfentry\";.\n-0000df00: 0909 0920 2020 2063 686d 6f64 2024 6d6f ... chmod $mo\n-0000df10: 6465 2c20 2224 6669 6c65 2f24 6266 656e de, \"$file/$bfen\n-0000df20: 7472 7922 3b0a 0909 097d 0a09 0909 246e try\";....}....$n\n-0000df30: 6f46 696c 6573 2b2b 3b0a 0909 2020 2020 oFiles++;... \n-0000df40: 7d0a 0909 2020 2020 636c 6f73 6564 6972 }... closedir\n-0000df50: 2842 4644 4952 293b 0a09 097d 0a09 0965 (BFDIR);...}...e\n-0000df60: 6c73 650a 0909 7b0a 0909 2020 2020 2470 lse...{... $p\n-0000df70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0000df80: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',.....\n-0000df90: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>.....\n-0000dfa0: 2020 5b22 6361 6e6e 6f74 206f 7065 6e64 [\"cannot opend\n-0000dfb0: 6972 203c 2466 696c 653e 2074 6f20 7365 ir <$file> to se\n-0000dfc0: 7420 7065 726d 6973 7369 6f6e 7322 5d2c t permissions\"],\n-0000dfd0: 0a09 0909 0920 2027 2d61 6464 2720 3d3e ..... '-add' =>\n-0000dfe0: 205b 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 [__FILE__, __LI\n-0000dff0: 4e45 5f5f 5d29 3b0a 0909 7d0a 0a09 0924 NE__]);...}....$\n-0000e000: 6d6f 6465 2026 3d20 3037 3737 3b20 2020 mode &= 0777; \n-0000e010: 2023 2073 7472 6970 2073 7065 6369 616c # strip special\n-0000e020: 2070 6572 6d69 7373 696f 6e73 0a09 0924 permissions...$\n-0000e030: 6d6f 6465 207c 3d20 3031 3131 3b20 2020 mode |= 0111; \n-0000e040: 2023 2061 6464 2064 6972 6563 746f 7279 # add directory\n-0000e050: 2070 6572 6d69 7373 696f 6e73 0a09 2020 permissions.. \n-0000e060: 2020 7d0a 0920 2020 2063 686d 6f64 2024 }.. chmod $\n-0000e070: 6d6f 6465 2c20 2466 696c 653b 0a09 7d0a mode, $file;..}.\n-0000e080: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print(\n-0000e090: 272d 6b69 6e64 2720 3d3e 2027 5327 2c0a '-kind' => 'S',.\n-0000e0a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-0000e0b0: 3e20 5b22 7365 7420 7065 726d 6973 7369 > [\"set permissi\n-0000e0c0: 6f6e 7320 666f 7220 246e 6f46 696c 6573 ons for $noFiles\n-0000e0d0: 2066 696c 6573 225d 293b 0a20 2020 207d files\"]);. }\n-0000e0e0: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {.\n-0000e0f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0000e100: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-0000e110: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-0000e120: 205b 2270 6861 7365 2033 3a20 6669 6c65 [\"phase 3: file\n-0000e130: 2070 6572 6d69 7373 696f 6e73 206e 6f74 permissions not\n-0000e140: 2073 6574 2062 6563 6175 7365 2022 202e set because \" .\n-0000e150: 0a09 0909 0920 2270 7265 7365 7276 6550 ..... \"preserveP\n-0000e160: 6572 6d73 206e 6f74 2073 6574 2069 6e20 erms not set in \n-0000e170: 7374 6f72 6542 6163 6b75 702e 706c 225d storeBackup.pl\"]\n-0000e180: 293b 0a20 2020 207d 0a0a 2020 2020 6966 );. }.. if\n-0000e190: 2028 2477 6974 6842 6c6f 636b 6564 4669 ($withBlockedFi\n-0000e1a0: 6c65 7320 616e 6420 2d65 2022 2464 6972 les and -e \"$dir\n-0000e1b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2e62 /.md5CheckSums.b\n-0000e1c0: 7a32 2229 0a20 2020 207b 0a09 2320 636f z2\"). {..# co\n-0000e1d0: 6d70 7265 7373 202e 6d64 3542 6c6f 636b mpress .md5Block\n-0000e1e0: 4368 6563 6b53 756d 730a 0924 636f 6d70 CheckSums..$comp\n-0000e1f0: 724d 6435 426c 6f63 6b43 6865 636b 5375 rMd5BlockCheckSu\n-0000e200: 6d73 2d3e 7761 6974 2829 3b0a 096d 7920 ms->wait();..my \n-0000e210: 246f 7574 203d 2024 636f 6d70 724d 6435 $out = $comprMd5\n-0000e220: 426c 6f63 6b43 6865 636b 5375 6d73 2d3e BlockCheckSums->\n-0000e230: 6765 7453 5444 4f55 5428 293b 0a09 2470 getSTDOUT();..$p\n-0000e240: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-0000e250: 6e64 2720 3d3e 2027 5727 2c0a 0909 2020 nd' => 'W',... \n-0000e260: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [\"\n-0000e270: 5354 4445 5252 206f 6620 3c75 6e61 6d65 STDERR of :\", @$out]).. \n-0000e290: 2020 6966 2028 4024 6f75 7420 3e20 3029 if (@$out > 0)\n-0000e2a0: 3b0a 0924 6f75 7420 3d20 2463 6f6d 7072 ;..$out = $compr\n-0000e2b0: 4d64 3542 6c6f 636b 4368 6563 6b53 756d Md5BlockCheckSum\n-0000e2c0: 732d 3e67 6574 5354 4445 5252 2829 3b0a s->getSTDERR();.\n-0000e2d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-0000e2e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-0000e2f0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-0000e300: 205b 2253 5444 4552 5220 6f66 203c 756e [\"STDERR of :\", @$out]).\n-0000e320: 0920 2020 2069 6620 2840 246f 7574 203e . if (@$out >\n-0000e330: 2030 293b 0a20 2020 207d 0a0a 2020 2020 0);. }.. \n-0000e340: 230a 2020 2020 2320 7365 7420 6469 7265 #. # set dire\n-0000e350: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission\n-0000e360: 730a 2020 2020 230a 2020 2020 6966 2028 s. #. if (\n-0000e370: 2470 7265 7365 7276 6550 6572 6d73 290a $preservePerms).\n-0000e380: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p\n-0000e390: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-0000e3a0: 2749 272c 0a09 0920 2020 2020 2027 2d73 'I',... '-s\n-0000e3b0: 7472 2720 3d3e 205b 2270 6861 7365 2034 tr' => [\"phase 4\n-0000e3c0: 3a20 7365 7474 696e 6720 6469 7265 6374 : setting direct\n-0000e3d0: 6f72 7920 7065 726d 6973 7369 6f6e 7322 ory permissions\"\n-0000e3e0: 5d29 3b0a 2309 6d79 2024 636f 6d70 7250 ]);.#.my $comprP\n-0000e3f0: 6f73 7466 6978 203d 2028 2424 6d65 7461 ostfix = ($$meta\n-0000e400: 7b27 706f 7374 6669 7827 7d29 2d3e 5b30 {'postfix'})->[0\n-0000e410: 5d3b 0a09 6d79 2024 636f 6d70 7250 6f73 ];..my $comprPos\n-0000e420: 7466 6978 203d 2024 7263 7366 2d3e 6765 tfix = $rcsf->ge\n-0000e430: 7449 6e66 6f57 6974 6850 6172 2827 706f tInfoWithPar('po\n-0000e440: 7374 6669 7827 293b 0a0a 096d 7920 246e stfix');...my $n\n-0000e450: 6f44 6972 7320 3d20 303b 0a09 6d79 2024 oDirs = 0;..my $\n-0000e460: 7263 7366 203d 2072 6561 6443 6865 636b rcsf = readCheck\n-0000e470: 5375 6d46 696c 652d 3e6e 6577 2827 2d63 SumFile->new('-c\n-0000e480: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => \n-0000e490: 2224 6469 722f 2e6d 6435 4368 6563 6b53 \"$dir/.md5CheckS\n-0000e4a0: 756d 7322 2c0a 0909 0909 0920 272d 7072 ums\",...... '-pr\n-0000e4b0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog);\n-0000e4c0: 0a09 6d79 2028 246d 6435 7375 6d2c 2024 ..my ($md5sum, $\n-0000e4d0: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode\n-0000e4e0: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, \n-0000e4f0: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, \n-0000e500: 2461 7469 6d65 2c0a 0920 2020 2024 7369 $atime,.. $si\n-0000e510: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, \n-0000e520: 246d 6f64 652c 2024 6629 3b0a 0977 6869 $mode, $f);..whi\n-0000e530: 6c65 2028 2828 246d 6435 7375 6d2c 2024 le ((($md5sum, $\n-0000e540: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode\n-0000e550: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, \n-0000e560: 2463 7469 6d65 2c20 246d 7469 6d65 2c0a $ctime, $mtime,.\n-0000e570: 0909 2024 6174 696d 652c 2024 7369 7a65 .. $atime, $size\n-0000e580: 2c20 2475 6964 2c20 2467 6964 2c20 246d , $uid, $gid, $m\n-0000e590: 6f64 652c 2024 6629 203d 2024 7263 7366 ode, $f) = $rcsf\n-0000e5a0: 2d3e 6e65 7874 4c69 6e65 2829 2920 3e20 ->nextLine()) > \n-0000e5b0: 3029 0a09 7b0a 0920 2020 206d 7920 2466 0)..{.. my $f\n-0000e5c0: 696c 6520 3d20 2224 6469 722f 2466 223b ile = \"$dir/$f\";\n-0000e5d0: 0a09 2020 2020 6966 2028 246d 6435 7375 .. if ($md5su\n-0000e5e0: 6d20 6571 2027 6469 7227 290a 0920 2020 m eq 'dir').. \n-0000e5f0: 207b 0a09 0975 6e6c 6573 7320 282d 6520 {...unless (-e \n-0000e600: 2466 696c 6529 0a09 097b 0a09 0920 2020 $file)...{... \n-0000e610: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print('\n-0000e620: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',..\n-0000e630: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [\n-0000e640: 2263 616e 6e6f 7420 6163 6365 7373 203c \"cannot access <\n-0000e650: 2466 696c 653e 225d 293b 0a09 0920 2020 $file>\"]);... \n-0000e660: 206e 6578 743b 0a09 097d 0a09 0963 686f next;...}...cho\n-0000e670: 776e 2024 7569 642c 2024 6769 642c 2024 wn $uid, $gid, $\n-0000e680: 6669 6c65 3b0a 0909 6368 6d6f 6420 246d file;...chmod $m\n-0000e690: 6f64 652c 2024 6669 6c65 3b0a 0909 7574 ode, $file;...ut\n-0000e6a0: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti\n-0000e6b0: 6d65 2c20 2466 696c 653b 0a0a 0909 246e me, $file;....$n\n-0000e6c0: 6f44 6972 732b 2b3b 0a09 0924 7072 4c6f oDirs++;...$prLo\n-0000e6d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-0000e6e0: 203d 3e20 2753 272c 0a09 0909 2020 272d => 'S',.... '-\n-0000e6f0: 7374 7227 203d 3e20 5b22 7365 7420 7065 str' => [\"set pe\n-0000e700: 726d 6973 7369 6f6e 7320 6f66 2024 6e6f rmissions of $no\n-0000e710: 4469 7273 2064 6972 6563 746f 7269 6573 Dirs directories\n-0000e720: 225d 290a 0909 0969 6620 2824 7072 2061 \"])....if ($pr a\n-0000e730: 6e64 2024 6e6f 4469 7273 2025 2024 7072 nd $noDirs % $pr\n-0000e740: 203d 3d20 3029 3b0a 0920 2020 207d 0a09 == 0);.. }..\n-0000e750: 7d0a 0a09 2470 724c 6f67 2d3e 7072 696e }...$prLog->prin\n-0000e760: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S'\n-0000e770: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str'\n-0000e780: 203d 3e20 5b22 7365 7420 7065 726d 6973 => [\"set permis\n-0000e790: 7369 6f6e 7320 666f 7220 246e 6f44 6972 sions for $noDir\n-0000e7a0: 7320 6469 7265 6374 6f72 6965 7322 5d29 s directories\"])\n-0000e7b0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-0000e7c0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog->\n-0000e7d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-0000e7e0: 2027 4927 2c0a 0909 2020 2020 2020 272d 'I',... '-\n-0000e7f0: 7374 7227 203d 3e20 5b22 7068 6173 6520 str' => [\"phase \n-0000e800: 343a 2064 6972 6563 746f 7279 2070 6572 4: directory per\n-0000e810: 6d69 7373 696f 6e73 206e 6f74 2073 6574 missions not set\n-0000e820: 2062 6563 6175 7365 2022 202e 0a09 0909 because \" .....\n-0000e830: 0920 2270 7265 7365 7276 6550 6572 6d73 . \"preservePerms\n-0000e840: 206e 6f74 2073 6574 2069 6e20 7374 6f72 not set in stor\n-0000e850: 6542 6163 6b75 702e 706c 225d 293b 0a20 eBackup.pl\"]);. \n-0000e860: 2020 207d 0a0a 7d0a }..}.\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"}, {"source1": "./usr/bin/storeBackupVersions", "source2": "./usr/bin/storeBackupVersions", "has_internal_linenos": true, "unified_diff": "@@ -1,1082 +1,4 @@\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 3232 290a 2320 2020 2020 2020 2-2022).# \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: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU\n-00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef\n-00000320: 3b0a 0a75 7365 2046 636e 746c 2071 7728 ;..use Fcntl qw(\n-00000330: 4f5f 5244 5752 204f 5f43 5245 4154 293b O_RDWR O_CREAT);\n-00000340: 0a75 7365 2046 696c 653a 3a43 6f70 793b .use File::Copy;\n-00000350: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use \n-00000360: 4469 6765 7374 3a3a 4d44 3520 7177 286d Digest::MD5 qw(m\n-00000370: 6435 5f68 6578 293b 0a0a 7573 6520 7374 d5_hex);..use st\n-00000380: 7269 6374 3b0a 0a0a 7375 6220 6c69 6250 rict;...sub libP\n-00000390: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi\n-000003a0: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. \n-000003b0: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. #\n-000003c0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel\n-000003d0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink \n-000003e0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol\n-000003f0: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel.\n-00000400: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f\n-00000410: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil\n-00000420: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{.\n-00000430: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = \n-00000440: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file);\n-00000450: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst\n-00000460: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n\n-00000470: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e \"/\").. {...\n-00000480: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\\/]\n-00000490: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. \n-000004a0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. \n-000004b0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li\n-000004c0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}...\n-000004d0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = \n-000004e0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f\n-000004f0: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = \"\n-00000500: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file\";. }. \n-00000510: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p\n-00000520: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR \"<$f\n-00000530: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex\n-00000540: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\\n\";..exit 1\n-00000550: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di\n-00000560: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= \"/../lib\"; \n-00000570: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad\n-00000580: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth\n-00000590: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old\n-000005a0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd`\n-000005b0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old\n-000005c0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd\n-000005d0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {..\n-000005e0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b\n-000005f0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $\n-00000600: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $\n-00000610: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return\n-00000620: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir(\n-00000630: 2224 6162 7344 6972 2466 696c 6522 2929 \"$absDir$file\"))\n-00000640: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else\n-00000650: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST\n-00000660: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR \"<$dir> doe\n-00000670: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi\n-00000680: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\\n\";. }.}\n-00000690: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi\n-000006a0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name\n-000006b0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r\n-000006c0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam\n-000006d0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name\n-000006e0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\\//); # n\n-000006f0: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat\n-00000700: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my (\n-00000710: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $\n-00000720: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\\/\n-00000730: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di\n-00000740: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir\n-00000750: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); \n-00000760: 2020 2020 2020 2020 2020 2023 2067 696c # gil\n-00000770: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f\n-00000780: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu\n-00000790: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file)\n-000007a0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p\n-000007b0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath(\n-000007c0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN\n-000007d0: 432c 2022 2472 6571 223b 0a0a 7265 7175 C, \"$req\";..requ\n-000007e0: 6972 6520 2763 6865 636b 5061 7261 6d32 ire 'checkParam2\n-000007f0: 2e70 6c27 3b0a 7265 7175 6972 6520 2763 .pl';.require 'c\n-00000800: 6865 636b 4f62 6a50 6172 2e70 6c27 3b0a heckObjPar.pl';.\n-00000810: 7265 7175 6972 6520 2770 724c 6f67 2e70 require 'prLog.p\n-00000820: 6c27 3b0a 7265 7175 6972 6520 2776 6572 l';.require 'ver\n-00000830: 7369 6f6e 2e70 6c27 3b0a 7265 7175 6972 sion.pl';.requir\n-00000840: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';.\n-00000850: 7265 7175 6972 6520 2766 6f72 6b50 726f require 'forkPro\n-00000860: 632e 706c 273b 0a72 6571 7569 7265 2027 c.pl';.require '\n-00000870: 6875 6d61 6e52 6561 642e 706c 273b 0a72 humanRead.pl';.r\n-00000880: 6571 7569 7265 2027 6461 7465 546f 6f6c equire 'dateTool\n-00000890: 732e 706c 273b 0a72 6571 7569 7265 2027 s.pl';.require '\n-000008a0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p\n-000008b0: 6c27 3b0a 0a6d 7920 2463 6865 636b 5375 l';..my $checkSu\n-000008c0: 6d46 696c 6520 3d20 272e 6d64 3543 6865 mFile = '.md5Che\n-000008d0: 636b 5375 6d73 273b 0a0a 3d68 6561 6431 ckSums';..=head1\n-000008e0: 204e 414d 450a 0a73 746f 7265 4261 636b NAME..storeBack\n-000008f0: 7570 5665 7273 696f 6e73 2e70 6c20 2d20 upVersions.pl - \n-00000900: 6c6f 6361 7465 7320 6469 6666 6572 656e locates differen\n-00000910: 7420 7665 7273 696f 6e73 206f 6620 6120 t versions of a \n-00000920: 6669 6c65 2073 6176 6564 2077 6974 6820 file saved with \n-00000930: 7374 6f72 6542 6163 6b75 702e 706c 2e0a storeBackup.pl..\n-00000940: 0a3d 6865 6164 3120 5359 4e4f 5053 4953 .=head1 SYNOPSIS\n-00000950: 0a0a 0973 746f 7265 4261 636b 7570 5665 ...storeBackupVe\n-00000960: 7273 696f 6e73 2e70 6c20 2d66 2066 696c rsions.pl -f fil\n-00000970: 6520 5b2d 6220 726f 6f74 5d20 205b 2d76 e [-b root] [-v\n-00000980: 5d0a 0920 5b2d 6c20 5b2d 6120 7c20 5b2d ].. [-l [-a | [-\n-00000990: 735d 205b 2d75 5d20 5b2d 675d 205b 2d4d s] [-u] [-g] [-M\n-000009a0: 5d20 5b2d 635d 205b 2d6d 5d5d 5d0a 0a3d ] [-c] [-m]]]..=\n-000009b0: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..=\n-000009c0: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B<\n-000009d0: 2d2d 6669 6c65 3e2c 2042 3c2d 663e 0a0a --file>, B<-f>..\n-000009e0: 2020 2020 6669 6c65 206e 616d 6520 286e file name (n\n-000009f0: 616d 6520 696e 2074 6865 2062 6163 6b75 ame in the backu\n-00000a00: 702c 2070 726f 6261 626c 7920 7769 7468 p, probably with\n-00000a10: 2073 7566 6669 780a 2020 2020 6672 6f6d suffix. from\n-00000a20: 2063 6f6d 7072 6573 7369 6f6e 290a 0a3d compression)..=\n-00000a30: 6974 656d 2042 3c2d 2d62 6163 6b75 7052 item B<--backupR\n-00000a40: 6f6f 743e 2042 3c2d 623e 0a0a 2020 2020 oot> B<-b>.. \n-00000a50: 726f 6f74 206f 6620 7374 6f72 6542 6163 root of storeBac\n-00000a60: 6b75 7020 7472 6565 2c20 6e6f 726d 616c kup tree, normal\n-00000a70: 6c79 206e 6f74 206e 6565 6465 640a 0a3d ly not needed..=\n-00000a80: 6974 656d 2042 3c2d 2d76 6572 626f 7365 item B<--verbose\n-00000a90: 3e2c 2042 3c2d 763e 0a0a 2020 2020 7072 >, B<-v>.. pr\n-00000aa0: 696e 7420 7665 7262 6f73 6520 6d65 7373 int verbose mess\n-00000ab0: 6167 6573 0a0a 3d69 7465 6d20 423c 2d2d ages..=item B<--\n-00000ac0: 6c6f 6361 7465 5361 6d65 3e2c 2042 3c2d locateSame>, B<-\n-00000ad0: 6c3e 0a0a 2020 2020 6c6f 6361 7465 2073 l>.. locate s\n-00000ae0: 616d 6520 6669 6c65 2077 6974 6820 6f74 ame file with ot\n-00000af0: 6865 7220 6e61 6d65 730a 0a3d 6974 656d her names..=item\n-00000b00: 2042 3c2d 2d73 686f 7741 6c6c 3e2c 2042 B<--showAll>, B\n-00000b10: 3c2d 413e 0a0a 2020 2020 7361 6d65 2061 <-A>.. same a\n-00000b20: 733a 205b 2d73 202d 7520 2d67 202d 4d20 s: [-s -u -g -M \n-00000b30: 2d63 202d 6d5d 0a0a 3d69 7465 6d20 423c -c -m]..=item B<\n-00000b40: 2d2d 7369 7a65 3e2c 2042 3c2d 733e 0a0a --size>, B<-s>..\n-00000b50: 2020 2020 7368 6f77 2073 697a 6520 2868 show size (h\n-00000b60: 756d 616e 2072 6561 6461 626c 6529 206f uman readable) o\n-00000b70: 6620 736f 7572 6365 2066 696c 650a 0a3d f source file..=\n-00000b80: 6974 656d 2042 3c2d 2d75 6964 3e2c 2042 item B<--uid>, B\n-00000b90: 3c2d 753e 0a0a 2020 2020 7368 6f77 2075 <-u>.. show u\n-00000ba0: 6964 206f 6620 736f 7572 6365 2066 696c id of source fil\n-00000bb0: 650a 0a3d 6974 656d 2042 3c2d 2d67 6964 e..=item B<--gid\n-00000bc0: 3e2c 2042 3c2d 673e 0a0a 2020 2020 7368 >, B<-g>.. sh\n-00000bd0: 6f77 2067 6964 206f 6620 736f 7572 6365 ow gid of source\n-00000be0: 2066 696c 650a 0a3d 6974 656d 2042 3c2d file..=item B<-\n-00000bf0: 2d6d 6f64 653e 2c20 423c 2d4d 3e0a 0a20 -mode>, B<-M>.. \n-00000c00: 2020 2073 686f 7720 7065 726d 6973 7369 show permissi\n-00000c10: 6f6e 7320 6f66 2073 6f75 7263 6520 6669 ons of source fi\n-00000c20: 6c65 0a0a 3d69 7465 6d20 423c 2d2d 6374 le..=item B<--ct\n-00000c30: 696d 653e 2c20 423c 2d63 3e0a 0a20 2020 ime>, B<-c>.. \n-00000c40: 2073 686f 7720 6372 6561 7469 6f6e 2074 show creation t\n-00000c50: 696d 6520 6f66 2073 6f75 7263 6520 6669 ime of source fi\n-00000c60: 6c65 0a0a 3d69 7465 6d20 423c 2d2d 6d74 le..=item B<--mt\n-00000c70: 696d 653e 2c20 423c 2d6d 3e0a 0a20 2020 ime>, B<-m>.. \n-00000c80: 2073 686f 7720 6d6f 6469 6679 2074 696d show modify tim\n-00000c90: 6520 6f66 2073 6f75 7263 6520 6669 6c65 e of source file\n-00000ca0: 0a0a 3d69 7465 6d20 423c 2d2d 6174 696d ..=item B<--atim\n-00000cb0: 653e 2c20 423c 2d61 3e0a 0a20 2020 2073 e>, B<-a>.. s\n-00000cc0: 686f 7720 6163 6365 7373 2074 696d 6520 how access time \n-00000cd0: 6f66 2073 6f75 7263 6520 6669 6c65 0a0a of source file..\n-00000ce0: 3d62 6163 6b0a 0a49 7420 646f 6573 206e =back..It does n\n-00000cf0: 6f74 2061 6c77 6179 7320 776f 726b 2063 ot always work c\n-00000d00: 6f72 7265 6374 6c79 2077 6865 6e20 6120 orrectly when a \n-00000d10: 6669 6c65 2069 7320 7361 7665 6420 626c file is saved bl\n-00000d20: 6f63 6b65 6420 2a61 6e64 2a0a 6e6f 6e2d ocked *and*.non-\n-00000d30: 626c 6f63 6b65 6420 696e 2064 6966 6665 blocked in diffe\n-00000d40: 7265 6e74 2062 6163 6b75 7073 2e20 496e rent backups. In\n-00000d50: 2073 7563 6820 6361 7365 732c 2075 7365 such cases, use\n-00000d60: 206f 7074 696f 6e20 423c 2d2d 6c6f 6361 option B<--loca\n-00000d70: 7465 5361 6d65 3e2e 0a0a 3d68 6561 6431 teSame>...=head1\n-00000d80: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy\n-00000d90: 7269 6768 7420 2863 2920 3230 3032 2d32 right (c) 2002-2\n-00000da0: 3032 3220 6279 2048 6569 6e7a 2d4a 6f73 022 by Heinz-Jos\n-00000db0: 6566 2043 6c61 6573 2028 7365 6520 5245 ef Claes (see RE\n-00000dc0: 4144 4d45 290a 5075 626c 6973 6865 6420 ADME).Published \n-00000dd0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge\n-00000de0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic\n-00000df0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l\n-00000e00: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c\n-00000e10: 7574 0a0a 6d79 2024 4865 6c70 203d 2026 ut..my $Help = &\n-00000e20: 3a3a 6765 7450 6f64 3254 6578 7428 2430 ::getPod2Text($0\n-00000e30: 293b 0a0a 2670 7269 6e74 5665 7273 696f );..&printVersio\n-00000e40: 6e28 5c40 4152 4756 2c20 272d 5627 2c20 n(\\@ARGV, '-V', \n-00000e50: 272d 2d76 6572 7369 6f6e 2729 3b0a 0a6d '--version');..m\n-00000e60: 7920 2443 6865 636b 5061 7220 3d0a 2020 y $CheckPar =. \n-00000e70: 2020 4368 6563 6b50 6172 616d 2d3e 6e65 CheckParam->ne\n-00000e80: 7728 272d 616c 6c6f 774c 6973 7473 2720 w('-allowLists' \n-00000e90: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... '\n-00000ea0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio\n-00000eb0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00000ec0: 3e20 2766 696c 6527 2c0a 0909 0909 0920 > 'file',...... \n-00000ed0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00000ee0: 3d3e 2027 2d66 272c 0a09 0909 0909 2020 => '-f',...... \n-00000ef0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' =>\n-00000f00: 2027 2d2d 6669 6c65 272c 0a09 0909 0909 '--file',......\n-00000f10: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00000f20: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n-00000f30: 272d 6d75 7374 5f62 6527 203d 3e20 2779 '-must_be' => 'y\n-00000f40: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option\n-00000f50: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-00000f60: 2027 6261 636b 7570 526f 6f74 272c 0a09 'backupRoot',..\n-00000f70: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00000f80: 696f 6e27 203d 3e20 272d 6227 2c0a 0909 ion' => '-b',...\n-00000f90: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00000fa0: 7327 203d 3e20 272d 2d62 6163 6b75 7052 s' => '--backupR\n-00000fb0: 6f6f 7427 2c0a 0909 0909 0920 2020 2027 oot',...... '\n-00000fc0: 2d64 6566 6175 6c74 2720 3d3e 2027 2729 -default' => '')\n-00000fd0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00000fe0: 7728 272d 6e61 6d65 2720 3d3e 2027 7665 w('-name' => 've\n-00000ff0: 7262 6f73 6527 2c0a 0909 0909 0920 2020 rbose',...... \n-00001000: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001010: 2027 2d76 272c 0a09 0909 0909 2020 2020 '-v',...... \n-00001020: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001030: 2d2d 7665 7262 6f73 6527 292c 0a09 0909 --verbose'),....\n-00001040: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-00001050: 616d 6527 203d 3e20 276c 6f63 6174 6553 ame' => 'locateS\n-00001060: 616d 6527 2c0a 0909 0909 0920 2020 2027 ame',...... '\n-00001070: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001080: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '-\n-00001090: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-000010a0: 6c6f 6361 7465 5361 6d65 2729 2c0a 0909 locateSame'),...\n-000010b0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('-\n-000010c0: 6e61 6d65 2720 3d3e 2027 7368 6f77 416c name' => 'showAl\n-000010d0: 6c27 2c0a 0909 0909 0920 2020 2027 2d63 l',...... '-c\n-000010e0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d41 l_option' => '-A\n-000010f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001100: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7368 _alias' => '--sh\n-00001110: 6f77 416c 6c27 2c0a 0909 0909 0920 2020 owAll',...... \n-00001120: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => '\n-00001130: 5b6c 6f63 6174 6553 616d 655d 272c 0a09 [locateSame]',..\n-00001140: 0909 0909 2020 2020 272d 636f 6d6d 656e .... '-commen\n-00001150: 7427 203d 3e0a 0909 0909 222d 7320 6361 t' =>.....\"-s ca\n-00001160: 6e20 6f6e 6c79 2062 6520 7573 6520 696e n only be use in\n-00001170: 2063 6f6e 6a75 6e63 7469 6f6e 2077 6974 conjunction wit\n-00001180: 6820 2d6c 5c6e 2229 2c0a 0909 0909 4f70 h -l\\n\"),.....Op\n-00001190: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-000011a0: 2720 3d3e 2027 7369 7a65 272c 0a09 0909 ' => 'size',....\n-000011b0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-000011c0: 6e27 203d 3e20 272d 7327 2c0a 0909 0909 n' => '-s',.....\n-000011d0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias'\n-000011e0: 203d 3e20 272d 2d73 697a 6527 2c0a 0909 => '--size',...\n-000011f0: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if\n-00001200: 2720 3d3e 0a09 0909 0909 2020 2020 275b ' =>...... '[\n-00001210: 6c6f 6361 7465 5361 6d65 5d20 616e 6420 locateSame] and \n-00001220: 6e6f 7420 5b73 686f 7741 6c6c 5d27 292c not [showAll]'),\n-00001230: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00001240: 2827 2d6e 616d 6527 203d 3e20 2775 6964 ('-name' => 'uid\n-00001250: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl\n-00001260: 5f6f 7074 696f 6e27 203d 3e20 272d 7527 _option' => '-u'\n-00001270: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_\n-00001280: 616c 6961 7327 203d 3e20 272d 2d75 6964 alias' => '--uid\n-00001290: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on\n-000012a0: 6c79 5f69 6627 203d 3e0a 0909 0909 0920 ly_if' =>...... \n-000012b0: 2020 2027 5b6c 6f63 6174 6553 616d 655d '[locateSame]\n-000012c0: 2061 6e64 206e 6f74 205b 7368 6f77 416c and not [showAl\n-000012d0: 6c5d 2729 2c0a 0909 0909 4f70 7469 6f6e l]'),.....Option\n-000012e0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-000012f0: 2027 6769 6427 2c0a 0909 0909 0920 2020 'gid',...... \n-00001300: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00001310: 2027 2d67 272c 0a09 0909 0909 2020 2020 '-g',...... \n-00001320: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00001330: 2d2d 6769 6427 2c0a 0909 0909 0920 2020 --gid',...... \n-00001340: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>..\n-00001350: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate\n-00001360: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s\n-00001370: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O\n-00001380: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001390: 6527 203d 3e20 276d 6f64 6527 2c0a 0909 e' => 'mode',...\n-000013a0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti\n-000013b0: 6f6e 2720 3d3e 2027 2d4d 272c 0a09 0909 on' => '-M',....\n-000013c0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias\n-000013d0: 2720 3d3e 2027 2d2d 6d6f 6465 272c 0a09 ' => '--mode',..\n-000013e0: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i\n-000013f0: 6627 203d 3e0a 0909 0909 0920 2020 2027 f' =>...... '\n-00001400: 5b6c 6f63 6174 6553 616d 655d 2061 6e64 [locateSame] and\n-00001410: 206e 6f74 205b 7368 6f77 416c 6c5d 2729 not [showAll]')\n-00001420: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne\n-00001430: 7728 272d 6e61 6d65 2720 3d3e 2027 6374 w('-name' => 'ct\n-00001440: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... '\n-00001450: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001460: 2d63 272c 0a09 0909 0909 2020 2020 272d -c',...... '-\n-00001470: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '--\n-00001480: 6374 696d 6527 2c0a 0909 0909 0920 2020 ctime',...... \n-00001490: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>..\n-000014a0: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate\n-000014b0: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s\n-000014c0: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O\n-000014d0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-000014e0: 6527 203d 3e20 276d 7469 6d65 272c 0a09 e' => 'mtime',..\n-000014f0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00001500: 696f 6e27 203d 3e20 272d 6d27 2c0a 0909 ion' => '-m',...\n-00001510: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00001520: 7327 203d 3e20 272d 2d6d 7469 6d65 272c s' => '--mtime',\n-00001530: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only\n-00001540: 5f69 6627 203d 3e0a 0909 0909 0920 2020 _if' =>...... \n-00001550: 2027 5b6c 6f63 6174 6553 616d 655d 2061 '[locateSame] a\n-00001560: 6e64 206e 6f74 205b 7368 6f77 416c 6c5d nd not [showAll]\n-00001570: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00001580: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001590: 6174 696d 6527 2c0a 0909 0909 0920 2020 atime',...... \n-000015a0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-000015b0: 2027 2d61 272c 0a09 0909 0909 2020 2020 '-a',...... \n-000015c0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-000015d0: 2d2d 6174 696d 6527 2c0a 0909 0909 0920 --atime',...... \n-000015e0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' =>\n-000015f0: 0a09 0909 0909 2020 2020 275b 6c6f 6361 ...... '[loca\n-00001600: 7465 5361 6d65 5d20 616e 6420 6e6f 7420 teSame] and not \n-00001610: 5b73 686f 7741 6c6c 5d27 290a 0909 0909 [showAll]').....\n-00001620: 5d0a 0909 2020 2020 293b 0a0a 2443 6865 ]... );..$Che\n-00001630: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a\n-00001640: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \\@ARGV,.\n-00001650: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001660: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel\n-00001670: 700a 2020 2020 2020 2020 2020 2020 2020 p. \n-00001680: 2020 2029 3b0a 0a23 2041 7573 7765 7274 );..# Auswert\n-00001690: 756e 6720 6465 7220 5061 7261 6d65 7465 ung der Paramete\n-000016a0: 720a 6d79 2024 6669 6c65 203d 2024 4368 r.my $file = $Ch\n-000016b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000016c0: 7468 5061 7228 2766 696c 6527 293b 0a6d thPar('file');.m\n-000016d0: 7920 2476 6572 626f 7365 203d 2024 4368 y $verbose = $Ch\n-000016e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-000016f0: 7468 6f75 7450 6172 2827 7665 7262 6f73 thoutPar('verbos\n-00001700: 6527 293b 0a6d 7920 2462 6163 6b75 7052 e');.my $backupR\n-00001710: 6f6f 7420 3d20 2443 6865 636b 5061 722d oot = $CheckPar-\n-00001720: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar('\n-00001730: 6261 636b 7570 526f 6f74 2729 3b0a 6d79 backupRoot');.my\n-00001740: 2024 6c6f 6361 7465 5361 6d65 203d 2024 $locateSame = $\n-00001750: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-00001760: 5769 7468 6f75 7450 6172 2827 6c6f 6361 WithoutPar('loca\n-00001770: 7465 5361 6d65 2729 3b0a 6d79 2024 7368 teSame');.my $sh\n-00001780: 6f77 416c 6c20 3d20 2443 6865 636b 5061 owAll = $CheckPa\n-00001790: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-000017a0: 5061 7228 2773 686f 7741 6c6c 2729 3b0a Par('showAll');.\n-000017b0: 6d79 2024 7368 6f77 5369 7a65 203d 2024 my $showSize = $\n-000017c0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt\n-000017d0: 5769 7468 6f75 7450 6172 2827 7369 7a65 WithoutPar('size\n-000017e0: 2729 207c 2024 7368 6f77 416c 6c3b 0a6d ') | $showAll;.m\n-000017f0: 7920 2473 686f 7755 4944 203d 2024 4368 y $showUID = $Ch\n-00001800: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00001810: 7468 6f75 7450 6172 2827 7569 6427 2920 thoutPar('uid') \n-00001820: 7c20 2473 686f 7741 6c6c 3b0a 6d79 2024 | $showAll;.my $\n-00001830: 7368 6f77 4749 4420 3d20 2443 6865 636b showGID = $Check\n-00001840: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00001850: 7574 5061 7228 2767 6964 2729 207c 2024 utPar('gid') | $\n-00001860: 7368 6f77 416c 6c3b 0a6d 7920 2473 686f showAll;.my $sho\n-00001870: 774d 6f64 6520 3d20 2443 6865 636b 5061 wMode = $CheckPa\n-00001880: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-00001890: 5061 7228 276d 6f64 6527 2920 7c20 2473 Par('mode') | $s\n-000018a0: 686f 7741 6c6c 3b0a 6d79 2024 7368 6f77 howAll;.my $show\n-000018b0: 4354 696d 6520 3d20 2443 6865 636b 5061 CTime = $CheckPa\n-000018c0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout\n-000018d0: 5061 7228 2763 7469 6d65 2729 207c 2024 Par('ctime') | $\n-000018e0: 7368 6f77 416c 6c3b 0a6d 7920 2473 686f showAll;.my $sho\n-000018f0: 774d 5469 6d65 203d 2024 4368 6563 6b50 wMTime = $CheckP\n-00001900: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00001910: 7450 6172 2827 6d74 696d 6527 2920 7c20 tPar('mtime') | \n-00001920: 2473 686f 7741 6c6c 3b0a 6d79 2024 7368 $showAll;.my $sh\n-00001930: 6f77 4154 696d 6520 3d20 2443 6865 636b owATime = $Check\n-00001940: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho\n-00001950: 7574 5061 7228 2761 7469 6d65 2729 207c utPar('atime') |\n-00001960: 2024 7368 6f77 416c 6c3b 0a0a 6d79 2024 $showAll;..my $\n-00001970: 6620 3d20 2466 696c 653b 0a6d 7920 2466 f = $file;.my $f\n-00001980: 696c 6520 3d20 2661 6273 6f6c 7574 6550 ile = &absoluteP\n-00001990: 6174 6828 2466 696c 6529 3b0a 0a6d 7920 ath($file);..my \n-000019a0: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo\n-000019b0: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' =\n-000019c0: 3e20 5b27 493a 494e 464f 272c 2027 573a > ['I:INFO', 'W:\n-000019d0: 5741 524e 494e 4727 2c20 2745 3a45 5252 WARNING', 'E:ERR\n-000019e0: 4f52 272c 0a09 0909 0920 2020 2020 2027 OR',..... '\n-000019f0: 533a 5354 4154 4953 5449 4327 2c20 2744 S:STATISTIC', 'D\n-00001a00: 3a44 4542 5547 272c 2027 563a 5645 5253 :DEBUG', 'V:VERS\n-00001a10: 494f 4e27 5d29 3b0a 0a24 7072 4c6f 672d ION']);..$prLog-\n-00001a20: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00001a30: 3e20 2756 272c 0a09 2020 2020 2020 272d > 'V',.. '-\n-00001a40: 7374 7227 203d 3e20 5b22 7374 6f72 6542 str' => [\"storeB\n-00001a50: 6163 6b75 7056 6572 7369 6f6e 732e 706c ackupVersions.pl\n-00001a60: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA\n-00001a70: 434b 5550 5645 5253 494f 4e22 5d29 0a20 CKUPVERSION\"]). \n-00001a80: 2020 2069 6620 2476 6572 626f 7365 3b0a if $verbose;.\n-00001a90: 0a23 0a23 206d 6435 4368 6563 6b53 756d .#.# md5CheckSum\n-00001aa0: 202d 2044 6174 6569 2066 696e 6465 6e0a - Datei finden.\n-00001ab0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('-\n-00001ac0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. \n-00001ad0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-00001ae0: 2266 696c 6520 3c24 663e 2064 6f65 7320 \"file <$f> does \n-00001af0: 6e6f 7420 6578 6973 7422 5d2c 0a09 2020 not exist\"],.. \n-00001b00: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1\n-00001b10: 290a 2020 2020 756e 6c65 7373 2028 2d66 ). unless (-f\n-00001b20: 2024 6620 6f72 202d 6420 2466 293b 0a0a $f or -d $f);..\n-00001b30: 6966 2028 2462 6163 6b75 7052 6f6f 7429 if ($backupRoot)\n-00001b40: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p\n-00001b50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => \n-00001b60: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' \n-00001b70: 3d3e 205b 2264 6972 6563 746f 7279 203c => [\"directory <\n-00001b80: 2462 6163 6b75 7052 6f6f 743e 2064 6f65 $backupRoot> doe\n-00001b90: 7320 6e6f 7420 6578 6973 7422 5d2c 0a09 s not exist\"],..\n-00001ba0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1)\n-00001bb0: 0a09 756e 6c65 7373 2028 2d64 2024 6261 ..unless (-d $ba\n-00001bc0: 636b 7570 526f 6f74 293b 0a20 2020 2024 ckupRoot);. $\n-00001bd0: 6261 636b 7570 526f 6f74 203d 2026 6162 backupRoot = &ab\n-00001be0: 736f 6c75 7465 5061 7468 2824 6261 636b solutePath($back\n-00001bf0: 7570 526f 6f74 293b 0a7d 0a65 6c73 650a upRoot);.}.else.\n-00001c00: 7b0a 2020 2020 6d79 2028 2464 6972 2c20 {. my ($dir, \n-00001c10: 2478 2920 3d20 2673 706c 6974 4669 6c65 $x) = &splitFile\n-00001c20: 4469 7228 2466 696c 6529 3b0a 2020 2020 Dir($file);. \n-00001c30: 2462 6163 6b75 7052 6f6f 7420 3d20 756e $backupRoot = un\n-00001c40: 6465 663b 0a20 2020 2064 6f0a 2020 2020 def;. do. \n-00001c50: 7b0a 0923 2066 6573 7473 7465 6c6c 656e {..# feststellen\n-00001c60: 2c20 6f62 2065 696e 6520 2e6d 6435 7375 , ob eine .md5su\n-00001c70: 6d20 4461 7465 6920 766f 7268 616e 6465 m Datei vorhande\n-00001c80: 6e20 6973 740a 0969 6620 282d 6620 2224 n ist..if (-f \"$\n-00001c90: 6469 722f 2463 6865 636b 5375 6d46 696c dir/$checkSumFil\n-00001ca0: 6522 206f 7220 2d66 2022 2464 6972 2f24 e\" or -f \"$dir/$\n-00001cb0: 6368 6563 6b53 756d 4669 6c65 2e62 7a32 checkSumFile.bz2\n-00001cc0: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f \")..{.. $prLo\n-00001cd0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind'\n-00001ce0: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '-\n-00001cf0: 7374 7227 203d 3e20 5b22 666f 756e 6420 str' => [\"found \n-00001d00: 696e 666f 2066 696c 6520 3c24 6368 6563 info file <$chec\n-00001d10: 6b53 756d 4669 6c65 3e20 696e 2022 202e kSumFile> in \" .\n-00001d20: 0a09 0909 0920 2020 2020 2264 6972 6563 ..... \"direc\n-00001d30: 746f 7279 203c 2464 6972 3e22 5d29 0a09 tory <$dir>\"])..\n-00001d40: 0969 6620 2824 7665 7262 6f73 6529 3b0a .if ($verbose);.\n-00001d50: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-00001d60: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-00001d70: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' =\n-00001d80: 3e0a 0909 0920 205b 2266 6f75 6e64 2069 >.... [\"found i\n-00001d90: 6e66 6f20 6669 6c65 203c 2463 6865 636b nfo file <$check\n-00001da0: 5375 6d46 696c 653e 2061 2073 6563 6f6e SumFile> a secon\n-00001db0: 6420 7469 6d65 2069 6e20 2220 2e0a 0909 d time in \" ....\n-00001dc0: 0920 2020 223c 2464 6972 3e2c 2066 6972 . \"<$dir>, fir\n-00001dd0: 7374 2074 696d 6520 666f 756e 6420 696e st time found in\n-00001de0: 203c 2462 6163 6b75 7052 6f6f 743e 225d <$backupRoot>\"]\n-00001df0: 2c0a 0909 0920 2027 2d65 7869 7427 203d ,.... '-exit' =\n-00001e00: 3e20 3129 0a09 0969 6620 2824 6261 636b > 1)...if ($back\n-00001e10: 7570 526f 6f74 293b 0a0a 0920 2020 2024 upRoot);... $\n-00001e20: 6261 636b 7570 526f 6f74 203d 2024 6469 backupRoot = $di\n-00001e30: 723b 0a09 7d0a 0a09 2824 6469 722c 2024 r;..}...($dir, $\n-00001e40: 7829 203d 2026 7370 6c69 7446 696c 6544 x) = &splitFileD\n-00001e50: 6972 2824 6469 7229 3b0a 2020 2020 7d20 ir($dir);. } \n-00001e60: 7768 696c 6520 2824 6469 7220 6e65 2027 while ($dir ne '\n-00001e70: 2f27 293b 0a0a 2020 2020 2470 724c 6f67 /');.. $prLog\n-00001e80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' \n-00001e90: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st\n-00001ea0: 7227 203d 3e20 5b22 6469 6420 6e6f 7420 r' => [\"did not \n-00001eb0: 6669 6e64 2069 6e66 6f20 6669 6c65 203c find info file <\n-00001ec0: 2463 6865 636b 5375 6d46 696c 653e 225d $checkSumFile>\"]\n-00001ed0: 2c0a 0909 2020 272d 6578 6974 2720 3d3e ,... '-exit' =>\n-00001ee0: 2031 290a 0975 6e6c 6573 7320 2824 6261 1)..unless ($ba\n-00001ef0: 636b 7570 526f 6f74 293b 0a7d 0a0a 6d79 ckupRoot);.}..my\n-00001f00: 2024 6368 6563 6b53 756d 4669 6c65 526f $checkSumFileRo\n-00001f10: 6f74 203d 2024 6368 6563 6b53 756d 4669 ot = $checkSumFi\n-00001f20: 6c65 3b0a 2463 6865 636b 5375 6d46 696c le;.$checkSumFil\n-00001f30: 6552 6f6f 7420 2e3d 2022 2e62 7a32 2220 eRoot .= \".bz2\" \n-00001f40: 6966 2028 2d66 2022 2462 6163 6b75 7052 if (-f \"$backupR\n-00001f50: 6f6f 742f 2463 6865 636b 5375 6d46 696c oot/$checkSumFil\n-00001f60: 652e 627a 3222 293b 0a24 7072 4c6f 672d e.bz2\");.$prLog-\n-00001f70: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00001f80: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '-\n-00001f90: 7374 7227 203d 3e20 5b22 6e6f 2069 6e66 str' => [\"no inf\n-00001fa0: 6f20 6669 6c65 203c 2463 6865 636b 5375 o file <$checkSu\n-00001fb0: 6d46 696c 6552 6f6f 743e 2069 6e20 3c24 mFileRoot> in <$\n-00001fc0: 6261 636b 7570 526f 6f74 3e22 5d2c 0a09 backupRoot>\"],..\n-00001fd0: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' =>\n-00001fe0: 2031 290a 2020 2020 756e 6c65 7373 2028 1). unless (\n-00001ff0: 2d66 2022 2462 6163 6b75 7052 6f6f 742f -f \"$backupRoot/\n-00002000: 2463 6865 636b 5375 6d46 696c 6552 6f6f $checkSumFileRoo\n-00002010: 7422 293b 0a0a 2320 6a65 747a 7420 2472 t\");..# jetzt $r\n-00002020: 6573 746f 7265 5472 6565 2072 656c 6174 estoreTree relat\n-00002030: 6976 207a 7520 2462 6163 6b75 7052 6f6f iv zu $backupRoo\n-00002040: 7420 6d61 6368 656e 0a6d 7920 2466 696c t machen.my $fil\n-00002050: 6557 6974 6852 656c 5061 7468 203d 2073 eWithRelPath = s\n-00002060: 7562 7374 7228 2466 696c 652c 206c 656e ubstr($file, len\n-00002070: 6774 6828 2462 6163 6b75 7052 6f6f 7429 gth($backupRoot)\n-00002080: 202b 2031 293b 0a6d 7920 2824 7374 6f72 + 1);.my ($stor\n-00002090: 6542 6163 6b75 7041 6c6c 5472 6565 732c eBackupAllTrees,\n-000020a0: 2024 6669 6c65 4461 7465 4469 7229 203d $fileDateDir) =\n-000020b0: 2026 7370 6c69 7446 696c 6544 6972 2824 &splitFileDir($\n-000020c0: 6261 636b 7570 526f 6f74 293b 0a0a 2320 backupRoot);..# \n-000020d0: 5e5e 5e0a 2320 4265 6973 7069 656c 3a20 ^^^.# Beispiel: \n-000020e0: 2020 2020 2020 2020 2020 2028 2f74 6d70 (/tmp\n-000020f0: 2f73 7462 752f 3230 3031 2e31 322e 3230 /stbu/2001.12.20\n-00002100: 5f31 362e 3231 2e35 392f 7065 726c 2f4a _16.21.59/perl/J\n-00002110: 756c 6961 6e2e 632e 627a 3229 0a23 2024 ulian.c.bz2).# $\n-00002120: 6261 636b 7570 526f 6f74 2062 6569 6e68 backupRoot beinh\n-00002130: 616c 7465 7420 6a65 747a 7420 6465 6e20 altet jetzt den \n-00002140: 5066 6164 207a 756d 2041 7263 6869 760a Pfad zum Archiv.\n-00002150: 2320 2020 2020 2020 2020 2020 2020 2020 # \n-00002160: 2020 2020 2020 2028 2f74 6d70 2f73 7462 (/tmp/stb\n-00002170: 752f 3230 3031 2e31 322e 3230 5f31 362e u/2001.12.20_16.\n-00002180: 3231 2e35 3929 0a23 2024 6669 6c65 2062 21.59).# $file b\n-00002190: 6569 6e68 616c 7465 7420 6469 6520 4461 einhaltet die Da\n-000021a0: 7465 6920 6d69 7420 6b6f 6d70 6c65 7474 tei mit komplett\n-000021b0: 656e 2c20 6162 736f 6c75 7465 6e20 5066 en, absoluten Pf\n-000021c0: 6164 0a23 2020 2020 2020 2020 2020 2020 ad.# \n-000021d0: 2020 2020 2020 2020 2020 282f 746d 702f (/tmp/\n-000021e0: 7374 6275 2f32 3030 312e 3132 2e32 305f stbu/2001.12.20_\n-000021f0: 3136 2e32 312e 3539 2f70 6572 6c2f 4a75 16.21.59/perl/Ju\n-00002200: 6c69 616e 2e63 2e62 7a32 290a 2320 2466 lian.c.bz2).# $f\n-00002210: 696c 6557 6974 6852 656c 5061 7468 2062 ileWithRelPath b\n-00002220: 6569 6e68 616c 7465 7420 6a65 747a 7420 einhaltet jetzt \n-00002230: 6465 6e20 7265 6c61 7469 7665 6e20 5066 den relativen Pf\n-00002240: 6164 2069 6e6e 6572 6861 6c62 2064 6573 ad innerhalb des\n-00002250: 2041 7263 6869 7673 0a23 2020 2020 2020 Archivs.# \n-00002260: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002270: 2870 6572 6c2f 4a75 6c69 616e 2e63 2e62 (perl/Julian.c.b\n-00002280: 7a32 290a 2320 2473 746f 7265 4261 636b z2).# $storeBack\n-00002290: 7570 416c 6c54 7265 6573 2062 6569 6e68 upAllTrees beinh\n-000022a0: 616c 7465 7420 6465 6e20 526f 6f74 2d50 altet den Root-P\n-000022b0: 6661 6420 6465 7320 7374 6f72 6542 6163 fad des storeBac\n-000022c0: 6b75 7020 286f 6265 7268 616c 620a 2320 kup (oberhalb.# \n-000022d0: 2020 2020 2064 6572 2044 6174 756d 2044 der Datum D\n-000022e0: 6972 6563 746f 7269 6573 290a 2320 2020 irectories).# \n-000022f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00002300: 2020 2028 2f74 6d70 2f73 7462 7529 0a23 (/tmp/stbu).#\n-00002310: 2024 6669 6c65 4461 7465 4469 7220 6265 $fileDateDir be\n-00002320: 696e 6861 6c74 6574 2064 656e 204e 616d inhaltet den Nam\n-00002330: 656e 2064 6573 2044 6174 756d 2d44 6972 en des Datum-Dir\n-00002340: 7320 6465 7320 6765 7375 6368 7465 6e20 s des gesuchten \n-00002350: 6669 6c65 730a 2320 2020 2020 2020 2020 files.# \n-00002360: 2020 2020 2020 2020 2020 2020 2028 3230 (20\n-00002370: 3031 2e31 322e 3230 5f31 362e 3231 2e35 01.12.20_16.21.5\n-00002380: 3929 0a0a 2370 7269 6e74 2022 6261 636b 9)..#print \"back\n-00002390: 7570 526f 6f74 203d 2024 6261 636b 7570 upRoot = $backup\n-000023a0: 526f 6f74 5c6e 223b 0a23 7072 696e 7420 Root\\n\";.#print \n-000023b0: 2266 696c 6520 3d20 2466 696c 655c 6e22 \"file = $file\\n\"\n-000023c0: 3b0a 2370 7269 6e74 2022 6669 6c65 5769 ;.#print \"fileWi\n-000023d0: 7468 5265 6c50 6174 6820 3d20 2466 696c thRelPath = $fil\n-000023e0: 6557 6974 6852 656c 5061 7468 5c6e 223b eWithRelPath\\n\";\n-000023f0: 0a23 7072 696e 7420 2273 746f 7265 4261 .#print \"storeBa\n-00002400: 636b 7570 416c 6c54 7265 6573 203d 2024 ckupAllTrees = $\n-00002410: 7374 6f72 6542 6163 6b75 7041 6c6c 5472 storeBackupAllTr\n-00002420: 6565 735c 6e22 3b0a 2370 7269 6e74 2022 ees\\n\";.#print \"\n-00002430: 6669 6c65 4461 7465 4469 7220 3d20 2466 fileDateDir = $f\n-00002440: 696c 6544 6174 6544 6972 5c6e 5c6e 223b ileDateDir\\n\\n\";\n-00002450: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print\n-00002460: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I',\n-00002470: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' =\n-00002480: 3e20 5b22 6368 6563 6b69 6e67 2066 6f72 > [\"checking for\n-00002490: 203c 2466 696c 6557 6974 6852 656c 5061 <$fileWithRelPa\n-000024a0: 7468 3e22 5d29 0a20 2020 2069 6620 2476 th>\"]). if $v\n-000024b0: 6572 626f 7365 3b0a 0a23 2056 6572 7369 erbose;..# Versi\n-000024c0: 6f6e 732d 4469 7265 6374 6f72 6965 7320 ons-Directories \n-000024d0: 756e 7465 7220 2462 6163 6b75 7052 6f6f unter $backupRoo\n-000024e0: 7420 6569 6e6c 6573 656e 0a6d 7920 2840 t einlesen.my (@\n-000024f0: 616c 6c44 6972 7329 203d 2028 263a 3a72 allDirs) = (&::r\n-00002500: 6561 6441 6c6c 4261 636b 7570 4469 7273 eadAllBackupDirs\n-00002510: 2824 7374 6f72 6542 6163 6b75 7041 6c6c ($storeBackupAll\n-00002520: 5472 6565 732c 2024 7072 4c6f 672c 2031 Trees, $prLog, 1\n-00002530: 2929 3b0a 2370 7269 6e74 2022 616c 6c44 ));.#print \"allD\n-00002540: 6972 7320 3d5c 6e22 2c20 6a6f 696e 2822 irs =\\n\", join(\"\n-00002550: 5c6e 222c 2040 616c 6c44 6972 7329 2c20 \\n\", @allDirs), \n-00002560: 225c 6e22 3b0a 0a23 2063 6865 636b 2066 \"\\n\";..# check f\n-00002570: 6f72 206c 6174 654c 696e 6b73 0a6d 7920 or lateLinks.my \n-00002580: 2825 6c69 6e6b 4669 6c65 293b 0a6d 7920 (%linkFile);.my \n-00002590: 2824 642c 2040 6429 3b0a 666f 7265 6163 ($d, @d);.foreac\n-000025a0: 6820 2464 2028 4061 6c6c 4469 7273 290a h $d (@allDirs).\n-000025b0: 7b0a 2020 2020 6966 2028 2d65 2022 2464 {. if (-e \"$d\n-000025c0: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin\n-000025d0: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2\"\n-000025e0: 290a 2020 2020 7b0a 0970 7573 6820 4064 ). {..push @d\n-000025f0: 2c20 2220 2024 6422 3b0a 0924 6c69 6e6b , \" $d\";..$link\n-00002600: 4669 6c65 7b24 647d 203d 2031 3b0a 2020 File{$d} = 1;. \n-00002610: 2020 7d0a 7d0a 2470 724c 6f67 2d3e 7072 }.}.$prLog->pr\n-00002620: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => '\n-00002630: 5727 2c0a 0920 2020 2020 2027 2d73 7472 W',.. '-str\n-00002640: 2720 3d3e 205b 2266 6f75 6e64 2075 6e72 ' => [\"found unr\n-00002650: 6573 6f6c 7665 6420 6c69 6e6b 7320 696e esolved links in\n-00002660: 203a 2022 2c0a 0909 0920 4064 2c0a 0909 : \",.... @d,...\n-00002670: 0920 2270 6c65 6173 6520 7275 6e20 7374 . \"please run st\n-00002680: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB\n-00002690: 6163 6b75 702e 706c 222c 0a09 0909 2022 ackup.pl\",.... \"\n-000026a0: 6765 6e65 7261 7465 6420 6c69 7374 2077 generated list w\n-000026b0: 696c 6c20 6e6f 7420 6265 2063 6f6d 706c ill not be compl\n-000026c0: 6574 6521 222c 0a09 0909 2022 225d 290a ete!\",.... \"\"]).\n-000026d0: 2020 2020 6966 2040 643b 0a0a 0a23 205a if @d;...# Z\n-000026e0: 7565 7273 7420 6469 6520 4461 7465 6965 uerst die Dateie\n-000026f0: 6e20 6469 7265 6b74 2061 7566 2045 7869 n direkt auf Exi\n-00002700: 7374 656e 7a20 fc62 6572 7072 fc66 656e stenz .berpr.fen\n-00002710: 0a23 2064 616e 6e20 6d64 352d 5375 6d6d .# dann md5-Summ\n-00002720: 656e 2062 6572 6563 686e 656e 2c20 756d en berechnen, um\n-00002730: 2075 6e74 6572 7363 6869 6564 6c69 6368 unterschiedlich\n-00002740: 6520 5374 e46e 6465 2066 6573 747a 7573 e St.nde festzus\n-00002750: 7465 6c6c 656e 0a6d 7920 2840 6669 6c65 tellen.my (@file\n-00002760: 732c 2040 6d64 3573 756d 2c20 4064 6972 s, @md5sum, @dir\n-00002770: 732c 2024 656e 7472 7929 3b0a 6d79 2024 s, $entry);.my $\n-00002780: 6d64 3573 756d 426c 6f63 6b20 3d20 756e md5sumBlock = un\n-00002790: 6465 663b 0a6d 7920 246c 6173 7449 6e6f def;.my $lastIno\n-000027a0: 6465 203d 2075 6e64 6566 3b0a 666f 7265 de = undef;.fore\n-000027b0: 6163 6820 2465 6e74 7279 2028 4061 6c6c ach $entry (@all\n-000027c0: 4469 7273 290a 7b0a 2020 2020 6966 2028 Dirs).{. if (\n-000027d0: 6578 6973 7473 2024 6c69 6e6b 4669 6c65 exists $linkFile\n-000027e0: 7b24 656e 7472 797d 290a 2020 2020 7b0a {$entry}). {.\n-000027f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00002800: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',..\n-00002810: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-00002820: 205b 2273 6b69 7070 696e 6720 3c24 656e [\"skipping <$en\n-00002830: 7472 793e 225d 293b 0a09 6e65 7874 3b0a try>\"]);..next;.\n-00002840: 2020 2020 7d0a 0a20 2020 206d 7920 2466 }.. my $f\n-00002850: 203d 2024 656e 7472 7920 2e20 272f 2720 = $entry . '/' \n-00002860: 2e20 2466 696c 6557 6974 6852 656c 5061 . $fileWithRelPa\n-00002870: 7468 3b0a 2020 2020 6966 2028 2d66 2024 th;. if (-f $\n-00002880: 6629 0a20 2020 207b 0a09 7075 7368 2040 f). {..push @\n-00002890: 6669 6c65 732c 2024 663b 0a09 7075 7368 files, $f;..push\n-000028a0: 2040 6469 7273 2c20 2465 6e74 7279 3b0a @dirs, $entry;.\n-000028b0: 0a09 2320 6572 7374 206d 616c 2070 72fc ..# erst mal pr.\n-000028c0: 6665 6e2c 206f 6220 696e 6f64 6520 6964 fen, ob inode id\n-000028d0: 656e 7469 7363 6820 6973 740a 096d 7920 entisch ist..my \n-000028e0: 2824 696e 6f64 652c 2024 7369 7a65 2920 ($inode, $size) \n-000028f0: 3d20 2873 7461 7428 2466 2929 5b31 2c37 = (stat($f))[1,7\n-00002900: 5d3b 0a09 6966 2028 2469 6e6f 6465 203d ];..if ($inode =\n-00002910: 3d20 246c 6173 7449 6e6f 6465 290a 097b = $lastInode)..{\n-00002920: 0a09 2020 2020 7075 7368 2040 6d64 3573 .. push @md5s\n-00002930: 756d 2c20 246d 6435 7375 6d5b 406d 6435 um, $md5sum[@md5\n-00002940: 7375 6d20 2d20 315d 3b20 2023 206c 6574 sum - 1]; # let\n-00002950: 7a74 6520 6d64 3520 5375 6d6d 6520 6b6f zte md5 Summe ko\n-00002960: 7069 6572 656e 0a09 2020 2020 6e65 7874 pieren.. next\n-00002970: 3b20 2020 2020 2020 2020 2020 2020 2023 ; #\n-00002980: 206d 6435 2053 756d 6d65 206d 7573 7320 md5 Summe muss \n-00002990: 6e69 6368 7420 6265 7265 6368 6e65 7420 nicht berechnet \n-000029a0: 7765 7264 656e 0a09 7d0a 0924 6c61 7374 werden..}..$last\n-000029b0: 496e 6f64 6520 3d20 2469 6e6f 6465 3b0a Inode = $inode;.\n-000029c0: 0a09 2320 6d64 3520 5375 6d6d 6520 6d75 ..# md5 Summe mu\n-000029d0: 7373 2062 6572 6563 686e 6574 2077 6572 ss berechnet wer\n-000029e0: 6465 6e0a 096d 7920 246d 6435 203d 2026 den..my $md5 = &\n-000029f0: 3a3a 6361 6c63 4669 6c65 4d44 3553 756d ::calcFileMD5Sum\n-00002a00: 2822 2466 2229 3b0a 0924 7072 4c6f 672d (\"$f\");..$prLog-\n-00002a10: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00002a20: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-00002a30: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => [\"could\n-00002a40: 206e 6f74 2072 6561 6420 3c24 663e 225d not read <$f>\"]\n-00002a50: 290a 0920 2020 2075 6e6c 6573 7320 246d ).. unless $m\n-00002a60: 6435 3b0a 0a09 7075 7368 2040 6d64 3573 d5;...push @md5s\n-00002a70: 756d 2c20 246d 6435 3b0a 2020 2020 7d0a um, $md5;. }.\n-00002a80: 2020 2020 656c 7369 6620 282d 6420 2466 elsif (-d $f\n-00002a90: 2920 2020 2020 2020 2320 626c 6f63 6b65 ) # blocke\n-00002aa0: 6420 6669 6c65 0a20 2020 207b 0a09 2320 d file. {..# \n-00002ab0: 6d64 3520 7375 6d20 6f66 2062 6c6f 636b md5 sum of block\n-00002ac0: 2063 6865 636b 2073 756d 2066 696c 650a check sum file.\n-00002ad0: 096d 7920 2466 426c 6f63 6b20 3d20 2224 .my $fBlock = \"$\n-00002ae0: 662f 2e6d 6435 426c 6f63 6b43 6865 636b f/.md5BlockCheck\n-00002af0: 5375 6d73 2e62 7a32 223b 0a09 756e 6c65 Sums.bz2\";..unle\n-00002b00: 7373 2028 2d66 2024 6642 6c6f 636b 290a ss (-f $fBlock).\n-00002b10: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog->\n-00002b20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' =>\n-00002b30: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str\n-00002b40: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => [\"cannot op\n-00002b50: 656e 203c 2466 426c 6f63 6b3e 225d 293b en <$fBlock>\"]);\n-00002b60: 0a09 2020 2020 6e65 7874 3b0a 097d 0a09 .. next;..}..\n-00002b70: 6d79 2024 6d64 3520 3d20 263a 3a63 616c my $md5 = &::cal\n-00002b80: 6346 696c 654d 4435 5375 6d28 2224 6642 cFileMD5Sum(\"$fB\n-00002b90: 6c6f 636b 2229 3b0a 0924 7072 4c6f 672d lock\");..$prLog-\n-00002ba0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00002bb0: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... '\n-00002bc0: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => [\"could\n-00002bd0: 206e 6f74 2072 6561 6420 3c24 6642 6c6f not read <$fBlo\n-00002be0: 636b 3e22 5d29 0a09 2020 2020 756e 6c65 ck>\"]).. unle\n-00002bf0: 7373 2024 6d64 353b 0a09 7075 7368 2040 ss $md5;..push @\n-00002c00: 6669 6c65 732c 2024 663b 0a09 7075 7368 files, $f;..push\n-00002c10: 2040 6469 7273 2c20 2465 6e74 7279 3b0a @dirs, $entry;.\n-00002c20: 0970 7573 6820 406d 6435 7375 6d2c 2024 .push @md5sum, $\n-00002c30: 6d64 353b 0a20 2020 207d 0a7d 0a0a 2370 md5;. }.}..#p\n-00002c40: 7269 6e74 2022 6669 6c65 7320 3d20 5c6e rint \"files = \\n\n-00002c50: 222c 206a 6f69 6e28 225c 6e22 2c20 4066 \", join(\"\\n\", @f\n-00002c60: 696c 6573 292c 2022 5c6e 223b 0a23 7072 iles), \"\\n\";.#pr\n-00002c70: 696e 7420 226d 6435 7320 3d20 5c6e 222c int \"md5s = \\n\",\n-00002c80: 206a 6f69 6e28 225c 6e22 2c20 406d 6435 join(\"\\n\", @md5\n-00002c90: 7375 6d29 2c20 225c 6e22 3b0a 0a23 2055 sum), \"\\n\";..# U\n-00002ca0: 6e74 6572 7363 6869 6564 6c69 6368 6520 nterschiedliche \n-00002cb0: 5665 7273 696f 6e65 6e20 6d65 726b 656e Versionen merken\n-00002cc0: 0a6d 7920 2824 692c 2024 6a29 3b0a 6d79 .my ($i, $j);.my\n-00002cd0: 2028 4076 6572 7369 6f6e 4669 6c65 7329 (@versionFiles)\n-00002ce0: 203d 2024 6669 6c65 735b 305d 3b0a 6d79 = $files[0];.my\n-00002cf0: 2028 4076 6572 7369 6f6e 4469 7273 2920 (@versionDirs) \n-00002d00: 3d20 2464 6972 735b 305d 3b0a 6d79 2024 = $dirs[0];.my $\n-00002d10: 6c61 7374 6d64 3520 3d20 246d 6435 7375 lastmd5 = $md5su\n-00002d20: 6d5b 305d 3b0a 7072 696e 7466 2822 2532 m[0];.printf(\"%2\n-00002d30: 6420 2573 5c6e 222c 2031 2c20 2476 6572 d %s\\n\", 1, $ver\n-00002d40: 7369 6f6e 4669 6c65 735b 305d 2920 756e sionFiles[0]) un\n-00002d50: 6c65 7373 2024 6c6f 6361 7465 5361 6d65 less $locateSame\n-00002d60: 3b0a 666f 7220 2824 6a20 3d20 302c 2024 ;.for ($j = 0, $\n-00002d70: 6920 3d20 3120 3b20 2469 203c 2040 6669 i = 1 ; $i < @fi\n-00002d80: 6c65 7320 3b20 2469 2b2b 290a 7b0a 2020 les ; $i++).{. \n-00002d90: 2020 6966 2028 246d 6435 7375 6d5b 2469 if ($md5sum[$i\n-00002da0: 5d20 6e65 2024 6c61 7374 6d64 3529 0a20 ] ne $lastmd5). \n-00002db0: 2020 207b 0a09 246c 6173 746d 6435 203d {..$lastmd5 =\n-00002dc0: 2024 6d64 3573 756d 5b24 695d 3b0a 092b $md5sum[$i];..+\n-00002dd0: 2b24 6a3b 0a09 2476 6572 7369 6f6e 4669 +$j;..$versionFi\n-00002de0: 6c65 735b 246a 5d20 3d20 2466 696c 6573 les[$j] = $files\n-00002df0: 5b24 695d 3b0a 0924 7665 7273 696f 6e44 [$i];..$versionD\n-00002e00: 6972 735b 246a 5d20 3d20 2464 6972 735b irs[$j] = $dirs[\n-00002e10: 2469 5d3b 0a09 7072 696e 7466 2822 2532 $i];..printf(\"%2\n-00002e20: 6420 2573 5c6e 222c 2024 6a20 2b20 312c d %s\\n\", $j + 1,\n-00002e30: 2024 7665 7273 696f 6e46 696c 6573 5b24 $versionFiles[$\n-00002e40: 6a5d 2920 756e 6c65 7373 2024 6c6f 6361 j]) unless $loca\n-00002e50: 7465 5361 6d65 3b0a 2020 2020 7d0a 7d0a teSame;. }.}.\n-00002e60: 0a65 7869 7420 3020 756e 6c65 7373 2024 .exit 0 unless $\n-00002e70: 6c6f 6361 7465 5361 6d65 3b0a 0a6d 7920 locateSame;..my \n-00002e80: 2576 6572 7369 6f6e 4d44 3573 756d 3b20 %versionMD5sum; \n-00002e90: 2023 206d 6435 2053 756d 6d65 6e20 6dfc # md5 Summen m.\n-00002ea0: 7373 656e 2061 7573 2024 6368 6563 6b53 ssen aus $checkS\n-00002eb0: 756d 4669 6c65 2067 656c 6573 656e 2077 umFile gelesen w\n-00002ec0: 6572 6465 6e2c 0a20 2020 2020 2020 2020 erden,. \n-00002ed0: 2020 2020 2020 2020 2020 2023 2064 6120 # da \n-00002ee0: 616e 736f 6e73 7465 6e20 6b6f 6d70 7269 ansonsten kompri\n-00002ef0: 6d69 6572 7465 2044 6174 6569 656e 206d mierte Dateien m\n-00002f00: 6974 206e 6963 6874 2d6b 6f6d 7072 696d it nicht-komprim\n-00002f10: 6965 7274 656e 0a20 2020 2020 2020 2020 ierten. \n-00002f20: 2020 2020 2020 2020 2020 2023 2076 6572 # ver\n-00002f30: 676c 6963 6865 6e20 77fc 7264 656e 210a glichen w.rden!.\n-00002f40: 6d79 2025 7665 7273 696f 6e53 697a 653b my %versionSize;\n-00002f50: 2020 2020 2320 6b65 7920 3d20 6d64 3573 # key = md5s\n-00002f60: 756d 2028 7769 6520 6f62 656e 292c 2076 um (wie oben), v\n-00002f70: 616c 7565 203d 2073 697a 6520 6175 7320 alue = size aus \n-00002f80: 2463 6865 636b 5375 6d46 696c 650a 6d79 $checkSumFile.my\n-00002f90: 2025 7665 7273 696f 6e55 4944 3b20 2020 %versionUID; \n-00002fa0: 2020 2320 6b65 7920 3d20 6d64 3573 756d # key = md5sum\n-00002fb0: 2028 7769 6520 6f62 656e 292c 2076 616c (wie oben), val\n-00002fc0: 7565 203d 2075 6964 2061 7573 2024 6368 ue = uid aus $ch\n-00002fd0: 6563 6b53 756d 4669 6c65 0a6d 7920 2576 eckSumFile.my %v\n-00002fe0: 6572 7369 6f6e 4749 443b 2020 2020 2023 ersionGID; #\n-00002ff0: 206b 6579 203d 206d 6435 7375 6d20 2877 key = md5sum (w\n-00003000: 6965 206f 6265 6e29 2c20 7661 6c75 6520 ie oben), value \n-00003010: 3d20 7569 6420 6175 7320 2463 6865 636b = uid aus $check\n-00003020: 5375 6d46 696c 650a 6d79 2025 7665 7273 SumFile.my %vers\n-00003030: 696f 6e4d 6f64 653b 2020 2020 2320 6b65 ionMode; # ke\n-00003040: 7920 3d20 6d64 3573 756d 2028 7769 6520 y = md5sum (wie \n-00003050: 6f62 656e 292c 2076 616c 7565 203d 206d oben), value = m\n-00003060: 6f64 6520 6175 7320 2463 6865 636b 5375 ode aus $checkSu\n-00003070: 6d46 696c 650a 6d79 2025 7665 7273 696f mFile.my %versio\n-00003080: 6e43 5469 6d65 3b20 2020 2320 6b65 7920 nCTime; # key \n-00003090: 3d20 6d64 3573 756d 2028 7769 6520 6f62 = md5sum (wie ob\n-000030a0: 656e 292c 2076 616c 7565 203d 2063 7469 en), value = cti\n-000030b0: 6d65 2061 7573 2024 6368 6563 6b53 756d me aus $checkSum\n-000030c0: 4669 6c65 0a6d 7920 2576 6572 7369 6f6e File.my %version\n-000030d0: 4d54 696d 653b 2020 2023 206b 6579 203d MTime; # key =\n-000030e0: 206d 6435 7375 6d20 2877 6965 206f 6265 md5sum (wie obe\n-000030f0: 6e29 2c20 7661 6c75 6520 3d20 6d74 696d n), value = mtim\n-00003100: 6520 6175 7320 2463 6865 636b 5375 6d46 e aus $checkSumF\n-00003110: 696c 650a 6d79 2025 7665 7273 696f 6e43 ile.my %versionC\n-00003120: 6f6d 7072 3b20 2020 2320 6b65 7920 3d20 ompr; # key = \n-00003130: 6d64 3573 756d 2028 7769 6520 6f62 656e md5sum (wie oben\n-00003140: 292c 2076 616c 7565 203d 2063 7c75 2061 ), value = c|u a\n-00003150: 7573 2024 6368 6563 6b53 756d 4669 6c65 us $checkSumFile\n-00003160: 0a6d 7920 2840 7665 7273 696f 6e4d 4435 .my (@versionMD5\n-00003170: 7329 3b0a 6d79 2028 4064 756d 6d79 293b s);.my (@dummy);\n-00003180: 0a0a 6d79 2024 616c 6c20 3d20 4076 6572 ..my $all = @ver\n-00003190: 7369 6f6e 4469 7273 202b 2040 616c 6c44 sionDirs + @allD\n-000031a0: 6972 733b 0a6d 7920 2461 6c6c 436f 756e irs;.my $allCoun\n-000031b0: 7420 3d20 303b 0a6d 7920 2461 6c6c 4163 t = 0;.my $allAc\n-000031c0: 7443 6f75 6e74 203d 2030 3b0a 666f 7265 tCount = 0;.fore\n-000031d0: 6163 6820 2465 6e74 7279 2028 4076 6572 ach $entry (@ver\n-000031e0: 7369 6f6e 4469 7273 2920 2020 2320 6a65 sionDirs) # je\n-000031f0: 747a 7420 616c 6c65 207a 7572 2044 6174 tzt alle zur Dat\n-00003200: 6569 202a 6765 7370 6569 6368 6572 7465 ei *gespeicherte\n-00003210: 6e2a 0a7b 2020 2020 2020 2020 2020 2020 n*.{ \n-00003220: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00003230: 2020 2023 2075 6e74 6572 7363 6869 6564 # unterschied\n-00003240: 6c69 6368 656e 206d 6435 2053 756d 6d65 lichen md5 Summe\n-00003250: 6e20 6c61 6465 6e0a 2020 2020 6966 2028 n laden. if (\n-00003260: 2476 6572 626f 7365 290a 2020 2020 7b0a $verbose). {.\n-00003270: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print('\n-00003280: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',..\n-00003290: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' =>\n-000032a0: 205b 2272 6561 6469 6e67 203c 2465 6e74 [\"reading <$ent\n-000032b0: 7279 3e22 5d29 3b0a 2020 2020 7d0a 2020 ry>\"]);. }. \n-000032c0: 2020 656c 7365 0a20 2020 207b 0a09 6966 else. {..if\n-000032d0: 2028 2461 6c6c 436f 756e 742b 2b20 2f20 ($allCount++ / \n-000032e0: 2461 6c6c 203e 3d20 2461 6c6c 4163 7443 $all >= $allActC\n-000032f0: 6f75 6e74 202f 2031 3029 0a09 7b0a 0920 ount / 10)..{.. \n-00003300: 2020 2070 7269 6e74 2022 2461 6c6c 4163 print \"$allAc\n-00003310: 7443 6f75 6e74 2022 3b0a 0920 2020 2053 tCount \";.. S\n-00003320: 5444 4f55 542d 3e61 7574 6f66 6c75 7368 TDOUT->autoflush\n-00003330: 2831 293b 0a09 2020 2020 2461 6c6c 4163 (1);.. $allAc\n-00003340: 7443 6f75 6e74 2b2b 3b0a 097d 0a20 2020 tCount++;..}. \n-00003350: 207d 0a0a 2020 2020 6d79 2024 666f 756e }.. my $foun\n-00003360: 6420 3d20 303b 0a20 2020 206d 7920 2472 d = 0;. my $r\n-00003370: 6373 6620 3d20 7265 6164 4368 6563 6b53 csf = readCheckS\n-00003380: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch\n-00003390: 6563 6b53 756d 4669 6c65 2720 3d3e 2022 eckSumFile' => \"\n-000033a0: 2465 6e74 7279 2f24 6368 6563 6b53 756d $entry/$checkSum\n-000033b0: 4669 6c65 222c 0a09 0909 0920 2020 2020 File\",..... \n-000033c0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL\n-000033d0: 6f67 293b 0a09 0909 0920 2020 2020 0a23 og);..... .#\n-000033e0: 2020 2020 6d79 2024 6d65 7461 203d 2024 my $meta = $\n-000033f0: 7263 7366 2d3e 6765 744d 6574 6156 616c rcsf->getMetaVal\n-00003400: 4669 656c 6428 293b 0a23 2020 2020 6d79 Field();.# my\n-00003410: 2024 706f 7374 6669 7820 3d20 2824 246d $postfix = ($$m\n-00003420: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})-\n-00003430: 3e5b 305d 3b20 2020 2023 2070 6f73 7466 >[0]; # postf\n-00003440: 6978 2028 6b6f 6d70 722e 206f 6465 7220 ix (kompr. oder \n-00003450: 6e69 6368 7429 206d 6572 6b65 6e0a 2020 nicht) merken. \n-00003460: 2020 6d79 2024 706f 7374 6669 7820 3d20 my $postfix = \n-00003470: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi\n-00003480: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix')\n-00003490: 3b0a 0a20 2020 206d 7920 2824 6d64 3573 ;.. my ($md5s\n-000034a0: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev\n-000034b0: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac\n-000034c0: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt\n-000034d0: 696d 652c 2024 6174 696d 652c 0a09 2473 ime, $atime,..$s\n-000034e0: 697a 652c 2024 7569 642c 2024 6769 642c ize, $uid, $gid,\n-000034f0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam\n-00003500: 6529 3b0a 2020 2020 7768 696c 6520 2828 e);. while ((\n-00003510: 2824 6d64 3573 756d 2c20 2463 6f6d 7072 ($md5sum, $compr\n-00003520: 2c20 2464 6576 496e 6f64 652c 2024 696e , $devInode, $in\n-00003530: 6f64 6542 6163 6b75 702c 2024 6374 696d odeBackup, $ctim\n-00003540: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim\n-00003550: 652c 0a09 2020 2020 2473 697a 652c 2024 e,.. $size, $\n-00003560: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode\n-00003570: 2c20 2466 696c 656e 616d 6529 203d 2024 , $filename) = $\n-00003580: 7263 7366 2d3e 6e65 7874 4c69 6e65 2829 rcsf->nextLine()\n-00003590: 2920 3e20 3029 0a20 2020 207b 0a09 2466 ) > 0). {..$f\n-000035a0: 696c 656e 616d 6520 2e3d 2024 706f 7374 ilename .= $post\n-000035b0: 6669 7820 6966 2024 636f 6d70 7220 6571 fix if $compr eq\n-000035c0: 2027 6327 3b0a 0a09 6966 2028 2466 696c 'c';...if ($fil\n-000035d0: 6557 6974 6852 656c 5061 7468 2065 7120 eWithRelPath eq \n-000035e0: 2466 696c 656e 616d 6529 0a09 7b0a 0920 $filename)..{.. \n-000035f0: 2020 2070 7573 6820 4076 6572 7369 6f6e push @version\n-00003600: 4d44 3573 2c20 246d 6435 7375 6d3b 2020 MD5s, $md5sum; \n-00003610: 2020 2020 2023 204f 7269 6769 6e61 6c20 # Original \n-00003620: 6d64 3520 5375 6d6d 6520 6d65 726b 656e md5 Summe merken\n-00003630: 0a09 2020 2020 7075 7368 2040 6475 6d6d .. push @dumm\n-00003640: 792c 2024 656e 7472 793b 0a09 2020 2020 y, $entry;.. \n-00003650: 2476 6572 7369 6f6e 4d44 3573 756d 7b24 $versionMD5sum{$\n-00003660: 6d64 3573 756d 7d20 3d20 5b5d 3b0a 0920 md5sum} = [];.. \n-00003670: 2020 2024 7665 7273 696f 6e53 697a 657b $versionSize{\n-00003680: 246d 6435 7375 6d7d 203d 2024 7369 7a65 $md5sum} = $size\n-00003690: 3b0a 0920 2020 2024 7665 7273 696f 6e55 ;.. $versionU\n-000036a0: 4944 7b24 6d64 3573 756d 7d20 3d20 2475 ID{$md5sum} = $u\n-000036b0: 6964 3b0a 0920 2020 2024 7665 7273 696f id;.. $versio\n-000036c0: 6e47 4944 7b24 6d64 3573 756d 7d20 3d20 nGID{$md5sum} = \n-000036d0: 2467 6964 3b0a 0920 2020 2024 7665 7273 $gid;.. $vers\n-000036e0: 696f 6e4d 6f64 657b 246d 6435 7375 6d7d ionMode{$md5sum}\n-000036f0: 203d 2024 6d6f 6465 3b0a 0920 2020 2024 = $mode;.. $\n-00003700: 7665 7273 696f 6e43 5469 6d65 7b24 6d64 versionCTime{$md\n-00003710: 3573 756d 7d20 3d20 2463 7469 6d65 3b0a 5sum} = $ctime;.\n-00003720: 0920 2020 2024 7665 7273 696f 6e4d 5469 . $versionMTi\n-00003730: 6d65 7b24 6d64 3573 756d 7d20 3d20 246d me{$md5sum} = $m\n-00003740: 7469 6d65 3b0a 0920 2020 2024 7665 7273 time;.. $vers\n-00003750: 696f 6e43 6f6d 7072 7b24 6d64 3573 756d ionCompr{$md5sum\n-00003760: 7d20 3d20 2463 6f6d 7072 3b0a 0920 2020 } = $compr;.. \n-00003770: 2024 666f 756e 6420 3d20 313b 0a09 2020 $found = 1;.. \n-00003780: 2020 6c61 7374 3b0a 097d 0a20 2020 207d last;..}. }\n-00003790: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri\n-000037a0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E\n-000037b0: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. \n-000037c0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [\n-000037d0: 2263 616e 6e6f 7420 6669 6e64 203c 2466 \"cannot find <$f\n-000037e0: 696c 6557 6974 6852 656c 5061 7468 3e20 ileWithRelPath> \n-000037f0: 696e 203c 2465 6e74 7279 3e22 5d29 0a20 in <$entry>\"]). \n-00003800: 2020 2020 2020 2069 6620 2824 666f 756e if ($foun\n-00003810: 6420 3d3d 2030 293b 0a7d 0a28 4076 6572 d == 0);.}.(@ver\n-00003820: 7369 6f6e 4469 7273 2920 3d20 2840 6475 sionDirs) = (@du\n-00003830: 6d6d 7929 3b0a 0a23 7072 696e 7420 225c mmy);..#print \"\\\n-00003840: 6e4f 7269 6769 6e61 6c2d 4d44 352d 5375 nOriginal-MD5-Su\n-00003850: 6d6d 656e 3a5c 6e22 3b0a 2370 7269 6e74 mmen:\\n\";.#print\n-00003860: 2022 7665 7273 696f 6e46 696c 6573 203d \"versionFiles =\n-00003870: 205c 6e22 2c20 6a6f 696e 2822 5c6e 222c \\n\", join(\"\\n\",\n-00003880: 2040 7665 7273 696f 6e46 696c 6573 292c @versionFiles),\n-00003890: 2022 5c6e 223b 0a23 7072 696e 7420 2276 \"\\n\";.#print \"v\n-000038a0: 6572 7369 6f6e 4d44 3573 203d 205c 6e22 ersionMD5s = \\n\"\n-000038b0: 2c20 6a6f 696e 2822 5c6e 222c 2040 7665 , join(\"\\n\", @ve\n-000038c0: 7273 696f 6e4d 4435 7329 2c20 225c 6e22 rsionMD5s), \"\\n\"\n-000038d0: 3b0a 0a23 0a23 2041 6c6c 6520 2463 6865 ;..#.# Alle $che\n-000038e0: 636b 5375 6d46 696c 6573 2064 7572 6368 ckSumFiles durch\n-000038f0: 6765 6865 6e20 756e 6420 4461 7465 6965 gehen und Dateie\n-00003900: 6e20 6d69 7420 7061 7373 656e 6465 6e20 n mit passenden \n-00003910: 4d44 3520 5375 6d6d 656e 206d 6572 6b65 MD5 Summen merke\n-00003920: 6e0a 230a 666f 7265 6163 6820 2465 6e74 n.#.foreach $ent\n-00003930: 7279 2028 4061 6c6c 4469 7273 290a 7b0a ry (@allDirs).{.\n-00003940: 2020 2020 6966 2028 2476 6572 626f 7365 if ($verbose\n-00003950: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog-\n-00003960: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' =\n-00003970: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... '\n-00003980: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => [\"check\n-00003990: 696e 6720 3c24 656e 7472 793e 225d 293b ing <$entry>\"]);\n-000039a0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-000039b0: 2020 2020 7b0a 0969 6620 2824 616c 6c43 {..if ($allC\n-000039c0: 6f75 6e74 2b2b 202f 2024 616c 6c20 3e3d ount++ / $all >=\n-000039d0: 2024 616c 6c41 6374 436f 756e 7420 2f20 $allActCount / \n-000039e0: 3130 290a 097b 0a09 2020 2020 7072 696e 10)..{.. prin\n-000039f0: 7420 2224 616c 6c41 6374 436f 756e 7420 t \"$allActCount \n-00003a00: 223b 0a09 2020 2020 5354 444f 5554 2d3e \";.. STDOUT->\n-00003a10: 6175 746f 666c 7573 6828 3129 3b0a 0920 autoflush(1);.. \n-00003a20: 2020 2024 616c 6c41 6374 436f 756e 742b $allActCount+\n-00003a30: 2b3b 0a09 7d0a 2020 2020 7d0a 0a20 2020 +;..}. }.. \n-00003a40: 206d 7920 2472 6373 6620 3d20 7265 6164 my $rcsf = read\n-00003a50: 4368 6563 6b53 756d 4669 6c65 2d3e 6e65 CheckSumFile->ne\n-00003a60: 7728 272d 6368 6563 6b53 756d 4669 6c65 w('-checkSumFile\n-00003a70: 2720 3d3e 2022 2465 6e74 7279 2f24 6368 ' => \"$entry/$ch\n-00003a80: 6563 6b53 756d 4669 6c65 222c 0a09 0909 eckSumFile\",....\n-00003a90: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' =\n-00003aa0: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. \n-00003ab0: 6d79 2028 246d 6435 7375 6d2c 2024 636f my ($md5sum, $co\n-00003ac0: 6d70 722c 2024 6465 7649 6e6f 6465 2c20 mpr, $devInode, \n-00003ad0: 2469 6e6f 6465 4261 636b 7570 2c20 2463 $inodeBackup, $c\n-00003ae0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a\n-00003af0: 7469 6d65 2c0a 0924 7369 7a65 2c20 2475 time,..$size, $u\n-00003b00: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode,\n-00003b10: 2024 6669 6c65 6e61 6d65 293b 0a20 2020 $filename);. \n-00003b20: 2077 6869 6c65 2028 2828 246d 6435 7375 while ((($md5su\n-00003b30: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI\n-00003b40: 6e6f 6465 2c20 2469 6e6f 6465 4261 636b node, $inodeBack\n-00003b50: 7570 2c20 2463 7469 6d65 2c20 246d 7469 up, $ctime, $mti\n-00003b60: 6d65 2c20 2461 7469 6d65 2c0a 0920 2020 me, $atime,.. \n-00003b70: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g\n-00003b80: 6964 2c20 246d 6f64 652c 2024 6669 6c65 id, $mode, $file\n-00003b90: 6e61 6d65 2920 3d20 2472 6373 662d 3e6e name) = $rcsf->n\n-00003ba0: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0).\n-00003bb0: 2020 2020 7b0a 0a09 6966 2028 6578 6973 {...if (exis\n-00003bc0: 7473 2824 7665 7273 696f 6e4d 4435 7375 ts($versionMD5su\n-00003bd0: 6d7b 246d 6435 7375 6d7d 2929 0a09 7b0a m{$md5sum}))..{.\n-00003be0: 0920 2020 2070 7573 6820 407b 2476 6572 . push @{$ver\n-00003bf0: 7369 6f6e 4d44 3573 756d 7b24 6d64 3573 sionMD5sum{$md5s\n-00003c00: 756d 7d7d 2c20 2224 656e 7472 792f 2466 um}}, \"$entry/$f\n-00003c10: 696c 656e 616d 6522 3b0a 2309 2020 2020 ilename\";.#. \n-00003c20: 7072 696e 7420 2224 6d64 3573 756d 2024 print \"$md5sum $\n-00003c30: 656e 7472 792f 2466 696c 656e 616d 655c entry/$filename\\\n-00003c40: 6e22 3b0a 097d 0a20 2020 207d 0a23 2020 n\";..}. }.# \n-00003c50: 2020 636c 6f73 6528 4649 4c45 293b 0a7d close(FILE);.}\n-00003c60: 0a70 7269 6e74 2022 5c6e 2220 756e 6c65 .print \"\\n\" unle\n-00003c70: 7373 2024 7665 7262 6f73 653b 0a0a 0a23 ss $verbose;...#\n-00003c80: 2041 7573 6761 6265 3a0a 0a23 2053 6f72 Ausgabe:..# Sor\n-00003c90: 7469 6572 656e 2064 6572 2067 6566 756e tieren der gefun\n-00003ca0: 6465 6e65 6e20 4461 7465 6965 6e20 7072 denen Dateien pr\n-00003cb0: 6f20 6d64 3520 5375 6d6d 650a 666f 7265 o md5 Summe.fore\n-00003cc0: 6163 6820 2465 6e74 7279 2028 6b65 7973 ach $entry (keys\n-00003cd0: 2025 7665 7273 696f 6e4d 4435 7375 6d29 %versionMD5sum)\n-00003ce0: 0a7b 0a20 2020 2040 7b24 7665 7273 696f .{. @{$versio\n-00003cf0: 6e4d 4435 7375 6d7b 2465 6e74 7279 7d7d nMD5sum{$entry}}\n-00003d00: 203d 2073 6f72 7420 407b 2476 6572 7369 = sort @{$versi\n-00003d10: 6f6e 4d44 3573 756d 7b24 656e 7472 797d onMD5sum{$entry}\n-00003d20: 7d3b 0a7d 0a0a 2320 4175 6662 6175 656e };.}..# Aufbauen\n-00003d30: 2065 696e 6572 204c 6973 7465 2c20 6469 einer Liste, di\n-00003d40: 6520 736f 2073 6f72 7469 6572 7420 7765 e so sortiert we\n-00003d50: 7264 656e 206b 616e 6e2c 2064 61df 2064 rden kann, da. d\n-00003d60: 6965 20e4 6c74 6573 7465 6e0a 2320 4461 ie .ltesten.# Da\n-00003d70: 7465 696e 616d 656e 2064 6965 2065 7273 teinamen die ers\n-00003d80: 7465 6e20 5665 7273 696f 6e73 6e75 6d6d ten Versionsnumm\n-00003d90: 6572 6e20 6265 6b6f 6d6d 656e 0a6d 7920 ern bekommen.my \n-00003da0: 406c 6973 743b 0a66 6f72 6561 6368 2024 @list;.foreach $\n-00003db0: 656e 7472 7920 286b 6579 7320 2576 6572 entry (keys %ver\n-00003dc0: 7369 6f6e 4d44 3573 756d 290a 7b0a 2020 sionMD5sum).{. \n-00003dd0: 2020 7075 7368 2040 6c69 7374 2c20 7b0a push @list, {.\n-00003de0: 0927 6d64 3527 203d 3e20 2465 6e74 7279 .'md5' => $entry\n-00003df0: 2c0a 0927 6c69 7374 2720 3d3e 2024 7665 ,..'list' => $ve\n-00003e00: 7273 696f 6e4d 4435 7375 6d7b 2465 6e74 rsionMD5sum{$ent\n-00003e10: 7279 7d2c 0a09 2773 697a 6527 203d 3e20 ry},..'size' => \n-00003e20: 2476 6572 7369 6f6e 5369 7a65 7b24 656e $versionSize{$en\n-00003e30: 7472 797d 2c0a 0927 7569 6427 203d 3e20 try},..'uid' => \n-00003e40: 2476 6572 7369 6f6e 5549 447b 2465 6e74 $versionUID{$ent\n-00003e50: 7279 7d2c 0a09 2767 6964 2720 3d3e 2024 ry},..'gid' => $\n-00003e60: 7665 7273 696f 6e47 4944 7b24 656e 7472 versionGID{$entr\n-00003e70: 797d 2c0a 0927 6d6f 6465 2720 3d3e 2024 y},..'mode' => $\n-00003e80: 7665 7273 696f 6e4d 6f64 657b 2465 6e74 versionMode{$ent\n-00003e90: 7279 7d2c 0a09 2763 7469 6d65 2720 3d3e ry},..'ctime' =>\n-00003ea0: 2024 7665 7273 696f 6e43 5469 6d65 7b24 $versionCTime{$\n-00003eb0: 656e 7472 797d 2c0a 0927 6d74 696d 6527 entry},..'mtime'\n-00003ec0: 203d 3e20 2476 6572 7369 6f6e 4d54 696d => $versionMTim\n-00003ed0: 657b 2465 6e74 7279 7d2c 0a09 2763 6f6d e{$entry},..'com\n-00003ee0: 7072 2720 3d3e 2024 7665 7273 696f 6e43 pr' => $versionC\n-00003ef0: 6f6d 7072 7b24 656e 7472 797d 0a20 2020 ompr{$entry}. \n-00003f00: 207d 3b0a 7d0a 2469 203d 2031 3b0a 666f };.}.$i = 1;.fo\n-00003f10: 7265 6163 6820 2465 6e74 7279 2028 2073 reach $entry ( s\n-00003f20: 6f72 7420 7b20 2461 2d3e 7b27 6c69 7374 ort { $a->{'list\n-00003f30: 277d 5b30 5d20 636d 7020 2462 2d3e 7b27 '}[0] cmp $b->{'\n-00003f40: 6c69 7374 277d 5b30 5d20 7d20 406c 6973 list'}[0] } @lis\n-00003f50: 7420 290a 7b0a 2020 2020 6d79 2024 7076 t ).{. my $pv\n-00003f60: 7320 3d20 2727 3b0a 2020 2020 6966 2028 s = '';. if (\n-00003f70: 2473 686f 7753 697a 6529 0a20 2020 207b $showSize). {\n-00003f80: 0a09 2470 7673 203d 2027 2027 202e 2028 ..$pvs = ' ' . (\n-00003f90: 2668 756d 616e 5265 6164 6162 6c65 2824 &humanReadable($\n-00003fa0: 656e 7472 792d 3e7b 2773 697a 6527 7d29 entry->{'size'})\n-00003fb0: 295b 305d 202e 2027 2027 202e 0a09 2020 )[0] . ' ' ... \n-00003fc0: 2020 2465 6e74 7279 2d3e 7b27 7369 7a65 $entry->{'size\n-00003fd0: 277d 202e 2027 2062 7974 6573 2027 3b0a '} . ' bytes ';.\n-00003fe0: 2020 2020 6966 2028 2465 6e74 7279 2d3e if ($entry->\n-00003ff0: 7b27 636f 6d70 7227 7d20 6571 2027 6327 {'compr'} eq 'c'\n-00004000: 290a 2020 2020 7b0a 0924 7076 7320 2e3d ). {..$pvs .=\n-00004010: 2027 2863 6f6d 7072 6573 7365 6429 273b '(compressed)';\n-00004020: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else.\n-00004030: 2020 2020 7b0a 0924 7076 7320 2e3d 2027 {..$pvs .= '\n-00004040: 286e 6f74 2063 6f6d 7072 6573 7365 6429 (not compressed)\n-00004050: 273b 0a20 2020 207d 0a20 2020 207d 0a20 ';. }. }. \n-00004060: 2020 2070 7269 6e74 2022 2469 3a24 7076 print \"$i:$pv\n-00004070: 7320 286d 6435 3d22 2c20 2465 6e74 7279 s (md5=\", $entry\n-00004080: 2d3e 7b27 6d64 3527 7d2c 2022 295c 6e22 ->{'md5'}, \")\\n\"\n-00004090: 3b0a 2020 2020 6d79 2040 703b 0a20 2020 ;. my @p;. \n-000040a0: 2070 7573 6820 4070 2c20 2775 6964 203d push @p, 'uid =\n-000040b0: 2027 202e 2024 656e 7472 792d 3e7b 2775 ' . $entry->{'u\n-000040c0: 6964 277d 2069 6620 2473 686f 7755 4944 id'} if $showUID\n-000040d0: 3b0a 2020 2020 7075 7368 2040 702c 2027 ;. push @p, '\n-000040e0: 6769 6420 3d20 2720 2e20 2465 6e74 7279 gid = ' . $entry\n-000040f0: 2d3e 7b27 6769 6427 7d20 2069 6620 2473 ->{'gid'} if $s\n-00004100: 686f 7747 4944 3b0a 2020 2020 7075 7368 howGID;. push\n-00004110: 2040 702c 2073 7072 696e 7466 2822 6d6f @p, sprintf(\"mo\n-00004120: 6465 203d 2030 256f 222c 2024 656e 7472 de = 0%o\", $entr\n-00004130: 792d 3e7b 276d 6f64 6527 7d29 2069 6620 y->{'mode'}) if \n-00004140: 2473 686f 774d 6f64 653b 0a20 2020 2070 $showMode;. p\n-00004150: 7269 6e74 2027 2020 2020 272c 206a 6f69 rint ' ', joi\n-00004160: 6e28 272c 2027 2c20 4070 292c 2022 5c6e n(', ', @p), \"\\n\n-00004170: 2220 6966 2028 4070 293b 0a20 2020 2040 \" if (@p);. @\n-00004180: 7020 3d20 2829 3b0a 2020 2020 6966 2028 p = ();. if (\n-00004190: 2473 686f 7743 5469 6d65 290a 2020 2020 $showCTime). \n-000041a0: 7b0a 096d 7920 2464 203d 2064 6174 6554 {..my $d = dateT\n-000041b0: 6f6f 6c73 2d3e 6e65 7728 272d 756e 6978 ools->new('-unix\n-000041c0: 5469 6d65 2720 3d3e 2024 656e 7472 792d Time' => $entry-\n-000041d0: 3e7b 2763 7469 6d65 277d 293b 0a09 7075 >{'ctime'});..pu\n-000041e0: 7368 2040 702c 2027 6374 696d 6520 3d20 sh @p, 'ctime = \n-000041f0: 2720 2e20 2464 2d3e 6765 7444 6174 6554 ' . $d->getDateT\n-00004200: 696d 6528 293b 0a20 2020 207d 0a20 2020 ime();. }. \n-00004210: 2069 6620 2824 7368 6f77 4d54 696d 6529 if ($showMTime)\n-00004220: 0a20 2020 207b 0a09 6d79 2024 6420 3d20 . {..my $d = \n-00004230: 6461 7465 546f 6f6c 732d 3e6e 6577 2827 dateTools->new('\n-00004240: 2d75 6e69 7854 696d 6527 203d 3e20 2465 -unixTime' => $e\n-00004250: 6e74 7279 2d3e 7b27 6d74 696d 6527 7d29 ntry->{'mtime'})\n-00004260: 3b0a 0970 7573 6820 4070 2c20 276d 7469 ;..push @p, 'mti\n-00004270: 6d65 203d 2027 202e 2024 642d 3e67 6574 me = ' . $d->get\n-00004280: 4461 7465 5469 6d65 2829 3b0a 2020 2020 DateTime();. \n-00004290: 7d0a 2020 2020 6966 2028 2473 686f 7741 }. if ($showA\n-000042a0: 5469 6d65 290a 2020 2020 7b0a 096d 7920 Time). {..my \n-000042b0: 2464 203d 2064 6174 6554 6f6f 6c73 2d3e $d = dateTools->\n-000042c0: 6e65 7728 272d 756e 6978 5469 6d65 2720 new('-unixTime' \n-000042d0: 3d3e 2024 656e 7472 792d 3e7b 2761 7469 => $entry->{'ati\n-000042e0: 6d65 277d 293b 0a09 7075 7368 2040 702c me'});..push @p,\n-000042f0: 2027 6174 696d 6520 3d20 2720 2e20 2464 'atime = ' . $d\n-00004300: 2d3e 6765 7444 6174 6554 696d 6528 293b ->getDateTime();\n-00004310: 0a20 2020 207d 0a20 2020 2070 7269 6e74 . }. print\n-00004320: 2027 2020 2020 272c 206a 6f69 6e28 272c ' ', join(',\n-00004330: 2027 2c20 4070 292c 2022 5c6e 2220 6966 ', @p), \"\\n\" if\n-00004340: 2028 4070 293b 0a20 2020 2070 7269 6e74 (@p);. print\n-00004350: 2022 5c74 223b 0a20 2020 2070 7269 6e74 \"\\t\";. print\n-00004360: 206a 6f69 6e28 225c 6e5c 7422 2c20 407b join(\"\\n\\t\", @{\n-00004370: 2465 6e74 7279 2d3e 7b27 6c69 7374 277d $entry->{'list'}\n-00004380: 7d29 2c20 225c 6e22 3b0a 2020 2020 2b2b }), \"\\n\";. ++\n-00004390: 2469 3b0a 7d0a 0a65 7869 7420 303b 0a $i;.}..exit 0;.\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"}, {"source1": "./usr/bin/storeBackup_du", "source2": "./usr/bin/storeBackup_du", "has_internal_linenos": true, "unified_diff": "@@ -1,419 +1,4 @@\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: 3232 290a 2320 2020 2020 2020 2020 2020 22).# \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 246d 6169 6e3a 3a53 544f 5245 X;..$main::STORE\n-00000330: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = \n-00000340: 756e 6465 663b 0a0a 7573 6520 7374 7269 undef;..use stri\n-00000350: 6374 3b0a 0a0a 7375 6220 6c69 6250 6174 ct;...sub libPat\n-00000360: 680a 7b0a 2020 2020 6d79 2024 6669 6c65 h.{. my $file\n-00000370: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m\n-00000380: 7920 2464 6972 3b0a 0a20 2020 2023 2046 y $dir;.. # F\n-00000390: 616c 6c73 2044 6174 6569 2073 656c 6273 alls Datei selbs\n-000003a0: 7420 6569 6e20 7379 6d6c 696e 6b20 6973 t ein symlink is\n-000003b0: 742c 2073 6f6c 616e 6765 2066 6f6c 6765 t, solange folge\n-000003c0: 6e2c 2062 6973 2061 7566 6765 6cf6 7374 n, bis aufgel.st\n-000003d0: 0a20 2020 2069 6620 282d 6620 2466 696c . if (-f $fil\n-000003e0: 6529 0a20 2020 207b 0a09 7768 696c 6520 e). {..while \n-000003f0: 282d 6c20 2466 696c 6529 0a09 7b0a 0920 (-l $file)..{.. \n-00000400: 2020 206d 7920 246c 696e 6b20 3d20 7265 my $link = re\n-00000410: 6164 6c69 6e6b 2824 6669 6c65 293b 0a0a adlink($file);..\n-00000420: 0920 2020 2069 6620 2873 7562 7374 7228 . if (substr(\n-00000430: 246c 696e 6b2c 2030 2c20 3129 206e 6520 $link, 0, 1) ne \n-00000440: 222f 2229 0a09 2020 2020 7b0a 0909 2466 \"/\").. {...$f\n-00000450: 696c 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 ile =~ s/[^\\/]+$\n-00000460: 2f24 6c69 6e6b 2f3b 0a09 2020 2020 7d0a /$link/;.. }.\n-00000470: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. {\n-00000480: 0a09 0924 6669 6c65 203d 2024 6c69 6e6b ...$file = $link\n-00000490: 3b0a 0920 2020 207d 0a09 7d0a 0a09 2824 ;.. }..}...($\n-000004a0: 6469 722c 2024 6669 6c65 2920 3d20 2673 dir, $file) = &s\n-000004b0: 706c 6974 4669 6c65 4469 7228 2466 696c plitFileDir($fil\n-000004c0: 6529 3b0a 0924 6669 6c65 203d 2022 2f24 e);..$file = \"/$\n-000004d0: 6669 6c65 223b 0a20 2020 207d 0a20 2020 file\";. }. \n-000004e0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri\n-000004f0: 6e74 2053 5444 4552 5220 223c 2466 696c nt STDERR \"<$fil\n-00000500: 653e 2064 6f65 7320 6e6f 7420 6578 6973 e> does not exis\n-00000510: 7421 5c6e 223b 0a09 6578 6974 2031 3b0a t!\\n\";..exit 1;.\n-00000520: 2020 2020 7d0a 0a20 2020 2024 6469 7220 }.. $dir \n-00000530: 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 2020 .= \"/../lib\"; \n-00000540: 2020 2020 2020 2020 2320 5066 6164 207a # Pfad z\n-00000550: 7520 6465 6e20 4269 626c 696f 7468 656b u den Bibliothek\n-00000560: 656e 0a20 2020 206d 7920 246f 6c64 4469 en. my $oldDi\n-00000570: 7220 3d20 602f 6269 6e2f 7077 6460 3b0a r = `/bin/pwd`;.\n-00000580: 2020 2020 6368 6f6d 7020 246f 6c64 4469 chomp $oldDi\n-00000590: 723b 0a20 2020 2069 6620 2863 6864 6972 r;. if (chdir\n-000005a0: 2024 6469 7229 0a20 2020 207b 0a09 6d79 $dir). {..my\n-000005b0: 2024 6162 7344 6972 203d 2060 2f62 696e $absDir = `/bin\n-000005c0: 2f70 7764 603b 0a09 6368 6f70 2024 6162 /pwd`;..chop $ab\n-000005d0: 7344 6972 3b0a 0963 6864 6972 2024 6f6c sDir;..chdir $ol\n-000005e0: 6444 6972 3b0a 0a09 7265 7475 726e 2028 dDir;...return (\n-000005f0: 2673 706c 6974 4669 6c65 4469 7228 2224 &splitFileDir(\"$\n-00000600: 6162 7344 6972 2466 696c 6522 2929 3b0a absDir$file\"));.\n-00000610: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. \n-00000620: 2020 207b 0a09 7072 696e 7420 5354 4445 {..print STDE\n-00000630: 5252 2022 3c24 6469 723e 2064 6f65 7320 RR \"<$dir> does \n-00000640: 6e6f 7420 6578 6973 742c 2065 7869 7469 not exist, exiti\n-00000650: 6e67 5c6e 223b 0a20 2020 207d 0a7d 0a73 ng\\n\";. }.}.s\n-00000660: 7562 2073 706c 6974 4669 6c65 4469 720a ub splitFileDir.\n-00000670: 7b0a 2020 2020 6d79 2024 6e61 6d65 203d {. my $name =\n-00000680: 2073 6869 6674 3b0a 0a20 2020 2072 6574 shift;.. ret\n-00000690: 7572 6e20 2827 2e27 2c20 246e 616d 6529 urn ('.', $name)\n-000006a0: 2075 6e6c 6573 7320 2824 6e61 6d65 203d unless ($name =\n-000006b0: 7e2f 5c2f 2f29 3b20 2020 2023 206e 7572 ~/\\//); # nur\n-000006c0: 2065 696e 6661 6368 6572 2044 6174 6569 einfacher Datei\n-000006d0: 6e61 6d65 0a0a 2020 2020 6d79 2028 2464 name.. my ($d\n-000006e0: 6972 2c20 2466 696c 6529 203d 2024 6e61 ir, $file) = $na\n-000006f0: 6d65 203d 7e20 2f5e 282e 2a29 5c2f 282e me =~ /^(.*)\\/(.\n-00000700: 2a29 242f 733b 0a20 2020 2024 6469 7220 *)$/s;. $dir \n-00000710: 3d20 272f 2720 6966 2028 2464 6972 2065 = '/' if ($dir e\n-00000720: 7120 2727 293b 2020 2020 2020 2020 2020 q ''); \n-00000730: 2020 2020 2020 2020 2023 2067 696c 742c # gilt,\n-00000740: 2066 616c 6c73 207a 2e42 2e20 2f66 696c falls z.B. /fil\n-00000750: 656e 616d 650a 2020 2020 7265 7475 726e ename. return\n-00000760: 2028 2464 6972 2c20 2466 696c 6529 3b0a ($dir, $file);.\n-00000770: 7d0a 6d79 2028 2472 6571 2c20 2470 726f }.my ($req, $pro\n-00000780: 6729 203d 2026 6c69 6250 6174 6828 2430 g) = &libPath($0\n-00000790: 293b 0a75 6e73 6869 6674 2040 494e 432c );.unshift @INC,\n-000007a0: 2022 2472 6571 223b 0a0a 0a72 6571 7569 \"$req\";...requi\n-000007b0: 7265 2027 6368 6563 6b50 6172 616d 322e re 'checkParam2.\n-000007c0: 706c 273b 0a72 6571 7569 7265 2027 7665 pl';.require 've\n-000007d0: 7273 696f 6e2e 706c 273b 0a72 6571 7569 rsion.pl';.requi\n-000007e0: 7265 2027 6875 6d61 6e52 6561 642e 706c re 'humanRead.pl\n-000007f0: 273b 0a72 6571 7569 7265 2027 7374 6f72 ';.require 'stor\n-00000800: 6542 6163 6b75 704c 6962 2e70 6c27 3b0a eBackupLib.pl';.\n-00000810: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir\n-00000820: 2e70 6c27 3b0a 0a0a 3d68 6561 6431 204e .pl';...=head1 N\n-00000830: 414d 450a 0a73 746f 7265 4261 636b 7570 AME..storeBackup\n-00000840: 5f64 752e 706c 202d 2065 7661 6c75 6174 _du.pl - evaluat\n-00000850: 6573 2074 6865 2064 6973 6b20 7573 6167 es the disk usag\n-00000860: 6520 696e 206f 6e65 206f 7220 6d6f 7265 e in one or more\n-00000870: 2062 6163 6b75 7020 6469 7265 6374 6f72 backup director\n-00000880: 6965 732e 0a0a 3d68 6561 6431 2053 594e ies...=head1 SYN\n-00000890: 4f50 5349 530a 0a20 2020 2073 746f 7265 OPSIS.. store\n-000008a0: 4261 636b 7570 5f64 752e 706c 205b 2d76 Backup_du.pl [-v\n-000008b0: 5d20 5b2d 6c5d 2062 6163 6b75 7064 6972 ] [-l] backupdir\n-000008c0: 7320 2e2e 2e0a 0a3d 6865 6164 3120 4f50 s .....=head1 OP\n-000008d0: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8..\n-000008e0: 3d69 7465 6d20 423c 2d2d 7665 7262 6f73 =item B<--verbos\n-000008f0: 653e 2c20 423c 2d76 3e0a 0a20 2020 2050 e>, B<-v>.. P\n-00000900: 7269 6e74 2061 6363 756d 756c 6174 6564 rint accumulated\n-00000910: 2076 616c 7565 7320 666f 7220 6d75 6c74 values for mult\n-00000920: 6970 6c65 2076 6572 7369 6f6e 7320 2864 iple versions (d\n-00000930: 6179 7329 0a20 2020 206f 6620 6261 636b ays). of back\n-00000940: 7570 6564 2066 696c 6573 2e20 5368 6f77 uped files. Show\n-00000950: 7320 7468 6520 7374 6570 7320 7768 656e s the steps when\n-00000960: 2063 616c 6375 6c61 7469 6e67 2074 6865 calculating the\n-00000970: 0a20 2020 2073 7061 6365 2075 7365 6420 . space used \n-00000980: 6279 2074 6865 2073 7065 6369 6669 6564 by the specified\n-00000990: 2062 6163 6b75 7073 0a0a 3d69 7465 6d20 backups..=item \n-000009a0: 423c 2d2d 6c69 6e6b 733e 2c20 423c 2d6c B<--links>, B<-l\n-000009b0: 3e0a 0a20 2020 2041 6c73 6f20 7072 696e >.. Also prin\n-000009c0: 7420 7374 6174 6973 7469 6320 6162 6f75 t statistic abou\n-000009d0: 7420 686f 7720 6d61 6e79 206c 696e 6b73 t how many links\n-000009e0: 2074 6865 2066 696c 6573 2068 6176 650a the files have.\n-000009f0: 2020 2020 616e 6420 686f 7720 6d75 6368 and how much\n-00000a00: 2073 7061 6365 2074 6869 7320 7361 7665 space this save\n-00000a10: 732e 0a0a 3d62 6163 6b0a 0a3d 6865 6164 s...=back..=head\n-00000a20: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop\n-00000a30: 7972 6967 6874 2028 6329 2032 3030 322d yright (c) 2002-\n-00000a40: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo\n-00000a50: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R\n-00000a60: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe\n-00000a70: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU \n-00000a80: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L\n-00000a90: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any\n-00000aa0: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version..\n-00000ab0: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help =\n-00000ac0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text(\n-00000ad0: 2430 293b 0a0a 6469 6520 2224 4865 6c70 $0);..die \"$Help\n-00000ae0: 2220 756e 6c65 7373 2040 4152 4756 3b0a \" unless @ARGV;.\n-00000af0: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\\\n-00000b00: 4041 5247 562c 2027 2d56 2729 3b0a 0a0a @ARGV, '-V');...\n-00000b10: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. \n-00000b20: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n\n-00000b30: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists'\n-00000b40: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... \n-00000b50: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt\n-00000b60: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00000b70: 203d 3e20 2776 6572 626f 7365 272c 0a09 => 'verbose',..\n-00000b80: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt\n-00000b90: 696f 6e27 203d 3e20 272d 7627 2c0a 0909 ion' => '-v',...\n-00000ba0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia\n-00000bb0: 7327 203d 3e20 272d 2d76 6572 626f 7365 s' => '--verbose\n-00000bc0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option->\n-00000bd0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00000be0: 6c69 6e6b 7327 2c0a 0909 0909 0920 2020 links',...... \n-00000bf0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' =>\n-00000c00: 2027 2d6c 272c 0a09 0909 0909 2020 2020 '-l',...... \n-00000c10: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => '\n-00000c20: 2d2d 6c69 6e6b 7327 290a 0909 0909 5d0a --links').....].\n-00000c30: 0909 2020 2020 293b 0a0a 2443 6865 636b .. );..$Check\n-00000c40: 5061 722d 3e63 6865 636b 2827 2d61 7267 Par->check('-arg\n-00000c50: 7627 203d 3e20 5c40 4152 4756 2c0a 2020 v' => \\@ARGV,. \n-00000c60: 2020 2020 2020 2020 2020 2020 2020 2027 '\n-00000c70: 2d68 656c 7027 203d 3e20 2448 656c 700a -help' => $Help.\n-00000c80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000c90: 2029 3b0a 0a6d 7920 2476 6572 626f 7365 );..my $verbose\n-00000ca0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00000cb0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar('\n-00000cc0: 7665 7262 6f73 6527 293b 0a6d 7920 246c verbose');.my $l\n-00000cd0: 696e 6b73 203d 2024 4368 6563 6b50 6172 inks = $CheckPar\n-00000ce0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP\n-00000cf0: 6172 2827 6c69 6e6b 7327 293b 0a0a 7072 ar('links');..pr\n-00000d00: 696e 7420 2273 746f 7265 4261 636b 7570 int \"storeBackup\n-00000d10: 5f64 752e 706c 2c20 246d 6169 6e3a 3a53 _du.pl, $main::S\n-00000d20: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO\n-00000d30: 4e5c 6e22 0a20 2020 2069 6620 2476 6572 N\\n\". if $ver\n-00000d40: 626f 7365 3b0a 0a64 6965 2022 6469 7265 bose;..die \"dire\n-00000d50: 6374 6f72 6965 7320 6d69 7373 696e 6720 ctories missing \n-00000d60: 696e 2061 7267 756d 656e 7420 6c69 7374 in argument list\n-00000d70: 220a 2020 2020 6966 2028 2443 6865 636b \". if ($Check\n-00000d80: 5061 722d 3e67 6574 4c69 7374 5061 7228 Par->getListPar(\n-00000d90: 2920 3d3d 2030 293b 0a0a 2320 5072 fc66 ) == 0);..# Pr.f\n-00000da0: 656e 2c20 6f62 2044 6972 6563 746f 7269 en, ob Directori\n-00000db0: 6573 20fc 6265 7268 6175 7074 2065 7869 es .berhaupt exi\n-00000dc0: 7374 6965 7265 6e0a 6d79 2024 643b 0a66 stieren.my $d;.f\n-00000dd0: 6f72 6561 6368 2024 6420 2824 4368 6563 oreach $d ($Chec\n-00000de0: 6b50 6172 2d3e 6765 744c 6973 7450 6172 kPar->getListPar\n-00000df0: 2829 290a 7b0a 2020 2020 6469 6520 223c ()).{. die \"<\n-00000e00: 2464 3e20 646f 6573 206e 6f74 2065 7869 $d> does not exi\n-00000e10: 7374 2220 756e 6c65 7373 2028 2d65 2024 st\" unless (-e $\n-00000e20: 6429 3b0a 2020 2020 6469 6520 223c 2464 d);. die \"<$d\n-00000e30: 3e20 6973 206e 6f74 2061 2064 6972 6563 > is not a direc\n-00000e40: 746f 7269 6573 2220 756e 6c65 7373 2028 tories\" unless (\n-00000e50: 2d64 2024 6429 3b0a 7d0a 0a0a 0a25 6d61 -d $d);.}....%ma\n-00000e60: 696e 3a3a 6e6f 4c69 6e6b 733b 2020 2020 in::noLinks; \n-00000e70: 2320 6b65 7920 3d20 696e 6f64 652c 0a20 # key = inode,. \n-00000e80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000e90: 2020 2320 2020 2020 2020 2020 2020 2020 # \n-00000ea0: 2027 7369 7a65 2720 2020 203d 3e20 4461 'size' => Da\n-00000eb0: 7465 6967 72f6 df65 2028 6569 6e7a 656c teigr..e (einzel\n-00000ec0: 6e65 2044 6174 6569 290a 2020 2020 2020 ne Datei). \n-00000ed0: 2020 2020 2020 2020 2020 2020 2023 2020 # \n-00000ee0: 2020 2020 2020 2020 2020 2020 2772 6573 'res\n-00000ef0: 744e 6f4c 696e 6b73 2720 3d3e 2062 6973 tNoLinks' => bis\n-00000f00: 6865 7220 6765 7ae4 686c 7465 2041 6e7a her gez.hlte Anz\n-00000f10: 6168 6c20 4c69 6e6b 730a 0a24 6d61 696e ahl Links..$main\n-00000f20: 3a3a 7375 6d4c 6f63 616c 203d 2030 3b0a ::sumLocal = 0;.\n-00000f30: 406d 6169 6e3a 3a6e 6f46 696c 6573 5769 @main::noFilesWi\n-00000f40: 7468 4c69 6e6b 7320 3d20 2829 3b0a 406d thLinks = ();.@m\n-00000f50: 6169 6e3a 3a73 697a 6546 696c 6573 5769 ain::sizeFilesWi\n-00000f60: 7468 4c69 6e6b 7320 3d20 2829 3b0a 0a0a thLinks = ();...\n-00000f70: 6d79 2024 7320 3d20 2727 3b0a 666f 7265 my $s = '';.fore\n-00000f80: 6163 6820 2464 2028 2443 6865 636b 5061 ach $d ($CheckPa\n-00000f90: 722d 3e67 6574 4c69 7374 5061 7228 2929 r->getListPar())\n-00000fa0: 0a7b 0a20 2020 2069 6620 282d 6520 2224 .{. if (-e \"$\n-00000fb0: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi\n-00000fc0: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2\n-00000fd0: 2229 0a20 2020 207b 0a09 7072 696e 7420 \"). {..print \n-00000fe0: 223c 2464 3e20 6166 6665 6374 6564 2062 \"<$d> affected b\n-00000ff0: 7920 756e 7265 736f 6c76 6564 206c 696e y unresolved lin\n-00001000: 6b73 2c20 736b 6970 7069 6e67 5c6e 223b ks, skipping\\n\";\n-00001010: 0a09 6e65 7874 3b0a 2020 2020 7d0a 2020 ..next;. }. \n-00001020: 2020 7072 696e 7420 225f 5f5f 5f5f 5f5f print \"_______\n-00001030: 5f63 6865 636b 696e 6720 2464 202e 2e2e _checking $d ...\n-00001040: 5c6e 2220 6966 2028 2476 6572 626f 7365 \\n\" if ($verbose\n-00001050: 293b 0a20 2020 2063 6864 6972 2022 2464 );. chdir \"$d\n-00001060: 223b 0a20 2020 2026 7472 6176 6572 7365 \";. &traverse\n-00001070: 5472 6565 7328 293b 0a20 2020 2063 6864 Trees();. chd\n-00001080: 6972 2022 2e2e 223b 0a20 2020 2069 6620 ir \"..\";. if \n-00001090: 2824 7665 7262 6f73 6529 0a20 2020 207b ($verbose). {\n-000010a0: 0a09 7072 696e 7420 2220 7375 6d4c 6f63 ..print \" sumLoc\n-000010b0: 616c 203d 2022 2c20 2668 756d 616e 5265 al = \", &humanRe\n-000010c0: 6164 6162 6c65 2824 6d61 696e 3a3a 7375 adable($main::su\n-000010d0: 6d4c 6f63 616c 292c 2022 2473 5c6e 223b mLocal), \"$s\\n\";\n-000010e0: 0a09 6d79 2024 7375 6d53 6861 7265 643b ..my $sumShared;\n-000010f0: 0a09 666f 7265 6163 6820 2464 2028 6b65 ..foreach $d (ke\n-00001100: 7973 2025 6d61 696e 3a3a 6e6f 4c69 6e6b ys %main::noLink\n-00001110: 7329 0a09 7b0a 0920 2020 2024 7375 6d53 s)..{.. $sumS\n-00001120: 6861 7265 6420 2b3d 2024 6d61 696e 3a3a hared += $main::\n-00001130: 6e6f 4c69 6e6b 737b 2464 7d7b 2773 697a noLinks{$d}{'siz\n-00001140: 6527 7d3b 0a09 7d0a 0970 7269 6e74 2022 e'};..}..print \"\n-00001150: 7375 6d53 6861 7265 6420 3d20 222c 2026 sumShared = \", &\n-00001160: 6875 6d61 6e52 6561 6461 626c 6528 2473 humanReadable($s\n-00001170: 756d 5368 6172 6564 292c 2022 2473 5c6e umShared), \"$s\\n\n-00001180: 223b 0a09 2473 203d 2022 2028 6163 6375 \";..$s = \" (accu\n-00001190: 6d75 6c61 7465 6429 223b 0a20 2020 207d mulated)\";. }\n-000011a0: 0a7d 0a0a 2320 5a75 7361 6d6d 656e 7265 .}..# Zusammenre\n-000011b0: 6368 6e65 6e20 6465 7220 4572 6765 626e chnen der Ergebn\n-000011c0: 6973 7365 0a75 6e6c 6573 7320 2824 7665 isse.unless ($ve\n-000011d0: 7262 6f73 6529 0a7b 0a20 2020 2070 7269 rbose).{. pri\n-000011e0: 6e74 2022 2073 756d 4c6f 6361 6c20 3d20 nt \" sumLocal = \n-000011f0: 222c 2026 6875 6d61 6e52 6561 6461 626c \", &humanReadabl\n-00001200: 6528 246d 6169 6e3a 3a73 756d 4c6f 6361 e($main::sumLoca\n-00001210: 6c29 2c20 225c 6e22 3b0a 2020 2020 6d79 l), \"\\n\";. my\n-00001220: 2024 7375 6d53 6861 7265 643b 0a20 2020 $sumShared;. \n-00001230: 2066 6f72 6561 6368 2024 6420 286b 6579 foreach $d (key\n-00001240: 7320 256d 6169 6e3a 3a6e 6f4c 696e 6b73 s %main::noLinks\n-00001250: 290a 2020 2020 7b0a 0924 7375 6d53 6861 ). {..$sumSha\n-00001260: 7265 6420 2b3d 2024 6d61 696e 3a3a 6e6f red += $main::no\n-00001270: 4c69 6e6b 737b 2464 7d7b 2773 697a 6527 Links{$d}{'size'\n-00001280: 7d3b 0a20 2020 207d 0a20 2020 2070 7269 };. }. pri\n-00001290: 6e74 2022 7375 6d53 6861 7265 6420 3d20 nt \"sumShared = \n-000012a0: 222c 2026 6875 6d61 6e52 6561 6461 626c \", &humanReadabl\n-000012b0: 6528 2473 756d 5368 6172 6564 292c 2022 e($sumShared), \"\n-000012c0: 5c6e 223b 0a7d 0a0a 6966 2028 246c 696e \\n\";.}..if ($lin\n-000012d0: 6b73 290a 7b0a 2020 2020 7072 696e 7420 ks).{. print \n-000012e0: 225c 6e6c 696e 6b73 207c 2020 6669 6c65 \"\\nlinks | file\n-000012f0: 7320 7c20 7369 7a65 207c 206c 202a 2073 s | size | l * s\n-00001300: 207c 206c 6573 735c 6e22 3b0a 2020 2020 | less\\n\";. \n-00001310: 7072 696e 7420 222d 2d2d 2d2d 2d2b 2d2d print \"------+--\n-00001320: 2d2d 2d2d 2d2d 2b2d 2d2d 2d2d 2d2b 2d2d ------+------+--\n-00001330: 2d2d 2d2d 202b 2d2d 2d2d 2d5c 6e22 3b0a ---- +-----\\n\";.\n-00001340: 2020 2020 666f 7220 2824 6420 3d20 3120 for ($d = 1 \n-00001350: 3b20 2464 203c 2040 6d61 696e 3a3a 6e6f ; $d < @main::no\n-00001360: 4669 6c65 7357 6974 684c 696e 6b73 203b FilesWithLinks ;\n-00001370: 2024 642b 2b29 0a20 2020 207b 0a09 6e65 $d++). {..ne\n-00001380: 7874 2075 6e6c 6573 7320 246d 6169 6e3a xt unless $main:\n-00001390: 3a6e 6f46 696c 6573 5769 7468 4c69 6e6b :noFilesWithLink\n-000013a0: 735b 2464 5d3b 0a09 6d79 2024 6c73 203d s[$d];..my $ls =\n-000013b0: 2024 6420 2a20 246d 6169 6e3a 3a73 697a $d * $main::siz\n-000013c0: 6546 696c 6573 5769 7468 4c69 6e6b 735b eFilesWithLinks[\n-000013d0: 2464 5d3b 0a09 7072 696e 7466 2822 2025 $d];..printf(\" %\n-000013e0: 3464 207c 2025 3664 207c 2025 7320 7c20 4d | %6d | %s | \n-000013f0: 2025 7320 7c20 2573 5c6e 222c 2024 642c %s | %s\\n\", $d,\n-00001400: 2024 6d61 696e 3a3a 6e6f 4669 6c65 7357 $main::noFilesW\n-00001410: 6974 684c 696e 6b73 5b24 645d 2c0a 0920 ithLinks[$d],.. \n-00001420: 2020 2020 2020 2668 756d 616e 5265 6164 &humanRead\n-00001430: 6162 6c65 2824 6d61 696e 3a3a 7369 7a65 able($main::size\n-00001440: 4669 6c65 7357 6974 684c 696e 6b73 5b24 FilesWithLinks[$\n-00001450: 645d 292c 0a09 2020 2020 2020 2026 6875 d]),.. &hu\n-00001460: 6d61 6e52 6561 6461 626c 6528 246c 7329 manReadable($ls)\n-00001470: 2c0a 0920 2020 2020 2020 2668 756d 616e ,.. &human\n-00001480: 5265 6164 6162 6c65 2824 6c73 202d 2024 Readable($ls - $\n-00001490: 6d61 696e 3a3a 7369 7a65 4669 6c65 7357 main::sizeFilesW\n-000014a0: 6974 684c 696e 6b73 5b24 645d 2929 3b0a ithLinks[$d]));.\n-000014b0: 2020 2020 7d0a 7d0a 0a65 7869 7420 303b }.}..exit 0;\n-000014c0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...#############\n-000014d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000014e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000014f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00001500: 2323 2323 2323 2323 230a 7375 6220 7472 #########.sub tr\n-00001510: 6176 6572 7365 5472 6565 730a 7b0a 2020 averseTrees.{. \n-00001520: 2020 6c6f 6361 6c20 2a44 4952 3b0a 2020 local *DIR;. \n-00001530: 2020 6f70 656e 6469 7228 4449 522c 2027 opendir(DIR, '\n-00001540: 2e27 293b 0a0a 2020 2020 6d79 2024 663b .');.. my $f;\n-00001550: 0a20 2020 2077 6869 6c65 2028 2466 203d . while ($f =\n-00001560: 2072 6561 6464 6972 2044 4952 290a 2020 readdir DIR). \n-00001570: 2020 7b0a 0969 6620 282d 6c20 2466 290a {..if (-l $f).\n-00001580: 097b 0a09 2020 2020 6d79 2028 2469 6e6f .{.. my ($ino\n-00001590: 6465 2c20 246e 6c69 6e6b 2c20 2473 697a de, $nlink, $siz\n-000015a0: 6529 203d 2028 6c73 7461 7428 2466 2929 e) = (lstat($f))\n-000015b0: 5b31 2c33 2c37 5d3b 0a09 2020 2020 6966 [1,3,7];.. if\n-000015c0: 2028 6465 6669 6e65 6428 246d 6169 6e3a (defined($main:\n-000015d0: 3a6e 6f4c 696e 6b73 7b24 696e 6f64 657d :noLinks{$inode}\n-000015e0: 2929 0a09 2020 2020 7b0a 0909 6966 2028 )).. {...if (\n-000015f0: 2d2d 246d 6169 6e3a 3a6e 6f4c 696e 6b73 --$main::noLinks\n-00001600: 7b24 696e 6f64 657d 7b27 7265 7374 4e6f {$inode}{'restNo\n-00001610: 4c69 6e6b 7327 7d20 3d3d 2030 290a 0909 Links'} == 0)...\n-00001620: 7b0a 0909 2020 2020 246d 6169 6e3a 3a73 {... $main::s\n-00001630: 756d 4c6f 6361 6c20 2b3d 2024 6d61 696e umLocal += $main\n-00001640: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode\n-00001650: 7d7b 2773 697a 6527 7d3b 0a09 0920 2020 }{'size'};... \n-00001660: 2064 656c 6574 6520 246d 6169 6e3a 3a6e delete $main::n\n-00001670: 6f4c 696e 6b73 7b24 696e 6f64 657d 3b0a oLinks{$inode};.\n-00001680: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}.\n-00001690: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else\n-000016a0: 0a09 2020 2020 7b0a 0909 6966 2028 246e .. {...if ($n\n-000016b0: 6c69 6e6b 203d 3d20 3129 0a09 097b 0a09 link == 1)...{..\n-000016c0: 0920 2020 2024 6d61 696e 3a3a 7375 6d4c . $main::sumL\n-000016d0: 6f63 616c 202b 3d20 2473 697a 653b 0a09 ocal += $size;..\n-000016e0: 0920 2020 206e 6578 743b 0a09 097d 0a09 . next;...}..\n-000016f0: 0924 6d61 696e 3a3a 6e6f 4c69 6e6b 737b .$main::noLinks{\n-00001700: 2469 6e6f 6465 7d7b 2773 697a 6527 7d20 $inode}{'size'} \n-00001710: 3d20 2473 697a 653b 0a09 0924 6d61 696e = $size;...$main\n-00001720: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode\n-00001730: 7d7b 2772 6573 744e 6f4c 696e 6b73 277d }{'restNoLinks'}\n-00001740: 203d 2024 6e6c 696e 6b20 2d20 313b 0a09 = $nlink - 1;..\n-00001750: 2020 2020 7d0a 097d 0a09 656c 7369 6620 }..}..elsif \n-00001760: 282d 6620 2466 290a 097b 0a09 2020 2020 (-f $f)..{.. \n-00001770: 6d79 2028 2469 6e6f 6465 2c20 246e 6c69 my ($inode, $nli\n-00001780: 6e6b 2c20 2473 697a 6529 203d 2028 7374 nk, $size) = (st\n-00001790: 6174 2824 6629 295b 312c 332c 375d 3b0a at($f))[1,3,7];.\n-000017a0: 0920 2020 2069 6620 2864 6566 696e 6564 . if (defined\n-000017b0: 2824 6d61 696e 3a3a 6e6f 4c69 6e6b 737b ($main::noLinks{\n-000017c0: 2469 6e6f 6465 7d29 290a 0920 2020 207b $inode})).. {\n-000017d0: 0a09 0969 6620 282d 2d24 6d61 696e 3a3a ...if (--$main::\n-000017e0: 6e6f 4c69 6e6b 737b 2469 6e6f 6465 7d7b noLinks{$inode}{\n-000017f0: 2772 6573 744e 6f4c 696e 6b73 277d 203d 'restNoLinks'} =\n-00001800: 3d20 3029 0a09 097b 0a09 0920 2020 2024 = 0)...{... $\n-00001810: 6d61 696e 3a3a 7375 6d4c 6f63 616c 202b main::sumLocal +\n-00001820: 3d20 246d 6169 6e3a 3a6e 6f4c 696e 6b73 = $main::noLinks\n-00001830: 7b24 696e 6f64 657d 7b27 7369 7a65 277d {$inode}{'size'}\n-00001840: 3b0a 0909 2020 2020 6465 6c65 7465 2024 ;... delete $\n-00001850: 6d61 696e 3a3a 6e6f 4c69 6e6b 737b 2469 main::noLinks{$i\n-00001860: 6e6f 6465 7d3b 0a09 0920 2020 206e 6578 node};... nex\n-00001870: 743b 0a09 097d 0a09 2020 2020 7d0a 0920 t;...}.. }.. \n-00001880: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {..\n-00001890: 092b 2b24 6d61 696e 3a3a 6e6f 4669 6c65 .++$main::noFile\n-000018a0: 7357 6974 684c 696e 6b73 5b24 6e6c 696e sWithLinks[$nlin\n-000018b0: 6b5d 3b0a 0909 246d 6169 6e3a 3a73 697a k];...$main::siz\n-000018c0: 6546 696c 6573 5769 7468 4c69 6e6b 735b eFilesWithLinks[\n-000018d0: 246e 6c69 6e6b 5d20 2b3d 2024 7369 7a65 $nlink] += $size\n-000018e0: 3b0a 0909 6966 2028 246e 6c69 6e6b 203d ;...if ($nlink =\n-000018f0: 3d20 3129 0a09 097b 0a09 0920 2020 2024 = 1)...{... $\n-00001900: 6d61 696e 3a3a 7375 6d4c 6f63 616c 202b main::sumLocal +\n-00001910: 3d20 2473 697a 653b 0a09 0920 2020 206e = $size;... n\n-00001920: 6578 743b 0a09 097d 0a09 0924 6d61 696e ext;...}...$main\n-00001930: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode\n-00001940: 7d7b 2773 697a 6527 7d20 3d20 2473 697a }{'size'} = $siz\n-00001950: 653b 0a09 0924 6d61 696e 3a3a 6e6f 4c69 e;...$main::noLi\n-00001960: 6e6b 737b 2469 6e6f 6465 7d7b 2772 6573 nks{$inode}{'res\n-00001970: 744e 6f4c 696e 6b73 277d 203d 2024 6e6c tNoLinks'} = $nl\n-00001980: 696e 6b20 2d20 313b 0a09 2020 2020 7d0a ink - 1;.. }.\n-00001990: 097d 0a09 656c 7369 6620 282d 6420 2466 .}..elsif (-d $f\n-000019a0: 290a 097b 0a09 2020 2020 6e65 7874 2069 )..{.. next i\n-000019b0: 6620 2824 6620 6571 2027 2e27 206f 7220 f ($f eq '.' or \n-000019c0: 2466 2065 7120 272e 2e27 293b 0a09 2020 $f eq '..');.. \n-000019d0: 2020 6368 6469 7220 2224 6622 3b0a 0920 chdir \"$f\";.. \n-000019e0: 2020 2026 7472 6176 6572 7365 5472 6565 &traverseTree\n-000019f0: 7328 293b 0a09 2020 2020 6368 6469 7220 s();.. chdir \n-00001a00: 222e 2e22 3b0a 097d 0a20 2020 207d 0a20 \"..\";..}. }. \n-00001a10: 2020 2063 6c6f 7365 2844 4952 293b 0a7d close(DIR);.}\n-00001a20: 0a .\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"}, {"source1": "./usr/bin/storeBackupls", "source2": "./usr/bin/storeBackupls", "has_internal_linenos": true, "unified_diff": "@@ -1,707 +1,4 @@\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 3232 290a 2320 2020 2020 2020 2-2022).# \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 246d 6169 6e3a 3a53 hex);...$main::S\n-00000360: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO\n-00000370: 4e20 3d20 756e 6465 663b 0a0a 7573 6520 N = undef;..use \n-00000380: 7374 7269 6374 3b0a 0a73 7562 206c 6962 strict;..sub lib\n-00000390: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f\n-000003a0: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. \n-000003b0: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. \n-000003c0: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se\n-000003d0: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink\n-000003e0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo\n-000003f0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel\n-00000400: f673 740a 2020 2020 6966 2028 2d66 2024 .st. if (-f $\n-00000410: 6669 6c65 290a 2020 2020 7b0a 0977 6869 file). {..whi\n-00000420: 6c65 2028 2d6c 2024 6669 6c65 290a 097b le (-l $file)..{\n-00000430: 0a09 2020 2020 6d79 2024 6c69 6e6b 203d .. my $link =\n-00000440: 2072 6561 646c 696e 6b28 2466 696c 6529 readlink($file)\n-00000450: 3b0a 0a09 2020 2020 6966 2028 7375 6273 ;... if (subs\n-00000460: 7472 2824 6c69 6e6b 2c20 302c 2031 2920 tr($link, 0, 1) \n-00000470: 6e65 2022 2f22 290a 0920 2020 207b 0a09 ne \"/\").. {..\n-00000480: 0924 6669 6c65 203d 7e20 732f 5b5e 5c2f .$file =~ s/[^\\/\n-00000490: 5d2b 242f 246c 696e 6b2f 3b0a 0920 2020 ]+$/$link/;.. \n-000004a0: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. \n-000004b0: 2020 7b0a 0909 2466 696c 6520 3d20 246c {...$file = $l\n-000004c0: 696e 6b3b 0a09 2020 2020 7d0a 097d 0a0a ink;.. }..}..\n-000004d0: 0928 2464 6972 2c20 2466 696c 6529 203d .($dir, $file) =\n-000004e0: 2026 7370 6c69 7446 696c 6544 6972 2824 &splitFileDir($\n-000004f0: 6669 6c65 293b 0a09 2466 696c 6520 3d20 file);..$file = \n-00000500: 222f 2466 696c 6522 3b0a 2020 2020 7d0a \"/$file\";. }.\n-00000510: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {..\n-00000520: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR \"<$\n-00000530: 6669 6c65 3e20 646f 6573 206e 6f74 2065 file> does not e\n-00000540: 7869 7374 215c 6e22 3b0a 0965 7869 7420 xist!\\n\";..exit \n-00000550: 313b 0a20 2020 207d 0a0a 2020 2020 2464 1;. }.. $d\n-00000560: 6972 202e 3d20 222f 2e2e 2f6c 6962 223b ir .= \"/../lib\";\n-00000570: 2020 2020 2020 2020 2020 2023 2050 6661 # Pfa\n-00000580: 6420 7a75 2064 656e 2042 6962 6c69 6f74 d zu den Bibliot\n-00000590: 6865 6b65 6e0a 2020 2020 6d79 2024 6f6c heken. my $ol\n-000005a0: 6444 6972 203d 2060 2f62 696e 2f70 7764 dDir = `/bin/pwd\n-000005b0: 603b 0a20 2020 2063 686f 6d70 2024 6f6c `;. chomp $ol\n-000005c0: 6444 6972 3b0a 2020 2020 6966 2028 6368 dDir;. if (ch\n-000005d0: 6469 7220 2464 6972 290a 2020 2020 7b0a dir $dir). {.\n-000005e0: 096d 7920 2461 6273 4469 7220 3d20 602f .my $absDir = `/\n-000005f0: 6269 6e2f 7077 6460 3b0a 0963 686f 7020 bin/pwd`;..chop \n-00000600: 2461 6273 4469 723b 0a09 6368 6469 7220 $absDir;..chdir \n-00000610: 246f 6c64 4469 723b 0a0a 0972 6574 7572 $oldDir;...retur\n-00000620: 6e20 2826 7370 6c69 7446 696c 6544 6972 n (&splitFileDir\n-00000630: 2822 2461 6273 4469 7224 6669 6c65 2229 (\"$absDir$file\")\n-00000640: 293b 0a20 2020 207d 0a20 2020 2065 6c73 );. }. els\n-00000650: 650a 2020 2020 7b0a 0970 7269 6e74 2053 e. {..print S\n-00000660: 5444 4552 5220 223c 2464 6972 3e20 646f TDERR \"<$dir> do\n-00000670: 6573 206e 6f74 2065 7869 7374 2c20 6578 es not exist, ex\n-00000680: 6974 696e 675c 6e22 3b0a 2020 2020 7d0a iting\\n\";. }.\n-00000690: 7d0a 7375 6220 7370 6c69 7446 696c 6544 }.sub splitFileD\n-000006a0: 6972 0a7b 0a20 2020 206d 7920 246e 616d ir.{. my $nam\n-000006b0: 6520 3d20 7368 6966 743b 0a0a 2020 2020 e = shift;.. \n-000006c0: 7265 7475 726e 2028 272e 272c 2024 6e61 return ('.', $na\n-000006d0: 6d65 2920 756e 6c65 7373 2028 246e 616d me) unless ($nam\n-000006e0: 6520 3d7e 2f5c 2f2f 293b 2020 2020 2320 e =~/\\//); # \n-000006f0: 6e75 7220 6569 6e66 6163 6865 7220 4461 nur einfacher Da\n-00000700: 7465 696e 616d 650a 0a20 2020 206d 7920 teiname.. my \n-00000710: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = \n-00000720: 246e 616d 6520 3d7e 202f 5e28 2e2a 295c $name =~ /^(.*)\\\n-00000730: 2f28 2e2a 2924 2f73 3b0a 2020 2020 2464 /(.*)$/s;. $d\n-00000740: 6972 203d 2027 2f27 2069 6620 2824 6469 ir = '/' if ($di\n-00000750: 7220 6571 2027 2729 3b20 2020 2020 2020 r eq ''); \n-00000760: 2020 2020 2020 2020 2020 2020 2320 6769 # gi\n-00000770: 6c74 2c20 6661 6c6c 7320 7a2e 422e 202f lt, falls z.B. /\n-00000780: 6669 6c65 6e61 6d65 0a20 2020 2072 6574 filename. ret\n-00000790: 7572 6e20 2824 6469 722c 2024 6669 6c65 urn ($dir, $file\n-000007a0: 293b 0a7d 0a6d 7920 2824 7265 712c 2024 );.}.my ($req, $\n-000007b0: 7072 6f67 2920 3d20 266c 6962 5061 7468 prog) = &libPath\n-000007c0: 2824 3029 3b0a 756e 7368 6966 7420 4049 ($0);.unshift @I\n-000007d0: 4e43 2c20 2224 7265 7122 3b0a 0a0a 7265 NC, \"$req\";...re\n-000007e0: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara\n-000007f0: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require \n-00000800: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';.\n-00000810: 7265 7175 6972 6520 2776 6572 7369 6f6e require 'version\n-00000820: 2e70 6c27 3b0a 7265 7175 6972 6520 2773 .pl';.require 's\n-00000830: 746f 7265 4261 636b 7570 4c69 622e 706c toreBackupLib.pl\n-00000840: 273b 0a72 6571 7569 7265 2027 7072 4c6f ';.require 'prLo\n-00000850: 672e 706c 273b 0a72 6571 7569 7265 2027 g.pl';.require '\n-00000860: 6669 6c65 4469 722e 706c 273b 0a72 6571 fileDir.pl';.req\n-00000870: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku\n-00000880: 704c 6962 2e70 6c27 3b0a 0a6d 7920 246b pLib.pl';..my $k\n-00000890: 6565 7041 6c6c 203d 2027 3330 6427 3b0a eepAll = '30d';.\n-000008a0: 6d79 2024 6b65 6570 4475 706c 6963 6174 my $keepDuplicat\n-000008b0: 6520 3d20 2737 6427 3b0a 246d 6169 6e3a e = '7d';.$main:\n-000008c0: 3a63 6865 636b 5375 6d46 696c 6520 3d20 :checkSumFile = \n-000008d0: 272e 6d64 3543 6865 636b 5375 6d73 273b '.md5CheckSums';\n-000008e0: 0a24 6d61 696e 3a3a 6368 6d6f 644d 4435 .$main::chmodMD5\n-000008f0: 4669 6c65 203d 2027 3036 3030 273b 0a6d File = '0600';.m\n-00000900: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile \n-00000910: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums\n-00000920: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME.\n-00000930: 0a73 746f 7265 4261 636b 7570 6c73 2e70 .storeBackupls.p\n-00000940: 6c20 2d20 4c69 7374 7320 6261 636b 7570 l - Lists backup\n-00000950: 2064 6972 6563 746f 7269 6573 2067 656e directories gen\n-00000960: 6572 6174 6564 2077 6974 6820 7374 6f72 erated with stor\n-00000970: 6542 6163 6b75 702e 706c 2077 6974 6820 eBackup.pl with \n-00000980: 7765 656b 2064 6179 2e75 6e73 6869 6674 week day.unshift\n-00000990: 2040 494e 432c 2022 2472 6571 223b 0a5f @INC, \"$req\";._\n-000009a0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI\n-000009b0: 530a 0a20 2020 2073 746f 7265 4261 636b S.. storeBack\n-000009c0: 7570 6c73 2e70 6c20 2d66 2063 6f6e 6669 upls.pl -f confi\n-000009d0: 6746 696c 6520 5b2d 2d70 7269 6e74 5d20 gFile [--print] \n-000009e0: 5b73 746f 7265 4261 636b 7570 2d64 6972 [storeBackup-dir\n-000009f0: 5d0a 2020 2020 7374 6f72 6542 6163 6b75 ]. storeBacku\n-00000a00: 706c 732e 706c 205b 2d76 5d20 5b2d 2d70 pls.pl [-v] [--p\n-00000a10: 7269 6e74 5d20 7374 6f72 6542 6163 6b75 rint] storeBacku\n-00000a20: 702d 6469 720a 0a3d 6865 6164 3120 4f50 p-dir..=head1 OP\n-00000a30: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8..\n-00000a40: 3d69 7465 6d20 423c 2d2d 7665 7262 6f73 =item B<--verbos\n-00000a50: 653e 2c20 423c 2d76 3e0a 0a20 2020 2061 e>, B<-v>.. a\n-00000a60: 6464 6974 696f 6e61 6c20 696e 666f 726d dditional inform\n-00000a70: 6174 696f 6e20 6162 6f75 7420 7468 6520 ation about the \n-00000a80: 6261 636b 7570 2064 6972 6563 746f 7269 backup directori\n-00000a90: 6573 0a0a 3d69 7465 6d20 423c 2d2d 7072 es..=item B<--pr\n-00000aa0: 696e 743e 0a0a 2020 2020 7072 696e 7420 int>.. print \n-00000ab0: 636f 6e66 6967 7572 6174 696f 6e20 7265 configuration re\n-00000ac0: 6164 2066 726f 6d20 636f 6e66 6967 7572 ad from configur\n-00000ad0: 6174 696f 6e20 6669 6c65 2061 6e64 2073 ation file and s\n-00000ae0: 746f 700a 0a3d 6974 656d 2042 3c2d 2d66 top..=item B<--f\n-00000af0: 696c 653e 2c20 423c 2d66 3e0a 0a20 2020 ile>, B<-f>.. \n-00000b00: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f\n-00000b10: 696c 653b 2061 6e61 6c79 7365 2062 6163 ile; analyse bac\n-00000b20: 6b75 7073 2064 6570 656e 6469 6e67 206f kups depending o\n-00000b30: 6e0a 2020 2020 6b65 6570 2070 6172 616d n. keep param\n-00000b40: 6574 6572 7320 696e 2063 6f6e 6669 6775 eters in configu\n-00000b50: 7261 7469 6f6e 2066 696c 650a 0a3d 6974 ration file..=it\n-00000b60: 656d 2046 3c73 746f 7265 4261 636b 7570 em F.. direc\n-00000b80: 746f 7279 2077 6865 7265 2074 6865 2073 tory where the s\n-00000b90: 746f 7265 4261 636b 7570 2064 6972 6563 toreBackup direc\n-00000ba0: 746f 7269 6573 2061 7265 0a20 2020 206f tories are. o\n-00000bb0: 7665 7277 7269 7465 7320 7468 6520 7061 verwrites the pa\n-00000bc0: 7468 2069 6e20 7468 6520 636f 6e66 6967 th in the config\n-00000bd0: 2066 696c 6520 6966 2075 7365 6420 7769 file if used wi\n-00000be0: 7468 202d 660a 0a3d 6261 636b 0a0a 3d68 th -f..=back..=h\n-00000bf0: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT..\n-00000c00: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20\n-00000c10: 3032 2d32 3032 3220 6279 2048 6569 6e7a 02-2022 by Heinz\n-00000c20: 2d4a 6f73 6566 2043 6c61 6573 2028 7365 -Josef Claes (se\n-00000c30: 6520 5245 4144 4d45 292e 0a50 7562 6c69 e README)..Publi\n-00000c40: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G\n-00000c50: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi\n-00000c60: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or \n-00000c70: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio\n-00000c80: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel\n-00000c90: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te\n-00000ca0: 7874 2824 3029 3b0a 0a26 7072 696e 7456 xt($0);..&printV\n-00000cb0: 6572 7369 6f6e 285c 4041 5247 562c 2027 ersion(\\@ARGV, '\n-00000cc0: 2d56 272c 2027 2d2d 7665 7273 696f 6e27 -V', '--version'\n-00000cd0: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar\n-00000ce0: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara\n-00000cf0: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi\n-00000d00: 7374 7327 203d 3e20 2779 6573 272c 0a09 sts' => 'yes',..\n-00000d10: 0920 2020 2027 2d63 6f6e 6669 6746 696c . '-configFil\n-00000d20: 6527 203d 3e20 272d 6627 2c0a 0909 2020 e' => '-f',... \n-00000d30: 2020 272d 6c69 7374 2720 3d3e 205b 4f70 '-list' => [Op\n-00000d40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00000d50: 2720 3d3e 2027 7665 7262 6f73 6527 2c0a ' => 'verbose',.\n-00000d60: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00000d70: 7469 6f6e 2720 3d3e 2027 2d76 272c 0a09 tion' => '-v',..\n-00000d80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali\n-00000d90: 6173 2720 3d3e 2027 2d2d 7665 7262 6f73 as' => '--verbos\n-00000da0: 6527 292c 0a20 2020 2020 2020 2020 2020 e'),. \n-00000db0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000dc0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new\n-00000dd0: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri\n-00000de0: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '-\n-00000df0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-00000e00: 2d70 7269 6e74 2729 2c0a 0909 0909 4f70 -print'),.....Op\n-00000e10: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00000e20: 2720 3d3e 2027 6669 6c65 272c 0a09 0909 ' => 'file',....\n-00000e30: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio\n-00000e40: 6e27 203d 3e20 272d 6627 2c0a 2020 2020 n' => '-f',. \n-00000e50: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000e60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000e70: 2020 2020 2020 2020 272d 636c 5f61 6c69 '-cl_ali\n-00000e80: 6173 2720 3d3e 2027 2d2d 6669 6c65 272c as' => '--file',\n-00000e90: 0a20 2020 2020 2020 2020 2020 2020 2020 . \n-00000ea0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00000eb0: 2020 2020 2020 2020 2020 2020 2027 2d70 '-p\n-00000ec0: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'),\n-00000ed0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00000ee0: 2827 2d6e 616d 6527 203d 3e20 2762 6163 ('-name' => 'bac\n-00000ef0: 6b75 7044 6972 272c 0a09 0909 0909 2020 kupDir',...... \n-00000f00: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => '\n-00000f10: 6261 636b 7570 4469 7227 2c0a 0909 0909 backupDir',.....\n-00000f20: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' =>\n-00000f30: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt\n-00000f40: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name'\n-00000f50: 203d 3e20 2773 6572 6965 7327 2c0a 0909 => 'series',...\n-00000f60: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key'\n-00000f70: 203d 3e20 2773 6572 6965 7327 2c0a 0909 => 'series',...\n-00000f80: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-00000f90: 2720 3d3e 2027 6465 6661 756c 7427 292c ' => 'default'),\n-00000fa0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new\n-00000fb0: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee\n-00000fc0: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... \n-00000fd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00000fe0: 272d 2d6b 6565 7041 6c6c 272c 0a09 0909 '--keepAll',....\n-00000ff0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' \n-00001000: 3d3e 2027 6b65 6570 416c 6c27 2c0a 0909 => 'keepAll',...\n-00001010: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default\n-00001020: 2720 3d3e 2024 6b65 6570 416c 6c29 2c0a ' => $keepAll),.\n-00001030: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new(\n-00001040: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep\n-00001050: 5765 656b 6461 7927 2c0a 0909 0909 0920 Weekday',...... \n-00001060: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-00001070: 3d3e 2027 2d2d 6b65 6570 5765 656b 6461 => '--keepWeekda\n-00001080: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c\n-00001090: 665f 6b65 7927 203d 3e20 276b 6565 7057 f_key' => 'keepW\n-000010a0: 6565 6b64 6179 272c 0a09 0909 0909 2020 eekday',...... \n-000010b0: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y\n-000010c0: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option\n-000010d0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' =>\n-000010e0: 2027 6b65 6570 4669 7273 744f 6659 6561 'keepFirstOfYea\n-000010f0: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c\n-00001100: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-00001110: 6b65 6570 4669 7273 744f 6659 6561 7227 keepFirstOfYear'\n-00001120: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00001130: 6b65 7927 203d 3e20 276b 6565 7046 6972 key' => 'keepFir\n-00001140: 7374 4f66 5965 6172 272c 0a09 0909 0909 stOfYear',......\n-00001150: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => \n-00001160: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti\n-00001170: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001180: 3d3e 2027 6b65 6570 4c61 7374 4f66 5965 => 'keepLastOfYe\n-00001190: 6172 272c 0a09 0909 0909 2020 2020 272d ar',...... '-\n-000011a0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '-\n-000011b0: 2d6b 6565 704c 6173 744f 6659 6561 7227 -keepLastOfYear'\n-000011c0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-000011d0: 6b65 7927 203d 3e20 276b 6565 704c 6173 key' => 'keepLas\n-000011e0: 744f 6659 6561 7227 2c0a 0909 0909 0920 tOfYear',...... \n-000011f0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => '\n-00001200: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio\n-00001210: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' =\n-00001220: 3e20 276b 6565 7046 6972 7374 4f66 4d6f > 'keepFirstOfMo\n-00001230: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... '\n-00001240: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => '\n-00001250: 2d2d 6b65 6570 4669 7273 744f 664d 6f6e --keepFirstOfMon\n-00001260: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '-\n-00001270: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep\n-00001280: 4669 7273 744f 664d 6f6e 7468 272c 0a09 FirstOfMonth',..\n-00001290: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-000012a0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),.....\n-000012b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000012c0: 6d65 2720 3d3e 2027 6b65 6570 4c61 7374 me' => 'keepLast\n-000012d0: 4f66 4d6f 6e74 6827 2c0a 0909 0909 0920 OfMonth',...... \n-000012e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000012f0: 3d3e 2027 2d2d 6b65 6570 4c61 7374 4f66 => '--keepLastOf\n-00001300: 4d6f 6e74 6827 2c0a 0909 0909 0920 2020 Month',...... \n-00001310: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k\n-00001320: 6565 704c 6173 744f 664d 6f6e 7468 272c eepLastOfMonth',\n-00001330: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para\n-00001340: 6d27 203d 3e20 2779 6573 2729 2c0a 2020 m' => 'yes'),. \n-00001350: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001360: 2020 2020 2020 2020 2020 2020 2020 4f70 Op\n-00001370: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name\n-00001380: 2720 3d3e 2027 6669 7273 7444 6179 4f66 ' => 'firstDayOf\n-00001390: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... \n-000013a0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-000013b0: 272d 2d66 6972 7374 4461 794f 6657 6565 '--firstDayOfWee\n-000013c0: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c\n-000013d0: 665f 6b65 7927 203d 3e20 2766 6972 7374 f_key' => 'first\n-000013e0: 4461 794f 6657 6565 6b27 2c0a 0909 0909 DayOfWeek',.....\n-000013f0: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' \n-00001400: 3d3e 2027 5375 6e27 292c 0a09 0909 094f => 'Sun'),.....O\n-00001410: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001420: 6527 203d 3e20 276b 6565 7046 6972 7374 e' => 'keepFirst\n-00001430: 4f66 5765 656b 272c 0a09 0909 0909 2020 OfWeek',...... \n-00001440: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' =\n-00001450: 3e20 272d 2d6b 6565 7046 6972 7374 4f66 > '--keepFirstOf\n-00001460: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... \n-00001470: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke\n-00001480: 6570 4669 7273 744f 6657 6565 6b27 2c0a epFirstOfWeek',.\n-00001490: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param\n-000014a0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),....\n-000014b0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n\n-000014c0: 616d 6527 203d 3e20 276b 6565 704c 6173 ame' => 'keepLas\n-000014d0: 744f 6657 6565 6b27 2c0a 0909 0909 0920 tOfWeek',...... \n-000014e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' \n-000014f0: 3d3e 2027 2d2d 6b65 6570 4c61 7374 4f66 => '--keepLastOf\n-00001500: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... \n-00001510: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke\n-00001520: 6570 4c61 7374 4f66 5765 656b 272c 0a09 epLastOfWeek',..\n-00001530: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param'\n-00001540: 203d 3e20 2779 6573 2729 2c0a 2020 2020 => 'yes'),. \n-00001550: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001560: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti\n-00001570: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' \n-00001580: 3d3e 2027 6b65 6570 4475 706c 6963 6174 => 'keepDuplicat\n-00001590: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c\n-000015a0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '--\n-000015b0: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',.\n-000015c0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke\n-000015d0: 7927 203d 3e20 276b 6565 7044 7570 6c69 y' => 'keepDupli\n-000015e0: 6361 7465 272c 0a09 0909 0909 2020 2020 cate',...... \n-000015f0: 272d 6465 6661 756c 7427 203d 3e20 246b '-default' => $k\n-00001600: 6565 7044 7570 6c69 6361 7465 292c 0a20 eepDuplicate),. \n-00001610: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001620: 2020 2020 2020 2020 2020 2020 2020 204f O\n-00001630: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam\n-00001640: 6527 203d 3e20 276b 6565 704d 696e 4e75 e' => 'keepMinNu\n-00001650: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... \n-00001660: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001670: 272d 2d6b 6565 704d 696e 4e75 6d62 6572 '--keepMinNumber\n-00001680: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf\n-00001690: 5f6b 6579 2720 3d3e 2027 6b65 6570 4d69 _key' => 'keepMi\n-000016a0: 6e4e 756d 6265 7227 2c0a 0909 0909 0920 nNumber',...... \n-000016b0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' =>\n-000016c0: 2031 302c 0a09 0909 0909 2020 2020 272d 10,...... '-\n-000016d0: 7061 7474 6572 6e27 203d 3e20 275c 415c pattern' => '\\A\\\n-000016e0: 642b 5c5a 2729 2c0a 2020 2020 2020 2020 d+\\Z'),. \n-000016f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00001700: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option->\n-00001710: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => '\n-00001720: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',.\n-00001730: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op\n-00001740: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep\n-00001750: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',.....\n-00001760: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' =\n-00001770: 3e20 276b 6565 704d 6178 4e75 6d62 6572 > 'keepMaxNumber\n-00001780: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de\n-00001790: 6661 756c 7427 203d 3e20 302c 0a09 0909 fault' => 0,....\n-000017a0: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern'\n-000017b0: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\\A\\d+\\Z'),.\n-000017c0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000017d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-000017e0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na\n-000017f0: 6d65 2720 3d3e 2027 6b65 6570 5265 6c61 me' => 'keepRela\n-00001800: 7469 7665 272c 0a09 0909 0909 2020 2020 tive',...... \n-00001810: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => \n-00001820: 272d 2d6b 6565 7052 656c 6174 6976 6527 '--keepRelative'\n-00001830: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_\n-00001840: 6b65 7927 203d 3e20 276b 6565 7052 656c key' => 'keepRel\n-00001850: 6174 6976 6527 2c0a 0909 0909 0920 2020 ative',...... \n-00001860: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => \n-00001870: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... \n-00001880: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes\n-00001890: 2729 2c0a 0909 2020 2020 5d29 3b0a 0a24 '),... ]);..$\n-000018a0: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check(\n-000018b0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \\@ARG\n-000018c0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. \n-000018d0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $\n-000018e0: 4865 6c70 2c0a 0909 2027 2d69 676e 6f72 Help,... '-ignor\n-000018f0: 6541 6464 6974 696f 6e61 6c4b 6579 7327 eAdditionalKeys'\n-00001900: 203d 3e20 310a 2020 2020 2020 2020 2020 => 1. \n-00001910: 2020 2020 2020 2029 3b0a 0a6d 7920 2476 );..my $v\n-00001920: 6572 626f 7365 203d 2024 4368 6563 6b50 erbose = $CheckP\n-00001930: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou\n-00001940: 7450 6172 2827 7665 7262 6f73 6527 293b tPar('verbose');\n-00001950: 0a6d 7920 2470 7269 6e74 203d 2024 4368 .my $print = $Ch\n-00001960: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00001970: 7468 6f75 7450 6172 2827 7072 696e 7427 thoutPar('print'\n-00001980: 293b 0a6d 7920 2463 6f6e 6669 6746 696c );.my $configFil\n-00001990: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g\n-000019a0: 6574 4f70 7457 6974 6850 6172 2827 6669 etOptWithPar('fi\n-000019b0: 6c65 2729 3b0a 0a6d 7920 2462 6163 6b75 le');..my $backu\n-000019c0: 7044 6972 203d 2024 4368 6563 6b50 6172 pDir = $CheckPar\n-000019d0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar(\n-000019e0: 2762 6163 6b75 7044 6972 2729 3b0a 6d79 'backupDir');.my\n-000019f0: 2024 7365 7269 6573 203d 2024 4368 6563 $series = $Chec\n-00001a00: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith\n-00001a10: 5061 7228 2773 6572 6965 7327 293b 0a6d Par('series');.m\n-00001a20: 7920 246b 6565 7041 6c6c 203d 2024 4368 y $keepAll = $Ch\n-00001a30: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi\n-00001a40: 7468 5061 7228 276b 6565 7041 6c6c 2729 thPar('keepAll')\n-00001a50: 3b0a 6d79 2024 6b65 6570 5765 656b 6461 ;.my $keepWeekda\n-00001a60: 7920 3d20 2443 6865 636b 5061 722d 3e67 y = $CheckPar->g\n-00001a70: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke\n-00001a80: 6570 5765 656b 6461 7927 293b 0a6d 7920 epWeekday');.my \n-00001a90: 246b 6565 7046 6972 7374 4f66 5965 6172 $keepFirstOfYear\n-00001aa0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge\n-00001ab0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee\n-00001ac0: 7046 6972 7374 4f66 5965 6172 2729 3b0a pFirstOfYear');.\n-00001ad0: 6d79 2024 6b65 6570 4c61 7374 4f66 5965 my $keepLastOfYe\n-00001ae0: 6172 203d 2024 4368 6563 6b50 6172 2d3e ar = $CheckPar->\n-00001af0: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k\n-00001b00: 6565 704c 6173 744f 6659 6561 7227 293b eepLastOfYear');\n-00001b10: 0a6d 7920 246b 6565 7046 6972 7374 4f66 .my $keepFirstOf\n-00001b20: 4d6f 6e74 6820 3d20 2443 6865 636b 5061 Month = $CheckPa\n-00001b30: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar\n-00001b40: 2827 6b65 6570 4669 7273 744f 664d 6f6e ('keepFirstOfMon\n-00001b50: 7468 2729 3b0a 6d79 2024 6b65 6570 4c61 th');.my $keepLa\n-00001b60: 7374 4f66 4d6f 6e74 6820 3d20 2443 6865 stOfMonth = $Che\n-00001b70: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit\n-00001b80: 6850 6172 2827 6b65 6570 4c61 7374 4f66 hPar('keepLastOf\n-00001b90: 4d6f 6e74 6827 293b 0a6d 7920 2466 6972 Month');.my $fir\n-00001ba0: 7374 4461 794f 6657 6565 6b20 3d20 2443 stDayOfWeek = $C\n-00001bb0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00001bc0: 6974 6850 6172 2827 6669 7273 7444 6179 ithPar('firstDay\n-00001bd0: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke\n-00001be0: 6570 4669 7273 744f 6657 6565 6b20 3d20 epFirstOfWeek = \n-00001bf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001c00: 7457 6974 6850 6172 2827 6b65 6570 4669 tWithPar('keepFi\n-00001c10: 7273 744f 6657 6565 6b27 293b 0a6d 7920 rstOfWeek');.my \n-00001c20: 246b 6565 704c 6173 744f 6657 6565 6b20 $keepLastOfWeek \n-00001c30: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001c40: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n-00001c50: 4c61 7374 4f66 5765 656b 2729 3b0a 6d79 LastOfWeek');.my\n-00001c60: 2024 6b65 6570 4475 706c 6963 6174 6520 $keepDuplicate \n-00001c70: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get\n-00001c80: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep\n-00001c90: 4475 706c 6963 6174 6527 293b 0a6d 7920 Duplicate');.my \n-00001ca0: 246b 6565 704d 696e 4e75 6d62 6572 203d $keepMinNumber =\n-00001cb0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO\n-00001cc0: 7074 5769 7468 5061 7228 276b 6565 704d ptWithPar('keepM\n-00001cd0: 696e 4e75 6d62 6572 2729 3b0a 6d79 2024 inNumber');.my $\n-00001ce0: 6b65 6570 4d61 784e 756d 6265 7220 3d20 keepMaxNumber = \n-00001cf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp\n-00001d00: 7457 6974 6850 6172 2827 6b65 6570 4d61 tWithPar('keepMa\n-00001d10: 784e 756d 6265 7227 293b 0a6d 7920 246b xNumber');.my $k\n-00001d20: 6565 7052 656c 6174 6976 6520 3d20 2443 eepRelative = $C\n-00001d30: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW\n-00001d40: 6974 6850 6172 2827 6b65 6570 5265 6c61 ithPar('keepRela\n-00001d50: 7469 7665 2729 3b0a 0a69 6620 2824 7072 tive');..if ($pr\n-00001d60: 696e 7429 0a7b 0a20 2020 2024 4368 6563 int).{. $Chec\n-00001d70: 6b50 6172 2d3e 7072 696e 7428 293b 0a20 kPar->print();. \n-00001d80: 2020 2065 7869 7420 303b 0a7d 0a0a 6d79 exit 0;.}..my\n-00001d90: 2024 6469 723b 0a69 6620 2824 6261 636b $dir;.if ($back\n-00001da0: 7570 4469 7229 0a7b 0a20 2020 2024 6469 upDir).{. $di\n-00001db0: 7220 3d20 2462 6163 6b75 7044 6972 202e r = $backupDir .\n-00001dc0: 2027 2f27 202e 2473 6572 6965 7320 2e20 '/' .$series . \n-00001dd0: 272f 273b 0a7d 0a0a 6966 2028 2443 6865 '/';.}..if ($Che\n-00001de0: 636b 5061 722d 3e67 6574 4c69 7374 5061 ckPar->getListPa\n-00001df0: 7228 2929 0a7b 0a20 2020 2028 2464 6972 r()).{. ($dir\n-00001e00: 2920 3d20 2443 6865 636b 5061 722d 3e67 ) = $CheckPar->g\n-00001e10: 6574 4c69 7374 5061 7228 293b 0a7d 0a64 etListPar();.}.d\n-00001e20: 6965 2022 2448 656c 7022 2075 6e6c 6573 ie \"$Help\" unles\n-00001e30: 7320 2464 6972 206f 7220 2463 6f6e 6669 s $dir or $confi\n-00001e40: 6746 696c 653b 0a0a 6d79 2024 746f 6461 gFile;..my $toda\n-00001e50: 7920 3d20 6461 7465 546f 6f6c 732d 3e6e y = dateTools->n\n-00001e60: 6577 2829 3b0a 0a69 6620 2824 636f 6e66 ew();..if ($conf\n-00001e70: 6967 4669 6c65 290a 7b0a 2020 2020 2661 igFile).{. &a\n-00001e80: 6e61 6c79 7365 4f6c 6442 6163 6b75 7073 nalyseOldBackups\n-00001e90: 2824 6469 722c 2024 636f 6e66 6967 4669 ($dir, $configFi\n-00001ea0: 6c65 2c20 2474 6f64 6179 2c20 2476 6572 le, $today, $ver\n-00001eb0: 626f 7365 2c20 246b 6565 7041 6c6c 2c0a bose, $keepAll,.\n-00001ec0: 0909 2020 2020 2020 2024 6b65 6570 5765 .. $keepWe\n-00001ed0: 656b 6461 792c 2024 6b65 6570 4669 7273 ekday, $keepFirs\n-00001ee0: 744f 6659 6561 722c 2024 6b65 6570 4c61 tOfYear, $keepLa\n-00001ef0: 7374 4f66 5965 6172 2c0a 0909 2020 2020 stOfYear,... \n-00001f00: 2020 2024 6b65 6570 4669 7273 744f 664d $keepFirstOfM\n-00001f10: 6f6e 7468 2c20 246b 6565 704c 6173 744f onth, $keepLastO\n-00001f20: 664d 6f6e 7468 2c20 2466 6972 7374 4461 fMonth, $firstDa\n-00001f30: 794f 6657 6565 6b2c 0a09 0920 2020 2020 yOfWeek,... \n-00001f40: 2020 246b 6565 7046 6972 7374 4f66 5765 $keepFirstOfWe\n-00001f50: 656b 2c20 246b 6565 704c 6173 744f 6657 ek, $keepLastOfW\n-00001f60: 6565 6b2c 2024 6b65 6570 4475 706c 6963 eek, $keepDuplic\n-00001f70: 6174 652c 0a09 0920 2020 2020 2020 246b ate,... $k\n-00001f80: 6565 704d 696e 4e75 6d62 6572 2c20 246b eepMinNumber, $k\n-00001f90: 6565 704d 6178 4e75 6d62 6572 2c20 246b eepMaxNumber, $k\n-00001fa0: 6565 7052 656c 6174 6976 6529 3b0a 2020 eepRelative);. \n-00001fb0: 2020 6578 6974 2030 3b0a 7d0a 0a6f 7065 exit 0;.}..ope\n-00001fc0: 6e64 6972 2844 4952 2c20 2464 6972 2920 ndir(DIR, $dir) \n-00001fd0: 6f72 0a20 2020 2064 6965 2022 6361 6e6e or. die \"cann\n-00001fe0: 6f74 206f 7065 6e20 3c24 6469 723e 223b ot open <$dir>\";\n-00001ff0: 0a6d 7920 2824 656e 7472 792c 2040 656e .my ($entry, @en\n-00002000: 7472 6965 7329 3b0a 7768 696c 6520 2824 tries);.while ($\n-00002010: 656e 7472 7920 3d20 7265 6164 6469 7220 entry = readdir \n-00002020: 4449 5229 0a7b 0a20 2020 206d 7920 2465 DIR).{. my $e\n-00002030: 203d 2022 2464 6972 2f24 656e 7472 7922 = \"$dir/$entry\"\n-00002040: 3b0a 2020 2020 6e65 7874 2069 6620 282d ;. next if (-\n-00002050: 6c20 2465 2061 6e64 206e 6f74 202d 6420 l $e and not -d \n-00002060: 2465 293b 0a20 2020 2070 7573 6820 4065 $e);. push @e\n-00002070: 6e74 7269 6573 2c20 2465 6e74 7279 3b0a ntries, $entry;.\n-00002080: 7d0a 636c 6f73 6564 6972 2844 4952 293b }.closedir(DIR);\n-00002090: 0a0a 6d79 2024 7072 4c6f 6720 3d20 7072 ..my $prLog = pr\n-000020a0: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki\n-000020b0: 6e64 2720 3d3e 205b 2749 3a49 4e46 4f27 nd' => ['I:INFO'\n-000020c0: 2c20 2757 3a57 4152 4e49 4e47 272c 2027 , 'W:WARNING', '\n-000020d0: 453a 4552 524f 5227 2c0a 0909 0909 2020 E:ERROR',..... \n-000020e0: 2020 2020 2753 3a53 5441 5449 5354 4943 'S:STATISTIC\n-000020f0: 272c 2027 443a 4445 4255 4727 2c20 2756 ', 'D:DEBUG', 'V\n-00002100: 3a56 4552 5349 4f4e 275d 293b 0a0a 2470 :VERSION']);..$p\n-00002110: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki\n-00002120: 6e64 2720 3d3e 2027 5627 2c0a 0920 2020 nd' => 'V',.. \n-00002130: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => [\"s\n-00002140: 746f 7265 4261 636b 7570 6c73 2e70 6c2c toreBackupls.pl,\n-00002150: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC\n-00002160: 4b55 5056 4552 5349 4f4e 225d 290a 2020 KUPVERSION\"]). \n-00002170: 2020 6966 2024 7665 7262 6f73 653b 0a0a if $verbose;..\n-00002180: 0a6d 7920 2469 203d 2031 3b0a 666f 7265 .my $i = 1;.fore\n-00002190: 6163 6820 2465 6e74 7279 2028 736f 7274 ach $entry (sort\n-000021a0: 2040 656e 7472 6965 7329 0a7b 0a20 2020 @entries).{. \n-000021b0: 206e 6578 7420 756e 6c65 7373 2024 656e next unless $en\n-000021c0: 7472 7920 3d7e 0a09 2f5c 4128 5c64 7b34 try =~../\\A(\\d{4\n-000021d0: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\\.(\\d{2})\\.(\\d\n-000021e0: 7b32 7d29 5f28 5c64 7b32 7d29 5c2e 285c {2})_(\\d{2})\\.(\\\n-000021f0: 647b 327d 295c 2e28 5c64 7b32 7d29 5c5a d{2})\\.(\\d{2})\\Z\n-00002200: 2f6f 3b0a 2020 2020 6d79 2024 6420 3d20 /o;. my $d = \n-00002210: 6461 7465 546f 6f6c 732d 3e6e 6577 2827 dateTools->new('\n-00002220: 2d79 6561 7227 203d 3e20 2431 2c0a 0909 -year' => $1,...\n-00002230: 0920 2020 272d 6d6f 6e74 6827 203d 3e20 . '-month' => \n-00002240: 2432 2c0a 0909 0920 2020 272d 6461 7927 $2,.... '-day'\n-00002250: 203d 3e20 2433 293b 0a20 2020 206d 7920 => $3);. my \n-00002260: 2840 6129 203d 2028 2224 6469 722f 2465 (@a) = (\"$dir/$e\n-00002270: 6e74 7279 2f2e 7374 6f72 6542 6163 6b75 ntry/.storeBacku\n-00002280: 704c 696e 6b73 2f6c 696e 6b46 726f 6d2a pLinks/linkFrom*\n-00002290: 2229 3b0a 2020 2020 6d79 2028 4065 2920 \");. my (@e) \n-000022a0: 3d20 3c40 613e 3b0a 2020 2020 7072 696e = <@a>;. prin\n-000022b0: 7466 2022 2533 6420 2022 2c20 2469 2b2b tf \"%3d \", $i++\n-000022c0: 3b0a 2020 2020 7072 696e 7420 2464 2d3e ;. print $d->\n-000022d0: 6765 7444 6174 6554 696d 6528 272d 666f getDateTime('-fo\n-000022e0: 726d 6174 2720 3d3e 2027 2557 2025 5820 rmat' => '%W %X \n-000022f0: 2544 2025 5927 292c 2022 2020 2024 656e %D %Y'), \" $en\n-00002300: 7472 7920 2020 222c 0a20 2020 2024 746f try \",. $to\n-00002310: 6461 792d 3e64 656c 7461 496e 4461 7973 day->deltaInDays\n-00002320: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' =\n-00002330: 3e20 2464 293b 0a23 2020 2020 7072 696e > $d);.# prin\n-00002340: 7420 2220 206e 6f74 2066 696e 6973 6865 t \" not finishe\n-00002350: 6420 2220 6966 2028 2d65 2022 2464 6972 d \" if (-e \"$dir\n-00002360: 2f24 656e 7472 792f 2463 6865 636b 5375 /$entry/$checkSu\n-00002370: 6d46 696c 652e 6e6f 7446 696e 6973 6865 mFile.notFinishe\n-00002380: 6422 293b 0a20 2020 2070 7269 6e74 2022 d\");. print \"\n-00002390: 2020 6e6f 7420 6669 6e69 7368 6564 2022 not finished \"\n-000023a0: 0a09 756e 6c65 7373 2026 3a3a 6368 6563 ..unless &::chec\n-000023b0: 6b49 6642 6163 6b75 7057 6173 4669 6e69 kIfBackupWasFini\n-000023c0: 7368 6564 2827 2d62 6163 6b75 7044 6972 shed('-backupDir\n-000023d0: 2720 3d3e 2022 2464 6972 2f24 656e 7472 ' => \"$dir/$entr\n-000023e0: 7922 2c0a 0909 0909 0920 2020 272d 7072 y\",...... '-pr\n-000023f0: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,.\n-00002400: 0909 0920 2020 272d 636f 756e 7427 203d ... '-count' =\n-00002410: 3e20 3330 293b 0a20 2020 2070 7269 6e74 > 30);. print\n-00002420: 2022 2061 6666 6563 7465 6420 6279 2075 \" affected by u\n-00002430: 6e72 6573 6f6c 7665 6420 6c69 6e6b 7322 nresolved links\"\n-00002440: 0a09 6966 202d 6520 2224 6469 722f 2465 ..if -e \"$dir/$e\n-00002450: 6e74 7279 2f2e 7374 6f72 6542 6163 6b75 ntry/.storeBacku\n-00002460: 704c 696e 6b73 2f6c 696e 6b46 696c 652e pLinks/linkFile.\n-00002470: 627a 3222 206f 7220 4065 3b0a 2020 2020 bz2\" or @e;. \n-00002480: 7072 696e 7420 225c 6e22 3b0a 0a20 2020 print \"\\n\";.. \n-00002490: 2069 6620 2824 7665 7262 6f73 6529 0a20 if ($verbose). \n-000024a0: 2020 207b 0a09 6d79 2024 7269 6620 3d20 {..my $rif = \n-000024b0: 7265 6164 496e 666f 4669 6c65 2d3e 6e65 readInfoFile->ne\n-000024c0: 7728 272d 6368 6563 6b53 756d 4669 6c65 w('-checkSumFile\n-000024d0: 2720 3d3e 0a09 0909 0920 2020 2020 2224 ' =>..... \"$\n-000024e0: 6469 722f 2465 6e74 7279 2f24 6368 6563 dir/$entry/$chec\n-000024f0: 6b53 756d 4669 6c65 222c 0a09 0909 0920 kSumFile\",..... \n-00002500: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => \n-00002510: 2470 724c 6f67 293b 0a0a 096d 7920 246f $prLog);...my $o\n-00002520: 7074 3b0a 0966 6f72 6561 6368 2024 6f70 pt;..foreach $op\n-00002530: 7420 2824 7269 662d 3e67 6574 416c 6c49 t ($rif->getAllI\n-00002540: 6e66 6f4f 7074 7328 2929 0a09 7b0a 0920 nfoOpts())..{.. \n-00002550: 2020 206d 7920 2469 203d 2024 7269 662d my $i = $rif-\n-00002560: 3e67 6574 496e 666f 5769 7468 5061 7228 >getInfoWithPar(\n-00002570: 246f 7074 293b 0a09 2020 2020 7072 696e $opt);.. prin\n-00002580: 7420 225c 7424 6f70 7420 2d3e 2022 2c20 t \"\\t$opt -> \", \n-00002590: 7265 6620 2469 2065 7120 2741 5252 4159 ref $i eq 'ARRAY\n-000025a0: 2720 3f20 2240 2469 2220 3a20 2469 2c20 ' ? \"@$i\" : $i, \n-000025b0: 225c 6e22 3b0a 097d 0a20 2020 207d 0a7d \"\\n\";..}. }.}\n-000025c0: 0a0a 6578 6974 2030 3b0a 0a0a 2323 2323 ..exit 0;...####\n-000025d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000025e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-000025f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00002600: 2323 2323 2323 2323 2323 2323 2323 2323 ################\n-00002610: 2323 0a73 7562 2061 6e61 6c79 7365 4f6c ##.sub analyseOl\n-00002620: 6442 6163 6b75 7073 0a7b 0a20 2020 206d dBackups.{. m\n-00002630: 7920 2824 6469 722c 2024 636f 6e66 6967 y ($dir, $config\n-00002640: 4669 6c65 2c20 2474 6f64 6179 2c20 2476 File, $today, $v\n-00002650: 6572 626f 7365 2c20 246b 6565 7041 6c6c erbose, $keepAll\n-00002660: 2c20 246b 6565 7057 6565 6b64 6179 2c0a , $keepWeekday,.\n-00002670: 0924 6b65 6570 4669 7273 744f 6659 6561 .$keepFirstOfYea\n-00002680: 722c 2024 6b65 6570 4c61 7374 4f66 5965 r, $keepLastOfYe\n-00002690: 6172 2c20 246b 6565 7046 6972 7374 4f66 ar, $keepFirstOf\n-000026a0: 4d6f 6e74 682c 0a09 246b 6565 704c 6173 Month,..$keepLas\n-000026b0: 744f 664d 6f6e 7468 2c20 2466 6972 7374 tOfMonth, $first\n-000026c0: 4461 794f 6657 6565 6b2c 2024 6b65 6570 DayOfWeek, $keep\n-000026d0: 4669 7273 744f 6657 6565 6b2c 0a09 246b FirstOfWeek,..$k\n-000026e0: 6565 704c 6173 744f 6657 6565 6b2c 2024 eepLastOfWeek, $\n-000026f0: 6b65 6570 4475 706c 6963 6174 652c 2024 keepDuplicate, $\n-00002700: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,..\n-00002710: 246b 6565 704d 6178 4e75 6d62 6572 2c20 $keepMaxNumber, \n-00002720: 246b 6565 7052 656c 6174 6976 6529 203d $keepRelative) =\n-00002730: 2040 5f3b 0a0a 2020 2020 6d79 2024 7072 @_;.. my $pr\n-00002740: 4c6f 6720 3d20 7072 696e 744c 6f67 2d3e Log = printLog->\n-00002750: 6e65 7728 272d 7769 7468 5469 6d65 2720 new('-withTime' \n-00002760: 3d3e 2027 6e6f 272c 0a09 0909 2020 2020 => 'no',.... \n-00002770: 2020 272d 7769 7468 5049 4427 203d 3e20 '-withPID' => \n-00002780: 276e 6f27 293b 0a0a 0a20 2020 206d 7920 'no');... my \n-00002790: 2461 6c6c 4c69 6e6b 7320 3d20 6c61 7465 $allLinks = late\n-000027a0: 4c69 6e6b 732d 3e6e 6577 2827 2d64 6972 Links->new('-dir\n-000027b0: 7327 203d 3e20 5b24 6469 725d 2c0a 0909 s' => [$dir],...\n-000027c0: 0909 2020 272d 6b69 6e64 2720 3d3e 2027 .. '-kind' => '\n-000027d0: 7265 6375 7273 6976 6553 6561 7263 6827 recursiveSearch'\n-000027e0: 2c0a 0909 0909 2020 272d 7665 7262 6f73 ,..... '-verbos\n-000027f0: 6527 203d 3e20 2476 6572 626f 7365 2c0a e' => $verbose,.\n-00002800: 0909 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' =\n-00002810: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. \n-00002820: 6d79 2024 7374 6174 4465 6c4f 6c64 4261 my $statDelOldBa\n-00002830: 636b 7570 4469 7273 203d 0a09 7374 6174 ckupDirs =..stat\n-00002840: 6973 7469 6344 656c 6574 654f 6c64 4261 isticDeleteOldBa\n-00002850: 636b 7570 4469 7273 2d3e 6e65 7728 272d ckupDirs->new('-\n-00002860: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog\n-00002870: 293b 0a20 2020 206d 7920 2464 656c 4f6c );. my $delOl\n-00002880: 6420 3d0a 0964 656c 6574 654f 6c64 4261 d =..deleteOldBa\n-00002890: 636b 7570 4469 7273 2d3e 6e65 7728 272d ckupDirs->new('-\n-000028a0: 7461 7267 6574 4469 7227 203d 3e20 2464 targetDir' => $d\n-000028b0: 6972 2c0a 0909 0909 2027 2d64 6f4e 6f74 ir,..... '-doNot\n-000028c0: 4465 6c65 7465 2720 3d3e 2075 6e64 6566 Delete' => undef\n-000028d0: 2c0a 0909 0909 2027 2d63 6865 636b 5375 ,..... '-checkSu\n-000028e0: 6d46 696c 6527 203d 3e20 246d 6169 6e3a mFile' => $main:\n-000028f0: 3a63 6865 636b 5375 6d46 696c 652c 0a09 :checkSumFile,..\n-00002900: 0909 0920 272d 6163 7442 6163 6b75 7044 ... '-actBackupD\n-00002910: 6972 2720 3d3e 2075 6e64 6566 2c0a 0909 ir' => undef,...\n-00002920: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $\n-00002930: 7072 4c6f 672c 0a09 0909 0920 272d 746f prLog,..... '-to\n-00002940: 6461 7927 203d 3e20 2474 6f64 6179 2c0a day' => $today,.\n-00002950: 0909 0909 2027 2d6b 6565 7046 6972 7374 .... '-keepFirst\n-00002960: 4f66 5965 6172 2720 3d3e 2024 6b65 6570 OfYear' => $keep\n-00002970: 4669 7273 744f 6659 6561 722c 0a09 0909 FirstOfYear,....\n-00002980: 0920 272d 6b65 6570 4c61 7374 4f66 5965 . '-keepLastOfYe\n-00002990: 6172 2720 3d3e 2024 6b65 6570 4c61 7374 ar' => $keepLast\n-000029a0: 4f66 5965 6172 2c0a 0909 0909 2027 2d6b OfYear,..... '-k\n-000029b0: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth'\n-000029c0: 203d 3e20 246b 6565 7046 6972 7374 4f66 => $keepFirstOf\n-000029d0: 4d6f 6e74 682c 0a09 0909 0920 272d 6b65 Month,..... '-ke\n-000029e0: 6570 4c61 7374 4f66 4d6f 6e74 6827 203d epLastOfMonth' =\n-000029f0: 3e20 246b 6565 704c 6173 744f 664d 6f6e > $keepLastOfMon\n-00002a00: 7468 2c0a 0909 0909 2027 2d66 6972 7374 th,..... '-first\n-00002a10: 4461 794f 6657 6565 6b27 203d 3e20 2466 DayOfWeek' => $f\n-00002a20: 6972 7374 4461 794f 6657 6565 6b2c 0a09 irstDayOfWeek,..\n-00002a30: 0909 0920 272d 6b65 6570 4669 7273 744f ... '-keepFirstO\n-00002a40: 6657 6565 6b27 203d 3e20 246b 6565 7046 fWeek' => $keepF\n-00002a50: 6972 7374 4f66 5765 656b 2c0a 0909 0909 irstOfWeek,.....\n-00002a60: 2027 2d6b 6565 704c 6173 744f 6657 6565 '-keepLastOfWee\n-00002a70: 6b27 203d 3e20 246b 6565 704c 6173 744f k' => $keepLastO\n-00002a80: 6657 6565 6b2c 0a09 0909 0920 272d 6b65 fWeek,..... '-ke\n-00002a90: 6570 416c 6c27 203d 3e20 246b 6565 7041 epAll' => $keepA\n-00002aa0: 6c6c 2c0a 0909 0909 2027 2d6b 6565 7052 ll,..... '-keepR\n-00002ab0: 656c 6174 6976 6527 203d 3e20 246b 6565 elative' => $kee\n-00002ac0: 7052 656c 6174 6976 652c 0a09 0909 0920 pRelative,..... \n-00002ad0: 272d 6b65 6570 5765 656b 6461 7927 203d '-keepWeekday' =\n-00002ae0: 3e20 246b 6565 7057 6565 6b64 6179 2c0a > $keepWeekday,.\n-00002af0: 0909 0909 2027 2d6b 6565 7044 7570 6c69 .... '-keepDupli\n-00002b00: 6361 7465 2720 3d3e 2024 6b65 6570 4475 cate' => $keepDu\n-00002b10: 706c 6963 6174 652c 0a09 0909 0920 272d plicate,..... '-\n-00002b20: 6b65 6570 4d69 6e4e 756d 6265 7227 203d keepMinNumber' =\n-00002b30: 3e20 246b 6565 704d 696e 4e75 6d62 6572 > $keepMinNumber\n-00002b40: 2c0a 0909 0909 2027 2d6b 6565 704d 6178 ,..... '-keepMax\n-00002b50: 4e75 6d62 6572 2720 3d3e 2024 6b65 6570 Number' => $keep\n-00002b60: 4d61 784e 756d 6265 722c 0a09 0909 0920 MaxNumber,..... \n-00002b70: 272d 6c61 7465 4c69 6e6b 7350 6172 616d '-lateLinksParam\n-00002b80: 2720 3d3e 2031 2c0a 0909 0909 2027 2d61 ' => 1,..... '-a\n-00002b90: 6c6c 4c69 6e6b 7327 203d 3e20 2461 6c6c llLinks' => $all\n-00002ba0: 4c69 6e6b 732c 0a09 0909 0920 272d 7374 Links,..... '-st\n-00002bb0: 6174 4465 6c4f 6c64 4261 636b 7570 4469 atDelOldBackupDi\n-00002bc0: 7273 2720 3d3e 0a09 0909 0920 2473 7461 rs' =>..... $sta\n-00002bd0: 7444 656c 4f6c 6442 6163 6b75 7044 6972 tDelOldBackupDir\n-00002be0: 732c 0a09 0909 0920 272d 666c 6174 4f75 s,..... '-flatOu\n-00002bf0: 7470 7574 2720 3d3e 2027 7965 7327 0a09 tput' => 'yes'..\n-00002c00: 0909 0920 293b 0a20 2020 2024 6465 6c4f ... );. $delO\n-00002c10: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups\n-00002c20: 2829 3b0a 7d0a ();.}.\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"}]}]}]}]}